@humwick/server 0.130.1 → 0.130.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (811) hide show
  1. package/README.md +5 -0
  2. package/bundled/prompts/manifest.json +1 -0
  3. package/bundled/prompts/task.hydration.md +1 -1
  4. package/bundled/roles/builder.md +1 -1
  5. package/docs/guides/sub-coordinators.md +12 -5
  6. package/docs/guides/tools-administration.md +4 -0
  7. package/docs/guides/tools-coordination.md +2 -0
  8. package/docs/guides/tools-tasks.md +8 -0
  9. package/docs/guides/workflows.md +74 -0
  10. package/docs/openapi.json +486 -4
  11. package/package.json +10 -18
  12. package/public/assets/{MessageBubble-BWpoBjl4.js → MessageBubble-Bq9kr21N.js} +2 -2
  13. package/public/assets/{PlanGraphPanel-C0auck3n.js → PlanGraphPanel-Dqiroy06.js} +2 -2
  14. package/public/assets/{TraceView-DBnOx7AQ.js → TraceView-DYU962-H.js} +2 -2
  15. package/public/assets/{VaultDecisionCard-0kp2oNBC.js → VaultDecisionCard-DhPfzioE.js} +2 -2
  16. package/public/assets/{activity-yLztXEBt.js → activity-DzCcQTee.js} +2 -2
  17. package/public/assets/{agent-lineage-BbJDR1dW.js → agent-lineage-SgDt9i3T.js} +2 -2
  18. package/public/assets/agent-liveness-Bq-s73jW.js +2 -0
  19. package/public/assets/{agent-name-CTZBrSD9.js → agent-name-CcY3Aijy.js} +2 -2
  20. package/public/assets/agent-profiles-cxtRBn6O.js +2 -0
  21. package/public/assets/{agent-project-badge-9TqzUUYE.js → agent-project-badge-DGYbIhaI.js} +2 -2
  22. package/public/assets/{agent-tools-D4n40pn8.js → agent-tools-DHbftV0N.js} +2 -2
  23. package/public/assets/{agent-type-icon-D6FUarOf.js → agent-type-icon-CY113sp-.js} +2 -2
  24. package/public/assets/{agents-BYDslkJc.js → agents-BPzY7IlQ.js} +2 -2
  25. package/public/assets/{analytics-B-XSbEMC.js → analytics-DENFPv_a.js} +2 -2
  26. package/public/assets/{artifact-viewer-DdWIfV6M.js → artifact-viewer-KRvSc7sl.js} +2 -2
  27. package/public/assets/{artifacts-DPN1q4pA.js → artifacts-C9gSmL3s.js} +2 -2
  28. package/public/assets/{artifacts-oBOqks-2.js → artifacts-DT-HkI5O.js} +2 -2
  29. package/public/assets/{automation-4KcRFXEu.js → automation-BsmjQhKD.js} +2 -2
  30. package/public/assets/{backlog-Cw9xPTCF.js → backlog-8NYH_62t.js} +2 -2
  31. package/public/assets/{busy-health-CTu32MZt.js → busy-health-D3hwvYb4.js} +2 -2
  32. package/public/assets/{channels-BiXzg1G9.js → channels-DCJ5WL7O.js} +2 -2
  33. package/public/assets/{chat-Ctk2qwvA.js → chat-DAIl357U.js} +3 -3
  34. package/public/assets/{code-preview-Bm1wWqAp.js → code-preview-CzrZfr9U.js} +2 -2
  35. package/public/assets/{connectors-C36ax4Vw.js → connectors-xTxtlyou.js} +2 -2
  36. package/public/assets/{cosmos-Jj9LK2Wf.js → cosmos-BpebFLK2.js} +2 -2
  37. package/public/assets/{crate-agent-H6S7-B9T.js → crate-agent-BHvI5wXC.js} +2 -2
  38. package/public/assets/{dependency-graph-Cd1E23wa.js → dependency-graph-DGT0o3wJ.js} +2 -2
  39. package/public/assets/{deploys-Bwfq146q.js → deploys-hqWOHSHE.js} +2 -2
  40. package/public/assets/{display-CfO7rTuF.js → display-CDeH4I8T.js} +2 -2
  41. package/public/assets/{files-DhhZI2Ih.js → files-BTeGVmTg.js} +2 -2
  42. package/public/assets/{fleet-B_rFEbnL.js → fleet-DgXtNgCa.js} +2 -2
  43. package/public/assets/{fleet-metrics-BkHP-P3R.js → fleet-metrics-BHEt5yc_.js} +2 -2
  44. package/public/assets/{formatted-body-Cm1RrzmN.js → formatted-body-MLtodyPp.js} +3 -3
  45. package/public/assets/{formatted-body-impl-DQiOuOD1.js → formatted-body-impl-CAe664Z8.js} +2 -2
  46. package/public/assets/{host-providers-dialog-CHqwXTov.js → host-providers-dialog-mapF4Fj9.js} +2 -2
  47. package/public/assets/index-CqqgOI5R.js +15 -0
  48. package/public/assets/index-MYAIwYTX.css +2 -0
  49. package/public/assets/{insights-fH1EL-qZ.js → insights-DNyf7IzF.js} +2 -2
  50. package/public/assets/{integrations-C5Oix6ng.js → integrations-DlYOHq7T.js} +2 -2
  51. package/public/assets/{issue-ref-chip-ODyondIa.js → issue-ref-chip-CeWBNWn7.js} +2 -2
  52. package/public/assets/{log-viewer-Cvfy6PW7.js → log-viewer-Cib8nqdE.js} +2 -2
  53. package/public/assets/{maintenance-D8CDH5wZ.js → maintenance-DSn1cPm7.js} +2 -2
  54. package/public/assets/{managed-agents-egllbpij.js → managed-agents-C3CkM81m.js} +2 -2
  55. package/public/assets/{markdown-preview-CYSFgVgK.js → markdown-preview-W4VQQPAv.js} +3 -3
  56. package/public/assets/{markdown-preview-impl-BteVIjX4.js → markdown-preview-impl-CMsTdhjq.js} +2 -2
  57. package/public/assets/{memory-C8WmXsyr.js → memory-BV17qtO4.js} +2 -2
  58. package/public/assets/{messages-BzQdqlO6.js → messages-Bm_1AqSA.js} +2 -2
  59. package/public/assets/{orchestrators-B1HxzkNw.js → orchestrators-Dg-vfP09.js} +2 -2
  60. package/public/assets/{overview-DCUnI4Z7.js → overview-DcYCrvlr.js} +2 -2
  61. package/public/assets/{pairs-ftCd2XcD.js → pairs-8o9nuG3V.js} +2 -2
  62. package/public/assets/{profile-icon-B2zH8DMH.js → profile-icon-BsRyBMea.js} +2 -2
  63. package/public/assets/project-profile-instructions-DETKFn_E.js +2 -0
  64. package/public/assets/projects-M_m6AHws.js +2 -0
  65. package/public/assets/{prompt-settings-Bftq9czX.js → prompt-settings-C_mNCgeL.js} +2 -2
  66. package/public/assets/provider-display-BEeLXC_D.js +2 -0
  67. package/public/assets/{registry-DWCU5c8q.js → registry-DDHHHE5N.js} +2 -2
  68. package/public/assets/run-card-Dt4I4jaP.js +2 -0
  69. package/public/assets/scroll-text-BKXS1ahr.js +2 -0
  70. package/public/assets/{secrets-C7GIUATz.js → secrets-BkVwxI5O.js} +2 -2
  71. package/public/assets/{service-access-settings-C3aujqTG.js → service-access-settings-Crq-6a-B.js} +2 -2
  72. package/public/assets/{settings-C6sZ9eBa.js → settings-CYcavMFu.js} +2 -2
  73. package/public/assets/shipping-H6gzEeZB.js +2 -0
  74. package/public/assets/{stats-V9Z-GxUd.js → stats-BJVeWkpV.js} +2 -2
  75. package/public/assets/{status-dot-CVv0iGHL.js → status-dot-BcHyw1Vw.js} +2 -2
  76. package/public/assets/store-DKPDIZBe.js +9 -0
  77. package/public/assets/{tasks-CXU75HRF.js → tasks-qJjlQPpx.js} +2 -2
  78. package/public/assets/{teams-BPf976zb.js → teams-Cd5Sk1uX.js} +2 -2
  79. package/public/assets/{terminal-viewer-DE9BOe-8.js → terminal-viewer-CpY5_m7W.js} +3 -3
  80. package/public/assets/{terminal-viewer-impl-D04pjmGh.js → terminal-viewer-impl-DI_2llFR.js} +2 -2
  81. package/public/assets/token-estimate-Co-Jdphh.js +2 -0
  82. package/public/assets/{use-agent-terminal-B1yR456R.js → use-agent-terminal-0yJA_buM.js} +2 -2
  83. package/public/assets/{use-decisions-D-S4tpDf.js → use-decisions-uJXHf34W.js} +2 -2
  84. package/public/assets/use-project-list-CpWl6eHQ.js +2 -0
  85. package/public/assets/{use-selectors-CnrAk2YP.js → use-selectors-BdxBW8mL.js} +2 -2
  86. package/public/assets/{user-avatar-nBFIcR4M.js → user-avatar-3IndfpOc.js} +2 -2
  87. package/public/assets/versioned-prompt-editor-CIVg7XB1.js +8 -0
  88. package/public/assets/{work-queue-TCjJxeT-.js → work-queue-B9rnLwHZ.js} +2 -2
  89. package/public/assets/{workflow-marker-Cf3Hf2fN.js → workflow-marker-X8wxyhzC.js} +2 -2
  90. package/public/assets/{workflows-CXQX20Qj.js → workflows-o5YyMFW7.js} +2 -2
  91. package/public/assets/{workspaces-qSYzKYMA.js → workspaces-CzEGoAng.js} +2 -2
  92. package/public/cosmos.html +4 -4
  93. package/public/index.html +31 -29
  94. package/runner/plugins/claude/.claude-plugin/plugin.json +1 -1
  95. package/runner/plugins/claude/hooks/gate-run-guard.provisioned.mjs +31 -1
  96. package/runner/src/adapters/claude-effort.ts +2 -4
  97. package/runner/src/adapters/claude-headless.ts +1 -1
  98. package/runner/src/adapters/claude-launch-exit.ts +26 -0
  99. package/runner/src/adapters/claude-session-probe.ts +1 -1
  100. package/runner/src/adapters/claude-tmux.ts +38 -10
  101. package/runner/src/adapters/claude.ts +28 -75
  102. package/runner/src/adapters/codex-launch-config.ts +4 -5
  103. package/runner/src/adapters/codex.ts +1 -1
  104. package/runner/src/adapters/opencode-provider.ts +7 -22
  105. package/runner/src/adapters/opencode.ts +4 -4
  106. package/runner/src/adapters/provider-quota-harvest.ts +20 -71
  107. package/runner/src/agent-runner/credentials.ts +42 -12
  108. package/runner/src/agent-runner/inbox.ts +27 -0
  109. package/runner/src/agent-runner/lifecycle-milestones.ts +2 -4
  110. package/runner/src/agent-runner/liveness-exchange.ts +104 -0
  111. package/runner/src/bin/claude.ts +4 -0
  112. package/runner/src/bin/codex.ts +4 -0
  113. package/runner/src/bin/opencode.ts +4 -0
  114. package/runner/src/claude-system-prompt.ts +49 -0
  115. package/runner/src/index.ts +5 -2
  116. package/runner/src/launch-assembly.ts +14 -10
  117. package/runner/src/profile-home.ts +1 -1
  118. package/runner/src/project-instructions.ts +2 -2
  119. package/runner/src/provider-command.ts +18 -0
  120. package/runner/src/provider-setup.ts +35 -0
  121. package/runner/src/providers.ts +2 -1
  122. package/runner/src/runner-core.ts +32 -38
  123. package/runner/src/runner-helpers.ts +0 -8
  124. package/runner/src/session-scratch.ts +6 -2
  125. package/runner/src/spawn-input.ts +2 -1
  126. package/runner/src/test-run-dedup.ts +59 -56
  127. package/runner/test-support/provisioning-context.ts +4 -2
  128. package/runner/test-support/runner-harness.ts +2 -1
  129. package/scripts/cd-config.ts +8 -0
  130. package/scripts/gate-run-lease.ts +10 -7
  131. package/scripts/gate.sh +5 -1
  132. package/scripts/steward-policy-cleanup.ts +2 -2
  133. package/src/agent-authz.ts +2 -2
  134. package/src/agent-drive-arbiter.ts +3 -8
  135. package/src/agent-exit-cleanup-async.ts +2 -2
  136. package/src/agent-exit-cleanup.ts +23 -19
  137. package/src/agent-lifecycle-events.ts +112 -85
  138. package/src/agent-ref.ts +3 -2
  139. package/src/agent-status-events.ts +43 -14
  140. package/src/auth/password.ts +4 -3
  141. package/src/auth/session-refresh.ts +1 -1
  142. package/src/auth/session.test-fixture.ts +2 -2
  143. package/src/auth/session.ts +7 -7
  144. package/src/automations/crud.ts +8 -81
  145. package/src/automations/dispatch.ts +33 -58
  146. package/src/automations/index.ts +1 -1
  147. package/src/automations/persistence.ts +65 -0
  148. package/src/automations/precheck.ts +18 -16
  149. package/src/automations/read-async.ts +11 -0
  150. package/src/automations/reconcile.ts +30 -39
  151. package/src/automations/storage.ts +33 -10
  152. package/src/automations/write-async.ts +33 -0
  153. package/src/branch-land-notice.ts +93 -0
  154. package/src/branch-landed.ts +31 -98
  155. package/src/bus.ts +40 -39
  156. package/src/cd-deploy-notify.ts +32 -4
  157. package/src/cd-host-lag-notify.ts +7 -6
  158. package/src/ci/incidents.ts +2 -2
  159. package/src/ci/monitor.ts +5 -8
  160. package/src/ci/notifications.ts +4 -4
  161. package/src/ci/root-missing.ts +4 -9
  162. package/src/ci/transition-notify.ts +12 -44
  163. package/src/claude-app/oauth-http.ts +3 -3
  164. package/src/cli/cd-pauses.ts +19 -0
  165. package/src/cli/orchestrator.ts +1 -1
  166. package/src/cli/state.ts +2 -19
  167. package/src/cli/task-edit.ts +22 -0
  168. package/src/cli/task.ts +3 -1
  169. package/src/cli/workflow.ts +19 -4
  170. package/src/commands-db.ts +7 -7
  171. package/src/commands-write.ts +8 -0
  172. package/src/compaction-watch.ts +10 -8
  173. package/src/config-store-write.ts +13 -1
  174. package/src/config-store.ts +25 -14
  175. package/src/config.ts +4 -11
  176. package/src/connectors.ts +10 -8
  177. package/src/context-advisory.ts +22 -21
  178. package/src/db/activity-async.ts +6 -1
  179. package/src/db/activity-write-ops.ts +12 -1
  180. package/src/db/activity.ts +1 -14
  181. package/src/db/agent-action-write.ts +36 -0
  182. package/src/db/agent-control-async.ts +9 -0
  183. package/src/db/agent-control-write.ts +49 -0
  184. package/src/db/agent-effort-observe.ts +22 -0
  185. package/src/db/agent-meta.ts +14 -3
  186. package/src/db/agent-search.ts +1 -15
  187. package/src/db/agents-async.ts +59 -9
  188. package/src/db/agents-write-ops.ts +12 -3
  189. package/src/db/agents.ts +95 -65
  190. package/src/db/auth-identities.ts +2 -2
  191. package/src/db/automation-read-ops.ts +11 -0
  192. package/src/db/automation-write-ops.ts +46 -0
  193. package/src/db/blackboard.ts +2 -2
  194. package/src/db/browser-session-write.ts +32 -0
  195. package/src/db/bus-outbox-write-ops.ts +3 -1
  196. package/src/db/checkout-refresh-schema.ts +47 -0
  197. package/src/db/checkout-refresh.ts +5 -5
  198. package/src/db/ci-incidents-async.ts +5 -5
  199. package/src/db/ci-incidents-write-ops.ts +2 -2
  200. package/src/db/command-agent-profile-backfill.ts +39 -0
  201. package/src/db/command-agent-profiles.ts +5 -1
  202. package/src/db/command-retention.ts +126 -0
  203. package/src/db/command-row.ts +10 -2
  204. package/src/db/commands-list-query.ts +2 -0
  205. package/src/db/commands-planner-stats.test-fixture.ts +8 -0
  206. package/src/db/commands-read-ops.ts +16 -0
  207. package/src/db/commands-spawn-read.ts +1 -1
  208. package/src/db/config-store-write-ops.ts +7 -2
  209. package/src/db/connection.ts +1 -182
  210. package/src/db/context-carry-write.ts +74 -0
  211. package/src/db/continuation-archives-async.ts +5 -0
  212. package/src/db/continuation-archives-write-ops.ts +7 -0
  213. package/src/db/continuations.ts +6 -6
  214. package/src/db/db-error-registry.ts +12 -0
  215. package/src/db/db-writer-worker.ts +8 -1
  216. package/src/db/deploy-events-async.ts +1 -0
  217. package/src/db/deploy-events-read-ops.ts +2 -1
  218. package/src/db/deploy-events.ts +35 -4
  219. package/src/db/gateway.ts +26 -133
  220. package/src/db/history-retention-ops.ts +13 -0
  221. package/src/db/hosts-registration.ts +10 -2
  222. package/src/db/hosts.ts +9 -6
  223. package/src/db/inbox-async.ts +2 -2
  224. package/src/db/inbox-read-ops.ts +1 -1
  225. package/src/db/inbox.ts +9 -17
  226. package/src/db/index.ts +2 -0
  227. package/src/db/integrations-async.ts +8 -0
  228. package/src/db/integrations-ops.ts +15 -0
  229. package/src/db/integrations.ts +15 -21
  230. package/src/db/issue-associations.ts +2 -2
  231. package/src/db/issue-lifecycle.ts +3 -4
  232. package/src/db/issue-refs-async.ts +23 -0
  233. package/src/db/issue-refs-read-ops.ts +6 -0
  234. package/src/db/issue-refs-write-ops.ts +29 -0
  235. package/src/db/issue-refs.ts +15 -16
  236. package/src/db/kernel-event-log-schema.ts +2 -0
  237. package/src/db/land-boundaries.ts +51 -5
  238. package/src/db/land-gate-attestations.ts +2 -2
  239. package/src/db/landing-receipts.ts +2 -2
  240. package/src/db/lifecycle-context-write.ts +5 -0
  241. package/src/db/lifecycle-tail-async.ts +76 -0
  242. package/src/db/lifecycle-tail-write-ops.ts +62 -0
  243. package/src/db/lifecycle-write-window.ts +2 -1
  244. package/src/db/lineage-pair-dedupe-sql.ts +3 -3
  245. package/src/db/long-running-work.ts +2 -2
  246. package/src/db/main-connection-mode.ts +11 -0
  247. package/src/db/main-connection-writes.ts +41 -2
  248. package/src/db/maintenance-job-reconcile.ts +61 -0
  249. package/src/db/maintenance-job-runs-async.ts +14 -0
  250. package/src/db/maintenance-job-write-ops.ts +9 -0
  251. package/src/db/maintenance-pauses.ts +2 -2
  252. package/src/db/mappers.ts +2 -14
  253. package/src/db/merge-lease.ts +1 -15
  254. package/src/db/message-send.ts +4 -0
  255. package/src/db/messages.ts +31 -25
  256. package/src/db/migrations.ts +25 -16
  257. package/src/db/notification-write-ops.ts +19 -0
  258. package/src/db/operator-answer-write.ts +19 -0
  259. package/src/db/orchestrators.ts +14 -76
  260. package/src/db/pairs-async.ts +22 -1
  261. package/src/db/pairs-write-ops.ts +8 -3
  262. package/src/db/pairs.ts +42 -61
  263. package/src/db/plan-dispatch-schema.ts +5 -1
  264. package/src/db/plan-ready-notices.ts +43 -0
  265. package/src/db/plan-tools-include-migration.ts +36 -0
  266. package/src/db/plans-write-ops.ts +2 -0
  267. package/src/db/presence-buffer.ts +5 -0
  268. package/src/db/presence-loop.ts +18 -23
  269. package/src/db/presence-write.ts +0 -6
  270. package/src/db/project-entries-async.ts +14 -0
  271. package/src/db/project-entries-read-ops.ts +5 -1
  272. package/src/db/project-entries-write-ops.ts +8 -0
  273. package/src/db/project-entries.ts +15 -12
  274. package/src/db/project-journal.ts +2 -2
  275. package/src/db/project-profile-instructions.ts +50 -0
  276. package/src/db/project-trust-approvals.ts +2 -2
  277. package/src/db/prompt-templates.ts +4 -4
  278. package/src/db/prompt-versions.ts +9 -2
  279. package/src/db/provider-config-history.ts +8 -3
  280. package/src/db/provider-model-seed.ts +34 -0
  281. package/src/db/read-op-marshaling-fixtures.ts +23 -0
  282. package/src/db/read-ops.ts +8 -0
  283. package/src/db/retention.ts +13 -2
  284. package/src/db/review-publish-write.ts +8 -0
  285. package/src/db/routing-policy.ts +2 -3
  286. package/src/db/runtime-admin-async.ts +19 -0
  287. package/src/db/runtime-admin-write-ops.ts +36 -0
  288. package/src/db/runtime-tail-async.ts +288 -0
  289. package/src/db/runtime-tail-write-ops.ts +97 -0
  290. package/src/db/schema.ts +13 -4
  291. package/src/db/spawn-budget.ts +5 -0
  292. package/src/db/spawn-delegation-state.ts +11 -4
  293. package/src/db/spawn-delegation.ts +1 -11
  294. package/src/db/sql-audit-indexes.ts +3 -0
  295. package/src/db/stats-async.ts +9 -6
  296. package/src/db/task-entity.ts +28 -6
  297. package/src/db/task-list.ts +3 -1
  298. package/src/db/tasks.ts +1 -17
  299. package/src/db/team-claim-policy.ts +60 -0
  300. package/src/db/teams-async.ts +4 -0
  301. package/src/db/teams-write-ops.ts +4 -0
  302. package/src/db/terminal-events.ts +15 -0
  303. package/src/db/timer-cutover-bodies.ts +292 -0
  304. package/src/db/timer-cutover-core.ts +37 -278
  305. package/src/db/timer-cutover-state.ts +40 -0
  306. package/src/db/timer-cutover-write-ops.ts +1 -40
  307. package/src/db/timer-ingress.ts +7 -1
  308. package/src/db/token-db-write-ops.ts +19 -0
  309. package/src/db/token-standing-async.ts +12 -0
  310. package/src/db/token-standing.ts +21 -20
  311. package/src/db/token-usage-retention.ts +33 -0
  312. package/src/db/token-usage-write-ops.ts +1 -1
  313. package/src/db/token-usage.ts +4 -1
  314. package/src/db/user-invites-async.ts +13 -0
  315. package/src/db/user-invites.ts +3 -3
  316. package/src/db/users.ts +14 -6
  317. package/src/db/workflow-contact.ts +1 -1
  318. package/src/db/workflow-task-read-ops.ts +30 -0
  319. package/src/db/workspaces.ts +8 -5
  320. package/src/db/write-ops.ts +37 -12
  321. package/src/db/writer-fault-seam.ts +2 -9
  322. package/src/db/writer-fault-test-ops.ts +18 -0
  323. package/src/db/writer-gateway.ts +58 -56
  324. package/src/dev.ts +8 -3
  325. package/src/dispatch-availability.ts +10 -6
  326. package/src/ephemeral/{landing-ingress-proof-worker.ts → landing-ingress-proof.test-fixture.ts} +4 -2
  327. package/src/event-loop-lag.ts +4 -2
  328. package/src/event-loop-yield.ts +2 -2
  329. package/src/events.ts +10 -8
  330. package/src/host/disk-alert.ts +121 -0
  331. package/src/host-provider-store.ts +5 -4
  332. package/src/hub-metrics-report.ts +5 -1
  333. package/src/hub-metrics.ts +38 -18
  334. package/src/injection-sweep-pacing.ts +6 -8
  335. package/src/land-gate-notifications.ts +11 -10
  336. package/src/land-gate-queue-progress.ts +3 -3
  337. package/src/land-settle-dispatch.ts +52 -92
  338. package/src/lifecycle-context-pressure.ts +11 -10
  339. package/src/lifecycle-manager.ts +107 -100
  340. package/src/maintenance/breaker.ts +18 -16
  341. package/src/maintenance/cd-watcher.ts +3 -3
  342. package/src/maintenance/checkout-refresh.ts +18 -1
  343. package/src/maintenance/critical-job-watchdog.ts +19 -20
  344. package/src/maintenance/events.ts +3 -3
  345. package/src/maintenance/history-retention-job.ts +30 -0
  346. package/src/maintenance/index.ts +1 -0
  347. package/src/maintenance/jobs.ts +32 -69
  348. package/src/maintenance/long-running-work.ts +3 -1
  349. package/src/maintenance/offline-agent-prune-job.ts +28 -0
  350. package/src/maintenance/orphaned-sessions.ts +5 -4
  351. package/src/maintenance/pauses.ts +4 -10
  352. package/src/maintenance/plan-ready-notice-job.ts +71 -0
  353. package/src/maintenance/scheduler.ts +98 -137
  354. package/src/maintenance/stalled-delivery-pager.ts +10 -9
  355. package/src/maintenance/teams.ts +19 -30
  356. package/src/maintenance/workspaces.ts +18 -28
  357. package/src/managed-policy-escalation.ts +7 -7
  358. package/src/managed-policy.ts +32 -28
  359. package/src/managed-provider-gate.ts +5 -4
  360. package/src/managed-spawn-reservation.ts +5 -4
  361. package/src/mcp/index.ts +12 -9
  362. package/src/mcp/output-descriptions.ts +8 -8
  363. package/src/mcp/presentation.ts +6 -5
  364. package/src/mcp/project-profile-instructions.ts +32 -0
  365. package/src/mcp/runtime-output.ts +6 -1
  366. package/src/mcp/self-care-visibility.ts +2 -2
  367. package/src/mcp/spawn-targets-matrix.ts +10 -1
  368. package/src/mcp/tool-groups.ts +4 -3
  369. package/src/mcp/tool-roles.ts +81 -0
  370. package/src/mcp/tools-spawn.ts +4 -3
  371. package/src/mcp/tools-workspace.ts +1 -1
  372. package/src/mcp-agent-action.ts +1 -2
  373. package/src/mcp-blackboard-tools.ts +6 -5
  374. package/src/mcp-decision-tools.ts +7 -7
  375. package/src/mcp-egress-tools.ts +10 -9
  376. package/src/mcp-issue-activity-tools.ts +2 -2
  377. package/src/mcp-issue-association-tools.ts +4 -4
  378. package/src/mcp-issue-ref-tools.ts +13 -12
  379. package/src/mcp-maintenance-tools.ts +2 -2
  380. package/src/mcp-merge-tools.ts +5 -5
  381. package/src/mcp-notification-subscription-tools.ts +14 -15
  382. package/src/mcp-output-levels.test-fixture.ts +1 -1
  383. package/src/mcp-profile-trust-tools.ts +5 -5
  384. package/src/mcp-project-journal-tools.ts +4 -12
  385. package/src/mcp-project-tools.ts +17 -18
  386. package/src/mcp-provider-catalog.ts +2 -2
  387. package/src/mcp-routing-policy-tools.ts +3 -2
  388. package/src/mcp-task-tools.ts +11 -5
  389. package/src/mcp-team-template-tools.ts +3 -3
  390. package/src/mcp-team-tools.ts +6 -6
  391. package/src/mcp-workflow-tools.ts +13 -4
  392. package/src/memory-area-injection.ts +13 -12
  393. package/src/memory-boundary-capture.ts +6 -6
  394. package/src/memory-injection.ts +45 -43
  395. package/src/merge-pause-maintenance.ts +5 -4
  396. package/src/notification-router.ts +44 -17
  397. package/src/notification-types.ts +2 -1
  398. package/src/notify.ts +5 -5
  399. package/src/observed-reset-refresh.ts +4 -4
  400. package/src/operator-alarm.ts +23 -11
  401. package/src/project-ingest.ts +6 -6
  402. package/src/project-instructions.ts +12 -1
  403. package/src/project-profile-instruction-text.ts +6 -0
  404. package/src/project-profile-instructions.ts +20 -0
  405. package/src/project-trust.ts +12 -11
  406. package/src/prompt-resolver.ts +3 -3
  407. package/src/provider-catalog-store.ts +3 -49
  408. package/src/provider-config-store.ts +12 -11
  409. package/src/provider-model-seed.ts +1 -18
  410. package/src/provider-quota-async.ts +5 -7
  411. package/src/provider-quota-config-store.ts +5 -4
  412. package/src/provider-secrets.test-fixture.ts +3 -3
  413. package/src/provider-timeline-event.ts +4 -7
  414. package/src/quota-band-delivery.ts +2 -2
  415. package/src/recipe-runner.ts +6 -5
  416. package/src/repo-config-source.ts +10 -4
  417. package/src/retention-config-store.ts +4 -3
  418. package/src/reviewer-pipeline.ts +11 -10
  419. package/src/routes/_route.ts +4 -4
  420. package/src/routes/_shared.ts +13 -12
  421. package/src/routes/agent-effort.ts +5 -5
  422. package/src/routes/agent-heartbeat-quota.ts +23 -0
  423. package/src/routes/agent-keep.ts +1 -1
  424. package/src/routes/agent-profiles.ts +6 -6
  425. package/src/routes/agent-reporting.ts +1 -1
  426. package/src/routes/agent-self-effort.ts +5 -5
  427. package/src/routes/agent-sessions.ts +24 -24
  428. package/src/routes/agents-spawn.ts +2 -2
  429. package/src/routes/agents.ts +19 -121
  430. package/src/routes/auth.ts +14 -15
  431. package/src/routes/authority-audit.ts +2 -2
  432. package/src/routes/automations.ts +6 -5
  433. package/src/routes/channel-binding-delete.ts +1 -1
  434. package/src/routes/channel-output.ts +3 -3
  435. package/src/routes/claude-api-budget.ts +5 -5
  436. package/src/routes/commands-listing.ts +5 -1
  437. package/src/routes/commands.ts +31 -29
  438. package/src/routes/context-resets.ts +2 -2
  439. package/src/routes/continuation-archives.ts +2 -2
  440. package/src/routes/coordinator-teams.ts +1 -1
  441. package/src/routes/decisions.ts +2 -2
  442. package/src/routes/host-secret-files.ts +1 -1
  443. package/src/routes/hosts.ts +11 -11
  444. package/src/routes/inbox.ts +3 -2
  445. package/src/routes/index.ts +12 -2
  446. package/src/routes/integrations.ts +32 -56
  447. package/src/routes/issue-activity.ts +2 -2
  448. package/src/routes/issue-associations.ts +4 -4
  449. package/src/routes/issue-refs.ts +9 -9
  450. package/src/routes/kernel-timers-operator.ts +1 -1
  451. package/src/routes/memory.ts +1 -1
  452. package/src/routes/merges.ts +11 -11
  453. package/src/routes/messages.ts +23 -17
  454. package/src/routes/orchestrator-bootstrap.ts +2 -2
  455. package/src/routes/orchestrator-host-registration.ts +4 -2
  456. package/src/routes/orchestrator-host-utilization.ts +5 -3
  457. package/src/routes/orchestrator-proxy.ts +4 -4
  458. package/src/routes/orchestrator.ts +28 -19
  459. package/src/routes/pairs.ts +8 -8
  460. package/src/routes/project-profile-instructions.ts +27 -0
  461. package/src/routes/project-trust.ts +3 -3
  462. package/src/routes/projects.ts +16 -16
  463. package/src/routes/prompt-templates.ts +12 -12
  464. package/src/routes/provider-config.ts +6 -6
  465. package/src/routes/provider-quota-config.ts +2 -2
  466. package/src/routes/provider-quotas.ts +10 -10
  467. package/src/routes/run-command.ts +1 -1
  468. package/src/routes/secrets-backup.ts +2 -2
  469. package/src/routes/secrets-import.ts +1 -1
  470. package/src/routes/secrets-vault.ts +7 -7
  471. package/src/routes/settings.ts +6 -6
  472. package/src/routes/shipping.ts +9 -1
  473. package/src/routes/spawn-policy.ts +8 -7
  474. package/src/routes/sse.ts +2 -2
  475. package/src/routes/stats.ts +6 -6
  476. package/src/routes/task-http.ts +15 -1
  477. package/src/routes/task-issues.ts +11 -26
  478. package/src/routes/tasks.ts +22 -53
  479. package/src/routes/team-templates.ts +12 -12
  480. package/src/routes/teams-config.ts +2 -2
  481. package/src/routes/teams.ts +10 -10
  482. package/src/routes/tokens.ts +30 -22
  483. package/src/routes/users.ts +24 -24
  484. package/src/routes/viewer-read.ts +3 -3
  485. package/src/routes/web-tool-calls.ts +4 -4
  486. package/src/routes/workflows.ts +22 -7
  487. package/src/routes/workspaces.ts +17 -16
  488. package/src/routing-policy-normalize.ts +1 -2
  489. package/src/routing-policy-push.ts +6 -6
  490. package/src/routing-step-defaults.ts +0 -2
  491. package/src/runner-token-mint-limit.ts +63 -0
  492. package/src/runtime-grant.ts +21 -13
  493. package/src/runtime-tokens.ts +59 -35
  494. package/src/secrets-broker/config.ts +1 -1
  495. package/src/secrets-broker/service.ts +2 -2
  496. package/src/security.ts +16 -21
  497. package/src/self-resume-carry.ts +21 -110
  498. package/src/self-resume-supersede.ts +4 -3
  499. package/src/self-resume.ts +54 -66
  500. package/src/server-background.ts +2 -2
  501. package/src/server.ts +26 -24
  502. package/src/services/agent-action.ts +12 -31
  503. package/src/services/agent-effort.ts +7 -32
  504. package/src/services/agent-hang-watchdog-job.ts +2 -2
  505. package/src/services/agent-heartbeat.ts +166 -0
  506. package/src/services/agent-reporting.ts +1 -1
  507. package/src/services/browser-inventory.ts +3 -3
  508. package/src/services/browser-session-state.ts +3 -2
  509. package/src/services/browser-session.ts +21 -27
  510. package/src/services/bus-command-update.ts +9 -9
  511. package/src/services/checkout-refresh-state.ts +1 -0
  512. package/src/services/checkout-refresh.test-fixture.ts +3 -2
  513. package/src/services/command-host.ts +7 -2
  514. package/src/services/coordinator-digest.ts +3 -2
  515. package/src/services/dispatch-command.ts +12 -13
  516. package/src/services/effective-launch-driver.ts +14 -9
  517. package/src/services/host-changed-paths.test-fixture.ts +5 -6
  518. package/src/services/host-project-readiness.ts +2 -2
  519. package/src/services/host-providers.ts +1 -1
  520. package/src/services/host-utilization.ts +27 -4
  521. package/src/services/idle-agent-digest.ts +17 -12
  522. package/src/services/idle-epics.ts +9 -10
  523. package/src/services/interrupt-agent.ts +12 -9
  524. package/src/services/issue-activity.ts +3 -3
  525. package/src/services/issue-associations.ts +15 -18
  526. package/src/services/issue-lifecycle-comments.ts +3 -2
  527. package/src/services/issue-lifecycle.ts +69 -72
  528. package/src/services/issue-refs.ts +10 -15
  529. package/src/services/kernel-timers-cutover-chaos-worker.ts +11 -8
  530. package/src/services/kernel-timers-ingress-chaos-worker.ts +6 -1
  531. package/src/services/kernel-timers-ingress.ts +4 -4
  532. package/src/services/kernel-timers-message-authority-chaos-worker.ts +3 -10
  533. package/src/services/kernel-timers-operator-chaos-worker.ts +3 -2
  534. package/src/services/kernel-timers-outbox.ts +1 -1
  535. package/src/services/kernel-timers-stage10-operator.ts +1 -1
  536. package/src/services/kernel-timers.ts +4 -3
  537. package/src/services/land-gate-placement.ts +11 -2
  538. package/src/services/land-issue-relations.ts +5 -4
  539. package/src/services/land-restart-retry.ts +7 -6
  540. package/src/services/landed-ancestry.ts +25 -8
  541. package/src/services/legacy-landing-host.ts +4 -1
  542. package/src/services/legacy-landing-recovery.ts +8 -6
  543. package/src/services/managed-running.ts +17 -17
  544. package/src/services/memory-areas.ts +17 -53
  545. package/src/services/merge-pause.ts +9 -15
  546. package/src/services/operator-decisions.ts +37 -41
  547. package/src/services/orchestrator-registration-recovery.ts +6 -2
  548. package/src/services/orchestrator-upgrade.ts +14 -12
  549. package/src/services/permission-decision.ts +4 -3
  550. package/src/services/plan-ci-notice.ts +57 -0
  551. package/src/services/plan-ci-recovery.ts +2 -55
  552. package/src/services/plan-conformance.ts +4 -4
  553. package/src/services/plan-dispatch-policy.ts +10 -3
  554. package/src/services/plan-dispatch.ts +35 -14
  555. package/src/services/plan-graph.ts +39 -261
  556. package/src/services/plan-import.ts +1 -1
  557. package/src/services/plan-live-bindings.ts +8 -37
  558. package/src/services/plan-task-create.ts +1 -1
  559. package/src/services/plan-terminal-refs.ts +2 -12
  560. package/src/services/plan-wake-digest.ts +9 -3
  561. package/src/services/profile-trust.ts +6 -5
  562. package/src/services/project-config-read.ts +70 -0
  563. package/src/services/project-profile-instructions.ts +54 -0
  564. package/src/services/project.ts +11 -10
  565. package/src/services/prompt-templates.ts +6 -5
  566. package/src/services/provider-hold-nudge.ts +9 -9
  567. package/src/services/provider-hold-record.ts +13 -12
  568. package/src/services/provider-state-audit.ts +19 -18
  569. package/src/services/provisioning-harness/budget-baseline.json +4 -4
  570. package/src/services/provisioning-harness/driver.ts +1 -1
  571. package/src/services/provisioning-harness/fixture-matrix.ts +3 -3
  572. package/src/services/provisioning-harness/lifecycle.ts +24 -22
  573. package/src/services/provisioning-harness/prepare.ts +16 -17
  574. package/src/services/rate-limit-resume.ts +10 -9
  575. package/src/services/red-main-auto-revert.ts +7 -5
  576. package/src/services/red-main-controller-deps.ts +20 -3
  577. package/src/services/red-main-incident.ts +3 -1
  578. package/src/services/red-main-quarantine.ts +2 -3
  579. package/src/services/register-agent.ts +22 -22
  580. package/src/services/restart-project-role.ts +1 -1
  581. package/src/services/restart-spawn.ts +74 -61
  582. package/src/services/review-publish.ts +7 -24
  583. package/src/services/review-ref-reconcile.ts +29 -38
  584. package/src/services/runtime-dependency-alert.ts +27 -0
  585. package/src/services/scheduler-command.ts +11 -9
  586. package/src/services/scheduler.ts +5 -5
  587. package/src/services/self-care-state.ts +2 -1
  588. package/src/services/self-effort-grant.ts +5 -25
  589. package/src/services/self-effort.ts +5 -5
  590. package/src/services/send-message.ts +21 -34
  591. package/src/services/shutdown-agent.ts +17 -14
  592. package/src/services/spawn-agent.ts +25 -43
  593. package/src/services/spawn-chain-inspector.ts +7 -14
  594. package/src/services/spawn-cwd-placement.ts +21 -5
  595. package/src/services/spawn-issue-activity.ts +8 -6
  596. package/src/services/spawn-launch.ts +17 -1
  597. package/src/services/spawn-loss-escalation.ts +1 -1
  598. package/src/services/spawn-policy.ts +68 -0
  599. package/src/services/spawn-registration-watchdog.ts +2 -2
  600. package/src/services/spawn-repo-probe.ts +7 -5
  601. package/src/services/spawn-tree-cleanup.ts +8 -9
  602. package/src/services/steward-reaper.ts +4 -4
  603. package/src/services/task-context-hydration.ts +25 -1
  604. package/src/services/task-delivery.ts +20 -34
  605. package/src/services/task-dispatch.ts +3 -0
  606. package/src/services/task-entity.ts +40 -203
  607. package/src/services/task-issue-link.ts +13 -20
  608. package/src/services/task-issue-weave.ts +12 -11
  609. package/src/services/task-lifecycle.ts +27 -31
  610. package/src/services/task-repo-cwd.ts +37 -0
  611. package/src/services/task-review-hold.ts +4 -17
  612. package/src/services/task-semantic-events.ts +13 -11
  613. package/src/services/task-state-reconcile.ts +8 -17
  614. package/src/services/task-validation.ts +2 -2
  615. package/src/services/team-templates.ts +12 -11
  616. package/src/services/team.ts +31 -98
  617. package/src/services/terminal-provider-exit.ts +6 -5
  618. package/src/services/timer-message-fire-chaos-worker.ts +7 -3
  619. package/src/services/timer-message-fire-outbox.ts +1 -1
  620. package/src/services/transient-agent-reaper.ts +25 -20
  621. package/src/services/turn-reconcile-audit.ts +9 -9
  622. package/src/services/user-onboarding.ts +8 -6
  623. package/src/services/user-profile.ts +6 -9
  624. package/src/services/work-finality.ts +16 -4
  625. package/src/services/workflow-auto-start.ts +26 -13
  626. package/src/services/workflow-caller.ts +61 -4
  627. package/src/services/workflow-child-proof-worker.ts +1 -1
  628. package/src/services/workflow-ci-main.ts +1 -1
  629. package/src/services/workflow-control-proof-worker.ts +1 -1
  630. package/src/services/workflow-coordinator.ts +8 -2
  631. package/src/services/workflow-decisions.ts +5 -5
  632. package/src/services/workflow-deferred-cleanup.ts +5 -3
  633. package/src/services/workflow-effect-driver.ts +42 -17
  634. package/src/services/workflow-effects.ts +58 -37
  635. package/src/services/workflow-land-notice.ts +10 -0
  636. package/src/services/workflow-pause-text.ts +43 -0
  637. package/src/services/workflow-pins.ts +7 -4
  638. package/src/services/workflow-reconcile.ts +14 -11
  639. package/src/services/workflow-resume-pins.ts +3 -3
  640. package/src/services/workflow-routing-defaults.ts +18 -0
  641. package/src/services/workflow-run-view.ts +6 -3
  642. package/src/services/workflow-run.test-fixture.ts +1 -1
  643. package/src/services/workflow-runs.ts +61 -33
  644. package/src/services/workflow-supervisor-state.ts +26 -1
  645. package/src/services/workflow-supervisor.ts +11 -6
  646. package/src/services/workspace-recovery.ts +4 -3
  647. package/src/settings/registry.ts +1 -2
  648. package/src/spawn-admission.ts +10 -2
  649. package/src/spawn-command.ts +4 -4
  650. package/src/spawn-models.ts +10 -12
  651. package/src/spawn-placement.ts +28 -10
  652. package/src/spawn-targets.ts +9 -9
  653. package/src/sse-agent-status.ts +15 -6
  654. package/src/sse.ts +49 -24
  655. package/src/startup-context-injection.ts +62 -57
  656. package/src/state-adoption/cd-cutover.ts +53 -7
  657. package/src/state-adoption/fleet-cutover.ts +35 -0
  658. package/src/state-adoption/fleet-plan.ts +36 -0
  659. package/src/state-adoption/index.ts +2 -2
  660. package/src/state-adoption/linux-plan.ts +2 -2
  661. package/src/state-adoption/linux.ts +2 -2
  662. package/src/state-adoption/macos-plan.ts +2 -2
  663. package/src/state-adoption/macos.ts +1 -1
  664. package/src/steward-handoff.ts +4 -3
  665. package/src/steward-policy-cleanup.ts +9 -8
  666. package/src/steward.ts +9 -8
  667. package/src/task-dispatch-live.ts +6 -3
  668. package/src/task-dispatcher.ts +3 -3
  669. package/src/teams-config-store.ts +4 -3
  670. package/src/token-db-write.ts +10 -0
  671. package/src/token-db.ts +2 -2
  672. package/src/token-usage-async.ts +2 -4
  673. package/src/user-awaiting-reply.ts +5 -5
  674. package/src/workspace-actions.ts +24 -29
  675. package/src/workspace-auto-merge.ts +14 -12
  676. package/src/workspace-changed-paths-client.ts +16 -5
  677. package/src/workspace-cleanup-stale.ts +30 -7
  678. package/src/workspace-command-settle.ts +26 -17
  679. package/src/workspace-config.ts +1 -1
  680. package/src/workspace-conflict-resolver.ts +9 -7
  681. package/src/workspace-dead-owner-recovery.ts +5 -4
  682. package/src/workspace-escalation.ts +12 -11
  683. package/src/workspace-human-escalation.ts +3 -3
  684. package/src/workspace-land-gate-watchdog.ts +3 -3
  685. package/src/workspace-land-refusal.ts +20 -0
  686. package/src/workspace-land-stopped.ts +1 -0
  687. package/src/workspace-merge.ts +10 -26
  688. package/src/workspace-nothing-to-land-notice.ts +2 -2
  689. package/src/workspace-orphans.ts +18 -37
  690. package/src/workspace-pr-completion.ts +10 -8
  691. package/src/workspace-rekey.ts +3 -3
  692. package/src/workspace-steward-failure.ts +2 -2
  693. package/src/workspace-steward-wake.ts +4 -4
  694. package/node_modules/@humwick/kernel/LICENSE +0 -167
  695. package/node_modules/@humwick/kernel/async-entity-persistence.ts +0 -344
  696. package/node_modules/@humwick/kernel/async-event-log.ts +0 -107
  697. package/node_modules/@humwick/kernel/automations.pilot.ts +0 -147
  698. package/node_modules/@humwick/kernel/config.ts +0 -111
  699. package/node_modules/@humwick/kernel/contract.ts +0 -572
  700. package/node_modules/@humwick/kernel/control-authz.ts +0 -281
  701. package/node_modules/@humwick/kernel/control.ts +0 -645
  702. package/node_modules/@humwick/kernel/effects.ts +0 -493
  703. package/node_modules/@humwick/kernel/event-log.ts +0 -319
  704. package/node_modules/@humwick/kernel/http-transport.ts +0 -384
  705. package/node_modules/@humwick/kernel/identity-grammar.ts +0 -20
  706. package/node_modules/@humwick/kernel/identity.ts +0 -248
  707. package/node_modules/@humwick/kernel/index.ts +0 -28
  708. package/node_modules/@humwick/kernel/kernel-persistence.ts +0 -181
  709. package/node_modules/@humwick/kernel/landing-incident.ts +0 -306
  710. package/node_modules/@humwick/kernel/landing.ts +0 -953
  711. package/node_modules/@humwick/kernel/manifest-validation.ts +0 -460
  712. package/node_modules/@humwick/kernel/mcp-transport.ts +0 -109
  713. package/node_modules/@humwick/kernel/message-authority-chaos-worker.ts +0 -200
  714. package/node_modules/@humwick/kernel/message-authority.ts +0 -281
  715. package/node_modules/@humwick/kernel/module-host.ts +0 -722
  716. package/node_modules/@humwick/kernel/openapi-init.ts +0 -14
  717. package/node_modules/@humwick/kernel/package.json +0 -39
  718. package/node_modules/@humwick/kernel/persistence-schema.ts +0 -248
  719. package/node_modules/@humwick/kernel/persistence.ts +0 -510
  720. package/node_modules/@humwick/kernel/registry.ts +0 -60
  721. package/node_modules/@humwick/kernel/sqlite-kernel-persistence.ts +0 -499
  722. package/node_modules/@humwick/kernel/sqlite-module-host.ts +0 -87
  723. package/node_modules/@humwick/kernel/timers-chaos-worker.ts +0 -186
  724. package/node_modules/@humwick/kernel/timers.pilot.ts +0 -1411
  725. package/node_modules/@humwick/kernel/workflow-activation.ts +0 -25
  726. package/node_modules/@humwick/kernel/workflow-backstop.ts +0 -40
  727. package/node_modules/@humwick/kernel/workflow-cancel-tree.ts +0 -20
  728. package/node_modules/@humwick/kernel/workflow-chaos-worker.ts +0 -213
  729. package/node_modules/@humwick/kernel/workflow-composition.ts +0 -231
  730. package/node_modules/@humwick/kernel/workflow-container.ts +0 -72
  731. package/node_modules/@humwick/kernel/workflow-control.test-fixture.ts +0 -42
  732. package/node_modules/@humwick/kernel/workflow-control.ts +0 -178
  733. package/node_modules/@humwick/kernel/workflow-definition.ts +0 -507
  734. package/node_modules/@humwick/kernel/workflow-dispatch.ts +0 -60
  735. package/node_modules/@humwick/kernel/workflow-foreach.ts +0 -167
  736. package/node_modules/@humwick/kernel/workflow-journal-codec.ts +0 -339
  737. package/node_modules/@humwick/kernel/workflow-journal.ts +0 -922
  738. package/node_modules/@humwick/kernel/workflow-lane.ts +0 -48
  739. package/node_modules/@humwick/kernel/workflow-lease-owner.ts +0 -60
  740. package/node_modules/@humwick/kernel/workflow-recovery.test-fixture.ts +0 -19
  741. package/node_modules/@humwick/kernel/workflow-runtime.ts +0 -938
  742. package/node_modules/@humwick/kernel/workflow-script.ts +0 -11
  743. package/node_modules/@humwick/kernel/workflow-state.ts +0 -299
  744. package/node_modules/@humwick/kernel/workflow-step-commit.ts +0 -195
  745. package/node_modules/@humwick/kernel/workflow-transitions.ts +0 -317
  746. package/node_modules/@humwick/kernel/workflow-values.ts +0 -153
  747. package/node_modules/@humwick/kernel/workflow.pilot.ts +0 -376
  748. package/node_modules/@humwick/offload/LICENSE +0 -167
  749. package/node_modules/@humwick/offload/README.md +0 -57
  750. package/node_modules/@humwick/offload/dist/async-runner.d.ts +0 -18
  751. package/node_modules/@humwick/offload/dist/async-runner.d.ts.map +0 -1
  752. package/node_modules/@humwick/offload/dist/async-runner.js +0 -158
  753. package/node_modules/@humwick/offload/dist/async-runner.js.map +0 -1
  754. package/node_modules/@humwick/offload/dist/envelope.d.ts +0 -25
  755. package/node_modules/@humwick/offload/dist/envelope.d.ts.map +0 -1
  756. package/node_modules/@humwick/offload/dist/envelope.js +0 -80
  757. package/node_modules/@humwick/offload/dist/envelope.js.map +0 -1
  758. package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts +0 -10
  759. package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts.map +0 -1
  760. package/node_modules/@humwick/offload/dist/fixtures/worker-task.js +0 -59
  761. package/node_modules/@humwick/offload/dist/fixtures/worker-task.js.map +0 -1
  762. package/node_modules/@humwick/offload/dist/index.d.ts +0 -5
  763. package/node_modules/@humwick/offload/dist/index.d.ts.map +0 -1
  764. package/node_modules/@humwick/offload/dist/index.js +0 -5
  765. package/node_modules/@humwick/offload/dist/index.js.map +0 -1
  766. package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts +0 -62
  767. package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts.map +0 -1
  768. package/node_modules/@humwick/offload/dist/subprocess-runner.js +0 -295
  769. package/node_modules/@humwick/offload/dist/subprocess-runner.js.map +0 -1
  770. package/node_modules/@humwick/offload/dist/types.d.ts +0 -111
  771. package/node_modules/@humwick/offload/dist/types.d.ts.map +0 -1
  772. package/node_modules/@humwick/offload/dist/types.js +0 -176
  773. package/node_modules/@humwick/offload/dist/types.js.map +0 -1
  774. package/node_modules/@humwick/offload/dist/worker-pool.d.ts +0 -23
  775. package/node_modules/@humwick/offload/dist/worker-pool.d.ts.map +0 -1
  776. package/node_modules/@humwick/offload/dist/worker-pool.js +0 -435
  777. package/node_modules/@humwick/offload/dist/worker-pool.js.map +0 -1
  778. package/node_modules/@humwick/offload/dist/worker-runtime.d.ts +0 -2
  779. package/node_modules/@humwick/offload/dist/worker-runtime.d.ts.map +0 -1
  780. package/node_modules/@humwick/offload/dist/worker-runtime.js +0 -27
  781. package/node_modules/@humwick/offload/dist/worker-runtime.js.map +0 -1
  782. package/node_modules/@humwick/offload/dist/worker.d.ts +0 -5
  783. package/node_modules/@humwick/offload/dist/worker.d.ts.map +0 -1
  784. package/node_modules/@humwick/offload/dist/worker.js +0 -1
  785. package/node_modules/@humwick/offload/dist/worker.js.map +0 -1
  786. package/node_modules/@humwick/offload/package.json +0 -42
  787. package/node_modules/@humwick/offload/src/async-runner.ts +0 -170
  788. package/node_modules/@humwick/offload/src/envelope.ts +0 -92
  789. package/node_modules/@humwick/offload/src/fixtures/worker-task.ts +0 -49
  790. package/node_modules/@humwick/offload/src/index.ts +0 -4
  791. package/node_modules/@humwick/offload/src/subprocess-runner.ts +0 -334
  792. package/node_modules/@humwick/offload/src/types.ts +0 -235
  793. package/node_modules/@humwick/offload/src/worker-pool.ts +0 -463
  794. package/node_modules/@humwick/offload/src/worker-runtime.ts +0 -32
  795. package/node_modules/@humwick/offload/src/worker.ts +0 -5
  796. package/public/assets/agent-liveness-DyqxfB-t.js +0 -2
  797. package/public/assets/agent-profiles-BpI_jTxq.js +0 -2
  798. package/public/assets/index-B7ZerHLY.css +0 -2
  799. package/public/assets/index-BU3uWo2t.js +0 -15
  800. package/public/assets/projects-B_lmcqfO.js +0 -2
  801. package/public/assets/provider-display-DbLWpP3j.js +0 -2
  802. package/public/assets/run-card-CO_bguQf.js +0 -2
  803. package/public/assets/shipping-Bu8p1gEw.js +0 -2
  804. package/public/assets/store-BvtFdlGX.js +0 -9
  805. package/public/assets/use-project-list-B-T2Bnnn.js +0 -2
  806. package/public/assets/versioned-prompt-editor-Diu8BIaM.js +0 -8
  807. package/runner/src/agent-runner/http-liveness.ts +0 -85
  808. package/runner/src/gate-run-lease-probe.ts +0 -38
  809. package/src/db/claude-catalog-reconcile.ts +0 -27
  810. package/src/db/on-loop-write-transaction.ts +0 -34
  811. package/src/routing-model-aliases.ts +0 -21
@@ -1,181 +0,0 @@
1
- import type { JsonValue, Scope } from "./contract";
2
- import type { EventReplaySlice } from "./event-log";
3
- import type { MessageAuthorityOperation } from "./message-authority";
4
- import type { StorageKind } from "./persistence-schema";
5
- import type {
6
- AcquireLeaseParams,
7
- ListInstancesOptions,
8
- RenewLeaseParams,
9
- WorkflowInstancePage,
10
- WorkflowInstanceRow,
11
- WorkflowInstanceSeed,
12
- WorkflowStepCommitRecord,
13
- WorkflowStepJournalRow,
14
- } from "./workflow-journal";
15
- import type { WorkflowStepLease } from "./workflow-step-commit";
16
-
17
- /** A schema-free field description safe to send to a persistence worker. */
18
- export interface KernelEntityFieldCatalog {
19
- readonly name: string;
20
- readonly kind: StorageKind;
21
- readonly nullable: boolean;
22
- /** Whether a stored SQL NULL decodes as explicit null or an omitted optional field. */
23
- readonly nullValue: "null" | "undefined";
24
- }
25
-
26
- /** A schema-free entity catalog. Zod schemas and module definitions never cross the port. */
27
- export interface KernelEntityCatalog {
28
- readonly moduleId: string;
29
- readonly entityName: string;
30
- readonly tableName: string;
31
- readonly key: string;
32
- readonly fields: readonly KernelEntityFieldCatalog[];
33
- readonly references: Readonly<Record<string, { readonly module: string; readonly entity: string }>>;
34
- readonly indexes: readonly (readonly string[])[];
35
- }
36
-
37
- export interface KernelModuleCatalog {
38
- readonly moduleId: string;
39
- readonly entities: readonly KernelEntityCatalog[];
40
- }
41
-
42
- export type KernelStoredValue = string | number | bigint | null;
43
-
44
- export interface KernelEntityStoredRow {
45
- readonly values: Readonly<Record<string, KernelStoredValue>>;
46
- readonly version: number;
47
- readonly createdAt: number;
48
- readonly updatedAt: number;
49
- }
50
-
51
- export interface KernelEntityPointRead {
52
- readonly entity: KernelEntityCatalog;
53
- readonly scope: Scope;
54
- readonly key: KernelStoredValue;
55
- }
56
-
57
- export interface KernelEntityListRead {
58
- readonly entity: KernelEntityCatalog;
59
- readonly scope: Scope;
60
- readonly where: Readonly<Record<string, KernelStoredValue>>;
61
- readonly after?: KernelStoredValue;
62
- readonly limit: number;
63
- }
64
-
65
- export interface KernelEntityMutation {
66
- readonly kind: "put" | "delete";
67
- readonly entity: KernelEntityCatalog;
68
- readonly scope: Scope;
69
- readonly key: KernelStoredValue;
70
- readonly logicalKey: string | number | bigint | boolean;
71
- readonly expectedVersion: number | null;
72
- readonly values?: Readonly<Record<string, KernelStoredValue>>;
73
- }
74
-
75
- export interface KernelEventAppend {
76
- readonly scope: Scope;
77
- readonly moduleId: string;
78
- readonly name: string;
79
- readonly payload: string;
80
- readonly createdAt: number;
81
- }
82
-
83
- export interface KernelWorkflowSeed {
84
- readonly seed: WorkflowInstanceSeed;
85
- /** Position in the caller's prepared-start list; used to return authoritative deduped ids. */
86
- readonly resultIndex: number;
87
- }
88
-
89
- export interface KernelWorkflowControl {
90
- readonly operation: "cancel" | "fail" | "reopen";
91
- readonly instanceId: string;
92
- readonly failure?: JsonValue;
93
- }
94
-
95
- export interface KernelOpCommitEnvelope {
96
- /** Stable across an indeterminate-ack retry. */
97
- readonly requestKey: string;
98
- readonly capturedAt: number;
99
- readonly messageAuthority: readonly MessageAuthorityOperation[];
100
- readonly entities: readonly KernelEntityMutation[];
101
- readonly events: readonly KernelEventAppend[];
102
- readonly workflowSeeds: readonly KernelWorkflowSeed[];
103
- readonly workflowControls?: readonly KernelWorkflowControl[];
104
- }
105
-
106
- export interface KernelOpCommitResult {
107
- readonly workflowInstanceIds: readonly string[];
108
- }
109
-
110
- export interface KernelStepCommitEnvelope {
111
- /** Stable across an indeterminate-ack retry. */
112
- readonly requestKey: string;
113
- readonly capturedAt: number;
114
- readonly lease: WorkflowStepLease;
115
- readonly messageAuthority: readonly MessageAuthorityOperation[];
116
- readonly entities: readonly KernelEntityMutation[];
117
- readonly events: readonly KernelEventAppend[];
118
- readonly record: WorkflowStepCommitRecord;
119
- }
120
-
121
- export interface KernelJournalOnlyCommitEnvelope {
122
- readonly requestKey: string;
123
- readonly capturedAt: number;
124
- readonly lease: WorkflowStepLease;
125
- readonly record: WorkflowStepCommitRecord;
126
- }
127
-
128
- /**
129
- * Kernel-owned async persistence boundary. Every argument/result is structured-clone-safe data;
130
- * the interface deliberately has no Database, callback, schema, module definition, auth context,
131
- * dispatcher, listener, or clock member. Writer methods each represent one complete atomic job.
132
- */
133
- export interface KernelPersistence {
134
- readonly messageAuthorityAvailable: boolean;
135
-
136
- installModule(catalog: KernelModuleCatalog): Promise<void>;
137
- moduleTableExists(tableName: string): Promise<boolean>;
138
-
139
- entityPoint(input: KernelEntityPointRead): Promise<KernelEntityStoredRow | undefined>;
140
- entityList(input: KernelEntityListRead): Promise<readonly KernelEntityStoredRow[]>;
141
- replayEvents(scope: Scope, since: number, limit: number, moduleId?: string): Promise<EventReplaySlice>;
142
- eventHighWater(scope: Scope): Promise<number>;
143
- eventHasMatch(scope: Scope, topic: string, correlationId?: string): Promise<boolean>;
144
-
145
- getWorkflowInstance(id: string): Promise<WorkflowInstanceRow | undefined>;
146
- getWorkflowInstanceByIdentity(moduleName: string, workflowName: string, idempotencyKey: string): Promise<WorkflowInstanceRow | undefined>;
147
- listWorkflowInstances(options?: ListInstancesOptions): Promise<WorkflowInstancePage>;
148
- listWorkflowSteps(instanceId: string): Promise<WorkflowStepJournalRow[]>;
149
- listResumableWorkflows(moduleName: string, now: number): Promise<string[]>;
150
- listDueWorkflows(moduleName: string, now: number): Promise<string[]>;
151
- listWaitingWorkflows(moduleName: string, now: number): Promise<string[]>;
152
- snapshotWorkflowResidual(moduleName: string, now: number): Promise<{ reclaimableCount: number; nextLiveLeaseExpiry: number | undefined }>;
153
-
154
- seedWorkflow(requestKey: string, seed: WorkflowInstanceSeed, capturedAt: number): Promise<{ instance: WorkflowInstanceRow; created: boolean }>;
155
- acquireWorkflowLease(requestKey: string, params: AcquireLeaseParams): Promise<boolean>;
156
- /** Naturally idempotent owner-fenced cleanup; an empty recovery needs no durable request ledger. */
157
- reclaimDeadWorkflowLeases(moduleName: string, now: number): Promise<void>;
158
- renewWorkflowLease(requestKey: string, params: RenewLeaseParams): Promise<boolean>;
159
- releaseWorkflowLease(requestKey: string, instanceId: string, token: string, now: number): Promise<boolean>;
160
- controlWorkflow(requestKey: string, operation: "cancel" | "pause" | "resume" | "reopen" | "fail", id: string, now: number, failure?: unknown): Promise<boolean>;
161
-
162
- opCommit(envelope: KernelOpCommitEnvelope): Promise<KernelOpCommitResult>;
163
- stepCommit(envelope: KernelStepCommitEnvelope): Promise<number>;
164
- failedStepCommit(envelope: KernelJournalOnlyCommitEnvelope): Promise<number>;
165
- supersededStepCommit(envelope: KernelJournalOnlyCommitEnvelope): Promise<number>;
166
- }
167
-
168
- /** Gateway adapters surface this name when COMMIT may have succeeded but its ACK was lost. */
169
- export function isWriteIndeterminateError(error: unknown): boolean {
170
- return error instanceof Error && error.name === "WriteIndeterminateError";
171
- }
172
-
173
- /** Retry an indeterminate writer acknowledgement once with the exact same stable request key. */
174
- export async function recoverIndeterminate<T>(write: () => Promise<T>): Promise<T> {
175
- try {
176
- return await write();
177
- } catch (error) {
178
- if (!isWriteIndeterminateError(error)) throw error;
179
- return write();
180
- }
181
- }
@@ -1,306 +0,0 @@
1
- // #3363 — the land boundary and the red-main incident (docs/design/3362-land-gate.md §4), part of the
2
- // Kernel landing module. Server SQL reads the incident table by name in the claim admission predicate
3
- // (src/db/land-incident-eligibility.ts), so field names here are a contract with that SQL.
4
- import { z } from "zod";
5
- import { CI_MONITOR_EVENTS } from "@humwick/sdk";
6
- import { type EntityStore, type ModuleCtx, OpError, type OpDecl } from "./contract";
7
-
8
- export const boundaryVerdictSchema = z.enum(["pending", "green", "red", "unverified"]);
9
- export const incidentStateSchema = z.enum(["suspected", "rerunning", "confirmed", "recovering", "resolved", "cleared", "abandoned"]);
10
- export type IncidentState = z.infer<typeof incidentStateSchema>;
11
- export const incidentEffectSchema = z.discriminatedUnion("kind", [
12
- z.object({ kind: z.literal("rerun"), key: z.string(), runId: z.number().int(), attempt: z.number().int(), cancelled: z.boolean() }),
13
- z.object({ kind: z.literal("reopen-task"), key: z.string(), taskId: z.number().int() }),
14
- z.object({ kind: z.literal("notify"), key: z.string(), taskId: z.number().int() }),
15
- // attempt: the failed CI attempt of the red boundary's run, whose failing tests are the flakes (#3362 §10).
16
- z.object({ kind: z.literal("quarantine"), key: z.string(), attempt: z.number().int().optional() }),
17
- z.object({ kind: z.literal("auto-revert"), key: z.string() }),
18
- ]);
19
- export type IncidentEffect = z.infer<typeof incidentEffectSchema>;
20
- export const boundaryWatchSchema = z.object({ workflow: z.string().min(1), branch: z.string().min(1),
21
- jobs: z.array(z.string()).optional(), id: z.string().optional(),
22
- events: z.array(z.enum(CI_MONITOR_EVENTS)).optional() });
23
-
24
- const boundarySchema = z.object({
25
- id: z.string(),
26
- laneKey: z.string(),
27
- mainFailurePolicy: z.enum(["stop", "advisory"]).optional(),
28
- commandId: z.string(),
29
- workspaceId: z.string(),
30
- taskId: z.number().int().optional(),
31
- remote: z.string(),
32
- baseRef: z.string(),
33
- gateBaseSha: z.string().optional(),
34
- watch: boundaryWatchSchema.optional(),
35
- pendingEffects: z.array(incidentEffectSchema).optional(),
36
- rerunAttempt: z.number().int().optional(),
37
- previousBaseSha: z.string(),
38
- landedTipSha: z.string(),
39
- landedAt: z.number().int(),
40
- verdict: boundaryVerdictSchema,
41
- ciRunId: z.number().int().optional(),
42
- ciAttempt: z.number().int().optional(),
43
- incidentId: z.string().optional(),
44
- verdictAt: z.number().int().optional(),
45
- });
46
-
47
- const incidentSchema = z.object({
48
- id: z.string(),
49
- laneKey: z.string(),
50
- mainFailurePolicy: z.enum(["stop", "advisory"]).optional(),
51
- state: incidentStateSchema,
52
- culpritBoundaryIds: z.array(z.string()),
53
- redBoundaryId: z.string(),
54
- ciRunId: z.number().int(),
55
- ciAttempt: z.number().int(),
56
- recoveryCommandId: z.string().optional(),
57
- recoveryWorkspaceId: z.string().optional(),
58
- recoveryBoundAt: z.number().int().optional(),
59
- automaticRevertFailure: z.string().optional(),
60
- openedAt: z.number().int(),
61
- escalatedAt: z.number().int().optional(),
62
- resolvedAt: z.number().int().optional(),
63
- abandonedBy: z.string().optional(),
64
- abandonReason: z.string().optional(),
65
- owedEffect: z.enum(["confirm", "quarantine", "none"]).optional(),
66
- pendingEffects: z.array(incidentEffectSchema).optional(),
67
- updatedAt: z.number().int(),
68
- });
69
-
70
- export type LandBoundary = z.infer<typeof boundarySchema>;
71
- export type RedMainIncident = z.infer<typeof incidentSchema>;
72
-
73
- export const landingIncidentEntities = {
74
- boundary: { schema: boundarySchema, indexes: ["laneKey", "verdict", "incidentId", ["laneKey", "landedAt"], ["remote", "landedTipSha"]] },
75
- incident: { schema: incidentSchema, indexes: ["state", ["laneKey", "state"]] },
76
- } as const;
77
-
78
- type IncidentStores = {
79
- boundary: EntityStore<{ schema: typeof boundarySchema }>;
80
- incident: EntityStore<{ schema: typeof incidentSchema }>;
81
- };
82
- const stores = (ctx: ModuleCtx) => ctx.entities as unknown as IncidentStores;
83
-
84
- export const OPEN_STATES: readonly IncidentState[] = ["suspected", "rerunning", "confirmed", "recovering"];
85
- const TRANSITIONS: Record<IncidentState, readonly IncidentState[]> = {
86
- suspected: ["rerunning", "confirmed", "cleared", "resolved"],
87
- rerunning: ["confirmed", "cleared", "resolved"],
88
- confirmed: ["recovering", "resolved"],
89
- recovering: ["recovering", "resolved"],
90
- resolved: [],
91
- cleared: [],
92
- abandoned: [],
93
- };
94
-
95
- export function landBoundaryId(commandId: string): string {
96
- return `boundary:${commandId}`;
97
- }
98
-
99
- async function openIncidentOnLane(ctx: ModuleCtx, laneKey: string): Promise<RedMainIncident | undefined> {
100
- for (const state of OPEN_STATES) {
101
- const page = await stores(ctx).incident.list({ where: { laneKey, state }, limit: 1 });
102
- if (page.items[0]) return page.items[0];
103
- }
104
- return undefined;
105
- }
106
-
107
- /** A rerunning incident already counts its rerun attempt; the failure is the one before it. */
108
- const failedAttempt = (incident: RedMainIncident) => incident.state === "suspected" ? incident.ciAttempt : incident.ciAttempt - 1;
109
-
110
- async function effectsFor(ctx: ModuleCtx, incident: RedMainIncident, flakeAttempt?: number): Promise<IncidentEffect[]> {
111
- const prefix = `red-main:${incident.id}`;
112
- if (incident.state === "rerunning") return [{ kind: "rerun", key: `${prefix}:rerun:${incident.ciRunId}:${incident.ciAttempt}`,
113
- runId: incident.ciRunId, attempt: incident.ciAttempt, cancelled: false }];
114
- if (incident.state === "cleared") return [{ kind: "quarantine", key: `${prefix}:quarantine`, ...(flakeAttempt ? { attempt: flakeAttempt } : {}) }];
115
- if (incident.state !== "confirmed") return [];
116
- const taskIds = new Set<number>();
117
- for (const id of incident.culpritBoundaryIds) {
118
- const row = await stores(ctx).boundary.get(id);
119
- if (row?.taskId !== undefined) taskIds.add(row.taskId);
120
- }
121
- return [
122
- ...[...taskIds].map((taskId): IncidentEffect => ({ kind: "reopen-task", taskId, key: `${prefix}:reopen:${taskId}` })),
123
- ...(incident.mainFailurePolicy === "advisory" ? [] : [{ kind: "auto-revert" as const, key: `${prefix}:auto-revert` }]),
124
- ...[...taskIds].map((taskId): IncidentEffect => ({ kind: "notify", taskId, key: `${prefix}:notify:${taskId}` })),
125
- ];
126
- }
127
-
128
- const ADMIN = "landing:admin" as const;
129
- const hidden = { http: false, mcp: false, cli: false } as const;
130
-
131
- export const landingIncidentOps = {
132
- setIncidentPolicy: {
133
- kind: "mutation", idempotent: true, grant: ADMIN, expose: hidden,
134
- summary: "Apply authoritative base failure policy without erasing incident history.",
135
- input: z.object({ id: z.string(), policy: z.enum(["stop", "advisory"]) }), output: incidentSchema,
136
- handler: async (ctx: ModuleCtx, input: { id: string; policy: "stop" | "advisory" }) => {
137
- const incident = await stores(ctx).incident.get(input.id);
138
- if (!incident) throw new OpError("not_found", 404, `incident ${input.id} not found`);
139
- return stores(ctx).incident.update(input.id, { mainFailurePolicy: input.policy,
140
- ...(input.policy === "advisory" ? { pendingEffects: (incident.pendingEffects ?? []).filter(effect => effect.kind !== "auto-revert") } : {}),
141
- updatedAt: ctx.clock.now() });
142
- },
143
- },
144
- abandonIncident: {
145
- kind: "mutation", idempotent: true, grant: ADMIN, expose: hidden,
146
- summary: "Release an incident's lane stop without claiming green CI; retain the operator and reason.",
147
- input: z.object({ id: z.string(), reason: z.string().trim().min(1).max(1000) }), output: incidentSchema,
148
- handler: async (ctx: ModuleCtx, input: { id: string; reason: string }) => {
149
- const incident = await stores(ctx).incident.get(input.id);
150
- if (!incident) throw new OpError("not_found", 404, `incident ${input.id} not found`);
151
- if (incident.state === "abandoned") return incident;
152
- if (!OPEN_STATES.includes(incident.state)) throw new OpError("conflict", 409, `incident ${input.id} is ${incident.state}`);
153
- const now = ctx.clock.now();
154
- return stores(ctx).incident.update(input.id, { state: "abandoned", abandonedBy: ctx.principal.actor,
155
- abandonReason: input.reason, resolvedAt: now, updatedAt: now, pendingEffects: [], owedEffect: "none" });
156
- },
157
- },
158
- recordBoundary: {
159
- kind: "mutation", idempotent: true, grant: ADMIN, expose: hidden,
160
- summary: "Record one land boundary previousBaseSha..landedTipSha, written with the landed sha.",
161
- input: boundarySchema.omit({ id: true, verdict: true, ciRunId: true, ciAttempt: true, incidentId: true, verdictAt: true }),
162
- output: boundarySchema,
163
- handler: async (ctx: ModuleCtx, input: Omit<LandBoundary, "id" | "verdict">) => {
164
- const id = landBoundaryId(input.commandId);
165
- return (await stores(ctx).boundary.get(id)) ?? stores(ctx).boundary.create({ ...input, id, verdict: "pending" });
166
- },
167
- },
168
- setBoundaryVerdict: {
169
- kind: "mutation", idempotent: true, grant: ADMIN, expose: hidden,
170
- summary: "Record the exact-sha main CI verdict of one boundary.",
171
- input: z.object({ id: z.string(), verdict: boundaryVerdictSchema, ciRunId: z.number().int().optional(),
172
- ciAttempt: z.number().int().optional(), incidentId: z.string().optional() }),
173
- output: boundarySchema,
174
- handler: async (ctx: ModuleCtx, input: Pick<LandBoundary, "id" | "verdict" | "ciRunId" | "ciAttempt" | "incidentId">) => {
175
- const { id, ...patch } = input;
176
- return stores(ctx).boundary.update(id, { ...patch, verdictAt: ctx.clock.now() });
177
- },
178
- },
179
- openIncident: {
180
- kind: "mutation", idempotent: true, grant: ADMIN, expose: hidden,
181
- summary: "Open the lane's red-main incident; at most one is open per lane.",
182
- input: z.object({ laneKey: z.string(), redBoundaryId: z.string(), culpritBoundaryIds: z.array(z.string()).min(1),
183
- ciRunId: z.number().int(), ciAttempt: z.number().int() }),
184
- output: incidentSchema,
185
- handler: async (ctx: ModuleCtx, input: Pick<RedMainIncident, "laneKey" | "redBoundaryId" | "culpritBoundaryIds" | "ciRunId" | "ciAttempt">) => {
186
- const open = await openIncidentOnLane(ctx, input.laneKey);
187
- if (open) return open;
188
- const now = ctx.clock.now();
189
- const boundary = await stores(ctx).boundary.get(input.redBoundaryId);
190
- return stores(ctx).incident.create({ ...input, ...(boundary?.mainFailurePolicy ? { mainFailurePolicy: boundary.mainFailurePolicy } : {}), id: `incident:${input.redBoundaryId}`, state: "suspected", pendingEffects: [], openedAt: now, updatedAt: now });
191
- },
192
- },
193
- transitionIncident: {
194
- kind: "mutation", idempotent: true, grant: ADMIN, expose: hidden,
195
- summary: "Move an incident along its lifecycle; the expected state is a CAS.",
196
- input: z.object({ id: z.string(), from: incidentStateSchema, to: incidentStateSchema,
197
- ciAttempt: z.number().int().optional(), escalated: z.boolean().optional() }),
198
- output: incidentSchema,
199
- handler: async (ctx: ModuleCtx, input: { id: string; from: IncidentState; to: IncidentState; ciAttempt?: number; escalated?: boolean }) => {
200
- const incident = await stores(ctx).incident.get(input.id);
201
- if (!incident) throw new OpError("not_found", 404, `incident ${input.id} not found`);
202
- if (incident.state === input.to) return incident;
203
- if (incident.state !== input.from || !TRANSITIONS[input.from].includes(input.to)) {
204
- throw new OpError("conflict", 409, `incident ${input.id} is ${incident.state}, cannot move ${input.from} -> ${input.to}`);
205
- }
206
- const now = ctx.clock.now();
207
- // A flake explains none of the reds judged against it: they go back to pending and are judged
208
- // again in landing order, so a successor's own regression opens its own incident.
209
- if (input.to === "cleared") {
210
- // Each update drops the row from the filter, so re-reading the first page walks them all.
211
- for (let page = await stores(ctx).boundary.list({ where: { incidentId: input.id }, limit: 200 }); page.items.length;
212
- page = await stores(ctx).boundary.list({ where: { incidentId: input.id }, limit: 200 })) {
213
- for (const row of page.items) {
214
- await stores(ctx).boundary.update(row.id, { verdict: "pending", incidentId: undefined, ciRunId: undefined, ciAttempt: undefined, verdictAt: now });
215
- }
216
- }
217
- }
218
- // A covering green tree cancels obsolete recovery work, but still quarantines an unconfirmed red (#3545).
219
- const pendingEffects = input.to === "resolved"
220
- ? (incident.state === "suspected" || incident.state === "rerunning"
221
- ? await effectsFor(ctx, { ...incident, state: "cleared" }, failedAttempt(incident)) : [])
222
- : [...incident.pendingEffects ?? [], ...await effectsFor(ctx, { ...incident, state: input.to, ciAttempt: input.ciAttempt ?? incident.ciAttempt }, failedAttempt(incident))];
223
- return stores(ctx).incident.update(input.id, {
224
- state: input.to, updatedAt: now,
225
- ...(input.ciAttempt !== undefined ? { ciAttempt: input.ciAttempt } : {}),
226
- ...(input.escalated ? { escalatedAt: now } : {}),
227
- pendingEffects, owedEffect: "none",
228
- ...(input.to === "resolved" || input.to === "cleared" ? { resolvedAt: now } : {}),
229
- });
230
- },
231
- },
232
- ensureIncidentEffects: {
233
- kind: "mutation", idempotent: true, grant: ADMIN, expose: hidden,
234
- summary: "Upgrade pre-enable incident effects without losing unfinished work.",
235
- input: z.object({ id: z.string() }), output: incidentSchema,
236
- handler: async (ctx: ModuleCtx, input: { id: string }) => {
237
- const incident = await stores(ctx).incident.get(input.id);
238
- if (!incident) throw new OpError("not_found", 404, `incident ${input.id} not found`);
239
- if (incident.pendingEffects !== undefined) return incident;
240
- const pendingEffects = incident.owedEffect === "none" ? [] : await effectsFor(ctx, incident);
241
- return stores(ctx).incident.update(input.id, { pendingEffects, owedEffect: "none" });
242
- },
243
- },
244
- settleIncidentEffect: {
245
- kind: "mutation", idempotent: true, grant: ADMIN, expose: hidden,
246
- summary: "Acknowledge one durable incident effect by its idempotency key.",
247
- input: z.object({ id: z.string(), key: z.string() }), output: incidentSchema,
248
- handler: async (ctx: ModuleCtx, input: { id: string; key: string }) => {
249
- const incident = await stores(ctx).incident.get(input.id);
250
- if (!incident) throw new OpError("not_found", 404, `incident ${input.id} not found`);
251
- return stores(ctx).incident.update(input.id, {
252
- pendingEffects: (incident.pendingEffects ?? []).filter((effect) => effect.key !== input.key), updatedAt: ctx.clock.now(),
253
- });
254
- },
255
- },
256
- failAutomaticRevert: {
257
- kind: "mutation", idempotent: true, grant: ADMIN, expose: hidden,
258
- summary: "Record a terminal automatic recovery failure for the coordinator escalation.",
259
- input: z.object({ id: z.string(), reason: z.string() }), output: incidentSchema,
260
- handler: async (ctx: ModuleCtx, input: { id: string; reason: string }) => {
261
- const incident = await stores(ctx).incident.get(input.id);
262
- if (!incident) throw new OpError("not_found", 404, `incident ${input.id} not found`);
263
- if (incident.automaticRevertFailure) return incident;
264
- return stores(ctx).incident.update(input.id, { automaticRevertFailure: input.reason.slice(0, 4096), updatedAt: ctx.clock.now() });
265
- },
266
- },
267
- queueBoundaryRerun: {
268
- kind: "mutation", idempotent: true, grant: ADMIN, expose: hidden,
269
- summary: "Persist a boundary infrastructure retry before issuing it.",
270
- input: z.object({ id: z.string(), effect: incidentEffectSchema }), output: boundarySchema,
271
- handler: async (ctx: ModuleCtx, input: { id: string; effect: IncidentEffect }) => {
272
- const row = await stores(ctx).boundary.get(input.id);
273
- if (!row) throw new OpError("not_found", 404, `boundary ${input.id} not found`);
274
- if (input.effect.kind !== "rerun") return row;
275
- if (row.ciRunId === input.effect.runId && (row.rerunAttempt ?? 0) >= input.effect.attempt) return row;
276
- return stores(ctx).boundary.update(input.id, { ciRunId: input.effect.runId,
277
- rerunAttempt: input.effect.attempt, pendingEffects: [input.effect] });
278
- },
279
- },
280
- settleBoundaryEffect: {
281
- kind: "mutation", idempotent: true, grant: ADMIN, expose: hidden,
282
- summary: "Acknowledge a boundary infrastructure retry by key.",
283
- input: z.object({ id: z.string(), key: z.string() }), output: boundarySchema,
284
- handler: async (ctx: ModuleCtx, input: { id: string; key: string }) => {
285
- const row = await stores(ctx).boundary.get(input.id);
286
- if (!row) throw new OpError("not_found", 404, `boundary ${input.id} not found`);
287
- return stores(ctx).boundary.update(input.id, { pendingEffects: (row.pendingEffects ?? []).filter((effect) => effect.key !== input.key) });
288
- },
289
- },
290
- bindRecovery: {
291
- kind: "mutation", idempotent: true, grant: ADMIN, expose: hidden,
292
- summary: "Bind one land command as the incident's only exempt recovery land; replaces any earlier binding.",
293
- input: z.object({ id: z.string(), recoveryCommandId: z.string(), recoveryWorkspaceId: z.string() }),
294
- output: incidentSchema,
295
- handler: async (ctx: ModuleCtx, input: { id: string; recoveryCommandId: string; recoveryWorkspaceId: string }) => {
296
- const incident = await stores(ctx).incident.get(input.id);
297
- if (!incident) throw new OpError("not_found", 404, `incident ${input.id} not found`);
298
- if (incident.state !== "confirmed" && incident.state !== "recovering") {
299
- throw new OpError("conflict", 409, `incident ${input.id} is ${incident.state}; only a confirmed incident takes a recovery land`);
300
- }
301
- const now = ctx.clock.now();
302
- return stores(ctx).incident.update(input.id, { state: "recovering", recoveryCommandId: input.recoveryCommandId,
303
- recoveryWorkspaceId: input.recoveryWorkspaceId, recoveryBoundAt: now, updatedAt: now });
304
- },
305
- },
306
- } satisfies Record<string, OpDecl>;