@humwick/server 0.130.0 → 0.130.2

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 (486) hide show
  1. package/README.md +5 -0
  2. package/docs/guides/tools-administration.md +6 -1
  3. package/docs/guides/tools-coordination.md +1 -0
  4. package/docs/guides/tools-tasks.md +8 -0
  5. package/docs/guides/workflows.md +58 -0
  6. package/docs/openapi.json +414 -1
  7. package/package.json +8 -17
  8. package/public/assets/{MessageBubble-BWpoBjl4.js → MessageBubble-BWLqMGKG.js} +2 -2
  9. package/public/assets/{PlanGraphPanel-C0auck3n.js → PlanGraphPanel-3TlIQpjk.js} +2 -2
  10. package/public/assets/{TraceView-DBnOx7AQ.js → TraceView-Wimm0Czv.js} +2 -2
  11. package/public/assets/{VaultDecisionCard-0kp2oNBC.js → VaultDecisionCard-Bau_vNax.js} +2 -2
  12. package/public/assets/{activity-yLztXEBt.js → activity-CrSurn-r.js} +2 -2
  13. package/public/assets/{agent-lineage-BbJDR1dW.js → agent-lineage-CknAJKcb.js} +2 -2
  14. package/public/assets/agent-liveness-CaNwK0Zf.js +2 -0
  15. package/public/assets/{agent-name-CTZBrSD9.js → agent-name-DKbiIhBo.js} +2 -2
  16. package/public/assets/agent-profiles-DwF6EQ4R.js +2 -0
  17. package/public/assets/{agent-project-badge-9TqzUUYE.js → agent-project-badge-Diz4Sjjb.js} +2 -2
  18. package/public/assets/{agent-tools-D4n40pn8.js → agent-tools-CRhpRQza.js} +2 -2
  19. package/public/assets/{agent-type-icon-D6FUarOf.js → agent-type-icon-LrUEU3lB.js} +2 -2
  20. package/public/assets/{agents-BYDslkJc.js → agents-B-v66C-4.js} +2 -2
  21. package/public/assets/{analytics-B-XSbEMC.js → analytics-BqCb-LKi.js} +2 -2
  22. package/public/assets/{artifact-viewer-DdWIfV6M.js → artifact-viewer-kf4pGuAR.js} +2 -2
  23. package/public/assets/{artifacts-oBOqks-2.js → artifacts-D32zyw4Y.js} +2 -2
  24. package/public/assets/{artifacts-DPN1q4pA.js → artifacts-DJevXcvg.js} +2 -2
  25. package/public/assets/{automation-4KcRFXEu.js → automation-BpRajx_5.js} +2 -2
  26. package/public/assets/{backlog-Cw9xPTCF.js → backlog-D_UjTdzX.js} +2 -2
  27. package/public/assets/{busy-health-CTu32MZt.js → busy-health-N3VEh4ao.js} +2 -2
  28. package/public/assets/{channels-BiXzg1G9.js → channels-9jopungq.js} +2 -2
  29. package/public/assets/{chat-Ctk2qwvA.js → chat-CSXrTB3C.js} +2 -2
  30. package/public/assets/{code-preview-Bm1wWqAp.js → code-preview-p1NnmqK0.js} +2 -2
  31. package/public/assets/{connectors-C36ax4Vw.js → connectors-CZdqlDNL.js} +2 -2
  32. package/public/assets/{cosmos-Jj9LK2Wf.js → cosmos-BgdsE4dG.js} +2 -2
  33. package/public/assets/{crate-agent-H6S7-B9T.js → crate-agent-30aXTKva.js} +2 -2
  34. package/public/assets/{dependency-graph-Cd1E23wa.js → dependency-graph-B_jvw2GE.js} +2 -2
  35. package/public/assets/{deploys-Bwfq146q.js → deploys-DoN6bAb5.js} +2 -2
  36. package/public/assets/{display-CfO7rTuF.js → display-BrKWFGJz.js} +2 -2
  37. package/public/assets/{files-DhhZI2Ih.js → files-D6XEu8Ng.js} +2 -2
  38. package/public/assets/fleet-C7jQWbw2.js +2 -0
  39. package/public/assets/{fleet-metrics-BkHP-P3R.js → fleet-metrics-BiDs3MLx.js} +2 -2
  40. package/public/assets/{formatted-body-Cm1RrzmN.js → formatted-body-CQBwc1fb.js} +3 -3
  41. package/public/assets/{formatted-body-impl-DQiOuOD1.js → formatted-body-impl-DyG0WsQS.js} +2 -2
  42. package/public/assets/{host-providers-dialog-CHqwXTov.js → host-providers-dialog-DKaW31dN.js} +2 -2
  43. package/public/assets/index-CRHep3M9.js +15 -0
  44. package/public/assets/index-MYAIwYTX.css +2 -0
  45. package/public/assets/{insights-fH1EL-qZ.js → insights-CzrtkpOE.js} +2 -2
  46. package/public/assets/{integrations-C5Oix6ng.js → integrations-aVsUmigt.js} +2 -2
  47. package/public/assets/{issue-ref-chip-ODyondIa.js → issue-ref-chip-BnSlM_95.js} +2 -2
  48. package/public/assets/{log-viewer-Cvfy6PW7.js → log-viewer-qe7Ee47Z.js} +2 -2
  49. package/public/assets/{maintenance-D8CDH5wZ.js → maintenance-NfjqFZAk.js} +2 -2
  50. package/public/assets/{managed-agents-egllbpij.js → managed-agents-BiH0HgaE.js} +2 -2
  51. package/public/assets/{markdown-preview-CYSFgVgK.js → markdown-preview-BixaT3Xr.js} +3 -3
  52. package/public/assets/{markdown-preview-impl-BteVIjX4.js → markdown-preview-impl-DNGlWIS3.js} +2 -2
  53. package/public/assets/{memory-C8WmXsyr.js → memory-DNsCl6UX.js} +2 -2
  54. package/public/assets/{messages-BzQdqlO6.js → messages-DopU1L1X.js} +2 -2
  55. package/public/assets/{orchestrators-B1HxzkNw.js → orchestrators-Cq7ckLQT.js} +2 -2
  56. package/public/assets/{overview-DCUnI4Z7.js → overview-C1DCTzzV.js} +2 -2
  57. package/public/assets/{pairs-ftCd2XcD.js → pairs-DE_m6rrE.js} +2 -2
  58. package/public/assets/{profile-icon-B2zH8DMH.js → profile-icon-B3rfh77F.js} +2 -2
  59. package/public/assets/project-profile-instructions-DQWZE0kA.js +2 -0
  60. package/public/assets/projects-Br2Bd2h1.js +2 -0
  61. package/public/assets/{prompt-settings-Bftq9czX.js → prompt-settings-BKvFsvGD.js} +2 -2
  62. package/public/assets/provider-display-DsuWMvVL.js +2 -0
  63. package/public/assets/{registry-DWCU5c8q.js → registry-Cw38_6gW.js} +2 -2
  64. package/public/assets/run-card-CpKqRbhg.js +2 -0
  65. package/public/assets/scroll-text-BKXS1ahr.js +2 -0
  66. package/public/assets/{secrets-C7GIUATz.js → secrets-DxI-vzSq.js} +2 -2
  67. package/public/assets/{service-access-settings-C3aujqTG.js → service-access-settings-D9s_VJbd.js} +2 -2
  68. package/public/assets/{settings-C6sZ9eBa.js → settings-CKZTVGIx.js} +2 -2
  69. package/public/assets/{shipping-Bu8p1gEw.js → shipping-B9YtnwtG.js} +2 -2
  70. package/public/assets/{stats-V9Z-GxUd.js → stats-DyUBKyWI.js} +2 -2
  71. package/public/assets/{status-dot-CVv0iGHL.js → status-dot-DYqlEUhJ.js} +2 -2
  72. package/public/assets/{store-BvtFdlGX.js → store-DcClXLH0.js} +3 -3
  73. package/public/assets/{tasks-CXU75HRF.js → tasks-Bh7Chr4-.js} +2 -2
  74. package/public/assets/{teams-BPf976zb.js → teams-bowI7qVY.js} +2 -2
  75. package/public/assets/{terminal-viewer-DE9BOe-8.js → terminal-viewer-BgVLHdsU.js} +3 -3
  76. package/public/assets/{terminal-viewer-impl-D04pjmGh.js → terminal-viewer-impl-Dz22UPy6.js} +2 -2
  77. package/public/assets/token-estimate-Co-Jdphh.js +2 -0
  78. package/public/assets/{use-agent-terminal-B1yR456R.js → use-agent-terminal-DSQQ-iY7.js} +2 -2
  79. package/public/assets/{use-decisions-D-S4tpDf.js → use-decisions-samMQhQf.js} +2 -2
  80. package/public/assets/use-project-list-59LheVP7.js +2 -0
  81. package/public/assets/{use-selectors-CnrAk2YP.js → use-selectors-BZa25xEB.js} +2 -2
  82. package/public/assets/{user-avatar-nBFIcR4M.js → user-avatar-DHxlvUvV.js} +2 -2
  83. package/public/assets/versioned-prompt-editor-BmED5DnJ.js +8 -0
  84. package/public/assets/{work-queue-TCjJxeT-.js → work-queue-CSvpuNLz.js} +2 -2
  85. package/public/assets/{workflow-marker-Cf3Hf2fN.js → workflow-marker-DAZcj5qt.js} +2 -2
  86. package/public/assets/{workflows-CXQX20Qj.js → workflows-DdmxRSyg.js} +2 -2
  87. package/public/assets/{workspaces-qSYzKYMA.js → workspaces-BxeKfVuF.js} +2 -2
  88. package/public/cosmos.html +4 -4
  89. package/public/index.html +31 -29
  90. package/runner/plugins/claude/.claude-plugin/plugin.json +1 -1
  91. package/runner/plugins/claude/hooks/gate-run-guard.provisioned.mjs +31 -1
  92. package/runner/src/adapters/claude-effort.ts +2 -4
  93. package/runner/src/adapters/codex-launch-config.ts +4 -5
  94. package/runner/src/adapters/codex.ts +1 -1
  95. package/runner/src/adapters/opencode-provider.ts +7 -22
  96. package/runner/src/adapters/opencode.ts +4 -4
  97. package/runner/src/agent-runner/credentials.ts +42 -12
  98. package/runner/src/agent-runner/inbox.ts +27 -0
  99. package/runner/src/agent-runner/lifecycle-milestones.ts +0 -2
  100. package/runner/src/bin/claude.ts +4 -0
  101. package/runner/src/bin/codex.ts +4 -0
  102. package/runner/src/bin/opencode.ts +4 -0
  103. package/runner/src/index.ts +5 -2
  104. package/runner/src/provider-setup.ts +34 -0
  105. package/runner/src/providers.ts +2 -1
  106. package/runner/src/runner-core.ts +18 -23
  107. package/runner/src/spawn-input.ts +2 -1
  108. package/runner/src/test-run-dedup.ts +59 -56
  109. package/scripts/cd-config.ts +24 -3
  110. package/scripts/gate-run-lease.ts +10 -7
  111. package/scripts/gate.sh +5 -1
  112. package/src/branch-land-notice.ts +93 -0
  113. package/src/branch-landed.ts +7 -76
  114. package/src/bus.ts +19 -20
  115. package/src/cd-deploy-notify.ts +30 -2
  116. package/src/cd-host-lag-notify.ts +7 -6
  117. package/src/ci/incidents.ts +2 -2
  118. package/src/ci/monitor.ts +5 -8
  119. package/src/ci/root-missing.ts +2 -7
  120. package/src/ci/transition-notify.ts +7 -39
  121. package/src/cli/cd-pauses.ts +19 -0
  122. package/src/cli/orchestrator.ts +1 -1
  123. package/src/cli/state.ts +2 -19
  124. package/src/cli/task-edit.ts +22 -0
  125. package/src/cli/task.ts +3 -1
  126. package/src/cli/workflow.ts +8 -2
  127. package/src/commands-db.ts +10 -6
  128. package/src/commands-write.ts +8 -0
  129. package/src/config-store-write.ts +13 -1
  130. package/src/config-store.ts +25 -14
  131. package/src/db/activity-async.ts +6 -1
  132. package/src/db/activity-write-ops.ts +13 -1
  133. package/src/db/activity.ts +1 -14
  134. package/src/db/agent-lifecycle-write-ops.ts +1 -0
  135. package/src/db/agent-meta.ts +2 -2
  136. package/src/db/agent-ownership-write-ops.ts +4 -0
  137. package/src/db/agent-search.ts +1 -15
  138. package/src/db/agents-async.ts +58 -7
  139. package/src/db/agents-write-ops.ts +28 -5
  140. package/src/db/agents.ts +81 -54
  141. package/src/db/artifacts-write-ops.ts +8 -3
  142. package/src/db/bus-outbox-write-ops.ts +1 -0
  143. package/src/db/channels-write-ops.ts +4 -0
  144. package/src/db/ci-incidents-async.ts +5 -5
  145. package/src/db/ci-incidents-write-ops.ts +2 -2
  146. package/src/db/claude-api-budget-ops.ts +5 -5
  147. package/src/db/claude-app-oauth.ts +4 -4
  148. package/src/db/codex-reset-consumes-write-ops.ts +3 -0
  149. package/src/db/command-row.ts +10 -2
  150. package/src/db/commands-list-query.ts +2 -0
  151. package/src/db/commands-spawn-read.ts +1 -1
  152. package/src/db/commands-write-ops.ts +21 -0
  153. package/src/db/config-store-write-ops.ts +9 -2
  154. package/src/db/continuation-archives-async.ts +5 -0
  155. package/src/db/continuation-archives-write-ops.ts +9 -0
  156. package/src/db/continuations.ts +2 -2
  157. package/src/db/db-writer-worker.ts +8 -1
  158. package/src/db/delivery-write-ops.ts +5 -0
  159. package/src/db/deploy-events-async.ts +1 -0
  160. package/src/db/deploy-events-read-ops.ts +2 -1
  161. package/src/db/deploy-events.ts +35 -4
  162. package/src/db/hosts-registration.ts +10 -2
  163. package/src/db/hosts-write-ops.ts +14 -0
  164. package/src/db/hosts.ts +9 -6
  165. package/src/db/inbox-write-ops.ts +4 -0
  166. package/src/db/inbox.ts +0 -14
  167. package/src/db/index.ts +2 -0
  168. package/src/db/insights-write-ops.ts +1 -0
  169. package/src/db/integrations-async.ts +8 -0
  170. package/src/db/integrations-ops.ts +15 -0
  171. package/src/db/integrations.ts +15 -21
  172. package/src/db/issue-lifecycle.ts +3 -4
  173. package/src/db/issue-refs-async.ts +20 -0
  174. package/src/db/issue-refs-write-ops.ts +29 -0
  175. package/src/db/issue-refs.ts +7 -8
  176. package/src/db/long-running-work.ts +2 -2
  177. package/src/db/macos-privacy.ts +1 -1
  178. package/src/db/main-connection-writes.ts +23 -2
  179. package/src/db/maintenance-job-reconcile.ts +61 -0
  180. package/src/db/maintenance-job-runs-async.ts +14 -0
  181. package/src/db/maintenance-job-write-ops.ts +9 -0
  182. package/src/db/mappers.ts +2 -14
  183. package/src/db/merge-lease.ts +1 -15
  184. package/src/db/message-reads-write-ops.ts +3 -0
  185. package/src/db/message-write-ops.ts +4 -0
  186. package/src/db/migrations.ts +7 -15
  187. package/src/db/orchestrators-async.ts +7 -3
  188. package/src/db/orchestrators-write-ops.ts +7 -1
  189. package/src/db/orchestrators.ts +21 -77
  190. package/src/db/pairs.ts +1 -13
  191. package/src/db/project-profile-instructions.ts +50 -0
  192. package/src/db/prompt-versions-ops.ts +1 -0
  193. package/src/db/prompt-versions.ts +9 -2
  194. package/src/db/provider-catalog-write-ops.ts +4 -4
  195. package/src/db/provider-config-history.ts +8 -3
  196. package/src/db/provider-flap-messages-write-ops.ts +1 -0
  197. package/src/db/provider-model-seed.ts +34 -0
  198. package/src/db/provider-quota-lease-write-ops.ts +1 -0
  199. package/src/db/provider-quota-write-ops.ts +2 -0
  200. package/src/db/provisioning-write-ops.ts +9 -8
  201. package/src/db/read-op-marshaling-fixtures.ts +5 -0
  202. package/src/db/read-ops.ts +4 -0
  203. package/src/db/routing-policy.ts +3 -4
  204. package/src/db/schema.ts +9 -3
  205. package/src/db/secrets-broker-write-ops.ts +5 -5
  206. package/src/db/secrets-vault-write.ts +7 -7
  207. package/src/db/services-write-ops.ts +3 -0
  208. package/src/db/spawn-delegation-state.ts +11 -4
  209. package/src/db/spawn-tree-cleanup.ts +3 -0
  210. package/src/db/stats-async.ts +4 -3
  211. package/src/db/task-entity.ts +23 -2
  212. package/src/db/task-list.ts +3 -1
  213. package/src/db/tasks.ts +1 -17
  214. package/src/db/team-spawn-delegation.ts +1 -1
  215. package/src/db/teams-write-ops.ts +4 -4
  216. package/src/db/timer-cutover-write-ops.ts +7 -0
  217. package/src/db/timer-ingress-write-ops.ts +9 -0
  218. package/src/db/timer-ingress.ts +7 -1
  219. package/src/db/timer-operator-write-ops.ts +14 -0
  220. package/src/db/timer-transfer-write-ops.ts +4 -0
  221. package/src/db/timer-write-ops.ts +14 -0
  222. package/src/db/token-db-write-ops.ts +21 -0
  223. package/src/db/token-standing.ts +15 -11
  224. package/src/db/user-settings-write-ops.ts +1 -0
  225. package/src/db/vault-backup.ts +2 -2
  226. package/src/db/vault-expiry.ts +2 -2
  227. package/src/db/vault-health.ts +3 -3
  228. package/src/db/vault-token-ops.ts +8 -8
  229. package/src/db/web-tool-call-ops.ts +3 -3
  230. package/src/db/workflow-contact.ts +1 -1
  231. package/src/db/workflow-task-read-ops.ts +30 -0
  232. package/src/db/write-ops.ts +15 -1
  233. package/src/db/writer-fault-seam.ts +5 -2
  234. package/src/db/writer-gateway.ts +21 -12
  235. package/src/dispatch-availability.ts +10 -6
  236. package/src/ephemeral/{landing-ingress-proof-worker.ts → landing-ingress-proof.test-fixture.ts} +4 -2
  237. package/src/host/disk-alert.ts +121 -0
  238. package/src/lifecycle-manager.ts +3 -2
  239. package/src/maintenance/cd-watcher.ts +3 -3
  240. package/src/maintenance/critical-job-watchdog.ts +16 -17
  241. package/src/maintenance/index.ts +1 -0
  242. package/src/maintenance/jobs.ts +3 -2
  243. package/src/maintenance/scheduler.ts +84 -128
  244. package/src/maintenance/stalled-delivery-pager.ts +6 -5
  245. package/src/maintenance/workspaces.ts +1 -1
  246. package/src/managed-policy.ts +31 -27
  247. package/src/mcp/index.ts +5 -2
  248. package/src/mcp/output-descriptions.ts +8 -8
  249. package/src/mcp/presentation.ts +4 -4
  250. package/src/mcp/project-profile-instructions.ts +32 -0
  251. package/src/mcp/tool-groups.ts +1 -1
  252. package/src/mcp/tools-spawn.ts +4 -3
  253. package/src/mcp-agent-action.ts +1 -2
  254. package/src/mcp-host-tools.ts +1 -1
  255. package/src/mcp-issue-ref-tools.ts +12 -11
  256. package/src/mcp-maintenance-tools.ts +2 -2
  257. package/src/mcp-profile-trust-tools.ts +4 -4
  258. package/src/mcp-provider-catalog.ts +2 -2
  259. package/src/mcp-task-tools.ts +11 -5
  260. package/src/mcp-team-template-tools.ts +3 -3
  261. package/src/mcp-workflow-tools.ts +10 -3
  262. package/src/notification-types.ts +2 -1
  263. package/src/operator-alarm.ts +26 -11
  264. package/src/package-pack.ts +42 -39
  265. package/src/project-instructions.ts +4 -0
  266. package/src/project-profile-instruction-text.ts +6 -0
  267. package/src/project-profile-instructions.ts +20 -0
  268. package/src/provider-catalog-store.ts +3 -49
  269. package/src/provider-config-store.ts +12 -11
  270. package/src/provider-model-seed.ts +1 -18
  271. package/src/provider-quota-config-store.ts +5 -4
  272. package/src/provider-secrets.test-fixture.ts +3 -3
  273. package/src/recipe-runner.ts +2 -2
  274. package/src/repo-config-source.ts +10 -4
  275. package/src/routes/agent-profiles.ts +6 -6
  276. package/src/routes/agents-spawn.ts +1 -1
  277. package/src/routes/agents.ts +6 -6
  278. package/src/routes/commands-listing.ts +4 -0
  279. package/src/routes/commands.ts +2 -2
  280. package/src/routes/continuation-archives.ts +2 -2
  281. package/src/routes/host-resource-control.ts +4 -1
  282. package/src/routes/index.ts +10 -1
  283. package/src/routes/integrations.ts +24 -50
  284. package/src/routes/issue-refs.ts +7 -7
  285. package/src/routes/orchestrator-bootstrap.ts +3 -3
  286. package/src/routes/orchestrator-host-registration.ts +2 -2
  287. package/src/routes/orchestrator-host-utilization.ts +3 -1
  288. package/src/routes/orchestrator-proxy.ts +2 -2
  289. package/src/routes/orchestrator.ts +4 -4
  290. package/src/routes/project-profile-instructions.ts +27 -0
  291. package/src/routes/project-trust.ts +2 -2
  292. package/src/routes/provider-config.ts +9 -8
  293. package/src/routes/provider-quota-config.ts +2 -2
  294. package/src/routes/settings.ts +5 -5
  295. package/src/routes/stats.ts +6 -6
  296. package/src/routes/task-http.ts +15 -1
  297. package/src/routes/task-issues.ts +11 -26
  298. package/src/routes/tasks.ts +22 -53
  299. package/src/routes/team-templates.ts +5 -5
  300. package/src/routes/teams-config.ts +2 -2
  301. package/src/routes/tokens.ts +12 -5
  302. package/src/routes/workflows.ts +20 -5
  303. package/src/routing-policy-normalize.ts +1 -2
  304. package/src/routing-step-defaults.ts +0 -2
  305. package/src/runner-token-mint-limit.ts +63 -0
  306. package/src/runtime-grant.ts +4 -2
  307. package/src/runtime-tokens.ts +50 -9
  308. package/src/security.ts +13 -20
  309. package/src/server-background.ts +1 -1
  310. package/src/server.ts +5 -2
  311. package/src/services/host-utilization.ts +23 -0
  312. package/src/services/idle-epics.ts +5 -6
  313. package/src/services/issue-lifecycle.ts +57 -61
  314. package/src/services/issue-refs.ts +9 -13
  315. package/src/services/kernel-timers-cutover-chaos-worker.ts +12 -7
  316. package/src/services/kernel-timers-ingress.ts +1 -1
  317. package/src/services/kernel-timers-request-key-migration-chaos-worker.ts +4 -1
  318. package/src/services/landed-ancestry.ts +19 -3
  319. package/src/services/memory-areas.ts +15 -51
  320. package/src/services/plan-ci-notice.ts +57 -0
  321. package/src/services/plan-ci-recovery.ts +2 -55
  322. package/src/services/plan-wake-digest.ts +1 -0
  323. package/src/services/profile-trust.ts +4 -3
  324. package/src/services/project-config-read.ts +70 -0
  325. package/src/services/project-profile-instructions.ts +54 -0
  326. package/src/services/provisioning-harness/budget-baseline.json +4 -4
  327. package/src/services/restart-spawn.ts +61 -49
  328. package/src/services/self-care-state.ts +2 -1
  329. package/src/services/self-effort.ts +5 -5
  330. package/src/services/send-message.ts +5 -1
  331. package/src/services/spawn-agent.ts +13 -2
  332. package/src/services/spawn-chain-inspector.ts +6 -13
  333. package/src/services/spawn-policy.ts +68 -0
  334. package/src/services/spawn-tree-cleanup.ts +2 -2
  335. package/src/services/task-dispatch.ts +3 -0
  336. package/src/services/task-state-reconcile.ts +6 -14
  337. package/src/services/team-templates.ts +9 -8
  338. package/src/services/transient-agent-reaper.ts +3 -1
  339. package/src/services/workflow-auto-start.ts +25 -13
  340. package/src/services/workflow-ci-main.ts +1 -1
  341. package/src/services/workflow-deferred-cleanup.ts +4 -2
  342. package/src/services/workflow-effect-driver.ts +2 -0
  343. package/src/services/workflow-effects.ts +18 -11
  344. package/src/services/workflow-land-notice.ts +10 -0
  345. package/src/services/workflow-pause-text.ts +43 -0
  346. package/src/services/workflow-reconcile.ts +13 -11
  347. package/src/services/workflow-run-view.ts +2 -0
  348. package/src/services/workflow-runs.ts +29 -13
  349. package/src/services/workflow-supervisor-state.ts +5 -0
  350. package/src/services/workflow-supervisor.ts +7 -3
  351. package/src/settings/registry.ts +1 -2
  352. package/src/spawn-command.ts +4 -4
  353. package/src/spawn-models.ts +10 -12
  354. package/src/spawn-placement.ts +1 -1
  355. package/src/spawn-targets.ts +1 -1
  356. package/src/startup-context-injection.ts +1 -0
  357. package/src/state-adoption/cd-cutover.ts +53 -7
  358. package/src/state-adoption/fleet-cutover.ts +35 -0
  359. package/src/state-adoption/fleet-plan.ts +36 -0
  360. package/src/state-adoption/index.ts +2 -2
  361. package/src/state-adoption/linux-plan.ts +2 -2
  362. package/src/state-adoption/linux.ts +2 -2
  363. package/src/state-adoption/macos-plan.ts +2 -2
  364. package/src/state-adoption/macos.ts +1 -1
  365. package/src/steward.ts +7 -6
  366. package/src/task-dispatch-live.ts +1 -1
  367. package/src/task-dispatcher.ts +1 -1
  368. package/src/teams-config-store.ts +4 -3
  369. package/src/token-db-write.ts +10 -0
  370. package/src/workspace-command-settle.ts +2 -1
  371. package/src/workspace-steward-wake.ts +2 -2
  372. package/node_modules/@humwick/kernel/LICENSE +0 -167
  373. package/node_modules/@humwick/kernel/async-entity-persistence.ts +0 -344
  374. package/node_modules/@humwick/kernel/async-event-log.ts +0 -107
  375. package/node_modules/@humwick/kernel/automations.pilot.ts +0 -147
  376. package/node_modules/@humwick/kernel/config.ts +0 -111
  377. package/node_modules/@humwick/kernel/contract.ts +0 -572
  378. package/node_modules/@humwick/kernel/control-authz.ts +0 -281
  379. package/node_modules/@humwick/kernel/control.ts +0 -645
  380. package/node_modules/@humwick/kernel/effects.ts +0 -493
  381. package/node_modules/@humwick/kernel/event-log.ts +0 -319
  382. package/node_modules/@humwick/kernel/http-transport.ts +0 -384
  383. package/node_modules/@humwick/kernel/identity-grammar.ts +0 -20
  384. package/node_modules/@humwick/kernel/identity.ts +0 -248
  385. package/node_modules/@humwick/kernel/index.ts +0 -28
  386. package/node_modules/@humwick/kernel/kernel-persistence.ts +0 -181
  387. package/node_modules/@humwick/kernel/landing-incident.ts +0 -306
  388. package/node_modules/@humwick/kernel/landing.ts +0 -953
  389. package/node_modules/@humwick/kernel/manifest-validation.ts +0 -460
  390. package/node_modules/@humwick/kernel/mcp-transport.ts +0 -109
  391. package/node_modules/@humwick/kernel/message-authority-chaos-worker.ts +0 -200
  392. package/node_modules/@humwick/kernel/message-authority.ts +0 -281
  393. package/node_modules/@humwick/kernel/module-host.ts +0 -722
  394. package/node_modules/@humwick/kernel/openapi-init.ts +0 -14
  395. package/node_modules/@humwick/kernel/package.json +0 -47
  396. package/node_modules/@humwick/kernel/persistence-schema.ts +0 -248
  397. package/node_modules/@humwick/kernel/persistence.ts +0 -510
  398. package/node_modules/@humwick/kernel/registry.ts +0 -60
  399. package/node_modules/@humwick/kernel/sqlite-kernel-persistence.ts +0 -499
  400. package/node_modules/@humwick/kernel/sqlite-module-host.ts +0 -87
  401. package/node_modules/@humwick/kernel/timers-chaos-worker.ts +0 -186
  402. package/node_modules/@humwick/kernel/timers.pilot.ts +0 -1411
  403. package/node_modules/@humwick/kernel/workflow-activation.ts +0 -25
  404. package/node_modules/@humwick/kernel/workflow-backstop.ts +0 -40
  405. package/node_modules/@humwick/kernel/workflow-cancel-tree.ts +0 -20
  406. package/node_modules/@humwick/kernel/workflow-chaos-worker.ts +0 -213
  407. package/node_modules/@humwick/kernel/workflow-composition.ts +0 -231
  408. package/node_modules/@humwick/kernel/workflow-container.ts +0 -72
  409. package/node_modules/@humwick/kernel/workflow-control.test-fixture.ts +0 -42
  410. package/node_modules/@humwick/kernel/workflow-control.ts +0 -178
  411. package/node_modules/@humwick/kernel/workflow-definition.ts +0 -507
  412. package/node_modules/@humwick/kernel/workflow-dispatch.ts +0 -60
  413. package/node_modules/@humwick/kernel/workflow-foreach.ts +0 -167
  414. package/node_modules/@humwick/kernel/workflow-journal-codec.ts +0 -339
  415. package/node_modules/@humwick/kernel/workflow-journal.ts +0 -922
  416. package/node_modules/@humwick/kernel/workflow-lane.ts +0 -48
  417. package/node_modules/@humwick/kernel/workflow-lease-owner.ts +0 -60
  418. package/node_modules/@humwick/kernel/workflow-recovery.test-fixture.ts +0 -19
  419. package/node_modules/@humwick/kernel/workflow-runtime.ts +0 -938
  420. package/node_modules/@humwick/kernel/workflow-script.ts +0 -11
  421. package/node_modules/@humwick/kernel/workflow-state.ts +0 -299
  422. package/node_modules/@humwick/kernel/workflow-step-commit.ts +0 -195
  423. package/node_modules/@humwick/kernel/workflow-transitions.ts +0 -317
  424. package/node_modules/@humwick/kernel/workflow-values.ts +0 -153
  425. package/node_modules/@humwick/kernel/workflow.pilot.ts +0 -376
  426. package/node_modules/@humwick/offload/LICENSE +0 -167
  427. package/node_modules/@humwick/offload/README.md +0 -57
  428. package/node_modules/@humwick/offload/dist/async-runner.d.ts +0 -18
  429. package/node_modules/@humwick/offload/dist/async-runner.d.ts.map +0 -1
  430. package/node_modules/@humwick/offload/dist/async-runner.js +0 -158
  431. package/node_modules/@humwick/offload/dist/async-runner.js.map +0 -1
  432. package/node_modules/@humwick/offload/dist/envelope.d.ts +0 -25
  433. package/node_modules/@humwick/offload/dist/envelope.d.ts.map +0 -1
  434. package/node_modules/@humwick/offload/dist/envelope.js +0 -80
  435. package/node_modules/@humwick/offload/dist/envelope.js.map +0 -1
  436. package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts +0 -10
  437. package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts.map +0 -1
  438. package/node_modules/@humwick/offload/dist/fixtures/worker-task.js +0 -59
  439. package/node_modules/@humwick/offload/dist/fixtures/worker-task.js.map +0 -1
  440. package/node_modules/@humwick/offload/dist/index.d.ts +0 -5
  441. package/node_modules/@humwick/offload/dist/index.d.ts.map +0 -1
  442. package/node_modules/@humwick/offload/dist/index.js +0 -5
  443. package/node_modules/@humwick/offload/dist/index.js.map +0 -1
  444. package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts +0 -62
  445. package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts.map +0 -1
  446. package/node_modules/@humwick/offload/dist/subprocess-runner.js +0 -295
  447. package/node_modules/@humwick/offload/dist/subprocess-runner.js.map +0 -1
  448. package/node_modules/@humwick/offload/dist/types.d.ts +0 -111
  449. package/node_modules/@humwick/offload/dist/types.d.ts.map +0 -1
  450. package/node_modules/@humwick/offload/dist/types.js +0 -176
  451. package/node_modules/@humwick/offload/dist/types.js.map +0 -1
  452. package/node_modules/@humwick/offload/dist/worker-pool.d.ts +0 -23
  453. package/node_modules/@humwick/offload/dist/worker-pool.d.ts.map +0 -1
  454. package/node_modules/@humwick/offload/dist/worker-pool.js +0 -435
  455. package/node_modules/@humwick/offload/dist/worker-pool.js.map +0 -1
  456. package/node_modules/@humwick/offload/dist/worker-runtime.d.ts +0 -2
  457. package/node_modules/@humwick/offload/dist/worker-runtime.d.ts.map +0 -1
  458. package/node_modules/@humwick/offload/dist/worker-runtime.js +0 -27
  459. package/node_modules/@humwick/offload/dist/worker-runtime.js.map +0 -1
  460. package/node_modules/@humwick/offload/dist/worker.d.ts +0 -5
  461. package/node_modules/@humwick/offload/dist/worker.d.ts.map +0 -1
  462. package/node_modules/@humwick/offload/dist/worker.js +0 -1
  463. package/node_modules/@humwick/offload/dist/worker.js.map +0 -1
  464. package/node_modules/@humwick/offload/package.json +0 -46
  465. package/node_modules/@humwick/offload/src/async-runner.ts +0 -170
  466. package/node_modules/@humwick/offload/src/envelope.ts +0 -92
  467. package/node_modules/@humwick/offload/src/fixtures/worker-task.ts +0 -49
  468. package/node_modules/@humwick/offload/src/index.ts +0 -4
  469. package/node_modules/@humwick/offload/src/subprocess-runner.ts +0 -334
  470. package/node_modules/@humwick/offload/src/types.ts +0 -235
  471. package/node_modules/@humwick/offload/src/worker-pool.ts +0 -463
  472. package/node_modules/@humwick/offload/src/worker-runtime.ts +0 -32
  473. package/node_modules/@humwick/offload/src/worker.ts +0 -5
  474. package/public/assets/agent-liveness-DyqxfB-t.js +0 -2
  475. package/public/assets/agent-profiles-BpI_jTxq.js +0 -2
  476. package/public/assets/fleet-BL4UXS_k.js +0 -2
  477. package/public/assets/index-B7ZerHLY.css +0 -2
  478. package/public/assets/index-BK0WV6hF.js +0 -15
  479. package/public/assets/projects-B_lmcqfO.js +0 -2
  480. package/public/assets/provider-display-DbLWpP3j.js +0 -2
  481. package/public/assets/run-card-CO_bguQf.js +0 -2
  482. package/public/assets/use-project-list-B-T2Bnnn.js +0 -2
  483. package/public/assets/versioned-prompt-editor-Diu8BIaM.js +0 -8
  484. package/runner/src/gate-run-lease-probe.ts +0 -38
  485. package/src/db/claude-catalog-reconcile.ts +0 -27
  486. package/src/routing-model-aliases.ts +0 -21
@@ -1,295 +0,0 @@
1
- import PQueue from "p-queue";
2
- import { beginRun, finishLog, recordResult, startLog } from "./envelope.js";
3
- import { OffloadError, StrikeCounter, normalizeError, validateTimeout } from "./types.js";
4
- const DEFAULT_KILL_GRACE_MS = 2_000;
5
- const DEFAULT_MAX_OUTPUT_BYTES = 8 * 1024 * 1024;
6
- /** How long to wait for a SIGKILLed child to be reaped before giving its slot back anyway. */
7
- const REAP_GRACE_MS = 1_000;
8
- /**
9
- * `detached` children are reparented rather than reaped when the host dies (#1809 P1-5), so
10
- * every live group is killed from a single process-level exit hook. One module-scoped hook
11
- * keeps runner instances from piling up `exit` listeners.
12
- */
13
- const liveChildren = new Set();
14
- let exitHookInstalled = false;
15
- function killGroup(child, signal) {
16
- try {
17
- if (process.platform !== "win32")
18
- process.kill(-child.pid, signal);
19
- else
20
- child.kill();
21
- }
22
- catch {
23
- try {
24
- child.kill(signal);
25
- }
26
- catch { /* the child is already gone */ }
27
- }
28
- }
29
- function trackChild(child) {
30
- liveChildren.add(child);
31
- if (exitHookInstalled)
32
- return;
33
- exitHookInstalled = true;
34
- process.on("exit", () => {
35
- for (const live of liveChildren)
36
- killGroup(live, "SIGKILL");
37
- });
38
- }
39
- /** Reads a stream up to `limit` bytes, then keeps draining so the child never blocks on a full pipe. */
40
- async function readCapped(stream, limit) {
41
- if (!stream)
42
- return { text: "", truncated: false };
43
- const reader = stream.getReader();
44
- const chunks = [];
45
- let size = 0;
46
- let truncated = false;
47
- try {
48
- for (;;) {
49
- const { done, value } = await reader.read();
50
- if (done)
51
- break;
52
- if (!value)
53
- continue;
54
- const remaining = limit - size;
55
- if (remaining <= 0) {
56
- truncated = true;
57
- continue;
58
- }
59
- if (value.byteLength > remaining) {
60
- chunks.push(value.subarray(0, remaining));
61
- size = limit;
62
- truncated = true;
63
- continue;
64
- }
65
- chunks.push(value);
66
- size += value.byteLength;
67
- }
68
- }
69
- finally {
70
- reader.releaseLock();
71
- }
72
- const buffer = new Uint8Array(size);
73
- let offset = 0;
74
- for (const chunk of chunks) {
75
- buffer.set(chunk, offset);
76
- offset += chunk.byteLength;
77
- }
78
- return { text: new TextDecoder().decode(buffer), truncated };
79
- }
80
- /**
81
- * Bounded wrapper around the repo's standard `Bun.spawn(... { stdout: "pipe", stderr: "pipe" })`
82
- * pattern. On POSIX, each run gets its own process group so timeout/abort also kills
83
- * descendants (for example shell, git, or install subprocess trees); Windows falls back
84
- * to Bun's direct-child kill because POSIX process groups do not exist there.
85
- */
86
- export function createSubprocessRunner(options = {}) {
87
- const queue = new PQueue({ concurrency: options.concurrency ?? 1 });
88
- const counter = new StrikeCounter(options.escalationThreshold, options.escalationWindowAttempts);
89
- const killGraceMs = options.killGraceMs ?? DEFAULT_KILL_GRACE_MS;
90
- const maxOutputBytes = options.maxOutputBytes ?? DEFAULT_MAX_OUTPUT_BYTES;
91
- if (!Number.isFinite(killGraceMs) || killGraceMs < 0)
92
- throw new RangeError("killGraceMs must be a non-negative finite number");
93
- if (!Number.isSafeInteger(maxOutputBytes) || maxOutputBytes < 1)
94
- throw new RangeError("maxOutputBytes must be a positive integer");
95
- const live = new Set();
96
- const children = new Set();
97
- let destroyed = false;
98
- const abortedError = (taskName, cause) => new OffloadError({ kind: "aborted", taskName, message: `${taskName} was aborted`, cause });
99
- const destroyedError = (taskName) => new OffloadError({ kind: "aborted", taskName, message: `${taskName} was cancelled: subprocess runner destroyed` });
100
- return {
101
- offThread: true,
102
- get stats() { return { active: queue.pending, queued: queue.size }; },
103
- async run(taskName, spec, env) {
104
- const labels = env?.labels ?? {};
105
- const logger = env?.logger ?? options.logger;
106
- const sink = env?.onEscalate ?? options.onEscalate;
107
- const reportRejection = async (error) => {
108
- // Rejecting before the run reaches startLog is still a terminal outcome; without this
109
- // the structured stream shows nothing at all for it.
110
- finishLog(logger, "subprocess", taskName, labels, performance.now(), error);
111
- await recordResult({ counter, taskName, backend: "subprocess", labels, error, sink, logger });
112
- throw error;
113
- };
114
- if (!spec.command.length)
115
- return reportRejection(new OffloadError({ kind: "rejected", taskName, message: "Subprocess command must not be empty" }));
116
- if (destroyed)
117
- return reportRejection(destroyedError(taskName));
118
- if (env?.signal?.aborted)
119
- return reportRejection(abortedError(taskName, env.signal.reason));
120
- try {
121
- validateTimeout(env?.timeoutMs ?? options.defaultTimeoutMs);
122
- }
123
- catch (error) {
124
- return reportRejection(normalizeError(taskName, error, "rejected"));
125
- }
126
- let publish;
127
- let published = false;
128
- const outcome = new Promise((resolve) => {
129
- publish = (value) => { if (!published) {
130
- published = true;
131
- resolve(value);
132
- } };
133
- });
134
- let started = false;
135
- let cancelled = false;
136
- const entry = {
137
- taskName,
138
- teardown: new AbortController(),
139
- settled: outcome.then(() => undefined),
140
- cancelIfQueued: (error) => {
141
- if (started || cancelled)
142
- return;
143
- cancelled = true;
144
- // The single funnel for both abort-while-queued and destroy()-cancels-queued, so
145
- // the one line each terminal path owes the structured stream is emitted here. The
146
- // callback bails on `cancelled` without logging, which keeps it to exactly one.
147
- finishLog(logger, "subprocess", taskName, labels, performance.now(), error);
148
- publish({ ok: false, error });
149
- },
150
- };
151
- live.add(entry);
152
- // p-queue's own `signal` option used to provide prompt abort for queued runs, but it
153
- // also released the slot while the child kept running (#1809 P1-7).
154
- const signal = env?.signal;
155
- const onQueuedAbort = signal ? () => entry.cancelIfQueued(abortedError(taskName, signal.reason)) : undefined;
156
- if (signal && onQueuedAbort)
157
- signal.addEventListener("abort", onQueuedAbort, { once: true });
158
- const task = queue.add(async () => {
159
- if (signal && onQueuedAbort)
160
- signal.removeEventListener("abort", onQueuedAbort);
161
- let context;
162
- let child;
163
- let onAbort;
164
- let killTimer;
165
- let abandonTimer;
166
- let reaped = false;
167
- let abandon;
168
- const abandoned = new Promise((resolve) => { abandon = () => resolve("abandoned"); });
169
- try {
170
- if (cancelled)
171
- return;
172
- if (destroyed || entry.teardown.signal.aborted) {
173
- const error = destroyedError(taskName);
174
- finishLog(logger, "subprocess", taskName, labels, performance.now(), error);
175
- publish({ ok: false, error });
176
- return;
177
- }
178
- started = true;
179
- context = beginRun(taskName, env, options, entry.teardown.signal);
180
- const run = context;
181
- const startedAt = startLog(logger, "subprocess", taskName, labels);
182
- // SIGTERM alone bounds nothing: a child that traps or ignores it runs to completion
183
- // while holding the slot (#1809 P0-3). Escalate to a group SIGKILL, then stop
184
- // waiting altogether so the deadline is real even for an unkillable child.
185
- onAbort = () => {
186
- if (!child || reaped)
187
- return;
188
- killGroup(child, "SIGTERM");
189
- killTimer = setTimeout(() => {
190
- // `reaped` keeps a late timer from signalling a process group whose pid the
191
- // kernel may already have handed to somebody else.
192
- if (!child || reaped)
193
- return;
194
- killGroup(child, "SIGKILL");
195
- abandonTimer = setTimeout(abandon, REAP_GRACE_MS);
196
- }, killGraceMs);
197
- };
198
- run.signal.addEventListener("abort", onAbort, { once: true });
199
- try {
200
- if (run.signal.aborted)
201
- throw run.abortError();
202
- child = Bun.spawn(spec.command, {
203
- cwd: spec.cwd,
204
- env: spec.env ? { ...process.env, ...spec.env } : process.env,
205
- stdin: "ignore", stdout: "pipe", stderr: "pipe",
206
- detached: process.platform !== "win32",
207
- });
208
- trackChild(child);
209
- children.add(child);
210
- const exiting = child;
211
- void exiting.exited.then(() => {
212
- reaped = true;
213
- liveChildren.delete(exiting);
214
- children.delete(exiting);
215
- });
216
- const completed = Promise.all([
217
- readCapped(child.stdout, maxOutputBytes),
218
- readCapped(child.stderr, maxOutputBytes),
219
- child.exited,
220
- ]);
221
- const settledRun = await Promise.race([completed, abandoned]);
222
- if (settledRun === "abandoned") {
223
- throw run.signal.aborted
224
- ? run.abortError()
225
- : new OffloadError({ kind: "timeout", taskName, message: `${taskName} did not exit after SIGKILL` });
226
- }
227
- const [stdout, stderr, exitCode] = settledRun;
228
- if (run.signal.aborted)
229
- throw run.abortError();
230
- const okExitCodes = spec.okExitCodes ?? [0];
231
- if (okExitCodes !== "any" && !okExitCodes.includes(exitCode))
232
- throw new OffloadError({
233
- kind: "rejected", taskName, code: String(exitCode), message: `${taskName} exited ${exitCode}: ${stderr.text.trim() || stdout.text.trim()}`,
234
- });
235
- const result = { exitCode, stdout: stdout.text, stderr: stderr.text, truncated: stdout.truncated || stderr.truncated };
236
- finishLog(logger, "subprocess", taskName, labels, startedAt);
237
- await recordResult({ counter, taskName, backend: "subprocess", labels, sink, logger });
238
- publish({ ok: true, value: result });
239
- }
240
- catch (error) {
241
- const normalized = run.signal.aborted ? run.abortError() : normalizeError(taskName, error);
242
- finishLog(logger, "subprocess", taskName, labels, startedAt, normalized);
243
- await recordResult({ counter, taskName, backend: "subprocess", labels, error: normalized, sink, logger });
244
- publish({ ok: false, error: normalized });
245
- }
246
- finally {
247
- if (onAbort)
248
- run.signal.removeEventListener("abort", onAbort);
249
- run.cleanup();
250
- }
251
- }
252
- catch (error) {
253
- const normalized = normalizeError(taskName, error, "rejected");
254
- finishLog(logger, "subprocess", taskName, labels, performance.now(), normalized);
255
- await recordResult({ counter, taskName, backend: "subprocess", labels, error: normalized, sink, logger });
256
- publish({ ok: false, error: normalized });
257
- }
258
- finally {
259
- context?.cleanup();
260
- // Keep the slot until the child is actually reaped, so the concurrency cap and
261
- // `stats` stay true while a kill is in flight (#1809 P1-7). `abandoned` bounds
262
- // this: the SIGKILL escalation above always ends the wait.
263
- if (child)
264
- await Promise.race([child.exited, abandoned]);
265
- if (killTimer)
266
- clearTimeout(killTimer);
267
- if (abandonTimer)
268
- clearTimeout(abandonTimer);
269
- live.delete(entry);
270
- }
271
- });
272
- void task.catch(() => undefined);
273
- const result = await outcome;
274
- if (!result.ok)
275
- throw result.error;
276
- return result.value;
277
- },
278
- drain: () => queue.onIdle(),
279
- async destroy() {
280
- destroyed = true;
281
- const outstanding = [...live];
282
- for (const entry of outstanding) {
283
- entry.cancelIfQueued(destroyedError(entry.taskName));
284
- entry.teardown.abort(new DOMException("Subprocess runner destroyed", "AbortError"));
285
- }
286
- for (const child of children)
287
- killGroup(child, "SIGKILL");
288
- await Promise.all([
289
- ...outstanding.map((entry) => entry.settled),
290
- ...[...children].map((child) => child.exited),
291
- ]);
292
- },
293
- };
294
- }
295
- //# sourceMappingURL=subprocess-runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subprocess-runner.js","sourceRoot":"","sources":["../src/subprocess-runner.ts"],"names":[],"mappings":"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"}
@@ -1,111 +0,0 @@
1
- export type OffloadErrorKind = "timeout" | "aborted" | "worker-error" | "worker-exit" | "rejected";
2
- /** A stable, backend-independent failure surface for callers and escalation sinks. */
3
- export declare class OffloadError extends Error {
4
- readonly kind: OffloadErrorKind;
5
- readonly code?: string;
6
- readonly taskName: string;
7
- constructor(options: {
8
- kind: OffloadErrorKind;
9
- taskName: string;
10
- code?: string;
11
- message?: string;
12
- cause?: unknown;
13
- });
14
- }
15
- export type OffloadLogFields = Record<string, unknown>;
16
- /** Deliberately structural: server, runner and orchestrator can pass their existing logger adapters. */
17
- export interface OffloadLogger {
18
- debug?(message: string, fields?: OffloadLogFields): void;
19
- info?(message: string, fields?: OffloadLogFields): void;
20
- warn?(message: string, fields?: OffloadLogFields): void;
21
- error?(message: string, fields?: OffloadLogFields): void;
22
- }
23
- export interface EscalationEvent {
24
- taskName: string;
25
- backend: "worker" | "async" | "subprocess";
26
- error: OffloadError;
27
- strikes: number;
28
- labels: Record<string, string>;
29
- }
30
- export type EscalationSink = (event: EscalationEvent) => void | Promise<void>;
31
- /** The common per-run contract. No backend-specific options leak into this envelope. */
32
- export interface OffloadEnvelope {
33
- timeoutMs?: number;
34
- signal?: AbortSignal;
35
- logger?: OffloadLogger;
36
- labels?: Record<string, string>;
37
- onEscalate?: EscalationSink;
38
- /**
39
- * Opt in to automatic re-dispatch after an ambiguous worker death (WorkerPool only; the async
40
- * and subprocess runners never re-run). Default is AT-MOST-ONCE: if the worker dies with this
41
- * job in flight, the job is rejected (`worker-exit`) and never re-run — because a re-run would
42
- * repeat any side effect the job already performed (an HTTP POST, a mutation). Set this ONLY
43
- * when the job is idempotent/retry-safe (pure compute), in which case a worker death is
44
- * absorbed by re-dispatching to a fresh worker up to a bounded number of times (#1822 HIGH-1).
45
- * Command/handler offload (side-effecting) must leave this unset.
46
- */
47
- retrySafe?: boolean;
48
- }
49
- export interface OffloadDefaults {
50
- defaultTimeoutMs?: number;
51
- logger?: OffloadLogger;
52
- onEscalate?: EscalationSink;
53
- /** Consecutive failed runs for a task before its injected sink fires. Defaults to 3. */
54
- escalationThreshold?: number;
55
- /**
56
- * Size, in failure-attempts, of the sliding window the strike counter escalates over: a task
57
- * escalates when it accumulates `escalationThreshold` failures within this many consecutive
58
- * failure-attempts (counted across ALL tasks). A task with no failure inside the window is
59
- * forgotten, which is ALSO what bounds memory — the counter holds at most this many failure
60
- * events, so at most this many distinct names, at once (#1822 items 1 and 4). Adoption keys
61
- * runs by dynamic names (workspace/agent ids); the window is what keeps that from growing
62
- * without bound. Defaults to 4096.
63
- */
64
- escalationWindowAttempts?: number;
65
- }
66
- /**
67
- * Sliding-window failure counter driving edge-triggered escalation (#1822 F1/F4, round-3
68
- * redesign). A task escalates when it accumulates `threshold` failures within the last
69
- * `window` failure-attempts (counted across all tasks); a failure older than the window no
70
- * longer counts. This is attempt-based — no wall-clock, no timers — so it is deterministic and
71
- * needs no time injection to test.
72
- *
73
- * WHY windowed rather than a size-capped consecutive counter: any hard *count* cap on a
74
- * consecutive-strike map either scans the map per failure (O(cap); an earlier attempt blocked
75
- * the event loop ~11s at 40k / ~31s at 100k distinct failures) or silently drops a task that is
76
- * genuinely accumulating (a missed page — strictly worse than the leak it replaced). The window
77
- * gives all four invariants at once: no lost escalation, no page storm, amortized O(1) per
78
- * failure, and a hard memory bound.
79
- *
80
- * IMPLEMENTATION — the standard sliding-window multiset over a ring of failure events:
81
- * - `#ring[(clock-1) % window]` holds the failure event `window` attempts ago. Each new failure
82
- * overwrites exactly that slot, and the event it evicts is exactly the one aging out — so a
83
- * failure is pushed once and expired once: amortized O(1), never a scan.
84
- * - `#live[name]` is the name's failure count still inside the window = its escalation score.
85
- * - Memory is hard-bounded: the ring holds ≤ `window` events, hence ≤ `window` distinct names.
86
- * - `succeed()` bumps a per-name `#epoch`; events carry the epoch they were recorded under, so a
87
- * success invalidates the name's in-window failures (score resets) in O(1) without scanning
88
- * the ring — the stale events simply don't count as they age out.
89
- * - Latch (`trip`): a per-name flag so an escalation fires ONCE and does not re-fire while the
90
- * task stays continuously failing; it clears when the task succeeds or every failure ages out.
91
- *
92
- * SEMANTIC NOTE (deliberate change from the first #1822 attempt): escalation is now "threshold
93
- * failures WITHIN the window", not "threshold consecutive failures ever". Failures spread wider
94
- * apart than the window decay and never trip — which is the actual flap-detection semantic.
95
- */
96
- export declare class StrikeCounter {
97
- #private;
98
- readonly threshold: number;
99
- readonly window: number;
100
- constructor(threshold?: number, escalationWindowAttempts?: number);
101
- /** Distinct task names with a failure still inside the window. Bounded by `window`. */
102
- get size(): number;
103
- fail(taskName: string): number;
104
- /** Latch an escalation so it fires once until the task re-arms (succeeds or ages out). */
105
- trip(taskName: string): void;
106
- succeed(taskName: string): void;
107
- }
108
- export declare function normalizeError(taskName: string, error: unknown, fallback?: OffloadErrorKind): OffloadError;
109
- export declare function log(logger: OffloadLogger | undefined, level: keyof OffloadLogger, message: string, fields: OffloadLogFields): void;
110
- export declare function validateTimeout(timeoutMs: number | undefined): number | undefined;
111
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1,176 +0,0 @@
1
- import { errMessage } from "@humwick/sdk";
2
- /** A stable, backend-independent failure surface for callers and escalation sinks. */
3
- export class OffloadError extends Error {
4
- kind;
5
- code;
6
- taskName;
7
- constructor(options) {
8
- super(options.message ?? `${options.taskName} ${options.kind}`, { cause: options.cause });
9
- this.name = "OffloadError";
10
- this.kind = options.kind;
11
- this.code = options.code;
12
- this.taskName = options.taskName;
13
- }
14
- }
15
- /**
16
- * Sliding-window failure counter driving edge-triggered escalation (#1822 F1/F4, round-3
17
- * redesign). A task escalates when it accumulates `threshold` failures within the last
18
- * `window` failure-attempts (counted across all tasks); a failure older than the window no
19
- * longer counts. This is attempt-based — no wall-clock, no timers — so it is deterministic and
20
- * needs no time injection to test.
21
- *
22
- * WHY windowed rather than a size-capped consecutive counter: any hard *count* cap on a
23
- * consecutive-strike map either scans the map per failure (O(cap); an earlier attempt blocked
24
- * the event loop ~11s at 40k / ~31s at 100k distinct failures) or silently drops a task that is
25
- * genuinely accumulating (a missed page — strictly worse than the leak it replaced). The window
26
- * gives all four invariants at once: no lost escalation, no page storm, amortized O(1) per
27
- * failure, and a hard memory bound.
28
- *
29
- * IMPLEMENTATION — the standard sliding-window multiset over a ring of failure events:
30
- * - `#ring[(clock-1) % window]` holds the failure event `window` attempts ago. Each new failure
31
- * overwrites exactly that slot, and the event it evicts is exactly the one aging out — so a
32
- * failure is pushed once and expired once: amortized O(1), never a scan.
33
- * - `#live[name]` is the name's failure count still inside the window = its escalation score.
34
- * - Memory is hard-bounded: the ring holds ≤ `window` events, hence ≤ `window` distinct names.
35
- * - `succeed()` bumps a per-name `#epoch`; events carry the epoch they were recorded under, so a
36
- * success invalidates the name's in-window failures (score resets) in O(1) without scanning
37
- * the ring — the stale events simply don't count as they age out.
38
- * - Latch (`trip`): a per-name flag so an escalation fires ONCE and does not re-fire while the
39
- * task stays continuously failing; it clears when the task succeeds or every failure ages out.
40
- *
41
- * SEMANTIC NOTE (deliberate change from the first #1822 attempt): escalation is now "threshold
42
- * failures WITHIN the window", not "threshold consecutive failures ever". Failures spread wider
43
- * apart than the window decay and never trip — which is the actual flap-detection semantic.
44
- */
45
- export class StrikeCounter {
46
- #ring;
47
- /** Failures still inside the window under the name's CURRENT epoch = its escalation score. */
48
- #live = new Map();
49
- /** Total ring occurrences per name across all epochs — for O(1) cleanup and the memory bound. */
50
- #present = new Map();
51
- /** Per-name epoch, bumped by succeed() so pre-success failures stop counting. */
52
- #epoch = new Map();
53
- /** Names that have escalated and not yet re-armed (edge-trigger latch). */
54
- #latched = new Set();
55
- #clock = 0;
56
- threshold;
57
- window;
58
- constructor(threshold = 3, escalationWindowAttempts = 4096) {
59
- if (!Number.isSafeInteger(threshold) || threshold < 1)
60
- throw new RangeError("escalationThreshold must be a positive integer");
61
- if (!Number.isSafeInteger(escalationWindowAttempts) || escalationWindowAttempts < 1)
62
- throw new RangeError("escalationWindowAttempts must be a positive integer");
63
- // A window smaller than the threshold can never hold `threshold` of one name's failures at
64
- // once (the ring evicts the oldest before the count gets there), so it would score 1,2,…,
65
- // threshold-1 forever and SILENTLY never escalate. Reject it rather than mislead (#1822 LOW-4).
66
- if (escalationWindowAttempts < threshold)
67
- throw new RangeError("escalationWindowAttempts must be >= escalationThreshold");
68
- this.threshold = threshold;
69
- this.window = escalationWindowAttempts;
70
- this.#ring = new Array(escalationWindowAttempts).fill(undefined);
71
- }
72
- /** Distinct task names with a failure still inside the window. Bounded by `window`. */
73
- get size() {
74
- return this.#present.size;
75
- }
76
- // Removes the event in `slot` (the one aging out of the window) and updates the name's counts.
77
- #expire(slot) {
78
- const event = this.#ring[slot];
79
- if (event === undefined)
80
- return;
81
- this.#ring[slot] = undefined;
82
- const { name, epoch } = event;
83
- // Only decrement the score if the event is still under the name's live epoch; an event from
84
- // before a succeed() carries a stale epoch and was never counted toward the current score.
85
- if (epoch === (this.#epoch.get(name) ?? 0)) {
86
- const live = (this.#live.get(name) ?? 0) - 1;
87
- if (live <= 0) {
88
- this.#live.delete(name);
89
- this.#latched.delete(name);
90
- }
91
- else
92
- this.#live.set(name, live);
93
- }
94
- const present = (this.#present.get(name) ?? 0) - 1;
95
- if (present <= 0) {
96
- // Every trace of the name has aged out of the window: forget it entirely (this is the
97
- // natural memory bound, and it re-arms a latch that went quiet).
98
- this.#present.delete(name);
99
- this.#epoch.delete(name);
100
- this.#live.delete(name);
101
- this.#latched.delete(name);
102
- }
103
- else {
104
- this.#present.set(name, present);
105
- }
106
- }
107
- fail(taskName) {
108
- this.#clock += 1;
109
- const slot = (this.#clock - 1) % this.window;
110
- // The event this slot holds is exactly `window` attempts old — evict it before reusing it.
111
- this.#expire(slot);
112
- const epoch = this.#epoch.get(taskName) ?? 0;
113
- this.#ring[slot] = { name: taskName, epoch };
114
- this.#present.set(taskName, (this.#present.get(taskName) ?? 0) + 1);
115
- const score = (this.#live.get(taskName) ?? 0) + 1;
116
- this.#live.set(taskName, score);
117
- // A latched name must not re-page while it stays continuously live.
118
- if (this.#latched.has(taskName))
119
- return 0;
120
- return score;
121
- }
122
- /** Latch an escalation so it fires once until the task re-arms (succeeds or ages out). */
123
- trip(taskName) {
124
- // Latch ONLY a name that has a failure in the window. Otherwise a caller (or a bug) tripping
125
- // arbitrary names would grow #latched without any ring presence to age it out — breaking the
126
- // "memory bounded BY the window" invariant, since `size` counts only #present (#1822 MED-3).
127
- // In practice trip() is always called right after fail() returned >= threshold, so the name
128
- // is present; this guard just makes the bound hold unconditionally.
129
- if (this.#present.has(taskName))
130
- this.#latched.add(taskName);
131
- }
132
- succeed(taskName) {
133
- // Nothing tracked → nothing to reset (and never create an epoch entry for a name that only
134
- // ever succeeds, which would leak one map entry per distinct successful task name).
135
- if (!this.#present.has(taskName))
136
- return;
137
- // Bump the epoch: every in-window failure recorded under the old epoch stops counting, so
138
- // the score resets to 0 in O(1). The stale ring events are reclaimed as they age out.
139
- this.#epoch.set(taskName, (this.#epoch.get(taskName) ?? 0) + 1);
140
- this.#live.delete(taskName);
141
- this.#latched.delete(taskName);
142
- }
143
- }
144
- export function normalizeError(taskName, error, fallback = "rejected") {
145
- if (error instanceof OffloadError)
146
- return error;
147
- const detail = error;
148
- return new OffloadError({
149
- kind: fallback,
150
- taskName,
151
- code: typeof detail?.code === "string" ? detail.code : undefined,
152
- message: errMessage(error),
153
- cause: error,
154
- });
155
- }
156
- export function log(logger, level, message, fields) {
157
- const method = logger?.[level];
158
- if (typeof method !== "function")
159
- return;
160
- try {
161
- method.call(logger, message, fields);
162
- }
163
- catch {
164
- // A caller-supplied transport that throws must never break the run it is describing:
165
- // logging happens on the settle path, so an escaping throw wedges the backend (#1809 P0-1).
166
- // There is no second transport to report this to, so it is deliberately swallowed.
167
- }
168
- }
169
- export function validateTimeout(timeoutMs) {
170
- if (timeoutMs === undefined)
171
- return undefined;
172
- if (!Number.isFinite(timeoutMs) || timeoutMs <= 0)
173
- throw new RangeError("timeoutMs must be a positive finite number");
174
- return timeoutMs;
175
- }
176
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -1,23 +0,0 @@
1
- import { type OffloadDefaults, type OffloadEnvelope } from "./types.js";
2
- export interface WorkerPoolOptions extends OffloadDefaults {
3
- /** A module that default-exports `(input, { taskName }) => output`. Prefer a file URL. */
4
- worker: URL | string;
5
- size?: number;
6
- }
7
- export interface WorkerPoolStats {
8
- busy: number;
9
- idle: number;
10
- queued: number;
11
- }
12
- export interface WorkerPool {
13
- run<In, Out>(taskName: string, input: In, env?: OffloadEnvelope): Promise<Out>;
14
- readonly stats: WorkerPoolStats;
15
- readonly offThread: true;
16
- destroy(): Promise<void>;
17
- }
18
- /**
19
- * Fixed native Bun Worker pool. A deadline or abort replaces the whole worker because
20
- * CPU-bound synchronous code cannot observe a cancellation message while it is busy.
21
- */
22
- export declare function createWorkerPool(options: WorkerPoolOptions): WorkerPool;
23
- //# sourceMappingURL=worker-pool.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-pool.d.ts","sourceRoot":"","sources":["../src/worker-pool.ts"],"names":[],"mappings":"AACA,OAAO,EAAgE,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAEtI,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,0FAA0F;IAC1F,MAAM,EAAE,GAAG,GAAG,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/E,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAqDD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,UAAU,CAiYvE"}