@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
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// #3812 — backfill relay_plan_start/import into stored per-tool allowlists (the lean coordinator
|
|
2
|
+
// from #3472 froze before they existed, so tools/list never carried them).
|
|
3
|
+
// Narrow: only an include list already holding relay_plan_get, and not excluding the tool.
|
|
4
|
+
// json_insert, not parse+reserialize (#1456); patches `$.relay.tools` and its `sources` mirror, and
|
|
5
|
+
// the -v1-backup namespace, whose bytes are served while the matrix flag is off.
|
|
6
|
+
import { getDb } from "./connection.ts";
|
|
7
|
+
import { runMigrationOnce } from "./migration-marker.ts";
|
|
8
|
+
|
|
9
|
+
const PROFILE_NAMESPACES = ["agent-profile", "agent-profile-override", "agent-profile-override-v1-backup"] as const;
|
|
10
|
+
const SELECTION_PATHS = ["$.relay.tools", "$.sources.agentRelay.mcp"] as const;
|
|
11
|
+
const BACKFILLED_TOOLS = ["relay_plan_start", "relay_plan_import"] as const;
|
|
12
|
+
const EVIDENCE_TOOL = "relay_plan_get";
|
|
13
|
+
|
|
14
|
+
export function backfillPlanToolsIntoToolIncludes(): void {
|
|
15
|
+
runMigrationOnce("plan-tools-include-backfill-v1", () => {
|
|
16
|
+
const db = getDb();
|
|
17
|
+
const namespaces = PROFILE_NAMESPACES.map(() => "?").join(", ");
|
|
18
|
+
// The outer table is aliased: inside the subqueries a bare `value` binds to json_each.value.
|
|
19
|
+
const holds = (path: string, field: "include" | "exclude", tool: string) =>
|
|
20
|
+
`EXISTS (SELECT 1 FROM json_each(c.value, '${path}.${field}') je WHERE je.value = '${tool}')`;
|
|
21
|
+
db.transaction(() => {
|
|
22
|
+
for (const path of SELECTION_PATHS) {
|
|
23
|
+
for (const tool of BACKFILLED_TOOLS) {
|
|
24
|
+
db.query(
|
|
25
|
+
`UPDATE config AS c SET value = json_insert(c.value, '${path}.include[#]', ?)
|
|
26
|
+
WHERE c.namespace IN (${namespaces}) AND json_valid(c.value)
|
|
27
|
+
AND json_type(c.value, '${path}.include') = 'array'
|
|
28
|
+
AND ${holds(path, "include", EVIDENCE_TOOL)}
|
|
29
|
+
AND NOT ${holds(path, "include", tool)}
|
|
30
|
+
AND NOT ${holds(path, "exclude", tool)}`,
|
|
31
|
+
).run(tool, ...PROFILE_NAMESPACES);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
})();
|
|
35
|
+
});
|
|
36
|
+
}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { createPlanRow, deletePlan, replacePlanIfVersion, setPlanArchived } from "./plans.ts";
|
|
2
|
+
import { PLAN_READY_NOTICE_WRITE_OPS } from "./plan-ready-notices.ts";
|
|
2
3
|
import type { WriterOpContext, WriterOpSpec } from "./write-ops.ts";
|
|
3
4
|
|
|
4
5
|
export const PLANS_WRITE_OPS: Readonly<Record<string, WriterOpSpec>> = Object.freeze({
|
|
6
|
+
...PLAN_READY_NOTICE_WRITE_OPS,
|
|
5
7
|
"plans.create": { offLoop: true, idempotent: false, fn: (args: { input: Parameters<typeof createPlanRow>[0] }, ctx: WriterOpContext) => createPlanRow(args.input, ctx.now) },
|
|
6
8
|
"plans.replace": { offLoop: true, idempotent: false, fn: (args: { input: Parameters<typeof replacePlanIfVersion>[0]; changedBy?: string }, ctx: WriterOpContext) => replacePlanIfVersion(args.input, args.changedBy, ctx.now, false) },
|
|
7
9
|
"plans.setArchived": { offLoop: true, idempotent: true, fn: (args: { id: string; archived: boolean }, ctx: WriterOpContext) => setPlanArchived(args.id, args.archived, ctx.now) },
|
|
@@ -104,6 +104,11 @@ export function snapshotBufferedPresence(): PresenceSnapshot {
|
|
|
104
104
|
* current, and the caller's surrounding status/ready predicates constrain the match. */
|
|
105
105
|
export function bufferedLiveAgentIds(cutoff: number): string[] {
|
|
106
106
|
const ids: string[] = [];
|
|
107
|
+
const snapshot = writerPresenceSnapshot();
|
|
108
|
+
if (snapshot) {
|
|
109
|
+
for (const beat of snapshot) if (beat.lastSeen > cutoff) ids.push(beat.id);
|
|
110
|
+
return ids;
|
|
111
|
+
}
|
|
107
112
|
for (const [id, pending] of pendingPresence) {
|
|
108
113
|
if (pending.lastSeen > cutoff) ids.push(id);
|
|
109
114
|
}
|
package/src/db/presence-loop.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { framed } from "../hub-metrics";
|
|
1
2
|
import { assertMainThreadState } from "./main-thread-state";
|
|
2
3
|
// Lifecycle glue for the coalesced presence buffer. Kept outside agents.ts so its writer-op body
|
|
3
4
|
// never depends on the gateway-facing facade (ADR 0001 §3.1).
|
|
@@ -6,53 +7,47 @@ import { errMessage } from "@humwick/sdk";
|
|
|
6
7
|
import { PRESENCE_FLUSH_MS } from "../config";
|
|
7
8
|
import { drainPendingLandSettleSideEffects } from "../land-settle-dispatch";
|
|
8
9
|
import { onShutdown } from "../shutdown";
|
|
9
|
-
import {
|
|
10
|
+
import { flushPresenceAsync } from "./presence-write.ts";
|
|
10
11
|
import { pendingPresence } from "./presence-buffer.ts";
|
|
11
12
|
|
|
12
13
|
let presenceFlushTimer: ReturnType<typeof setInterval> | undefined;
|
|
13
|
-
let asyncPresenceFlusher: (() => Promise<{ flushed: number }>) | undefined;
|
|
14
14
|
let removeShutdownHook: (() => void) | undefined;
|
|
15
15
|
|
|
16
|
-
/** Attach the gateway-backed normal-tick flusher without importing the gateway into agents.ts. */
|
|
17
|
-
export function setAsyncPresenceFlusher(flusher: () => Promise<{ flushed: number }>): void {
|
|
18
|
-
assertMainThreadState("presence-loop.ts");
|
|
19
|
-
asyncPresenceFlusher = flusher;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
16
|
/** Start the periodic presence-buffer flush loop (server boot). */
|
|
23
17
|
export function startPresenceFlushLoop(intervalMs: number = PRESENCE_FLUSH_MS): void {
|
|
24
18
|
assertMainThreadState("presence-loop.ts");
|
|
25
19
|
if (presenceFlushTimer) return;
|
|
26
|
-
presenceFlushTimer = setInterval(() =>
|
|
27
|
-
|
|
28
|
-
if (!flush) return flushPresenceQuietly(); // Bootstrap/isolated compatibility fallback.
|
|
29
|
-
void flush().catch((err) => console.warn(`[presence] flush failed: ${errMessage(err)}`));
|
|
30
|
-
}, intervalMs);
|
|
20
|
+
presenceFlushTimer = setInterval(framed("timer presence-flush", () =>
|
|
21
|
+
flushPresenceAsync().catch((err) => console.warn(`[presence] flush failed: ${errMessage(err)}`))), intervalMs);
|
|
31
22
|
presenceFlushTimer.unref?.();
|
|
32
|
-
process.once("beforeExit",
|
|
33
|
-
removeShutdownHook = onShutdown("presence", () => {
|
|
34
|
-
drainPendingLandSettleSideEffects();
|
|
35
|
-
stopPresenceFlushLoop();
|
|
23
|
+
process.once("beforeExit", flushPresenceBeforeExit);
|
|
24
|
+
removeShutdownHook = onShutdown("presence", async () => {
|
|
25
|
+
await drainPendingLandSettleSideEffects();
|
|
26
|
+
await stopPresenceFlushLoop();
|
|
36
27
|
});
|
|
37
28
|
}
|
|
38
29
|
|
|
39
30
|
/** Stop the loop and persist whatever is buffered (graceful shutdown / test teardown). */
|
|
40
|
-
|
|
31
|
+
function detachPresenceLoop(): void {
|
|
41
32
|
assertMainThreadState("presence-loop.ts");
|
|
42
33
|
removeShutdownHook?.();
|
|
43
34
|
removeShutdownHook = undefined;
|
|
44
|
-
process.removeListener("beforeExit",
|
|
35
|
+
process.removeListener("beforeExit", flushPresenceBeforeExit);
|
|
45
36
|
if (presenceFlushTimer) clearInterval(presenceFlushTimer);
|
|
46
37
|
presenceFlushTimer = undefined;
|
|
47
|
-
flushPresenceQuietly();
|
|
48
38
|
}
|
|
49
39
|
|
|
50
|
-
function
|
|
51
|
-
|
|
40
|
+
export async function stopPresenceFlushLoop(): Promise<void> {
|
|
41
|
+
detachPresenceLoop();
|
|
42
|
+
await flushPresenceAsync();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function flushPresenceBeforeExit(): void {
|
|
46
|
+
void flushPresenceAsync().catch(err => console.warn(`[presence] flush failed: ${errMessage(err)}`));
|
|
52
47
|
}
|
|
53
48
|
|
|
54
49
|
/** Test-only: drop the buffered presence and stop the flush loop. */
|
|
55
50
|
export function resetPresenceBufferForTests(): void {
|
|
56
51
|
pendingPresence.clear();
|
|
57
|
-
|
|
52
|
+
detachPresenceLoop();
|
|
58
53
|
}
|
package/src/db/presence-write.ts
CHANGED
|
@@ -3,7 +3,6 @@ import { assertMainThreadState } from "./main-thread-state";
|
|
|
3
3
|
// Kept outside agents.ts because the writer registry imports the op body from that module; importing
|
|
4
4
|
// the gateway there would make the writer-stack cycle gateway → write-ops → agents → gateway.
|
|
5
5
|
|
|
6
|
-
import { setAsyncPresenceFlusher } from "./presence-loop.ts";
|
|
7
6
|
import { settlePendingPresenceFlush, snapshotPendingPresenceFlush, type PresenceFlushPayload } from "./presence-buffer.ts";
|
|
8
7
|
import { getGateway } from "./gateway.ts";
|
|
9
8
|
|
|
@@ -31,8 +30,3 @@ export function flushPresenceAsync(now: number = Date.now()): Promise<{ flushed:
|
|
|
31
30
|
.finally(() => { activeFlush = undefined; });
|
|
32
31
|
return activeFlush;
|
|
33
32
|
}
|
|
34
|
-
|
|
35
|
-
// The timer remains owned by presence-loop.ts for its synchronous shutdown guarantee, while normal ticks
|
|
36
|
-
// arrive here through an injected callback. This direction deliberately avoids a writer-op → gateway
|
|
37
|
-
// dependency cycle; the callback carries no DB closure across the worker seam.
|
|
38
|
-
setAsyncPresenceFlusher(flushPresenceAsync);
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import type { writeProjectEntry, promoteBlackboardEntry } from "./project-entries";
|
|
1
3
|
// Async project-entries facades (T4060 hub on-loop). Kept outside
|
|
2
4
|
// project-entries.ts to avoid a gateway cycle.
|
|
3
5
|
import { getGateway } from "./gateway.ts";
|
|
@@ -16,3 +18,15 @@ export const searchProjectEntriesAsync = (
|
|
|
16
18
|
query: string,
|
|
17
19
|
opts: ProjectEntrySearchOptions = {},
|
|
18
20
|
): Promise<ProjectEntrySearchResult[]> => read("projectEntries.search", { projectId, query, ...opts });
|
|
21
|
+
|
|
22
|
+
export const getProjectEntryAsync = (id: string): Promise<ProjectEntry | null> => read("projectEntries.get", { id });
|
|
23
|
+
export const getProjectEntryChainAsync = (id: string): Promise<ProjectEntry[]> => read("projectEntries.chain", { id });
|
|
24
|
+
export const listActiveEntriesInAreaAsync = (projectId: string, area: string): Promise<ProjectEntry[]> => read("projectEntries.inArea", { projectId, area });
|
|
25
|
+
export const countActivePinnedEntriesInAreaAsync = (projectId: string, area: string): Promise<number> => read("projectEntries.countPinnedInArea", { projectId, area });
|
|
26
|
+
|
|
27
|
+
export const writeProjectEntryAsync = (input: Parameters<typeof writeProjectEntry>[0], requestId: string = randomUUID()): Promise<ProjectEntry> =>
|
|
28
|
+
getGateway().write("projectEntries.write", input, { idempotencyKey: requestId }) as unknown as Promise<ProjectEntry>;
|
|
29
|
+
export const retractProjectEntryAsync = (id: string): Promise<ProjectEntry | null> =>
|
|
30
|
+
getGateway().write("projectEntries.retract", { id }) as unknown as Promise<ProjectEntry | null>;
|
|
31
|
+
export const promoteBlackboardEntryAsync = (input: Parameters<typeof promoteBlackboardEntry>[0], requestId: string = randomUUID()): Promise<ProjectEntry> =>
|
|
32
|
+
getGateway().write("projectEntries.promoteBlackboard", input, { idempotencyKey: requestId }) as unknown as Promise<ProjectEntry>;
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
// Project-entries reader operations (T4060 hub on-loop). The MCP memory/project
|
|
2
2
|
// read tools ran these scans synchronously on the event loop — including the
|
|
3
3
|
// temp-B-TREE display ORDER BY over cells whose rows are ~95% retracted.
|
|
4
|
-
import { listProjectEntries, searchProjectEntries } from "./project-entries.ts";
|
|
4
|
+
import { countActivePinnedEntriesInArea, getProjectEntry, getProjectEntryChain, listActiveEntriesInArea, listProjectEntries, searchProjectEntries } from "./project-entries.ts";
|
|
5
5
|
import type { ProjectEntryKind, ProjectEntryStatus, ProjectEntrySearchOptions } from "../types";
|
|
6
6
|
|
|
7
7
|
export const PROJECT_ENTRIES_READ_OPS = {
|
|
8
|
+
"projectEntries.get": (args: { id: string }) => getProjectEntry(args.id),
|
|
9
|
+
"projectEntries.chain": (args: { id: string }) => getProjectEntryChain(args.id),
|
|
10
|
+
"projectEntries.inArea": (args: { projectId: string; area: string }) => listActiveEntriesInArea(args.projectId, args.area),
|
|
11
|
+
"projectEntries.countPinnedInArea": (args: { projectId: string; area: string }) => countActivePinnedEntriesInArea(args.projectId, args.area),
|
|
8
12
|
"projectEntries.list": (args: {
|
|
9
13
|
projectId: string;
|
|
10
14
|
kind?: ProjectEntryKind;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { promoteBlackboardEntry, retractProjectEntry, writeProjectEntry } from "./project-entries";
|
|
2
|
+
import type { WriterOpSpec } from "./write-ops";
|
|
3
|
+
|
|
4
|
+
export const PROJECT_ENTRIES_WRITE_OPS: Readonly<Record<string, WriterOpSpec>> = {
|
|
5
|
+
"projectEntries.write": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof writeProjectEntry>[0], ctx) => writeProjectEntry(args, ctx.now) },
|
|
6
|
+
"projectEntries.retract": { offLoop: true, idempotent: true, fn: (args: { id: string }, ctx) => retractProjectEntry(args.id, ctx.now) },
|
|
7
|
+
"projectEntries.promoteBlackboard": { offLoop: true, idempotent: false, fn: (args: Parameters<typeof promoteBlackboardEntry>[0], ctx) => promoteBlackboardEntry(args, ctx.now) },
|
|
8
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { isolateMemoryEntry } from "../memory-entry-safety";
|
|
2
2
|
import { validateProjectEntryText } from "../validation";
|
|
3
3
|
import { randomUUID } from "node:crypto";
|
|
4
|
-
import { getDb,
|
|
4
|
+
import { getDb, inWriteTransaction, ValidationError } from "./connection.ts";
|
|
5
5
|
import { getEntry as getBlackboardEntry, listEntries as listBlackboardEntries } from "./blackboard.ts";
|
|
6
6
|
import { parseJson } from "../utils";
|
|
7
7
|
import {
|
|
@@ -211,7 +211,7 @@ function assertProjectKnowledge(projectId: string): void {
|
|
|
211
211
|
}
|
|
212
212
|
}
|
|
213
213
|
|
|
214
|
-
export function writeProjectEntry(input: WriteProjectEntryInput): ProjectEntry {
|
|
214
|
+
export function writeProjectEntry(input: WriteProjectEntryInput, now: number = Date.now()): ProjectEntry {
|
|
215
215
|
validateProjectEntryText(input);
|
|
216
216
|
assertProjectKnowledge(input.projectId);
|
|
217
217
|
assertKind(input.kind);
|
|
@@ -234,8 +234,7 @@ export function writeProjectEntry(input: WriteProjectEntryInput): ProjectEntry {
|
|
|
234
234
|
supersedes = latestEntryByTitle(input.projectId, input.kind, input.title)?.id;
|
|
235
235
|
}
|
|
236
236
|
const id = projectEntryId();
|
|
237
|
-
|
|
238
|
-
writeTransaction(() => {
|
|
237
|
+
inWriteTransaction(() => {
|
|
239
238
|
let inheritedAreas: string[] | null = null;
|
|
240
239
|
if (supersedes) {
|
|
241
240
|
const previous = getProjectEntry(supersedes);
|
|
@@ -404,21 +403,25 @@ export function countActivePinnedEntriesInArea(projectId: string, area: string):
|
|
|
404
403
|
}
|
|
405
404
|
|
|
406
405
|
/** #3410 — active entries of one cell that name `area`, newest first. Same index as the count above. */
|
|
407
|
-
export function
|
|
408
|
-
|
|
406
|
+
export function buildActiveEntriesInAreaQuery(projectId: string, area: string): { sql: string; params: string[] } {
|
|
407
|
+
return { sql: `
|
|
409
408
|
SELECT * FROM project_entries
|
|
410
409
|
WHERE project_id = ? AND status = 'active' AND areas LIKE ? ESCAPE '\\'
|
|
411
410
|
ORDER BY updated_at DESC, created_at DESC, id DESC
|
|
412
|
-
|
|
413
|
-
return rows.map(rowToEntry);
|
|
411
|
+
`, params: [projectId, `%${escapeLike(JSON.stringify(area))}%`] };
|
|
414
412
|
}
|
|
415
413
|
|
|
416
|
-
export function
|
|
414
|
+
export function listActiveEntriesInArea(projectId: string, area: string): ProjectEntry[] {
|
|
415
|
+
const { sql, params } = buildActiveEntriesInAreaQuery(projectId, area);
|
|
416
|
+
return (getDb().query(sql).all(...params) as ProjectEntryRow[]).map(rowToEntry);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
export function retractProjectEntry(id: string, now: number = Date.now()): ProjectEntry | null {
|
|
417
420
|
const existing = getProjectEntry(id);
|
|
418
421
|
if (!existing) return null;
|
|
419
422
|
assertStatus("retracted");
|
|
420
423
|
getDb().query("UPDATE project_entries SET status = 'retracted', updated_at = ? WHERE id = ?")
|
|
421
|
-
.run(
|
|
424
|
+
.run(now, id);
|
|
422
425
|
return getProjectEntry(id);
|
|
423
426
|
}
|
|
424
427
|
|
|
@@ -472,7 +475,7 @@ function activePromotedEntry(projectId: string, originRef: string): ProjectEntry
|
|
|
472
475
|
* project supersedes the prior promoted copy rather than duplicating it, so the durable
|
|
473
476
|
* ledger holds at most one active entry per promoted finding while keeping the full
|
|
474
477
|
* supersede chain for audit. */
|
|
475
|
-
export function promoteBlackboardEntry(input: PromoteBlackboardEntryInput): ProjectEntry {
|
|
478
|
+
export function promoteBlackboardEntry(input: PromoteBlackboardEntryInput, now: number = Date.now()): ProjectEntry {
|
|
476
479
|
const source = getBlackboardEntry(input.blackboardEntryId);
|
|
477
480
|
if (!source) throw new ValidationError(`blackboard entry ${input.blackboardEntryId} not found`);
|
|
478
481
|
if (source.status !== "active") {
|
|
@@ -489,7 +492,7 @@ export function promoteBlackboardEntry(input: PromoteBlackboardEntryInput): Proj
|
|
|
489
492
|
source: "promoted",
|
|
490
493
|
originRef: source.id,
|
|
491
494
|
...(existing ? { supersedes: existing.id } : {}),
|
|
492
|
-
});
|
|
495
|
+
}, now);
|
|
493
496
|
}
|
|
494
497
|
|
|
495
498
|
export interface UnpromotedBlackboardSummary {
|
|
@@ -203,7 +203,7 @@ export function setProjectJournalFields(input: {
|
|
|
203
203
|
fields: Record<string, string | null>;
|
|
204
204
|
changedBy: string;
|
|
205
205
|
now?: number;
|
|
206
|
-
}): ProjectJournalFieldChange[] {
|
|
206
|
+
}, submittedAt: number = Date.now()): ProjectJournalFieldChange[] {
|
|
207
207
|
const entries = Object.entries(input.fields);
|
|
208
208
|
if (!entries.length) throw new ValidationError("fields must name at least one journal field");
|
|
209
209
|
const plan: Array<{ field: ProjectJournalField; value: string | null; previous: string | null }> = [];
|
|
@@ -222,7 +222,7 @@ export function setProjectJournalFields(input: {
|
|
|
222
222
|
plan.push({ field, value: value === "" ? null : value, previous });
|
|
223
223
|
}
|
|
224
224
|
|
|
225
|
-
const now = input.now ??
|
|
225
|
+
const now = input.now ?? submittedAt;
|
|
226
226
|
const changes: ProjectJournalFieldChange[] = [];
|
|
227
227
|
writeTransaction(() => {
|
|
228
228
|
for (const { field, value, previous } of plan) {
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { ProjectProfileInstructions } from "../types";
|
|
2
|
+
import { getDb, ValidationError } from "./connection";
|
|
3
|
+
import { promptHistory, writePromptVersion } from "./prompt-versions";
|
|
4
|
+
import type { WriterOpContext, WriterOpSpec } from "./write-ops";
|
|
5
|
+
|
|
6
|
+
export const PROJECT_PROFILE_INSTRUCTIONS_SCHEMA_SQL = `
|
|
7
|
+
CREATE TABLE IF NOT EXISTS project_profile_instructions (
|
|
8
|
+
project_id TEXT NOT NULL REFERENCES projects(id), profile TEXT NOT NULL,
|
|
9
|
+
slug TEXT NOT NULL UNIQUE, PRIMARY KEY (project_id, profile)
|
|
10
|
+
);
|
|
11
|
+
CREATE INDEX IF NOT EXISTS project_profile_instructions_profile ON project_profile_instructions(profile);
|
|
12
|
+
`;
|
|
13
|
+
|
|
14
|
+
export interface ProjectProfileKey { projectId: string; profile: string }
|
|
15
|
+
const columns = `p.project_id AS projectId, p.profile, coalesce(h.template, '') AS template,
|
|
16
|
+
coalesce(h.version, 0) AS version, coalesce(h.updated_at, 0) AS updatedAt`;
|
|
17
|
+
|
|
18
|
+
export function getProjectProfileInstructions(key: ProjectProfileKey): ProjectProfileInstructions {
|
|
19
|
+
return getDb().query(`SELECT ${columns} FROM project_profile_instructions p
|
|
20
|
+
LEFT JOIN prompt_heads h ON h.slug = p.slug WHERE p.project_id = ? AND p.profile = ?`)
|
|
21
|
+
.get(key.projectId, key.profile) as ProjectProfileInstructions | null
|
|
22
|
+
?? { ...key, template: "", version: 0, updatedAt: 0 };
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function instructionSlug(key: ProjectProfileKey): string {
|
|
26
|
+
return `project-profile:${JSON.stringify([key.projectId, key.profile])}`;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function writeProjectProfileInstructions(args: ProjectProfileKey & {
|
|
30
|
+
template?: string; expectedVersion: number; actor: string; reason?: string; restoreVersion?: number;
|
|
31
|
+
}, now: number): ProjectProfileInstructions {
|
|
32
|
+
if (!getDb().query("SELECT 1 FROM projects WHERE id = ?").get(args.projectId)) throw new ValidationError("project not found");
|
|
33
|
+
getDb().query("INSERT OR IGNORE INTO project_profile_instructions VALUES (?, ?, ?)").run(args.projectId, args.profile, instructionSlug(args));
|
|
34
|
+
writePromptVersion({ ...args, slug: instructionSlug(args), action: args.restoreVersion === undefined ? undefined : "restore" }, now);
|
|
35
|
+
return getProjectProfileInstructions(args);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const PROJECT_PROFILE_INSTRUCTION_READ_OPS = {
|
|
39
|
+
"projectProfileInstructions.get": getProjectProfileInstructions,
|
|
40
|
+
"projectProfileInstructions.history": (key: ProjectProfileKey) => promptHistory(instructionSlug(key)),
|
|
41
|
+
"projectProfileInstructions.list": (key: { projectId?: string; profile?: string }) => getDb().query(`SELECT ${columns}
|
|
42
|
+
FROM project_profile_instructions p LEFT JOIN prompt_heads h ON h.slug = p.slug
|
|
43
|
+
WHERE (?1 IS NULL OR p.project_id = ?1) AND (?2 IS NULL OR p.profile = ?2)`)
|
|
44
|
+
.all(key.projectId ?? null, key.profile ?? null) as ProjectProfileInstructions[],
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export const PROJECT_PROFILE_INSTRUCTION_WRITE_OPS: Readonly<Record<string, WriterOpSpec>> = {
|
|
48
|
+
"projectProfileInstructions.write": { offLoop: true, idempotent: false,
|
|
49
|
+
fn: (args: Parameters<typeof writeProjectProfileInstructions>[0], ctx: WriterOpContext) => writeProjectProfileInstructions(args, ctx.now) },
|
|
50
|
+
};
|
|
@@ -68,9 +68,9 @@ export interface UpsertProjectTrustApprovalInput {
|
|
|
68
68
|
/** Records `approvedValue` as the trusted content for this (profile, repo, capability), replacing
|
|
69
69
|
* any prior approval — used both by the operator-triggered dashboard approve action and by the
|
|
70
70
|
* gate's own grandfather-on-first-encounter path (decision #4). */
|
|
71
|
-
export function upsertProjectTrustApproval(input: UpsertProjectTrustApprovalInput): ProjectTrustApproval {
|
|
71
|
+
export function upsertProjectTrustApproval(input: UpsertProjectTrustApprovalInput, submittedAt: number = Date.now()): ProjectTrustApproval {
|
|
72
72
|
return writeTransaction(() => {
|
|
73
|
-
const now =
|
|
73
|
+
const now = submittedAt;
|
|
74
74
|
const existing = getDb().query(`
|
|
75
75
|
SELECT id FROM project_trust_approvals WHERE profile_name = ? AND repo_key = ? AND capability = ?
|
|
76
76
|
`).get(input.profileName, input.repoKey, input.capability) as { id: string } | null;
|
|
@@ -74,8 +74,8 @@ export function listTemplates(category?: string): PromptTemplateRecord[] {
|
|
|
74
74
|
return templates;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
export function upsertTemplate(slug: string, template: string): void {
|
|
78
|
-
const now =
|
|
77
|
+
export function upsertTemplate(slug: string, template: string, submittedAt: number = Date.now()): void {
|
|
78
|
+
const now = submittedAt;
|
|
79
79
|
if (versionedPromptSlot(slug)) {
|
|
80
80
|
throw new ValidationError("Use the versioned prompt writer with expectedVersion and actor");
|
|
81
81
|
}
|
|
@@ -83,11 +83,11 @@ export function upsertTemplate(slug: string, template: string): void {
|
|
|
83
83
|
if ((result.changes ?? 0) === 0) throw new ValidationError(`prompt template ${slug} not found`);
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
export function resetTemplate(slug: string): void {
|
|
86
|
+
export function resetTemplate(slug: string, submittedAt: number = Date.now()): void {
|
|
87
87
|
if (versionedPromptSlot(slug)) {
|
|
88
88
|
throw new ValidationError("Use the versioned prompt writer with expectedVersion and actor");
|
|
89
89
|
}
|
|
90
|
-
const now =
|
|
90
|
+
const now = submittedAt;
|
|
91
91
|
const result = getDb().query("UPDATE prompt_templates SET template = default_template, updated_at = ? WHERE slug = ?").run(now, slug);
|
|
92
92
|
if ((result.changes ?? 0) === 0) throw new ValidationError(`prompt template ${slug} not found`);
|
|
93
93
|
}
|
|
@@ -5,6 +5,7 @@ import { PROFILE_PROMPT_SCHEMA_SQL } from "./prompt-version-migration";
|
|
|
5
5
|
export { migratePromptVersions, promptLegacyHistory } from "./prompt-version-migration";
|
|
6
6
|
import { bundledPrompt, hasBundledPrompt, BUNDLED_PROMPT_MANIFEST, profilePromptSlug, versionedPromptsEnabled } from "../versioned-prompts";
|
|
7
7
|
import { getDb, ValidationError } from "./connection";
|
|
8
|
+
import { validateProjectProfileInstructionText } from "../project-profile-instruction-text";
|
|
8
9
|
|
|
9
10
|
export const PROMPT_VERSIONS_SCHEMA_SQL = PROFILE_PROMPT_SCHEMA_SQL + `
|
|
10
11
|
CREATE TABLE IF NOT EXISTS prompt_heads (
|
|
@@ -32,7 +33,10 @@ export function promptVersionMetadata(slug: string): Partial<PromptTemplate> | u
|
|
|
32
33
|
if (!versionedPromptsEnabled()) return;
|
|
33
34
|
const current = head(slug);
|
|
34
35
|
const bundle = hasBundledPrompt(slug) ? bundledPrompt(slug) : undefined;
|
|
35
|
-
if (!current && !bundle)
|
|
36
|
+
if (!current && !bundle) {
|
|
37
|
+
if (getDb().query("SELECT 1 FROM project_profile_instructions WHERE slug = ?").get(slug)) return { template: "", version: 0, updatedAt: 0, source: "canonical" };
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
36
40
|
return {
|
|
37
41
|
template: current?.template ?? bundle!.template,
|
|
38
42
|
version: current?.version ?? 0, seedHash: current?.seed_hash ?? null,
|
|
@@ -50,7 +54,8 @@ export function promptHistory(slug: string): PromptRevision[] {
|
|
|
50
54
|
function checkedPromptHead(args: Pick<PromptWrite, "slug" | "expectedVersion">, current = head(args.slug)): Head | null {
|
|
51
55
|
if (!versionedPromptsEnabled()) throw new ValidationError("versioned prompt not found");
|
|
52
56
|
const mapped = !current && !hasBundledPrompt(args.slug) ? getDb().query(`SELECT 1 FROM prompt_profile_slots
|
|
53
|
-
WHERE system_slug = ?1 OR EXISTS (SELECT 1 FROM json_each(append_slugs) WHERE value = ?1)
|
|
57
|
+
WHERE system_slug = ?1 OR EXISTS (SELECT 1 FROM json_each(append_slugs) WHERE value = ?1)
|
|
58
|
+
UNION ALL SELECT 1 FROM project_profile_instructions WHERE slug = ?1 LIMIT 1`).get(args.slug) : true;
|
|
54
59
|
if (!mapped) throw new ValidationError("versioned prompt not found");
|
|
55
60
|
if (!Number.isSafeInteger(args.expectedVersion) || args.expectedVersion! < 0) throw new ValidationError(`expectedVersion for ${args.slug} must be a non-negative integer`);
|
|
56
61
|
if (args.expectedVersion !== (current?.version ?? 0)) throw new PromptVersionConflictError(JSON.stringify({ slug: args.slug, ...promptVersionMetadata(args.slug), version: current?.version ?? 0 }));
|
|
@@ -70,6 +75,8 @@ function appendPromptVersion(args: PromptWrite, current: Head | null, now: numbe
|
|
|
70
75
|
if (args.action === "restore" && !restored) throw new ValidationError("prompt revision not found");
|
|
71
76
|
const template = args.action === "adopt" ? bundle!.template : restored?.template ?? args.template;
|
|
72
77
|
if (template === undefined) throw new ValidationError("template required");
|
|
78
|
+
const projectProfile = getDb().query("SELECT project_id, profile FROM project_profile_instructions WHERE slug = ?").get(args.slug) as { project_id: string; profile: string } | null;
|
|
79
|
+
if (projectProfile) validateProjectProfileInstructionText(template, `project ${projectProfile.project_id} profile ${projectProfile.profile} instructions`);
|
|
73
80
|
const seedHash = args.action === "adopt" ? bundle!.hash : restored ? restored.seedHash ?? null : current?.seed_hash ?? null;
|
|
74
81
|
const version = (current?.version ?? 0) + 1;
|
|
75
82
|
getDb().query("INSERT INTO prompt_revisions VALUES (?, ?, ?, ?, ?, ?, ?)")
|
|
@@ -13,11 +13,16 @@ function redactionPatch(env: unknown, nextEnv?: Record<string, unknown>): Record
|
|
|
13
13
|
).map(([key]) => [key, SECRET_VALUE_MASK]));
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
/**
|
|
17
|
-
export function
|
|
18
|
-
|
|
16
|
+
/** A config value with its provider credentials masked: what any copy outside the live row stores (#3540). */
|
|
17
|
+
export function credentialFreeConfigValue(entry: ConfigEntry, nextValue?: unknown): unknown {
|
|
18
|
+
return entry.namespace === "provider-config" && isRecord(entry.value) && isRecord(entry.value.env)
|
|
19
19
|
? { ...entry.value, env: { ...entry.value.env, ...redactionPatch(entry.value.env, isRecord(nextValue) && isRecord(nextValue.env) ? nextValue.env : undefined) } }
|
|
20
20
|
: entry.value;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** Update and delete archive through the same seam so neither persists credentials (#3540). */
|
|
24
|
+
export function recordConfigHistory(entry: ConfigEntry, changedAt: string, changedBy?: string, nextValue?: unknown): void {
|
|
25
|
+
const value = credentialFreeConfigValue(entry, nextValue);
|
|
21
26
|
getDb().query(`
|
|
22
27
|
INSERT INTO config_history (namespace, key, value, version, changed_at, changed_by)
|
|
23
28
|
VALUES (?, ?, ?, ?, ?, ?)
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { providerCatalogList } from "@humwick/sdk/provider-catalog";
|
|
2
|
+
import { getDb } from "./connection";
|
|
3
|
+
|
|
4
|
+
const SEED_KEY = "provider-model-db-catalog-v1";
|
|
5
|
+
|
|
6
|
+
/** One migration backfills missing rows; later boots and releases leave the database alone. */
|
|
7
|
+
export function reconcileProviderModelSeed(): void {
|
|
8
|
+
const db = getDb();
|
|
9
|
+
if (db.query("SELECT 1 FROM config WHERE namespace = 'system' AND key = ?").get(SEED_KEY)) return;
|
|
10
|
+
db.transaction(() => {
|
|
11
|
+
seedProviderModelOverrides("seed:db-catalog-v1");
|
|
12
|
+
db.query("INSERT INTO config (namespace, key, value, version, updated_at, updated_by) VALUES ('system', ?, 'true', 1, ?, 'server-startup')")
|
|
13
|
+
.run(SEED_KEY, Date.now());
|
|
14
|
+
})();
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/** Insert-only migration: operator edits, disabled entries and tombstones always win. */
|
|
18
|
+
export function seedProviderModelOverrides(stamp: string, now = Date.now()): { inserted: number } {
|
|
19
|
+
const db = getDb();
|
|
20
|
+
const insert = db.query(`INSERT INTO provider_model_overrides (provider, alias, entry, deleted, disabled, updated_at, updated_by)
|
|
21
|
+
VALUES (?, ?, ?, 0, ?, ?, ?) ON CONFLICT(provider, alias) DO NOTHING`);
|
|
22
|
+
const defaultModel = db.query(`INSERT INTO provider_model_defaults (provider, alias, updated_at, updated_by)
|
|
23
|
+
VALUES (?, ?, ?, ?) ON CONFLICT(provider) DO NOTHING`);
|
|
24
|
+
return db.transaction(() => {
|
|
25
|
+
let inserted = 0;
|
|
26
|
+
for (const provider of providerCatalogList()) {
|
|
27
|
+
for (const model of provider.models) {
|
|
28
|
+
inserted += insert.run(provider.provider, model.alias, JSON.stringify(model), model.disabled ? 1 : 0, now, stamp).changes;
|
|
29
|
+
}
|
|
30
|
+
if (provider.defaultModel) defaultModel.run(provider.provider, provider.defaultModel, now, stamp);
|
|
31
|
+
}
|
|
32
|
+
return { inserted };
|
|
33
|
+
})();
|
|
34
|
+
}
|
|
@@ -101,6 +101,9 @@ export const KERNEL_ENTITY_CATALOG = {
|
|
|
101
101
|
} as const;
|
|
102
102
|
|
|
103
103
|
export const READ_OP_MARSHALING_FIXTURES: ReadOpFixtures = {
|
|
104
|
+
"projectProfileInstructions.get": { args: { projectId: "missing", profile: "worker" } },
|
|
105
|
+
"projectProfileInstructions.history": { args: { projectId: "missing", profile: "worker" } },
|
|
106
|
+
"projectProfileInstructions.list": { args: { projectId: "missing" } },
|
|
104
107
|
"planGraph.import.preview": { args: { scope: "import-fixture", actor: "system", expectedVersion: 0, requestKey: "preview", documentHash: "h", requestHash: "h", newPlanId: "plan-fixture", executions: { a: { workflow: "build-review" } }, document: { version: 1, key: "fixture", revision: "r1", title: "Fixture", acceptance: [{ id: "works", text: "Works" }], tasks: [{ key: "a", title: "A", intent: "Build A" }] } } },
|
|
105
108
|
"guides.search": { args: { query: "violet", guides: [{ id: "workflows", title: "Workflows", summary: "Build and review", tags: ["review"], body: "A violet checksum", revision: "fixture-revision" }] } },
|
|
106
109
|
"commands.latestByCorrelation": { args: { type: "scheduler.cancel", correlationId: "fixture" } },
|
|
@@ -164,6 +167,7 @@ export const READ_OP_MARSHALING_FIXTURES: ReadOpFixtures = {
|
|
|
164
167
|
|
|
165
168
|
// --- channels / projects / teams / hosts --------------------------------------------------------
|
|
166
169
|
"channels.bindingOwner": { args: { id: "binding-t9" } },
|
|
170
|
+
"integrations.taskStats": { args: undefined },
|
|
167
171
|
"channels.snapshot": { args: undefined },
|
|
168
172
|
"channels.bindings": { args: {} },
|
|
169
173
|
"channels.routes": { args: { channelId: "channel-t9" } },
|
|
@@ -187,6 +191,16 @@ export const READ_OP_MARSHALING_FIXTURES: ReadOpFixtures = {
|
|
|
187
191
|
"projects.resolveEntries": { args: { projectId: SEED.projectId } },
|
|
188
192
|
"projects.readMemoryEntriesByIds": { args: { identity: { projectId: SEED.projectId }, ids: ["pe_t9_alpha"] } },
|
|
189
193
|
"projects.memoryPreamble": { args: { identity: { projectId: SEED.projectId }, options: {} } },
|
|
194
|
+
"issueRefs.list": { args: { limit: 10 } },
|
|
195
|
+
"automations.listRuns": { args: { limit: 10 } },
|
|
196
|
+
"automations.pendingPrecheckRuns": { args: undefined },
|
|
197
|
+
"automations.reconcilableRuns": { args: undefined },
|
|
198
|
+
"automations.dispatchableQueuedRuns": { args: undefined },
|
|
199
|
+
"automations.dueAutomations": { args: { now: 1_700_000_000_000 } },
|
|
200
|
+
"projectEntries.get": { args: { id: "pe_t9_alpha" } },
|
|
201
|
+
"projectEntries.chain": { args: { id: "pe_t9_alpha" } },
|
|
202
|
+
"projectEntries.inArea": { args: { projectId: SEED.projectId, area: "db" } },
|
|
203
|
+
"projectEntries.countPinnedInArea": { args: { projectId: SEED.projectId, area: "db" } },
|
|
190
204
|
"projectEntries.list": { args: { projectId: SEED.projectId } },
|
|
191
205
|
"projectEntries.search": { args: { projectId: SEED.projectId, query: "t9" } },
|
|
192
206
|
"teams.spawnDelegation.get": { args: { teamId: SEED.teamId } },
|
|
@@ -216,6 +230,7 @@ export const READ_OP_MARSHALING_FIXTURES: ReadOpFixtures = {
|
|
|
216
230
|
"ciIncidents.sha.hasExpired": { args: { now: FIXTURE_NOW } },
|
|
217
231
|
"ciIncidents.lease.hasExpired": { args: { now: FIXTURE_NOW } },
|
|
218
232
|
"deployEvents.get": { args: { id: "dep-t9" } },
|
|
233
|
+
"deployEvents.forCommit": { args: { commitSha: "a".repeat(40) } },
|
|
219
234
|
// #2189 P7 — restart-epoch reads. Every one is a point/keyset read against ids that do not exist in
|
|
220
235
|
// the fixture DB, which is the point: marshaling has to survive the empty answer too.
|
|
221
236
|
"restartEpoch.openAll": { args: undefined },
|
|
@@ -237,6 +252,7 @@ export const READ_OP_MARSHALING_FIXTURES: ReadOpFixtures = {
|
|
|
237
252
|
// --- commands / codex reset / inbox / insights --------------------------------------------------
|
|
238
253
|
"commands.spawnOutcome": { args: { spawnRequestId: "spawn-t9" } },
|
|
239
254
|
"commands.get": { args: { id: SEED.commandId } },
|
|
255
|
+
"commands.latestAttempt": { args: { baseId: SEED.commandId } },
|
|
240
256
|
"commands.listLegacyLandingBackfillCandidates": { args: { afterId: "", limit: 10 } },
|
|
241
257
|
// `observedAt` is the dispatcher's own `ctx.now`, so the in-process and worker runs legitimately
|
|
242
258
|
// stamp different clock readings for the same DB state — normalize it out or the #1960 worker-seam
|
|
@@ -709,6 +725,12 @@ export function seedReadOpMarshalingData(): void {
|
|
|
709
725
|
VALUES ('t9', 't9 claimed task', 't9', 'info', 'in_progress', 't9', 'claim', ?, ?, ?, ?, ?)`,
|
|
710
726
|
).run(SEED.agentId, t - 1, t, t, t);
|
|
711
727
|
|
|
728
|
+
// An open task-bound run so the automation scan ops marshal a NON-trivial run (meta/result JSON parsed worker-side).
|
|
729
|
+
db.query(
|
|
730
|
+
`INSERT INTO automation_runs (id, automation_id, status, scheduled_for, orchestrator_id, task_id, meta, created_at, updated_at)
|
|
731
|
+
VALUES ('run-t9', 'automation-t9', 'running', ?, 'orch-t9', 1, '{"k":"v"}', ?, ?)`,
|
|
732
|
+
).run(t, t, t);
|
|
733
|
+
|
|
712
734
|
// Project-entries rows so `projectEntries.list`/`search` marshal NON-trivial results:
|
|
713
735
|
// two active rows the query term hits, plus a retracted row proving mixed-status parity.
|
|
714
736
|
for (const [id, title, body, status, updatedAt] of [
|
|
@@ -720,5 +742,6 @@ export function seedReadOpMarshalingData(): void {
|
|
|
720
742
|
`INSERT INTO project_entries (id, project_id, kind, title, body, status, tags, author_id, source, audience, inject, sensitivity, created_at, updated_at)
|
|
721
743
|
VALUES (?, ?, 'rule', ?, ?, ?, '["t9"]', ?, 'manual', 'all', 'indexed', 'normal', ?, ?)`,
|
|
722
744
|
).run(id, SEED.projectId, title, body, status, SEED.agentId, updatedAt, updatedAt);
|
|
745
|
+
db.query("UPDATE project_entries SET areas = ?, inject = ? WHERE id = ?").run('["db"]', "pinned", id);
|
|
723
746
|
}
|
|
724
747
|
}
|
package/src/db/read-ops.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { INTEGRATIONS_READ_OPS } from "./integrations-ops.ts";
|
|
1
2
|
import { PROMPT_VERSION_READ_OPS } from "./prompt-versions-ops";
|
|
3
|
+
import { PROJECT_PROFILE_INSTRUCTION_READ_OPS } from "./project-profile-instructions";
|
|
2
4
|
import { VAULT_READ_OPS } from "./secrets-vault";
|
|
3
5
|
import { GUIDE_READ_OPS } from "./guides-search";
|
|
4
6
|
import { ROUTING_POLICY_READ_OPS } from "./routing-policy";
|
|
@@ -61,6 +63,8 @@ import { ARTIFACTS_READ_OPS } from "./artifacts-read-ops.ts";
|
|
|
61
63
|
import { PLANS_READ_OPS } from "./plans-read-ops.ts";
|
|
62
64
|
import { CONTINUATION_ARCHIVES_READ_OPS } from "./continuation-archives-read-ops.ts";
|
|
63
65
|
import { WORKFLOW_JOURNAL_READ_OPS } from "./workflow-journal-read-ops.ts";
|
|
66
|
+
import { AUTOMATION_READ_OPS } from "./automation-read-ops.ts";
|
|
67
|
+
import { ISSUE_REFS_READ_OPS } from "./issue-refs-read-ops.ts";
|
|
64
68
|
import { PROJECTS_READ_OPS } from "./projects-read-ops.ts";
|
|
65
69
|
import { PROJECT_ENTRIES_READ_OPS } from "./project-entries-read-ops.ts";
|
|
66
70
|
import { CHANNELS_READ_OPS } from "./channels-read-ops.ts";
|
|
@@ -129,6 +133,7 @@ const SPIN_MAX_MS = 2_000;
|
|
|
129
133
|
export const readOps = {
|
|
130
134
|
...GUIDE_READ_OPS,
|
|
131
135
|
...PROMPT_VERSION_READ_OPS,
|
|
136
|
+
...PROJECT_PROFILE_INSTRUCTION_READ_OPS,
|
|
132
137
|
...SERVICE_ACCESS_READ_OPS,
|
|
133
138
|
...VAULT_TOKEN_READ_OPS,
|
|
134
139
|
...VAULT_HEALTH_READ_OPS,
|
|
@@ -253,7 +258,10 @@ export const readOps = {
|
|
|
253
258
|
...WORKFLOW_JOURNAL_READ_OPS,
|
|
254
259
|
...PROJECTS_READ_OPS,
|
|
255
260
|
...PROJECT_ENTRIES_READ_OPS,
|
|
261
|
+
...AUTOMATION_READ_OPS,
|
|
262
|
+
...ISSUE_REFS_READ_OPS,
|
|
256
263
|
...CHANNELS_READ_OPS,
|
|
264
|
+
...INTEGRATIONS_READ_OPS,
|
|
257
265
|
} satisfies Record<string, ReadOpFn>;
|
|
258
266
|
|
|
259
267
|
/** The registered read-op names. */
|