@agi-fans/dsh-tui 0.22.0 → 0.23.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 (282) hide show
  1. package/LICENSE +26 -0
  2. package/lib/CHANGELOG.md +219 -1
  3. package/lib/chrome/box.d.ts +1 -18
  4. package/lib/chrome/box.js +2 -45
  5. package/lib/chrome/box.js.map +1 -1
  6. package/lib/chrome/code-highlight.js +4 -4
  7. package/lib/chrome/code-highlight.js.map +1 -1
  8. package/lib/chrome/command-output.d.ts +0 -1
  9. package/lib/chrome/command-output.js +11 -5
  10. package/lib/chrome/command-output.js.map +1 -1
  11. package/lib/chrome/goal-bar.js +1 -1
  12. package/lib/chrome/goal-bar.js.map +1 -1
  13. package/lib/chrome/main-screen-renderer.js +4 -3
  14. package/lib/chrome/main-screen-renderer.js.map +1 -1
  15. package/lib/chrome/markdown.d.ts +3 -3
  16. package/lib/chrome/markdown.js +85 -36
  17. package/lib/chrome/markdown.js.map +1 -1
  18. package/lib/chrome/md-style.d.ts +5 -2
  19. package/lib/chrome/md-style.js +13 -4
  20. package/lib/chrome/md-style.js.map +1 -1
  21. package/lib/chrome/renderer.d.ts +37 -1
  22. package/lib/chrome/renderer.js.map +1 -1
  23. package/lib/chrome/status-line.d.ts +3 -3
  24. package/lib/chrome/status-line.js +5 -5
  25. package/lib/chrome/status-line.js.map +1 -1
  26. package/lib/chrome/theme.d.ts +8 -3
  27. package/lib/chrome/theme.js +51 -153
  28. package/lib/chrome/theme.js.map +1 -1
  29. package/lib/commands/auth-account.d.ts +9 -0
  30. package/lib/commands/auth-account.js +202 -0
  31. package/lib/commands/auth-account.js.map +1 -0
  32. package/lib/commands/auth.js +238 -414
  33. package/lib/commands/auth.js.map +1 -1
  34. package/lib/commands/diff.js +22 -16
  35. package/lib/commands/diff.js.map +1 -1
  36. package/lib/commands/export.d.ts +0 -1
  37. package/lib/commands/export.js +99 -32
  38. package/lib/commands/export.js.map +1 -1
  39. package/lib/commands/files.js +11 -9
  40. package/lib/commands/files.js.map +1 -1
  41. package/lib/commands/integrations.d.ts +12 -1
  42. package/lib/commands/integrations.js +120 -23
  43. package/lib/commands/integrations.js.map +1 -1
  44. package/lib/commands/jobs-browser.d.ts +3 -0
  45. package/lib/commands/jobs-browser.js +152 -0
  46. package/lib/commands/jobs-browser.js.map +1 -0
  47. package/lib/commands/jobs.d.ts +3 -14
  48. package/lib/commands/jobs.js +26 -18
  49. package/lib/commands/jobs.js.map +1 -1
  50. package/lib/commands/model.d.ts +3 -0
  51. package/lib/commands/model.js +212 -128
  52. package/lib/commands/model.js.map +1 -1
  53. package/lib/commands/open-external.d.ts +2 -0
  54. package/lib/commands/open-external.js +19 -0
  55. package/lib/commands/open-external.js.map +1 -0
  56. package/lib/commands/permission.js +65 -54
  57. package/lib/commands/permission.js.map +1 -1
  58. package/lib/commands/plugins.js +381 -139
  59. package/lib/commands/plugins.js.map +1 -1
  60. package/lib/commands/schedule-catalog.d.ts +12 -0
  61. package/lib/commands/schedule-catalog.js +41 -0
  62. package/lib/commands/schedule-catalog.js.map +1 -0
  63. package/lib/commands/schedule-history.d.ts +4 -0
  64. package/lib/commands/schedule-history.js +62 -0
  65. package/lib/commands/schedule-history.js.map +1 -0
  66. package/lib/commands/schedule.d.ts +12 -15
  67. package/lib/commands/schedule.js +220 -187
  68. package/lib/commands/schedule.js.map +1 -1
  69. package/lib/commands/session-configuration.d.ts +3 -0
  70. package/lib/commands/session-configuration.js +62 -28
  71. package/lib/commands/session-configuration.js.map +1 -1
  72. package/lib/commands/session.js +116 -66
  73. package/lib/commands/session.js.map +1 -1
  74. package/lib/commands/terminal.js +14 -8
  75. package/lib/commands/terminal.js.map +1 -1
  76. package/lib/definition.d.ts +115 -15
  77. package/lib/index.d.ts +1 -0
  78. package/lib/index.js +1 -0
  79. package/lib/index.js.map +1 -1
  80. package/lib/input/actions.d.ts +1 -1
  81. package/lib/input/actions.js +5 -2
  82. package/lib/input/actions.js.map +1 -1
  83. package/lib/input/composer-files.d.ts +2 -0
  84. package/lib/input/composer-files.js +13 -3
  85. package/lib/input/composer-files.js.map +1 -1
  86. package/lib/input/image-paste.d.ts +5 -12
  87. package/lib/input/image-paste.js +32 -28
  88. package/lib/input/image-paste.js.map +1 -1
  89. package/lib/input/key-test.d.ts +5 -0
  90. package/lib/input/key-test.js +19 -0
  91. package/lib/input/key-test.js.map +1 -0
  92. package/lib/input/keys.d.ts +2 -0
  93. package/lib/input/keys.js +4 -1
  94. package/lib/input/keys.js.map +1 -1
  95. package/lib/locale/index.d.ts +6 -0
  96. package/lib/locale/index.js +32 -0
  97. package/lib/locale/index.js.map +1 -0
  98. package/lib/locale/prompt.d.ts +4 -0
  99. package/lib/locale/prompt.js +24 -0
  100. package/lib/locale/prompt.js.map +1 -0
  101. package/lib/locale/zh.d.ts +1114 -0
  102. package/lib/locale/zh.js +1115 -0
  103. package/lib/locale/zh.js.map +1 -0
  104. package/lib/prompt-intents.d.ts +4 -0
  105. package/lib/prompt-intents.js +4 -0
  106. package/lib/prompt-intents.js.map +1 -1
  107. package/lib/runtime/account-settings.d.ts +18 -0
  108. package/lib/runtime/account-settings.js +241 -0
  109. package/lib/runtime/account-settings.js.map +1 -0
  110. package/lib/runtime/agent-profile.d.ts +3 -3
  111. package/lib/runtime/agent-profile.js +4 -4
  112. package/lib/runtime/agent-profile.js.map +1 -1
  113. package/lib/runtime/btw-policy.js +2 -1
  114. package/lib/runtime/btw-policy.js.map +1 -1
  115. package/lib/runtime/btw.js +1 -2
  116. package/lib/runtime/btw.js.map +1 -1
  117. package/lib/runtime/composer-images.d.ts +2 -2
  118. package/lib/runtime/composer-images.js +4 -4
  119. package/lib/runtime/composer-images.js.map +1 -1
  120. package/lib/runtime/composer-shell.js +27 -1
  121. package/lib/runtime/composer-shell.js.map +1 -1
  122. package/lib/runtime/file-browser.d.ts +19 -0
  123. package/lib/runtime/file-browser.js +291 -0
  124. package/lib/runtime/file-browser.js.map +1 -0
  125. package/lib/runtime/file-review.d.ts +6 -9
  126. package/lib/runtime/file-review.js +91 -7
  127. package/lib/runtime/file-review.js.map +1 -1
  128. package/lib/runtime/help-reader.d.ts +12 -0
  129. package/lib/runtime/help-reader.js +50 -0
  130. package/lib/runtime/help-reader.js.map +1 -0
  131. package/lib/runtime/human-interaction.js +1 -1
  132. package/lib/runtime/human-interaction.js.map +1 -1
  133. package/lib/runtime/model-catalog-editor.d.ts +12 -0
  134. package/lib/runtime/model-catalog-editor.js +215 -0
  135. package/lib/runtime/model-catalog-editor.js.map +1 -0
  136. package/lib/runtime/model-settings.d.ts +11 -0
  137. package/lib/runtime/model-settings.js +404 -0
  138. package/lib/runtime/model-settings.js.map +1 -0
  139. package/lib/runtime/plugin-settings.d.ts +4 -1
  140. package/lib/runtime/plugin-settings.js +164 -88
  141. package/lib/runtime/plugin-settings.js.map +1 -1
  142. package/lib/runtime/prompt-browser.d.ts +9 -0
  143. package/lib/runtime/prompt-browser.js +19 -0
  144. package/lib/runtime/prompt-browser.js.map +1 -0
  145. package/lib/runtime/provider-local.d.ts +27 -27
  146. package/lib/runtime/provider-local.js +1288 -308
  147. package/lib/runtime/provider-local.js.map +1 -1
  148. package/lib/runtime/reference-reader.d.ts +15 -0
  149. package/lib/runtime/reference-reader.js +78 -0
  150. package/lib/runtime/reference-reader.js.map +1 -0
  151. package/lib/runtime/runner.js +38 -29
  152. package/lib/runtime/runner.js.map +1 -1
  153. package/lib/runtime/session-runtime.js +1 -1
  154. package/lib/runtime/session-runtime.js.map +1 -1
  155. package/lib/runtime/settings-draft.d.ts +21 -0
  156. package/lib/runtime/settings-draft.js +166 -0
  157. package/lib/runtime/settings-draft.js.map +1 -0
  158. package/lib/runtime/settings-preferences.js +1 -1
  159. package/lib/runtime/settings-preferences.js.map +1 -1
  160. package/lib/runtime/startup-notices.d.ts +0 -1
  161. package/lib/runtime/startup-notices.js +35 -6
  162. package/lib/runtime/startup-notices.js.map +1 -1
  163. package/lib/runtime/subagent-model-selection.js +2 -1
  164. package/lib/runtime/subagent-model-selection.js.map +1 -1
  165. package/lib/runtime/subagent-settings.d.ts +14 -0
  166. package/lib/runtime/subagent-settings.js +288 -0
  167. package/lib/runtime/subagent-settings.js.map +1 -0
  168. package/lib/runtime/terminal-notifications.d.ts +3 -0
  169. package/lib/runtime/terminal-notifications.js +13 -8
  170. package/lib/runtime/terminal-notifications.js.map +1 -1
  171. package/lib/runtime/terminal-probe.d.ts +2 -0
  172. package/lib/runtime/terminal-probe.js +9 -0
  173. package/lib/runtime/terminal-probe.js.map +1 -1
  174. package/lib/runtime/tool-presentation.js.map +1 -1
  175. package/lib/runtime/tool-reader.d.ts +5 -0
  176. package/lib/runtime/tool-reader.js +27 -0
  177. package/lib/runtime/tool-reader.js.map +1 -0
  178. package/lib/runtime/web-settings.d.ts +14 -0
  179. package/lib/runtime/web-settings.js +339 -0
  180. package/lib/runtime/web-settings.js.map +1 -0
  181. package/lib/session/command-attachments.d.ts +17 -0
  182. package/lib/session/command-attachments.js +50 -0
  183. package/lib/session/command-attachments.js.map +1 -0
  184. package/lib/session/context-diagnostics.d.ts +16 -0
  185. package/lib/session/context-diagnostics.js +15 -0
  186. package/lib/session/context-diagnostics.js.map +1 -1
  187. package/lib/session/external-agents.d.ts +3 -1
  188. package/lib/session/external-agents.js +35 -10
  189. package/lib/session/external-agents.js.map +1 -1
  190. package/lib/session/generation-continuation.d.ts +11 -0
  191. package/lib/session/generation-continuation.js +34 -0
  192. package/lib/session/generation-continuation.js.map +1 -0
  193. package/lib/session/goal-controls.d.ts +5 -0
  194. package/lib/session/goal-controls.js +81 -0
  195. package/lib/session/goal-controls.js.map +1 -0
  196. package/lib/session/interaction-adapter.d.ts +7 -3
  197. package/lib/session/interaction-adapter.js +121 -49
  198. package/lib/session/interaction-adapter.js.map +1 -1
  199. package/lib/session/message-queue.d.ts +2 -0
  200. package/lib/session/message-queue.js +102 -17
  201. package/lib/session/message-queue.js.map +1 -1
  202. package/lib/session/pending-inputs.d.ts +30 -0
  203. package/lib/session/pending-inputs.js +183 -0
  204. package/lib/session/pending-inputs.js.map +1 -0
  205. package/lib/session/session-configuration.js +1 -1
  206. package/lib/session/session-configuration.js.map +1 -1
  207. package/lib/session/session-controller.d.ts +33 -20
  208. package/lib/session/session-controller.js +500 -129
  209. package/lib/session/session-controller.js.map +1 -1
  210. package/lib/session/session-library.d.ts +3 -1
  211. package/lib/session/session-library.js +15 -0
  212. package/lib/session/session-library.js.map +1 -1
  213. package/lib/session/subagent-roster.d.ts +1 -0
  214. package/lib/session/subagent-roster.js +16 -5
  215. package/lib/session/subagent-roster.js.map +1 -1
  216. package/lib/session/subagent-tracker.d.ts +2 -0
  217. package/lib/session/subagent-tracker.js +18 -0
  218. package/lib/session/subagent-tracker.js.map +1 -1
  219. package/lib/session/tui-settings.d.ts +9 -5
  220. package/lib/session/tui-settings.js +3 -1
  221. package/lib/session/tui-settings.js.map +1 -1
  222. package/lib/session/workflow-projection.d.ts +2 -1
  223. package/lib/session/workflow-projection.js +34 -4
  224. package/lib/session/workflow-projection.js.map +1 -1
  225. package/lib/views/autocomplete.d.ts +12 -12
  226. package/lib/views/autocomplete.js +54 -45
  227. package/lib/views/autocomplete.js.map +1 -1
  228. package/lib/views/context-overview.d.ts +4 -0
  229. package/lib/views/context-overview.js +43 -0
  230. package/lib/views/context-overview.js.map +1 -0
  231. package/lib/views/copy-targets.d.ts +6 -2
  232. package/lib/views/copy-targets.js +19 -14
  233. package/lib/views/copy-targets.js.map +1 -1
  234. package/lib/views/document-reader.d.ts +10 -1
  235. package/lib/views/document-reader.js +63 -6
  236. package/lib/views/document-reader.js.map +1 -1
  237. package/lib/views/event-views.js +29 -11
  238. package/lib/views/event-views.js.map +1 -1
  239. package/lib/views/file-actions.js +21 -0
  240. package/lib/views/file-actions.js.map +1 -1
  241. package/lib/views/file-browser.d.ts +98 -0
  242. package/lib/views/file-browser.js +120 -0
  243. package/lib/views/file-browser.js.map +1 -0
  244. package/lib/views/history-search.js +4 -4
  245. package/lib/views/history-search.js.map +1 -1
  246. package/lib/views/hotkey-format.d.ts +3 -2
  247. package/lib/views/hotkey-format.js +4 -3
  248. package/lib/views/hotkey-format.js.map +1 -1
  249. package/lib/views/hotkeys.js +10 -12
  250. package/lib/views/hotkeys.js.map +1 -1
  251. package/lib/views/list-view.js +16 -11
  252. package/lib/views/list-view.js.map +1 -1
  253. package/lib/views/prompt-selector.d.ts +23 -1
  254. package/lib/views/prompt-selector.js +123 -60
  255. package/lib/views/prompt-selector.js.map +1 -1
  256. package/lib/views/settings-list.d.ts +6 -1
  257. package/lib/views/settings-list.js +69 -46
  258. package/lib/views/settings-list.js.map +1 -1
  259. package/lib/views/tool-actions.d.ts +16 -0
  260. package/lib/views/tool-actions.js +29 -0
  261. package/lib/views/tool-actions.js.map +1 -0
  262. package/lib/views/trajectory-timeline.d.ts +5 -6
  263. package/lib/views/trajectory-timeline.js +25 -15
  264. package/lib/views/trajectory-timeline.js.map +1 -1
  265. package/lib/views/trajectory.d.ts +23 -2
  266. package/lib/views/trajectory.js +404 -186
  267. package/lib/views/trajectory.js.map +1 -1
  268. package/lib/views/transcript-render.d.ts +39 -15
  269. package/lib/views/transcript-render.js +406 -208
  270. package/lib/views/transcript-render.js.map +1 -1
  271. package/lib/views/transcript-types.d.ts +3 -2
  272. package/lib/views/transcript-types.js.map +1 -1
  273. package/lib/views/workflow.d.ts +16 -0
  274. package/lib/views/workflow.js +42 -0
  275. package/lib/views/workflow.js.map +1 -0
  276. package/package.json +61 -58
  277. package/lib/chrome/welcome-tips.d.ts +0 -23
  278. package/lib/chrome/welcome-tips.js +0 -24
  279. package/lib/chrome/welcome-tips.js.map +0 -1
  280. package/lib/session/steering.d.ts +0 -3
  281. package/lib/session/steering.js +0 -9
  282. package/lib/session/steering.js.map +0 -1
@@ -30,6 +30,8 @@ export declare class SubagentTracker {
30
30
  owns(id: string): boolean;
31
31
  /** The current published snapshot, or undefined for an empty roster. */
32
32
  snapshot(): TuiSubagentRoster | undefined;
33
+ /** Project the lifetime of a live approval, including queued prompts. */
34
+ beginApprovalRequest(id: string): () => void;
33
35
  /** Drop all tracked children and invalidate any in-flight catalog listing. */
34
36
  reset(): void;
35
37
  /** Remember a freshly created session when it descends from the root. */
@@ -12,6 +12,7 @@ export class SubagentTracker {
12
12
  #roster = new SubagentRoster();
13
13
  #published;
14
14
  #epoch = 0;
15
+ #approvalRequests = new Map();
15
16
  #externalRuns = new Map();
16
17
  #externalActivities = new Map();
17
18
  constructor(deps) {
@@ -25,10 +26,25 @@ export class SubagentTracker {
25
26
  snapshot() {
26
27
  return this.#roster.snapshot();
27
28
  }
29
+ /** Project the lifetime of a live approval, including queued prompts. */
30
+ beginApprovalRequest(id) {
31
+ const requests = this.#approvalRequests.get(id) ?? new Set();
32
+ const token = Symbol();
33
+ requests.add(token);
34
+ this.#approvalRequests.set(id, requests);
35
+ this.#publish();
36
+ return () => {
37
+ if (this.#approvalRequests.get(id) !== requests)
38
+ return;
39
+ requests.delete(token);
40
+ this.#publish();
41
+ };
42
+ }
28
43
  /** Drop all tracked children and invalidate any in-flight catalog listing. */
29
44
  reset() {
30
45
  this.#epoch += 1;
31
46
  this.#roster.reset();
47
+ this.#approvalRequests.clear();
32
48
  this.#externalRuns.clear();
33
49
  this.#externalActivities.clear();
34
50
  }
@@ -165,6 +181,8 @@ export class SubagentTracker {
165
181
  }
166
182
  /** Push the roster when its snapshot identity changed since the last push. */
167
183
  #publish() {
184
+ for (const [id, requests] of this.#approvalRequests)
185
+ this.#roster.setNeedsInput(id, requests.size > 0);
168
186
  const roster = this.#roster.snapshot();
169
187
  if (roster === this.#published)
170
188
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-tracker.js","sourceRoot":"","sources":["../../src/session/subagent-tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subagent-tracker.js","sourceRoot":"","sources":["../../src/session/subagent-tracker.ts"],"names":[],"mappings":"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"}
@@ -51,6 +51,7 @@ export declare function resolveNotificationMode(notifications: string | undefine
51
51
  export declare const TUI_SETTINGS_ENTRY = "tui";
52
52
  /** Durable TUI preferences as live references on the owning entry's config. */
53
53
  export interface TuiSettings {
54
+ uiLanguage: Volatile<'auto' | 'zh-CN' | 'en'>;
54
55
  theme: Volatile<ThemeName>;
55
56
  colors: Volatile<boolean | undefined>;
56
57
  motion: Volatile<MotionMode>;
@@ -60,6 +61,7 @@ export interface TuiSettings {
60
61
  editor: Volatile<EditorId>;
61
62
  terminalTitle: Volatile<TerminalTitleMode>;
62
63
  terminalState: Volatile<TerminalStateMode>;
64
+ busyEnter: Volatile<'queue' | 'steer'>;
63
65
  pasteProtection: Volatile<boolean>;
64
66
  copyOnSelect: Volatile<boolean>;
65
67
  mouseInteraction: Volatile<'auto' | 'tui' | 'native'>;
@@ -85,25 +87,27 @@ export interface TuiSettings {
85
87
  * stay undefined unless a value was written.
86
88
  */
87
89
  export declare const TUI_SETTINGS_FIELDS: {
90
+ readonly uiLanguage: z<"en" | "zh-CN" | "auto", "en" | "zh-CN" | "auto", "volatile-defined">;
88
91
  readonly theme: z<"dark" | "light" | "system", "dark" | "light" | "system", "volatile-defined">;
89
92
  readonly colors: z<boolean, boolean, "volatile">;
90
- readonly motion: z<"full" | "off" | "reduced", "full" | "off" | "reduced", "volatile-defined">;
93
+ readonly motion: z<"off" | "full" | "reduced", "off" | "full" | "reduced", "volatile-defined">;
91
94
  readonly mathMode: z<"auto" | "source", "auto" | "source", "volatile-defined">;
92
95
  readonly mermaidMode: z<"auto" | "source", "auto" | "source", "volatile-defined">;
93
96
  readonly hideThinking: z<boolean, boolean, "volatile-defined">;
94
97
  readonly editor: z<"auto" | "code" | "cursor" | "codium" | "nvim" | "vim" | "nano" | "vi", "auto" | "code" | "cursor" | "codium" | "nvim" | "vim" | "nano" | "vi", "volatile-defined">;
95
- readonly terminalTitle: z<"session" | "workspace" | "status" | "off", "session" | "workspace" | "status" | "off", "volatile-defined">;
98
+ readonly terminalTitle: z<"session" | "workspace" | "off" | "status", "session" | "workspace" | "off" | "status", "volatile-defined">;
96
99
  readonly terminalState: z<"on" | "auto" | "off", "on" | "auto" | "off", "volatile-defined">;
100
+ readonly busyEnter: z<"queue" | "steer", "queue" | "steer", "volatile-defined">;
97
101
  readonly pasteProtection: z<boolean, boolean, "volatile-defined">;
98
102
  readonly copyOnSelect: z<boolean, boolean, "volatile-defined">;
99
103
  readonly mouseInteraction: z<"tui" | "auto" | "native", "tui" | "auto" | "native", "volatile-defined">;
100
- readonly foldDensity: z<"standard" | "compact" | "detailed" | "verbose", "standard" | "compact" | "detailed" | "verbose", "volatile-defined">;
104
+ readonly foldDensity: z<"standard" | "verbose" | "compact" | "detailed", "standard" | "verbose" | "compact" | "detailed", "volatile-defined">;
101
105
  readonly expandTools: z<boolean, boolean, "volatile-defined">;
102
106
  readonly checkUpdates: z<boolean, boolean, "volatile-defined">;
103
- readonly startupChangelog: z<"summary" | "hidden" | "expanded", "summary" | "hidden" | "expanded", "volatile-defined">;
107
+ readonly startupChangelog: z<"hidden" | "summary" | "expanded", "hidden" | "summary" | "expanded", "volatile-defined">;
104
108
  readonly notifications: z<"off" | "unfocused" | "always" | "long-running", "off" | "unfocused" | "always" | "long-running", "volatile-defined">;
105
109
  readonly notificationFocus: z<"unfocused" | "always", "unfocused" | "always", "volatile">;
106
110
  readonly notificationThreshold: z<"15s" | "30s" | "1m" | "2m", "15s" | "30s" | "1m" | "2m", "volatile">;
107
111
  readonly statusBar: z<any, any, "volatile" | "volatile-defined">;
108
- readonly statusPreset: z<"minimal" | "compact" | "full", "minimal" | "compact" | "full", "volatile">;
112
+ readonly statusPreset: z<"full" | "minimal" | "compact", "full" | "minimal" | "compact", "volatile">;
109
113
  };
@@ -97,15 +97,17 @@ const STATUS_BAR_SCHEMA = z.object({
97
97
  * stay undefined unless a value was written.
98
98
  */
99
99
  export const TUI_SETTINGS_FIELDS = {
100
+ uiLanguage: z.union(['auto', 'zh-CN', 'en']).default('auto').volatile(),
100
101
  theme: z.union([...THEME_NAMES]).default('dark').volatile(),
101
102
  colors: z.boolean().volatile(),
102
103
  motion: z.union([...MOTION_MODES]).default('full').volatile(),
103
104
  mathMode: z.union([...MATH_MODES]).default('auto').volatile(),
104
105
  mermaidMode: z.union([...MERMAID_MODES]).default('auto').volatile(),
105
- hideThinking: z.boolean().default(false).volatile(),
106
+ hideThinking: z.boolean().default(true).volatile(),
106
107
  editor: z.union([...EDITOR_IDS]).default('auto').volatile(),
107
108
  terminalTitle: z.union([...TERMINAL_TITLE_MODES]).default('status').volatile(),
108
109
  terminalState: z.union([...TERMINAL_STATE_MODES]).default('auto').volatile(),
110
+ busyEnter: z.union(['queue', 'steer']).default('queue').volatile(),
109
111
  pasteProtection: z.boolean().default(true).volatile(),
110
112
  copyOnSelect: z.boolean().default(true).volatile(),
111
113
  mouseInteraction: z.union(['auto', 'tui', 'native']).default('auto').volatile(),
@@ -1 +1 @@
1
- {"version":3,"file":"tui-settings.js","sourceRoot":"","sources":["../../src/session/tui-settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tui-settings.js","sourceRoot":"","sources":["../../src/session/tui-settings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAiB,MAAM,8BAA8B,CAAA;AAExE,OAAO,CAAC,MAAM,0BAA0B,CAAA;AACxC,OAAO,EAAE,uBAAuB,EAA6B,MAAM,oBAAoB,CAAA;AACvF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAoB,MAAM,kBAAkB,CAAA;AACzF,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,cAAc,GAGf,MAAM,4BAA4B,CAAA;AACnC,OAAO,EAAE,WAAW,EAAkB,MAAM,oBAAoB,CAAA;AAChE,OAAO,EAAE,UAAU,EAAiB,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAAE,aAAa,EAAoB,MAAM,sBAAsB,CAAA;AAEtE,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAkD,MAAM,8BAA8B,CAAA;AAEzI,6CAA6C;AAC7C,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAU,CAAA;AAG/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAA;AAEzE,qFAAqF;AACrF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAA;AAGhG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,MAAM,CAAA;AAE/C,yDAAyD;AACzD,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAU,CAAA;AAGjF,mDAAmD;AACnD,MAAM,UAAU,iBAAiB,CAAC,KAAkC;IAClE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,aAAiC,EACjC,KAAyC;IAEzC,IAAI,aAAa,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC/C,IAAI,aAAa,KAAK,WAAW;QAAE,OAAO,WAAW,CAAA;IACrD,IAAI,aAAa,KAAK,cAAc;QAAE,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAA;IACxF,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAA;AAiCvC;;;;GAIG;AACH;;;;;;;GAOG;AACH,MAAM,iBAAiB,GAAqB,CAAC,CAAC,MAAM,CAAC;IACnD,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC3D,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC1D,gFAAgF;IAChF,+EAA+E;IAC/E,yDAAyD;IACzD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACzD,6EAA6E;IAC7E,6EAA6E;IAC7E,0EAA0E;IAC1E,kEAAkE;IAClE,4EAA4E;IAC5E,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE;IAChB,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE;IACf,YAAY,EAAE,CAAC,CAAC,GAAG,EAAE;IACrB,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE;IACf,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE;IACd,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE;IACb,SAAS,EAAE,CAAC,CAAC,GAAG,EAAE;IAClB,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE;IACf,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE;CACf,CAAC,CAAA;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAU,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAChF,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAC3D,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAC7D,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAC7D,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IACnE,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAClD,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAC3D,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE;IAC9E,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IAC5E,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAU,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE;IAC3E,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IACrD,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAClD,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAU,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE;IACxF,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE;IAClF,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IAClD,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;IAClD,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE;IACrF,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,yBAAyB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;IAChF,iBAAiB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAU,CAAC,CAAC,QAAQ,EAAE;IACvE,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,8BAA8B,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC9E,SAAS,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACvC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,QAAQ,EAAE;CAC7C,CAAA"}
@@ -1,8 +1,9 @@
1
1
  /** Incremental presentation of published durable workflow records. */
2
2
  import type { SessionEvent } from '@deepseek-ai/dsh-session';
3
- import type { TuiSubagentRoster } from '../definition.ts';
3
+ import type { TuiSubagentRoster, TuiWorkflowRun } from '../definition.ts';
4
4
  export declare class WorkflowProjection {
5
5
  #private;
6
+ get(id: string): TuiWorkflowRun | undefined;
6
7
  reset(events: readonly SessionEvent[]): void;
7
8
  apply(event: SessionEvent): boolean;
8
9
  roster(roster: TuiSubagentRoster | undefined): TuiSubagentRoster | undefined;
@@ -1,14 +1,44 @@
1
1
  /** Incremental presentation of published durable workflow records. */
2
2
  export class WorkflowProjection {
3
3
  #runs = new Map();
4
- reset(events) { this.#runs.clear(); for (const event of events)
5
- this.apply(event); }
4
+ #turn;
5
+ #runTurns = new Map();
6
+ get(id) { return this.#runs.get(id); }
7
+ reset(events) {
8
+ this.#runs.clear();
9
+ this.#runTurns.clear();
10
+ this.#turn = undefined;
11
+ for (const event of events)
12
+ this.apply(event);
13
+ }
6
14
  apply(event) {
15
+ if (event.type === 'turn/start') {
16
+ this.#turn = event.data.turn;
17
+ return false;
18
+ }
19
+ if (event.type === 'turn/end') {
20
+ if (this.#turn === event.data.turn)
21
+ this.#turn = undefined;
22
+ if (event.data.reason.kind !== 'interrupted' && event.data.reason.kind !== 'forked')
23
+ return false;
24
+ let changed = false;
25
+ for (const [id, run] of this.#runs) {
26
+ if (this.#runTurns.get(id) !== event.data.turn || run.status !== 'open')
27
+ continue;
28
+ this.#runs.set(id, { ...run, status: 'interrupted' });
29
+ changed = true;
30
+ }
31
+ return changed;
32
+ }
7
33
  if (event.type === 'tool-workflow/run-start') {
34
+ this.#runTurns.set(event.data.runId, this.#turn);
8
35
  this.#runs.set(event.data.runId, { id: event.data.runId, name: event.data.name, status: 'open', members: [] });
9
36
  // Keep bounded history; complete data remains in the session log.
10
- if (this.#runs.size > 100)
11
- this.#runs.delete(this.#runs.keys().next().value);
37
+ if (this.#runs.size > 100) {
38
+ const oldest = this.#runs.keys().next().value;
39
+ this.#runs.delete(oldest);
40
+ this.#runTurns.delete(oldest);
41
+ }
12
42
  return true;
13
43
  }
14
44
  if (event.type !== 'tool-workflow/run-end' && event.type !== 'tool-workflow/agent-start' && event.type !== 'tool-workflow/agent-end')
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-projection.js","sourceRoot":"","sources":["../../src/session/workflow-projection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-projection.js","sourceRoot":"","sources":["../../src/session/workflow-projection.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ import { type UiLanguage } from '../locale/index.ts';
2
+ import type { TuiArgumentOption, TuiCommand } from '../definition.ts';
1
3
  /**
2
4
  * Slash-command autocomplete: OMP-style leading-`/` matching, ranking, and
3
5
  * completion apply. Pure — the provider owns popup selection and execution.
@@ -11,10 +13,8 @@ export interface SlashArgument {
11
13
  description: string;
12
14
  }
13
15
  /** One slash command the editor can complete and the TUI can run. */
14
- export interface SlashCommand {
15
- name: string;
16
+ export interface SlashCommand extends TuiCommand {
16
17
  aliases?: readonly string[];
17
- description: string;
18
18
  arguments?: readonly SlashArgument[];
19
19
  /** Free-form argument usage contributed by a runtime command plugin. */
20
20
  inputHint?: string;
@@ -25,16 +25,14 @@ export interface SlashCommand {
25
25
  * in runtime state — the models on offer, the sessions that exist — so the
26
26
  * reader completes the line instead of opening a picker to choose from it.
27
27
  */
28
- complete?: (prefix: string) => readonly {
29
- value: string;
30
- description?: string;
31
- }[];
28
+ complete?: (prefix: string) => readonly TuiArgumentOption[];
32
29
  }
33
30
  /** One ranked suggestion shown in the popup. */
34
31
  export interface AutocompleteItem {
35
32
  value: string;
36
33
  label: string;
37
34
  description?: string;
35
+ skill?: TuiCommand['skill'];
38
36
  /** Argument, path, and session rows paint without a leading `/`. */
39
37
  kind?: 'command' | 'argument' | 'path' | 'session' | 'heading';
40
38
  }
@@ -44,6 +42,7 @@ export declare const COMMAND_GROUPS: readonly {
44
42
  label: string;
45
43
  names: readonly string[];
46
44
  }[];
45
+ export declare const COMMON_COMMANDS: string[];
47
46
  /** Visible popup rows (OMP editor default). */
48
47
  export declare const AUTOCOMPLETE_MAX_VISIBLE = 5;
49
48
  /** Index of the `/` that opens a leading slash command, or null. */
@@ -56,7 +55,7 @@ export declare function leadingSlashCommandNameRange(text: string): {
56
55
  start: number;
57
56
  end: number;
58
57
  } | null;
59
- /** Subsequence match (`wig` hits `skill:wig`). */
58
+ /** Subsequence match (`cr` hits `code-review`). */
60
59
  export declare function fuzzyMatch(query: string, target: string): boolean;
61
60
  /**
62
61
  * Rank a fuzzy hit. Exact > starts-with > contains > tight subsequence.
@@ -68,17 +67,18 @@ export declare function fuzzyScore(query: string, target: string): number;
68
67
  */
69
68
  export declare function scoreCommandTextMatch(lowerPrefix: string, lowerTarget: string): number;
70
69
  /** Ranked command-name completions for a prefix (no leading slash). */
71
- export declare function buildSlashCommandCompletions(commands: readonly SlashCommand[], lowerPrefix: string): AutocompleteItem[];
70
+ export declare function buildSlashCommandCompletions(commands: readonly SlashCommand[], lowerPrefix: string, language?: UiLanguage): AutocompleteItem[];
72
71
  /** Ranked argument completions for the token after `/name `. */
73
72
  export declare function buildSlashArgumentCompletions(args: readonly SlashArgument[], lowerPrefix: string): AutocompleteItem[];
73
+ export declare function argumentHint(command: SlashCommand): string;
74
74
  /** Dim ghost text after the caret for `/name ` argument state. */
75
75
  export declare function slashInlineHint(text: string, cursor: number, commands?: readonly SlashCommand[]): string | null;
76
76
  /** Suggestions for the live buffer, or null when the cursor is not in a command token. */
77
- export declare function slashSuggestions(text: string, cursor: number, commands?: readonly SlashCommand[]): {
77
+ export declare function slashSuggestions(text: string, cursor: number, commands?: readonly SlashCommand[], language?: UiLanguage): {
78
78
  items: AutocompleteItem[];
79
79
  prefix: string;
80
80
  } | null;
81
- /** Replace the live command or argument token with the selected completion. */
81
+ /** Replace the command name or complete argument query with the selected completion. */
82
82
  export declare function applySlashCompletion(text: string, cursor: number, item: AutocompleteItem): {
83
83
  text: string;
84
84
  cursor: number;
@@ -91,7 +91,7 @@ export declare function parseSlashInput(text: string): {
91
91
  /** Resolve a typed name or alias to a catalog entry. */
92
92
  export declare function resolveSlashCommand(name: string, commands?: readonly SlashCommand[]): SlashCommand | undefined;
93
93
  /** Grouped Markdown command directory rendered by the command-output surface. */
94
- export declare function formatHelpText(commands?: readonly SlashCommand[]): string;
94
+ export declare function formatHelpText(commands?: readonly SlashCommand[], language?: UiLanguage): string;
95
95
  /** Visible item-index window around `selected` (counter row is not included). */
96
96
  export declare function autocompleteVisibleRange(count: number, selected: number): {
97
97
  start: number;
@@ -1,10 +1,6 @@
1
- /**
2
- * Slash-command autocomplete: OMP-style leading-`/` matching, ranking, and
3
- * completion apply. Pure — the provider owns popup selection and execution.
4
- * @module @agi-fans/dsh-tui
5
- */
1
+ import { uiText } from "../locale/index.js";
6
2
  import { truncateToWidth } from "../chrome/width.js";
7
- import { subsequencePenalty } from "../input/fuzzy-search.js";
3
+ import { rankSearchResults, subsequencePenalty } from "../input/fuzzy-search.js";
8
4
  import { listPrimaryColumnWidth, listVisibleRange, renderListCounter, renderListRow, renderListRowWithValue, } from "./list-view.js";
9
5
  const HELP_ARGUMENTS = [
10
6
  { value: 'full', description: 'Include every keyboard shortcut' },
@@ -20,15 +16,15 @@ export const BUILTIN_SLASH_COMMANDS = [
20
16
  ];
21
17
  // Task groups affect discovery only; command registration stays in Harness.
22
18
  export const COMMAND_GROUPS = [
23
- { label: 'Session', names: ['new', 'resume', 'retry', 'clear'] },
19
+ { label: 'Session', names: ['new', 'resume', 'continue', 'retry', 'clear'] },
24
20
  { label: 'Model and access', names: ['model', 'plan', 'permission', 'agent', 'login', 'logout'] },
25
21
  { label: 'Files and output', names: ['diff', 'attach', 'copy', 'export'] },
26
22
  { label: 'Tasks', names: ['queue', 'btw', 'questions', 'jobs', 'goal', 'compact', 'schedule'] },
27
23
  { label: 'Settings and integrations', names: ['settings', 'mcp', 'plugins'] },
28
- { label: 'Diagnostics', names: ['session', 'context', 'trajectory', 'tools', 'changelog'] },
24
+ { label: 'Diagnostics', names: ['context', 'trajectory', 'tools', 'changelog'] },
29
25
  { label: 'Application', names: ['help', 'quit'] },
30
26
  ];
31
- const COMMON_COMMANDS = ['model', 'plan', 'permission', 'resume', 'diff', 'settings', 'new', 'help'];
27
+ export const COMMON_COMMANDS = ['model', 'plan', 'permission', 'resume', 'diff', 'settings', 'new', 'help'];
32
28
  /** Visible popup rows (OMP editor default). */
33
29
  export const AUTOCOMPLETE_MAX_VISIBLE = 5;
34
30
  /** Index of the `/` that opens a leading slash command, or null. */
@@ -52,14 +48,10 @@ export function leadingSlashCommandNameRange(text) {
52
48
  if (token.slice(1).includes('/'))
53
49
  return null;
54
50
  const body = token.slice(1);
55
- if (body.startsWith('skill:')) {
56
- const space = body.search(/\s/u);
57
- return { start, end: start + 1 + (space === -1 ? body.length : space) };
58
- }
59
51
  const sep = body.search(/[\s:]/u);
60
52
  return { start, end: start + 1 + (sep === -1 ? body.length : sep) };
61
53
  }
62
- /** Subsequence match (`wig` hits `skill:wig`). */
54
+ /** Subsequence match (`cr` hits `code-review`). */
63
55
  export function fuzzyMatch(query, target) {
64
56
  return subsequencePenalty(query, target) !== undefined;
65
57
  }
@@ -116,30 +108,48 @@ function buildNamedCompletions(entries, lowerPrefix, kind) {
116
108
  item.description = entry.description;
117
109
  best = item;
118
110
  }
119
- if (kind === 'command' && lowerPrefix.length >= 3 && best === undefined && entry.description.toLowerCase().includes(lowerPrefix)) {
111
+ if (kind === 'command' && lowerPrefix.length >= 2 && best === undefined && rankSearchResults([entry], lowerPrefix, item => [item.description, ...(item.searchFields ?? [])]).length > 0) {
120
112
  best = { value: entry.value, label: entry.value, kind, score: 50, description: entry.description };
121
113
  }
122
- return best === undefined ? [] : [best];
114
+ return best === undefined ? [] : [{ ...best, ...(entry.skill === undefined ? {} : { skill: entry.skill }) }];
123
115
  })
124
116
  .sort((a, b) => b.score - a.score)
125
117
  .map(({ score: _score, ...rest }) => rest);
126
118
  }
119
+ /** Search terms aid discovery while command names remain the executable vocabulary. */
120
+ const COMMAND_KEYWORDS = {
121
+ model: ['model', 'provider', '模型', '供应商'],
122
+ permission: ['access', 'permissions', '权限', '访问'],
123
+ resume: ['session', 'history', '会话', '历史', '恢复'],
124
+ new: ['session', '会话', '新建'],
125
+ context: ['context', 'usage', '上下文', '用量'],
126
+ diff: ['changes', 'files', '差异', '修改', '文件'],
127
+ plan: ['planning', '计划', '规划'],
128
+ login: ['account', 'credentials', '登录', '账户', '密钥'],
129
+ settings: ['preferences', '设置', '配置'],
130
+ plugins: ['extensions', '插件', '扩展'],
131
+ queue: ['messages', '消息', '队列'],
132
+ copy: ['clipboard', '复制', '剪贴板'],
133
+ help: ['shortcuts', '帮助', '快捷键'],
134
+ };
127
135
  /** Ranked command-name completions for a prefix (no leading slash). */
128
- export function buildSlashCommandCompletions(commands, lowerPrefix) {
136
+ export function buildSlashCommandCompletions(commands, lowerPrefix, language = 'en') {
129
137
  return buildNamedCompletions((lowerPrefix === '' ? [...commands].sort((a, b) => {
130
138
  const rank = (name) => { const i = COMMON_COMMANDS.indexOf(name); return i < 0 ? COMMON_COMMANDS.length : i; };
131
139
  return rank(a.name) - rank(b.name);
132
140
  }) : commands).map((command) => ({
133
141
  value: command.name,
134
142
  ...(command.aliases === undefined ? {} : { aliases: command.aliases }),
135
- description: command.description,
136
- })), lowerPrefix, 'command');
143
+ description: uiText(language, command.description),
144
+ searchFields: [command.description, ...(COMMAND_KEYWORDS[command.name] ?? [])],
145
+ ...(command.skill === undefined ? {} : { skill: command.skill }),
146
+ })), lowerPrefix.trim().replace(/^\//u, ''), 'command');
137
147
  }
138
148
  /** Ranked argument completions for the token after `/name `. */
139
149
  export function buildSlashArgumentCompletions(args, lowerPrefix) {
140
150
  return buildNamedCompletions(args, lowerPrefix, 'argument');
141
151
  }
142
- function argumentHint(command) {
152
+ export function argumentHint(command) {
143
153
  if (command.inputHint !== undefined && command.inputHint !== '')
144
154
  return ' ' + command.inputHint;
145
155
  const args = command.arguments;
@@ -181,7 +191,7 @@ export function slashInlineHint(text, cursor, commands = BUILTIN_SLASH_COMMANDS)
181
191
  return null;
182
192
  }
183
193
  /** Suggestions for the live buffer, or null when the cursor is not in a command token. */
184
- export function slashSuggestions(text, cursor, commands = BUILTIN_SLASH_COMMANDS) {
194
+ export function slashSuggestions(text, cursor, commands = BUILTIN_SLASH_COMMANDS, language = 'en') {
185
195
  const before = text.slice(0, cursor);
186
196
  if (text.includes('\n'))
187
197
  return null;
@@ -189,11 +199,11 @@ export function slashSuggestions(text, cursor, commands = BUILTIN_SLASH_COMMANDS
189
199
  if (start === null)
190
200
  return null;
191
201
  const token = before.slice(start);
192
- if (token.slice(1).includes('/'))
193
- return null;
194
202
  const space = token.indexOf(' ');
203
+ if (token.slice(1, space === -1 ? undefined : space).includes('/'))
204
+ return null;
195
205
  if (space === -1) {
196
- const items = buildSlashCommandCompletions(commands, token.slice(1).toLowerCase());
206
+ const items = buildSlashCommandCompletions(commands, token.slice(1).toLowerCase(), language);
197
207
  if (items.length === 0)
198
208
  return null;
199
209
  return { items, prefix: before };
@@ -206,11 +216,11 @@ export function slashSuggestions(text, cursor, commands = BUILTIN_SLASH_COMMANDS
206
216
  if (command?.complete !== undefined) {
207
217
  const items = [];
208
218
  for (const option of command.complete(prefix)) {
209
- if (!fuzzyMatch(lower, option.value.toLowerCase()))
219
+ if (![option.value, option.label ?? '', option.description ?? ''].some(text => fuzzyMatch(lower, text.toLowerCase())))
210
220
  continue;
211
221
  items.push({
212
222
  value: option.value,
213
- label: option.value,
223
+ label: option.label ?? option.value,
214
224
  ...(option.description === undefined ? {} : { description: option.description }),
215
225
  kind: 'argument',
216
226
  });
@@ -225,21 +235,23 @@ export function slashSuggestions(text, cursor, commands = BUILTIN_SLASH_COMMANDS
225
235
  return null;
226
236
  return { items, prefix: before };
227
237
  }
228
- /** Replace the live command or argument token with the selected completion. */
238
+ /** Replace the command name or complete argument query with the selected completion. */
229
239
  export function applySlashCompletion(text, cursor, item) {
230
240
  const before = text.slice(0, cursor);
231
- const after = text.slice(cursor);
232
241
  const start = findLeadingSlashCommandStart(before);
233
242
  if (start === null)
234
243
  return { text, cursor };
235
244
  if (item.kind === 'argument') {
236
- const space = before.slice(start).lastIndexOf(' ');
245
+ const space = before.slice(start).indexOf(' ');
237
246
  if (space === -1)
238
247
  return { text, cursor };
239
248
  const argStart = start + space + 1;
240
249
  const insert = item.value.endsWith(' ') ? item.value : item.value + ' ';
241
- return { text: text.slice(0, argStart) + insert + after, cursor: argStart + insert.length };
250
+ return { text: text.slice(0, argStart) + insert, cursor: argStart + insert.length };
242
251
  }
252
+ const name = text.slice(start + 1);
253
+ const separator = name.search(/[\s:]/u);
254
+ const after = separator < 0 ? '' : name.slice(separator).replace(/^[\s:]+/u, '');
243
255
  const insert = `/${item.value} `;
244
256
  return { text: text.slice(0, start) + insert + after, cursor: start + insert.length };
245
257
  }
@@ -253,12 +265,6 @@ export function parseSlashInput(text) {
253
265
  const body = trimmed.slice(1);
254
266
  if (body === '')
255
267
  return { name: '', args: '' };
256
- if (body.startsWith('skill:')) {
257
- const space = body.search(/\s/u);
258
- if (space === -1)
259
- return { name: body, args: '' };
260
- return { name: body.slice(0, space), args: body.slice(space + 1).trim() };
261
- }
262
268
  const sep = body.search(/[\s:]/);
263
269
  if (sep === -1)
264
270
  return { name: body, args: '' };
@@ -272,30 +278,31 @@ export function resolveSlashCommand(name, commands = BUILTIN_SLASH_COMMANDS) {
272
278
  function helpCell(value) {
273
279
  return value.replace(/\s+/gu, ' ').trim();
274
280
  }
275
- function helpRows(commands) {
281
+ function helpRows(commands, language) {
276
282
  if (commands.length === 0)
277
283
  return [];
278
284
  return commands.map((command) => {
279
285
  const names = [command.name, ...(command.aliases ?? [])]
280
286
  .map((name, index) => `\`${helpCell(`/${name}${index === 0 ? argumentHint(command) : ''}`)}\``)
281
287
  .join(', ');
282
- return `- ${names} — ${helpCell(command.description)}`;
288
+ return `- ${names} — ${helpCell(uiText(language, command.description))}`;
283
289
  });
284
290
  }
285
291
  /** Grouped Markdown command directory rendered by the command-output surface. */
286
- export function formatHelpText(commands = BUILTIN_SLASH_COMMANDS) {
287
- const skills = commands.filter(command => command.name.startsWith('skill:'));
288
- const core = commands.filter(command => !command.name.startsWith('skill:'));
292
+ export function formatHelpText(commands = BUILTIN_SLASH_COMMANDS, language = 'en') {
293
+ const isSkill = (command) => command.skill !== undefined;
294
+ const skills = commands.filter(isSkill);
295
+ const core = commands.filter(command => !isSkill(command));
289
296
  const lines = [`Commands · ${core.length} core${skills.length === 0 ? '' : ` · ${skills.length} skills`}`];
290
297
  const assigned = new Set(COMMAND_GROUPS.flatMap(group => group.names));
291
298
  const groups = [...COMMAND_GROUPS.map(group => ({ label: group.label, commands: core.filter(command => group.names.includes(command.name)) })),
292
299
  { label: 'Extensions', commands: core.filter(command => !assigned.has(command.name)) }];
293
300
  for (const group of groups) {
294
301
  if (group.commands.length > 0)
295
- lines.push('', `**${group.label} · ${group.commands.length}**`, ...helpRows(group.commands));
302
+ lines.push('', `**${uiText(language, group.label)} · ${group.commands.length}**`, ...helpRows(group.commands, language));
296
303
  }
297
304
  if (skills.length > 0) {
298
- lines.push('', `**Skills · ${skills.length}**`, '', 'Type `/skill:` to browse and filter skills with descriptions.');
305
+ lines.push('', `**${uiText(language, 'Skills')} · ${skills.length}**`, '', uiText(language, 'Type `/` and a skill name to find and invoke it. User only skills require an explicit request.'));
299
306
  }
300
307
  return lines.join('\n');
301
308
  }
@@ -321,14 +328,16 @@ export function renderAutocomplete(items, selected, theme, width) {
321
328
  if (item === undefined)
322
329
  continue;
323
330
  if (item.kind === 'heading') {
324
- lines.push(renderListRow({ label: item.label, heading: true }, theme, width, { selected: false }));
331
+ lines.push(renderListRow({ label: theme.text(item.label), heading: true }, theme, width, { selected: false }));
325
332
  continue;
326
333
  }
327
334
  const bare = item.kind === 'argument' || item.kind === 'path' || item.kind === 'session';
328
335
  const row = {
329
336
  label: autocompleteLabel(item),
330
337
  ...(bare ? {} : { tone: 'accent' }),
331
- ...(item.description === undefined || item.description === '' ? {} : { description: item.description }),
338
+ ...(item.skill !== undefined
339
+ ? { description: theme.text(item.skill.userOnly ? 'User only' : 'Skill') + (item.description ? ' · ' + item.description : '') }
340
+ : item.description === undefined || item.description === '' ? {} : { description: bare ? item.description : theme.text(item.description) }),
332
341
  };
333
342
  lines.push(renderListRowWithValue(row, theme, width, primaryWidth, { selected: at === index }));
334
343
  }