@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,9 +1,10 @@
1
+ import { createAuthIdentityAsync } from "../db/runtime-tail-async";
1
2
  // Password authentication provider (#389). The only built-in provider in Phase 1. Secrets are
2
3
  // hashed with scrypt (node:crypto — no dependency) and compared with `timingSafeEqual`, the same
3
4
  // constant-time primitive the token layer uses. The hash is stored in `auth_identities.secret_hash`
4
5
  // keyed by (provider="password", provider_subject=<username>).
5
6
  import { randomBytes, scrypt, timingSafeEqual } from "node:crypto";
6
- import { createAuthIdentity, getAuthIdentity, type AuthIdentity } from "../db/auth-identities.ts";
7
+ import { getAuthIdentity, type AuthIdentity } from "../db/auth-identities.ts";
7
8
  import { isRecord } from "@humwick/sdk";
8
9
  import type { AuthProvider, AuthVerifyResult } from "./provider.ts";
9
10
 
@@ -98,13 +99,13 @@ export async function createPasswordIdentity(input: {
98
99
  password: string;
99
100
  metadata?: Record<string, unknown>;
100
101
  }): Promise<AuthIdentity> {
101
- return createAuthIdentity({
102
+ return (await createAuthIdentityAsync({
102
103
  userId: input.userId,
103
104
  provider: PASSWORD_PROVIDER_ID,
104
105
  providerSubject: input.username,
105
106
  secretHash: await hashPassword(input.password),
106
107
  metadata: input.metadata,
107
- });
108
+ }));
108
109
  }
109
110
 
110
111
  /** Parse `{ username, password }` from a login request body. */
@@ -31,7 +31,7 @@ export async function refreshUserSession(refreshToken: string, nowMs = Date.now(
31
31
  expiresAt: Math.min(nowMs + REFRESH_GRACE_MS, (resolved.payload.exp ?? Infinity) * 1000),
32
32
  result: (async () => {
33
33
  if (!(await revokeTokenAsync(jti, "rotation"))) return null;
34
- const session = mintUserSession(resolved.user, resolved.payload.constraints?.sessionId);
34
+ const session = (await mintUserSession(resolved.user, resolved.payload.constraints?.sessionId));
35
35
  return { accessJti: session.accessJti, refreshJti: session.refreshJti };
36
36
  })(),
37
37
  };
@@ -4,7 +4,7 @@ import { mintUserSession } from "./session.ts";
4
4
 
5
5
  /** An `authorization` header carrying a fresh access token for `userId`. An unknown id models a
6
6
  * session whose user no longer exists (it carries operator scopes). */
7
- export function sessionAuthHeader(userId: string): Record<string, string> {
7
+ export async function sessionAuthHeader(userId: string): Promise<Record<string, string>> {
8
8
  const user = getUser(userId) ?? { id: userId, handle: userId, displayName: userId, role: "operator" as const, status: "active" as const, tenantId: "default", avatarArtifactId: null, avatarUrl: null, createdAt: 0, updatedAt: 0 };
9
- return { authorization: `Bearer ${mintUserSession(user).accessToken}` };
9
+ return { authorization: `Bearer ${(await mintUserSession(user)).accessToken}` };
10
10
  }
@@ -5,8 +5,8 @@
5
5
  // `role` ("user"), so no machine-token path branches on it.
6
6
  import { userSinkId, userIdFromAddress, isHumanAgentId, type User, type UserRole } from "@humwick/sdk";
7
7
  import { randomUUID } from "node:crypto";
8
- import { revokeTokenAsync } from "../token-db-write.ts";
9
- import { createToken, liveTokenJtisForSession } from "../token-db.ts";
8
+ import { createTokenAsync, revokeTokenAsync } from "../token-db-write.ts";
9
+ import { liveTokenJtisForSession } from "../token-db.ts";
10
10
  import { verifyComponentToken } from "../security.ts";
11
11
  import { getUser } from "../db/users.ts";
12
12
  import { scopesForRole } from "./role-scopes";
@@ -50,25 +50,25 @@ export interface MintedSession {
50
50
  * SaaS seam (identity-only — enforces nothing). Both tokens share the `user:<id>` sub so a single
51
51
  * "sign out everywhere" revoke (by sub) kills the whole session family.
52
52
  */
53
- export function mintUserSession(user: User, sessionId: string = randomUUID()): MintedSession {
53
+ export async function mintUserSession(user: User, sessionId: string = randomUUID()): Promise<MintedSession> {
54
54
  const sub = userSinkId(user.id);
55
55
  const constraints = { sessionId, ...(user.tenantId ? { tenantId: user.tenantId } : {}) };
56
- const access = createToken({
56
+ const access = (await createTokenAsync({
57
57
  sub,
58
58
  role: USER_TOKEN_ROLE,
59
59
  scope: scopesForUserRole(user.role),
60
60
  constraints,
61
61
  ttlSeconds: ACCESS_TTL_SECONDS,
62
62
  createdBy: `auth:login:${user.id}`,
63
- });
64
- const refresh = createToken({
63
+ }));
64
+ const refresh = (await createTokenAsync({
65
65
  sub,
66
66
  role: USER_TOKEN_ROLE,
67
67
  scope: [REFRESH_SCOPE],
68
68
  constraints,
69
69
  ttlSeconds: REFRESH_TTL_SECONDS,
70
70
  createdBy: `auth:refresh:${user.id}`,
71
- });
71
+ }));
72
72
  return {
73
73
  accessToken: access.token,
74
74
  refreshToken: refresh.token,
@@ -1,3 +1,4 @@
1
+ import { insertAutomationAsync, updateAutomationNormalizedAsync } from "./write-async";
1
2
  import { randomUUID } from "node:crypto";
2
3
  import { getOrchestrator, ValidationError } from "../db";
3
4
  import { AUTOMATION_KIND } from "./constants";
@@ -6,63 +7,18 @@ import { db, ensureAutomationTables, getAutomation } from "./storage";
6
7
  import { normalizeCreateInput, normalizeCreateInputAsync } from "./validation";
7
8
  import type { Automation, CreateAutomationInput, UpdateAutomationInput } from "../types";
8
9
 
9
- export function createAutomation(input: CreateAutomationInput, now = Date.now()): Automation {
10
- ensureAutomationTables();
11
- const normalized = normalizeCreateInput(input);
12
- return insertAutomation(normalized, now);
10
+ export function createAutomation(input: CreateAutomationInput, now = Date.now()): Promise<Automation> {
11
+ return createAutomationAsync(input, now);
13
12
  }
14
13
 
15
14
  /** HTTP request path: catalog validation happens through the reader pool before this write. */
16
15
  export async function createAutomationAsync(input: CreateAutomationInput, now = Date.now()): Promise<Automation> {
17
16
  ensureAutomationTables();
18
- return insertAutomation(await normalizeCreateInputAsync(input), now);
19
- }
20
-
21
- function insertAutomation(normalized: ReturnType<typeof normalizeCreateInput>, now: number): Automation {
22
- if (!getOrchestrator(normalized.orchestratorId)) throw new ValidationError(`orchestrator ${normalized.orchestratorId} not found`);
23
- const id = randomUUID();
24
- const nextRunAt = normalized.enabled ? nextScheduledAt(normalized.schedule, normalized.timezone, now) : undefined;
25
- db().query(`
26
- INSERT INTO automations (id, kind, name, description, enabled, schedule, timezone, next_run_at, catch_up_policy, concurrency_policy, orchestrator_id, target_policy, task_template, created_at, updated_at)
27
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
28
- `).run(
29
- id,
30
- AUTOMATION_KIND,
31
- normalized.name,
32
- normalized.description ?? null,
33
- normalized.enabled ? 1 : 0,
34
- normalized.schedule,
35
- normalized.timezone,
36
- nextRunAt ?? null,
37
- normalized.catchUpPolicy,
38
- normalized.concurrencyPolicy,
39
- normalized.orchestratorId,
40
- JSON.stringify(normalized.targetPolicy),
41
- JSON.stringify(normalized.taskTemplate),
42
- now,
43
- now,
44
- );
45
- return getAutomation(id)!;
17
+ return insertAutomationAsync(await normalizeCreateInputAsync(input), now);
46
18
  }
47
19
 
48
- export function updateAutomation(id: string, input: UpdateAutomationInput, now = Date.now()): Automation | null {
49
- ensureAutomationTables();
50
- const existing = getAutomation(id);
51
- if (!existing) return null;
52
- const next: CreateAutomationInput = {
53
- kind: AUTOMATION_KIND,
54
- name: input.name ?? existing.name,
55
- description: input.description === null ? undefined : input.description ?? existing.description,
56
- enabled: input.enabled ?? existing.enabled,
57
- schedule: input.schedule ?? existing.schedule,
58
- timezone: input.timezone ?? existing.timezone,
59
- catchUpPolicy: input.catchUpPolicy ?? existing.catchUpPolicy,
60
- concurrencyPolicy: input.concurrencyPolicy ?? existing.concurrencyPolicy,
61
- orchestratorId: input.orchestratorId ?? existing.orchestratorId,
62
- targetPolicy: input.targetPolicy ?? existing.targetPolicy,
63
- taskTemplate: input.taskTemplate ?? existing.taskTemplate,
64
- };
65
- return updateAutomationNormalized(id, normalizeCreateInput(next), now);
20
+ export function updateAutomation(id: string, input: UpdateAutomationInput, now = Date.now()): Promise<Automation | null> {
21
+ return updateAutomationAsync(id, input, now);
66
22
  }
67
23
 
68
24
  /** HTTP request path: catalog validation happens through the reader pool before this write. */
@@ -78,7 +34,7 @@ export async function updateAutomationAsync(id: string, input: UpdateAutomationI
78
34
  if (!current || JSON.stringify(current) !== JSON.stringify(existing)) {
79
35
  throw new ValidationError("automation changed or was deleted during catalog validation");
80
36
  }
81
- return updateAutomationNormalized(id, normalized, now);
37
+ return updateAutomationNormalizedAsync(id, normalized, existing, now);
82
38
  }
83
39
 
84
40
  function automationUpdateInput(existing: Automation, input: UpdateAutomationInput): CreateAutomationInput {
@@ -97,33 +53,4 @@ function automationUpdateInput(existing: Automation, input: UpdateAutomationInpu
97
53
  };
98
54
  }
99
55
 
100
- function updateAutomationNormalized(id: string, normalized: ReturnType<typeof normalizeCreateInput>, now: number): Automation {
101
- if (!getOrchestrator(normalized.orchestratorId)) throw new ValidationError(`orchestrator ${normalized.orchestratorId} not found`);
102
- const nextRunAt = normalized.enabled ? nextScheduledAt(normalized.schedule, normalized.timezone, now) : undefined;
103
- db().query(`
104
- UPDATE automations
105
- SET name = ?, description = ?, enabled = ?, schedule = ?, timezone = ?, next_run_at = ?,
106
- catch_up_policy = ?, concurrency_policy = ?, orchestrator_id = ?, target_policy = ?, task_template = ?, updated_at = ?
107
- WHERE id = ?
108
- `).run(
109
- normalized.name,
110
- normalized.description ?? null,
111
- normalized.enabled ? 1 : 0,
112
- normalized.schedule,
113
- normalized.timezone,
114
- nextRunAt ?? null,
115
- normalized.catchUpPolicy,
116
- normalized.concurrencyPolicy,
117
- normalized.orchestratorId,
118
- JSON.stringify(normalized.targetPolicy),
119
- JSON.stringify(normalized.taskTemplate),
120
- now,
121
- id,
122
- );
123
- return getAutomation(id)!;
124
- }
125
-
126
- export function deleteAutomation(id: string): boolean {
127
- ensureAutomationTables();
128
- return db().query("DELETE FROM automations WHERE id = ?").run(id).changes > 0;
129
- }
56
+ export { deleteAutomationAsync } from "./write-async";
@@ -1,11 +1,13 @@
1
+ import { rescheduleAutomationAsync as persistNextRunAsync, updateRunAsync, insertRunAsync, enqueueAutomationRunAsync, cancelActiveRunsAsync, admitAutomationRunAsync } from "./write-async";
2
+ import { ingestIntegrationEventAsync } from "../db/runtime-tail-async";
3
+ import { runnerRuntimeTokenEnvAsync, SYSTEM_LAUNCH } from "../runtime-tokens";
4
+ import { createCommandAsync, prepareCommandWriteAsync, submitPreparedCommandAsync } from "../commands-write";
1
5
  import { isHumanAgentId, errMessage } from "@humwick/sdk";
2
6
  import { emitAutomationRunCosmosEventAsync } from "../cosmos-events";
3
- import { createCommand } from "../commands-db";
4
- import { prepareCommandWriteAsync } from "../commands-write";
7
+
5
8
  import { getAgentProfile, getSpawnPolicy, resolveAgentProfileKey } from "../config-store";
6
- import { effectiveProviderCatalogListAsync, getOrchestrator, ingestIntegrationEvent, listAgents, ValidationError, withResolvedProvisioningAsync } from "../db";
9
+ import { effectiveProviderCatalogListAsync, getOrchestrator, listAgents, ValidationError, withResolvedProvisioningAsync } from "../db";
7
10
  import { composeProfileSpawnInstructionsAsync } from "../project-instructions";
8
- import { SYSTEM_LAUNCH, runnerRuntimeTokenEnv } from "../runtime-tokens";
9
11
  import { generateSpawnAgentId } from "../services/spawn-identity";
10
12
  import { applyDefaultSharedMcp } from "../shared-mcp";
11
13
  import { resolveHostLaunchMode } from "../launch-mode";
@@ -14,22 +16,8 @@ import { systemTagsForSpawn } from "../agent-system-tags";
14
16
  import { hostProviderRefusal, isProviderDisabledOnHost } from "../host-provider-store";
15
17
  import { nextScheduledAt, formatRunDate } from "./cron";
16
18
  import { alertPrecheckAutomationFailure, precheckTaskSection, startAutomationPrecheck } from "./precheck";
17
- import {
18
- cancelActiveRuns,
19
- db,
20
- enqueueAutomationRun,
21
- ensureAutomationTables,
22
- getAutomation,
23
- getAutomationRun,
24
- hasActiveRun,
25
- insertRun,
26
- listAutomations,
27
- listDispatchableQueuedRuns,
28
- rowToAutomation,
29
- rowToAutomationRun,
30
- updateRun,
31
- rescheduleAutomation as persistNextRun,
32
- } from "./storage";
19
+ import { ensureAutomationTables, getAutomation, getAutomationRun, hasActiveRun, listAutomations } from "./storage";
20
+ import { listDispatchableQueuedRunsAsync, listDueAutomationsAsync } from "./read-async";
33
21
  import type { AutomationDispatchResult } from "./types";
34
22
  import type { AgentCard, Automation, AutomationTargetPolicy, ManagedAgent, Orchestrator } from "../types";
35
23
 
@@ -53,24 +41,13 @@ export { runDueAutomationsAsync as runDueAutomations, runAutomationNowAsync as r
53
41
  export async function runDueAutomationsAsync(now = Date.now()): Promise<AutomationDispatchResult[]> {
54
42
  ensureAutomationTables();
55
43
  const results: AutomationDispatchResult[] = [];
56
- for (const run of listDispatchableQueuedRuns()) {
57
- const automation = getAutomation(run.automationId);
58
- if (!automation || hasActiveRun(automation.id)) continue;
59
- results.push(await dispatchAutomationRunAsync(automation, run, now));
44
+ for (const run of await listDispatchableQueuedRunsAsync()) {
45
+ const admitted = await admitAutomationRunAsync({ automationId: run.automationId, queuedRunId: run.id, now });
46
+ if (admitted) results.push(await dispatchAutomationRunAsync(admitted.automation, admitted.run, now));
60
47
  }
61
- const due = (db().query("SELECT * FROM automations WHERE enabled = 1 AND next_run_at IS NOT NULL AND next_run_at <= ? ORDER BY next_run_at ASC LIMIT 25").all(now) as any[]).map(rowToAutomation);
62
- for (const automation of due) {
63
- if (hasActiveRun(automation.id)) {
64
- if (automation.concurrencyPolicy === "replace") cancelActiveRuns(automation.id, now, "Replaced by newer scheduled run");
65
- else {
66
- if (automation.concurrencyPolicy === "queue") enqueueAutomationRun(automation, automation.nextRunAt ?? now, now);
67
- rescheduleAutomation(automation, now);
68
- continue;
69
- }
70
- }
71
- const run = insertRun(automation, automation.nextRunAt ?? now, now);
72
- results.push(await dispatchAutomationRunAsync(automation, run, now));
73
- rescheduleAutomation(automation, now);
48
+ for (const automation of await listDueAutomationsAsync(now)) {
49
+ const admitted = await admitAutomationRunAsync({ automationId: automation.id, now });
50
+ if (admitted) results.push(await dispatchAutomationRunAsync(admitted.automation, admitted.run, now));
74
51
  }
75
52
  return results;
76
53
  }
@@ -78,10 +55,8 @@ export async function runDueAutomationsAsync(now = Date.now()): Promise<Automati
78
55
  /** HTTP-triggered twin: on-demand spawn composition may canonicalize a caller cwd. */
79
56
  export async function runAutomationNowAsync(id: string, now = Date.now()): Promise<AutomationDispatchResult | null> {
80
57
  ensureAutomationTables();
81
- const automation = getAutomation(id);
82
- if (!automation) return null;
83
- if (hasActiveRun(automation.id)) throw new ValidationError("automation already has an active run");
84
- return dispatchAutomationRunAsync(automation, insertRun(automation, now, now), now);
58
+ const admitted = await admitAutomationRunAsync({ automationId: id, manual: true, now });
59
+ return admitted ? dispatchAutomationRunAsync(admitted.automation, admitted.run, now) : null;
85
60
  }
86
61
 
87
62
  async function dispatchAutomationRunAsync(
@@ -89,24 +64,24 @@ async function dispatchAutomationRunAsync(
89
64
  run: ReturnType<typeof getAutomationRun> & NonNullable<unknown>,
90
65
  now: number,
91
66
  ): Promise<AutomationDispatchResult> {
92
- updateRun(run.id, { status: "dispatching" }, now);
67
+ (await updateRunAsync(run.id, { status: "dispatching" }, now));
93
68
  try {
94
69
  await emitAutomationDispatchCosmosEventAsync(automation, run.id);
95
70
  await afterAsyncAutomationCosmosForTests?.();
96
71
  assertAutomationUnchangedBeforeAsyncSpawn(automation);
97
72
  const orchestrator = requireOnlineOrchestrator(automation.orchestratorId);
98
- const prechecking = startAutomationPrecheck(automation, run, orchestrator, now);
73
+ const prechecking = (await startAutomationPrecheck(automation, run, orchestrator, now));
99
74
  if (prechecking) return prechecking;
100
75
  if (automation.targetPolicy.mode === "existing_agent") {
101
76
  const agent = resolveExistingAgent(automation.targetPolicy, orchestrator);
102
77
  if (!agent && automation.targetPolicy.ifNoMatch !== "spawn") throw new ValidationError("no matching managed agent for automation");
103
- if (agent) return createRunTask(automation, run, durableExistingAgentTarget(automation.targetPolicy), now, { targetMode: "existing_agent", resolvedAgentId: agent.id });
78
+ if (agent) return (await createRunTask(automation, run, durableExistingAgentTarget(automation.targetPolicy), now, { targetMode: "existing_agent", resolvedAgentId: agent.id }));
104
79
  return await dispatchOnDemandAutomationAsync(automation, run, orchestrator, { mode: "on_demand_agent", provider: orchestrator.providers[0] ?? "codex", keepAlive: false }, now);
105
80
  }
106
81
  return await dispatchOnDemandAutomationAsync(automation, run, orchestrator, automation.targetPolicy, now);
107
82
  } catch (e) {
108
- updateRun(run.id, { status: "failed", finishedAt: now, error: errMessage(e) }, now);
109
- alertPrecheckAutomationFailure(automation, run.id, errMessage(e));
83
+ (await updateRunAsync(run.id, { status: "failed", finishedAt: now, error: errMessage(e) }, now));
84
+ (await alertPrecheckAutomationFailure(automation, run.id, errMessage(e)));
110
85
  return { automation, run: getAutomationRun(run.id)! };
111
86
  }
112
87
  }
@@ -156,13 +131,13 @@ async function dispatchOnDemandAutomationAsync(
156
131
  ...(composed.systemPromptAppend ? { systemPromptAppend: composed.systemPromptAppend } : {}),
157
132
  ...(composed.relayInjectionEvents.length ? { relayInjectionEvents: composed.relayInjectionEvents } : {}),
158
133
  ...(composed.memorySeam ? { memorySeam: composed.memorySeam } : {}),
159
- env: runnerRuntimeTokenEnv({ authority: SYSTEM_LAUNCH, agentId, orchestratorId: orchestrator.id, cwd, provider: policy.provider, label, createdBy: "automation", profile: policy.profile }),
134
+ env: (await runnerRuntimeTokenEnvAsync({ authority: SYSTEM_LAUNCH, agentId, orchestratorId: orchestrator.id, cwd, provider: policy.provider, label, createdBy: "automation", profile: policy.profile })),
160
135
  }),
161
136
  }, {}, "system");
162
137
  assertAutomationUnchangedBeforeAsyncSpawn(automation);
163
- const command = createCommand(prepared.input, prepared.options, prepared.id);
164
- const result = createRunTask(automation, run, `label:${label}`, now, { targetMode: "on_demand_agent", provider: policy.provider, label, profile: policy.profile, workspaceMode: policy.workspaceMode ?? "inherit" });
165
- updateRun(run.id, { status: "waiting_agent", meta: { ...result.run.meta, onDemandLabel: label, spawnCommandId: command.id, workspaceMode: policy.workspaceMode ?? "inherit" } }, now);
138
+ const command = (await submitPreparedCommandAsync(prepared));
139
+ const result = (await createRunTask(automation, run, `label:${label}`, now, { targetMode: "on_demand_agent", provider: policy.provider, label, profile: policy.profile, workspaceMode: policy.workspaceMode ?? "inherit" }));
140
+ (await updateRunAsync(run.id, { status: "waiting_agent", meta: { ...result.run.meta, onDemandLabel: label, spawnCommandId: command.id, workspaceMode: policy.workspaceMode ?? "inherit" } }, now));
166
141
  return { ...result, run: getAutomationRun(run.id)!, command };
167
142
  }
168
143
 
@@ -173,13 +148,13 @@ function assertAutomationUnchangedBeforeAsyncSpawn(automation: Automation): void
173
148
  }
174
149
  }
175
150
 
176
- function createRunTask(
151
+ async function createRunTask(
177
152
  automation: Automation,
178
153
  run: ReturnType<typeof getAutomationRun> & NonNullable<unknown>,
179
154
  target: string,
180
155
  now: number,
181
156
  meta: Record<string, unknown>,
182
- ): AutomationDispatchResult {
157
+ ): Promise<AutomationDispatchResult> {
183
158
  const template = automation.taskTemplate;
184
159
  // Inject the authoritative dispatch-time run date (#480). A long-lived managed agent's
185
160
  // session-start day awareness goes stale across midnight, so it can't be trusted to derive
@@ -193,7 +168,7 @@ function createRunTask(
193
168
  const usesRunDateToken = /\{\{\s*(runDate|runWeekday|runDateLine)\s*\}\}/.test(`${template.title}\n${template.body}`);
194
169
  const title = fill(template.title);
195
170
  const body = (usesRunDateToken ? fill(template.body) : `Run date: ${runDate.line}.\n\n${template.body}`) + precheckTaskSection(run);
196
- const result = ingestIntegrationEvent({
171
+ const result = (await ingestIntegrationEventAsync({
197
172
  source: "automation",
198
173
  type: "scheduled_task",
199
174
  severity: template.severity ?? "info",
@@ -218,8 +193,8 @@ function createRunTask(
218
193
  runTimezone: automation.timezone,
219
194
  ...meta,
220
195
  },
221
- }, "automation");
222
- updateRun(run.id, {
196
+ }, "automation"));
197
+ (await updateRunAsync(run.id, {
223
198
  status: meta.targetMode === "on_demand_agent" ? "waiting_agent" : "running",
224
199
  startedAt: now,
225
200
  targetAgentId: typeof meta.resolvedAgentId === "string"
@@ -230,7 +205,7 @@ function createRunTask(
230
205
  taskId: result.task.id,
231
206
  messageId: result.message?.id,
232
207
  meta: { ...run.meta, ...meta },
233
- }, now);
208
+ }, now));
234
209
  return { automation, run: getAutomationRun(run.id)!, task: result.task, message: result.message };
235
210
  }
236
211
 
@@ -242,9 +217,9 @@ function durableExistingAgentTarget(policy: Extract<AutomationTargetPolicy, { mo
242
217
  throw new ValidationError("existing-agent automation target selector must include a label or capability");
243
218
  }
244
219
 
245
- function rescheduleAutomation(automation: Automation, now: number): void {
220
+ async function rescheduleAutomation(automation: Automation, now: number): Promise<void> {
246
221
  const next = automation.enabled ? nextScheduledAt(automation.schedule, automation.timezone, now) : undefined;
247
- persistNextRun(automation, next, now);
222
+ (await persistNextRunAsync(automation, next, now));
248
223
  }
249
224
 
250
225
  function requireOnlineOrchestrator(orchestratorId: string): Orchestrator {
@@ -1,5 +1,5 @@
1
1
  export type { AutomationDispatchResult, AutomationReconcileResult } from "./types";
2
- export { createAutomation, createAutomationAsync, deleteAutomation, updateAutomation, updateAutomationAsync } from "./crud";
2
+ export { createAutomation, createAutomationAsync, deleteAutomationAsync, updateAutomation, updateAutomationAsync } from "./crud";
3
3
  export { getAutomation, listAutomationRuns, listAutomations } from "./storage";
4
4
  export { runAutomationNow, runAutomationNowAsync, runDueAutomations, runDueAutomationsAsync } from "./dispatch";
5
5
  export { reconcileAutomationRuns } from "./reconcile";
@@ -0,0 +1,65 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { getOrchestrator, ValidationError } from "../db";
3
+ import { AUTOMATION_KIND } from "./constants";
4
+ import { nextScheduledAt } from "./cron";
5
+ import { db, ensureAutomationTables, getAutomation } from "./storage";
6
+ import type { normalizeCreateInput } from "./validation";
7
+ import type { Automation } from "../types";
8
+
9
+ export function insertAutomation(normalized: ReturnType<typeof normalizeCreateInput>, now: number): Automation {
10
+ if (!getOrchestrator(normalized.orchestratorId)) throw new ValidationError(`orchestrator ${normalized.orchestratorId} not found`);
11
+ const id = randomUUID();
12
+ const nextRunAt = normalized.enabled ? nextScheduledAt(normalized.schedule, normalized.timezone, now) : undefined;
13
+ db().query(`
14
+ INSERT INTO automations (id, kind, name, description, enabled, schedule, timezone, next_run_at, catch_up_policy, concurrency_policy, orchestrator_id, target_policy, task_template, created_at, updated_at)
15
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
16
+ `).run(
17
+ id,
18
+ AUTOMATION_KIND,
19
+ normalized.name,
20
+ normalized.description ?? null,
21
+ normalized.enabled ? 1 : 0,
22
+ normalized.schedule,
23
+ normalized.timezone,
24
+ nextRunAt ?? null,
25
+ normalized.catchUpPolicy,
26
+ normalized.concurrencyPolicy,
27
+ normalized.orchestratorId,
28
+ JSON.stringify(normalized.targetPolicy),
29
+ JSON.stringify(normalized.taskTemplate),
30
+ now,
31
+ now,
32
+ );
33
+ return getAutomation(id)!;
34
+ }
35
+
36
+ export function updateAutomationNormalized(id: string, normalized: ReturnType<typeof normalizeCreateInput>, now: number): Automation {
37
+ if (!getOrchestrator(normalized.orchestratorId)) throw new ValidationError(`orchestrator ${normalized.orchestratorId} not found`);
38
+ const nextRunAt = normalized.enabled ? nextScheduledAt(normalized.schedule, normalized.timezone, now) : undefined;
39
+ db().query(`
40
+ UPDATE automations
41
+ SET name = ?, description = ?, enabled = ?, schedule = ?, timezone = ?, next_run_at = ?,
42
+ catch_up_policy = ?, concurrency_policy = ?, orchestrator_id = ?, target_policy = ?, task_template = ?, updated_at = ?
43
+ WHERE id = ?
44
+ `).run(
45
+ normalized.name,
46
+ normalized.description ?? null,
47
+ normalized.enabled ? 1 : 0,
48
+ normalized.schedule,
49
+ normalized.timezone,
50
+ nextRunAt ?? null,
51
+ normalized.catchUpPolicy,
52
+ normalized.concurrencyPolicy,
53
+ normalized.orchestratorId,
54
+ JSON.stringify(normalized.targetPolicy),
55
+ JSON.stringify(normalized.taskTemplate),
56
+ now,
57
+ id,
58
+ );
59
+ return getAutomation(id)!;
60
+ }
61
+
62
+ export function deleteAutomation(id: string): boolean {
63
+ ensureAutomationTables();
64
+ return db().query("DELETE FROM automations WHERE id = ?").run(id).changes > 0;
65
+ }
@@ -1,15 +1,17 @@
1
+ import { updateRunAsync } from "./write-async";
2
+ import { createCommandAsync, getCommandAsync } from "../commands-write";
1
3
  // #3175 — an automation precheck is a plain script run on the automation's host before any agent is
2
4
  // involved, so a quiet scheduled run costs no model quota. It reuses the `scheduler.command` executor
3
5
  // (bounded, process-group reaped, output capped); only exit {@link AUTOMATION_PRECHECK_HITS_EXIT_CODE}
4
6
  // re-queues the run for its normal target dispatch.
5
7
  import { AUTOMATION_PRECHECK_HITS_EXIT_CODE, OUTPUT_WITHHELD, RELAY_RUN_OUTPUT_MASKED_CAPABILITY } from "@humwick/sdk";
6
- import { createCommand } from "../commands-db";
7
- import { getCommandAsync } from "../commands-write";
8
+
8
9
  import { isTerminalCommandStatus } from "../db/command-terminal-status";
9
10
  import { raiseOperatorAlarm } from "../operator-alarm";
10
11
  import { notifyWorkspaceHumanEscalation } from "../workspace-human-escalation";
11
12
  import { DEFAULT_PRECHECK_TIMEOUT_MS } from "./constants";
12
- import { getAutomation, getAutomationRun, listPendingPrecheckRuns, updateRun } from "./storage";
13
+ import { getAutomation, getAutomationRun } from "./storage";
14
+ import { listPendingPrecheckRunsAsync } from "./read-async";
13
15
  import type { AutomationDispatchResult, AutomationReconcileResult } from "./types";
14
16
  import type { Automation, AutomationRun, Command, Orchestrator } from "../types";
15
17
 
@@ -31,7 +33,7 @@ export function runPrecheck(run: AutomationRun): AutomationRunPrecheck | undefin
31
33
  }
32
34
 
33
35
  /** Starts the precheck when the automation has one and this run has not passed it yet. */
34
- export function startAutomationPrecheck(automation: Automation, run: AutomationRun, orchestrator: Orchestrator, now: number): AutomationDispatchResult | undefined {
36
+ export async function startAutomationPrecheck(automation: Automation, run: AutomationRun, orchestrator: Orchestrator, now: number): Promise<AutomationDispatchResult | undefined> {
35
37
  const precheck = automation.targetPolicy.precheck;
36
38
  if (!precheck || runPrecheck(run)?.status === "hits") return undefined;
37
39
  // An executor that does not mask would store raw script output in the command, run and Task, so refuse it.
@@ -40,7 +42,7 @@ export function startAutomationPrecheck(automation: Automation, run: AutomationR
40
42
  }
41
43
  const timeoutMs = precheck.timeoutMs ?? DEFAULT_PRECHECK_TIMEOUT_MS;
42
44
  const policyCwd = automation.targetPolicy.mode === "on_demand_agent" ? automation.targetPolicy.cwd : undefined;
43
- const command = createCommand({
45
+ const command = (await createCommandAsync({
44
46
  type: "scheduler.command",
45
47
  source: "automation",
46
48
  target: orchestrator.agentId,
@@ -56,16 +58,16 @@ export function startAutomationPrecheck(automation: Automation, run: AutomationR
56
58
  automationId: automation.id,
57
59
  automationRunId: run.id,
58
60
  },
59
- });
61
+ }));
60
62
  const state: AutomationRunPrecheck = { commandId: command.id, status: "running" };
61
- updateRun(run.id, { status: "running", startedAt: now, meta: { ...run.meta, precheck: state } }, now);
63
+ (await updateRunAsync(run.id, { status: "running", startedAt: now, meta: { ...run.meta, precheck: state } }, now));
62
64
  return { automation, run: getAutomationRun(run.id)!, command };
63
65
  }
64
66
 
65
67
  /** Settles finished prechecks: quiet runs succeed with no agent, hits re-queue for target dispatch. */
66
68
  export async function settleAutomationPrechecks(now: number): Promise<AutomationReconcileResult[]> {
67
69
  const results: AutomationReconcileResult[] = [];
68
- for (const run of listPendingPrecheckRuns()) {
70
+ for (const run of await listPendingPrecheckRunsAsync()) {
69
71
  const state = runPrecheck(run)!;
70
72
  const command = await getCommandAsync(state.commandId);
71
73
  if (command && !isTerminalCommandStatus(command.status)) continue;
@@ -74,15 +76,15 @@ export async function settleAutomationPrechecks(now: number): Promise<Automation
74
76
  const meta = { ...run.meta, precheck };
75
77
  const automation = getAutomation(run.automationId);
76
78
  if (!automation) {
77
- updateRun(run.id, { status: "failed", finishedAt: now, error: "automation deleted while its precheck ran", meta }, now);
79
+ (await updateRunAsync(run.id, { status: "failed", finishedAt: now, error: "automation deleted while its precheck ran", meta }, now));
78
80
  } else if (outcome.status === "hits") {
79
81
  // `scheduled` hands the run to the queued-run dispatch, which skips the precheck on `hits`.
80
- updateRun(run.id, { status: "scheduled", meta }, now);
82
+ (await updateRunAsync(run.id, { status: "scheduled", meta }, now));
81
83
  } else if (outcome.status === "quiet") {
82
- updateRun(run.id, { status: "succeeded", finishedAt: now, result: { precheck: "quiet", exitCode: 0 }, meta }, now);
84
+ (await updateRunAsync(run.id, { status: "succeeded", finishedAt: now, result: { precheck: "quiet", exitCode: 0 }, meta }, now));
83
85
  } else {
84
- updateRun(run.id, { status: "failed", finishedAt: now, error: outcome.error, meta }, now);
85
- alertPrecheckAutomationFailure(automation, run.id, outcome.error!);
86
+ (await updateRunAsync(run.id, { status: "failed", finishedAt: now, error: outcome.error, meta }, now));
87
+ (await alertPrecheckAutomationFailure(automation, run.id, outcome.error!));
86
88
  }
87
89
  results.push({ run: getAutomationRun(run.id)! });
88
90
  }
@@ -107,12 +109,12 @@ function precheckOutcome(command: Command | null): { status: AutomationRunPreche
107
109
  }
108
110
 
109
111
  /** A precheck automation that stops running is a monitoring gap, so it pages the operator once per run. */
110
- export function alertPrecheckAutomationFailure(automation: Automation, runId: string, error: string): void {
112
+ export async function alertPrecheckAutomationFailure(automation: Automation, runId: string, error: string): Promise<void> {
111
113
  if (!automation.targetPolicy.precheck) return;
112
114
  const subject = `Automation precheck failed: ${automation.name}`;
113
115
  const detail = `Run ${runId} on ${automation.orchestratorId}: ${error}`;
114
- raiseOperatorAlarm({ clientId: `automation-precheck-failed:${runId}`, source: "automation", subject, detail, view: "automation", metadata: { automationId: automation.id, automationRunId: runId } });
115
- const human = notifyWorkspaceHumanEscalation({ subject, body: detail, priority: "high", tags: ["agent-relay", "automation"], source: "automation", idempotencyKey: `automation-precheck-failed:${runId}`, payload: { automationId: automation.id, automationRunId: runId } });
116
+ (await raiseOperatorAlarm({ clientId: `automation-precheck-failed:${runId}`, source: "automation", subject, detail, view: "automation", metadata: { automationId: automation.id, automationRunId: runId } }));
117
+ const human = (await notifyWorkspaceHumanEscalation({ subject, body: detail, priority: "high", tags: ["agent-relay", "automation"], source: "automation", idempotencyKey: `automation-precheck-failed:${runId}`, payload: { automationId: automation.id, automationRunId: runId } }));
116
118
  if (!human.accepted) console.warn(`[automations] precheck failure for ${automation.id} paged nobody: ${human.reason ?? "unknown reason"}`);
117
119
  }
118
120
 
@@ -0,0 +1,11 @@
1
+ // #3799 — async facades over the automation reader ops; the main thread never scans automation tables.
2
+ import { getGateway } from "../db/gateway";
3
+ import type { Automation, AutomationRun } from "../types";
4
+
5
+ const read = <T>(op: string, args: unknown = {}): Promise<T> => getGateway().read(op as never, args as never) as unknown as Promise<T>;
6
+
7
+ export const listAutomationRunsAsync = (filter: { automationId?: string; status?: string; limit?: number } = {}) => read<AutomationRun[]>("automations.listRuns", filter);
8
+ export const listPendingPrecheckRunsAsync = () => read<AutomationRun[]>("automations.pendingPrecheckRuns");
9
+ export const listReconcilableRunsAsync = () => read<AutomationRun[]>("automations.reconcilableRuns");
10
+ export const listDispatchableQueuedRunsAsync = () => read<AutomationRun[]>("automations.dispatchableQueuedRuns");
11
+ export const listDueAutomationsAsync = (now: number) => read<Automation[]>("automations.dueAutomations", { now });