@adhdev/daemon-core 0.9.82-rc.48 → 0.9.82-rc.481

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 (473) 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 +220 -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 +23 -0
  22. package/dist/commands/chat-commands-scope.d.ts +39 -0
  23. package/dist/commands/chat-commands-shared.d.ts +33 -0
  24. package/dist/commands/chat-commands-write.d.ts +14 -0
  25. package/dist/commands/chat-commands.d.ts +10 -23
  26. package/dist/commands/cli-manager.d.ts +51 -1
  27. package/dist/commands/handler.d.ts +125 -0
  28. package/dist/commands/high-family/index.d.ts +3 -0
  29. package/dist/commands/high-family/mesh-coordinator-launch.d.ts +2 -0
  30. package/dist/commands/high-family/mesh-events.d.ts +2 -0
  31. package/dist/commands/high-family/mesh-status.d.ts +2 -0
  32. package/dist/commands/high-family/types.d.ts +64 -0
  33. package/dist/commands/low-family/coordinator-prompt.d.ts +9 -0
  34. package/dist/commands/low-family/daemon-lifecycle.d.ts +2 -0
  35. package/dist/commands/low-family/diagnostics.d.ts +2 -0
  36. package/dist/commands/low-family/index.d.ts +3 -0
  37. package/dist/commands/low-family/mesh-ledger.d.ts +10 -0
  38. package/dist/commands/low-family/mesh-node-logs.d.ts +2 -0
  39. package/dist/commands/low-family/notification.d.ts +2 -0
  40. package/dist/commands/low-family/refine-config.d.ts +2 -0
  41. package/dist/commands/low-family/session-host.d.ts +2 -0
  42. package/dist/commands/low-family/spec-providerdev.d.ts +11 -0
  43. package/dist/commands/low-family/status-meta.d.ts +2 -0
  44. package/dist/commands/low-family/types.d.ts +33 -0
  45. package/dist/commands/med-family/cli-agent.d.ts +2 -0
  46. package/dist/commands/med-family/fast-forward.d.ts +2 -0
  47. package/dist/commands/med-family/ide.d.ts +10 -0
  48. package/dist/commands/med-family/index.d.ts +3 -0
  49. package/dist/commands/med-family/mesh-crud.d.ts +48 -0
  50. package/dist/commands/med-family/mesh-host-pairing.d.ts +2 -0
  51. package/dist/commands/med-family/mesh-queue.d.ts +2 -0
  52. package/dist/commands/med-family/mesh-restart.d.ts +2 -0
  53. package/dist/commands/med-family/types.d.ts +152 -0
  54. package/dist/commands/mesh-coordinator.d.ts +85 -1
  55. package/dist/commands/router-aggregate-status.d.ts +24 -0
  56. package/dist/commands/router-mesh-session-owner.d.ts +59 -0
  57. package/dist/commands/router-refine.d.ts +137 -0
  58. package/dist/commands/router-worktree-cleanup.d.ts +133 -0
  59. package/dist/commands/router.d.ts +204 -15
  60. package/dist/commands/upgrade-helper.d.ts +41 -1
  61. package/dist/config/chat-history.d.ts +11 -0
  62. package/dist/config/config.d.ts +19 -0
  63. package/dist/config/mesh-config.d.ts +136 -1
  64. package/dist/config/mesh-json-config.d.ts +199 -0
  65. package/dist/config/registry-resolver.d.ts +54 -0
  66. package/dist/config/repo-settings.d.ts +77 -0
  67. package/dist/config/state-store.d.ts +30 -0
  68. package/dist/daemon/dev-server.d.ts +0 -2
  69. package/dist/detection/cli-detector.d.ts +17 -0
  70. package/dist/detection/ide-detector.d.ts +13 -0
  71. package/dist/detection/win32-ide-version.d.ts +37 -0
  72. package/dist/git/change-impact-config.d.ts +159 -0
  73. package/dist/git/git-commands.d.ts +26 -2
  74. package/dist/git/git-diff.d.ts +6 -0
  75. package/dist/git/git-executor.d.ts +11 -0
  76. package/dist/git/git-status.d.ts +57 -0
  77. package/dist/git/git-types.d.ts +2 -50
  78. package/dist/git/git-worktree.d.ts +71 -1
  79. package/dist/git/index.d.ts +3 -1
  80. package/dist/index.d.ts +73 -17
  81. package/dist/index.js +52979 -18657
  82. package/dist/index.js.map +1 -1
  83. package/dist/index.mjs +59496 -25355
  84. package/dist/index.mjs.map +1 -1
  85. package/dist/installer.d.ts +1 -4
  86. package/dist/ipc/local-ipc-server.d.ts +91 -0
  87. package/dist/launch.d.ts +1 -1
  88. package/dist/logging/async-batch-writer.d.ts +10 -0
  89. package/dist/logging/debug-config.d.ts +16 -0
  90. package/dist/logging/log-redactor.d.ts +24 -0
  91. package/dist/logging/log-tail-reader.d.ts +81 -0
  92. package/dist/logging/logger.d.ts +1 -1
  93. package/dist/mesh/contracts.d.ts +230 -0
  94. package/dist/mesh/coordinator-prompt.d.ts +76 -0
  95. package/dist/mesh/coordinator-registry.d.ts +59 -0
  96. package/dist/mesh/mesh-active-work.d.ts +203 -0
  97. package/dist/mesh/mesh-clone-grace.d.ts +8 -0
  98. package/dist/mesh/mesh-completion-synthesis.d.ts +4 -0
  99. package/dist/mesh/mesh-coordinator-config.d.ts +21 -0
  100. package/dist/mesh/mesh-delivery-policy.d.ts +104 -0
  101. package/dist/mesh/mesh-event-classify.d.ts +7 -0
  102. package/dist/mesh/mesh-event-forwarding.d.ts +49 -0
  103. package/dist/mesh/mesh-event-trace.d.ts +21 -0
  104. package/dist/mesh/mesh-events-coordinator.d.ts +4 -0
  105. package/dist/mesh/mesh-events-pending.d.ts +246 -0
  106. package/dist/mesh/mesh-events-stale.d.ts +61 -0
  107. package/dist/mesh/mesh-events-utils.d.ts +75 -0
  108. package/dist/mesh/mesh-events.d.ts +6 -49
  109. package/dist/mesh/mesh-fast-forward.d.ts +81 -0
  110. package/dist/mesh/mesh-host-ownership.d.ts +29 -0
  111. package/dist/mesh/mesh-init.d.ts +128 -0
  112. package/dist/mesh/mesh-ledger-reconciliation.d.ts +23 -4
  113. package/dist/mesh/mesh-ledger.d.ts +139 -1
  114. package/dist/mesh/mesh-magi-status.d.ts +63 -0
  115. package/dist/mesh/mesh-missions.d.ts +281 -0
  116. package/dist/mesh/mesh-node-identity.d.ts +310 -0
  117. package/dist/mesh/mesh-queue-assignment.d.ts +158 -0
  118. package/dist/mesh/mesh-reconcile-acked-hold.d.ts +17 -0
  119. package/dist/mesh/mesh-reconcile-config.d.ts +6 -0
  120. package/dist/mesh/mesh-reconcile-identity.d.ts +6 -0
  121. package/dist/mesh/mesh-reconcile-loop.d.ts +80 -0
  122. package/dist/mesh/mesh-reconcile-v2-backstop.d.ts +16 -0
  123. package/dist/mesh/mesh-refine-batch.d.ts +68 -0
  124. package/dist/mesh/mesh-refine-gates.d.ts +428 -0
  125. package/dist/mesh/mesh-refine-status.d.ts +62 -0
  126. package/dist/mesh/mesh-remote-event-pull.d.ts +15 -0
  127. package/dist/mesh/mesh-review-inbox.d.ts +90 -0
  128. package/dist/mesh/mesh-routing.d.ts +70 -0
  129. package/dist/mesh/mesh-runtime-store.d.ts +508 -0
  130. package/dist/mesh/mesh-scheduling-runtime.d.ts +78 -0
  131. package/dist/mesh/mesh-task-inflight.d.ts +46 -0
  132. package/dist/mesh/mesh-task-stats.d.ts +49 -0
  133. package/dist/mesh/mesh-unresolved-forward-outbox.d.ts +30 -0
  134. package/dist/mesh/mesh-warmup-deadline.d.ts +68 -0
  135. package/dist/mesh/mesh-work-queue.d.ts +363 -5
  136. package/dist/mesh/preview-freshness.d.ts +28 -0
  137. package/dist/mesh/refine-config.d.ts +216 -0
  138. package/dist/mesh/worktree-bootstrap-config.d.ts +219 -0
  139. package/dist/providers/acp-provider-instance.d.ts +5 -0
  140. package/dist/providers/approval-utils.d.ts +46 -0
  141. package/dist/providers/chat-message-normalization.d.ts +58 -1
  142. package/dist/providers/cli-provider-effect-format.d.ts +30 -0
  143. package/dist/providers/cli-provider-history-dedup.d.ts +17 -0
  144. package/dist/providers/cli-provider-input-prompt.d.ts +12 -0
  145. package/dist/providers/cli-provider-instance-types.d.ts +45 -0
  146. package/dist/providers/cli-provider-instance.d.ts +406 -30
  147. package/dist/providers/cli-provider-status-helpers.d.ts +46 -0
  148. package/dist/providers/cli-provider-transcript-merge.d.ts +7 -0
  149. package/dist/providers/contracts.d.ts +149 -6
  150. package/dist/providers/external-sources.d.ts +71 -0
  151. package/dist/providers/manual-attendance.d.ts +79 -0
  152. package/dist/providers/native-history/antigravity-claim-registry.d.ts +39 -0
  153. package/dist/providers/native-history/antigravity-cli-transcript.d.ts +137 -0
  154. package/dist/providers/native-history/claude-cli-transcript.d.ts +70 -0
  155. package/dist/providers/native-history/codex-cli-transcript.d.ts +73 -0
  156. package/dist/providers/native-history/constants.d.ts +12 -0
  157. package/dist/providers/native-history/dispatcher.d.ts +44 -0
  158. package/dist/providers/native-history/hermes-cli-transcript.d.ts +30 -0
  159. package/dist/providers/native-history/index.d.ts +13 -0
  160. package/dist/providers/provider-instance-manager.d.ts +29 -0
  161. package/dist/providers/provider-instance.d.ts +30 -1
  162. package/dist/providers/provider-loader.d.ts +42 -5
  163. package/dist/providers/provider-trust.d.ts +31 -0
  164. package/dist/providers/read-chat-contract.d.ts +29 -0
  165. package/dist/providers/sdk/v1/builders/acp/detect-status.d.ts +68 -0
  166. package/dist/providers/sdk/v1/builders/cli/detect-status.d.ts +86 -0
  167. package/dist/providers/sdk/v1/builders/cli/parse-approval-squash.d.ts +59 -0
  168. package/dist/providers/sdk/v1/builders/cli/parse-approval.d.ts +65 -0
  169. package/dist/providers/sdk/v1/builders/cli/parse-session.d.ts +91 -0
  170. package/dist/providers/sdk/v1/builders/cli/visible-region.d.ts +42 -0
  171. package/dist/providers/sdk/v1/fixture-tooling/format.d.ts +126 -0
  172. package/dist/providers/sdk/v1/fixture-tooling/index.d.ts +8 -0
  173. package/dist/providers/sdk/v1/fixture-tooling/replay.d.ts +38 -0
  174. package/dist/providers/sdk/v1/index.d.ts +30 -0
  175. package/dist/providers/sdk/v1/sandbox/README-design.d.ts +193 -0
  176. package/dist/providers/sdk/v1/sandbox/require-whitelist.d.ts +74 -0
  177. package/dist/providers/sdk/v1/sandbox/script-runner.d.ts +98 -0
  178. package/dist/providers/sdk/v1/types/cli/index.d.ts +277 -0
  179. package/dist/providers/sdk/v1/types/common/index.d.ts +203 -0
  180. package/dist/providers/sdk/v1/validators/index.d.ts +5 -0
  181. package/dist/providers/sdk/v1/validators/manifest.d.ts +40 -0
  182. package/dist/providers/sdk/v1/validators/taint.d.ts +52 -0
  183. package/dist/providers/spec/adapter.d.ts +98 -0
  184. package/dist/providers/spec/cli-adapter.d.ts +223 -0
  185. package/dist/providers/spec/evaluator.d.ts +45 -0
  186. package/dist/providers/spec/fsm-driver.d.ts +449 -0
  187. package/dist/providers/spec/fsm-evaluator.d.ts +93 -0
  188. package/dist/providers/spec/fsm-loader.d.ts +14 -0
  189. package/dist/providers/spec/fsm-types.d.ts +202 -0
  190. package/dist/providers/spec/native-history-executor.d.ts +41 -0
  191. package/dist/providers/spec/pre-launch-trust.d.ts +16 -0
  192. package/dist/providers/spec/route.d.ts +4 -0
  193. package/dist/providers/spec/types.d.ts +244 -0
  194. package/dist/providers/status-monitor.d.ts +7 -7
  195. package/dist/providers/transcript-v2.d.ts +176 -0
  196. package/dist/providers/types/interactive-prompt.d.ts +84 -0
  197. package/dist/providers/working-dir.d.ts +17 -0
  198. package/dist/repo-mesh-types.d.ts +629 -12
  199. package/dist/runtime-defaults.d.ts +2 -0
  200. package/dist/session-host/managed-host.d.ts +64 -0
  201. package/dist/session-host/runtime-surface.d.ts +10 -16
  202. package/dist/sessions/registry.d.ts +26 -0
  203. package/dist/shared-types-extra.d.ts +2 -4
  204. package/dist/shared-types.d.ts +98 -55
  205. package/dist/status/chat-tail-hot-sessions.d.ts +40 -0
  206. package/dist/status/normalize.d.ts +1 -1
  207. package/dist/status/normalize.js +1 -0
  208. package/dist/status/normalize.js.map +1 -1
  209. package/dist/status/normalize.mjs +1 -0
  210. package/dist/status/normalize.mjs.map +1 -1
  211. package/dist/status/reporter.d.ts +2 -0
  212. package/dist/status/snapshot.d.ts +26 -0
  213. package/dist/system/hash.d.ts +8 -0
  214. package/dist/system/load-better-sqlite3.d.ts +21 -0
  215. package/dist/types.d.ts +5 -0
  216. package/package.json +11 -4
  217. package/src/agent-stream/poller.ts +2 -3
  218. package/src/agent-stream/provider-adapter.ts +1 -1
  219. package/src/boot/daemon-lifecycle.ts +80 -14
  220. package/src/boot/process-hardening.ts +89 -0
  221. package/src/build-info.ts +73 -0
  222. package/src/chat/source-machine.ts +534 -0
  223. package/src/chat/source-resolver.ts +0 -0
  224. package/src/chat/subscription-updates.ts +20 -1
  225. package/src/cli-adapter-types.d.ts +3 -1
  226. package/src/cli-adapter-types.ts +68 -2
  227. package/src/cli-adapters/cli-script-runner.ts +421 -0
  228. package/src/cli-adapters/cli-state-engine.ts +1282 -0
  229. package/src/cli-adapters/provider-cli-adapter.d.ts +1 -1
  230. package/src/cli-adapters/provider-cli-adapter.ts +954 -1144
  231. package/src/cli-adapters/provider-cli-parse.d.ts +2 -0
  232. package/src/cli-adapters/provider-cli-parse.ts +19 -0
  233. package/src/cli-adapters/provider-cli-runtime.ts +56 -7
  234. package/src/cli-adapters/provider-cli-shared.d.ts +4 -0
  235. package/src/cli-adapters/provider-cli-shared.ts +121 -11
  236. package/src/cli-adapters/pty-transport.ts +2 -1
  237. package/src/cli-adapters/pty-write-chunking.ts +106 -0
  238. package/src/cli-adapters/raw-terminal-io.ts +252 -0
  239. package/src/cli-adapters/resolve-executable.ts +204 -0
  240. package/src/cli-adapters/session-host-transport.ts +2 -1
  241. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.ts +63 -29
  242. package/src/cli-adapters/terminal-backends/types.ts +10 -3
  243. package/src/cli-adapters/terminal-screen.ts +16 -81
  244. package/src/commands/chat-commands-debug-bundle.ts +398 -0
  245. package/src/commands/chat-commands-read.ts +2767 -0
  246. package/src/commands/chat-commands-scope.ts +54 -0
  247. package/src/commands/chat-commands-shared.ts +114 -0
  248. package/src/commands/chat-commands-write.ts +891 -0
  249. package/src/commands/chat-commands.ts +19 -1841
  250. package/src/commands/cli-manager.d.ts +2 -0
  251. package/src/commands/cli-manager.ts +659 -27
  252. package/src/commands/handler.ts +845 -2
  253. package/src/commands/high-family/index.ts +28 -0
  254. package/src/commands/high-family/mesh-coordinator-launch.ts +680 -0
  255. package/src/commands/high-family/mesh-events.ts +102 -0
  256. package/src/commands/high-family/mesh-status.ts +849 -0
  257. package/src/commands/high-family/types.ts +80 -0
  258. package/src/commands/low-family/coordinator-prompt.ts +72 -0
  259. package/src/commands/low-family/daemon-lifecycle.ts +120 -0
  260. package/src/commands/low-family/diagnostics.ts +57 -0
  261. package/src/commands/low-family/index.ts +37 -0
  262. package/src/commands/low-family/mesh-ledger.ts +62 -0
  263. package/src/commands/low-family/mesh-node-logs.ts +87 -0
  264. package/src/commands/low-family/notification.ts +116 -0
  265. package/src/commands/low-family/refine-config.ts +106 -0
  266. package/src/commands/low-family/session-host.ts +282 -0
  267. package/src/commands/low-family/spec-providerdev.ts +217 -0
  268. package/src/commands/low-family/status-meta.ts +112 -0
  269. package/src/commands/low-family/types.ts +39 -0
  270. package/src/commands/med-family/cli-agent.ts +241 -0
  271. package/src/commands/med-family/fast-forward.ts +230 -0
  272. package/src/commands/med-family/ide.ts +163 -0
  273. package/src/commands/med-family/index.ts +37 -0
  274. package/src/commands/med-family/mesh-crud.ts +1287 -0
  275. package/src/commands/med-family/mesh-host-pairing.ts +234 -0
  276. package/src/commands/med-family/mesh-queue.ts +167 -0
  277. package/src/commands/med-family/mesh-restart.ts +92 -0
  278. package/src/commands/med-family/types.ts +153 -0
  279. package/src/commands/mesh-coordinator.ts +334 -124
  280. package/src/commands/router-aggregate-status.ts +209 -0
  281. package/src/commands/router-mesh-session-owner.ts +114 -0
  282. package/src/commands/router-refine.ts +1711 -0
  283. package/src/commands/router-worktree-cleanup.ts +870 -0
  284. package/src/commands/router.ts +795 -4143
  285. package/src/commands/stream-commands.ts +8 -0
  286. package/src/commands/upgrade-helper.ts +310 -45
  287. package/src/config/chat-history.ts +517 -24
  288. package/src/config/config.ts +30 -0
  289. package/src/config/mesh-config.ts +632 -23
  290. package/src/config/mesh-json-config.ts +376 -0
  291. package/src/config/recent-activity.ts +8 -2
  292. package/src/config/registry-resolver.ts +100 -0
  293. package/src/config/repo-settings.ts +111 -0
  294. package/src/config/state-store.ts +55 -0
  295. package/src/daemon/dev-auto-implement.ts +3 -2
  296. package/src/daemon/dev-cli-debug.ts +10 -1
  297. package/src/daemon/dev-server.ts +0 -541
  298. package/src/detection/cli-detector.ts +94 -9
  299. package/src/detection/ide-detector.ts +55 -16
  300. package/src/detection/win32-ide-version.ts +106 -0
  301. package/src/git/change-impact-config.ts +354 -0
  302. package/src/git/git-commands.ts +112 -16
  303. package/src/git/git-diff.ts +81 -11
  304. package/src/git/git-executor.ts +12 -0
  305. package/src/git/git-status.ts +767 -48
  306. package/src/git/git-types.ts +14 -62
  307. package/src/git/git-worktree.ts +261 -4
  308. package/src/git/index.ts +17 -0
  309. package/src/index.ts +213 -13
  310. package/src/installer.d.ts +1 -1
  311. package/src/installer.ts +8 -6
  312. package/src/ipc/local-ipc-server.ts +278 -0
  313. package/src/launch.d.ts +1 -1
  314. package/src/launch.ts +37 -28
  315. package/src/logging/async-batch-writer.ts +55 -0
  316. package/src/logging/command-log.ts +7 -5
  317. package/src/logging/debug-config.ts +25 -0
  318. package/src/logging/debug-trace.ts +7 -2
  319. package/src/logging/log-redactor.ts +100 -0
  320. package/src/logging/log-tail-reader.ts +341 -0
  321. package/src/logging/logger.ts +14 -7
  322. package/src/mesh/contracts.ts +469 -0
  323. package/src/mesh/coordinator-prompt.ts +572 -34
  324. package/src/mesh/coordinator-registry.ts +121 -0
  325. package/src/mesh/mesh-active-work.ts +706 -0
  326. package/src/mesh/mesh-clone-grace.ts +68 -0
  327. package/src/mesh/mesh-completion-synthesis.ts +416 -0
  328. package/src/mesh/mesh-coordinator-config.ts +97 -0
  329. package/src/mesh/mesh-delivery-policy.ts +284 -0
  330. package/src/mesh/mesh-event-classify.ts +78 -0
  331. package/src/mesh/mesh-event-forwarding.ts +2002 -0
  332. package/src/mesh/mesh-event-trace.ts +67 -0
  333. package/src/mesh/mesh-events-coordinator.ts +32 -0
  334. package/src/mesh/mesh-events-pending.ts +1494 -0
  335. package/src/mesh/mesh-events-stale.ts +452 -0
  336. package/src/mesh/mesh-events-utils.ts +443 -0
  337. package/src/mesh/mesh-events.ts +43 -1035
  338. package/src/mesh/mesh-fast-forward.ts +856 -0
  339. package/src/mesh/mesh-host-ownership.ts +111 -0
  340. package/src/mesh/mesh-init.ts +350 -0
  341. package/src/mesh/mesh-ledger-reconciliation.ts +12 -7
  342. package/src/mesh/mesh-ledger.ts +898 -102
  343. package/src/mesh/mesh-magi-status.ts +223 -0
  344. package/src/mesh/mesh-missions.ts +695 -0
  345. package/src/mesh/mesh-node-identity.ts +2065 -0
  346. package/src/mesh/mesh-queue-assignment.ts +2263 -0
  347. package/src/mesh/mesh-reconcile-acked-hold.ts +230 -0
  348. package/src/mesh/mesh-reconcile-config.ts +66 -0
  349. package/src/mesh/mesh-reconcile-identity.ts +103 -0
  350. package/src/mesh/mesh-reconcile-loop.ts +1473 -0
  351. package/src/mesh/mesh-reconcile-v2-backstop.ts +62 -0
  352. package/src/mesh/mesh-refine-batch.ts +205 -0
  353. package/src/mesh/mesh-refine-gates.ts +1686 -0
  354. package/src/mesh/mesh-refine-status.ts +231 -0
  355. package/src/mesh/mesh-remote-event-pull.ts +279 -0
  356. package/src/mesh/mesh-review-inbox.ts +308 -0
  357. package/src/mesh/mesh-routing.ts +291 -0
  358. package/src/mesh/mesh-runtime-store.ts +2150 -0
  359. package/src/mesh/mesh-scheduling-runtime.ts +198 -0
  360. package/src/mesh/mesh-task-inflight.ts +70 -0
  361. package/src/mesh/mesh-task-stats.ts +161 -0
  362. package/src/mesh/mesh-unresolved-forward-outbox.ts +185 -0
  363. package/src/mesh/mesh-warmup-deadline.ts +152 -0
  364. package/src/mesh/mesh-work-queue.ts +1437 -147
  365. package/src/mesh/preview-freshness.ts +163 -0
  366. package/src/mesh/refine-config.ts +423 -0
  367. package/src/mesh/worktree-bootstrap-config.ts +599 -0
  368. package/src/providers/acp-provider-instance.ts +43 -10
  369. package/src/providers/approval-utils.d.ts +5 -0
  370. package/src/providers/approval-utils.ts +100 -6
  371. package/src/providers/chat-message-normalization.ts +126 -4
  372. package/src/providers/cli-provider-effect-format.ts +53 -0
  373. package/src/providers/cli-provider-history-dedup.ts +75 -0
  374. package/src/providers/cli-provider-input-prompt.ts +133 -0
  375. package/src/providers/cli-provider-instance-types.ts +131 -0
  376. package/src/providers/cli-provider-instance.ts +2709 -499
  377. package/src/providers/cli-provider-status-helpers.ts +123 -0
  378. package/src/providers/cli-provider-transcript-merge.ts +114 -0
  379. package/src/providers/contracts.d.ts +55 -0
  380. package/src/providers/contracts.ts +160 -6
  381. package/src/providers/extension-provider-instance.ts +12 -7
  382. package/src/providers/external-sources.ts +218 -0
  383. package/src/providers/ide-provider-instance.ts +35 -12
  384. package/src/providers/manual-attendance.ts +105 -0
  385. package/src/providers/native-history/antigravity-claim-registry.ts +138 -0
  386. package/src/providers/native-history/antigravity-cli-transcript.ts +1275 -0
  387. package/src/providers/native-history/claude-cli-transcript.ts +396 -0
  388. package/src/providers/native-history/codex-cli-transcript.ts +479 -0
  389. package/src/providers/native-history/constants.ts +19 -0
  390. package/src/providers/native-history/dispatcher.ts +617 -0
  391. package/src/providers/native-history/hermes-cli-transcript.ts +312 -0
  392. package/src/providers/native-history/index.ts +30 -0
  393. package/src/providers/provider-instance-manager.ts +71 -0
  394. package/src/providers/provider-instance.ts +24 -1
  395. package/src/providers/provider-loader.ts +700 -55
  396. package/src/providers/provider-schema.ts +87 -14
  397. package/src/providers/provider-trust.ts +114 -0
  398. package/src/providers/read-chat-contract.ts +76 -16
  399. package/src/providers/sdk/README.md +49 -0
  400. package/src/providers/sdk/v1/builders/acp/detect-status.ts +144 -0
  401. package/src/providers/sdk/v1/builders/cli/detect-status.ts +313 -0
  402. package/src/providers/sdk/v1/builders/cli/parse-approval-squash.ts +158 -0
  403. package/src/providers/sdk/v1/builders/cli/parse-approval.ts +261 -0
  404. package/src/providers/sdk/v1/builders/cli/parse-session.ts +276 -0
  405. package/src/providers/sdk/v1/builders/cli/visible-region.ts +143 -0
  406. package/src/providers/sdk/v1/fixture-tooling/format.ts +130 -0
  407. package/src/providers/sdk/v1/fixture-tooling/index.ts +22 -0
  408. package/src/providers/sdk/v1/fixture-tooling/replay.ts +352 -0
  409. package/src/providers/sdk/v1/index.ts +152 -0
  410. package/src/providers/sdk/v1/sandbox/README-design.ts +195 -0
  411. package/src/providers/sdk/v1/sandbox/require-whitelist.ts +472 -0
  412. package/src/providers/sdk/v1/sandbox/script-runner.ts +150 -0
  413. package/src/providers/sdk/v1/schemas/cli/provider.schema.json +509 -0
  414. package/src/providers/sdk/v1/schemas/primitives/acp-session-protocol-v1.json +131 -0
  415. package/src/providers/sdk/v1/schemas/primitives/native-history-codex-rollout-v1.json +66 -0
  416. package/src/providers/sdk/v1/schemas/primitives/tui-approval-squash-v1.json +91 -0
  417. package/src/providers/sdk/v1/schemas/primitives/tui-assistant-block-v1.json +91 -0
  418. package/src/providers/sdk/v1/schemas/primitives/tui-cue-ordering-v1.json +47 -0
  419. package/src/providers/sdk/v1/schemas/primitives/tui-dispatch-order-v1.json +32 -0
  420. package/src/providers/sdk/v1/schemas/primitives/tui-footer-chrome-v1.json +42 -0
  421. package/src/providers/sdk/v1/schemas/primitives/tui-index-finder-v1.json +27 -0
  422. package/src/providers/sdk/v1/schemas/primitives/tui-modal-v1.json +125 -0
  423. package/src/providers/sdk/v1/schemas/primitives/tui-prompt-marker-v1.json +45 -0
  424. package/src/providers/sdk/v1/schemas/primitives/tui-session-id-extraction-v1.json +46 -0
  425. package/src/providers/sdk/v1/schemas/primitives/tui-settled-prompt-v1.json +71 -0
  426. package/src/providers/sdk/v1/schemas/primitives/tui-spinner-v1.json +83 -0
  427. package/src/providers/sdk/v1/schemas/primitives/tui-transcript-pty-v1.json +83 -0
  428. package/src/providers/sdk/v1/schemas/primitives/tui-visible-region-v1.json +57 -0
  429. package/src/providers/sdk/v1/schemas/primitives/tui-welcome-screen-v1.json +35 -0
  430. package/src/providers/sdk/v1/types/cli/index.ts +365 -0
  431. package/src/providers/sdk/v1/types/common/index.ts +229 -0
  432. package/src/providers/sdk/v1/validators/index.ts +19 -0
  433. package/src/providers/sdk/v1/validators/manifest.ts +110 -0
  434. package/src/providers/sdk/v1/validators/taint.ts +309 -0
  435. package/src/providers/spec/adapter.ts +246 -0
  436. package/src/providers/spec/cli-adapter.ts +1064 -0
  437. package/src/providers/spec/evaluator.ts +407 -0
  438. package/src/providers/spec/fsm-driver.ts +1528 -0
  439. package/src/providers/spec/fsm-evaluator.ts +290 -0
  440. package/src/providers/spec/fsm-loader.ts +128 -0
  441. package/src/providers/spec/fsm-types.ts +301 -0
  442. package/src/providers/spec/native-history-executor.ts +1241 -0
  443. package/src/providers/spec/pre-launch-trust.ts +104 -0
  444. package/src/providers/spec/route.ts +51 -0
  445. package/src/providers/spec/types.ts +284 -0
  446. package/src/providers/status-monitor.d.ts +7 -7
  447. package/src/providers/status-monitor.ts +37 -22
  448. package/src/providers/transcript-v2.ts +567 -0
  449. package/src/providers/types/interactive-prompt.ts +536 -0
  450. package/src/providers/version-archive.ts +64 -24
  451. package/src/providers/working-dir.ts +23 -0
  452. package/src/repo-mesh-types.ts +868 -13
  453. package/src/runtime-defaults.ts +39 -0
  454. package/src/session-host/managed-host.ts +218 -0
  455. package/src/session-host/runtime-surface.ts +20 -80
  456. package/src/sessions/registry.ts +44 -0
  457. package/src/shared-types-extra.ts +2 -4
  458. package/src/shared-types.d.ts +8 -0
  459. package/src/shared-types.ts +136 -55
  460. package/src/status/builders.ts +26 -6
  461. package/src/status/chat-tail-hot-sessions.ts +117 -2
  462. package/src/status/normalize.ts +2 -0
  463. package/src/status/reporter.ts +19 -1
  464. package/src/status/snapshot.ts +95 -26
  465. package/src/system/hash.ts +23 -0
  466. package/src/system/host-memory.ts +29 -12
  467. package/src/system/load-better-sqlite3.ts +68 -0
  468. package/src/types.ts +5 -0
  469. package/dist/cli-adapters/terminal-backends/xterm-backend.d.ts +0 -17
  470. package/dist/mesh/mesh-sync.d.ts +0 -53
  471. package/src/cli-adapters/terminal-backends/ghostty-vt-backend.d.ts +0 -16
  472. package/src/cli-adapters/terminal-backends/xterm-backend.ts +0 -97
  473. package/src/mesh/mesh-sync.ts +0 -111
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Aggregate mesh-status cache — extracted from router.ts (behavior-preserving code move).
3
+ *
4
+ * These functions were `DaemonCommandRouter` methods; they now take the router
5
+ * instance as `self`. The class keeps thin delegating wrappers
6
+ * (getCachedAggregateMeshStatus / rememberAggregateMeshStatus are bound into
7
+ * HighFamilyContext — intra-cluster calls therefore go through `self.` so instance
8
+ * dispatch is preserved). No log string, error message, refusal condition, or
9
+ * result shape changed — only physical location + `this.` → `self.`.
10
+ *
11
+ * The group is self-contained: it reads only `self.aggregateMeshStatusCache` and
12
+ * imported mesh-node-identity / mesh-work-queue helpers. It does NOT touch the
13
+ * inline-mesh cache cluster, so the move is a pure lift.
14
+ */
15
+ import type { DaemonCommandRouter } from './router.js';
16
+ import { normalizeMeshNodeId } from '@adhdev/mesh-shared';
17
+ import { getMeshQueueRevision } from '../mesh/mesh-work-queue.js';
18
+ import {
19
+ applyInlineMeshBranchConvergence,
20
+ buildInlineMeshTransitGitStatus,
21
+ buildLivePeerGitConnection,
22
+ deriveMeshNodeHealthFromGit,
23
+ isDeadLocalWorktreeNode,
24
+ readBooleanValue,
25
+ readInlineMeshNodeId,
26
+ readObjectRecord,
27
+ readStringValue,
28
+ shouldRefreshStalePendingAggregate,
29
+ summarizeInlineMeshBranchConvergence,
30
+ } from '../mesh/mesh-node-identity.js';
31
+
32
+ export function cloneJsonValue<T>(value: T): T {
33
+ if (typeof structuredClone === 'function') return structuredClone(value);
34
+ return JSON.parse(JSON.stringify(value)) as T;
35
+ }
36
+
37
+ export function hydrateCachedAggregateMeshStatusFromInline(
38
+ self: DaemonCommandRouter,
39
+ snapshot: any,
40
+ mesh: any,
41
+ options?: { requireDirectPeerTruth?: boolean },
42
+ ): any {
43
+ if (!mesh || typeof mesh !== 'object' || !Array.isArray(mesh.nodes) || !Array.isArray(snapshot?.nodes)) return snapshot;
44
+ const inlineNodesById = new Map<string, any>();
45
+ for (const node of mesh.nodes) {
46
+ const nodeId = readInlineMeshNodeId(node);
47
+ if (nodeId) inlineNodesById.set(nodeId, node);
48
+ }
49
+ if (!inlineNodesById.size) return snapshot;
50
+
51
+ let changed = false;
52
+ const unavailableNodeIds = new Set<string>();
53
+ const sourceOfTruth = readObjectRecord(snapshot.sourceOfTruth);
54
+ const directPeerTruth = readObjectRecord(sourceOfTruth.directPeerTruth);
55
+ // Dead local worktree nodes (isLocalWorktree, workspace deleted from disk)
56
+ // carry no live truth and must never gate the aggregate as unavailable.
57
+ // A cached snapshot built before the worktree was removed can still list
58
+ // such a node in unavailableNodeIds, which would wedge the graph in a
59
+ // permanent direct_peer_truth_unavailable; drop them here so the held
60
+ // standing-state truth for the surviving nodes satisfies the aggregate.
61
+ const deadNodeIds = new Set<string>();
62
+ for (const node of mesh.nodes) {
63
+ if (!isDeadLocalWorktreeNode(node)) continue;
64
+ const deadId = readInlineMeshNodeId(node);
65
+ if (deadId) deadNodeIds.add(deadId);
66
+ }
67
+ let droppedDeadUnavailable = false;
68
+ for (const entry of Array.isArray(directPeerTruth.unavailableNodeIds) ? directPeerTruth.unavailableNodeIds : []) {
69
+ const nodeId = readStringValue(entry);
70
+ if (!nodeId) continue;
71
+ if (deadNodeIds.has(nodeId)) {
72
+ droppedDeadUnavailable = true;
73
+ continue;
74
+ }
75
+ unavailableNodeIds.add(nodeId);
76
+ }
77
+ // Force a rewrite when a dead worktree was filtered out of a previously
78
+ // built unavailable set, even if no live git was re-hydrated this pass —
79
+ // otherwise the early-return below would hand back the stale snapshot that
80
+ // still says direct_peer_truth_unavailable.
81
+ if (droppedDeadUnavailable) changed = true;
82
+
83
+ const nodes = snapshot.nodes.map((statusNode: any) => {
84
+ const nodeId = normalizeMeshNodeId(statusNode);
85
+ const inlineNode = nodeId ? inlineNodesById.get(nodeId) : undefined;
86
+ if (!inlineNode) return statusNode;
87
+ const liveGit = buildInlineMeshTransitGitStatus(inlineNode);
88
+ if (!liveGit) return statusNode;
89
+ const nextStatus = { ...statusNode };
90
+ nextStatus.git = liveGit;
91
+ nextStatus.health = deriveMeshNodeHealthFromGit(liveGit);
92
+ applyInlineMeshBranchConvergence(mesh, inlineNode, nextStatus);
93
+ nextStatus.launchReady = readBooleanValue(nextStatus.launchReady) ?? true;
94
+ const connection = readObjectRecord(nextStatus.connection);
95
+ const connectionState = readStringValue(connection.state);
96
+ const connectionReported = readBooleanValue(connection.reported) ?? false;
97
+ if (!connectionReported || connectionState === 'unknown') {
98
+ nextStatus.connection = buildLivePeerGitConnection(connection);
99
+ }
100
+ delete nextStatus.gitProbePending;
101
+ const error = readStringValue(nextStatus.error);
102
+ if (error && /pending_git|git probe|live peer git snapshot|no peer git snapshot/i.test(error)) delete nextStatus.error;
103
+ if (!readStringValue(nextStatus.machineStatus)) nextStatus.machineStatus = 'online';
104
+ if (nodeId) unavailableNodeIds.delete(nodeId);
105
+ changed = true;
106
+ return nextStatus;
107
+ });
108
+
109
+ const aggregateDirectTruthSatisfied = sourceOfTruth.coordinatorOwnsLiveTruth === true
110
+ || directPeerTruth.satisfied === true;
111
+ if (!changed && !(options?.requireDirectPeerTruth && unavailableNodeIds.size > 0 && !aggregateDirectTruthSatisfied)) return snapshot;
112
+ const nextSourceOfTruth = {
113
+ ...sourceOfTruth,
114
+ ...(Object.keys(directPeerTruth).length ? {
115
+ directPeerTruth: {
116
+ ...directPeerTruth,
117
+ satisfied: options?.requireDirectPeerTruth === true
118
+ ? aggregateDirectTruthSatisfied || unavailableNodeIds.size === 0
119
+ : directPeerTruth.satisfied,
120
+ unavailableNodeIds: [...unavailableNodeIds],
121
+ },
122
+ ...(options?.requireDirectPeerTruth === true ? {
123
+ coordinatorOwnsLiveTruth: aggregateDirectTruthSatisfied || unavailableNodeIds.size === 0,
124
+ currentStatus: aggregateDirectTruthSatisfied || unavailableNodeIds.size === 0 ? 'live_git_and_session_probes' : 'direct_peer_truth_unavailable',
125
+ } : {}),
126
+ } : {}),
127
+ };
128
+ return {
129
+ ...snapshot,
130
+ ...(options?.requireDirectPeerTruth === true && unavailableNodeIds.size > 0 && !aggregateDirectTruthSatisfied ? {
131
+ success: false,
132
+ code: 'mesh_direct_peer_truth_unavailable',
133
+ error: 'Selected coordinator could not confirm direct mesh truth for every remote node yet.',
134
+ } : {}),
135
+ sourceOfTruth: nextSourceOfTruth,
136
+ branchConvergenceSummary: summarizeInlineMeshBranchConvergence(nodes),
137
+ nodes,
138
+ };
139
+ }
140
+
141
+ export function getCachedAggregateMeshStatus(
142
+ self: DaemonCommandRouter,
143
+ meshId: string,
144
+ mesh?: any,
145
+ options?: { requireDirectPeerTruth?: boolean; allowStalePending?: boolean },
146
+ ): any | null {
147
+ const cached = self.aggregateMeshStatusCache.get(meshId);
148
+ if (!cached?.snapshot || cached.snapshot.success !== true || !Array.isArray(cached.snapshot.nodes)) return null;
149
+ // Genuine invalidation still forces truth: a queue mutation bumps the
150
+ // revision, so a stale-revision snapshot is never served (even under the
151
+ // SWR allowStalePending path below).
152
+ if (cached.queueRevision !== getMeshQueueRevision(meshId)) return null;
153
+ let snapshot = cloneJsonValue(cached.snapshot);
154
+ snapshot = hydrateCachedAggregateMeshStatusFromInline(self, snapshot, mesh, options);
155
+ // SWR: allowStalePending lets the interactive detail-open serve a snapshot
156
+ // that still has pending peer-git nodes (would otherwise miss here) so the
157
+ // graph paints instantly; the caller fires a background freshen. The
158
+ // queueRevision guard above is NOT relaxed — only the pending-git freshness
159
+ // gate is, so a genuine queue/identity mutation still forces a live rebuild.
160
+ if (!options?.allowStalePending && shouldRefreshStalePendingAggregate(snapshot, options)) return null;
161
+ const ageMs = Math.max(0, Date.now() - cached.builtAt);
162
+ const sourceOfTruth = snapshot.sourceOfTruth && typeof snapshot.sourceOfTruth === 'object'
163
+ ? snapshot.sourceOfTruth
164
+ : {};
165
+ snapshot.sourceOfTruth = {
166
+ ...sourceOfTruth,
167
+ aggregateSnapshot: {
168
+ ...(sourceOfTruth.aggregateSnapshot && typeof sourceOfTruth.aggregateSnapshot === 'object'
169
+ ? sourceOfTruth.aggregateSnapshot
170
+ : {}),
171
+ owner: 'coordinator_daemon_memory',
172
+ cached: true,
173
+ source: 'memory',
174
+ refreshReason: 'memory_cache_hit',
175
+ ageMs,
176
+ cachedAt: new Date(cached.builtAt).toISOString(),
177
+ returnedAt: new Date().toISOString(),
178
+ },
179
+ };
180
+ return snapshot;
181
+ }
182
+
183
+ export function rememberAggregateMeshStatus(
184
+ self: DaemonCommandRouter,
185
+ meshId: string,
186
+ snapshot: any,
187
+ refreshReason: string,
188
+ ): any {
189
+ if (!snapshot || typeof snapshot !== 'object' || snapshot.success !== true || !Array.isArray(snapshot.nodes)) return snapshot;
190
+ const builtAt = Date.now();
191
+ const next = cloneJsonValue(snapshot);
192
+ const sourceOfTruth = next.sourceOfTruth && typeof next.sourceOfTruth === 'object'
193
+ ? next.sourceOfTruth
194
+ : {};
195
+ next.sourceOfTruth = {
196
+ ...sourceOfTruth,
197
+ aggregateSnapshot: {
198
+ owner: 'coordinator_daemon_memory',
199
+ cached: false,
200
+ source: 'live_refresh',
201
+ refreshReason,
202
+ ageMs: 0,
203
+ cachedAt: new Date(builtAt).toISOString(),
204
+ returnedAt: new Date(builtAt).toISOString(),
205
+ },
206
+ };
207
+ self.aggregateMeshStatusCache.set(meshId, { builtAt, snapshot: cloneJsonValue(next), queueRevision: getMeshQueueRevision(meshId) });
208
+ return next;
209
+ }
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Remote mesh-session owner resolution — extracted from router.ts (behavior-preserving code move).
3
+ *
4
+ * These functions were `DaemonCommandRouter` methods; they now take the router
5
+ * instance as `self`. resolveRemoteMeshSessionOwnerDaemonId stays reachable as a
6
+ * public method (the [Z] session-scoped forward in executeDaemonCommand and the
7
+ * mesh-session-scoped-remote-forward test call it), so the class keeps a thin
8
+ * delegating wrapper. No log string, error message, refusal condition, or result
9
+ * shape changed — only physical location + `this.` → `self.`.
10
+ *
11
+ * The group is read-only: it reads self.deps.statusInstanceId, the cached inline-mesh
12
+ * nodes, and the aggregate-status snapshot nodes. It never mutates router state.
13
+ */
14
+ import type { DaemonCommandRouter } from './router.js';
15
+ import { meshNodeIdMatches, daemonIdsEquivalent } from '@adhdev/mesh-shared';
16
+ import {
17
+ collectMeshNodeHostedSessionIds,
18
+ readMeshNodeDaemonId,
19
+ readObjectRecord,
20
+ } from '../mesh/mesh-node-identity.js';
21
+
22
+ /**
23
+ * Resolve the REMOTE worker daemonId that owns a given session, when the session
24
+ * belongs to a mesh node hosted on a DIFFERENT daemon than this coordinator.
25
+ *
26
+ * The coordinator does not host remote-worker session instances in its own
27
+ * instanceManager/sessionRegistry — only their cached mesh-node metadata. A
28
+ * dashboard-issued session-scoped command (invoke_provider_script / resolve_action /
29
+ * set_mode / …) lands on the coordinator with a targetSessionId the coordinator can't
30
+ * find locally, and without forwarding it dies as "Live session not found". send_chat
31
+ * happens to survive (its target resolves to the worker by another route), but the
32
+ * controlbar commands do not — so the controlbar buttons appear to do nothing.
33
+ *
34
+ * Mirror the existing node-level remote-forward pattern (fast_forward_mesh_node etc.):
35
+ * scan the candidate mesh nodes for the one hosting the targetSessionId, and return its
36
+ * daemonId when that daemonId is a remote daemon (i.e. not this coordinator's own
37
+ * statusInstanceId). Returns undefined for a locally-hosted session (no forward — execute
38
+ * locally as before) or when ownership can't be resolved.
39
+ *
40
+ * The candidate set spans BOTH the cached inline-mesh nodes and the live aggregate
41
+ * mesh-status snapshots. The inline cache reliably carries only each node's single primary
42
+ * session (cachedStatus.activeSession), so a worker hosting more than one session exposes its
43
+ * non-primary sessions only on the aggregate snapshot nodes (status.activeSessions /
44
+ * activeSessionDetails, built from live session records). collectMeshNodeHostedSessionIds does
45
+ * the wider plural-shape scan so a controlbar/modal command targeting a non-primary remote
46
+ * session still resolves its owner — the singular readCachedInlineMeshActiveSessions semantics
47
+ * other consumers depend on stay untouched.
48
+ *
49
+ * CANCEL-STOP-RELAY: the session-id cache scan above only matches when the coordinator's
50
+ * cached status snapshot already lists the worker's session id in a recognized active-sessions
51
+ * shape. A worktree-clone worker session whose id form/timing differs from the cached snapshot
52
+ * (or is simply not yet reflected) misses the scan, so a stop that carries the authoritative
53
+ * owning nodeId (mesh_queue_cancel knows assignedNodeId) used to silently fail to forward.
54
+ * `ownerNodeIdHint` adds a deterministic fallback: when the session-id scan misses, resolve the
55
+ * owner daemonId by matching the node by id (meshNodeIdMatches — same form-tolerant compare the
56
+ * rest of the router uses, no new raw compare). The same self-loopback guard applies to both
57
+ * paths, so a coordinator-hosted node is still never force-forwarded to a remote form of itself.
58
+ */
59
+ export function resolveRemoteMeshSessionOwnerDaemonId(
60
+ self: DaemonCommandRouter,
61
+ sessionId: string,
62
+ ownerNodeIdHint?: string,
63
+ ): string | undefined {
64
+ const trimmed = typeof sessionId === 'string' ? sessionId.trim() : '';
65
+ const nodeHint = typeof ownerNodeIdHint === 'string' ? ownerNodeIdHint.trim() : '';
66
+ if (!trimmed && !nodeHint) return undefined;
67
+ const selfDaemonId = self.deps.statusInstanceId;
68
+ const candidates = collectMeshSessionOwnerCandidateNodes(self);
69
+ if (trimmed) {
70
+ for (const node of candidates) {
71
+ if (!collectMeshNodeHostedSessionIds(node).has(trimmed)) continue;
72
+ const nodeDaemonId = readMeshNodeDaemonId(readObjectRecord(node));
73
+ // A matching node with no readable daemonId can't be attributed — keep scanning
74
+ // the remaining candidates (e.g. the same session on an aggregate node that does
75
+ // carry the daemonId) rather than bailing on the whole resolution.
76
+ if (!nodeDaemonId) continue;
77
+ // Only forward to a genuinely remote daemon. When the owning node is this
78
+ // coordinator itself (locally hosted worker), fall through to local handling.
79
+ // id-form robust: the node daemonId and selfDaemonId may be stored in different
80
+ // forms of the same machine — a strict `===` would miss the self-match and forward
81
+ // a local session to a remote form of THIS daemon (loopback).
82
+ if (selfDaemonId && daemonIdsEquivalent(nodeDaemonId, selfDaemonId)) return undefined;
83
+ return nodeDaemonId;
84
+ }
85
+ }
86
+ // Deterministic fallback: the session-id scan missed (cache lag / id-form mismatch on a
87
+ // worktree-clone worker), but the caller knows the authoritative owning nodeId. Resolve the
88
+ // owner daemonId straight off that node — never the fuzzy session cache.
89
+ if (nodeHint) {
90
+ for (const node of candidates) {
91
+ if (!meshNodeIdMatches(node, nodeHint)) continue;
92
+ const nodeDaemonId = readMeshNodeDaemonId(readObjectRecord(node));
93
+ if (!nodeDaemonId) continue;
94
+ if (selfDaemonId && daemonIdsEquivalent(nodeDaemonId, selfDaemonId)) return undefined;
95
+ return nodeDaemonId;
96
+ }
97
+ }
98
+ return undefined;
99
+ }
100
+
101
+ /**
102
+ * Candidate nodes for remote-session owner resolution: the cached inline-mesh nodes (which
103
+ * carry each node's primary session) plus the nodes from every cached aggregate mesh-status
104
+ * snapshot (which carry each node's full live session list). getCachedInlineMeshNodes()
105
+ * returns a fresh array, so appending the aggregate nodes never mutates cached state.
106
+ */
107
+ export function collectMeshSessionOwnerCandidateNodes(self: DaemonCommandRouter): any[] {
108
+ const nodes: any[] = self.getCachedInlineMeshNodes();
109
+ for (const cached of self.aggregateMeshStatusCache.values()) {
110
+ const snapshotNodes = cached?.snapshot?.nodes;
111
+ if (Array.isArray(snapshotNodes)) nodes.push(...snapshotNodes);
112
+ }
113
+ return nodes;
114
+ }