@deepseek-harness-tui/dsh-tui 0.8.5 → 0.8.7

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 (253) hide show
  1. package/README.md +13 -3
  2. package/bin/dsh-tui.js +269 -218
  3. package/cordis.patch.yml +48 -22
  4. package/dsh-ecosystem-spec/protocols/profile-definitions.d.ts +13 -13
  5. package/dsh-ecosystem-spec/protocols/profile-definitions.js +59 -59
  6. package/dsh-ecosystem-spec/protocols/tui-channel-http.d.ts +15 -15
  7. package/dsh-ecosystem-spec/protocols/tui-channel-http.js +32 -32
  8. package/dsh-ecosystem-spec/protocols/tui-channel.d.ts +59 -59
  9. package/dsh-ecosystem-spec/protocols/tui-channel.js +166 -166
  10. package/dsh-ecosystem-spec/protocols/tui-contributions.d.ts +42 -42
  11. package/dsh-ecosystem-spec/protocols/tui-contributions.js +143 -143
  12. package/dsh-ecosystem-spec/registry/README.md +14 -14
  13. package/dsh-ecosystem-spec/registry/host-descriptor.tui.example.json +56 -56
  14. package/dsh-ecosystem-spec/registry/permissions-0.1.json +13 -13
  15. package/dsh-ecosystem-spec/registry/registry-0.15.json +149 -149
  16. package/lib/types/cc/figures.d.ts +7 -0
  17. package/lib/types/cc/figures.d.ts.map +1 -1
  18. package/lib/types/cc/figures.js +24 -0
  19. package/lib/types/cc/markdown.d.ts.map +1 -1
  20. package/lib/types/cc/markdown.js +47 -14
  21. package/lib/types/cc/syntaxRuns.d.ts +16 -0
  22. package/lib/types/cc/syntaxRuns.d.ts.map +1 -0
  23. package/lib/types/cc/syntaxRuns.js +79 -0
  24. package/lib/types/cc/syntaxTheme.d.ts +12 -0
  25. package/lib/types/cc/syntaxTheme.d.ts.map +1 -0
  26. package/lib/types/cc/syntaxTheme.js +76 -0
  27. package/lib/types/commands.d.ts +14 -0
  28. package/lib/types/commands.d.ts.map +1 -1
  29. package/lib/types/commands.js +20 -1
  30. package/lib/types/components/Chat/SubagentMessage.d.ts +19 -0
  31. package/lib/types/components/Chat/SubagentMessage.d.ts.map +1 -0
  32. package/lib/types/components/Chat/SubagentMessage.js +75 -0
  33. package/lib/types/components/EffortChargeGlyph.d.ts +26 -0
  34. package/lib/types/components/EffortChargeGlyph.d.ts.map +1 -0
  35. package/lib/types/components/EffortChargeGlyph.js +70 -0
  36. package/lib/types/components/EffortInputBorder.d.ts +36 -0
  37. package/lib/types/components/EffortInputBorder.d.ts.map +1 -0
  38. package/lib/types/components/EffortInputBorder.js +73 -0
  39. package/lib/types/components/EffortTierBadge.d.ts +26 -0
  40. package/lib/types/components/EffortTierBadge.d.ts.map +1 -0
  41. package/lib/types/components/EffortTierBadge.js +97 -0
  42. package/lib/types/components/HelpMenu.d.ts +8 -1
  43. package/lib/types/components/HelpMenu.d.ts.map +1 -1
  44. package/lib/types/components/HelpMenu.js +15 -4
  45. package/lib/types/components/LoadedContextPanel.js +1 -1
  46. package/lib/types/components/LogoV2.d.ts +3 -1
  47. package/lib/types/components/LogoV2.d.ts.map +1 -1
  48. package/lib/types/components/LogoV2.js +2 -2
  49. package/lib/types/components/MessageList.d.ts +6 -2
  50. package/lib/types/components/MessageList.d.ts.map +1 -1
  51. package/lib/types/components/MessageList.js +22 -13
  52. package/lib/types/components/ModelPicker.js +2 -2
  53. package/lib/types/components/PromptInput.d.ts +1 -1
  54. package/lib/types/components/PromptInput.d.ts.map +1 -1
  55. package/lib/types/components/PromptInput.js +83 -18
  56. package/lib/types/components/SkillsPicker.js +2 -2
  57. package/lib/types/components/SplitDiffView.d.ts +2 -17
  58. package/lib/types/components/SplitDiffView.d.ts.map +1 -1
  59. package/lib/types/components/SplitDiffView.js +9 -162
  60. package/lib/types/components/StreamingMarkdown.js +1 -1
  61. package/lib/types/components/SubagentCard.d.ts +9 -0
  62. package/lib/types/components/SubagentCard.d.ts.map +1 -0
  63. package/lib/types/components/SubagentCard.js +26 -0
  64. package/lib/types/components/SubagentDashboard.d.ts +13 -0
  65. package/lib/types/components/SubagentDashboard.d.ts.map +1 -0
  66. package/lib/types/components/SubagentDashboard.js +50 -0
  67. package/lib/types/components/SubagentDetailScene.d.ts +16 -0
  68. package/lib/types/components/SubagentDetailScene.d.ts.map +1 -0
  69. package/lib/types/components/SubagentDetailScene.js +141 -0
  70. package/lib/types/components/SyntaxText.d.ts +15 -0
  71. package/lib/types/components/SyntaxText.d.ts.map +1 -0
  72. package/lib/types/components/SyntaxText.js +34 -0
  73. package/lib/types/components/ThinkingToggle.d.ts +3 -10
  74. package/lib/types/components/ThinkingToggle.d.ts.map +1 -1
  75. package/lib/types/components/ThinkingToggle.js +4 -9
  76. package/lib/types/components/design-system/ListItem.d.ts.map +1 -1
  77. package/lib/types/components/design-system/ListItem.js +1 -1
  78. package/lib/types/components/design-system/ThemedBox.d.ts.map +1 -1
  79. package/lib/types/components/design-system/ThemedBox.js +4 -1
  80. package/lib/types/components/design-system/ThemedText.js +2 -2
  81. package/lib/types/components/messages/AssistantThinkingMessage.d.ts +12 -6
  82. package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
  83. package/lib/types/components/messages/AssistantThinkingMessage.js +37 -10
  84. package/lib/types/components/messages/AssistantToolUseMessage.d.ts +2 -0
  85. package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
  86. package/lib/types/components/messages/AssistantToolUseMessage.js +71 -18
  87. package/lib/types/components/messages/UserPromptMessage.d.ts +4 -6
  88. package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -1
  89. package/lib/types/components/messages/UserPromptMessage.js +19 -10
  90. package/lib/types/dsh-adapter/channel.d.ts +58 -2
  91. package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
  92. package/lib/types/dsh-adapter/channel.js +337 -7
  93. package/lib/types/dsh-adapter/contract.d.ts +27 -4
  94. package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
  95. package/lib/types/dsh-adapter/contract.js +56 -10
  96. package/lib/types/dsh-adapter/index.d.ts.map +1 -1
  97. package/lib/types/dsh-adapter/index.js +9 -3
  98. package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
  99. package/lib/types/dsh-adapter/plugin.js +38 -0
  100. package/lib/types/dsh-adapter/shortcuts.js +3 -3
  101. package/lib/types/dsh-adapter/subagents.d.ts +87 -0
  102. package/lib/types/dsh-adapter/subagents.d.ts.map +1 -0
  103. package/lib/types/dsh-adapter/subagents.js +204 -0
  104. package/lib/types/herdr.d.ts +28 -0
  105. package/lib/types/herdr.d.ts.map +1 -0
  106. package/lib/types/herdr.js +133 -0
  107. package/lib/types/i18n.d.ts +215 -31
  108. package/lib/types/i18n.d.ts.map +1 -1
  109. package/lib/types/i18n.js +65 -14
  110. package/lib/types/ink/ink.d.ts +4 -0
  111. package/lib/types/ink/ink.d.ts.map +1 -1
  112. package/lib/types/ink/ink.js +46 -15
  113. package/lib/types/minimalMode.d.ts +13 -0
  114. package/lib/types/minimalMode.d.ts.map +1 -0
  115. package/lib/types/minimalMode.js +17 -0
  116. package/lib/types/screens/Chat.d.ts +1 -1
  117. package/lib/types/screens/Chat.d.ts.map +1 -1
  118. package/lib/types/screens/Chat.js +95 -45
  119. package/lib/types/screens/StatusLine.d.ts.map +1 -1
  120. package/lib/types/screens/StatusLine.js +6 -2
  121. package/lib/types/screens/TrajectoryScene.d.ts.map +1 -1
  122. package/lib/types/screens/TrajectoryScene.js +4 -2
  123. package/lib/types/theme.d.ts +20 -0
  124. package/lib/types/theme.d.ts.map +1 -1
  125. package/lib/types/theme.js +77 -23
  126. package/lib/types/tips.js +3 -3
  127. package/lib/types/trajectory/effortIgnition.d.ts +66 -0
  128. package/lib/types/trajectory/effortIgnition.d.ts.map +1 -0
  129. package/lib/types/trajectory/effortIgnition.js +142 -0
  130. package/lib/types/update.d.ts +18 -0
  131. package/lib/types/update.d.ts.map +1 -1
  132. package/lib/types/update.js +73 -2
  133. package/lib/types/utils/execFileNoThrow.d.ts +3 -20
  134. package/lib/types/utils/execFileNoThrow.d.ts.map +1 -1
  135. package/lib/types/utils/execFileNoThrow.js +53 -32
  136. package/lib/types/utils/externalEditor.d.ts +12 -11
  137. package/lib/types/utils/externalEditor.d.ts.map +1 -1
  138. package/lib/types/utils/externalEditor.js +11 -11
  139. package/node_modules/@dsh-std/command/CHANGELOG.md +8 -8
  140. package/node_modules/@dsh-std/command/LICENSE +21 -21
  141. package/node_modules/@dsh-std/command/README.md +26 -26
  142. package/node_modules/@dsh-std/command/README.zh.md +28 -28
  143. package/node_modules/@dsh-std/command/lib/index.js.map +1 -1
  144. package/node_modules/@dsh-std/command/package.json +22 -22
  145. package/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  146. package/node_modules/@dsh-std/connection/LICENSE +21 -21
  147. package/node_modules/@dsh-std/connection/README.md +42 -42
  148. package/node_modules/@dsh-std/connection/README.zh.md +42 -42
  149. package/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  150. package/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  151. package/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  152. package/node_modules/@dsh-std/connection/package.json +20 -20
  153. package/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  154. package/node_modules/@dsh-std/core/LICENSE +21 -21
  155. package/node_modules/@dsh-std/core/README.md +13 -13
  156. package/node_modules/@dsh-std/core/README.zh.md +13 -13
  157. package/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  158. package/node_modules/@dsh-std/core/package.json +21 -21
  159. package/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
  160. package/node_modules/@dsh-std/manifest/LICENSE +21 -21
  161. package/node_modules/@dsh-std/manifest/README.md +5 -5
  162. package/node_modules/@dsh-std/manifest/README.zh.md +5 -5
  163. package/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
  164. package/node_modules/@dsh-std/manifest/package.json +20 -20
  165. package/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
  166. package/node_modules/@dsh-std/messages/CHANGELOG.md +8 -8
  167. package/node_modules/@dsh-std/messages/LICENSE +21 -21
  168. package/node_modules/@dsh-std/messages/README.md +5 -5
  169. package/node_modules/@dsh-std/messages/README.zh.md +7 -7
  170. package/node_modules/@dsh-std/messages/lib/index.js.map +1 -1
  171. package/node_modules/@dsh-std/messages/package.json +20 -20
  172. package/node_modules/@dsh-std/messages/schema/message-observer-envelope-0.15.schema.json +54 -54
  173. package/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
  174. package/node_modules/@dsh-std/presentation/LICENSE +21 -21
  175. package/node_modules/@dsh-std/presentation/README.md +27 -27
  176. package/node_modules/@dsh-std/presentation/README.zh.md +29 -29
  177. package/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
  178. package/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  179. package/node_modules/@dsh-std/presentation/package.json +25 -25
  180. package/node_modules/@dsh-std/storage/CHANGELOG.md +8 -8
  181. package/node_modules/@dsh-std/storage/LICENSE +21 -21
  182. package/node_modules/@dsh-std/storage/README.md +5 -5
  183. package/node_modules/@dsh-std/storage/README.zh.md +7 -7
  184. package/node_modules/@dsh-std/storage/lib/index.js.map +1 -1
  185. package/node_modules/@dsh-std/storage/package.json +20 -20
  186. package/node_modules/@dsh-std/storage/schema/local-storage-0.15.schema.json +56 -56
  187. package/package.json +64 -58
  188. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  189. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/LICENSE +21 -21
  190. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.md +42 -42
  191. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/README.zh.md +42 -42
  192. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  193. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  194. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  195. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/connection/package.json +20 -20
  196. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  197. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/LICENSE +21 -21
  198. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.md +13 -13
  199. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/README.zh.md +13 -13
  200. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  201. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/core/package.json +21 -21
  202. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/CHANGELOG.md +9 -9
  203. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/LICENSE +21 -21
  204. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.md +5 -5
  205. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/README.zh.md +5 -5
  206. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/lib/index.js.map +1 -1
  207. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/package.json +20 -20
  208. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/manifest/schema/dsh-plugin-0.15.schema.json +144 -144
  209. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/CHANGELOG.md +9 -9
  210. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/LICENSE +21 -21
  211. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.md +27 -27
  212. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/README.zh.md +29 -29
  213. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/callback.js.map +1 -1
  214. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/lib/index.js.map +1 -1
  215. package/vendor/dsh-std/packages/command/node_modules/@dsh-std/presentation/package.json +25 -25
  216. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  217. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/LICENSE +21 -21
  218. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.md +13 -13
  219. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/README.zh.md +13 -13
  220. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  221. package/vendor/dsh-std/packages/connection/node_modules/@dsh-std/core/package.json +21 -21
  222. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  223. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/LICENSE +21 -21
  224. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.md +13 -13
  225. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/README.zh.md +13 -13
  226. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  227. package/vendor/dsh-std/packages/manifest/node_modules/@dsh-std/core/package.json +21 -21
  228. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  229. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/LICENSE +21 -21
  230. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.md +13 -13
  231. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/README.zh.md +13 -13
  232. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  233. package/vendor/dsh-std/packages/messages/node_modules/@dsh-std/core/package.json +21 -21
  234. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/CHANGELOG.md +8 -8
  235. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/LICENSE +21 -21
  236. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.md +42 -42
  237. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/README.zh.md +42 -42
  238. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/index.js.map +1 -1
  239. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/memory.js.map +1 -1
  240. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/lib/resolve-3X6ausgz.js.map +1 -1
  241. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/connection/package.json +20 -20
  242. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  243. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/LICENSE +21 -21
  244. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.md +13 -13
  245. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/README.zh.md +13 -13
  246. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  247. package/vendor/dsh-std/packages/presentation/node_modules/@dsh-std/core/package.json +21 -21
  248. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/CHANGELOG.md +8 -8
  249. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/LICENSE +21 -21
  250. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.md +13 -13
  251. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/README.zh.md +13 -13
  252. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/lib/index.js.map +1 -1
  253. package/vendor/dsh-std/packages/storage/node_modules/@dsh-std/core/package.json +21 -21
package/cordis.patch.yml CHANGED
@@ -41,14 +41,17 @@
41
41
  #
42
42
  # The model-facing plugin set moves INTO the agent-presets roster: every
43
43
  # session composes its tools/prompt sections from one preset directory
44
- # (standard/code/minimal/cordis) instead of the host rows below. The dsh CLI's
45
- # profile-boot sees this composition's `agent-presets` row and overlays the
46
- # shipped `config/agent-presets/` root onto it automatically, so the row here
47
- # carries no roots; `$DSH_HOME/.agent-presets` (user-authored presets) is
48
- # appended by the roster itself (`includeUserRoot` default). Mirroring the
49
- # official dsh-web-app patch: every dsh-base row a preset now owns is
50
- # disabled here, so a minimal agent does not leak host-layer tools (an agent's
51
- # registry view resolves agent → preset → global).
44
+ # (standard/code/minimal/cordis) instead of the host rows below. The TUI's
45
+ # roster row uses the scoped `dsh-tui-agent-presets` id and carries the
46
+ # shipped `config/agent-presets/` system root itself (derived from the dsh
47
+ # CLI installation through the launcher-maintained `profiles/node_modules`
48
+ # fallback link), because the official profile-boot root overlay only targets
49
+ # the unscoped `agent-presets` id that surface bundles own. The roster itself
50
+ # appends `$DSH_HOME/.agent-presets` (user-authored presets,
51
+ # `includeUserRoot` default). Mirroring the official dsh-web-app patch: every
52
+ # dsh-base row a preset now owns is disabled here, so a minimal agent does not
53
+ # leak host-layer tools (an agent's registry view resolves agent → preset →
54
+ # global).
52
55
 
53
56
  - id: agent-instructions
54
57
  disabled: true
@@ -162,21 +165,32 @@
162
165
  # Workspace grouping is a separate durable ledger, not a cwd-derived
163
166
  # projection. Mount the same domain stack and storage root as dsh-web-app
164
167
  # so TUI-created sessions can attach to the exact registry Web reads.
165
- - id: storage
168
+ #
169
+ # The six rows below own host-plane services that the official web-app
170
+ # bundle may already mount. Loader entry ids are process-global, so these
171
+ # rows use dsh-tui-* scoped ids and self-disable when an enabled row with
172
+ # the official id/name is already present in the tree. The disabled check
173
+ # is evaluated during the same include update that inserts every row, so
174
+ # it sees the web-app rows regardless of their activation state.
175
+ - id: dsh-tui-storage
166
176
  name: '@deepseek-ai/dsh-storage'
177
+ disabled: !!js "[...ctx.loader.entries()].some(entry => entry.options.id === 'storage' && entry.options.name === '@deepseek-ai/dsh-storage' && !entry.disabled)"
167
178
 
168
- - id: storage-json
179
+ - id: dsh-tui-storage-json
169
180
  name: '@deepseek-ai/dsh-storage-json'
181
+ disabled: !!js "[...ctx.loader.entries()].some(entry => entry.options.id === 'storage-json' && entry.options.name === '@deepseek-ai/dsh-storage-json' && !entry.disabled)"
170
182
  config:
171
183
  root: !!js dshHomePath('storages')
172
184
 
173
- - id: storage-domain
185
+ - id: dsh-tui-storage-domain
174
186
  name: '@deepseek-ai/dsh-storage-domain'
187
+ disabled: !!js "[...ctx.loader.entries()].some(entry => entry.options.id === 'storage-domain' && entry.options.name === '@deepseek-ai/dsh-storage-domain' && !entry.disabled)"
175
188
  config:
176
189
  backend: json
177
190
 
178
- - id: workspace
191
+ - id: dsh-tui-workspace
179
192
  name: '@deepseek-ai/dsh-workspace'
193
+ disabled: !!js "[...ctx.loader.entries()].some(entry => entry.options.id === 'workspace' && entry.options.name === '@deepseek-ai/dsh-workspace' && !entry.disabled)"
180
194
 
181
195
  # Generic terminal workspace registry. Optional plugins add providers;
182
196
  # the TUI itself always supplies LOCAL and has no provider-specific code.
@@ -217,23 +231,35 @@
217
231
  name: '@deepseek-harness-tui/dsh-tui/extensions'
218
232
 
219
233
  # The agent-preset roster (issue #8): `ctx.agentPresets`, the service the
220
- # TUI composes every session's model-facing world from. No `roots` here —
221
- # the dsh CLI's profile-boot overlays its shipped `config/agent-presets/`
222
- # directory (standard/code/minimal/cordis, system trust) onto this row
223
- # whenever a composition carries it, and the roster itself appends the
224
- # user-authored `$DSH_HOME/.agent-presets` root. A boot that never reached
225
- # profile-boot (bare `dsh --config cordis.yml`) leaves the roster empty;
226
- # the TUI then keeps its pre-presets behavior (see presets.ts).
227
- - id: agent-presets
234
+ # TUI composes every session's model-facing world from. The scoped row
235
+ # carries the official CLI's shipped `config/agent-presets/` directory
236
+ # (standard/code/minimal/cordis, system trust) through the
237
+ # launcher-maintained profiles/node_modules fallback link; the roster
238
+ # itself appends `$DSH_HOME/.agent-presets` (user-authored presets,
239
+ # `includeUserRoot` default). A boot that never reached profile-boot
240
+ # leaves the system root empty and the roster finds only user presets.
241
+ - id: dsh-tui-agent-presets
228
242
  name: '@deepseek-ai/dsh-agent-presets'
243
+ disabled: !!js "[...ctx.loader.entries()].some(entry => entry.options.id === 'agent-presets' && entry.options.name === '@deepseek-ai/dsh-agent-presets' && !entry.disabled)"
229
244
  config:
230
245
  default: standard
246
+ roots: !!js >-
247
+ (() => {
248
+ const base = ctx.baseUrl
249
+ if (!base) return undefined
250
+ const root = new URL('../node_modules/@deepseek-ai/dsh/config/agent-presets/', base)
251
+ let path = decodeURIComponent(root.pathname)
252
+ if (/^\/[A-Za-z]:/.test(path)) path = path.slice(1)
253
+ return [{ path, trust: 'system' }]
254
+ })()
231
255
 
232
256
  # Host-plane services the `cordis` preset's plugin-experimentation tool
233
257
  # waits on (dynamicCordisRunner/cordisInspect); dsh-base carries no such
234
- # row — the official web app inserts it the same way.
235
- - id: cordis-host-runner
258
+ # row — the official web app inserts it the same way, so this copy yields
259
+ # to it when it is already present.
260
+ - id: dsh-tui-cordis-host-runner
236
261
  name: '@deepseek-ai/dsh-cordis-host-runner'
262
+ disabled: !!js "[...ctx.loader.entries()].some(entry => entry.options.id === 'cordis-host-runner' && entry.options.name === '@deepseek-ai/dsh-cordis-host-runner' && !entry.disabled)"
237
263
 
238
264
  # The interactive front door. The plugin creates/resumes its agent at
239
265
  # runtime, seeds the startup status line, and disposes the whole app tree
@@ -1,13 +1,13 @@
1
- import type { ApiReference, ProtocolCatalog, ProtocolDefinition } from '@dsh-std/core'
2
- export { registerTuiContributionExtensions } from './tui-contributions.js'
3
- export * from './tui-channel.js'
4
-
5
- export const DECISION_EVENTS: Readonly<ApiReference & {
6
- apiVersion: 'tui.dsh/v1alpha1'
7
- kind: 'DecisionEvents'
8
- }>
9
-
10
- export const decisionEventsDefinition: ProtocolDefinition
11
- export const profileDefinitions: readonly ProtocolDefinition[]
12
-
13
- export function registerProfileProtocols(catalog: ProtocolCatalog): () => void
1
+ import type { ApiReference, ProtocolCatalog, ProtocolDefinition } from '@dsh-std/core'
2
+ export { registerTuiContributionExtensions } from './tui-contributions.js'
3
+ export * from './tui-channel.js'
4
+
5
+ export const DECISION_EVENTS: Readonly<ApiReference & {
6
+ apiVersion: 'tui.dsh/v1alpha1'
7
+ kind: 'DecisionEvents'
8
+ }>
9
+
10
+ export const decisionEventsDefinition: ProtocolDefinition
11
+ export const profileDefinitions: readonly ProtocolDefinition[]
12
+
13
+ export function registerProfileProtocols(catalog: ProtocolCatalog): () => void
@@ -1,59 +1,59 @@
1
- /** dsh-TUI private protocol definitions evaluated by @dsh-std/core. */
2
-
3
- export { registerTuiContributionExtensions } from './tui-contributions.js'
4
- export * from './tui-channel.js'
5
- import { tuiChannelDefinition } from './tui-channel.js'
6
-
7
- export const DECISION_EVENTS = Object.freeze({
8
- apiVersion: 'tui.dsh/v1alpha1',
9
- kind: 'DecisionEvents',
10
- })
11
-
12
- function featureSupport(value, label) {
13
- if (value === undefined) return Object.freeze({ features: Object.freeze([]) })
14
- if (typeof value !== 'object' || value === null || Array.isArray(value)) {
15
- throw new TypeError(`${label} support spec must be an object`)
16
- }
17
- const unknown = Object.keys(value).filter(key => key !== 'features' && !key.startsWith('x-'))
18
- if (unknown.length > 0) throw new TypeError(`${label} support spec contains unknown field ${JSON.stringify(unknown[0])}`)
19
- if (value.features !== undefined && (!Array.isArray(value.features)
20
- || value.features.some(feature => typeof feature !== 'string' || feature.trim() === ''))) {
21
- throw new TypeError(`${label} support spec.features must be an array of non-empty strings`)
22
- }
23
- return Object.freeze({ features: Object.freeze([...(value.features ?? [])].sort()) })
24
- }
25
-
26
- function providerDefinition(reference, label) {
27
- return Object.freeze({
28
- ...reference,
29
- validateRequirement(value) {
30
- if (value !== undefined) throw new TypeError(`${label} requirement does not accept spec in manifest v0.15`)
31
- return undefined
32
- },
33
- validateSupport(value) { return featureSupport(value, label) },
34
- negotiate(input) {
35
- const providers = [...new Set(input.supports.map(row => row.participant))].sort()
36
- const issues = input.requirements.flatMap(row => providers.length === 0
37
- ? [{
38
- code: row.requirement.optional === true ? 'optional-support-missing' : 'required-support-missing',
39
- severity: row.requirement.optional === true ? 'warning' : 'error',
40
- participant: row.participant,
41
- message: `${label} has no provider in this negotiation scope`,
42
- }]
43
- : [])
44
- return { agreement: Object.freeze({ providers: Object.freeze(providers) }), issues: Object.freeze(issues) }
45
- },
46
- })
47
- }
48
-
49
- export const decisionEventsDefinition = providerDefinition(DECISION_EVENTS, 'DecisionEvents')
50
-
51
- export const profileDefinitions = Object.freeze([
52
- decisionEventsDefinition,
53
- tuiChannelDefinition,
54
- ])
55
-
56
- export function registerProfileProtocols(catalog) {
57
- const disposers = profileDefinitions.map(definition => catalog.register(definition))
58
- return () => { for (const dispose of disposers.reverse()) dispose() }
59
- }
1
+ /** dsh-TUI private protocol definitions evaluated by @dsh-std/core. */
2
+
3
+ export { registerTuiContributionExtensions } from './tui-contributions.js'
4
+ export * from './tui-channel.js'
5
+ import { tuiChannelDefinition } from './tui-channel.js'
6
+
7
+ export const DECISION_EVENTS = Object.freeze({
8
+ apiVersion: 'tui.dsh/v1alpha1',
9
+ kind: 'DecisionEvents',
10
+ })
11
+
12
+ function featureSupport(value, label) {
13
+ if (value === undefined) return Object.freeze({ features: Object.freeze([]) })
14
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
15
+ throw new TypeError(`${label} support spec must be an object`)
16
+ }
17
+ const unknown = Object.keys(value).filter(key => key !== 'features' && !key.startsWith('x-'))
18
+ if (unknown.length > 0) throw new TypeError(`${label} support spec contains unknown field ${JSON.stringify(unknown[0])}`)
19
+ if (value.features !== undefined && (!Array.isArray(value.features)
20
+ || value.features.some(feature => typeof feature !== 'string' || feature.trim() === ''))) {
21
+ throw new TypeError(`${label} support spec.features must be an array of non-empty strings`)
22
+ }
23
+ return Object.freeze({ features: Object.freeze([...(value.features ?? [])].sort()) })
24
+ }
25
+
26
+ function providerDefinition(reference, label) {
27
+ return Object.freeze({
28
+ ...reference,
29
+ validateRequirement(value) {
30
+ if (value !== undefined) throw new TypeError(`${label} requirement does not accept spec in manifest v0.15`)
31
+ return undefined
32
+ },
33
+ validateSupport(value) { return featureSupport(value, label) },
34
+ negotiate(input) {
35
+ const providers = [...new Set(input.supports.map(row => row.participant))].sort()
36
+ const issues = input.requirements.flatMap(row => providers.length === 0
37
+ ? [{
38
+ code: row.requirement.optional === true ? 'optional-support-missing' : 'required-support-missing',
39
+ severity: row.requirement.optional === true ? 'warning' : 'error',
40
+ participant: row.participant,
41
+ message: `${label} has no provider in this negotiation scope`,
42
+ }]
43
+ : [])
44
+ return { agreement: Object.freeze({ providers: Object.freeze(providers) }), issues: Object.freeze(issues) }
45
+ },
46
+ })
47
+ }
48
+
49
+ export const decisionEventsDefinition = providerDefinition(DECISION_EVENTS, 'DecisionEvents')
50
+
51
+ export const profileDefinitions = Object.freeze([
52
+ decisionEventsDefinition,
53
+ tuiChannelDefinition,
54
+ ])
55
+
56
+ export function registerProfileProtocols(catalog) {
57
+ const disposers = profileDefinitions.map(definition => catalog.register(definition))
58
+ return () => { for (const dispose of disposers.reverse()) dispose() }
59
+ }
@@ -1,15 +1,15 @@
1
- export const TUI_CHANNEL_HTTP_API_VERSION: 'tui.dsh/v1alpha1'
2
- export const TUI_CHANNEL_HTTP_KIND: 'ChannelEndpoint'
3
- export const TUI_CHANNEL_HTTP_HEALTH_PATH: '/dsh-tui/v1/health'
4
- export const TUI_CHANNEL_HTTP_DESCRIPTOR_PATH: '/dsh-tui/v1/endpoint'
5
- export const TUI_CHANNEL_HTTP_WEBSOCKET_PATH: '/dsh-tui/v1/connection'
6
-
7
- export interface TuiChannelEndpointDescriptor {
8
- readonly apiVersion: typeof TUI_CHANNEL_HTTP_API_VERSION
9
- readonly kind: typeof TUI_CHANNEL_HTTP_KIND
10
- readonly origin: string
11
- readonly connection: typeof TUI_CHANNEL_HTTP_WEBSOCKET_PATH
12
- }
13
-
14
- export function createTuiChannelEndpointDescriptor(origin: string): TuiChannelEndpointDescriptor
15
- export function validateTuiChannelEndpointDescriptor(value: unknown): TuiChannelEndpointDescriptor
1
+ export const TUI_CHANNEL_HTTP_API_VERSION: 'tui.dsh/v1alpha1'
2
+ export const TUI_CHANNEL_HTTP_KIND: 'ChannelEndpoint'
3
+ export const TUI_CHANNEL_HTTP_HEALTH_PATH: '/dsh-tui/v1/health'
4
+ export const TUI_CHANNEL_HTTP_DESCRIPTOR_PATH: '/dsh-tui/v1/endpoint'
5
+ export const TUI_CHANNEL_HTTP_WEBSOCKET_PATH: '/dsh-tui/v1/connection'
6
+
7
+ export interface TuiChannelEndpointDescriptor {
8
+ readonly apiVersion: typeof TUI_CHANNEL_HTTP_API_VERSION
9
+ readonly kind: typeof TUI_CHANNEL_HTTP_KIND
10
+ readonly origin: string
11
+ readonly connection: typeof TUI_CHANNEL_HTTP_WEBSOCKET_PATH
12
+ }
13
+
14
+ export function createTuiChannelEndpointDescriptor(origin: string): TuiChannelEndpointDescriptor
15
+ export function validateTuiChannelEndpointDescriptor(value: unknown): TuiChannelEndpointDescriptor
@@ -1,32 +1,32 @@
1
- export const TUI_CHANNEL_HTTP_API_VERSION = 'tui.dsh/v1alpha1'
2
- export const TUI_CHANNEL_HTTP_KIND = 'ChannelEndpoint'
3
- export const TUI_CHANNEL_HTTP_HEALTH_PATH = '/dsh-tui/v1/health'
4
- export const TUI_CHANNEL_HTTP_DESCRIPTOR_PATH = '/dsh-tui/v1/endpoint'
5
- export const TUI_CHANNEL_HTTP_WEBSOCKET_PATH = '/dsh-tui/v1/connection'
6
-
7
- export function createTuiChannelEndpointDescriptor(origin) {
8
- const normalized = new URL(origin)
9
- if (normalized.protocol !== 'http:' && normalized.protocol !== 'https:') {
10
- throw new TypeError('TUI Channel endpoint origin must use http or https')
11
- }
12
- normalized.pathname = '/'
13
- normalized.search = ''
14
- normalized.hash = ''
15
- return Object.freeze({
16
- apiVersion: TUI_CHANNEL_HTTP_API_VERSION,
17
- kind: TUI_CHANNEL_HTTP_KIND,
18
- origin: normalized.toString().replace(/\/$/u, ''),
19
- connection: TUI_CHANNEL_HTTP_WEBSOCKET_PATH,
20
- })
21
- }
22
-
23
- export function validateTuiChannelEndpointDescriptor(value) {
24
- if (typeof value !== 'object' || value === null || Array.isArray(value)) throw new TypeError('TUI Channel endpoint descriptor must be an object')
25
- if (value.apiVersion !== TUI_CHANNEL_HTTP_API_VERSION || value.kind !== TUI_CHANNEL_HTTP_KIND) {
26
- throw new TypeError('TUI Channel endpoint descriptor version or kind is unsupported')
27
- }
28
- if (typeof value.origin !== 'string') throw new TypeError('TUI Channel endpoint origin must be a string')
29
- createTuiChannelEndpointDescriptor(value.origin)
30
- if (value.connection !== TUI_CHANNEL_HTTP_WEBSOCKET_PATH) throw new TypeError('TUI Channel endpoint connection path is unsupported')
31
- return value
32
- }
1
+ export const TUI_CHANNEL_HTTP_API_VERSION = 'tui.dsh/v1alpha1'
2
+ export const TUI_CHANNEL_HTTP_KIND = 'ChannelEndpoint'
3
+ export const TUI_CHANNEL_HTTP_HEALTH_PATH = '/dsh-tui/v1/health'
4
+ export const TUI_CHANNEL_HTTP_DESCRIPTOR_PATH = '/dsh-tui/v1/endpoint'
5
+ export const TUI_CHANNEL_HTTP_WEBSOCKET_PATH = '/dsh-tui/v1/connection'
6
+
7
+ export function createTuiChannelEndpointDescriptor(origin) {
8
+ const normalized = new URL(origin)
9
+ if (normalized.protocol !== 'http:' && normalized.protocol !== 'https:') {
10
+ throw new TypeError('TUI Channel endpoint origin must use http or https')
11
+ }
12
+ normalized.pathname = '/'
13
+ normalized.search = ''
14
+ normalized.hash = ''
15
+ return Object.freeze({
16
+ apiVersion: TUI_CHANNEL_HTTP_API_VERSION,
17
+ kind: TUI_CHANNEL_HTTP_KIND,
18
+ origin: normalized.toString().replace(/\/$/u, ''),
19
+ connection: TUI_CHANNEL_HTTP_WEBSOCKET_PATH,
20
+ })
21
+ }
22
+
23
+ export function validateTuiChannelEndpointDescriptor(value) {
24
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) throw new TypeError('TUI Channel endpoint descriptor must be an object')
25
+ if (value.apiVersion !== TUI_CHANNEL_HTTP_API_VERSION || value.kind !== TUI_CHANNEL_HTTP_KIND) {
26
+ throw new TypeError('TUI Channel endpoint descriptor version or kind is unsupported')
27
+ }
28
+ if (typeof value.origin !== 'string') throw new TypeError('TUI Channel endpoint origin must be a string')
29
+ createTuiChannelEndpointDescriptor(value.origin)
30
+ if (value.connection !== TUI_CHANNEL_HTTP_WEBSOCKET_PATH) throw new TypeError('TUI Channel endpoint connection path is unsupported')
31
+ return value
32
+ }
@@ -1,59 +1,59 @@
1
- import type { ApiReference, ProtocolDefinition } from '@dsh-std/core'
2
-
3
- export type JsonValue = null | boolean | number | string | readonly JsonValue[] | { readonly [key: string]: JsonValue }
4
-
5
- export const TUI_CHANNEL: Readonly<ApiReference & {
6
- apiVersion: 'tui.dsh/v1alpha1'
7
- kind: 'Channel'
8
- }>
9
- export const TUI_CHANNEL_WIRE_REVISION: 6
10
- export const TUI_CHANNEL_FEATURES: readonly string[]
11
-
12
- export interface TuiChannelRequirementSpec {
13
- readonly wireRevision: number
14
- readonly features: readonly string[]
15
- }
16
- export interface TuiChannelSupportSpec extends TuiChannelRequirementSpec {}
17
-
18
- export interface TuiChannelSnapshot {
19
- readonly wireRevision: number
20
- readonly channelId: string
21
- readonly version: number
22
- readonly state: Readonly<Record<string, JsonValue>>
23
- }
24
-
25
- export interface TuiChannelWorkspaceFlowChoice {
26
- readonly id: string
27
- readonly label: string
28
- readonly description?: string
29
- readonly badge?: string
30
- readonly action: string
31
- readonly input?: {
32
- readonly action: string
33
- readonly initialValue?: string
34
- readonly placeholder?: string
35
- }
36
- }
37
-
38
- export type TuiChannelWorkspaceFlowResult =
39
- | { readonly kind: 'target'; readonly target: import('./tui-contributions.js').WorkspaceTarget }
40
- | { readonly kind: 'choices'; readonly title: string; readonly choices: readonly TuiChannelWorkspaceFlowChoice[] }
41
-
42
- export type TuiChannelInput =
43
- | { readonly operation: 'open'; readonly value: { readonly workspace?: string; readonly sessionId?: string; readonly options?: JsonValue } }
44
- | { readonly operation: 'subscribe'; readonly value: { readonly channelId: string; readonly afterVersion: number } }
45
- | { readonly operation: 'invoke'; readonly value: { readonly channelId: string; readonly method: string; readonly arguments: readonly JsonValue[] } }
46
- | { readonly operation: 'close'; readonly value: { readonly channelId: string } }
47
-
48
- export interface TuiChannelInvokeOutput {
49
- readonly value: JsonValue
50
- readonly valueDefined?: boolean
51
- readonly snapshot?: TuiChannelSnapshot
52
- }
53
-
54
- export const tuiChannelDefinition: ProtocolDefinition
55
- export function validateTuiChannelRequirement(value: unknown): TuiChannelRequirementSpec
56
- export function validateTuiChannelSupport(value: unknown): TuiChannelSupportSpec
57
- export function validateTuiChannelInput(operation: string, value: unknown): object
58
- export function validateTuiChannelSnapshot(value: unknown): TuiChannelSnapshot
59
- export function validateTuiChannelOutput(operation: string, value: unknown): object
1
+ import type { ApiReference, ProtocolDefinition } from '@dsh-std/core'
2
+
3
+ export type JsonValue = null | boolean | number | string | readonly JsonValue[] | { readonly [key: string]: JsonValue }
4
+
5
+ export const TUI_CHANNEL: Readonly<ApiReference & {
6
+ apiVersion: 'tui.dsh/v1alpha1'
7
+ kind: 'Channel'
8
+ }>
9
+ export const TUI_CHANNEL_WIRE_REVISION: 6
10
+ export const TUI_CHANNEL_FEATURES: readonly string[]
11
+
12
+ export interface TuiChannelRequirementSpec {
13
+ readonly wireRevision: number
14
+ readonly features: readonly string[]
15
+ }
16
+ export interface TuiChannelSupportSpec extends TuiChannelRequirementSpec {}
17
+
18
+ export interface TuiChannelSnapshot {
19
+ readonly wireRevision: number
20
+ readonly channelId: string
21
+ readonly version: number
22
+ readonly state: Readonly<Record<string, JsonValue>>
23
+ }
24
+
25
+ export interface TuiChannelWorkspaceFlowChoice {
26
+ readonly id: string
27
+ readonly label: string
28
+ readonly description?: string
29
+ readonly badge?: string
30
+ readonly action: string
31
+ readonly input?: {
32
+ readonly action: string
33
+ readonly initialValue?: string
34
+ readonly placeholder?: string
35
+ }
36
+ }
37
+
38
+ export type TuiChannelWorkspaceFlowResult =
39
+ | { readonly kind: 'target'; readonly target: import('./tui-contributions.js').WorkspaceTarget }
40
+ | { readonly kind: 'choices'; readonly title: string; readonly choices: readonly TuiChannelWorkspaceFlowChoice[] }
41
+
42
+ export type TuiChannelInput =
43
+ | { readonly operation: 'open'; readonly value: { readonly workspace?: string; readonly sessionId?: string; readonly options?: JsonValue } }
44
+ | { readonly operation: 'subscribe'; readonly value: { readonly channelId: string; readonly afterVersion: number } }
45
+ | { readonly operation: 'invoke'; readonly value: { readonly channelId: string; readonly method: string; readonly arguments: readonly JsonValue[] } }
46
+ | { readonly operation: 'close'; readonly value: { readonly channelId: string } }
47
+
48
+ export interface TuiChannelInvokeOutput {
49
+ readonly value: JsonValue
50
+ readonly valueDefined?: boolean
51
+ readonly snapshot?: TuiChannelSnapshot
52
+ }
53
+
54
+ export const tuiChannelDefinition: ProtocolDefinition
55
+ export function validateTuiChannelRequirement(value: unknown): TuiChannelRequirementSpec
56
+ export function validateTuiChannelSupport(value: unknown): TuiChannelSupportSpec
57
+ export function validateTuiChannelInput(operation: string, value: unknown): object
58
+ export function validateTuiChannelSnapshot(value: unknown): TuiChannelSnapshot
59
+ export function validateTuiChannelOutput(operation: string, value: unknown): object