@humwick/server 0.130.1 → 0.130.3

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 (811) hide show
  1. package/README.md +5 -0
  2. package/bundled/prompts/manifest.json +1 -0
  3. package/bundled/prompts/task.hydration.md +1 -1
  4. package/bundled/roles/builder.md +1 -1
  5. package/docs/guides/sub-coordinators.md +12 -5
  6. package/docs/guides/tools-administration.md +4 -0
  7. package/docs/guides/tools-coordination.md +2 -0
  8. package/docs/guides/tools-tasks.md +8 -0
  9. package/docs/guides/workflows.md +74 -0
  10. package/docs/openapi.json +486 -4
  11. package/package.json +10 -18
  12. package/public/assets/{MessageBubble-BWpoBjl4.js → MessageBubble-Bq9kr21N.js} +2 -2
  13. package/public/assets/{PlanGraphPanel-C0auck3n.js → PlanGraphPanel-Dqiroy06.js} +2 -2
  14. package/public/assets/{TraceView-DBnOx7AQ.js → TraceView-DYU962-H.js} +2 -2
  15. package/public/assets/{VaultDecisionCard-0kp2oNBC.js → VaultDecisionCard-DhPfzioE.js} +2 -2
  16. package/public/assets/{activity-yLztXEBt.js → activity-DzCcQTee.js} +2 -2
  17. package/public/assets/{agent-lineage-BbJDR1dW.js → agent-lineage-SgDt9i3T.js} +2 -2
  18. package/public/assets/agent-liveness-Bq-s73jW.js +2 -0
  19. package/public/assets/{agent-name-CTZBrSD9.js → agent-name-CcY3Aijy.js} +2 -2
  20. package/public/assets/agent-profiles-cxtRBn6O.js +2 -0
  21. package/public/assets/{agent-project-badge-9TqzUUYE.js → agent-project-badge-DGYbIhaI.js} +2 -2
  22. package/public/assets/{agent-tools-D4n40pn8.js → agent-tools-DHbftV0N.js} +2 -2
  23. package/public/assets/{agent-type-icon-D6FUarOf.js → agent-type-icon-CY113sp-.js} +2 -2
  24. package/public/assets/{agents-BYDslkJc.js → agents-BPzY7IlQ.js} +2 -2
  25. package/public/assets/{analytics-B-XSbEMC.js → analytics-DENFPv_a.js} +2 -2
  26. package/public/assets/{artifact-viewer-DdWIfV6M.js → artifact-viewer-KRvSc7sl.js} +2 -2
  27. package/public/assets/{artifacts-DPN1q4pA.js → artifacts-C9gSmL3s.js} +2 -2
  28. package/public/assets/{artifacts-oBOqks-2.js → artifacts-DT-HkI5O.js} +2 -2
  29. package/public/assets/{automation-4KcRFXEu.js → automation-BsmjQhKD.js} +2 -2
  30. package/public/assets/{backlog-Cw9xPTCF.js → backlog-8NYH_62t.js} +2 -2
  31. package/public/assets/{busy-health-CTu32MZt.js → busy-health-D3hwvYb4.js} +2 -2
  32. package/public/assets/{channels-BiXzg1G9.js → channels-DCJ5WL7O.js} +2 -2
  33. package/public/assets/{chat-Ctk2qwvA.js → chat-DAIl357U.js} +3 -3
  34. package/public/assets/{code-preview-Bm1wWqAp.js → code-preview-CzrZfr9U.js} +2 -2
  35. package/public/assets/{connectors-C36ax4Vw.js → connectors-xTxtlyou.js} +2 -2
  36. package/public/assets/{cosmos-Jj9LK2Wf.js → cosmos-BpebFLK2.js} +2 -2
  37. package/public/assets/{crate-agent-H6S7-B9T.js → crate-agent-BHvI5wXC.js} +2 -2
  38. package/public/assets/{dependency-graph-Cd1E23wa.js → dependency-graph-DGT0o3wJ.js} +2 -2
  39. package/public/assets/{deploys-Bwfq146q.js → deploys-hqWOHSHE.js} +2 -2
  40. package/public/assets/{display-CfO7rTuF.js → display-CDeH4I8T.js} +2 -2
  41. package/public/assets/{files-DhhZI2Ih.js → files-BTeGVmTg.js} +2 -2
  42. package/public/assets/{fleet-B_rFEbnL.js → fleet-DgXtNgCa.js} +2 -2
  43. package/public/assets/{fleet-metrics-BkHP-P3R.js → fleet-metrics-BHEt5yc_.js} +2 -2
  44. package/public/assets/{formatted-body-Cm1RrzmN.js → formatted-body-MLtodyPp.js} +3 -3
  45. package/public/assets/{formatted-body-impl-DQiOuOD1.js → formatted-body-impl-CAe664Z8.js} +2 -2
  46. package/public/assets/{host-providers-dialog-CHqwXTov.js → host-providers-dialog-mapF4Fj9.js} +2 -2
  47. package/public/assets/index-CqqgOI5R.js +15 -0
  48. package/public/assets/index-MYAIwYTX.css +2 -0
  49. package/public/assets/{insights-fH1EL-qZ.js → insights-DNyf7IzF.js} +2 -2
  50. package/public/assets/{integrations-C5Oix6ng.js → integrations-DlYOHq7T.js} +2 -2
  51. package/public/assets/{issue-ref-chip-ODyondIa.js → issue-ref-chip-CeWBNWn7.js} +2 -2
  52. package/public/assets/{log-viewer-Cvfy6PW7.js → log-viewer-Cib8nqdE.js} +2 -2
  53. package/public/assets/{maintenance-D8CDH5wZ.js → maintenance-DSn1cPm7.js} +2 -2
  54. package/public/assets/{managed-agents-egllbpij.js → managed-agents-C3CkM81m.js} +2 -2
  55. package/public/assets/{markdown-preview-CYSFgVgK.js → markdown-preview-W4VQQPAv.js} +3 -3
  56. package/public/assets/{markdown-preview-impl-BteVIjX4.js → markdown-preview-impl-CMsTdhjq.js} +2 -2
  57. package/public/assets/{memory-C8WmXsyr.js → memory-BV17qtO4.js} +2 -2
  58. package/public/assets/{messages-BzQdqlO6.js → messages-Bm_1AqSA.js} +2 -2
  59. package/public/assets/{orchestrators-B1HxzkNw.js → orchestrators-Dg-vfP09.js} +2 -2
  60. package/public/assets/{overview-DCUnI4Z7.js → overview-DcYCrvlr.js} +2 -2
  61. package/public/assets/{pairs-ftCd2XcD.js → pairs-8o9nuG3V.js} +2 -2
  62. package/public/assets/{profile-icon-B2zH8DMH.js → profile-icon-BsRyBMea.js} +2 -2
  63. package/public/assets/project-profile-instructions-DETKFn_E.js +2 -0
  64. package/public/assets/projects-M_m6AHws.js +2 -0
  65. package/public/assets/{prompt-settings-Bftq9czX.js → prompt-settings-C_mNCgeL.js} +2 -2
  66. package/public/assets/provider-display-BEeLXC_D.js +2 -0
  67. package/public/assets/{registry-DWCU5c8q.js → registry-DDHHHE5N.js} +2 -2
  68. package/public/assets/run-card-Dt4I4jaP.js +2 -0
  69. package/public/assets/scroll-text-BKXS1ahr.js +2 -0
  70. package/public/assets/{secrets-C7GIUATz.js → secrets-BkVwxI5O.js} +2 -2
  71. package/public/assets/{service-access-settings-C3aujqTG.js → service-access-settings-Crq-6a-B.js} +2 -2
  72. package/public/assets/{settings-C6sZ9eBa.js → settings-CYcavMFu.js} +2 -2
  73. package/public/assets/shipping-H6gzEeZB.js +2 -0
  74. package/public/assets/{stats-V9Z-GxUd.js → stats-BJVeWkpV.js} +2 -2
  75. package/public/assets/{status-dot-CVv0iGHL.js → status-dot-BcHyw1Vw.js} +2 -2
  76. package/public/assets/store-DKPDIZBe.js +9 -0
  77. package/public/assets/{tasks-CXU75HRF.js → tasks-qJjlQPpx.js} +2 -2
  78. package/public/assets/{teams-BPf976zb.js → teams-Cd5Sk1uX.js} +2 -2
  79. package/public/assets/{terminal-viewer-DE9BOe-8.js → terminal-viewer-CpY5_m7W.js} +3 -3
  80. package/public/assets/{terminal-viewer-impl-D04pjmGh.js → terminal-viewer-impl-DI_2llFR.js} +2 -2
  81. package/public/assets/token-estimate-Co-Jdphh.js +2 -0
  82. package/public/assets/{use-agent-terminal-B1yR456R.js → use-agent-terminal-0yJA_buM.js} +2 -2
  83. package/public/assets/{use-decisions-D-S4tpDf.js → use-decisions-uJXHf34W.js} +2 -2
  84. package/public/assets/use-project-list-CpWl6eHQ.js +2 -0
  85. package/public/assets/{use-selectors-CnrAk2YP.js → use-selectors-BdxBW8mL.js} +2 -2
  86. package/public/assets/{user-avatar-nBFIcR4M.js → user-avatar-3IndfpOc.js} +2 -2
  87. package/public/assets/versioned-prompt-editor-CIVg7XB1.js +8 -0
  88. package/public/assets/{work-queue-TCjJxeT-.js → work-queue-B9rnLwHZ.js} +2 -2
  89. package/public/assets/{workflow-marker-Cf3Hf2fN.js → workflow-marker-X8wxyhzC.js} +2 -2
  90. package/public/assets/{workflows-CXQX20Qj.js → workflows-o5YyMFW7.js} +2 -2
  91. package/public/assets/{workspaces-qSYzKYMA.js → workspaces-CzEGoAng.js} +2 -2
  92. package/public/cosmos.html +4 -4
  93. package/public/index.html +31 -29
  94. package/runner/plugins/claude/.claude-plugin/plugin.json +1 -1
  95. package/runner/plugins/claude/hooks/gate-run-guard.provisioned.mjs +31 -1
  96. package/runner/src/adapters/claude-effort.ts +2 -4
  97. package/runner/src/adapters/claude-headless.ts +1 -1
  98. package/runner/src/adapters/claude-launch-exit.ts +26 -0
  99. package/runner/src/adapters/claude-session-probe.ts +1 -1
  100. package/runner/src/adapters/claude-tmux.ts +38 -10
  101. package/runner/src/adapters/claude.ts +28 -75
  102. package/runner/src/adapters/codex-launch-config.ts +4 -5
  103. package/runner/src/adapters/codex.ts +1 -1
  104. package/runner/src/adapters/opencode-provider.ts +7 -22
  105. package/runner/src/adapters/opencode.ts +4 -4
  106. package/runner/src/adapters/provider-quota-harvest.ts +20 -71
  107. package/runner/src/agent-runner/credentials.ts +42 -12
  108. package/runner/src/agent-runner/inbox.ts +27 -0
  109. package/runner/src/agent-runner/lifecycle-milestones.ts +2 -4
  110. package/runner/src/agent-runner/liveness-exchange.ts +104 -0
  111. package/runner/src/bin/claude.ts +4 -0
  112. package/runner/src/bin/codex.ts +4 -0
  113. package/runner/src/bin/opencode.ts +4 -0
  114. package/runner/src/claude-system-prompt.ts +49 -0
  115. package/runner/src/index.ts +5 -2
  116. package/runner/src/launch-assembly.ts +14 -10
  117. package/runner/src/profile-home.ts +1 -1
  118. package/runner/src/project-instructions.ts +2 -2
  119. package/runner/src/provider-command.ts +18 -0
  120. package/runner/src/provider-setup.ts +35 -0
  121. package/runner/src/providers.ts +2 -1
  122. package/runner/src/runner-core.ts +32 -38
  123. package/runner/src/runner-helpers.ts +0 -8
  124. package/runner/src/session-scratch.ts +6 -2
  125. package/runner/src/spawn-input.ts +2 -1
  126. package/runner/src/test-run-dedup.ts +59 -56
  127. package/runner/test-support/provisioning-context.ts +4 -2
  128. package/runner/test-support/runner-harness.ts +2 -1
  129. package/scripts/cd-config.ts +8 -0
  130. package/scripts/gate-run-lease.ts +10 -7
  131. package/scripts/gate.sh +5 -1
  132. package/scripts/steward-policy-cleanup.ts +2 -2
  133. package/src/agent-authz.ts +2 -2
  134. package/src/agent-drive-arbiter.ts +3 -8
  135. package/src/agent-exit-cleanup-async.ts +2 -2
  136. package/src/agent-exit-cleanup.ts +23 -19
  137. package/src/agent-lifecycle-events.ts +112 -85
  138. package/src/agent-ref.ts +3 -2
  139. package/src/agent-status-events.ts +43 -14
  140. package/src/auth/password.ts +4 -3
  141. package/src/auth/session-refresh.ts +1 -1
  142. package/src/auth/session.test-fixture.ts +2 -2
  143. package/src/auth/session.ts +7 -7
  144. package/src/automations/crud.ts +8 -81
  145. package/src/automations/dispatch.ts +33 -58
  146. package/src/automations/index.ts +1 -1
  147. package/src/automations/persistence.ts +65 -0
  148. package/src/automations/precheck.ts +18 -16
  149. package/src/automations/read-async.ts +11 -0
  150. package/src/automations/reconcile.ts +30 -39
  151. package/src/automations/storage.ts +33 -10
  152. package/src/automations/write-async.ts +33 -0
  153. package/src/branch-land-notice.ts +93 -0
  154. package/src/branch-landed.ts +31 -98
  155. package/src/bus.ts +40 -39
  156. package/src/cd-deploy-notify.ts +32 -4
  157. package/src/cd-host-lag-notify.ts +7 -6
  158. package/src/ci/incidents.ts +2 -2
  159. package/src/ci/monitor.ts +5 -8
  160. package/src/ci/notifications.ts +4 -4
  161. package/src/ci/root-missing.ts +4 -9
  162. package/src/ci/transition-notify.ts +12 -44
  163. package/src/claude-app/oauth-http.ts +3 -3
  164. package/src/cli/cd-pauses.ts +19 -0
  165. package/src/cli/orchestrator.ts +1 -1
  166. package/src/cli/state.ts +2 -19
  167. package/src/cli/task-edit.ts +22 -0
  168. package/src/cli/task.ts +3 -1
  169. package/src/cli/workflow.ts +19 -4
  170. package/src/commands-db.ts +7 -7
  171. package/src/commands-write.ts +8 -0
  172. package/src/compaction-watch.ts +10 -8
  173. package/src/config-store-write.ts +13 -1
  174. package/src/config-store.ts +25 -14
  175. package/src/config.ts +4 -11
  176. package/src/connectors.ts +10 -8
  177. package/src/context-advisory.ts +22 -21
  178. package/src/db/activity-async.ts +6 -1
  179. package/src/db/activity-write-ops.ts +12 -1
  180. package/src/db/activity.ts +1 -14
  181. package/src/db/agent-action-write.ts +36 -0
  182. package/src/db/agent-control-async.ts +9 -0
  183. package/src/db/agent-control-write.ts +49 -0
  184. package/src/db/agent-effort-observe.ts +22 -0
  185. package/src/db/agent-meta.ts +14 -3
  186. package/src/db/agent-search.ts +1 -15
  187. package/src/db/agents-async.ts +59 -9
  188. package/src/db/agents-write-ops.ts +12 -3
  189. package/src/db/agents.ts +95 -65
  190. package/src/db/auth-identities.ts +2 -2
  191. package/src/db/automation-read-ops.ts +11 -0
  192. package/src/db/automation-write-ops.ts +46 -0
  193. package/src/db/blackboard.ts +2 -2
  194. package/src/db/browser-session-write.ts +32 -0
  195. package/src/db/bus-outbox-write-ops.ts +3 -1
  196. package/src/db/checkout-refresh-schema.ts +47 -0
  197. package/src/db/checkout-refresh.ts +5 -5
  198. package/src/db/ci-incidents-async.ts +5 -5
  199. package/src/db/ci-incidents-write-ops.ts +2 -2
  200. package/src/db/command-agent-profile-backfill.ts +39 -0
  201. package/src/db/command-agent-profiles.ts +5 -1
  202. package/src/db/command-retention.ts +126 -0
  203. package/src/db/command-row.ts +10 -2
  204. package/src/db/commands-list-query.ts +2 -0
  205. package/src/db/commands-planner-stats.test-fixture.ts +8 -0
  206. package/src/db/commands-read-ops.ts +16 -0
  207. package/src/db/commands-spawn-read.ts +1 -1
  208. package/src/db/config-store-write-ops.ts +7 -2
  209. package/src/db/connection.ts +1 -182
  210. package/src/db/context-carry-write.ts +74 -0
  211. package/src/db/continuation-archives-async.ts +5 -0
  212. package/src/db/continuation-archives-write-ops.ts +7 -0
  213. package/src/db/continuations.ts +6 -6
  214. package/src/db/db-error-registry.ts +12 -0
  215. package/src/db/db-writer-worker.ts +8 -1
  216. package/src/db/deploy-events-async.ts +1 -0
  217. package/src/db/deploy-events-read-ops.ts +2 -1
  218. package/src/db/deploy-events.ts +35 -4
  219. package/src/db/gateway.ts +26 -133
  220. package/src/db/history-retention-ops.ts +13 -0
  221. package/src/db/hosts-registration.ts +10 -2
  222. package/src/db/hosts.ts +9 -6
  223. package/src/db/inbox-async.ts +2 -2
  224. package/src/db/inbox-read-ops.ts +1 -1
  225. package/src/db/inbox.ts +9 -17
  226. package/src/db/index.ts +2 -0
  227. package/src/db/integrations-async.ts +8 -0
  228. package/src/db/integrations-ops.ts +15 -0
  229. package/src/db/integrations.ts +15 -21
  230. package/src/db/issue-associations.ts +2 -2
  231. package/src/db/issue-lifecycle.ts +3 -4
  232. package/src/db/issue-refs-async.ts +23 -0
  233. package/src/db/issue-refs-read-ops.ts +6 -0
  234. package/src/db/issue-refs-write-ops.ts +29 -0
  235. package/src/db/issue-refs.ts +15 -16
  236. package/src/db/kernel-event-log-schema.ts +2 -0
  237. package/src/db/land-boundaries.ts +51 -5
  238. package/src/db/land-gate-attestations.ts +2 -2
  239. package/src/db/landing-receipts.ts +2 -2
  240. package/src/db/lifecycle-context-write.ts +5 -0
  241. package/src/db/lifecycle-tail-async.ts +76 -0
  242. package/src/db/lifecycle-tail-write-ops.ts +62 -0
  243. package/src/db/lifecycle-write-window.ts +2 -1
  244. package/src/db/lineage-pair-dedupe-sql.ts +3 -3
  245. package/src/db/long-running-work.ts +2 -2
  246. package/src/db/main-connection-mode.ts +11 -0
  247. package/src/db/main-connection-writes.ts +41 -2
  248. package/src/db/maintenance-job-reconcile.ts +61 -0
  249. package/src/db/maintenance-job-runs-async.ts +14 -0
  250. package/src/db/maintenance-job-write-ops.ts +9 -0
  251. package/src/db/maintenance-pauses.ts +2 -2
  252. package/src/db/mappers.ts +2 -14
  253. package/src/db/merge-lease.ts +1 -15
  254. package/src/db/message-send.ts +4 -0
  255. package/src/db/messages.ts +31 -25
  256. package/src/db/migrations.ts +25 -16
  257. package/src/db/notification-write-ops.ts +19 -0
  258. package/src/db/operator-answer-write.ts +19 -0
  259. package/src/db/orchestrators.ts +14 -76
  260. package/src/db/pairs-async.ts +22 -1
  261. package/src/db/pairs-write-ops.ts +8 -3
  262. package/src/db/pairs.ts +42 -61
  263. package/src/db/plan-dispatch-schema.ts +5 -1
  264. package/src/db/plan-ready-notices.ts +43 -0
  265. package/src/db/plan-tools-include-migration.ts +36 -0
  266. package/src/db/plans-write-ops.ts +2 -0
  267. package/src/db/presence-buffer.ts +5 -0
  268. package/src/db/presence-loop.ts +18 -23
  269. package/src/db/presence-write.ts +0 -6
  270. package/src/db/project-entries-async.ts +14 -0
  271. package/src/db/project-entries-read-ops.ts +5 -1
  272. package/src/db/project-entries-write-ops.ts +8 -0
  273. package/src/db/project-entries.ts +15 -12
  274. package/src/db/project-journal.ts +2 -2
  275. package/src/db/project-profile-instructions.ts +50 -0
  276. package/src/db/project-trust-approvals.ts +2 -2
  277. package/src/db/prompt-templates.ts +4 -4
  278. package/src/db/prompt-versions.ts +9 -2
  279. package/src/db/provider-config-history.ts +8 -3
  280. package/src/db/provider-model-seed.ts +34 -0
  281. package/src/db/read-op-marshaling-fixtures.ts +23 -0
  282. package/src/db/read-ops.ts +8 -0
  283. package/src/db/retention.ts +13 -2
  284. package/src/db/review-publish-write.ts +8 -0
  285. package/src/db/routing-policy.ts +2 -3
  286. package/src/db/runtime-admin-async.ts +19 -0
  287. package/src/db/runtime-admin-write-ops.ts +36 -0
  288. package/src/db/runtime-tail-async.ts +288 -0
  289. package/src/db/runtime-tail-write-ops.ts +97 -0
  290. package/src/db/schema.ts +13 -4
  291. package/src/db/spawn-budget.ts +5 -0
  292. package/src/db/spawn-delegation-state.ts +11 -4
  293. package/src/db/spawn-delegation.ts +1 -11
  294. package/src/db/sql-audit-indexes.ts +3 -0
  295. package/src/db/stats-async.ts +9 -6
  296. package/src/db/task-entity.ts +28 -6
  297. package/src/db/task-list.ts +3 -1
  298. package/src/db/tasks.ts +1 -17
  299. package/src/db/team-claim-policy.ts +60 -0
  300. package/src/db/teams-async.ts +4 -0
  301. package/src/db/teams-write-ops.ts +4 -0
  302. package/src/db/terminal-events.ts +15 -0
  303. package/src/db/timer-cutover-bodies.ts +292 -0
  304. package/src/db/timer-cutover-core.ts +37 -278
  305. package/src/db/timer-cutover-state.ts +40 -0
  306. package/src/db/timer-cutover-write-ops.ts +1 -40
  307. package/src/db/timer-ingress.ts +7 -1
  308. package/src/db/token-db-write-ops.ts +19 -0
  309. package/src/db/token-standing-async.ts +12 -0
  310. package/src/db/token-standing.ts +21 -20
  311. package/src/db/token-usage-retention.ts +33 -0
  312. package/src/db/token-usage-write-ops.ts +1 -1
  313. package/src/db/token-usage.ts +4 -1
  314. package/src/db/user-invites-async.ts +13 -0
  315. package/src/db/user-invites.ts +3 -3
  316. package/src/db/users.ts +14 -6
  317. package/src/db/workflow-contact.ts +1 -1
  318. package/src/db/workflow-task-read-ops.ts +30 -0
  319. package/src/db/workspaces.ts +8 -5
  320. package/src/db/write-ops.ts +37 -12
  321. package/src/db/writer-fault-seam.ts +2 -9
  322. package/src/db/writer-fault-test-ops.ts +18 -0
  323. package/src/db/writer-gateway.ts +58 -56
  324. package/src/dev.ts +8 -3
  325. package/src/dispatch-availability.ts +10 -6
  326. package/src/ephemeral/{landing-ingress-proof-worker.ts → landing-ingress-proof.test-fixture.ts} +4 -2
  327. package/src/event-loop-lag.ts +4 -2
  328. package/src/event-loop-yield.ts +2 -2
  329. package/src/events.ts +10 -8
  330. package/src/host/disk-alert.ts +121 -0
  331. package/src/host-provider-store.ts +5 -4
  332. package/src/hub-metrics-report.ts +5 -1
  333. package/src/hub-metrics.ts +38 -18
  334. package/src/injection-sweep-pacing.ts +6 -8
  335. package/src/land-gate-notifications.ts +11 -10
  336. package/src/land-gate-queue-progress.ts +3 -3
  337. package/src/land-settle-dispatch.ts +52 -92
  338. package/src/lifecycle-context-pressure.ts +11 -10
  339. package/src/lifecycle-manager.ts +107 -100
  340. package/src/maintenance/breaker.ts +18 -16
  341. package/src/maintenance/cd-watcher.ts +3 -3
  342. package/src/maintenance/checkout-refresh.ts +18 -1
  343. package/src/maintenance/critical-job-watchdog.ts +19 -20
  344. package/src/maintenance/events.ts +3 -3
  345. package/src/maintenance/history-retention-job.ts +30 -0
  346. package/src/maintenance/index.ts +1 -0
  347. package/src/maintenance/jobs.ts +32 -69
  348. package/src/maintenance/long-running-work.ts +3 -1
  349. package/src/maintenance/offline-agent-prune-job.ts +28 -0
  350. package/src/maintenance/orphaned-sessions.ts +5 -4
  351. package/src/maintenance/pauses.ts +4 -10
  352. package/src/maintenance/plan-ready-notice-job.ts +71 -0
  353. package/src/maintenance/scheduler.ts +98 -137
  354. package/src/maintenance/stalled-delivery-pager.ts +10 -9
  355. package/src/maintenance/teams.ts +19 -30
  356. package/src/maintenance/workspaces.ts +18 -28
  357. package/src/managed-policy-escalation.ts +7 -7
  358. package/src/managed-policy.ts +32 -28
  359. package/src/managed-provider-gate.ts +5 -4
  360. package/src/managed-spawn-reservation.ts +5 -4
  361. package/src/mcp/index.ts +12 -9
  362. package/src/mcp/output-descriptions.ts +8 -8
  363. package/src/mcp/presentation.ts +6 -5
  364. package/src/mcp/project-profile-instructions.ts +32 -0
  365. package/src/mcp/runtime-output.ts +6 -1
  366. package/src/mcp/self-care-visibility.ts +2 -2
  367. package/src/mcp/spawn-targets-matrix.ts +10 -1
  368. package/src/mcp/tool-groups.ts +4 -3
  369. package/src/mcp/tool-roles.ts +81 -0
  370. package/src/mcp/tools-spawn.ts +4 -3
  371. package/src/mcp/tools-workspace.ts +1 -1
  372. package/src/mcp-agent-action.ts +1 -2
  373. package/src/mcp-blackboard-tools.ts +6 -5
  374. package/src/mcp-decision-tools.ts +7 -7
  375. package/src/mcp-egress-tools.ts +10 -9
  376. package/src/mcp-issue-activity-tools.ts +2 -2
  377. package/src/mcp-issue-association-tools.ts +4 -4
  378. package/src/mcp-issue-ref-tools.ts +13 -12
  379. package/src/mcp-maintenance-tools.ts +2 -2
  380. package/src/mcp-merge-tools.ts +5 -5
  381. package/src/mcp-notification-subscription-tools.ts +14 -15
  382. package/src/mcp-output-levels.test-fixture.ts +1 -1
  383. package/src/mcp-profile-trust-tools.ts +5 -5
  384. package/src/mcp-project-journal-tools.ts +4 -12
  385. package/src/mcp-project-tools.ts +17 -18
  386. package/src/mcp-provider-catalog.ts +2 -2
  387. package/src/mcp-routing-policy-tools.ts +3 -2
  388. package/src/mcp-task-tools.ts +11 -5
  389. package/src/mcp-team-template-tools.ts +3 -3
  390. package/src/mcp-team-tools.ts +6 -6
  391. package/src/mcp-workflow-tools.ts +13 -4
  392. package/src/memory-area-injection.ts +13 -12
  393. package/src/memory-boundary-capture.ts +6 -6
  394. package/src/memory-injection.ts +45 -43
  395. package/src/merge-pause-maintenance.ts +5 -4
  396. package/src/notification-router.ts +44 -17
  397. package/src/notification-types.ts +2 -1
  398. package/src/notify.ts +5 -5
  399. package/src/observed-reset-refresh.ts +4 -4
  400. package/src/operator-alarm.ts +23 -11
  401. package/src/project-ingest.ts +6 -6
  402. package/src/project-instructions.ts +12 -1
  403. package/src/project-profile-instruction-text.ts +6 -0
  404. package/src/project-profile-instructions.ts +20 -0
  405. package/src/project-trust.ts +12 -11
  406. package/src/prompt-resolver.ts +3 -3
  407. package/src/provider-catalog-store.ts +3 -49
  408. package/src/provider-config-store.ts +12 -11
  409. package/src/provider-model-seed.ts +1 -18
  410. package/src/provider-quota-async.ts +5 -7
  411. package/src/provider-quota-config-store.ts +5 -4
  412. package/src/provider-secrets.test-fixture.ts +3 -3
  413. package/src/provider-timeline-event.ts +4 -7
  414. package/src/quota-band-delivery.ts +2 -2
  415. package/src/recipe-runner.ts +6 -5
  416. package/src/repo-config-source.ts +10 -4
  417. package/src/retention-config-store.ts +4 -3
  418. package/src/reviewer-pipeline.ts +11 -10
  419. package/src/routes/_route.ts +4 -4
  420. package/src/routes/_shared.ts +13 -12
  421. package/src/routes/agent-effort.ts +5 -5
  422. package/src/routes/agent-heartbeat-quota.ts +23 -0
  423. package/src/routes/agent-keep.ts +1 -1
  424. package/src/routes/agent-profiles.ts +6 -6
  425. package/src/routes/agent-reporting.ts +1 -1
  426. package/src/routes/agent-self-effort.ts +5 -5
  427. package/src/routes/agent-sessions.ts +24 -24
  428. package/src/routes/agents-spawn.ts +2 -2
  429. package/src/routes/agents.ts +19 -121
  430. package/src/routes/auth.ts +14 -15
  431. package/src/routes/authority-audit.ts +2 -2
  432. package/src/routes/automations.ts +6 -5
  433. package/src/routes/channel-binding-delete.ts +1 -1
  434. package/src/routes/channel-output.ts +3 -3
  435. package/src/routes/claude-api-budget.ts +5 -5
  436. package/src/routes/commands-listing.ts +5 -1
  437. package/src/routes/commands.ts +31 -29
  438. package/src/routes/context-resets.ts +2 -2
  439. package/src/routes/continuation-archives.ts +2 -2
  440. package/src/routes/coordinator-teams.ts +1 -1
  441. package/src/routes/decisions.ts +2 -2
  442. package/src/routes/host-secret-files.ts +1 -1
  443. package/src/routes/hosts.ts +11 -11
  444. package/src/routes/inbox.ts +3 -2
  445. package/src/routes/index.ts +12 -2
  446. package/src/routes/integrations.ts +32 -56
  447. package/src/routes/issue-activity.ts +2 -2
  448. package/src/routes/issue-associations.ts +4 -4
  449. package/src/routes/issue-refs.ts +9 -9
  450. package/src/routes/kernel-timers-operator.ts +1 -1
  451. package/src/routes/memory.ts +1 -1
  452. package/src/routes/merges.ts +11 -11
  453. package/src/routes/messages.ts +23 -17
  454. package/src/routes/orchestrator-bootstrap.ts +2 -2
  455. package/src/routes/orchestrator-host-registration.ts +4 -2
  456. package/src/routes/orchestrator-host-utilization.ts +5 -3
  457. package/src/routes/orchestrator-proxy.ts +4 -4
  458. package/src/routes/orchestrator.ts +28 -19
  459. package/src/routes/pairs.ts +8 -8
  460. package/src/routes/project-profile-instructions.ts +27 -0
  461. package/src/routes/project-trust.ts +3 -3
  462. package/src/routes/projects.ts +16 -16
  463. package/src/routes/prompt-templates.ts +12 -12
  464. package/src/routes/provider-config.ts +6 -6
  465. package/src/routes/provider-quota-config.ts +2 -2
  466. package/src/routes/provider-quotas.ts +10 -10
  467. package/src/routes/run-command.ts +1 -1
  468. package/src/routes/secrets-backup.ts +2 -2
  469. package/src/routes/secrets-import.ts +1 -1
  470. package/src/routes/secrets-vault.ts +7 -7
  471. package/src/routes/settings.ts +6 -6
  472. package/src/routes/shipping.ts +9 -1
  473. package/src/routes/spawn-policy.ts +8 -7
  474. package/src/routes/sse.ts +2 -2
  475. package/src/routes/stats.ts +6 -6
  476. package/src/routes/task-http.ts +15 -1
  477. package/src/routes/task-issues.ts +11 -26
  478. package/src/routes/tasks.ts +22 -53
  479. package/src/routes/team-templates.ts +12 -12
  480. package/src/routes/teams-config.ts +2 -2
  481. package/src/routes/teams.ts +10 -10
  482. package/src/routes/tokens.ts +30 -22
  483. package/src/routes/users.ts +24 -24
  484. package/src/routes/viewer-read.ts +3 -3
  485. package/src/routes/web-tool-calls.ts +4 -4
  486. package/src/routes/workflows.ts +22 -7
  487. package/src/routes/workspaces.ts +17 -16
  488. package/src/routing-policy-normalize.ts +1 -2
  489. package/src/routing-policy-push.ts +6 -6
  490. package/src/routing-step-defaults.ts +0 -2
  491. package/src/runner-token-mint-limit.ts +63 -0
  492. package/src/runtime-grant.ts +21 -13
  493. package/src/runtime-tokens.ts +59 -35
  494. package/src/secrets-broker/config.ts +1 -1
  495. package/src/secrets-broker/service.ts +2 -2
  496. package/src/security.ts +16 -21
  497. package/src/self-resume-carry.ts +21 -110
  498. package/src/self-resume-supersede.ts +4 -3
  499. package/src/self-resume.ts +54 -66
  500. package/src/server-background.ts +2 -2
  501. package/src/server.ts +26 -24
  502. package/src/services/agent-action.ts +12 -31
  503. package/src/services/agent-effort.ts +7 -32
  504. package/src/services/agent-hang-watchdog-job.ts +2 -2
  505. package/src/services/agent-heartbeat.ts +166 -0
  506. package/src/services/agent-reporting.ts +1 -1
  507. package/src/services/browser-inventory.ts +3 -3
  508. package/src/services/browser-session-state.ts +3 -2
  509. package/src/services/browser-session.ts +21 -27
  510. package/src/services/bus-command-update.ts +9 -9
  511. package/src/services/checkout-refresh-state.ts +1 -0
  512. package/src/services/checkout-refresh.test-fixture.ts +3 -2
  513. package/src/services/command-host.ts +7 -2
  514. package/src/services/coordinator-digest.ts +3 -2
  515. package/src/services/dispatch-command.ts +12 -13
  516. package/src/services/effective-launch-driver.ts +14 -9
  517. package/src/services/host-changed-paths.test-fixture.ts +5 -6
  518. package/src/services/host-project-readiness.ts +2 -2
  519. package/src/services/host-providers.ts +1 -1
  520. package/src/services/host-utilization.ts +27 -4
  521. package/src/services/idle-agent-digest.ts +17 -12
  522. package/src/services/idle-epics.ts +9 -10
  523. package/src/services/interrupt-agent.ts +12 -9
  524. package/src/services/issue-activity.ts +3 -3
  525. package/src/services/issue-associations.ts +15 -18
  526. package/src/services/issue-lifecycle-comments.ts +3 -2
  527. package/src/services/issue-lifecycle.ts +69 -72
  528. package/src/services/issue-refs.ts +10 -15
  529. package/src/services/kernel-timers-cutover-chaos-worker.ts +11 -8
  530. package/src/services/kernel-timers-ingress-chaos-worker.ts +6 -1
  531. package/src/services/kernel-timers-ingress.ts +4 -4
  532. package/src/services/kernel-timers-message-authority-chaos-worker.ts +3 -10
  533. package/src/services/kernel-timers-operator-chaos-worker.ts +3 -2
  534. package/src/services/kernel-timers-outbox.ts +1 -1
  535. package/src/services/kernel-timers-stage10-operator.ts +1 -1
  536. package/src/services/kernel-timers.ts +4 -3
  537. package/src/services/land-gate-placement.ts +11 -2
  538. package/src/services/land-issue-relations.ts +5 -4
  539. package/src/services/land-restart-retry.ts +7 -6
  540. package/src/services/landed-ancestry.ts +25 -8
  541. package/src/services/legacy-landing-host.ts +4 -1
  542. package/src/services/legacy-landing-recovery.ts +8 -6
  543. package/src/services/managed-running.ts +17 -17
  544. package/src/services/memory-areas.ts +17 -53
  545. package/src/services/merge-pause.ts +9 -15
  546. package/src/services/operator-decisions.ts +37 -41
  547. package/src/services/orchestrator-registration-recovery.ts +6 -2
  548. package/src/services/orchestrator-upgrade.ts +14 -12
  549. package/src/services/permission-decision.ts +4 -3
  550. package/src/services/plan-ci-notice.ts +57 -0
  551. package/src/services/plan-ci-recovery.ts +2 -55
  552. package/src/services/plan-conformance.ts +4 -4
  553. package/src/services/plan-dispatch-policy.ts +10 -3
  554. package/src/services/plan-dispatch.ts +35 -14
  555. package/src/services/plan-graph.ts +39 -261
  556. package/src/services/plan-import.ts +1 -1
  557. package/src/services/plan-live-bindings.ts +8 -37
  558. package/src/services/plan-task-create.ts +1 -1
  559. package/src/services/plan-terminal-refs.ts +2 -12
  560. package/src/services/plan-wake-digest.ts +9 -3
  561. package/src/services/profile-trust.ts +6 -5
  562. package/src/services/project-config-read.ts +70 -0
  563. package/src/services/project-profile-instructions.ts +54 -0
  564. package/src/services/project.ts +11 -10
  565. package/src/services/prompt-templates.ts +6 -5
  566. package/src/services/provider-hold-nudge.ts +9 -9
  567. package/src/services/provider-hold-record.ts +13 -12
  568. package/src/services/provider-state-audit.ts +19 -18
  569. package/src/services/provisioning-harness/budget-baseline.json +4 -4
  570. package/src/services/provisioning-harness/driver.ts +1 -1
  571. package/src/services/provisioning-harness/fixture-matrix.ts +3 -3
  572. package/src/services/provisioning-harness/lifecycle.ts +24 -22
  573. package/src/services/provisioning-harness/prepare.ts +16 -17
  574. package/src/services/rate-limit-resume.ts +10 -9
  575. package/src/services/red-main-auto-revert.ts +7 -5
  576. package/src/services/red-main-controller-deps.ts +20 -3
  577. package/src/services/red-main-incident.ts +3 -1
  578. package/src/services/red-main-quarantine.ts +2 -3
  579. package/src/services/register-agent.ts +22 -22
  580. package/src/services/restart-project-role.ts +1 -1
  581. package/src/services/restart-spawn.ts +74 -61
  582. package/src/services/review-publish.ts +7 -24
  583. package/src/services/review-ref-reconcile.ts +29 -38
  584. package/src/services/runtime-dependency-alert.ts +27 -0
  585. package/src/services/scheduler-command.ts +11 -9
  586. package/src/services/scheduler.ts +5 -5
  587. package/src/services/self-care-state.ts +2 -1
  588. package/src/services/self-effort-grant.ts +5 -25
  589. package/src/services/self-effort.ts +5 -5
  590. package/src/services/send-message.ts +21 -34
  591. package/src/services/shutdown-agent.ts +17 -14
  592. package/src/services/spawn-agent.ts +25 -43
  593. package/src/services/spawn-chain-inspector.ts +7 -14
  594. package/src/services/spawn-cwd-placement.ts +21 -5
  595. package/src/services/spawn-issue-activity.ts +8 -6
  596. package/src/services/spawn-launch.ts +17 -1
  597. package/src/services/spawn-loss-escalation.ts +1 -1
  598. package/src/services/spawn-policy.ts +68 -0
  599. package/src/services/spawn-registration-watchdog.ts +2 -2
  600. package/src/services/spawn-repo-probe.ts +7 -5
  601. package/src/services/spawn-tree-cleanup.ts +8 -9
  602. package/src/services/steward-reaper.ts +4 -4
  603. package/src/services/task-context-hydration.ts +25 -1
  604. package/src/services/task-delivery.ts +20 -34
  605. package/src/services/task-dispatch.ts +3 -0
  606. package/src/services/task-entity.ts +40 -203
  607. package/src/services/task-issue-link.ts +13 -20
  608. package/src/services/task-issue-weave.ts +12 -11
  609. package/src/services/task-lifecycle.ts +27 -31
  610. package/src/services/task-repo-cwd.ts +37 -0
  611. package/src/services/task-review-hold.ts +4 -17
  612. package/src/services/task-semantic-events.ts +13 -11
  613. package/src/services/task-state-reconcile.ts +8 -17
  614. package/src/services/task-validation.ts +2 -2
  615. package/src/services/team-templates.ts +12 -11
  616. package/src/services/team.ts +31 -98
  617. package/src/services/terminal-provider-exit.ts +6 -5
  618. package/src/services/timer-message-fire-chaos-worker.ts +7 -3
  619. package/src/services/timer-message-fire-outbox.ts +1 -1
  620. package/src/services/transient-agent-reaper.ts +25 -20
  621. package/src/services/turn-reconcile-audit.ts +9 -9
  622. package/src/services/user-onboarding.ts +8 -6
  623. package/src/services/user-profile.ts +6 -9
  624. package/src/services/work-finality.ts +16 -4
  625. package/src/services/workflow-auto-start.ts +26 -13
  626. package/src/services/workflow-caller.ts +61 -4
  627. package/src/services/workflow-child-proof-worker.ts +1 -1
  628. package/src/services/workflow-ci-main.ts +1 -1
  629. package/src/services/workflow-control-proof-worker.ts +1 -1
  630. package/src/services/workflow-coordinator.ts +8 -2
  631. package/src/services/workflow-decisions.ts +5 -5
  632. package/src/services/workflow-deferred-cleanup.ts +5 -3
  633. package/src/services/workflow-effect-driver.ts +42 -17
  634. package/src/services/workflow-effects.ts +58 -37
  635. package/src/services/workflow-land-notice.ts +10 -0
  636. package/src/services/workflow-pause-text.ts +43 -0
  637. package/src/services/workflow-pins.ts +7 -4
  638. package/src/services/workflow-reconcile.ts +14 -11
  639. package/src/services/workflow-resume-pins.ts +3 -3
  640. package/src/services/workflow-routing-defaults.ts +18 -0
  641. package/src/services/workflow-run-view.ts +6 -3
  642. package/src/services/workflow-run.test-fixture.ts +1 -1
  643. package/src/services/workflow-runs.ts +61 -33
  644. package/src/services/workflow-supervisor-state.ts +26 -1
  645. package/src/services/workflow-supervisor.ts +11 -6
  646. package/src/services/workspace-recovery.ts +4 -3
  647. package/src/settings/registry.ts +1 -2
  648. package/src/spawn-admission.ts +10 -2
  649. package/src/spawn-command.ts +4 -4
  650. package/src/spawn-models.ts +10 -12
  651. package/src/spawn-placement.ts +28 -10
  652. package/src/spawn-targets.ts +9 -9
  653. package/src/sse-agent-status.ts +15 -6
  654. package/src/sse.ts +49 -24
  655. package/src/startup-context-injection.ts +62 -57
  656. package/src/state-adoption/cd-cutover.ts +53 -7
  657. package/src/state-adoption/fleet-cutover.ts +35 -0
  658. package/src/state-adoption/fleet-plan.ts +36 -0
  659. package/src/state-adoption/index.ts +2 -2
  660. package/src/state-adoption/linux-plan.ts +2 -2
  661. package/src/state-adoption/linux.ts +2 -2
  662. package/src/state-adoption/macos-plan.ts +2 -2
  663. package/src/state-adoption/macos.ts +1 -1
  664. package/src/steward-handoff.ts +4 -3
  665. package/src/steward-policy-cleanup.ts +9 -8
  666. package/src/steward.ts +9 -8
  667. package/src/task-dispatch-live.ts +6 -3
  668. package/src/task-dispatcher.ts +3 -3
  669. package/src/teams-config-store.ts +4 -3
  670. package/src/token-db-write.ts +10 -0
  671. package/src/token-db.ts +2 -2
  672. package/src/token-usage-async.ts +2 -4
  673. package/src/user-awaiting-reply.ts +5 -5
  674. package/src/workspace-actions.ts +24 -29
  675. package/src/workspace-auto-merge.ts +14 -12
  676. package/src/workspace-changed-paths-client.ts +16 -5
  677. package/src/workspace-cleanup-stale.ts +30 -7
  678. package/src/workspace-command-settle.ts +26 -17
  679. package/src/workspace-config.ts +1 -1
  680. package/src/workspace-conflict-resolver.ts +9 -7
  681. package/src/workspace-dead-owner-recovery.ts +5 -4
  682. package/src/workspace-escalation.ts +12 -11
  683. package/src/workspace-human-escalation.ts +3 -3
  684. package/src/workspace-land-gate-watchdog.ts +3 -3
  685. package/src/workspace-land-refusal.ts +20 -0
  686. package/src/workspace-land-stopped.ts +1 -0
  687. package/src/workspace-merge.ts +10 -26
  688. package/src/workspace-nothing-to-land-notice.ts +2 -2
  689. package/src/workspace-orphans.ts +18 -37
  690. package/src/workspace-pr-completion.ts +10 -8
  691. package/src/workspace-rekey.ts +3 -3
  692. package/src/workspace-steward-failure.ts +2 -2
  693. package/src/workspace-steward-wake.ts +4 -4
  694. package/node_modules/@humwick/kernel/LICENSE +0 -167
  695. package/node_modules/@humwick/kernel/async-entity-persistence.ts +0 -344
  696. package/node_modules/@humwick/kernel/async-event-log.ts +0 -107
  697. package/node_modules/@humwick/kernel/automations.pilot.ts +0 -147
  698. package/node_modules/@humwick/kernel/config.ts +0 -111
  699. package/node_modules/@humwick/kernel/contract.ts +0 -572
  700. package/node_modules/@humwick/kernel/control-authz.ts +0 -281
  701. package/node_modules/@humwick/kernel/control.ts +0 -645
  702. package/node_modules/@humwick/kernel/effects.ts +0 -493
  703. package/node_modules/@humwick/kernel/event-log.ts +0 -319
  704. package/node_modules/@humwick/kernel/http-transport.ts +0 -384
  705. package/node_modules/@humwick/kernel/identity-grammar.ts +0 -20
  706. package/node_modules/@humwick/kernel/identity.ts +0 -248
  707. package/node_modules/@humwick/kernel/index.ts +0 -28
  708. package/node_modules/@humwick/kernel/kernel-persistence.ts +0 -181
  709. package/node_modules/@humwick/kernel/landing-incident.ts +0 -306
  710. package/node_modules/@humwick/kernel/landing.ts +0 -953
  711. package/node_modules/@humwick/kernel/manifest-validation.ts +0 -460
  712. package/node_modules/@humwick/kernel/mcp-transport.ts +0 -109
  713. package/node_modules/@humwick/kernel/message-authority-chaos-worker.ts +0 -200
  714. package/node_modules/@humwick/kernel/message-authority.ts +0 -281
  715. package/node_modules/@humwick/kernel/module-host.ts +0 -722
  716. package/node_modules/@humwick/kernel/openapi-init.ts +0 -14
  717. package/node_modules/@humwick/kernel/package.json +0 -39
  718. package/node_modules/@humwick/kernel/persistence-schema.ts +0 -248
  719. package/node_modules/@humwick/kernel/persistence.ts +0 -510
  720. package/node_modules/@humwick/kernel/registry.ts +0 -60
  721. package/node_modules/@humwick/kernel/sqlite-kernel-persistence.ts +0 -499
  722. package/node_modules/@humwick/kernel/sqlite-module-host.ts +0 -87
  723. package/node_modules/@humwick/kernel/timers-chaos-worker.ts +0 -186
  724. package/node_modules/@humwick/kernel/timers.pilot.ts +0 -1411
  725. package/node_modules/@humwick/kernel/workflow-activation.ts +0 -25
  726. package/node_modules/@humwick/kernel/workflow-backstop.ts +0 -40
  727. package/node_modules/@humwick/kernel/workflow-cancel-tree.ts +0 -20
  728. package/node_modules/@humwick/kernel/workflow-chaos-worker.ts +0 -213
  729. package/node_modules/@humwick/kernel/workflow-composition.ts +0 -231
  730. package/node_modules/@humwick/kernel/workflow-container.ts +0 -72
  731. package/node_modules/@humwick/kernel/workflow-control.test-fixture.ts +0 -42
  732. package/node_modules/@humwick/kernel/workflow-control.ts +0 -178
  733. package/node_modules/@humwick/kernel/workflow-definition.ts +0 -507
  734. package/node_modules/@humwick/kernel/workflow-dispatch.ts +0 -60
  735. package/node_modules/@humwick/kernel/workflow-foreach.ts +0 -167
  736. package/node_modules/@humwick/kernel/workflow-journal-codec.ts +0 -339
  737. package/node_modules/@humwick/kernel/workflow-journal.ts +0 -922
  738. package/node_modules/@humwick/kernel/workflow-lane.ts +0 -48
  739. package/node_modules/@humwick/kernel/workflow-lease-owner.ts +0 -60
  740. package/node_modules/@humwick/kernel/workflow-recovery.test-fixture.ts +0 -19
  741. package/node_modules/@humwick/kernel/workflow-runtime.ts +0 -938
  742. package/node_modules/@humwick/kernel/workflow-script.ts +0 -11
  743. package/node_modules/@humwick/kernel/workflow-state.ts +0 -299
  744. package/node_modules/@humwick/kernel/workflow-step-commit.ts +0 -195
  745. package/node_modules/@humwick/kernel/workflow-transitions.ts +0 -317
  746. package/node_modules/@humwick/kernel/workflow-values.ts +0 -153
  747. package/node_modules/@humwick/kernel/workflow.pilot.ts +0 -376
  748. package/node_modules/@humwick/offload/LICENSE +0 -167
  749. package/node_modules/@humwick/offload/README.md +0 -57
  750. package/node_modules/@humwick/offload/dist/async-runner.d.ts +0 -18
  751. package/node_modules/@humwick/offload/dist/async-runner.d.ts.map +0 -1
  752. package/node_modules/@humwick/offload/dist/async-runner.js +0 -158
  753. package/node_modules/@humwick/offload/dist/async-runner.js.map +0 -1
  754. package/node_modules/@humwick/offload/dist/envelope.d.ts +0 -25
  755. package/node_modules/@humwick/offload/dist/envelope.d.ts.map +0 -1
  756. package/node_modules/@humwick/offload/dist/envelope.js +0 -80
  757. package/node_modules/@humwick/offload/dist/envelope.js.map +0 -1
  758. package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts +0 -10
  759. package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts.map +0 -1
  760. package/node_modules/@humwick/offload/dist/fixtures/worker-task.js +0 -59
  761. package/node_modules/@humwick/offload/dist/fixtures/worker-task.js.map +0 -1
  762. package/node_modules/@humwick/offload/dist/index.d.ts +0 -5
  763. package/node_modules/@humwick/offload/dist/index.d.ts.map +0 -1
  764. package/node_modules/@humwick/offload/dist/index.js +0 -5
  765. package/node_modules/@humwick/offload/dist/index.js.map +0 -1
  766. package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts +0 -62
  767. package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts.map +0 -1
  768. package/node_modules/@humwick/offload/dist/subprocess-runner.js +0 -295
  769. package/node_modules/@humwick/offload/dist/subprocess-runner.js.map +0 -1
  770. package/node_modules/@humwick/offload/dist/types.d.ts +0 -111
  771. package/node_modules/@humwick/offload/dist/types.d.ts.map +0 -1
  772. package/node_modules/@humwick/offload/dist/types.js +0 -176
  773. package/node_modules/@humwick/offload/dist/types.js.map +0 -1
  774. package/node_modules/@humwick/offload/dist/worker-pool.d.ts +0 -23
  775. package/node_modules/@humwick/offload/dist/worker-pool.d.ts.map +0 -1
  776. package/node_modules/@humwick/offload/dist/worker-pool.js +0 -435
  777. package/node_modules/@humwick/offload/dist/worker-pool.js.map +0 -1
  778. package/node_modules/@humwick/offload/dist/worker-runtime.d.ts +0 -2
  779. package/node_modules/@humwick/offload/dist/worker-runtime.d.ts.map +0 -1
  780. package/node_modules/@humwick/offload/dist/worker-runtime.js +0 -27
  781. package/node_modules/@humwick/offload/dist/worker-runtime.js.map +0 -1
  782. package/node_modules/@humwick/offload/dist/worker.d.ts +0 -5
  783. package/node_modules/@humwick/offload/dist/worker.d.ts.map +0 -1
  784. package/node_modules/@humwick/offload/dist/worker.js +0 -1
  785. package/node_modules/@humwick/offload/dist/worker.js.map +0 -1
  786. package/node_modules/@humwick/offload/package.json +0 -42
  787. package/node_modules/@humwick/offload/src/async-runner.ts +0 -170
  788. package/node_modules/@humwick/offload/src/envelope.ts +0 -92
  789. package/node_modules/@humwick/offload/src/fixtures/worker-task.ts +0 -49
  790. package/node_modules/@humwick/offload/src/index.ts +0 -4
  791. package/node_modules/@humwick/offload/src/subprocess-runner.ts +0 -334
  792. package/node_modules/@humwick/offload/src/types.ts +0 -235
  793. package/node_modules/@humwick/offload/src/worker-pool.ts +0 -463
  794. package/node_modules/@humwick/offload/src/worker-runtime.ts +0 -32
  795. package/node_modules/@humwick/offload/src/worker.ts +0 -5
  796. package/public/assets/agent-liveness-DyqxfB-t.js +0 -2
  797. package/public/assets/agent-profiles-BpI_jTxq.js +0 -2
  798. package/public/assets/index-B7ZerHLY.css +0 -2
  799. package/public/assets/index-BU3uWo2t.js +0 -15
  800. package/public/assets/projects-B_lmcqfO.js +0 -2
  801. package/public/assets/provider-display-DbLWpP3j.js +0 -2
  802. package/public/assets/run-card-CO_bguQf.js +0 -2
  803. package/public/assets/shipping-Bu8p1gEw.js +0 -2
  804. package/public/assets/store-BvtFdlGX.js +0 -9
  805. package/public/assets/use-project-list-B-T2Bnnn.js +0 -2
  806. package/public/assets/versioned-prompt-editor-Diu8BIaM.js +0 -8
  807. package/runner/src/agent-runner/http-liveness.ts +0 -85
  808. package/runner/src/gate-run-lease-probe.ts +0 -38
  809. package/src/db/claude-catalog-reconcile.ts +0 -27
  810. package/src/db/on-loop-write-transaction.ts +0 -34
  811. package/src/routing-model-aliases.ts +0 -21
@@ -1,12 +1,15 @@
1
+ import { framed } from "./hub-metrics";
2
+ import { upsertManagedAgentStateAsync, updateManagedAgentStateAsync } from "./db/lifecycle-tail-async";
3
+ import { createActivityEventAsync } from "./db/activity-async";
4
+ import { createCommandAsync, prepareCommandWriteAsync, submitPreparedCommandAsync } from "./commands-write";
1
5
  import { timePostBindPhase } from "./post-bind-startup";
2
6
  import { requestAgentExitCleanup } from "./agent-exit-cleanup";
3
7
  import { hostSpawnsDrained } from "./db/spawn-host-cap";
4
- import { createCommand } from "./commands-db";
5
- import { createCommandAsync, prepareCommandWriteAsync } from "./commands-write";
8
+
6
9
  import { errMessage, fireAndForget, guardedInterval } from "@humwick/sdk";
7
10
  import { agentProviderState } from "./provider-state";
8
- import { createActivityEvent, getAgent, getDb, getOrchestrator, listOrchestrators, listWorkspaces, pendingOwnRelayRunIds } from "./db";
9
- import { getManagedAgentState, listSpawnPolicies, updateManagedAgentState, upsertManagedAgentState } from "./config-store"; import { managedSpawnReservationCurrent, restoreDrainedSpawnReservation } from "./managed-spawn-reservation";
11
+ import { getAgent, getDb, getOrchestrator, listOrchestrators, listWorkspaces, pendingOwnRelayRunIds } from "./db";
12
+ import { getManagedAgentState, listSpawnPolicies } from "./config-store"; import { managedSpawnReservationCurrent, restoreDrainedSpawnReservation } from "./managed-spawn-reservation";
10
13
  import { emitRelayEvent } from "./events";
11
14
  import { alwaysReloadTags, reconcileLifecycleContextPressure, requestAgentCompact } from "./lifecycle-context-pressure";
12
15
  import { escalateManagedSpawnFailure, escalateOfflineOrchestrator } from "./managed-policy-escalation";
@@ -53,7 +56,8 @@ const DEFAULT_COMPACT_TARGET = 0.3;
53
56
  const DEFAULT_MAX_TASKS_BEFORE_COMPACT = 10;
54
57
  const DEFAULT_COMPACT_COOLDOWN_MS = 60_000;
55
58
 
56
- interface LifecycleManagerOptions { tickMs?: number; now?: () => number; buildManagedSpawnParams?: typeof buildManagedSpawnParamsAsync; }
59
+ type ManagedSpawnParamsBuilder = (...args: Parameters<typeof buildManagedSpawnParamsAsync>) => Record<string, unknown> | Promise<Record<string, unknown>>;
60
+ interface LifecycleManagerOptions { tickMs?: number; now?: () => number; buildManagedSpawnParams?: ManagedSpawnParamsBuilder; }
57
61
 
58
62
  // #1021 A1 — the outcome of trying to wake an on-demand policy via a queued message. A
59
63
  // caller (e.g. wakeRepoSteward) must be able to tell "a live agent will handle this" from
@@ -66,7 +70,7 @@ export class LifecycleManager {
66
70
  private timer?: Timer;
67
71
  private readonly tickMs: number;
68
72
  private readonly now: () => number;
69
- private readonly buildManagedSpawnParams: typeof buildManagedSpawnParamsAsync; private readonly pendingSpawnPreparations = new Map<string, Promise<Command | null>>();
73
+ private readonly buildManagedSpawnParams: ManagedSpawnParamsBuilder; private readonly pendingSpawnPreparations = new Map<string, Promise<Command | null>>();
70
74
  private readonly updateRestartPending = new Set<string>();
71
75
  // #1761 — how many times a policy's stop has been forcefully re-issued while the process refused to
72
76
  // confirm dead. Bounds the escalation so a wedged steward is retried, then given up to `failed`,
@@ -81,7 +85,7 @@ export class LifecycleManager {
81
85
 
82
86
  start(): void {
83
87
  if (this.timer) return;
84
- const tick = () => timePostBindPhase("lifecycle.tick", () => this.tick());
88
+ const tick = framed("timer lifecycle", () => timePostBindPhase("lifecycle.tick", () => this.tick()));
85
89
  void fireAndForget("[lifecycle] tick", tick);
86
90
  this.timer = guardedInterval("[lifecycle] tick", this.tickMs, tick);
87
91
  }
@@ -101,13 +105,13 @@ export class LifecycleManager {
101
105
  // #2171 — validation instructions must come from the policy's launch host. The tick primes
102
106
  // remote land-gate files once per host so synchronous spawn composition reads current cache.
103
107
  await primeLandGatesForPolicies(policies);
104
- const contextHandled = this.reconcileContextPressure(policies);
108
+ const contextHandled = (await this.reconcileContextPressure(policies));
105
109
  for (const policy of policies) {
106
110
  await this.reconcilePolicy(policy, contextHandled);
107
111
  }
108
112
  }
109
113
 
110
- onMessageForPolicy(policyName: string): PolicySpawnOutcome | Promise<PolicySpawnOutcome> {
114
+ async onMessageForPolicy(policyName: string): Promise<PolicySpawnOutcome> {
111
115
  const policy = this.loadPolicies().find((item) => item.name === policyName);
112
116
  if (!policy) return { woke: false, reason: `no spawn policy '${policyName}'` };
113
117
  if (policy.mode !== "on-demand") return { woke: false, reason: `spawn policy '${policyName}' is not on-demand` };
@@ -138,8 +142,7 @@ export class LifecycleManager {
138
142
  // FAILURE, not a success. Propagate it so callers don't stamp a false hand-off.
139
143
  // Explicit wake (watchdog / auto-merge / cooldown re-wake): exempt from the respawn-rate backstop
140
144
  // — its own STEWARD_HANDOFF_REWAKE_MAX + wake cooldown already bound it (#1745).
141
- const command = this.spawnAgent(policy, "message-trigger", { enforceStewardRate: false });
142
- if (command instanceof Promise) return this.policyWakeOutcome(policyName, command, state);
145
+ const command = (await this.spawnAgent(policy, "message-trigger", { enforceStewardRate: false }));
143
146
  if (!command) return { woke: false, reason: `steward spawn failed for '${policyName}' (${this.policyWakeFailureReason(policyName, state)})` };
144
147
  return { woke: true, via: "spawned", command };
145
148
  }
@@ -185,13 +188,13 @@ export class LifecycleManager {
185
188
  // drifted registration copies (epic #342). Only the orchestrator-report projection
186
189
  // below still enters managed-running from the lifecycle manager.
187
190
 
188
- onOrchestratorManagedAgentsReported(orchestratorId: string, agents: ManagedAgent[], exitedAgents: ManagedSessionExitDiagnostics[] = []): void {
191
+ async onOrchestratorManagedAgentsReported(orchestratorId: string, agents: ManagedAgent[], exitedAgents: ManagedSessionExitDiagnostics[] = []): Promise<void> {
189
192
  for (const agent of agents) {
190
193
  if (!agent.policyName || !agent.spawnRequestId) continue;
191
194
  const state = getManagedAgentState(agent.policyName);
192
195
  if (!state || state.spawnRequestId !== agent.spawnRequestId) continue;
193
196
  // Same came-up-running core the registration transports use — one home, no drift.
194
- markManagedAgentRunning(
197
+ (await markManagedAgentRunning(
195
198
  {
196
199
  policyName: agent.policyName,
197
200
  spawnRequestId: agent.spawnRequestId,
@@ -201,7 +204,7 @@ export class LifecycleManager {
201
204
  },
202
205
  authContextFromSystem(),
203
206
  { now: this.now },
204
- );
207
+ ));
205
208
 
206
209
  // Liveness reconciliation: the orchestrator just reported this process as
207
210
  // running. If the relay record says offline, the two truths disagree
@@ -210,12 +213,12 @@ export class LifecycleManager {
210
213
  if (reportedAgentId) {
211
214
  const relayAgent = getAgent(reportedAgentId);
212
215
  if (relayAgent && relayAgent.status === "offline") {
213
- this.emitLivenessMismatch(
216
+ (await this.emitLivenessMismatch(
214
217
  reportedAgentId,
215
218
  agent.policyName,
216
219
  agent.spawnRequestId,
217
220
  "orchestrator reports the process running but relay marked it offline",
218
- );
221
+ ));
219
222
  }
220
223
  }
221
224
  }
@@ -237,23 +240,23 @@ export class LifecycleManager {
237
240
  (state.tmuxSession && agent.tmuxSession === state.tmuxSession) ||
238
241
  (agent.policyName === policy.name && (!state.spawnRequestId || agent.spawnRequestId === state.spawnRequestId))
239
242
  ));
240
- this.markPolicyFailure(policy, state, exited?.lastError ?? "orchestrator session disappeared", { exited });
243
+ (await this.markPolicyFailure(policy, state, exited?.lastError ?? "orchestrator session disappeared", { exited }));
241
244
  } else if (state.status === "stopping" && !reported) {
242
- const next = updateManagedAgentState(policy.name, {
245
+ const next = (await updateManagedAgentStateAsync(policy.name, {
243
246
  status: "stopped",
244
247
  agentId: undefined,
245
248
  tmuxSession: undefined,
246
249
  lastStopAt: this.now(),
247
- });
248
- if (next) this.emitState(next);
250
+ }));
251
+ if (next) (await this.emitState(next));
249
252
  }
250
253
  }
251
254
  }
252
255
 
253
- onAgentDisappeared(agentId: string): void {
256
+ async onAgentDisappeared(agentId: string): Promise<void> {
254
257
  // Reconcile the agent's worktrees before policy handling — this runs for
255
258
  // every agent (managed or not), so it must not depend on a policy match.
256
- this.reconcileWorkspacesForAgent(agentId);
259
+ (await this.reconcileWorkspacesForAgent(agentId));
257
260
  const policy = this.loadPolicies().find((item) => getManagedAgentState(item.name)?.agentId === agentId);
258
261
  if (!policy) {
259
262
  const agent = getAgent(agentId);
@@ -263,23 +266,23 @@ export class LifecycleManager {
263
266
  const state = getManagedAgentState(policy.name);
264
267
  if (!state) return;
265
268
  if (state.status === "stopping") {
266
- const next = updateManagedAgentState(policy.name, {
269
+ const next = (await updateManagedAgentStateAsync(policy.name, {
267
270
  status: "stopped",
268
271
  agentId: undefined,
269
272
  tmuxSession: undefined,
270
273
  lastStopAt: this.now(),
271
- });
272
- if (next) this.emitState(next);
274
+ }));
275
+ if (next) (await this.emitState(next));
273
276
  return;
274
277
  }
275
- this.markPolicyFailure(policy, state, "agent disappeared");
278
+ (await this.markPolicyFailure(policy, state, "agent disappeared"));
276
279
  if (isStewardPolicy(policy)) void retryStewardLandsAfterSlotFreed().catch(error => console.warn(`[steward] slot recovery failed: ${errMessage(error)}`));
277
280
  }
278
281
 
279
- onConfigChanged(namespace: string, key: string): void {
282
+ async onConfigChanged(namespace: string, key: string): Promise<void> {
280
283
  if (namespace !== "spawn-policy") return;
281
284
  const policy = this.loadPolicies().find((item) => item.name === key);
282
- if (policy) void fireAndForget(`[lifecycle] reconcile ${policy.name}`, () => this.reconcilePolicy(policy, this.reconcileContextPressure([policy])));
285
+ if (policy) await fireAndForget(`[lifecycle] reconcile ${policy.name}`, async () => (await this.reconcilePolicy(policy, (await this.reconcileContextPressure([policy])))));
283
286
  }
284
287
 
285
288
  onRelayUpdated(_newVersion: string): void {
@@ -288,9 +291,16 @@ export class LifecycleManager {
288
291
  }
289
292
  }
290
293
 
291
- spawnAgent(policy: SpawnPolicy, reason = "reconcile", opts: { enforceStewardRate?: boolean } = {}): Command | null | Promise<Command | null> {
294
+ spawnAgent(policy: SpawnPolicy, reason = "reconcile", opts: { enforceStewardRate?: boolean } = {}): Promise<Command | null> {
292
295
  const pending = this.pendingSpawnPreparations.get(policy.name);
293
296
  if (pending) return pending;
297
+ const preparation = this.prepareSpawn(policy, reason, opts);
298
+ this.pendingSpawnPreparations.set(policy.name, preparation);
299
+ void preparation.finally(() => { if (this.pendingSpawnPreparations.get(policy.name) === preparation) this.pendingSpawnPreparations.delete(policy.name); }).catch(() => {});
300
+ return preparation;
301
+ }
302
+
303
+ private async prepareSpawn(policy: SpawnPolicy, reason: string, opts: { enforceStewardRate?: boolean }): Promise<Command | null> {
294
304
  // #1745 — universal steward chokepoint: every spawn path (message-trigger, reconcile respawn,
295
305
  // backoff-expired, always-on) funnels through here, so the kill-switch + per-repo cap gate lives
296
306
  // here as the last line of defence. A denied steward spawn returns null WITHOUT churning managed
@@ -309,7 +319,7 @@ export class LifecycleManager {
309
319
  }
310
320
  }
311
321
  // #2656 — a disabled provider parks the policy (visible reason, no backoff); a later tick resumes it.
312
- const providerOff = managedPolicyProviderDisabledMessage(policy); if (providerOff) { const parked = parkManagedPolicyForDisabledProvider(policy, providerOff); if (parked) this.emitState(parked, `spawn skipped: ${providerOff}`); return null; }
322
+ const providerOff = managedPolicyProviderDisabledMessage(policy); if (providerOff) { const parked = (await parkManagedPolicyForDisabledProvider(policy, providerOff)); if (parked) (await this.emitState(parked, `spawn skipped: ${providerOff}`)); return null; }
313
323
  const orch = getOrchestrator(policy.orchestratorId);
314
324
  if (!orch || orch.status !== "online") {
315
325
  const state = getManagedAgentState(policy.name) ?? {
@@ -321,45 +331,42 @@ export class LifecycleManager {
321
331
  consecutiveFailures: 0,
322
332
  updatedAt: this.now(),
323
333
  };
324
- this.markBackoff(policy, state, "orchestrator offline");
334
+ (await this.markBackoff(policy, state, "orchestrator offline"));
325
335
  const next = getManagedAgentState(policy.name);
326
- if (next) escalateOfflineOrchestrator(policy, next, orch);
336
+ if (next) void fireAndForget(`[lifecycle] escalate ${policy.name}`, () => escalateOfflineOrchestrator(policy, next, orch));
327
337
  return null;
328
338
  }
329
339
  if (hostSpawnsDrained(orch.agentId)) return null;
330
340
  const spawnRequestId = generateSpawnRequestId(); const policySnapshot = JSON.stringify(policy);
331
341
  // Reserve `starting` before an async parameter build. A second queued wake can then observe
332
342
  // the reservation instead of minting a second request id while provisioning resolves.
333
- const priorState = getManagedAgentState(policy.name); const reserved = upsertManagedAgentState({ policyName: policy.name, status: "starting", orchestratorId: policy.orchestratorId, provider: policy.provider, spawnRequestId, lastSpawnAt: this.now(), restartCount: priorState?.restartCount ?? 0, consecutiveFailures: priorState?.consecutiveFailures ?? 0 });
334
- this.emitState(reserved, `spawn: ${reason}`);
335
- const releaseReservation = (error: unknown): void => { const current = getManagedAgentState(policy.name); if (current?.spawnRequestId === spawnRequestId) { if (current.status === "starting") this.markPolicyFailure(policy, current, errMessage(error)); } };
343
+ const priorState = getManagedAgentState(policy.name); const reserved = (await upsertManagedAgentStateAsync({ policyName: policy.name, status: "starting", orchestratorId: policy.orchestratorId, provider: policy.provider, spawnRequestId, lastSpawnAt: this.now(), restartCount: priorState?.restartCount ?? 0, consecutiveFailures: priorState?.consecutiveFailures ?? 0 }));
344
+ (await this.emitState(reserved, `spawn: ${reason}`));
345
+ const releaseReservation = async (error: unknown): Promise<void> => { const current = getManagedAgentState(policy.name); if (current?.spawnRequestId === spawnRequestId) { if (current.status === "starting") (await this.markPolicyFailure(policy, current, errMessage(error))); } };
336
346
  let params: Record<string, unknown> | Promise<Record<string, unknown>>;
337
347
  try { params = this.buildManagedSpawnParams(policy, spawnRequestId, { createdBy: "lifecycle-manager", authority: SYSTEM_LAUNCH, requestedAt: this.now() }); }
338
- catch (error) { releaseReservation(error); return null; }
348
+ catch (error) { (await releaseReservation(error)); return null; }
339
349
  const finish = async (spawnParams: Record<string, unknown>): Promise<Command | null> => {
340
350
  const prepared = await prepareCommandWriteAsync({ type: "agent.spawn", source: "system", target: orch.agentId,
341
351
  correlationId: spawnRequestId, params: { ...spawnParams, reason } }, { hostCap: { exempt: "managed-policy" } });
342
352
  // Re-check after all async launch preparation, including vault reads (#3574).
343
353
  if (!managedSpawnReservationCurrent(policy, policySnapshot, spawnRequestId)) return null;
344
- if (hostSpawnsDrained(orch.agentId)) { restoreDrainedSpawnReservation(policy, spawnRequestId, priorState); return null; }
345
- const command = createCommand(prepared.input, prepared.options, prepared.id);
354
+ if (hostSpawnsDrained(orch.agentId)) { (await restoreDrainedSpawnReservation(policy, spawnRequestId, priorState)); return null; }
355
+ const command = (await submitPreparedCommandAsync(prepared));
346
356
  emitCommandEvent(command, "command.requested");
347
357
  // #1745 — record the actual spawn so the respawn-rate backstop can bound a repeatedly-dying
348
358
  // steward (registers, then exits on quota — never a spawn failure, so backoff never engages).
349
359
  if (isStewardPolicy(policy)) noteStewardSpawn(policy.name, this.now());
350
360
  return command;
351
361
  };
352
- const preparation = Promise.resolve(params).then(finish).catch((error) => { releaseReservation(error); return null; });
353
- this.pendingSpawnPreparations.set(policy.name, preparation);
354
- void preparation.finally(() => { if (this.pendingSpawnPreparations.get(policy.name) === preparation) this.pendingSpawnPreparations.delete(policy.name); }).catch(() => { /* preparation never rejects: it catches above */ });
355
- return preparation;
362
+ return Promise.resolve(params).then(finish).catch(async (error) => { await releaseReservation(error); return null; });
356
363
  }
357
364
 
358
- stopAgent(policy: SpawnPolicy, graceful = true, reason = "reconcile-stop"): Command | null {
365
+ async stopAgent(policy: SpawnPolicy, graceful = true, reason = "reconcile-stop"): Promise<Command | null> {
359
366
  const orch = getOrchestrator(policy.orchestratorId);
360
367
  if (!orch) return null;
361
368
  const state = getManagedAgentState(policy.name);
362
- const next = upsertManagedAgentState({
369
+ const next = (await upsertManagedAgentStateAsync({
363
370
  policyName: policy.name,
364
371
  status: "stopping",
365
372
  agentId: state?.agentId,
@@ -371,9 +378,9 @@ export class LifecycleManager {
371
378
  lastStopAt: this.now(),
372
379
  restartCount: state?.restartCount ?? 0,
373
380
  consecutiveFailures: state?.consecutiveFailures ?? 0,
374
- });
375
- this.emitState(next, `stop: ${reason}`);
376
- const command = createCommand({
381
+ }));
382
+ (await this.emitState(next, `stop: ${reason}`));
383
+ const command = (await createCommandAsync({
377
384
  type: "agent.shutdown",
378
385
  source: "system",
379
386
  target: orch.agentId,
@@ -391,7 +398,7 @@ export class LifecycleManager {
391
398
  requestedBy: "lifecycle-manager",
392
399
  requestedAt: this.now(),
393
400
  },
394
- });
401
+ }));
395
402
  emitCommandEvent(command, "command.requested");
396
403
  return command;
397
404
  }
@@ -403,7 +410,7 @@ export class LifecycleManager {
403
410
  const restartRequestId = generateSpawnRequestId();
404
411
  const restartSpawn = buildManagedSpawnParamsAsync(policy, restartRequestId, { createdBy: "lifecycle-manager", authority: SYSTEM_LAUNCH, requestedAt: this.now(), ...(state?.agentId ? { identityAgentId: state.agentId } : {}) }); const finish = async (spawnParams: Record<string, unknown>): Promise<Command | null> => {
405
412
  if (hostSpawnsDrained(orch.agentId)) return null;
406
- const restarted = upsertManagedAgentState({
413
+ const restarted = (await upsertManagedAgentStateAsync({
407
414
  policyName: policy.name,
408
415
  status: "stopping",
409
416
  agentId: state?.agentId,
@@ -415,8 +422,8 @@ export class LifecycleManager {
415
422
  lastStopAt: this.now(),
416
423
  restartCount: (state?.restartCount ?? 0) + 1,
417
424
  consecutiveFailures: state?.consecutiveFailures ?? 0,
418
- });
419
- this.emitState(restarted, `restart: ${reason}`);
425
+ }));
426
+ (await this.emitState(restarted, `restart: ${reason}`));
420
427
  const command = await createCommandAsync({ type: "agent.restart",
421
428
  source: "system",
422
429
  target: orch.agentId,
@@ -450,7 +457,7 @@ export class LifecycleManager {
450
457
  if (!state) {
451
458
  if (enabled && policy.mode === "always-on") await this.spawnAgent(policy, "always-on");
452
459
  else if (enabled && hasQueuedPolicyWork(policy.name)) await this.spawnAgent(policy, "message-trigger");
453
- else this.ensureStoppedState(policy);
460
+ else (await this.ensureStoppedState(policy));
454
461
  return;
455
462
  }
456
463
 
@@ -459,7 +466,7 @@ export class LifecycleManager {
459
466
  // #1021 A3 — a never-registered spawn has no exit diagnostics, so isFastFailStorm
460
467
  // can never trip and it would back off/retry forever in silence. Flag it so the
461
468
  // escalation fires once it has failed repeatedly.
462
- this.markPolicyFailure(policy, state, "spawn timed out before registration", { registerTimeout: true });
469
+ (await this.markPolicyFailure(policy, state, "spawn timed out before registration", { registerTimeout: true }));
463
470
  }
464
471
  return;
465
472
  }
@@ -480,13 +487,13 @@ export class LifecycleManager {
480
487
  const unconfirmedDead = agent?.meta?.lifecycleAction === "kill-failed" || managedRunningAgentAlive(agent);
481
488
  if (!unconfirmedDead) {
482
489
  this.stopRetries.delete(policy.name);
483
- const next = updateManagedAgentState(policy.name, {
490
+ const next = (await updateManagedAgentStateAsync(policy.name, {
484
491
  status: "stopped",
485
492
  agentId: undefined,
486
493
  tmuxSession: undefined,
487
494
  lastStopAt: this.now(),
488
- });
489
- if (next) this.emitState(next);
495
+ }));
496
+ if (next) (await this.emitState(next));
490
497
  } else if (isStewardPolicy(policy) && agent && (agent.status === "busy" || pendingOwnRelayRunIds(agent, this.now()).length > 0 || this.holdsActiveWorkspaceClaim(agent.id))) {
491
498
  // #1761 — DEFER the forceful escalation while the steward is genuinely WORKING. Within the
492
499
  // STOP_TIMEOUT window a `stopping` policy still reads managedProcessActive, so
@@ -510,7 +517,7 @@ export class LifecycleManager {
510
517
  const retries = (this.stopRetries.get(policy.name) ?? 0) + 1;
511
518
  if (retries <= MAX_STEWARD_STOP_RETRIES) {
512
519
  this.stopRetries.set(policy.name, retries);
513
- this.stopAgent(policy, false, `stop-retry-${retries} (unconfirmed dead after ${Math.round(STOP_TIMEOUT_MS / 1000)}s)`);
520
+ (await this.stopAgent(policy, false, `stop-retry-${retries} (unconfirmed dead after ${Math.round(STOP_TIMEOUT_MS / 1000)}s)`));
514
521
  } else {
515
522
  // Budget exhausted — release the policy from `stopping` to `stopped` and let go of the
516
523
  // handle. This is now SAFE (unlike pre-#1745, when clearing the handle let a duplicate
@@ -520,13 +527,13 @@ export class LifecycleManager {
520
527
  // deliberately no-ops on `stopping`, so transition directly here.
521
528
  console.warn(`[lifecycle] steward '${policy.name}' stop did not confirm dead after ${MAX_STEWARD_STOP_RETRIES} forceful attempts; releasing the handle (agent cap + orphan reaper now own the zombie)`);
522
529
  this.stopRetries.delete(policy.name);
523
- const next = updateManagedAgentState(policy.name, {
530
+ const next = (await updateManagedAgentStateAsync(policy.name, {
524
531
  status: "stopped",
525
532
  agentId: undefined,
526
533
  tmuxSession: undefined,
527
534
  lastStopAt: this.now(),
528
- });
529
- if (next) this.emitState(next, "stop-retry exhausted: releasing handle");
535
+ }));
536
+ if (next) (await this.emitState(next, "stop-retry exhausted: releasing handle"));
530
537
  }
531
538
  }
532
539
  }
@@ -539,28 +546,28 @@ export class LifecycleManager {
539
546
  // stopping wedge (if any) gets its full MAX_STEWARD_STOP_RETRIES (#1761).
540
547
  this.stopRetries.delete(policy.name);
541
548
  if (!enabled) {
542
- this.stopAgent(policy, true, "policy-disabled");
549
+ (await this.stopAgent(policy, true, "policy-disabled"));
543
550
  return;
544
551
  }
545
552
  if (!managedRunningAgentAlive(agent)) {
546
- this.markPolicyFailure(policy, state, agentTerminalFailureMessage(agent) ?? "agent offline");
553
+ (await this.markPolicyFailure(policy, state, agentTerminalFailureMessage(agent) ?? "agent offline"));
547
554
  return;
548
555
  }
549
- this.resetBackoffAfterHealthyRun(policy, state);
556
+ (await this.resetBackoffAfterHealthyRun(policy, state));
550
557
  if (policy.mode === "on-demand" && this.isIdle(policy, state)) {
551
- this.stopAgent(policy, true, "idle-timeout");
558
+ (await this.stopAgent(policy, true, "idle-timeout"));
552
559
  return;
553
560
  }
554
561
  if (contextHandled.has(agent.id)) return;
555
562
  if (this.shouldCompact(agent)) {
556
- requestAgentCompact({
563
+ (await requestAgentCompact({
557
564
  agent,
558
565
  reason: "context-threshold",
559
566
  policyName: policy.name,
560
567
  alwaysReload: alwaysReloadTags(agent.tags),
561
568
  now: this.now,
562
569
  hasActiveCommand: (target, type) => this.hasActiveCommand(target, type),
563
- });
570
+ }));
564
571
  return;
565
572
  }
566
573
  if (policy.scheduledDailyRestart && this.dailyRestartDue(policy, state) && this.isIdle(policy, state, 3600)) {
@@ -588,60 +595,60 @@ export class LifecycleManager {
588
595
  }
589
596
  }
590
597
 
591
- private reconcileContextPressure(policies: SpawnPolicy[]): Set<string> {
592
- return reconcileLifecycleContextPressure({
598
+ private async reconcileContextPressure(policies: SpawnPolicy[]): Promise<Set<string>> {
599
+ return (await reconcileLifecycleContextPressure({
593
600
  policies,
594
601
  now: this.now,
595
602
  hasActiveCommand: (target, type) => this.hasActiveCommand(target, type),
596
- });
603
+ }));
597
604
  }
598
605
 
599
- private ensureStoppedState(policy: SpawnPolicy): void {
600
- const state = upsertManagedAgentState({
606
+ private async ensureStoppedState(policy: SpawnPolicy): Promise<void> {
607
+ const state = (await upsertManagedAgentStateAsync({
601
608
  policyName: policy.name,
602
609
  status: "stopped",
603
610
  orchestratorId: policy.orchestratorId,
604
611
  provider: policy.provider,
605
- });
606
- this.emitState(state);
612
+ }));
613
+ (await this.emitState(state));
607
614
  }
608
615
 
609
- private markPolicyFailure(
616
+ private async markPolicyFailure(
610
617
  policy: SpawnPolicy,
611
618
  state: ManagedAgentState,
612
619
  error: string,
613
620
  opts: { exited?: ManagedSessionExitDiagnostics; registerTimeout?: boolean } = {},
614
- ): void {
621
+ ): Promise<void> {
615
622
  if (state.status === "stopping") return;
616
623
  // Read the terminal reason from the adapter-surfaced typed provider state rather
617
624
  // than re-parsing raw provider log text (#745 / #725 §4.4 leak #13).
618
625
  const agentId = state.agentId || opts.exited?.agentId;
619
626
  const modelUnavailable = agentId ? agentTerminalFailureMessage(getAgent(agentId)) : null;
620
627
  if (modelUnavailable) {
621
- this.markFailed(policy, state, modelUnavailable);
628
+ (await this.markFailed(policy, state, modelUnavailable));
622
629
  return;
623
630
  }
624
631
  const failures = state.consecutiveFailures + 1;
625
632
  if (isFastFailStorm(failures, opts.exited)) {
626
- this.markFailed(policy, state, error);
633
+ (await this.markFailed(policy, state, error));
627
634
  return;
628
635
  }
629
- this.markBackoff(policy, state, error, failures);
636
+ (await this.markBackoff(policy, state, error, failures));
630
637
  // #1021 A3 — a register-never spawn never reaches markFailed (no exit diagnostics), so
631
638
  // without this its escalation would never fire. Escalate once it has failed repeatedly.
632
639
  if (isStewardPolicy(policy) && failures === MAX_FAST_FAILURES) {
633
640
  const next = getManagedAgentState(policy.name);
634
- if (next) escalateManagedSpawnFailure(policy, next, { phase: "spawn-backoff", error });
641
+ if (next) void fireAndForget(`[lifecycle] escalate ${policy.name}`, () => escalateManagedSpawnFailure(policy, next, { phase: "spawn-backoff", error }));
635
642
  } else if (!isStewardPolicy(policy) && opts.registerTimeout && failures >= MAX_FAST_FAILURES) {
636
643
  const next = getManagedAgentState(policy.name);
637
- if (next) escalateManagedSpawnFailure(policy, next, { phase: "register-timeout", error });
644
+ if (next) void fireAndForget(`[lifecycle] escalate ${policy.name}`, () => escalateManagedSpawnFailure(policy, next, { phase: "register-timeout", error }));
638
645
  }
639
646
  }
640
647
 
641
- private markBackoff(policy: SpawnPolicy, state: ManagedAgentState, error: string, failures = state.consecutiveFailures + 1): void {
648
+ private async markBackoff(policy: SpawnPolicy, state: ManagedAgentState, error: string, failures = state.consecutiveFailures + 1): Promise<void> {
642
649
  if (state.status === "stopping") return;
643
650
  const delay = this.backoffDelay(policy, state);
644
- const next = upsertManagedAgentState({
651
+ const next = (await upsertManagedAgentStateAsync({
645
652
  policyName: policy.name,
646
653
  status: "backoff",
647
654
  agentId: undefined,
@@ -654,13 +661,13 @@ export class LifecycleManager {
654
661
  consecutiveFailures: failures,
655
662
  backoffUntil: this.now() + delay * 1000,
656
663
  lastError: error,
657
- });
658
- this.emitState(next);
664
+ }));
665
+ (await this.emitState(next));
659
666
  }
660
667
 
661
- private markFailed(policy: SpawnPolicy, state: ManagedAgentState, error: string): void {
668
+ private async markFailed(policy: SpawnPolicy, state: ManagedAgentState, error: string): Promise<void> {
662
669
  const failures = state.consecutiveFailures + 1;
663
- const next = upsertManagedAgentState({
670
+ const next = (await upsertManagedAgentStateAsync({
664
671
  policyName: policy.name,
665
672
  status: "failed",
666
673
  agentId: undefined,
@@ -673,10 +680,10 @@ export class LifecycleManager {
673
680
  consecutiveFailures: failures,
674
681
  backoffUntil: isStewardPolicy(policy) ? this.now() + this.backoffDelay(policy, state) * 1000 : undefined,
675
682
  lastError: error,
676
- });
677
- this.emitState(next);
683
+ }));
684
+ (await this.emitState(next));
678
685
  // #1021 A3 — failed policies require an explicit wake/operator action. Surface the failure.
679
- escalateManagedSpawnFailure(policy, next, { phase: "failed", error });
686
+ void fireAndForget(`[lifecycle] escalate ${policy.name}`, () => escalateManagedSpawnFailure(policy, next, { phase: "failed", error }));
680
687
  }
681
688
 
682
689
  private backoffDelay(policy: SpawnPolicy, state: ManagedAgentState | null): number {
@@ -686,16 +693,16 @@ export class LifecycleManager {
686
693
  return schedule[index]!;
687
694
  }
688
695
 
689
- private resetBackoffAfterHealthyRun(policy: SpawnPolicy, state: ManagedAgentState): void {
696
+ private async resetBackoffAfterHealthyRun(policy: SpawnPolicy, state: ManagedAgentState): Promise<void> {
690
697
  if (state.consecutiveFailures === 0) return;
691
698
  const healthySince = state.healthySince ?? state.lastSpawnAt;
692
699
  if (!healthySince || this.now() - healthySince < policy.backoff.resetAfterSeconds * 1000) return;
693
- const next = updateManagedAgentState(policy.name, {
700
+ const next = (await updateManagedAgentStateAsync(policy.name, {
694
701
  consecutiveFailures: 0,
695
702
  backoffUntil: undefined,
696
703
  lastError: undefined,
697
- });
698
- if (next) this.emitState(next);
704
+ }));
705
+ if (next) (await this.emitState(next));
699
706
  }
700
707
 
701
708
  private dailyRestartDue(_policy: SpawnPolicy, state: ManagedAgentState): boolean {
@@ -759,10 +766,10 @@ export class LifecycleManager {
759
766
  // emitManagedState (src/services/managed-running.ts) so the registration service
760
767
  // and this lifecycle reconciler emit identically (epic #342). We track the prior
761
768
  // status per policy here only to compute the from→to for the transition row.
762
- private emitState(state: ManagedAgentState, reason?: string): void {
769
+ private async emitState(state: ManagedAgentState, reason?: string): Promise<void> {
763
770
  const previous = this.lastStatusByPolicy.get(state.policyName);
764
771
  this.lastStatusByPolicy.set(state.policyName, state.status);
765
- emitManagedState(state, previous, reason, this.now);
772
+ (await emitManagedState(state, previous, reason, this.now));
766
773
  if (state.status === "stopped" && state.lastStopAt && this.loadPolicies().some(policy => policy.name === state.policyName && isStewardPolicy(policy))) {
767
774
  void retryStewardLandsAfterSlotFreed().catch(error => console.warn(`[steward] slot recovery failed: ${errMessage(error)}`));
768
775
  }
@@ -773,7 +780,7 @@ export class LifecycleManager {
773
780
  // event (banner) and a persisted activity event (timeline). Observability only —
774
781
  // it does not mutate agent status, since a live process may still have a dead
775
782
  // relay connection.
776
- private emitLivenessMismatch(agentId: string, policyName: string | undefined, spawnRequestId: string | undefined, detail: string): void {
783
+ private async emitLivenessMismatch(agentId: string, policyName: string | undefined, spawnRequestId: string | undefined, detail: string): Promise<void> {
777
784
  emitRelayEvent({
778
785
  type: "liveness.mismatch",
779
786
  source: "lifecycle-manager",
@@ -782,7 +789,7 @@ export class LifecycleManager {
782
789
  });
783
790
  // #1912 §4 retained: orchestrator-report reconciliation is a synchronous projection loop;
784
791
  // changing only its audit to a detached promise would make dashboard event order ambiguous.
785
- createActivityEvent({
792
+ (await createActivityEventAsync({
786
793
  clientId: `liveness-mismatch-${agentId}-${this.now()}-${++this.transitionSeq}`,
787
794
  kind: "state",
788
795
  title: `Liveness mismatch: ${agentId}`,
@@ -791,11 +798,11 @@ export class LifecycleManager {
791
798
  view: "managed-agents",
792
799
  agentId,
793
800
  metadata: { source: "lifecycle-manager", policyName, spawnRequestId, mismatch: true, detail },
794
- });
801
+ }));
795
802
  }
796
803
 
797
- private reconcileWorkspacesForAgent(agentId: string): void {
798
- requestAgentExitCleanup(agentId);
804
+ private async reconcileWorkspacesForAgent(agentId: string): Promise<void> {
805
+ (await requestAgentExitCleanup(agentId));
799
806
  }
800
807
 
801
808
  }