@agi-fans/dsh-tui 0.20.0 → 0.22.0

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 (319) hide show
  1. package/lib/CHANGELOG.md +249 -3
  2. package/lib/chrome/box.d.ts +47 -16
  3. package/lib/chrome/box.js +172 -130
  4. package/lib/chrome/box.js.map +1 -1
  5. package/lib/chrome/code-highlight.d.ts +15 -0
  6. package/lib/chrome/code-highlight.js +60 -4
  7. package/lib/chrome/code-highlight.js.map +1 -1
  8. package/lib/chrome/command-output.d.ts +29 -2
  9. package/lib/chrome/command-output.js +100 -4
  10. package/lib/chrome/command-output.js.map +1 -1
  11. package/lib/chrome/main-screen-renderer.d.ts +18 -0
  12. package/lib/chrome/main-screen-renderer.js +58 -5
  13. package/lib/chrome/main-screen-renderer.js.map +1 -1
  14. package/lib/chrome/markdown.js +30 -10
  15. package/lib/chrome/markdown.js.map +1 -1
  16. package/lib/chrome/relative-time.d.ts +17 -0
  17. package/lib/chrome/relative-time.js +36 -0
  18. package/lib/chrome/relative-time.js.map +1 -1
  19. package/lib/chrome/renderer.d.ts +9 -0
  20. package/lib/chrome/renderer.js +1 -1
  21. package/lib/chrome/renderer.js.map +1 -1
  22. package/lib/chrome/secret-mask.d.ts +35 -0
  23. package/lib/chrome/secret-mask.js +180 -0
  24. package/lib/chrome/secret-mask.js.map +1 -0
  25. package/lib/chrome/status-config.d.ts +161 -51
  26. package/lib/chrome/status-config.js +237 -126
  27. package/lib/chrome/status-config.js.map +1 -1
  28. package/lib/chrome/status-line.d.ts +3 -2
  29. package/lib/chrome/status-line.js +105 -63
  30. package/lib/chrome/status-line.js.map +1 -1
  31. package/lib/chrome/terminal-colors.d.ts +85 -0
  32. package/lib/chrome/terminal-colors.js +230 -0
  33. package/lib/chrome/terminal-colors.js.map +1 -0
  34. package/lib/chrome/terminal-images.d.ts +9 -1
  35. package/lib/chrome/terminal-images.js +27 -4
  36. package/lib/chrome/terminal-images.js.map +1 -1
  37. package/lib/chrome/theme.d.ts +32 -9
  38. package/lib/chrome/theme.js +616 -520
  39. package/lib/chrome/theme.js.map +1 -1
  40. package/lib/chrome/tool-args.d.ts +1 -1
  41. package/lib/chrome/tool-args.js +3 -1
  42. package/lib/chrome/tool-args.js.map +1 -1
  43. package/lib/chrome/tool-renderers.d.ts +2 -0
  44. package/lib/chrome/tool-renderers.js +69 -3
  45. package/lib/chrome/tool-renderers.js.map +1 -1
  46. package/lib/chrome/tools-list.d.ts +1 -4
  47. package/lib/chrome/tools-list.js +1 -41
  48. package/lib/chrome/tools-list.js.map +1 -1
  49. package/lib/chrome/welcome-tips.d.ts +20 -7
  50. package/lib/chrome/welcome-tips.js +22 -41
  51. package/lib/chrome/welcome-tips.js.map +1 -1
  52. package/lib/commands/auth-ids.d.ts +25 -0
  53. package/lib/commands/auth-ids.js +27 -0
  54. package/lib/commands/auth-ids.js.map +1 -0
  55. package/lib/commands/auth-input.d.ts +34 -0
  56. package/lib/commands/auth-input.js +96 -0
  57. package/lib/commands/auth-input.js.map +1 -0
  58. package/lib/commands/auth-providers.d.ts +39 -0
  59. package/lib/commands/auth-providers.js +125 -0
  60. package/lib/commands/auth-providers.js.map +1 -0
  61. package/lib/commands/auth.d.ts +16 -22
  62. package/lib/commands/auth.js +346 -299
  63. package/lib/commands/auth.js.map +1 -1
  64. package/lib/commands/btw.d.ts +27 -0
  65. package/lib/commands/btw.js +59 -0
  66. package/lib/commands/btw.js.map +1 -0
  67. package/lib/commands/diff.js +30 -5
  68. package/lib/commands/diff.js.map +1 -1
  69. package/lib/commands/export.d.ts +1 -1
  70. package/lib/commands/export.js +5 -3
  71. package/lib/commands/export.js.map +1 -1
  72. package/lib/commands/files.d.ts +17 -1
  73. package/lib/commands/files.js +69 -61
  74. package/lib/commands/files.js.map +1 -1
  75. package/lib/commands/integrations.js +18 -6
  76. package/lib/commands/integrations.js.map +1 -1
  77. package/lib/commands/jobs.d.ts +19 -4
  78. package/lib/commands/jobs.js +50 -7
  79. package/lib/commands/jobs.js.map +1 -1
  80. package/lib/commands/model.js +109 -76
  81. package/lib/commands/model.js.map +1 -1
  82. package/lib/commands/permission.js +46 -13
  83. package/lib/commands/permission.js.map +1 -1
  84. package/lib/commands/plugins.js +196 -42
  85. package/lib/commands/plugins.js.map +1 -1
  86. package/lib/commands/schedule.d.ts +29 -0
  87. package/lib/commands/schedule.js +228 -0
  88. package/lib/commands/schedule.js.map +1 -0
  89. package/lib/commands/session-configuration.d.ts +1 -1
  90. package/lib/commands/session-configuration.js +29 -28
  91. package/lib/commands/session-configuration.js.map +1 -1
  92. package/lib/commands/session.js +75 -80
  93. package/lib/commands/session.js.map +1 -1
  94. package/lib/commands/terminal.d.ts +24 -4
  95. package/lib/commands/terminal.js +38 -94
  96. package/lib/commands/terminal.js.map +1 -1
  97. package/lib/commands/trajectory.js +4 -1
  98. package/lib/commands/trajectory.js.map +1 -1
  99. package/lib/definition.d.ts +150 -11
  100. package/lib/index.d.ts +1 -0
  101. package/lib/index.js +1 -0
  102. package/lib/index.js.map +1 -1
  103. package/lib/input/actions.d.ts +51 -0
  104. package/lib/input/actions.js +120 -0
  105. package/lib/input/actions.js.map +1 -0
  106. package/lib/input/editor-discovery.js +2 -2
  107. package/lib/input/editor-discovery.js.map +1 -1
  108. package/lib/input/editor.d.ts +0 -10
  109. package/lib/input/editor.js +11 -9
  110. package/lib/input/editor.js.map +1 -1
  111. package/lib/input/image-paste.d.ts +19 -1
  112. package/lib/input/image-paste.js +82 -1
  113. package/lib/input/image-paste.js.map +1 -1
  114. package/lib/input/keybindings-config.d.ts +15 -4
  115. package/lib/input/keybindings-config.js +57 -35
  116. package/lib/input/keybindings-config.js.map +1 -1
  117. package/lib/input/keys.d.ts +18 -0
  118. package/lib/input/keys.js +48 -3
  119. package/lib/input/keys.js.map +1 -1
  120. package/lib/input/wheel-scroll.d.ts +46 -0
  121. package/lib/input/wheel-scroll.js +69 -0
  122. package/lib/input/wheel-scroll.js.map +1 -0
  123. package/lib/prompt-intents.d.ts +182 -0
  124. package/lib/prompt-intents.js +127 -0
  125. package/lib/prompt-intents.js.map +1 -0
  126. package/lib/runtime/agent-profile.d.ts +5 -0
  127. package/lib/runtime/agent-profile.js +12 -0
  128. package/lib/runtime/agent-profile.js.map +1 -1
  129. package/lib/runtime/approval-rules.d.ts +59 -0
  130. package/lib/runtime/approval-rules.js +179 -0
  131. package/lib/runtime/approval-rules.js.map +1 -0
  132. package/lib/runtime/btw-policy.d.ts +7 -0
  133. package/lib/runtime/btw-policy.js +18 -0
  134. package/lib/runtime/btw-policy.js.map +1 -0
  135. package/lib/runtime/btw.d.ts +47 -0
  136. package/lib/runtime/btw.js +200 -0
  137. package/lib/runtime/btw.js.map +1 -0
  138. package/lib/runtime/cancellable.d.ts +75 -0
  139. package/lib/runtime/cancellable.js +76 -0
  140. package/lib/runtime/cancellable.js.map +1 -0
  141. package/lib/runtime/composer-images.js +5 -4
  142. package/lib/runtime/composer-images.js.map +1 -1
  143. package/lib/runtime/composer-shell.d.ts +30 -0
  144. package/lib/runtime/composer-shell.js +150 -0
  145. package/lib/runtime/composer-shell.js.map +1 -0
  146. package/lib/runtime/file-recovery-local.d.ts +73 -0
  147. package/lib/runtime/file-recovery-local.js +351 -0
  148. package/lib/runtime/file-recovery-local.js.map +1 -0
  149. package/lib/runtime/file-recovery-recording.d.ts +23 -0
  150. package/lib/runtime/file-recovery-recording.js +131 -0
  151. package/lib/runtime/file-recovery-recording.js.map +1 -0
  152. package/lib/runtime/file-recovery-review.d.ts +3 -0
  153. package/lib/runtime/file-recovery-review.js +130 -0
  154. package/lib/runtime/file-recovery-review.js.map +1 -0
  155. package/lib/runtime/file-recovery-store.d.ts +83 -0
  156. package/lib/runtime/file-recovery-store.js +329 -0
  157. package/lib/runtime/file-recovery-store.js.map +1 -0
  158. package/lib/runtime/file-recovery-worker.d.ts +22 -0
  159. package/lib/runtime/file-recovery-worker.js +153 -0
  160. package/lib/runtime/file-recovery-worker.js.map +1 -0
  161. package/lib/runtime/file-review.d.ts +6 -3
  162. package/lib/runtime/file-review.js +44 -7
  163. package/lib/runtime/file-review.js.map +1 -1
  164. package/lib/runtime/herdr-agent.d.ts +4 -13
  165. package/lib/runtime/herdr-agent.js +19 -63
  166. package/lib/runtime/herdr-agent.js.map +1 -1
  167. package/lib/runtime/plain-tui.d.ts +2 -0
  168. package/lib/runtime/plain-tui.js +7 -1
  169. package/lib/runtime/plain-tui.js.map +1 -1
  170. package/lib/runtime/plugin-settings.d.ts +25 -2
  171. package/lib/runtime/plugin-settings.js +329 -31
  172. package/lib/runtime/plugin-settings.js.map +1 -1
  173. package/lib/runtime/provider-local.d.ts +81 -24
  174. package/lib/runtime/provider-local.js +1807 -608
  175. package/lib/runtime/provider-local.js.map +1 -1
  176. package/lib/runtime/runner.js +52 -12
  177. package/lib/runtime/runner.js.map +1 -1
  178. package/lib/runtime/session-archive.d.ts +6 -0
  179. package/lib/runtime/session-archive.js +129 -3
  180. package/lib/runtime/session-archive.js.map +1 -1
  181. package/lib/runtime/session-runtime.js +1 -1
  182. package/lib/runtime/session-runtime.js.map +1 -1
  183. package/lib/runtime/settings-preferences.d.ts +5 -0
  184. package/lib/runtime/settings-preferences.js +34 -0
  185. package/lib/runtime/settings-preferences.js.map +1 -0
  186. package/lib/runtime/startup-notices.js +2 -0
  187. package/lib/runtime/startup-notices.js.map +1 -1
  188. package/lib/runtime/terminal-modes.d.ts +47 -0
  189. package/lib/runtime/terminal-modes.js +86 -0
  190. package/lib/runtime/terminal-modes.js.map +1 -0
  191. package/lib/runtime/terminal-notifications.d.ts +3 -5
  192. package/lib/runtime/terminal-notifications.js +4 -8
  193. package/lib/runtime/terminal-notifications.js.map +1 -1
  194. package/lib/runtime/terminal-probe.d.ts +36 -0
  195. package/lib/runtime/terminal-probe.js +37 -0
  196. package/lib/runtime/terminal-probe.js.map +1 -0
  197. package/lib/runtime/terminal-session.d.ts +57 -0
  198. package/lib/runtime/terminal-session.js +164 -0
  199. package/lib/runtime/terminal-session.js.map +1 -0
  200. package/lib/runtime/terminal-state.d.ts +29 -0
  201. package/lib/runtime/terminal-state.js +62 -0
  202. package/lib/runtime/terminal-state.js.map +1 -0
  203. package/lib/runtime/tool-presentation.js +50 -14
  204. package/lib/runtime/tool-presentation.js.map +1 -1
  205. package/lib/session/external-agents.d.ts +5 -0
  206. package/lib/session/external-agents.js +27 -0
  207. package/lib/session/external-agents.js.map +1 -0
  208. package/lib/session/feature-toggles.d.ts +1 -1
  209. package/lib/session/feature-toggles.js +1 -1
  210. package/lib/session/interaction-adapter.d.ts +1 -6
  211. package/lib/session/interaction-adapter.js +95 -18
  212. package/lib/session/interaction-adapter.js.map +1 -1
  213. package/lib/session/message-queue.js +1 -1
  214. package/lib/session/message-queue.js.map +1 -1
  215. package/lib/session/model-readiness.d.ts +16 -0
  216. package/lib/session/model-readiness.js +43 -0
  217. package/lib/session/model-readiness.js.map +1 -0
  218. package/lib/session/package-metadata.d.ts +8 -0
  219. package/lib/session/package-metadata.js +8 -0
  220. package/lib/session/package-metadata.js.map +1 -1
  221. package/lib/session/project-context.d.ts +5 -0
  222. package/lib/session/project-context.js +36 -0
  223. package/lib/session/project-context.js.map +1 -1
  224. package/lib/session/session-controller.d.ts +10 -13
  225. package/lib/session/session-controller.js +183 -98
  226. package/lib/session/session-controller.js.map +1 -1
  227. package/lib/session/session-library.js +2 -0
  228. package/lib/session/session-library.js.map +1 -1
  229. package/lib/session/session-tree.d.ts +3 -0
  230. package/lib/session/session-tree.js +3 -1
  231. package/lib/session/session-tree.js.map +1 -1
  232. package/lib/session/subagent-roster.d.ts +2 -1
  233. package/lib/session/subagent-roster.js +24 -3
  234. package/lib/session/subagent-roster.js.map +1 -1
  235. package/lib/session/subagent-tracker.d.ts +6 -2
  236. package/lib/session/subagent-tracker.js +49 -2
  237. package/lib/session/subagent-tracker.js.map +1 -1
  238. package/lib/session/tui-settings.d.ts +47 -13
  239. package/lib/session/tui-settings.js +76 -34
  240. package/lib/session/tui-settings.js.map +1 -1
  241. package/lib/session/working-directory.d.ts +4 -0
  242. package/lib/session/working-directory.js +4 -0
  243. package/lib/session/working-directory.js.map +1 -0
  244. package/lib/session/worktrees.d.ts +13 -0
  245. package/lib/session/worktrees.js +49 -0
  246. package/lib/session/worktrees.js.map +1 -0
  247. package/lib/views/approval-rule.d.ts +3 -0
  248. package/lib/views/approval-rule.js +4 -0
  249. package/lib/views/approval-rule.js.map +1 -0
  250. package/lib/views/at-complete.d.ts +8 -0
  251. package/lib/views/at-complete.js +64 -2
  252. package/lib/views/at-complete.js.map +1 -1
  253. package/lib/views/autocomplete.d.ts +22 -2
  254. package/lib/views/autocomplete.js +70 -40
  255. package/lib/views/autocomplete.js.map +1 -1
  256. package/lib/views/copy-targets.d.ts +13 -14
  257. package/lib/views/copy-targets.js +42 -54
  258. package/lib/views/copy-targets.js.map +1 -1
  259. package/lib/views/document-reader.js +18 -5
  260. package/lib/views/document-reader.js.map +1 -1
  261. package/lib/views/event-views.d.ts +1 -1
  262. package/lib/views/event-views.js +60 -6
  263. package/lib/views/event-views.js.map +1 -1
  264. package/lib/views/file-actions.d.ts +12 -0
  265. package/lib/views/file-actions.js +72 -0
  266. package/lib/views/file-actions.js.map +1 -0
  267. package/lib/views/history-search.js +15 -21
  268. package/lib/views/history-search.js.map +1 -1
  269. package/lib/views/hotkeys.d.ts +8 -1
  270. package/lib/views/hotkeys.js +53 -26
  271. package/lib/views/hotkeys.js.map +1 -1
  272. package/lib/views/list-navigation.d.ts +62 -0
  273. package/lib/views/list-navigation.js +73 -0
  274. package/lib/views/list-navigation.js.map +1 -0
  275. package/lib/views/list-view.d.ts +99 -0
  276. package/lib/views/list-view.js +165 -0
  277. package/lib/views/list-view.js.map +1 -0
  278. package/lib/views/prompt-selector.d.ts +34 -4
  279. package/lib/views/prompt-selector.js +270 -134
  280. package/lib/views/prompt-selector.js.map +1 -1
  281. package/lib/views/session-files.d.ts +1 -2
  282. package/lib/views/session-files.js +1 -11
  283. package/lib/views/session-files.js.map +1 -1
  284. package/lib/views/settings-list.d.ts +51 -10
  285. package/lib/views/settings-list.js +267 -315
  286. package/lib/views/settings-list.js.map +1 -1
  287. package/lib/views/trajectory-timeline.d.ts +72 -0
  288. package/lib/views/trajectory-timeline.js +133 -0
  289. package/lib/views/trajectory-timeline.js.map +1 -0
  290. package/lib/views/trajectory.d.ts +15 -4
  291. package/lib/views/trajectory.js +557 -123
  292. package/lib/views/trajectory.js.map +1 -1
  293. package/lib/views/transcript-export.js +9 -0
  294. package/lib/views/transcript-export.js.map +1 -1
  295. package/lib/views/transcript-render.d.ts +97 -25
  296. package/lib/views/transcript-render.js +542 -170
  297. package/lib/views/transcript-render.js.map +1 -1
  298. package/lib/views/transcript-search.d.ts +39 -6
  299. package/lib/views/transcript-search.js +46 -11
  300. package/lib/views/transcript-search.js.map +1 -1
  301. package/lib/views/transcript-types.d.ts +63 -5
  302. package/lib/views/transcript-types.js +23 -11
  303. package/lib/views/transcript-types.js.map +1 -1
  304. package/package.json +95 -65
  305. package/lib/commands/loop.d.ts +0 -52
  306. package/lib/commands/loop.js +0 -307
  307. package/lib/commands/loop.js.map +0 -1
  308. package/lib/commands/steer.d.ts +0 -5
  309. package/lib/commands/steer.js +0 -24
  310. package/lib/commands/steer.js.map +0 -1
  311. package/lib/runtime/terminal-reader.d.ts +0 -11
  312. package/lib/runtime/terminal-reader.js +0 -87
  313. package/lib/runtime/terminal-reader.js.map +0 -1
  314. package/lib/views/agent-hub.d.ts +0 -32
  315. package/lib/views/agent-hub.js +0 -206
  316. package/lib/views/agent-hub.js.map +0 -1
  317. package/lib/views/copy-selector.d.ts +0 -51
  318. package/lib/views/copy-selector.js +0 -139
  319. package/lib/views/copy-selector.js.map +0 -1
@@ -1,307 +0,0 @@
1
- /** Process-local prompt loop contributed as an independent omdsh plugin. */
2
- import { registerCommands } from "./registration.js";
3
- export const name = 'omdsh-command-loop';
4
- export const inject = ['commands', 'omdshSession', 'tui'];
5
- const DEFAULT_REPEAT_DELAY_MS = 800;
6
- const DEFAULT_COMPLETION_MS = 1_600;
7
- function durationUnitMs(unit) {
8
- if (/^(?:s|sec|secs|second|seconds)$/u.test(unit))
9
- return 1_000;
10
- if (/^(?:m|min|mins|minute|minutes)$/u.test(unit))
11
- return 60_000;
12
- if (/^(?:h|hr|hrs|hour|hours)$/u.test(unit))
13
- return 3_600_000;
14
- return undefined;
15
- }
16
- function parseDuration(token) {
17
- const part = /(\d+(?:\.\d+)?)([a-z]+)/guy;
18
- let offset = 0;
19
- let total = 0;
20
- while (offset < token.length) {
21
- part.lastIndex = offset;
22
- const match = part.exec(token);
23
- if (match === null || match.index !== offset || match[1] === undefined || match[2] === undefined)
24
- return undefined;
25
- const unitMs = durationUnitMs(match[2].toLowerCase());
26
- if (unitMs === undefined)
27
- return undefined;
28
- total += Number(match[1]) * unitMs;
29
- offset = part.lastIndex;
30
- }
31
- return Number.isFinite(total) && total > 0 ? Math.round(total) : undefined;
32
- }
33
- /** Parse the oh-my-pi-compatible `/loop [count|duration] [prompt]` tail. */
34
- export function parseLoopRequest(rawInput) {
35
- const input = rawInput.trim();
36
- if (input === '')
37
- return {};
38
- const separator = input.search(/\s/u);
39
- const head = separator === -1 ? input : input.slice(0, separator);
40
- const tail = separator === -1 ? '' : input.slice(separator).trim();
41
- if (/^\d+$/u.test(head)) {
42
- const count = Number(head);
43
- if (!Number.isSafeInteger(count) || count <= 0)
44
- throw new Error('Loop count must be a positive integer.');
45
- return {
46
- limit: { kind: 'iterations', count },
47
- ...(tail === '' ? {} : { prompt: tail }),
48
- };
49
- }
50
- const durationMs = parseDuration(head);
51
- if (durationMs !== undefined) {
52
- return {
53
- limit: { kind: 'duration', durationMs, label: head },
54
- ...(tail === '' ? {} : { prompt: tail }),
55
- };
56
- }
57
- if (/^\d/u.test(head)) {
58
- throw new Error('Invalid loop limit. Use a count such as 5 or a duration such as 10m or 1h30m.');
59
- }
60
- return { prompt: input };
61
- }
62
- function cloneSubmission(submission) {
63
- return {
64
- text: submission.text,
65
- images: submission.images.map(image => ({ ...image, data: image.data.slice() })),
66
- };
67
- }
68
- function wait(ms, signal) {
69
- if (signal.aborted)
70
- return Promise.resolve(false);
71
- return new Promise((resolve) => {
72
- const timer = setTimeout(() => {
73
- signal.removeEventListener('abort', cancel);
74
- resolve(true);
75
- }, ms);
76
- const cancel = () => {
77
- clearTimeout(timer);
78
- resolve(false);
79
- };
80
- signal.addEventListener('abort', cancel, { once: true });
81
- });
82
- }
83
- /** Runtime state for one top-level omdsh loop; intentionally not persisted. */
84
- export class LoopRuntime {
85
- session;
86
- tui;
87
- repeatDelayMs;
88
- completionMs;
89
- #active;
90
- #completionTimer;
91
- constructor(session, tui, repeatDelayMs = DEFAULT_REPEAT_DELAY_MS, completionMs = DEFAULT_COMPLETION_MS) {
92
- this.session = session;
93
- this.tui = tui;
94
- this.repeatDelayMs = repeatDelayMs;
95
- this.completionMs = completionMs;
96
- }
97
- isEnabled(agent) {
98
- return this.#active !== undefined && (agent === undefined || this.#active.agent === agent);
99
- }
100
- async enable(agent, request) {
101
- this.session.assertActive(agent);
102
- this.#stop();
103
- const operation = new AbortController();
104
- this.#active = {
105
- agent,
106
- phase: 'waiting',
107
- repeats: 0,
108
- ...(request.limit?.kind === 'iterations' ? { remaining: request.limit.count, total: request.limit.count } : {}),
109
- ...(request.limit?.kind === 'duration'
110
- ? { durationRemainingMs: request.limit.durationMs, limitLabel: request.limit.label }
111
- : {}),
112
- operation,
113
- };
114
- this.#publish();
115
- if (request.prompt !== undefined) {
116
- const submission = { text: request.prompt, images: [] };
117
- await this.submit(submission, agent);
118
- }
119
- }
120
- disable(agent) {
121
- if (this.#active === undefined || (agent !== undefined && this.#active.agent !== agent))
122
- return false;
123
- this.#stop();
124
- return true;
125
- }
126
- /** Atomically accept, dispatch, and arm a human composer submission. */
127
- async submit(submission, agent) {
128
- const active = this.#active;
129
- if (active === undefined || active.agent !== agent)
130
- return false;
131
- const previousPrompt = active.prompt === undefined ? undefined : cloneSubmission(active.prompt);
132
- const previousPhase = active.phase;
133
- const previousDeadline = active.deadline;
134
- active.operation.abort();
135
- active.operation = new AbortController();
136
- active.prompt = cloneSubmission(submission);
137
- active.phase = 'running';
138
- if (active.durationRemainingMs !== undefined && active.deadline === undefined) {
139
- active.deadline = Date.now() + active.durationRemainingMs;
140
- }
141
- this.#publish();
142
- try {
143
- await this.session.send(submission, agent);
144
- }
145
- catch (error) {
146
- active.operation.abort();
147
- active.operation = new AbortController();
148
- if (previousPrompt === undefined)
149
- delete active.prompt;
150
- else
151
- active.prompt = previousPrompt;
152
- active.phase = previousPhase;
153
- if (previousDeadline === undefined)
154
- delete active.deadline;
155
- else
156
- active.deadline = previousDeadline;
157
- this.#publish();
158
- if (active.prompt !== undefined)
159
- void this.#run(active, active.operation.signal);
160
- throw error;
161
- }
162
- void this.#run(active, active.operation.signal);
163
- return true;
164
- }
165
- /** Interrupt the current iteration and wait for a new prompt without disabling Loop. */
166
- pause(agent) {
167
- const active = this.#active;
168
- if (active === undefined || (agent !== undefined && active.agent !== agent) || active.prompt === undefined)
169
- return false;
170
- active.operation.abort();
171
- active.operation = new AbortController();
172
- if (active.deadline !== undefined) {
173
- active.durationRemainingMs = Math.max(0, active.deadline - Date.now());
174
- delete active.deadline;
175
- }
176
- delete active.prompt;
177
- active.phase = 'paused';
178
- this.#publish();
179
- return true;
180
- }
181
- /** Drop a loop as soon as a command replaces the active session. */
182
- syncAgent(agent) {
183
- if (this.#active !== undefined && this.#active.agent !== agent)
184
- this.#stop();
185
- }
186
- dispose() {
187
- this.#stop();
188
- }
189
- async #run(active, signal) {
190
- while (!signal.aborted && this.#active === active && active.prompt !== undefined) {
191
- try {
192
- await active.agent.whenIdle();
193
- }
194
- catch (error) {
195
- if (!signal.aborted)
196
- this.#fail(error);
197
- return;
198
- }
199
- if (signal.aborted || this.#active !== active)
200
- return;
201
- if (this.session.agent !== active.agent) {
202
- this.#stop();
203
- return;
204
- }
205
- if (!await wait(this.repeatDelayMs, signal))
206
- return;
207
- if (active.remaining !== undefined && active.remaining <= 0) {
208
- this.#complete();
209
- return;
210
- }
211
- if (active.deadline !== undefined && Date.now() >= active.deadline) {
212
- this.#complete();
213
- return;
214
- }
215
- const prompt = cloneSubmission(active.prompt);
216
- if (active.remaining !== undefined)
217
- active.remaining -= 1;
218
- active.repeats += 1;
219
- this.#publish();
220
- try {
221
- await this.session.send(prompt, active.agent);
222
- }
223
- catch (error) {
224
- if (!signal.aborted)
225
- this.#fail(error);
226
- return;
227
- }
228
- }
229
- }
230
- #complete() {
231
- const active = this.#active;
232
- if (active === undefined)
233
- return;
234
- active.operation.abort();
235
- this.#active = undefined;
236
- if (this.#completionTimer !== undefined)
237
- clearTimeout(this.#completionTimer);
238
- this.tui.setLoopStatus({
239
- phase: 'completed',
240
- repeats: active.repeats,
241
- ...(active.total === undefined ? {} : { total: active.total }),
242
- ...(active.limitLabel === undefined ? {} : { limit: active.limitLabel }),
243
- });
244
- this.#completionTimer = setTimeout(() => {
245
- this.#completionTimer = undefined;
246
- if (this.#active === undefined)
247
- this.tui.setLoopStatus(undefined);
248
- }, this.completionMs);
249
- this.#completionTimer.unref?.();
250
- }
251
- #fail(error) {
252
- this.#stop();
253
- this.tui.notice(`Loop stopped: ${error instanceof Error ? error.message : String(error)}`, { level: 'error' });
254
- }
255
- #stop() {
256
- if (this.#completionTimer !== undefined) {
257
- clearTimeout(this.#completionTimer);
258
- this.#completionTimer = undefined;
259
- }
260
- this.#active?.operation.abort();
261
- this.#active = undefined;
262
- this.tui.setLoopStatus(undefined);
263
- }
264
- #publish() {
265
- const active = this.#active;
266
- if (active === undefined) {
267
- this.tui.setLoopStatus(undefined);
268
- return;
269
- }
270
- this.tui.setLoopStatus({
271
- phase: active.phase,
272
- repeats: active.repeats,
273
- ...(active.total === undefined ? {} : { total: active.total }),
274
- ...(active.deadline === undefined ? {} : { deadline: active.deadline }),
275
- ...(active.limitLabel === undefined ? {} : { limit: active.limitLabel }),
276
- });
277
- }
278
- }
279
- async function loop(runtime, invocation) {
280
- if (runtime.disable(invocation.agent))
281
- return { kind: 'success' };
282
- let request;
283
- try {
284
- request = parseLoopRequest(invocation.rawInput);
285
- }
286
- catch (error) {
287
- return { kind: 'error', text: error instanceof Error ? error.message : String(error) };
288
- }
289
- await runtime.enable(invocation.agent, request);
290
- return { kind: 'success' };
291
- }
292
- export function apply(ctx) {
293
- const session = ctx.get('omdshSession');
294
- const tui = ctx.get('tui');
295
- if (session === undefined || tui === undefined)
296
- throw new Error('omdsh-command-loop: session runtime and tui are required');
297
- const runtime = new LoopRuntime(session, tui);
298
- ctx.provide('omdshLoop', runtime);
299
- registerCommands(ctx, [{
300
- name: 'loop',
301
- description: 'Repeat a prompt after every completed turn',
302
- input: { hint: '[count|duration] [prompt]' },
303
- handler: invocation => loop(runtime, invocation),
304
- }], 'omdsh loop command');
305
- ctx.effect(() => () => { runtime.dispose(); }, 'omdsh loop runtime lifecycle');
306
- }
307
- //# sourceMappingURL=loop.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loop.js","sourceRoot":"","sources":["../../src/commands/loop.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- /** Steering command registered through dsh-commands. */
2
- import type { Context } from '@deepseek-ai/cordis';
3
- export declare const name = "omdsh-command-steer";
4
- export declare const inject: string[];
5
- export declare function apply(ctx: Context): void;
@@ -1,24 +0,0 @@
1
- /** Steering command registered through dsh-commands. */
2
- import { steerAgent } from "../session/steering.js";
3
- import { registerCommands } from "./registration.js";
4
- export const name = 'omdsh-command-steer';
5
- export const inject = ['commands'];
6
- function steer(invocation) {
7
- const input = invocation.rawInput.trim();
8
- if (input === '')
9
- return { kind: 'error', text: 'Usage: /steer <message>' };
10
- if (invocation.agent.status !== 'running') {
11
- return {
12
- kind: 'error',
13
- text: 'Steering is only available during an active turn. Send a normal message to start the next turn.',
14
- };
15
- }
16
- steerAgent(invocation.agent, input);
17
- return { kind: 'success', text: "Guidance queued for the current turn's next model step." };
18
- }
19
- export function apply(ctx) {
20
- registerCommands(ctx, [
21
- { name: 'steer', description: 'Guide the active turn before its next model step', input: { hint: '<message>' }, handler: steer },
22
- ], 'omdsh steering commands');
23
- }
24
- //# sourceMappingURL=steer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"steer.js","sourceRoot":"","sources":["../../src/commands/steer.ts"],"names":[],"mappings":"AAAA,wDAAwD;AAIxD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEpD,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAA;AACzC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,CAAA;AAElC,SAAS,KAAK,CAAC,UAA6B;IAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;IACxC,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAA;IAC3E,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC1C,OAAO;YACL,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,iGAAiG;SACxG,CAAA;IACH,CAAC;IACD,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IACnC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,yDAAyD,EAAE,CAAA;AAC7F,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAY;IAChC,gBAAgB,CAAC,GAAG,EAAE;QACpB,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,kDAAkD,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;KACjI,EAAE,yBAAyB,CAAC,CAAA;AAC/B,CAAC"}
@@ -1,11 +0,0 @@
1
- /** Bounded, paused snapshots over the Harness's newest-relative scrollback pages. */
2
- import type { TerminalReadRequest, TerminalReadResult } from '@deepseek-ai/dsh-terminal';
3
- import type { TuiDocumentSource } from '../definition.ts';
4
- export declare class TerminalReader {
5
- #private;
6
- constructor(read: (request: TerminalReadRequest) => TerminalReadResult);
7
- /** Following returns the latest page; pausing keeps the exact text already displayed. */
8
- refresh(following: boolean): TuiDocumentSource;
9
- /** Prepend an older page only when its overlap still identifies this frozen snapshot. */
10
- loadEarlier(): number;
11
- }
@@ -1,87 +0,0 @@
1
- /** Bounded, paused snapshots over the Harness's newest-relative scrollback pages. */
2
- const PAGE_LINES = 300;
3
- const OVERLAP_LINES = 20;
4
- const MAX_LINES = 10_000;
5
- const MAX_BYTES = 4 * 1024 * 1024;
6
- export class TerminalReader {
7
- #read;
8
- #page;
9
- #lines = [];
10
- #firstLine = 1;
11
- #note = '';
12
- #source;
13
- constructor(read) { this.#read = read; }
14
- /** Following returns the latest page; pausing keeps the exact text already displayed. */
15
- refresh(following) {
16
- if (following || this.#page === undefined) {
17
- const page = this.#read({ offset: 0, count: PAGE_LINES });
18
- if (page.text !== this.#page?.text || page.totalLines !== this.#page.totalLines || page.lineEnd !== this.#page.lineEnd
19
- || page.truncated !== this.#page.truncated || this.#note !== '')
20
- this.#source = undefined;
21
- this.#page = page;
22
- this.#lines = page.lineEnd === page.lineBegin ? [] : page.text.split('\n');
23
- this.#note = '';
24
- const bytes = Buffer.from(page.text);
25
- if (bytes.length > MAX_BYTES) {
26
- this.#lines = bytes.subarray(bytes.length - MAX_BYTES).toString('utf8').split('\n');
27
- this.#page = { ...page, lineEnd: page.lineBegin + this.#lines.length };
28
- this.#note = 'Reader limit: 4 MiB; leading text clipped';
29
- }
30
- this.#firstLine = Math.max(1, page.totalLines - this.#page.lineEnd + 1);
31
- }
32
- return this.#document();
33
- }
34
- /** Prepend an older page only when its overlap still identifies this frozen snapshot. */
35
- loadEarlier() {
36
- if (this.#page === undefined)
37
- this.refresh(false);
38
- const snapshot = this.#page;
39
- if (this.#lines.length >= MAX_LINES)
40
- return this.#stop('Reader limit: 10,000 lines');
41
- if (this.#firstLine <= 1)
42
- return this.#stop('No earlier retained output');
43
- const newest = this.#read({ offset: 0, count: 1 });
44
- const overlap = Math.min(OVERLAP_LINES, this.#lines.length);
45
- const offset = newest.totalLines - snapshot.totalLines + snapshot.lineEnd - overlap;
46
- if (newest.totalLines < snapshot.totalLines || offset < 0)
47
- return this.#expired();
48
- const older = this.#read({ offset, count: Math.min(PAGE_LINES, MAX_LINES - this.#lines.length) + overlap });
49
- const lines = older.lineEnd === older.lineBegin ? [] : older.text.split('\n');
50
- // A capped scrollback can rotate without changing totalLines. Never splice
51
- // pages merely because their numeric offsets happen to line up.
52
- if (older.totalLines !== newest.totalLines || lines.length <= overlap
53
- || lines.slice(-overlap).some((line, at) => line !== this.#lines[at]))
54
- return this.#expired();
55
- const prefix = lines.slice(0, -overlap);
56
- const next = [...prefix, ...this.#lines];
57
- if (Buffer.byteLength(next.join('\n')) > MAX_BYTES)
58
- return this.#stop('Reader limit: 4 MiB');
59
- this.#lines = next;
60
- this.#firstLine = Math.max(1, this.#firstLine - prefix.length);
61
- this.#page = older;
62
- this.#note = '';
63
- this.#source = undefined;
64
- return prefix.length;
65
- }
66
- #expired() {
67
- return this.#stop('History changed or was clipped; End refreshes the latest output');
68
- }
69
- #stop(note) {
70
- if (this.#note !== note)
71
- this.#source = undefined;
72
- this.#note = note;
73
- return 0;
74
- }
75
- #document() {
76
- if (this.#source !== undefined)
77
- return this.#source;
78
- const status = (this.#note === '' ? '' : `${this.#note} · `) + `${this.#lines.length} loaded`
79
- + (this.#page?.truncated === true ? ' · Retention clipped' : '');
80
- // The source renderer removes one terminator; keep a real empty final PTY
81
- // line so registry offsets and the reader's source rows remain identical.
82
- const text = this.#lines.length === 0 ? '' : this.#lines.join('\n') + '\n';
83
- this.#source = { text, firstLine: this.#firstLine, status };
84
- return this.#source;
85
- }
86
- }
87
- //# sourceMappingURL=terminal-reader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"terminal-reader.js","sourceRoot":"","sources":["../../src/runtime/terminal-reader.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
1
- /** Keyboard-first full-screen roster and inspector for descendant subagents. */
2
- import type { KeyEvent } from '../input/keys.ts';
3
- import type { Theme } from '../chrome/theme.ts';
4
- import type { TuiSubagentRoster } from '../definition.ts';
5
- import { type HotkeyRow } from './hotkey-format.ts';
6
- export interface AgentHubState {
7
- roster: TuiSubagentRoster;
8
- selectedId: string | null;
9
- inspector: boolean;
10
- detailScroll: number;
11
- tree: boolean;
12
- }
13
- export type AgentHubCommand = {
14
- state: AgentHubState;
15
- } | {
16
- close: true;
17
- } | {
18
- open: string;
19
- };
20
- export declare function createAgentHub(roster: TuiSubagentRoster): AgentHubState;
21
- export declare function updateAgentHub(state: AgentHubState, roster: TuiSubagentRoster): AgentHubState;
22
- export declare function applyAgentHubEvent(state: AgentHubState, event: KeyEvent): AgentHubCommand;
23
- /** Keys the Agent Hub accepts; `/help` and its toolbar and footer read this list. */
24
- export declare const AGENT_HUB_HOTKEYS: readonly HotkeyRow[];
25
- export declare function renderAgentHub(state: AgentHubState, theme: Theme, width: number, height: number, now?: number): {
26
- lines: string[];
27
- cursor: {
28
- row: number;
29
- column: number;
30
- };
31
- cursorVisible: boolean;
32
- };