@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
@@ -11,7 +11,7 @@
11
11
 
12
12
  import { ValidationError } from "./db";
13
13
  import { McpNotFoundError } from "./mcp-errors";
14
- import { listMaintenanceJobs } from "./maintenance";
14
+ import { listMaintenanceJobsAsync } from "./maintenance";
15
15
  import { listPauses, pauseJob, resumeJobAsync } from "./maintenance/pauses";
16
16
  import { authContextFromMcp } from "./services/auth-context";
17
17
  import { cleanString } from "./validation";
@@ -72,7 +72,7 @@ export async function relayMaintenanceTool(auth: McpAuthLike, name: string, args
72
72
  }
73
73
 
74
74
  if (name === "relay_maintenance_jobs") {
75
- const jobs = listMaintenanceJobs();
75
+ const jobs = await listMaintenanceJobsAsync();
76
76
  const jobId = cleanString(args.jobId, "jobId", { max: 120 });
77
77
  if (!jobId) return { jobs, count: jobs.length };
78
78
  const job = jobs.find(candidate => candidate.id === jobId);
@@ -29,24 +29,24 @@ export const MERGE_TOOLS = [
29
29
 
30
30
  type McpAuthLike = Parameters<typeof authContextFromMcp>[0];
31
31
 
32
- export function relayMergeTool(auth: McpAuthLike, name: string, args: Record<string, unknown>): Record<string, unknown> {
32
+ export async function relayMergeTool(auth: McpAuthLike, name: string, args: Record<string, unknown>): Promise<Record<string, unknown>> {
33
33
  const ctx = authContextFromMcp(auth);
34
34
  if (name === "relay_merge_pauses") {
35
35
  const pauses = listAutoMergePauses();
36
36
  return { pauses, count: pauses.length };
37
37
  }
38
38
  if (name === "relay_merge_pause") {
39
- const result = pauseAutoMerge({
39
+ const result = (await pauseAutoMerge({
40
40
  repoRoot: cleanString(args.repoRoot, "repoRoot", { required: true, max: 1024 })!,
41
41
  baseRef: cleanString(args.baseRef, "baseRef", { max: 240 }),
42
42
  holder: cleanString(args.holder, "holder", { max: 240 }) ?? ctx.callerAgentId ?? ctx.actor.id,
43
43
  reason: cleanString(args.reason, "reason", { max: 1000 }),
44
44
  ttlMs: optionalPositiveInt(args.ttlMs, "ttlMs"),
45
- });
45
+ }));
46
46
  return result.ok ? { ok: true, pause: result.pause } : { ok: false, error: "merge target already paused", pause: result.pause };
47
47
  }
48
48
  if (name === "relay_merge_renew") {
49
- const pause = renewAutoMergePause(cleanString(args.id, "id", { required: true, max: 120 })!, optionalPositiveInt(args.ttlMs, "ttlMs"));
49
+ const pause = (await renewAutoMergePause(cleanString(args.id, "id", { required: true, max: 120 })!, optionalPositiveInt(args.ttlMs, "ttlMs")));
50
50
  if (!pause) throw new McpNotFoundError("merge pause not found or expired");
51
51
  return { pause };
52
52
  }
@@ -54,7 +54,7 @@ export function relayMergeTool(auth: McpAuthLike, name: string, args: Record<str
54
54
  const id = cleanString(args.id, "id", { max: 120 });
55
55
  const repoRoot = cleanString(args.repoRoot, "repoRoot", { max: 1024 });
56
56
  if (!id && !repoRoot) throw new ValidationError("id or repoRoot required");
57
- return { released: resumeAutoMerge({ id, repoRoot, baseRef: cleanString(args.baseRef, "baseRef", { max: 240 }) }) };
57
+ return { released: (await resumeAutoMerge({ id, repoRoot, baseRef: cleanString(args.baseRef, "baseRef", { max: 240 }) })) };
58
58
  }
59
59
  throw new ValidationError(`unknown tool: ${name}`);
60
60
  }
@@ -1,5 +1,5 @@
1
+ import { addSubscriptionAsync, addSubscriptionsAsync, removeSubscriptionAsync } from "./db/lifecycle-tail-async";
1
2
  import {
2
- addSubscription,
3
3
  childStreamFromSubscriptionType,
4
4
  childStreamSubscriptionType,
5
5
  cleanChildStream,
@@ -9,7 +9,6 @@ import {
9
9
  listSubscriptions,
10
10
  NOTIFICATION_SUBSCRIPTION_MODES,
11
11
  NOTIFICATION_SUBSCRIPTION_TYPES,
12
- removeSubscription,
13
12
  type ConfigurableChildStream,
14
13
  type ChildStream,
15
14
  type NotificationSubscriptionMode,
@@ -112,14 +111,14 @@ export async function relayNotificationSubscriptionTool(
112
111
  if (Object.prototype.hasOwnProperty.call(args, "streams")) {
113
112
  const scope = cleanChildStreamScope(args, agentId);
114
113
  const streams = cleanChildStreams(args.streams);
115
- const subscriptions = streams
114
+ const subscriptions = await addSubscriptionsAsync(streams
116
115
  .filter((stream): stream is ConfigurableChildStream => stream !== "responses")
117
- .map((stream) => addSubscription({
116
+ .map((stream) => ({
118
117
  agentId,
119
118
  type: childStreamSubscriptionType(stream),
120
119
  mode: cleanModeOrDefault(args.mode),
121
120
  scopeMatch: scope,
122
- }));
121
+ })));
123
122
  return {
124
123
  subscriptions,
125
124
  childStreamFilter: {
@@ -132,21 +131,21 @@ export async function relayNotificationSubscriptionTool(
132
131
  if (Object.prototype.hasOwnProperty.call(args, "taskId")) {
133
132
  const scope = await taskScope(ctx, args.taskId, args.scope);
134
133
  const mode = cleanModeOrDefault(args.mode);
135
- const subscriptions = TASK_NOTIFICATION_TYPES.map((type) => addSubscription({
134
+ const subscriptions = await addSubscriptionsAsync(TASK_NOTIFICATION_TYPES.map((type) => ({
136
135
  agentId,
137
136
  type,
138
137
  mode,
139
138
  scopeMatch: scope,
140
- }));
139
+ })));
141
140
  return { subscriptions, taskFilter: scope };
142
141
  }
143
142
  if (args.type === undefined || args.type === null) throw new ValidationError("type or streams required");
144
- const subscription = addSubscription({
143
+ const subscription = (await addSubscriptionAsync({
145
144
  agentId,
146
145
  type: cleanSubscriptionType(args.type),
147
146
  mode: cleanModeOrDefault(args.mode),
148
147
  scopeMatch: cleanScope(args.scope),
149
- });
148
+ }));
150
149
  return { subscription };
151
150
  }
152
151
  if (name === "relay_unsubscribe") {
@@ -157,12 +156,12 @@ export async function relayNotificationSubscriptionTool(
157
156
  let removed = 0;
158
157
  for (const stream of streams) {
159
158
  if (stream === "responses") continue;
160
- removed += removeSubscription({
159
+ removed += (await removeSubscriptionAsync({
161
160
  agentId,
162
161
  type: childStreamSubscriptionType(stream),
163
162
  mode: args.mode === undefined || args.mode === null ? undefined : cleanSubscriptionMode(args.mode),
164
163
  scopeMatch: scope,
165
- });
164
+ }));
166
165
  }
167
166
  return { removed, responsesAlwaysOn: true };
168
167
  }
@@ -173,24 +172,24 @@ export async function relayNotificationSubscriptionTool(
173
172
  : [cleanSubscriptionType(args.type)];
174
173
  let removed = 0;
175
174
  for (const type of types) {
176
- removed += removeSubscription({
175
+ removed += (await removeSubscriptionAsync({
177
176
  agentId,
178
177
  type,
179
178
  mode: args.mode === undefined || args.mode === null ? undefined : cleanSubscriptionMode(args.mode),
180
179
  scopeMatch: scope,
181
- });
180
+ }));
182
181
  }
183
182
  return { removed };
184
183
  }
185
184
  const type = args.type === undefined || args.type === null ? undefined : cleanSubscriptionType(args.type);
186
185
  if (!id && !type) throw new ValidationError("id or type required");
187
- const removed = removeSubscription({
186
+ const removed = (await removeSubscriptionAsync({
188
187
  agentId,
189
188
  id,
190
189
  type,
191
190
  mode: args.mode === undefined || args.mode === null ? undefined : cleanSubscriptionMode(args.mode),
192
191
  ...(Object.prototype.hasOwnProperty.call(args, "scope") ? { scopeMatch: cleanScope(args.scope) } : {}),
193
- });
192
+ }));
194
193
  return { removed };
195
194
  }
196
195
  if (name === "relay_list_subscriptions") {
@@ -58,7 +58,7 @@ export async function seedOutputFixture(database: ReturnType<typeof db.getDb>) {
58
58
  await call("relay_decision", { action: "file", title: "Choose output convention", context: OUTPUT_BODY, questions: [{ prompt: "Adopt canonical verbosity?", kind: "text" }] });
59
59
  db.upsertWorkspace({ id: "output-ws", repoRoot: process.cwd(), sourceCwd: process.cwd(), worktreePath: process.cwd(), branch: "agent/output", orchestratorId: "output-host", ownerAgentId: caller, mode: "isolated", status: "active", metadata: {} });
60
60
  db.recordCrashReport({ agentId: "output-worker-0", parentId: caller, reason: "Provider exited", diagnosis: { cause: "provider-crash", confidence: "high", summary: "Provider exited with nonzero status", evidence: [OUTPUT_BODY], detectedAt: 1000 }, createdAt: 1000 });
61
- const notification = routeNotification({ type: "agent.ready", scope: { agentId: "output-worker-0", parent: caller }, recipients: [caller], message: { body: "Worker ready" } })[0]!;
61
+ const notification = (await routeNotification({ type: "agent.ready", scope: { agentId: "output-worker-0", parent: caller }, recipients: [caller], message: { body: "Worker ready" } }))[0]!;
62
62
  const host = createSqliteModuleHost({ db: database, clock: createControllableClock(1000) });
63
63
  host.register(timers);
64
64
  const timer = await host.invoke(timers, "create", { actor: `runner:${caller}`, grants: ["timers:write"] }, { fireAt: 2000 }) as Timer;
@@ -3,7 +3,7 @@ import { INCLUDED_TOOL_SCOPE_NEEDS } from "./mcp/tool-groups";
3
3
  import { ValidationError } from "./db";
4
4
  import { callerAgentId } from "./mcp/identity";
5
5
  import { optionalEnum } from "./validation";
6
- import { approveProfileProjectTrust, PROJECT_REVIEW_MODES, PROJECT_TRUST_CAPABILITIES, updateProfileProjectTrust } from "./services/profile-trust";
6
+ import { approveProfileProjectTrust, PROJECT_REVIEW_MODES, PROJECT_TRUST_CAPABILITIES, updateProfileProjectTrustAsync } from "./services/profile-trust";
7
7
  import type { McpAuthContext, ToolDefinition } from "./mcp/types";
8
8
 
9
9
  export const PROFILE_TRUST_TOOL: ToolDefinition = {
@@ -31,17 +31,17 @@ function text(args: Record<string, unknown>, field: string): string {
31
31
  return value.trim();
32
32
  }
33
33
 
34
- export function relayProfileTrust(auth: McpAuthContext, args: Record<string, unknown>): unknown {
34
+ export async function relayProfileTrust(auth: McpAuthContext, args: Record<string, unknown>): Promise<unknown> {
35
35
  const name = text(args, "profile");
36
36
  const by = callerAgentId(auth) ?? auth.actor;
37
37
  if (args.action === "set-review") {
38
38
  const review = optionalEnum(args.review, "review", PROJECT_REVIEW_MODES);
39
39
  if (!review) throw new ValidationError("review is required");
40
- return { trust: updateProfileProjectTrust(name, { review }, by).value.sources?.project?.trust };
40
+ return { trust: (await updateProfileProjectTrustAsync(name, { review }, by)).value.sources?.project?.trust };
41
41
  }
42
42
  const capability = optionalEnum(args.capability, "capability", PROJECT_TRUST_CAPABILITIES);
43
43
  if (!capability) throw new ValidationError("capability is required");
44
- if (args.action === "ack") return { ack: updateProfileProjectTrust(name, { ack: [capability] }, by).value.sources?.project?.[capability]?.ack };
45
- if (args.action === "approve") return { approval: approveProfileProjectTrust({ name, capability, repoKey: text(args, "repoKey"), value: text(args, "value"), by }) };
44
+ if (args.action === "ack") return { ack: (await updateProfileProjectTrustAsync(name, { ack: [capability] }, by)).value.sources?.project?.[capability]?.ack };
45
+ if (args.action === "approve") return { approval: (await approveProfileProjectTrust({ name, capability, repoKey: text(args, "repoKey"), value: text(args, "value"), by })) };
46
46
  throw new ValidationError("action must be set-review, ack or approve");
47
47
  }
@@ -1,13 +1,5 @@
1
- import {
2
- isProjectJournalField,
3
- listProjectJournal,
4
- listProjectJournalHistory,
5
- PROJECT_JOURNAL_FIELDS,
6
- PROJECT_JOURNAL_FIELD_LABELS,
7
- setProjectJournalFields,
8
- ValidationError,
9
- type ProjectJournalField,
10
- } from "./db";
1
+ import { setProjectJournalFieldsAsync } from "./db/runtime-tail-async";
2
+ import { isProjectJournalField, listProjectJournal, listProjectJournalHistory, PROJECT_JOURNAL_FIELDS, PROJECT_JOURNAL_FIELD_LABELS, ValidationError, type ProjectJournalField } from "./db";
11
3
  import { callerProjectId } from "./mcp-project-tools";
12
4
  import { formatRelativeTime } from "./mcp/presentation";
13
5
  import { authContextFromMcp, type AuthContext } from "./services/auth-context";
@@ -109,7 +101,7 @@ function journalFieldViews(projectId: string, profile: string, filter: ProjectJo
109
101
  });
110
102
  }
111
103
 
112
- export function relayProjectJournalTool(auth: McpAuthLike, name: string, args: Record<string, unknown>): Record<string, unknown> {
104
+ export async function relayProjectJournalTool(auth: McpAuthLike, name: string, args: Record<string, unknown>): Promise<Record<string, unknown>> {
113
105
  const ctx = authContextFromMcp(auth);
114
106
  const { projectId, profile } = journalScope(ctx);
115
107
 
@@ -127,7 +119,7 @@ export function relayProjectJournalTool(auth: McpAuthLike, name: string, args: R
127
119
  }
128
120
  fields[field] = value;
129
121
  }
130
- setProjectJournalFields({ projectId, profile, fields, changedBy: authorId(ctx) });
122
+ (await setProjectJournalFieldsAsync({ projectId, profile, fields, changedBy: authorId(ctx) }));
131
123
  return { ok: true };
132
124
  }
133
125
 
@@ -1,33 +1,32 @@
1
- import { validateProjectEntryText } from "./validation";
1
+ import { validateProjectEntryText, cleanString, cleanStringArray, optionalEnum } from "./validation";
2
2
  import { bindProjectCheckout, unbindProjectCheckout } from "./services/project-checkout-binding";
3
3
  import type { ToolDefinition } from "./mcp/types";
4
4
  import { PROJECT_ENTRY_SEARCH_PROPERTIES } from "./mcp/project-entry-search-schema";
5
5
  import { archiveProject, checkoutStatus, removeCheckout, onboardProject, registerProjectRoot } from "./services/project-onboarding";
6
6
  import {
7
- addEdge,
7
+ addEdgeAsync,
8
8
  edgesFor,
9
9
  getAgent,
10
10
  getProject,
11
- getProjectEntry,
11
+ getProjectEntryAsync,
12
12
  listProjects,
13
- promoteBlackboardEntry,
13
+ promoteBlackboardEntryAsync,
14
14
  readMemoryEntriesByIdsAsync,
15
- removeEdge,
15
+ removeEdgeAsync,
16
16
  resolveProject,
17
17
  resolveProjectEntriesAsync,
18
18
  resolveProjectForCwd,
19
- retractProjectEntry,
19
+ retractProjectEntryAsync,
20
20
  rootsForProject,
21
21
  searchProjectEntriesAsync,
22
22
  ValidationError,
23
- writeProjectEntry,
23
+ writeProjectEntryAsync,
24
24
  } from "./db";
25
25
  import { McpAuthError, McpNotFoundError } from "./mcp-errors";
26
26
  import { authContextFromMcp, type AuthContext } from "./services/auth-context";
27
27
  import { callerMemoryIdentity, callerProfile, resolveAgentWriteInject, resolveMemoryAudience } from "./services/memory-identity";
28
28
  import { areaCallerFromCtx, MEMORY_AREAS_SCHEMA, areaDeliveryReport, resolveWriteAreas } from "./services/memory-areas";
29
29
  import { ingestProjectClaudeMd } from "./services/project";
30
- import { cleanString, cleanStringArray, optionalEnum } from "./validation";
31
30
  import { PROJECT_EDGE_KINDS, PROJECT_ENTRY_INJECT_TIERS, PROJECT_ENTRY_KINDS, PROJECT_ENTRY_SOURCES, type ProjectEdgeKind, type ProjectEntry, type ProjectEntryInject, type ProjectEntryKind, type ProjectEntrySource } from "./types";
32
31
 
33
32
  const PROJECT_EDGE_INPUT_SCHEMA = {
@@ -267,8 +266,8 @@ function requireProjectId(ref: unknown, field: string): string {
267
266
  /** Load `entryId` and confirm it belongs to `projectId`, or throw not-found. Returns the entry
268
267
  * (not just void) so a supersede caller can reuse it — e.g. to inherit its audience (#2268)
269
268
  * instead of re-fetching. */
270
- function ensureSameProject(entryId: string, projectId: string): ProjectEntry {
271
- const entry = getProjectEntry(entryId);
269
+ async function ensureSameProject(entryId: string, projectId: string): Promise<ProjectEntry> {
270
+ const entry = await getProjectEntryAsync(entryId);
272
271
  if (!entry) throw new McpNotFoundError("project entry not found");
273
272
  if (entry.projectId !== projectId) throw new McpNotFoundError("project entry not found");
274
273
  return entry;
@@ -326,7 +325,7 @@ export async function relayProjectTool(auth: McpAuthLike, name: string, args: Re
326
325
  // previously-universal (`all`) rule silently stops injecting for every other role the moment
327
326
  // anyone re-saves it without naming an audience. Only true omission inherits; `self` still
328
327
  // means "just me" even here.
329
- const priorEntry = supersedes ? ensureSameProject(supersedes, projectId) : undefined;
328
+ const priorEntry = supersedes ? await ensureSameProject(supersedes, projectId) : undefined;
330
329
  const anchor = getProject(projectId);
331
330
  if (!anchor) throw new McpNotFoundError("project not found");
332
331
  const areas = await resolveWriteAreas(anchor, areaCallerFromCtx(ctx), args.areas, { prior: priorEntry?.areas });
@@ -335,7 +334,7 @@ export async function relayProjectTool(auth: McpAuthLike, name: string, args: Re
335
334
  callerProfile(ctx),
336
335
  { kind, ...(priorEntry ? { priorInject: priorEntry.inject } : {}) },
337
336
  );
338
- const entry = writeProjectEntry({
337
+ const entry = await writeProjectEntryAsync({
339
338
  projectId,
340
339
  authorId: authorId(ctx),
341
340
  kind,
@@ -354,7 +353,7 @@ export async function relayProjectTool(auth: McpAuthLike, name: string, args: Re
354
353
  inject: tier.inject,
355
354
  areas,
356
355
  });
357
- return { ...entry, ...(tier.note ? { injectNote: tier.note } : {}), ...areaDeliveryReport(entry) } as unknown as Record<string, unknown>;
356
+ return { ...entry, ...(tier.note ? { injectNote: tier.note } : {}), ...await areaDeliveryReport(entry) } as unknown as Record<string, unknown>;
358
357
  }
359
358
 
360
359
  if (name === "relay_project_read") {
@@ -386,8 +385,8 @@ export async function relayProjectTool(auth: McpAuthLike, name: string, args: Re
386
385
  if (name === "relay_project_retract") {
387
386
  const projectId = targetProjectId(ctx, cleanString(args.project, "project", { max: 200 }));
388
387
  const id = cleanString(args.id, "id", { required: true, max: 120 })!;
389
- ensureSameProject(id, projectId);
390
- const entry = retractProjectEntry(id);
388
+ await ensureSameProject(id, projectId);
389
+ const entry = await retractProjectEntryAsync(id);
391
390
  if (!entry) throw new McpNotFoundError("project entry not found");
392
391
  return entry as unknown as Record<string, unknown>;
393
392
  }
@@ -395,21 +394,21 @@ export async function relayProjectTool(auth: McpAuthLike, name: string, args: Re
395
394
  if (name === "relay_project_add_edge") {
396
395
  const from = requireProjectId(args.from, "from");
397
396
  const to = requireProjectId(args.to, "to");
398
- const edge = addEdge(from, to, cleanEdgeKind(args.kind));
397
+ const edge = await addEdgeAsync(from, to, cleanEdgeKind(args.kind));
399
398
  return { edge: edge as unknown as Record<string, unknown> };
400
399
  }
401
400
 
402
401
  if (name === "relay_project_remove_edge") {
403
402
  const from = requireProjectId(args.from, "from");
404
403
  const to = requireProjectId(args.to, "to");
405
- const removed = removeEdge(from, to, cleanEdgeKind(args.kind));
404
+ const removed = await removeEdgeAsync(from, to, cleanEdgeKind(args.kind));
406
405
  return { removed };
407
406
  }
408
407
 
409
408
  if (name === "relay_project_promote_entry") {
410
409
  const projectId = targetProjectId(ctx, cleanString(args.project, "project", { max: 200 }));
411
410
  const blackboardEntryId = cleanString(args.blackboardEntryId, "blackboardEntryId", { required: true, max: 120 })!;
412
- return promoteBlackboardEntry({ blackboardEntryId, projectId }) as unknown as Record<string, unknown>;
411
+ return await promoteBlackboardEntryAsync({ blackboardEntryId, projectId }) as unknown as Record<string, unknown>;
413
412
  }
414
413
 
415
414
  if (name === "relay_project_ingest_claudemd") {
@@ -1,9 +1,9 @@
1
- import { VALID_EFFORTS, isRecord } from "@humwick/sdk";
1
+ import { isRecord } from "@humwick/sdk";
2
2
  import { effectiveProviderEffortLevelsAsync } from "./db";
3
3
 
4
4
  export async function providerCatalogToolInputSchema(name: string, inputSchema: Record<string, unknown>): Promise<Record<string, unknown>> {
5
5
  if (name !== "relay_spawn_agent") return inputSchema;
6
6
  const efforts = await effectiveProviderEffortLevelsAsync();
7
7
  const properties = isRecord(inputSchema.properties) ? inputSchema.properties : {};
8
- return { ...inputSchema, properties: { ...properties, effort: { type: "string", enum: efforts.length ? efforts : VALID_EFFORTS } } };
8
+ return { ...inputSchema, properties: { ...properties, effort: { type: "string", enum: efforts }, selfEffortCeiling: { type: "string", enum: efforts } } };
9
9
  }
@@ -27,9 +27,10 @@ export const ROUTING_POLICY_TOOLS: ToolDefinition[] = [
27
27
  },
28
28
  ];
29
29
 
30
- export function relayRoutingPolicyTool(auth: McpAuthContext, name: string, args: Record<string, unknown>): unknown {
30
+ export async function relayRoutingPolicyTool(auth: McpAuthContext, name: string, args: Record<string, unknown>): Promise<unknown> {
31
31
  if (name === "relay_routing_policy_get") return getRoutingPolicyEnvelope();
32
32
  if (name !== "relay_routing_policy_set") throw new ValidationError(`unknown tool: ${name}`);
33
33
  if (!isRecord(args.policy)) throw new ValidationError("policy must be an object");
34
- return saveRoutingPolicy(args.policy, args.expectedRevision, callerAgentId(auth) ?? "mcp");
34
+ const { revision } = await saveRoutingPolicy(args.policy, args.expectedRevision, callerAgentId(auth) ?? "mcp");
35
+ return { revision };
35
36
  }
@@ -74,7 +74,7 @@ const TASK_ID_PROP = { oneOf: [{ type: "integer", minimum: 1 }, { type: "string"
74
74
  export const TASK_TOOLS = [
75
75
  {
76
76
  name: "relay_task_create",
77
- description: "Create a durable Task. fromIssue digests GitHub title, body, acceptance, labels and references; explicit fields win.",
77
+ description: "Create Task; fromIssue imports GitHub content; explicit fields win.",
78
78
  requiredScopes: ["task:write"],
79
79
  inputSchema: {
80
80
  type: "object",
@@ -84,9 +84,11 @@ export const TASK_TOOLS = [
84
84
  intent: { type: "string" },
85
85
  fromIssue: { type: "string", description: "GitHub URL or owner/repo#number. Fetch once before atomic create." },
86
86
  tags: { type: "array", items: { type: "string" } },
87
+ paths: { type: "array", items: { type: "string" } },
87
88
  complexity: { type: "string", enum: TASK_DISPATCH_COMPLEXITIES },
88
89
  context: { type: "string" },
89
- terminalStage: { type: "string", enum: TASK_TERMINAL_STAGES },
90
+ terminalStage: { enum: TASK_TERMINAL_STAGES },
91
+ onDeploy: { type: "string" },
90
92
  doneWhen: { type: "string" },
91
93
  teamId: { type: "string" },
92
94
  projectId: { type: "string" },
@@ -108,8 +110,8 @@ export const TASK_TOOLS = [
108
110
  },
109
111
  },
110
112
  { name: "relay_task_get", description: "Read a lean Task hydration; verbose:true includes full intent, gates and history projections.", requiredScopes: ["task:read"], inputSchema: { type: "object", properties: { taskId: TASK_ID_PROP, verbose: { type: "boolean" } }, required: ["taskId"], additionalProperties: false } },
111
- { name: "relay_task_list", description: "List your Tasks by default; mine:false lists all. mode:brief is id/label/status; lean is default.", requiredScopes: ["task:read"], inputSchema: { type: "object", properties: { status: { type: "string", enum: DELIVERABLE_STATUS_ENUM }, deliverableStage: { type: "string", enum: TASK_DELIVERABLE_STAGES }, teamId: { type: "string" }, projectId: { type: "string" }, repo: { type: "string" }, mine: { type: "boolean" }, inFlight: { type: "boolean" }, staleOwnerGone: { type: "boolean" }, limit: { type: "integer", minimum: 1, maximum: 500 }, mode: { type: "string", enum: ["brief", "lean", "full"] }, verbose: { type: "boolean" } }, additionalProperties: false } },
112
- { name: "relay_task_update", description: "Update Task intent, steer, criteria or dispatch.", requiredScopes: ["task:write"], inputSchema: { type: "object", properties: { taskId: TASK_ID_PROP, refreshIssue: { type: "object", description: "Explicit source refresh: {expectedRevision, resolutions?: {title|intent|doneWhen|tags: source|local}}. Conflicts require resolution." }, verbose: { type: "boolean" }, title: { type: "string" }, label: { type: "string" }, intent: { type: "string" }, complexity: { type: "string", enum: TASK_DISPATCH_COMPLEXITIES }, context: { type: "string" }, latestSteer: { type: "string" }, doneWhen: { type: "string" }, terminalStage: { anyOf: [{ type: "string", enum: TASK_TERMINAL_STAGES }, { type: "null" }] }, dispatch: DISPATCH_SHAPE_SCHEMA, teamId: { type: "string" }, projectId: { type: "string" }, repo: { type: "string" } }, required: ["taskId"], additionalProperties: false } },
113
+ { name: "relay_task_list", description: "List your Tasks by default; mine:false lists all. mode:brief is id/label/status; lean is default.", requiredScopes: ["task:read"], inputSchema: { type: "object", properties: { status: { enum: DELIVERABLE_STATUS_ENUM }, deliverableStage: { enum: [...TASK_DELIVERABLE_STAGES, "awaiting-deploy"] }, teamId: { type: "string" }, projectId: { type: "string" }, repo: { type: "string" }, mine: { type: "boolean" }, inFlight: { type: "boolean" }, staleOwnerGone: { type: "boolean" }, limit: { type: "integer", minimum: 1, maximum: 500 }, mode: { type: "string", enum: ["brief", "lean", "full"] }, verbose: { type: "boolean" } }, additionalProperties: false } },
114
+ { name: "relay_task_update", description: "Update Task intent, steer, criteria or dispatch.", requiredScopes: ["task:write"], inputSchema: { type: "object", properties: { taskId: TASK_ID_PROP, refreshIssue: { type: "object", description: "{expectedRevision, resolutions?: {title|intent|doneWhen|tags: source|local}}." }, verbose: { type: "boolean" }, title: { type: "string" }, label: { type: "string" }, intent: { type: "string" }, complexity: { type: "string", enum: TASK_DISPATCH_COMPLEXITIES }, context: { type: "string" }, latestSteer: { type: "string" }, onDeploy: { type: "string" }, doneWhen: { type: "string" }, terminalStage: { enum: [...TASK_TERMINAL_STAGES, null] }, dispatch: DISPATCH_SHAPE_SCHEMA, teamId: { type: "string" }, projectId: { type: "string" }, repo: { type: "string" }, paths: { type: "array", items: { type: "string" } } }, required: ["taskId"], additionalProperties: false } },
113
115
  { name: "relay_task_set_status", description: "Transition Task execution status. done requires met validation; force requires explicit override authority.", requiredScopes: ["task:write"], inputSchema: { type: "object", properties: { taskId: TASK_ID_PROP, status: { type: "string", enum: DELIVERABLE_STATUS_ENUM }, force: { type: "boolean" }, blockedBy: { type: "array", items: BLOCKER_SCHEMA }, note: { type: "string" }, verbose: { type: "boolean" } }, required: ["taskId", "status"], additionalProperties: false } },
114
116
  { name: "relay_task_set_stage", description: "Set Task delivery stage/branch/commit; normally maintained by the land/deploy pipeline.", requiredScopes: ["task:write"], inputSchema: { type: "object", properties: { taskId: TASK_ID_PROP, deliverableStage: { type: "string", enum: TASK_DELIVERABLE_STAGES }, branch: { type: "string" }, commit: COMMIT_SCHEMA }, required: ["taskId", "deliverableStage"], additionalProperties: false } },
115
117
  { name: "relay_task_confirm_carry", description: "Confirm a protected-tip revert's delivered change was carried to current main; clears only carry-pending.", requiredScopes: ["task:write"], inputSchema: { type: "object", properties: { taskId: TASK_ID_PROP, commit: COMMIT_SCHEMA, branch: { type: "string" }, note: { type: "string" } }, required: ["taskId"], additionalProperties: false } },
@@ -175,6 +177,7 @@ export async function relayTaskTool(auth: McpAuthLike, name: string, args: Recor
175
177
  complexity: optionalEnum(args.complexity, "complexity", TASK_DISPATCH_COMPLEXITIES),
176
178
  context: cleanString(args.context, "context", { max: 1_000_000 }),
177
179
  terminalStage: optionalEnum(args.terminalStage, "terminalStage", TASK_TERMINAL_STAGES),
180
+ onDeploy: cleanString(args.onDeploy, "onDeploy", { max: 500 }),
178
181
  doneWhen: cleanString(args.doneWhen, "doneWhen", { max: 1_000_000 }),
179
182
  teamId: cleanString(args.teamId, "teamId", { max: 200 }),
180
183
  projectId: cleanString(args.projectId, "projectId", { max: 120 }),
@@ -182,6 +185,7 @@ export async function relayTaskTool(auth: McpAuthLike, name: string, args: Recor
182
185
  branch: cleanString(args.branch, "branch", { max: 500 }),
183
186
  dispatch: args.dispatch as TaskDispatch | undefined,
184
187
  tags: args.tags as string[] | undefined,
188
+ paths: args.paths as string[] | undefined,
185
189
  // Alias-tolerant (#2214): a ref passed as `refs`/`issues`/`externalKey`/… used to be dropped
186
190
  // silently, leaving the Task's issues[] empty and its spawn brief without the linked spec.
187
191
  issueRefs: issueRefsFromArgs(args),
@@ -218,7 +222,7 @@ export async function relayTaskTool(auth: McpAuthLike, name: string, args: Recor
218
222
  if (name === "relay_task_list") {
219
223
  const tasks = await listTaskEntitySummariesAsync({
220
224
  status: optionalEnum(args.status, "status", DELIVERABLE_STATUS_ENUM),
221
- deliverableStage: optionalEnum(args.deliverableStage, "deliverableStage", TASK_DELIVERABLE_STAGES),
225
+ deliverableStage: optionalEnum(args.deliverableStage, "deliverableStage", [...TASK_DELIVERABLE_STAGES, "awaiting-deploy"] as const),
222
226
  teamId: cleanString(args.teamId, "teamId", { max: 200 }),
223
227
  projectId: cleanString(args.projectId, "projectId", { max: 120 }),
224
228
  repo: cleanString(args.repo, "repo", { max: 500 }),
@@ -246,12 +250,14 @@ export async function relayTaskTool(auth: McpAuthLike, name: string, args: Recor
246
250
  ...(args.complexity !== undefined ? { complexity: optionalEnum(args.complexity, "complexity", TASK_DISPATCH_COMPLEXITIES) } : {}),
247
251
  ...(args.context !== undefined ? { context: cleanString(args.context, "context", { max: 1_000_000 }) ?? "" } : {}),
248
252
  ...(args.latestSteer !== undefined ? { latestSteer: cleanString(args.latestSteer, "latestSteer", { max: 1_000_000 }) ?? "" } : {}),
253
+ ...(args.onDeploy !== undefined ? { onDeploy: cleanString(args.onDeploy, "onDeploy", { max: 500 }) ?? "" } : {}),
249
254
  ...(args.doneWhen !== undefined ? { doneWhen: cleanString(args.doneWhen, "doneWhen", { max: 1_000_000 }) ?? "" } : {}),
250
255
  ...(args.terminalStage !== undefined ? { terminalStage: args.terminalStage === null ? null : optionalEnum(args.terminalStage, "terminalStage", TASK_TERMINAL_STAGES) } : {}),
251
256
  ...(args.dispatch !== undefined ? { dispatch: args.dispatch as TaskDispatch } : {}),
252
257
  ...(args.teamId !== undefined ? { teamId: cleanString(args.teamId, "teamId", { max: 200 }) ?? "" } : {}),
253
258
  ...(args.projectId !== undefined ? { projectId: cleanString(args.projectId, "projectId", { max: 120 }) ?? "" } : {}),
254
259
  ...(args.repo !== undefined ? { repo: cleanString(args.repo, "repo", { max: 500 }) ?? "" } : {}),
260
+ ...(args.paths !== undefined ? { paths: args.paths as string[] | null } : {}),
255
261
  };
256
262
  const task = await updateTaskEntityAsync(taskIdArg(args.taskId), { ...patch, actor });
257
263
  if (args.verbose === true) return task as unknown as Record<string, unknown>;
@@ -2,7 +2,7 @@ import { INCLUDED_TOOL_SCOPE_NEEDS } from "./mcp/tool-groups";
2
2
  import { APPROVAL_MODES, SPAWN_PROVIDERS, VALID_AGENT_LIFECYCLES, VALID_WORKSPACE_MODES } from "@humwick/sdk";
3
3
  import { McpAuthError } from "./mcp-errors";
4
4
  import { authContextFromMcp } from "./services/auth-context";
5
- import { deleteTeamTemplate, getTeamTemplate, instantiateTeamTemplate, listTeamTemplates, saveTeamTemplate } from "./services/team-templates";
5
+ import { deleteTeamTemplateAsync, getTeamTemplate, instantiateTeamTemplate, listTeamTemplates, saveTeamTemplateAsync } from "./services/team-templates";
6
6
  import { summarizeSpawnCommandForCaller } from "./services/spawn-agent";
7
7
  import { ValidationError } from "./db";
8
8
 
@@ -111,7 +111,7 @@ function slugArg(args: Record<string, unknown>): string {
111
111
  export async function relayTeamTemplateTool(auth: McpAuthLike, name: string, args: Record<string, unknown>): Promise<Record<string, unknown>> {
112
112
  if (name === "relay_team_template_save") {
113
113
  requireScope(auth, "teams:write");
114
- return saveTeamTemplate(args, auth.actor) as unknown as Record<string, unknown>;
114
+ return await saveTeamTemplateAsync(args, auth.actor) as unknown as Record<string, unknown>;
115
115
  }
116
116
  if (name === "relay_team_template_list") return { templates: listTeamTemplates() };
117
117
  if (name === "relay_team_template_get") {
@@ -121,7 +121,7 @@ export async function relayTeamTemplateTool(auth: McpAuthLike, name: string, arg
121
121
  }
122
122
  if (name === "relay_team_template_delete") {
123
123
  requireScope(auth, "teams:write");
124
- return { slug: slugArg(args), deleted: deleteTeamTemplate(slugArg(args), auth.actor) };
124
+ return { slug: slugArg(args), deleted: await deleteTeamTemplateAsync(slugArg(args), auth.actor) };
125
125
  }
126
126
  if (name === "relay_team_spawn_from_template") {
127
127
  requireScope(auth, "teams:write");
@@ -164,23 +164,23 @@ export async function relayTeamTool(auth: McpAuthLike, name: string, args: Recor
164
164
  return { ...projectTeamPayload(payload, args), ...(payload.team.spawnDelegation || payload.team.parentTeamId ? { spawnDelegationState: await getTeamSpawnDelegation(ctx, payload.team.parentTeamId ?? payload.team.id) } : {}) };
165
165
  }
166
166
  if (name === "relay_team_set_brief") {
167
- const payload = setCallerTeamBrief(ctx, {
167
+ const payload = (await setCallerTeamBrief(ctx, {
168
168
  title: cleanString(args.title, "title", { max: 240 }),
169
169
  brief: cleanString(args.brief, "brief", { max: 16_000 }),
170
170
  definitionOfDone: cleanString(args.definitionOfDone, "definitionOfDone", { max: 4000 }),
171
- });
171
+ }));
172
172
  return projectTeamPayload(payload, args);
173
173
  }
174
174
  if (name === "relay_team_claim") {
175
- const payload = claimTeamForCaller(
175
+ const payload = (await claimTeamForCaller(
176
176
  ctx,
177
177
  cleanString(args.teamId, "teamId", { required: true, max: 240 })!,
178
178
  cleanString(args.reason, "reason", { max: 2000 }),
179
- );
179
+ ));
180
180
  return projectTeamPayload(payload, args);
181
181
  }
182
182
  if (name === "relay_team_dissolve") {
183
- return dissolveCallerTeam(ctx, {
183
+ return (await dissolveCallerTeam(ctx, {
184
184
  outcomeStatus: optionalEnum(args.outcomeStatus, "outcomeStatus", OUTCOME_STATUSES) as Team["outcomeStatus"] | undefined,
185
185
  outcomeSummary: cleanString(args.outcomeSummary, "outcomeSummary", { max: 4000 }),
186
186
  landsClean: args.landsClean === undefined || args.landsClean === null
@@ -188,7 +188,7 @@ export async function relayTeamTool(auth: McpAuthLike, name: string, args: Recor
188
188
  : typeof args.landsClean === "boolean"
189
189
  ? args.landsClean
190
190
  : (() => { throw new ValidationError("landsClean must be a boolean"); })(),
191
- }) as unknown as Record<string, unknown>;
191
+ })) as unknown as Record<string, unknown>;
192
192
  }
193
193
  } catch (error) {
194
194
  mapTeamError(error);
@@ -5,7 +5,7 @@ import { McpAuthError } from "./mcp-errors";
5
5
  import { ValidationError } from "./db";
6
6
  import { authContextFromMcp } from "./services/auth-context";
7
7
  import { ServiceAuthError } from "./services/errors";
8
- import { cancelWorkflowRun, getWorkflowRun, resumeWorkflowRun, startWorkflowRun } from "./services/workflow-runs";
8
+ import { cancelWorkflowRun, getWorkflowRun, pauseWorkflowRun, resumeWorkflowRun, startWorkflowRun } from "./services/workflow-runs";
9
9
  import { parseWorkflowPins } from "./services/workflow-pins";
10
10
  import { cleanString, taskIdField } from "./validation";
11
11
 
@@ -35,6 +35,7 @@ export const WORKFLOW_TOOLS = [
35
35
  properties: {
36
36
  workflow: { type: "string" },
37
37
  taskId: TASK_ID_PROP,
38
+ cwd: { type: "string", description: "Project checkout; defaults to the caller or Task repo." },
38
39
  pins: PINS_PROP,
39
40
  budget: { type: "object", properties: { tokenCap: { type: "integer", minimum: 1, maximum: Number.MAX_SAFE_INTEGER } }, required: ["tokenCap"], additionalProperties: false },
40
41
  inputs: { type: "object" },
@@ -48,7 +49,7 @@ export const WORKFLOW_TOOLS = [
48
49
  {
49
50
  name: "relay_workflow_resume",
50
51
  description:
51
- "Resume or answer/escalate a decision.",
52
+ "Resume, pause/unpause, re-pin, or answer decisions.",
52
53
  requiredScopes: ["task:write"],
53
54
  inputSchema: {
54
55
  type: "object",
@@ -66,6 +67,7 @@ export const WORKFLOW_TOOLS = [
66
67
  activationId: { type: "string" },
67
68
  step: { type: "string" },
68
69
  note: { type: "string" },
70
+ pause: { type: "boolean" },
69
71
  pins: PINS_PROP,
70
72
  },
71
73
  required: ["runId"],
@@ -112,7 +114,7 @@ type McpAuthLike = Parameters<typeof authContextFromMcp>[0];
112
114
 
113
115
  function mutationReceipt(full: Record<string, unknown>, verbose: unknown): Record<string, unknown> {
114
116
  if (verbose === true) return full;
115
- const fields = ["runId", "taskId", "workflow", "status", "step", "round", "callerAgentId", "budget", "existing", "resumed", "cancelled", "reason", "warnings"];
117
+ const fields = ["runId", "taskId", "workflow", "status", "step", "round", "callerAgentId", "budget", "existing", "resumed", "pinsUpdated", "cancelled", "paused", "reason", "warnings"];
116
118
  return Object.fromEntries(fields.filter(key => full[key] !== undefined).map(key => [key, full[key]]));
117
119
  }
118
120
 
@@ -124,14 +126,21 @@ export async function relayWorkflowTool(auth: McpAuthLike, name: string, args: R
124
126
  if (name === "relay_workflow_start") {
125
127
  const workflow = cleanString(args.workflow, "workflow", { max: 64 });
126
128
  if (!workflow) throw new ValidationError("workflow is required");
129
+ const cwd = cleanString(args.cwd, "cwd", { max: 4000 });
127
130
  const pins = parseWorkflowPins(args.pins);
128
- return mutationReceipt(await startWorkflowRun({ workflow, ...(args.inputs !== undefined ? { inputs: args.inputs as Record<string, unknown> } : {}), ...(args.requestKey ? { requestKey: String(args.requestKey) } : {}), taskId: taskIdField(args.taskId), ...(pins ? { pins } : {}), budget: args.budget }, ctx), args.verbose);
131
+ return mutationReceipt(await startWorkflowRun({ workflow, ...(cwd ? { cwd } : {}), ...(args.inputs !== undefined ? { inputs: args.inputs as Record<string, unknown> } : {}), ...(args.requestKey ? { requestKey: String(args.requestKey) } : {}), taskId: taskIdField(args.taskId), ...(pins ? { pins } : {}), budget: args.budget }, ctx), args.verbose);
129
132
  }
130
133
  if (name === "relay_workflow_resume") {
131
134
  const runId = cleanString(args.runId, "runId", { max: 200 });
132
135
  if (!runId) throw new ValidationError("runId is required");
133
136
  const step = cleanString(args.step, "step", { max: 64 });
134
137
  const note = cleanString(args.note, "note", { max: 8000 });
138
+ if (args.pause !== undefined) {
139
+ // #3757 — pause (note is the required reason) or unpause; nothing else rides along.
140
+ if (typeof args.pause !== "boolean") throw new ValidationError("pause must be a boolean");
141
+ if (step || args.pins !== undefined || args.decision !== undefined || args.activationId !== undefined) throw new ValidationError("pause takes only runId and, to pause, note as the reason");
142
+ return mutationReceipt(await pauseWorkflowRun({ runId, pause: args.pause, ...(note ? { reason: note } : {}) }, ctx), args.verbose);
143
+ }
135
144
  const pins = parseWorkflowPins(args.pins);
136
145
  return mutationReceipt(await resumeWorkflowRun({ runId, decision: parseWorkflowDecisionResponse(args.decision), activationId: cleanString(args.activationId, "activationId", { max: 2000 }), ...(step ? { step } : {}), ...(note ? { note } : {}), ...(pins ? { pins } : {}) }, ctx), args.verbose);
137
146
  }