@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
package/src/db/hosts.ts
CHANGED
|
@@ -9,6 +9,7 @@ import type { Host, HostDaemonSample, HostHardware, HostMachineSample, HostPolic
|
|
|
9
9
|
import { normalizeHostToken, parseJson } from "../utils";
|
|
10
10
|
import { getDb } from "./connection.ts";
|
|
11
11
|
import { primeHostAliases, type HostAliasRecord } from "../host/identity.ts";
|
|
12
|
+
import { settleDiskWatch, type DiskAlert } from "../host/disk-alert.ts";
|
|
12
13
|
import { settleGateArming, type GateCapacityAlert } from "../host/gate-capacity-alert.ts";
|
|
13
14
|
|
|
14
15
|
function rowToHost(row: any): Host {
|
|
@@ -99,18 +100,20 @@ function storedSample<T extends { at: number }>(table: "hosts" | "orchestrators"
|
|
|
99
100
|
*/
|
|
100
101
|
export function recordHostUtilizationInternal(
|
|
101
102
|
input: { hostId: string; orchestratorId: string; machine: HostMachineSample; daemon: HostDaemonSample },
|
|
102
|
-
): { hostUpdated: boolean; generationUpdated: boolean; gateAlert?: GateCapacityAlert; hostLabel?: string } {
|
|
103
|
+
): { hostUpdated: boolean; generationUpdated: boolean; gateAlert?: GateCapacityAlert; diskAlert?: DiskAlert; hostLabel?: string } {
|
|
103
104
|
// `last_seen_at` is deliberately NOT touched here: it is the Host's freshness clock and the §3.5
|
|
104
105
|
// seam already bumps it on every beat with the RELAY's clock. `machine.at` is the PRODUCER's wall
|
|
105
106
|
// clock, so writing it here would let a skewed daemon move a Host's liveness backwards.
|
|
106
107
|
const prevHost = storedSample<HostMachineSample>("hosts", input.hostId);
|
|
107
108
|
let hostUpdated = false;
|
|
108
109
|
let gateAlert: GateCapacityAlert | undefined;
|
|
110
|
+
let diskAlert: DiskAlert | undefined;
|
|
109
111
|
if (!prevHost || input.machine.at > prevHost.at) {
|
|
110
|
-
// #2822 — settled inside this single-writer read-modify-write, so each transition alerts once.
|
|
111
|
-
const
|
|
112
|
+
// #2822 / #3762 — settled inside this single-writer read-modify-write, so each transition alerts once.
|
|
113
|
+
const gate = settleGateArming(prevHost ?? undefined, input.machine);
|
|
114
|
+
const settled = settleDiskWatch(prevHost ?? undefined, gate.machine);
|
|
112
115
|
hostUpdated = getDb().query("UPDATE hosts SET utilization = ? WHERE id = ?").run(JSON.stringify(settled.machine), input.hostId).changes > 0;
|
|
113
|
-
if (hostUpdated) gateAlert = settled.alert;
|
|
116
|
+
if (hostUpdated) { gateAlert = gate.alert; diskAlert = settled.alert; }
|
|
114
117
|
}
|
|
115
118
|
|
|
116
119
|
const generationAt = storedSample<HostDaemonSample>("orchestrators", input.orchestratorId)?.at ?? null;
|
|
@@ -118,9 +121,9 @@ export function recordHostUtilizationInternal(
|
|
|
118
121
|
? false
|
|
119
122
|
: getDb().query("UPDATE orchestrators SET utilization = ? WHERE id = ?").run(JSON.stringify(input.daemon), input.orchestratorId).changes > 0;
|
|
120
123
|
|
|
121
|
-
if (!gateAlert) return { hostUpdated, generationUpdated };
|
|
124
|
+
if (!gateAlert && !diskAlert) return { hostUpdated, generationUpdated };
|
|
122
125
|
const label = (getDb().query("SELECT label FROM hosts WHERE id = ?").get(input.hostId) as { label: string } | null)?.label;
|
|
123
|
-
return { hostUpdated, generationUpdated, gateAlert, hostLabel: label ?? input.hostId };
|
|
126
|
+
return { hostUpdated, generationUpdated, ...(gateAlert ? { gateAlert } : {}), ...(diskAlert ? { diskAlert } : {}), hostLabel: label ?? input.hostId };
|
|
124
127
|
}
|
|
125
128
|
|
|
126
129
|
export function setHostLabelInternal(id: string, label: string): Host | null {
|
package/src/db/inbox-async.ts
CHANGED
|
@@ -9,8 +9,8 @@ import type {
|
|
|
9
9
|
setInboxThreadState,
|
|
10
10
|
} from "./inbox.ts";
|
|
11
11
|
|
|
12
|
-
export function getInboxStateAsync(operatorId: string): Promise<ReturnType<typeof getInboxState>> {
|
|
13
|
-
return getGateway().read("inbox.state", { operatorId }) as unknown as Promise<ReturnType<typeof getInboxState>>;
|
|
12
|
+
export function getInboxStateAsync(operatorId: string, options: { excludeOffline?: boolean } = {}): Promise<ReturnType<typeof getInboxState>> {
|
|
13
|
+
return getGateway().read("inbox.state", { operatorId, ...(options.excludeOffline ? { excludeOffline: true } : {}) }) as unknown as Promise<ReturnType<typeof getInboxState>>;
|
|
14
14
|
}
|
|
15
15
|
export function listChatHistoryImportsAsync(input: Parameters<typeof listChatHistoryImports>[0] = {}): Promise<ReturnType<typeof listChatHistoryImports>> {
|
|
16
16
|
return getGateway().read("inbox.historyImports", input) as unknown as Promise<ReturnType<typeof listChatHistoryImports>>;
|
package/src/db/inbox-read-ops.ts
CHANGED
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
import { getInboxState, listChatHistoryImports } from "./inbox.ts";
|
|
4
4
|
|
|
5
5
|
export const INBOX_READ_OPS = {
|
|
6
|
-
"inbox.state": (args: { operatorId: string }) => getInboxState(args.operatorId),
|
|
6
|
+
"inbox.state": (args: { operatorId: string; excludeOffline?: boolean }) => getInboxState(args.operatorId, { excludeOffline: args.excludeOffline }),
|
|
7
7
|
"inbox.historyImports": (args: Parameters<typeof listChatHistoryImports>[0]) => listChatHistoryImports(args),
|
|
8
8
|
};
|
package/src/db/inbox.ts
CHANGED
|
@@ -1,18 +1,4 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
|
-
import { isRecord, stringValue, isMechanicalMessageKind } from "@humwick/sdk";
|
|
3
|
-
import { ORCHESTRATOR_PROTOCOL_VERSION, VERSION } from "../config.ts";
|
|
4
|
-
import { parseJson } from "../utils";
|
|
5
|
-
import { isLiveIsolatedWorkspace } from "../workspace-phase";
|
|
6
|
-
import {
|
|
7
|
-
CONTRACT_REQUIREMENTS,
|
|
8
|
-
contractCompatibility,
|
|
9
|
-
parseRuntimeCapabilities,
|
|
10
|
-
parseRuntimeContracts,
|
|
11
|
-
parseRuntimePackage,
|
|
12
|
-
type RuntimeContracts,
|
|
13
|
-
} from "../contracts";
|
|
14
|
-
import { STALE_TTL_MS, DAY_MS, CLAIM_LEASE_MS, POOL_CLAIM_LEASE_MS, WORKSPACE_MERGE_LEASE_MS } from "../config";
|
|
15
|
-
import { matchAgents } from "../agent-ref";
|
|
16
2
|
import { ValidationError, getDb, writeTransaction } from "./connection.ts";
|
|
17
3
|
import { rowToChatHistoryImport, rowToChatHistoryImportEntry, rowToInboxDraft, rowToInboxThreadState } from "./mappers.ts";
|
|
18
4
|
import { getMessage } from "./messages.ts";
|
|
@@ -24,12 +10,18 @@ import type {
|
|
|
24
10
|
InboxThreadState,
|
|
25
11
|
} from "../types";
|
|
26
12
|
|
|
27
|
-
|
|
13
|
+
/**
|
|
14
|
+
* #2410 — `excludeOffline` (opt-in, the #2396 contract) keeps only peers whose agent is registered
|
|
15
|
+
* and not offline: the dashboard's "Show offline" switch hides every other thread, and the table
|
|
16
|
+
* accrues a row per agent id ever chatted with, so the full read is mostly long-dead peers.
|
|
17
|
+
*/
|
|
18
|
+
export function getInboxState(operatorId: string, options: { excludeOffline?: boolean } = {}): InboxState {
|
|
19
|
+
const live = options.excludeOffline ? " AND peer_id IN (SELECT id FROM agents WHERE status <> 'offline')" : "";
|
|
28
20
|
const threads = (getDb().query(
|
|
29
|
-
|
|
21
|
+
`SELECT * FROM inbox_thread_state WHERE operator_id = ?${live} ORDER BY updated_at DESC`,
|
|
30
22
|
).all(operatorId) as any[]).map(rowToInboxThreadState);
|
|
31
23
|
const drafts = (getDb().query(
|
|
32
|
-
|
|
24
|
+
`SELECT * FROM inbox_drafts WHERE operator_id = ?${live} ORDER BY updated_at DESC`,
|
|
33
25
|
).all(operatorId) as any[]).map(rowToInboxDraft);
|
|
34
26
|
return { operatorId, threads, drafts };
|
|
35
27
|
}
|
package/src/db/index.ts
CHANGED
|
@@ -44,6 +44,7 @@ export * from "./task-comment-through-async.ts";
|
|
|
44
44
|
export * from "./deploy-events.ts";
|
|
45
45
|
export * from "./deploy-events-async.ts";
|
|
46
46
|
export * from "./integrations.ts";
|
|
47
|
+
export * from "./integrations-async.ts";
|
|
47
48
|
export * from "./pairs.ts";
|
|
48
49
|
export * from "./artifacts.ts";
|
|
49
50
|
export * from "./artifact-browse.ts";
|
|
@@ -75,6 +76,7 @@ export * from "./orchestrators-async.ts";
|
|
|
75
76
|
export * from "./hosts.ts";
|
|
76
77
|
export * from "./hosts-async.ts";
|
|
77
78
|
export type { HostRegistrationEvent, HostRegistrationInput, HostRegistrationResult } from "./hosts-registration.ts";
|
|
79
|
+
export { conflictingHardwareFields } from "./hosts-registration.ts";
|
|
78
80
|
export * from "./workspaces.ts";
|
|
79
81
|
export * from "./workspace-writes.ts";
|
|
80
82
|
export * from "./workspace-writes-async.ts";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { getGateway } from "./gateway.ts";
|
|
2
|
+
import type { IntegrationRegistryInput, reconcileIntegrationRegistry } from "./integrations.ts";
|
|
3
|
+
|
|
4
|
+
export const listIntegrationTaskStatsAsync = () => getGateway().read("integrations.taskStats", undefined);
|
|
5
|
+
|
|
6
|
+
export async function reconcileIntegrationRegistryAsync(configured: IntegrationRegistryInput[], observedSources: string[]): Promise<ReturnType<typeof reconcileIntegrationRegistry>> {
|
|
7
|
+
return await getGateway().write("integrations.reconcileRegistry", { configured, observedSources }) as unknown as ReturnType<typeof reconcileIntegrationRegistry>;
|
|
8
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { listIntegrationTaskStats, reconcileIntegrationRegistry, type IntegrationRegistryInput } from "./integrations.ts";
|
|
2
|
+
import type { WriterOpSpec } from "./write-ops.ts";
|
|
3
|
+
|
|
4
|
+
export const INTEGRATIONS_READ_OPS = {
|
|
5
|
+
"integrations.taskStats": () => listIntegrationTaskStats(),
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export const INTEGRATIONS_WRITE_OPS: Readonly<Record<string, WriterOpSpec>> = {
|
|
9
|
+
"integrations.reconcileRegistry": {
|
|
10
|
+
offLoop: true,
|
|
11
|
+
idempotent: true,
|
|
12
|
+
fn: (args: { configured: IntegrationRegistryInput[]; observedSources: string[] }, ctx) =>
|
|
13
|
+
reconcileIntegrationRegistry(args.configured, args.observedSources, ctx.now),
|
|
14
|
+
},
|
|
15
|
+
};
|
package/src/db/integrations.ts
CHANGED
|
@@ -1,18 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isRecord, stringValue, isMechanicalMessageKind } from "@humwick/sdk";
|
|
3
|
-
import { ORCHESTRATOR_PROTOCOL_VERSION, VERSION } from "../config.ts";
|
|
1
|
+
import { stringValue } from "@humwick/sdk";
|
|
4
2
|
import { parseJson } from "../utils";
|
|
5
|
-
import { isLiveIsolatedWorkspace } from "../workspace-phase";
|
|
6
|
-
import {
|
|
7
|
-
CONTRACT_REQUIREMENTS,
|
|
8
|
-
contractCompatibility,
|
|
9
|
-
parseRuntimeCapabilities,
|
|
10
|
-
parseRuntimeContracts,
|
|
11
|
-
parseRuntimePackage,
|
|
12
|
-
type RuntimeContracts,
|
|
13
|
-
} from "../contracts";
|
|
14
|
-
import { STALE_TTL_MS, DAY_MS, CLAIM_LEASE_MS, POOL_CLAIM_LEASE_MS, WORKSPACE_MERGE_LEASE_MS } from "../config";
|
|
15
|
-
import { matchAgents } from "../agent-ref";
|
|
16
3
|
import { normalizeTags, parseStringArray } from "./agents.ts";
|
|
17
4
|
import { linkAttachmentRefs, validateAttachmentRefs } from "./artifacts.ts";
|
|
18
5
|
import { ValidationError, getDb, writeTransaction } from "./connection.ts";
|
|
@@ -143,9 +130,7 @@ function integrationTaskMetadata(
|
|
|
143
130
|
};
|
|
144
131
|
}
|
|
145
132
|
|
|
146
|
-
|
|
147
|
-
export function listIntegrationTaskStats(): IntegrationTaskStats[] {
|
|
148
|
-
const rows = getDb().query(`
|
|
133
|
+
export const INTEGRATION_TASK_STATS_SQL = `
|
|
149
134
|
SELECT
|
|
150
135
|
coalesce(json_extract(metadata, '$.relayIntegrationName'), source) AS source,
|
|
151
136
|
COUNT(*) AS tasks,
|
|
@@ -157,7 +142,10 @@ export function listIntegrationTaskStats(): IntegrationTaskStats[] {
|
|
|
157
142
|
FROM tasks
|
|
158
143
|
GROUP BY coalesce(json_extract(metadata, '$.relayIntegrationName'), source)
|
|
159
144
|
ORDER BY last_seen_at DESC, source ASC
|
|
160
|
-
|
|
145
|
+
`;
|
|
146
|
+
|
|
147
|
+
export function listIntegrationTaskStats(): IntegrationTaskStats[] {
|
|
148
|
+
const rows = getDb().query(INTEGRATION_TASK_STATS_SQL).all() as any[];
|
|
161
149
|
|
|
162
150
|
return rows.map((row) => ({
|
|
163
151
|
source: row.source,
|
|
@@ -170,7 +158,7 @@ export function listIntegrationTaskStats(): IntegrationTaskStats[] {
|
|
|
170
158
|
}));
|
|
171
159
|
}
|
|
172
160
|
|
|
173
|
-
type IntegrationRegistryInput = {
|
|
161
|
+
export type IntegrationRegistryInput = {
|
|
174
162
|
name: string;
|
|
175
163
|
displayName?: string;
|
|
176
164
|
description?: string;
|
|
@@ -220,10 +208,9 @@ function rowToIntegrationRegistry(row: any): Omit<IntegrationSummary, "configure
|
|
|
220
208
|
};
|
|
221
209
|
}
|
|
222
210
|
|
|
223
|
-
export function upsertIntegrationRegistry(input: IntegrationRegistryInput): ReturnType<typeof rowToIntegrationRegistry> {
|
|
211
|
+
export function upsertIntegrationRegistry(input: IntegrationRegistryInput, now = Date.now()): ReturnType<typeof rowToIntegrationRegistry> {
|
|
224
212
|
const name = stringValue(input.name);
|
|
225
213
|
if (!name) throw new ValidationError("integration name required");
|
|
226
|
-
const now = Date.now();
|
|
227
214
|
getDb().query(`
|
|
228
215
|
INSERT INTO integration_registry (
|
|
229
216
|
name, display_name, description, enabled, scopes, targets, channels, type, icon, accent_color,
|
|
@@ -295,3 +282,10 @@ export function isIntegrationRegistryEnabled(name: string): boolean {
|
|
|
295
282
|
const registry = getIntegrationRegistry(name);
|
|
296
283
|
return registry?.enabled !== false;
|
|
297
284
|
}
|
|
285
|
+
|
|
286
|
+
// GET reconciliation preserves registry precedence, but runs entirely on the writer (#3740).
|
|
287
|
+
export function reconcileIntegrationRegistry(configured: IntegrationRegistryInput[], observedSources: string[], now: number): ReturnType<typeof listIntegrationRegistry> {
|
|
288
|
+
for (const input of configured) upsertIntegrationRegistry({ ...input, source: "env" }, now);
|
|
289
|
+
for (const name of observedSources) upsertIntegrationRegistry({ name, enabled: true, source: "observed" }, now);
|
|
290
|
+
return listIntegrationRegistry();
|
|
291
|
+
}
|
|
@@ -40,13 +40,13 @@ function cleanText(value: string | undefined, field: string, max: number): strin
|
|
|
40
40
|
return cleaned;
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
export function associateIssue(issueRefId: string, entityType: IssueAssociationEntityType, entityId: string, relation?: IssueRefRelation): IssueAssociation {
|
|
43
|
+
export function associateIssue(issueRefId: string, entityType: IssueAssociationEntityType, entityId: string, relation?: IssueRefRelation, submittedAt: number = Date.now()): IssueAssociation {
|
|
44
44
|
const cleanedIssueRefId = cleanText(issueRefId, "issueRefId", 120);
|
|
45
45
|
if (!getIssueRef(cleanedIssueRefId)) throw new ValidationError(`issue ref ${cleanedIssueRefId} not found`);
|
|
46
46
|
const cleanedEntityType = cleanEntityType(entityType);
|
|
47
47
|
const cleanedEntityId = cleanText(entityId, "entityId", 240);
|
|
48
48
|
const cleanedRelation = optionalEnum(relation, "relation", ISSUE_REF_RELATIONS);
|
|
49
|
-
const now =
|
|
49
|
+
const now = submittedAt;
|
|
50
50
|
getDb().query(`
|
|
51
51
|
INSERT INTO issue_associations (issue_ref_id, entity_type, entity_id, created_at, relation)
|
|
52
52
|
VALUES (?, ?, ?, ?, ?)
|
|
@@ -5,7 +5,7 @@ const ISSUE_LIFECYCLE_STATUSES = ["succeeded", "failed"] as const;
|
|
|
5
5
|
type IssueLifecycleAction = (typeof ISSUE_LIFECYCLE_ACTIONS)[number];
|
|
6
6
|
type IssueLifecycleStatus = (typeof ISSUE_LIFECYCLE_STATUSES)[number];
|
|
7
7
|
|
|
8
|
-
interface IssueLifecycleActionRecord {
|
|
8
|
+
export interface IssueLifecycleActionRecord {
|
|
9
9
|
id: number;
|
|
10
10
|
issueRefId: string;
|
|
11
11
|
action: IssueLifecycleAction;
|
|
@@ -24,7 +24,7 @@ interface IssueLifecycleActionRecord {
|
|
|
24
24
|
updatedAt: number;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
-
interface UpsertIssueLifecycleActionInput {
|
|
27
|
+
export interface UpsertIssueLifecycleActionInput {
|
|
28
28
|
issueRefId: string;
|
|
29
29
|
action: IssueLifecycleAction;
|
|
30
30
|
landKey: string;
|
|
@@ -150,8 +150,7 @@ export function listSuccessfulCloseActionsForCommit(input: { commitSha?: string;
|
|
|
150
150
|
return rows.map(rowToIssueLifecycleAction);
|
|
151
151
|
}
|
|
152
152
|
|
|
153
|
-
export function upsertIssueLifecycleAction(input: UpsertIssueLifecycleActionInput): IssueLifecycleActionRecord {
|
|
154
|
-
const now = Date.now();
|
|
153
|
+
export function upsertIssueLifecycleAction(input: UpsertIssueLifecycleActionInput, now: number = Date.now()): IssueLifecycleActionRecord {
|
|
155
154
|
const issueRefId = cleanRequiredText(input.issueRefId, "issueRefId", 120);
|
|
156
155
|
const action = cleanAction(input.action);
|
|
157
156
|
const landKey = cleanRequiredText(input.landKey, "landKey", 240);
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// #1870 S7 — async facades for the issue-ref writer ops (`issue-refs-write-ops.ts`).
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { getGateway } from "./gateway.ts";
|
|
4
|
+
import type { IssueRef } from "../types";
|
|
5
|
+
import type { IssueTrackerIssueSummary } from "../issue-tracker/adapter";
|
|
6
|
+
import type { ListIssueRefsOptions, ResolveIssueRefByExternalKeyInput, ResolveIssueRefFromStringInput, UpdateIssueRefInput, UpsertIssueRefInput } from "./issue-refs.ts";
|
|
7
|
+
import type { IssueLifecycleActionRecord, UpsertIssueLifecycleActionInput } from "./issue-lifecycle.ts";
|
|
8
|
+
|
|
9
|
+
const write = <T>(op: string, args: unknown, opts?: { idempotencyKey?: string }) => getGateway().write(op, args as never, opts) as unknown as Promise<T>;
|
|
10
|
+
|
|
11
|
+
const read = <T>(op: string, args: unknown = {}) => getGateway().read(op as never, args as never) as unknown as Promise<T>;
|
|
12
|
+
|
|
13
|
+
export const listIssueRefsAsync = (opts: ListIssueRefsOptions = {}) => read<IssueRef[]>("issueRefs.list", opts);
|
|
14
|
+
export const upsertIssueRefAsync = (input: UpsertIssueRefInput) => write<IssueRef>("issueRefs.upsert", input);
|
|
15
|
+
export const resolveIssueRefByExternalKeyAsync = (input: ResolveIssueRefByExternalKeyInput) => write<IssueRef>("issueRefs.resolveExternalKey", input);
|
|
16
|
+
export const resolveIssueRefFromStringAsync = (input: ResolveIssueRefFromStringInput) => write<IssueRef>("issueRefs.resolveFromString", input);
|
|
17
|
+
export const updateIssueRefAsync = (id: string, input: UpdateIssueRefInput) => write<IssueRef | null>("issueRefs.update", { id, input });
|
|
18
|
+
export const deleteIssueRefAsync = (id: string) => write<boolean>("issueRefs.delete", { id });
|
|
19
|
+
/** The tracker answered: clear the not-found streak and cache its status, in one write. */
|
|
20
|
+
export const recordIssueRefLiveStatusAsync = (id: string, input: UpdateIssueRefInput) => write<IssueRef | null>("issueRefs.recordLiveStatus", { id, input });
|
|
21
|
+
export const putIssueHierarchyAsync = (id: string, children: IssueTrackerIssueSummary[]) => write<void>("issueRefs.putHierarchy", { id, children });
|
|
22
|
+
export const recordIssueTrackerNotFoundAsync = (id: string) => write<number>("issueRefs.recordNotFound", { id }, { idempotencyKey: randomUUID() });
|
|
23
|
+
export const upsertIssueLifecycleActionAsync = (input: UpsertIssueLifecycleActionInput) => write<IssueLifecycleActionRecord>("issueLifecycle.upsertAction", input);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// #3799 — the issue-ref listing on the reader pool (it ran as a cold main-thread scan, 10 s on swap-bound I/O).
|
|
2
|
+
import { listIssueRefs, type ListIssueRefsOptions } from "./issue-refs.ts";
|
|
3
|
+
|
|
4
|
+
export const ISSUE_REFS_READ_OPS = {
|
|
5
|
+
"issueRefs.list": (args: ListIssueRefsOptions) => listIssueRefs(args),
|
|
6
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// #1870 S7 — issue-ref cache, tracker refresh state and lifecycle ledger writes run on the writer thread.
|
|
2
|
+
// Every body is plain SQL against its own tables. All but `recordNotFound` converge on replay: upserts are
|
|
3
|
+
// keyed by (provider, repo, externalKey) or (issue, action, landKey), updates re-set the same columns.
|
|
4
|
+
import { resolveIssueRefByExternalKey, resolveIssueRefFromString, updateIssueRef, upsertIssueRef, deleteIssueRef, type ResolveIssueRefByExternalKeyInput, type ResolveIssueRefFromStringInput, type UpdateIssueRefInput, type UpsertIssueRefInput } from "./issue-refs.ts";
|
|
5
|
+
import { clearIssueTrackerNotFound, putIssueHierarchy, recordIssueTrackerNotFound } from "./long-running-work.ts";
|
|
6
|
+
import { upsertIssueLifecycleAction, type UpsertIssueLifecycleActionInput } from "./issue-lifecycle.ts";
|
|
7
|
+
import type { IssueTrackerIssueSummary } from "../issue-tracker/adapter";
|
|
8
|
+
import type { WriterOpContext, WriterOpSpec } from "./write-ops.ts";
|
|
9
|
+
|
|
10
|
+
export const ISSUE_REFS_WRITE_OPS: Readonly<Record<string, WriterOpSpec>> = Object.freeze({
|
|
11
|
+
"issueRefs.upsert": { offLoop: true, idempotent: true, fn: (args: UpsertIssueRefInput, ctx: WriterOpContext) => upsertIssueRef(args, ctx.now) },
|
|
12
|
+
"issueRefs.resolveExternalKey": { offLoop: true, idempotent: true, fn: (args: ResolveIssueRefByExternalKeyInput, ctx: WriterOpContext) => resolveIssueRefByExternalKey(args, ctx.now) },
|
|
13
|
+
"issueRefs.resolveFromString": { offLoop: true, idempotent: true, fn: (args: ResolveIssueRefFromStringInput, ctx: WriterOpContext) => resolveIssueRefFromString(args, ctx.now) },
|
|
14
|
+
"issueRefs.update": { offLoop: true, idempotent: true, fn: (args: { id: string; input: UpdateIssueRefInput }, ctx: WriterOpContext) => updateIssueRef(args.id, args.input, ctx.now) },
|
|
15
|
+
"issueRefs.delete": { offLoop: true, idempotent: true, fn: (args: { id: string }) => deleteIssueRef(args.id) },
|
|
16
|
+
// A tracker answered for this ref: the not-found streak ends and the cached status follows the tracker.
|
|
17
|
+
"issueRefs.recordLiveStatus": {
|
|
18
|
+
offLoop: true,
|
|
19
|
+
idempotent: true,
|
|
20
|
+
fn: (args: { id: string; input: UpdateIssueRefInput }, ctx: WriterOpContext) => {
|
|
21
|
+
clearIssueTrackerNotFound(args.id);
|
|
22
|
+
return updateIssueRef(args.id, args.input, ctx.now);
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
"issueRefs.putHierarchy": { offLoop: true, idempotent: true, fn: (args: { id: string; children: IssueTrackerIssueSummary[] }, ctx: WriterOpContext) => putIssueHierarchy(args.id, args.children, ctx.now) },
|
|
26
|
+
// Increments a counter, so a replay would double-count: keyed.
|
|
27
|
+
"issueRefs.recordNotFound": { offLoop: true, idempotent: false, fn: (args: { id: string }) => recordIssueTrackerNotFound(args.id) },
|
|
28
|
+
"issueLifecycle.upsertAction": { offLoop: true, idempotent: true, fn: (args: UpsertIssueLifecycleActionInput, ctx: WriterOpContext) => upsertIssueLifecycleAction(args, ctx.now) },
|
|
29
|
+
});
|
package/src/db/issue-refs.ts
CHANGED
|
@@ -151,7 +151,7 @@ export function getIssueRefByExternalKey(provider: IssueProvider, repo: string,
|
|
|
151
151
|
return row ? rowToIssueRef(row) : null;
|
|
152
152
|
}
|
|
153
153
|
|
|
154
|
-
export function upsertIssueRef(input: UpsertIssueRefInput): IssueRef {
|
|
154
|
+
export function upsertIssueRef(input: UpsertIssueRefInput, now: number = Date.now()): IssueRef {
|
|
155
155
|
const provider = cleanProvider(input.provider);
|
|
156
156
|
const repo = requiredText(input.repo, "repo", 500);
|
|
157
157
|
const externalKey = requiredText(input.externalKey, "externalKey", 240);
|
|
@@ -162,7 +162,6 @@ export function upsertIssueRef(input: UpsertIssueRefInput): IssueRef {
|
|
|
162
162
|
// An open/unknown upsert clears a stale closeReason; an explicit closeReason requires closed.
|
|
163
163
|
const closeReason = input.closeReason === undefined && status !== "closed" ? undefined : cleanCloseReason(input.closeReason, status) ?? (status === "closed" ? existing?.closeReason : undefined);
|
|
164
164
|
const statusSyncedAt = cleanSyncedAt(input.statusSyncedAt);
|
|
165
|
-
const now = Date.now();
|
|
166
165
|
if (existing) {
|
|
167
166
|
getDb().query(`
|
|
168
167
|
UPDATE issue_refs
|
|
@@ -179,7 +178,7 @@ export function upsertIssueRef(input: UpsertIssueRefInput): IssueRef {
|
|
|
179
178
|
return getIssueRef(id)!;
|
|
180
179
|
}
|
|
181
180
|
|
|
182
|
-
export function resolveIssueRefByExternalKey(input: ResolveIssueRefByExternalKeyInput): IssueRef {
|
|
181
|
+
export function resolveIssueRefByExternalKey(input: ResolveIssueRefByExternalKeyInput, now: number = Date.now()): IssueRef {
|
|
183
182
|
const provider = cleanProvider(input.provider);
|
|
184
183
|
const repo = requiredText(input.repo, "repo", 500);
|
|
185
184
|
const externalKey = requiredText(input.externalKey, "externalKey", 240);
|
|
@@ -196,7 +195,7 @@ export function resolveIssueRefByExternalKey(input: ResolveIssueRefByExternalKey
|
|
|
196
195
|
status: input.status ?? existing?.status,
|
|
197
196
|
closeReason: input.closeReason ?? (input.status !== undefined ? undefined : existing?.closeReason),
|
|
198
197
|
statusSyncedAt: input.statusSyncedAt ?? existing?.statusSyncedAt,
|
|
199
|
-
});
|
|
198
|
+
}, now);
|
|
200
199
|
}
|
|
201
200
|
|
|
202
201
|
// A BARE `#123` ref carries no repo, so it only resolves when the caller supplies a
|
|
@@ -231,7 +230,7 @@ export function issueRefForRefString(ref: string, defaultRepo?: string): IssueRe
|
|
|
231
230
|
return getIssueRefByExternalKey("github", parsed.repo, parsed.externalKey);
|
|
232
231
|
}
|
|
233
232
|
|
|
234
|
-
export function resolveIssueRefFromString(input: ResolveIssueRefFromStringInput): IssueRef {
|
|
233
|
+
export function resolveIssueRefFromString(input: ResolveIssueRefFromStringInput, now: number = Date.now()): IssueRef {
|
|
235
234
|
const ref = requiredText(input.ref, "ref", 1000);
|
|
236
235
|
if (ref.startsWith("issue_")) {
|
|
237
236
|
const existing = getIssueRef(ref);
|
|
@@ -250,10 +249,11 @@ export function resolveIssueRefFromString(input: ResolveIssueRefFromStringInput)
|
|
|
250
249
|
status: input.status,
|
|
251
250
|
closeReason: input.closeReason,
|
|
252
251
|
statusSyncedAt: input.statusSyncedAt,
|
|
253
|
-
});
|
|
252
|
+
}, now);
|
|
254
253
|
}
|
|
255
254
|
|
|
256
|
-
|
|
255
|
+
/** Listing SQL, exported so the query-plan gate pins the production statement (#3799). */
|
|
256
|
+
export function buildListIssueRefsQuery(opts: ListIssueRefsOptions = {}): { sql: string; params: Array<string | number> } {
|
|
257
257
|
const conditions: string[] = [];
|
|
258
258
|
const params: Array<string | number> = [];
|
|
259
259
|
if (opts.provider) {
|
|
@@ -272,16 +272,15 @@ export function listIssueRefs(opts: ListIssueRefsOptions = {}): IssueRef[] {
|
|
|
272
272
|
if (!Number.isSafeInteger(limit) || limit <= 0 || limit > 500) throw new ValidationError("limit must be between 1 and 500");
|
|
273
273
|
params.push(limit);
|
|
274
274
|
const where = conditions.length ? `WHERE ${conditions.join(" AND ")}` : "";
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
return rows.map(rowToIssueRef);
|
|
275
|
+
return { sql: `SELECT * FROM issue_refs ${where} ORDER BY updated_at DESC, created_at DESC, id DESC LIMIT ?`, params };
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export function listIssueRefs(opts: ListIssueRefsOptions = {}): IssueRef[] {
|
|
279
|
+
const { sql, params } = buildListIssueRefsQuery(opts);
|
|
280
|
+
return (getDb().query(sql).all(...params) as IssueRefRow[]).map(rowToIssueRef);
|
|
282
281
|
}
|
|
283
282
|
|
|
284
|
-
export function updateIssueRef(id: string, input: UpdateIssueRefInput): IssueRef | null {
|
|
283
|
+
export function updateIssueRef(id: string, input: UpdateIssueRefInput, now: number = Date.now()): IssueRef | null {
|
|
285
284
|
const existing = getIssueRef(requiredText(id, "id", 120));
|
|
286
285
|
if (!existing) return null;
|
|
287
286
|
const url = optionalText(input.url, "url", 2000) ?? existing.url;
|
|
@@ -295,7 +294,7 @@ export function updateIssueRef(id: string, input: UpdateIssueRefInput): IssueRef
|
|
|
295
294
|
UPDATE issue_refs
|
|
296
295
|
SET url = ?, title = ?, status = ?, close_reason = ?, status_synced_at = ?, updated_at = ?
|
|
297
296
|
WHERE id = ?
|
|
298
|
-
`).run(url, title ?? null, status, closeReason ?? null, statusSyncedAt ?? null,
|
|
297
|
+
`).run(url, title ?? null, status, closeReason ?? null, statusSyncedAt ?? null, now, existing.id);
|
|
299
298
|
return getIssueRef(existing.id);
|
|
300
299
|
}
|
|
301
300
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ensureEventLogSchema } from "@humwick/kernel/event-log";
|
|
2
|
+
import { ensureKernelReplayRetentionSchema } from "@humwick/kernel/sqlite-kernel-persistence";
|
|
2
3
|
import { getDb } from "./connection.ts";
|
|
3
4
|
|
|
4
5
|
/**
|
|
@@ -11,4 +12,5 @@ import { getDb } from "./connection.ts";
|
|
|
11
12
|
*/
|
|
12
13
|
export function ensureKernelEventLogSchema(): void {
|
|
13
14
|
ensureEventLogSchema(getDb());
|
|
15
|
+
ensureKernelReplayRetentionSchema(getDb(), Date.now());
|
|
14
16
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// #3363 — reads of the Kernel landing boundary and incident entities (kernel/landing-incident.ts) for
|
|
2
2
|
// the red-main controller. Writes go through the Kernel ops (src/services/red-main-incident.ts).
|
|
3
3
|
import type { LandBoundary, RedMainIncident } from "@humwick/kernel/landing-incident";
|
|
4
|
-
import type
|
|
4
|
+
import { ciRunUrl, type ShippingFailingTest, type ShippingRedMain } from "@humwick/sdk";
|
|
5
|
+
import type { BaseKnownFailure } from "@humwick/sdk/base-known-failures";
|
|
5
6
|
import { getDb } from "./connection.ts";
|
|
6
7
|
import { LAND_INCIDENT_TABLE, OPEN_INCIDENT_STATES } from "./land-incident-eligibility.ts";
|
|
7
8
|
|
|
@@ -81,12 +82,57 @@ export function openRedMainIncidentForRemote(remote: string): RedMainIncident |
|
|
|
81
82
|
return row ? incident(row) : null;
|
|
82
83
|
}
|
|
83
84
|
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
type OpenIncidentRow = Record<string, unknown> & { redRemote: string; redSha: string };
|
|
86
|
+
|
|
87
|
+
/** Open incidents with their red boundary. `i.*`: the Kernel adds a newer field's column only when the
|
|
88
|
+
* landing module starts, so a read right after deploy must not name it (#3362 §11 failingTests). */
|
|
89
|
+
function openIncidentRows(remote?: string): OpenIncidentRow[] {
|
|
86
90
|
if (!tablesReady()) return [];
|
|
87
|
-
return getDb().query(`SELECT i.
|
|
91
|
+
return getDb().query(`SELECT i.*, b.remote AS redRemote, b.landedTipSha AS redSha
|
|
88
92
|
FROM ${LAND_INCIDENT_TABLE} i JOIN ${BOUNDARY_TABLE} b ON b.id = i.redBoundaryId
|
|
89
|
-
WHERE i.state IN ${OPEN_STATES_SQL} ORDER BY i.openedAt, i.id`).all() as
|
|
93
|
+
WHERE i.state IN ${OPEN_STATES_SQL} AND (? IS NULL OR b.remote = ?) ORDER BY i.openedAt, i.id`).all(remote ?? null, remote ?? null) as OpenIncidentRow[];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function failingTestsOf(row: Record<string, unknown>): ShippingFailingTest[] {
|
|
97
|
+
if (typeof row.failingTests !== "string") return [];
|
|
98
|
+
try {
|
|
99
|
+
const parsed: unknown = JSON.parse(row.failingTests);
|
|
100
|
+
return Array.isArray(parsed) ? parsed.filter((entry): entry is ShippingFailingTest =>
|
|
101
|
+
typeof entry?.file === "string" && typeof entry?.name === "string") : [];
|
|
102
|
+
} catch {
|
|
103
|
+
console.warn(`[red-main] incident ${String(row.id)} has unreadable failingTests; showing none`);
|
|
104
|
+
return [];
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
function culpritTaskIds(row: Record<string, unknown>): number[] {
|
|
109
|
+
const ids = JSON.parse(String(row.culpritBoundaryIds ?? "[]")) as string[];
|
|
110
|
+
if (!ids.length) return [];
|
|
111
|
+
const rows = getDb().query(`SELECT DISTINCT taskId FROM ${BOUNDARY_TABLE} WHERE taskId IS NOT NULL AND id IN (${ids.map(() => "?").join(",")}) ORDER BY taskId`)
|
|
112
|
+
.all(...ids) as { taskId: number }[];
|
|
113
|
+
return rows.map((entry) => entry.taskId);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/** The Shipping page's red-main lines: each open incident with its red sha, failing cases, owners and run. */
|
|
117
|
+
export function openRedMainLines(): ShippingRedMain[] {
|
|
118
|
+
return openIncidentRows().map((row) => {
|
|
119
|
+
const failingTests = failingTestsOf(row);
|
|
120
|
+
const ownerTaskIds = culpritTaskIds(row);
|
|
121
|
+
return {
|
|
122
|
+
incidentId: String(row.id), laneKey: String(row.laneKey), state: String(row.state),
|
|
123
|
+
...(row.mainFailurePolicy ? { mainFailurePolicy: row.mainFailurePolicy as "stop" | "advisory" } : {}),
|
|
124
|
+
remote: row.redRemote, sha: row.redSha,
|
|
125
|
+
runUrl: ciRunUrl(row.redRemote, Number(row.ciRunId), Number(row.ciAttempt)),
|
|
126
|
+
...(failingTests.length ? { failingTests } : {}),
|
|
127
|
+
...(ownerTaskIds.length ? { ownerTaskIds } : {}),
|
|
128
|
+
};
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/** #3362 §11: failing cases already present on `remote`'s main, which delivery gates hold out of unrelated runs. */
|
|
133
|
+
export function baseKnownFailures(remote: string): BaseKnownFailure[] {
|
|
134
|
+
return openIncidentRows(remote).flatMap((row) =>
|
|
135
|
+
failingTestsOf(row).map((test) => ({ ...test, incidentId: String(row.id), sha: row.redSha })));
|
|
90
136
|
}
|
|
91
137
|
|
|
92
138
|
/** #3381 — whether any partial land happened (for `remote`, or anywhere when omitted): a boundary or a
|
|
@@ -110,7 +110,7 @@ export interface InsertLandGateAttestationInput extends Omit<LandGateAttestation
|
|
|
110
110
|
* can legitimately land twice (a revert-and-reland, a retried push), and the FIRST green attestation
|
|
111
111
|
* is as true as the second — so a conflict keeps the original rather than churning the row.
|
|
112
112
|
*/
|
|
113
|
-
export function insertLandGateAttestation(input: InsertLandGateAttestationInput): LandGateAttestationRecord {
|
|
113
|
+
export function insertLandGateAttestation(input: InsertLandGateAttestationInput, submittedAt: number = Date.now()): LandGateAttestationRecord {
|
|
114
114
|
const record = decodeLandGateAttestationRow({
|
|
115
115
|
repo: input.repo,
|
|
116
116
|
tree_sha: input.treeSha,
|
|
@@ -121,7 +121,7 @@ export function insertLandGateAttestation(input: InsertLandGateAttestationInput)
|
|
|
121
121
|
gate_names: JSON.stringify(input.gateNames),
|
|
122
122
|
gates_ran: input.gatesRan,
|
|
123
123
|
workspace_id: input.workspaceId ?? null,
|
|
124
|
-
attested_at: input.attestedAt ??
|
|
124
|
+
attested_at: input.attestedAt ?? submittedAt,
|
|
125
125
|
suite_coverage: input.suiteCoverage ?? null,
|
|
126
126
|
});
|
|
127
127
|
getDb().query(`
|
|
@@ -110,7 +110,7 @@ function receiptId(input: InsertLandingReceiptInput): string {
|
|
|
110
110
|
return `landing_${createHash("sha256").update(key).digest("hex").slice(0, 24)}`;
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
export function insertLandingReceipt(input: InsertLandingReceiptInput): LandingReceipt {
|
|
113
|
+
export function insertLandingReceipt(input: InsertLandingReceiptInput, submittedAt: number = Date.now()): LandingReceipt {
|
|
114
114
|
const receipt: LandingReceipt = decodeLandingReceiptRow({
|
|
115
115
|
id: receiptId(input),
|
|
116
116
|
project_id: input.projectId ?? null,
|
|
@@ -127,7 +127,7 @@ export function insertLandingReceipt(input: InsertLandingReceiptInput): LandingR
|
|
|
127
127
|
team_id: input.teamId ?? null,
|
|
128
128
|
orchestrator_id: input.orchestratorId ?? null,
|
|
129
129
|
host: input.host ?? null,
|
|
130
|
-
landed_at: input.landedAt ??
|
|
130
|
+
landed_at: input.landedAt ?? submittedAt,
|
|
131
131
|
});
|
|
132
132
|
getDb().query(`
|
|
133
133
|
INSERT INTO landing_receipts (
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { getDb } from "./connection";
|
|
2
|
+
import type { ContextState } from "../types";
|
|
3
|
+
export function persistAdvisoryContext(agentId: string, context: ContextState): void {
|
|
4
|
+
getDb().query("UPDATE agents SET context_state = ? WHERE id = ?").run(JSON.stringify(context), agentId);
|
|
5
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { getGateway } from "./gateway";
|
|
3
|
+
import type { clearAgentNotice, recordTerminalEvent } from "./terminal-events";
|
|
4
|
+
import type { recordCrashReport } from "./crash-reports";
|
|
5
|
+
import type { stampSpawnPrincipal } from "./agent-ownership";
|
|
6
|
+
import type { markSpawnRegistrationConfirmed } from "../commands-db";
|
|
7
|
+
import type { seedSpawnPromptMirror } from "./message-reads";
|
|
8
|
+
import type { resolveQueuedPolicyMessages, resolveQueuedDirectMessages } from "./delivery";
|
|
9
|
+
import type { resolveQueuedCoordinatorMessages } from "./coordinator-delivery";
|
|
10
|
+
import type { updateManagedAgentState } from "../config-store";
|
|
11
|
+
import type { deleteWorkspace } from "./workspaces";
|
|
12
|
+
import type { addSubscription, removeSubscription, removeSubscriptionsForTask } from "./notification-subscriptions";
|
|
13
|
+
|
|
14
|
+
export function clearAgentNoticeAsync(...args: Parameters<typeof clearAgentNotice>): Promise<ReturnType<typeof clearAgentNotice>> {
|
|
15
|
+
return getGateway().write("lifecycleTail.clearAgentNotice", args) as unknown as Promise<ReturnType<typeof clearAgentNotice>>;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function recordTerminalEventAsync(...args: Parameters<typeof recordTerminalEvent>): Promise<ReturnType<typeof recordTerminalEvent>> {
|
|
19
|
+
return getGateway().write("lifecycleTail.recordTerminalEvent", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof recordTerminalEvent>>;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function recordCrashReportAsync(...args: Parameters<typeof recordCrashReport>): Promise<ReturnType<typeof recordCrashReport>> {
|
|
23
|
+
return getGateway().write("lifecycleTail.recordCrashReport", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof recordCrashReport>>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function stampSpawnPrincipalAsync(...args: Parameters<typeof stampSpawnPrincipal>): Promise<ReturnType<typeof stampSpawnPrincipal>> {
|
|
27
|
+
return getGateway().write("lifecycleTail.stampSpawnPrincipal", args) as unknown as Promise<ReturnType<typeof stampSpawnPrincipal>>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function markSpawnRegistrationConfirmedAsync(...args: Parameters<typeof markSpawnRegistrationConfirmed>): Promise<ReturnType<typeof markSpawnRegistrationConfirmed>> {
|
|
31
|
+
return getGateway().write("lifecycleTail.markSpawnRegistrationConfirmed", args) as unknown as Promise<ReturnType<typeof markSpawnRegistrationConfirmed>>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function seedSpawnPromptMirrorAsync(...args: Parameters<typeof seedSpawnPromptMirror>): Promise<ReturnType<typeof seedSpawnPromptMirror>> {
|
|
35
|
+
return getGateway().write("lifecycleTail.seedSpawnPromptMirror", args) as unknown as Promise<ReturnType<typeof seedSpawnPromptMirror>>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export function resolveQueuedPolicyMessagesAsync(...args: Parameters<typeof resolveQueuedPolicyMessages>): Promise<ReturnType<typeof resolveQueuedPolicyMessages>> {
|
|
39
|
+
return getGateway().write("lifecycleTail.resolveQueuedPolicyMessages", args) as unknown as Promise<ReturnType<typeof resolveQueuedPolicyMessages>>;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function resolveQueuedDirectMessagesAsync(...args: Parameters<typeof resolveQueuedDirectMessages>): Promise<ReturnType<typeof resolveQueuedDirectMessages>> {
|
|
43
|
+
return getGateway().write("lifecycleTail.resolveQueuedDirectMessages", args) as unknown as Promise<ReturnType<typeof resolveQueuedDirectMessages>>;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export function resolveQueuedCoordinatorMessagesAsync(...args: Parameters<typeof resolveQueuedCoordinatorMessages>): Promise<ReturnType<typeof resolveQueuedCoordinatorMessages>> {
|
|
47
|
+
return getGateway().write("lifecycleTail.resolveQueuedCoordinatorMessages", args) as unknown as Promise<ReturnType<typeof resolveQueuedCoordinatorMessages>>;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function updateManagedAgentStateAsync(...args: Parameters<typeof updateManagedAgentState>): Promise<ReturnType<typeof updateManagedAgentState>> {
|
|
51
|
+
return getGateway().write("lifecycleTail.updateManagedAgentState", args) as unknown as Promise<ReturnType<typeof updateManagedAgentState>>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export function deleteWorkspaceAsync(...args: Parameters<typeof deleteWorkspace>): Promise<ReturnType<typeof deleteWorkspace>> {
|
|
55
|
+
return getGateway().write("lifecycleTail.deleteWorkspace", args) as unknown as Promise<ReturnType<typeof deleteWorkspace>>;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function addSubscriptionAsync(...args: Parameters<typeof addSubscription>): Promise<ReturnType<typeof addSubscription>> {
|
|
59
|
+
return getGateway().write("lifecycleTail.addSubscription", args, { idempotencyKey: randomUUID() }) as unknown as Promise<ReturnType<typeof addSubscription>>;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export function removeSubscriptionAsync(...args: Parameters<typeof removeSubscription>): Promise<ReturnType<typeof removeSubscription>> {
|
|
63
|
+
return getGateway().write("lifecycleTail.removeSubscription", args) as unknown as Promise<ReturnType<typeof removeSubscription>>;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function removeSubscriptionsForTaskAsync(...args: Parameters<typeof removeSubscriptionsForTask>): Promise<ReturnType<typeof removeSubscriptionsForTask>> {
|
|
67
|
+
return getGateway().write("lifecycleTail.removeSubscriptionsForTask", args) as unknown as Promise<ReturnType<typeof removeSubscriptionsForTask>>;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export function addSubscriptionsAsync(inputs: Array<Parameters<typeof addSubscription>[0]>): Promise<Array<ReturnType<typeof addSubscription>>> {
|
|
71
|
+
return getGateway().write("notifications.subscriptions.addBatch", { inputs }, { idempotencyKey: randomUUID() }) as unknown as Promise<Array<ReturnType<typeof addSubscription>>>;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export function upsertManagedAgentStateAsync(...args: Parameters<typeof import("../config-store").upsertManagedAgentState>): Promise<ReturnType<typeof import("../config-store").upsertManagedAgentState>> {
|
|
75
|
+
return getGateway().write("lifecycleTail.upsertManagedAgentState", args) as unknown as Promise<ReturnType<typeof import("../config-store").upsertManagedAgentState>>;
|
|
76
|
+
}
|