@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.
- package/README.md +5 -0
- package/bundled/prompts/manifest.json +1 -0
- package/bundled/prompts/task.hydration.md +1 -1
- package/bundled/roles/builder.md +1 -1
- package/docs/guides/sub-coordinators.md +12 -5
- package/docs/guides/tools-administration.md +4 -0
- package/docs/guides/tools-coordination.md +2 -0
- package/docs/guides/tools-tasks.md +8 -0
- package/docs/guides/workflows.md +74 -0
- package/docs/openapi.json +486 -4
- package/package.json +10 -18
- package/public/assets/{MessageBubble-BWpoBjl4.js → MessageBubble-Bq9kr21N.js} +2 -2
- package/public/assets/{PlanGraphPanel-C0auck3n.js → PlanGraphPanel-Dqiroy06.js} +2 -2
- package/public/assets/{TraceView-DBnOx7AQ.js → TraceView-DYU962-H.js} +2 -2
- package/public/assets/{VaultDecisionCard-0kp2oNBC.js → VaultDecisionCard-DhPfzioE.js} +2 -2
- package/public/assets/{activity-yLztXEBt.js → activity-DzCcQTee.js} +2 -2
- package/public/assets/{agent-lineage-BbJDR1dW.js → agent-lineage-SgDt9i3T.js} +2 -2
- package/public/assets/agent-liveness-Bq-s73jW.js +2 -0
- package/public/assets/{agent-name-CTZBrSD9.js → agent-name-CcY3Aijy.js} +2 -2
- package/public/assets/agent-profiles-cxtRBn6O.js +2 -0
- package/public/assets/{agent-project-badge-9TqzUUYE.js → agent-project-badge-DGYbIhaI.js} +2 -2
- package/public/assets/{agent-tools-D4n40pn8.js → agent-tools-DHbftV0N.js} +2 -2
- package/public/assets/{agent-type-icon-D6FUarOf.js → agent-type-icon-CY113sp-.js} +2 -2
- package/public/assets/{agents-BYDslkJc.js → agents-BPzY7IlQ.js} +2 -2
- package/public/assets/{analytics-B-XSbEMC.js → analytics-DENFPv_a.js} +2 -2
- package/public/assets/{artifact-viewer-DdWIfV6M.js → artifact-viewer-KRvSc7sl.js} +2 -2
- package/public/assets/{artifacts-DPN1q4pA.js → artifacts-C9gSmL3s.js} +2 -2
- package/public/assets/{artifacts-oBOqks-2.js → artifacts-DT-HkI5O.js} +2 -2
- package/public/assets/{automation-4KcRFXEu.js → automation-BsmjQhKD.js} +2 -2
- package/public/assets/{backlog-Cw9xPTCF.js → backlog-8NYH_62t.js} +2 -2
- package/public/assets/{busy-health-CTu32MZt.js → busy-health-D3hwvYb4.js} +2 -2
- package/public/assets/{channels-BiXzg1G9.js → channels-DCJ5WL7O.js} +2 -2
- package/public/assets/{chat-Ctk2qwvA.js → chat-DAIl357U.js} +3 -3
- package/public/assets/{code-preview-Bm1wWqAp.js → code-preview-CzrZfr9U.js} +2 -2
- package/public/assets/{connectors-C36ax4Vw.js → connectors-xTxtlyou.js} +2 -2
- package/public/assets/{cosmos-Jj9LK2Wf.js → cosmos-BpebFLK2.js} +2 -2
- package/public/assets/{crate-agent-H6S7-B9T.js → crate-agent-BHvI5wXC.js} +2 -2
- package/public/assets/{dependency-graph-Cd1E23wa.js → dependency-graph-DGT0o3wJ.js} +2 -2
- package/public/assets/{deploys-Bwfq146q.js → deploys-hqWOHSHE.js} +2 -2
- package/public/assets/{display-CfO7rTuF.js → display-CDeH4I8T.js} +2 -2
- package/public/assets/{files-DhhZI2Ih.js → files-BTeGVmTg.js} +2 -2
- package/public/assets/{fleet-B_rFEbnL.js → fleet-DgXtNgCa.js} +2 -2
- package/public/assets/{fleet-metrics-BkHP-P3R.js → fleet-metrics-BHEt5yc_.js} +2 -2
- package/public/assets/{formatted-body-Cm1RrzmN.js → formatted-body-MLtodyPp.js} +3 -3
- package/public/assets/{formatted-body-impl-DQiOuOD1.js → formatted-body-impl-CAe664Z8.js} +2 -2
- package/public/assets/{host-providers-dialog-CHqwXTov.js → host-providers-dialog-mapF4Fj9.js} +2 -2
- package/public/assets/index-CqqgOI5R.js +15 -0
- package/public/assets/index-MYAIwYTX.css +2 -0
- package/public/assets/{insights-fH1EL-qZ.js → insights-DNyf7IzF.js} +2 -2
- package/public/assets/{integrations-C5Oix6ng.js → integrations-DlYOHq7T.js} +2 -2
- package/public/assets/{issue-ref-chip-ODyondIa.js → issue-ref-chip-CeWBNWn7.js} +2 -2
- package/public/assets/{log-viewer-Cvfy6PW7.js → log-viewer-Cib8nqdE.js} +2 -2
- package/public/assets/{maintenance-D8CDH5wZ.js → maintenance-DSn1cPm7.js} +2 -2
- package/public/assets/{managed-agents-egllbpij.js → managed-agents-C3CkM81m.js} +2 -2
- package/public/assets/{markdown-preview-CYSFgVgK.js → markdown-preview-W4VQQPAv.js} +3 -3
- package/public/assets/{markdown-preview-impl-BteVIjX4.js → markdown-preview-impl-CMsTdhjq.js} +2 -2
- package/public/assets/{memory-C8WmXsyr.js → memory-BV17qtO4.js} +2 -2
- package/public/assets/{messages-BzQdqlO6.js → messages-Bm_1AqSA.js} +2 -2
- package/public/assets/{orchestrators-B1HxzkNw.js → orchestrators-Dg-vfP09.js} +2 -2
- package/public/assets/{overview-DCUnI4Z7.js → overview-DcYCrvlr.js} +2 -2
- package/public/assets/{pairs-ftCd2XcD.js → pairs-8o9nuG3V.js} +2 -2
- package/public/assets/{profile-icon-B2zH8DMH.js → profile-icon-BsRyBMea.js} +2 -2
- package/public/assets/project-profile-instructions-DETKFn_E.js +2 -0
- package/public/assets/projects-M_m6AHws.js +2 -0
- package/public/assets/{prompt-settings-Bftq9czX.js → prompt-settings-C_mNCgeL.js} +2 -2
- package/public/assets/provider-display-BEeLXC_D.js +2 -0
- package/public/assets/{registry-DWCU5c8q.js → registry-DDHHHE5N.js} +2 -2
- package/public/assets/run-card-Dt4I4jaP.js +2 -0
- package/public/assets/scroll-text-BKXS1ahr.js +2 -0
- package/public/assets/{secrets-C7GIUATz.js → secrets-BkVwxI5O.js} +2 -2
- package/public/assets/{service-access-settings-C3aujqTG.js → service-access-settings-Crq-6a-B.js} +2 -2
- package/public/assets/{settings-C6sZ9eBa.js → settings-CYcavMFu.js} +2 -2
- package/public/assets/shipping-H6gzEeZB.js +2 -0
- package/public/assets/{stats-V9Z-GxUd.js → stats-BJVeWkpV.js} +2 -2
- package/public/assets/{status-dot-CVv0iGHL.js → status-dot-BcHyw1Vw.js} +2 -2
- package/public/assets/store-DKPDIZBe.js +9 -0
- package/public/assets/{tasks-CXU75HRF.js → tasks-qJjlQPpx.js} +2 -2
- package/public/assets/{teams-BPf976zb.js → teams-Cd5Sk1uX.js} +2 -2
- package/public/assets/{terminal-viewer-DE9BOe-8.js → terminal-viewer-CpY5_m7W.js} +3 -3
- package/public/assets/{terminal-viewer-impl-D04pjmGh.js → terminal-viewer-impl-DI_2llFR.js} +2 -2
- package/public/assets/token-estimate-Co-Jdphh.js +2 -0
- package/public/assets/{use-agent-terminal-B1yR456R.js → use-agent-terminal-0yJA_buM.js} +2 -2
- package/public/assets/{use-decisions-D-S4tpDf.js → use-decisions-uJXHf34W.js} +2 -2
- package/public/assets/use-project-list-CpWl6eHQ.js +2 -0
- package/public/assets/{use-selectors-CnrAk2YP.js → use-selectors-BdxBW8mL.js} +2 -2
- package/public/assets/{user-avatar-nBFIcR4M.js → user-avatar-3IndfpOc.js} +2 -2
- package/public/assets/versioned-prompt-editor-CIVg7XB1.js +8 -0
- package/public/assets/{work-queue-TCjJxeT-.js → work-queue-B9rnLwHZ.js} +2 -2
- package/public/assets/{workflow-marker-Cf3Hf2fN.js → workflow-marker-X8wxyhzC.js} +2 -2
- package/public/assets/{workflows-CXQX20Qj.js → workflows-o5YyMFW7.js} +2 -2
- package/public/assets/{workspaces-qSYzKYMA.js → workspaces-CzEGoAng.js} +2 -2
- package/public/cosmos.html +4 -4
- package/public/index.html +31 -29
- package/runner/plugins/claude/.claude-plugin/plugin.json +1 -1
- package/runner/plugins/claude/hooks/gate-run-guard.provisioned.mjs +31 -1
- package/runner/src/adapters/claude-effort.ts +2 -4
- package/runner/src/adapters/claude-headless.ts +1 -1
- package/runner/src/adapters/claude-launch-exit.ts +26 -0
- package/runner/src/adapters/claude-session-probe.ts +1 -1
- package/runner/src/adapters/claude-tmux.ts +38 -10
- package/runner/src/adapters/claude.ts +28 -75
- package/runner/src/adapters/codex-launch-config.ts +4 -5
- package/runner/src/adapters/codex.ts +1 -1
- package/runner/src/adapters/opencode-provider.ts +7 -22
- package/runner/src/adapters/opencode.ts +4 -4
- package/runner/src/adapters/provider-quota-harvest.ts +20 -71
- package/runner/src/agent-runner/credentials.ts +42 -12
- package/runner/src/agent-runner/inbox.ts +27 -0
- package/runner/src/agent-runner/lifecycle-milestones.ts +2 -4
- package/runner/src/agent-runner/liveness-exchange.ts +104 -0
- package/runner/src/bin/claude.ts +4 -0
- package/runner/src/bin/codex.ts +4 -0
- package/runner/src/bin/opencode.ts +4 -0
- package/runner/src/claude-system-prompt.ts +49 -0
- package/runner/src/index.ts +5 -2
- package/runner/src/launch-assembly.ts +14 -10
- package/runner/src/profile-home.ts +1 -1
- package/runner/src/project-instructions.ts +2 -2
- package/runner/src/provider-command.ts +18 -0
- package/runner/src/provider-setup.ts +35 -0
- package/runner/src/providers.ts +2 -1
- package/runner/src/runner-core.ts +32 -38
- package/runner/src/runner-helpers.ts +0 -8
- package/runner/src/session-scratch.ts +6 -2
- package/runner/src/spawn-input.ts +2 -1
- package/runner/src/test-run-dedup.ts +59 -56
- package/runner/test-support/provisioning-context.ts +4 -2
- package/runner/test-support/runner-harness.ts +2 -1
- package/scripts/cd-config.ts +8 -0
- package/scripts/gate-run-lease.ts +10 -7
- package/scripts/gate.sh +5 -1
- package/scripts/steward-policy-cleanup.ts +2 -2
- package/src/agent-authz.ts +2 -2
- package/src/agent-drive-arbiter.ts +3 -8
- package/src/agent-exit-cleanup-async.ts +2 -2
- package/src/agent-exit-cleanup.ts +23 -19
- package/src/agent-lifecycle-events.ts +112 -85
- package/src/agent-ref.ts +3 -2
- package/src/agent-status-events.ts +43 -14
- package/src/auth/password.ts +4 -3
- package/src/auth/session-refresh.ts +1 -1
- package/src/auth/session.test-fixture.ts +2 -2
- package/src/auth/session.ts +7 -7
- package/src/automations/crud.ts +8 -81
- package/src/automations/dispatch.ts +33 -58
- package/src/automations/index.ts +1 -1
- package/src/automations/persistence.ts +65 -0
- package/src/automations/precheck.ts +18 -16
- package/src/automations/read-async.ts +11 -0
- package/src/automations/reconcile.ts +30 -39
- package/src/automations/storage.ts +33 -10
- package/src/automations/write-async.ts +33 -0
- package/src/branch-land-notice.ts +93 -0
- package/src/branch-landed.ts +31 -98
- package/src/bus.ts +40 -39
- package/src/cd-deploy-notify.ts +32 -4
- package/src/cd-host-lag-notify.ts +7 -6
- package/src/ci/incidents.ts +2 -2
- package/src/ci/monitor.ts +5 -8
- package/src/ci/notifications.ts +4 -4
- package/src/ci/root-missing.ts +4 -9
- package/src/ci/transition-notify.ts +12 -44
- package/src/claude-app/oauth-http.ts +3 -3
- package/src/cli/cd-pauses.ts +19 -0
- package/src/cli/orchestrator.ts +1 -1
- package/src/cli/state.ts +2 -19
- package/src/cli/task-edit.ts +22 -0
- package/src/cli/task.ts +3 -1
- package/src/cli/workflow.ts +19 -4
- package/src/commands-db.ts +7 -7
- package/src/commands-write.ts +8 -0
- package/src/compaction-watch.ts +10 -8
- package/src/config-store-write.ts +13 -1
- package/src/config-store.ts +25 -14
- package/src/config.ts +4 -11
- package/src/connectors.ts +10 -8
- package/src/context-advisory.ts +22 -21
- package/src/db/activity-async.ts +6 -1
- package/src/db/activity-write-ops.ts +12 -1
- package/src/db/activity.ts +1 -14
- package/src/db/agent-action-write.ts +36 -0
- package/src/db/agent-control-async.ts +9 -0
- package/src/db/agent-control-write.ts +49 -0
- package/src/db/agent-effort-observe.ts +22 -0
- package/src/db/agent-meta.ts +14 -3
- package/src/db/agent-search.ts +1 -15
- package/src/db/agents-async.ts +59 -9
- package/src/db/agents-write-ops.ts +12 -3
- package/src/db/agents.ts +95 -65
- package/src/db/auth-identities.ts +2 -2
- package/src/db/automation-read-ops.ts +11 -0
- package/src/db/automation-write-ops.ts +46 -0
- package/src/db/blackboard.ts +2 -2
- package/src/db/browser-session-write.ts +32 -0
- package/src/db/bus-outbox-write-ops.ts +3 -1
- package/src/db/checkout-refresh-schema.ts +47 -0
- package/src/db/checkout-refresh.ts +5 -5
- package/src/db/ci-incidents-async.ts +5 -5
- package/src/db/ci-incidents-write-ops.ts +2 -2
- package/src/db/command-agent-profile-backfill.ts +39 -0
- package/src/db/command-agent-profiles.ts +5 -1
- package/src/db/command-retention.ts +126 -0
- package/src/db/command-row.ts +10 -2
- package/src/db/commands-list-query.ts +2 -0
- package/src/db/commands-planner-stats.test-fixture.ts +8 -0
- package/src/db/commands-read-ops.ts +16 -0
- package/src/db/commands-spawn-read.ts +1 -1
- package/src/db/config-store-write-ops.ts +7 -2
- package/src/db/connection.ts +1 -182
- package/src/db/context-carry-write.ts +74 -0
- package/src/db/continuation-archives-async.ts +5 -0
- package/src/db/continuation-archives-write-ops.ts +7 -0
- package/src/db/continuations.ts +6 -6
- package/src/db/db-error-registry.ts +12 -0
- package/src/db/db-writer-worker.ts +8 -1
- package/src/db/deploy-events-async.ts +1 -0
- package/src/db/deploy-events-read-ops.ts +2 -1
- package/src/db/deploy-events.ts +35 -4
- package/src/db/gateway.ts +26 -133
- package/src/db/history-retention-ops.ts +13 -0
- package/src/db/hosts-registration.ts +10 -2
- package/src/db/hosts.ts +9 -6
- package/src/db/inbox-async.ts +2 -2
- package/src/db/inbox-read-ops.ts +1 -1
- package/src/db/inbox.ts +9 -17
- package/src/db/index.ts +2 -0
- package/src/db/integrations-async.ts +8 -0
- package/src/db/integrations-ops.ts +15 -0
- package/src/db/integrations.ts +15 -21
- package/src/db/issue-associations.ts +2 -2
- package/src/db/issue-lifecycle.ts +3 -4
- package/src/db/issue-refs-async.ts +23 -0
- package/src/db/issue-refs-read-ops.ts +6 -0
- package/src/db/issue-refs-write-ops.ts +29 -0
- package/src/db/issue-refs.ts +15 -16
- package/src/db/kernel-event-log-schema.ts +2 -0
- package/src/db/land-boundaries.ts +51 -5
- package/src/db/land-gate-attestations.ts +2 -2
- package/src/db/landing-receipts.ts +2 -2
- package/src/db/lifecycle-context-write.ts +5 -0
- package/src/db/lifecycle-tail-async.ts +76 -0
- package/src/db/lifecycle-tail-write-ops.ts +62 -0
- package/src/db/lifecycle-write-window.ts +2 -1
- package/src/db/lineage-pair-dedupe-sql.ts +3 -3
- package/src/db/long-running-work.ts +2 -2
- package/src/db/main-connection-mode.ts +11 -0
- package/src/db/main-connection-writes.ts +41 -2
- package/src/db/maintenance-job-reconcile.ts +61 -0
- package/src/db/maintenance-job-runs-async.ts +14 -0
- package/src/db/maintenance-job-write-ops.ts +9 -0
- package/src/db/maintenance-pauses.ts +2 -2
- package/src/db/mappers.ts +2 -14
- package/src/db/merge-lease.ts +1 -15
- package/src/db/message-send.ts +4 -0
- package/src/db/messages.ts +31 -25
- package/src/db/migrations.ts +25 -16
- package/src/db/notification-write-ops.ts +19 -0
- package/src/db/operator-answer-write.ts +19 -0
- package/src/db/orchestrators.ts +14 -76
- package/src/db/pairs-async.ts +22 -1
- package/src/db/pairs-write-ops.ts +8 -3
- package/src/db/pairs.ts +42 -61
- package/src/db/plan-dispatch-schema.ts +5 -1
- package/src/db/plan-ready-notices.ts +43 -0
- package/src/db/plan-tools-include-migration.ts +36 -0
- package/src/db/plans-write-ops.ts +2 -0
- package/src/db/presence-buffer.ts +5 -0
- package/src/db/presence-loop.ts +18 -23
- package/src/db/presence-write.ts +0 -6
- package/src/db/project-entries-async.ts +14 -0
- package/src/db/project-entries-read-ops.ts +5 -1
- package/src/db/project-entries-write-ops.ts +8 -0
- package/src/db/project-entries.ts +15 -12
- package/src/db/project-journal.ts +2 -2
- package/src/db/project-profile-instructions.ts +50 -0
- package/src/db/project-trust-approvals.ts +2 -2
- package/src/db/prompt-templates.ts +4 -4
- package/src/db/prompt-versions.ts +9 -2
- package/src/db/provider-config-history.ts +8 -3
- package/src/db/provider-model-seed.ts +34 -0
- package/src/db/read-op-marshaling-fixtures.ts +23 -0
- package/src/db/read-ops.ts +8 -0
- package/src/db/retention.ts +13 -2
- package/src/db/review-publish-write.ts +8 -0
- package/src/db/routing-policy.ts +2 -3
- package/src/db/runtime-admin-async.ts +19 -0
- package/src/db/runtime-admin-write-ops.ts +36 -0
- package/src/db/runtime-tail-async.ts +288 -0
- package/src/db/runtime-tail-write-ops.ts +97 -0
- package/src/db/schema.ts +13 -4
- package/src/db/spawn-budget.ts +5 -0
- package/src/db/spawn-delegation-state.ts +11 -4
- package/src/db/spawn-delegation.ts +1 -11
- package/src/db/sql-audit-indexes.ts +3 -0
- package/src/db/stats-async.ts +9 -6
- package/src/db/task-entity.ts +28 -6
- package/src/db/task-list.ts +3 -1
- package/src/db/tasks.ts +1 -17
- package/src/db/team-claim-policy.ts +60 -0
- package/src/db/teams-async.ts +4 -0
- package/src/db/teams-write-ops.ts +4 -0
- package/src/db/terminal-events.ts +15 -0
- package/src/db/timer-cutover-bodies.ts +292 -0
- package/src/db/timer-cutover-core.ts +37 -278
- package/src/db/timer-cutover-state.ts +40 -0
- package/src/db/timer-cutover-write-ops.ts +1 -40
- package/src/db/timer-ingress.ts +7 -1
- package/src/db/token-db-write-ops.ts +19 -0
- package/src/db/token-standing-async.ts +12 -0
- package/src/db/token-standing.ts +21 -20
- package/src/db/token-usage-retention.ts +33 -0
- package/src/db/token-usage-write-ops.ts +1 -1
- package/src/db/token-usage.ts +4 -1
- package/src/db/user-invites-async.ts +13 -0
- package/src/db/user-invites.ts +3 -3
- package/src/db/users.ts +14 -6
- package/src/db/workflow-contact.ts +1 -1
- package/src/db/workflow-task-read-ops.ts +30 -0
- package/src/db/workspaces.ts +8 -5
- package/src/db/write-ops.ts +37 -12
- package/src/db/writer-fault-seam.ts +2 -9
- package/src/db/writer-fault-test-ops.ts +18 -0
- package/src/db/writer-gateway.ts +58 -56
- package/src/dev.ts +8 -3
- package/src/dispatch-availability.ts +10 -6
- package/src/ephemeral/{landing-ingress-proof-worker.ts → landing-ingress-proof.test-fixture.ts} +4 -2
- package/src/event-loop-lag.ts +4 -2
- package/src/event-loop-yield.ts +2 -2
- package/src/events.ts +10 -8
- package/src/host/disk-alert.ts +121 -0
- package/src/host-provider-store.ts +5 -4
- package/src/hub-metrics-report.ts +5 -1
- package/src/hub-metrics.ts +38 -18
- package/src/injection-sweep-pacing.ts +6 -8
- package/src/land-gate-notifications.ts +11 -10
- package/src/land-gate-queue-progress.ts +3 -3
- package/src/land-settle-dispatch.ts +52 -92
- package/src/lifecycle-context-pressure.ts +11 -10
- package/src/lifecycle-manager.ts +107 -100
- package/src/maintenance/breaker.ts +18 -16
- package/src/maintenance/cd-watcher.ts +3 -3
- package/src/maintenance/checkout-refresh.ts +18 -1
- package/src/maintenance/critical-job-watchdog.ts +19 -20
- package/src/maintenance/events.ts +3 -3
- package/src/maintenance/history-retention-job.ts +30 -0
- package/src/maintenance/index.ts +1 -0
- package/src/maintenance/jobs.ts +32 -69
- package/src/maintenance/long-running-work.ts +3 -1
- package/src/maintenance/offline-agent-prune-job.ts +28 -0
- package/src/maintenance/orphaned-sessions.ts +5 -4
- package/src/maintenance/pauses.ts +4 -10
- package/src/maintenance/plan-ready-notice-job.ts +71 -0
- package/src/maintenance/scheduler.ts +98 -137
- package/src/maintenance/stalled-delivery-pager.ts +10 -9
- package/src/maintenance/teams.ts +19 -30
- package/src/maintenance/workspaces.ts +18 -28
- package/src/managed-policy-escalation.ts +7 -7
- package/src/managed-policy.ts +32 -28
- package/src/managed-provider-gate.ts +5 -4
- package/src/managed-spawn-reservation.ts +5 -4
- package/src/mcp/index.ts +12 -9
- package/src/mcp/output-descriptions.ts +8 -8
- package/src/mcp/presentation.ts +6 -5
- package/src/mcp/project-profile-instructions.ts +32 -0
- package/src/mcp/runtime-output.ts +6 -1
- package/src/mcp/self-care-visibility.ts +2 -2
- package/src/mcp/spawn-targets-matrix.ts +10 -1
- package/src/mcp/tool-groups.ts +4 -3
- package/src/mcp/tool-roles.ts +81 -0
- package/src/mcp/tools-spawn.ts +4 -3
- package/src/mcp/tools-workspace.ts +1 -1
- package/src/mcp-agent-action.ts +1 -2
- package/src/mcp-blackboard-tools.ts +6 -5
- package/src/mcp-decision-tools.ts +7 -7
- package/src/mcp-egress-tools.ts +10 -9
- package/src/mcp-issue-activity-tools.ts +2 -2
- package/src/mcp-issue-association-tools.ts +4 -4
- package/src/mcp-issue-ref-tools.ts +13 -12
- package/src/mcp-maintenance-tools.ts +2 -2
- package/src/mcp-merge-tools.ts +5 -5
- package/src/mcp-notification-subscription-tools.ts +14 -15
- package/src/mcp-output-levels.test-fixture.ts +1 -1
- package/src/mcp-profile-trust-tools.ts +5 -5
- package/src/mcp-project-journal-tools.ts +4 -12
- package/src/mcp-project-tools.ts +17 -18
- package/src/mcp-provider-catalog.ts +2 -2
- package/src/mcp-routing-policy-tools.ts +3 -2
- package/src/mcp-task-tools.ts +11 -5
- package/src/mcp-team-template-tools.ts +3 -3
- package/src/mcp-team-tools.ts +6 -6
- package/src/mcp-workflow-tools.ts +13 -4
- package/src/memory-area-injection.ts +13 -12
- package/src/memory-boundary-capture.ts +6 -6
- package/src/memory-injection.ts +45 -43
- package/src/merge-pause-maintenance.ts +5 -4
- package/src/notification-router.ts +44 -17
- package/src/notification-types.ts +2 -1
- package/src/notify.ts +5 -5
- package/src/observed-reset-refresh.ts +4 -4
- package/src/operator-alarm.ts +23 -11
- package/src/project-ingest.ts +6 -6
- package/src/project-instructions.ts +12 -1
- package/src/project-profile-instruction-text.ts +6 -0
- package/src/project-profile-instructions.ts +20 -0
- package/src/project-trust.ts +12 -11
- package/src/prompt-resolver.ts +3 -3
- package/src/provider-catalog-store.ts +3 -49
- package/src/provider-config-store.ts +12 -11
- package/src/provider-model-seed.ts +1 -18
- package/src/provider-quota-async.ts +5 -7
- package/src/provider-quota-config-store.ts +5 -4
- package/src/provider-secrets.test-fixture.ts +3 -3
- package/src/provider-timeline-event.ts +4 -7
- package/src/quota-band-delivery.ts +2 -2
- package/src/recipe-runner.ts +6 -5
- package/src/repo-config-source.ts +10 -4
- package/src/retention-config-store.ts +4 -3
- package/src/reviewer-pipeline.ts +11 -10
- package/src/routes/_route.ts +4 -4
- package/src/routes/_shared.ts +13 -12
- package/src/routes/agent-effort.ts +5 -5
- package/src/routes/agent-heartbeat-quota.ts +23 -0
- package/src/routes/agent-keep.ts +1 -1
- package/src/routes/agent-profiles.ts +6 -6
- package/src/routes/agent-reporting.ts +1 -1
- package/src/routes/agent-self-effort.ts +5 -5
- package/src/routes/agent-sessions.ts +24 -24
- package/src/routes/agents-spawn.ts +2 -2
- package/src/routes/agents.ts +19 -121
- package/src/routes/auth.ts +14 -15
- package/src/routes/authority-audit.ts +2 -2
- package/src/routes/automations.ts +6 -5
- package/src/routes/channel-binding-delete.ts +1 -1
- package/src/routes/channel-output.ts +3 -3
- package/src/routes/claude-api-budget.ts +5 -5
- package/src/routes/commands-listing.ts +5 -1
- package/src/routes/commands.ts +31 -29
- package/src/routes/context-resets.ts +2 -2
- package/src/routes/continuation-archives.ts +2 -2
- package/src/routes/coordinator-teams.ts +1 -1
- package/src/routes/decisions.ts +2 -2
- package/src/routes/host-secret-files.ts +1 -1
- package/src/routes/hosts.ts +11 -11
- package/src/routes/inbox.ts +3 -2
- package/src/routes/index.ts +12 -2
- package/src/routes/integrations.ts +32 -56
- package/src/routes/issue-activity.ts +2 -2
- package/src/routes/issue-associations.ts +4 -4
- package/src/routes/issue-refs.ts +9 -9
- package/src/routes/kernel-timers-operator.ts +1 -1
- package/src/routes/memory.ts +1 -1
- package/src/routes/merges.ts +11 -11
- package/src/routes/messages.ts +23 -17
- package/src/routes/orchestrator-bootstrap.ts +2 -2
- package/src/routes/orchestrator-host-registration.ts +4 -2
- package/src/routes/orchestrator-host-utilization.ts +5 -3
- package/src/routes/orchestrator-proxy.ts +4 -4
- package/src/routes/orchestrator.ts +28 -19
- package/src/routes/pairs.ts +8 -8
- package/src/routes/project-profile-instructions.ts +27 -0
- package/src/routes/project-trust.ts +3 -3
- package/src/routes/projects.ts +16 -16
- package/src/routes/prompt-templates.ts +12 -12
- package/src/routes/provider-config.ts +6 -6
- package/src/routes/provider-quota-config.ts +2 -2
- package/src/routes/provider-quotas.ts +10 -10
- package/src/routes/run-command.ts +1 -1
- package/src/routes/secrets-backup.ts +2 -2
- package/src/routes/secrets-import.ts +1 -1
- package/src/routes/secrets-vault.ts +7 -7
- package/src/routes/settings.ts +6 -6
- package/src/routes/shipping.ts +9 -1
- package/src/routes/spawn-policy.ts +8 -7
- package/src/routes/sse.ts +2 -2
- package/src/routes/stats.ts +6 -6
- package/src/routes/task-http.ts +15 -1
- package/src/routes/task-issues.ts +11 -26
- package/src/routes/tasks.ts +22 -53
- package/src/routes/team-templates.ts +12 -12
- package/src/routes/teams-config.ts +2 -2
- package/src/routes/teams.ts +10 -10
- package/src/routes/tokens.ts +30 -22
- package/src/routes/users.ts +24 -24
- package/src/routes/viewer-read.ts +3 -3
- package/src/routes/web-tool-calls.ts +4 -4
- package/src/routes/workflows.ts +22 -7
- package/src/routes/workspaces.ts +17 -16
- package/src/routing-policy-normalize.ts +1 -2
- package/src/routing-policy-push.ts +6 -6
- package/src/routing-step-defaults.ts +0 -2
- package/src/runner-token-mint-limit.ts +63 -0
- package/src/runtime-grant.ts +21 -13
- package/src/runtime-tokens.ts +59 -35
- package/src/secrets-broker/config.ts +1 -1
- package/src/secrets-broker/service.ts +2 -2
- package/src/security.ts +16 -21
- package/src/self-resume-carry.ts +21 -110
- package/src/self-resume-supersede.ts +4 -3
- package/src/self-resume.ts +54 -66
- package/src/server-background.ts +2 -2
- package/src/server.ts +26 -24
- package/src/services/agent-action.ts +12 -31
- package/src/services/agent-effort.ts +7 -32
- package/src/services/agent-hang-watchdog-job.ts +2 -2
- package/src/services/agent-heartbeat.ts +166 -0
- package/src/services/agent-reporting.ts +1 -1
- package/src/services/browser-inventory.ts +3 -3
- package/src/services/browser-session-state.ts +3 -2
- package/src/services/browser-session.ts +21 -27
- package/src/services/bus-command-update.ts +9 -9
- package/src/services/checkout-refresh-state.ts +1 -0
- package/src/services/checkout-refresh.test-fixture.ts +3 -2
- package/src/services/command-host.ts +7 -2
- package/src/services/coordinator-digest.ts +3 -2
- package/src/services/dispatch-command.ts +12 -13
- package/src/services/effective-launch-driver.ts +14 -9
- package/src/services/host-changed-paths.test-fixture.ts +5 -6
- package/src/services/host-project-readiness.ts +2 -2
- package/src/services/host-providers.ts +1 -1
- package/src/services/host-utilization.ts +27 -4
- package/src/services/idle-agent-digest.ts +17 -12
- package/src/services/idle-epics.ts +9 -10
- package/src/services/interrupt-agent.ts +12 -9
- package/src/services/issue-activity.ts +3 -3
- package/src/services/issue-associations.ts +15 -18
- package/src/services/issue-lifecycle-comments.ts +3 -2
- package/src/services/issue-lifecycle.ts +69 -72
- package/src/services/issue-refs.ts +10 -15
- package/src/services/kernel-timers-cutover-chaos-worker.ts +11 -8
- package/src/services/kernel-timers-ingress-chaos-worker.ts +6 -1
- package/src/services/kernel-timers-ingress.ts +4 -4
- package/src/services/kernel-timers-message-authority-chaos-worker.ts +3 -10
- package/src/services/kernel-timers-operator-chaos-worker.ts +3 -2
- package/src/services/kernel-timers-outbox.ts +1 -1
- package/src/services/kernel-timers-stage10-operator.ts +1 -1
- package/src/services/kernel-timers.ts +4 -3
- package/src/services/land-gate-placement.ts +11 -2
- package/src/services/land-issue-relations.ts +5 -4
- package/src/services/land-restart-retry.ts +7 -6
- package/src/services/landed-ancestry.ts +25 -8
- package/src/services/legacy-landing-host.ts +4 -1
- package/src/services/legacy-landing-recovery.ts +8 -6
- package/src/services/managed-running.ts +17 -17
- package/src/services/memory-areas.ts +17 -53
- package/src/services/merge-pause.ts +9 -15
- package/src/services/operator-decisions.ts +37 -41
- package/src/services/orchestrator-registration-recovery.ts +6 -2
- package/src/services/orchestrator-upgrade.ts +14 -12
- package/src/services/permission-decision.ts +4 -3
- package/src/services/plan-ci-notice.ts +57 -0
- package/src/services/plan-ci-recovery.ts +2 -55
- package/src/services/plan-conformance.ts +4 -4
- package/src/services/plan-dispatch-policy.ts +10 -3
- package/src/services/plan-dispatch.ts +35 -14
- package/src/services/plan-graph.ts +39 -261
- package/src/services/plan-import.ts +1 -1
- package/src/services/plan-live-bindings.ts +8 -37
- package/src/services/plan-task-create.ts +1 -1
- package/src/services/plan-terminal-refs.ts +2 -12
- package/src/services/plan-wake-digest.ts +9 -3
- package/src/services/profile-trust.ts +6 -5
- package/src/services/project-config-read.ts +70 -0
- package/src/services/project-profile-instructions.ts +54 -0
- package/src/services/project.ts +11 -10
- package/src/services/prompt-templates.ts +6 -5
- package/src/services/provider-hold-nudge.ts +9 -9
- package/src/services/provider-hold-record.ts +13 -12
- package/src/services/provider-state-audit.ts +19 -18
- package/src/services/provisioning-harness/budget-baseline.json +4 -4
- package/src/services/provisioning-harness/driver.ts +1 -1
- package/src/services/provisioning-harness/fixture-matrix.ts +3 -3
- package/src/services/provisioning-harness/lifecycle.ts +24 -22
- package/src/services/provisioning-harness/prepare.ts +16 -17
- package/src/services/rate-limit-resume.ts +10 -9
- package/src/services/red-main-auto-revert.ts +7 -5
- package/src/services/red-main-controller-deps.ts +20 -3
- package/src/services/red-main-incident.ts +3 -1
- package/src/services/red-main-quarantine.ts +2 -3
- package/src/services/register-agent.ts +22 -22
- package/src/services/restart-project-role.ts +1 -1
- package/src/services/restart-spawn.ts +74 -61
- package/src/services/review-publish.ts +7 -24
- package/src/services/review-ref-reconcile.ts +29 -38
- package/src/services/runtime-dependency-alert.ts +27 -0
- package/src/services/scheduler-command.ts +11 -9
- package/src/services/scheduler.ts +5 -5
- package/src/services/self-care-state.ts +2 -1
- package/src/services/self-effort-grant.ts +5 -25
- package/src/services/self-effort.ts +5 -5
- package/src/services/send-message.ts +21 -34
- package/src/services/shutdown-agent.ts +17 -14
- package/src/services/spawn-agent.ts +25 -43
- package/src/services/spawn-chain-inspector.ts +7 -14
- package/src/services/spawn-cwd-placement.ts +21 -5
- package/src/services/spawn-issue-activity.ts +8 -6
- package/src/services/spawn-launch.ts +17 -1
- package/src/services/spawn-loss-escalation.ts +1 -1
- package/src/services/spawn-policy.ts +68 -0
- package/src/services/spawn-registration-watchdog.ts +2 -2
- package/src/services/spawn-repo-probe.ts +7 -5
- package/src/services/spawn-tree-cleanup.ts +8 -9
- package/src/services/steward-reaper.ts +4 -4
- package/src/services/task-context-hydration.ts +25 -1
- package/src/services/task-delivery.ts +20 -34
- package/src/services/task-dispatch.ts +3 -0
- package/src/services/task-entity.ts +40 -203
- package/src/services/task-issue-link.ts +13 -20
- package/src/services/task-issue-weave.ts +12 -11
- package/src/services/task-lifecycle.ts +27 -31
- package/src/services/task-repo-cwd.ts +37 -0
- package/src/services/task-review-hold.ts +4 -17
- package/src/services/task-semantic-events.ts +13 -11
- package/src/services/task-state-reconcile.ts +8 -17
- package/src/services/task-validation.ts +2 -2
- package/src/services/team-templates.ts +12 -11
- package/src/services/team.ts +31 -98
- package/src/services/terminal-provider-exit.ts +6 -5
- package/src/services/timer-message-fire-chaos-worker.ts +7 -3
- package/src/services/timer-message-fire-outbox.ts +1 -1
- package/src/services/transient-agent-reaper.ts +25 -20
- package/src/services/turn-reconcile-audit.ts +9 -9
- package/src/services/user-onboarding.ts +8 -6
- package/src/services/user-profile.ts +6 -9
- package/src/services/work-finality.ts +16 -4
- package/src/services/workflow-auto-start.ts +26 -13
- package/src/services/workflow-caller.ts +61 -4
- package/src/services/workflow-child-proof-worker.ts +1 -1
- package/src/services/workflow-ci-main.ts +1 -1
- package/src/services/workflow-control-proof-worker.ts +1 -1
- package/src/services/workflow-coordinator.ts +8 -2
- package/src/services/workflow-decisions.ts +5 -5
- package/src/services/workflow-deferred-cleanup.ts +5 -3
- package/src/services/workflow-effect-driver.ts +42 -17
- package/src/services/workflow-effects.ts +58 -37
- package/src/services/workflow-land-notice.ts +10 -0
- package/src/services/workflow-pause-text.ts +43 -0
- package/src/services/workflow-pins.ts +7 -4
- package/src/services/workflow-reconcile.ts +14 -11
- package/src/services/workflow-resume-pins.ts +3 -3
- package/src/services/workflow-routing-defaults.ts +18 -0
- package/src/services/workflow-run-view.ts +6 -3
- package/src/services/workflow-run.test-fixture.ts +1 -1
- package/src/services/workflow-runs.ts +61 -33
- package/src/services/workflow-supervisor-state.ts +26 -1
- package/src/services/workflow-supervisor.ts +11 -6
- package/src/services/workspace-recovery.ts +4 -3
- package/src/settings/registry.ts +1 -2
- package/src/spawn-admission.ts +10 -2
- package/src/spawn-command.ts +4 -4
- package/src/spawn-models.ts +10 -12
- package/src/spawn-placement.ts +28 -10
- package/src/spawn-targets.ts +9 -9
- package/src/sse-agent-status.ts +15 -6
- package/src/sse.ts +49 -24
- package/src/startup-context-injection.ts +62 -57
- package/src/state-adoption/cd-cutover.ts +53 -7
- package/src/state-adoption/fleet-cutover.ts +35 -0
- package/src/state-adoption/fleet-plan.ts +36 -0
- package/src/state-adoption/index.ts +2 -2
- package/src/state-adoption/linux-plan.ts +2 -2
- package/src/state-adoption/linux.ts +2 -2
- package/src/state-adoption/macos-plan.ts +2 -2
- package/src/state-adoption/macos.ts +1 -1
- package/src/steward-handoff.ts +4 -3
- package/src/steward-policy-cleanup.ts +9 -8
- package/src/steward.ts +9 -8
- package/src/task-dispatch-live.ts +6 -3
- package/src/task-dispatcher.ts +3 -3
- package/src/teams-config-store.ts +4 -3
- package/src/token-db-write.ts +10 -0
- package/src/token-db.ts +2 -2
- package/src/token-usage-async.ts +2 -4
- package/src/user-awaiting-reply.ts +5 -5
- package/src/workspace-actions.ts +24 -29
- package/src/workspace-auto-merge.ts +14 -12
- package/src/workspace-changed-paths-client.ts +16 -5
- package/src/workspace-cleanup-stale.ts +30 -7
- package/src/workspace-command-settle.ts +26 -17
- package/src/workspace-config.ts +1 -1
- package/src/workspace-conflict-resolver.ts +9 -7
- package/src/workspace-dead-owner-recovery.ts +5 -4
- package/src/workspace-escalation.ts +12 -11
- package/src/workspace-human-escalation.ts +3 -3
- package/src/workspace-land-gate-watchdog.ts +3 -3
- package/src/workspace-land-refusal.ts +20 -0
- package/src/workspace-land-stopped.ts +1 -0
- package/src/workspace-merge.ts +10 -26
- package/src/workspace-nothing-to-land-notice.ts +2 -2
- package/src/workspace-orphans.ts +18 -37
- package/src/workspace-pr-completion.ts +10 -8
- package/src/workspace-rekey.ts +3 -3
- package/src/workspace-steward-failure.ts +2 -2
- package/src/workspace-steward-wake.ts +4 -4
- package/node_modules/@humwick/kernel/LICENSE +0 -167
- package/node_modules/@humwick/kernel/async-entity-persistence.ts +0 -344
- package/node_modules/@humwick/kernel/async-event-log.ts +0 -107
- package/node_modules/@humwick/kernel/automations.pilot.ts +0 -147
- package/node_modules/@humwick/kernel/config.ts +0 -111
- package/node_modules/@humwick/kernel/contract.ts +0 -572
- package/node_modules/@humwick/kernel/control-authz.ts +0 -281
- package/node_modules/@humwick/kernel/control.ts +0 -645
- package/node_modules/@humwick/kernel/effects.ts +0 -493
- package/node_modules/@humwick/kernel/event-log.ts +0 -319
- package/node_modules/@humwick/kernel/http-transport.ts +0 -384
- package/node_modules/@humwick/kernel/identity-grammar.ts +0 -20
- package/node_modules/@humwick/kernel/identity.ts +0 -248
- package/node_modules/@humwick/kernel/index.ts +0 -28
- package/node_modules/@humwick/kernel/kernel-persistence.ts +0 -181
- package/node_modules/@humwick/kernel/landing-incident.ts +0 -306
- package/node_modules/@humwick/kernel/landing.ts +0 -953
- package/node_modules/@humwick/kernel/manifest-validation.ts +0 -460
- package/node_modules/@humwick/kernel/mcp-transport.ts +0 -109
- package/node_modules/@humwick/kernel/message-authority-chaos-worker.ts +0 -200
- package/node_modules/@humwick/kernel/message-authority.ts +0 -281
- package/node_modules/@humwick/kernel/module-host.ts +0 -722
- package/node_modules/@humwick/kernel/openapi-init.ts +0 -14
- package/node_modules/@humwick/kernel/package.json +0 -39
- package/node_modules/@humwick/kernel/persistence-schema.ts +0 -248
- package/node_modules/@humwick/kernel/persistence.ts +0 -510
- package/node_modules/@humwick/kernel/registry.ts +0 -60
- package/node_modules/@humwick/kernel/sqlite-kernel-persistence.ts +0 -499
- package/node_modules/@humwick/kernel/sqlite-module-host.ts +0 -87
- package/node_modules/@humwick/kernel/timers-chaos-worker.ts +0 -186
- package/node_modules/@humwick/kernel/timers.pilot.ts +0 -1411
- package/node_modules/@humwick/kernel/workflow-activation.ts +0 -25
- package/node_modules/@humwick/kernel/workflow-backstop.ts +0 -40
- package/node_modules/@humwick/kernel/workflow-cancel-tree.ts +0 -20
- package/node_modules/@humwick/kernel/workflow-chaos-worker.ts +0 -213
- package/node_modules/@humwick/kernel/workflow-composition.ts +0 -231
- package/node_modules/@humwick/kernel/workflow-container.ts +0 -72
- package/node_modules/@humwick/kernel/workflow-control.test-fixture.ts +0 -42
- package/node_modules/@humwick/kernel/workflow-control.ts +0 -178
- package/node_modules/@humwick/kernel/workflow-definition.ts +0 -507
- package/node_modules/@humwick/kernel/workflow-dispatch.ts +0 -60
- package/node_modules/@humwick/kernel/workflow-foreach.ts +0 -167
- package/node_modules/@humwick/kernel/workflow-journal-codec.ts +0 -339
- package/node_modules/@humwick/kernel/workflow-journal.ts +0 -922
- package/node_modules/@humwick/kernel/workflow-lane.ts +0 -48
- package/node_modules/@humwick/kernel/workflow-lease-owner.ts +0 -60
- package/node_modules/@humwick/kernel/workflow-recovery.test-fixture.ts +0 -19
- package/node_modules/@humwick/kernel/workflow-runtime.ts +0 -938
- package/node_modules/@humwick/kernel/workflow-script.ts +0 -11
- package/node_modules/@humwick/kernel/workflow-state.ts +0 -299
- package/node_modules/@humwick/kernel/workflow-step-commit.ts +0 -195
- package/node_modules/@humwick/kernel/workflow-transitions.ts +0 -317
- package/node_modules/@humwick/kernel/workflow-values.ts +0 -153
- package/node_modules/@humwick/kernel/workflow.pilot.ts +0 -376
- package/node_modules/@humwick/offload/LICENSE +0 -167
- package/node_modules/@humwick/offload/README.md +0 -57
- package/node_modules/@humwick/offload/dist/async-runner.d.ts +0 -18
- package/node_modules/@humwick/offload/dist/async-runner.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/async-runner.js +0 -158
- package/node_modules/@humwick/offload/dist/async-runner.js.map +0 -1
- package/node_modules/@humwick/offload/dist/envelope.d.ts +0 -25
- package/node_modules/@humwick/offload/dist/envelope.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/envelope.js +0 -80
- package/node_modules/@humwick/offload/dist/envelope.js.map +0 -1
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts +0 -10
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.js +0 -59
- package/node_modules/@humwick/offload/dist/fixtures/worker-task.js.map +0 -1
- package/node_modules/@humwick/offload/dist/index.d.ts +0 -5
- package/node_modules/@humwick/offload/dist/index.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/index.js +0 -5
- package/node_modules/@humwick/offload/dist/index.js.map +0 -1
- package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts +0 -62
- package/node_modules/@humwick/offload/dist/subprocess-runner.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/subprocess-runner.js +0 -295
- package/node_modules/@humwick/offload/dist/subprocess-runner.js.map +0 -1
- package/node_modules/@humwick/offload/dist/types.d.ts +0 -111
- package/node_modules/@humwick/offload/dist/types.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/types.js +0 -176
- package/node_modules/@humwick/offload/dist/types.js.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-pool.d.ts +0 -23
- package/node_modules/@humwick/offload/dist/worker-pool.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-pool.js +0 -435
- package/node_modules/@humwick/offload/dist/worker-pool.js.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-runtime.d.ts +0 -2
- package/node_modules/@humwick/offload/dist/worker-runtime.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/worker-runtime.js +0 -27
- package/node_modules/@humwick/offload/dist/worker-runtime.js.map +0 -1
- package/node_modules/@humwick/offload/dist/worker.d.ts +0 -5
- package/node_modules/@humwick/offload/dist/worker.d.ts.map +0 -1
- package/node_modules/@humwick/offload/dist/worker.js +0 -1
- package/node_modules/@humwick/offload/dist/worker.js.map +0 -1
- package/node_modules/@humwick/offload/package.json +0 -42
- package/node_modules/@humwick/offload/src/async-runner.ts +0 -170
- package/node_modules/@humwick/offload/src/envelope.ts +0 -92
- package/node_modules/@humwick/offload/src/fixtures/worker-task.ts +0 -49
- package/node_modules/@humwick/offload/src/index.ts +0 -4
- package/node_modules/@humwick/offload/src/subprocess-runner.ts +0 -334
- package/node_modules/@humwick/offload/src/types.ts +0 -235
- package/node_modules/@humwick/offload/src/worker-pool.ts +0 -463
- package/node_modules/@humwick/offload/src/worker-runtime.ts +0 -32
- package/node_modules/@humwick/offload/src/worker.ts +0 -5
- package/public/assets/agent-liveness-DyqxfB-t.js +0 -2
- package/public/assets/agent-profiles-BpI_jTxq.js +0 -2
- package/public/assets/index-B7ZerHLY.css +0 -2
- package/public/assets/index-BU3uWo2t.js +0 -15
- package/public/assets/projects-B_lmcqfO.js +0 -2
- package/public/assets/provider-display-DbLWpP3j.js +0 -2
- package/public/assets/run-card-CO_bguQf.js +0 -2
- package/public/assets/shipping-Bu8p1gEw.js +0 -2
- package/public/assets/store-BvtFdlGX.js +0 -9
- package/public/assets/use-project-list-B-T2Bnnn.js +0 -2
- package/public/assets/versioned-prompt-editor-Diu8BIaM.js +0 -8
- package/runner/src/agent-runner/http-liveness.ts +0 -85
- package/runner/src/gate-run-lease-probe.ts +0 -38
- package/src/db/claude-catalog-reconcile.ts +0 -27
- package/src/db/on-loop-write-transaction.ts +0 -34
- package/src/routing-model-aliases.ts +0 -21
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
|
|
3
|
-
// Optional fields preserve the shape of runs created before script steps (#3271).
|
|
4
|
-
export const workflowScriptPollSchema = z.object({ step: z.string(), attempt: z.number().int(), deadline: z.number().int(), nextAt: z.number().int() });
|
|
5
|
-
export const workflowScriptResultSchema = z.object({
|
|
6
|
-
step: z.string(), round: z.number().int(), attempt: z.number().int(), timerId: z.string(),
|
|
7
|
-
exitCode: z.number().int().nullable(), timedOut: z.boolean(), logArtifactId: z.string().optional(),
|
|
8
|
-
error: z.record(z.string(), z.unknown()).optional(),
|
|
9
|
-
output: z.record(z.string(), z.unknown()).optional(), at: z.number().int(),
|
|
10
|
-
});
|
|
11
|
-
export const workflowScriptAttemptSchema = workflowScriptResultSchema.extend({ id: z.string(), runId: z.string() });
|
|
@@ -1,299 +0,0 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
|
-
import { workflowActivationSchema, workflowSnapshotSchema, workflowBudgetSchema, workflowReservationSchema } from "./workflow-activation";
|
|
3
|
-
import { laneStores } from "./workflow-lane";
|
|
4
|
-
|
|
5
|
-
import { workflowScriptAttemptSchema, workflowScriptPollSchema } from "./workflow-script";
|
|
6
|
-
import { type EntityStore, type ModuleCtx, OpError } from "./contract";
|
|
7
|
-
import { WORKFLOW_REAP_POLICIES, workflowAppliedPinSchema, workflowCallPinSchema, workflowDefinitionSchema, workflowRoutingDefaultsSchema } from "./workflow-definition";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* #3045 — declarative multi-agent workflows on the K7 workflow runtime. One durable `run` per
|
|
11
|
-
* started workflow walks the declared steps: entering a step writes an EFFECT intent and parks on a
|
|
12
|
-
* wait; the src supervisor performs the effect (dispatch a role, message the builder, clear the
|
|
13
|
-
* hold, reap step agents) and SIGNALS the wait from durable src facts (a Task delivery, a land). Routing happens in
|
|
14
|
-
* the `route` step, so each decision commits exactly once with the run record and the next effect.
|
|
15
|
-
* The kernel never imports src: effects and signals are the whole seam (the outbox shape).
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
export const SIGNAL_TOPIC = "workflow.signaled" as const;
|
|
19
|
-
/** #3120 — the SDK's PROJECT_FILE_SOURCES (the kernel does not import the SDK; the src start call type-checks against it). */
|
|
20
|
-
export const WORKFLOW_SOURCES = ["bundled", "project", "project-overrides-bundled"] as const;
|
|
21
|
-
export const ADMIN_GRANT = "workflow:admin" as const;
|
|
22
|
-
export const RUN_STATUSES = ["running", "escalated", "done", "cancelled", "failed"] as const;
|
|
23
|
-
export const EFFECT_KINDS = ["started", "dispatch", "script", "decision", "withdraw-decision", "child", "cancel-children", "cancel-agent-tree", "findings", "clear-hold", "hold", "escalate", "result", "reap", "close", "landed"] as const;
|
|
24
|
-
export const allocationSchema = z.object({ id: z.string(), value: z.number().int() });
|
|
25
|
-
export const admissionSchema = z.object({ id: z.string(), cursor: z.string().optional() });
|
|
26
|
-
export const json = z.record(z.string(), z.unknown());
|
|
27
|
-
|
|
28
|
-
export const awaitingSchema = z.object({
|
|
29
|
-
/** The wait's correlation id: one signal satisfies exactly one wait. */
|
|
30
|
-
key: z.string(),
|
|
31
|
-
kind: z.enum(["delivery", "landed", "ci", "script", "closed", "child", "cleanup", "for-each", "decision"]),
|
|
32
|
-
/** The Task whose delivery (or land) ends the wait; absent until the effect that creates it settles. */
|
|
33
|
-
taskId: z.number().int().optional(),
|
|
34
|
-
effectId: z.string().optional(),
|
|
35
|
-
/** A `ci` wait: the landed commit whose CI on main ends it. */
|
|
36
|
-
sha: z.string().optional(),
|
|
37
|
-
/** Only a delivery event after this id, recorded at or after `since`, counts. */
|
|
38
|
-
afterEventId: z.number().int(),
|
|
39
|
-
since: z.number().int(),
|
|
40
|
-
/** When the wait escalates once for making no progress; absent on a wait entered before #3045 H1. */
|
|
41
|
-
deadline: z.number().int().optional(),
|
|
42
|
-
timedOutAt: z.number().int().optional(),
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
export const stepEntrySchema = z.object({
|
|
46
|
-
step: z.string(),
|
|
47
|
-
taskId: z.number().int(),
|
|
48
|
-
outcome: z.string(),
|
|
49
|
-
head: z.string().optional(),
|
|
50
|
-
summary: z.string().optional(),
|
|
51
|
-
findings: z.string().optional(),
|
|
52
|
-
/** When the step's wait began and when its delivery was routed (#3076 step durations); absent on older entries. */
|
|
53
|
-
startedAt: z.number().int().optional(),
|
|
54
|
-
at: z.number().int().optional(),
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
/** A coordinator's answer to one escalation (#3045 H2): where the run went on, and the note for that step's agent. */
|
|
58
|
-
export const resumeSchema = z.object({
|
|
59
|
-
escalation: z.string(), from: z.string(), step: z.string(), round: z.number().int(), note: z.string().optional(), by: z.string(), at: z.number().int(),
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
/** CI on main after the land (#3045 H5): `pass`, `fail` (red at the deadline, after one escalation), or `none`
|
|
63
|
-
* (no CI watch, or no verdict before the deadline). `sha` is the commit the verdict was read at. */
|
|
64
|
-
export const ciVerdictSchema = z.object({
|
|
65
|
-
status: z.enum(["pass", "fail", "none"]), sha: z.string().optional(), workflows: z.array(z.string()).optional(), url: z.string().optional(), note: z.string().optional(),
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
export const runSchema = z.object({
|
|
69
|
-
id: z.string(),
|
|
70
|
-
workflow: z.string(),
|
|
71
|
-
ref: z.string(),
|
|
72
|
-
sha: z.string(),
|
|
73
|
-
/** #3120 — the workflow file's origin; absent on runs started before it was recorded. */
|
|
74
|
-
source: z.enum(WORKFLOW_SOURCES).optional(),
|
|
75
|
-
taskId: z.number().int(),
|
|
76
|
-
/** The agent that started the run; it receives the escalation or the result. */
|
|
77
|
-
coordinator: z.string(),
|
|
78
|
-
callerAgentId: z.string().optional(),
|
|
79
|
-
maxLiveAgents: z.number().int().min(1).optional(),
|
|
80
|
-
tokenBudget: z.object({ tokenCap: z.number().int().positive().max(Number.MAX_SAFE_INTEGER) }).optional(),
|
|
81
|
-
cwd: z.string(),
|
|
82
|
-
orchestratorId: z.string(),
|
|
83
|
-
definition: workflowDefinitionSchema,
|
|
84
|
-
inputs: json.optional(), outputs: json.optional(), results: z.record(z.string(), json).optional(),
|
|
85
|
-
parentRunId: z.string().optional(), parentActivationId: z.string().optional(), rootRunId: z.string().optional(), depth: z.number().int().optional(),
|
|
86
|
-
activationId: z.string().optional(), generation: z.number().int().optional(), requestKey: z.string().optional(),
|
|
87
|
-
itemContext: z.object({ item: z.unknown(), index: z.number().int() }).optional(),
|
|
88
|
-
snapshot: workflowSnapshotSchema.optional(), snapshotDigest: z.string().optional(), budget: workflowBudgetSchema.optional(),
|
|
89
|
-
limits: z.record(z.string(), z.number().int()).optional(),
|
|
90
|
-
finalizing: json.optional(),
|
|
91
|
-
cleanup: z.object({ status: z.enum(["pending", "complete", "incomplete"]), deadline: z.number().int(), error: z.string().optional() }).optional(),
|
|
92
|
-
childCount: z.number().int().optional(), decisionChildRunId: z.string().optional(),
|
|
93
|
-
|
|
94
|
-
scriptPoll: workflowScriptPollSchema.optional(),
|
|
95
|
-
scriptOutputs: z.record(z.string(), z.record(z.string(), z.unknown())).optional(),
|
|
96
|
-
/** #3121 — the coordinator's per-step pins (start call, replaced per step by a resume); they win over the YAML step's. */
|
|
97
|
-
pins: z.record(z.string(), workflowCallPinSchema).optional(),
|
|
98
|
-
routingDefaults: workflowRoutingDefaultsSchema.optional(),
|
|
99
|
-
status: z.enum(RUN_STATUSES),
|
|
100
|
-
/** A declared step, or `land`. */
|
|
101
|
-
step: z.string(),
|
|
102
|
-
round: z.number().int(),
|
|
103
|
-
entered: z.array(z.string()),
|
|
104
|
-
counters: z.record(z.string(), z.number().int()),
|
|
105
|
-
waitSeq: z.number().int(),
|
|
106
|
-
awaiting: awaitingSchema.nullable(),
|
|
107
|
-
overdueAt: z.number().int().optional(),
|
|
108
|
-
overdueSince: z.number().int().optional(),
|
|
109
|
-
overdueNotifiedAt: z.number().int().optional(),
|
|
110
|
-
/** The last input-Task delivery event the run consumed. */
|
|
111
|
-
cursor: z.number().int(),
|
|
112
|
-
/** The input Task's latest delivered head. */
|
|
113
|
-
head: z.string().optional(),
|
|
114
|
-
deliveryWorkspaceId: z.string().optional(),
|
|
115
|
-
landOperationId: z.string().optional(),
|
|
116
|
-
/** What a loop back hands the input step's builder. */
|
|
117
|
-
feedback: z.object({ head: z.string().optional(), findings: z.string(), taskId: z.number().int(), step: z.string() }).nullable(),
|
|
118
|
-
rounds: z.array(z.object({ round: z.number().int(), steps: z.array(stepEntrySchema) })),
|
|
119
|
-
reason: z.string().optional(),
|
|
120
|
-
/** The newest escalation the coordinator was sent; a resume answers each one once. An alert names its
|
|
121
|
-
* wait, and goes stale once the run moves past it. */
|
|
122
|
-
escalation: z.object({ id: z.string(), at: z.number().int(), waitKey: z.string().optional() }).optional(),
|
|
123
|
-
resumes: z.array(resumeSchema).optional(),
|
|
124
|
-
/** Set by a resume and consumed by the next step entry, whose effect carries the note to the step's agent.
|
|
125
|
-
* `to`: the step a run leaves its land wait for, once the Task is held again. */
|
|
126
|
-
resuming: z.object({ note: z.string().optional(), to: z.string().optional() }).optional(),
|
|
127
|
-
/** #3166 — who asked the run to end cancelled; the next routing or step entry ends it. */
|
|
128
|
-
cancel: z.object({ reason: z.string(), by: z.string(), at: z.number().int() }).optional(),
|
|
129
|
-
/** The land, once it happened; a `ci-main` step reads CI on this commit. */
|
|
130
|
-
landed: z.object({ sha: z.string(), at: z.number().int(), nothingToLand: z.boolean().optional(), ci: ciVerdictSchema.optional() }).optional(),
|
|
131
|
-
/** `nothingToLand`: the reviewed head was already on its base (#3103), so no land ran and `landedSha` is where main carries it. */
|
|
132
|
-
output: z.object({ landedSha: z.string().optional(), rounds: z.number().int().optional(), nothingToLand: z.boolean().optional(), ci: ciVerdictSchema.optional() }).catchall(z.unknown()).optional(),
|
|
133
|
-
createdAt: z.number().int(),
|
|
134
|
-
updatedAt: z.number().int(),
|
|
135
|
-
});
|
|
136
|
-
|
|
137
|
-
export const effectSchema = z.object({
|
|
138
|
-
/** `<runId>:<seq>:<kind>` — also the idempotency root of the src side effect. */
|
|
139
|
-
id: z.string(),
|
|
140
|
-
runId: z.string(),
|
|
141
|
-
kind: z.enum(EFFECT_KINDS),
|
|
142
|
-
/** The wait a failed effect satisfies, so the run escalates instead of waiting forever. */
|
|
143
|
-
waitKey: z.string().optional(),
|
|
144
|
-
payload: json,
|
|
145
|
-
status: z.enum(["pending", "deferred", "done", "failed"]),
|
|
146
|
-
attempts: z.number().int(),
|
|
147
|
-
error: z.string().optional(),
|
|
148
|
-
result: json.optional(),
|
|
149
|
-
createdAt: z.number().int(),
|
|
150
|
-
settledAt: z.number().int().optional(),
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
export const signalSchema = z.object({
|
|
154
|
-
id: z.string(),
|
|
155
|
-
runId: z.string(),
|
|
156
|
-
/** `land-cancelled`: the armed land's workspace was abandoned. `land-withdrawn`: the armed land was withdrawn, by the coordinator (#3603) or on an unresolved conflict handed back to its owner (#2704).
|
|
157
|
-
* `resume`: the coordinator moved the run on.
|
|
158
|
-
* `start-refused`: the spawn call that started the run failed with its first dispatch's error (#3160).
|
|
159
|
-
* `cancel`: wakes a wait for the run's cancel (#3166). `agent-exited`: the step's agent exited without a delivery. */
|
|
160
|
-
kind: z.enum(["delivery", "script", "landed", "land-cancelled", "land-withdrawn", "effect-failed", "resume", "ci", "start-refused", "cancel", "agent-exited", "closed", "child", "cleanup", "for-each", "decision"]),
|
|
161
|
-
payload: json,
|
|
162
|
-
createdAt: z.number().int(),
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
/** One agent a step spawned, keyed by its first spawnRequestId. Its lifecycle is the run's record, not a
|
|
166
|
-
* coordinator wake (#3045); `reap` is the step's policy, copied when the spawn settles. A restart's
|
|
167
|
-
* successor rebinds the row (same agentId, new `spawnRequestId`), so facts and reap follow the live generation. */
|
|
168
|
-
export const crossProviderSchema = z.object({ step: z.string(), avoided: z.string(), fallback: z.boolean(), reason: z.string().optional() });
|
|
169
|
-
|
|
170
|
-
export const agentSchema = z.object({
|
|
171
|
-
id: z.string(),
|
|
172
|
-
/** The current generation's spawnRequestId. */
|
|
173
|
-
spawnRequestId: z.string(),
|
|
174
|
-
reservationId: z.string().optional(),
|
|
175
|
-
runId: z.string(),
|
|
176
|
-
step: z.string(),
|
|
177
|
-
round: z.number().int(),
|
|
178
|
-
taskId: z.number().int(),
|
|
179
|
-
reap: z.enum(WORKFLOW_REAP_POLICIES),
|
|
180
|
-
agentId: z.string().optional(),
|
|
181
|
-
readyAt: z.number().int().optional(),
|
|
182
|
-
spawnFailedAt: z.number().int().optional(),
|
|
183
|
-
spawnError: z.string().optional(),
|
|
184
|
-
exitedAt: z.number().int().optional(),
|
|
185
|
-
exitReason: z.string().optional(),
|
|
186
|
-
reapedAt: z.number().int().optional(),
|
|
187
|
-
/** The reap refused to shut it down (unlanded work, or not a stoppable target): it stays alive, and why. */
|
|
188
|
-
keptAt: z.number().int().optional(),
|
|
189
|
-
keptReason: z.string().optional(),
|
|
190
|
-
/** The provider the spawn resolved (#3105). */
|
|
191
|
-
provider: z.string().optional(),
|
|
192
|
-
/** #3105 — the step's `crossProvider` preference: the provider it avoided and, when no other one was available, why it ran on that one anyway. */
|
|
193
|
-
crossProvider: crossProviderSchema.optional(),
|
|
194
|
-
/** #3121 — the pin its dispatch applied, with each field's source. */
|
|
195
|
-
pin: workflowAppliedPinSchema.optional(),
|
|
196
|
-
routingSources: z.record(z.string(), z.string()).optional(),
|
|
197
|
-
warnings: z.array(z.string()).optional(),
|
|
198
|
-
createdAt: z.number().int(),
|
|
199
|
-
});
|
|
200
|
-
|
|
201
|
-
export const FACT_FIELD = { "spawn-failed": "spawnFailedAt", ready: "readyAt", exited: "exitedAt", reaped: "reapedAt", kept: "keptAt" } as const;
|
|
202
|
-
|
|
203
|
-
/** Which run routes a Task's deliveries (the input Task and every Task a step created), and the
|
|
204
|
-
* step's verdict gate: on that Task the gate is the answer, not a land check. */
|
|
205
|
-
export const linkSchema = z.object({ id: z.string(), taskId: z.number().int(), runId: z.string(), gate: z.string().optional(), activationId: z.string().optional() });
|
|
206
|
-
|
|
207
|
-
export type WorkflowRunRecord = z.output<typeof runSchema>;
|
|
208
|
-
export type WorkflowEffect = z.output<typeof effectSchema>;
|
|
209
|
-
export type WorkflowSignal = z.output<typeof signalSchema>;
|
|
210
|
-
export type WorkflowAgent = z.output<typeof agentSchema>;
|
|
211
|
-
export type WorkflowCiVerdict = z.output<typeof ciVerdictSchema>;
|
|
212
|
-
export type Awaiting = z.output<typeof awaitingSchema>;
|
|
213
|
-
|
|
214
|
-
function runEndsAgentWork(run: WorkflowRunRecord): boolean {
|
|
215
|
-
return Boolean(run.landed || run.finalizing || run.cancel || run.status === "done" || run.status === "cancelled");
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/** Completion and cancellation own shutdown regardless of definition version or step keep policy. */
|
|
219
|
-
export function workflowOwnsAgentCleanup(run: WorkflowRunRecord): boolean {
|
|
220
|
-
return Boolean(run.rootRunId || run.callerAgentId || runEndsAgentWork(run));
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
export function workflowReapIncludesAgent(run: WorkflowRunRecord, payload: WorkflowEffect["payload"], agent: WorkflowAgent): boolean {
|
|
224
|
-
return payload.scope === "step" ? agent.step === payload.step : runEndsAgentWork(run) || agent.reap !== "never";
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
export interface Stores {
|
|
228
|
-
run: EntityStore<{ schema: typeof runSchema }>;
|
|
229
|
-
effect: EntityStore<{ schema: typeof effectSchema }>;
|
|
230
|
-
signal: EntityStore<{ schema: typeof signalSchema }>;
|
|
231
|
-
link: EntityStore<{ schema: typeof linkSchema }>;
|
|
232
|
-
agent: EntityStore<{ schema: typeof agentSchema }>;
|
|
233
|
-
allocation: EntityStore<{ schema: typeof allocationSchema }>;
|
|
234
|
-
admission: EntityStore<{ schema: typeof admissionSchema }>;
|
|
235
|
-
activation: EntityStore<{ schema: typeof workflowActivationSchema }>;
|
|
236
|
-
reservation: EntityStore<{ schema: typeof workflowReservationSchema }>;
|
|
237
|
-
scriptAttempt: EntityStore<{ schema: typeof workflowScriptAttemptSchema }>;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
export function stores(ctx: ModuleCtx): Stores {
|
|
241
|
-
return laneStores(ctx, ctx.entities as unknown as Stores);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
export async function requireRun(ctx: ModuleCtx, runId: string): Promise<WorkflowRunRecord> {
|
|
245
|
-
const run = await stores(ctx).run.get(runId);
|
|
246
|
-
if (!run) throw new OpError("not_found", 404, `workflow run '${runId}' was not found`);
|
|
247
|
-
return run;
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
export async function linkTask(ctx: ModuleCtx, taskId: number, runId: string, gate?: string, activationId?: string): Promise<void> {
|
|
251
|
-
const id = String(taskId);
|
|
252
|
-
const existing = await stores(ctx).link.get(id);
|
|
253
|
-
if (existing && existing.runId !== runId) {
|
|
254
|
-
const owner = await stores(ctx).run.get(existing.runId);
|
|
255
|
-
const composed = owner?.rootRunId || (owner?.status === "escalated" && (await requireRun(ctx, runId)).rootRunId);
|
|
256
|
-
if (owner && (owner.status === "running" || (owner.status === "escalated" && composed))) throw new OpError("conflict", 409, `TASK_EXECUTION_CONFLICT: T${taskId} is owned by ${owner.id}`);
|
|
257
|
-
}
|
|
258
|
-
if (!existing) await stores(ctx).link.create({ id, taskId, runId, ...(activationId ? { activationId } : {}), ...(gate ? { gate } : {}) });
|
|
259
|
-
else if (existing.runId !== runId || existing.gate !== gate) await stores(ctx).link.update(id, { runId, activationId, gate });
|
|
260
|
-
}
|
|
261
|
-
|
|
262
|
-
/** An effect's id: a retried write of the same effect is the same row. */
|
|
263
|
-
export function workflowEffectId(runId: string, seq: number, kind: WorkflowEffect["kind"]): string {
|
|
264
|
-
return `${runId}:${String(seq).padStart(4, "0")}:${kind}`;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
export async function writeEffect(ctx: ModuleCtx, run: WorkflowRunRecord, seq: number, kind: WorkflowEffect["kind"], payload: Record<string, unknown>, waitKey?: string): Promise<string> {
|
|
268
|
-
const id = workflowEffectId(run.id, seq, kind);
|
|
269
|
-
if (kind === "reap") {
|
|
270
|
-
const agentIds: string[] = [];
|
|
271
|
-
let cursor: string | undefined;
|
|
272
|
-
do {
|
|
273
|
-
const page = await stores(ctx).agent.list({ where: { runId: run.id }, limit: 200, ...(cursor ? { cursor } : {}) });
|
|
274
|
-
for (const agent of page.items) {
|
|
275
|
-
if (workflowReapIncludesAgent(run, payload, agent)) agentIds.push(agent.id);
|
|
276
|
-
}
|
|
277
|
-
cursor = page.cursor;
|
|
278
|
-
} while (cursor);
|
|
279
|
-
payload = { ...payload, agentIds };
|
|
280
|
-
}
|
|
281
|
-
await stores(ctx).effect.create({ id, runId: run.id, kind, payload, status: "pending", attempts: 0, ...(waitKey ? { waitKey } : {}), createdAt: ctx.clock.now() });
|
|
282
|
-
return id;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
/** The highest seq the run's effects used (an end before #3045 H2 wrote one past `waitSeq`), and its pending end-of-run reaps. */
|
|
286
|
-
export async function usedEffects(ctx: ModuleCtx, run: WorkflowRunRecord): Promise<{ seq: number; runReaps: string[] }> {
|
|
287
|
-
let seq = run.waitSeq;
|
|
288
|
-
const runReaps: string[] = [];
|
|
289
|
-
let cursor: string | undefined;
|
|
290
|
-
do {
|
|
291
|
-
const page = await stores(ctx).effect.list({ where: { runId: run.id }, limit: 200, ...(cursor ? { cursor } : {}) });
|
|
292
|
-
for (const effect of page.items) {
|
|
293
|
-
seq = Math.max(seq, Number(effect.id.slice(run.id.length + 1).split(":")[0]) || 0);
|
|
294
|
-
if (effect.kind === "reap" && effect.status === "pending" && effect.payload.scope === "run") runReaps.push(effect.id);
|
|
295
|
-
}
|
|
296
|
-
cursor = page.cursor;
|
|
297
|
-
} while (cursor);
|
|
298
|
-
return { seq, runReaps };
|
|
299
|
-
}
|
|
@@ -1,195 +0,0 @@
|
|
|
1
|
-
import type { Database } from "bun:sqlite";
|
|
2
|
-
import type { EntitySession } from "./persistence";
|
|
3
|
-
import type { EventSession } from "./event-log";
|
|
4
|
-
import type { MessageAuthoritySession } from "./message-authority";
|
|
5
|
-
import {
|
|
6
|
-
WorkflowContendedError,
|
|
7
|
-
isSqliteBusy,
|
|
8
|
-
type WorkflowJournalPersistence,
|
|
9
|
-
type WorkflowStepCommitRecord,
|
|
10
|
-
} from "./workflow-journal";
|
|
11
|
-
|
|
12
|
-
/** The executor lease this attempt claims to still hold, re-verified inside the commit. */
|
|
13
|
-
export interface WorkflowStepLease {
|
|
14
|
-
/** Instance whose lease/fence predicate is re-checked. */
|
|
15
|
-
readonly instanceId: string;
|
|
16
|
-
/** The `executor_lease_token` this executor believes it holds. */
|
|
17
|
-
readonly token: string;
|
|
18
|
-
/** The fence-check time, compared against `executor_lease_expires_at` (`expires_at > now`). */
|
|
19
|
-
readonly now: number;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Fault-injection boundaries threaded through the step's durable commit, each named to line up with
|
|
24
|
-
* a labeled M4 chaos-harness kill point. M0 armed the first two with in-process throws to prove
|
|
25
|
-
* all-or-nothing rollback; M4 arms any of them with a `process.kill(pid, "SIGKILL")` to prove the
|
|
26
|
-
* SAME atomicity under a real cross-process kill-9 (an uncommitted WAL transaction leaves NO row).
|
|
27
|
-
* The ordering, top to bottom, is the exact order the commit executes:
|
|
28
|
-
*
|
|
29
|
-
* beforeCommit → [tx: fence → participant.flush → entity.flush → betweenEntitiesAndEvents
|
|
30
|
-
* → event.flush → insideTxBeforeJournal → journal write → afterJournalBeforeCommit]
|
|
31
|
-
* → afterCommit
|
|
32
|
-
*
|
|
33
|
-
* The two hooks INSIDE the tx after real writes (`insideTxBeforeJournal`, `afterJournalBeforeCommit`)
|
|
34
|
-
* are the load-bearing ones: a kill there has already run entity/event (and, for the latter, the
|
|
35
|
-
* journal INSERT + status UPDATE) statements, yet because the tx has not COMMITted, the crash must
|
|
36
|
-
* leave zero rows. `afterCommit` fires once the tx is durably committed — a kill there proves the
|
|
37
|
-
* committed step is memoized and NEVER re-executed on resume.
|
|
38
|
-
*/
|
|
39
|
-
export interface WorkflowStepCommitFaults {
|
|
40
|
-
/** Fires after the sessions are sealed but before the transaction opens (models a pre-commit crash). */
|
|
41
|
-
beforeCommit?: () => void;
|
|
42
|
-
/** Fires after the workflow lease fence, before participant SQL. */
|
|
43
|
-
afterFenceBeforeParticipant?: () => void;
|
|
44
|
-
/** Fires immediately after participant SQL, before entity flush. */
|
|
45
|
-
afterParticipantBeforeEntities?: () => void;
|
|
46
|
-
/** Legacy fault seam: fires after the participant (if any), before the entity flush. */
|
|
47
|
-
afterFenceBeforeEntities?: () => void;
|
|
48
|
-
/** Fires inside the tx, between the entity flush and the event flush. */
|
|
49
|
-
betweenEntitiesAndEvents?: () => void;
|
|
50
|
-
/** Fires inside the transaction, after entity+event flush, before the journal write (models a mid-commit failure). */
|
|
51
|
-
insideTxBeforeJournal?: () => void;
|
|
52
|
-
/** Fires inside the tx, after the journal INSERT + instance UPDATE, before the tx COMMITs (proves
|
|
53
|
-
* a kill with every write statement executed still rolls back to zero rows). */
|
|
54
|
-
afterJournalBeforeCommit?: () => void;
|
|
55
|
-
/** Fires AFTER the transaction has durably committed (proves a committed step is never re-run). */
|
|
56
|
-
afterCommit?: () => void;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export interface CommitStepAttemptInput {
|
|
60
|
-
readonly db: Database;
|
|
61
|
-
readonly journal: WorkflowJournalPersistence;
|
|
62
|
-
readonly lease: WorkflowStepLease;
|
|
63
|
-
readonly entitySession: EntitySession<unknown>;
|
|
64
|
-
readonly eventSession: EventSession<unknown>;
|
|
65
|
-
readonly messageAuthoritySession?: MessageAuthoritySession;
|
|
66
|
-
readonly record: WorkflowStepCommitRecord;
|
|
67
|
-
readonly faults?: WorkflowStepCommitFaults;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Atomically commit one workflow step attempt. Opens ONE synchronous `db.transaction(() => …)`
|
|
72
|
-
* and, in this exact order, does five things — any throw rolls back ALL five together:
|
|
73
|
-
*
|
|
74
|
-
* (a) re-check the executor lease/fence by SQL predicate (never trust a pre-tx read);
|
|
75
|
-
* (b) flush the typed MESSAGE-authority participant (when one was staged);
|
|
76
|
-
* (c) `entitySession.flush()` — commit-time OCC comes free from K4;
|
|
77
|
-
* (d) `eventSession.flush()` — the scoped event log (K5);
|
|
78
|
-
* (e) write the `workflow_step_journal` memoization row and advance the instance
|
|
79
|
-
* status / journal cursor / transition columns.
|
|
80
|
-
*
|
|
81
|
-
* A lease-predicate failure (a) aborts before any entity, event, or journal row is written.
|
|
82
|
-
* A participant refusal (b) aborts before entity, event, or journal SQL. A K4 optimistic-version
|
|
83
|
-
* conflict (c) aborts before any event or journal row is written. The journal write (e), authority
|
|
84
|
-
* mutation (b), and domain writes (c, d) commit as one unit or not at all — there
|
|
85
|
-
* is no dual-write window. Returns the assigned journal `seq`.
|
|
86
|
-
*
|
|
87
|
-
* This is intentionally NOT `commitAtomically`: that helper owns the whole transaction and
|
|
88
|
-
* flushes only an op attempt's enlisted sessions; it can express neither the lease predicate (a)
|
|
89
|
-
* nor the journal write (e). The underlying `flush()`es already compose into a caller-owned tx.
|
|
90
|
-
*/
|
|
91
|
-
export function commitStepAttempt(input: CommitStepAttemptInput): number {
|
|
92
|
-
const { db, journal, lease, entitySession, eventSession, messageAuthoritySession, record, faults } = input;
|
|
93
|
-
|
|
94
|
-
// Close all attempt sessions before entering the synchronous commit, so detached work can
|
|
95
|
-
// never add late intents (mirrors `commitAtomically`). Sealing precedes the fault boundary:
|
|
96
|
-
// a `beforeCommit` crash leaves them sealed-but-unflushed, so nothing is persisted.
|
|
97
|
-
entitySession.seal();
|
|
98
|
-
eventSession.seal();
|
|
99
|
-
messageAuthoritySession?.seal();
|
|
100
|
-
faults?.beforeCommit?.();
|
|
101
|
-
|
|
102
|
-
let seq = 0;
|
|
103
|
-
try {
|
|
104
|
-
db.transaction(() => {
|
|
105
|
-
journal.fenceLeaseInTransaction(lease.instanceId, lease.token, lease.now); // (a)
|
|
106
|
-
faults?.afterFenceBeforeParticipant?.();
|
|
107
|
-
messageAuthoritySession?.flush(); // (b)
|
|
108
|
-
faults?.afterParticipantBeforeEntities?.();
|
|
109
|
-
faults?.afterFenceBeforeEntities?.();
|
|
110
|
-
entitySession.flush(); // (c)
|
|
111
|
-
faults?.betweenEntitiesAndEvents?.();
|
|
112
|
-
eventSession.flush(); // (d)
|
|
113
|
-
faults?.insideTxBeforeJournal?.();
|
|
114
|
-
seq = journal.recordStepInTransaction(record); // (e)
|
|
115
|
-
faults?.afterJournalBeforeCommit?.();
|
|
116
|
-
})();
|
|
117
|
-
} catch (error) {
|
|
118
|
-
// A write-lock contention anywhere in the tx (fence, either flush, or the journal write) rolls
|
|
119
|
-
// the WHOLE tx back — no partial row — and must surface as the typed relinquish, never a raw
|
|
120
|
-
// SqliteError that would abort the driver's wakeup/recover loop or read as a lease loss.
|
|
121
|
-
if (isSqliteBusy(error)) throw new WorkflowContendedError(lease.instanceId, "commitStepAttempt", { cause: error });
|
|
122
|
-
throw error;
|
|
123
|
-
}
|
|
124
|
-
faults?.afterCommit?.();
|
|
125
|
-
return seq;
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/** A FAILED attempt's commit (M3 retry path). */
|
|
129
|
-
export interface CommitFailedStepAttemptInput {
|
|
130
|
-
readonly db: Database;
|
|
131
|
-
readonly journal: WorkflowJournalPersistence;
|
|
132
|
-
readonly lease: WorkflowStepLease;
|
|
133
|
-
/** Must have `outcome: "failed"`. A retry backoff parks the INSTANCE `sleeping` via
|
|
134
|
-
* `nextStatus`/`sleepUntil`; exhaustion sets `nextStatus: "failed"` + `failure`. */
|
|
135
|
-
readonly record: WorkflowStepCommitRecord;
|
|
136
|
-
/** M4 chaos kill points around scheduling the backoff/failed row: `beforeCommit` (before the tx),
|
|
137
|
-
* `insideTxBeforeJournal` (after the fence, before the failed-attempt row is written). */
|
|
138
|
-
readonly faults?: WorkflowStepCommitFaults;
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
/**
|
|
142
|
-
* Atomically journal ONE failed step attempt (M3 retries). Unlike {@link commitStepAttempt} there
|
|
143
|
-
* are NO domain effects to flush — the step body threw and its buffered K4/K5 sessions were already
|
|
144
|
-
* discarded — so this opens one transaction that (a) re-checks the executor lease/fence, then (d)
|
|
145
|
-
* writes the immutable `failed` journal row + advances the instance (to `sleeping` for a backoff,
|
|
146
|
-
* `running` for an immediate retry, or terminal `failed` on exhaustion). Fencing a failed attempt
|
|
147
|
-
* matters just as much as a completed one: a zombie driver whose lease was reclaimed must not be
|
|
148
|
-
* able to append a phantom failed attempt and corrupt the retry sequence. Returns the journal `seq`.
|
|
149
|
-
*/
|
|
150
|
-
export function commitFailedStepAttempt(input: CommitFailedStepAttemptInput): number {
|
|
151
|
-
const { db, journal, lease, record, faults } = input;
|
|
152
|
-
faults?.beforeCommit?.();
|
|
153
|
-
let seq = 0;
|
|
154
|
-
try {
|
|
155
|
-
db.transaction(() => {
|
|
156
|
-
journal.fenceLeaseInTransaction(lease.instanceId, lease.token, lease.now); // (a)
|
|
157
|
-
faults?.insideTxBeforeJournal?.();
|
|
158
|
-
seq = journal.recordStepInTransaction(record); // (d)
|
|
159
|
-
})();
|
|
160
|
-
} catch (error) {
|
|
161
|
-
if (isSqliteBusy(error)) throw new WorkflowContendedError(lease.instanceId, "commitFailedStepAttempt", { cause: error });
|
|
162
|
-
throw error;
|
|
163
|
-
}
|
|
164
|
-
return seq;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
/**
|
|
168
|
-
* Atomically journal a domain-effect-free completed transition under the executor lease. This is
|
|
169
|
-
* used when a host participant proves that the workflow's exact authority generation was
|
|
170
|
-
* superseded: the participant/domain transaction has rolled back, but the obsolete workflow must
|
|
171
|
-
* still become terminal instead of being selected as a due sleeper forever.
|
|
172
|
-
*/
|
|
173
|
-
export function commitSupersededStepAttempt(input: Omit<CommitFailedStepAttemptInput, "record"> & {
|
|
174
|
-
readonly record: WorkflowStepCommitRecord;
|
|
175
|
-
}): number {
|
|
176
|
-
const { db, journal, lease, record, faults } = input;
|
|
177
|
-
if (record.outcome !== "completed" || record.nextStatus !== "done") {
|
|
178
|
-
throw new TypeError("a superseded workflow attempt must be a completed terminal transition");
|
|
179
|
-
}
|
|
180
|
-
faults?.beforeCommit?.();
|
|
181
|
-
let seq = 0;
|
|
182
|
-
try {
|
|
183
|
-
db.transaction(() => {
|
|
184
|
-
journal.fenceLeaseInTransaction(lease.instanceId, lease.token, lease.now);
|
|
185
|
-
faults?.insideTxBeforeJournal?.();
|
|
186
|
-
seq = journal.recordStepInTransaction(record);
|
|
187
|
-
})();
|
|
188
|
-
} catch (error) {
|
|
189
|
-
if (isSqliteBusy(error)) {
|
|
190
|
-
throw new WorkflowContendedError(lease.instanceId, "commitSupersededStepAttempt", { cause: error });
|
|
191
|
-
}
|
|
192
|
-
throw error;
|
|
193
|
-
}
|
|
194
|
-
return seq;
|
|
195
|
-
}
|