@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,28 +1,16 @@
1
+ import { updateContinuationObjectiveAsync, markSelfResumeContinuationIngestedAsync, ensureContinuationEnvelopeAsync } from "./db/runtime-tail-async";
2
+ import { sendMessageAsync } from "./db/message-send";
3
+ import { createCommandAsync } from "./commands-write";
1
4
  import { renderSelfCareState } from "./services/self-care-state";
2
5
  import { agentPrincipalSink } from "./db/agent-ownership";
3
6
  import { isRecord } from "@humwick/sdk";
4
- import { createCommand, listCommands, listInjectionAttempts, listPendingInjectionAttemptIds } from "./commands-db";
7
+ import { listCommands, listInjectionAttempts, listPendingInjectionAttemptIds } from "./commands-db";
5
8
  import type { InjectionAttempt } from "./db/injection-attempts";
6
9
  import { emitCommandEvent } from "./command-events";
7
10
  import { INJECTION_SWEEP_BACKLOG_INTERVAL_MS, pacedInjectionSweep } from "./injection-sweep-pacing";
8
11
  import { MAX_BODY_BYTES, REAP_INTERVAL_MS } from "./config";
9
12
  import { getSelfResumeConfig } from "./config-store";
10
- import {
11
- archiveAndAdvanceContinuationAsync,
12
- archiveContinuationSegmentAsync,
13
- ensureContinuationEnvelope,
14
- findMessageByIdempotencyKey,
15
- getAgent,
16
- getContinuationEnvelope,
17
- getMessage,
18
- listUncommandedContextResets,
19
- markSelfResumeContinuationIngested,
20
- selfResumeContinuationIngested,
21
- sendMessage,
22
- updateContinuationAfterCompact,
23
- updateContinuationObjective,
24
- ValidationError,
25
- } from "./db";
13
+ import { archiveAndAdvanceContinuationAsync, archiveContinuationSegmentAsync, findMessageByIdempotencyKey, getAgent, getContinuationEnvelope, getMessage, listUncommandedContextResets, selfResumeContinuationIngested, updateContinuationAfterCompact, ValidationError } from "./db";
26
14
  import { emitRelayEvent } from "./events";
27
15
  import { emitMessageDeliveryUpdated } from "./sse";
28
16
  import { boundaryCaptureClause } from "./memory-boundary-capture";
@@ -73,13 +61,13 @@ export async function compactAndResume(input: CompactAndResumeInput): Promise<Co
73
61
  else assertResumeSupported(agent, mode);
74
62
 
75
63
  const now = Date.now();
76
- let envelope = ensureContinuationEnvelope({
64
+ let envelope = (await ensureContinuationEnvelopeAsync({
77
65
  agentId: agent.id,
78
66
  objective: input.objective,
79
67
  now,
80
- });
68
+ }));
81
69
  if (input.objective !== undefined && envelope.objective !== input.objective) {
82
- envelope = updateContinuationObjective({ agentId: agent.id, objective: input.objective, now });
70
+ envelope = (await updateContinuationObjectiveAsync({ agentId: agent.id, objective: input.objective, now }));
83
71
  }
84
72
 
85
73
  const workingState = input.workingState.trim();
@@ -101,19 +89,19 @@ export async function compactAndResume(input: CompactAndResumeInput): Promise<Co
101
89
  // half is elsewhere on purpose (src/context-advisory.ts) — it has to reach the agent while the
102
90
  // generation it asks about still exists, and no line written at this point can do that.
103
91
  const fullContinuation = renderContinuation(updated.envelope, {
104
- memoryCapture: boundaryCaptureClause({ seam: "post", agentId: agent.id, now }),
92
+ memoryCapture: (await boundaryCaptureClause({ seam: "post", agentId: agent.id, now })),
105
93
  liveRuns: renderSelfCareState(agent.id),
106
94
  });
107
95
  // #2836: no core copy here — the startup-context seam re-injects it beside this.
108
- const continuationMessage = createContinuationRecoveryMessage(agent.id, generation, fullContinuation, now);
96
+ const continuationMessage = (await createContinuationRecoveryMessage(agent.id, generation, fullContinuation, now));
109
97
  const continuation = insertRecoveryPointerAfterIntro(fullContinuation, continuationMessage.id);
110
- openContextRecovery(agent.id, generation, now);
98
+ (await openContextRecovery(agent.id, generation, now));
111
99
  const command = input.restart
112
100
  ? await createSelfRestartCommandAsync(agent, generation, continuation, continuationMessage.id, input.reason ?? "manual", now)
113
101
  : mode === "native"
114
- ? createNativeCompact(agent.id, generation, continuation, continuationMessage.id)
115
- : createClearThenInject(agent.id, generation, continuation, continuationMessage.id);
116
- attachContextRecoveryCommand(agent.id, generation, command.id);
102
+ ? (await createNativeCompact(agent.id, generation, continuation, continuationMessage.id))
103
+ : (await createClearThenInject(agent.id, generation, continuation, continuationMessage.id));
104
+ (await attachContextRecoveryCommand(agent.id, generation, command.id));
117
105
  emitCommandEvent(command, "command.requested");
118
106
  return {
119
107
  ok: true,
@@ -169,7 +157,7 @@ export interface ForcedResumePlan {
169
157
  // shapes, so the reactive/sweep reinjection (#1023) plus the #1998 objective-epoch render guarantees
170
158
  // apply unchanged. Returns null (→ caller falls back to a bare compact) when the provider has no
171
159
  // resume route / no re-injection channel OR the agent has no stored envelope yet.
172
- export function buildForcedResumePlan(agentId: string, now = Date.now()): ForcedResumePlan | null {
160
+ export async function buildForcedResumePlan(agentId: string, now = Date.now()): Promise<ForcedResumePlan | null> {
173
161
  const agent = getAgent(agentId);
174
162
  if (!agent) return null;
175
163
  const context = agent.providerCapabilities?.context;
@@ -192,10 +180,10 @@ export function buildForcedResumePlan(agentId: string, now = Date.now()): Forced
192
180
  if (!envelope) return null;
193
181
  const generation = envelope.generation;
194
182
  const fullContinuation = renderContinuation(envelope, {
195
- memoryCapture: boundaryCaptureClause({ seam: "post", agentId, now }),
183
+ memoryCapture: (await boundaryCaptureClause({ seam: "post", agentId, now })),
196
184
  liveRuns: renderSelfCareState(agentId),
197
185
  });
198
- const continuationMessage = createContinuationRecoveryMessage(agentId, generation, fullContinuation, now);
186
+ const continuationMessage = (await createContinuationRecoveryMessage(agentId, generation, fullContinuation, now));
199
187
  const continuation = insertRecoveryPointerAfterIntro(fullContinuation, continuationMessage.id);
200
188
  if (useNativeCompact) {
201
189
  // Preserve the provider's in-place summary; re-inject the (possibly stale) envelope AFTER.
@@ -235,11 +223,11 @@ function insertRecoveryPointerAfterIntro(continuation: string, messageId: number
235
223
  return `${continuation.slice(0, firstNewline).trimEnd()}\n${pointer}${continuation.slice(firstNewline)}`;
236
224
  }
237
225
 
238
- function createContinuationRecoveryMessage(agentId: string, generation: number, continuation: string, now: number) {
226
+ async function createContinuationRecoveryMessage(agentId: string, generation: number, continuation: string, now: number) {
239
227
  const idempotencyKey = `self-resume-continuation:${agentId}:${generation}`;
240
228
  const existing = findMessageByIdempotencyKey("system", idempotencyKey);
241
229
  if (existing) return existing;
242
- return sendMessage({
230
+ return (await sendMessageAsync({
243
231
  from: "system",
244
232
  to: agentId,
245
233
  kind: "system",
@@ -258,7 +246,7 @@ function createContinuationRecoveryMessage(agentId: string, generation: number,
258
246
  // provider session accepted it. The runner promotes this only after turn/start acceptance.
259
247
  delivery: { state: "stored" },
260
248
  },
261
- });
249
+ }));
262
250
  }
263
251
 
264
252
  // #1023 — the ruledOut ledger bound (see updateContinuationAfterCompact) drops the
@@ -325,7 +313,7 @@ function continuationDeliveredInline(command: Command): boolean {
325
313
 
326
314
  /** Promote the persisted recovery artifact only from delivery evidence emitted by the runner.
327
315
  * A successful clear command or a stored chat row alone is never enough. */
328
- export function settleSelfResumeContinuationIngestion(command: Command): void {
316
+ export async function settleSelfResumeContinuationIngestion(command: Command): Promise<void> {
329
317
  const result = isRecord(command.result) ? command.result : undefined;
330
318
  const provider = result && isRecord(result.providerResult) ? result.providerResult : undefined;
331
319
  let fullContextMessageId: number | undefined;
@@ -337,18 +325,18 @@ export function settleSelfResumeContinuationIngestion(command: Command): void {
337
325
  fullContextMessageId = typeof resume?.fullContextMessageId === "number" ? resume.fullContextMessageId : undefined;
338
326
  }
339
327
  if (fullContextMessageId === undefined) return;
340
- const message = markSelfResumeContinuationIngested(fullContextMessageId);
328
+ const message = (await markSelfResumeContinuationIngestedAsync(fullContextMessageId));
341
329
  if (message) emitMessageDeliveryUpdated(message);
342
330
  }
343
331
 
344
332
  /** #2619 — a runner parks a continuation the provider refused under a usage/overload hold as a
345
333
  * message to itself (payload.selfResumeFullContextMessageId). Its delivered report is the same
346
334
  * delivery evidence an ingested injectContext result is: promote the recovery artifact. */
347
- export function settleParkedSelfResumeContinuation(message: Message): void {
335
+ export async function settleParkedSelfResumeContinuation(message: Message): Promise<void> {
348
336
  const fullContextMessageId = message.payload?.selfResumeFullContextMessageId;
349
337
  if (typeof fullContextMessageId !== "number" || message.from !== message.to) return;
350
338
  if (getMessage(fullContextMessageId)?.to !== message.to) return;
351
- const promoted = markSelfResumeContinuationIngested(fullContextMessageId);
339
+ const promoted = (await markSelfResumeContinuationIngestedAsync(fullContextMessageId));
352
340
  if (promoted) emitMessageDeliveryUpdated(promoted);
353
341
  }
354
342
 
@@ -402,38 +390,38 @@ export function isFailedClearInjectSelfResume(command: Command): boolean {
402
390
  }
403
391
 
404
392
  /** #3662 — an older generation's boundary is retired (its queued injects canceled), never delivered. */
405
- function retireIfSuperseded(command: Command): boolean {
393
+ async function retireIfSuperseded(command: Command): Promise<boolean> {
406
394
  const current = supersedingGeneration(command);
407
395
  if (current === null) return false;
408
- cancelSupersededInjects(listPendingInjectionAttemptIds(command.id, CONTINUATION_INJECTION_REASON), current);
396
+ (await cancelSupersededInjects(listPendingInjectionAttemptIds(command.id, CONTINUATION_INJECTION_REASON), current));
409
397
  return true;
410
398
  }
411
399
 
412
- export function enqueueContinuationInjectionAfterSelfResume(command: Command): Command | null {
400
+ export async function enqueueContinuationInjectionAfterSelfResume(command: Command): Promise<Command | null> {
413
401
  if (command.status !== "succeeded" && !isFailedClearInjectSelfResume(command)) return null;
414
402
  const injection = extractPendingInjection(command);
415
- if (!injection || retireIfSuperseded(command)) return null;
403
+ if (!injection || (await retireIfSuperseded(command))) return null;
416
404
  if (continuationDeliveredInline(command)) return null;
417
405
  if (injectionAttemptsFor(command, CONTINUATION_INJECTION_REASON).length) return null;
418
- const inject = createCommand({
406
+ const inject = (await createCommandAsync({
419
407
  type: "agent.injectContext",
420
408
  source: "system",
421
409
  target: command.target,
422
410
  correlationId: command.id,
423
411
  params: buildInjectionParams(command, injection, undefined, registrationReplayEpoch(command.target)),
424
- });
412
+ }));
425
413
  emitCommandEvent(inject, "command.requested");
426
414
  return inject;
427
415
  }
428
416
 
429
- export function enqueueLifecycleIdentityInjectionAfterContextCommand(command: Command): Command | null {
417
+ export async function enqueueLifecycleIdentityInjectionAfterContextCommand(command: Command): Promise<Command | null> {
430
418
  if (command.status !== "succeeded") return null;
431
419
  if (command.type !== "agent.clearContext" && command.type !== "agent.compact") return null;
432
420
  if (extractPendingInjection(command)) return null;
433
421
  const content = identityContentForLifecycleCommand(command);
434
422
  if (!content) return null;
435
423
  if (injectionAttemptsFor(command, IDENTITY_INJECTION_REASON).length) return null;
436
- const inject = createCommand({
424
+ const inject = (await createCommandAsync({
437
425
  type: "agent.injectContext",
438
426
  source: "system",
439
427
  target: command.target,
@@ -446,13 +434,13 @@ export function enqueueLifecycleIdentityInjectionAfterContextCommand(command: Co
446
434
  ...(command.type === "agent.compact" ? { afterCompactCommandId: command.id } : {}),
447
435
  },
448
436
  },
449
- });
437
+ }));
450
438
  emitCommandEvent(inject, "command.requested");
451
439
  return inject;
452
440
  }
453
441
 
454
- export function enqueueContinuationInjectionAfterClear(command: Command): Command | null {
455
- return enqueueContinuationInjectionAfterSelfResume(command);
442
+ export async function enqueueContinuationInjectionAfterClear(command: Command): Promise<Command | null> {
443
+ return (await enqueueContinuationInjectionAfterSelfResume(command));
456
444
  }
457
445
 
458
446
  const CLEAR_OR_COMPACT_TYPES = ["agent.clearContext", "agent.compact"] as const;
@@ -613,7 +601,7 @@ function continuationInjectionAttemptDecision(command: Command, replayEpoch?: st
613
601
  // lost, and a redundant-but-harmless re-injection is preferable to a permanent
614
602
  // silent mind-wipe. The sweep creates only a missing initial attempt; it never retries a failed
615
603
  // attempt by itself, so an unavailable-but-still-registered provider cannot grow commands forever.
616
- export function sweepMissedContinuationInjections(now: number = Date.now(), signal?: AbortSignal, targetAgentId?: string, replayEpoch?: string): { enqueuedCommandIds: string[]; aborted?: true } {
604
+ export async function sweepMissedContinuationInjections(now: number = Date.now(), signal?: AbortSignal, targetAgentId?: string, replayEpoch?: string): Promise<{ enqueuedCommandIds: string[]; aborted?: true }> {
617
605
  const enqueuedCommandIds: string[] = [];
618
606
  // #1726 — shared across every candidate this tick: the identity rebuild only depends on the
619
607
  // target agent, and every target must already exist in the (bounded) agent roster, so this
@@ -628,27 +616,27 @@ export function sweepMissedContinuationInjections(now: number = Date.now(), sign
628
616
  // between candidates simply leaves the rest for the next tick. SYNCHRONOUS job — inert on one
629
617
  // thread until this grows an await.
630
618
  for (const command of sweepableBoundaryCommands(now, signal, targetAgentId)) {
631
- sweepContinuationBoundary(command, identityCache, enqueuedCommandIds, replayEpoch);
619
+ (await sweepContinuationBoundary(command, identityCache, enqueuedCommandIds, replayEpoch));
632
620
  }
633
621
  return { enqueuedCommandIds, ...(signal?.aborted ? { aborted: true as const } : {}) };
634
622
  }
635
623
 
636
- function sweepContinuationBoundary(command: Command, identityCache: WhoamiIdentityCache, enqueuedCommandIds: string[], replayEpoch?: string): void {
624
+ async function sweepContinuationBoundary(command: Command, identityCache: WhoamiIdentityCache, enqueuedCommandIds: string[], replayEpoch?: string): Promise<void> {
637
625
  const injection = extractPendingInjection(command);
638
- if (!injection || retireIfSuperseded(command)) return;
626
+ if (!injection || (await retireIfSuperseded(command))) return;
639
627
  if (continuationDeliveredInline(command)) return;
640
628
  const agent = getAgent(command.target);
641
629
  if (!agent || agent.status === "offline") return;
642
630
  const attemptEpoch = replayEpoch ?? registrationReplayEpoch(command.target);
643
631
  const { decision } = continuationInjectionAttemptDecision(command, attemptEpoch);
644
632
  if (decision !== "enqueue") return;
645
- const inject = createCommand({
633
+ const inject = (await createCommandAsync({
646
634
  type: "agent.injectContext",
647
635
  source: "system",
648
636
  target: command.target,
649
637
  correlationId: command.id,
650
638
  params: buildInjectionParams(command, injection, identityCache, attemptEpoch),
651
- });
639
+ }));
652
640
  emitCommandEvent(inject, "command.requested");
653
641
  enqueuedCommandIds.push(inject.id);
654
642
  }
@@ -658,14 +646,14 @@ function sweepContinuationBoundary(command: Command, identityCache: WhoamiIdenti
658
646
  async function sweepMissedContinuationInjectionsPaced(now: number, signal?: AbortSignal): Promise<{ enqueuedCommandIds: string[]; aborted?: true; moreWork?: true }> {
659
647
  const enqueuedCommandIds: string[] = [];
660
648
  const identityCache: WhoamiIdentityCache = new Map();
661
- const { moreWork } = await pacedInjectionSweep(() => sweepableBoundaryCommands(now, signal), (command) => sweepContinuationBoundary(command, identityCache, enqueuedCommandIds), signal);
649
+ const { moreWork } = await pacedInjectionSweep(() => sweepableBoundaryCommands(now, signal), async (command) => (await sweepContinuationBoundary(command, identityCache, enqueuedCommandIds)), signal);
662
650
  return { enqueuedCommandIds, ...(signal?.aborted ? { aborted: true as const } : {}), ...(moreWork ? { moreWork: true as const } : {}) };
663
651
  }
664
652
 
665
653
  /** Replay one parked continuation attempt for a new ready/idle or registration epoch. The epoch is
666
654
  * persisted on the inject command, making repeated observations of the same lifecycle edge inert. */
667
- export function replayParkedContinuationInjections(agentId: string, lifecycleEpoch: string, now = Date.now()): { enqueuedCommandIds: string[] } {
668
- return sweepMissedContinuationInjections(now, undefined, agentId, lifecycleEpoch);
655
+ export async function replayParkedContinuationInjections(agentId: string, lifecycleEpoch: string, now = Date.now()): Promise<{ enqueuedCommandIds: string[] }> {
656
+ return (await sweepMissedContinuationInjections(now, undefined, agentId, lifecycleEpoch));
669
657
  }
670
658
 
671
659
  export const SELF_RESUME_INJECTION_SWEEP_JOB = {
@@ -681,14 +669,14 @@ export const SELF_RESUME_INJECTION_SWEEP_JOB = {
681
669
  },
682
670
  };
683
671
 
684
- function notifyContinuationInjectionExhausted(command: Command, attempts: number): void {
672
+ async function notifyContinuationInjectionExhausted(command: Command, attempts: number): Promise<void> {
685
673
  const idempotencyKey = `self-resume-injection-exhausted:${command.target}:${command.id}`;
686
674
  if (findMessageByIdempotencyKey(command.target, idempotencyKey)) return;
687
675
  const agent = getAgent(command.target);
688
676
  const payload = { kind: "agent.resume_injection_failed", agentId: command.target, commandId: command.id, attempts };
689
677
  emitRelayEvent({ type: "agent.resume_injection_failed", source: "server", subject: command.target, data: payload });
690
678
  const recipient = agent?.spawnedBy ?? agentPrincipalSink(command.target);
691
- routeNotification({
679
+ await routeNotification({
692
680
  type: "agent.resume_injection_failed",
693
681
  scope: { agentId: command.target, parent: agent?.spawnedBy },
694
682
  recipients: [recipient],
@@ -708,7 +696,7 @@ function notifyContinuationInjectionExhausted(command: Command, attempts: number
708
696
  // silent no-op that let the #2043 runaway climb to ~750K tokens undetected. Surface it to the spawn
709
697
  // parent (and as a durable relay event) instead of swallowing it. Idempotent per command. This is
710
698
  // the ALARM; the continuation re-injection backstop (F2) is the separate recovery path.
711
- export function notifySelfResumeNoOp(command: Command): void {
699
+ export async function notifySelfResumeNoOp(command: Command): Promise<void> {
712
700
  if (command.status !== "failed" && command.status !== "timed_out") return;
713
701
  if (command.type !== "agent.clearContext" && command.type !== "agent.compact") return;
714
702
  const injection = extractPendingInjection(command);
@@ -731,7 +719,7 @@ export function notifySelfResumeNoOp(command: Command): void {
731
719
  const recovery = command.type === "agent.clearContext" || command.status === "timed_out"
732
720
  ? "The relay re-injects the continuation as a backstop, but check the agent and consider a manual relay_compact_and_resume or restart."
733
721
  : "The continuation remains persisted; check the agent and retry relay_compact_and_resume once it is responsive.";
734
- routeNotification({
722
+ await routeNotification({
735
723
  type: "agent.self_resume_noop",
736
724
  scope: { agentId: command.target, parent: agent?.spawnedBy },
737
725
  recipients: [recipient],
@@ -827,8 +815,8 @@ function assertResumeSupported(agent: AgentCard, mode: SelfResumeMode): void {
827
815
  }
828
816
  }
829
817
 
830
- function createNativeCompact(agentId: string, generation: number, continuation: string, fullContextMessageId: number): Command {
831
- return createCommand({
818
+ async function createNativeCompact(agentId: string, generation: number, continuation: string, fullContextMessageId: number): Promise<Command> {
819
+ return (await createCommandAsync({
832
820
  type: "agent.compact",
833
821
  source: "system",
834
822
  target: agentId,
@@ -837,16 +825,16 @@ function createNativeCompact(agentId: string, generation: number, continuation:
837
825
  instructions: continuation,
838
826
  selfResume: { generation, mode: "native", continuation, fullContextMessageId },
839
827
  },
840
- });
828
+ }));
841
829
  }
842
830
 
843
- function createClearThenInject(agentId: string, generation: number, continuation: string, fullContextMessageId: number): Command {
831
+ async function createClearThenInject(agentId: string, generation: number, continuation: string, fullContextMessageId: number): Promise<Command> {
844
832
  // #1588 — store the fully-built (identity-augmented) continuation in the clear command's params so
845
833
  // the runner can deliver it inline as a coupled unit, race-free, while preserving the #1206 identity
846
834
  // re-injection that the separate reactive inject used to add via buildInjectionParams. The backstop
847
835
  // path re-augments idempotently, so embedding it here causes no drift.
848
836
  const coupledContinuation = augmentContinuationWithIdentity(agentId, continuation);
849
- return createCommand({
837
+ return (await createCommandAsync({
850
838
  type: "agent.clearContext",
851
839
  source: "system",
852
840
  target: agentId,
@@ -854,7 +842,7 @@ function createClearThenInject(agentId: string, generation: number, continuation
854
842
  reason: "self-resume",
855
843
  selfResume: { generation, mode: "clear-inject", continuation: coupledContinuation, fullContextMessageId },
856
844
  },
857
- });
845
+ }));
858
846
  }
859
847
 
860
848
  function parseRuledOut(value: unknown, generation: number, now: number): ContinuationLedgerEntry[] {
@@ -9,7 +9,7 @@ import { notifyCdDeployLive } from "./cd-deploy-notify";
9
9
  import { isEphemeralMode } from "./execution-mode";
10
10
  import { startClaudeAppOAuth } from "./claude-app/oauth-http";
11
11
 
12
- export function startServerBackgroundJobs(): void {
12
+ export async function startServerBackgroundJobs(): Promise<void> {
13
13
  startPostBindJobs([
14
14
  { name: "claude-app-oauth", start: startClaudeAppOAuth },
15
15
  { name: "user-awaiting-reply", start: () => { startUserAwaitingReply(); } },
@@ -19,6 +19,6 @@ export function startServerBackgroundJobs(): void {
19
19
  { name: "connectors", start: startConnectorStatusPoller },
20
20
  { name: "maintenance", start: startMaintenanceScheduler },
21
21
  { name: "steward-rekey-notices", start: async () => (await import("./workspace-rekey")).drainStewardRekeyNotices() },
22
- { name: "deploy-notice", start: () => { if (!isEphemeralMode()) notifyCdDeployLive(); } },
22
+ { name: "deploy-notice", start: async () => { if (!isEphemeralMode()) await notifyCdDeployLive(); } },
23
23
  ]);
24
24
  }
package/src/server.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { framed } from "./hub-metrics";
2
+ import { setConfigAsync } from "./config-store-write";
1
3
  import { drainWriterOnShutdown } from "./db/writer-gateway";
2
4
  import { relayHeaderConflict, errMessage, reapEphemeralSelf, startArtifactCheckoutLease, startEphemeralWatchdogFromEnv } from "@humwick/sdk";
3
5
  import { authorityDenied } from "./authority-audit";
@@ -7,10 +9,12 @@ import { inviteLinkRedirect } from "./invite-link";
7
9
  import { claudeAppBoundary, CLAUDE_APP_PATH, isClaudeAppPath } from "./claude-app-auth";
8
10
  import { handleClaudeApp } from "./claude-app-gateway";
9
11
  import { handleClaudeAppOAuth } from "./claude-app/oauth-http";
12
+ import { installTimerIngressSchema } from "./db/timer-ingress";
13
+ import { beginMainWriteBootPhase, endMainWriteBootPhase } from "./db/main-connection-writes";
10
14
  import { markServerBound, timePostBindPhase } from "./post-bind-startup";
11
15
  import type { ServerWebSocket } from "bun";
12
16
  import { beginStartupPhase, enableStartupTiming, timeStartupPhase } from "./startup-timing";
13
- import { initDb, getOrchestrator, startPresenceFlushLoop, primeHostAliasMemoFromDb } from "./db";
17
+ import { initDb, getOrchestrator, startPresenceFlushLoop, primeHostAliasMemoFromDb, onWorkspaceCreate } from "./db";
14
18
  import { initGateway, shutdownGatewayReader } from "./db/gateway";
15
19
  import { flushRelayEvents } from "./relay-event-drain";
16
20
  import { startWalCheckpointer } from "./db/wal-checkpointer";
@@ -23,8 +27,7 @@ import { emitRelayEvent } from "./events";
23
27
  import { reconcileAutomationRuns, runDueAutomationsAsync, type AutomationDispatchResult, type AutomationReconcileResult } from "./automations";
24
28
  import { getLifecycleManager } from "./lifecycle-manager";
25
29
  import { reconcileStewardPolicyModels } from "./steward-policy-model-reconcile";
26
- import { getConfig, setConfig } from "./config-store";
27
- import { reconcileProviderModelSeed } from "./provider-model-seed";
30
+ import { getConfig } from "./config-store";
28
31
  export { reconcileProviderModelSeed } from "./provider-model-seed";
29
32
  import { ensureEscalationChannelRegistered } from "./connectors";
30
33
  import { installNotificationSubscriptionRule } from "./notification-subscription-rules";
@@ -32,7 +35,6 @@ import { startPlanLiveBindings } from "./services/plan-live-bindings";
32
35
  import { startEventLoopLagSampler } from "./event-loop-lag";
33
36
  import { installLoopBlockRegressionAlarm } from "./loop-block-regression-alarm";
34
37
  import { recordWorkspaceIssueActivity } from "./services/spawn-issue-activity";
35
- import { onWorkspaceCreate } from "./db";
36
38
  import { warnIfNoHumanReachableEscalationTarget } from "./workspace-human-escalation";
37
39
  import { isTerminalSessionRequestAuthorized } from "./terminal-authz";
38
40
  import { resolveBrowserStream } from "./routes/browser";
@@ -83,16 +85,16 @@ import type { Command } from "./types";
83
85
  //
84
86
  // `relay-version` is still tracked for observability/telemetry, but it no longer
85
87
  // triggers restarts.
86
- export function reconcileRelayVersion(): void {
88
+ export async function reconcileRelayVersion(): Promise<void> {
87
89
  const storedVersion = getConfig<string>("system", "relay-version")?.value;
88
- if (storedVersion !== VERSION) setConfig("system", "relay-version", VERSION, "server-startup");
90
+ if (storedVersion !== VERSION) (await setConfigAsync("system", "relay-version", VERSION, "server-startup"));
89
91
 
90
92
  const storedProtocol = getConfig<string>("system", "runner-protocol-version")?.value;
91
93
  const currentProtocol = String(CONTRACT_VERSIONS.runnerProtocol);
92
94
  if (storedProtocol === currentProtocol) return;
93
95
  // Skip the very first run (no stored protocol yet) — that's initial bootstrap, not an upgrade.
94
96
  if (storedProtocol) getLifecycleManager().onRelayUpdated(VERSION);
95
- setConfig("system", "runner-protocol-version", currentProtocol, "server-startup");
97
+ (await setConfigAsync("system", "runner-protocol-version", currentProtocol, "server-startup"));
96
98
  }
97
99
 
98
100
  export function runServerStartupRecoveries(): ReturnType<typeof sweepDeferredLineageReportsOnStartup> {
@@ -111,12 +113,11 @@ export async function startServer(): Promise<void> {
111
113
  startArtifactCheckoutLease();
112
114
 
113
115
  assertSafeNetworkConfig(HOST);
116
+ beginMainWriteBootPhase();
114
117
  timeStartupPhase("server.database", () => initDb(DB_PATH));
115
118
  // #1960 T2 — stand the gateway up EXPLICITLY here rather than leaving it to the lazy self-init
116
119
  // (`getGateway()` on first call, gateway.ts), which would race the rest of this boot sequence.
117
- // Reader backend is env-gated (AGENT_RELAY_GATEWAY_READER_BACKEND, default "in-process" — Phase R,
118
- // ADR 0001 §7 Phase 1); the writer is deliberately left at its in-process default — Phase W (a
119
- // worker writer surrendering the sole RW connection) remains the #1870 migration.
120
+ // File-backed reads and writes default off-loop; memory fixtures retain local connections (#3339).
120
121
  timeStartupPhase("server.gateway", () => initGateway({ readerBackend: gatewayReaderBackendFromEnv() }));
121
122
  onShutdown("gateway-reader", shutdownGatewayReader);
122
123
  onShutdown("gateway-writer", drainWriterOnShutdown, "drain");
@@ -135,12 +136,11 @@ export async function startServer(): Promise<void> {
135
136
  const finishServices = beginStartupPhase("server.services");
136
137
  installNotificationSubscriptionRule();
137
138
  startPlanLiveBindings();
138
- reconcileRelayVersion();
139
- if (!isEphemeralMode()) reconcileProviderModelSeed();
139
+ (await reconcileRelayVersion());
140
140
  // Register the ntfy escalation channel row from persisted connector config BEFORE the
141
141
  // warning check, so a correctly-configured relay doesn't spuriously warn while the async
142
142
  // channels-host connect is still in flight (#1510).
143
- ensureEscalationChannelRegistered();
143
+ (await ensureEscalationChannelRegistered());
144
144
  warnIfNoHumanReachableEscalationTarget();
145
145
  startEventLoopLagSampler();
146
146
  // #1882 (S5, ADR 0001 §5) — per-callsite on-loop-block attribution + the >50ms regression alarm.
@@ -166,15 +166,17 @@ export async function startServer(): Promise<void> {
166
166
  },
167
167
  });
168
168
  } else {
169
- setInterval(() => {
169
+ setInterval(framed("timer automations", () => {
170
170
  void timePostBindPhase("automations.reconcile", reconcileAutomationRuns)
171
171
  .then(emitAutomationReconciliations)
172
172
  .catch((e) => console.error(`[automations] reconcile failed: ${errMessage(e)}`));
173
173
  void timePostBindPhase("automations.dispatch", runDueAutomationsAsync).then(emitAutomationDispatches).catch((e) => console.error(`[automations] dispatch failed: ${errMessage(e)}`));
174
- }, AUTOMATION_INTERVAL_MS);
174
+ }), AUTOMATION_INTERVAL_MS);
175
175
  }
176
176
 
177
+ installTimerIngressSchema();
177
178
  finishServices();
179
+ endMainWriteBootPhase();
178
180
  timeStartupPhase("server.bind", () => Bun.serve<RelaySocketData>({
179
181
  port: PORT,
180
182
  hostname: HOST,
@@ -183,7 +185,7 @@ export async function startServer(): Promise<void> {
183
185
  websocket: createWebSocketHandlers(),
184
186
  }));
185
187
  markServerBound();
186
- startServerBackgroundJobs();
188
+ await startServerBackgroundJobs();
187
189
  finishStartup();
188
190
  console.log(`humwick ${VERSION} running on http://${HOST}:${PORT}`);
189
191
 
@@ -277,12 +279,12 @@ export function createFetchHandler(
277
279
  const terminalStreamMatch = url.pathname.match(/^\/api\/orchestrators\/([^/]+)\/terminal\/([^/]+)\/stream$/);
278
280
  if (req.method === "GET" && terminalStreamMatch) {
279
281
  if (!server) return new Response("WebSocket upgrade unavailable", { status: 400 });
280
- if (!isOriginAllowed(req)) return authorityDenied(req, "origin not allowed", 403);
281
- if (!isAuthorized(req)) return applyCors(req, authorityDenied(req, "unauthorized", 401));
282
+ if (!isOriginAllowed(req)) return (await authorityDenied(req, "origin not allowed", 403));
283
+ if (!isAuthorized(req)) return applyCors(req, (await authorityDenied(req, "unauthorized", 401)));
282
284
  const orchestratorId = decodeURIComponent(terminalStreamMatch[1]!);
283
285
  const session = decodeURIComponent(terminalStreamMatch[2]!);
284
286
  if (!isTerminalSessionRequestAuthorized(req, orchestratorId, session, "read")) {
285
- return applyCors(req, authorityDenied(req, "forbidden"));
287
+ return applyCors(req, (await authorityDenied(req, "forbidden")));
286
288
  }
287
289
  const writeAuthorized = isTerminalSessionRequestAuthorized(req, orchestratorId, session, "write");
288
290
  const orch = getOrchestrator(orchestratorId);
@@ -309,7 +311,7 @@ export function createFetchHandler(
309
311
  }
310
312
  const matched = matchRoute(req.method, url.pathname);
311
313
  if (!isOriginAllowed(req) && !(req.headers.get("origin") === "null" && matched?.handler === postSecretUpload)) {
312
- return authorityDenied(req, "origin not allowed", 403);
314
+ return (await authorityDenied(req, "origin not allowed", 403));
313
315
  }
314
316
 
315
317
  // KAPI-1 §4.2 — the live `/api/kernel` control mount. Handled as a dedicated subtree (not through
@@ -319,7 +321,7 @@ export function createFetchHandler(
319
321
  // default-denies. A request that fails the coarse gate 403s here (matching the resolver's own 403 for
320
322
  // a missing/invalid/non-component credential), including `GET /api/kernel/openapi.json`.
321
323
  if (isKernelControlPath(url.pathname)) {
322
- if (!isKernelControlRequestAuthorized(req)) return applyCors(req, authorityDenied(req, "forbidden"));
324
+ if (!isKernelControlRequestAuthorized(req)) return applyCors(req, (await authorityDenied(req, "forbidden")));
323
325
  const response = await handleKernelControlRequest(req);
324
326
  applyCors(req, response);
325
327
  if (logRequests) console.log(`${req.method} ${url.pathname} → ${response.status}`);
@@ -364,11 +366,11 @@ export function createFetchHandler(
364
366
  // full server scope), so it stays the authoritative reject for a revoked/
365
367
  // invalid session token — it just answers in the caller's protocol.
366
368
  if (url.pathname === "/api/mcp") return unauthorizedMcp(req);
367
- return applyCors(req, authorityDenied(req, "unauthorized", 401));
369
+ return applyCors(req, (await authorityDenied(req, "unauthorized", 401)));
368
370
  }
369
- if (!handlerOwnsScopedAuth && !isScopedRequestAuthorized(req)) return applyCors(req, authorityDenied(req, "forbidden"));
371
+ if (!handlerOwnsScopedAuth && !isScopedRequestAuthorized(req)) return applyCors(req, (await authorityDenied(req, "forbidden")));
370
372
  }
371
- if (componentAuth && !handlerOwnsScopedAuth && !isScopedRequestAuthorized(req)) return applyCors(req, authorityDenied(req, "forbidden"));
373
+ if (componentAuth && !handlerOwnsScopedAuth && !isScopedRequestAuthorized(req)) return applyCors(req, (await authorityDenied(req, "forbidden")));
372
374
  }
373
375
  const response = await runMatchedRoute(matched, req, (body) => maybeCompressApiResponse(req, url, body));
374
376
  applyCors(req, response);
@@ -1,9 +1,11 @@
1
+ import { getGateway } from "../db/gateway";
2
+ import type { admitAgentActionBody } from "../db/agent-action-write";
1
3
  import { isHumanAgentId } from "@humwick/sdk";
2
4
  import { randomUUID } from "node:crypto";
3
- import { createCommandInternal, getCommand } from "../commands-db";
4
- import { admitDesiredEffortInternal, getAgentEffortState } from "../db/agent-effort-state";
5
+ import { getCommand } from "../commands-db";
6
+ import { getAgentEffortState } from "../db/agent-effort-state";
5
7
  import { emitEffortState } from "./agent-effort";
6
- import { ValidationError, createActivityEventAsync, getAgent, sendMessage, writeTransaction } from "../db";
8
+ import { ValidationError, createActivityEventAsync, getAgent } from "../db";
7
9
  import { emitCommandEvent } from "../command-events";
8
10
  import { emitActivityEvent, emitNewMessage } from "../sse";
9
11
  import { effectiveProviderCatalogList } from "../provider-catalog-store";
@@ -112,15 +114,6 @@ function catalogEffort(agent: AgentCard, effort: string | undefined): { level: s
112
114
  return { level, efforts: known?.efforts };
113
115
  }
114
116
 
115
- function sessionMessageForInject(agentId: string, ctx: AuthContext, body: string) {
116
- const from = ctx.callerAgentId && getAgent(ctx.callerAgentId) ? ctx.callerAgentId : "system";
117
- return sendMessage({
118
- from,
119
- to: agentId,
120
- kind: "session",
121
- body,
122
- });
123
- }
124
117
 
125
118
  export function revalidateAgentInstance(snapshot: AgentCard): AgentCard {
126
119
  const current = getAgent(snapshot.id);
@@ -136,7 +129,7 @@ export async function dispatchAgentAction(input: AgentActionInput, ctx: AuthCont
136
129
 
137
130
  // #2950 — an agent may change its own effort (only that), gated by its spawn's selfEffort ceiling below.
138
131
  const self = input.action === "effort" && Boolean(ctx.callerAgentId) && ctx.callerAgentId === agent.id;
139
- if (!self) authorizeShutdown(ctx, { agentId: input.agentId, requestedVia: input.requestedVia }, input.action);
132
+ if (!self) (await authorizeShutdown(ctx, { agentId: input.agentId, requestedVia: input.requestedVia }, input.action));
140
133
  const requestId = input.action === "effort" ? input.requestId?.trim() || undefined : undefined;
141
134
  if (requestId && !REQUEST_ID.test(requestId)) throw new ValidationError("requestId must be a UUID");
142
135
  const retried = admittedEffortRequest(agent.id, requestId);
@@ -210,24 +203,12 @@ export async function dispatchAgentAction(input: AgentActionInput, ctx: AuthCont
210
203
  // a stale command built from the predecessor's capabilities/session data.
211
204
  const event = await createActivityEventAsync(activityInput);
212
205
  const current = revalidateAgentInstance(agent);
213
- const sessionMessage = body ? sessionMessageForInject(current.id, ctx, body) : undefined;
214
- // #2664 — the runner keeps the original sender on a prompt it has to park.
215
- if (sessionMessage) Object.assign(commandInput.params, { messageId: sessionMessage.id, from: sessionMessage.from });
216
- let admitted: ReturnType<typeof admitDesiredEffortInternal> | undefined;
217
- let raced: AgentActionResult | undefined;
218
- const command = writeTransaction(() => {
219
- // A concurrent retry of the same request committed first.
220
- if ((raced = admittedEffortRequest(current.id, requestId))) return raced.command;
221
- // #2966 — a revoke committed during the audit await wins: recheck where the command is inserted.
222
- if (selfPolicy) assertSelfEffortAllowed(current, requested!.level, requested!.efforts);
223
- if (effort) {
224
- // #2984 — the desired version is the change; the command is its audit row, never executed.
225
- admitted = admitDesiredEffortInternal({ agentId: current.id, effort, role: requestedByRole, commandId, now: Date.now() });
226
- commandInput.params.effortVersion = admitted.state.desiredVersion;
227
- }
228
- return createCommandInternal({ input: commandInput, id: commandId });
229
- });
230
- if (raced) return raced;
206
+ const from = ctx.callerAgentId && getAgent(ctx.callerAgentId) ? ctx.callerAgentId : "system";
207
+ const result = await getGateway().write("agents.admitAction", { agent: current, commandId, commandInput, requestId, effort, role: requestedByRole,
208
+ ...(selfPolicy ? { selfEffort: requested } : {}), ...(body ? { message: { from, to: current.id, kind: "session", body } } : {}) }, { idempotencyKey: commandId }) as unknown as ReturnType<typeof admitAgentActionBody>;
209
+ const { command } = result;
210
+ if (result.raced) return { action: input.action, command, effortState: result.effortState };
211
+ const { admitted, sessionMessage } = result;
231
212
  if (sessionMessage) emitNewMessage(sessionMessage);
232
213
  for (const id of admitted?.superseded ?? []) { const canceled = getCommand(id); if (canceled) emitCommandEvent(canceled, "command.canceled"); }
233
214
  // No `command.requested` for effort: nothing executes the audit row. `command.pending` only tells the target runner to reconcile.