@adhdev/daemon-core 0.9.82-rc.5 → 0.9.82-rc.500

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 (479) hide show
  1. package/dist/boot/daemon-lifecycle.d.ts +11 -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 +85 -2
  8. package/dist/cli-adapters/cli-script-runner.d.ts +117 -0
  9. package/dist/cli-adapters/cli-state-engine.d.ts +246 -0
  10. package/dist/cli-adapters/provider-cli-adapter.d.ts +139 -64
  11. package/dist/cli-adapters/provider-cli-parse.d.ts +5 -0
  12. package/dist/cli-adapters/provider-cli-runtime.d.ts +34 -0
  13. package/dist/cli-adapters/provider-cli-shared.d.ts +74 -0
  14. package/dist/cli-adapters/pty-write-chunking.d.ts +34 -0
  15. package/dist/cli-adapters/raw-terminal-io.d.ts +37 -0
  16. package/dist/cli-adapters/resolve-executable.d.ts +69 -0
  17. package/dist/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +6 -3
  18. package/dist/cli-adapters/terminal-backends/types.d.ts +10 -2
  19. package/dist/cli-adapters/terminal-screen.d.ts +4 -11
  20. package/dist/commands/chat-commands-debug-bundle.d.ts +14 -0
  21. package/dist/commands/chat-commands-read.d.ts +23 -0
  22. package/dist/commands/chat-commands-scope.d.ts +39 -0
  23. package/dist/commands/chat-commands-shared.d.ts +33 -0
  24. package/dist/commands/chat-commands-write.d.ts +14 -0
  25. package/dist/commands/chat-commands.d.ts +10 -23
  26. package/dist/commands/cli-manager.d.ts +71 -1
  27. package/dist/commands/handler.d.ts +125 -0
  28. package/dist/commands/high-family/index.d.ts +3 -0
  29. package/dist/commands/high-family/mesh-coordinator-launch.d.ts +2 -0
  30. package/dist/commands/high-family/mesh-events.d.ts +2 -0
  31. package/dist/commands/high-family/mesh-status.d.ts +2 -0
  32. package/dist/commands/high-family/types.d.ts +64 -0
  33. package/dist/commands/low-family/coordinator-prompt.d.ts +9 -0
  34. package/dist/commands/low-family/daemon-lifecycle.d.ts +2 -0
  35. package/dist/commands/low-family/diagnostics.d.ts +2 -0
  36. package/dist/commands/low-family/index.d.ts +3 -0
  37. package/dist/commands/low-family/mesh-ledger.d.ts +10 -0
  38. package/dist/commands/low-family/mesh-node-logs.d.ts +2 -0
  39. package/dist/commands/low-family/notification.d.ts +2 -0
  40. package/dist/commands/low-family/refine-config.d.ts +2 -0
  41. package/dist/commands/low-family/session-host.d.ts +2 -0
  42. package/dist/commands/low-family/spec-providerdev.d.ts +11 -0
  43. package/dist/commands/low-family/status-meta.d.ts +2 -0
  44. package/dist/commands/low-family/types.d.ts +33 -0
  45. package/dist/commands/med-family/cli-agent.d.ts +2 -0
  46. package/dist/commands/med-family/fast-forward.d.ts +2 -0
  47. package/dist/commands/med-family/ide.d.ts +10 -0
  48. package/dist/commands/med-family/index.d.ts +3 -0
  49. package/dist/commands/med-family/mesh-crud.d.ts +48 -0
  50. package/dist/commands/med-family/mesh-host-pairing.d.ts +2 -0
  51. package/dist/commands/med-family/mesh-queue.d.ts +2 -0
  52. package/dist/commands/med-family/mesh-restart.d.ts +2 -0
  53. package/dist/commands/med-family/types.d.ts +152 -0
  54. package/dist/commands/mesh-coordinator.d.ts +85 -1
  55. package/dist/commands/router-aggregate-status.d.ts +24 -0
  56. package/dist/commands/router-mesh-session-owner.d.ts +59 -0
  57. package/dist/commands/router-refine.d.ts +151 -0
  58. package/dist/commands/router-worktree-cleanup.d.ts +133 -0
  59. package/dist/commands/router.d.ts +212 -11
  60. package/dist/commands/upgrade-helper.d.ts +41 -1
  61. package/dist/config/chat-history.d.ts +11 -0
  62. package/dist/config/config.d.ts +19 -0
  63. package/dist/config/mesh-config.d.ts +132 -1
  64. package/dist/config/mesh-json-config.d.ts +199 -0
  65. package/dist/config/registry-resolver.d.ts +54 -0
  66. package/dist/config/repo-settings.d.ts +77 -0
  67. package/dist/config/state-store.d.ts +30 -0
  68. package/dist/daemon/dev-server.d.ts +0 -2
  69. package/dist/detection/cli-detector.d.ts +17 -0
  70. package/dist/detection/ide-detector.d.ts +13 -0
  71. package/dist/detection/win32-ide-version.d.ts +37 -0
  72. package/dist/git/change-impact-config.d.ts +159 -0
  73. package/dist/git/git-commands.d.ts +27 -2
  74. package/dist/git/git-diff.d.ts +6 -0
  75. package/dist/git/git-executor.d.ts +11 -0
  76. package/dist/git/git-status.d.ts +85 -0
  77. package/dist/git/git-types.d.ts +5 -43
  78. package/dist/git/git-worktree.d.ts +71 -1
  79. package/dist/git/index.d.ts +3 -1
  80. package/dist/index.d.ts +74 -17
  81. package/dist/index.js +61082 -24164
  82. package/dist/index.js.map +1 -1
  83. package/dist/index.mjs +57034 -20299
  84. package/dist/index.mjs.map +1 -1
  85. package/dist/installer.d.ts +1 -4
  86. package/dist/ipc/local-ipc-server.d.ts +91 -0
  87. package/dist/launch.d.ts +1 -1
  88. package/dist/logging/async-batch-writer.d.ts +10 -0
  89. package/dist/logging/debug-config.d.ts +16 -0
  90. package/dist/logging/log-redactor.d.ts +24 -0
  91. package/dist/logging/log-tail-reader.d.ts +81 -0
  92. package/dist/logging/logger.d.ts +1 -1
  93. package/dist/mesh/contracts.d.ts +256 -0
  94. package/dist/mesh/coordinator-prompt.d.ts +76 -0
  95. package/dist/mesh/coordinator-registry.d.ts +59 -0
  96. package/dist/mesh/mesh-active-work.d.ts +203 -0
  97. package/dist/mesh/mesh-clone-grace.d.ts +8 -0
  98. package/dist/mesh/mesh-completion-synthesis.d.ts +4 -0
  99. package/dist/mesh/mesh-coordinator-config.d.ts +21 -0
  100. package/dist/mesh/mesh-delivery-policy.d.ts +104 -0
  101. package/dist/mesh/mesh-event-classify.d.ts +7 -0
  102. package/dist/mesh/mesh-event-forwarding.d.ts +58 -0
  103. package/dist/mesh/mesh-event-trace.d.ts +21 -0
  104. package/dist/mesh/mesh-events-coordinator.d.ts +4 -0
  105. package/dist/mesh/mesh-events-pending.d.ts +258 -0
  106. package/dist/mesh/mesh-events-stale.d.ts +61 -0
  107. package/dist/mesh/mesh-events-utils.d.ts +75 -0
  108. package/dist/mesh/mesh-events.d.ts +6 -37
  109. package/dist/mesh/mesh-fast-forward.d.ts +81 -0
  110. package/dist/mesh/mesh-host-ownership.d.ts +29 -0
  111. package/dist/mesh/mesh-idle-reminder.d.ts +68 -0
  112. package/dist/mesh/mesh-init.d.ts +128 -0
  113. package/dist/mesh/mesh-ledger-reconciliation.d.ts +23 -4
  114. package/dist/mesh/mesh-ledger.d.ts +139 -1
  115. package/dist/mesh/mesh-magi-status.d.ts +63 -0
  116. package/dist/mesh/mesh-missions.d.ts +281 -0
  117. package/dist/mesh/mesh-node-identity.d.ts +310 -0
  118. package/dist/mesh/mesh-queue-assignment.d.ts +162 -0
  119. package/dist/mesh/mesh-reconcile-acked-hold.d.ts +17 -0
  120. package/dist/mesh/mesh-reconcile-config.d.ts +6 -0
  121. package/dist/mesh/mesh-reconcile-identity.d.ts +6 -0
  122. package/dist/mesh/mesh-reconcile-loop.d.ts +84 -0
  123. package/dist/mesh/mesh-reconcile-v2-backstop.d.ts +16 -0
  124. package/dist/mesh/mesh-refine-batch.d.ts +68 -0
  125. package/dist/mesh/mesh-refine-gates.d.ts +457 -0
  126. package/dist/mesh/mesh-refine-status.d.ts +62 -0
  127. package/dist/mesh/mesh-remote-event-pull.d.ts +15 -0
  128. package/dist/mesh/mesh-review-inbox.d.ts +90 -0
  129. package/dist/mesh/mesh-routing.d.ts +70 -0
  130. package/dist/mesh/mesh-runtime-store.d.ts +584 -0
  131. package/dist/mesh/mesh-scheduling-runtime.d.ts +78 -0
  132. package/dist/mesh/mesh-task-inflight.d.ts +46 -0
  133. package/dist/mesh/mesh-task-stats.d.ts +49 -0
  134. package/dist/mesh/mesh-unresolved-forward-outbox.d.ts +34 -0
  135. package/dist/mesh/mesh-warmup-deadline.d.ts +68 -0
  136. package/dist/mesh/mesh-work-queue.d.ts +403 -6
  137. package/dist/mesh/preview-freshness.d.ts +28 -0
  138. package/dist/mesh/refine-config.d.ts +216 -0
  139. package/dist/mesh/worktree-bootstrap-config.d.ts +219 -0
  140. package/dist/providers/acp-provider-instance.d.ts +5 -0
  141. package/dist/providers/approval-utils.d.ts +46 -0
  142. package/dist/providers/chat-message-normalization.d.ts +58 -0
  143. package/dist/providers/cli-provider-effect-format.d.ts +30 -0
  144. package/dist/providers/cli-provider-history-dedup.d.ts +17 -0
  145. package/dist/providers/cli-provider-input-prompt.d.ts +12 -0
  146. package/dist/providers/cli-provider-instance-types.d.ts +47 -0
  147. package/dist/providers/cli-provider-instance.d.ts +461 -30
  148. package/dist/providers/cli-provider-status-helpers.d.ts +46 -0
  149. package/dist/providers/cli-provider-transcript-merge.d.ts +7 -0
  150. package/dist/providers/contracts.d.ts +196 -6
  151. package/dist/providers/external-sources.d.ts +71 -0
  152. package/dist/providers/manual-attendance.d.ts +79 -0
  153. package/dist/providers/native-history/antigravity-claim-registry.d.ts +39 -0
  154. package/dist/providers/native-history/antigravity-cli-transcript.d.ts +137 -0
  155. package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
  156. package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
  157. package/dist/providers/native-history/constants.d.ts +12 -0
  158. package/dist/providers/native-history/dispatcher.d.ts +44 -0
  159. package/dist/providers/native-history/hermes-cli-transcript.d.ts +30 -0
  160. package/dist/providers/native-history/index.d.ts +13 -0
  161. package/dist/providers/provider-instance-manager.d.ts +30 -0
  162. package/dist/providers/provider-instance.d.ts +31 -1
  163. package/dist/providers/provider-loader.d.ts +42 -5
  164. package/dist/providers/provider-trust.d.ts +31 -0
  165. package/dist/providers/read-chat-contract.d.ts +29 -0
  166. package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
  167. package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +86 -0
  168. package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
  169. package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +65 -0
  170. package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
  171. package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
  172. package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
  173. package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
  174. package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
  175. package/dist/providers/sdk/v1/index.d.ts +30 -0
  176. package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
  177. package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
  178. package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
  179. package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
  180. package/dist/providers/sdk/v1/types/common/index.d.ts +203 -0
  181. package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
  182. package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
  183. package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
  184. package/dist/providers/spec/adapter.d.ts +98 -0
  185. package/dist/providers/spec/background-task-detector.d.ts +29 -0
  186. package/dist/providers/spec/cli-adapter.d.ts +224 -0
  187. package/dist/providers/spec/evaluator.d.ts +45 -0
  188. package/dist/providers/spec/fsm-driver.d.ts +449 -0
  189. package/dist/providers/spec/fsm-evaluator.d.ts +93 -0
  190. package/dist/providers/spec/fsm-loader.d.ts +14 -0
  191. package/dist/providers/spec/fsm-types.d.ts +202 -0
  192. package/dist/providers/spec/native-history-executor.d.ts +50 -0
  193. package/dist/providers/spec/pre-launch-trust.d.ts +16 -0
  194. package/dist/providers/spec/route.d.ts +4 -0
  195. package/dist/providers/spec/types.d.ts +244 -0
  196. package/dist/providers/status-monitor.d.ts +7 -7
  197. package/dist/providers/transcript-v2.d.ts +176 -0
  198. package/dist/providers/types/interactive-prompt.d.ts +84 -0
  199. package/dist/providers/working-dir.d.ts +17 -0
  200. package/dist/repo-mesh-types.d.ts +778 -3
  201. package/dist/runtime-defaults.d.ts +2 -0
  202. package/dist/session-host/managed-host.d.ts +64 -0
  203. package/dist/session-host/runtime-surface.d.ts +10 -16
  204. package/dist/sessions/registry.d.ts +26 -0
  205. package/dist/shared-types-extra.d.ts +2 -4
  206. package/dist/shared-types.d.ts +110 -55
  207. package/dist/status/chat-tail-hot-sessions.d.ts +40 -0
  208. package/dist/status/normalize.d.ts +1 -1
  209. package/dist/status/normalize.js +1 -0
  210. package/dist/status/normalize.js.map +1 -1
  211. package/dist/status/normalize.mjs +1 -0
  212. package/dist/status/normalize.mjs.map +1 -1
  213. package/dist/status/reporter.d.ts +2 -0
  214. package/dist/status/snapshot.d.ts +27 -0
  215. package/dist/system/hash.d.ts +8 -0
  216. package/dist/system/load-better-sqlite3.d.ts +21 -0
  217. package/dist/types.d.ts +20 -6
  218. package/package.json +11 -4
  219. package/src/agent-stream/poller.ts +2 -3
  220. package/src/agent-stream/provider-adapter.ts +1 -1
  221. package/src/boot/daemon-lifecycle.ts +83 -14
  222. package/src/boot/process-hardening.ts +89 -0
  223. package/src/build-info.ts +73 -0
  224. package/src/chat/source-machine.ts +534 -0
  225. package/src/chat/source-resolver.ts +0 -0
  226. package/src/chat/subscription-updates.ts +20 -1
  227. package/src/cli-adapter-types.d.ts +3 -1
  228. package/src/cli-adapter-types.ts +85 -2
  229. package/src/cli-adapters/cli-script-runner.ts +421 -0
  230. package/src/cli-adapters/cli-state-engine.ts +1379 -0
  231. package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
  232. package/src/cli-adapters/provider-cli-adapter.ts +1059 -1143
  233. package/src/cli-adapters/provider-cli-parse.d.ts +2 -0
  234. package/src/cli-adapters/provider-cli-parse.ts +19 -0
  235. package/src/cli-adapters/provider-cli-runtime.ts +56 -7
  236. package/src/cli-adapters/provider-cli-shared.d.ts +4 -0
  237. package/src/cli-adapters/provider-cli-shared.ts +121 -11
  238. package/src/cli-adapters/pty-transport.ts +2 -1
  239. package/src/cli-adapters/pty-write-chunking.ts +106 -0
  240. package/src/cli-adapters/raw-terminal-io.ts +252 -0
  241. package/src/cli-adapters/resolve-executable.ts +204 -0
  242. package/src/cli-adapters/session-host-transport.ts +2 -1
  243. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.ts +63 -29
  244. package/src/cli-adapters/terminal-backends/types.ts +10 -3
  245. package/src/cli-adapters/terminal-screen.ts +16 -81
  246. package/src/commands/chat-commands-debug-bundle.ts +398 -0
  247. package/src/commands/chat-commands-read.ts +2788 -0
  248. package/src/commands/chat-commands-scope.ts +54 -0
  249. package/src/commands/chat-commands-shared.ts +114 -0
  250. package/src/commands/chat-commands-write.ts +891 -0
  251. package/src/commands/chat-commands.ts +19 -1841
  252. package/src/commands/cli-manager.d.ts +2 -0
  253. package/src/commands/cli-manager.ts +724 -27
  254. package/src/commands/handler.ts +865 -2
  255. package/src/commands/high-family/index.ts +28 -0
  256. package/src/commands/high-family/mesh-coordinator-launch.ts +696 -0
  257. package/src/commands/high-family/mesh-events.ts +102 -0
  258. package/src/commands/high-family/mesh-status.ts +857 -0
  259. package/src/commands/high-family/types.ts +80 -0
  260. package/src/commands/low-family/coordinator-prompt.ts +125 -0
  261. package/src/commands/low-family/daemon-lifecycle.ts +120 -0
  262. package/src/commands/low-family/diagnostics.ts +57 -0
  263. package/src/commands/low-family/index.ts +37 -0
  264. package/src/commands/low-family/mesh-ledger.ts +62 -0
  265. package/src/commands/low-family/mesh-node-logs.ts +87 -0
  266. package/src/commands/low-family/notification.ts +116 -0
  267. package/src/commands/low-family/refine-config.ts +106 -0
  268. package/src/commands/low-family/session-host.ts +282 -0
  269. package/src/commands/low-family/spec-providerdev.ts +217 -0
  270. package/src/commands/low-family/status-meta.ts +112 -0
  271. package/src/commands/low-family/types.ts +39 -0
  272. package/src/commands/med-family/cli-agent.ts +270 -0
  273. package/src/commands/med-family/fast-forward.ts +230 -0
  274. package/src/commands/med-family/ide.ts +163 -0
  275. package/src/commands/med-family/index.ts +37 -0
  276. package/src/commands/med-family/mesh-crud.ts +1309 -0
  277. package/src/commands/med-family/mesh-host-pairing.ts +234 -0
  278. package/src/commands/med-family/mesh-queue.ts +167 -0
  279. package/src/commands/med-family/mesh-restart.ts +92 -0
  280. package/src/commands/med-family/types.ts +153 -0
  281. package/src/commands/mesh-coordinator.ts +334 -124
  282. package/src/commands/router-aggregate-status.ts +209 -0
  283. package/src/commands/router-mesh-session-owner.ts +114 -0
  284. package/src/commands/router-refine.ts +1794 -0
  285. package/src/commands/router-worktree-cleanup.ts +870 -0
  286. package/src/commands/router.ts +657 -2704
  287. package/src/commands/stream-commands.ts +8 -0
  288. package/src/commands/upgrade-helper.ts +310 -45
  289. package/src/config/chat-history.ts +517 -24
  290. package/src/config/config.ts +30 -0
  291. package/src/config/mesh-config.ts +542 -23
  292. package/src/config/mesh-json-config.ts +376 -0
  293. package/src/config/recent-activity.ts +8 -2
  294. package/src/config/registry-resolver.ts +100 -0
  295. package/src/config/repo-settings.ts +111 -0
  296. package/src/config/state-store.ts +55 -0
  297. package/src/daemon/dev-auto-implement.ts +3 -2
  298. package/src/daemon/dev-cli-debug.ts +10 -1
  299. package/src/daemon/dev-server.ts +0 -541
  300. package/src/detection/cli-detector.ts +94 -9
  301. package/src/detection/ide-detector.ts +55 -16
  302. package/src/detection/win32-ide-version.ts +106 -0
  303. package/src/git/change-impact-config.ts +354 -0
  304. package/src/git/git-commands.ts +113 -17
  305. package/src/git/git-diff.ts +81 -11
  306. package/src/git/git-executor.ts +12 -0
  307. package/src/git/git-status.ts +916 -51
  308. package/src/git/git-summary.ts +3 -0
  309. package/src/git/git-types.ts +17 -54
  310. package/src/git/git-worktree.ts +261 -4
  311. package/src/git/index.ts +17 -0
  312. package/src/index.ts +221 -13
  313. package/src/installer.d.ts +1 -1
  314. package/src/installer.ts +8 -6
  315. package/src/ipc/local-ipc-server.ts +278 -0
  316. package/src/launch.d.ts +1 -1
  317. package/src/launch.ts +37 -28
  318. package/src/logging/async-batch-writer.ts +55 -0
  319. package/src/logging/command-log.ts +7 -5
  320. package/src/logging/debug-config.ts +25 -0
  321. package/src/logging/debug-trace.ts +7 -2
  322. package/src/logging/log-redactor.ts +100 -0
  323. package/src/logging/log-tail-reader.ts +341 -0
  324. package/src/logging/logger.ts +14 -7
  325. package/src/mesh/contracts.ts +510 -0
  326. package/src/mesh/coordinator-prompt.ts +626 -34
  327. package/src/mesh/coordinator-registry.ts +121 -0
  328. package/src/mesh/mesh-active-work.ts +706 -0
  329. package/src/mesh/mesh-clone-grace.ts +68 -0
  330. package/src/mesh/mesh-completion-synthesis.ts +416 -0
  331. package/src/mesh/mesh-coordinator-config.ts +97 -0
  332. package/src/mesh/mesh-delivery-policy.ts +284 -0
  333. package/src/mesh/mesh-event-classify.ts +78 -0
  334. package/src/mesh/mesh-event-forwarding.ts +2042 -0
  335. package/src/mesh/mesh-event-trace.ts +67 -0
  336. package/src/mesh/mesh-events-coordinator.ts +32 -0
  337. package/src/mesh/mesh-events-pending.ts +1548 -0
  338. package/src/mesh/mesh-events-stale.ts +452 -0
  339. package/src/mesh/mesh-events-utils.ts +443 -0
  340. package/src/mesh/mesh-events.ts +43 -897
  341. package/src/mesh/mesh-fast-forward.ts +856 -0
  342. package/src/mesh/mesh-host-ownership.ts +111 -0
  343. package/src/mesh/mesh-idle-reminder.ts +153 -0
  344. package/src/mesh/mesh-init.ts +350 -0
  345. package/src/mesh/mesh-ledger-reconciliation.ts +12 -7
  346. package/src/mesh/mesh-ledger.ts +898 -102
  347. package/src/mesh/mesh-magi-status.ts +223 -0
  348. package/src/mesh/mesh-missions.ts +695 -0
  349. package/src/mesh/mesh-node-identity.ts +2065 -0
  350. package/src/mesh/mesh-queue-assignment.ts +2498 -0
  351. package/src/mesh/mesh-reconcile-acked-hold.ts +230 -0
  352. package/src/mesh/mesh-reconcile-config.ts +66 -0
  353. package/src/mesh/mesh-reconcile-identity.ts +103 -0
  354. package/src/mesh/mesh-reconcile-loop.ts +1709 -0
  355. package/src/mesh/mesh-reconcile-v2-backstop.ts +62 -0
  356. package/src/mesh/mesh-refine-batch.ts +205 -0
  357. package/src/mesh/mesh-refine-gates.ts +1792 -0
  358. package/src/mesh/mesh-refine-status.ts +231 -0
  359. package/src/mesh/mesh-remote-event-pull.ts +286 -0
  360. package/src/mesh/mesh-review-inbox.ts +308 -0
  361. package/src/mesh/mesh-routing.ts +291 -0
  362. package/src/mesh/mesh-runtime-store.ts +2318 -0
  363. package/src/mesh/mesh-scheduling-runtime.ts +198 -0
  364. package/src/mesh/mesh-task-inflight.ts +70 -0
  365. package/src/mesh/mesh-task-stats.ts +161 -0
  366. package/src/mesh/mesh-unresolved-forward-outbox.ts +215 -0
  367. package/src/mesh/mesh-warmup-deadline.ts +152 -0
  368. package/src/mesh/mesh-work-queue.ts +1532 -161
  369. package/src/mesh/p2p-relay-failure.ts +2 -2
  370. package/src/mesh/preview-freshness.ts +163 -0
  371. package/src/mesh/refine-config.ts +423 -0
  372. package/src/mesh/worktree-bootstrap-config.ts +599 -0
  373. package/src/providers/acp-provider-instance.ts +43 -10
  374. package/src/providers/approval-utils.d.ts +5 -0
  375. package/src/providers/approval-utils.ts +100 -6
  376. package/src/providers/chat-message-normalization.ts +128 -4
  377. package/src/providers/cli-provider-effect-format.ts +53 -0
  378. package/src/providers/cli-provider-history-dedup.ts +75 -0
  379. package/src/providers/cli-provider-input-prompt.ts +133 -0
  380. package/src/providers/cli-provider-instance-types.ts +150 -0
  381. package/src/providers/cli-provider-instance.ts +2914 -498
  382. package/src/providers/cli-provider-status-helpers.ts +123 -0
  383. package/src/providers/cli-provider-transcript-merge.ts +114 -0
  384. package/src/providers/contracts.d.ts +55 -0
  385. package/src/providers/contracts.ts +207 -6
  386. package/src/providers/extension-provider-instance.ts +12 -7
  387. package/src/providers/external-sources.ts +218 -0
  388. package/src/providers/ide-provider-instance.ts +35 -12
  389. package/src/providers/manual-attendance.ts +105 -0
  390. package/src/providers/native-history/antigravity-claim-registry.ts +138 -0
  391. package/src/providers/native-history/antigravity-cli-transcript.ts +1275 -0
  392. package/src/providers/native-history/claude-cli-transcript.ts +396 -0
  393. package/src/providers/native-history/codex-cli-transcript.ts +479 -0
  394. package/src/providers/native-history/constants.ts +19 -0
  395. package/src/providers/native-history/dispatcher.ts +617 -0
  396. package/src/providers/native-history/hermes-cli-transcript.ts +312 -0
  397. package/src/providers/native-history/index.ts +30 -0
  398. package/src/providers/provider-instance-manager.ts +71 -0
  399. package/src/providers/provider-instance.ts +24 -1
  400. package/src/providers/provider-loader.ts +700 -55
  401. package/src/providers/provider-schema.ts +93 -14
  402. package/src/providers/provider-trust.ts +114 -0
  403. package/src/providers/read-chat-contract.ts +76 -16
  404. package/src/providers/sdk/README.md +49 -0
  405. package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
  406. package/src/providers/sdk/v1/builders/cli/detect-status.ts +313 -0
  407. package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
  408. package/src/providers/sdk/v1/builders/cli/parse-approval.ts +261 -0
  409. package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
  410. package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
  411. package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
  412. package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
  413. package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
  414. package/src/providers/sdk/v1/index.ts +152 -0
  415. package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
  416. package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
  417. package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
  418. package/src/providers/sdk/v1/schemas/cli/provider.schema.json +538 -0
  419. package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
  420. package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
  421. package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
  422. package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
  423. package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
  424. package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
  425. package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
  426. package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
  427. package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +125 -0
  428. package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
  429. package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
  430. package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
  431. package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
  432. package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
  433. package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
  434. package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
  435. package/src/providers/sdk/v1/types/cli/index.ts +365 -0
  436. package/src/providers/sdk/v1/types/common/index.ts +229 -0
  437. package/src/providers/sdk/v1/validators/index.ts +19 -0
  438. package/src/providers/sdk/v1/validators/manifest.ts +110 -0
  439. package/src/providers/sdk/v1/validators/taint.ts +309 -0
  440. package/src/providers/spec/adapter.ts +246 -0
  441. package/src/providers/spec/background-task-detector.ts +178 -0
  442. package/src/providers/spec/cli-adapter.ts +1090 -0
  443. package/src/providers/spec/evaluator.ts +407 -0
  444. package/src/providers/spec/fsm-driver.ts +1528 -0
  445. package/src/providers/spec/fsm-evaluator.ts +290 -0
  446. package/src/providers/spec/fsm-loader.ts +128 -0
  447. package/src/providers/spec/fsm-types.ts +301 -0
  448. package/src/providers/spec/native-history-executor.ts +1256 -0
  449. package/src/providers/spec/pre-launch-trust.ts +104 -0
  450. package/src/providers/spec/route.ts +51 -0
  451. package/src/providers/spec/types.ts +284 -0
  452. package/src/providers/status-monitor.d.ts +7 -7
  453. package/src/providers/status-monitor.ts +37 -22
  454. package/src/providers/transcript-v2.ts +567 -0
  455. package/src/providers/types/interactive-prompt.ts +536 -0
  456. package/src/providers/version-archive.ts +64 -24
  457. package/src/providers/working-dir.ts +23 -0
  458. package/src/repo-mesh-types.ts +1040 -5
  459. package/src/runtime-defaults.ts +39 -0
  460. package/src/session-host/managed-host.ts +218 -0
  461. package/src/session-host/runtime-surface.ts +20 -80
  462. package/src/sessions/registry.ts +44 -0
  463. package/src/shared-types-extra.ts +2 -4
  464. package/src/shared-types.d.ts +8 -0
  465. package/src/shared-types.ts +148 -55
  466. package/src/status/builders.ts +69 -6
  467. package/src/status/chat-tail-hot-sessions.ts +117 -2
  468. package/src/status/normalize.ts +2 -0
  469. package/src/status/reporter.ts +19 -1
  470. package/src/status/snapshot.ts +100 -27
  471. package/src/system/hash.ts +23 -0
  472. package/src/system/host-memory.ts +29 -12
  473. package/src/system/load-better-sqlite3.ts +68 -0
  474. package/src/types.ts +26 -6
  475. package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +0 -17
  476. package/dist/mesh/mesh-sync.d.ts +0 -53
  477. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +0 -16
  478. package/src/cli-adapters/terminal-backends/xterm-backend.ts +0 -97
  479. package/src/mesh/mesh-sync.ts +0 -111
@@ -0,0 +1,70 @@
1
+ import type { DaemonComponents } from '../boot/daemon-lifecycle.js';
2
+ export type WorkerDelegateRejectionReason = 'not_cli' | 'no_workspace' | 'no_worker_envelope' | 'coordinator_not_dispatch_target' | 'mesh_unresolved';
3
+ export interface WorkerDelegateRouting {
4
+ /** True when the source session is a mesh worker whose events must route to a coordinator. */
5
+ isDelegate: boolean;
6
+ /** Resolved mesh id (runtime stamp, direct-dispatch recovery, or workspace lookup). */
7
+ meshId: string;
8
+ /** Resolved node id within the mesh, or '' when it cannot be determined. */
9
+ nodeId: string;
10
+ /** Human-readable node label for the coordinator system message. */
11
+ nodeLabel: string;
12
+ /** Coordinator daemon anchor (prefixed id) when the worker carries one; '' otherwise. */
13
+ coordinatorDaemonId: string;
14
+ /** Source session workspace (best-effort; '' when the session/workspace is missing). */
15
+ workspace: string;
16
+ /** Source session id echoed back, so diagnostics can name the dropped event's origin. */
17
+ sessionId: string;
18
+ /** Why routing was rejected (isDelegate=false), for fail-loud diagnostics (R4). */
19
+ rejectionReason?: WorkerDelegateRejectionReason;
20
+ }
21
+ interface ResolveDeps {
22
+ /** Resolve a mesh by id (local config + inline cache). */
23
+ getMeshById: (meshId: string) => any | undefined;
24
+ /** Resolve a mesh by workspace path (cached repo lookup). */
25
+ getMeshByWorkspace: (workspace: string) => any | undefined;
26
+ }
27
+ /**
28
+ * Resolve how a source CLI session's mesh events should route to a coordinator.
29
+ *
30
+ * This is the single authoritative interpretation of the worker envelope. It folds
31
+ * together every signal that previously lived in inline branches:
32
+ * - runtime stamps (meshNodeFor / meshNodeId)
33
+ * - the coordinator anchor (meshCoordinatorDaemonId) and launch marker (launchedByCoordinator,
34
+ * meshCoordinatorNodeId) — any one proves delegation even if the node/mesh stamp was dropped
35
+ * - direct-dispatch recovery: a coordinator session that is itself a dispatch target
36
+ * - workspace→mesh fallback when no runtime mesh id survived
37
+ *
38
+ * Returns isDelegate=false (with a rejectionReason) instead of throwing, so the caller
39
+ * can either ignore non-delegate events or surface a diagnostic.
40
+ */
41
+ export declare function resolveWorkerDelegateRouting(components: DaemonComponents, instanceId: string, deps: ResolveDeps): WorkerDelegateRouting;
42
+ /** Ledger stream that collects delivery_unroutable diagnostics (no real mesh id exists for them). */
43
+ export declare const UNROUTABLE_DIAGNOSTIC_STREAM = "__unroutable__";
44
+ export declare function __resetUnroutableDiagnosticsForTests(): void;
45
+ /** True only for rejections that represent a silently-dropped delegate event worth a diagnostic. */
46
+ export declare function isUnroutableDelegateRejection(routing: WorkerDelegateRouting): boolean;
47
+ /**
48
+ * R4: record that a worker event with a valid envelope could not be routed to a coordinator.
49
+ * Writes a `delivery_unroutable` ledger entry (deduped within a short window) so operators see
50
+ * WHY a completion never arrived instead of it vanishing. No-op for non-diagnostic rejections.
51
+ */
52
+ export declare function recordUnroutableDelegateEvent(routing: WorkerDelegateRouting, eventName: string): boolean;
53
+ export interface UnroutableDeliveryDiagnostic {
54
+ timestamp: string;
55
+ event: string;
56
+ sessionId?: string;
57
+ workspace?: string;
58
+ coordinatorDaemonId?: string;
59
+ }
60
+ /**
61
+ * R4 visibility: recent delivery_unroutable diagnostics, newest first. Surfaced in mesh_status
62
+ * so an operator/coordinator can see that completions were dropped (envelope present, mesh
63
+ * unresolved) rather than the drops being invisible in a ledger nobody reads. The diagnostics
64
+ * live in a single shared stream because an unroutable event has no resolvable mesh.
65
+ */
66
+ export declare function getRecentUnroutableDeliveries(opts?: {
67
+ sinceMs?: number;
68
+ limit?: number;
69
+ }): UnroutableDeliveryDiagnostic[];
70
+ export {};
@@ -0,0 +1,584 @@
1
+ import type { MeshTaskStatus, MeshWorkQueueEntry } from './mesh-work-queue.js';
2
+ export interface MeshInflightHoldRow {
3
+ taskId: string;
4
+ meshId: string | null;
5
+ holdReason: string | null;
6
+ heldAt: number | null;
7
+ firstIdleSinceAck: number | null;
8
+ readFailureCount: number | null;
9
+ updatedAt: number | null;
10
+ }
11
+ export declare class MeshRuntimeStore {
12
+ private static instance;
13
+ private readonly db;
14
+ private readonly dbPath;
15
+ private readonly migratedMeshIds;
16
+ private readonly idleReminderState;
17
+ private fingerprintSweepCounter;
18
+ private walWriteCounter;
19
+ private toolCallLogCounter;
20
+ private static readonly WAL_CHECK_INTERVAL;
21
+ private static readonly WAL_MAX_BYTES;
22
+ private constructor();
23
+ private static loggedGetInstanceFailure;
24
+ static getInstance(): MeshRuntimeStore;
25
+ static resetForTests(): void;
26
+ close(): void;
27
+ transaction<T>(fn: () => T): T;
28
+ private migrate;
29
+ private tableColumns;
30
+ /**
31
+ * MESH-ISOLATION-LEAK migration. Two tables historically lacked a `mesh_id` column,
32
+ * letting one machine that belongs to multiple meshes (multiple repos) leak rows
33
+ * across meshes. Both migrations are idempotent and run on every boot — the column
34
+ * check short-circuits once the new schema is in place.
35
+ */
36
+ private migrateMeshIsolationColumns;
37
+ hasCompletionFingerprint(meshId: string, fingerprint: string): boolean;
38
+ recordCompletionFingerprint(meshId: string, fingerprint: string, ttlMs: number): void;
39
+ sweepExpiredFingerprints(): void;
40
+ private maybeCheckpointWal;
41
+ private ensureLegacyQueueMigrated;
42
+ getQueueEntries(meshId: string, statuses?: MeshTaskStatus[]): MeshWorkQueueEntry[];
43
+ getQueueRevision(meshId: string): string;
44
+ replaceQueue(meshId: string, queue: MeshWorkQueueEntry[]): void;
45
+ deleteQueue(meshId: string): void;
46
+ insertQueueEntry(entry: MeshWorkQueueEntry): void;
47
+ updateQueueEntry(entry: MeshWorkQueueEntry): void;
48
+ findQueueEntryById(meshId: string, id: string): MeshWorkQueueEntry | null;
49
+ hasActiveAssignment(meshId: string, sessionId: string, nodeId: string): boolean;
50
+ /** A session may only execute one task at a time, regardless of task mode. */
51
+ private hasActiveSessionAssignment;
52
+ /** A node may only execute one write task at a time (worktree isolation). */
53
+ private hasActiveNodeAssignment;
54
+ /**
55
+ * Count active (status='assigned') tasks on a node, regardless of provider or
56
+ * task mode. This is the load metric for least-loaded / round-robin ranking:
57
+ * the scheduler prefers the node with the fewest active assignments so
58
+ * untargeted work spreads instead of piling onto whichever node asks first.
59
+ */
60
+ nodeActiveAssignmentCount(meshId: string, nodeId: string): number;
61
+ /**
62
+ * O(1) count of queue tasks in 'pending' status for a mesh. A COUNT(*) over the
63
+ * indexed status column, so it avoids JSON.parse-ing every queue row — used as a
64
+ * cheap guard before the reconcile loop runs a full triggerMeshQueue scan.
65
+ */
66
+ pendingQueueTaskCount(meshId: string): number;
67
+ /**
68
+ * Read the current per-mesh round-robin cursor (0 when unset). Used to rotate
69
+ * the tie-break winner among nodes tied at the least load.
70
+ */
71
+ getSchedulerCursor(meshId: string): number;
72
+ /**
73
+ * Atomically advance the per-mesh round-robin cursor by one and return the
74
+ * value that was current BEFORE the bump (the value the caller should rotate
75
+ * by for this pass). UPSERT keeps it lock-free across concurrent passes.
76
+ */
77
+ bumpSchedulerCursor(meshId: string): number;
78
+ private mapInflightHoldRow;
79
+ upsertInflightHold(entry: {
80
+ taskId: string;
81
+ meshId?: string | null;
82
+ holdReason?: string | null;
83
+ heldAt?: number | null;
84
+ firstIdleSinceAck?: number | null;
85
+ readFailureCount?: number | null;
86
+ }): void;
87
+ getInflightHold(taskId: string): MeshInflightHoldRow | null;
88
+ listInflightHoldsByMesh(meshId: string): MeshInflightHoldRow[];
89
+ deleteInflightHold(taskId: string): void;
90
+ /**
91
+ * Count active (status='assigned') tasks on a (node, provider) combination,
92
+ * matched by the assignedProviderType stamped on the payload at claim time.
93
+ * Drives the per-(node, provider) maxParallel cap (RepoMeshNodePolicy
94
+ * providerRoles). The active-assignment set for a single node is tiny, so
95
+ * parsing payloads here is cheap and avoids a schema migration. Pre-cap legacy
96
+ * rows (no provider stamp) and other providers on the same node do not consume
97
+ * this provider's budget, so the cap is fully backward compatible.
98
+ */
99
+ private activeProviderAssignmentCount;
100
+ claimNextQueueTask(meshId: string, nodeId: string, sessionId: string, capabilityTags?: string[], opts?: {
101
+ providerType?: string;
102
+ providerMaxParallel?: number;
103
+ nodeIsWorktree?: boolean;
104
+ }): MeshWorkQueueEntry | null;
105
+ getQueueStatsByStatus(meshId: string): {
106
+ status: string;
107
+ count: number;
108
+ }[];
109
+ getActiveAssignmentDetails(meshId: string): Array<{
110
+ id: string;
111
+ nodeId?: string;
112
+ sessionId?: string;
113
+ message: string;
114
+ }>;
115
+ /**
116
+ * Resolve the `assigned` queue row a completion event belongs to.
117
+ *
118
+ * Clock-skew safety (C2): a completion event's `occurredAtIso` carries the
119
+ * REMOTE WORKER's clock, while `updated_at` carries the COORDINATOR's clock
120
+ * (set at assignment and re-bumped on every mutation). For a remote node,
121
+ * coordinator-clock > worker-clock skew used to make an `updated_at <= occurredAt`
122
+ * filter return nothing, stranding the finished task as `assigned` forever.
123
+ *
124
+ * We therefore NEVER filter completion-matching on the mutable `updated_at`:
125
+ * 1. If `taskId` is given, match the exact `assigned` row by id (no time filter).
126
+ * 2. Otherwise a session holds at most one `assigned` task — match it without a
127
+ * time filter. If several exist (shouldn't normally), disambiguate by the
128
+ * IMMUTABLE `dispatchTimestamp`: latest `dispatchTimestamp <= occurredAt`,
129
+ * and if skew makes ALL of them later than `occurredAt`, fall back to the
130
+ * most-recent `dispatchTimestamp` rather than returning null.
131
+ */
132
+ findAssignedBySession(meshId: string, sessionId: string, occurredAtIso?: string, taskId?: string): MeshWorkQueueEntry | null;
133
+ private toRow;
134
+ insertDirectDispatch(entry: {
135
+ taskId: string;
136
+ meshId: string;
137
+ nodeId?: string;
138
+ sessionId?: string;
139
+ providerType?: string;
140
+ message: string;
141
+ taskMode?: string;
142
+ via: string;
143
+ dispatchedToIdleSession?: boolean;
144
+ dispatchedAt: string;
145
+ }): void;
146
+ getActiveDirectDispatches(meshId: string): Array<{
147
+ taskId: string;
148
+ meshId: string;
149
+ nodeId: string | null;
150
+ sessionId: string | null;
151
+ providerType: string | null;
152
+ message: string;
153
+ taskMode: string | null;
154
+ via: string;
155
+ status: string;
156
+ dispatchedToIdleSession: boolean;
157
+ dispatchedAt: string;
158
+ updatedAt: string;
159
+ }>;
160
+ updateDirectDispatchStatus(meshId: string, sessionId: string, status: 'acked' | 'completed' | 'failed' | 'stale', taskId?: string): void;
161
+ /**
162
+ * MESH-DISPATCH-MISROUTE (fix 3, consumer residual): resolve the task_id of the SINGLE
163
+ * non-terminal direct dispatch a session owns. Returns the task_id only when the session
164
+ * holds exactly ONE active ('dispatched'/'acked') row — the case where a taskId-less
165
+ * lifecycle event (a legacy/relayed worker whose producer never stamped meshActiveTaskId)
166
+ * unambiguously belongs to that one dispatch. With zero rows there is nothing to ack; with
167
+ * two or more (a re-dispatch/nudge sibling) the firing event's owner is ambiguous, so we
168
+ * return null and the caller MUST NOT fall back to the session_id sweep that would flip a
169
+ * sibling row ("may flip a sibling dispatch row"). This narrows the legacy fallback to the
170
+ * only safe case instead of removing the producer-side TASKIDLESS stamp's safety net.
171
+ */
172
+ getSoleActiveDirectDispatchTaskId(meshId: string, sessionId: string): string | null;
173
+ cleanupTerminalDirectDispatches(olderThanMs: number): void;
174
+ deleteDirectDispatches(meshId: string): void;
175
+ /**
176
+ * Delete specific direct dispatch rows by taskId for a mesh. Used by the staleDirect prune
177
+ * path to remove orphaned/terminal dispatch records whose node/session is no longer in the
178
+ * live mesh. Returns the number of rows actually deleted. No-op for an empty taskId list.
179
+ */
180
+ deleteDirectDispatchesByTaskId(meshId: string, taskIds: string[]): number;
181
+ markStaleDirectDispatches(meshId: string, olderThanMs: number): void;
182
+ setRemoteIdleSession(meshId: string, nodeId: string, sessionId: string, providerType: string, expiresAt: number, metadata?: any): void;
183
+ getRemoteIdleSessions(meshId: string): Array<{
184
+ nodeId: string;
185
+ sessionId: string;
186
+ providerType: string;
187
+ expiresAt: number;
188
+ metadata?: any;
189
+ }>;
190
+ deleteRemoteIdleSession(meshId: string, nodeId: string, sessionId: string): void;
191
+ pruneExpiredRemoteIdleSessions(): void;
192
+ insertSessionDelivery(entry: {
193
+ id: string;
194
+ meshId: string;
195
+ nodeId?: string;
196
+ sessionId?: string;
197
+ providerType?: string;
198
+ taskId?: string;
199
+ kind: string;
200
+ priority?: number;
201
+ message: string;
202
+ status: string;
203
+ deliverAfter?: string;
204
+ expiresAt?: string;
205
+ sourceCoordinatorSessionId?: string;
206
+ sourceCoordinatorDaemonId?: string;
207
+ createdAt: string;
208
+ updatedAt: string;
209
+ }): void;
210
+ updateSessionDeliveryStatus(id: string, status: string, opts?: {
211
+ lastError?: string;
212
+ incrementAttempt?: boolean;
213
+ }): void;
214
+ getActiveSessionDeliveries(meshId: string, sessionId?: string): Array<{
215
+ id: string;
216
+ meshId: string;
217
+ nodeId: string | null;
218
+ sessionId: string | null;
219
+ providerType: string | null;
220
+ taskId: string | null;
221
+ kind: string;
222
+ priority: number;
223
+ message: string;
224
+ status: string;
225
+ deliverAfter: string | null;
226
+ expiresAt: string | null;
227
+ attemptCount: number;
228
+ sourceCoordinatorSessionId: string | null;
229
+ sourceCoordinatorDaemonId: string | null;
230
+ lastError: string | null;
231
+ createdAt: string;
232
+ updatedAt: string;
233
+ }>;
234
+ /**
235
+ * Bug B watchdog support: true when at least one delivery record for the task has
236
+ * reached a confirmed-handed-off status (delivered / acked / completed). The
237
+ * assigned-stranded watchdog uses this to distinguish a dispatch that was never
238
+ * confirmed (reclaimable) from one that WAS handed to the worker (a genuinely
239
+ * in-flight or completion-lost task, which is PHASE 4's responsibility, not this
240
+ * watchdog's). Indexed by (mesh_id, task_id).
241
+ */
242
+ taskHasConfirmedDelivery(meshId: string, taskId: string): boolean;
243
+ /**
244
+ * DELIVERED-NOT-CONSUMED re-drive support: true when at least one delivery record for
245
+ * the task has reached a CONSUMED status ('acked' / 'completed'). Distinct from
246
+ * {@link taskHasConfirmedDelivery} ('delivered' | 'acked' | 'completed'): a delivery is
247
+ * flipped to 'delivered' the instant the transport hands the dispatch off, but only
248
+ * flipped to 'acked' when the worker's agent:generating_started event arrives (see the
249
+ * generating_started handler in mesh-event-forwarding) — i.e. when the session has
250
+ * actually begun the turn. That distinction is the cross-daemon consumption signal the
251
+ * short-grace re-drive uses: a row whose delivery is 'delivered' but never 'acked' was
252
+ * handed to a REMOTE worker that never started generating — the remote autoLaunch
253
+ * delivered≠consumed gap — even when the session's busy verdict is UNKNOWN (not locally
254
+ * observable). Indexed by (mesh_id, task_id).
255
+ */
256
+ taskDeliveryConsumed(meshId: string, taskId: string): boolean;
257
+ expireStaleSessionDeliveries(meshId: string): void;
258
+ deleteSessionDeliveries(meshId: string): void;
259
+ /**
260
+ * Record a mesh tool call and check whether this mesh+tool combination is
261
+ * being called too rapidly (sliding window rate guard).
262
+ *
263
+ * Returns a rate-limit advisory string when the call rate is too high, null otherwise.
264
+ * windowMs: sliding window size in ms (default 10s)
265
+ * maxCalls: max allowed calls within the window (default 5)
266
+ */
267
+ recordMeshToolCall(opts: {
268
+ meshId: string;
269
+ tool: string;
270
+ sessionId?: string | null;
271
+ windowMs?: number;
272
+ maxCalls?: number;
273
+ }): {
274
+ rateLimitExceeded: boolean;
275
+ callsInWindow: number;
276
+ advisory: string | null;
277
+ };
278
+ /**
279
+ * Prune tool call log entries older than the given age in ms.
280
+ * Returns the number of rows deleted. Also used by the periodic retention
281
+ * sweep (pruneMeshRuntimeRetention) — the in-write sweep in recordMeshToolCall
282
+ * only fires every 200 calls and only covers the rate-limit window, so a
283
+ * quiet mesh otherwise accumulates rows indefinitely.
284
+ */
285
+ pruneToolCallLog(olderThanMs: number): number;
286
+ /**
287
+ * Retention prune for mesh_event_ledger (SoT 1-11 (b)). The ledger is append-only
288
+ * with NO lifecycle GC of its own, so lifecycle events accumulate without bound
289
+ * (the dominant mesh-runtime.db growth). Every production reader is bounded to a
290
+ * recent window (readLedgerEntries tail/limit ≤ a few hundred; task-stats /
291
+ * terminal-evidence scans look at recent tasks), so rows past a generous age only
292
+ * cost space. Excluded from deletion — retained forever:
293
+ * - coordinator_operating_note / _tombstone: runtime-accumulated lessons whose
294
+ * whole point is surviving restarts; a tombstone must also outlive the notes
295
+ * it retracts.
296
+ * Timestamps are ISO-8601 TEXT, so the lexicographic `<` cutoff is a correct time
297
+ * comparison; a malformed timestamp compares greater than any ISO date and is
298
+ * conservatively retained. Returns rows deleted.
299
+ */
300
+ pruneEventLedger(olderThanMs: number): number;
301
+ /**
302
+ * Retention prune for TERMINAL (completed/cancelled/failed) mesh_queue rows
303
+ * (SoT 1-11 (b)). Terminal rows are kept as recent history (mesh_task_history,
304
+ * completion-dedup taskId lookups) but nothing ever deletes them, so the queue
305
+ * table grows monotonically. Rows past the retention window serve no reader —
306
+ * every dedup/attribution path operates on recent tasks — EXCEPT as a dependency
307
+ * anchor: taskDependenciesSatisfied resolves dependsOn by id and treats a MISSING
308
+ * row as not-completed, so deleting a completed row that a still-live
309
+ * (pending/assigned) row depends on would permanently strand the dependent.
310
+ * Those ids are collected first and excluded. Returns rows deleted.
311
+ */
312
+ pruneTerminalQueueEntries(olderThanMs: number): number;
313
+ appendLedgerEntry(entry: {
314
+ id: string;
315
+ meshId: string;
316
+ timestamp: string;
317
+ kind: string;
318
+ nodeId?: string | null;
319
+ sessionId?: string | null;
320
+ providerType?: string | null;
321
+ payload?: unknown;
322
+ }): void;
323
+ readLedgerEntries(meshId: string, opts?: {
324
+ tail?: number;
325
+ since?: string;
326
+ kind?: string;
327
+ limit?: number;
328
+ }): Array<{
329
+ id: string;
330
+ meshId: string;
331
+ timestamp: string;
332
+ kind: string;
333
+ nodeId: string | null;
334
+ sessionId: string | null;
335
+ providerType: string | null;
336
+ payload: unknown;
337
+ }>;
338
+ /**
339
+ * G2 read cutover: read ledger entries in append order (oldest first),
340
+ * matching legacy JSONL file-order semantics. Ties on the same timestamp
341
+ * are broken by rowid (insertion order), preserving the positional
342
+ * guarantee that mesh-events relies on for same-millisecond entries.
343
+ */
344
+ readLedgerEntriesOrdered(meshId: string, opts?: {
345
+ since?: string;
346
+ kinds?: string[];
347
+ tail?: number;
348
+ }): Array<{
349
+ id: string;
350
+ meshId: string;
351
+ timestamp: string;
352
+ kind: string;
353
+ nodeId: string | null;
354
+ sessionId: string | null;
355
+ providerType: string | null;
356
+ payload: unknown;
357
+ }>;
358
+ /** Remove all ledger entries for a mesh (mesh deletion / test cleanup). */
359
+ clearLedgerForMesh(meshId: string): number;
360
+ /** G2: remove entries moved to the JSONL archive so the SQLite runtime set mirrors the active ledger. */
361
+ deleteLedgerEntries(meshId: string, ids: string[]): number;
362
+ hasLedgerEntry(meshId: string, id: string): boolean;
363
+ ledgerEntryCount(meshId: string): number;
364
+ importLedgerEntries(entries: Array<{
365
+ id: string;
366
+ meshId: string;
367
+ timestamp: string;
368
+ kind: string;
369
+ nodeId?: string | null;
370
+ sessionId?: string | null;
371
+ providerType?: string | null;
372
+ payload?: unknown;
373
+ }>): number;
374
+ /**
375
+ * G4: Read a bounded, cursor-addressable ledger slice directly from the SQLite
376
+ * mesh_event_ledger table. This is the P2P reconcile read path; JSONL files are
377
+ * retained as export/import/debug/legacy artifacts only.
378
+ *
379
+ * The return shape is structurally compatible with MeshLedgerSlice so callers
380
+ * in mesh-tools.ts can pass it directly to buildMeshLedgerReplicaEvidence.
381
+ */
382
+ readLedgerSlice(meshId: string, opts?: {
383
+ afterId?: string;
384
+ since?: string;
385
+ kind?: string;
386
+ limit?: number;
387
+ }): {
388
+ protocol: 'adhdev.mesh.ledger.slice.v1';
389
+ meshId: string;
390
+ entries: Array<{
391
+ id: string;
392
+ meshId: string;
393
+ timestamp: string;
394
+ kind: string;
395
+ nodeId: string | null;
396
+ sessionId: string | null;
397
+ providerType: string | null;
398
+ payload: unknown;
399
+ }>;
400
+ cursor: {
401
+ afterId: string | null;
402
+ nextAfterId: string | null;
403
+ limit: number;
404
+ hasMore: boolean;
405
+ };
406
+ sourceOfTruth: {
407
+ kind: 'local_sqlite';
408
+ table: 'mesh_event_ledger';
409
+ bounded: true;
410
+ maxLimit: number;
411
+ };
412
+ };
413
+ insertPendingEvent(event: {
414
+ id: string;
415
+ meshId: string;
416
+ coordinatorDaemonId?: string | null;
417
+ event: string;
418
+ payload?: unknown;
419
+ fingerprint?: string | null;
420
+ queuedAt: number;
421
+ protocolVersion?: string | null;
422
+ eventId?: string | null;
423
+ scope?: string | null;
424
+ dispatchedBy?: string | null;
425
+ intendedFor?: string | null;
426
+ }): boolean;
427
+ /**
428
+ * Drain undrained pending events for a mesh, atomically marking them drained.
429
+ * When `opts.onlyEvents` is supplied, ONLY rows whose `event` is in that set are
430
+ * drained — the rest stay queued (drained=0) for a later drain. This is how the
431
+ * reconcile loop force-drains terminal/force-inject events into a *generating*
432
+ * coordinator while leaving non-force progress events for the coordinator's next
433
+ * idle transition. Filtering happens inside the same transaction as the
434
+ * drained=1 marking, so force-drain + a concurrent full drain can never both
435
+ * consume the same row.
436
+ */
437
+ drainPendingEvents(meshId: string, coordinatorDaemonId?: string | null | ReadonlyArray<string>, opts?: {
438
+ onlyEvents?: ReadonlySet<string>;
439
+ }): Array<{
440
+ id: string;
441
+ event: string;
442
+ payload: unknown;
443
+ }>;
444
+ /** Non-destructive peek — returns undrained events without marking them drained. */
445
+ peekPendingEvents(meshId: string, coordinatorDaemonId?: string | null | ReadonlyArray<string>): Array<{
446
+ id: string;
447
+ event: string;
448
+ payload: unknown;
449
+ }>;
450
+ hasPendingEventFingerprint(meshId: string, fingerprint: string): boolean;
451
+ /**
452
+ * B3a — v2 eventId idempotency. Returns true when a row with this event_id has
453
+ * ALREADY been drained (drained = 1) for the mesh. Drained rows are retained
454
+ * (soft-marked, not deleted until mesh deletion), so this is a durable, restart-
455
+ * surviving dedup: a v2 event whose eventId was already consumed is skipped on
456
+ * re-delivery even when its content fingerprint differs. Scoped by mesh_id +
457
+ * the partial event_id index (idx_mesh_pending_events_event_id).
458
+ */
459
+ hasDrainedEventId(meshId: string, eventId: string): boolean;
460
+ /**
461
+ * B3a — snapshot of the v2 event_ids ALREADY drained (drained = 1) for the mesh.
462
+ * Taken BEFORE a drain call marks the current batch drained=1, so the resulting
463
+ * set names only PRIOR drains — the re-delivery dedup baseline. (Reading it after
464
+ * the drain would self-match the batch's own freshly-drained rows.) Non-v2 rows
465
+ * have a NULL event_id and are excluded by the index/WHERE.
466
+ */
467
+ drainedEventIdsForMesh(meshId: string): Set<string>;
468
+ upsertMission(mission: {
469
+ id: string;
470
+ meshId: string;
471
+ title: string;
472
+ goal?: string;
473
+ status?: string;
474
+ source?: string;
475
+ }): void;
476
+ getMission(meshId: string, missionId: string): {
477
+ id: string;
478
+ meshId: string;
479
+ title: string;
480
+ goal: string;
481
+ status: string;
482
+ source?: string;
483
+ closeCandidateEmittedAt?: string;
484
+ createdAt: string;
485
+ updatedAt: string;
486
+ } | null;
487
+ getMissions(meshId: string, statuses?: string[]): Array<{
488
+ id: string;
489
+ meshId: string;
490
+ title: string;
491
+ goal: string;
492
+ status: string;
493
+ source?: string;
494
+ closeCandidateEmittedAt?: string;
495
+ createdAt: string;
496
+ updatedAt: string;
497
+ }>;
498
+ /**
499
+ * G3: set/clear the mission_close_candidate idempotency marker. Passing an ISO
500
+ * timestamp records that the all-terminal nudge has been emitted for this mission;
501
+ * passing null clears it (mission returned to a non-terminal state, so a future
502
+ * re-completion may nudge again). Touches ONLY this column — never the mission's
503
+ * updated_at — so the marker write is invisible to updatedAt-ordered surfaces and
504
+ * does not masquerade as mission activity. Returns rows changed (0 if no such mission).
505
+ */
506
+ setMissionCloseCandidateEmittedAt(meshId: string, missionId: string, emittedAt: string | null): number;
507
+ /**
508
+ * Read the last idle-active-mission-reminder debounce marker for a mesh, or null if
509
+ * none has fired this process. In-memory only (see idleReminderState) — best-effort
510
+ * spam guard for a coordinator nudge, intentionally not SQLite-backed.
511
+ */
512
+ getIdleReminderState(meshId: string): {
513
+ emittedAt: number;
514
+ missionSetHash: string;
515
+ } | null;
516
+ /** Record that an idle-active-mission reminder just fired for a mesh (debounce marker). */
517
+ setIdleReminderState(meshId: string, state: {
518
+ emittedAt: number;
519
+ missionSetHash: string;
520
+ }): void;
521
+ /** Clear the idle-reminder debounce marker for a mesh — mesh deletion / test cleanup. */
522
+ clearIdleReminderState(meshId: string): void;
523
+ /** Remove all missions for a mesh — mesh deletion / test cleanup. */
524
+ clearMissionsForMesh(meshId: string): number;
525
+ /** Remove all pending-event rows (drained included) for a mesh — mesh deletion / test cleanup. */
526
+ clearPendingEventsForMesh(meshId: string): number;
527
+ pendingEventCount(meshId: string): number;
528
+ /**
529
+ * Mark specific pending-event rows drained by id (ack). Used by the
530
+ * unresolved-delegate durable-forward outbox: an event is peeked (not drained)
531
+ * while its push to the coordinator is unconfirmed, then marked drained ONLY
532
+ * after the push is acked. A failed push leaves the row undrained so the next
533
+ * reconcile tick retries it. Returns the number of rows newly marked drained.
534
+ */
535
+ markPendingEventsDrainedById(ids: ReadonlyArray<string>): number;
536
+ /**
537
+ * Hard-delete pending-event rows by id (including the dedup fingerprint history).
538
+ * Used to expire an unresolved-delegate outbox entry that has exhausted its retry
539
+ * budget — fully removing it frees the fingerprint so a genuinely new completion
540
+ * for the same task could be re-queued later. Returns the number of rows deleted.
541
+ */
542
+ deletePendingEventsById(ids: ReadonlyArray<string>): number;
543
+ /**
544
+ * Retention prune for mesh_pending_events. This table has no lifecycle GC of its
545
+ * own: a drained row is soft-marked (drained=1) and RETAINED — deliberately, so
546
+ * drainedEventIdsForMesh() has a durable v2-eventId dedup baseline — and an
547
+ * undrained row queued for a coordinator that never returned (a dead/evicted
548
+ * coordinator identity) stays drained=0 forever. Both accumulate without bound
549
+ * (observed: tens of thousands of rows, mostly stale). This is the missing
550
+ * retention step. Two independent windows:
551
+ *
552
+ * - drained rows older than `drainedOlderThanMs`: the coordinator consumed them
553
+ * long ago; the only thing they still back is the eventId re-delivery guard,
554
+ * which is only meaningful for the recent past (a re-delivery of a week-old
555
+ * event cannot occur — its producer session is long gone). Safe to delete.
556
+ * - UNDRAINED rows older than `undrainedOlderThanMs` (a much wider window):
557
+ * these are orphaned events for a coordinator identity that never drained
558
+ * them. Kept wide so a genuinely-offline-but-returning coordinator still
559
+ * receives its backlog; only genuinely unrecoverable orphans are swept.
560
+ *
561
+ * Both windows key off `queued_at` (always present) — `drained_at` can be NULL on
562
+ * legacy rows. Returns the number of rows deleted. Best-effort / idempotent:
563
+ * running it repeatedly with nothing to prune is a cheap no-op.
564
+ */
565
+ prunePendingEvents(opts: {
566
+ drainedOlderThanMs: number;
567
+ undrainedOlderThanMs: number;
568
+ }): number;
569
+ }
570
+ export declare const MESH_EVENT_LEDGER_RETENTION_MS: number;
571
+ export declare const MESH_TOOL_CALL_LOG_RETENTION_MS: number;
572
+ export declare const MESH_TERMINAL_QUEUE_RETENTION_MS: number;
573
+ /**
574
+ * Periodic retention sweep for the mesh-runtime.db tables that previously had no
575
+ * lifecycle GC (event ledger, tool-call log, terminal queue rows). Runs on the SAME
576
+ * cadence as the pending-events retention prune (the hourly mesh-event maintenance
577
+ * sweep in mesh-event-forwarding.ts). Best-effort and idempotent: a store failure
578
+ * degrades to a no-op with one warn; an empty table costs three cheap DELETEs.
579
+ */
580
+ export declare function pruneMeshRuntimeRetention(): {
581
+ ledger: number;
582
+ toolCalls: number;
583
+ terminalQueue: number;
584
+ };