@chatcode/chatcode-cli 3.0.3 → 3.0.4-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (174) hide show
  1. package/README.i18n.yaml +10 -10
  2. package/README.md +16 -1
  3. package/README.zh.md +16 -1
  4. package/lib/bin.js +62 -11
  5. package/lib/{command-errors-CBJRI2gy.js → command-errors-BkCHTQHj.js} +12 -12
  6. package/lib/{command-trees-Dvq4C7a4.js → command-trees-5HFyC5sI.js} +2 -2
  7. package/lib/{component-identity-DPdJglJO.js → component-identity-De91VHwW.js} +3 -3
  8. package/lib/{dist-w_sIm4VD.js → dist-CsDWUvQ4.js} +231 -231
  9. package/lib/{dump-config-CauO75nE.js → dump-config-BcH-VYuv.js} +5 -5
  10. package/lib/dump-config-CyopmD85.js +2 -0
  11. package/lib/{dump-config-schema-CObLWWaW.js → dump-config-schema-DM0fb6Ns.js} +2 -2
  12. package/lib/{extension-events-Be9LWvHD.js → extension-events-CdYCRP0o.js} +26 -26
  13. package/lib/{frames-7PAg0Q9b.js → frames-DOX-Jgk8.js} +4 -4
  14. package/lib/headless-compat.js +2 -2
  15. package/lib/{host-access-DeCjoRQP.js → host-access-Bk4xps5E.js} +1 -1
  16. package/lib/{keymap-CRUxM_qn.js → keymap-CJ1kvLR2.js} +17 -16
  17. package/lib/{plugin-CDFSDE_y.js → plugin-XR7ncbnW.js} +2928 -2240
  18. package/lib/{plugin-Cn-hyYY8.js → plugin-eJjD6r12.js} +1 -1
  19. package/lib/{profile-boot-SJGbpLgN.js → profile-boot-BNQry1NM.js} +97 -14
  20. package/lib/profile-boot.js +2 -2
  21. package/lib/{scenes-D6jV1EEi.js → scenes-CAmWncZD.js} +3 -3
  22. package/lib/{settings-sections-DJQRNBo9.js → settings-sections-CakcvBv9.js} +7 -3
  23. package/lib/statusBarSettings-BPPS_Usm.js +382 -0
  24. package/lib/{supports-color-CcW-FGjr.js → supports-color-DyChQwlI.js} +2 -2
  25. package/lib/{themes-BCly4_y9.js → themes-OjcUpZzw.js} +13 -13
  26. package/lib/tui-compat-command-trees.js +1 -1
  27. package/lib/tui-compat-extensions.js +3 -3
  28. package/lib/tui-compat-plugin-host.js +5 -5
  29. package/lib/tui-compat-scenes.js +1 -1
  30. package/lib/tui-compat-settings-sections.js +1 -1
  31. package/lib/tui-compat-working-activity.js +4 -4
  32. package/lib/tui-compat-workspaces.js +1 -1
  33. package/lib/tui-compat.js +9 -26
  34. package/lib/types/args.d.ts +2 -0
  35. package/lib/types/permission-bypass.d.ts +16 -0
  36. package/lib/types/profile-boot.d.ts +12 -0
  37. package/lib/types/tui-compat.d.ts +4 -0
  38. package/lib/types/web-browser.d.ts +6 -0
  39. package/lib/types/web-instance.d.ts +42 -0
  40. package/lib/web-browser-Vcgfdsv_.js +46 -0
  41. package/lib/web-instance-B0jec7cq.js +2 -0
  42. package/lib/web-instance-DbP7IHPv.js +280 -0
  43. package/lib/{workspaces-Bb3kCAFb.js → workspaces-XY7UdfXp.js} +2 -2
  44. package/package.json +34 -32
  45. package/runtime/manifest.json +4 -2
  46. package/runtime/node_modules/@deepseek-ai/dsh-agent-default-model/lib/index.js +34 -4
  47. package/runtime/node_modules/@deepseek-ai/dsh-agent-default-model/lib/types/index.d.ts +9 -0
  48. package/runtime/node_modules/@deepseek-ai/dsh-agent-preset/skills/cordis-composition-reference/references/packages.md +2 -1
  49. package/runtime/node_modules/@deepseek-ai/dsh-api-gateway/lib/client.js +2 -0
  50. package/runtime/node_modules/@deepseek-ai/dsh-api-gateway/lib/types/client/remote-stream.js +4 -0
  51. package/runtime/node_modules/@deepseek-ai/dsh-api-remotes/lib/client.js +39 -0
  52. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/index.js +6 -1
  53. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/typert.host.js +10 -3
  54. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/typert.remote-client.js +7 -0
  55. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/catalog.js +8 -1
  56. package/runtime/node_modules/@deepseek-ai/dsh-api-session-controller/lib/types/types.d.ts +10 -0
  57. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/index.js +28 -1
  58. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/typert.host.js +39 -0
  59. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/typert.remote-client.d.ts +2 -0
  60. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/typert.remote-client.js +32 -0
  61. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/types/index.d.ts +8 -0
  62. package/runtime/node_modules/@deepseek-ai/dsh-api-settings-controller/lib/types/index.js +19 -1
  63. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/index.js +28 -0
  64. package/runtime/node_modules/@deepseek-ai/dsh-api-workspace-controller/lib/types/feed.js +17 -0
  65. package/runtime/node_modules/@deepseek-ai/dsh-app-boot/lib/index.js +67 -19
  66. package/runtime/node_modules/@deepseek-ai/dsh-app-boot/lib/types/index.d.ts +1 -1
  67. package/runtime/node_modules/@deepseek-ai/dsh-app-boot/lib/types/profile-context.d.ts +11 -1
  68. package/runtime/node_modules/@deepseek-ai/dsh-app-boot/lib/worker/profile-resolution-bootstrap.js +22 -3
  69. package/runtime/node_modules/@deepseek-ai/dsh-base/cordis.patch.yml +9 -3
  70. package/runtime/node_modules/@deepseek-ai/dsh-base/package.json +2 -1
  71. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-chat/lib/client.js +3 -2
  72. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-chat/lib/types/index.d.ts +2 -2
  73. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-conversation/lib/client.js +1 -1
  74. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-goal/lib/client.js +1 -1
  75. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/client.js +60 -12
  76. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/types/client/directory.d.ts +3 -1
  77. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-model-selection/lib/types/client/locales.d.ts +6 -0
  78. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-primitives/lib/markdown/CodeBlock.module.css +3 -5
  79. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-primitives/lib/markdown/MarkdownText.module.css +23 -27
  80. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings/lib/types/client/contract/slots.d.ts +3 -1
  81. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-account/lib/client.js +2 -2
  82. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-account/lib/types/index.d.ts +2 -2
  83. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-general/lib/client.js +8 -7
  84. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-general/lib/types/client/SettingsDocumentAction.d.ts +1 -1
  85. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-general/lib/types/client/settings-document-store.d.ts +2 -1
  86. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-models/lib/client.js +33 -12
  87. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-models/lib/types/client/locales.d.ts +2 -0
  88. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-settings-plugin-inventory/lib/client.js +1 -1
  89. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-sidebar/lib/client.js +1 -1
  90. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-theme/lib/client.js +1 -1
  91. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/client.js +8 -1
  92. package/runtime/node_modules/@deepseek-ai/dsh-client-ui-workspace/lib/types/client/locales.d.ts +2 -0
  93. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/lib/index.js +35 -0
  94. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/lib/types/brand.d.ts +11 -0
  95. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/lib/types/brand.js +10 -0
  96. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/lib/types/index.d.ts +28 -0
  97. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/lib/types/index.js +36 -0
  98. package/runtime/node_modules/@deepseek-ai/dsh-computer-use/package.json +42 -0
  99. package/runtime/node_modules/@deepseek-ai/dsh-config-editor/lib/index.js +102 -14
  100. package/runtime/node_modules/@deepseek-ai/dsh-config-editor/lib/types/index.d.ts +34 -4
  101. package/runtime/node_modules/@deepseek-ai/dsh-config-editor/package.json +1 -0
  102. package/runtime/node_modules/@deepseek-ai/dsh-host-webserver/lib/index.js +2 -1
  103. package/runtime/node_modules/@deepseek-ai/dsh-native-command/lib/index.js +21 -8
  104. package/runtime/node_modules/@deepseek-ai/dsh-native-command/lib/types/path-opener.d.ts +4 -6
  105. package/runtime/node_modules/@deepseek-ai/dsh-native-command/lib/types/path-opener.js +18 -7
  106. package/runtime/node_modules/@deepseek-ai/dsh-settings/lib/index.js +5 -4
  107. package/runtime/node_modules/@deepseek-ai/dsh-settings/lib/types/index.d.ts +4 -3
  108. package/runtime/node_modules/@deepseek-ai/dsh-settings/lib/types/index.js +4 -3
  109. package/runtime/node_modules/@deepseek-ai/dsh-storage/lib/types/backend.d.ts +4 -0
  110. package/runtime/node_modules/@deepseek-ai/dsh-storage-domain/lib/index.js +60 -0
  111. package/runtime/node_modules/@deepseek-ai/dsh-storage-domain/lib/types/domain.d.ts +15 -0
  112. package/runtime/node_modules/@deepseek-ai/dsh-storage-json/lib/index.js +25 -0
  113. package/runtime/node_modules/@deepseek-ai/dsh-storage-json/package.json +1 -0
  114. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/index.js +5472 -0
  115. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/command-args.d.ts +17 -0
  116. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/commands/tianti/cicd.d.ts +8 -0
  117. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/commands/tianti/tianti.d.ts +7 -0
  118. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/commands/tianti-deliver/tianti-deliver.d.ts +8 -0
  119. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/config.d.ts +27 -0
  120. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/index.d.ts +12 -0
  121. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/memory-config.d.ts +10 -0
  122. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/runtime.d.ts +105 -0
  123. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/aliases.d.ts +11 -0
  124. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/auth.d.ts +20 -0
  125. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/client.d.ts +206 -0
  126. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/config.d.ts +20 -0
  127. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/index.d.ts +6 -0
  128. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/log.d.ts +16 -0
  129. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/tianti/types.d.ts +136 -0
  130. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/codebase.d.ts +19 -0
  131. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/dynamicWorkflow.d.ts +10 -0
  132. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/engine.d.ts +8 -0
  133. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/executor.d.ts +11 -0
  134. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/executors.d.ts +15 -0
  135. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/index.d.ts +23 -0
  136. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/memorySuggestions.d.ts +12 -0
  137. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/openspec.d.ts +31 -0
  138. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/recommend.d.ts +8 -0
  139. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/render.d.ts +8 -0
  140. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/requirementContext.d.ts +12 -0
  141. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/scenarioUpgrade.d.ts +24 -0
  142. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/state.d.ts +16 -0
  143. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/store.d.ts +33 -0
  144. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/templates.d.ts +8 -0
  145. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/types.d.ts +385 -0
  146. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/wanmaDevelopmentWorkflow/writeReviewSync.d.ts +6 -0
  147. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/writeReview/index.d.ts +29 -0
  148. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/writeReview/store.d.ts +20 -0
  149. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/services/writeReview/types.d.ts +49 -0
  150. package/runtime/node_modules/@deepseek-ai/dsh-tianti/lib/types/tools.d.ts +12 -0
  151. package/runtime/node_modules/@deepseek-ai/dsh-tianti/package.json +55 -0
  152. package/runtime/node_modules/@deepseek-ai/dsh-tool-cordis/lib/types/api-catalog.js +57 -13
  153. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-D5kpKf--.css +1 -0
  154. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-Dz_cDcce.js +133 -0
  155. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-Dz_cDcce.js.map +1 -0
  156. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/chatcode-apple-touch-icon.png +0 -0
  157. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/chatcode-icon-32.png +0 -0
  158. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/chatcode-mask-icon.svg +1 -0
  159. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/favicon-dark.svg +1 -3
  160. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/favicon.ico +0 -0
  161. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/favicon.svg +1 -3
  162. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/index.html +8 -4
  163. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/preview.html +8 -4
  164. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/package.json +2 -1
  165. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/index.js +110 -33
  166. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/types/entity.d.ts +6 -0
  167. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/types/entity.js +23 -17
  168. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/types/index.d.ts +10 -0
  169. package/runtime/node_modules/@deepseek-ai/dsh-workspace/lib/types/index.js +95 -21
  170. package/lib/dump-config-CijLv_kn.js +0 -2
  171. package/lib/tuiDisplayPrefs-Dm_fULiR.js +0 -204
  172. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-DUvMhLle.css +0 -1
  173. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-Q6zc2uHV.js +0 -127
  174. package/runtime/node_modules/@deepseek-ai/dsh-web-frontend/dist/assets/index-Q6zc2uHV.js.map +0 -1
package/README.i18n.yaml CHANGED
@@ -3,20 +3,20 @@
3
3
  # After editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write apps/cli/README.md
5
5
  /chatcode-chatcode-cli:
6
- en: 5fe3726943c8a3e3
7
- zh: f536c264e5300f4c
6
+ en: ee42a47fb770515c
7
+ zh: 0ab7068caff6f0d1
8
8
  /chatcode-chatcode-cli/entry-modes:
9
- en: 7ce3e97e896c5faa
10
- zh: c78d6da95592692d
9
+ en: 5a02ff3726f7fe5d
10
+ zh: 7c87f54334bf6048
11
11
  /chatcode-chatcode-cli/app-arguments:
12
- en: 6267304ad0acefab
13
- zh: cd0dd269d0608a46
12
+ en: 591d23e87484c54c
13
+ zh: fb932880cc5b3823
14
14
  /chatcode-chatcode-cli/profiles:
15
- en: 0277909432b9078b
16
- zh: 56b369c075a65aba
15
+ en: 36405fc361505950
16
+ zh: f6d1a6c77032276d
17
17
  /chatcode-chatcode-cli/optional-overlays:
18
18
  en: 3a40ddc44e55f79c
19
19
  zh: 8d3949132e1ef93c
20
20
  /chatcode-chatcode-cli/development:
21
- en: 60435baa6e089453
22
- zh: 1e602590c259b6eb
21
+ en: 8342d41b1add62e9
22
+ zh: 1104c5e8b258224d
package/README.md CHANGED
@@ -4,7 +4,7 @@ English | [中文](README.zh.md)
4
4
 
5
5
  `chatcode-cli` is the formal launcher and `cco` is its short form; both commands share one parser and start the TUI/CLI profile when invoked without arguments. Profiles are ordered stacks of plugin-bundle patch layers under the user's own overrides. SDK and ACP are profiles, not separate public bins. The Python runtime wheel packages the same launcher; the SDK defaults to `sdk`, and the minimal example selects `sdk-minimal`. [`src/args.ts`](src/args.ts) owns the command grammar, and [`src/bin.ts`](src/bin.ts) loads only the selected runner. Invalid commands, options from another mode, and fatal configuration or boot failures exit nonzero.
6
6
 
7
- The pinned TUI supports Harness live-Config settings directly: `/settings`, `/statusline`, `/keybindings`, and provider configuration use the active profile settings service, with live display changes preserving the current session. No separate TUI dependency patch is required.
7
+ The bundled TUI supports Harness live-Config settings directly: `/settings`, `/statusline`, `/keybindings`, and provider configuration use the active profile settings service, with live display changes preserving the current session. Builds use the adjacent `dsh-TUI` repository; published CLI packages carry its compiled frontend, standard libraries and private JavaScript dependencies in the embedded runtime.
8
8
 
9
9
  ## Entry modes
10
10
 
@@ -19,12 +19,15 @@ The pinned TUI supports Harness live-Config settings directly: `/settings`, `/st
19
19
  | `chatcode-cli --profile sdk` | Serve SDK clients over JSON-RPC stdio until shutdown or disconnect. |
20
20
  | `chatcode-cli --profile sdk-minimal` | Serve SDK clients with the standalone minimal agent tree. |
21
21
  | `chatcode-cli web` / `cco web` | Boot the Web profile. |
22
+ | `cco web on` / `cco web off` | Start or reopen the shared Web instance / stop it and release its port. |
22
23
  | `chatcode-cli plugin --profile <name> <pnpm args>` | Manage a profile's plugins by forwarding to pnpm in the profile directory. |
23
24
  | `chatcode-cli migrate --dry-run` | Print the copy-only migration plan from legacy user homes. |
24
25
  | `chatcode-cli migrate --apply` | Revalidate and apply that plan without overwriting destination data. |
25
26
 
26
27
  The invoking directory is the default workspace root. The `web`, `headless`, `sdk`, `sdk-minimal`, and `acp` profiles auto-initialize on first use from shipped templates. Create another profile at an unused, non-shipped name with `--from-default-profile`, or initialize a base-backed profile through `chatcode-cli plugin`. The `desktop` name is reserved for the Electron-owned profile, so the CLI rejects boot, config-dump, and plugin-management requests for it.
27
28
 
29
+ `cco web` and `pnpm cco web` default to `on`. The first launch opens its token-authenticated URL after readiness. Subsequent launches in the same ChatCode CLI home verify and reopen the existing instance using its current authenticated URL, print that URL again, and exit without binding a second port. `off` waits for the registered instance's port to close; it never kills an unrelated listener by port or PID. A private registration lives under `$CHATCODE_CLI_HOME/web/instance.json`; missing or exited instances start normally, while an alive but unverified instance fails safely. Explicit `--port 0` remains an isolated random-port launch. `--no-open` and SSH browser suppression remain supported; changing a running instance's flags or overlays requires stopping it first. The URL carries access permission and stays valid only for that server process: do not share it.
30
+
28
31
  ## App arguments
29
32
 
30
33
  The launcher parses only its own flags and hands everything after them to the booted profile, where any injected app plugin may parse the shared immutable snapshot ([`dsh-cmdline`](../../packages/boot/cmdline/README.md)). The first token the launcher does not recognize starts the app's arguments:
@@ -39,13 +42,19 @@ chatcode-cli --help # the launcher's own help
39
42
 
40
43
  `-p` and `--print` are the compatibility exception: on the default `cli` profile they select the shipped `headless` profile and remain in the app arguments for its legacy grammar. Explicit custom and non-CLI profiles retain ownership of their own `-p` option.
41
44
 
45
+ `cco --dangerously-skip-permissions` permits unrestricted file access and automatically approves tool permission requests for that process. The spelling `--dangerouslv-skip-permissions` is also accepted. The flag works with TUI, Web, `--resume`, and `-p`; it leaves saved permission events and profile settings unchanged, including for resumed sessions. Use it only in a workspace you trust. Account sign-in, feature enablement, operating-system permissions, and cancellation remain required. After `--`, the flag is literal application input.
46
+
42
47
  The headless profile loads the same ChatCode model adapter as the interactive CLI, so a saved `chatcode-codingplan`, `chatcode-maas`, or custom ChatCode model selection remains available to `-p` runs.
43
48
 
49
+ ChatCode model requests in CLI, Web, and headless use the profile's [durable LLM retry executor](../../packages/llm/llm-retry/README.md) for bounded exponential recovery from transient errors such as HTTP 429. The ChatCode model bundle supplies the retry budget and backoff through `retryPolicy`; retries keep the same selected model and stop when cancelled or exhausted.
50
+
44
51
  The installed `@deepseek-ai/dsh-headless` package owns its native task, `--json`, and `--session-id` interface. `@chatcode/chatcode-cli-test` ships a separate compatibility overlay and runner for `-p`, `--print`, `--output-format`, and `--input-format`; those arguments select the owned runner while native headless invocations use the upstream package. Publishing or patching a private build of `@deepseek-ai/dsh-headless` is not required.
45
52
 
46
53
  <a id="profiles"></a>
47
54
  ## Profiles
48
55
 
56
+ The `web` and `cli` profiles include `@chatcode/cco-computer-use` through the compatibility alias `dsh-computer-use` by default. Existing base-backed product profiles retain custom bundles and patches when it is added. Its live master switch is available under the independent **Settings → Computer use** page and through TUI `/settings`; the switch defaults off and requires confirmation to enable. Web and CLI persist this one value in `$CHATCODE_CLI_HOME/cordis.patch.yml` (default `~/.chatcode-cli/cordis.patch.yml`), share live updates, and remember it across restarts. Disabling leaves only the read-only status tool. Browser automation uses text observations; the native Cua Driver backend selects Windows, macOS, or Linux binaries. Source checkouts select the sibling implementation with `pnpm plugins:local` or the exact published version with `pnpm plugins:registry`; `pnpm build:computer-use` builds only the local source. Publish the plugin before the CLI; the installed CLI obtains the plugin from npm and needs no sibling checkout. See the [release and development guide](../../打包发布及开发指南.md) for packaging commands.
57
+
49
58
  A profile directory holds a `package.json` (out-of-tree plugin dependencies plus the profile manifest `dsh.profile` with its ordered `bundles` list) and a `cordis.patch.yml` (the user's own patch layer). `dsh-hmr`, when enabled in YAML, watches the profile manifest and both profile and home patch files, then recomposes all layers through one serialized reload. Without HMR, changes apply on restart. Edits arriving during watcher registration use the same nonfatal reload reporting as later edits. [Plugin Manager](../../packages/boot/plugin-manager/README.md) shares package operations and the profile write lock with `chatcode-cli plugin`; package updates retain disabled bundle selections. CLI package commands inherit authentication variables and terminal descriptors, including interactive build approval; service calls retain their scrubbed environment and captured diagnostics.
50
59
 
51
60
  Installation and profile startup enforce declared DSH peer ranges against the same runtime version shown by `dsh --version`. Incompatible plugins require an explicitly acknowledged exact-version exemption. The [plugin manager's compatibility reference](../../packages/boot/plugin-manager/README.md#version-compatibility-and-exemptions) documents `version-exemptions`, `allow-version`, `revoke-version`, persistence, and risks.
@@ -69,6 +78,8 @@ The legacy-data startup reminder checks only the top-level entries of the old ho
69
78
 
70
79
  Set `CHATCODE_CLI_STARTUP_TRACE=1` to print phase and plugin activation durations to stderr for either `cco` or `cco web`. A `begin` line without a matching duration identifies unfinished work. Tracing is off by default and records labels and elapsed times, not environment values or plugin configuration.
71
80
 
81
+ Product and command-line overlays that resolve to the same physical file are applied once, retaining the first path and its relative-resource base. Distinct overlays retain their order and override precedence. Source launches ignore embedded-runtime staging left by packaging and resolve the live workspace packages.
82
+
72
83
  The [CLI behavior reference](reference/README.md) owns exact layer precedence, flags, shutdown behavior, deployment defaults, and source execution. The [startup and reload failure table](../../packages/boot/app-boot/README.md#startup-and-reload-failures) compares optional and required plugin failures with configuration HMR.
73
84
 
74
85
  ## Optional overlays
@@ -79,6 +90,10 @@ The [CLI behavior reference](reference/README.md) owns exact layer precedence, f
79
90
 
80
91
  Production runs require built package and frontend artifacts. From the repository root, run `pnpm run build` separately, then use `pnpm cco <args...>` to run the TypeScript entry and forward every argument; the [source-execution reference](reference/README.md#source-execution) owns the module-resolution contract.
81
92
 
93
+ Run `pnpm exec vitest run apps/cli/tests/chatcode-rate-limit.spec.ts apps/cli/tests/permission-bypass.spec.ts` from the repository root to check retry and launch-permission behavior. The retry tests mount the installed `dsh-llm-chatcode-config` plugin through its public package entry and use fixture responses for catalog and model HTTP requests.
94
+
95
+ The TUI bridge validates its declared live fields with the launcher's schema runtime, including volatile metadata emitted by older TUI schema versions. This keeps settings editable without replacing the running session.
96
+
82
97
  The published CLI directly pins every Harness runtime package referenced by the base/Web bundles and every required peer of its bundled ChatCode plugins. Keep those entries on the same Harness release when publishing: npm's global installer does not preserve pnpm workspace peer unification, and otherwise may hoist an older ABI beside the current runtime.
83
98
 
84
99
  The npm artifact carries fork-owned JavaScript packages under `runtime/node_modules` and lists them in `runtime/manifest.json`. Platform-specific `node-addon-system` binaries remain exact-version optional npm dependencies, selected for the installation host; they are excluded from the embedded runtime. It also carries the TUI admission registry, protocols, and schemas under `lib/dsh-ecosystem-spec`, where command authorization reads its permission defaults before applying the user's grants file. Profile startup includes the complete runtime package list when resolving presets and plugins, including packages absent from the slim npm dependency list. The launcher resolves embedded packages in memory for both ESM and CommonJS, including imports from external plugins. Startup does not modify the installation directory, so a root-owned installation can be launched by an ordinary user with read access; the user still needs a writable ChatCode CLI home. CLI and Web share the [startup model preference](../../packages/core/agent-default-model/README.md); already running frontends do not switch each other's model.
package/README.zh.md CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  `chatcode-cli` 是正式启动命令,`cco` 是其简写;两者共用同一解析器,且无参数时都启动 TUI/CLI profile。profile 由多个插件组合包 patch 层按顺序叠加而成,其上再应用用户自己的覆盖配置。SDK 与 ACP(Agent Client Protocol)都是 profile,而不是独立的公开可执行命令。Python 运行时 wheel 包中也包含同一个启动器;SDK 默认使用 `sdk`,极简示例选择 `sdk-minimal`。[`src/args.ts`](src/args.ts) 负责命令语法,[`src/bin.ts`](src/bin.ts) 只加载选中的运行器。无效命令、来自其他模式的选项,以及致命的配置或启动错误都会以非零状态退出。
6
6
 
7
- 固定版本的 TUI 直接支持 Harness 动态配置设置:`/settings`、`/statusline`、`/keybindings` 及供应商配置使用当前 profile 的设置服务,显示偏好即时更新且保留当前会话。无需额外的 TUI 依赖补丁。
7
+ 随附的 TUI 直接支持 Harness 动态配置设置:`/settings`、`/statusline`、`/keybindings` 及供应商配置使用当前 profile 的设置服务,显示偏好即时更新且保留当前会话。构建使用相邻的 `dsh-TUI` 仓库;发布的 CLI 包在嵌入 runtime 中包含其编译前端、标准库和独立的 JavaScript 依赖。
8
8
 
9
9
  ## 入口模式
10
10
 
@@ -19,12 +19,15 @@
19
19
  | `chatcode-cli --profile sdk` | 通过 JSON-RPC stdio 为 SDK 客户端提供服务,直至关闭或断开连接。 |
20
20
  | `chatcode-cli --profile sdk-minimal` | 以独立极简 agent(智能体)配置树为 SDK 客户端提供服务。 |
21
21
  | `chatcode-cli web` / `cco web` | 启动 Web profile。 |
22
+ | `cco web on` / `cco web off` | 启动或重新打开共用 Web 实例 / 关闭服务并释放端口。 |
22
23
  | `chatcode-cli plugin --profile <name> <pnpm args>` | 通过在 profile 目录中转发给 pnpm 来管理该 profile 的插件。 |
23
24
  | `chatcode-cli migrate --dry-run` | 输出旧版用户目录的只复制迁移计划。 |
24
25
  | `chatcode-cli migrate --apply` | 重新校验并应用计划,绝不覆盖目标数据。 |
25
26
 
26
27
  运行命令时所在的目录将作为默认 workspace 根目录。`web`、`headless`、`sdk`、`sdk-minimal` 和 `acp` profile 在首次使用时会从随附模板自动初始化。使用 `--from-default-profile` 可以基于这些模板之一,在尚未使用的非内置名称处创建其他 profile;通过 `chatcode-cli plugin` 则可以初始化一个以 base 为基础的 profile。`desktop` 名称保留给 Electron 持有的 profile,因此 CLI(命令行界面)会拒绝针对它的启动、配置 dump 和插件管理请求。
27
28
 
29
+ `cco web` 和 `pnpm cco web` 默认为 `on`。首次启动在服务就绪后打开带认证 token 的 URL;同一 ChatCode CLI 用户目录中的后续启动会验证已有实例,获取并再次打印其当前有效认证链接,打开网页后退出,不绑定第二个端口。`off` 等待登记实例的端口关闭,不会按端口或 PID 杀死无关服务。私有登记位于 `$CHATCODE_CLI_HOME/web/instance.json`:没有实例或旧进程已退出时正常启动,仍存活但无法验证的实例安全拒绝。显式 `--port 0` 仍是隔离的随机端口启动。保留 `--no-open` 与 SSH 下不自动打开浏览器的行为;修改运行实例的参数或覆盖层需先关闭。链接包含访问权限,仅在对应服务进程存活期间有效,请勿分享。
30
+
28
31
  ## 应用参数
29
32
 
30
33
  启动器只解析自身的 flag,并将其后的所有内容交给已启动的 profile;注入该 profile 的任意应用插件都可以解析这份共享的不可变快照([`dsh-cmdline`](../../packages/boot/cmdline/README.zh.md))。启动器无法识别的第一个 token 标志着应用参数的开始:
@@ -39,13 +42,19 @@ chatcode-cli --help # the launcher's own help
39
42
 
40
43
  `-p` 与 `--print` 是兼容性例外:用于默认 `cli` profile 时,它们会选择随附的 `headless` profile,并保留在应用参数中供旧版语法解析。显式指定的自定义或非 CLI profile 仍自行拥有其 `-p` 选项。
41
44
 
45
+ `cco --dangerously-skip-permissions` 在本次进程中放开文件访问范围,并自动批准工具权限请求;同时兼容 `--dangerouslv-skip-permissions` 拼写。它支持 TUI、Web、`--resume` 和 `-p`,不改写已存权限事件或 profile 设置,恢复会话也保持原记录。仅在可信工作区使用。账号登录、功能启用、操作系统授权和取消机制仍然有效。放在 `--` 后的参数按应用输入原样处理。
46
+
42
47
  headless profile 会加载与交互式 CLI 相同的 ChatCode 模型适配器,因此已保存的 `chatcode-codingplan`、`chatcode-maas` 或自定义 ChatCode 模型选择仍可用于 `-p` 调用。
43
48
 
49
+ CLI、Web 和 headless 的 ChatCode 模型请求通过 profile 中的[持久化 LLM 重试执行器](../../packages/llm/llm-retry/README.zh.md),对 HTTP 429 等暂时性错误执行有上限的指数退避恢复。ChatCode 模型组合包通过 `retryPolicy` 提供次数和退避策略;重试保持所选模型,取消或预算耗尽时停止。
50
+
44
51
  已安装的 `@deepseek-ai/dsh-headless` 包负责原生任务、`--json` 与 `--session-id` 接口。`@chatcode/chatcode-cli-test` 单独交付用于 `-p`、`--print`、`--output-format` 与 `--input-format` 的兼容覆盖层和运行器;这些参数会选择自有运行器,原生 headless 调用使用上游包。无需发布或修补私有版本的 `@deepseek-ai/dsh-headless`。
45
52
 
46
53
  <a id="profiles"></a>
47
54
  ## Profile
48
55
 
56
+ `web` 和 `cli` profile 默认通过兼容别名 `dsh-computer-use` 加载 `@chatcode/cco-computer-use`;现有基于 base 的产品 profile 添加它时保留自定义插件与 patch。实时总开关位于 独立菜单 **设置 → 电脑操作** 和 TUI `/settings`,总开关默认关闭,开启前需确认。Web 与 CLI 将这一个值保存到 `$CHATCODE_CLI_HOME/cordis.patch.yml`(默认为 `~/.chatcode-cli/cordis.patch.yml`),实时同步并在重启后保留;关闭时只保留只读状态工具。浏览器自动化使用文本观察,原生 Cua Driver 后端自动选择 Windows、macOS 或 Linux 二进制。源码 checkout 使用 `pnpm plugins:local` 选择相邻仓库,使用 `pnpm plugins:registry` 选择精确线上版本;`pnpm build:computer-use` 只编译本地来源。先发布插件,再发布 CLI;安装后的 CLI 从 npm 获取插件,不依赖相邻源码目录。打包命令见[发布及开发指南](../../打包发布及开发指南.md)。
57
+
49
58
  profile 目录包含一个 `package.json`,其中记录树外插件依赖,以及 profile manifest(元数据清单)`dsh.profile`、其中按顺序排列的 `bundles` 列表;还包含一个 `cordis.patch.yml`,其中保存用户自己的 patch 层。在 YAML 中启用的 `dsh-hmr` 监视 profile manifest、profile 与 home 级 patch 文件,再通过统一串行重载重新组合所有层。未启用 HMR 时,更改在重启后生效。监听器注册期间发生的编辑与后续编辑使用相同的非致命重载错误报告。[插件管理器](../../packages/boot/plugin-manager/README.zh.md) 与 `chatcode-cli plugin` 共享包操作和 profile 写锁;更新依赖会保留已停用的组合包选择。CLI 包操作继承认证环境和终端描述符,支持交互式构建批准;service 调用保留清理后的环境并捕获诊断。
50
59
 
51
60
  安装和 profile 启动会按声明的 DSH peer 范围,检查与 `dsh --version` 显示值相同的运行时版本。不兼容插件需要用户明确确认精确版本豁免。[插件管理器的兼容性参考](../../packages/boot/plugin-manager/README.zh.md#version-compatibility-and-exemptions)说明 `version-exemptions`、`allow-version`、`revoke-version`、持久化规则与风险。
@@ -69,6 +78,8 @@ TUI 等待共用默认模型服务就绪后才创建首个会话。ChatCode 模
69
78
 
70
79
  设置 `CHATCODE_CLI_STARTUP_TRACE=1`,即可在运行 `cco` 或 `cco web` 时向 stderr 输出启动阶段与插件激活耗时。只有 `begin` 而没有对应耗时的条目表示尚未完成的工作。默认不启用诊断;日志只记录标签与耗时,不记录环境变量值或插件配置。
71
80
 
81
+ 产品覆盖层与命令行覆盖层如果解析到同一个物理文件,只应用一次,并保留首个路径及其相对资源解析基准。不同文件的覆盖层保留原有顺序与覆盖优先级。源码启动忽略打包留下的内嵌运行时暂存文件,解析当前工作区中的包。
82
+
72
83
  层的确切优先级、flag、关闭行为、部署默认值和源码执行方式,以 [CLI 行为参考](reference/README.zh.md)为准。[启动与重载失败表](../../packages/boot/app-boot/README.zh.md#startup-and-reload-failures)对比 optional、required 插件启动失败与配置 HMR 的行为。
73
84
 
74
85
  ## 可选覆盖层
@@ -79,6 +90,10 @@ TUI 等待共用默认模型服务就绪后才创建首个会话。ChatCode 模
79
90
 
80
91
  生产运行需要已构建的包与前端产物。请在仓库根目录单独运行 `pnpm run build`,然后使用 `pnpm cco <args...>` 运行 TypeScript 入口并转发所有参数;模块解析约定以[源码执行参考](reference/README.zh.md#source-execution)为准。
81
92
 
93
+ 在仓库根目录运行 `pnpm exec vitest run apps/cli/tests/chatcode-rate-limit.spec.ts apps/cli/tests/permission-bypass.spec.ts`,检查重试与启动权限行为。重试测试通过公开包入口挂载已安装的 `dsh-llm-chatcode-config` 插件,并为目录与模型 HTTP 请求提供 fixture 响应。
94
+
95
+ TUI 适配层使用启动器自身的 schema 运行时校验其声明的动态配置字段,包括旧版 TUI schema 输出的 volatile 元数据,从而保持设置可编辑且不替换正在运行的会话。
96
+
82
97
  发布版 CLI 会直接固定 base/Web 组合包实际引用的所有 Harness 运行时包,以及随附 ChatCode 插件的全部必需 peer。发布时必须让这些依赖保持在同一个 Harness 版本:npm 全局安装不会保留 pnpm workspace 对 peer 的统一解析,否则可能把旧 ABI 提升到顶层并与当前运行时混用。
83
98
 
84
99
  npm 产物把分支自有的 JavaScript 包放在 `runtime/node_modules`,并通过 `runtime/manifest.json` 列出它们。各平台的 `node-addon-system` 二进制使用固定版本的 npm 可选依赖,由安装器按目标机器的平台选择,不加入内嵌 runtime。产物还在 `lib/dsh-ecosystem-spec` 中携带 TUI 准入注册表、协议和 schema;命令授权先从该目录读取权限默认值,再应用用户的授权文件。Profile 启动解析预设和插件时使用完整的运行时包列表,包括精简 npm 依赖列表中没有的包。启动器在内存中统一解析内嵌包的 ESM 与 CommonJS 导入,也覆盖外部插件的导入。启动不会修改安装目录,因此普通用户只需对 root 安装的目录具有读取权限;用户自己的 ChatCode CLI home 仍须可写。CLI 与 Web 共用[启动模型偏好](../../packages/core/agent-default-model/README.zh.md);已运行的两端不会互相切换模型。
package/lib/bin.js CHANGED
@@ -57,6 +57,7 @@ Examples:
57
57
  chatcode-cli headless "run the tests" answer one task, print the result, and exit
58
58
  chatcode-cli cli --patch ./extra.yml boot the CLI profile with one extra overlay
59
59
  chatcode-cli cli --resume <session> arguments after launcher flags reach the app
60
+ cco --dangerously-skip-permissions unrestricted file access and automatic tool approval
60
61
  chatcode-cli web --help the web app's own flags and help
61
62
  chatcode-cli plugin --profile cli add <package>
62
63
  install a plugin into the CLI profile
@@ -143,6 +144,19 @@ function isLegacyPrintInvocation(invocation) {
143
144
  * @returns the resolved invocation.
144
145
  */
145
146
  function parseChatCodeCliArgs(argv, version) {
147
+ const separator = argv.indexOf("--");
148
+ const optionEnd = separator === -1 ? argv.length : separator;
149
+ const management = argv[0] === "plugin" || argv[0] === "migrate";
150
+ let dangerouslySkipPermissions = false;
151
+ const launcherArgs = [];
152
+ for (const [index, argument] of argv.entries()) {
153
+ if (!management && index < optionEnd && (argument === "--dangerously-skip-permissions" || argument === "--dangerouslv-skip-permissions")) {
154
+ dangerouslySkipPermissions = true;
155
+ continue;
156
+ }
157
+ launcherArgs.push(argument);
158
+ }
159
+ argv = launcherArgs;
146
160
  const first = argv[0];
147
161
  let resolved;
148
162
  const program = new Command();
@@ -191,7 +205,13 @@ function parseChatCodeCliArgs(argv, version) {
191
205
  }
192
206
  /* v8 ignore next -- an action resolves or Commander throws */
193
207
  if (resolved === void 0) throw new Error("ChatCode CLI: no invocation resolved");
194
- return routeLegacyPrint(resolved, argv);
208
+ const invocation = routeLegacyPrint(resolved, argv);
209
+ if (!dangerouslySkipPermissions || invocation.mode !== "profile") return invocation;
210
+ return {
211
+ ...invocation,
212
+ dangerouslySkipPermissions: true,
213
+ args: isLegacyPrintInvocation(invocation) ? ["--dangerously-skip-permissions", ...invocation.args] : invocation.args
214
+ };
195
215
  }
196
216
  //#endregion
197
217
  //#region lib/types/bin.js
@@ -239,14 +259,45 @@ async function runCli() {
239
259
  const { runProfile } = await import("./profile-boot.js");
240
260
  finishProfileImport();
241
261
  try {
242
- await runProfile({
243
- environment: loadLayeredEnv("ChatCode CLI"),
244
- profile: invocation.profile,
245
- fromDefaultProfile: invocation.fromDefaultProfile,
246
- patchFiles: invocation.patches,
247
- args: invocation.args
248
- });
262
+ const environment = loadLayeredEnv("ChatCode CLI");
263
+ const start = async (webInstance, args) => {
264
+ await runProfile({
265
+ environment,
266
+ profile: invocation.profile,
267
+ fromDefaultProfile: invocation.fromDefaultProfile,
268
+ patchFiles: invocation.patches,
269
+ args,
270
+ webInstance,
271
+ dangerouslySkipPermissions: invocation.dangerouslySkipPermissions
272
+ });
273
+ };
274
+ if (invocation.profile === "web") {
275
+ const { runManagedWeb } = await import("./web-instance-B0jec7cq.js");
276
+ const { launchedThroughSsh } = await import("@deepseek-ai/dsh-launch-environment");
277
+ await runManagedWeb({
278
+ home: resolveChatCodeCliHome(),
279
+ args: invocation.args,
280
+ start,
281
+ print: (line) => {
282
+ process.stdout.write(`${line}\n`);
283
+ },
284
+ open: async (url) => {
285
+ if (launchedThroughSsh(environment)) return;
286
+ const { openWebBrowser } = await import("./web-browser-Vcgfdsv_.js");
287
+ try {
288
+ await openWebBrowser(url);
289
+ } catch (error) {
290
+ process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`);
291
+ }
292
+ }
293
+ });
294
+ } else await start(void 0, invocation.args);
249
295
  } catch (error) {
296
+ const { WebUsageError } = await import("./web-instance-B0jec7cq.js");
297
+ if (error instanceof WebUsageError) {
298
+ process.exitCode = error.exitCode;
299
+ break;
300
+ }
250
301
  if (!(error instanceof StartupError)) throw error;
251
302
  await reportStartupFailure(error, {
252
303
  home: resolveChatCodeCliHome(),
@@ -276,17 +327,17 @@ async function runCli() {
276
327
  break;
277
328
  }
278
329
  case "plugin": {
279
- const { runPlugin } = await import("./plugin-Cn-hyYY8.js");
330
+ const { runPlugin } = await import("./plugin-eJjD6r12.js");
280
331
  process.exit(await runPlugin(invocation.profile, invocation.args));
281
332
  break;
282
333
  }
283
334
  case "dump-config": {
284
- const { runDumpConfig } = await import("./dump-config-CijLv_kn.js");
335
+ const { runDumpConfig } = await import("./dump-config-CyopmD85.js");
285
336
  runDumpConfig(invocation.profile, invocation.defaultOnly, invocation.patches, invocation.fromDefaultProfile);
286
337
  break;
287
338
  }
288
339
  case "dump-config-schema": {
289
- const { runDumpConfigSchema } = await import("./dump-config-schema-CObLWWaW.js");
340
+ const { runDumpConfigSchema } = await import("./dump-config-schema-DM0fb6Ns.js");
290
341
  await runDumpConfigSchema(invocation.profile, invocation.patches, invocation.fromDefaultProfile);
291
342
  break;
292
343
  }
@@ -1,12 +1,12 @@
1
- import { a as compositionRoot, i as bindCallerEffect, o as concreteService, r as assertCallerContext, t as activationContext } from "./host-access-DeCjoRQP.js";
2
- import { a as declaresPermission, d as normalizePermissionScope, i as declaresObserverScope, m as scopeCovers, n as componentIdentityOf, o as requireComponentIdentity, p as rawScopeCovers, s as requiresContract, u as INTERCEPT_PERMISSIONS } from "./component-identity-DPdJglJO.js";
3
- import { B as createAdmissionCatalog, G as validateSetInput, H as validateDeleteOutput, K as validateSetOutput, L as TUI_DECISION_EVENT_NAMES, M as loadSpecData, N as registryEntries, P as verifyContractProfiles, S as DATA_DIR, U as validateGetInput, V as validateDeleteInput, W as validateGetOutput, X as defineProtocolDeclaration, Y as projectManifest, j as digestFile, p as cleanScalarText, q as validateMessageEvent, x as readGrantStore } from "./extension-events-Be9LWvHD.js";
1
+ import { a as compositionRoot, i as bindCallerEffect, o as concreteService, r as assertCallerContext, t as activationContext } from "./host-access-Bk4xps5E.js";
2
+ import { a as declaresPermission, d as normalizePermissionScope, i as declaresObserverScope, m as scopeCovers, n as componentIdentityOf, o as requireComponentIdentity, p as rawScopeCovers, s as requiresContract, u as INTERCEPT_PERMISSIONS } from "./component-identity-De91VHwW.js";
3
+ import { B as createAdmissionCatalog, G as validateSetInput, H as validateDeleteOutput, K as validateSetOutput, L as TUI_DECISION_EVENT_NAMES, M as loadSpecData, N as registryEntries, P as verifyContractProfiles, S as DATA_DIR, U as validateGetInput, V as validateDeleteInput, W as validateGetOutput, X as defineProtocolDeclaration, Y as projectManifest, j as digestFile, p as cleanScalarText, q as validateMessageEvent, x as readGrantStore } from "./extension-events-CdYCRP0o.js";
4
4
  import { appendFileSync, mkdirSync, readFileSync } from "node:fs";
5
5
  import { fileURLToPath } from "node:url";
6
6
  import { dirname, join } from "node:path";
7
7
  import { Service } from "@deepseek-ai/cordis";
8
8
  import { withFileLock, writeFileAtomic } from "@deepseek-ai/dsh-atomic-write";
9
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.16_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/plugin-spec/validate.js
9
+ //#region ../../../dsh-TUI/lib/types/plugin-spec/validate.js
10
10
  /** Semantic validation layered on the official manifest parser/projection. */
11
11
  const coordinateKey$1 = (coordinate) => `${coordinate.apiVersion}#${coordinate.kind}`;
12
12
  const groupOf = (apiVersion) => apiVersion.split("/")[0] ?? "";
@@ -124,7 +124,7 @@ function validateHost(index, host) {
124
124
  }
125
125
  }
126
126
  //#endregion
127
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.16_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/plugin-spec/negotiate.js
127
+ //#region ../../../dsh-TUI/lib/types/plugin-spec/negotiate.js
128
128
  /** Five-state admission decision using dsh-std projection and ProtocolCatalog. */
129
129
  const coordinateKey = (ref) => `${ref.apiVersion}#${ref.kind}`;
130
130
  function negotiate(index, manifest, host, grants = []) {
@@ -197,7 +197,7 @@ function negotiate(index, manifest, host, grants = []) {
197
197
  } : { decision: "compatible" };
198
198
  }
199
199
  //#endregion
200
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.16_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/plugin-spec/schema-check.js
200
+ //#region ../../../dsh-TUI/lib/types/plugin-spec/schema-check.js
201
201
  /**
202
202
  * 零依赖 JSON Schema 校验器——上游 `conformance/tests/run.js` 的 check()
203
203
  * 的保真 TS 移植。刻意只实现 vendored schemas 用到的子集:本地 $ref、
@@ -301,7 +301,7 @@ function check(value, schema, rootSchema = schema, where = "$") {
301
301
  }
302
302
  }
303
303
  //#endregion
304
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.16_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/host-descriptor.js
304
+ //#region ../../../dsh-TUI/lib/types/dsh-adapter/host-descriptor.js
305
305
  /** Build the current ChatCode CLI TUI Host Descriptor from the pinned admission profile. */
306
306
  const HOST_SUPPORTED_CONTRACTS = Object.freeze([
307
307
  {
@@ -453,7 +453,7 @@ function buildHostDescriptor(options) {
453
453
  });
454
454
  }
455
455
  //#endregion
456
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.16_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/effect-ledger.js
456
+ //#region ../../../dsh-TUI/lib/types/dsh-adapter/effect-ledger.js
457
457
  /**
458
458
  * Effect ledger (C-060): an append-only JSONL journal of plugin-visible
459
459
  * effects at `~/.chatcode-cli/tui/effect-ledger.jsonl`, mounted by the
@@ -645,7 +645,7 @@ function resumeSequence(file) {
645
645
  return max + 1;
646
646
  }
647
647
  //#endregion
648
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.16_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/plugin-storage.js
648
+ //#region ../../../dsh-TUI/lib/types/dsh-adapter/plugin-storage.js
649
649
  /**
650
650
  * storage.local contract surface (C-040, `storage.dsh/v1alpha1#LocalStorage`):
651
651
  * per-plugin private persistence, mounted by the dsh-tui-plugin-host row as
@@ -986,7 +986,7 @@ var TuiPluginStorageRuntime = class extends Service {
986
986
  }
987
987
  };
988
988
  //#endregion
989
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.16_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/message-observer.js
989
+ //#region ../../../dsh-TUI/lib/types/dsh-adapter/message-observer.js
990
990
  /**
991
991
  * messages.observe contract surface (C-042,
992
992
  * `messages.dsh/v1alpha1#MessageObserver`): the host event broker, mounted
@@ -1494,7 +1494,7 @@ function observerStateFor(runtime) {
1494
1494
  return state;
1495
1495
  }
1496
1496
  //#endregion
1497
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.16_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/command-attribution.js
1497
+ //#region ../../../dsh-TUI/lib/types/dsh-adapter/command-attribution.js
1498
1498
  /**
1499
1499
  * Command ownership attribution — the data source for the C-041 invoke
1500
1500
  * checkpoint's per-owner grant decision.
@@ -1572,7 +1572,7 @@ function commandOwner(ctx, definition) {
1572
1572
  return ownerMaps.get(key)?.get(handler);
1573
1573
  }
1574
1574
  //#endregion
1575
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.16_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/command-errors.js
1575
+ //#region ../../../dsh-TUI/lib/types/dsh-adapter/command-errors.js
1576
1576
  /**
1577
1577
  * commands contract error-code alignment (C-041,
1578
1578
  * `commands.dsh/v1alpha1#Command`): the official `dsh-commands` runtime
@@ -1,6 +1,6 @@
1
- import { a as compositionRoot, i as bindCallerEffect, n as activationFiber, o as concreteService, s as requirePluginCaller } from "./host-access-DeCjoRQP.js";
1
+ import { a as compositionRoot, i as bindCallerEffect, n as activationFiber, o as concreteService, s as requirePluginCaller } from "./host-access-Bk4xps5E.js";
2
2
  import { Service } from "@deepseek-ai/cordis";
3
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.16_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/command-trees.js
3
+ //#region ../../../dsh-TUI/lib/types/dsh-adapter/command-trees.js
4
4
  /** Provider-neutral subcommand completion registry for terminal front doors. */
5
5
  const name = "dsh-tui-command-trees";
6
6
  /** Small host-only registry; command execution remains owned by dsh-commands. */
@@ -1,6 +1,6 @@
1
- import { i as bindCallerEffect, n as activationFiber } from "./host-access-DeCjoRQP.js";
1
+ import { i as bindCallerEffect, n as activationFiber } from "./host-access-Bk4xps5E.js";
2
2
  import { randomUUID } from "node:crypto";
3
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.16_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/plugin-spec/permission-scope.js
3
+ //#region ../../../dsh-TUI/lib/types/plugin-spec/permission-scope.js
4
4
  /** Permission scope normalization shared by admission and runtime checks. */
5
5
  const STORAGE_PERMISSIONS = new Set(["storage.local.read", "storage.local.write"]);
6
6
  const INTERCEPT_PERMISSIONS = new Set([
@@ -76,7 +76,7 @@ function rawScopeCovers(permission, declared, actual, componentId) {
76
76
  return normalizedDeclared !== void 0 && normalizedActual !== void 0 && permissionScopeCovers(permission, normalizedDeclared, normalizedActual);
77
77
  }
78
78
  //#endregion
79
- //#region ../../node_modules/.pnpm/@chatcode+cco-tui@0.10.0-rc.16_08ea48c8555976e562c6368d51cb542b/node_modules/@chatcode/cco-tui/lib/types/dsh-adapter/component-identity.js
79
+ //#region ../../../dsh-TUI/lib/types/dsh-adapter/component-identity.js
80
80
  /** Verified Component identity bound to one Cordis activation owner. */
81
81
  var ComponentIdentityError = class extends Error {
82
82
  code;