Skip to content

Commit 5a0581e

Browse files
authored
Merge pull request #80 from chenchaoyi/chore/release-v1.1.0
chore(release): v1.1.0
2 parents 203e613 + 48e568a commit 5a0581e

4 files changed

Lines changed: 112 additions & 11 deletions

File tree

CHANGELOG.md

Lines changed: 59 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,67 @@ behaviours between releases.
1111

1212
## [Unreleased]
1313

14+
## [1.1.0] — 2026-05-17
15+
16+
The Wi-Fi panel grows two hands. You can now associate an SSID
17+
directly from its detail modal (`j`), and on first save the
18+
credential goes into your **login keychain behind a Touch ID
19+
ACL** — every subsequent join is a single biometric tap rather
20+
than an admin-password sheet. The TUI also picks up a branded
21+
title bar, plus a stack of helper polish and display fixes.
22+
1423
### Added
1524
- **Join a Wi-Fi network from its detail page (`j`).** New binding
16-
on the Wi-Fi detail modal opens a confirmation prompt — including
17-
a "not hitless, ~2-5 s gap" warning — and on confirm associates
18-
via a new `diting-tianer associate` helper subcommand. Networks
19-
with a saved Keychain password join silently; new networks get
20-
a native macOS password sheet rendered by the helper bundle
21-
(with a "Remember this network" checkbox that writes back to
22-
the System Keychain). Enterprise / 802.1X is refused with a
23-
hint to use the system Wi-Fi menu once. `c` (force re-roam) is
24-
unchanged. See `openspec/changes/wifi-connect-from-detail/`.
25+
on the Wi-Fi detail modal opens a confirmation prompt —
26+
including a "not hitless, ~2-5 s gap" warning — and on confirm
27+
associates via a new `diting-tianer associate` helper
28+
subcommand. Networks with a saved password join after a Touch
29+
ID tap; new networks get a native macOS password sheet rendered
30+
by the helper bundle (with a "Remember this network" checkbox).
31+
Enterprise / 802.1X is refused with a hint to use the system
32+
Wi-Fi menu once. `c` (force re-roam) is unchanged. See
33+
`openspec/changes/archive/2026-05-16-wifi-connect-from-detail/`.
34+
- **Wi-Fi passwords live in the login keychain behind Touch ID.**
35+
The helper persists its own copy of the password under the
36+
`diting Wi-Fi` service namespace with a
37+
`SecAccessControlCreateWithFlags(.userPresence, …)` ACL.
38+
macOS unlocks it with Touch ID on capable hardware and falls
39+
back to the **login** password (not the admin password) when
40+
biometric is unavailable. Previous PRs tried to read Apple's
41+
System-Keychain AirPort items directly — that path requires
42+
an admin sheet on every call, which is unusable. See
43+
`openspec/changes/archive/2026-05-17-wifi-keychain-touch-id/`.
44+
- **Branded title bar.** The top status line is now a flat band
45+
carrying the radar mark + `diting v<version>` — the same
46+
pixel-art beast you see in `assets/logo-mark.svg`.
47+
48+
### Fixed
49+
- **Router unreachability copy.** When the Router probe gets no
50+
ICMP reply but the WAN probe still works, the diagnostics line
51+
reads `Router (no ICMP reply)` / `Router (ICMP 无响应)` instead
52+
of the misleading "unreachable" — many home routers silently
53+
drop ICMP echo but still forward traffic.
54+
- **Tuya BLE alias + "samples over <1s".** Tuya devices now
55+
resolve via the vendor alias map (no more raw IEEE registrant
56+
string), and the BLE detail's RSSI-history footer reads
57+
`samples over <1s` instead of `samples over 0s` when the
58+
history spans less than a second.
59+
- **`diting-tianer associate` polish.** `-g -n` flags on the
60+
`open` outer→inner spawn so the helper doesn't focus-steal
61+
during a join; early-exit when already on the target SSID;
62+
multiple CWKeychain-signature fallbacks; Keychain READ/WRITE
63+
goes through `Security.framework` `SecItem*` rather than the
64+
private `CWKeychain` selectors.
65+
66+
### Migration note
67+
The Touch ID change relocates saved Wi-Fi passwords from Apple's
68+
System Keychain to diting's own login-keychain namespace. On
69+
first join after upgrade, every previously-saved SSID will fall
70+
back to the password sheet once — confirm the password (or paste
71+
from the system Wi-Fi prefs) and tick "Remember" again. The
72+
helper bundle's cdhash also moves with the
73+
`feat(macos-helper)!` change, so first launch re-grants Location
74+
+ Bluetooth + Notifications once.
2575

2676
## [1.0.12] — 2026-05-16
2777

docs/zh/CHANGELOG.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,57 @@
88
[Semantic Versioning](https://semver.org/)`v0.x` 阶段允许破坏性的次要
99
行为变更。
1010

11+
## [Unreleased]
12+
13+
## [1.1.0] — 2026-05-17
14+
15+
Wi-Fi 面板长出两只手。现在可以直接在某个 SSID 的详情面板里按 `j`
16+
让 diting 切过去;首次保存密码会落进 **登录钥匙串、并挂上 Touch ID
17+
ACL**,后续每次连回这个 SSID 只需要一次指纹,不再弹 admin 密码框。
18+
TUI 顶部也换成了带 logo 的品牌标题栏,外加一堆 helper 抛光和文案
19+
修复。
20+
21+
### 新增
22+
- **从 Wi-Fi 详情面板加入网络(`j`)。** Wi-Fi 详情弹窗新加按键,
23+
打开一个确认提示——里面会明确写「这一跳不是无缝的,大概有
24+
2-5 秒断连」——确认之后由新加的 `diting-tianer associate`
25+
helper 子命令完成关联。已保存密码的网络按一次 Touch ID 就连过去;
26+
新网络会由 helper bundle 弹一个原生 macOS 密码 sheet(带「记住
27+
这个网络」勾选框)。企业 / 802.1X 网络会被拒绝,提示用户先用
28+
系统 Wi-Fi 菜单连一次。`c`(强制 re-roam)行为不变。详见
29+
`openspec/changes/archive/2026-05-16-wifi-connect-from-detail/`
30+
- **Wi-Fi 密码改存登录钥匙串,并由 Touch ID 守门。** helper 把自己
31+
那份密码以 `diting Wi-Fi` 作为 service 命名空间存入登录钥匙串,
32+
ACL 通过 `SecAccessControlCreateWithFlags(.userPresence, …)`
33+
配置。有 Touch ID 的机器解锁时按指纹即可;没有 Touch ID 的机器
34+
退回到 **登录密码**(不是 admin 密码)。之前的 PR 尝试直接读
35+
Apple 自己的系统钥匙串 AirPort 项目,那条路要求每次都弹 admin
36+
sheet,体验不可用。详见
37+
`openspec/changes/archive/2026-05-17-wifi-keychain-touch-id/`
38+
- **品牌标题栏。** TUI 顶部状态条改成扁平 band,挂上雷达 logo 和
39+
`diting v<version>` —— 就是 `assets/logo-mark.svg` 里那只像素兽。
40+
41+
### 修复
42+
- **网关不可达的文案。** 当网关 ICMP 探测没回应、但 WAN TCP 还能
43+
通时,诊断行从误导性的「不可达」改成 `Router (ICMP 无响应)`
44+
/ `Router (no ICMP reply)`——很多家用路由器默认丢 ICMP echo,
45+
但流量是能转发的。
46+
- **Tuya BLE 别名 + 「samples over <1s」。** Tuya 设备现在能通过
47+
vendor 别名表转成短名(不再显示原始 IEEE 注册商字符串);BLE 详情
48+
里 RSSI 历史的页脚,时间跨度不足 1 秒时显示 `samples over <1s`
49+
不再显示 `samples over 0s`
50+
- **`diting-tianer associate` 抛光。** `open` 的 outer→inner 重启
51+
加上 `-g -n` 标志,连接过程中不再抢焦点;已经在目标 SSID 上时
52+
直接 early-exit;CWKeychain 多签名兜底;钥匙串读写从私有
53+
`CWKeychain` 选择子换成 `Security.framework``SecItem*`
54+
55+
### 迁移说明
56+
Touch ID 改造把已保存的 Wi-Fi 密码从 Apple 系统钥匙串迁到了 diting
57+
自己的登录钥匙串命名空间。升级后第一次连之前保存过的 SSID 时,会
58+
弹回密码 sheet 一次——确认密码(或者从系统 Wi-Fi 偏好里粘过来)
59+
后重新勾选「记住」就行。同时 `feat(macos-helper)!` 改动让 bundle 的
60+
cdhash 也变了,所以首次启动要重新授权一次 Location + 蓝牙 + 通知。
61+
1162
## [1.0.12] — 2026-05-16
1263

1364
针对 v1.0.11 用户反馈的两个相关 helper bundle 修复:TUI 运行期间

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "diting"
3-
version = "1.0.12"
3+
version = "1.1.0"
44
description = "macOS terminal listening post for Wi-Fi, BLE, link health, and the RF environment — your Mac hears more than it tells you"
55
readme = "README.md"
66
license = "MIT"

uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)