@adhdev/daemon-core 0.9.82-rc.38 → 0.9.82-rc.381

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 (414) 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 +55 -2
  8. package/dist/cli-adapters/cli-script-runner.d.ts +117 -0
  9. package/dist/cli-adapters/cli-state-engine.d.ts +198 -0
  10. package/dist/cli-adapters/provider-cli-adapter.d.ts +121 -64
  11. package/dist/cli-adapters/provider-cli-parse.d.ts +4 -0
  12. package/dist/cli-adapters/provider-cli-runtime.d.ts +34 -0
  13. package/dist/cli-adapters/provider-cli-shared.d.ts +63 -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 +14 -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 +15 -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 +60 -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 +2 -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 +116 -0
  54. package/dist/commands/mesh-coordinator.d.ts +85 -1
  55. package/dist/commands/router.d.ts +227 -2
  56. package/dist/commands/upgrade-helper.d.ts +41 -1
  57. package/dist/config/chat-history.d.ts +9 -0
  58. package/dist/config/config.d.ts +5 -0
  59. package/dist/config/mesh-config.d.ts +77 -1
  60. package/dist/daemon/dev-server.d.ts +0 -2
  61. package/dist/detection/ide-detector.d.ts +13 -0
  62. package/dist/detection/win32-ide-version.d.ts +37 -0
  63. package/dist/git/change-impact-config.d.ts +159 -0
  64. package/dist/git/git-commands.d.ts +11 -1
  65. package/dist/git/git-diff.d.ts +6 -0
  66. package/dist/git/git-executor.d.ts +11 -0
  67. package/dist/git/git-status.d.ts +23 -0
  68. package/dist/git/git-types.d.ts +2 -50
  69. package/dist/git/index.d.ts +2 -0
  70. package/dist/index.d.ts +57 -13
  71. package/dist/index.js +47417 -19860
  72. package/dist/index.js.map +1 -1
  73. package/dist/index.mjs +45865 -18449
  74. package/dist/index.mjs.map +1 -1
  75. package/dist/installer.d.ts +1 -4
  76. package/dist/ipc/local-ipc-server.d.ts +91 -0
  77. package/dist/launch.d.ts +1 -1
  78. package/dist/logging/async-batch-writer.d.ts +10 -0
  79. package/dist/logging/log-redactor.d.ts +24 -0
  80. package/dist/logging/log-tail-reader.d.ts +81 -0
  81. package/dist/logging/logger.d.ts +1 -1
  82. package/dist/mesh/contracts.d.ts +164 -0
  83. package/dist/mesh/coordinator-prompt.d.ts +89 -0
  84. package/dist/mesh/coordinator-registry.d.ts +59 -0
  85. package/dist/mesh/mesh-active-work.d.ts +174 -0
  86. package/dist/mesh/mesh-coordinator-config.d.ts +21 -0
  87. package/dist/mesh/mesh-delivery-policy.d.ts +131 -0
  88. package/dist/mesh/mesh-event-classify.d.ts +5 -0
  89. package/dist/mesh/mesh-event-forwarding.d.ts +18 -0
  90. package/dist/mesh/mesh-event-trace.d.ts +21 -0
  91. package/dist/mesh/mesh-events-coordinator.d.ts +4 -0
  92. package/dist/mesh/mesh-events-pending.d.ts +55 -0
  93. package/dist/mesh/mesh-events-stale.d.ts +52 -0
  94. package/dist/mesh/mesh-events-utils.d.ts +64 -0
  95. package/dist/mesh/mesh-events.d.ts +6 -49
  96. package/dist/mesh/mesh-fast-forward.d.ts +81 -0
  97. package/dist/mesh/mesh-host-ownership.d.ts +9 -0
  98. package/dist/mesh/mesh-init.d.ts +86 -0
  99. package/dist/mesh/mesh-ledger-reconciliation.d.ts +23 -4
  100. package/dist/mesh/mesh-ledger.d.ts +77 -1
  101. package/dist/mesh/mesh-missions.d.ts +164 -0
  102. package/dist/mesh/mesh-node-identity.d.ts +289 -0
  103. package/dist/mesh/mesh-queue-assignment.d.ts +86 -0
  104. package/dist/mesh/mesh-reconcile-loop.d.ts +8 -0
  105. package/dist/mesh/mesh-refine-batch.d.ts +68 -0
  106. package/dist/mesh/mesh-refine-gates.d.ts +428 -0
  107. package/dist/mesh/mesh-refine-status.d.ts +62 -0
  108. package/dist/mesh/mesh-review-inbox.d.ts +90 -0
  109. package/dist/mesh/mesh-routing.d.ts +70 -0
  110. package/dist/mesh/mesh-runtime-store.d.ts +439 -0
  111. package/dist/mesh/mesh-scheduling-runtime.d.ts +78 -0
  112. package/dist/mesh/mesh-task-stats.d.ts +49 -0
  113. package/dist/mesh/mesh-unresolved-forward-outbox.d.ts +30 -0
  114. package/dist/mesh/mesh-warmup-deadline.d.ts +68 -0
  115. package/dist/mesh/mesh-work-queue.d.ts +247 -5
  116. package/dist/mesh/preview-freshness.d.ts +18 -0
  117. package/dist/mesh/refine-config.d.ts +216 -0
  118. package/dist/mesh/worktree-bootstrap-config.d.ts +135 -0
  119. package/dist/providers/acp-provider-instance.d.ts +5 -0
  120. package/dist/providers/approval-utils.d.ts +20 -0
  121. package/dist/providers/chat-message-normalization.d.ts +13 -1
  122. package/dist/providers/cli-provider-instance.d.ts +111 -3
  123. package/dist/providers/contracts.d.ts +139 -6
  124. package/dist/providers/external-sources.d.ts +71 -0
  125. package/dist/providers/manual-attendance.d.ts +63 -0
  126. package/dist/providers/native-history/antigravity-cli-transcript.d.ts +100 -0
  127. package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
  128. package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
  129. package/dist/providers/native-history/constants.d.ts +12 -0
  130. package/dist/providers/native-history/dispatcher.d.ts +27 -0
  131. package/dist/providers/native-history/hermes-cli-transcript.d.ts +30 -0
  132. package/dist/providers/native-history/index.d.ts +13 -0
  133. package/dist/providers/provider-instance-manager.d.ts +14 -0
  134. package/dist/providers/provider-instance.d.ts +23 -1
  135. package/dist/providers/provider-loader.d.ts +26 -4
  136. package/dist/providers/provider-trust.d.ts +31 -0
  137. package/dist/providers/read-chat-contract.d.ts +29 -0
  138. package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
  139. package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +86 -0
  140. package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
  141. package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +65 -0
  142. package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
  143. package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
  144. package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
  145. package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
  146. package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
  147. package/dist/providers/sdk/v1/index.d.ts +30 -0
  148. package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
  149. package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
  150. package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
  151. package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
  152. package/dist/providers/sdk/v1/types/common/index.d.ts +203 -0
  153. package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
  154. package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
  155. package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
  156. package/dist/providers/spec/adapter.d.ts +91 -0
  157. package/dist/providers/spec/cli-adapter.d.ts +223 -0
  158. package/dist/providers/spec/evaluator.d.ts +45 -0
  159. package/dist/providers/spec/fsm-driver.d.ts +397 -0
  160. package/dist/providers/spec/fsm-evaluator.d.ts +76 -0
  161. package/dist/providers/spec/fsm-loader.d.ts +14 -0
  162. package/dist/providers/spec/fsm-types.d.ts +174 -0
  163. package/dist/providers/spec/native-history-executor.d.ts +41 -0
  164. package/dist/providers/spec/pre-launch-trust.d.ts +16 -0
  165. package/dist/providers/spec/route.d.ts +4 -0
  166. package/dist/providers/spec/types.d.ts +222 -0
  167. package/dist/providers/status-monitor.d.ts +7 -7
  168. package/dist/providers/transcript-v2.d.ts +176 -0
  169. package/dist/providers/types/interactive-prompt.d.ts +84 -0
  170. package/dist/providers/working-dir.d.ts +17 -0
  171. package/dist/repo-mesh-types.d.ts +376 -13
  172. package/dist/runtime-defaults.d.ts +2 -0
  173. package/dist/sessions/registry.d.ts +6 -0
  174. package/dist/shared-types-extra.d.ts +2 -4
  175. package/dist/shared-types.d.ts +59 -2
  176. package/dist/status/normalize.d.ts +1 -1
  177. package/dist/status/normalize.js +1 -0
  178. package/dist/status/normalize.js.map +1 -1
  179. package/dist/status/normalize.mjs +1 -0
  180. package/dist/status/normalize.mjs.map +1 -1
  181. package/dist/status/reporter.d.ts +2 -0
  182. package/dist/status/snapshot.d.ts +26 -0
  183. package/dist/system/hash.d.ts +8 -0
  184. package/dist/system/load-better-sqlite3.d.ts +21 -0
  185. package/dist/types.d.ts +5 -0
  186. package/package.json +7 -3
  187. package/src/agent-stream/poller.ts +2 -3
  188. package/src/agent-stream/provider-adapter.ts +1 -1
  189. package/src/boot/daemon-lifecycle.ts +63 -12
  190. package/src/boot/process-hardening.ts +89 -0
  191. package/src/build-info.ts +73 -0
  192. package/src/chat/source-machine.ts +534 -0
  193. package/src/chat/source-resolver.ts +0 -0
  194. package/src/chat/subscription-updates.ts +20 -1
  195. package/src/cli-adapter-types.d.ts +1 -0
  196. package/src/cli-adapter-types.ts +56 -2
  197. package/src/cli-adapters/cli-script-runner.ts +421 -0
  198. package/src/cli-adapters/cli-state-engine.ts +1221 -0
  199. package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
  200. package/src/cli-adapters/provider-cli-adapter.ts +836 -1141
  201. package/src/cli-adapters/provider-cli-parse.d.ts +1 -0
  202. package/src/cli-adapters/provider-cli-parse.ts +13 -0
  203. package/src/cli-adapters/provider-cli-runtime.ts +56 -7
  204. package/src/cli-adapters/provider-cli-shared.d.ts +4 -0
  205. package/src/cli-adapters/provider-cli-shared.ts +110 -11
  206. package/src/cli-adapters/pty-transport.ts +2 -1
  207. package/src/cli-adapters/pty-write-chunking.ts +106 -0
  208. package/src/cli-adapters/raw-terminal-io.ts +252 -0
  209. package/src/cli-adapters/resolve-executable.ts +90 -0
  210. package/src/cli-adapters/session-host-transport.ts +2 -1
  211. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.ts +53 -29
  212. package/src/cli-adapters/terminal-backends/types.ts +10 -3
  213. package/src/cli-adapters/terminal-screen.ts +16 -81
  214. package/src/commands/WINDOWS-UPGRADE-LOCK-FAILURE.md +198 -0
  215. package/src/commands/chat-commands-debug-bundle.ts +398 -0
  216. package/src/commands/chat-commands-read.ts +2327 -0
  217. package/src/commands/chat-commands-scope.ts +54 -0
  218. package/src/commands/chat-commands-shared.ts +114 -0
  219. package/src/commands/chat-commands-write.ts +880 -0
  220. package/src/commands/chat-commands.ts +19 -1841
  221. package/src/commands/cli-manager.ts +513 -26
  222. package/src/commands/handler.ts +841 -2
  223. package/src/commands/high-family/index.ts +28 -0
  224. package/src/commands/high-family/mesh-coordinator-launch.ts +657 -0
  225. package/src/commands/high-family/mesh-events.ts +47 -0
  226. package/src/commands/high-family/mesh-status.ts +642 -0
  227. package/src/commands/high-family/types.ts +76 -0
  228. package/src/commands/low-family/coordinator-prompt.ts +72 -0
  229. package/src/commands/low-family/daemon-lifecycle.ts +107 -0
  230. package/src/commands/low-family/diagnostics.ts +57 -0
  231. package/src/commands/low-family/index.ts +37 -0
  232. package/src/commands/low-family/mesh-ledger.ts +62 -0
  233. package/src/commands/low-family/mesh-node-logs.ts +87 -0
  234. package/src/commands/low-family/notification.ts +116 -0
  235. package/src/commands/low-family/refine-config.ts +106 -0
  236. package/src/commands/low-family/session-host.ts +274 -0
  237. package/src/commands/low-family/spec-providerdev.ts +217 -0
  238. package/src/commands/low-family/status-meta.ts +112 -0
  239. package/src/commands/low-family/types.ts +39 -0
  240. package/src/commands/med-family/cli-agent.ts +230 -0
  241. package/src/commands/med-family/fast-forward.ts +230 -0
  242. package/src/commands/med-family/ide.ts +163 -0
  243. package/src/commands/med-family/index.ts +37 -0
  244. package/src/commands/med-family/mesh-crud.ts +825 -0
  245. package/src/commands/med-family/mesh-host-pairing.ts +234 -0
  246. package/src/commands/med-family/mesh-queue.ts +131 -0
  247. package/src/commands/med-family/mesh-restart.ts +92 -0
  248. package/src/commands/med-family/types.ts +120 -0
  249. package/src/commands/mesh-coordinator.ts +334 -124
  250. package/src/commands/router.ts +2395 -3206
  251. package/src/commands/stream-commands.ts +8 -0
  252. package/src/commands/upgrade-helper.ts +310 -45
  253. package/src/config/chat-history.ts +483 -24
  254. package/src/config/config.ts +12 -0
  255. package/src/config/mesh-config.ts +353 -22
  256. package/src/config/recent-activity.ts +8 -2
  257. package/src/daemon/dev-auto-implement.ts +3 -2
  258. package/src/daemon/dev-cli-debug.ts +10 -1
  259. package/src/daemon/dev-server.ts +0 -541
  260. package/src/detection/cli-detector.ts +28 -9
  261. package/src/detection/ide-detector.ts +55 -16
  262. package/src/detection/win32-ide-version.ts +106 -0
  263. package/src/git/change-impact-config.ts +354 -0
  264. package/src/git/git-commands.ts +55 -14
  265. package/src/git/git-diff.ts +81 -11
  266. package/src/git/git-executor.ts +12 -0
  267. package/src/git/git-status.ts +574 -43
  268. package/src/git/git-types.ts +14 -62
  269. package/src/git/git-worktree.ts +8 -1
  270. package/src/git/index.ts +16 -0
  271. package/src/index.ts +171 -12
  272. package/src/installer.d.ts +1 -1
  273. package/src/installer.ts +8 -6
  274. package/src/ipc/local-ipc-server.ts +278 -0
  275. package/src/launch.d.ts +1 -1
  276. package/src/launch.ts +37 -28
  277. package/src/logging/async-batch-writer.ts +55 -0
  278. package/src/logging/command-log.ts +7 -5
  279. package/src/logging/log-redactor.ts +100 -0
  280. package/src/logging/log-tail-reader.ts +341 -0
  281. package/src/logging/logger.ts +14 -7
  282. package/src/mesh/contracts.ts +338 -0
  283. package/src/mesh/coordinator-prompt.ts +381 -33
  284. package/src/mesh/coordinator-registry.ts +121 -0
  285. package/src/mesh/mesh-active-work.ts +645 -0
  286. package/src/mesh/mesh-coordinator-config.ts +97 -0
  287. package/src/mesh/mesh-delivery-policy.ts +315 -0
  288. package/src/mesh/mesh-event-classify.ts +51 -0
  289. package/src/mesh/mesh-event-forwarding.ts +1575 -0
  290. package/src/mesh/mesh-event-trace.ts +67 -0
  291. package/src/mesh/mesh-events-coordinator.ts +30 -0
  292. package/src/mesh/mesh-events-pending.ts +590 -0
  293. package/src/mesh/mesh-events-stale.ts +363 -0
  294. package/src/mesh/mesh-events-utils.ts +425 -0
  295. package/src/mesh/mesh-events.ts +30 -1035
  296. package/src/mesh/mesh-fast-forward.ts +839 -0
  297. package/src/mesh/mesh-host-ownership.ts +73 -0
  298. package/src/mesh/mesh-init.ts +260 -0
  299. package/src/mesh/mesh-ledger-reconciliation.ts +12 -7
  300. package/src/mesh/mesh-ledger.ts +596 -102
  301. package/src/mesh/mesh-missions.ts +322 -0
  302. package/src/mesh/mesh-node-identity.ts +1887 -0
  303. package/src/mesh/mesh-queue-assignment.ts +1491 -0
  304. package/src/mesh/mesh-reconcile-loop.ts +1332 -0
  305. package/src/mesh/mesh-refine-batch.ts +197 -0
  306. package/src/mesh/mesh-refine-gates.ts +1652 -0
  307. package/src/mesh/mesh-refine-status.ts +231 -0
  308. package/src/mesh/mesh-review-inbox.ts +307 -0
  309. package/src/mesh/mesh-routing.ts +291 -0
  310. package/src/mesh/mesh-runtime-store.ts +1708 -0
  311. package/src/mesh/mesh-scheduling-runtime.ts +199 -0
  312. package/src/mesh/mesh-task-stats.ts +161 -0
  313. package/src/mesh/mesh-unresolved-forward-outbox.ts +185 -0
  314. package/src/mesh/mesh-warmup-deadline.ts +152 -0
  315. package/src/mesh/mesh-work-queue.ts +997 -141
  316. package/src/mesh/preview-freshness.ts +118 -0
  317. package/src/mesh/refine-config.ts +423 -0
  318. package/src/mesh/worktree-bootstrap-config.ts +331 -0
  319. package/src/providers/acp-provider-instance.ts +43 -10
  320. package/src/providers/approval-utils.d.ts +5 -0
  321. package/src/providers/approval-utils.ts +57 -5
  322. package/src/providers/chat-message-normalization.ts +46 -6
  323. package/src/providers/cli-provider-instance.ts +1416 -101
  324. package/src/providers/contracts.d.ts +55 -0
  325. package/src/providers/contracts.ts +150 -6
  326. package/src/providers/extension-provider-instance.ts +12 -7
  327. package/src/providers/external-sources.ts +218 -0
  328. package/src/providers/ide-provider-instance.ts +35 -12
  329. package/src/providers/manual-attendance.ts +85 -0
  330. package/src/providers/native-history/antigravity-cli-transcript.ts +643 -0
  331. package/src/providers/native-history/claude-cli-transcript.ts +396 -0
  332. package/src/providers/native-history/codex-cli-transcript.ts +479 -0
  333. package/src/providers/native-history/constants.ts +19 -0
  334. package/src/providers/native-history/dispatcher.ts +339 -0
  335. package/src/providers/native-history/hermes-cli-transcript.ts +230 -0
  336. package/src/providers/native-history/index.ts +30 -0
  337. package/src/providers/provider-instance-manager.ts +30 -0
  338. package/src/providers/provider-instance.ts +19 -1
  339. package/src/providers/provider-loader.ts +668 -50
  340. package/src/providers/provider-schema.ts +87 -14
  341. package/src/providers/provider-trust.ts +114 -0
  342. package/src/providers/read-chat-contract.ts +76 -16
  343. package/src/providers/sdk/README.md +49 -0
  344. package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
  345. package/src/providers/sdk/v1/builders/cli/detect-status.ts +313 -0
  346. package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
  347. package/src/providers/sdk/v1/builders/cli/parse-approval.ts +250 -0
  348. package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
  349. package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
  350. package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
  351. package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
  352. package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
  353. package/src/providers/sdk/v1/index.ts +152 -0
  354. package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
  355. package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
  356. package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
  357. package/src/providers/sdk/v1/schemas/cli/provider.schema.json +504 -0
  358. package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
  359. package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
  360. package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
  361. package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
  362. package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
  363. package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
  364. package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
  365. package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
  366. package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +125 -0
  367. package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
  368. package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
  369. package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
  370. package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
  371. package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
  372. package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
  373. package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
  374. package/src/providers/sdk/v1/types/cli/index.ts +365 -0
  375. package/src/providers/sdk/v1/types/common/index.ts +229 -0
  376. package/src/providers/sdk/v1/validators/index.ts +19 -0
  377. package/src/providers/sdk/v1/validators/manifest.ts +110 -0
  378. package/src/providers/sdk/v1/validators/taint.ts +309 -0
  379. package/src/providers/spec/adapter.ts +235 -0
  380. package/src/providers/spec/cli-adapter.ts +1051 -0
  381. package/src/providers/spec/evaluator.ts +407 -0
  382. package/src/providers/spec/fsm-driver.ts +1292 -0
  383. package/src/providers/spec/fsm-evaluator.ts +272 -0
  384. package/src/providers/spec/fsm-loader.ts +120 -0
  385. package/src/providers/spec/fsm-types.ts +273 -0
  386. package/src/providers/spec/native-history-executor.ts +1128 -0
  387. package/src/providers/spec/pre-launch-trust.ts +104 -0
  388. package/src/providers/spec/route.ts +51 -0
  389. package/src/providers/spec/types.ts +262 -0
  390. package/src/providers/status-monitor.d.ts +7 -7
  391. package/src/providers/status-monitor.ts +37 -22
  392. package/src/providers/transcript-v2.ts +567 -0
  393. package/src/providers/types/interactive-prompt.ts +536 -0
  394. package/src/providers/version-archive.ts +64 -24
  395. package/src/providers/working-dir.ts +23 -0
  396. package/src/repo-mesh-types.ts +542 -14
  397. package/src/runtime-defaults.ts +39 -0
  398. package/src/sessions/registry.ts +6 -0
  399. package/src/shared-types-extra.ts +2 -4
  400. package/src/shared-types.d.ts +8 -0
  401. package/src/shared-types.ts +64 -1
  402. package/src/status/builders.ts +26 -6
  403. package/src/status/normalize.ts +2 -0
  404. package/src/status/reporter.ts +19 -1
  405. package/src/status/snapshot.ts +95 -26
  406. package/src/system/hash.ts +23 -0
  407. package/src/system/host-memory.ts +29 -12
  408. package/src/system/load-better-sqlite3.ts +68 -0
  409. package/src/types.ts +5 -0
  410. package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +0 -17
  411. package/dist/mesh/mesh-sync.d.ts +0 -53
  412. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +0 -16
  413. package/src/cli-adapters/terminal-backends/xterm-backend.ts +0 -97
  414. package/src/mesh/mesh-sync.ts +0 -111
@@ -0,0 +1,33 @@
1
+ /**
2
+ * RF-ROUTER LOW family — shared types for the extracted low-coupling command
3
+ * handlers. Each handler is a pure function of (context, args): it reads only the
4
+ * router deps it needs and returns the exact CommandRouterResult the original
5
+ * `executeDaemonCommand` switch case returned, so the router facade is unchanged.
6
+ *
7
+ * Registry dispatch: DaemonCommandRouter.executeDaemonCommand looks up the cmd in
8
+ * lowFamilyRegistry BEFORE its switch; a hit returns the handler result, a miss
9
+ * falls through to the remaining switch (and ultimately CommandHandler delegation).
10
+ */
11
+ import type { CommandRouterDeps, CommandRouterResult } from '../router.js';
12
+ /** Mesh record resolved from the router's inline-mesh cache + local config. */
13
+ export type ResolvedMeshForCommand = {
14
+ mesh: any;
15
+ inline: boolean;
16
+ source: 'inline_cache' | 'inline_bootstrap' | 'local_config';
17
+ } | null;
18
+ export interface LowFamilyContext {
19
+ deps: CommandRouterDeps;
20
+ /**
21
+ * Bound `DaemonCommandRouter.getMeshForCommand`. A handful of LOW handlers
22
+ * (mesh-node-logs) must resolve a mesh node's owning daemonId from the
23
+ * router's inline-mesh cache, which is router instance state not present in
24
+ * `deps`. The router injects it at dispatch; handlers that don't need it
25
+ * ignore it. Optional so unit tests can omit it (and assert the guarded
26
+ * fallback) without constructing a full router.
27
+ */
28
+ getMeshForCommand?: (meshId: string, inlineMesh?: unknown, options?: {
29
+ preferInline?: boolean;
30
+ }) => Promise<ResolvedMeshForCommand>;
31
+ }
32
+ export type LowFamilyHandler = (ctx: LowFamilyContext, args: any) => Promise<CommandRouterResult>;
33
+ export type LowFamilyRegistry = Map<string, LowFamilyHandler>;
@@ -0,0 +1,2 @@
1
+ import type { MedFamilyHandler } from './types.js';
2
+ export declare const cliAgentHandlers: Record<string, MedFamilyHandler>;
@@ -0,0 +1,2 @@
1
+ import type { MedFamilyHandler } from './types.js';
2
+ export declare const fastForwardHandlers: Record<string, MedFamilyHandler>;
@@ -0,0 +1,10 @@
1
+ import type { CommandRouterResult } from '../router.js';
2
+ import type { MedFamilyContext, MedFamilyHandler } from './types.js';
3
+ /**
4
+ * IDE launch + CDP connect. Lifted verbatim from the original `launch_ide` switch
5
+ * case so restart_session / restart_ide can call it directly instead of recursing
6
+ * through executeDaemonCommand. Reads the router's CDP managers and detection
7
+ * caches via ctx.deps.
8
+ */
9
+ export declare function launchIde(ctx: MedFamilyContext, args: any): Promise<CommandRouterResult>;
10
+ export declare const ideHandlers: Record<string, MedFamilyHandler>;
@@ -0,0 +1,3 @@
1
+ import type { MedFamilyRegistry } from './types.js';
2
+ export type { MedFamilyContext, MedFamilyHandler, MedFamilyRegistry } from './types.js';
3
+ export declare const medFamilyRegistry: MedFamilyRegistry;
@@ -0,0 +1,2 @@
1
+ import type { MedFamilyHandler } from './types.js';
2
+ export declare const meshCrudHandlers: Record<string, MedFamilyHandler>;
@@ -0,0 +1,2 @@
1
+ import type { MedFamilyHandler } from './types.js';
2
+ export declare const meshHostPairingHandlers: Record<string, MedFamilyHandler>;
@@ -0,0 +1,2 @@
1
+ import type { MedFamilyHandler } from './types.js';
2
+ export declare const meshQueueHandlers: Record<string, MedFamilyHandler>;
@@ -0,0 +1,2 @@
1
+ import type { MedFamilyHandler } from './types.js';
2
+ export declare const meshRestartHandlers: Record<string, MedFamilyHandler>;
@@ -0,0 +1,116 @@
1
+ /**
2
+ * RF-ROUTER MED family — shared types for the extracted medium-coupling command
3
+ * handlers. Like the LOW family, each handler is a function of (context, args)
4
+ * that returns the exact CommandRouterResult the original `executeDaemonCommand`
5
+ * switch case returned, so the router facade is unchanged.
6
+ *
7
+ * Unlike the LOW family, MED handlers need a handful of router-private
8
+ * collaborators (mesh resolution, owner gating, inline-cache mutation, worktree /
9
+ * session cleanup, refine job starters, IDE launch). The router binds these onto
10
+ * MedFamilyContext at dispatch; they are NOT reachable from `deps`. The IDE family
11
+ * also needs `launchIde` to break the original `launch_ide`/`restart_*`
12
+ * self-recursion through executeDaemonCommand.
13
+ *
14
+ * Registry dispatch: DaemonCommandRouter.executeDaemonCommand looks up the cmd in
15
+ * medFamilyRegistry BEFORE its switch; a hit returns the handler result, a miss
16
+ * falls through to the remaining switch (and ultimately CommandHandler delegation).
17
+ */
18
+ import type { CommandRouterDeps, CommandRouterResult, MeshGitProbeCache } from '../router.js';
19
+ import type { RepoMeshSessionCleanupMode } from '../../repo-mesh-types.js';
20
+ import type { WorktreeBootstrapState } from '../../mesh/worktree-bootstrap-config.js';
21
+ /** Mesh record resolved from the router's inline-mesh cache + local config. */
22
+ export type ResolvedMeshForCommand = {
23
+ mesh: any;
24
+ inline: boolean;
25
+ source: 'inline_cache' | 'inline_bootstrap' | 'local_config';
26
+ } | null;
27
+ /** Result of the router's local worktree-node cleanup. */
28
+ export type CleanupLocalWorktreeNodeResult = {
29
+ success: true;
30
+ skipped?: boolean;
31
+ removedPath?: string;
32
+ repoRoot?: string;
33
+ reason?: string;
34
+ fallback?: string;
35
+ forced?: boolean;
36
+ convergence?: Record<string, unknown>;
37
+ recovered?: boolean;
38
+ residue?: boolean;
39
+ residueWarning?: string;
40
+ residueError?: string;
41
+ } | {
42
+ success: false;
43
+ code: string;
44
+ error: string;
45
+ recoveryHint: string;
46
+ convergence?: Record<string, unknown>;
47
+ };
48
+ /**
49
+ * Router-private collaborators injected at dispatch. Each is a bound method or
50
+ * field of DaemonCommandRouter; handlers that don't need a given collaborator
51
+ * simply ignore it. The router owns this instance state (inline-mesh cache,
52
+ * aggregate-status cache, session/worktree cleanup, refine jobs), so it cannot be
53
+ * read from `deps` — the registry receives bound references instead.
54
+ */
55
+ export interface MedFamilyContext {
56
+ deps: CommandRouterDeps;
57
+ /** Bound `DaemonCommandRouter.getMeshForCommand`. */
58
+ getMeshForCommand: (meshId: string, inlineMesh?: unknown, options?: {
59
+ preferInline?: boolean;
60
+ }) => Promise<ResolvedMeshForCommand>;
61
+ /** Bound `DaemonCommandRouter.getCachedInlineMesh`. */
62
+ getCachedInlineMesh: (meshId: string, inlineMesh?: unknown) => any | undefined;
63
+ /** Bound `DaemonCommandRouter.requireMeshHostMutationOwner` (owner gate). */
64
+ requireMeshHostMutationOwner: (meshId: string, inlineMesh: unknown, operation: string) => Promise<CommandRouterResult | null>;
65
+ /** Bound `DaemonCommandRouter.invalidateAggregateMeshStatus`. */
66
+ invalidateAggregateMeshStatus: (meshId: string) => void;
67
+ /** Bound `DaemonCommandRouter.updateInlineMeshNode`. */
68
+ updateInlineMeshNode: (meshId: string, mesh: any, node: any) => void;
69
+ /** Bound `DaemonCommandRouter.removeInlineMeshNode`. */
70
+ removeInlineMeshNode: (meshId: string, mesh: any, nodeId: string) => boolean;
71
+ /** Bound `DaemonCommandRouter.normalizeMeshSessionCleanupMode`. */
72
+ normalizeMeshSessionCleanupMode: (value: unknown) => RepoMeshSessionCleanupMode;
73
+ /** Bound `DaemonCommandRouter.cleanupMeshSessions`. */
74
+ cleanupMeshSessions: (args: {
75
+ meshId: string;
76
+ nodeId: string;
77
+ node: any;
78
+ mode: RepoMeshSessionCleanupMode;
79
+ sessionIds?: string[];
80
+ dryRun?: boolean;
81
+ source?: 'mesh_cleanup_sessions' | 'mesh_remove_node';
82
+ }) => Promise<{
83
+ success: boolean;
84
+ [key: string]: unknown;
85
+ }>;
86
+ /** Bound `DaemonCommandRouter.cleanupLocalWorktreeNode`. */
87
+ cleanupLocalWorktreeNode: (args: {
88
+ mesh: any;
89
+ node: any;
90
+ nodeId: string;
91
+ force?: boolean;
92
+ }) => Promise<CleanupLocalWorktreeNodeResult>;
93
+ /** Bound `DaemonCommandRouter.startMeshRefineJob` (async execute path). */
94
+ startMeshRefineJob: (meshId: string, nodeId: string, args: any) => Promise<CommandRouterResult>;
95
+ /** Bound `DaemonCommandRouter.batchRefineMeshNodes` (dry-run batch plan). */
96
+ batchRefineMeshNodes: (meshId: string, requestedNodeIds: string[] | undefined, args: any) => Promise<CommandRouterResult>;
97
+ /** Bound `DaemonCommandRouter.startMeshRefineBatchJob` (async batch execute). */
98
+ startMeshRefineBatchJob: (meshId: string, requestedNodeIds: string[] | undefined, args: any) => Promise<CommandRouterResult>;
99
+ /** Bound `DaemonCommandRouter.stopIde` (CDP disconnect + cleanup + optional kill). */
100
+ stopIde: (ideType: string, killProcess?: boolean) => Promise<void>;
101
+ /**
102
+ * Module-level `launchIde` helper bound to this context. The original
103
+ * `launch_ide` case body, lifted into a free function so `restart_session` /
104
+ * `restart_ide` can invoke the IDE launch directly instead of recursing
105
+ * through `executeDaemonCommand('launch_ide')` (which would re-enter the
106
+ * registry). Byte-identical to the original case body.
107
+ */
108
+ launchIde: (args: any) => Promise<CommandRouterResult>;
109
+ /** Router's inline-mesh cache (read/write of resolved mesh records). */
110
+ inlineMeshCache: Map<string, any>;
111
+ /** Router's mesh git-probe cache (reused direct-truth probes for get_mesh). */
112
+ meshGitProbeCache: MeshGitProbeCache;
113
+ }
114
+ export type MedFamilyHandler = (ctx: MedFamilyContext, args: any) => Promise<CommandRouterResult | null>;
115
+ export type MedFamilyRegistry = Map<string, MedFamilyHandler>;
116
+ export type { WorktreeBootstrapState };
@@ -1,4 +1,4 @@
1
- import type { ProviderModule, MeshCoordinatorMcpConfigFormat } from '../providers/contracts.js';
1
+ import type { MeshCoordinatorMcpConfigFormat, MeshCoordinatorSystemPromptInjection, ProviderModule } from '../providers/contracts.js';
2
2
  export interface MeshCoordinatorMcpServerLaunch {
3
3
  command: string;
4
4
  args: string[];
@@ -25,6 +25,7 @@ export type MeshCoordinatorSetup = {
25
25
  command: string;
26
26
  requiresRestart: boolean;
27
27
  instructions: string;
28
+ mcpServer: MeshCoordinatorMcpServerLaunch;
28
29
  } | {
29
30
  kind: 'unsupported';
30
31
  reason: string;
@@ -42,3 +43,86 @@ export interface ResolveMeshCoordinatorSetupOptions {
42
43
  }
43
44
  export declare function createHermesManualMeshCoordinatorSetup(meshId: string, workspace: string): MeshCoordinatorSetup;
44
45
  export declare function resolveMeshCoordinatorSetup(options: ResolveMeshCoordinatorSetupOptions): MeshCoordinatorSetup;
46
+ /**
47
+ * Apply a provider's declared system-prompt injection rule, mutating `cliArgs`
48
+ * and `launchEnv` in place and writing any required workspace context file.
49
+ *
50
+ * Replaces the previous hard-coded `if (cliType === 'claude-cli') ... else if
51
+ * (cliType === 'hermes-cli') ...` branches in router.ts. Adding a new CLI is
52
+ * now provider.v1.json data, not a router edit.
53
+ *
54
+ * Failures are non-fatal: log and continue with whatever was applied so the
55
+ * coordinator session still launches, just without the prompt for that
56
+ * provider. A missing/unknown rule means "skip injection" — safe by default
57
+ * (the previous fallback unconditionally pushed --append-system-prompt onto
58
+ * every non-Claude CLI, which crashed agy on launch).
59
+ */
60
+ export interface CoordinatorInjectionEffect {
61
+ /** Absolute path the daemon wrote a wrapper-blocked file to. Only set for
62
+ * context_file injection. R48 schedules a strip after launch so workers
63
+ * don't see the wrapper on disk; R47's unregister cleanup uses it as a
64
+ * fallback if the timer never fires (process crash, etc). */
65
+ contextFilePath?: string;
66
+ }
67
+ export declare function applyMeshCoordinatorSystemPromptInjection(systemPrompt: string, injection: MeshCoordinatorSystemPromptInjection | undefined, ctx: {
68
+ cliArgs: string[];
69
+ launchEnv: Record<string, string>;
70
+ workspace: string;
71
+ cliType: string;
72
+ }): CoordinatorInjectionEffect;
73
+ /**
74
+ * Strip the daemon's wrapper block from a context_file we previously wrote.
75
+ *
76
+ * Used in two places:
77
+ * 1. R48 inject-then-remove: ~5s after spawn, after agy/gemini have read
78
+ * the file into their in-memory system-prompt cache. Removing it from
79
+ * disk at that point doesn't affect the running coordinator but keeps
80
+ * worker sessions (or fresh non-coordinator launches) in the same
81
+ * workspace from picking up our wrapper.
82
+ * 2. R47 unregister fallback: if the timer never fires (process crash,
83
+ * kill -9), coordinator-registry.unregisterMeshCoordinator runs the
84
+ * same logic when its entry is dropped.
85
+ *
86
+ * Idempotent: missing file is fine, missing sentinels are fine, returns
87
+ * silently. Leaves user-authored content outside the sentinels intact.
88
+ * Deletes the file outright if our wrapper was the only content.
89
+ */
90
+ export declare function stripCoordinatorWrapperFile(filePath: string): void;
91
+ export interface PtyExecResult {
92
+ exitCode: number | null;
93
+ signal: number | null;
94
+ output: string;
95
+ timedOut: boolean;
96
+ }
97
+ export interface MeshCoordinatorRegistrationStep {
98
+ command: string;
99
+ args: string[];
100
+ required: boolean;
101
+ label: 'remove_existing' | 'register';
102
+ }
103
+ /**
104
+ * Codex rejects `mcp add` when a server with the same name already exists.
105
+ * Replace that entry before registering so transport/mesh changes do not leave
106
+ * a fresh coordinator attached to stale MCP launch arguments.
107
+ */
108
+ export declare function buildMeshCoordinatorRegistrationPlan(cliType: string, serverName: string, registrationCommand: string): MeshCoordinatorRegistrationStep[];
109
+ /**
110
+ * Run a one-shot CLI command under a real PTY and collect its output.
111
+ *
112
+ * Some provider mcp-registration commands (`agy mcp add`, future bubbletea
113
+ * TUIs) refuse to run without `/dev/tty`. Daemon-side `execFileSync` runs
114
+ * pipe-only, so those commands fail with errors like
115
+ * `bubbletea: error opening TTY: open /dev/tty: device not configured`
116
+ * and silently skip the registration, leaving the launched session
117
+ * without the adhdev-mesh MCP tools — which is exactly what we saw with
118
+ * agy coordinators.
119
+ *
120
+ * Wrapping the registration through node-pty gives the child a real PTY,
121
+ * so the bubbletea check passes. We close stdin immediately and just
122
+ * collect stdout until the process exits or the timeout fires.
123
+ */
124
+ export declare function execUnderPty(command: string, args: string[], options?: {
125
+ cwd?: string;
126
+ env?: Record<string, string>;
127
+ timeoutMs?: number;
128
+ }): Promise<PtyExecResult>;
@@ -14,6 +14,9 @@ import { DaemonCliManager } from './cli-manager.js';
14
14
  import type { ProviderLoader } from '../providers/provider-loader.js';
15
15
  import type { ProviderInstanceManager } from '../providers/provider-instance-manager.js';
16
16
  import { SessionRegistry } from '../sessions/registry.js';
17
+ export * from '../mesh/mesh-node-identity.js';
18
+ export * from '../mesh/mesh-refine-gates.js';
19
+ export * from '../mesh/mesh-coordinator-config.js';
17
20
  export interface SessionHostControlPlane {
18
21
  getDiagnostics(payload?: {
19
22
  includeSessions?: boolean;
@@ -55,12 +58,14 @@ export interface CommandRouterDeps {
55
58
  value: any[];
56
59
  };
57
60
  sessionRegistry: SessionRegistry;
58
- /** Callback for CDP manager creation after launch_ide */
61
+ /** Callback after CDP manager created (transport-specific extras) */
59
62
  onCdpManagerCreated?: (ideType: string, manager: DaemonCdpManager) => void;
60
63
  /** Callback after IDE connected (e.g., startAgentStreamPolling) */
61
64
  onIdeConnected?: () => void;
62
65
  /** Callback after status change (stop_ide, restart) */
63
66
  onStatusChange?: () => void;
67
+ /** Callback when a mesh state is invalidated */
68
+ onMeshStateChange?: (meshId: string) => void;
64
69
  /** Callback after chat-related commands */
65
70
  onPostChatCommand?: () => void;
66
71
  /** Get a connected CDP manager (for agent stream reset check) */
@@ -81,26 +86,138 @@ export interface CommandRouterResult {
81
86
  success: boolean;
82
87
  [key: string]: unknown;
83
88
  }
89
+ /**
90
+ * Confine a spec path to ~/.adhdev/providers, defeating both prefix-bypass
91
+ * (e.g. ".../providers-evil") and symlink escape. Resolves the real path of
92
+ * the *parent* directory (the file may not exist yet for writes), requires the
93
+ * basename to be a literal `*.json`, and re-joins under the verified parent so
94
+ * the returned path can't point outside the tree. Used by get/write_spec_source.
95
+ */
96
+ export declare function normalizeStandaloneHostCommandUrl(hostAddress: string): string;
97
+ export declare function buildMemberJoinNode(mesh: any, args: any, fallbackDaemonId?: string): Record<string, unknown> | null;
84
98
  export declare class DaemonCommandRouter {
85
99
  private deps;
86
100
  /** In-memory cache for cloud-originating meshes passed via inlineMesh.
87
101
  * Allows the MCP server to query mesh data via get_mesh even when
88
102
  * the mesh doesn't exist in the local meshes.json file. */
89
103
  private inlineMeshCache;
104
+ /** Tombstones for inline mesh nodes removed via remove_mesh_node, keyed by
105
+ * meshId → set of removed nodeIds. The dashboard keeps echoing the removed
106
+ * node in the inlineMesh it attaches to every command; without a tombstone,
107
+ * reconcileInlineMeshCache MERGEs it straight back (resurrection). A
108
+ * tombstoned node is skipped during reconcile only while its workspace is
109
+ * absent from disk — a genuine re-registration (same nodeId, workspace back
110
+ * on disk) clears the tombstone and merges normally, preserving clone
111
+ * worktree visibility and legitimate node re-creation. */
112
+ private removedInlineMeshNodeIds;
113
+ /** Coordinator-owned whole-mesh aggregate status snapshots. Browser callers read this by default. */
114
+ private aggregateMeshStatusCache;
115
+ /** Shared per-peer git_status probe dedup + recently-probed reuse gate.
116
+ * Spans separate mesh_status/get_mesh calls so the dashboard auto-retry
117
+ * loop cannot storm a slow peer with back-to-back refreshUpstream probes. */
118
+ private meshGitProbeCache;
119
+ /** In-memory async Refinery jobs keyed by meshId:nodeId to reject/return duplicate in-flight requests. */
120
+ private runningRefineJobs;
121
+ /** Terminal async Refinery jobs preserve a clear answer after the worktree node has been removed. */
122
+ private terminalRefineJobs;
123
+ /** In-memory async batch Refinery jobs keyed by meshId (one batch convergence per mesh at a time). */
124
+ private runningRefineBatchJobs;
125
+ /** Terminal async batch Refinery jobs preserve the last batch outcome for late readers. */
126
+ private terminalRefineBatchJobs;
90
127
  constructor(deps: CommandRouterDeps);
128
+ private cloneJsonValue;
129
+ private hydrateCachedAggregateMeshStatusFromInline;
130
+ private getCachedAggregateMeshStatus;
131
+ private rememberAggregateMeshStatus;
132
+ getCachedInlineMeshNodes(): any[];
133
+ /**
134
+ * Resolve the REMOTE worker daemonId that owns a given session, when the session
135
+ * belongs to a mesh node hosted on a DIFFERENT daemon than this coordinator.
136
+ *
137
+ * The coordinator does not host remote-worker session instances in its own
138
+ * instanceManager/sessionRegistry — only their cached mesh-node metadata. A
139
+ * dashboard-issued session-scoped command (invoke_provider_script / resolve_action /
140
+ * set_mode / …) lands on the coordinator with a targetSessionId the coordinator can't
141
+ * find locally, and without forwarding it dies as "Live session not found". send_chat
142
+ * happens to survive (its target resolves to the worker by another route), but the
143
+ * controlbar commands do not — so the controlbar buttons appear to do nothing.
144
+ *
145
+ * Mirror the existing node-level remote-forward pattern (fast_forward_mesh_node etc.):
146
+ * scan the candidate mesh nodes for the one hosting the targetSessionId, and return its
147
+ * daemonId when that daemonId is a remote daemon (i.e. not this coordinator's own
148
+ * statusInstanceId). Returns undefined for a locally-hosted session (no forward — execute
149
+ * locally as before) or when ownership can't be resolved.
150
+ *
151
+ * The candidate set spans BOTH the cached inline-mesh nodes and the live aggregate
152
+ * mesh-status snapshots. The inline cache reliably carries only each node's single primary
153
+ * session (cachedStatus.activeSession), so a worker hosting more than one session exposes its
154
+ * non-primary sessions only on the aggregate snapshot nodes (status.activeSessions /
155
+ * activeSessionDetails, built from live session records). collectMeshNodeHostedSessionIds does
156
+ * the wider plural-shape scan so a controlbar/modal command targeting a non-primary remote
157
+ * session still resolves its owner — the singular readCachedInlineMeshActiveSessions semantics
158
+ * other consumers depend on stay untouched.
159
+ */
160
+ resolveRemoteMeshSessionOwnerDaemonId(sessionId: string): string | undefined;
161
+ /**
162
+ * Candidate nodes for remote-session owner resolution: the cached inline-mesh nodes (which
163
+ * carry each node's primary session) plus the nodes from every cached aggregate mesh-status
164
+ * snapshot (which carry each node's full live session list). getCachedInlineMeshNodes()
165
+ * returns a fresh array, so appending the aggregate nodes never mutates cached state.
166
+ */
167
+ private collectMeshSessionOwnerCandidateNodes;
91
168
  getCachedInlineMesh(meshId: string, inlineMesh?: unknown): any | undefined;
92
169
  private warmInlineMeshCache;
93
170
  private getMeshForCommand;
171
+ private invalidateAggregateMeshStatus;
172
+ /**
173
+ * Build the MedFamilyContext handed to RF-ROUTER MED family handlers. Binds the
174
+ * router-private collaborators those handlers need (mesh resolution, owner
175
+ * gating, inline-cache mutation, worktree / session cleanup, refine job
176
+ * starters, IDE stop/launch) plus the inline-mesh and git-probe caches. The
177
+ * `launchIde` field closes over the freshly-built context so restart_session /
178
+ * restart_ide invoke the IDE launch directly instead of recursing through
179
+ * executeDaemonCommand('launch_ide').
180
+ */
181
+ private buildMedFamilyContext;
182
+ /**
183
+ * Build the HighFamilyContext handed to RF-ROUTER HIGH family handlers. Binds
184
+ * the router-private collaborators those handlers need (mesh resolution, the
185
+ * aggregate-status memory cache + its bound read/write helpers, the
186
+ * running-refine-job table, inline-mesh + git-probe caches, and the router's
187
+ * own `execute` for the get_mesh_review_inbox mesh_status re-entry). HIGH
188
+ * handlers reach more router-owned state than MED, but the binding shape is
189
+ * the same: bound methods + direct field references, none reachable from
190
+ * `deps`.
191
+ */
192
+ private buildHighFamilyContext;
193
+ private requireMeshHostMutationOwner;
94
194
  private updateInlineMeshNode;
95
195
  private removeInlineMeshNode;
196
+ private tombstoneRemovedInlineMeshNode;
197
+ /** Filter an incoming inline mesh against this mesh's tombstones before it is
198
+ * reconciled into the cache. A tombstoned node is dropped only while its
199
+ * workspace is still absent from disk; if the workspace is back (genuine
200
+ * re-registration), the tombstone is cleared and the node merges normally. */
201
+ private applyInlineMeshNodeTombstones;
96
202
  private normalizeMeshSessionCleanupMode;
97
203
  private sessionMatchesMeshNode;
204
+ /**
205
+ * Best-effort recursive removal of a managed worktree directory.
206
+ *
207
+ * The git-registry de-registration is the safety-critical step of worktree
208
+ * teardown; a leftover directory must never gate dropping the node from the
209
+ * mesh. On Windows, `fs.rmSync` can throw EINVAL/EPERM/EBUSY on submodule
210
+ * gitlink (`.git`) files, long paths, junctions, or while a just-stopped
211
+ * delegate session is still releasing a handle/cwd on the directory. This
212
+ * helper absorbs those errors (never throws), with bounded retries + backoff
213
+ * to give handles time to release, and reports whether residue remains.
214
+ */
215
+ private bestEffortRemoveWorktreeDir;
98
216
  private cleanupLocalWorktreeNode;
99
217
  private getWorktreeForceCleanupConvergence;
100
218
  private isCompletedHostedSession;
101
219
  private recordIntentionalMeshSessionStop;
102
220
  private cleanupMeshSessions;
103
- private traceSessionHostAction;
104
221
  /**
105
222
  * Unified command routing.
106
223
  * Returns result for all commands:
@@ -113,6 +230,114 @@ export declare class DaemonCommandRouter {
113
230
  * @param source Log source ('ws' | 'p2p' | 'standalone' | etc.)
114
231
  */
115
232
  execute(cmd: string, args: any, source?: string): Promise<CommandRouterResult>;
233
+ private buildRefineJobKey;
234
+ private buildRefineJobHandle;
235
+ private queueRefineJobEvent;
236
+ private appendRefineJobLedger;
237
+ /**
238
+ * On daemon restart, scan all mesh ledgers for refine jobs that were dispatched
239
+ * but never completed/failed (i.e. the daemon died mid-job). Re-queue each one
240
+ * so the job runs to completion automatically without coordinator intervention.
241
+ */
242
+ resumePendingRefineJobsOnStartup(): Promise<void>;
243
+ /**
244
+ * Synchronous refinery for a single worktree node — the gate pipeline that
245
+ * validates, preflights (patch-equivalence / submodule-reachability /
246
+ * no-op), merges, aligns submodules, cleans up the worktree node and
247
+ * (optionally) pushes. The body is a flat sequence of stage methods; each
248
+ * stage either returns a terminal CommandRouterResult (gate failure or a
249
+ * successful already-merged short-circuit) or `continue` with the extended
250
+ * context. Behavior — stage order, every early-exit, and every result shape —
251
+ * is identical to the previous single inlined body.
252
+ */
253
+ private executeMeshRefineNodeSynchronously;
254
+ /**
255
+ * resolve_refs stage: resolve the mesh / worktree node / source node /
256
+ * repoRoot, then the worktree branch, base branch, fetched base head and
257
+ * branch head. Seeds the RefineContext consumed by every later stage.
258
+ */
259
+ private refineResolveRefsStage;
260
+ /**
261
+ * validation stage: run the refinery validation gate (typecheck / test /
262
+ * lint / build per node config) and block on failure or when no allowlisted
263
+ * command was available. On pass, stores the summary on the context.
264
+ */
265
+ private refineValidationStage;
266
+ /**
267
+ * patch_equivalence stage: preflight that the worktree branch's cumulative
268
+ * patch is equivalent to base+branch. On a "behind base" branch, auto-rebase
269
+ * once and re-check; on an empty merge-tree with real branch changes, treat as
270
+ * already-merged-via-another-path and short-circuit to cleanup. Mutates the
271
+ * context's branchHead (after rebase) and patchEquivalence (rebased gate).
272
+ */
273
+ private refinePatchEquivalenceStage;
274
+ /**
275
+ * submodule_reachability stage: verify every submodule gitlink commit that
276
+ * would land via the merge is reachable from its configured remote main
277
+ * branch (optionally auto-publishing when policy allows). Blocks the merge
278
+ * when any commit is unreachable. Stores the result on the context.
279
+ */
280
+ private refineSubmoduleReachabilityStage;
281
+ /**
282
+ * effective_diff stage (no-op guard): block a silent no-op merge where the
283
+ * branch produces no effective root-tree diff against base — typically a
284
+ * submodule that has commits but whose root-level gitlink (pointer) bump was
285
+ * never committed, so the merge would land nothing real on main.
286
+ */
287
+ private refineEffectiveDiffStage;
288
+ /**
289
+ * merge + finalize stage: perform the --no-ff merge, align submodule
290
+ * checkouts after merge, clean up (remove) the worktree node per policy,
291
+ * append the refinery ledger entry, and (unless approval is required) push the
292
+ * base branch. Always terminal — produces the final CommandRouterResult.
293
+ */
294
+ private refineMergeAndFinalizeStage;
295
+ /**
296
+ * Batch refinery: converge multiple sibling worktree nodes onto the base branch
297
+ * in one sequential pipeline, absorbing the rebase + patch-equivalence churn that
298
+ * arises when several siblings touch the same submodule.
299
+ *
300
+ * Reuses executeMeshRefineNodeSynchronously per node — every node goes through the
301
+ * exact same validation / patch-equivalence / submodule-reachability / merge / cleanup
302
+ * gates, including its built-in auto-rebase onto fresh origin/<base>. Because each
303
+ * node fetches origin/<base> at the start of its own refine, a node merged earlier in
304
+ * the batch advances the base, and the next node's refine auto-rebases onto it before
305
+ * re-running patch-equivalence. No force-push, no reset — conflicting nodes are
306
+ * isolated as blocked_review while the rest of the batch proceeds.
307
+ */
308
+ private batchRefineMeshNodes;
309
+ /**
310
+ * Convergence core shared by the synchronous batch entry and the async batch job.
311
+ * Refines each node in order: the per-node refine pipeline fetches origin/<base>
312
+ * fresh, so each merged sibling advances the base before the next node's auto-rebase
313
+ * + patch-equivalence re-check. A blocked/failed node is isolated; the batch
314
+ * continues with the remaining nodes. Does NOT touch the per-node merge logic — it
315
+ * only sequences calls to executeMeshRefineNodeSynchronously and aggregates outcomes.
316
+ */
317
+ private runMeshRefineBatchConvergence;
318
+ private buildRefineBatchJobKey;
319
+ private buildRefineBatchJobHandle;
320
+ /**
321
+ * Emit a batch Refinery terminal/accepted event through the SAME pending-event +
322
+ * forward mechanism single-node refine uses (queueRefineJobEvent), so the
323
+ * coordinator's existing refine:accepted/completed/failed handling and message
324
+ * renderer apply unchanged. The aggregate per-node results ride along in `result`.
325
+ */
326
+ private queueRefineBatchJobEvent;
327
+ private appendRefineBatchJobLedger;
328
+ private finishMeshRefineBatchJob;
329
+ /**
330
+ * Async entry for the batch Refinery execute path. Mirrors startMeshRefineJob:
331
+ * resolves the plan synchronously (so target/ordering errors and the dry-run shape
332
+ * stay synchronous), then for execute=true registers an in-flight batch job, returns
333
+ * {async:true, status:'accepted', batch:true, ...plan} immediately, and runs the
334
+ * convergence loop in the background — emitting the same terminal refine event.
335
+ * Idempotent: a batch already in flight for this mesh returns the running handle
336
+ * with duplicate:true rather than spawning a second background job.
337
+ */
338
+ private startMeshRefineBatchJob;
339
+ private finishMeshRefineJob;
340
+ private startMeshRefineJob;
116
341
  /**
117
342
  * Daemon-level command execution (IDE start/stop/restart, CLI, detect, logs).
118
343
  * Returns null if not handled at this level → caller delegates to CommandHandler.
@@ -39,6 +39,46 @@ export declare function buildPinnedGlobalInstallCommand(options: {
39
39
  }): PinnedGlobalInstallCommand;
40
40
  export declare function getNpmExecOptions(platform?: NodeJS.Platform): NpmExecOptions;
41
41
  export declare function execNpmCommandSync(args: string[], options?: ExecFileSyncOptions, surface?: Pick<CurrentGlobalInstallSurface, 'npmExecutable' | 'npmArgsPrefix' | 'execOptions'>): Buffer | string;
42
- export declare function stopSessionHostProcesses(appName: string): void;
42
+ export declare function stopSessionHostProcesses(appName: string): Promise<void>;
43
+ /**
44
+ * Enumerate processes that have a locked native addon (conpty.node /
45
+ * ghostty-vt.dll) of *this* install memory-mapped.
46
+ *
47
+ * `stopSessionHostProcesses()` only knows the single managed session-host pid, so
48
+ * any *foreign* holder — e.g. an orphaned `pty_*probe*.cjs` left in `%TEMP%` — is
49
+ * invisible to it and keeps the addon locked through every install retry, dooming
50
+ * the upgrade with EBUSY. This scans by the module's full path so we only ever
51
+ * target a holder of the exact `packageRoot` being replaced (never an unrelated
52
+ * install's copy). Windows-only — these locks don't exist on POSIX.
53
+ */
54
+ export declare function listForeignNativeAddonHolders(packageRoot: string | null | undefined): Array<{
55
+ pid: number;
56
+ commandLine: string | null;
57
+ }>;
58
+ /**
59
+ * Terminate every foreign process holding this install's native addon mapped,
60
+ * then wait for each to actually exit so the mapping is released before npm
61
+ * copies the file into its staging dir. Returns what it found/killed so the
62
+ * caller can surface an actionable recovery message on failure.
63
+ */
64
+ export declare function stopForeignNativeAddonHolders(packageRoot: string | null | undefined, options?: {
65
+ parentPid?: number;
66
+ }): Promise<Array<{
67
+ pid: number;
68
+ commandLine: string | null;
69
+ killed: boolean;
70
+ }>>;
71
+ /**
72
+ * Best-effort removal of a leftover npm staging entry.
73
+ *
74
+ * A stale staging dir can hold a locked native binary — e.g. `ghostty-vt.dll`
75
+ * from `@adhdev/ghostty-vt-node` still mapped by a lingering session-host
76
+ * process — which makes `rmSync` throw `EPERM` on Windows. Staging cleanup is
77
+ * only housekeeping: the leftover is inert and npm creates its own fresh
78
+ * staging dir for the real install, so a lock on an old leftover must NOT abort
79
+ * the upgrade. Log and continue instead of letting the error propagate.
80
+ */
81
+ export declare function safeRemoveStaleEntry(target: string, label: string): void;
82
+ export declare function cleanupStaleGlobalInstallDirs(pkgName: string, surface: CurrentGlobalInstallSurface): void;
43
83
  export declare function spawnDetachedDaemonUpgradeHelper(payload: DaemonUpgradeHelperPayload): void;
44
84
  export declare function maybeRunDaemonUpgradeHelperFromEnv(): Promise<boolean>;
@@ -110,12 +110,21 @@ export declare function readProviderChatHistory(agentType: string, options?: {
110
110
  excludeRecentCount?: number;
111
111
  historyBehavior?: ProviderHistoryBehavior;
112
112
  scripts?: ProviderNativeHistoryScripts;
113
+ excludeInProgressTurn?: boolean;
114
+ sessionStartedAtMs?: number;
115
+ envOverrides?: Record<string, string>;
116
+ forceRefresh?: boolean;
113
117
  }): {
114
118
  messages: HistoryMessage[];
115
119
  hasMore: boolean;
116
120
  source: 'provider-native' | 'adhdev-mirror' | 'native-unavailable';
117
121
  sourcePath?: string;
118
122
  sourceMtimeMs?: number;
123
+ providerSessionId?: string;
124
+ workspace?: string;
125
+ nativeHistoryCoverage?: string;
126
+ partialReason?: string;
127
+ unavailableReason?: string;
119
128
  };
120
129
  export declare function listProviderHistorySessions(agentType: string, options?: {
121
130
  canonicalHistory?: ProviderCanonicalHistoryConfig;
@@ -86,6 +86,11 @@ export declare function isStableMachineId(machineId?: string | null): boolean;
86
86
  * Get the config directory path
87
87
  */
88
88
  export declare function getConfigDir(): string;
89
+ /**
90
+ * Get the daemon runtime data directory (~/.adhdev/daemon/).
91
+ * Distinct from the user-config dir so runtime state can be cleared independently.
92
+ */
93
+ export declare function getDaemonDataDir(): string;
89
94
  /**
90
95
  * Load configuration from disk
91
96
  */