@humwick/server 0.130.2 → 0.130.4

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 (587) hide show
  1. package/bundled/prompts/manifest.json +1 -0
  2. package/bundled/prompts/task.hydration.md +1 -1
  3. package/bundled/roles/builder.md +1 -1
  4. package/docs/guides/sub-coordinators.md +12 -5
  5. package/docs/guides/tools-coordination.md +1 -0
  6. package/docs/guides/workflows.md +16 -0
  7. package/docs/openapi.json +175 -4
  8. package/package.json +8 -7
  9. package/public/assets/{MessageBubble-BWLqMGKG.js → MessageBubble-BOkmEvgZ.js} +2 -2
  10. package/public/assets/{PlanGraphPanel-3TlIQpjk.js → PlanGraphPanel-BkaDJp0r.js} +2 -2
  11. package/public/assets/{TraceView-Wimm0Czv.js → TraceView-B99Uu2yT.js} +2 -2
  12. package/public/assets/{VaultDecisionCard-Bau_vNax.js → VaultDecisionCard-DUIfTTFF.js} +2 -2
  13. package/public/assets/{activity-CrSurn-r.js → activity-ZIX0N1El.js} +2 -2
  14. package/public/assets/{agent-lineage-CknAJKcb.js → agent-lineage-kq9TPYFw.js} +2 -2
  15. package/public/assets/agent-liveness-DSQY1Aa_.js +2 -0
  16. package/public/assets/{agent-name-DKbiIhBo.js → agent-name-C_7F4DFR.js} +2 -2
  17. package/public/assets/{agent-profiles-DwF6EQ4R.js → agent-profiles-BNOcrGcY.js} +2 -2
  18. package/public/assets/{agent-project-badge-Diz4Sjjb.js → agent-project-badge-B6yAh70a.js} +2 -2
  19. package/public/assets/{agent-tools-CRhpRQza.js → agent-tools-CcrhmOzF.js} +2 -2
  20. package/public/assets/{agent-type-icon-LrUEU3lB.js → agent-type-icon-CXSLrKiq.js} +2 -2
  21. package/public/assets/{agents-B-v66C-4.js → agents-DIZG97_X.js} +2 -2
  22. package/public/assets/{analytics-BqCb-LKi.js → analytics-rasmoPjR.js} +2 -2
  23. package/public/assets/{artifact-viewer-kf4pGuAR.js → artifact-viewer-tBpTrEPb.js} +2 -2
  24. package/public/assets/{artifacts-DJevXcvg.js → artifacts-BNkrynP1.js} +2 -2
  25. package/public/assets/{artifacts-D32zyw4Y.js → artifacts-Bjq-ZyBA.js} +2 -2
  26. package/public/assets/{automation-BpRajx_5.js → automation-Cx422L3L.js} +2 -2
  27. package/public/assets/{backlog-D_UjTdzX.js → backlog-RuFQ8PUu.js} +2 -2
  28. package/public/assets/{busy-health-N3VEh4ao.js → busy-health-BvNQ9g5x.js} +2 -2
  29. package/public/assets/{channels-9jopungq.js → channels-DNbKAS0I.js} +2 -2
  30. package/public/assets/{chat-CSXrTB3C.js → chat-Bp3Fx73h.js} +3 -3
  31. package/public/assets/{code-preview-p1NnmqK0.js → code-preview-KIRZA6cz.js} +2 -2
  32. package/public/assets/{connectors-CZdqlDNL.js → connectors-k7vO4vvc.js} +2 -2
  33. package/public/assets/{cosmos-BgdsE4dG.js → cosmos-BuVoq1aw.js} +2 -2
  34. package/public/assets/{crate-agent-30aXTKva.js → crate-agent-irqlt4NH.js} +2 -2
  35. package/public/assets/{dependency-graph-B_jvw2GE.js → dependency-graph-D_rurNBz.js} +2 -2
  36. package/public/assets/{deploys-DoN6bAb5.js → deploys-yzZqIpxE.js} +2 -2
  37. package/public/assets/{display-BrKWFGJz.js → display-BemJG1f_.js} +2 -2
  38. package/public/assets/{files-D6XEu8Ng.js → files-DXWcrxOz.js} +2 -2
  39. package/public/assets/{fleet-C7jQWbw2.js → fleet-TEuOCZXE.js} +2 -2
  40. package/public/assets/{fleet-metrics-BiDs3MLx.js → fleet-metrics-BGoDAFI-.js} +2 -2
  41. package/public/assets/{formatted-body-impl-DyG0WsQS.js → formatted-body-impl-BB9eq9nN.js} +2 -2
  42. package/public/assets/{formatted-body-CQBwc1fb.js → formatted-body-qy2nTD_1.js} +3 -3
  43. package/public/assets/{host-providers-dialog-DKaW31dN.js → host-providers-dialog-BGPHxuwT.js} +2 -2
  44. package/public/assets/{index-CRHep3M9.js → index-BC5XZc0z.js} +5 -5
  45. package/public/assets/{index-MYAIwYTX.css → index-D8Rp9pz2.css} +1 -1
  46. package/public/assets/{insights-CzrtkpOE.js → insights-C-KQG0h-.js} +2 -2
  47. package/public/assets/{integrations-aVsUmigt.js → integrations-ClPRPyKU.js} +2 -2
  48. package/public/assets/{issue-ref-chip-BnSlM_95.js → issue-ref-chip-DbH8J9Ak.js} +2 -2
  49. package/public/assets/{log-viewer-qe7Ee47Z.js → log-viewer-PH4zVn24.js} +2 -2
  50. package/public/assets/{maintenance-NfjqFZAk.js → maintenance-5lV43uTL.js} +2 -2
  51. package/public/assets/{managed-agents-BiH0HgaE.js → managed-agents-BdgU35aX.js} +2 -2
  52. package/public/assets/{markdown-preview-BixaT3Xr.js → markdown-preview-DNT4OUwQ.js} +3 -3
  53. package/public/assets/{markdown-preview-impl-DNGlWIS3.js → markdown-preview-impl-CnCcPy0A.js} +2 -2
  54. package/public/assets/{memory-DNsCl6UX.js → memory--GgWH1gH.js} +2 -2
  55. package/public/assets/{messages-DopU1L1X.js → messages-CzFl_97O.js} +2 -2
  56. package/public/assets/{orchestrators-Cq7ckLQT.js → orchestrators-CVvJVkzv.js} +2 -2
  57. package/public/assets/overview-DsrZvE86.js +2 -0
  58. package/public/assets/{pairs-DE_m6rrE.js → pairs-D2d0d2py.js} +2 -2
  59. package/public/assets/{profile-icon-B3rfh77F.js → profile-icon-_SMuSbYF.js} +2 -2
  60. package/public/assets/{project-profile-instructions-DQWZE0kA.js → project-profile-instructions-Apn15y43.js} +2 -2
  61. package/public/assets/{projects-Br2Bd2h1.js → projects-D3B6kto5.js} +2 -2
  62. package/public/assets/{prompt-settings-BKvFsvGD.js → prompt-settings-DnPB6Ez6.js} +2 -2
  63. package/public/assets/provider-display-bWwiuedV.js +2 -0
  64. package/public/assets/{registry-Cw38_6gW.js → registry-D790cIhN.js} +2 -2
  65. package/public/assets/run-card-BCro-Odj.js +2 -0
  66. package/public/assets/{secrets-DxI-vzSq.js → secrets-CVXvfvbU.js} +2 -2
  67. package/public/assets/{service-access-settings-D9s_VJbd.js → service-access-settings-D3Xxqb9w.js} +2 -2
  68. package/public/assets/{settings-CKZTVGIx.js → settings-CoUC7Jci.js} +2 -2
  69. package/public/assets/shipping-D_Lp9n_J.js +2 -0
  70. package/public/assets/{stats-DyUBKyWI.js → stats-CXiNjB9S.js} +2 -2
  71. package/public/assets/{status-dot-DYqlEUhJ.js → status-dot-C703YIy1.js} +2 -2
  72. package/public/assets/store-BgDALGIX.js +9 -0
  73. package/public/assets/{tasks-Bh7Chr4-.js → tasks-DO0WpJCx.js} +2 -2
  74. package/public/assets/{teams-bowI7qVY.js → teams-FGkdi_tL.js} +2 -2
  75. package/public/assets/{terminal-viewer-BgVLHdsU.js → terminal-viewer-Dh8dSC7e.js} +3 -3
  76. package/public/assets/{terminal-viewer-impl-Dz22UPy6.js → terminal-viewer-impl-B5Zriip3.js} +2 -2
  77. package/public/assets/{use-agent-terminal-DSQQ-iY7.js → use-agent-terminal-CRUVDvLC.js} +2 -2
  78. package/public/assets/{use-decisions-samMQhQf.js → use-decisions-CoaqRh4l.js} +2 -2
  79. package/public/assets/{use-project-list-59LheVP7.js → use-project-list-X-BgT53X.js} +2 -2
  80. package/public/assets/{use-selectors-BZa25xEB.js → use-selectors-0X_UZkk-.js} +2 -2
  81. package/public/assets/{user-avatar-DHxlvUvV.js → user-avatar-CkLhVBGu.js} +2 -2
  82. package/public/assets/{versioned-prompt-editor-BmED5DnJ.js → versioned-prompt-editor-BkTi7eim.js} +2 -2
  83. package/public/assets/{work-queue-CSvpuNLz.js → work-queue-DDOLEyKo.js} +2 -2
  84. package/public/assets/{workflow-marker-DAZcj5qt.js → workflow-marker-CzOsB8BM.js} +2 -2
  85. package/public/assets/{workflows-DdmxRSyg.js → workflows-DJilvmRM.js} +2 -2
  86. package/public/assets/{workspaces-BxeKfVuF.js → workspaces-CHcfbLR3.js} +2 -2
  87. package/public/cosmos.html +4 -4
  88. package/public/index.html +29 -29
  89. package/runner/plugins/claude/.claude-plugin/plugin.json +1 -1
  90. package/runner/src/adapters/claude-api.ts +1 -1
  91. package/runner/src/adapters/claude-headless.ts +1 -1
  92. package/runner/src/adapters/claude-launch-exit.ts +26 -0
  93. package/runner/src/adapters/claude-session-probe.ts +1 -1
  94. package/runner/src/adapters/claude-tmux.ts +38 -10
  95. package/runner/src/adapters/claude.ts +28 -75
  96. package/runner/src/adapters/provider-quota-harvest.ts +20 -71
  97. package/runner/src/agent-runner/lifecycle-milestones.ts +2 -2
  98. package/runner/src/agent-runner/liveness-exchange.ts +104 -0
  99. package/runner/src/claude-system-prompt.ts +49 -0
  100. package/runner/src/launch-assembly.ts +14 -10
  101. package/runner/src/profile-home.ts +1 -1
  102. package/runner/src/project-instructions.ts +2 -2
  103. package/runner/src/provider-command.ts +18 -0
  104. package/runner/src/provider-setup.ts +3 -2
  105. package/runner/src/runner-core.ts +14 -15
  106. package/runner/src/runner-helpers.ts +0 -8
  107. package/runner/src/session-scratch.ts +6 -2
  108. package/runner/test-support/provisioning-context.ts +4 -2
  109. package/runner/test-support/runner-harness.ts +2 -1
  110. package/scripts/steward-policy-cleanup.ts +2 -2
  111. package/src/agent-authz.ts +2 -2
  112. package/src/agent-drive-arbiter.ts +3 -8
  113. package/src/agent-exit-cleanup-async.ts +2 -2
  114. package/src/agent-exit-cleanup.ts +23 -19
  115. package/src/agent-lifecycle-events.ts +112 -85
  116. package/src/agent-ref.ts +3 -2
  117. package/src/agent-status-events.ts +43 -14
  118. package/src/auth/login-link.ts +35 -0
  119. package/src/auth/password.ts +4 -3
  120. package/src/auth/session-refresh.ts +1 -1
  121. package/src/auth/session.test-fixture.ts +2 -2
  122. package/src/auth/session.ts +7 -7
  123. package/src/automations/crud.ts +8 -81
  124. package/src/automations/dispatch.ts +33 -58
  125. package/src/automations/index.ts +1 -1
  126. package/src/automations/persistence.ts +65 -0
  127. package/src/automations/precheck.ts +18 -16
  128. package/src/automations/read-async.ts +11 -0
  129. package/src/automations/reconcile.ts +30 -39
  130. package/src/automations/storage.ts +33 -10
  131. package/src/automations/write-async.ts +33 -0
  132. package/src/branch-land-notice.ts +3 -3
  133. package/src/branch-landed.ts +25 -23
  134. package/src/bus.ts +21 -19
  135. package/src/cd-deploy-notify.ts +2 -2
  136. package/src/ci/notifications.ts +4 -4
  137. package/src/ci/root-missing.ts +3 -3
  138. package/src/ci/transition-notify.ts +5 -5
  139. package/src/claude-app/oauth-http.ts +3 -3
  140. package/src/cli/index.ts +7 -1
  141. package/src/cli/init.ts +53 -0
  142. package/src/cli/orchestrator.ts +1 -7
  143. package/src/cli/setup.ts +6 -4
  144. package/src/cli/workflow.ts +12 -3
  145. package/src/commands-db.ts +4 -4
  146. package/src/commands-write.ts +8 -0
  147. package/src/compaction-watch.ts +10 -8
  148. package/src/config-store-write.ts +2 -2
  149. package/src/config.ts +4 -11
  150. package/src/connectors.ts +10 -8
  151. package/src/context-advisory.ts +22 -21
  152. package/src/db/agent-action-write.ts +36 -0
  153. package/src/db/agent-control-async.ts +9 -0
  154. package/src/db/agent-control-write.ts +49 -0
  155. package/src/db/agent-effort-observe.ts +22 -0
  156. package/src/db/agent-meta.ts +14 -3
  157. package/src/db/agents-async.ts +8 -5
  158. package/src/db/agents.ts +15 -12
  159. package/src/db/auth-identities.ts +2 -2
  160. package/src/db/automation-read-ops.ts +11 -0
  161. package/src/db/automation-write-ops.ts +46 -0
  162. package/src/db/blackboard.ts +2 -2
  163. package/src/db/browser-session-write.ts +32 -0
  164. package/src/db/bus-outbox-write-ops.ts +3 -1
  165. package/src/db/checkout-refresh-schema.ts +47 -0
  166. package/src/db/checkout-refresh.ts +5 -5
  167. package/src/db/command-agent-profile-backfill.ts +39 -0
  168. package/src/db/command-agent-profiles.ts +5 -1
  169. package/src/db/command-retention.ts +126 -0
  170. package/src/db/commands-planner-stats.test-fixture.ts +8 -0
  171. package/src/db/commands-read-ops.ts +16 -0
  172. package/src/db/connection.ts +1 -182
  173. package/src/db/context-carry-write.ts +74 -0
  174. package/src/db/continuations.ts +4 -4
  175. package/src/db/db-error-registry.ts +12 -0
  176. package/src/db/gateway.ts +26 -133
  177. package/src/db/history-retention-ops.ts +13 -0
  178. package/src/db/inbox-async.ts +2 -2
  179. package/src/db/inbox-read-ops.ts +1 -1
  180. package/src/db/inbox.ts +9 -3
  181. package/src/db/issue-associations.ts +2 -2
  182. package/src/db/issue-refs-async.ts +4 -1
  183. package/src/db/issue-refs-read-ops.ts +6 -0
  184. package/src/db/issue-refs.ts +8 -8
  185. package/src/db/kernel-event-log-schema.ts +2 -0
  186. package/src/db/land-boundaries.ts +51 -5
  187. package/src/db/land-gate-attestations.ts +2 -2
  188. package/src/db/landing-receipts.ts +2 -2
  189. package/src/db/lifecycle-context-write.ts +5 -0
  190. package/src/db/lifecycle-tail-async.ts +76 -0
  191. package/src/db/lifecycle-tail-write-ops.ts +62 -0
  192. package/src/db/lifecycle-write-window.ts +2 -1
  193. package/src/db/lineage-pair-dedupe-sql.ts +3 -3
  194. package/src/db/main-connection-mode.ts +11 -0
  195. package/src/db/main-connection-writes.ts +20 -2
  196. package/src/db/maintenance-job-runs-async.ts +2 -2
  197. package/src/db/maintenance-job-write-ops.ts +1 -1
  198. package/src/db/maintenance-pauses.ts +2 -2
  199. package/src/db/message-send.ts +4 -0
  200. package/src/db/messages.ts +31 -25
  201. package/src/db/migrations.ts +18 -1
  202. package/src/db/notification-write-ops.ts +19 -0
  203. package/src/db/operator-answer-write.ts +19 -0
  204. package/src/db/orchestrators.ts +10 -4
  205. package/src/db/pairs-async.ts +22 -1
  206. package/src/db/pairs-write-ops.ts +8 -3
  207. package/src/db/pairs.ts +41 -48
  208. package/src/db/plan-dispatch-schema.ts +5 -1
  209. package/src/db/plan-ready-notices.ts +43 -0
  210. package/src/db/plan-tools-include-migration.ts +36 -0
  211. package/src/db/plans-write-ops.ts +2 -0
  212. package/src/db/presence-buffer.ts +5 -0
  213. package/src/db/presence-loop.ts +18 -23
  214. package/src/db/presence-write.ts +0 -6
  215. package/src/db/project-entries-async.ts +14 -0
  216. package/src/db/project-entries-read-ops.ts +5 -1
  217. package/src/db/project-entries-write-ops.ts +8 -0
  218. package/src/db/project-entries.ts +15 -12
  219. package/src/db/project-journal.ts +2 -2
  220. package/src/db/project-trust-approvals.ts +2 -2
  221. package/src/db/prompt-templates.ts +4 -4
  222. package/src/db/read-op-marshaling-fixtures.ts +18 -0
  223. package/src/db/read-ops.ts +4 -0
  224. package/src/db/retention.ts +13 -2
  225. package/src/db/review-publish-write.ts +8 -0
  226. package/src/db/runtime-admin-async.ts +19 -0
  227. package/src/db/runtime-admin-write-ops.ts +36 -0
  228. package/src/db/runtime-tail-async.ts +288 -0
  229. package/src/db/runtime-tail-write-ops.ts +97 -0
  230. package/src/db/schema.ts +4 -1
  231. package/src/db/spawn-budget.ts +5 -0
  232. package/src/db/spawn-delegation.ts +3 -12
  233. package/src/db/sql-audit-indexes.ts +3 -0
  234. package/src/db/stats-async.ts +5 -3
  235. package/src/db/task-entity.ts +5 -4
  236. package/src/db/team-claim-policy.ts +60 -0
  237. package/src/db/teams-async.ts +4 -0
  238. package/src/db/teams-write-ops.ts +4 -0
  239. package/src/db/terminal-events.ts +15 -0
  240. package/src/db/timer-cutover-bodies.ts +292 -0
  241. package/src/db/timer-cutover-core.ts +37 -278
  242. package/src/db/timer-cutover-state.ts +40 -0
  243. package/src/db/timer-cutover-write-ops.ts +1 -40
  244. package/src/db/token-db-write-ops.ts +2 -0
  245. package/src/db/token-standing-async.ts +12 -0
  246. package/src/db/token-standing.ts +6 -9
  247. package/src/db/token-usage-retention.ts +33 -0
  248. package/src/db/token-usage-write-ops.ts +1 -1
  249. package/src/db/token-usage.ts +4 -1
  250. package/src/db/user-invites-async.ts +13 -0
  251. package/src/db/user-invites.ts +3 -3
  252. package/src/db/users.ts +14 -6
  253. package/src/db/workflow-execution.ts +3 -3
  254. package/src/db/workspaces.ts +8 -5
  255. package/src/db/write-ops.ts +31 -12
  256. package/src/db/writer-fault-seam.ts +2 -9
  257. package/src/db/writer-fault-test-ops.ts +18 -0
  258. package/src/db/writer-gateway.ts +42 -46
  259. package/src/dev.ts +12 -16
  260. package/src/event-loop-lag.ts +4 -2
  261. package/src/event-loop-yield.ts +2 -2
  262. package/src/events.ts +10 -8
  263. package/src/host-provider-store.ts +5 -4
  264. package/src/hub-metrics-report.ts +5 -1
  265. package/src/hub-metrics.ts +38 -18
  266. package/src/init.ts +299 -0
  267. package/src/injection-sweep-pacing.ts +6 -8
  268. package/src/invite-link.ts +16 -9
  269. package/src/land-gate-notifications.ts +11 -10
  270. package/src/land-gate-queue-progress.ts +3 -3
  271. package/src/land-settle-dispatch.ts +52 -92
  272. package/src/lifecycle-context-pressure.ts +11 -10
  273. package/src/lifecycle-manager.ts +104 -98
  274. package/src/maintenance/breaker.ts +18 -16
  275. package/src/maintenance/checkout-refresh.ts +18 -1
  276. package/src/maintenance/critical-job-watchdog.ts +3 -3
  277. package/src/maintenance/events.ts +3 -3
  278. package/src/maintenance/history-retention-job.ts +30 -0
  279. package/src/maintenance/jobs.ts +29 -67
  280. package/src/maintenance/long-running-work.ts +3 -1
  281. package/src/maintenance/offline-agent-prune-job.ts +28 -0
  282. package/src/maintenance/orphaned-sessions.ts +5 -4
  283. package/src/maintenance/pauses.ts +4 -10
  284. package/src/maintenance/plan-ready-notice-job.ts +71 -0
  285. package/src/maintenance/scheduler.ts +18 -13
  286. package/src/maintenance/stalled-delivery-pager.ts +4 -4
  287. package/src/maintenance/teams.ts +19 -30
  288. package/src/maintenance/workspaces.ts +17 -27
  289. package/src/managed-policy-escalation.ts +7 -7
  290. package/src/managed-policy.ts +3 -3
  291. package/src/managed-provider-gate.ts +5 -4
  292. package/src/managed-spawn-reservation.ts +5 -4
  293. package/src/mcp/index.ts +8 -8
  294. package/src/mcp/output-descriptions.ts +1 -1
  295. package/src/mcp/presentation.ts +2 -1
  296. package/src/mcp/runtime-output.ts +6 -1
  297. package/src/mcp/self-care-visibility.ts +2 -2
  298. package/src/mcp/spawn-targets-matrix.ts +10 -1
  299. package/src/mcp/tool-groups.ts +3 -2
  300. package/src/mcp/tool-roles.ts +81 -0
  301. package/src/mcp/tools-workspace.ts +1 -1
  302. package/src/mcp-blackboard-tools.ts +6 -5
  303. package/src/mcp-decision-tools.ts +7 -7
  304. package/src/mcp-egress-tools.ts +10 -9
  305. package/src/mcp-issue-activity-tools.ts +2 -2
  306. package/src/mcp-issue-association-tools.ts +4 -4
  307. package/src/mcp-issue-ref-tools.ts +3 -3
  308. package/src/mcp-merge-tools.ts +5 -5
  309. package/src/mcp-notification-subscription-tools.ts +14 -15
  310. package/src/mcp-output-levels.test-fixture.ts +1 -1
  311. package/src/mcp-profile-trust-tools.ts +1 -1
  312. package/src/mcp-project-journal-tools.ts +4 -12
  313. package/src/mcp-project-tools.ts +17 -18
  314. package/src/mcp-routing-policy-tools.ts +3 -2
  315. package/src/mcp-team-tools.ts +6 -6
  316. package/src/mcp-workflow-tools.ts +5 -3
  317. package/src/memory-area-injection.ts +13 -12
  318. package/src/memory-boundary-capture.ts +6 -6
  319. package/src/memory-injection.ts +45 -43
  320. package/src/merge-pause-maintenance.ts +5 -4
  321. package/src/notification-router.ts +44 -17
  322. package/src/notify.ts +5 -5
  323. package/src/observed-reset-refresh.ts +4 -4
  324. package/src/operator-alarm.ts +2 -5
  325. package/src/project-ingest.ts +6 -6
  326. package/src/project-instructions.ts +8 -1
  327. package/src/project-trust.ts +12 -11
  328. package/src/prompt-resolver.ts +3 -3
  329. package/src/provider-quota-async.ts +5 -7
  330. package/src/provider-timeline-event.ts +4 -7
  331. package/src/quota-band-delivery.ts +2 -2
  332. package/src/recipe-runner.ts +4 -3
  333. package/src/retention-config-store.ts +4 -3
  334. package/src/reviewer-pipeline.ts +11 -10
  335. package/src/routes/_route.ts +4 -4
  336. package/src/routes/_shared.ts +13 -12
  337. package/src/routes/agent-effort.ts +5 -5
  338. package/src/routes/agent-heartbeat-quota.ts +23 -0
  339. package/src/routes/agent-keep.ts +1 -1
  340. package/src/routes/agent-reporting.ts +1 -1
  341. package/src/routes/agent-self-effort.ts +5 -5
  342. package/src/routes/agent-sessions.ts +24 -24
  343. package/src/routes/agents-spawn.ts +1 -1
  344. package/src/routes/agents.ts +17 -119
  345. package/src/routes/auth.ts +44 -17
  346. package/src/routes/authority-audit.ts +2 -2
  347. package/src/routes/automations.ts +6 -5
  348. package/src/routes/channel-binding-delete.ts +1 -1
  349. package/src/routes/channel-output.ts +3 -3
  350. package/src/routes/claude-api-budget.ts +5 -5
  351. package/src/routes/commands-listing.ts +1 -1
  352. package/src/routes/commands.ts +29 -27
  353. package/src/routes/context-resets.ts +2 -2
  354. package/src/routes/coordinator-teams.ts +1 -1
  355. package/src/routes/decisions.ts +2 -2
  356. package/src/routes/host-providers.ts +18 -0
  357. package/src/routes/host-secret-files.ts +1 -1
  358. package/src/routes/hosts.ts +11 -11
  359. package/src/routes/inbox.ts +3 -2
  360. package/src/routes/index.ts +7 -3
  361. package/src/routes/integrations.ts +9 -7
  362. package/src/routes/issue-activity.ts +2 -2
  363. package/src/routes/issue-associations.ts +4 -4
  364. package/src/routes/issue-refs.ts +3 -3
  365. package/src/routes/kernel-timers-operator.ts +1 -1
  366. package/src/routes/memory.ts +1 -1
  367. package/src/routes/merges.ts +11 -11
  368. package/src/routes/messages.ts +23 -17
  369. package/src/routes/orchestrator-bootstrap.ts +3 -1
  370. package/src/routes/orchestrator-host-registration.ts +2 -0
  371. package/src/routes/orchestrator-host-utilization.ts +2 -2
  372. package/src/routes/orchestrator-proxy.ts +2 -2
  373. package/src/routes/orchestrator.ts +27 -18
  374. package/src/routes/pairs.ts +8 -8
  375. package/src/routes/project-profile-instructions.ts +1 -1
  376. package/src/routes/project-trust.ts +1 -1
  377. package/src/routes/projects.ts +16 -16
  378. package/src/routes/prompt-templates.ts +12 -12
  379. package/src/routes/provider-quotas.ts +10 -10
  380. package/src/routes/run-command.ts +1 -1
  381. package/src/routes/secrets-backup.ts +4 -5
  382. package/src/routes/secrets-import.ts +3 -4
  383. package/src/routes/secrets-vault.ts +12 -14
  384. package/src/routes/settings.ts +1 -1
  385. package/src/routes/shipping.ts +9 -1
  386. package/src/routes/spawn-policy.ts +8 -7
  387. package/src/routes/sse.ts +2 -2
  388. package/src/routes/team-templates.ts +7 -7
  389. package/src/routes/teams.ts +10 -10
  390. package/src/routes/tokens.ts +18 -17
  391. package/src/routes/users.ts +24 -24
  392. package/src/routes/viewer-read.ts +3 -3
  393. package/src/routes/web-tool-calls.ts +4 -4
  394. package/src/routes/workflows.ts +2 -2
  395. package/src/routes/workspaces.ts +17 -16
  396. package/src/routing-policy-push.ts +6 -6
  397. package/src/runtime-grant.ts +17 -11
  398. package/src/runtime-install.ts +30 -0
  399. package/src/runtime-tokens.ts +20 -28
  400. package/src/secrets-broker/config.ts +1 -1
  401. package/src/secrets-broker/service.ts +2 -2
  402. package/src/security.ts +3 -1
  403. package/src/self-resume-carry.ts +21 -110
  404. package/src/self-resume-supersede.ts +4 -3
  405. package/src/self-resume.ts +54 -66
  406. package/src/server-background.ts +1 -1
  407. package/src/server.ts +25 -26
  408. package/src/services/agent-action.ts +12 -31
  409. package/src/services/agent-effort.ts +7 -32
  410. package/src/services/agent-hang-watchdog-job.ts +2 -2
  411. package/src/services/agent-heartbeat.ts +166 -0
  412. package/src/services/agent-reporting.ts +1 -1
  413. package/src/services/auth-context.ts +6 -0
  414. package/src/services/browser-inventory.ts +3 -3
  415. package/src/services/browser-session-state.ts +3 -2
  416. package/src/services/browser-session.ts +21 -27
  417. package/src/services/bus-command-update.ts +9 -9
  418. package/src/services/checkout-refresh-state.ts +1 -0
  419. package/src/services/checkout-refresh.test-fixture.ts +3 -2
  420. package/src/services/command-host.ts +7 -2
  421. package/src/services/coordinator-digest.ts +3 -2
  422. package/src/services/dispatch-command.ts +12 -13
  423. package/src/services/effective-launch-driver.ts +14 -9
  424. package/src/services/host-changed-paths.test-fixture.ts +5 -6
  425. package/src/services/host-project-readiness.ts +2 -2
  426. package/src/services/host-providers.ts +1 -1
  427. package/src/services/host-utilization.ts +9 -9
  428. package/src/services/idle-agent-digest.ts +17 -12
  429. package/src/services/idle-epics.ts +4 -4
  430. package/src/services/interrupt-agent.ts +12 -9
  431. package/src/services/issue-activity.ts +3 -3
  432. package/src/services/issue-associations.ts +15 -18
  433. package/src/services/issue-lifecycle-comments.ts +3 -2
  434. package/src/services/issue-lifecycle.ts +14 -13
  435. package/src/services/issue-refs.ts +4 -5
  436. package/src/services/kernel-timers-cutover-chaos-worker.ts +1 -1
  437. package/src/services/kernel-timers-ingress-chaos-worker.ts +6 -1
  438. package/src/services/kernel-timers-ingress.ts +3 -3
  439. package/src/services/kernel-timers-message-authority-chaos-worker.ts +3 -10
  440. package/src/services/kernel-timers-operator-chaos-worker.ts +3 -2
  441. package/src/services/kernel-timers-outbox.ts +1 -1
  442. package/src/services/kernel-timers-stage10-operator.ts +1 -1
  443. package/src/services/kernel-timers.ts +4 -3
  444. package/src/services/land-gate-placement.ts +11 -2
  445. package/src/services/land-issue-relations.ts +5 -4
  446. package/src/services/land-restart-retry.ts +7 -6
  447. package/src/services/landed-ancestry.ts +6 -5
  448. package/src/services/legacy-landing-host.ts +4 -1
  449. package/src/services/legacy-landing-recovery.ts +8 -6
  450. package/src/services/managed-running.ts +17 -17
  451. package/src/services/memory-areas.ts +3 -3
  452. package/src/services/merge-pause.ts +9 -15
  453. package/src/services/operator-decisions.ts +37 -41
  454. package/src/services/orchestrator-registration-recovery.ts +6 -2
  455. package/src/services/orchestrator-upgrade.ts +14 -12
  456. package/src/services/permission-decision.ts +4 -3
  457. package/src/services/plan-ci-notice.ts +1 -1
  458. package/src/services/plan-conformance.ts +4 -4
  459. package/src/services/plan-dispatch-policy.ts +10 -3
  460. package/src/services/plan-dispatch.ts +35 -14
  461. package/src/services/plan-graph.ts +39 -261
  462. package/src/services/plan-import.ts +1 -1
  463. package/src/services/plan-live-bindings.ts +8 -37
  464. package/src/services/plan-task-create.ts +1 -1
  465. package/src/services/plan-terminal-refs.ts +2 -12
  466. package/src/services/plan-wake-digest.ts +8 -3
  467. package/src/services/profile-trust.ts +2 -2
  468. package/src/services/project.ts +11 -10
  469. package/src/services/prompt-templates.ts +6 -5
  470. package/src/services/provider-api-key.ts +73 -0
  471. package/src/services/provider-hold-nudge.ts +9 -9
  472. package/src/services/provider-hold-record.ts +13 -12
  473. package/src/services/provider-state-audit.ts +19 -18
  474. package/src/services/provisioning-harness/driver.ts +1 -1
  475. package/src/services/provisioning-harness/fixture-matrix.ts +3 -3
  476. package/src/services/provisioning-harness/lifecycle.ts +24 -22
  477. package/src/services/provisioning-harness/prepare.ts +16 -17
  478. package/src/services/rate-limit-resume.ts +10 -9
  479. package/src/services/red-main-auto-revert.ts +7 -5
  480. package/src/services/red-main-controller-deps.ts +20 -3
  481. package/src/services/red-main-incident.ts +3 -1
  482. package/src/services/red-main-quarantine.ts +2 -3
  483. package/src/services/register-agent.ts +22 -22
  484. package/src/services/restart-project-role.ts +1 -1
  485. package/src/services/restart-spawn.ts +17 -16
  486. package/src/services/review-publish.ts +7 -24
  487. package/src/services/review-ref-reconcile.ts +29 -38
  488. package/src/services/runtime-dependency-alert.ts +27 -0
  489. package/src/services/scheduler-command.ts +11 -9
  490. package/src/services/scheduler.ts +5 -5
  491. package/src/services/self-effort-grant.ts +5 -25
  492. package/src/services/send-message.ts +16 -33
  493. package/src/services/shutdown-agent.ts +17 -14
  494. package/src/services/spawn-agent.ts +12 -41
  495. package/src/services/spawn-chain-inspector.ts +1 -1
  496. package/src/services/spawn-cwd-placement.ts +21 -5
  497. package/src/services/spawn-issue-activity.ts +8 -6
  498. package/src/services/spawn-launch.ts +17 -1
  499. package/src/services/spawn-loss-escalation.ts +1 -1
  500. package/src/services/spawn-registration-watchdog.ts +2 -2
  501. package/src/services/spawn-repo-probe.ts +7 -5
  502. package/src/services/spawn-tree-cleanup.ts +7 -8
  503. package/src/services/steward-reaper.ts +4 -4
  504. package/src/services/task-context-hydration.ts +25 -1
  505. package/src/services/task-delivery.ts +20 -34
  506. package/src/services/task-entity.ts +40 -203
  507. package/src/services/task-issue-link.ts +13 -20
  508. package/src/services/task-issue-weave.ts +12 -11
  509. package/src/services/task-lifecycle.ts +27 -31
  510. package/src/services/task-repo-cwd.ts +37 -0
  511. package/src/services/task-review-hold.ts +4 -17
  512. package/src/services/task-semantic-events.ts +13 -11
  513. package/src/services/task-state-reconcile.ts +3 -4
  514. package/src/services/task-validation.ts +2 -2
  515. package/src/services/team-templates.ts +5 -5
  516. package/src/services/team.ts +31 -98
  517. package/src/services/terminal-provider-exit.ts +6 -5
  518. package/src/services/timer-message-fire-chaos-worker.ts +7 -3
  519. package/src/services/timer-message-fire-outbox.ts +1 -1
  520. package/src/services/transient-agent-reaper.ts +22 -19
  521. package/src/services/turn-reconcile-audit.ts +9 -9
  522. package/src/services/user-onboarding.ts +8 -6
  523. package/src/services/user-profile.ts +6 -9
  524. package/src/services/work-finality.ts +16 -4
  525. package/src/services/workflow-auto-start.ts +2 -1
  526. package/src/services/workflow-caller.ts +61 -4
  527. package/src/services/workflow-child-proof-worker.ts +1 -1
  528. package/src/services/workflow-control-proof-worker.ts +1 -1
  529. package/src/services/workflow-coordinator.ts +8 -2
  530. package/src/services/workflow-decisions.ts +5 -5
  531. package/src/services/workflow-deferred-cleanup.ts +1 -1
  532. package/src/services/workflow-effect-driver.ts +42 -19
  533. package/src/services/workflow-effects.ts +41 -27
  534. package/src/services/workflow-pins.ts +7 -4
  535. package/src/services/workflow-reconcile.ts +1 -0
  536. package/src/services/workflow-resume-pins.ts +3 -3
  537. package/src/services/workflow-routing-defaults.ts +18 -0
  538. package/src/services/workflow-run-view.ts +4 -3
  539. package/src/services/workflow-run.test-fixture.ts +1 -1
  540. package/src/services/workflow-runs.ts +34 -22
  541. package/src/services/workflow-supervisor-state.ts +21 -1
  542. package/src/services/workflow-supervisor.ts +4 -3
  543. package/src/services/workspace-recovery.ts +4 -3
  544. package/src/setup.ts +47 -8
  545. package/src/spawn-admission.ts +10 -2
  546. package/src/spawn-placement.ts +27 -9
  547. package/src/spawn-targets.ts +8 -8
  548. package/src/sse-agent-status.ts +15 -6
  549. package/src/sse.ts +49 -24
  550. package/src/startup-context-injection.ts +61 -57
  551. package/src/steward-handoff.ts +4 -3
  552. package/src/steward-policy-cleanup.ts +9 -8
  553. package/src/steward.ts +2 -2
  554. package/src/task-dispatch-live.ts +5 -2
  555. package/src/task-dispatcher.ts +2 -2
  556. package/src/token-db.ts +2 -2
  557. package/src/token-usage-async.ts +2 -4
  558. package/src/user-awaiting-reply.ts +5 -5
  559. package/src/utils.ts +7 -0
  560. package/src/workspace-actions.ts +24 -29
  561. package/src/workspace-auto-merge.ts +14 -12
  562. package/src/workspace-changed-paths-client.ts +16 -5
  563. package/src/workspace-cleanup-stale.ts +30 -7
  564. package/src/workspace-command-settle.ts +24 -16
  565. package/src/workspace-config.ts +1 -1
  566. package/src/workspace-conflict-resolver.ts +9 -7
  567. package/src/workspace-dead-owner-recovery.ts +5 -4
  568. package/src/workspace-escalation.ts +12 -11
  569. package/src/workspace-human-escalation.ts +3 -3
  570. package/src/workspace-land-gate-watchdog.ts +3 -3
  571. package/src/workspace-land-refusal.ts +20 -0
  572. package/src/workspace-land-stopped.ts +1 -0
  573. package/src/workspace-merge.ts +10 -26
  574. package/src/workspace-nothing-to-land-notice.ts +2 -2
  575. package/src/workspace-orphans.ts +18 -37
  576. package/src/workspace-pr-completion.ts +10 -8
  577. package/src/workspace-rekey.ts +3 -3
  578. package/src/workspace-steward-failure.ts +2 -2
  579. package/src/workspace-steward-wake.ts +2 -2
  580. package/public/assets/agent-liveness-CaNwK0Zf.js +0 -2
  581. package/public/assets/overview-C1DCTzzV.js +0 -2
  582. package/public/assets/provider-display-DsuWMvVL.js +0 -2
  583. package/public/assets/run-card-CpKqRbhg.js +0 -2
  584. package/public/assets/shipping-B9YtnwtG.js +0 -2
  585. package/public/assets/store-DcClXLH0.js +0 -9
  586. package/runner/src/agent-runner/http-liveness.ts +0 -85
  587. package/src/db/on-loop-write-transaction.ts +0 -34
@@ -42,6 +42,6 @@ export async function relayProfileTrust(auth: McpAuthContext, args: Record<strin
42
42
  const capability = optionalEnum(args.capability, "capability", PROJECT_TRUST_CAPABILITIES);
43
43
  if (!capability) throw new ValidationError("capability is required");
44
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: approveProfileProjectTrust({ name, capability, repoKey: text(args, "repoKey"), value: text(args, "value"), by }) };
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") {
@@ -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
  }
@@ -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);
@@ -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, pause/unpause, 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",
@@ -113,7 +114,7 @@ type McpAuthLike = Parameters<typeof authContextFromMcp>[0];
113
114
 
114
115
  function mutationReceipt(full: Record<string, unknown>, verbose: unknown): Record<string, unknown> {
115
116
  if (verbose === true) return full;
116
- const fields = ["runId", "taskId", "workflow", "status", "step", "round", "callerAgentId", "budget", "existing", "resumed", "cancelled", "paused", "reason", "warnings"];
117
+ const fields = ["runId", "taskId", "workflow", "status", "step", "round", "callerAgentId", "budget", "existing", "resumed", "pinsUpdated", "cancelled", "paused", "reason", "warnings"];
117
118
  return Object.fromEntries(fields.filter(key => full[key] !== undefined).map(key => [key, full[key]]));
118
119
  }
119
120
 
@@ -125,8 +126,9 @@ export async function relayWorkflowTool(auth: McpAuthLike, name: string, args: R
125
126
  if (name === "relay_workflow_start") {
126
127
  const workflow = cleanString(args.workflow, "workflow", { max: 64 });
127
128
  if (!workflow) throw new ValidationError("workflow is required");
129
+ const cwd = cleanString(args.cwd, "cwd", { max: 4000 });
128
130
  const pins = parseWorkflowPins(args.pins);
129
- 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);
130
132
  }
131
133
  if (name === "relay_workflow_resume") {
132
134
  const runId = cleanString(args.runId, "runId", { max: 200 });
@@ -1,3 +1,4 @@
1
+ import { createCommandAsync } from "./commands-write";
1
2
  // #3410 — on-touch area memory. The runner reports the first file an agent touches in a path area
2
3
  // (`.agent-relay/areas.json`) in a context generation. This selects that area's memories of the
3
4
  // agent's own project that the startup block holds out (#3409, #3508), renders them, and
@@ -6,10 +7,10 @@
6
7
 
7
8
  import { injectsAtStartup, cleanAreasConfig, type AreaDefinition } from "@humwick/sdk/areas";
8
9
  import { isRecord, stringValue, type AreaEnteredInput, type AreaEnteredResult } from "@humwick/sdk";
9
- import { createCommand } from "./commands-db";
10
+
10
11
  import { emitCommandEvent } from "./command-events";
11
12
  import { contextInjectUnsupported } from "./context-injection-channel";
12
- import { listActiveEntriesInArea, ValidationError } from "./db";
13
+ import { listActiveEntriesInAreaAsync, ValidationError } from "./db";
13
14
  import { entryInjectability } from "./memory-inject-filter";
14
15
  import { memoryHeadline, neutralizeMemoryMarkers } from "./memory-preamble";
15
16
  import { memorySeamForAgent, projectMemoryEnabledForSeam } from "./memory-seam";
@@ -45,8 +46,8 @@ export function parseAreaEnteredInput(body: unknown): AreaEnteredInput {
45
46
 
46
47
  /** The agent's own project's active entries for `area` that its startup block does not carry
47
48
  * (#3508), and it may receive: pinned first, then newest. Ancestor projects are not walked. */
48
- export function selectAreaEntries(projectId: string, area: string, profile: string | undefined, exclude: ReadonlySet<string>, now: number): ProjectEntry[] {
49
- const selected = listActiveEntriesInArea(projectId, area).filter((entry) =>
49
+ export async function selectAreaEntries(projectId: string, area: string, profile: string | undefined, exclude: ReadonlySet<string>, now: number): Promise<ProjectEntry[]> {
50
+ const selected = (await listActiveEntriesInAreaAsync(projectId, area)).filter((entry) =>
50
51
  entry.areas?.includes(area)
51
52
  && !injectsAtStartup(entry)
52
53
  && !exclude.has(entry.id)
@@ -123,7 +124,7 @@ async function selectForAgent(agent: AgentCard, input: AreaEnteredInput, now: nu
123
124
  const projectId = seam.identity.projectId;
124
125
  if (!projectId) return { definition, entries: [], skipped: "no-project" };
125
126
  if (!projectMemoryEnabledForSeam(seam)) return { definition, entries: [], skipped: "project-memory-off" };
126
- return { definition, entries: selectAreaEntries(projectId, input.area, seam.identity.profile, new Set(input.exclude), now) };
127
+ return { definition, entries: await selectAreaEntries(projectId, input.area, seam.identity.profile, new Set(input.exclude), now) };
127
128
  }
128
129
 
129
130
  function areaSummary(area: string, entries: number, tokens: number): string {
@@ -143,7 +144,7 @@ export async function enqueueAreaMemoryInjection(agent: AgentCard, input: AreaEn
143
144
  const tokens = selected ? block.tokens : 0;
144
145
  const omitted = selected ? block.omitted : 0;
145
146
  if (queued) {
146
- const command = createCommand({
147
+ const command = (await createCommandAsync({
147
148
  type: "agent.injectContext",
148
149
  source: "system",
149
150
  target: agent.id,
@@ -158,10 +159,10 @@ export async function enqueueAreaMemoryInjection(agent: AgentCard, input: AreaEn
158
159
  tokens,
159
160
  omitted,
160
161
  },
161
- });
162
+ }));
162
163
  emitCommandEvent(command, "command.requested");
163
164
  }
164
- emitRelayInjectionEvent({
165
+ (await emitRelayInjectionEvent({
165
166
  agentId: agent.id,
166
167
  category: AREA_MEMORY_REASON,
167
168
  summary: areaSummary(input.area, entryIds.length, tokens),
@@ -178,12 +179,12 @@ export async function enqueueAreaMemoryInjection(agent: AgentCard, input: AreaEn
178
179
  ...(skipped ? { skipped } : {}),
179
180
  },
180
181
  timestamp: now,
181
- });
182
+ }));
182
183
  return { area: input.area, queued, entryIds, tokens, omitted, ...(input.inline ? { content: selected ? block.content : "" } : {}) };
183
184
  }
184
185
 
185
186
  /** A `memory-area` inject the runner reported delivered: one more event, `delivered: true`. A stale-generation skip is not one. */
186
- export function settleAreaMemoryCommand(command: Command, now: number = Date.now()): void {
187
+ export async function settleAreaMemoryCommand(command: Command, now: number = Date.now()): Promise<void> {
187
188
  if (command.type !== "agent.injectContext" || command.status !== "succeeded" || command.params.reason !== AREA_MEMORY_REASON) return;
188
189
  // #3411 — the runner drops an inject queued before a context reset and reports it in providerResult.
189
190
  const providerResult = command.result?.providerResult;
@@ -194,7 +195,7 @@ export function settleAreaMemoryCommand(command: Command, now: number = Date.now
194
195
  const generation = typeof params.generation === "number" ? params.generation : 0;
195
196
  const entryIds = Array.isArray(params.memoryIds) ? params.memoryIds.filter((id): id is string => typeof id === "string") : [];
196
197
  const tokens = typeof params.tokens === "number" ? params.tokens : 0;
197
- emitRelayInjectionEvent({
198
+ (await emitRelayInjectionEvent({
198
199
  agentId: command.target,
199
200
  category: AREA_MEMORY_REASON,
200
201
  summary: `${areaSummary(area, entryIds.length, tokens)} delivered`,
@@ -212,5 +213,5 @@ export function settleAreaMemoryCommand(command: Command, now: number = Date.now
212
213
  },
213
214
  timestamp: now,
214
215
  idempotencyKey: `memory-area:${command.id}:settled`,
215
- });
216
+ }));
216
217
  }
@@ -138,12 +138,12 @@ export function isBoundaryCaptureDefect(clause: BoundaryCaptureClause): boolean
138
138
  * abort the boundary AFTER the continuation envelope has already been advanced. Both are strictly
139
139
  * worse outcomes than a missing sentence, so every path here ends in a string.
140
140
  */
141
- export function boundaryCaptureClause(input: {
141
+ export async function boundaryCaptureClause(input: {
142
142
  seam: BoundaryCaptureSeam;
143
143
  agentId: string;
144
144
  slug?: string;
145
145
  now?: number;
146
- }): string {
146
+ }): Promise<string> {
147
147
  let clause: BoundaryCaptureClause;
148
148
  try {
149
149
  clause = resolveBoundaryCaptureClause(input.seam, input.slug);
@@ -157,7 +157,7 @@ export function boundaryCaptureClause(input: {
157
157
  error: errMessage(error),
158
158
  };
159
159
  }
160
- if (isBoundaryCaptureDefect(clause)) reportBoundaryCaptureDefect(clause, input.agentId, input.now ?? Date.now());
160
+ if (isBoundaryCaptureDefect(clause)) (await reportBoundaryCaptureDefect(clause, input.agentId, input.now ?? Date.now()));
161
161
  return clause.text;
162
162
  }
163
163
 
@@ -180,9 +180,9 @@ function describeBoundaryCaptureDefect(clause: BoundaryCaptureClause): string {
180
180
  * timeline write itself fails there is nowhere left to say so — the boundary still proceeds, which
181
181
  * is the outcome that matters.
182
182
  */
183
- function reportBoundaryCaptureDefect(clause: BoundaryCaptureClause, agentId: string, now: number): void {
183
+ async function reportBoundaryCaptureDefect(clause: BoundaryCaptureClause, agentId: string, now: number): Promise<void> {
184
184
  try {
185
- emitRelayInjectionEvent({
185
+ (await emitRelayInjectionEvent({
186
186
  agentId,
187
187
  category: "memory",
188
188
  summary: describeBoundaryCaptureDefect(clause),
@@ -198,7 +198,7 @@ function reportBoundaryCaptureDefect(clause: BoundaryCaptureClause, agentId: str
198
198
  },
199
199
  timestamp: now,
200
200
  idempotencyKey: `memory-capture-clause:${clause.seam}:${agentId}:${clause.status}`,
201
- });
201
+ }));
202
202
  } catch {
203
203
  // Intentionally swallowed: see the doc comment above. A boundary must not fail because its
204
204
  // capture ask could not be announced.