@adhdev/daemon-core 0.9.82-rc.34 → 0.9.82-rc.341

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 (318) hide show
  1. package/dist/boot/daemon-lifecycle.d.ts +8 -0
  2. package/dist/boot/process-hardening.d.ts +50 -0
  3. package/dist/build-info.d.ts +37 -0
  4. package/dist/chat/source-machine.d.ts +166 -0
  5. package/dist/chat/source-resolver.d.ts +104 -0
  6. package/dist/chat/subscription-updates.d.ts +1 -0
  7. package/dist/cli-adapter-types.d.ts +46 -2
  8. package/dist/cli-adapters/cli-script-runner.d.ts +117 -0
  9. package/dist/cli-adapters/cli-state-engine.d.ts +198 -0
  10. package/dist/cli-adapters/provider-cli-adapter.d.ts +116 -64
  11. package/dist/cli-adapters/provider-cli-parse.d.ts +4 -0
  12. package/dist/cli-adapters/provider-cli-runtime.d.ts +34 -0
  13. package/dist/cli-adapters/provider-cli-shared.d.ts +53 -0
  14. package/dist/cli-adapters/raw-terminal-io.d.ts +37 -0
  15. package/dist/cli-adapters/resolve-executable.d.ts +14 -0
  16. package/dist/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +6 -3
  17. package/dist/cli-adapters/terminal-backends/types.d.ts +10 -2
  18. package/dist/cli-adapters/terminal-screen.d.ts +4 -11
  19. package/dist/commands/cli-manager.d.ts +2 -1
  20. package/dist/commands/handler.d.ts +110 -0
  21. package/dist/commands/mesh-coordinator.d.ts +85 -1
  22. package/dist/commands/router.d.ts +308 -1
  23. package/dist/commands/upgrade-helper.d.ts +12 -0
  24. package/dist/config/chat-history.d.ts +9 -0
  25. package/dist/config/config.d.ts +5 -0
  26. package/dist/config/mesh-config.d.ts +77 -1
  27. package/dist/detection/ide-detector.d.ts +13 -0
  28. package/dist/detection/win32-ide-version.d.ts +37 -0
  29. package/dist/git/change-impact-config.d.ts +159 -0
  30. package/dist/git/git-commands.d.ts +11 -1
  31. package/dist/git/git-diff.d.ts +6 -0
  32. package/dist/git/git-executor.d.ts +11 -0
  33. package/dist/git/git-status.d.ts +23 -0
  34. package/dist/git/git-types.d.ts +2 -50
  35. package/dist/git/index.d.ts +2 -0
  36. package/dist/index.d.ts +52 -13
  37. package/dist/index.js +42012 -17098
  38. package/dist/index.js.map +1 -1
  39. package/dist/index.mjs +41683 -16890
  40. package/dist/index.mjs.map +1 -1
  41. package/dist/installer.d.ts +1 -4
  42. package/dist/ipc/local-ipc-server.d.ts +91 -0
  43. package/dist/launch.d.ts +1 -1
  44. package/dist/logging/async-batch-writer.d.ts +10 -0
  45. package/dist/logging/log-redactor.d.ts +24 -0
  46. package/dist/logging/log-tail-reader.d.ts +46 -0
  47. package/dist/mesh/contracts.d.ts +164 -0
  48. package/dist/mesh/coordinator-prompt.d.ts +36 -0
  49. package/dist/mesh/coordinator-registry.d.ts +59 -0
  50. package/dist/mesh/mesh-active-work.d.ts +174 -0
  51. package/dist/mesh/mesh-delivery-policy.d.ts +131 -0
  52. package/dist/mesh/mesh-events-coordinator.d.ts +169 -0
  53. package/dist/mesh/mesh-events-pending.d.ts +45 -0
  54. package/dist/mesh/mesh-events-stale.d.ts +40 -0
  55. package/dist/mesh/mesh-events-utils.d.ts +66 -0
  56. package/dist/mesh/mesh-events.d.ts +6 -49
  57. package/dist/mesh/mesh-fast-forward.d.ts +81 -0
  58. package/dist/mesh/mesh-host-ownership.d.ts +9 -0
  59. package/dist/mesh/mesh-init.d.ts +86 -0
  60. package/dist/mesh/mesh-ledger-reconciliation.d.ts +23 -3
  61. package/dist/mesh/mesh-ledger.d.ts +77 -1
  62. package/dist/mesh/mesh-missions.d.ts +116 -0
  63. package/dist/mesh/mesh-reconcile-loop.d.ts +7 -0
  64. package/dist/mesh/mesh-refine-batch.d.ts +68 -0
  65. package/dist/mesh/mesh-refine-status.d.ts +62 -0
  66. package/dist/mesh/mesh-review-inbox.d.ts +90 -0
  67. package/dist/mesh/mesh-routing.d.ts +70 -0
  68. package/dist/mesh/mesh-runtime-store.d.ts +418 -0
  69. package/dist/mesh/mesh-task-stats.d.ts +49 -0
  70. package/dist/mesh/mesh-unresolved-forward-outbox.d.ts +30 -0
  71. package/dist/mesh/mesh-work-queue.d.ts +208 -5
  72. package/dist/mesh/preview-freshness.d.ts +18 -0
  73. package/dist/mesh/refine-config.d.ts +216 -0
  74. package/dist/mesh/worktree-bootstrap-config.d.ts +135 -0
  75. package/dist/providers/acp-provider-instance.d.ts +2 -0
  76. package/dist/providers/approval-utils.d.ts +13 -0
  77. package/dist/providers/chat-message-normalization.d.ts +12 -0
  78. package/dist/providers/cli-provider-instance.d.ts +76 -3
  79. package/dist/providers/contracts.d.ts +139 -6
  80. package/dist/providers/external-sources.d.ts +71 -0
  81. package/dist/providers/native-history/antigravity-cli-transcript.d.ts +100 -0
  82. package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
  83. package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
  84. package/dist/providers/native-history/dispatcher.d.ts +27 -0
  85. package/dist/providers/native-history/hermes-cli-transcript.d.ts +30 -0
  86. package/dist/providers/native-history/index.d.ts +13 -0
  87. package/dist/providers/provider-instance-manager.d.ts +13 -0
  88. package/dist/providers/provider-instance.d.ts +13 -1
  89. package/dist/providers/provider-loader.d.ts +26 -4
  90. package/dist/providers/provider-trust.d.ts +31 -0
  91. package/dist/providers/read-chat-contract.d.ts +29 -0
  92. package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
  93. package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +85 -0
  94. package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
  95. package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +65 -0
  96. package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
  97. package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
  98. package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
  99. package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
  100. package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
  101. package/dist/providers/sdk/v1/index.d.ts +30 -0
  102. package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
  103. package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
  104. package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
  105. package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
  106. package/dist/providers/sdk/v1/types/common/index.d.ts +203 -0
  107. package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
  108. package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
  109. package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
  110. package/dist/providers/spec/adapter.d.ts +69 -0
  111. package/dist/providers/spec/cli-adapter.d.ts +217 -0
  112. package/dist/providers/spec/evaluator.d.ts +23 -0
  113. package/dist/providers/spec/fsm-driver.d.ts +306 -0
  114. package/dist/providers/spec/fsm-evaluator.d.ts +72 -0
  115. package/dist/providers/spec/fsm-loader.d.ts +14 -0
  116. package/dist/providers/spec/fsm-types.d.ts +144 -0
  117. package/dist/providers/spec/native-history-executor.d.ts +41 -0
  118. package/dist/providers/spec/pre-launch-trust.d.ts +16 -0
  119. package/dist/providers/spec/route.d.ts +4 -0
  120. package/dist/providers/spec/types.d.ts +180 -0
  121. package/dist/providers/status-monitor.d.ts +7 -7
  122. package/dist/providers/transcript-v2.d.ts +176 -0
  123. package/dist/providers/types/interactive-prompt.d.ts +84 -0
  124. package/dist/providers/working-dir.d.ts +17 -0
  125. package/dist/repo-mesh-types.d.ts +295 -13
  126. package/dist/sessions/registry.d.ts +6 -0
  127. package/dist/shared-types-extra.d.ts +2 -4
  128. package/dist/shared-types.d.ts +59 -2
  129. package/dist/status/normalize.d.ts +1 -1
  130. package/dist/status/normalize.js +1 -0
  131. package/dist/status/normalize.js.map +1 -1
  132. package/dist/status/normalize.mjs +1 -0
  133. package/dist/status/normalize.mjs.map +1 -1
  134. package/dist/status/reporter.d.ts +2 -0
  135. package/dist/status/snapshot.d.ts +26 -0
  136. package/dist/system/load-better-sqlite3.d.ts +21 -0
  137. package/dist/types.d.ts +5 -0
  138. package/package.json +7 -3
  139. package/src/agent-stream/poller.ts +2 -3
  140. package/src/agent-stream/provider-adapter.ts +1 -1
  141. package/src/boot/daemon-lifecycle.ts +55 -12
  142. package/src/boot/process-hardening.ts +89 -0
  143. package/src/build-info.ts +73 -0
  144. package/src/chat/source-machine.ts +534 -0
  145. package/src/chat/source-resolver.ts +0 -0
  146. package/src/chat/subscription-updates.ts +20 -1
  147. package/src/cli-adapter-types.d.ts +1 -0
  148. package/src/cli-adapter-types.ts +47 -2
  149. package/src/cli-adapters/cli-script-runner.ts +421 -0
  150. package/src/cli-adapters/cli-state-engine.ts +1215 -0
  151. package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
  152. package/src/cli-adapters/provider-cli-adapter.ts +774 -1141
  153. package/src/cli-adapters/provider-cli-parse.d.ts +1 -0
  154. package/src/cli-adapters/provider-cli-parse.ts +13 -0
  155. package/src/cli-adapters/provider-cli-runtime.ts +56 -7
  156. package/src/cli-adapters/provider-cli-shared.d.ts +4 -0
  157. package/src/cli-adapters/provider-cli-shared.ts +100 -11
  158. package/src/cli-adapters/pty-transport.ts +2 -1
  159. package/src/cli-adapters/raw-terminal-io.ts +252 -0
  160. package/src/cli-adapters/resolve-executable.ts +90 -0
  161. package/src/cli-adapters/session-host-transport.ts +2 -1
  162. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.ts +53 -29
  163. package/src/cli-adapters/terminal-backends/types.ts +10 -3
  164. package/src/cli-adapters/terminal-screen.ts +16 -81
  165. package/src/commands/chat-commands.ts +1823 -62
  166. package/src/commands/cli-manager.ts +286 -14
  167. package/src/commands/handler.ts +809 -2
  168. package/src/commands/mesh-coordinator.ts +332 -122
  169. package/src/commands/router.ts +7433 -1317
  170. package/src/commands/stream-commands.ts +8 -0
  171. package/src/commands/upgrade-helper.ts +81 -30
  172. package/src/config/chat-history.ts +483 -24
  173. package/src/config/config.ts +12 -0
  174. package/src/config/mesh-config.ts +388 -6
  175. package/src/config/recent-activity.ts +8 -2
  176. package/src/daemon/dev-auto-implement.ts +3 -2
  177. package/src/daemon/dev-cli-debug.ts +10 -1
  178. package/src/detection/cli-detector.ts +28 -9
  179. package/src/detection/ide-detector.ts +55 -16
  180. package/src/detection/win32-ide-version.ts +106 -0
  181. package/src/git/change-impact-config.ts +354 -0
  182. package/src/git/git-commands.ts +55 -14
  183. package/src/git/git-diff.ts +53 -0
  184. package/src/git/git-executor.ts +12 -0
  185. package/src/git/git-status.ts +574 -43
  186. package/src/git/git-types.ts +14 -62
  187. package/src/git/git-worktree.ts +8 -1
  188. package/src/git/index.ts +16 -0
  189. package/src/index.ts +146 -12
  190. package/src/installer.d.ts +1 -1
  191. package/src/installer.ts +8 -6
  192. package/src/ipc/local-ipc-server.ts +278 -0
  193. package/src/launch.d.ts +1 -1
  194. package/src/launch.ts +37 -28
  195. package/src/logging/async-batch-writer.ts +55 -0
  196. package/src/logging/log-redactor.ts +100 -0
  197. package/src/logging/log-tail-reader.ts +220 -0
  198. package/src/logging/logger.ts +2 -1
  199. package/src/mesh/contracts.ts +329 -0
  200. package/src/mesh/coordinator-prompt.ts +234 -31
  201. package/src/mesh/coordinator-registry.ts +121 -0
  202. package/src/mesh/mesh-active-work.ts +623 -0
  203. package/src/mesh/mesh-delivery-policy.ts +315 -0
  204. package/src/mesh/mesh-events-coordinator.ts +2144 -0
  205. package/src/mesh/mesh-events-pending.ts +508 -0
  206. package/src/mesh/mesh-events-stale.ts +290 -0
  207. package/src/mesh/mesh-events-utils.ts +300 -0
  208. package/src/mesh/mesh-events.ts +30 -1035
  209. package/src/mesh/mesh-fast-forward.ts +839 -0
  210. package/src/mesh/mesh-host-ownership.ts +73 -0
  211. package/src/mesh/mesh-init.ts +260 -0
  212. package/src/mesh/mesh-ledger-reconciliation.ts +12 -5
  213. package/src/mesh/mesh-ledger.ts +589 -102
  214. package/src/mesh/mesh-missions.ts +248 -0
  215. package/src/mesh/mesh-reconcile-loop.ts +822 -0
  216. package/src/mesh/mesh-refine-batch.ts +197 -0
  217. package/src/mesh/mesh-refine-status.ts +231 -0
  218. package/src/mesh/mesh-review-inbox.ts +307 -0
  219. package/src/mesh/mesh-routing.ts +291 -0
  220. package/src/mesh/mesh-runtime-store.ts +1626 -0
  221. package/src/mesh/mesh-task-stats.ts +154 -0
  222. package/src/mesh/mesh-unresolved-forward-outbox.ts +185 -0
  223. package/src/mesh/mesh-work-queue.ts +888 -141
  224. package/src/mesh/preview-freshness.ts +118 -0
  225. package/src/mesh/refine-config.ts +423 -0
  226. package/src/mesh/worktree-bootstrap-config.ts +331 -0
  227. package/src/providers/acp-provider-instance.ts +25 -9
  228. package/src/providers/approval-utils.d.ts +4 -0
  229. package/src/providers/approval-utils.ts +47 -5
  230. package/src/providers/chat-message-normalization.ts +45 -5
  231. package/src/providers/cli-provider-instance.ts +1038 -99
  232. package/src/providers/contracts.d.ts +55 -0
  233. package/src/providers/contracts.ts +150 -6
  234. package/src/providers/extension-provider-instance.ts +12 -7
  235. package/src/providers/external-sources.ts +218 -0
  236. package/src/providers/ide-provider-instance.ts +35 -12
  237. package/src/providers/native-history/antigravity-cli-transcript.ts +643 -0
  238. package/src/providers/native-history/claude-cli-transcript.ts +396 -0
  239. package/src/providers/native-history/codex-cli-transcript.ts +479 -0
  240. package/src/providers/native-history/dispatcher.ts +340 -0
  241. package/src/providers/native-history/hermes-cli-transcript.ts +230 -0
  242. package/src/providers/native-history/index.ts +30 -0
  243. package/src/providers/provider-instance-manager.ts +30 -0
  244. package/src/providers/provider-instance.ts +10 -1
  245. package/src/providers/provider-loader.ts +670 -50
  246. package/src/providers/provider-schema.ts +87 -14
  247. package/src/providers/provider-trust.ts +114 -0
  248. package/src/providers/read-chat-contract.ts +76 -16
  249. package/src/providers/sdk/README.md +49 -0
  250. package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
  251. package/src/providers/sdk/v1/builders/cli/detect-status.ts +262 -0
  252. package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
  253. package/src/providers/sdk/v1/builders/cli/parse-approval.ts +250 -0
  254. package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
  255. package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
  256. package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
  257. package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
  258. package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
  259. package/src/providers/sdk/v1/index.ts +152 -0
  260. package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
  261. package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
  262. package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
  263. package/src/providers/sdk/v1/schemas/cli/provider.schema.json +504 -0
  264. package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
  265. package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
  266. package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
  267. package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
  268. package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
  269. package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
  270. package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
  271. package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
  272. package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +125 -0
  273. package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
  274. package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
  275. package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
  276. package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
  277. package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
  278. package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
  279. package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
  280. package/src/providers/sdk/v1/types/cli/index.ts +365 -0
  281. package/src/providers/sdk/v1/types/common/index.ts +229 -0
  282. package/src/providers/sdk/v1/validators/index.ts +19 -0
  283. package/src/providers/sdk/v1/validators/manifest.ts +110 -0
  284. package/src/providers/sdk/v1/validators/taint.ts +309 -0
  285. package/src/providers/spec/adapter.ts +168 -0
  286. package/src/providers/spec/cli-adapter.ts +986 -0
  287. package/src/providers/spec/evaluator.ts +345 -0
  288. package/src/providers/spec/fsm-driver.ts +1015 -0
  289. package/src/providers/spec/fsm-evaluator.ts +255 -0
  290. package/src/providers/spec/fsm-loader.ts +120 -0
  291. package/src/providers/spec/fsm-types.ts +238 -0
  292. package/src/providers/spec/native-history-executor.ts +1136 -0
  293. package/src/providers/spec/pre-launch-trust.ts +104 -0
  294. package/src/providers/spec/route.ts +51 -0
  295. package/src/providers/spec/types.ts +226 -0
  296. package/src/providers/status-monitor.d.ts +7 -7
  297. package/src/providers/status-monitor.ts +37 -22
  298. package/src/providers/transcript-v2.ts +567 -0
  299. package/src/providers/types/interactive-prompt.ts +536 -0
  300. package/src/providers/version-archive.ts +64 -24
  301. package/src/providers/working-dir.ts +23 -0
  302. package/src/repo-mesh-types.ts +378 -14
  303. package/src/sessions/registry.ts +6 -0
  304. package/src/shared-types-extra.ts +2 -4
  305. package/src/shared-types.d.ts +8 -0
  306. package/src/shared-types.ts +64 -1
  307. package/src/status/builders.ts +26 -6
  308. package/src/status/normalize.ts +2 -0
  309. package/src/status/reporter.ts +19 -1
  310. package/src/status/snapshot.ts +95 -26
  311. package/src/system/host-memory.ts +29 -12
  312. package/src/system/load-better-sqlite3.ts +68 -0
  313. package/src/types.ts +5 -0
  314. package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +0 -17
  315. package/dist/mesh/mesh-sync.d.ts +0 -53
  316. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +0 -16
  317. package/src/cli-adapters/terminal-backends/xterm-backend.ts +0 -97
  318. package/src/mesh/mesh-sync.ts +0 -111
@@ -0,0 +1,418 @@
1
+ import type { MeshTaskStatus, MeshWorkQueueEntry } from './mesh-work-queue.js';
2
+ export declare class MeshRuntimeStore {
3
+ private static instance;
4
+ private readonly db;
5
+ private readonly dbPath;
6
+ private readonly migratedMeshIds;
7
+ private fingerprintSweepCounter;
8
+ private walWriteCounter;
9
+ private static readonly WAL_CHECK_INTERVAL;
10
+ private static readonly WAL_MAX_BYTES;
11
+ private constructor();
12
+ static getInstance(): MeshRuntimeStore;
13
+ static resetForTests(): void;
14
+ close(): void;
15
+ transaction<T>(fn: () => T): T;
16
+ private migrate;
17
+ hasCompletionFingerprint(fingerprint: string): boolean;
18
+ recordCompletionFingerprint(fingerprint: string, ttlMs: number): void;
19
+ sweepExpiredFingerprints(): void;
20
+ recordDirectDelivered(coordinatorDaemonId: string, fingerprint: string, ttlMs: number): void;
21
+ wasDirectDelivered(coordinatorDaemonId: string, fingerprint: string): boolean;
22
+ sweepExpiredDirectDelivered(): void;
23
+ private maybeCheckpointWal;
24
+ private ensureLegacyQueueMigrated;
25
+ getQueueEntries(meshId: string, statuses?: MeshTaskStatus[]): MeshWorkQueueEntry[];
26
+ getQueueRevision(meshId: string): string;
27
+ replaceQueue(meshId: string, queue: MeshWorkQueueEntry[]): void;
28
+ deleteQueue(meshId: string): void;
29
+ insertQueueEntry(entry: MeshWorkQueueEntry): void;
30
+ updateQueueEntry(entry: MeshWorkQueueEntry): void;
31
+ findQueueEntryById(meshId: string, id: string): MeshWorkQueueEntry | null;
32
+ hasActiveAssignment(meshId: string, sessionId: string, nodeId: string): boolean;
33
+ /** A session may only execute one task at a time, regardless of task mode. */
34
+ private hasActiveSessionAssignment;
35
+ /** A node may only execute one write task at a time (worktree isolation). */
36
+ private hasActiveNodeAssignment;
37
+ /**
38
+ * Count active (status='assigned') tasks on a node, regardless of provider or
39
+ * task mode. This is the load metric for least-loaded / round-robin ranking:
40
+ * the scheduler prefers the node with the fewest active assignments so
41
+ * untargeted work spreads instead of piling onto whichever node asks first.
42
+ */
43
+ nodeActiveAssignmentCount(meshId: string, nodeId: string): number;
44
+ /**
45
+ * O(1) count of queue tasks in 'pending' status for a mesh. A COUNT(*) over the
46
+ * indexed status column, so it avoids JSON.parse-ing every queue row — used as a
47
+ * cheap guard before the reconcile loop runs a full triggerMeshQueue scan.
48
+ */
49
+ pendingQueueTaskCount(meshId: string): number;
50
+ /**
51
+ * Read the current per-mesh round-robin cursor (0 when unset). Used to rotate
52
+ * the tie-break winner among nodes tied at the least load.
53
+ */
54
+ getSchedulerCursor(meshId: string): number;
55
+ /**
56
+ * Atomically advance the per-mesh round-robin cursor by one and return the
57
+ * value that was current BEFORE the bump (the value the caller should rotate
58
+ * by for this pass). UPSERT keeps it lock-free across concurrent passes.
59
+ */
60
+ bumpSchedulerCursor(meshId: string): number;
61
+ /**
62
+ * Count active (status='assigned') tasks on a (node, provider) combination,
63
+ * matched by the assignedProviderType stamped on the payload at claim time.
64
+ * Drives the per-(node, provider) maxParallel cap (RepoMeshNodePolicy
65
+ * providerRoles). The active-assignment set for a single node is tiny, so
66
+ * parsing payloads here is cheap and avoids a schema migration. Pre-cap legacy
67
+ * rows (no provider stamp) and other providers on the same node do not consume
68
+ * this provider's budget, so the cap is fully backward compatible.
69
+ */
70
+ private activeProviderAssignmentCount;
71
+ claimNextQueueTask(meshId: string, nodeId: string, sessionId: string, capabilityTags?: string[], opts?: {
72
+ providerType?: string;
73
+ providerMaxParallel?: number;
74
+ }): MeshWorkQueueEntry | null;
75
+ getQueueStatsByStatus(meshId: string): {
76
+ status: string;
77
+ count: number;
78
+ }[];
79
+ getActiveAssignmentDetails(meshId: string): Array<{
80
+ id: string;
81
+ nodeId?: string;
82
+ sessionId?: string;
83
+ message: string;
84
+ }>;
85
+ /**
86
+ * Resolve the `assigned` queue row a completion event belongs to.
87
+ *
88
+ * Clock-skew safety (C2): a completion event's `occurredAtIso` carries the
89
+ * REMOTE WORKER's clock, while `updated_at` carries the COORDINATOR's clock
90
+ * (set at assignment and re-bumped on every mutation). For a remote node,
91
+ * coordinator-clock > worker-clock skew used to make an `updated_at <= occurredAt`
92
+ * filter return nothing, stranding the finished task as `assigned` forever.
93
+ *
94
+ * We therefore NEVER filter completion-matching on the mutable `updated_at`:
95
+ * 1. If `taskId` is given, match the exact `assigned` row by id (no time filter).
96
+ * 2. Otherwise a session holds at most one `assigned` task — match it without a
97
+ * time filter. If several exist (shouldn't normally), disambiguate by the
98
+ * IMMUTABLE `dispatchTimestamp`: latest `dispatchTimestamp <= occurredAt`,
99
+ * and if skew makes ALL of them later than `occurredAt`, fall back to the
100
+ * most-recent `dispatchTimestamp` rather than returning null.
101
+ */
102
+ findAssignedBySession(meshId: string, sessionId: string, occurredAtIso?: string, taskId?: string): MeshWorkQueueEntry | null;
103
+ private toRow;
104
+ insertDirectDispatch(entry: {
105
+ taskId: string;
106
+ meshId: string;
107
+ nodeId?: string;
108
+ sessionId?: string;
109
+ providerType?: string;
110
+ message: string;
111
+ taskMode?: string;
112
+ via: string;
113
+ dispatchedToIdleSession?: boolean;
114
+ dispatchedAt: string;
115
+ }): void;
116
+ getActiveDirectDispatches(meshId: string): Array<{
117
+ taskId: string;
118
+ meshId: string;
119
+ nodeId: string | null;
120
+ sessionId: string | null;
121
+ providerType: string | null;
122
+ message: string;
123
+ taskMode: string | null;
124
+ via: string;
125
+ status: string;
126
+ dispatchedToIdleSession: boolean;
127
+ dispatchedAt: string;
128
+ updatedAt: string;
129
+ }>;
130
+ updateDirectDispatchStatus(meshId: string, sessionId: string, status: 'acked' | 'completed' | 'failed' | 'stale'): void;
131
+ cleanupTerminalDirectDispatches(olderThanMs: number): void;
132
+ deleteDirectDispatches(meshId: string): void;
133
+ /**
134
+ * Delete specific direct dispatch rows by taskId for a mesh. Used by the staleDirect prune
135
+ * path to remove orphaned/terminal dispatch records whose node/session is no longer in the
136
+ * live mesh. Returns the number of rows actually deleted. No-op for an empty taskId list.
137
+ */
138
+ deleteDirectDispatchesByTaskId(meshId: string, taskIds: string[]): number;
139
+ markStaleDirectDispatches(meshId: string, olderThanMs: number): void;
140
+ setRemoteIdleSession(nodeId: string, sessionId: string, providerType: string, expiresAt: number, metadata?: any): void;
141
+ getRemoteIdleSessions(): Array<{
142
+ nodeId: string;
143
+ sessionId: string;
144
+ providerType: string;
145
+ expiresAt: number;
146
+ metadata?: any;
147
+ }>;
148
+ deleteRemoteIdleSession(nodeId: string, sessionId: string): void;
149
+ pruneExpiredRemoteIdleSessions(): void;
150
+ insertSessionDelivery(entry: {
151
+ id: string;
152
+ meshId: string;
153
+ nodeId?: string;
154
+ sessionId?: string;
155
+ providerType?: string;
156
+ taskId?: string;
157
+ kind: string;
158
+ priority?: number;
159
+ message: string;
160
+ status: string;
161
+ deliverAfter?: string;
162
+ expiresAt?: string;
163
+ sourceCoordinatorSessionId?: string;
164
+ sourceCoordinatorDaemonId?: string;
165
+ createdAt: string;
166
+ updatedAt: string;
167
+ }): void;
168
+ updateSessionDeliveryStatus(id: string, status: string, opts?: {
169
+ lastError?: string;
170
+ incrementAttempt?: boolean;
171
+ }): void;
172
+ getActiveSessionDeliveries(meshId: string, sessionId?: string): Array<{
173
+ id: string;
174
+ meshId: string;
175
+ nodeId: string | null;
176
+ sessionId: string | null;
177
+ providerType: string | null;
178
+ taskId: string | null;
179
+ kind: string;
180
+ priority: number;
181
+ message: string;
182
+ status: string;
183
+ deliverAfter: string | null;
184
+ expiresAt: string | null;
185
+ attemptCount: number;
186
+ sourceCoordinatorSessionId: string | null;
187
+ sourceCoordinatorDaemonId: string | null;
188
+ lastError: string | null;
189
+ createdAt: string;
190
+ updatedAt: string;
191
+ }>;
192
+ expireStaleSessionDeliveries(meshId: string): void;
193
+ deleteSessionDeliveries(meshId: string): void;
194
+ recordCompletionConflict(entry: {
195
+ id: string;
196
+ meshId: string;
197
+ fingerprint: string;
198
+ conflictingTaskId?: string;
199
+ conflictingSessionId?: string;
200
+ originalTaskId?: string;
201
+ originalSessionId?: string;
202
+ event: string;
203
+ createdAt: string;
204
+ }): void;
205
+ getRecentCompletionConflicts(meshId: string, limitMs?: number): Array<{
206
+ id: string;
207
+ meshId: string;
208
+ fingerprint: string;
209
+ conflictingTaskId: string | null;
210
+ conflictingSessionId: string | null;
211
+ originalTaskId: string | null;
212
+ originalSessionId: string | null;
213
+ event: string;
214
+ createdAt: string;
215
+ }>;
216
+ /**
217
+ * Record a mesh tool call and check whether this mesh+tool combination is
218
+ * being called too rapidly (sliding window rate guard).
219
+ *
220
+ * Returns a rate-limit advisory string when the call rate is too high, null otherwise.
221
+ * windowMs: sliding window size in ms (default 10s)
222
+ * maxCalls: max allowed calls within the window (default 5)
223
+ */
224
+ recordMeshToolCall(opts: {
225
+ meshId: string;
226
+ tool: string;
227
+ sessionId?: string | null;
228
+ windowMs?: number;
229
+ maxCalls?: number;
230
+ }): {
231
+ rateLimitExceeded: boolean;
232
+ callsInWindow: number;
233
+ advisory: string | null;
234
+ };
235
+ /**
236
+ * Prune tool call log entries older than the given age in ms.
237
+ * Exposed for testing.
238
+ */
239
+ pruneToolCallLog(olderThanMs: number): void;
240
+ appendLedgerEntry(entry: {
241
+ id: string;
242
+ meshId: string;
243
+ timestamp: string;
244
+ kind: string;
245
+ nodeId?: string | null;
246
+ sessionId?: string | null;
247
+ providerType?: string | null;
248
+ payload?: unknown;
249
+ }): void;
250
+ readLedgerEntries(meshId: string, opts?: {
251
+ tail?: number;
252
+ since?: string;
253
+ kind?: string;
254
+ limit?: number;
255
+ }): Array<{
256
+ id: string;
257
+ meshId: string;
258
+ timestamp: string;
259
+ kind: string;
260
+ nodeId: string | null;
261
+ sessionId: string | null;
262
+ providerType: string | null;
263
+ payload: unknown;
264
+ }>;
265
+ /**
266
+ * G2 read cutover: read ledger entries in append order (oldest first),
267
+ * matching legacy JSONL file-order semantics. Ties on the same timestamp
268
+ * are broken by rowid (insertion order), preserving the positional
269
+ * guarantee that mesh-events relies on for same-millisecond entries.
270
+ */
271
+ readLedgerEntriesOrdered(meshId: string, opts?: {
272
+ since?: string;
273
+ kinds?: string[];
274
+ tail?: number;
275
+ }): Array<{
276
+ id: string;
277
+ meshId: string;
278
+ timestamp: string;
279
+ kind: string;
280
+ nodeId: string | null;
281
+ sessionId: string | null;
282
+ providerType: string | null;
283
+ payload: unknown;
284
+ }>;
285
+ /** Remove all ledger entries for a mesh (mesh deletion / test cleanup). */
286
+ clearLedgerForMesh(meshId: string): number;
287
+ /** G2: remove entries moved to the JSONL archive so the SQLite runtime set mirrors the active ledger. */
288
+ deleteLedgerEntries(meshId: string, ids: string[]): number;
289
+ hasLedgerEntry(meshId: string, id: string): boolean;
290
+ ledgerEntryCount(meshId: string): number;
291
+ importLedgerEntries(entries: Array<{
292
+ id: string;
293
+ meshId: string;
294
+ timestamp: string;
295
+ kind: string;
296
+ nodeId?: string | null;
297
+ sessionId?: string | null;
298
+ providerType?: string | null;
299
+ payload?: unknown;
300
+ }>): number;
301
+ /**
302
+ * G4: Read a bounded, cursor-addressable ledger slice directly from the SQLite
303
+ * mesh_event_ledger table. This is the P2P reconcile read path; JSONL files are
304
+ * retained as export/import/debug/legacy artifacts only.
305
+ *
306
+ * The return shape is structurally compatible with MeshLedgerSlice so callers
307
+ * in mesh-tools.ts can pass it directly to buildMeshLedgerReplicaEvidence.
308
+ */
309
+ readLedgerSlice(meshId: string, opts?: {
310
+ afterId?: string;
311
+ since?: string;
312
+ kind?: string;
313
+ limit?: number;
314
+ }): {
315
+ protocol: 'adhdev.mesh.ledger.slice.v1';
316
+ meshId: string;
317
+ entries: Array<{
318
+ id: string;
319
+ meshId: string;
320
+ timestamp: string;
321
+ kind: string;
322
+ nodeId: string | null;
323
+ sessionId: string | null;
324
+ providerType: string | null;
325
+ payload: unknown;
326
+ }>;
327
+ cursor: {
328
+ afterId: string | null;
329
+ nextAfterId: string | null;
330
+ limit: number;
331
+ hasMore: boolean;
332
+ };
333
+ sourceOfTruth: {
334
+ kind: 'local_sqlite';
335
+ table: 'mesh_event_ledger';
336
+ bounded: true;
337
+ maxLimit: number;
338
+ };
339
+ };
340
+ insertPendingEvent(event: {
341
+ id: string;
342
+ meshId: string;
343
+ coordinatorDaemonId?: string | null;
344
+ event: string;
345
+ payload?: unknown;
346
+ fingerprint?: string | null;
347
+ queuedAt: number;
348
+ }): boolean;
349
+ /**
350
+ * Drain undrained pending events for a mesh, atomically marking them drained.
351
+ * When `opts.onlyEvents` is supplied, ONLY rows whose `event` is in that set are
352
+ * drained — the rest stay queued (drained=0) for a later drain. This is how the
353
+ * reconcile loop force-drains terminal/force-inject events into a *generating*
354
+ * coordinator while leaving non-force progress events for the coordinator's next
355
+ * idle transition. Filtering happens inside the same transaction as the
356
+ * drained=1 marking, so force-drain + a concurrent full drain can never both
357
+ * consume the same row.
358
+ */
359
+ drainPendingEvents(meshId: string, coordinatorDaemonId?: string | null | ReadonlyArray<string>, opts?: {
360
+ onlyEvents?: ReadonlySet<string>;
361
+ }): Array<{
362
+ id: string;
363
+ event: string;
364
+ payload: unknown;
365
+ }>;
366
+ /** Non-destructive peek — returns undrained events without marking them drained. */
367
+ peekPendingEvents(meshId: string, coordinatorDaemonId?: string | null | ReadonlyArray<string>): Array<{
368
+ id: string;
369
+ event: string;
370
+ payload: unknown;
371
+ }>;
372
+ hasPendingEventFingerprint(meshId: string, fingerprint: string): boolean;
373
+ upsertMission(mission: {
374
+ id: string;
375
+ meshId: string;
376
+ title: string;
377
+ goal?: string;
378
+ status?: string;
379
+ }): void;
380
+ getMission(meshId: string, missionId: string): {
381
+ id: string;
382
+ meshId: string;
383
+ title: string;
384
+ goal: string;
385
+ status: string;
386
+ createdAt: string;
387
+ updatedAt: string;
388
+ } | null;
389
+ getMissions(meshId: string, statuses?: string[]): Array<{
390
+ id: string;
391
+ meshId: string;
392
+ title: string;
393
+ goal: string;
394
+ status: string;
395
+ createdAt: string;
396
+ updatedAt: string;
397
+ }>;
398
+ /** Remove all missions for a mesh — mesh deletion / test cleanup. */
399
+ clearMissionsForMesh(meshId: string): number;
400
+ /** Remove all pending-event rows (drained included) for a mesh — mesh deletion / test cleanup. */
401
+ clearPendingEventsForMesh(meshId: string): number;
402
+ pendingEventCount(meshId: string): number;
403
+ /**
404
+ * Mark specific pending-event rows drained by id (ack). Used by the
405
+ * unresolved-delegate durable-forward outbox: an event is peeked (not drained)
406
+ * while its push to the coordinator is unconfirmed, then marked drained ONLY
407
+ * after the push is acked. A failed push leaves the row undrained so the next
408
+ * reconcile tick retries it. Returns the number of rows newly marked drained.
409
+ */
410
+ markPendingEventsDrainedById(ids: ReadonlyArray<string>): number;
411
+ /**
412
+ * Hard-delete pending-event rows by id (including the dedup fingerprint history).
413
+ * Used to expire an unresolved-delegate outbox entry that has exhausted its retry
414
+ * budget — fully removing it frees the fingerprint so a genuinely new completion
415
+ * for the same task could be re-queued later. Returns the number of rows deleted.
416
+ */
417
+ deletePendingEventsById(ids: ReadonlyArray<string>): number;
418
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * M7: Operational stats (time/attempts) derived from existing truth.
3
+ *
4
+ * No cost/token accounting — ADHDev observes PTY/CDP and cannot see API
5
+ * tokens (explicit non-goal). Everything here is derived at query time from
6
+ * the SQLite ledger and queue rows; there is no separate aggregate table.
7
+ * Tasks with missing ledger evidence report incompleteEvidence instead of
8
+ * estimated numbers.
9
+ */
10
+ export interface MeshTaskStats {
11
+ taskId: string;
12
+ status: string;
13
+ dispatchedAt: string | null;
14
+ terminalAt: string | null;
15
+ terminalKind: 'task_completed' | 'task_failed' | null;
16
+ /** dispatched → terminal wall clock; null when evidence is incomplete. */
17
+ durationMs: number | null;
18
+ /** Number of task_dispatched ledger entries observed for this task. */
19
+ dispatchCount: number;
20
+ /** Queue requeueCount (0 when the row is gone or never requeued). */
21
+ requeueCount: number;
22
+ /** True when dispatch or terminal ledger evidence is missing — numbers are withheld, never estimated. */
23
+ incompleteEvidence?: true;
24
+ }
25
+ export interface MeshMissionStats {
26
+ missionId: string;
27
+ taskCount: number;
28
+ completed: number;
29
+ failed: number;
30
+ /** Sum of per-task durations with complete evidence. */
31
+ totalDurationMs: number;
32
+ /** First dispatch → last terminal across the mission's tasks; null without complete endpoints. */
33
+ wallClockMs: number | null;
34
+ /** Total requeue attempts across the mission's tasks. */
35
+ retries: number;
36
+ /** Task ids whose ledger evidence was incomplete (excluded from sums). */
37
+ incompleteTaskIds: string[];
38
+ }
39
+ /**
40
+ * Compute per-task stats from ledger entries. Scans a bounded tail window —
41
+ * stats are an operational view of recent work, not a full historical report.
42
+ */
43
+ export declare function computeMeshTaskStats(meshId: string, opts?: {
44
+ taskIds?: string[];
45
+ missionId?: string;
46
+ tail?: number;
47
+ }): MeshTaskStats[];
48
+ /** Mission rollup — derived from per-task stats, no stored aggregates. */
49
+ export declare function computeMeshMissionStats(meshId: string, missionId: string): MeshMissionStats;
@@ -0,0 +1,30 @@
1
+ export declare const UNRESOLVED_FORWARD_OUTBOX_MESH_ID = "__unresolved_forward_outbox__";
2
+ export interface UnresolvedForwardEntry {
3
+ /** Row id in mesh_pending_events; pass back to ack/expire after a push attempt. */
4
+ id: string;
5
+ /** The coordinator daemon to push this event to (mesh_forward_event target). */
6
+ coordinatorDaemonId: string;
7
+ /** The flat payload to forward (already shaped for handleMeshForwardEvent). */
8
+ payload: Record<string, unknown>;
9
+ /** When the entry was first enqueued (epoch ms) — used for age-based expiry. */
10
+ queuedAt: number;
11
+ }
12
+ /**
13
+ * Durably enqueue an unresolved-delegate forward for a coordinator daemon. The
14
+ * `forwardPayload` is the flat shape handleMeshForwardEvent reads on the coordinator.
15
+ * Idempotent on the event fingerprint. Returns true when a new row was written (or a
16
+ * duplicate was harmlessly ignored), false on a hard persistence failure.
17
+ */
18
+ export declare function enqueueUnresolvedDelegateForward(coordinatorDaemonId: string, eventName: string, forwardPayload: Record<string, unknown>): boolean;
19
+ /** Peek (non-destructive) every undrained outbox entry across all coordinators. */
20
+ export declare function peekUnresolvedDelegateForwards(): UnresolvedForwardEntry[];
21
+ /** Mark an outbox entry delivered (acked) after a successful push. */
22
+ export declare function ackUnresolvedDelegateForward(id: string): void;
23
+ /**
24
+ * Drop outbox entries that have exceeded the max retry age. Returns the count
25
+ * expired so the caller can log a fail-loud trace (a dropped completion is a real
26
+ * loss; it must be visible, not silent).
27
+ */
28
+ export declare function expireStaleUnresolvedDelegateForwards(nowMs?: number): number;
29
+ /** Test helper: purge the entire outbox. */
30
+ export declare function __clearUnresolvedDelegateForwardOutboxForTests(): void;