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