@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,5 +1,5 @@
1
1
  /** Opt-in terminal notifications kept outside the transcript renderer. */
2
- export type TerminalNotificationPolicy = 'off' | 'long-running' | 'always';
2
+ export type TerminalNotificationPolicy = 'off' | 'unfocused' | 'always';
3
3
  export interface TerminalNotificationOptions {
4
4
  readonly policy: TerminalNotificationPolicy;
5
5
  readonly thresholdMs: number;
@@ -20,15 +20,13 @@ export declare class TerminalNotificationController {
20
20
  event(event: NotificationEvent, now?: number): TerminalNotification | undefined;
21
21
  humanPrompt(label?: string): TerminalNotification | undefined;
22
22
  }
23
- export type NotificationFocus = 'always' | 'unfocused';
24
23
  /** Keep one notification per event burst, with input requests and failures first. */
25
24
  export declare class TerminalNotificationQueue {
26
25
  #private;
27
26
  offer(notification: TerminalNotification): void;
28
27
  clear(): void;
29
- take(condition: NotificationFocus, focused: boolean | undefined): TerminalNotification | undefined;
28
+ /** Drain the coalesced event. Whether it should be delivered is the caller's policy. */
29
+ take(): TerminalNotification | undefined;
30
30
  }
31
31
  /** OSC 9 is supported by common terminal emulators and never enters screen text. */
32
32
  export declare function terminalNotificationSequence(notification: TerminalNotification): string;
33
- /** Windows Terminal-compatible native taskbar/tab progress sequences. */
34
- export declare function terminalProgressSequence(active: boolean): string;
@@ -45,7 +45,7 @@ export class TerminalNotificationController {
45
45
  if (startedAt === undefined || this.#options.policy === 'off')
46
46
  return undefined;
47
47
  const elapsedMs = Math.max(0, endedAt - startedAt);
48
- if (this.#options.policy === 'long-running' && elapsedMs < this.#options.thresholdMs)
48
+ if (this.#options.policy === 'unfocused' && elapsedMs < this.#options.thresholdMs)
49
49
  return undefined;
50
50
  return {
51
51
  title: event.reason && event.reason !== 'complete' && event.reason !== 'completed' ? 'omdsh needs attention' : 'omdsh finished',
@@ -67,11 +67,11 @@ export class TerminalNotificationQueue {
67
67
  this.#pending = notification;
68
68
  }
69
69
  clear() { this.#pending = undefined; }
70
- take(condition, focused) {
70
+ /** Drain the coalesced event. Whether it should be delivered is the caller's policy. */
71
+ take() {
71
72
  const pending = this.#pending;
72
73
  this.clear();
73
- // A terminal without focus reports retains the existing notification behavior.
74
- return condition === 'unfocused' && focused === true ? undefined : pending;
74
+ return pending;
75
75
  }
76
76
  }
77
77
  function cleanNotificationText(value) {
@@ -82,8 +82,4 @@ export function terminalNotificationSequence(notification) {
82
82
  const message = cleanNotificationText(`${notification.title}: ${notification.body}`);
83
83
  return message ? `\x1b]9;${message}\x07` : '';
84
84
  }
85
- /** Windows Terminal-compatible native taskbar/tab progress sequences. */
86
- export function terminalProgressSequence(active) {
87
- return active ? '\x1b]9;4;3\x07' : '\x1b]9;4;0;\x07';
88
- }
89
85
  //# sourceMappingURL=terminal-notifications.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"terminal-notifications.js","sourceRoot":"","sources":["../../src/runtime/terminal-notifications.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal-notifications.js","sourceRoot":"","sources":["../../src/runtime/terminal-notifications.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Keyboard protocol negotiation: whether to speak the Kitty keyboard protocol,
3
+ * and the sequences that ask for it and give it back.
4
+ *
5
+ * The query only asks (`CSI ? u`) and never changes the terminal's state; the
6
+ * primary device-attributes request that follows is answered by every
7
+ * terminal, so it marks the end of the round trip. A terminal that reports
8
+ * Kitty flags gets exactly one push of the disambiguate flag; the session's
9
+ * mode registry pops it on hand-off and exit and pushes it again on resume. A
10
+ * terminal that answers only the device attributes keeps its legacy encoding.
11
+ * @module @agi-fans/dsh-tui/terminal-probe
12
+ */
13
+ import type { KeyEvent } from '../input/keys.ts';
14
+ /** Ask for the current Kitty flags. Changes nothing; the session's own sentinel follows it. */
15
+ export declare const KEYBOARD_PROTOCOL_QUERY = "\u001B[?u";
16
+ /** Push Kitty flag 1 (disambiguate escape codes) for this session. */
17
+ export declare const KITTY_PROTOCOL_ON = "\u001B[>1u";
18
+ /** Pop the one Kitty entry this session pushed. */
19
+ export declare const KITTY_PROTOCOL_OFF = "\u001B[<u";
20
+ /** The protocol a session settled on; absent while negotiating or when the terminal offers none. */
21
+ export type KeyboardProtocol = 'kitty';
22
+ /** One step of the negotiation. */
23
+ export interface NegotiationStep {
24
+ protocol?: KeyboardProtocol;
25
+ /** The enable sequence the caller must write, at most once per session. */
26
+ output?: string;
27
+ /** True once the terminal has answered enough for the choice to be final. */
28
+ settled: boolean;
29
+ }
30
+ /**
31
+ * Advance the negotiation with one decoded event.
32
+ * @param protocol - what the session currently speaks, if anything.
33
+ * @param event - the decoded input event.
34
+ * @returns the next protocol, any sequence to write, and whether the choice is final.
35
+ */
36
+ export declare function negotiateKeyboard(protocol: KeyboardProtocol | undefined, event: KeyEvent): NegotiationStep;
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Keyboard protocol negotiation: whether to speak the Kitty keyboard protocol,
3
+ * and the sequences that ask for it and give it back.
4
+ *
5
+ * The query only asks (`CSI ? u`) and never changes the terminal's state; the
6
+ * primary device-attributes request that follows is answered by every
7
+ * terminal, so it marks the end of the round trip. A terminal that reports
8
+ * Kitty flags gets exactly one push of the disambiguate flag; the session's
9
+ * mode registry pops it on hand-off and exit and pushes it again on resume. A
10
+ * terminal that answers only the device attributes keeps its legacy encoding.
11
+ * @module @agi-fans/dsh-tui/terminal-probe
12
+ */
13
+ /** Ask for the current Kitty flags. Changes nothing; the session's own sentinel follows it. */
14
+ export const KEYBOARD_PROTOCOL_QUERY = '\x1b[?u';
15
+ /** Push Kitty flag 1 (disambiguate escape codes) for this session. */
16
+ export const KITTY_PROTOCOL_ON = '\x1b[>1u';
17
+ /** Pop the one Kitty entry this session pushed. */
18
+ export const KITTY_PROTOCOL_OFF = '\x1b[<u';
19
+ /**
20
+ * Advance the negotiation with one decoded event.
21
+ * @param protocol - what the session currently speaks, if anything.
22
+ * @param event - the decoded input event.
23
+ * @returns the next protocol, any sequence to write, and whether the choice is final.
24
+ */
25
+ export function negotiateKeyboard(protocol, event) {
26
+ if (protocol !== undefined)
27
+ return { protocol, settled: true };
28
+ // Any flags report, zero included, proves the terminal implements the
29
+ // protocol; the reported value is only what is enabled right now.
30
+ if (event.type === 'kitty-flags')
31
+ return { protocol: 'kitty', output: KITTY_PROTOCOL_ON, settled: true };
32
+ // The sentinel arrived without a flags report: keep the legacy encoding.
33
+ if (event.type === 'device-attributes')
34
+ return { settled: true };
35
+ return { settled: false };
36
+ }
37
+ //# sourceMappingURL=terminal-probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-probe.js","sourceRoot":"","sources":["../../src/runtime/terminal-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,+FAA+F;AAC/F,MAAM,CAAC,MAAM,uBAAuB,GAAG,SAAS,CAAA;AAChD,sEAAsE;AACtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAA;AAC3C,mDAAmD;AACnD,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAA;AAc3C;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAsC,EAAE,KAAe;IACvF,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAC9D,sEAAsE;IACtE,kEAAkE;IAClE,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa;QAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IACxG,yEAAyE;IACzE,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA;IAChE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAC3B,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Owns the terminal's capability probe and the modes the session turns on.
3
+ *
4
+ * One query asks for the keyboard protocol, the reported colors and scheme,
5
+ * and DEC mode 2031 support; a trailing device-attributes request is the
6
+ * sentinel every terminal answers, so the probe settles on its reply instead
7
+ * of a timeout. Replies that arrive after settlement — late palette entries,
8
+ * color-scheme pushes — are adopted and coalesced into one `colorsChanged`
9
+ * call per burst.
10
+ * @module @agi-fans/dsh-tui/terminal-session
11
+ */
12
+ import { type TerminalColors } from '../chrome/terminal-colors.ts';
13
+ import type { KeyEvent } from '../input/keys.ts';
14
+ import { type TerminalMode } from './terminal-modes.ts';
15
+ import { type KeyboardProtocol } from './terminal-probe.ts';
16
+ /**
17
+ * The one startup probe. The device-attributes request MUST stay last:
18
+ * terminals answer in order, so its reply marks the end of every reply the
19
+ * earlier queries produced.
20
+ */
21
+ export declare const CAPABILITY_QUERY: string;
22
+ export interface TerminalSessionHost {
23
+ write(bytes: string): void;
24
+ /** Renderer hooks for per-screen Kitty stacks. */
25
+ alternateActive(): boolean;
26
+ setAlternateScreenModes(modes: {
27
+ enter: string;
28
+ exit: string;
29
+ }): void;
30
+ deferUntilMainScreen(bytes: string): void;
31
+ /** Called (coalesced) when reported colors or scheme changed after settlement. */
32
+ colorsChanged(): void;
33
+ /** Called exactly once when the startup probe settles (DA1 reply or timeout). */
34
+ probeSettled(): void;
35
+ }
36
+ export declare class TerminalSession {
37
+ #private;
38
+ constructor(host: TerminalSessionHost, options?: {
39
+ probeTimeoutMs?: number;
40
+ });
41
+ get colors(): TerminalColors;
42
+ get keyboardProtocol(): KeyboardProtocol | undefined;
43
+ get settled(): boolean;
44
+ /** Write the one-time capability query and arm its deadline. */
45
+ start(): void;
46
+ setMode(name: string, mode: TerminalMode, on: boolean): void;
47
+ handOff(): void;
48
+ takeBack(): void;
49
+ release(): void;
50
+ /**
51
+ * Consume one decoded event. Returns true for capability replies — color,
52
+ * scheme, keyboard and mode reports — so the caller drops them rather than
53
+ * treating them as input.
54
+ */
55
+ handle(event: KeyEvent): boolean;
56
+ dispose(): void;
57
+ }
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Owns the terminal's capability probe and the modes the session turns on.
3
+ *
4
+ * One query asks for the keyboard protocol, the reported colors and scheme,
5
+ * and DEC mode 2031 support; a trailing device-attributes request is the
6
+ * sentinel every terminal answers, so the probe settles on its reply instead
7
+ * of a timeout. Replies that arrive after settlement — late palette entries,
8
+ * color-scheme pushes — are adopted and coalesced into one `colorsChanged`
9
+ * call per burst.
10
+ * @module @agi-fans/dsh-tui/terminal-session
11
+ */
12
+ import { COLOR_QUERY, COLOR_SCHEME_QUERY, mergeColorReply } from "../chrome/terminal-colors.js";
13
+ import { KITTY_KEYBOARD, TerminalModes } from "./terminal-modes.js";
14
+ import { KEYBOARD_PROTOCOL_QUERY, negotiateKeyboard } from "./terminal-probe.js";
15
+ /**
16
+ * The one startup probe. The device-attributes request MUST stay last:
17
+ * terminals answer in order, so its reply marks the end of every reply the
18
+ * earlier queries produced.
19
+ */
20
+ export const CAPABILITY_QUERY = KEYBOARD_PROTOCOL_QUERY + COLOR_QUERY + COLOR_SCHEME_QUERY + '\x1b[?2031$p' + '\x1b[c';
21
+ /** DEC mode 2031 enable/disable, armed only after DECRQM reports support. */
22
+ const COLOR_SCHEME_NOTIFY = { enable: '\x1b[?2031h', disable: '\x1b[?2031l' };
23
+ /** How long the startup probe may wait for the DA1 sentinel. */
24
+ const DEFAULT_PROBE_TIMEOUT_MS = 200;
25
+ /** Color replies are coalesced into one colorsChanged call per this window. */
26
+ const COLORS_CHANGED_MS = 30;
27
+ /** A scheme change re-queries the colors after this debounce. */
28
+ const SCHEME_REQUERY_MS = 100;
29
+ export class TerminalSession {
30
+ #host;
31
+ #probeTimeoutMs;
32
+ #modes;
33
+ #colors = {};
34
+ #keyboardProtocol;
35
+ #querySent = false;
36
+ #settled = false;
37
+ #settleNotified = false;
38
+ #probeTimer;
39
+ #colorTimer;
40
+ #schemeTimer;
41
+ #disposed = false;
42
+ constructor(host, options) {
43
+ this.#host = host;
44
+ this.#probeTimeoutMs = options?.probeTimeoutMs ?? DEFAULT_PROBE_TIMEOUT_MS;
45
+ this.#modes = new TerminalModes(bytes => { host.write(bytes); });
46
+ }
47
+ get colors() { return this.#colors; }
48
+ get keyboardProtocol() { return this.#keyboardProtocol; }
49
+ get settled() { return this.#settled; }
50
+ /** Write the one-time capability query and arm its deadline. */
51
+ start() {
52
+ if (this.#querySent)
53
+ return;
54
+ this.#querySent = true;
55
+ this.#host.write(CAPABILITY_QUERY);
56
+ this.#probeTimer = setTimeout(() => {
57
+ this.#probeTimer = undefined;
58
+ this.#settle();
59
+ }, this.#probeTimeoutMs);
60
+ }
61
+ setMode(name, mode, on) {
62
+ if (on)
63
+ this.#modes.enable(name, mode);
64
+ else
65
+ this.#modes.disable(name);
66
+ }
67
+ handOff() { this.#modes.handOff(); }
68
+ takeBack() { this.#modes.takeBack(); }
69
+ release() { this.#modes.release(); }
70
+ /**
71
+ * Consume one decoded event. Returns true for capability replies — color,
72
+ * scheme, keyboard and mode reports — so the caller drops them rather than
73
+ * treating them as input.
74
+ */
75
+ handle(event) {
76
+ if (event.type === 'color-reply') {
77
+ this.#colors = mergeColorReply(this.#colors, event.reply);
78
+ this.#colorsDirty();
79
+ return true;
80
+ }
81
+ if (event.type === 'color-scheme') {
82
+ const previous = this.#colors.scheme;
83
+ this.#colors = { ...this.#colors, scheme: event.scheme };
84
+ this.#colorsDirty();
85
+ // A scheme flip after settlement re-queries the palette so quantized
86
+ // colors follow the new polarity; identical reports need nothing.
87
+ if (this.#settled && previous !== event.scheme && this.#schemeTimer === undefined) {
88
+ this.#schemeTimer = setTimeout(() => {
89
+ this.#schemeTimer = undefined;
90
+ if (!this.#disposed)
91
+ this.#host.write(COLOR_QUERY);
92
+ }, SCHEME_REQUERY_MS);
93
+ }
94
+ return true;
95
+ }
96
+ if (event.type === 'kitty-flags' || event.type === 'device-attributes') {
97
+ const step = negotiateKeyboard(this.#keyboardProtocol, event);
98
+ if (step.output !== undefined && step.protocol === 'kitty') {
99
+ if (this.#host.alternateActive()) {
100
+ // The overlay owns this Kitty stack; the main screen's push waits
101
+ // for the exit so each buffer sees exactly one.
102
+ this.#modes.adopt('keyboard', KITTY_KEYBOARD);
103
+ this.#host.deferUntilMainScreen(KITTY_KEYBOARD.enable);
104
+ }
105
+ else {
106
+ this.#modes.enable('keyboard', KITTY_KEYBOARD);
107
+ }
108
+ this.#host.setAlternateScreenModes({ enter: KITTY_KEYBOARD.enable, exit: KITTY_KEYBOARD.disable });
109
+ }
110
+ this.#keyboardProtocol = step.protocol ?? this.#keyboardProtocol;
111
+ if (event.type === 'device-attributes' && !this.#settled)
112
+ this.#settle();
113
+ return true;
114
+ }
115
+ if (event.type === 'mode-report') {
116
+ if (event.mode === 2031 && (event.state === 1 || event.state === 2)) {
117
+ this.#modes.enable('color-scheme-notify', COLOR_SCHEME_NOTIFY);
118
+ }
119
+ return true;
120
+ }
121
+ return false;
122
+ }
123
+ dispose() {
124
+ this.#disposed = true;
125
+ if (this.#probeTimer !== undefined)
126
+ clearTimeout(this.#probeTimer);
127
+ if (this.#colorTimer !== undefined)
128
+ clearTimeout(this.#colorTimer);
129
+ if (this.#schemeTimer !== undefined)
130
+ clearTimeout(this.#schemeTimer);
131
+ this.#probeTimer = this.#colorTimer = this.#schemeTimer = undefined;
132
+ this.#modes.release();
133
+ }
134
+ #settle() {
135
+ if (this.#settled)
136
+ return;
137
+ this.#settled = true;
138
+ if (this.#probeTimer !== undefined) {
139
+ clearTimeout(this.#probeTimer);
140
+ this.#probeTimer = undefined;
141
+ }
142
+ if (this.#settleNotified)
143
+ return;
144
+ this.#settleNotified = true;
145
+ // Replies buffered while probing are part of the settled frame, so only
146
+ // changes from here on notify.
147
+ if (this.#colorTimer !== undefined) {
148
+ clearTimeout(this.#colorTimer);
149
+ this.#colorTimer = undefined;
150
+ }
151
+ this.#host.probeSettled();
152
+ }
153
+ /** Mark accumulated colors dirty; changes notify only after settlement. */
154
+ #colorsDirty() {
155
+ if (!this.#settled || this.#colorTimer !== undefined)
156
+ return;
157
+ this.#colorTimer = setTimeout(() => {
158
+ this.#colorTimer = undefined;
159
+ if (!this.#disposed)
160
+ this.#host.colorsChanged();
161
+ }, COLORS_CHANGED_MS);
162
+ }
163
+ }
164
+ //# sourceMappingURL=terminal-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-session.js","sourceRoot":"","sources":["../../src/runtime/terminal-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ export type AgentActivityState = 'idle' | 'working' | 'blocked';
2
+ export interface AgentActivityStatus {
3
+ readonly state: AgentActivityState;
4
+ readonly message?: string;
5
+ }
6
+ export type TerminalProgramState = AgentActivityState | 'done' | 'error';
7
+ export interface TerminalProgramStatus {
8
+ readonly state: TerminalProgramState;
9
+ readonly message?: string;
10
+ }
11
+ export declare const TERMINAL_TITLE_MODES: readonly ["status", "session", "workspace", "off"];
12
+ export type TerminalTitleMode = typeof TERMINAL_TITLE_MODES[number];
13
+ export declare const TERMINAL_STATE_MODES: readonly ["auto", "on", "off"];
14
+ export type TerminalStateMode = typeof TERMINAL_STATE_MODES[number];
15
+ export declare const PROGRAM_STATUS_QUERY = "\u001B]7501;?\u001B\\";
16
+ /** Status protocol carries titles only, never prompts, tool input or error payloads. */
17
+ export declare function programStatusSequence(status: TerminalProgramStatus | 'clear'): string;
18
+ export declare function terminalTitle(mode: TerminalTitleMode, status: TerminalProgramStatus, session: string | undefined, cwd: string, branch?: string): string;
19
+ export declare class AgentActivityController {
20
+ #private;
21
+ get current(): AgentActivityStatus;
22
+ get program(): TerminalProgramStatus;
23
+ start(): AgentActivityStatus;
24
+ setRunning(running: boolean): AgentActivityStatus | undefined;
25
+ settled(reason: string): void;
26
+ resetResult(): void;
27
+ prompt(message?: string): AgentActivityStatus | undefined;
28
+ promptResolved(): AgentActivityStatus | undefined;
29
+ }
@@ -0,0 +1,62 @@
1
+ /** Root activity projected once for Herdr and the foreground terminal. */
2
+ import { basename } from 'node:path';
3
+ export const TERMINAL_TITLE_MODES = ['status', 'session', 'workspace', 'off'];
4
+ export const TERMINAL_STATE_MODES = ['auto', 'on', 'off'];
5
+ export const PROGRAM_STATUS_QUERY = '\x1b]7501;?\x1b\\';
6
+ function clean(value, limit) {
7
+ if (value === undefined)
8
+ return undefined;
9
+ const text = [...value.replace(/[\u0000-\u001f\u007f-\u009f]/gu, ' ').replace(/\s+/gu, ' ').trim()].slice(0, limit).join('');
10
+ return text === '' ? undefined : text;
11
+ }
12
+ /** Status protocol carries titles only, never prompts, tool input or error payloads. */
13
+ export function programStatusSequence(status) {
14
+ if (status === 'clear')
15
+ return '\x1b]7501;state=clear:app=omdsh\x1b\\';
16
+ const message = clean(status.message, 240);
17
+ return `\x1b]7501;state=${status.state}:app=omdsh${message === undefined ? '' : `:msg=${Buffer.from(message).toString('base64')}`}\x1b\\`;
18
+ }
19
+ const STATE_LABELS = { idle: 'Ready', working: 'Working', blocked: 'Needs input', done: 'Done', error: 'Failed' };
20
+ export function terminalTitle(mode, status, session, cwd, branch) {
21
+ if (mode === 'off')
22
+ return '';
23
+ if (mode === 'session')
24
+ return clean(session, 120) ?? '';
25
+ const subject = mode === 'workspace' ? [basename(cwd), branch].filter(Boolean).join(' · ') : session ?? basename(cwd);
26
+ return clean([STATE_LABELS[status.state], subject, 'omdsh'].filter(Boolean).join(' · '), 120) ?? '';
27
+ }
28
+ export class AgentActivityController {
29
+ #running = false;
30
+ #prompts = [];
31
+ #last;
32
+ #result = 'idle';
33
+ get current() {
34
+ const message = this.#prompts.at(-1);
35
+ return this.#prompts.length > 0 ? { state: 'blocked', ...(message === undefined ? {} : { message }) } : { state: this.#running ? 'working' : 'idle' };
36
+ }
37
+ get program() {
38
+ const current = this.current;
39
+ return current.state === 'idle' ? { state: this.#result } : current;
40
+ }
41
+ start() { return this.#publish(true); }
42
+ setRunning(running) {
43
+ if (running && !this.#running)
44
+ this.#result = 'idle';
45
+ this.#running = running;
46
+ return this.#publish();
47
+ }
48
+ settled(reason) { this.#result = ['complete', 'completed'].includes(reason) ? 'done' : ['aborted', 'interrupted'].includes(reason) ? 'idle' : 'error'; }
49
+ resetResult() { this.#result = 'idle'; }
50
+ prompt(message) { this.#prompts.push(clean(message, 240)); return this.#publish(); }
51
+ promptResolved() { if (this.#prompts.length === 0)
52
+ return undefined; this.#prompts.pop(); return this.#publish(); }
53
+ #publish(force = false) {
54
+ const next = this.current;
55
+ const signature = `${next.state}\0${next.message ?? ''}`;
56
+ if (!force && signature === this.#last)
57
+ return undefined;
58
+ this.#last = signature;
59
+ return next;
60
+ }
61
+ }
62
+ //# sourceMappingURL=terminal-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-state.js","sourceRoot":"","sources":["../../src/runtime/terminal-state.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,15 @@ function parsedArguments(raw) {
12
12
  return raw;
13
13
  }
14
14
  }
15
+ function callKey(event) {
16
+ if (event.type === 'tool/call')
17
+ return event.data.callId;
18
+ if (event.type === 'tool/result')
19
+ return event.data.message.source.callId;
20
+ if (event.type === 'tool/ptc-dispatch-start' || event.type === 'tool/ptc-dispatch')
21
+ return event.data.subCallId;
22
+ return undefined;
23
+ }
15
24
  class HarnessToolPresentation {
16
25
  #ctx;
17
26
  /**
@@ -24,16 +33,31 @@ class HarnessToolPresentation {
24
33
  this.#ctx = ctx;
25
34
  }
26
35
  event(agent, event) {
27
- if (event.type === 'tool/call') {
36
+ if (event.type === 'tool/call' || event.type === 'tool/ptc-dispatch-start') {
28
37
  let calls = this.#liveCalls.get(agent.session);
29
38
  if (calls === undefined) {
30
39
  calls = new Map();
31
40
  this.#liveCalls.set(agent.session, calls);
32
41
  }
33
- calls.set(event.data.callId, event);
42
+ calls.set(callKey(event), { event, cwd: this.#directory(agent) });
34
43
  }
35
44
  return this.#event(agent, event, undefined);
36
45
  }
46
+ #directory(agent, initial = false) {
47
+ const service = typeof this.#ctx.get === 'function' ? this.#ctx.get('workingDirectory') : undefined;
48
+ return initial ? agent.session.header?.cwd ?? service?.defaultDirectory : service?.get(agent.session) ?? agent.session.header?.cwd;
49
+ }
50
+ #records(agent, events, initial = this.#directory(agent, true)) {
51
+ const records = new Map();
52
+ let cwd = initial;
53
+ for (const event of events) {
54
+ if (event.type === 'working-directory/change')
55
+ cwd = event.data.cwd;
56
+ if (event.type === 'tool/call' || event.type === 'tool/ptc-dispatch-start')
57
+ records.set(callKey(event), { event, cwd });
58
+ }
59
+ return records;
60
+ }
37
61
  #presentCall(agent, name, args) {
38
62
  const definition = this.#ctx.tools.get(name, agent);
39
63
  if (definition?.presentCall === undefined)
@@ -67,38 +91,50 @@ class HarnessToolPresentation {
67
91
  };
68
92
  }
69
93
  #event(agent, event, callIndex) {
94
+ const key = callKey(event);
95
+ if (key === undefined)
96
+ return undefined;
97
+ const record = callIndex?.get(key) ?? this.#liveCalls.get(agent.session)?.get(key)
98
+ ?? this.#records(agent, agent.session.snapshotEvents()).get(key);
99
+ const cwd = record?.cwd;
100
+ const located = (presentation) => presentation === undefined
101
+ ? undefined : cwd === undefined ? presentation : { ...presentation, cwd };
70
102
  // A PTC sub-dispatch carries the tool name and its normalized arguments on
71
103
  // both halves of the pair, so it resolves a card without a call index — the
72
104
  // same cards a native call of the same tool would get.
73
105
  if (event.type === 'tool/ptc-dispatch-start') {
74
106
  const call = this.#presentCall(agent, event.data.name, event.data.arguments);
75
- return call === undefined ? undefined : { call };
107
+ return located(call === undefined ? undefined : { call });
76
108
  }
77
109
  if (event.type === 'tool/ptc-dispatch') {
78
- return this.#present(agent, event.data.name, event.data.arguments, event.data.content, event.data.isError, undefined);
110
+ return located(this.#present(agent, event.data.name, event.data.arguments, event.data.content, event.data.isError, undefined));
79
111
  }
80
112
  if (event.type === 'tool/call') {
81
113
  const call = this.#presentCall(agent, event.data.name, parsedArguments(event.data.arguments));
82
- return call === undefined ? undefined : { call };
114
+ return located(call === undefined ? undefined : { call });
83
115
  }
84
116
  if (event.type !== 'tool/result')
85
117
  return undefined;
86
- const callId = event.data.message.source.callId;
87
- const callEvent = callIndex?.get(callId)
88
- ?? this.#liveCalls.get(agent.session)?.get(callId)
89
- ?? agent.session.snapshotEvents().findLast(candidate => candidate.type === 'tool/call' && candidate.data.callId === callId);
118
+ const callEvent = record?.event;
90
119
  if (callEvent?.type !== 'tool/call')
91
120
  return undefined;
92
- return this.#present(agent, callEvent.data.name, callEvent.data.arguments, event.data.message.content, event.data.message.isError === true, event.data.meta);
121
+ return located(this.#present(agent, callEvent.data.name, callEvent.data.arguments, event.data.message.content, event.data.message.isError === true, event.data.meta));
93
122
  }
94
123
  session(agent, events) {
95
124
  // One pass builds a callId index instead of the per-result backwards
96
125
  // log scan, keeping replay linear in the event count.
97
- const callIndex = new Map();
98
- for (const event of events) {
99
- if (event.type === 'tool/call')
100
- callIndex.set(event.data.callId, event);
126
+ let initial = this.#directory(agent, true);
127
+ // An inspected child's own events may omit its inherited directory changes.
128
+ const first = events[0]?.seq;
129
+ if (first !== undefined && first > 1) {
130
+ for (const event of agent.session.snapshotEvents()) {
131
+ if (event.seq >= first)
132
+ break;
133
+ if (event.type === 'working-directory/change')
134
+ initial = event.data.cwd;
135
+ }
101
136
  }
137
+ const callIndex = this.#records(agent, events, initial);
102
138
  const presentations = new Map();
103
139
  for (const event of events) {
104
140
  const presentation = this.#event(agent, event, callIndex);
@@ -1 +1 @@
1
- {"version":3,"file":"tool-presentation.js","sourceRoot":"","sources":["../../src/runtime/tool-presentation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-presentation.js","sourceRoot":"","sources":["../../src/runtime/tool-presentation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /** Guidance and observable profile state for native one-shot Agent bundles. */
2
+ import type { BundleInfo, PluginInfo } from '@deepseek-ai/dsh-plugin-manager';
3
+ export declare function externalAgentGuide(bundle: string): string | undefined;
4
+ /** Profile registration is observable; authentication and payload startup require a real delegation. */
5
+ export declare function externalAgentDiagnostic(bundle: BundleInfo, plugins: readonly PluginInfo[]): string;