@adhdev/daemon-core 0.9.82-rc.46 → 0.9.82-rc.461

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 (440) hide show
  1. package/dist/boot/daemon-lifecycle.d.ts +9 -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 +68 -2
  8. package/dist/cli-adapters/cli-script-runner.d.ts +117 -0
  9. package/dist/cli-adapters/cli-state-engine.d.ts +200 -0
  10. package/dist/cli-adapters/provider-cli-adapter.d.ts +126 -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 +7 -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 +25 -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-refine.d.ts +137 -0
  56. package/dist/commands/router-worktree-cleanup.d.ts +133 -0
  57. package/dist/commands/router.d.ts +241 -12
  58. package/dist/commands/upgrade-helper.d.ts +41 -1
  59. package/dist/config/chat-history.d.ts +9 -0
  60. package/dist/config/config.d.ts +19 -0
  61. package/dist/config/mesh-config.d.ts +136 -1
  62. package/dist/config/mesh-json-config.d.ts +199 -0
  63. package/dist/config/registry-resolver.d.ts +54 -0
  64. package/dist/config/repo-settings.d.ts +77 -0
  65. package/dist/daemon/dev-server.d.ts +0 -2
  66. package/dist/detection/cli-detector.d.ts +17 -0
  67. package/dist/detection/ide-detector.d.ts +13 -0
  68. package/dist/detection/win32-ide-version.d.ts +37 -0
  69. package/dist/git/change-impact-config.d.ts +159 -0
  70. package/dist/git/git-commands.d.ts +26 -2
  71. package/dist/git/git-diff.d.ts +6 -0
  72. package/dist/git/git-executor.d.ts +11 -0
  73. package/dist/git/git-status.d.ts +57 -0
  74. package/dist/git/git-types.d.ts +2 -50
  75. package/dist/git/git-worktree.d.ts +71 -1
  76. package/dist/git/index.d.ts +3 -1
  77. package/dist/index.d.ts +67 -15
  78. package/dist/index.js +58583 -25541
  79. package/dist/index.js.map +1 -1
  80. package/dist/index.mjs +58207 -25332
  81. package/dist/index.mjs.map +1 -1
  82. package/dist/installer.d.ts +1 -4
  83. package/dist/ipc/local-ipc-server.d.ts +91 -0
  84. package/dist/launch.d.ts +1 -1
  85. package/dist/logging/async-batch-writer.d.ts +10 -0
  86. package/dist/logging/debug-config.d.ts +16 -0
  87. package/dist/logging/log-redactor.d.ts +24 -0
  88. package/dist/logging/log-tail-reader.d.ts +81 -0
  89. package/dist/logging/logger.d.ts +1 -1
  90. package/dist/mesh/contracts.d.ts +230 -0
  91. package/dist/mesh/coordinator-prompt.d.ts +76 -0
  92. package/dist/mesh/coordinator-registry.d.ts +59 -0
  93. package/dist/mesh/mesh-active-work.d.ts +174 -0
  94. package/dist/mesh/mesh-clone-grace.d.ts +8 -0
  95. package/dist/mesh/mesh-coordinator-config.d.ts +21 -0
  96. package/dist/mesh/mesh-delivery-policy.d.ts +131 -0
  97. package/dist/mesh/mesh-event-classify.d.ts +7 -0
  98. package/dist/mesh/mesh-event-forwarding.d.ts +41 -0
  99. package/dist/mesh/mesh-event-trace.d.ts +21 -0
  100. package/dist/mesh/mesh-events-coordinator.d.ts +4 -0
  101. package/dist/mesh/mesh-events-pending.d.ts +155 -0
  102. package/dist/mesh/mesh-events-stale.d.ts +61 -0
  103. package/dist/mesh/mesh-events-utils.d.ts +75 -0
  104. package/dist/mesh/mesh-events.d.ts +6 -49
  105. package/dist/mesh/mesh-fast-forward.d.ts +81 -0
  106. package/dist/mesh/mesh-host-ownership.d.ts +29 -0
  107. package/dist/mesh/mesh-init.d.ts +128 -0
  108. package/dist/mesh/mesh-ledger-reconciliation.d.ts +23 -4
  109. package/dist/mesh/mesh-ledger.d.ts +133 -1
  110. package/dist/mesh/mesh-magi-status.d.ts +63 -0
  111. package/dist/mesh/mesh-missions.d.ts +189 -0
  112. package/dist/mesh/mesh-node-identity.d.ts +310 -0
  113. package/dist/mesh/mesh-queue-assignment.d.ts +158 -0
  114. package/dist/mesh/mesh-reconcile-loop.d.ts +80 -0
  115. package/dist/mesh/mesh-refine-batch.d.ts +68 -0
  116. package/dist/mesh/mesh-refine-gates.d.ts +428 -0
  117. package/dist/mesh/mesh-refine-status.d.ts +62 -0
  118. package/dist/mesh/mesh-review-inbox.d.ts +90 -0
  119. package/dist/mesh/mesh-routing.d.ts +70 -0
  120. package/dist/mesh/mesh-runtime-store.d.ts +493 -0
  121. package/dist/mesh/mesh-scheduling-runtime.d.ts +78 -0
  122. package/dist/mesh/mesh-task-inflight.d.ts +46 -0
  123. package/dist/mesh/mesh-task-stats.d.ts +49 -0
  124. package/dist/mesh/mesh-unresolved-forward-outbox.d.ts +30 -0
  125. package/dist/mesh/mesh-warmup-deadline.d.ts +68 -0
  126. package/dist/mesh/mesh-work-queue.d.ts +318 -5
  127. package/dist/mesh/preview-freshness.d.ts +28 -0
  128. package/dist/mesh/refine-config.d.ts +216 -0
  129. package/dist/mesh/worktree-bootstrap-config.d.ts +219 -0
  130. package/dist/providers/acp-provider-instance.d.ts +5 -0
  131. package/dist/providers/approval-utils.d.ts +45 -0
  132. package/dist/providers/chat-message-normalization.d.ts +58 -1
  133. package/dist/providers/cli-provider-instance.d.ts +290 -3
  134. package/dist/providers/contracts.d.ts +149 -6
  135. package/dist/providers/external-sources.d.ts +71 -0
  136. package/dist/providers/manual-attendance.d.ts +79 -0
  137. package/dist/providers/native-history/antigravity-claim-registry.d.ts +28 -0
  138. package/dist/providers/native-history/antigravity-cli-transcript.d.ts +137 -0
  139. package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
  140. package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
  141. package/dist/providers/native-history/constants.d.ts +12 -0
  142. package/dist/providers/native-history/dispatcher.d.ts +31 -0
  143. package/dist/providers/native-history/hermes-cli-transcript.d.ts +30 -0
  144. package/dist/providers/native-history/index.d.ts +13 -0
  145. package/dist/providers/provider-instance-manager.d.ts +29 -0
  146. package/dist/providers/provider-instance.d.ts +30 -1
  147. package/dist/providers/provider-loader.d.ts +42 -5
  148. package/dist/providers/provider-trust.d.ts +31 -0
  149. package/dist/providers/read-chat-contract.d.ts +29 -0
  150. package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
  151. package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +86 -0
  152. package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
  153. package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +65 -0
  154. package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
  155. package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
  156. package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
  157. package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
  158. package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
  159. package/dist/providers/sdk/v1/index.d.ts +30 -0
  160. package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
  161. package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
  162. package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
  163. package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
  164. package/dist/providers/sdk/v1/types/common/index.d.ts +203 -0
  165. package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
  166. package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
  167. package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
  168. package/dist/providers/spec/adapter.d.ts +98 -0
  169. package/dist/providers/spec/cli-adapter.d.ts +223 -0
  170. package/dist/providers/spec/evaluator.d.ts +45 -0
  171. package/dist/providers/spec/fsm-driver.d.ts +449 -0
  172. package/dist/providers/spec/fsm-evaluator.d.ts +93 -0
  173. package/dist/providers/spec/fsm-loader.d.ts +14 -0
  174. package/dist/providers/spec/fsm-types.d.ts +202 -0
  175. package/dist/providers/spec/native-history-executor.d.ts +41 -0
  176. package/dist/providers/spec/pre-launch-trust.d.ts +16 -0
  177. package/dist/providers/spec/route.d.ts +4 -0
  178. package/dist/providers/spec/types.d.ts +222 -0
  179. package/dist/providers/status-monitor.d.ts +7 -7
  180. package/dist/providers/transcript-v2.d.ts +176 -0
  181. package/dist/providers/types/interactive-prompt.d.ts +84 -0
  182. package/dist/providers/working-dir.d.ts +17 -0
  183. package/dist/repo-mesh-types.d.ts +598 -12
  184. package/dist/runtime-defaults.d.ts +2 -0
  185. package/dist/session-host/managed-host.d.ts +64 -0
  186. package/dist/session-host/runtime-surface.d.ts +10 -16
  187. package/dist/sessions/registry.d.ts +6 -0
  188. package/dist/shared-types-extra.d.ts +2 -4
  189. package/dist/shared-types.d.ts +86 -55
  190. package/dist/status/normalize.d.ts +1 -1
  191. package/dist/status/normalize.js +1 -0
  192. package/dist/status/normalize.js.map +1 -1
  193. package/dist/status/normalize.mjs +1 -0
  194. package/dist/status/normalize.mjs.map +1 -1
  195. package/dist/status/reporter.d.ts +2 -0
  196. package/dist/status/snapshot.d.ts +26 -0
  197. package/dist/system/hash.d.ts +8 -0
  198. package/dist/system/load-better-sqlite3.d.ts +21 -0
  199. package/dist/types.d.ts +5 -0
  200. package/package.json +11 -4
  201. package/src/agent-stream/poller.ts +2 -3
  202. package/src/agent-stream/provider-adapter.ts +1 -1
  203. package/src/boot/daemon-lifecycle.ts +80 -14
  204. package/src/boot/process-hardening.ts +89 -0
  205. package/src/build-info.ts +73 -0
  206. package/src/chat/source-machine.ts +534 -0
  207. package/src/chat/source-resolver.ts +0 -0
  208. package/src/chat/subscription-updates.ts +20 -1
  209. package/src/cli-adapter-types.d.ts +3 -1
  210. package/src/cli-adapter-types.ts +68 -2
  211. package/src/cli-adapters/cli-script-runner.ts +421 -0
  212. package/src/cli-adapters/cli-state-engine.ts +1246 -0
  213. package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
  214. package/src/cli-adapters/provider-cli-adapter.ts +914 -1144
  215. package/src/cli-adapters/provider-cli-parse.d.ts +2 -0
  216. package/src/cli-adapters/provider-cli-parse.ts +19 -0
  217. package/src/cli-adapters/provider-cli-runtime.ts +56 -7
  218. package/src/cli-adapters/provider-cli-shared.d.ts +4 -0
  219. package/src/cli-adapters/provider-cli-shared.ts +121 -11
  220. package/src/cli-adapters/pty-transport.ts +2 -1
  221. package/src/cli-adapters/pty-write-chunking.ts +106 -0
  222. package/src/cli-adapters/raw-terminal-io.ts +252 -0
  223. package/src/cli-adapters/resolve-executable.ts +204 -0
  224. package/src/cli-adapters/session-host-transport.ts +2 -1
  225. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.ts +63 -29
  226. package/src/cli-adapters/terminal-backends/types.ts +10 -3
  227. package/src/cli-adapters/terminal-screen.ts +16 -81
  228. package/src/commands/chat-commands-debug-bundle.ts +398 -0
  229. package/src/commands/chat-commands-read.ts +2488 -0
  230. package/src/commands/chat-commands-scope.ts +54 -0
  231. package/src/commands/chat-commands-shared.ts +114 -0
  232. package/src/commands/chat-commands-write.ts +891 -0
  233. package/src/commands/chat-commands.ts +19 -1841
  234. package/src/commands/cli-manager.ts +596 -27
  235. package/src/commands/handler.ts +845 -2
  236. package/src/commands/high-family/index.ts +28 -0
  237. package/src/commands/high-family/mesh-coordinator-launch.ts +680 -0
  238. package/src/commands/high-family/mesh-events.ts +89 -0
  239. package/src/commands/high-family/mesh-status.ts +832 -0
  240. package/src/commands/high-family/types.ts +80 -0
  241. package/src/commands/low-family/coordinator-prompt.ts +72 -0
  242. package/src/commands/low-family/daemon-lifecycle.ts +120 -0
  243. package/src/commands/low-family/diagnostics.ts +57 -0
  244. package/src/commands/low-family/index.ts +37 -0
  245. package/src/commands/low-family/mesh-ledger.ts +62 -0
  246. package/src/commands/low-family/mesh-node-logs.ts +87 -0
  247. package/src/commands/low-family/notification.ts +116 -0
  248. package/src/commands/low-family/refine-config.ts +106 -0
  249. package/src/commands/low-family/session-host.ts +274 -0
  250. package/src/commands/low-family/spec-providerdev.ts +217 -0
  251. package/src/commands/low-family/status-meta.ts +112 -0
  252. package/src/commands/low-family/types.ts +39 -0
  253. package/src/commands/med-family/cli-agent.ts +241 -0
  254. package/src/commands/med-family/fast-forward.ts +230 -0
  255. package/src/commands/med-family/ide.ts +163 -0
  256. package/src/commands/med-family/index.ts +37 -0
  257. package/src/commands/med-family/mesh-crud.ts +1287 -0
  258. package/src/commands/med-family/mesh-host-pairing.ts +234 -0
  259. package/src/commands/med-family/mesh-queue.ts +167 -0
  260. package/src/commands/med-family/mesh-restart.ts +92 -0
  261. package/src/commands/med-family/types.ts +153 -0
  262. package/src/commands/mesh-coordinator.ts +334 -124
  263. package/src/commands/router-refine.ts +1711 -0
  264. package/src/commands/router-worktree-cleanup.ts +870 -0
  265. package/src/commands/router.ts +1025 -4070
  266. package/src/commands/stream-commands.ts +8 -0
  267. package/src/commands/upgrade-helper.ts +310 -45
  268. package/src/config/chat-history.ts +493 -24
  269. package/src/config/config.ts +30 -0
  270. package/src/config/mesh-config.ts +632 -23
  271. package/src/config/mesh-json-config.ts +376 -0
  272. package/src/config/recent-activity.ts +8 -2
  273. package/src/config/registry-resolver.ts +100 -0
  274. package/src/config/repo-settings.ts +111 -0
  275. package/src/daemon/dev-auto-implement.ts +3 -2
  276. package/src/daemon/dev-cli-debug.ts +10 -1
  277. package/src/daemon/dev-server.ts +0 -541
  278. package/src/detection/cli-detector.ts +94 -9
  279. package/src/detection/ide-detector.ts +55 -16
  280. package/src/detection/win32-ide-version.ts +106 -0
  281. package/src/git/change-impact-config.ts +354 -0
  282. package/src/git/git-commands.ts +112 -16
  283. package/src/git/git-diff.ts +81 -11
  284. package/src/git/git-executor.ts +12 -0
  285. package/src/git/git-status.ts +767 -48
  286. package/src/git/git-types.ts +14 -62
  287. package/src/git/git-worktree.ts +261 -4
  288. package/src/git/index.ts +17 -0
  289. package/src/index.ts +200 -12
  290. package/src/installer.d.ts +1 -1
  291. package/src/installer.ts +8 -6
  292. package/src/ipc/local-ipc-server.ts +278 -0
  293. package/src/launch.d.ts +1 -1
  294. package/src/launch.ts +37 -28
  295. package/src/logging/async-batch-writer.ts +55 -0
  296. package/src/logging/command-log.ts +7 -5
  297. package/src/logging/debug-config.ts +25 -0
  298. package/src/logging/debug-trace.ts +7 -2
  299. package/src/logging/log-redactor.ts +100 -0
  300. package/src/logging/log-tail-reader.ts +341 -0
  301. package/src/logging/logger.ts +14 -7
  302. package/src/mesh/contracts.ts +469 -0
  303. package/src/mesh/coordinator-prompt.ts +554 -34
  304. package/src/mesh/coordinator-registry.ts +121 -0
  305. package/src/mesh/mesh-active-work.ts +656 -0
  306. package/src/mesh/mesh-clone-grace.ts +68 -0
  307. package/src/mesh/mesh-coordinator-config.ts +97 -0
  308. package/src/mesh/mesh-delivery-policy.ts +315 -0
  309. package/src/mesh/mesh-event-classify.ts +73 -0
  310. package/src/mesh/mesh-event-forwarding.ts +1950 -0
  311. package/src/mesh/mesh-event-trace.ts +67 -0
  312. package/src/mesh/mesh-events-coordinator.ts +32 -0
  313. package/src/mesh/mesh-events-pending.ts +1132 -0
  314. package/src/mesh/mesh-events-stale.ts +440 -0
  315. package/src/mesh/mesh-events-utils.ts +443 -0
  316. package/src/mesh/mesh-events.ts +35 -1035
  317. package/src/mesh/mesh-fast-forward.ts +856 -0
  318. package/src/mesh/mesh-host-ownership.ts +111 -0
  319. package/src/mesh/mesh-init.ts +350 -0
  320. package/src/mesh/mesh-ledger-reconciliation.ts +12 -7
  321. package/src/mesh/mesh-ledger.ts +873 -102
  322. package/src/mesh/mesh-magi-status.ts +223 -0
  323. package/src/mesh/mesh-missions.ts +449 -0
  324. package/src/mesh/mesh-node-identity.ts +2065 -0
  325. package/src/mesh/mesh-queue-assignment.ts +2233 -0
  326. package/src/mesh/mesh-reconcile-loop.ts +2397 -0
  327. package/src/mesh/mesh-refine-batch.ts +205 -0
  328. package/src/mesh/mesh-refine-gates.ts +1686 -0
  329. package/src/mesh/mesh-refine-status.ts +231 -0
  330. package/src/mesh/mesh-review-inbox.ts +308 -0
  331. package/src/mesh/mesh-routing.ts +291 -0
  332. package/src/mesh/mesh-runtime-store.ts +2056 -0
  333. package/src/mesh/mesh-scheduling-runtime.ts +198 -0
  334. package/src/mesh/mesh-task-inflight.ts +70 -0
  335. package/src/mesh/mesh-task-stats.ts +161 -0
  336. package/src/mesh/mesh-unresolved-forward-outbox.ts +185 -0
  337. package/src/mesh/mesh-warmup-deadline.ts +152 -0
  338. package/src/mesh/mesh-work-queue.ts +1281 -141
  339. package/src/mesh/preview-freshness.ts +163 -0
  340. package/src/mesh/refine-config.ts +423 -0
  341. package/src/mesh/worktree-bootstrap-config.ts +599 -0
  342. package/src/providers/acp-provider-instance.ts +43 -10
  343. package/src/providers/approval-utils.d.ts +5 -0
  344. package/src/providers/approval-utils.ts +99 -5
  345. package/src/providers/chat-message-normalization.ts +126 -4
  346. package/src/providers/cli-provider-instance.ts +2456 -107
  347. package/src/providers/contracts.d.ts +55 -0
  348. package/src/providers/contracts.ts +160 -6
  349. package/src/providers/extension-provider-instance.ts +12 -7
  350. package/src/providers/external-sources.ts +218 -0
  351. package/src/providers/ide-provider-instance.ts +35 -12
  352. package/src/providers/manual-attendance.ts +105 -0
  353. package/src/providers/native-history/antigravity-claim-registry.ts +131 -0
  354. package/src/providers/native-history/antigravity-cli-transcript.ts +1193 -0
  355. package/src/providers/native-history/claude-cli-transcript.ts +396 -0
  356. package/src/providers/native-history/codex-cli-transcript.ts +479 -0
  357. package/src/providers/native-history/constants.ts +19 -0
  358. package/src/providers/native-history/dispatcher.ts +503 -0
  359. package/src/providers/native-history/hermes-cli-transcript.ts +260 -0
  360. package/src/providers/native-history/index.ts +30 -0
  361. package/src/providers/provider-instance-manager.ts +71 -0
  362. package/src/providers/provider-instance.ts +24 -1
  363. package/src/providers/provider-loader.ts +700 -55
  364. package/src/providers/provider-schema.ts +87 -14
  365. package/src/providers/provider-trust.ts +114 -0
  366. package/src/providers/read-chat-contract.ts +76 -16
  367. package/src/providers/sdk/README.md +49 -0
  368. package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
  369. package/src/providers/sdk/v1/builders/cli/detect-status.ts +313 -0
  370. package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
  371. package/src/providers/sdk/v1/builders/cli/parse-approval.ts +261 -0
  372. package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
  373. package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
  374. package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
  375. package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
  376. package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
  377. package/src/providers/sdk/v1/index.ts +152 -0
  378. package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
  379. package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
  380. package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
  381. package/src/providers/sdk/v1/schemas/cli/provider.schema.json +509 -0
  382. package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
  383. package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
  384. package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
  385. package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
  386. package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
  387. package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
  388. package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
  389. package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
  390. package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +125 -0
  391. package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
  392. package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
  393. package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
  394. package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
  395. package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
  396. package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
  397. package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
  398. package/src/providers/sdk/v1/types/cli/index.ts +365 -0
  399. package/src/providers/sdk/v1/types/common/index.ts +229 -0
  400. package/src/providers/sdk/v1/validators/index.ts +19 -0
  401. package/src/providers/sdk/v1/validators/manifest.ts +110 -0
  402. package/src/providers/sdk/v1/validators/taint.ts +309 -0
  403. package/src/providers/spec/adapter.ts +246 -0
  404. package/src/providers/spec/cli-adapter.ts +1064 -0
  405. package/src/providers/spec/evaluator.ts +407 -0
  406. package/src/providers/spec/fsm-driver.ts +1528 -0
  407. package/src/providers/spec/fsm-evaluator.ts +290 -0
  408. package/src/providers/spec/fsm-loader.ts +128 -0
  409. package/src/providers/spec/fsm-types.ts +301 -0
  410. package/src/providers/spec/native-history-executor.ts +1174 -0
  411. package/src/providers/spec/pre-launch-trust.ts +104 -0
  412. package/src/providers/spec/route.ts +51 -0
  413. package/src/providers/spec/types.ts +262 -0
  414. package/src/providers/status-monitor.d.ts +7 -7
  415. package/src/providers/status-monitor.ts +37 -22
  416. package/src/providers/transcript-v2.ts +567 -0
  417. package/src/providers/types/interactive-prompt.ts +536 -0
  418. package/src/providers/version-archive.ts +64 -24
  419. package/src/providers/working-dir.ts +23 -0
  420. package/src/repo-mesh-types.ts +836 -13
  421. package/src/runtime-defaults.ts +39 -0
  422. package/src/session-host/managed-host.ts +218 -0
  423. package/src/session-host/runtime-surface.ts +20 -80
  424. package/src/sessions/registry.ts +6 -0
  425. package/src/shared-types-extra.ts +2 -4
  426. package/src/shared-types.d.ts +8 -0
  427. package/src/shared-types.ts +124 -55
  428. package/src/status/builders.ts +26 -6
  429. package/src/status/normalize.ts +2 -0
  430. package/src/status/reporter.ts +19 -1
  431. package/src/status/snapshot.ts +95 -26
  432. package/src/system/hash.ts +23 -0
  433. package/src/system/host-memory.ts +29 -12
  434. package/src/system/load-better-sqlite3.ts +68 -0
  435. package/src/types.ts +5 -0
  436. package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +0 -17
  437. package/dist/mesh/mesh-sync.d.ts +0 -53
  438. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +0 -16
  439. package/src/cli-adapters/terminal-backends/xterm-backend.ts +0 -97
  440. package/src/mesh/mesh-sync.ts +0 -111
@@ -0,0 +1,189 @@
1
+ /**
2
+ * M3: Mission persistence (minimal form).
3
+ *
4
+ * A mission is a persistent record of a multi-task goal so the plan lives in
5
+ * the system rather than in the coordinator LLM's context. Coordinator
6
+ * sessions can die or compact; a new coordinator reads the mission back at
7
+ * launch and continues.
8
+ *
9
+ * Explicit non-goals (see docs/mesh-product-plan-v2.md Phase M3): this is not
10
+ * a workflow engine and there is no automatic takeover daemon. Progress is
11
+ * never stored — it is derived from queue task statuses (mission_id) at
12
+ * query time.
13
+ */
14
+ import { type MeshMissionStats } from './mesh-task-stats.js';
15
+ export type MeshMissionStatus = 'active' | 'paused' | 'completed' | 'abandoned';
16
+ export declare const MESH_MISSION_STATUSES: MeshMissionStatus[];
17
+ /**
18
+ * Provenance of a mission. `magi` marks an inline mission auto-created by a
19
+ * mesh_magi_review fan-out (one per cross-verification run). `coordinator` (the
20
+ * default semantic for an unstamped/legacy mission) marks a coordinator- or
21
+ * user-authored mission. Used to bound the accumulation of completed MAGI missions
22
+ * out of the default mesh_mission_list surface — see listMeshMissionSummaries.
23
+ */
24
+ export type MeshMissionSource = 'magi' | 'coordinator';
25
+ export interface MeshMissionRecord {
26
+ id: string;
27
+ meshId: string;
28
+ title: string;
29
+ goal: string;
30
+ status: MeshMissionStatus;
31
+ /**
32
+ * Optional provenance tag. Absent on missions created before this field existed
33
+ * and on coordinator/user missions that don't bother stamping it — both are
34
+ * treated as coordinator missions (never auto-hidden). Only explicit `magi`
35
+ * missions are bounded out of the default list once completed.
36
+ */
37
+ source?: MeshMissionSource;
38
+ createdAt: string;
39
+ updatedAt: string;
40
+ }
41
+ export interface MeshMissionTaskAggregate {
42
+ total: number;
43
+ pending: number;
44
+ assigned: number;
45
+ completed: number;
46
+ failed: number;
47
+ cancelled: number;
48
+ /** Pending tasks held back by a dependency failure (blockedReason set). */
49
+ blocked: number;
50
+ /** Latest updatedAt across the mission's tasks, or null with no tasks. */
51
+ lastActivityAt: string | null;
52
+ }
53
+ export interface MeshMissionSummary extends MeshMissionRecord {
54
+ tasks: MeshMissionTaskAggregate;
55
+ /**
56
+ * Operational rollup (durations / attempts) derived from the ledger via
57
+ * computeMeshMissionStats. Optional: only populated by surfaces that opt in
58
+ * (e.g. mesh_status), since the rollup scans a bounded ledger tail per
59
+ * mission. Absent on the lightweight task-aggregate-only summaries.
60
+ */
61
+ stats?: MeshMissionStats;
62
+ }
63
+ /**
64
+ * Slim mission summary for the mesh_status compact (default) surface. Drops the
65
+ * full `goal` text — which can be hundreds of chars per mission and is repeated
66
+ * for every mission on every status call — keeping only a short preview plus a
67
+ * `goalTruncated` flag when the original was longer. The stored goal is never
68
+ * mutated; this is an output-only projection. Coordinators that need the full
69
+ * goal call mesh_status with verbose=true, or read the mission directly via
70
+ * mesh_mission_upsert / getMeshMission.
71
+ */
72
+ export interface MeshMissionSlimSummary extends Omit<MeshMissionSummary, 'goal'> {
73
+ /** Short preview of the goal (≤ GOAL_PREVIEW_MAX chars), '' when goal empty. */
74
+ goalPreview: string;
75
+ /** True when the stored goal was longer than the preview (full text elided). */
76
+ goalTruncated: boolean;
77
+ }
78
+ /** Max chars of goal text retained in the slim (compact) mission summary. */
79
+ export declare const GOAL_PREVIEW_MAX = 120;
80
+ /**
81
+ * Shorter goal preview used by the mesh_status compact (LLM coordinator) surface.
82
+ * The coordinator only needs to recognize a mission, not read its full goal, and
83
+ * mesh_status repeats every live mission on every poll — so the status preview is
84
+ * tighter than the dashboard / mesh_mission_list preview (GOAL_PREVIEW_MAX).
85
+ */
86
+ export declare const COMPACT_STATUS_GOAL_PREVIEW_MAX = 80;
87
+ export declare function upsertMeshMission(meshId: string, input: {
88
+ id?: string;
89
+ title: string;
90
+ goal?: string;
91
+ status?: string;
92
+ source?: MeshMissionSource;
93
+ }): MeshMissionRecord;
94
+ export declare function getMeshMissions(meshId: string, statuses?: MeshMissionStatus[]): MeshMissionRecord[];
95
+ export declare function getMeshMission(meshId: string, missionId: string): MeshMissionRecord | null;
96
+ /** Aggregate task statuses for a mission at query time (no stored progress). */
97
+ export declare function summarizeMissionTasks(meshId: string, missionId: string): MeshMissionTaskAggregate;
98
+ export declare function summarizeMeshMission(meshId: string, mission: MeshMissionRecord): MeshMissionSummary;
99
+ /** Active mission summaries for mesh_status / coordinator prompt injection. */
100
+ export declare function getActiveMeshMissionSummaries(meshId: string): MeshMissionSummary[];
101
+ /**
102
+ * Mission summaries for the mesh_status dashboard surface: every active/paused
103
+ * mission plus a capped, newest-first slice of completed/abandoned history so
104
+ * the dashboard can render a collapsible "history" section without unbounded
105
+ * payload growth. Returned newest-first within each group (active/paused first,
106
+ * then history), so the frontend can split on `status` directly.
107
+ *
108
+ * Compact mode (the default) elides each mission's full `goal` text — which is
109
+ * repeated verbatim on every status poll and dominates the payload when a mesh
110
+ * has many missions — returning only a short `goalPreview` + `goalTruncated`
111
+ * flag. Pass `verbose: true` to get the full `goal` text per mission. The stored
112
+ * goal is untouched in both modes; this is an output-only projection.
113
+ */
114
+ export declare function getMeshStatusMissionSummaries(meshId: string, options?: {
115
+ historyLimit?: number;
116
+ verbose?: boolean;
117
+ withStats?: boolean;
118
+ }): MeshMissionSummary[] | MeshMissionSlimSummary[];
119
+ /** Folded completed/abandoned history for the mesh_status compact surface. */
120
+ export interface MeshStatusMissionsHistoryFold {
121
+ /** Total completed + abandoned missions. */
122
+ count: number;
123
+ /** Count by lifecycle status (e.g. { completed, abandoned }). */
124
+ byStatus: Record<string, number>;
125
+ /** Newest-first id list (capped) so each folded mission stays addressable. */
126
+ missionIds: string[];
127
+ note: string;
128
+ }
129
+ /** Compact mesh_status mission projection: live detail + folded history. */
130
+ export interface MeshStatusMissionsCompact {
131
+ /**
132
+ * Active + paused missions, goal-elided to COMPACT_STATUS_GOAL_PREVIEW_MAX and
133
+ * WITHOUT the operational `stats` rollup — the `tasks` aggregate already carries
134
+ * progress, and stats (durations/retries) is a verbose/dashboard concern.
135
+ */
136
+ live: MeshMissionSlimSummary[];
137
+ /** Completed + abandoned missions folded to counts + ids; null when none. */
138
+ historyFold: MeshStatusMissionsHistoryFold | null;
139
+ }
140
+ /**
141
+ * Mission projection for the mesh_status COMPACT (LLM coordinator) surface.
142
+ *
143
+ * Unlike getMeshStatusMissionSummaries (which emits every live mission plus a
144
+ * capped slice of full-detail history, each carrying a stats rollup), this keeps
145
+ * per-mission detail ONLY for live (active/paused) missions and folds the whole
146
+ * completed/abandoned history into a counts + id-list summary. Combined with the
147
+ * tighter goal preview and dropped stats, this is what keeps the compact
148
+ * mesh_status payload bounded as a mesh accumulates missions — the missions
149
+ * section previously dominated the payload (full goalPreview + tasks + stats per
150
+ * mission, for every live mission and up to 10 history missions, on every poll).
151
+ *
152
+ * The stored missions are untouched; this is an output-only projection. Full
153
+ * mission detail (goal text + stats + history) stays available via
154
+ * mesh_status verbose=true or mesh_mission_list.
155
+ */
156
+ export declare function getMeshStatusMissionsCompact(meshId: string, options?: {
157
+ previewMax?: number;
158
+ historyIdLimit?: number;
159
+ }): MeshStatusMissionsCompact;
160
+ /**
161
+ * Read-only mission listing for the mesh_mission_list tool. Returns summaries
162
+ * (record + live task aggregate) for missions matching `statuses` — or every
163
+ * mission when `statuses` is omitted/empty — newest-first by updatedAt. Unlike
164
+ * getMeshStatusMissionSummaries this does NOT cap or group by lifecycle, so a
165
+ * coordinator can deliberately surface paused/abandoned/completed missions that
166
+ * the live status view would hide or truncate.
167
+ *
168
+ * MAGI bounding: by default this EXCLUDES completed MAGI missions (source==='magi'
169
+ * && status==='completed') — a mesh_magi_review fan-out auto-creates one inline
170
+ * mission per run and auto-closes it on collection, so without this they accumulate
171
+ * unbounded and drown out coordinator missions in the list. In-progress MAGI missions
172
+ * (active/paused) are still shown so a running cross-verification stays visible. Pass
173
+ * `includeMagi: true` to return every mission including completed MAGI ones. A mission
174
+ * with no `source` (legacy / coordinator) is never affected.
175
+ *
176
+ * Compact (the default) elides each goal to a capped preview + goalTruncated
177
+ * flag; verbose returns the full goal text. The stored goal is never mutated.
178
+ */
179
+ export declare function listMeshMissionSummaries(meshId: string, options?: {
180
+ statuses?: MeshMissionStatus[];
181
+ verbose?: boolean;
182
+ includeMagi?: boolean;
183
+ }): MeshMissionSummary[] | MeshMissionSlimSummary[];
184
+ /**
185
+ * M3-3: render active missions as a prompt section for {{mission}}.
186
+ * Empty string when no active mission — the prompt stays byte-identical to
187
+ * the pre-M3 output in that case (regression guarantee).
188
+ */
189
+ export declare function buildMissionPromptSection(meshId: string): string;
@@ -0,0 +1,310 @@
1
+ /**
2
+ * Mesh node-identity & git-freshness helpers
3
+ *
4
+ * Extracted from commands/router.ts (behavior-preserving move). Contains:
5
+ * - daemon-id / machine-id / hostname normalization + canonicalization
6
+ * - inline-mesh node identity reconciliation and transient-state handling
7
+ * - git-status normalization, branch-convergence, and freshness/staleness derivation
8
+ * - the direct git-probe cache and remote git-status probe machinery
9
+ *
10
+ * router.ts re-exports every public symbol from here so existing import paths
11
+ * (e.g. `from '.../commands/router.js'`) keep working.
12
+ */
13
+ import type { ProviderLoader } from '../providers/provider-loader.js';
14
+ import { awaitWithWarmupDeadline } from '../mesh/mesh-warmup-deadline.js';
15
+ export declare function readProviderPriorityFromPolicy(policy: unknown): string[];
16
+ /**
17
+ * Normalize a providerRoles array (RepoMeshNodePolicy.providerRoles) from raw
18
+ * tool args. Each entry binds a providerType to an optional `maxParallel` cap.
19
+ * Entries without a usable providerType are dropped; the last entry wins on
20
+ * duplicate providerType. Returns [] when no valid entries — callers then omit
21
+ * the field entirely (full backward compat). Routing is governed by required_tags;
22
+ * any legacy `role` field on the input is ignored.
23
+ */
24
+ export declare function normalizeProviderRoles(value: unknown): Array<{
25
+ providerType: string;
26
+ maxParallel?: number;
27
+ }>;
28
+ export declare function readObjectRecord(value: unknown): Record<string, any>;
29
+ export declare function readStringValue(...values: unknown[]): string | undefined;
30
+ export declare function readBooleanValue(...values: unknown[]): boolean | undefined;
31
+ export declare function summarizeRepoMeshStatusDebug(status: any): Record<string, unknown>;
32
+ export declare function logRepoMeshStatusDebug(event: string, fields: Record<string, unknown>): void;
33
+ export declare function buildMeshNodeDisplayLabel(node: Record<string, unknown>, nodeId: string, providerPriority: string[]): string;
34
+ export declare function readMeshNodeMachineId(node: Record<string, unknown>): string | undefined;
35
+ export declare function readMeshNodeDaemonId(node: Record<string, unknown>): string | undefined;
36
+ export declare function readMeshNodeHostname(node: Record<string, unknown>): string | undefined;
37
+ export declare function buildMeshNodeMachineIdentity(node: Record<string, unknown>, opts: {
38
+ localMachineId?: string;
39
+ localDaemonId?: string;
40
+ coordinatorHostname?: string;
41
+ isSelfNode?: boolean;
42
+ }): Record<string, unknown>;
43
+ export declare function buildInlineMeshTransitGitStatus(node: any): Record<string, unknown> | undefined;
44
+ export declare function shouldRefreshStalePendingAggregate(snapshot: any, options?: {
45
+ requireDirectPeerTruth?: boolean;
46
+ }): boolean;
47
+ export declare function buildLivePeerGitConnection(connection: Record<string, unknown>, timestamp?: string): Record<string, unknown>;
48
+ export declare function recordInlineMeshDirectGitTruth(node: any, git: Record<string, unknown>, source: 'selected_coordinator_local_git' | 'selected_coordinator_mesh_p2p_git'): {
49
+ reporterPlatform: string | null;
50
+ reporterArch: string | null;
51
+ reporterMachineNickname: string | null;
52
+ reporterProviderVersions: Record<string, string> | null;
53
+ reporterDaemonBuildVersion: string | null;
54
+ };
55
+ /**
56
+ * Persist the live self-reported platform/arch onto the local meshes.json node
57
+ * record so capability-tag os=/arch= self-heals across coordinator restarts.
58
+ *
59
+ * The in-memory stamp done by recordInlineMeshDirectGitTruth lives on the
60
+ * mesh_status assembly object and is discarded after the response; only a
61
+ * `local_config` mesh has a backing meshes.json node to write through to. Inline
62
+ * cache/bootstrap meshes have no local node to update, so we no-op for them.
63
+ * Fire-and-forget (same pattern as the worktreeBootstrap writer) — a persistence
64
+ * failure must never block the status response.
65
+ */
66
+ export declare function persistNodeReporterPlatform(meshSource: 'inline_cache' | 'inline_bootstrap' | 'local_config', mesh: any, nodeId: string | undefined, reporter: {
67
+ reporterPlatform: string | null;
68
+ reporterArch: string | null;
69
+ reporterMachineNickname?: string | null;
70
+ reporterProviderVersions?: Record<string, string> | null;
71
+ reporterDaemonBuildVersion?: string | null;
72
+ }): void;
73
+ export declare function inlineMeshCarriesTransientNodeTruth(inlineMesh: any): boolean;
74
+ export declare function readInlineMeshNodeId(node: any): string;
75
+ export declare function isDeadLocalWorktreeNode(node: any): boolean;
76
+ export declare function foldMeshNodeIdentityToCanonical(node: any): any;
77
+ export declare function normalizeInlineMeshNodeIdentity(inlineMesh: any): any;
78
+ export declare function sanitizeInlineMesh(inlineMesh: any): any;
79
+ export declare function reconcileInlineMeshCache(cached: any, incoming: any): any;
80
+ export declare function deriveMeshNodeHealthFromGit(git: Record<string, unknown> | null | undefined): 'online' | 'dirty' | 'degraded';
81
+ export declare function applyInlineMeshBranchConvergence(mesh: any, node: any, status: Record<string, unknown>): void;
82
+ export declare function summarizeInlineMeshBranchConvergence(nodes: Array<Record<string, unknown>>): Record<string, unknown>;
83
+ export declare function readCachedInlineMeshActiveSessions(node: any): string[];
84
+ /**
85
+ * Wider session-ownership scan used ONLY by resolveRemoteMeshSessionOwnerDaemonId: collect
86
+ * EVERY session id a mesh node currently hosts. readCachedInlineMeshActiveSessions above only
87
+ * surfaces the node's single primary session (cachedStatus.activeSession) — other consumers
88
+ * depend on that one-session semantics, so it is left untouched. A worker hosting more than one
89
+ * session exposes its non-primary sessions only through the plural live-session arrays the
90
+ * coordinator carries: status.activeSessions / activeSessionDetails (built from live records on
91
+ * the aggregate snapshot, see get_mesh_status), or a worker's merged session report. A
92
+ * controlbar/modal command (invoke_provider_script / resolve_action / set_mode / …) targeting a
93
+ * non-primary remote session resolves its owner daemon only when those plural shapes are scanned
94
+ * too. Mirrors sessionStatusFromNodes' shape tolerance (mesh-active-work.ts): plural arrays of
95
+ * string ids OR objects keyed by id/sessionId/session_id/runtimeSessionId/instanceId, on both
96
+ * camelCase and snake_case, at the node root and under cachedStatus / lastProbe.
97
+ */
98
+ export declare function collectMeshNodeHostedSessionIds(node: any): Set<string>;
99
+ /**
100
+ * Resolve the owning-node attribution for a mesh node record so a coordinator can
101
+ * stamp the TRUE owner onto a synthetic session entry instead of letting the
102
+ * dashboard fall back to the coordinator's own daemonId. Returns whichever of the
103
+ * owning node's `daemonId` / display machine name could be read from the node's
104
+ * (possibly multi-serialization-path) shape; both may be undefined for a node that
105
+ * never carried machine identity.
106
+ */
107
+ export declare function resolveMeshNodeAttribution(node: unknown): {
108
+ daemonId?: string;
109
+ machineName?: string;
110
+ };
111
+ export declare function readCachedInlineMeshActiveSessionDetails(node: any): Array<Record<string, unknown>>;
112
+ /**
113
+ * Transient per-node marker the mesh_status render loop stamps onto a node
114
+ * `status` at the two sites that obtain git truth from a FRESH probe this call
115
+ * (a successful local `getGitRepoStatus`, or a successful P2P `git_status`
116
+ * round-trip). finalizeMeshNodeStatus consumes and deletes it. Held/standing
117
+ * truth (node.lastGit / cachedStatus / inline transit) is deliberately NOT
118
+ * stamped — its absence is exactly how the freshness marker tells "live" apart
119
+ * from "cached". Internal only; never serialized in the response.
120
+ */
121
+ export declare const MESH_NODE_LIVE_TRUTH_MARKER = "__liveTruthProbed";
122
+ /**
123
+ * Build the additive per-node `dataFreshness` marker. This NEVER mutates any
124
+ * existing field — it only adds an explicit, machine-readable answer to the
125
+ * question the legacy fields blurred: is this node's data live (just probed),
126
+ * cached (held truth, maybe old), or absent because the peer was unreachable?
127
+ *
128
+ * The crucial separation: an UNREACHABLE peer (P2P probe failed / not connected)
129
+ * is no longer indistinguishable from an idle/EMPTY node. Both used to render as
130
+ * `health:'unknown'` with no sessions; now `dataFreshness.dataSource` and
131
+ * `reachable` tell them apart so a coordinator never reads a dead peer as "online
132
+ * but doing nothing".
133
+ */
134
+ export declare function buildMeshNodeDataFreshness(args: {
135
+ status: Record<string, unknown>;
136
+ node?: any;
137
+ isSelfNode: boolean;
138
+ daemonId?: string;
139
+ /** True when this node was stamped with a fresh live git probe this call. */
140
+ liveTruthProbed: boolean;
141
+ /** True when direct-peer-truth accounting classified this node unavailable. */
142
+ directTruthUnavailable?: boolean;
143
+ now?: () => number;
144
+ }): Record<string, unknown>;
145
+ /**
146
+ * Canonical live-probe → freshness adapter. The coordinator-facing mesh_status
147
+ * (mcp-server `meshStatus`) builds each node entry from a SINGLE fresh git_status
148
+ * probe that either returns (live truth) or throws (peer unreachable). It used to
149
+ * hand-reconstruct the freshness INPUT inline — a synthetic `{ git, connection }`
150
+ * status plus the directTruthUnavailable/liveTruthProbed wiring — which is exactly
151
+ * how a field added to `buildMeshNodeDataFreshness`'s input contract ends up "wired
152
+ * on the daemon surface, null on the coordinator surface" (the rc.371
153
+ * null-everywhere regression). Routing every live-probe surface through this one
154
+ * adapter keeps the marker derivation canonical: there is a SINGLE place that turns
155
+ * a probe outcome into freshness args, so the two mesh_status surfaces cannot drift.
156
+ *
157
+ * `liveTruthProbed` true → the probe returned (live/self truth); false → it threw,
158
+ * so a configured peer is unreachable while an unconfigured node (no daemonId) falls
159
+ * through to the classifier's `unconfigured` branch.
160
+ */
161
+ export declare function buildMeshNodeProbeFreshness(args: {
162
+ /** The git snapshot this probe stamped on the node entry (entry.git). */
163
+ git: unknown;
164
+ /** True when the fresh git_status probe RETURNED (live truth); false when it threw. */
165
+ liveTruthProbed: boolean;
166
+ isSelfNode: boolean;
167
+ /** The node's resolved daemonId; absent → unconfigured node. */
168
+ daemonId?: string;
169
+ /** The mesh node record, for held-git fallback when the probe did not return live. */
170
+ node?: any;
171
+ now?: () => number;
172
+ }): Record<string, unknown>;
173
+ export declare function finalizeMeshNodeStatus(args: {
174
+ status: Record<string, unknown>;
175
+ node: any;
176
+ daemonId?: string;
177
+ isSelfNode: boolean;
178
+ /** True when direct-peer-truth accounting classified this node unavailable. */
179
+ directTruthUnavailable?: boolean;
180
+ }): void;
181
+ export declare const MESH_DIRECT_PROBE_TIMEOUT_MS: number;
182
+ export declare const MESH_DIRECT_PROBE_RETRY_TIMEOUT_MS: number;
183
+ export declare const MESH_DIRECT_PROBE_CONNECT_TIMEOUT_MS: number;
184
+ export declare const MESH_DIRECT_PROBE_REUSE_MS: number;
185
+ /**
186
+ * De-duplicates and rate-limits per-peer git_status probes so a single mesh
187
+ * refresh — or a burst of refreshes from the dashboard auto-retry loop — cannot
188
+ * launch a storm of concurrent/back-to-back `refreshUpstream:true` commands to
189
+ * the same slow peer.
190
+ *
191
+ * Two gates, both keyed by `daemonId::workspace`:
192
+ * - In-flight dedup: a second probe for a key with a probe already running
193
+ * shares (awaits) the in-flight promise instead of issuing a second command.
194
+ * - Recently-probed reuse: a successful probe younger than `reuseMs` is reused
195
+ * verbatim instead of issuing a fresh probe. Failures are NOT cached (so a
196
+ * transient timeout doesn't pin a peer to "no truth" for the whole window).
197
+ *
198
+ * Lives on the router instance so the gate spans separate mesh_status calls,
199
+ * which is exactly where the refresh storm happens.
200
+ */
201
+ export declare class MeshGitProbeCache {
202
+ private readonly reuseMs;
203
+ private readonly now;
204
+ private inflight;
205
+ private recent;
206
+ constructor(reuseMs: number, now?: () => number);
207
+ private key;
208
+ /**
209
+ * Local (same-machine) git_status dedup. The bootstrap direct-truth hydrate
210
+ * and the per-node render loop both call getGitRepoStatus(refreshUpstream:true)
211
+ * for the same local workspace within one mesh_status call. Each such probe
212
+ * fans out ~13-15 git subprocesses, and because the two passes are separated by
213
+ * the render/hydrate work of every OTHER node they routinely straddle the
214
+ * getGitRepoStatus 1.5s TTL, so the second pass re-shells the whole ~14-process
215
+ * collection. Routing both through this cache (namespaced under a reserved
216
+ * daemon id so it never collides with a remote-peer key) collapses them to one
217
+ * collection per workspace per request, and reuses it across the reuse window
218
+ * so the dashboard auto-retry loop can't restart a fresh local probe seconds
219
+ * apart either.
220
+ */
221
+ private static readonly LOCAL_PROBE_DAEMON_ID;
222
+ probeLocal(workspace: string, probe: () => Promise<Record<string, unknown> | null>): Promise<Record<string, unknown> | null>;
223
+ /**
224
+ * Run `probe` for this peer, but reuse a fresh recent result or an in-flight
225
+ * probe for the same key when one is available. `probe` is only invoked when
226
+ * neither gate is satisfied.
227
+ */
228
+ probe(daemonId: string, workspace: string, probe: () => Promise<Record<string, unknown> | null>): Promise<Record<string, unknown> | null>;
229
+ }
230
+ export { awaitWithWarmupDeadline };
231
+ /**
232
+ * Probe a remote peer's git_status with a bounded retry budget, but only while
233
+ * the peer is reported `connected`. A single slow (often TURN-relayed) peer can
234
+ * exceed one probe window; retrying — with the connection re-checked before each
235
+ * attempt so we abandon a peer that dropped — recovers it without blocking the
236
+ * mesh forever. Shared by the bootstrap hydrate path and the per-node render
237
+ * path so both treat a connected-but-slow peer identically.
238
+ *
239
+ * Returns the git status on success, or null if every attempt failed/timed out
240
+ * (caller decides how to classify). `getConnection` is consulted before each
241
+ * attempt; a non-`connected` state short-circuits the retry loop (the very first
242
+ * attempt always runs so a missing connection getter still gets one try).
243
+ */
244
+ export declare function probeRemoteMeshGitStatusWithRetry(args: {
245
+ dispatchMeshCommand?: (daemonId: string, cmd: string, args: Record<string, unknown>) => Promise<unknown>;
246
+ daemonId: string;
247
+ workspace: string;
248
+ timeoutMs: number;
249
+ /** Per-attempt timeout for retries (attempts > 0); defaults to timeoutMs. */
250
+ retryTimeoutMs?: number;
251
+ /** Cold-open warmup budget per attempt; defaults to MESH_DIRECT_PROBE_CONNECT_TIMEOUT_MS. */
252
+ connectTimeoutMs?: number;
253
+ getConnection?: (daemonId: string) => Record<string, unknown> | null;
254
+ onConnection?: (connection: Record<string, unknown>) => void;
255
+ }): Promise<Record<string, unknown> | null>;
256
+ export declare function hydrateInlineMeshDirectTruth(args: {
257
+ mesh: any;
258
+ meshSource: 'inline_cache' | 'inline_bootstrap' | 'local_config';
259
+ dispatchMeshCommand?: (daemonId: string, cmd: string, args: Record<string, unknown>) => Promise<unknown>;
260
+ getMeshPeerConnectionStatus?: (daemonId: string) => Record<string, unknown> | null;
261
+ statusInstanceId?: string;
262
+ localMachineId?: string;
263
+ probeRemotePeers: boolean;
264
+ probeCache?: MeshGitProbeCache;
265
+ }): Promise<{
266
+ directEvidenceCount: number;
267
+ localConfirmedCount: number;
268
+ peerAttemptedCount: number;
269
+ peerConfirmedCount: number;
270
+ standingEvidenceCount: number;
271
+ unavailableNodeIds: string[];
272
+ deadNodeIds: string[];
273
+ }>;
274
+ export declare function summarizeMeshSessionRecord(record: any): Record<string, unknown>;
275
+ export declare function readLiveMeshNodeWorkspace(args: {
276
+ meshId: string;
277
+ nodeId: string;
278
+ liveSessionRecords: any[];
279
+ allowCoordinatorSession?: boolean;
280
+ }): string;
281
+ export declare function collectLiveMeshSessionRecords(args: {
282
+ meshId: string;
283
+ node: any;
284
+ nodeId: string;
285
+ liveSessionRecords: any[];
286
+ allowCoordinatorSession?: boolean;
287
+ }): any[];
288
+ export declare function buildHistoricalMeshSessions(args: {
289
+ meshId: string;
290
+ nodes: any[];
291
+ liveSessionRecords: any[];
292
+ }): {
293
+ count: number;
294
+ sessions: Record<string, unknown>[];
295
+ instruction: string;
296
+ } | undefined;
297
+ export declare function applyCachedInlineMeshNodeStatus(status: Record<string, unknown>, node: any, options?: {
298
+ skipGit?: boolean;
299
+ skipError?: boolean;
300
+ skipHealth?: boolean;
301
+ }): boolean;
302
+ export declare function resolveProviderTypeFromPriority(args: {
303
+ nodeId: string;
304
+ providerPriority: string[];
305
+ providerLoader: ProviderLoader;
306
+ onStatusChange?: () => void;
307
+ }): Promise<{
308
+ providerType?: string;
309
+ error?: string;
310
+ }>;
@@ -0,0 +1,158 @@
1
+ import type { DaemonComponents } from '../boot/daemon-lifecycle.js';
2
+ import type { RepoMeshSchedulingStrategy } from '../repo-mesh-types.js';
3
+ export declare function __resetIdleAutoFastForwardForTests(): void;
4
+ export declare function getMeshWithCache(components: DaemonComponents, meshId: string): any | undefined;
5
+ export declare function tryAssignQueueTask(components: DaemonComponents, meshId: string, nodeId: string, sessionId: string, providerType: string): boolean;
6
+ interface AwaitClaimBackoffState {
7
+ cycles: number;
8
+ nextAttemptAtMs: number;
9
+ }
10
+ export declare function __resetAutoLaunchAwaitClaimBackoffForTests(): void;
11
+ export declare function __seedAutoLaunchAwaitClaimBackoffForTests(meshId: string, taskId: string, state: AwaitClaimBackoffState): void;
12
+ /** Active assignments that hold the one-active-per-node / global-parallel invariant
13
+ * (everything except read-only diagnoses, which run unbounded by the write cap). */
14
+ export declare function activeWriteAssignedCount(meshId: string): number;
15
+ /** Active read-only assignments, for the read-only safety cap. */
16
+ export declare function activeReadonlyAssignedCount(meshId: string): number;
17
+ /**
18
+ * Order eligible nodes for assignment per the mesh scheduling pipeline:
19
+ * PRIORITY (schedulingPriority desc) → TIE-BREAK (strategy).
20
+ *
21
+ * The caller has already applied the TAG hard-filter and is responsible for the
22
+ * MAX-ALLOC capacity gate (the per-node launch/claim checks). This function only
23
+ * decides the *preference order* among nodes that are otherwise eligible.
24
+ *
25
+ * - 'first_eligible' (default): returns the input order verbatim and does NOT touch
26
+ * the round-robin cursor — byte-for-byte the pre-feature behavior.
27
+ * - 'priority_only': schedulingPriority desc, then input order (load ignored).
28
+ * - 'least_loaded' (the user-facing 'spread' mode): schedulingPriority desc, then
29
+ * active load asc, then — among nodes still tied at (priority, load) — the input
30
+ * order is rotated by a per-mesh cursor that advances once per pass. The rotation
31
+ * tie-break is ALWAYS on for least_loaded so a single 'spread' mode subsumes the
32
+ * former separate 'round_robin' strategy (two equal-load nodes still alternate
33
+ * fairly across passes instead of the lower index always winning).
34
+ * - 'round_robin': retained as an escape-hatch alias; behaves identically to
35
+ * 'least_loaded' now that least_loaded carries the rotation.
36
+ *
37
+ * `nodes` carries the original config/array index so the tie-break can fall back to
38
+ * deterministic input order. `bumpCursor` advances the round-robin cursor exactly
39
+ * once per scheduling pass (consulted for both 'least_loaded' and 'round_robin').
40
+ */
41
+ interface RankableNode {
42
+ nodeId: string;
43
+ node: any;
44
+ index: number;
45
+ }
46
+ /** Test-only: resolve a mesh's effective scheduling strategy through the full
47
+ * LOCAL-WINS path (`.adhdev/mesh.json` distribution → strategy, else stored policy).
48
+ * Exposed so the repo-file overlay wiring can be exercised by a direct call. */
49
+ export declare function __resolveSchedulingStrategyForTests(mesh: any): RepoMeshSchedulingStrategy;
50
+ /** Test-only: the pure node-ordering stage (PRIORITY → TIE-BREAK). Exposed so the
51
+ * scheduling pipeline can be unit-tested without standing up live CLI sessions. */
52
+ export declare function __orderEligibleNodesForTests(meshId: string, strategy: RepoMeshSchedulingStrategy, nodes: RankableNode[], opts?: {
53
+ bumpCursor?: boolean;
54
+ }): RankableNode[];
55
+ /** One idle session eligible to claim a queued task, together with the resolved
56
+ * mesh node record it belongs to. Local candidates come from live CLI instances,
57
+ * remote candidates from the registered remote-idle-session store; the two arrive
58
+ * with their `nodeId` under different serialization forms. */
59
+ type IdleCandidate = {
60
+ nodeId: string;
61
+ sessionId: string;
62
+ providerType: string;
63
+ origin: 'local' | 'remote';
64
+ node: any;
65
+ };
66
+ /** Test-only: the pool-canonicalization + unique-node collapse stage. Exposed so
67
+ * the mixed-form dedup invariant can be unit-tested without a live daemon. */
68
+ export declare function __buildSchedulingPoolForTests(localCandidates: IdleCandidate[], remoteCandidates: IdleCandidate[]): {
69
+ pool: IdleCandidate[];
70
+ uniqueNodes: RankableNode[];
71
+ };
72
+ export declare function sessionHasActiveAssignment(meshId: string, sessionId: string): boolean;
73
+ /**
74
+ * CANON-IDENTITY single-flight hardening (restart-safe, observation-based).
75
+ *
76
+ * The in-memory single-flight Set (mesh-task-inflight) is process-local and is LOST on a
77
+ * daemon restart — after a restart, a task still being generated by a live local worker is
78
+ * no longer marked in-flight, so requeueTask's Set check passes and would re-open the task
79
+ * for a duplicate second dispatch. This recovers the "still generating" signal from
80
+ * observable runtime state instead of the in-memory mark: a session is actively generating
81
+ * when its live local CLI instance reports an active (generating/streaming/…) status — the
82
+ * same predicate the dispatch active-work gate uses (sessionStateLooksActive).
83
+ *
84
+ * Local-only by design: it inspects THIS daemon's instanceManager. The primary cross-process
85
+ * fix (IpcTransport requeue delegating to the mesh-host daemon) keeps begin (dispatch) and
86
+ * check (requeue guard) co-located so the in-memory mark stays authoritative in the common
87
+ * path; this is the restart-safety net for sessions hosted on this daemon. A genuinely
88
+ * dead/stale session is not generating → returns false → the requeue proceeds as before.
89
+ */
90
+ export declare function isSessionActivelyGenerating(components: DaemonComponents, sessionId: string): boolean;
91
+ /**
92
+ * RECLAIM-FALSEPOS tri-state busy verdict for a session id.
93
+ *
94
+ * The binary isSessionActivelyGenerating() folds "absence of a positive generating
95
+ * signal" into a definitive NEGATIVE (returns false when the instance is absent). But a
96
+ * REMOTE session (never in THIS daemon's instanceManager) — or a locally-present session
97
+ * looked up under a skewed id form — then looks "not generating" and can be reclaimed out
98
+ * from under a worker that is genuinely mid-turn. This resolves an explicit three-way
99
+ * verdict instead:
100
+ * - GENERATING — a locally-present instance reports an active/streaming state.
101
+ * - IDLE_CONFIRMED — a locally-present instance reports a non-active (idle/terminal)
102
+ * state. Positive local evidence the worker is not working.
103
+ * - UNKNOWN — no locally-present instance matches (remote / gone / id-skew) or
104
+ * the observation failed. NEVER treated as IDLE_CONFIRMED.
105
+ *
106
+ * The lookup scans getByCategory('cli') with sessionIdsEquivalent (the same equivalence
107
+ * matching nodeHasActiveMeshWork / liveSessionCountForNode use) rather than a raw
108
+ * instanceManager.getInstance(id) Map.get, so an id-form-skewed but present session is
109
+ * found (closing the same id-form-skew hole class e245c2f9's F1 fixed elsewhere).
110
+ */
111
+ export type SessionBusyVerdict = 'GENERATING' | 'IDLE_CONFIRMED' | 'UNKNOWN';
112
+ export declare function resolveSessionBusyVerdict(components: DaemonComponents, sessionId: string): SessionBusyVerdict;
113
+ export interface MeshQueueTriggerResult {
114
+ success: true;
115
+ meshId: string;
116
+ pendingBefore: number;
117
+ assignedBefore: number;
118
+ pendingAfter: number;
119
+ assignedAfter: number;
120
+ claimed: boolean;
121
+ newlyAssignedTasks: Array<{
122
+ id: string;
123
+ nodeId?: string;
124
+ sessionId?: string;
125
+ }>;
126
+ localIdleSessionsChecked: number;
127
+ remoteIdleSessionsChecked: number;
128
+ skippedSessions: Array<{
129
+ nodeId?: string;
130
+ sessionId?: string;
131
+ reason: string;
132
+ status?: string;
133
+ }>;
134
+ autoLaunchStarted: boolean;
135
+ /**
136
+ * True when a worker session is already on its way to claim a still-pending task —
137
+ * either launched this tick (autoLaunchStarted) or launched on a prior tick and still
138
+ * booting/awaiting-claim. Callers MUST treat this as "wait, do not launch another
139
+ * session": a second launch double-edits the worktree. Mutually informative with
140
+ * `noIdleMeshSessionAvailable`, which is suppressed whenever this is true.
141
+ */
142
+ autoLaunchPending?: boolean;
143
+ noIdleMeshSessionAvailable?: boolean;
144
+ }
145
+ export declare function triggerMeshQueue(components: DaemonComponents, meshId: string): Promise<MeshQueueTriggerResult>;
146
+ export declare function maybeAutoFastForwardIdleNode(components: DaemonComponents, args: {
147
+ meshId: string;
148
+ nodeId: string;
149
+ sessionId?: string;
150
+ providerType?: string;
151
+ }): Promise<void>;
152
+ export declare function runIdleMaintenanceThenAssignQueue(components: DaemonComponents, args: {
153
+ meshId: string;
154
+ nodeId: string;
155
+ sessionId: string;
156
+ providerType: string;
157
+ }): void;
158
+ export {};