29 Commits
Author SHA1 Message Date
Qiu Yuzhou eca913f2ab style: emphasize system proxy action buttons 2026-10-28 19:05:56 +08:00
Qiu Yuzhou 3e3749e3a6 feat: show runtime status dots in menu bar 2026-10-28 18:56:07 +08:00
Qiu Yuzhou 8d1c1260ee fix(l10n): use natural Chinese rule preset label 2026-10-26 02:12:53 +08:00
Qiu Yuzhou 813ae99090 style(ui): refine picker presentation 2026-10-25 14:32:12 +08:00
Qiu Yuzhou f6abd4343e feat(rules)!: add isolated routing presets
Add Mainland China proxy routing with independent rule workspaces.
Preserve existing routing choices through equivalent preset mappings.

BREAKING CHANGE: existing custom rules and enablement settings are
not migrated. Recreate them in the appropriate preset.
2026-10-25 14:32:12 +08:00
Qiu Yuzhou c708cd8d19 feat(ui): debounce transient status rows via shared display gate
The home run-control card and the menu-bar status card render the agent
and system-proxy status rows straight from snapshot replacements, so fast
operations (e.g. proxy mode switches) flash transient states like
"applying" before settling.

Add a presentation-layer debounce shared by both surfaces:

- TransientDelayGate: per-stream gate where stable values display
  immediately, transient values (starting/applying/repairing) display
  after 400 ms and are dropped when superseded, and displayed transients
  are held for at least 400 ms.
- StatusDisplayModel: app-level shared model deriving agent and
  system-proxy payloads (row + detail + hint) from workflow snapshots
  through two independent gates; domain facts keep their cadence.
- Wire the model through the composition root into RuntimeControlCard
  and StatusCardView; toggles, approval actions, the difference view and
  target/mode rows keep reading the raw snapshot.
2026-10-24 02:22:39 +08:00
Qiu Yuzhou c3a5cccb09 feat(home): add runtime status dots 2026-10-23 19:31:30 +08:00
Qiu Yuzhou ad73668732 style(home): emphasize activation action 2026-10-21 16:19:59 +08:00
Qiu Yuzhou ba01e305c5 feat(servers): mark groups containing the active target with a hollow bolt
Ancestor groups of the active target now show a hollow bolt beside the
existing filled bolt on the target itself, in the servers tree, the
favorites table and the home target browser; the node detail subtitle
shows "含活动目标". The derivation lives in
CatalogTreeSnapshot.ancestors(of:) so every surface shares one rule
while activeTargetID stays a runtime fact outside the catalog
projection. Groups activated directly keep the filled bolt and leave
their member rows unmarked.
2026-10-20 01:03:54 +08:00
Qiu Yuzhou 9cd1bd1961 fix(home): rename terminal proxy command card 2026-10-16 03:40:17 +08:00
Qiu Yuzhou cc0f0a9513 style(home): refine control card presentation 2026-10-16 00:10:15 +08:00
Qiu Yuzhou d3fc15dfdf refactor(ui): remove home quick action card 2026-10-15 23:03:15 +08:00
Qiu Yuzhou ab5479a7e7 fix(ui): clarify proxy mode server requirement 2026-10-15 22:15:30 +08:00
Qiu Yuzhou 3f900b7b03 fix: remove bulk connectivity test controls 2026-10-15 21:08:29 +08:00
Qiu Yuzhou 4a85cf41f7 feat(localization): cover all app-facing text in Chinese and English 2026-10-15 20:03:37 +08:00
Qiu Yuzhou 100795fd15 fix(connectivity): rename test button to latency test 2026-10-14 16:20:00 +08:00
Qiu Yuzhou 03f996b3f9 fix(home): refine target card layout 2026-10-14 16:14:52 +08:00
Qiu Yuzhou fc3ecd5324 fix(home): clarify runtime control labels 2026-10-14 15:05:32 +08:00
Qiu Yuzhou 0903c0b231 refactor(home): extract dashboard card views 2026-10-14 15:05:20 +08:00
Qiu Yuzhou 0d95a0edfd refactor(home): split card views into separate files 2026-10-14 14:20:59 +08:00
Qiu Yuzhou 520c459713 fix(home): rebalance dashboard column layout 2026-10-14 14:15:39 +08:00
Qiu Yuzhou 7cf04544ce feat(ng2): add Nushell and Windows proxy environment commands 2026-10-14 12:27:25 +08:00
Qiu Yuzhou a5a341edc4 fix(home): improve selected target contrast 2026-10-14 11:36:35 +08:00
Qiu Yuzhou 790e2a26fa feat(home): add target catalog and connectivity testing 2026-10-14 11:19:07 +08:00
Qiu Yuzhou 2f0c0d7676 feat: separate local and LAN proxy listeners 2026-10-13 03:58:03 +08:00
Qiu Yuzhou c49d605a5b chore(ng2): remove fork issue references from comments 2026-10-13 00:38:06 +08:00
Qiu Yuzhou 1a6af3d467 refactor(home): drop server list card from home page
Remove TargetTreeCard, its browsing state HomeServerListState and the
dedicated tests; home now shows mode, runtime control, terminal command
and quick action cards only. ActivationFeedbackState stays shared by
the servers sidebar and group detail activation entries.
2026-10-09 17:23:50 +08:00
Qiu Yuzhou 308d9885d2 fix(home): disable server list keyboard focus 2026-10-06 13:13:46 +08:00
Qiu Yuzhou fb428f12bc refactor(app): 按分层重组 App/ 源码目录
App/ 根目录原有 73 个散落源文件,已无法从目录读出任何分组信息。

按「目录即分层」重组为 Composition / Application / Presentation / UI /
PlatformEffects / Resources 六个目录,UI 层再按子视图分目录(Workspace、
Home、Servers(含 Plugin)、Subscriptions、Rules、Settings、Diagnostics、
StatusMenu)。纯移动:类型名、模块名与 import 均未改动,App/ 根层不再有
散落文件。

配套改动:

- project.yml:Core 测试镜像的 excludes 由裸文件名改为 `**/` 递归形式。
  XcodeGen 的 exclude 不跨 `/`,裸名只匹配 App 根层;MainApp.swift 下移后
  旧写法会静默失效,把 @main 组合根编进测试镜像。info.path 与
  entitlements.path 指向 App/Resources/;并排除 `**/*.md`——App/ 下任何
  非源码文件都会被 XcodeGen 收进 Resources 阶段并封进签名后的 bundle。
- SkeletonTests 的架构守卫由「默认扫描全部 App/ + 7 个豁免文件 + 1 个豁免
  前缀 + 4 个豁免目录」改为正面圈定 App/UI/,豁免登记全部删除;新增运行时
  适配器放进 Application/ 即自动落在扫描范围外,无需再登记。
- README 工程结构说明同步;根 .gitignore 的生成物路径随 Resources/ 归位。

验证:clean build 0 error;task test 1022 用例全通过(含两个架构守卫);
task format 无改动(证明纯移动);task lint 与移动前同为 21 条内容型
warning;packaging-gate.sh ALL CHECKS PASSED,确认 plist/entitlements 归位
后签名与 entitlements 语义不变。

注意:迁移时须先删旧的生成物再 xcodegen generate,否则遗留的 App/Info.plist
会被当作普通资源扫进 Resources 阶段。
2026-10-05 19:56:18 +08:00