@adhdev/daemon-core 0.9.82-rc.17 → 0.9.82-rc.170

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 (221) hide show
  1. package/dist/boot/process-hardening.d.ts +50 -0
  2. package/dist/chat/source-machine.d.ts +166 -0
  3. package/dist/chat/source-resolver.d.ts +104 -0
  4. package/dist/chat/subscription-updates.d.ts +1 -0
  5. package/dist/cli-adapter-types.d.ts +22 -2
  6. package/dist/cli-adapters/cli-script-runner.d.ts +117 -0
  7. package/dist/cli-adapters/cli-state-engine.d.ts +178 -0
  8. package/dist/cli-adapters/provider-cli-adapter.d.ts +106 -63
  9. package/dist/cli-adapters/provider-cli-parse.d.ts +4 -0
  10. package/dist/cli-adapters/provider-cli-shared.d.ts +29 -0
  11. package/dist/cli-adapters/raw-terminal-io.d.ts +37 -0
  12. package/dist/commands/handler.d.ts +110 -0
  13. package/dist/commands/mesh-coordinator.d.ts +72 -1
  14. package/dist/commands/router.d.ts +22 -0
  15. package/dist/config/chat-history.d.ts +7 -0
  16. package/dist/config/config.d.ts +5 -0
  17. package/dist/config/mesh-config.d.ts +71 -1
  18. package/dist/git/git-commands.d.ts +5 -1
  19. package/dist/index.d.ts +35 -6
  20. package/dist/index.js +18621 -3760
  21. package/dist/index.js.map +1 -1
  22. package/dist/index.mjs +18525 -3732
  23. package/dist/index.mjs.map +1 -1
  24. package/dist/installer.d.ts +1 -4
  25. package/dist/ipc/local-ipc-server.d.ts +91 -0
  26. package/dist/launch.d.ts +1 -1
  27. package/dist/logging/async-batch-writer.d.ts +10 -0
  28. package/dist/mesh/beads-db.d.ts +72 -0
  29. package/dist/mesh/contracts.d.ts +164 -0
  30. package/dist/mesh/coordinator-prompt.d.ts +30 -0
  31. package/dist/mesh/coordinator-registry.d.ts +59 -0
  32. package/dist/mesh/mesh-active-work.d.ts +90 -0
  33. package/dist/mesh/mesh-events.d.ts +96 -5
  34. package/dist/mesh/mesh-fast-forward.d.ts +39 -0
  35. package/dist/mesh/mesh-host-ownership.d.ts +9 -0
  36. package/dist/mesh/mesh-ledger.d.ts +58 -1
  37. package/dist/mesh/mesh-refine-status.d.ts +26 -0
  38. package/dist/mesh/mesh-work-queue.d.ts +44 -5
  39. package/dist/mesh/preview-freshness.d.ts +18 -0
  40. package/dist/mesh/refine-config.d.ts +193 -0
  41. package/dist/mesh/worktree-bootstrap-config.d.ts +113 -0
  42. package/dist/providers/approval-utils.d.ts +13 -0
  43. package/dist/providers/cli-provider-instance.d.ts +9 -3
  44. package/dist/providers/contracts.d.ts +98 -5
  45. package/dist/providers/external-sources.d.ts +71 -0
  46. package/dist/providers/native-history/antigravity-cli-transcript.d.ts +100 -0
  47. package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
  48. package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
  49. package/dist/providers/native-history/dispatcher.d.ts +24 -0
  50. package/dist/providers/native-history/hermes-cli-transcript.d.ts +30 -0
  51. package/dist/providers/native-history/index.d.ts +13 -0
  52. package/dist/providers/provider-instance.d.ts +3 -0
  53. package/dist/providers/provider-loader.d.ts +26 -4
  54. package/dist/providers/provider-trust.d.ts +31 -0
  55. package/dist/providers/read-chat-contract.d.ts +29 -0
  56. package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
  57. package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +85 -0
  58. package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
  59. package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +65 -0
  60. package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
  61. package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
  62. package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
  63. package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
  64. package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
  65. package/dist/providers/sdk/v1/index.d.ts +30 -0
  66. package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
  67. package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
  68. package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
  69. package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
  70. package/dist/providers/sdk/v1/types/common/index.d.ts +169 -0
  71. package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
  72. package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
  73. package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
  74. package/dist/providers/spec/adapter.d.ts +56 -0
  75. package/dist/providers/spec/cli-adapter.d.ts +95 -0
  76. package/dist/providers/spec/driver.d.ts +149 -0
  77. package/dist/providers/spec/evaluator.d.ts +47 -0
  78. package/dist/providers/spec/loader.d.ts +14 -0
  79. package/dist/providers/spec/native-history-executor.d.ts +39 -0
  80. package/dist/providers/spec/route.d.ts +4 -0
  81. package/dist/providers/spec/schema.gen.d.ts +511 -0
  82. package/dist/providers/spec/types.d.ts +212 -0
  83. package/dist/providers/transcript-v2.d.ts +176 -0
  84. package/dist/providers/types/interactive-prompt.d.ts +48 -0
  85. package/dist/repo-mesh-types.d.ts +100 -1
  86. package/dist/sessions/registry.d.ts +3 -0
  87. package/dist/shared-types.d.ts +42 -1
  88. package/dist/status/reporter.d.ts +2 -0
  89. package/dist/status/snapshot.d.ts +1 -0
  90. package/dist/types.d.ts +5 -0
  91. package/package.json +7 -2
  92. package/src/agent-stream/poller.ts +2 -3
  93. package/src/boot/daemon-lifecycle.ts +17 -10
  94. package/src/boot/process-hardening.ts +89 -0
  95. package/src/chat/source-machine.ts +534 -0
  96. package/src/chat/source-resolver.ts +0 -0
  97. package/src/chat/subscription-updates.ts +14 -1
  98. package/src/cli-adapter-types.d.ts +1 -0
  99. package/src/cli-adapter-types.ts +21 -2
  100. package/src/cli-adapters/cli-script-runner.ts +421 -0
  101. package/src/cli-adapters/cli-state-engine.ts +1086 -0
  102. package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
  103. package/src/cli-adapters/provider-cli-adapter.ts +670 -1137
  104. package/src/cli-adapters/provider-cli-parse.d.ts +1 -0
  105. package/src/cli-adapters/provider-cli-parse.ts +13 -0
  106. package/src/cli-adapters/provider-cli-runtime.ts +3 -1
  107. package/src/cli-adapters/provider-cli-shared.d.ts +2 -0
  108. package/src/cli-adapters/provider-cli-shared.ts +59 -11
  109. package/src/cli-adapters/raw-terminal-io.ts +252 -0
  110. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.ts +17 -1
  111. package/src/cli-adapters/terminal-backends/xterm-backend.ts +8 -1
  112. package/src/commands/chat-commands.ts +1597 -60
  113. package/src/commands/cli-manager.ts +214 -3
  114. package/src/commands/handler.ts +809 -2
  115. package/src/commands/mesh-coordinator.ts +231 -127
  116. package/src/commands/router.ts +3559 -502
  117. package/src/config/chat-history.ts +87 -24
  118. package/src/config/config.ts +12 -0
  119. package/src/config/mesh-config.ts +264 -2
  120. package/src/config/recent-activity.ts +8 -2
  121. package/src/daemon/dev-cli-debug.ts +10 -1
  122. package/src/detection/ide-detector.ts +26 -16
  123. package/src/git/git-commands.ts +17 -5
  124. package/src/git/git-worktree.ts +8 -1
  125. package/src/index.ts +113 -5
  126. package/src/installer.d.ts +1 -1
  127. package/src/installer.ts +8 -6
  128. package/src/ipc/local-ipc-server.ts +278 -0
  129. package/src/launch.d.ts +1 -1
  130. package/src/launch.ts +37 -28
  131. package/src/logging/async-batch-writer.ts +55 -0
  132. package/src/logging/logger.ts +2 -1
  133. package/src/mesh/beads-db.ts +479 -0
  134. package/src/mesh/contracts.ts +329 -0
  135. package/src/mesh/coordinator-prompt.ts +204 -30
  136. package/src/mesh/coordinator-registry.ts +121 -0
  137. package/src/mesh/mesh-active-work.ts +437 -0
  138. package/src/mesh/mesh-events.ts +879 -61
  139. package/src/mesh/mesh-fast-forward.ts +430 -0
  140. package/src/mesh/mesh-host-ownership.ts +73 -0
  141. package/src/mesh/mesh-ledger.ts +457 -104
  142. package/src/mesh/mesh-refine-status.ts +144 -0
  143. package/src/mesh/mesh-work-queue.ts +216 -158
  144. package/src/mesh/preview-freshness.ts +118 -0
  145. package/src/mesh/refine-config.ts +366 -0
  146. package/src/mesh/worktree-bootstrap-config.ts +247 -0
  147. package/src/providers/approval-utils.d.ts +4 -0
  148. package/src/providers/approval-utils.ts +47 -5
  149. package/src/providers/chat-message-normalization.ts +4 -11
  150. package/src/providers/cli-provider-instance.ts +452 -54
  151. package/src/providers/contracts.ts +105 -5
  152. package/src/providers/external-sources.ts +218 -0
  153. package/src/providers/ide-provider-instance.ts +19 -5
  154. package/src/providers/native-history/antigravity-cli-transcript.ts +643 -0
  155. package/src/providers/native-history/claude-cli-transcript.ts +396 -0
  156. package/src/providers/native-history/codex-cli-transcript.ts +419 -0
  157. package/src/providers/native-history/dispatcher.ts +227 -0
  158. package/src/providers/native-history/hermes-cli-transcript.ts +230 -0
  159. package/src/providers/native-history/index.ts +30 -0
  160. package/src/providers/provider-instance.ts +3 -0
  161. package/src/providers/provider-loader.ts +585 -50
  162. package/src/providers/provider-schema.ts +31 -13
  163. package/src/providers/provider-trust.ts +114 -0
  164. package/src/providers/read-chat-contract.ts +76 -16
  165. package/src/providers/sdk/README.md +49 -0
  166. package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
  167. package/src/providers/sdk/v1/builders/cli/detect-status.ts +262 -0
  168. package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
  169. package/src/providers/sdk/v1/builders/cli/parse-approval.ts +250 -0
  170. package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
  171. package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
  172. package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
  173. package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
  174. package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
  175. package/src/providers/sdk/v1/index.ts +152 -0
  176. package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
  177. package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
  178. package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
  179. package/src/providers/sdk/v1/schemas/cli/provider.schema.json +458 -0
  180. package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
  181. package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
  182. package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
  183. package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
  184. package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
  185. package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
  186. package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
  187. package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
  188. package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +125 -0
  189. package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
  190. package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
  191. package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
  192. package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
  193. package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
  194. package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
  195. package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
  196. package/src/providers/sdk/v1/types/cli/index.ts +365 -0
  197. package/src/providers/sdk/v1/types/common/index.ts +210 -0
  198. package/src/providers/sdk/v1/validators/index.ts +19 -0
  199. package/src/providers/sdk/v1/validators/manifest.ts +110 -0
  200. package/src/providers/sdk/v1/validators/taint.ts +309 -0
  201. package/src/providers/spec/adapter.ts +168 -0
  202. package/src/providers/spec/cli-adapter.ts +430 -0
  203. package/src/providers/spec/driver.ts +502 -0
  204. package/src/providers/spec/evaluator.ts +298 -0
  205. package/src/providers/spec/loader.ts +130 -0
  206. package/src/providers/spec/native-history-executor.ts +623 -0
  207. package/src/providers/spec/route.ts +51 -0
  208. package/src/providers/spec/schema.gen.ts +511 -0
  209. package/src/providers/spec/schema.json +211 -0
  210. package/src/providers/spec/types.ts +231 -0
  211. package/src/providers/transcript-v2.ts +567 -0
  212. package/src/providers/types/interactive-prompt.ts +297 -0
  213. package/src/providers/version-archive.ts +38 -20
  214. package/src/repo-mesh-types.ts +110 -1
  215. package/src/sessions/registry.ts +3 -0
  216. package/src/shared-types.ts +45 -1
  217. package/src/status/builders.ts +24 -6
  218. package/src/status/reporter.ts +15 -0
  219. package/src/status/snapshot.ts +84 -25
  220. package/src/system/host-memory.ts +29 -12
  221. package/src/types.ts +5 -0
@@ -0,0 +1,95 @@
1
+ import type { CliAdapter, CliAdapterStatus } from '../../cli-adapter-types.js';
2
+ import type { PtyTransportFactory } from '../../cli-adapters/pty-transport.js';
3
+ import { type InteractivePromptResponse } from '../types/interactive-prompt.js';
4
+ export declare class SpecCliAdapter implements CliAdapter {
5
+ readonly cliType: string;
6
+ readonly cliName: string;
7
+ readonly workingDir: string;
8
+ /**
9
+ * Marker the daemon's finalization gate checks: `getStatus()` returns
10
+ * `messages: []` by design here (chat history lives in the daemon's
11
+ * native-history pipeline, not the adapter). Without this flag,
12
+ * cli-provider-instance's `missing_final_assistant` gate would stall
13
+ * every turn until the 30s safety timeout because it expects the
14
+ * adapter to surface the final assistant message.
15
+ */
16
+ readonly chatMessagesOwnedExternally: true;
17
+ private driver;
18
+ private spec;
19
+ private lastEvent;
20
+ private latestState;
21
+ private latestModal;
22
+ private statusCallback;
23
+ private ptyDataCallback;
24
+ private partialResponse;
25
+ private activeInteractivePrompt;
26
+ private interactivePromptTransport;
27
+ private claudeTuiPromptCaptureInFlight;
28
+ private jsonLineTail;
29
+ private exited;
30
+ private spawned;
31
+ private providerSessionId;
32
+ /** Wall clock at the moment spawn() ran. Used as the cutoff for
33
+ * native-history file selection so a prior session's transcript
34
+ * can't leak into this session before the agent has written its
35
+ * own records. */
36
+ private spawnedAtMs;
37
+ /** Env vars the daemon set on the spawned child. Mesh coordinator
38
+ * points hermes at a per-coordinator HERMES_HOME so the dashboard's
39
+ * native-history reader needs that override to find the right
40
+ * state.db; without it the reader sees ~/.hermes/state.db which
41
+ * the coordinator-launched hermes never writes to. The choice to
42
+ * redirect HERMES_HOME is a workaround for an unresolved hermes
43
+ * upstream feature gap (see hermes-agent#23130 — runtime-supplied
44
+ * MCP config), so this routing keeps the dashboard honest until
45
+ * hermes ships a runtime MCP override. */
46
+ private spawnedEnv;
47
+ constructor(specPath: string, workingDir: string, cliArgs: string[], extraEnv: Record<string, string>, transportFactory?: PtyTransportFactory);
48
+ spawn(): Promise<void>;
49
+ sendMessage(text: string): Promise<void>;
50
+ getStatus(): CliAdapterStatus;
51
+ private maybeRefreshNativeHistory;
52
+ getScriptParsedStatus(): unknown;
53
+ getPartialResponse(): string;
54
+ shutdown(): void;
55
+ cancel(): void;
56
+ isProcessing(): boolean;
57
+ isReady(): boolean;
58
+ setOnStatusChange(cb: () => void): void;
59
+ setOnPtyData(cb: (data: string) => void): void;
60
+ writeRaw(data: string): void;
61
+ resize(cols: number, rows: number): void;
62
+ resolveModal(buttonIndex: number): void;
63
+ resolveAction(data: unknown): Promise<void>;
64
+ setInteractivePromptResponse(response: InteractivePromptResponse): Promise<void>;
65
+ isApprovalRecentlyResolved(): boolean;
66
+ clearHistory(): void;
67
+ updateRuntimeSettings(): void;
68
+ setServerConn(): void;
69
+ /**
70
+ * Map an invokeScript(name, args) call onto a control_bar entry.
71
+ *
72
+ * scriptName is matched against control.id. The control's action.type
73
+ * drives the dispatch:
74
+ *
75
+ * send_keys → click_control (e.g. stop)
76
+ * open_picker → click_control then resolve when extract_choices
77
+ * surface; choice index comes from args.choiceIndex
78
+ * or args.choice (string label match), defaulting to 0
79
+ * attach_image → attach_image dispatch; expects args.blob (data url
80
+ * or base64) and args.mime
81
+ *
82
+ * Callers that pass an unknown control id get a { not_found } response.
83
+ * No control matched, no driver call — keeps the surface honest.
84
+ */
85
+ invokeScript(scriptName: string, args?: Record<string, unknown>): Promise<unknown>;
86
+ getDebugSnapshot(): unknown;
87
+ getRuntimeMetadata(): unknown;
88
+ updateRuntimeMeta(meta?: Record<string, unknown>): void;
89
+ refreshProviderDefinition(): void;
90
+ private handleEvent;
91
+ private detectInteractivePromptFromPtyChunk;
92
+ private maybeCaptureClaudeTuiPrompt;
93
+ private readClaudeTuiHeaders;
94
+ private captureClaudeTuiPrompt;
95
+ }
@@ -0,0 +1,149 @@
1
+ import type { PtyTransportFactory } from '../../cli-adapters/pty-transport.js';
2
+ import { type TraceEntry } from './evaluator.js';
3
+ export type DashboardEvent = {
4
+ kind: 'pty_data';
5
+ chunk: string;
6
+ } | {
7
+ kind: 'state_changed';
8
+ state: {
9
+ id: string;
10
+ label: string;
11
+ title: string | null;
12
+ };
13
+ modal: {
14
+ title: string | null;
15
+ buttons: {
16
+ index: number;
17
+ label: string;
18
+ }[];
19
+ } | null;
20
+ controls: {
21
+ id: string;
22
+ label: string;
23
+ action_type: string;
24
+ }[];
25
+ } | {
26
+ kind: 'notification';
27
+ id: string;
28
+ title: string;
29
+ body: string;
30
+ } | {
31
+ kind: 'delegate';
32
+ id: string;
33
+ task: string;
34
+ } | {
35
+ kind: 'spec_trace';
36
+ entries: TraceEntry[];
37
+ } | {
38
+ kind: 'exit';
39
+ exit_code: number;
40
+ } | {
41
+ kind: 'spec_error';
42
+ errors: string[];
43
+ };
44
+ export type DashboardCommand = {
45
+ kind: 'send_message';
46
+ text: string;
47
+ } | {
48
+ kind: 'pty_write';
49
+ data: string;
50
+ } | {
51
+ kind: 'click_control';
52
+ control_id: string;
53
+ payload?: unknown;
54
+ } | {
55
+ kind: 'click_modal_button';
56
+ index: number;
57
+ } | {
58
+ kind: 'attach_image';
59
+ blob: string;
60
+ mime: string;
61
+ } | {
62
+ kind: 'resize';
63
+ cols: number;
64
+ rows: number;
65
+ } | {
66
+ kind: 'cancel';
67
+ } | {
68
+ kind: 'shutdown';
69
+ };
70
+ export interface SpecDriverOpts {
71
+ specPath: string;
72
+ workingDir: string;
73
+ extraEnv?: Record<string, string>;
74
+ cols?: number;
75
+ rows?: number;
76
+ /** Set false to skip the spec.json fs.watch. */
77
+ hotReload?: boolean;
78
+ /** Set true to forward trace entries on every state_changed. */
79
+ emitTrace?: boolean;
80
+ /** Inject the daemon's PTY transport (typically SessionHostPtyTransportFactory). */
81
+ transportFactory?: PtyTransportFactory;
82
+ /**
83
+ * Extra CLI args appended to spec.spawn_args. Used by the daemon to
84
+ * pass per-launch arguments like `--session-id <uuid>` so the agent
85
+ * uses the daemon's providerSessionId instead of generating its own.
86
+ */
87
+ extraCliArgs?: string[];
88
+ }
89
+ export declare class SpecDriver {
90
+ private readonly opts;
91
+ private spec;
92
+ private adapter;
93
+ private listeners;
94
+ private currentStateId;
95
+ /** Have we ever seen the spec's idle state *after* the startup grace
96
+ * window? Until we do, the agent's startup banner may still be
97
+ * painting and any send_message we forward to the PTY will be wiped
98
+ * when the banner clears the screen. Queue + drain on first valid
99
+ * idle. */
100
+ private idleSeenOnce;
101
+ private startedAtMs;
102
+ private pendingSends;
103
+ private currentEval;
104
+ private pickerInProgress;
105
+ private delegateTimers;
106
+ /** Timestamp of the last time the evaluator returned busy. Used to debounce
107
+ * the busy → idle transition (see reevaluate). */
108
+ private lastBusyAt;
109
+ /** The exact busy state object we last saw — held alongside lastBusyAt so
110
+ * the hold can re-emit the same { id: 'busy', label, title } payload the
111
+ * dashboard already learned about. currentEval can't fill this role
112
+ * because the evaluator already moved past busy by the time the hold
113
+ * kicks in. */
114
+ private lastBusyState;
115
+ /** Timer that re-runs evaluate() once the hold window expires. Needed
116
+ * because the PTY stops emitting once the agent finishes; without an
117
+ * explicit wake-up there's nothing to trigger the busy → idle
118
+ * downshift. */
119
+ private busyExpiryTimer;
120
+ private specWatcher;
121
+ constructor(opts: SpecDriverOpts);
122
+ /** Subscribe to outbound events. Returns an unsubscribe fn. */
123
+ subscribe(listener: (ev: DashboardEvent) => void): () => void;
124
+ start(): void;
125
+ dispatch(cmd: DashboardCommand): void;
126
+ snapshot(): string;
127
+ shutdown(): void;
128
+ private loadSpecOrThrow;
129
+ private buildAdapterOpts;
130
+ private armSpecWatcher;
131
+ private emitInitialState;
132
+ /** Re-arm the timer that wakes the driver up after BUSY_HOLD_MS so it
133
+ * can decide whether to downshift to idle. Always uses the most recent
134
+ * hold value so a spec hot-reload that shortens the hold takes effect
135
+ * on the next busy entry. Safe to call repeatedly; only the last call
136
+ * fires. */
137
+ private scheduleBusyExpiry;
138
+ private reevaluate;
139
+ private armOrCancelDelegateTimers;
140
+ private fireDelegate;
141
+ private handleSendMessage;
142
+ private actuallySendMessage;
143
+ private handleClickControl;
144
+ private handleClickModalButton;
145
+ private handleAttachImage;
146
+ private tryAdvancePicker;
147
+ private handleExit;
148
+ private emit;
149
+ }
@@ -0,0 +1,47 @@
1
+ import type { CliSpec } from './types.js';
2
+ export interface ResolvedSection {
3
+ id: string;
4
+ fromLine: number;
5
+ toLine: number;
6
+ text: string;
7
+ }
8
+ export interface ModalSnapshot {
9
+ title: string | null;
10
+ buttons: {
11
+ index: number;
12
+ label: string;
13
+ key: string;
14
+ }[];
15
+ }
16
+ export interface VisibleControl {
17
+ id: string;
18
+ label: string;
19
+ actionType: 'send_keys' | 'open_picker' | 'attach_image';
20
+ }
21
+ export interface FiredNotification {
22
+ id: string;
23
+ title: string;
24
+ body: string;
25
+ }
26
+ export interface FiredDelegate {
27
+ id: string;
28
+ task: string;
29
+ }
30
+ export interface TraceEntry {
31
+ kind: 'section' | 'state_match' | 'state_skip' | 'modal' | 'control' | 'notification' | 'delegate';
32
+ text: string;
33
+ }
34
+ export interface SpecEvaluation {
35
+ state: {
36
+ id: string;
37
+ label: string;
38
+ title: string | null;
39
+ };
40
+ modal: ModalSnapshot | null;
41
+ controls: VisibleControl[];
42
+ notifications: FiredNotification[];
43
+ delegates: FiredDelegate[];
44
+ sections: ResolvedSection[];
45
+ trace: TraceEntry[];
46
+ }
47
+ export declare function evaluate(spec: CliSpec, screenText: string): SpecEvaluation;
@@ -0,0 +1,14 @@
1
+ import type { CliSpec } from './types.js';
2
+ export interface SpecLoadResult {
3
+ ok: true;
4
+ spec: CliSpec;
5
+ sourcePath: string;
6
+ }
7
+ export interface SpecLoadError {
8
+ ok: false;
9
+ errors: string[];
10
+ sourcePath: string;
11
+ }
12
+ export declare function loadSpec(sourcePath: string): SpecLoadResult | SpecLoadError;
13
+ /** Convenience: look up a provider's spec.json next to its provider dir. */
14
+ export declare function resolveSpecPath(providerDir: string): string;
@@ -0,0 +1,39 @@
1
+ import type { NativeHistoryConfig } from './types.js';
2
+ export interface NativeHistoryInput {
3
+ agentType?: string;
4
+ sessionId?: string;
5
+ providerSessionId?: string;
6
+ historySessionId?: string;
7
+ workspace?: string;
8
+ /** Daemon-side wall clock at the moment the session was registered.
9
+ * Native-history file lookups use this as the lower bound: any file
10
+ * whose mtime is before the current session started can't be from
11
+ * this session, so it's excluded from newest-recent matching. The
12
+ * caller (chat-history pipeline) populates this from the session
13
+ * registry; specs/executor never need to know how it's sourced. */
14
+ sessionStartedAtMs?: number;
15
+ /** Env overrides the daemon set on the spawned CLI. The mesh
16
+ * coordinator points hermes at a per-coordinator HERMES_HOME so
17
+ * the hermes process writes its state.db into a tmp directory
18
+ * instead of ~/.hermes. expandPath consults this map before
19
+ * process.env so the native-history reader follows the spawned
20
+ * child's view of HERMES_HOME / similar overrides; without it
21
+ * the reader would always look at ~/.hermes and miss every
22
+ * coordinator-session transcript. */
23
+ envOverrides?: Record<string, string>;
24
+ args?: Record<string, unknown>;
25
+ }
26
+ export interface NativeHistoryMessage {
27
+ role: 'user' | 'assistant' | 'system';
28
+ content: string;
29
+ receivedAt: number;
30
+ kind?: string;
31
+ }
32
+ export interface NativeHistoryResult {
33
+ messages: NativeHistoryMessage[];
34
+ providerSessionId?: string;
35
+ sourcePath: string;
36
+ sourceMtimeMs: number;
37
+ nativeHistoryCoverage?: 'full' | 'partial' | 'best-effort';
38
+ }
39
+ export declare function executeNativeHistory(cfg: NativeHistoryConfig, input: NativeHistoryInput): NativeHistoryResult | null;
@@ -0,0 +1,4 @@
1
+ import type { CliProviderModule } from '../../cli-adapters/provider-cli-adapter.js';
2
+ import type { PtyTransportFactory } from '../../cli-adapters/pty-transport.js';
3
+ import type { CliAdapter } from '../../cli-adapter-types.js';
4
+ export declare function createCliAdapter(provider: CliProviderModule, workingDir: string, cliArgs: string[], extraEnv: Record<string, string>, transportFactory?: PtyTransportFactory): CliAdapter;