@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,54 +1,11 @@
1
+ import { setTaskStatusAsync, setTaskStageAsync, markTaskAgentReapedAsync } from "../db/task-entity-async";
2
+ import { confirmWorkspaceCarryPendingForTaskAsync } from "../db/runtime-tail-async";
3
+ import { removeSubscriptionsForTaskAsync } from "../db/lifecycle-tail-async";
1
4
  // #834 — service facade for the durable Task entity. Transports (HTTP routes, MCP tools)
2
5
  // call THIS, not the db writers directly (transport-thinness, epic #342): the service owns
3
6
  // the db mutation + the SSE emission so the transport stays thin. The kind partition and all
4
7
  // validation live in the db layer (src/db/task-entity.ts); this layer adds eventing.
5
- import {
6
- addTaskDependencyAsync,
7
- addTaskRelationAsync,
8
- assignTaskAgent,
9
- assignTaskAgentAsync,
10
- clearTaskParentAsync,
11
- confirmWorkspaceCarryPendingForTask,
12
- createDeliverableTask,
13
- createDeliverableTaskAsync,
14
- deliverableTaskIdsByOwnerAgent,
15
- deliverableTaskIdsByOwnerAgentAsync,
16
- deliverableTaskIdsBySpawnRequestId,
17
- deliverableTaskIdsBySpawnRequestIdAsync,
18
- getAgent,
19
- getTaskDetail,
20
- getTaskDetailAsync, getTaskViewAsync,
21
- listAgents,
22
- listDeliverableTaskSummariesAsync,
23
- listDeliverableTasksAsync,
24
- listTaskEvents,
25
- listTaskEventsAsync,
26
- listWorkspaces,
27
- markTaskAgentReaped,
28
- markTaskAgentReapedAsync,
29
- recordGate,
30
- recordGateAsync,
31
- recordTaskDispatchDecisionAsync,
32
- removeTaskDependencyAsync,
33
- removeTaskRefAsync,
34
- removeTaskRelationAsync,
35
- setTaskParentAsync,
36
- setTaskStage,
37
- setTaskStageAsync,
38
- setTaskStatus,
39
- setTaskStatusAsync,
40
- updateDeliverableTask,
41
- updateDeliverableTaskAsync,
42
- ValidationError,
43
- type ListDeliverableTasksFilter,
44
- type RecordTaskDispatchDecisionInput,
45
- type RecordGateInput,
46
- type RemoveTaskRefInput,
47
- type SetTaskStageInput,
48
- type SetTaskStatusInput,
49
- type TaskEntityWriteOptions,
50
- type UpdateDeliverableTaskInput,
51
- } from "../db";
8
+ import { addTaskDependencyAsync, addTaskRelationAsync, assignTaskAgent, assignTaskAgentAsync, clearTaskParentAsync, createDeliverableTask, createDeliverableTaskAsync, deliverableTaskIdsByOwnerAgent, deliverableTaskIdsByOwnerAgentAsync, deliverableTaskIdsBySpawnRequestId, deliverableTaskIdsBySpawnRequestIdAsync, getAgent, getTaskDetail, getTaskDetailAsync, getTaskViewAsync, listAgents, listDeliverableTaskSummariesAsync, listDeliverableTasksAsync, listTaskEvents, listTaskEventsAsync, listWorkspaces, recordGate, recordGateAsync, recordTaskDispatchDecisionAsync, removeTaskDependencyAsync, removeTaskRefAsync, removeTaskRelationAsync, setTaskParentAsync, updateDeliverableTask, updateDeliverableTaskAsync, ValidationError, type ListDeliverableTasksFilter, type RecordTaskDispatchDecisionInput, type RecordGateInput, type RemoveTaskRefInput, type SetTaskStageInput, type SetTaskStatusInput, type TaskEntityWriteOptions, type UpdateDeliverableTaskInput } from "../db";
52
9
 
53
10
  import { validationCompletionStatus } from "../task-completion.ts";
54
11
  import { findSpawnCommandByRequestId } from "../commands-db";
@@ -56,7 +13,6 @@ import { findSpawnCommandByRequestId } from "../commands-db";
56
13
  import { emitTaskChanged } from "../sse";
57
14
  import { isCarryPendingBlocker } from "./carry-pending";
58
15
  import type { CommandStatus, Task, TaskBlocker, TaskCommitRef, TaskDeliverableEventMetadata, TaskDetail, TaskEvent, TaskGateState, TaskListItem, TaskStatus, TaskTerminalStage, WorkspaceRecord } from "../types";
59
- import { removeSubscriptionsForTask } from "../db/notification-subscriptions";
60
16
  import { emitRelayEvent } from "../events";
61
17
  import { routeNotification } from "../notification-router";
62
18
  import { isAgentExitDoneWhen } from "./task-done-when";
@@ -73,19 +29,8 @@ import { taskOwnerTarget } from "../task-owner";
73
29
  export type { CreateTaskEntityInput } from "./task-issue-link";
74
30
  export { addTaskEntityRef, addTaskEntityRefAsync, attachTaskRefs } from "./task-issue-link";
75
31
 
76
- export function createTaskEntity(input: CreateTaskEntityInput): TaskDetail {
77
- cleanIssueRefRelation(input.relation);
78
- const created = createDeliverableTask(input);
79
- const detail = addInitialIssueRefs(created.id, input);
80
- autoSubscribeTaskCoordinator(input.createdBy, detail.id);
81
- emitTaskChanged(detail, "task.created");
82
- emitTaskSemanticNotification({
83
- task: detail,
84
- transition: "created",
85
- actor: input.createdBy,
86
- occurrenceKey: latestTaskEventOccurrence(detail.id, "task.created"),
87
- });
88
- return detail;
32
+ export async function createTaskEntity(input: CreateTaskEntityInput): Promise<TaskDetail> {
33
+ return createTaskEntityAsync(input);
89
34
  }
90
35
 
91
36
  /** The off-loop twin of createTaskEntity (S3.2 L-D2 #1904) — the sanctioned HTTP/MCP create path. */
@@ -93,9 +38,9 @@ export async function createTaskEntityAsync(input: CreateTaskEntityInput, option
93
38
  cleanIssueRefRelation(input.relation);
94
39
  const created = await createDeliverableTaskAsync(input, options);
95
40
  const detail = await addInitialIssueRefsAsync(created.id, input, options);
96
- autoSubscribeTaskCoordinator(input.createdBy, detail.id);
41
+ (await autoSubscribeTaskCoordinator(input.createdBy, detail.id));
97
42
  emitTaskChanged(detail, "task.created");
98
- emitTaskSemanticNotification({
43
+ await emitTaskSemanticNotification({
99
44
  task: detail,
100
45
  transition: "created",
101
46
  actor: input.createdBy,
@@ -118,10 +63,8 @@ export function listTaskEntitySummariesAsync(filter: ListDeliverableTasksFilter
118
63
  return listDeliverableTaskSummariesAsync(filter);
119
64
  }
120
65
 
121
- export function updateTaskEntity(id: number, input: UpdateDeliverableTaskInput): TaskDetail {
122
- const detail = updateDeliverableTask(id, input);
123
- emitTaskChanged(detail, "task.updated");
124
- return detail;
66
+ export async function updateTaskEntity(id: number, input: UpdateDeliverableTaskInput): Promise<TaskDetail> {
67
+ return updateTaskEntityAsync(id, input);
125
68
  }
126
69
 
127
70
  /** The off-loop twin of updateTaskEntity (S3.2 L-D2 #1904). */
@@ -136,30 +79,22 @@ export async function updateTaskEntityAsync(id: number, input: UpdateDeliverable
136
79
  // interface that cannot yet await, S3.2 L-D2 #1904 follow-up) and the off-loop path
137
80
  // (setTaskEntityStatusAsync) apply IDENTICAL business logic over their differently-sourced `before`/
138
81
  // `detail` rows, instead of forking the notification/work-finality logic in two places.
139
- export function emitStatusChangeEffects(before: TaskDetail | null, detail: TaskDetail, actor: string | undefined, occurrenceKey: string | undefined): void {
82
+ export async function emitStatusChangeEffects(before: TaskDetail | null, detail: TaskDetail, actor: string | undefined, occurrenceKey: string | undefined): Promise<void> {
140
83
  emitTaskChanged(detail, "task.status");
141
84
  const transition = taskTransitionForStatus(detail.status, detail.blockedBy);
142
85
  if (actor !== "task-lifecycle" && transition && shouldEmitStatusTransition(before, detail, transition)) {
143
- emitTaskSemanticNotification({ task: detail, transition, actor, occurrenceKey });
86
+ await emitTaskSemanticNotification({ task: detail, transition, actor, occurrenceKey });
144
87
  }
145
- if (isTerminalTaskStatus(detail.status)) removeSubscriptionsForTask(detail.id);
88
+ if (isTerminalTaskStatus(detail.status)) await removeSubscriptionsForTaskAsync(detail.id);
146
89
  // #1084 — a task reaching `done` is an explicit, platform-owned completion signal for its
147
90
  // owning agent's work window: close it, forwarding only the held final group. The #2520
148
91
  // plan-ref propagation trigger lives with its CALLERS (below): the sync twin runs the
149
92
  // in-process op body; the async path awaits the gateway-backed seam.
150
- if (before?.status !== "done" && detail.status === "done") markAgentWorkFinal(detail.ownerAgentId, "task-done");
93
+ if (before?.status !== "done" && detail.status === "done") (await markAgentWorkFinal(detail.ownerAgentId, "task-done"));
151
94
  }
152
95
 
153
- export function setTaskEntityStatus(id: number, input: SetTaskStatusInput): TaskDetail {
154
- const before = getTaskDetail(id);
155
- const detail = setTaskStatus(id, input);
156
- emitStatusChangeEffects(before, detail, input.actor, latestTaskEventOccurrence(detail.id, `status:${detail.status}`));
157
- if (before?.status !== "done" && detail.status === "done") {
158
- // #2520 — durable status=done trigger for ref-driven plan-node terminal propagation
159
- // (in-process twin: the bus-dispatcher seam cannot await; no fire-and-forget promises).
160
- advanceTerminalPlanRefs({ taskId: detail.id, actor: input.actor });
161
- }
162
- return detail;
96
+ export async function setTaskEntityStatus(id: number, input: SetTaskStatusInput): Promise<TaskDetail> {
97
+ return setTaskEntityStatusAsync(id, input);
163
98
  }
164
99
 
165
100
  /**
@@ -175,7 +110,7 @@ export function setTaskEntityStatus(id: number, input: SetTaskStatusInput): Task
175
110
  export async function setTaskEntityStatusAsync(id: number, input: SetTaskStatusInput, options?: TaskEntityWriteOptions): Promise<TaskDetail> {
176
111
  const before = await getTaskDetailAsync(id);
177
112
  const detail = await setTaskStatusAsync(id, input, options);
178
- emitStatusChangeEffects(before, detail, input.actor, await latestTaskEventOccurrenceAsync(detail.id, `status:${detail.status}`));
113
+ await emitStatusChangeEffects(before, detail, input.actor, await latestTaskEventOccurrenceAsync(detail.id, `status:${detail.status}`));
179
114
  if (before?.status !== "done" && detail.status === "done") {
180
115
  // #2520 — awaited on the sanctioned async path so the trigger's plan writes settle in order.
181
116
  await advanceTerminalPlanRefsAsync({ taskId: detail.id, actor: input.actor });
@@ -188,33 +123,14 @@ export function isTerminalTaskStatus(status: Task["status"]): boolean {
188
123
  }
189
124
 
190
125
  // #1456 — the un-bypassable carry-pending landing gate is enforced in the LOWEST stage writer
191
- // (`db/task-entity.ts` setTaskStage), so it covers EVERY entrypoint — the land pipeline, the
126
+ // (`db/task-entity.ts` setTaskStageAsync), so it covers EVERY entrypoint — the land pipeline, the
192
127
  // no-mergedSha out-of-band reconciliation, PR/squash, a manual `relay_task_set_stage`, and the
193
128
  // deploy path (`stampDeployedTasks`, which calls the primitive directly). This service wrapper adds
194
129
  // only eventing; it does NOT re-check (guarding the wrapper too would be a second, drift-prone code
195
130
  // path — round-4: guard the primitive, not the wrapper). The land pipeline (driveTaskOnLand)
196
131
  // short-circuits earlier with a superseded event; the primitive throw is the backstop for the rest.
197
- export function setTaskEntityStage(id: number, input: SetTaskStageInput): TaskDetail {
198
- const before = getTaskDetail(id);
199
- let detail = setTaskStage(id, input);
200
- emitTaskChanged(detail, "task.stage");
201
- const transition = taskTransitionForStage(detail.deliverableStage);
202
- if (input.actor !== "task-lifecycle" && transition && before?.deliverableStage !== detail.deliverableStage) {
203
- emitTaskSemanticNotification({
204
- task: detail,
205
- transition,
206
- actor: input.actor,
207
- branch: detail.branch,
208
- occurrenceKey: latestTaskEventOccurrence(detail.id, `stage:${detail.deliverableStage}`),
209
- });
210
- }
211
- const deliverableStage = detail.deliverableStage ?? "none";
212
- if (LANDED_STAGES.has(deliverableStage)) {
213
- // #2520 — a landed/deploying/deployed stage is terminal success for ref-driven propagation.
214
- advanceTerminalPlanRefs({ taskId: detail.id, actor: input.actor });
215
- }
216
- if (before?.status !== detail.status) emitStatusChangeEffects(before, detail, input.actor, undefined);
217
- return detail;
132
+ export async function setTaskEntityStage(id: number, input: SetTaskStageInput): Promise<TaskDetail> {
133
+ return setTaskEntityStageAsync(id, input);
218
134
  }
219
135
 
220
136
  /** The off-loop twin of setTaskEntityStage (S3.2 L-D2 #1904). */
@@ -224,7 +140,7 @@ export async function setTaskEntityStageAsync(id: number, input: SetTaskStageInp
224
140
  emitTaskChanged(detail, "task.stage");
225
141
  const transition = taskTransitionForStage(detail.deliverableStage);
226
142
  if (input.actor !== "task-lifecycle" && transition && before?.deliverableStage !== detail.deliverableStage) {
227
- emitTaskSemanticNotification({
143
+ await emitTaskSemanticNotification({
228
144
  task: detail,
229
145
  transition,
230
146
  actor: input.actor,
@@ -237,7 +153,7 @@ export async function setTaskEntityStageAsync(id: number, input: SetTaskStageInp
237
153
  // #2520 — the off-loop stage trigger for ref-driven plan-node terminal propagation.
238
154
  await advanceTerminalPlanRefsAsync({ taskId: detail.id, actor: input.actor });
239
155
  }
240
- if (before?.status !== detail.status) emitStatusChangeEffects(before, detail, input.actor, undefined);
156
+ if (before?.status !== detail.status) await emitStatusChangeEffects(before, detail, input.actor, undefined);
241
157
  return detail;
242
158
  }
243
159
 
@@ -254,39 +170,11 @@ export async function setTaskEntityStageAsync(id: number, input: SetTaskStageInp
254
170
  // #831). The `deliverable.superseded` event already alerts the coordinator, who handles any
255
171
  // issue-close/reap manually in the rare revert window. Automatic host-side tree-level carry
256
172
  // verification (and lifecycle re-drive) is tracked as the #1458 follow-up.
257
- export function confirmTaskCarry(id: number, opts: { actor?: string; note?: string; commit?: TaskCommitRef; branch?: string } = {}): TaskDetail {
258
- const task = getTaskDetail(id);
259
- if (!task) throw new ValidationError("task not found");
260
- const blockers = task.blockedBy ?? [];
261
- const remaining = blockers.filter((b: TaskBlocker) => !isCarryPendingBlocker(b));
262
- const hadCarryPending = remaining.length !== blockers.length;
263
- const note = opts.note?.trim() || "delivered change confirmed carried onto the current base (#1456)";
264
- let detail = task;
265
- if (hadCarryPending) {
266
- // `allowCarryPendingClear` authorizes the primitive latch (BLOCKER 1) to drop the carry-pending
267
- // blocker(s) — this confirm is the ONLY path that may. Scoped: preserves unrelated blockers.
268
- detail = remaining.length > 0
269
- ? setTaskEntityStatus(id, { status: "blocked", blockedBy: remaining, note, actor: opts.actor, allowCarryPendingClear: true })
270
- : setTaskEntityStatus(id, { status: "in_progress", note, actor: opts.actor, allowCarryPendingClear: true });
271
- }
272
- // Clear the workspace-durable marker too (round-4 BLOCKER 3): a late-bound Task can be gated purely
273
- // by the workspace's unconfirmed head with no task-level blocker, and the marker would otherwise
274
- // re-gate the very land this confirm authorizes. Cleared for the Task's bound workspace(s).
275
- confirmWorkspaceCarryPendingForTask(task);
276
- // Optionally complete the land the carry-pending gate refused. Both obligation carriers are cleared
277
- // above, so the stage gate now permits the advance; doneWhen closes the Task as usual.
278
- if (opts.commit) {
279
- detail = setTaskEntityStage(id, {
280
- deliverableStage: "landed-on-main",
281
- ...(opts.branch ? { branch: opts.branch } : {}),
282
- commit: opts.commit,
283
- actor: opts.actor,
284
- });
285
- }
286
- return detail;
173
+ export async function confirmTaskCarry(id: number, opts: { actor?: string; note?: string; commit?: TaskCommitRef; branch?: string } = {}): Promise<TaskDetail> {
174
+ return confirmTaskCarryAsync(id, opts);
287
175
  }
288
176
 
289
- /** The off-loop twin of confirmTaskCarry (S3.2 L-D2 #1904). `confirmWorkspaceCarryPendingForTask`
177
+ /** The off-loop twin of confirmTaskCarry (S3.2 L-D2 #1904). `confirmWorkspaceCarryPendingForTaskAsync`
290
178
  * (workspaces/carry-pending-marker.ts) is a genuinely cross-domain, not-yet-migrated write — left on the
291
179
  * sync facade like the retained sync callers elsewhere in this migration; it is a single small metadata
292
180
  * write, not a hot path, so it does not defeat the point of awaiting the task-entity writes around it. */
@@ -303,7 +191,7 @@ export async function confirmTaskCarryAsync(id: number, opts: { actor?: string;
303
191
  ? await setTaskEntityStatusAsync(id, { status: "blocked", blockedBy: remaining, note, actor: opts.actor, allowCarryPendingClear: true })
304
192
  : await setTaskEntityStatusAsync(id, { status: "in_progress", note, actor: opts.actor, allowCarryPendingClear: true });
305
193
  }
306
- confirmWorkspaceCarryPendingForTask(task);
194
+ (await confirmWorkspaceCarryPendingForTaskAsync(task));
307
195
  if (opts.commit) {
308
196
  detail = await setTaskEntityStageAsync(id, {
309
197
  deliverableStage: "landed-on-main",
@@ -335,20 +223,8 @@ function shouldEmitStatusTransition(before: TaskDetail | null, detail: TaskDetai
335
223
  return false;
336
224
  }
337
225
 
338
- export function recordTaskEntityGate(id: number, input: RecordGateInput): { gate: TaskGateState; gates: TaskGateState[] } {
339
- const gate = recordGate(id, input);
340
- const detail = getTaskDetail(id);
341
- if (detail) emitTaskChanged(detail, "task.gate");
342
- if (detail && gate.status === "fail") {
343
- emitTaskSemanticNotification({
344
- task: detail,
345
- transition: "gate-failed",
346
- actor: input.actor,
347
- occurrenceKey: latestTaskEventOccurrence(detail.id, `gate:${gate.gate}`),
348
- outcome: { gate: gate.gate, status: gate.status, ...(gate.detail ? { detail: gate.detail } : {}) },
349
- });
350
- }
351
- return { gate, gates: detail?.gates ?? [] };
226
+ export async function recordTaskEntityGate(id: number, input: RecordGateInput): Promise<{ gate: TaskGateState; gates: TaskGateState[] }> {
227
+ return recordTaskEntityGateAsync(id, input);
352
228
  }
353
229
 
354
230
  /** The off-loop twin of recordTaskEntityGate (S3.2 L-D2 #1904). */
@@ -357,7 +233,7 @@ export async function recordTaskEntityGateAsync(id: number, input: RecordGateInp
357
233
  const detail = await getTaskDetailAsync(id);
358
234
  if (detail) emitTaskChanged(detail, "task.gate");
359
235
  if (detail && gate.status === "fail") {
360
- emitTaskSemanticNotification({
236
+ await emitTaskSemanticNotification({
361
237
  task: detail,
362
238
  transition: "gate-failed",
363
239
  actor: input.actor,
@@ -419,10 +295,8 @@ export async function removeTaskEntityRefAsync(id: number, input: RemoveTaskRefI
419
295
  * `registerAgent` — the same synchronous plugin/hook constraint as `setTaskEntityStatus` above. Every
420
296
  * other production caller (routes/tasks.ts, the MCP task tools) now calls `assignTaskEntityAgentAsync`.
421
297
  */
422
- export function assignTaskEntityAgent(id: number, agentId: string, role?: string, actor?: string): TaskDetail {
423
- const detail = assignTaskAgent(id, agentId, role, actor);
424
- emitTaskChanged(detail, "task.updated");
425
- return detail;
298
+ export async function assignTaskEntityAgent(id: number, agentId: string, role?: string, actor?: string): Promise<TaskDetail> {
299
+ return assignTaskEntityAgentAsync(id, agentId, role, actor);
426
300
  }
427
301
 
428
302
  /** The off-loop twin of assignTaskEntityAgent (S3.2 L-D2 #1904) — the sanctioned HTTP/MCP path. */
@@ -600,10 +474,10 @@ async function latestDeliverableEventAsync(taskId: number): Promise<TaskEvent |
600
474
  return [...(await listTaskEventsAsync(taskId))].reverse().find((event) => event.type === "deliverable");
601
475
  }
602
476
 
603
- function restoreDeliveredDisposition(task: TaskDetail, event: TaskEvent): void {
477
+ async function restoreDeliveredDisposition(task: TaskDetail, event: TaskEvent): Promise<void> {
604
478
  const metadata = event.metadata as unknown as Partial<TaskDeliverableEventMetadata>;
605
479
  if (metadata.disposition === "failed" && task.status !== "failed") {
606
- setTaskEntityStatus(task.id, {
480
+ await setTaskEntityStatus(task.id, {
607
481
  status: "failed",
608
482
  ...(typeof metadata.reason === "string" && metadata.reason.trim() ? { note: metadata.reason } : {}),
609
483
  actor: "task-lifecycle",
@@ -611,7 +485,7 @@ function restoreDeliveredDisposition(task: TaskDetail, event: TaskEvent): void {
611
485
  return;
612
486
  }
613
487
  if (metadata.disposition === "blocked" && task.status !== "blocked" && Array.isArray(metadata.blockedBy) && metadata.blockedBy.length > 0) {
614
- setTaskEntityStatus(task.id, {
488
+ await setTaskEntityStatus(task.id, {
615
489
  status: "blocked",
616
490
  blockedBy: metadata.blockedBy,
617
491
  ...(typeof metadata.reason === "string" && metadata.reason.trim() ? { note: metadata.reason } : {}),
@@ -643,46 +517,9 @@ async function restoreDeliveredDispositionAsync(task: TaskDetail, event: TaskEve
643
517
  // #889 — finalize bound tasks for a reaped agent whose doneWhen is "agent-exit" / "reaped".
644
518
  // Called by the transient reaper after requesting shutdown so ephemeral run-and-exit workers
645
519
  // don't leave their auto-scaffolded Task stuck in_progress forever.
646
- // Never overrides an already-terminal status. Idempotent (reapedAt guard inside markTaskAgentReaped).
647
- export function finalizeEphemeralTasksOnReap(agentId: string, opts: { spawnRequestId?: string; reason?: string; producedWork?: boolean; evidence?: string } = {}): number[] {
648
- const ids = new Set<number>();
649
- for (const id of deliverableTaskIdsByOwnerAgent(agentId)) ids.add(id);
650
- if (opts.spawnRequestId) {
651
- for (const id of deliverableTaskIdsBySpawnRequestId(opts.spawnRequestId)) ids.add(id);
652
- }
653
- const finalized: number[] = [];
654
- for (const taskId of ids) {
655
- const task = getTaskDetail(taskId);
656
- if (!task) continue;
657
- if (task.status === "done" || task.status === "failed" || task.status === "canceled") continue;
658
- if (!isAgentExitDoneWhen(task.doneWhen)) continue;
659
- if (opts.producedWork === false) {
660
- try {
661
- const deliverable = latestDeliverableEvent(taskId);
662
- if (deliverable) {
663
- if (!task.reapedAt) markTaskAgentReaped(taskId, { agentId, reason: opts.reason ?? "agent-exit" });
664
- restoreDeliveredDisposition(task, deliverable);
665
- finalized.push(taskId);
666
- continue;
667
- }
668
- if (!task.reapedAt) markTaskAgentReaped(taskId, { agentId, reason: opts.reason ?? "agent-exit" });
669
- setTaskEntityStatus(taskId, { status: "canceled", note: "worker reaped without landing or producing work; task canceled", actor: "task-lifecycle" });
670
- notifyEmptyTransientReap(agentId, task, opts);
671
- finalized.push(taskId);
672
- } catch {
673
- // best-effort; failures must not surface into the reaper scan
674
- }
675
- continue;
676
- }
677
- try {
678
- if (!task.reapedAt) markTaskAgentReaped(taskId, { agentId, reason: opts.reason ?? "agent-exit" });
679
- setTaskEntityStatus(taskId, { status: validationCompletionStatus(task.validationItems), note: "doneWhen=agent-exit satisfied by worker reap", actor: "task-lifecycle" });
680
- finalized.push(taskId);
681
- } catch {
682
- // best-effort; failures must not surface into the reaper scan
683
- }
684
- }
685
- return finalized;
520
+ // Never overrides an already-terminal status. Idempotent (reapedAt guard inside markTaskAgentReapedAsync).
521
+ export async function finalizeEphemeralTasksOnReap(agentId: string, opts: { spawnRequestId?: string; reason?: string; producedWork?: boolean; evidence?: string } = {}): Promise<number[]> {
522
+ return finalizeEphemeralTasksOnReapAsync(agentId, opts);
686
523
  }
687
524
 
688
525
  /** The off-loop twin of finalizeEphemeralTasksOnReap (S3.2 L-D2 #1904) — the sanctioned scheduled-job
@@ -710,7 +547,7 @@ export async function finalizeEphemeralTasksOnReapAsync(agentId: string, opts: {
710
547
  }
711
548
  if (!task.reapedAt) await markTaskAgentReapedAsync(taskId, { agentId, reason: opts.reason ?? "agent-exit" });
712
549
  await setTaskEntityStatusAsync(taskId, { status: "canceled", note: "worker reaped without landing or producing work; task canceled", actor: "task-lifecycle" });
713
- notifyEmptyTransientReap(agentId, task, opts);
550
+ await notifyEmptyTransientReap(agentId, task, opts);
714
551
  finalized.push(taskId);
715
552
  } catch {
716
553
  // best-effort; failures must not surface into the reaper scan
@@ -728,7 +565,7 @@ export async function finalizeEphemeralTasksOnReapAsync(agentId: string, opts: {
728
565
  return finalized;
729
566
  }
730
567
 
731
- function notifyEmptyTransientReap(agentId: string, task: TaskDetail, opts: { spawnRequestId?: string; reason?: string; evidence?: string }): void {
568
+ async function notifyEmptyTransientReap(agentId: string, task: TaskDetail, opts: { spawnRequestId?: string; reason?: string; evidence?: string }): Promise<void> {
732
569
  const agent = getAgent(agentId);
733
570
  const parent = agent?.spawnedBy;
734
571
  const recipients = [...new Set([parent, taskOwnerTarget(task)].filter((value): value is string => Boolean(value && value.trim())))];
@@ -743,7 +580,7 @@ function notifyEmptyTransientReap(agentId: string, task: TaskDetail, opts: { spa
743
580
  evidence: opts.evidence ?? "no-produced-work",
744
581
  };
745
582
  emitRelayEvent({ type: "agent.transient_empty_reap", source: "task-lifecycle", subject: agentId, data: payload });
746
- routeNotification({
583
+ await routeNotification({
747
584
  type: "agent.transient_empty_reap",
748
585
  scope: { agentId, parent, taskId: String(task.id) },
749
586
  recipients,
@@ -1,3 +1,5 @@
1
+ import { addTaskRefAsync } from "../db/task-entity-async";
2
+ import { insertTaskEventAsync } from "../db/runtime-tail-async";
1
3
  // #834/#2214 — the Task ↔ issue ATTACH seam: everything that turns "this Task is about issue N"
2
4
  // into a real `issue_associations` row, split out of the task-entity service (which owns status /
3
5
  // stage / gates / attribution) so both stay under the file-size ratchet and this rule has one home.
@@ -11,18 +13,9 @@
11
13
  // - after create — `relay_task_add_ref` / `POST /api/tasks/:id/refs` via attachTaskRefs.
12
14
  // Both resolve a bare `#N` through the same default-repo chain (see issueRepoForCreate).
13
15
  import { errMessage } from "@humwick/sdk";
14
- import {
15
- addTaskRef,
16
- addTaskRefAsync,
17
- getTaskDetail,
18
- getTaskDetailAsync,
19
- ValidationError,
20
- type AddTaskRefInput,
21
- type CreateDeliverableTaskInput,
22
- type TaskEntityWriteOptions,
23
- } from "../db";
16
+ import { getTaskDetail, getTaskDetailAsync, ValidationError, type AddTaskRefInput, type CreateDeliverableTaskInput, type TaskEntityWriteOptions } from "../db";
24
17
  import { isBareIssueRef } from "../db/issue-refs";
25
- import { insertTaskEvent } from "../db/task-core";
18
+
26
19
  import { resolveActorIssueRepo } from "../agent-issue-repo";
27
20
  import { emitTaskChanged } from "../sse";
28
21
  import { cleanIssueRefRelation } from "../db/task-issue-relation";
@@ -54,31 +47,31 @@ export function issueRepoForCreate(input: CreateTaskEntityInput): string | undef
54
47
  // A ref the caller ASKED for that could not be linked must not vanish into a server log: record it
55
48
  // on the Task's own ledger so it shows up in history (and in a spawned worker's hydrated brief).
56
49
  // Creation itself still succeeds — a Task without its issue link is degraded, not invalid.
57
- function recordIssueLinkFailure(taskId: number, issue: string, defaultRepo: string | undefined, error: unknown): void {
50
+ async function recordIssueLinkFailure(taskId: number, issue: string, defaultRepo: string | undefined, error: unknown): Promise<void> {
58
51
  const message = errMessage(error);
59
52
  console.warn(`task ${taskId} issue ref '${issue}' could not be linked on create: ${message}`);
60
53
  try {
61
- insertTaskEvent(taskId, {
54
+ (await insertTaskEventAsync(taskId, {
62
55
  source: "agent-relay",
63
56
  type: "ref.issue.link_failed",
64
57
  severity: "warning",
65
58
  title: `Issue ref '${issue}' could not be linked`,
66
59
  body: message,
67
60
  metadata: { issue, ...(defaultRepo ? { defaultRepo } : {}) },
68
- }, Date.now());
61
+ }, Date.now()));
69
62
  } catch (eventError) {
70
63
  console.warn(`task ${taskId} could not record issue-link failure: ${errMessage(eventError)}`);
71
64
  }
72
65
  }
73
66
 
74
- export function addInitialIssueRefs(taskId: number, input: CreateTaskEntityInput): TaskDetail {
67
+ export async function addInitialIssueRefs(taskId: number, input: CreateTaskEntityInput): Promise<TaskDetail> {
75
68
  const defaultRepo = issueRepoForCreate(input);
76
69
  let detail = getTaskDetail(taskId)!;
77
70
  for (const { issue, relation } of initialIssueRefs(input)) {
78
71
  try {
79
- detail = addTaskRef(taskId, { issue, relation, defaultRepo, actor: input.createdBy });
72
+ detail = (await addTaskRefAsync(taskId, { issue, relation, defaultRepo, actor: input.createdBy }));
80
73
  } catch (error) {
81
- recordIssueLinkFailure(taskId, issue, defaultRepo, error);
74
+ (await recordIssueLinkFailure(taskId, issue, defaultRepo, error));
82
75
  }
83
76
  }
84
77
  return detail;
@@ -95,7 +88,7 @@ export async function addInitialIssueRefsAsync(taskId: number, input: CreateTask
95
88
  ...(options?.idempotencyKey ? { idempotencyKey: `${options.idempotencyKey}:initial-ref:${index}` } : {}),
96
89
  });
97
90
  } catch (error) {
98
- recordIssueLinkFailure(taskId, issue, defaultRepo, error);
91
+ (await recordIssueLinkFailure(taskId, issue, defaultRepo, error));
99
92
  }
100
93
  }
101
94
  return detail;
@@ -115,8 +108,8 @@ function needsIssueRepo(input: AddTaskRefInput): boolean {
115
108
  return isBareIssueRef(input.issue) && !input.defaultRepo?.trim();
116
109
  }
117
110
 
118
- export function addTaskEntityRef(id: number, input: AddTaskRefInput): TaskDetail {
119
- const detail = addTaskRef(id, needsIssueRepo(input) ? withResolvedIssueRepo(input, getTaskDetail(id)) : input);
111
+ export async function addTaskEntityRef(id: number, input: AddTaskRefInput): Promise<TaskDetail> {
112
+ const detail = (await addTaskRefAsync(id, needsIssueRepo(input) ? withResolvedIssueRepo(input, getTaskDetail(id)) : input));
120
113
  emitTaskChanged(detail, "task.updated");
121
114
  return detail;
122
115
  }
@@ -1,3 +1,4 @@
1
+ import { insertTaskEventAsync } from "../db/runtime-tail-async";
1
2
  // #833 — the Task ↔ GitHub issue weave-through. This is the WRITE-THROUGH lens that
2
3
  // the design refinement (weave-in, not duplicate) calls for: a comment on a Task does
3
4
  // not land in a relay table that can drift — it writes a structured comment THROUGH to
@@ -32,7 +33,7 @@ import { getTaskDetail } from "../db/task-entity";
32
33
  import { getTaskDetailAsync } from "../db/task-entity-async";
33
34
  import { getIssueRef } from "../db/issue-refs";
34
35
  import { listSuccessfulCloseActionsForIssueRef } from "../db/issue-lifecycle";
35
- import { insertTaskEvent, getTaskEvent } from "../db/task-core";
36
+ import { getTaskEvent } from "../db/task-core";
36
37
  import { listTaskEvents } from "../db/tasks";
37
38
  import { type TaskCommentThroughKind, type TaskCommentThroughRecord } from "../db/task-comment-through";
38
39
  import { failCommentThroughAsync, finalizeCommentThroughAsync, reserveCommentThroughAsync } from "../db/task-comment-through-async";
@@ -249,7 +250,7 @@ async function reconcileReclaim(params: {
249
250
  body: string;
250
251
  githubLinks: TaskIssueLink[];
251
252
  reservation: TaskCommentThroughRecord;
252
- recordReceipt: (posted: TaskIssueLink[], failed: Array<{ link: TaskIssueLink; error: string }>) => TaskEvent;
253
+ recordReceipt: (posted: TaskIssueLink[], failed: Array<{ link: TaskIssueLink; error: string }>) => Promise<TaskEvent>;
253
254
  opts: WeaveOptions;
254
255
  }): Promise<WeaveWriteResult> {
255
256
  const { taskId, kind, slotKey, payload, body, githubLinks, reservation, recordReceipt, opts } = params;
@@ -281,7 +282,7 @@ async function reconcileReclaim(params: {
281
282
  }
282
283
 
283
284
  // Every link now satisfied (already-present + freshly-posted) → finalize exactly once.
284
- const event = recordReceipt(posted, []);
285
+ const event = await recordReceipt(posted, []);
285
286
  await finalizeCommentThroughAsync(reservation.id, event.id);
286
287
  await emitChanged(taskId);
287
288
  return { taskId, posted, failed: [], event, deduped: recon.missing.length === 0 };
@@ -351,8 +352,8 @@ export async function commentOnTaskThrough(input: CommentOnTaskInput, opts: Weav
351
352
  // The success-scoped receipt writer (shared by the normal-post and reconcile-found paths):
352
353
  // an AUDIT of what actually landed on GitHub (posted only), not a second store of the
353
354
  // discussion. GitHub stays canonical; the Task renders by reading it back.
354
- const recordReceipt = (posted: TaskIssueLink[], failed: Array<{ link: TaskIssueLink; error: string }>): TaskEvent =>
355
- insertTaskEvent(taskId, {
355
+ const recordReceipt = async (posted: TaskIssueLink[], failed: Array<{ link: TaskIssueLink; error: string }>): Promise<TaskEvent> =>
356
+ (await insertTaskEventAsync(taskId, {
356
357
  source: author,
357
358
  type: "comment.posted",
358
359
  severity: "info",
@@ -365,7 +366,7 @@ export async function commentOnTaskThrough(input: CommentOnTaskInput, opts: Weav
365
366
  posted: posted.map((l) => ({ issueRefId: l.issueRefId, repo: l.repo, externalKey: l.externalKey, url: l.url })),
366
367
  ...(failed.length > 0 ? { failed: failed.map((f) => ({ issueRefId: f.link.issueRefId, error: f.error })) } : {}),
367
368
  },
368
- }, Date.now());
369
+ }, Date.now()));
369
370
 
370
371
  // Idempotency = reserve→post→finalize (NOT scan→post→insert): the (taskId,kind,clientId)
371
372
  // slot is claimed TRANSACTIONALLY before the awaited GitHub append, so concurrent same-key
@@ -401,7 +402,7 @@ export async function commentOnTaskThrough(input: CommentOnTaskInput, opts: Weav
401
402
  );
402
403
  }
403
404
 
404
- const event = recordReceipt(result.posted, result.failed);
405
+ const event = (await recordReceipt(result.posted, result.failed));
405
406
  if (reservation) await finalizeCommentThroughAsync(reservation.id, event.id);
406
407
  await emitChanged(taskId);
407
408
  return { taskId, posted: result.posted, failed: result.failed, event, deduped: false };
@@ -452,8 +453,8 @@ export async function postTaskMilestoneComment(input: MilestoneCommentInput, opt
452
453
  const body = `${summary}${input.commitSha ? `\ncommit: \`${input.commitSha.slice(0, 12)}\`` : ""}${gatesLine(input.gates)}`;
453
454
  const payload: TaskCommentPayload = { v: TASK_COMMENT_FORMAT_VERSION, kind: "milestone", taskId, author, milestone, ...(slotKey ? { key: slotKey } : {}) };
454
455
 
455
- const recordReceipt = (posted: TaskIssueLink[], failed: Array<{ link: TaskIssueLink; error: string }>): TaskEvent =>
456
- insertTaskEvent(taskId, {
456
+ const recordReceipt = async (posted: TaskIssueLink[], failed: Array<{ link: TaskIssueLink; error: string }>): Promise<TaskEvent> =>
457
+ (await insertTaskEventAsync(taskId, {
457
458
  source: author,
458
459
  type: "milestone.posted",
459
460
  severity: "info",
@@ -468,7 +469,7 @@ export async function postTaskMilestoneComment(input: MilestoneCommentInput, opt
468
469
  posted: posted.map((l) => ({ issueRefId: l.issueRefId, repo: l.repo, externalKey: l.externalKey, url: l.url })),
469
470
  ...(failed.length > 0 ? { failed: failed.map((f) => ({ issueRefId: f.link.issueRefId, error: f.error })) } : {}),
470
471
  },
471
- }, Date.now());
472
+ }, Date.now()));
472
473
 
473
474
  // Same reserve→post→finalize + reconcile-on-reclaim discipline as discussion, so a re-fired
474
475
  // land posts at most one summary even across concurrency and post-before-finalize crashes.
@@ -502,7 +503,7 @@ export async function postTaskMilestoneComment(input: MilestoneCommentInput, opt
502
503
  );
503
504
  }
504
505
 
505
- const event = recordReceipt(result.posted, result.failed);
506
+ const event = (await recordReceipt(result.posted, result.failed));
506
507
  if (reservation) await finalizeCommentThroughAsync(reservation.id, event.id);
507
508
  await emitChanged(taskId);
508
509
  return { taskId, posted: result.posted, failed: result.failed, event, deduped: false };