@adhdev/daemon-core 0.9.82-rc.22 → 0.9.82-rc.221

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 (270) hide show
  1. package/dist/boot/daemon-lifecycle.d.ts +1 -0
  2. package/dist/boot/process-hardening.d.ts +50 -0
  3. package/dist/chat/source-machine.d.ts +166 -0
  4. package/dist/chat/source-resolver.d.ts +104 -0
  5. package/dist/chat/subscription-updates.d.ts +1 -0
  6. package/dist/cli-adapter-types.d.ts +23 -2
  7. package/dist/cli-adapters/cli-script-runner.d.ts +117 -0
  8. package/dist/cli-adapters/cli-state-engine.d.ts +178 -0
  9. package/dist/cli-adapters/provider-cli-adapter.d.ts +106 -63
  10. package/dist/cli-adapters/provider-cli-parse.d.ts +4 -0
  11. package/dist/cli-adapters/provider-cli-shared.d.ts +29 -0
  12. package/dist/cli-adapters/raw-terminal-io.d.ts +37 -0
  13. package/dist/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +3 -3
  14. package/dist/cli-adapters/terminal-backends/types.d.ts +1 -2
  15. package/dist/cli-adapters/terminal-screen.d.ts +2 -11
  16. package/dist/commands/cli-manager.d.ts +2 -1
  17. package/dist/commands/handler.d.ts +110 -0
  18. package/dist/commands/mesh-coordinator.d.ts +85 -1
  19. package/dist/commands/router.d.ts +32 -1
  20. package/dist/config/chat-history.d.ts +9 -0
  21. package/dist/config/config.d.ts +5 -0
  22. package/dist/config/mesh-config.d.ts +72 -1
  23. package/dist/git/git-commands.d.ts +9 -1
  24. package/dist/git/git-diff.d.ts +6 -0
  25. package/dist/git/git-types.d.ts +2 -0
  26. package/dist/index.d.ts +47 -11
  27. package/dist/index.js +30225 -11330
  28. package/dist/index.js.map +1 -1
  29. package/dist/index.mjs +30047 -11244
  30. package/dist/index.mjs.map +1 -1
  31. package/dist/installer.d.ts +1 -4
  32. package/dist/ipc/local-ipc-server.d.ts +91 -0
  33. package/dist/launch.d.ts +1 -1
  34. package/dist/logging/async-batch-writer.d.ts +10 -0
  35. package/dist/mesh/contracts.d.ts +164 -0
  36. package/dist/mesh/coordinator-prompt.d.ts +36 -0
  37. package/dist/mesh/coordinator-registry.d.ts +59 -0
  38. package/dist/mesh/mesh-active-work.d.ts +90 -0
  39. package/dist/mesh/mesh-delivery-policy.d.ts +131 -0
  40. package/dist/mesh/mesh-events-coordinator.d.ts +151 -0
  41. package/dist/mesh/mesh-events-pending.d.ts +33 -0
  42. package/dist/mesh/mesh-events-stale.d.ts +40 -0
  43. package/dist/mesh/mesh-events-utils.d.ts +14 -0
  44. package/dist/mesh/mesh-events.d.ts +5 -40
  45. package/dist/mesh/mesh-fast-forward.d.ts +41 -0
  46. package/dist/mesh/mesh-host-ownership.d.ts +9 -0
  47. package/dist/mesh/mesh-ledger-reconciliation.d.ts +23 -3
  48. package/dist/mesh/mesh-ledger.d.ts +77 -1
  49. package/dist/mesh/mesh-missions.d.ts +58 -0
  50. package/dist/mesh/mesh-refine-status.d.ts +26 -0
  51. package/dist/mesh/mesh-review-inbox.d.ts +90 -0
  52. package/dist/mesh/mesh-runtime-store.d.ts +324 -0
  53. package/dist/mesh/mesh-task-stats.d.ts +49 -0
  54. package/dist/mesh/mesh-work-queue.d.ts +137 -6
  55. package/dist/mesh/preview-freshness.d.ts +18 -0
  56. package/dist/mesh/refine-config.d.ts +215 -0
  57. package/dist/mesh/worktree-bootstrap-config.d.ts +135 -0
  58. package/dist/providers/acp-provider-instance.d.ts +2 -0
  59. package/dist/providers/approval-utils.d.ts +13 -0
  60. package/dist/providers/cli-provider-instance.d.ts +39 -3
  61. package/dist/providers/contracts.d.ts +130 -6
  62. package/dist/providers/external-sources.d.ts +71 -0
  63. package/dist/providers/native-history/antigravity-cli-transcript.d.ts +100 -0
  64. package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
  65. package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
  66. package/dist/providers/native-history/dispatcher.d.ts +27 -0
  67. package/dist/providers/native-history/hermes-cli-transcript.d.ts +30 -0
  68. package/dist/providers/native-history/index.d.ts +13 -0
  69. package/dist/providers/provider-instance-manager.d.ts +12 -0
  70. package/dist/providers/provider-instance.d.ts +13 -1
  71. package/dist/providers/provider-loader.d.ts +26 -4
  72. package/dist/providers/provider-trust.d.ts +31 -0
  73. package/dist/providers/read-chat-contract.d.ts +29 -0
  74. package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
  75. package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +85 -0
  76. package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
  77. package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +65 -0
  78. package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
  79. package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
  80. package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
  81. package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
  82. package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
  83. package/dist/providers/sdk/v1/index.d.ts +30 -0
  84. package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
  85. package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
  86. package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
  87. package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
  88. package/dist/providers/sdk/v1/types/common/index.d.ts +203 -0
  89. package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
  90. package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
  91. package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
  92. package/dist/providers/spec/adapter.d.ts +52 -0
  93. package/dist/providers/spec/cli-adapter.d.ts +102 -0
  94. package/dist/providers/spec/evaluator.d.ts +23 -0
  95. package/dist/providers/spec/fsm-driver.d.ts +231 -0
  96. package/dist/providers/spec/fsm-evaluator.d.ts +72 -0
  97. package/dist/providers/spec/fsm-loader.d.ts +14 -0
  98. package/dist/providers/spec/fsm-types.d.ts +91 -0
  99. package/dist/providers/spec/native-history-executor.d.ts +41 -0
  100. package/dist/providers/spec/route.d.ts +4 -0
  101. package/dist/providers/spec/types.d.ts +129 -0
  102. package/dist/providers/transcript-v2.d.ts +176 -0
  103. package/dist/providers/types/interactive-prompt.d.ts +48 -0
  104. package/dist/repo-mesh-types.d.ts +126 -1
  105. package/dist/sessions/registry.d.ts +3 -0
  106. package/dist/shared-types-extra.d.ts +2 -4
  107. package/dist/shared-types.d.ts +42 -1
  108. package/dist/status/normalize.d.ts +1 -1
  109. package/dist/status/normalize.js +1 -0
  110. package/dist/status/normalize.js.map +1 -1
  111. package/dist/status/normalize.mjs +1 -0
  112. package/dist/status/normalize.mjs.map +1 -1
  113. package/dist/status/reporter.d.ts +2 -0
  114. package/dist/status/snapshot.d.ts +1 -0
  115. package/dist/types.d.ts +5 -0
  116. package/package.json +6 -3
  117. package/src/agent-stream/poller.ts +2 -3
  118. package/src/boot/daemon-lifecycle.ts +22 -10
  119. package/src/boot/process-hardening.ts +89 -0
  120. package/src/chat/source-machine.ts +534 -0
  121. package/src/chat/source-resolver.ts +0 -0
  122. package/src/chat/subscription-updates.ts +20 -1
  123. package/src/cli-adapter-types.d.ts +1 -0
  124. package/src/cli-adapter-types.ts +22 -2
  125. package/src/cli-adapters/cli-script-runner.ts +421 -0
  126. package/src/cli-adapters/cli-state-engine.ts +1162 -0
  127. package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
  128. package/src/cli-adapters/provider-cli-adapter.ts +673 -1139
  129. package/src/cli-adapters/provider-cli-parse.d.ts +1 -0
  130. package/src/cli-adapters/provider-cli-parse.ts +13 -0
  131. package/src/cli-adapters/provider-cli-runtime.ts +3 -1
  132. package/src/cli-adapters/provider-cli-shared.d.ts +2 -0
  133. package/src/cli-adapters/provider-cli-shared.ts +59 -11
  134. package/src/cli-adapters/raw-terminal-io.ts +252 -0
  135. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.ts +35 -29
  136. package/src/cli-adapters/terminal-backends/types.ts +1 -3
  137. package/src/cli-adapters/terminal-screen.ts +11 -81
  138. package/src/commands/chat-commands.ts +1787 -60
  139. package/src/commands/cli-manager.ts +283 -14
  140. package/src/commands/handler.ts +809 -2
  141. package/src/commands/mesh-coordinator.ts +332 -122
  142. package/src/commands/router.ts +4369 -558
  143. package/src/config/chat-history.ts +95 -24
  144. package/src/config/config.ts +12 -0
  145. package/src/config/mesh-config.ts +303 -3
  146. package/src/config/recent-activity.ts +8 -2
  147. package/src/daemon/dev-auto-implement.ts +3 -2
  148. package/src/daemon/dev-cli-debug.ts +10 -1
  149. package/src/detection/ide-detector.ts +26 -16
  150. package/src/git/git-commands.ts +42 -12
  151. package/src/git/git-diff.ts +53 -0
  152. package/src/git/git-status.ts +35 -6
  153. package/src/git/git-types.ts +2 -0
  154. package/src/git/git-worktree.ts +8 -1
  155. package/src/index.ts +127 -10
  156. package/src/installer.d.ts +1 -1
  157. package/src/installer.ts +8 -6
  158. package/src/ipc/local-ipc-server.ts +278 -0
  159. package/src/launch.d.ts +1 -1
  160. package/src/launch.ts +37 -28
  161. package/src/logging/async-batch-writer.ts +55 -0
  162. package/src/logging/logger.ts +2 -1
  163. package/src/mesh/contracts.ts +329 -0
  164. package/src/mesh/coordinator-prompt.ts +218 -31
  165. package/src/mesh/coordinator-registry.ts +121 -0
  166. package/src/mesh/mesh-active-work.ts +437 -0
  167. package/src/mesh/mesh-delivery-policy.ts +315 -0
  168. package/src/mesh/mesh-events-coordinator.ts +1447 -0
  169. package/src/mesh/mesh-events-pending.ts +371 -0
  170. package/src/mesh/mesh-events-stale.ts +283 -0
  171. package/src/mesh/mesh-events-utils.ts +166 -0
  172. package/src/mesh/mesh-events.ts +24 -908
  173. package/src/mesh/mesh-fast-forward.ts +438 -0
  174. package/src/mesh/mesh-host-ownership.ts +73 -0
  175. package/src/mesh/mesh-ledger-reconciliation.ts +12 -5
  176. package/src/mesh/mesh-ledger.ts +587 -102
  177. package/src/mesh/mesh-missions.ts +151 -0
  178. package/src/mesh/mesh-refine-status.ts +144 -0
  179. package/src/mesh/mesh-review-inbox.ts +307 -0
  180. package/src/mesh/mesh-runtime-store.ts +1305 -0
  181. package/src/mesh/mesh-task-stats.ts +154 -0
  182. package/src/mesh/mesh-work-queue.ts +490 -166
  183. package/src/mesh/preview-freshness.ts +118 -0
  184. package/src/mesh/refine-config.ts +403 -0
  185. package/src/mesh/worktree-bootstrap-config.ts +326 -0
  186. package/src/providers/acp-provider-instance.ts +15 -1
  187. package/src/providers/approval-utils.d.ts +4 -0
  188. package/src/providers/approval-utils.ts +47 -5
  189. package/src/providers/chat-message-normalization.ts +4 -11
  190. package/src/providers/cli-provider-instance.ts +834 -64
  191. package/src/providers/contracts.d.ts +55 -0
  192. package/src/providers/contracts.ts +141 -6
  193. package/src/providers/external-sources.ts +218 -0
  194. package/src/providers/ide-provider-instance.ts +19 -5
  195. package/src/providers/native-history/antigravity-cli-transcript.ts +643 -0
  196. package/src/providers/native-history/claude-cli-transcript.ts +396 -0
  197. package/src/providers/native-history/codex-cli-transcript.ts +479 -0
  198. package/src/providers/native-history/dispatcher.ts +340 -0
  199. package/src/providers/native-history/hermes-cli-transcript.ts +230 -0
  200. package/src/providers/native-history/index.ts +30 -0
  201. package/src/providers/provider-instance-manager.ts +30 -0
  202. package/src/providers/provider-instance.ts +10 -1
  203. package/src/providers/provider-loader.ts +584 -50
  204. package/src/providers/provider-schema.ts +87 -14
  205. package/src/providers/provider-trust.ts +114 -0
  206. package/src/providers/read-chat-contract.ts +76 -16
  207. package/src/providers/sdk/README.md +49 -0
  208. package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
  209. package/src/providers/sdk/v1/builders/cli/detect-status.ts +262 -0
  210. package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
  211. package/src/providers/sdk/v1/builders/cli/parse-approval.ts +250 -0
  212. package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
  213. package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
  214. package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
  215. package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
  216. package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
  217. package/src/providers/sdk/v1/index.ts +152 -0
  218. package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
  219. package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
  220. package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
  221. package/src/providers/sdk/v1/schemas/cli/provider.schema.json +504 -0
  222. package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
  223. package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
  224. package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
  225. package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
  226. package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
  227. package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
  228. package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
  229. package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
  230. package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +125 -0
  231. package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
  232. package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
  233. package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
  234. package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
  235. package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
  236. package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
  237. package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
  238. package/src/providers/sdk/v1/types/cli/index.ts +365 -0
  239. package/src/providers/sdk/v1/types/common/index.ts +229 -0
  240. package/src/providers/sdk/v1/validators/index.ts +19 -0
  241. package/src/providers/sdk/v1/validators/manifest.ts +110 -0
  242. package/src/providers/sdk/v1/validators/taint.ts +309 -0
  243. package/src/providers/spec/adapter.ts +138 -0
  244. package/src/providers/spec/cli-adapter.ts +646 -0
  245. package/src/providers/spec/evaluator.ts +321 -0
  246. package/src/providers/spec/fsm-driver.ts +749 -0
  247. package/src/providers/spec/fsm-evaluator.ts +255 -0
  248. package/src/providers/spec/fsm-loader.ts +102 -0
  249. package/src/providers/spec/fsm-types.ts +184 -0
  250. package/src/providers/spec/native-history-executor.ts +939 -0
  251. package/src/providers/spec/route.ts +51 -0
  252. package/src/providers/spec/types.ts +173 -0
  253. package/src/providers/transcript-v2.ts +567 -0
  254. package/src/providers/types/interactive-prompt.ts +425 -0
  255. package/src/providers/version-archive.ts +38 -20
  256. package/src/repo-mesh-types.ts +138 -1
  257. package/src/sessions/registry.ts +3 -0
  258. package/src/shared-types-extra.ts +2 -4
  259. package/src/shared-types.ts +45 -1
  260. package/src/status/builders.ts +24 -6
  261. package/src/status/normalize.ts +2 -0
  262. package/src/status/reporter.ts +15 -0
  263. package/src/status/snapshot.ts +84 -25
  264. package/src/system/host-memory.ts +29 -12
  265. package/src/types.ts +5 -0
  266. package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +0 -17
  267. package/dist/mesh/mesh-sync.d.ts +0 -53
  268. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +0 -16
  269. package/src/cli-adapters/terminal-backends/xterm-backend.ts +0 -97
  270. package/src/mesh/mesh-sync.ts +0 -111
@@ -0,0 +1,231 @@
1
+ import type { PtyTransportFactory } from '../../cli-adapters/pty-transport.js';
2
+ import { type TraceEntry } from './evaluator.js';
3
+ import { type TransitionEval } from './fsm-evaluator.js';
4
+ export type DashboardEvent = {
5
+ kind: 'pty_data';
6
+ chunk: string;
7
+ } | {
8
+ kind: 'state_changed';
9
+ state: {
10
+ id: string;
11
+ label: string;
12
+ title: string | null;
13
+ };
14
+ modal: {
15
+ title: string | null;
16
+ buttons: {
17
+ index: number;
18
+ label: string;
19
+ }[];
20
+ } | null;
21
+ controls: {
22
+ id: string;
23
+ label: string;
24
+ action_type: string;
25
+ }[];
26
+ } | {
27
+ kind: 'notification';
28
+ id: string;
29
+ title: string;
30
+ body: string;
31
+ } | {
32
+ kind: 'delegate';
33
+ id: string;
34
+ task: string;
35
+ } | {
36
+ kind: 'spec_trace';
37
+ entries: TraceEntry[];
38
+ } | {
39
+ kind: 'exit';
40
+ exit_code: number;
41
+ } | {
42
+ kind: 'spec_error';
43
+ errors: string[];
44
+ };
45
+ export type DashboardCommand = {
46
+ kind: 'send_message';
47
+ text: string;
48
+ } | {
49
+ kind: 'pty_write';
50
+ data: string;
51
+ } | {
52
+ kind: 'click_control';
53
+ control_id: string;
54
+ payload?: unknown;
55
+ } | {
56
+ kind: 'click_modal_button';
57
+ index: number;
58
+ } | {
59
+ kind: 'attach_image';
60
+ blob: string;
61
+ mime: string;
62
+ } | {
63
+ kind: 'resize';
64
+ cols: number;
65
+ rows: number;
66
+ } | {
67
+ kind: 'cancel';
68
+ } | {
69
+ kind: 'shutdown';
70
+ };
71
+ export interface DriverHistoryEntry {
72
+ stateId: string;
73
+ label: string;
74
+ at: number;
75
+ durationMs: number;
76
+ reason: string;
77
+ matchedStateId?: string;
78
+ matchedRules?: string[];
79
+ debounceKind?: string;
80
+ idleHoldMs?: number;
81
+ busyHoldMs?: number;
82
+ via?: string;
83
+ }
84
+ export interface ISpecDriver {
85
+ subscribe(listener: (ev: DashboardEvent) => void): () => void;
86
+ start(): void;
87
+ dispatch(cmd: DashboardCommand): void;
88
+ snapshot(): string;
89
+ getCursorPosition(): {
90
+ row: number;
91
+ col: number;
92
+ };
93
+ getScreen(): string;
94
+ getSpecPath(): string;
95
+ shutdown(): void;
96
+ getStateHistory(): ReadonlyArray<DriverHistoryEntry>;
97
+ getSections(): Array<{
98
+ id: string;
99
+ text: string;
100
+ }> | null;
101
+ getLastBusyAt(): number;
102
+ hasIdleHoldPending(): boolean;
103
+ getCompletionIdleDebounceState(): {
104
+ active: boolean;
105
+ ageMs: number;
106
+ holdMs: number;
107
+ forceAfterMs: number;
108
+ } | null;
109
+ getFsmDebug?(): unknown;
110
+ }
111
+ export interface SpecDriverOpts {
112
+ specPath: string;
113
+ workingDir: string;
114
+ extraEnv?: Record<string, string>;
115
+ cols?: number;
116
+ rows?: number;
117
+ hotReload?: boolean;
118
+ emitTrace?: boolean;
119
+ transportFactory?: PtyTransportFactory;
120
+ extraCliArgs?: string[];
121
+ }
122
+ export declare function resolveSubmitDelayMs(specBeforeSubmit: number | undefined, text: string): number;
123
+ export declare function guessExt(mime: string): string;
124
+ type HistoryEntry = DriverHistoryEntry;
125
+ export declare class FsmDriver implements ISpecDriver {
126
+ private readonly opts;
127
+ private spec;
128
+ private adapter;
129
+ private listeners;
130
+ private currentStateId;
131
+ private stateEnteredAt;
132
+ private startedAtMs;
133
+ private prevScreenLines;
134
+ /** Per cursor_above region (key: cursor_above, -1 = whole screen) → last
135
+ * time that region's content changed. Drives stable_ms conditions. */
136
+ private regionLastChangedAt;
137
+ /** Timer that re-runs evaluate() when a time-condition would flip true
138
+ * with no PTY frame to trigger it. */
139
+ private wakeTimer;
140
+ private currentEval;
141
+ private stateHistory;
142
+ private prevStateAt;
143
+ private readySeenOnce;
144
+ private pendingSends;
145
+ private pickerInProgress;
146
+ private delegateTimers;
147
+ private specWatcher;
148
+ /** Last full FSM evaluation, kept for the debugger. */
149
+ private lastFsmEval;
150
+ constructor(opts: SpecDriverOpts);
151
+ subscribe(listener: (ev: DashboardEvent) => void): () => void;
152
+ start(): void;
153
+ dispatch(cmd: DashboardCommand): void;
154
+ snapshot(): string;
155
+ getCursorPosition(): {
156
+ row: number;
157
+ col: number;
158
+ };
159
+ getScreen(): string;
160
+ getSpecPath(): string;
161
+ shutdown(): void;
162
+ getFsmDebug(): {
163
+ currentState: string;
164
+ label: string;
165
+ stateAgeMs: number;
166
+ status: string;
167
+ cursor: {
168
+ row: number;
169
+ col: number;
170
+ };
171
+ transitions: TransitionEval[];
172
+ };
173
+ getStateHistory(): ReadonlyArray<HistoryEntry>;
174
+ getSections(): Array<{
175
+ id: string;
176
+ text: string;
177
+ }> | null;
178
+ /** v3-compat shims so the cli-adapter's existing debug snapshot keeps
179
+ * working without branching on driver type. */
180
+ getLastBusyAt(): number;
181
+ hasIdleHoldPending(): boolean;
182
+ getCompletionIdleDebounceState(): {
183
+ active: boolean;
184
+ ageMs: number;
185
+ holdMs: number;
186
+ forceAfterMs: number;
187
+ } | null;
188
+ private loadSpecOrThrow;
189
+ private buildAdapterOpts;
190
+ private armSpecWatcher;
191
+ private emitInitialState;
192
+ private buildClock;
193
+ private evalFsmNow;
194
+ private reevaluate;
195
+ private commitTransition;
196
+ /** Re-derive the visible modal + controls for the current state and emit a
197
+ * state_changed if anything differs from the last emit. */
198
+ private emitStateChanged;
199
+ private deriveModal;
200
+ private deriveTitle;
201
+ private deriveControls;
202
+ /** Track which cursor_above regions changed since the previous frame so
203
+ * stable_ms conditions can measure quiet time. We record every region
204
+ * size referenced by a stable_ms condition in the spec, plus the whole
205
+ * screen (-1). */
206
+ private trackRegionChanges;
207
+ /** All cursor_above region sizes referenced by stable_ms conditions in the
208
+ * current state's outgoing transitions, plus whole-screen. Cached lazily
209
+ * per spec load would be nicer but the set is tiny. */
210
+ private stableRegionSizes;
211
+ /** Schedule a re-evaluation for the soonest pending time-condition on any
212
+ * outgoing transition (elapsed_ms / stable_ms / min_hold_ms). Without
213
+ * this, a state whose only exit is time-based would never leave once the
214
+ * PTY goes quiet. */
215
+ private scheduleWakeForState;
216
+ private maybeMarkReady;
217
+ private fireNotifications;
218
+ private armOrCancelDelegateTimers;
219
+ private fireDelegate;
220
+ private handleSendMessage;
221
+ private actuallySendMessage;
222
+ private handleClickControl;
223
+ private handleClickModalButton;
224
+ private handleAttachImage;
225
+ private tryAdvancePicker;
226
+ private handleExit;
227
+ private pushHistory;
228
+ private specTag;
229
+ private emit;
230
+ }
231
+ export {};
@@ -0,0 +1,72 @@
1
+ import type { SectionDef } from './types.js';
2
+ import { type ResolvedSection, type TraceEntry } from './evaluator.js';
3
+ import { type CliSpecV4, type FsmCondition } from './fsm-types.js';
4
+ export interface FsmClock {
5
+ /** Wall-clock now (ms). Passed in so the evaluator stays pure. */
6
+ now: number;
7
+ /** When the current state was entered (ms). */
8
+ stateEnteredAt: number;
9
+ /** Last-changed timestamp per cursor_above region. Key = cursor_above
10
+ * value (0 / undefined → whole-screen, keyed as -1). Missing key means
11
+ * "never observed changing" → treated as stable since stateEnteredAt. */
12
+ regionLastChangedAt: Map<number, number>;
13
+ }
14
+ /** Per-condition evaluation detail — the debugging payload. */
15
+ export interface CondResult {
16
+ kind: 'regex' | 'changed' | 'elapsed' | 'stable' | 'all' | 'any' | 'not';
17
+ result: boolean;
18
+ detail: string;
19
+ /** Remaining ms until a time-based condition would flip to true. 0 if
20
+ * already true or not applicable. Lets the UI show a countdown. */
21
+ remainingMs?: number;
22
+ children?: CondResult[];
23
+ }
24
+ /** One evaluated transition with its full reasoning. */
25
+ export interface TransitionEval {
26
+ to: string;
27
+ label: string;
28
+ /** Did the `from` clause include the current state? (Always true for the
29
+ * transitions we return — kept for completeness.) */
30
+ eligible: boolean;
31
+ /** min_hold_ms guard satisfied? */
32
+ holdSatisfied: boolean;
33
+ holdRemainingMs: number;
34
+ /** Guard condition result (true if no `when`). */
35
+ condResult: boolean;
36
+ cond?: CondResult;
37
+ /** Overall: would this transition fire? */
38
+ fires: boolean;
39
+ priority: number;
40
+ }
41
+ export interface FsmEvaluation {
42
+ /** Sections resolved from the screen (shared with v3 shape). */
43
+ sections: ResolvedSection[];
44
+ /** Every outgoing transition from the current state, priority-ordered,
45
+ * each annotated with why it fired or didn't. */
46
+ transitions: TransitionEval[];
47
+ /** The transition that fires (first in priority order with fires===true),
48
+ * or null to stay in the current state. */
49
+ fired: TransitionEval | null;
50
+ /** v3-compatible trace lines for the legacy inspector. */
51
+ trace: TraceEntry[];
52
+ }
53
+ /**
54
+ * Evaluate the FSM: given the current state id and screen, return every
55
+ * outgoing transition annotated with why it fires/doesn't, plus the one that
56
+ * fires (if any).
57
+ */
58
+ export declare function evaluateFsm(spec: CliSpecV4, currentStateId: string, screenText: string, cursor: {
59
+ row: number;
60
+ col: number;
61
+ } | undefined, prevLines: string[] | undefined, clock: FsmClock): FsmEvaluation;
62
+ /**
63
+ * Evaluate a single condition against a screen + section map — for the spec
64
+ * editor's live preview ("does this regex match the current screen right
65
+ * now?"). Time leaves (elapsed_ms/stable_ms) are evaluated against a synthetic
66
+ * clock where the state was just entered, so they report their countdown
67
+ * rather than firing; the preview is about screen-content match, not timing.
68
+ */
69
+ export declare function evaluateConditionPreview(cond: FsmCondition, sections: Record<string, SectionDef> | undefined, screenText: string, cursor?: {
70
+ row: number;
71
+ col: number;
72
+ }): CondResult;
@@ -0,0 +1,14 @@
1
+ import { type CliSpecV4 } from './fsm-types.js';
2
+ export interface FsmLoadOk {
3
+ ok: true;
4
+ spec: CliSpecV4;
5
+ sourcePath: string;
6
+ }
7
+ export interface FsmLoadErr {
8
+ ok: false;
9
+ errors: string[];
10
+ sourcePath: string;
11
+ }
12
+ export declare function loadFsmSpec(sourcePath: string): FsmLoadOk | FsmLoadErr;
13
+ /** Pure validator — usable from a "validate before save" API in the panel. */
14
+ export declare function validateFsmSpec(raw: unknown): string[];
@@ -0,0 +1,91 @@
1
+ import type { RegexCondition, ChangedCondition, Control, NotificationRule, DelegateTrigger, NativeHistoryConfig, SectionDef, ExtractTitle, ExtractButtons } from './types.js';
2
+ /** True once `ms` have elapsed since the current state was entered. */
3
+ export interface ElapsedCondition {
4
+ elapsed_ms: number;
5
+ }
6
+ /** True once the region `cursor_above` lines above the cursor has been
7
+ * unchanged for `ms`. A stability gate — the inverse of a busy signal. */
8
+ export interface StableCondition {
9
+ stable_ms: number;
10
+ /** Lines above the cursor that must be stable. Default: whole screen. */
11
+ cursor_above?: number;
12
+ }
13
+ export interface FsmAllCondition {
14
+ all: FsmCondition[];
15
+ }
16
+ export interface FsmAnyCondition {
17
+ any: FsmCondition[];
18
+ }
19
+ /** Negation — true when the inner condition is false. Lets a transition say
20
+ * "go busy unless the completion marker is present", etc. */
21
+ export interface FsmNotCondition {
22
+ not: FsmCondition;
23
+ }
24
+ export type FsmCondition = RegexCondition | ChangedCondition | ElapsedCondition | StableCondition | FsmAllCondition | FsmAnyCondition | FsmNotCondition;
25
+ export interface FsmState {
26
+ id: string;
27
+ label: string;
28
+ /** Exactly one state must be `initial: true` — the state at spawn. */
29
+ initial?: boolean;
30
+ /** Modal states (approval/picker) expose modal buttons in the UI and are
31
+ * treated as "interesting" — the dashboard surfaces them distinctly. */
32
+ modal?: boolean;
33
+ /** Status this state maps to for the dashboard/cli-adapter status field.
34
+ * One of: idle | generating | approval. Defaults: modal→approval,
35
+ * initial→idle, id==='busy'→generating, else idle. Explicit wins. */
36
+ status?: 'idle' | 'generating' | 'approval';
37
+ /** Optional extraction run whenever this state is the committed state —
38
+ * used by modal states to surface a title + buttons. */
39
+ extract?: {
40
+ title?: ExtractTitle;
41
+ buttons?: ExtractButtons;
42
+ };
43
+ }
44
+ export interface FsmTransition {
45
+ /** Source state id, or list of source ids, or "*" for any state. */
46
+ from: string | string[];
47
+ /** Destination state id. */
48
+ to: string;
49
+ /** Guard condition. Omitted → always eligible (only gated by `from` +
50
+ * min_hold_ms). Evaluated against the current screen + clock. */
51
+ when?: FsmCondition;
52
+ /** Minimum time the machine must have been in `from` before this edge can
53
+ * fire. Replaces busy_hold_ms / idle_hold_ms (per-edge, not global). */
54
+ min_hold_ms?: number;
55
+ /** Higher priority transitions are evaluated first. Default 0. Ties broken
56
+ * by declaration order. */
57
+ priority?: number;
58
+ /** Human label for the debugger. */
59
+ label?: string;
60
+ }
61
+ export interface CliSpecV4 {
62
+ $schema: 'adhdev:cli/spec@4';
63
+ id: string;
64
+ name: string;
65
+ binary: string;
66
+ spawn_args?: string[];
67
+ env?: Record<string, string>;
68
+ cli_version_range?: string;
69
+ send_message: {
70
+ submit_key: string;
71
+ delay_ms_before_submit?: number;
72
+ delay_ms_per_char?: number;
73
+ };
74
+ sections: Record<string, SectionDef>;
75
+ states: FsmState[];
76
+ transitions: FsmTransition[];
77
+ control_bar?: Control[];
78
+ notifications?: NotificationRule[];
79
+ delegate?: DelegateTrigger[];
80
+ native_history?: NativeHistoryConfig;
81
+ requiresFinalAssistantBeforeIdle?: boolean;
82
+ }
83
+ export declare function isV4Spec(raw: unknown): raw is CliSpecV4;
84
+ export declare function initialState(spec: CliSpecV4): FsmState;
85
+ export declare function stateById(spec: CliSpecV4, id: string): FsmState | undefined;
86
+ /** Outgoing transitions from `stateId`, highest priority first, declaration
87
+ * order as tiebreak. Includes wildcard ("*") and list-membership sources. */
88
+ export declare function outgoingTransitions(spec: CliSpecV4, stateId: string): FsmTransition[];
89
+ /** Map a state to the dashboard status string, applying the documented
90
+ * defaults when `status` is not explicit. */
91
+ export declare function statusForState(state: FsmState): 'idle' | 'generating' | 'approval';
@@ -0,0 +1,41 @@
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
+ workspace?: string;
32
+ }
33
+ export interface NativeHistoryResult {
34
+ messages: NativeHistoryMessage[];
35
+ providerSessionId?: string;
36
+ sourcePath: string;
37
+ sourceMtimeMs: number;
38
+ nativeHistoryCoverage?: 'full' | 'partial' | 'best-effort';
39
+ workspace?: string;
40
+ }
41
+ 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;
@@ -0,0 +1,129 @@
1
+ export type Size = number | string;
2
+ export interface SectionPattern {
3
+ section?: string;
4
+ pattern: string;
5
+ flags?: string;
6
+ }
7
+ /** Inline wait_for shape used by open_picker control actions. */
8
+ export interface WaitForCondition {
9
+ section?: string;
10
+ regex?: string;
11
+ flags?: string;
12
+ }
13
+ export type ControlAction = {
14
+ type: 'send_keys';
15
+ keys: string;
16
+ } | {
17
+ type: 'open_picker';
18
+ trigger_keys: string;
19
+ wait_for: WaitForCondition;
20
+ extract_choices: SectionPattern;
21
+ submit_key: string;
22
+ } | {
23
+ type: 'attach_image';
24
+ method: 'tempfile_then_keys';
25
+ keys_template: string;
26
+ };
27
+ export interface Control {
28
+ id: string;
29
+ label: string;
30
+ visible_when_state?: string[];
31
+ action: ControlAction;
32
+ }
33
+ export interface NotificationRule {
34
+ id: string;
35
+ when_state: string;
36
+ title: string;
37
+ body?: string;
38
+ }
39
+ export interface DelegateTrigger {
40
+ id: string;
41
+ when_state: string;
42
+ after_duration_ms?: number;
43
+ task_template: string;
44
+ }
45
+ export interface NativeHistoryConfig {
46
+ reader?: 'claude-cli' | 'codex-cli' | 'antigravity-cli' | 'hermes-cli';
47
+ source?: NativeHistorySource;
48
+ override_path?: string;
49
+ }
50
+ export type NativeHistorySource = NativeHistoryJsonlSource | NativeHistorySqliteSource;
51
+ export interface NativeHistoryJsonlSource {
52
+ kind: 'jsonl';
53
+ path: string;
54
+ file_pattern?: string;
55
+ recent_window_ms?: number;
56
+ session_id_from?: 'filename_uuid' | 'first_record';
57
+ session_id_path?: string;
58
+ message_filter?: {
59
+ where: string;
60
+ };
61
+ message_map: NativeHistoryMessageMap;
62
+ }
63
+ export interface NativeHistorySqliteSource {
64
+ kind: 'sqlite';
65
+ path: string;
66
+ session_query: string;
67
+ message_query: string;
68
+ message_map: NativeHistoryMessageMap;
69
+ }
70
+ export interface NativeHistoryMessageMap {
71
+ role: string;
72
+ content: string;
73
+ content_strip?: string[];
74
+ content_unwrap?: string[];
75
+ timestamp_ms?: string;
76
+ kind?: string;
77
+ }
78
+ export interface SectionDef {
79
+ from_top?: Size;
80
+ from_bottom?: Size;
81
+ until?: string;
82
+ anchor?: string;
83
+ anchor_flags?: string;
84
+ anchor_last?: boolean;
85
+ anchor_context?: {
86
+ prev?: string;
87
+ next?: string;
88
+ prev_flags?: string;
89
+ next_flags?: string;
90
+ };
91
+ lines?: number;
92
+ until_regex?: string;
93
+ until_regex_flags?: string;
94
+ }
95
+ export interface RegexCondition {
96
+ section?: string;
97
+ matches: string;
98
+ flags?: string;
99
+ cursor_row_min?: number;
100
+ cursor_row_max?: number;
101
+ cursor_col_min?: number;
102
+ cursor_col_max?: number;
103
+ }
104
+ export interface ChangedCondition {
105
+ cursor_above: number;
106
+ changed: boolean;
107
+ stable_ms?: number;
108
+ }
109
+ export interface AllCondition {
110
+ all: Condition[];
111
+ }
112
+ export interface AnyCondition {
113
+ any: Condition[];
114
+ }
115
+ export type Condition = RegexCondition | ChangedCondition | AllCondition | AnyCondition;
116
+ export interface ExtractTitle {
117
+ section?: string;
118
+ regex?: string;
119
+ flags?: string;
120
+ first_line?: true;
121
+ }
122
+ export interface ExtractButtons {
123
+ section?: string;
124
+ pattern: string;
125
+ flags?: string;
126
+ key_for_index: string;
127
+ min_count?: number;
128
+ continuation_lines?: boolean;
129
+ }