@sema-agent/server 7.147.0 → 7.149.0
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/MIGRATION.md +1468 -24
- package/README.md +35 -7
- package/README.zh-CN.md +18 -8
- package/USAGE.md +444 -193
- package/deploy/sema-up/README.md +16 -5
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/templates/_helpers.tpl +20 -4
- package/deploy/sema-up/chart/values.yaml +3 -2
- package/deploy/sema-up/cluster-up.sh +74 -176
- package/deploy/sema-up/kube-up.sh +29 -49
- package/deploy/sema-up/lib/chart-run.sh +23 -0
- package/deploy/sema-up/lib/dataroot.sh +3 -3
- package/deploy/sema-up/lib/health.sh +62 -13
- package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
- package/deploy/sema-up/lib/helm-values-kube.py +35 -0
- package/deploy/sema-up/lib/regcred.py +8 -0
- package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
- package/deploy/sema-up/lib/remote/image-import.sh +6 -0
- package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
- package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
- package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
- package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
- package/deploy/sema-up/lib/render-stack.py +17 -0
- package/deploy/sema-up/lib/shell-text.sh +87 -0
- package/deploy/sema-up/lib/usage-flags.txt +10 -0
- package/deploy/sema-up/lib/usage-head.txt +1 -0
- package/deploy/sema-up/lib/usage-tail.txt +13 -0
- package/deploy/sema-up/preflight.sh +10 -8
- package/deploy/sema-up/sema-up.sh +14 -39
- package/deploy/sema-up/smoke.sh +7 -6
- package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
- package/deploy/sema-up/stack/compose.yaml +13 -1
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +21 -0
- package/dist/adoption/plan.d.ts +24 -0
- package/dist/adoption/plan.js +53 -1
- package/dist/adoption/runner.d.ts +10 -1
- package/dist/adoption/runner.js +36 -16
- package/dist/approval-card.d.ts +36 -38
- package/dist/approval-gate-currency.js +3 -2
- package/dist/approval-leg-origin.d.ts +33 -0
- package/dist/approval-leg-origin.js +4 -0
- package/dist/approval-reconciler.d.ts +4 -13
- package/dist/approval-reconciler.js +2 -2
- package/dist/approval.d.ts +13 -11
- package/dist/approval.js +3 -3
- package/dist/audit.d.ts +10 -3
- package/dist/audit.js +15 -7
- package/dist/auth-bridge.d.ts +9 -15
- package/dist/auth-bridge.js +4 -11
- package/dist/auth-keys.d.ts +10 -1
- package/dist/auth-keys.js +8 -0
- package/dist/auto-mode-face.d.ts +10 -7
- package/dist/auto-mode-face.js +7 -4
- package/dist/background-agent-name.d.ts +19 -1
- package/dist/background-agent-name.js +12 -2
- package/dist/background-session-reap.d.ts +1 -1
- package/dist/bake-runner/main.js +9 -6
- package/dist/bench/s1/arms.js +6 -5
- package/dist/bench/s1/live-deps.js +5 -2
- package/dist/bench/s1/run-firm.js +6 -5
- package/dist/bind-host.d.ts +25 -0
- package/dist/bind-host.js +25 -0
- package/dist/boot/adoption.d.ts +3 -0
- package/dist/boot/adoption.js +1 -0
- package/dist/boot/deployment-mods.d.ts +1 -1
- package/dist/boot/execution-env.d.ts +17 -7
- package/dist/boot/execution-env.js +47 -42
- package/dist/boot/execution-lane.d.ts +6 -4
- package/dist/boot/execution-lane.js +3 -1
- package/dist/boot/exit-boundary.d.ts +2 -2
- package/dist/boot/exit-boundary.js +6 -5
- package/dist/boot/fatal-exit.d.ts +3 -5
- package/dist/boot/fatal-exit.js +2 -2
- package/dist/boot/leader.d.ts +15 -0
- package/dist/boot/leader.js +17 -15
- package/dist/boot/memory-consolidation.d.ts +37 -29
- package/dist/boot/memory-consolidation.js +11 -5
- package/dist/boot/org-delivery.d.ts +3 -2
- package/dist/boot/org-memory.js +1 -1
- package/dist/boot/parked-revive-gate.js +2 -2
- package/dist/boot/reapers.d.ts +4 -3
- package/dist/boot/reapers.js +19 -16
- package/dist/boot/resolve-spec.d.ts +5 -3
- package/dist/boot/resolve-spec.js +60 -70
- package/dist/boot/retention-lane.d.ts +4 -4
- package/dist/boot/retention-lane.js +2 -2
- package/dist/boot/runner-deps.d.ts +28 -7
- package/dist/boot/runner-deps.js +14 -5
- package/dist/boot/runtime-caps.d.ts +2 -2
- package/dist/boot/runtime-caps.js +16 -2
- package/dist/boot/session-faces.d.ts +16 -7
- package/dist/boot/session-faces.js +114 -94
- package/dist/boot/shutdown.d.ts +5 -4
- package/dist/boot/shutdown.js +6 -4
- package/dist/boot/stage-01-config.d.ts +1 -0
- package/dist/boot/stage-01-config.js +13 -4
- package/dist/boot/stage-02-web-admin-pull.d.ts +2 -0
- package/dist/boot/stage-02-web-admin-pull.js +16 -3
- package/dist/boot/stage-03-store-backend.d.ts +4 -0
- package/dist/boot/stage-03-store-backend.js +4 -3
- package/dist/boot/stage-04-stores.d.ts +3 -0
- package/dist/boot/stage-04-stores.js +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +8 -3
- package/dist/boot/stage-05-execution-env.js +2 -2
- package/dist/boot/stage-06-runners.d.ts +12 -13
- package/dist/boot/stage-06-runners.js +23 -15
- package/dist/boot/stage-07-capability-layer.d.ts +13 -9
- package/dist/boot/stage-07-capability-layer.js +5 -3
- package/dist/boot/stage-08-reapers.d.ts +13 -9
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +14 -16
- package/dist/boot/stage-09-leader.js +12 -4
- package/dist/boot/stage-10-http-server.d.ts +14 -16
- package/dist/boot/stage-10-http-server.js +7 -4
- package/dist/boot/store-evidence.d.ts +20 -0
- package/dist/boot/store-evidence.js +13 -0
- package/dist/boot/stores.d.ts +6 -0
- package/dist/boot/stores.js +41 -27
- package/dist/boot/task-list-lane.d.ts +4 -4
- package/dist/boot/web-admin.d.ts +4 -2
- package/dist/boot/web-admin.js +55 -35
- package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
- package/dist/boot-reclaim.d.ts +3 -1
- package/dist/boot-reclaim.js +1 -1
- package/dist/brain.d.ts +7 -18
- package/dist/brain.js +5 -17
- package/dist/budget.js +6 -6
- package/dist/capabilities/center-plugins.d.ts +7 -1
- package/dist/capabilities/center-plugins.js +32 -10
- package/dist/capabilities/center-wiring.js +1 -1
- package/dist/capabilities/composite-members.d.ts +2 -2
- package/dist/capabilities/composite-members.js +2 -2
- package/dist/capabilities/repo-tools.d.ts +2 -0
- package/dist/capabilities/repo-tools.js +14 -12
- package/dist/capabilities/scenarios.d.ts +6 -15
- package/dist/capabilities/scenarios.js +11 -16
- package/dist/capabilities/skills.d.ts +1 -1
- package/dist/capabilities/tool-defer.d.ts +1 -1
- package/dist/capability-facts.d.ts +39 -11
- package/dist/capability-facts.js +35 -7
- package/dist/card-settle-stored-scope.d.ts +56 -0
- package/dist/card-settle-stored-scope.js +27 -0
- package/dist/card-void.d.ts +8 -13
- package/dist/card-void.js +2 -7
- package/dist/center-credential-renewer.d.ts +6 -2
- package/dist/center-credential-renewer.js +7 -3
- package/dist/config-catalog.d.ts +28 -1
- package/dist/config-catalog.js +95 -85
- package/dist/config-dir-trust.d.ts +37 -4
- package/dist/config-dir-trust.js +88 -44
- package/dist/config-invariants.d.ts +43 -3
- package/dist/config-invariants.js +69 -5
- package/dist/config-lkg.d.ts +23 -1
- package/dist/config-lkg.js +17 -3
- package/dist/config-provider.d.ts +9 -9
- package/dist/config-provider.js +25 -110
- package/dist/config-pull-failure.d.ts +50 -0
- package/dist/config-pull-failure.js +48 -0
- package/dist/config-types.d.ts +62 -21
- package/dist/config.d.ts +14 -21
- package/dist/config.js +141 -64
- package/dist/context-window-notice.d.ts +31 -0
- package/dist/context-window-notice.js +28 -0
- package/dist/delegated-session-owner.d.ts +1 -1
- package/dist/deleted-session-ids.d.ts +3 -2
- package/dist/deployment-governance.d.ts +3 -3
- package/dist/deployment-shape.d.ts +46 -11
- package/dist/deployment-shape.js +8 -0
- package/dist/egress-redirect.d.ts +25 -7
- package/dist/egress-redirect.js +20 -2
- package/dist/elicitation.d.ts +6 -5
- package/dist/elicitation.js +23 -22
- package/dist/engine-identity.d.ts +28 -0
- package/dist/engine-identity.js +10 -0
- package/dist/entry-problems.d.ts +5 -7
- package/dist/entry-problems.js +1 -1
- package/dist/env-facts.js +2 -1
- package/dist/env-name-allowlist-knobs.d.ts +6 -5
- package/dist/env-name-allowlist-knobs.js +5 -0
- package/dist/env-witness.d.ts +7 -0
- package/dist/env-witness.js +16 -0
- package/dist/execution-lane-caps.d.ts +25 -23
- package/dist/execution-lane-caps.js +18 -26
- package/dist/execution-placement.d.ts +58 -18
- package/dist/execution-placement.js +41 -2
- package/dist/field-conflict.d.ts +7 -11
- package/dist/field-conflict.js +3 -3
- package/dist/file-history-capture.d.ts +3 -3
- package/dist/file-history-disclosure.js +1 -0
- package/dist/fleet/fleet-bus.d.ts +21 -3
- package/dist/fleet/fleet-bus.js +35 -25
- package/dist/fleet/fleet-reconciler.js +2 -2
- package/dist/fleet/serving-lease.js +3 -3
- package/dist/fleet-client.js +3 -3
- package/dist/fleet-lease.d.ts +0 -1
- package/dist/fleet-lease.js +4 -5
- package/dist/history-anchor.d.ts +23 -3
- package/dist/history-anchor.js +24 -4
- package/dist/hitl-delivery.d.ts +90 -0
- package/dist/hitl-delivery.js +98 -0
- package/dist/hooks/classic-stations.d.ts +8 -11
- package/dist/hooks/classic-stations.js +0 -7
- package/dist/hooks/command-spawn.d.ts +7 -2
- package/dist/hooks/command-spawn.js +13 -6
- package/dist/hooks/hook-llm.d.ts +5 -1
- package/dist/hooks/hook-llm.js +24 -15
- package/dist/hooks/hook-runner.d.ts +72 -57
- package/dist/hooks/hook-runner.js +271 -193
- package/dist/host-lsp-manager.d.ts +22 -8
- package/dist/host-lsp-manager.js +4 -1
- package/dist/http/active-run-conflict.d.ts +2 -43
- package/dist/http/active-run-conflict.js +3 -7
- package/dist/http/admission.d.ts +4 -18
- package/dist/http/admission.js +76 -79
- package/dist/http/approval-sweeps.d.ts +3 -3
- package/dist/http/approval-sweeps.js +56 -31
- package/dist/http/caller-trust.d.ts +8 -10
- package/dist/http/caller-trust.js +1 -2
- package/dist/http/claim-heartbeat.d.ts +49 -0
- package/dist/http/claim-heartbeat.js +46 -0
- package/dist/http/claimed-run.d.ts +16 -8
- package/dist/http/claimed-run.js +8 -0
- package/dist/http/dispatch.d.ts +8 -1
- package/dist/http/dispatch.js +78 -30
- package/dist/http/durable-run-leg.d.ts +11 -4
- package/dist/http/durable-run-leg.js +45 -21
- package/dist/http/execution-context.d.ts +122 -47
- package/dist/http/execution-context.js +135 -43
- package/dist/http/health-reader.d.ts +36 -0
- package/dist/http/health-reader.js +21 -0
- package/dist/http/health-self-report.d.ts +9 -9
- package/dist/http/health-self-report.js +4 -4
- package/dist/http/idempotency.d.ts +9 -5
- package/dist/http/idempotency.js +4 -4
- package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
- package/dist/http/memory-compliance-failure-reply.js +4 -2
- package/dist/http/memory-face-fault-reply.d.ts +67 -0
- package/dist/http/memory-face-fault-reply.js +71 -0
- package/dist/http/memory-store-refusal-reply.d.ts +1 -1
- package/dist/http/memory-store-refusal-reply.js +3 -0
- package/dist/http/owner-access.d.ts +392 -67
- package/dist/http/owner-access.js +370 -35
- package/dist/http/principal-gate.d.ts +39 -89
- package/dist/http/principal-gate.js +26 -68
- package/dist/http/refusal-body.d.ts +35 -2
- package/dist/http/refusal-body.js +34 -0
- package/dist/http/request-guards.d.ts +9 -13
- package/dist/http/request-guards.js +34 -68
- package/dist/http/resume-composition.d.ts +37 -0
- package/dist/http/resume-composition.js +18 -0
- package/dist/http/resume-ctx-read.d.ts +46 -12
- package/dist/http/resume-ctx-read.js +31 -6
- package/dist/http/resume-legs.d.ts +54 -19
- package/dist/http/resume-legs.js +408 -196
- package/dist/http/retired-skill-manifest.d.ts +1 -1
- package/dist/http/route-ctx.d.ts +31 -32
- package/dist/http/routes/a2a-serve.d.ts +43 -5
- package/dist/http/routes/a2a-serve.js +60 -37
- package/dist/http/routes/admin-config-refresh.js +2 -2
- package/dist/http/routes/admin-drain.js +2 -2
- package/dist/http/routes/admin-memory-optout.js +4 -3
- package/dist/http/routes/adoption.d.ts +3 -0
- package/dist/http/routes/adoption.js +17 -10
- package/dist/http/routes/agents-roster.js +13 -7
- package/dist/http/routes/approvals-assistant.js +73 -67
- package/dist/http/routes/attachments.js +2 -2
- package/dist/http/routes/background.d.ts +3 -3
- package/dist/http/routes/background.js +9 -17
- package/dist/http/routes/capabilities.js +16 -19
- package/dist/http/routes/config-catalog.js +2 -2
- package/dist/http/routes/devices.d.ts +3 -3
- package/dist/http/routes/devices.js +4 -4
- package/dist/http/routes/diagnostics.d.ts +29 -3
- package/dist/http/routes/diagnostics.js +49 -18
- package/dist/http/routes/engine.js +2 -2
- package/dist/http/routes/fleet.js +5 -3
- package/dist/http/routes/images.js +10 -6
- package/dist/http/routes/leader.d.ts +7 -2
- package/dist/http/routes/leader.js +12 -3
- package/dist/http/routes/mcp-reconnect.d.ts +1 -1
- package/dist/http/routes/mcp-reconnect.js +7 -15
- package/dist/http/routes/memory-bundle.js +4 -7
- package/dist/http/routes/memory-compliance.js +4 -4
- package/dist/http/routes/memory-consolidation.js +6 -9
- package/dist/http/routes/memory-origin.d.ts +2 -0
- package/dist/http/routes/memory-origin.js +7 -8
- package/dist/http/routes/memory-policy.js +17 -12
- package/dist/http/routes/notify-wake.js +10 -19
- package/dist/http/routes/observability.js +3 -3
- package/dist/http/routes/principal-inbox.d.ts +4 -2
- package/dist/http/routes/principal-inbox.js +5 -4
- package/dist/http/routes/projects.d.ts +1 -1
- package/dist/http/routes/projects.js +3 -2
- package/dist/http/routes/retention-ops.js +6 -9
- package/dist/http/routes/rules.js +20 -5
- package/dist/http/routes/run-memory-capture.d.ts +2 -2
- package/dist/http/routes/run-memory-capture.js +6 -12
- package/dist/http/routes/run-permission-mode.d.ts +2 -2
- package/dist/http/routes/run-permission-mode.js +10 -17
- package/dist/http/routes/runs.js +155 -237
- package/dist/http/routes/session-memory-sync.d.ts +2 -2
- package/dist/http/routes/session-memory-sync.js +7 -13
- package/dist/http/routes/session-sync.d.ts +28 -7
- package/dist/http/routes/session-sync.js +63 -50
- package/dist/http/routes/sessions-list.d.ts +3 -3
- package/dist/http/routes/sessions-list.js +9 -9
- package/dist/http/routes/sessions.js +87 -124
- package/dist/http/routes/shared-memory.js +6 -6
- package/dist/http/routes/side-query.js +2 -2
- package/dist/http/routes/tasks.js +237 -187
- package/dist/http/routes/trace-usage.d.ts +0 -12
- package/dist/http/routes/trace-usage.js +40 -46
- package/dist/http/routes/workflows.d.ts +39 -4
- package/dist/http/routes/workflows.js +42 -14
- package/dist/http/run-concurrency-cap.d.ts +20 -12
- package/dist/http/run-concurrency-cap.js +39 -26
- package/dist/http/run-read-face.d.ts +3 -5
- package/dist/http/run-read-face.js +8 -13
- package/dist/http/send.d.ts +12 -3
- package/dist/http/send.js +42 -6
- package/dist/http/server.d.ts +43 -45
- package/dist/http/server.js +61 -11
- package/dist/http/sse-log.d.ts +17 -10
- package/dist/http/sse-log.js +7 -7
- package/dist/http/stored-body-replay.d.ts +12 -0
- package/dist/http/stored-body-replay.js +2 -2
- package/dist/http/submit-ctx.d.ts +17 -8
- package/dist/http/submit-ctx.js +8 -5
- package/dist/http/submit-replay.d.ts +19 -6
- package/dist/http/submit-replay.js +18 -6
- package/dist/http/sync-submit-body.d.ts +3 -4
- package/dist/http/sync-submit-body.js +4 -5
- package/dist/http/wire-types.d.ts +4 -3
- package/dist/identity-source.d.ts +36 -5
- package/dist/identity-source.js +27 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +2 -0
- package/dist/key-resolver.d.ts +32 -0
- package/dist/key-resolver.js +23 -9
- package/dist/leader/diffup.js +2 -1
- package/dist/leader/endpoint.d.ts +26 -5
- package/dist/leader/endpoint.js +154 -14
- package/dist/leader/fanout.d.ts +3 -0
- package/dist/leader/fanout.js +78 -63
- package/dist/leader/leader.d.ts +16 -0
- package/dist/leader/leader.js +43 -3
- package/dist/leader/merge.d.ts +9 -1
- package/dist/leader/merge.js +16 -1
- package/dist/leader/repair-wire.js +1 -1
- package/dist/leader/wire.d.ts +36 -3
- package/dist/leader/wire.js +59 -18
- package/dist/leg-facts.d.ts +7 -2
- package/dist/leg-facts.js +1 -0
- package/dist/local-store-declaration.d.ts +54 -0
- package/dist/local-store-declaration.js +59 -0
- package/dist/lsp-evict.d.ts +6 -4
- package/dist/lsp-evict.js +2 -3
- package/dist/mcp-assertion-header.d.ts +1 -1
- package/dist/mcp-assertion-header.js +1 -1
- package/dist/memory-operator-faces.d.ts +5 -4
- package/dist/memory-operator-faces.js +1 -1
- package/dist/memory-project-layer.js +1 -1
- package/dist/memory-scope.d.ts +33 -6
- package/dist/memory-scope.js +68 -19
- package/dist/memory-store-refusal.d.ts +5 -2
- package/dist/memory-sync-client.d.ts +3 -2
- package/dist/memory-sync-client.js +8 -5
- package/dist/model-compat.d.ts +17 -8
- package/dist/model-compat.js +6 -2
- package/dist/model-context-window.d.ts +57 -0
- package/dist/model-context-window.js +21 -0
- package/dist/model-entry-headers.d.ts +46 -4
- package/dist/model-entry-headers.js +2 -2
- package/dist/model-entry-refusal.d.ts +40 -20
- package/dist/model-entry-refusal.js +57 -30
- package/dist/model-plane-face.d.ts +19 -11
- package/dist/model-plane-face.js +9 -1
- package/dist/model-plane-probe.d.ts +2 -0
- package/dist/model-plane-probe.js +17 -0
- package/dist/model-provider.d.ts +3 -3
- package/dist/model-reach-scope.d.ts +2 -1
- package/dist/model-route-endpoint.d.ts +9 -5
- package/dist/model-route-endpoint.js +29 -7
- package/dist/model-select.d.ts +16 -0
- package/dist/model-select.js +4 -0
- package/dist/mountinfo.d.ts +37 -0
- package/dist/mountinfo.js +47 -0
- package/dist/namespaced-rule-name.d.ts +23 -14
- package/dist/namespaced-rule-name.js +8 -11
- package/dist/net-address.d.ts +1 -1
- package/dist/observability/corrupt-read-seat.d.ts +4 -4
- package/dist/observability/corrupt-read-seat.js +5 -3
- package/dist/observability/fail-open.d.ts +72 -40
- package/dist/observability/fail-open.js +74 -40
- package/dist/observability/logger.d.ts +22 -1
- package/dist/observability/logger.js +89 -12
- package/dist/observability/metrics.js +4 -5
- package/dist/observability/otel-exporter.js +2 -1
- package/dist/observability/principal-context.d.ts +14 -7
- package/dist/observability/principal-context.js +8 -3
- package/dist/observability/run-terminal.d.ts +7 -1
- package/dist/observability/run-terminal.js +6 -2
- package/dist/observability/secret-env-scrub.d.ts +1 -1
- package/dist/observability/secret-env-scrub.js +1 -1
- package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
- package/dist/orchestration/hardened-vm-runner.js +11 -5
- package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
- package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
- package/dist/orchestration/hardened-vm-worker.js +2 -1
- package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
- package/dist/orchestration/workflow-completion-inbox.js +3 -2
- package/dist/org-delivery-gate.d.ts +36 -10
- package/dist/org-delivery-gate.js +12 -8
- package/dist/outbound-dispatcher.d.ts +1 -1
- package/dist/outbound-dispatcher.js +6 -12
- package/dist/owner-brands.d.ts +81 -0
- package/dist/owner-brands.js +42 -0
- package/dist/owner-faces.d.ts +532 -0
- package/dist/owner-faces.js +126 -0
- package/dist/park-row-commit.d.ts +67 -0
- package/dist/park-row-commit.js +76 -0
- package/dist/parked-decide.d.ts +76 -12
- package/dist/parked-decide.js +152 -11
- package/dist/parked-revive-surface.d.ts +14 -4
- package/dist/parked-revive-surface.js +5 -4
- package/dist/peer-directory.d.ts +7 -9
- package/dist/peer-directory.js +3 -2
- package/dist/permission-rule-vocab.d.ts +53 -8
- package/dist/permission-rule-vocab.js +30 -2
- package/dist/plugins/adoption-log-sql.d.ts +3 -25
- package/dist/plugins/adoption-log-sql.js +23 -21
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
- package/dist/plugins/approval-ask-store-file.d.ts +18 -7
- package/dist/plugins/approval-ask-store-file.js +37 -14
- package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
- package/dist/plugins/approval-ask-store-memory.js +24 -10
- package/dist/plugins/approval-ask-store-sql.d.ts +40 -21
- package/dist/plugins/approval-ask-store-sql.js +44 -15
- package/dist/plugins/approval-exemption-skill-cutoff.d.ts +64 -0
- package/dist/plugins/approval-exemption-skill-cutoff.js +122 -0
- package/dist/plugins/approval-exemption-skill-m46.d.ts +14 -0
- package/dist/plugins/approval-exemption-skill-m46.js +21 -0
- package/dist/plugins/approval-exemption-store.d.ts +32 -2
- package/dist/plugins/approval-exemption-store.js +42 -19
- package/dist/plugins/approval-nonce-store.d.ts +39 -12
- package/dist/plugins/approval-nonce-store.js +72 -23
- package/dist/plugins/blob-backend.d.ts +2 -0
- package/dist/plugins/blob-backend.js +9 -6
- package/dist/plugins/caching-session-store.d.ts +13 -1
- package/dist/plugins/caching-session-store.js +43 -4
- package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
- package/dist/plugins/checkpoint-index-columns.js +36 -1
- package/dist/plugins/checkpoint-store-face.d.ts +83 -10
- package/dist/plugins/checkpoint-store-face.js +18 -1
- package/dist/plugins/device-store-sql.js +1 -0
- package/dist/plugins/ensure-index.d.ts +13 -1
- package/dist/plugins/ensure-index.js +154 -21
- package/dist/plugins/ensure-schema-lock-policy.d.ts +36 -18
- package/dist/plugins/ensure-schema-lock-policy.js +76 -9
- package/dist/plugins/file-run-store.d.ts +85 -32
- package/dist/plugins/file-run-store.js +177 -94
- package/dist/plugins/host-platform.d.ts +24 -3
- package/dist/plugins/host-platform.js +15 -1
- package/dist/plugins/image-bake-store-sql.js +2 -0
- package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
- package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
- package/dist/plugins/k8s-pod-reaper.js +0 -1
- package/dist/plugins/leader-run-store-sql.d.ts +22 -0
- package/dist/plugins/leader-run-store-sql.js +34 -4
- package/dist/plugins/local-checkpoint-store.d.ts +62 -23
- package/dist/plugins/local-checkpoint-store.js +197 -77
- package/dist/plugins/local-data-dir-modes-m39.js +2 -1
- package/dist/plugins/local-data-root-admission.d.ts +52 -0
- package/dist/plugins/local-data-root-admission.js +100 -0
- package/dist/plugins/local-docker-capacity.d.ts +93 -0
- package/dist/plugins/local-docker-capacity.js +194 -0
- package/dist/plugins/local-docker-reaper.d.ts +92 -0
- package/dist/plugins/local-docker-reaper.js +102 -0
- package/dist/plugins/local-engine-high-water.d.ts +29 -6
- package/dist/plugins/local-engine-high-water.js +27 -19
- package/dist/plugins/local-session-store.d.ts +458 -140
- package/dist/plugins/local-session-store.js +906 -292
- package/dist/plugins/local-session-window.d.ts +3 -2
- package/dist/plugins/local-session-window.js +3 -2
- package/dist/plugins/local-sidecar-quarantine.js +3 -2
- package/dist/plugins/local-task-attachment-store.d.ts +18 -1
- package/dist/plugins/local-task-attachment-store.js +22 -1
- package/dist/plugins/memory-embedder.js +9 -7
- package/dist/plugins/memory-engine-pg.d.ts +3 -2
- package/dist/plugins/memory-engine-pg.js +14 -5
- package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
- package/dist/plugins/memory-engine-sql-apply.js +6 -8
- package/dist/plugins/memory-engine-tidb.d.ts +4 -2
- package/dist/plugins/memory-engine-tidb.js +11 -2
- package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
- package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
- package/dist/plugins/memory-run-store.d.ts +53 -36
- package/dist/plugins/memory-run-store.js +116 -88
- package/dist/plugins/one-time-migration-marker.d.ts +26 -0
- package/dist/plugins/one-time-migration-marker.js +13 -0
- package/dist/plugins/one-time-migrations.d.ts +214 -47
- package/dist/plugins/one-time-migrations.js +481 -135
- package/dist/plugins/org-delivery-quota-store.d.ts +34 -11
- package/dist/plugins/org-delivery-quota-store.js +31 -15
- package/dist/plugins/permission-rule-store-file.d.ts +3 -3
- package/dist/plugins/permission-rule-store-sql.d.ts +5 -64
- package/dist/plugins/permission-rule-store-sql.js +11 -95
- package/dist/plugins/pg-pool.d.ts +2 -32
- package/dist/plugins/pg-pool.js +24 -17
- package/dist/plugins/remote-env-device.d.ts +3 -2
- package/dist/plugins/remote-env-e2b.d.ts +8 -32
- package/dist/plugins/remote-env-e2b.js +44 -32
- package/dist/plugins/remote-env-host.d.ts +51 -17
- package/dist/plugins/remote-env-host.js +111 -42
- package/dist/plugins/remote-env-k8s.d.ts +40 -45
- package/dist/plugins/remote-env-k8s.js +111 -60
- package/dist/plugins/remote-env-local-docker.d.ts +152 -15
- package/dist/plugins/remote-env-local-docker.js +352 -72
- package/dist/plugins/remote-scratchpad.js +4 -0
- package/dist/plugins/retention-deployment.d.ts +49 -17
- package/dist/plugins/retention-deployment.js +39 -8
- package/dist/plugins/run-preview-m45.d.ts +11 -0
- package/dist/plugins/run-preview-m45.js +19 -0
- package/dist/plugins/run-store-sql.d.ts +82 -75
- package/dist/plugins/run-store-sql.js +164 -125
- package/dist/plugins/s3-answer.d.ts +2 -1
- package/dist/plugins/sandbox-reaper.d.ts +26 -0
- package/dist/plugins/sandbox-reaper.js +2 -0
- package/dist/plugins/scenario-prefix-switch-m42.d.ts +56 -0
- package/dist/plugins/scenario-prefix-switch-m42.js +56 -0
- package/dist/plugins/scheduler-support.d.ts +16 -1
- package/dist/plugins/scheduler-support.js +22 -2
- package/dist/plugins/schema-consistency.d.ts +131 -14
- package/dist/plugins/schema-consistency.js +388 -18
- package/dist/plugins/schema-drift-sentence.d.ts +10 -6
- package/dist/plugins/schema-drift-sentence.js +15 -7
- package/dist/plugins/schema-ensure-legs.d.ts +9 -0
- package/dist/plugins/schema-ensure-legs.js +1 -1
- package/dist/plugins/schema-indexes.js +3 -0
- package/dist/plugins/schema-live-columns.d.ts +14 -5
- package/dist/plugins/schema-live-columns.js +10 -10
- package/dist/plugins/send-user-file.js +2 -1
- package/dist/plugins/session-birth.d.ts +37 -0
- package/dist/plugins/session-birth.js +38 -0
- package/dist/plugins/session-epoch-anchor.d.ts +40 -12
- package/dist/plugins/session-epoch-anchor.js +33 -11
- package/dist/plugins/session-ext-table.d.ts +27 -3
- package/dist/plugins/session-ext-table.js +19 -6
- package/dist/plugins/session-fork.d.ts +15 -1
- package/dist/plugins/session-fork.js +3 -0
- package/dist/plugins/session-ownership.d.ts +1 -1
- package/dist/plugins/session-placement.d.ts +27 -20
- package/dist/plugins/session-placement.js +15 -12
- package/dist/plugins/session-row-sql.d.ts +12 -0
- package/dist/plugins/session-row-sql.js +3 -3
- package/dist/plugins/session-run-rollup.d.ts +29 -0
- package/dist/plugins/session-run-rollup.js +40 -0
- package/dist/plugins/session-store-sql.d.ts +38 -12
- package/dist/plugins/session-store-sql.js +130 -30
- package/dist/plugins/session-withdraw-sql.d.ts +36 -0
- package/dist/plugins/session-withdraw-sql.js +42 -0
- package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
- package/dist/plugins/shared-memory-store-sql.js +2 -1
- package/dist/plugins/shell-sentinel-owner-m48.d.ts +42 -0
- package/dist/plugins/shell-sentinel-owner-m48.js +9 -0
- package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
- package/dist/plugins/sql-driver.d.ts +1 -1
- package/dist/plugins/sql-driver.js +2 -1
- package/dist/plugins/sql-errors.d.ts +32 -5
- package/dist/plugins/sql-errors.js +55 -7
- package/dist/plugins/sql-json-column.d.ts +8 -7
- package/dist/plugins/sql-json-column.js +10 -6
- package/dist/plugins/stop-then-start-sentence.d.ts +16 -0
- package/dist/plugins/stop-then-start-sentence.js +7 -0
- package/dist/plugins/store-backend.d.ts +99 -16
- package/dist/plugins/store-backend.js +230 -65
- package/dist/plugins/store-contracts.d.ts +123 -33
- package/dist/plugins/store-contracts.js +38 -1
- package/dist/plugins/store-fault.d.ts +28 -2
- package/dist/plugins/store-fault.js +20 -2
- package/dist/plugins/task-attachment-store.d.ts +15 -3
- package/dist/plugins/task-attachment-store.js +22 -9
- package/dist/plugins/tidb-pool.d.ts +11 -6
- package/dist/plugins/tidb-pool.js +39 -18
- package/dist/plugins/web-search.js +5 -3
- package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
- package/dist/plugins/workflow-run-store-sql.js +11 -5
- package/dist/plugins/workspace-custody.d.ts +44 -0
- package/dist/plugins/workspace-custody.js +47 -0
- package/dist/principal-jwt.d.ts +4 -4
- package/dist/principal-jwt.js +20 -5
- package/dist/principal-shape.d.ts +41 -0
- package/dist/principal-shape.js +19 -0
- package/dist/project-identity.d.ts +8 -7
- package/dist/project-identity.js +40 -17
- package/dist/project-layer-key.d.ts +13 -2
- package/dist/project-layer-key.js +9 -1
- package/dist/question.d.ts +13 -23
- package/dist/question.js +21 -39
- package/dist/read-deny-floor-notice.d.ts +36 -0
- package/dist/read-deny-floor-notice.js +40 -0
- package/dist/{plain-string-record.d.ts → request-declaration-disposition.d.ts} +9 -23
- package/dist/request-declaration-disposition.js +39 -0
- package/dist/request-declaration-refusal.d.ts +35 -12
- package/dist/request-declaration-refusal.js +21 -9
- package/dist/request-form.d.ts +58 -0
- package/dist/request-form.js +72 -0
- package/dist/request-image-urls.d.ts +8 -2
- package/dist/request-image-urls.js +2 -1
- package/dist/request-images.d.ts +20 -0
- package/dist/request-images.js +59 -0
- package/dist/request-key-closure.d.ts +6 -7
- package/dist/request-key-closure.js +15 -2
- package/dist/resource-suspend.d.ts +7 -16
- package/dist/resource-suspend.js +1 -1
- package/dist/retired-name-host-notice.d.ts +21 -0
- package/dist/retired-name-host-notice.js +12 -0
- package/dist/rule-entry-list.d.ts +2 -2
- package/dist/rule-entry-list.js +3 -4
- package/dist/rule-issue-reading.d.ts +58 -0
- package/dist/rule-issue-reading.js +14 -0
- package/dist/rules-consent.d.ts +5 -3
- package/dist/rules-consent.js +1 -0
- package/dist/run-acceptance.d.ts +3 -1
- package/dist/run-acceptance.js +3 -0
- package/dist/run-cancel-card.d.ts +28 -0
- package/dist/run-cancel-card.js +19 -0
- package/dist/run-cancel-context.d.ts +10 -0
- package/dist/run-cancel-context.js +1 -0
- package/dist/run-local.d.ts +14 -6
- package/dist/run-local.js +117 -90
- package/dist/run-stale-default.d.ts +7 -0
- package/dist/run-stale-default.js +2 -0
- package/dist/runs.d.ts +56 -21
- package/dist/runs.js +73 -43
- package/dist/runtime-caps-resolver.d.ts +21 -6
- package/dist/runtime-caps-resolver.js +17 -4
- package/dist/runtime-governance.d.ts +2 -2
- package/dist/runtime-governance.js +5 -3
- package/dist/sealed-key-layout.d.ts +12 -5
- package/dist/sealed-key-layout.js +5 -0
- package/dist/sealed-key.d.ts +12 -2
- package/dist/sealed-key.js +115 -27
- package/dist/security.d.ts +128 -158
- package/dist/security.js +163 -59
- package/dist/sema-config-dir.d.ts +20 -0
- package/dist/sema-config-dir.js +25 -0
- package/dist/server-secret-env.d.ts +55 -25
- package/dist/server-secret-env.js +75 -22
- package/dist/session-agent.d.ts +3 -2
- package/dist/session-children-retire.d.ts +13 -8
- package/dist/session-children-retire.js +9 -7
- package/dist/session-deletion.d.ts +88 -0
- package/dist/session-deletion.js +8 -0
- package/dist/session-erase.d.ts +145 -0
- package/dist/session-erase.js +115 -0
- package/dist/session-error-wire.d.ts +5 -5
- package/dist/session-error-wire.js +1 -1
- package/dist/session-incarnation.d.ts +52 -5
- package/dist/session-incarnation.js +19 -2
- package/dist/session-policy-wire.d.ts +6 -3
- package/dist/session-policy-wire.js +11 -1
- package/dist/session-resident-background.d.ts +0 -71
- package/dist/session-resident-background.js +4 -3
- package/dist/session-row.d.ts +2 -1
- package/dist/session-rules-seat.d.ts +12 -0
- package/dist/session-rules-seat.js +19 -0
- package/dist/session-titler.d.ts +7 -15
- package/dist/session-titler.js +1 -1
- package/dist/session-workspace.d.ts +3 -3
- package/dist/spec-fields.d.ts +57 -3
- package/dist/spec-fields.js +72 -51
- package/dist/store-admission.d.ts +33 -0
- package/dist/store-admission.js +49 -0
- package/dist/store-posture.d.ts +141 -20
- package/dist/store-posture.js +205 -3
- package/dist/stored-request-hooks-m20.js +2 -2
- package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
- package/dist/stores-sql/background-agent-store-sql.js +73 -20
- package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
- package/dist/stores-sql/checkpoint-store-sql.js +78 -49
- package/dist/stores-sql/file-history-store-sql.d.ts +1 -1
- package/dist/stores-sql/file-history-store-sql.js +3 -5
- package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
- package/dist/stores-sql/mailbox-store-sql.js +31 -32
- package/dist/stores-sql/pg-session-storage.d.ts +7 -5
- package/dist/stores-sql/pg-session-storage.js +54 -46
- package/dist/stores-sql/retention-store-sql.d.ts +87 -19
- package/dist/stores-sql/retention-store-sql.js +92 -27
- package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
- package/dist/stores-sql/session-policy-store-sql.js +44 -36
- package/dist/stores-sql/session-write-hooks.d.ts +12 -6
- package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
- package/dist/stores-sql/tidb-session-storage.js +13 -8
- package/dist/stores-sql/tidb-session-store.d.ts +36 -17
- package/dist/stores-sql/tidb-session-store.js +69 -39
- package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
- package/dist/stores-sql/tool-result-store-sql.js +4 -6
- package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
- package/dist/stores-sql/windowed-session-storage.js +9 -0
- package/dist/submission-exit.d.ts +50 -0
- package/dist/submission-exit.js +108 -0
- package/dist/task-a2a.d.ts +3 -8
- package/dist/task-a2a.js +28 -30
- package/dist/task-cwd.d.ts +43 -7
- package/dist/task-cwd.js +11 -0
- package/dist/task-mcp.d.ts +3 -3
- package/dist/task-mcp.js +4 -4
- package/dist/task-settings.d.ts +14 -10
- package/dist/task-settings.js +19 -7
- package/dist/terminal.d.ts +27 -43
- package/dist/terminal.js +49 -14
- package/dist/tool-approval.d.ts +173 -163
- package/dist/tool-approval.js +247 -232
- package/dist/trace/core-keyset-guard.d.ts +13 -6
- package/dist/trace/core-vocab-wire.d.ts +95 -0
- package/dist/trace/core-vocab-wire.js +15 -0
- package/dist/trace/engine-notice-wire.d.ts +24 -21
- package/dist/trace/engine-notice-wire.js +7 -3
- package/dist/trace/exit-seat.d.ts +30 -4
- package/dist/trace/exit-seat.js +40 -36
- package/dist/trace/extension-call-face.d.ts +3 -2
- package/dist/trace/extension-call-face.js +3 -1
- package/dist/trace/ledger-events.d.ts +4 -7
- package/dist/trace/ledger-sink.d.ts +4 -31
- package/dist/trace/ledger-sink.js +0 -11
- package/dist/trace/model-segment.d.ts +5 -5
- package/dist/trace/model-segment.js +5 -5
- package/dist/trace/project.d.ts +59 -44
- package/dist/trace/project.js +60 -26
- package/dist/trace/redact.d.ts +135 -27
- package/dist/trace/redact.js +884 -260
- package/dist/trace/self-minted-wire.d.ts +567 -20
- package/dist/trace/self-minted-wire.js +205 -24
- package/dist/trace/wire-projection-faces.d.ts +5 -6
- package/dist/trace/wire-projection-faces.js +2 -2
- package/dist/upstream-body.d.ts +23 -0
- package/dist/upstream-body.js +16 -0
- package/dist/url-refusal.d.ts +3 -3
- package/dist/url-refusal.js +11 -4
- package/dist/user-authored-text.d.ts +1 -1
- package/dist/user-input-ledger.d.ts +7 -8
- package/dist/user-input-ledger.js +1 -1
- package/dist/web-admin-client/apply-effective.d.ts +6 -3
- package/dist/web-admin-client/apply-effective.js +33 -23
- package/dist/web-admin-client/apply-ledger.d.ts +16 -7
- package/dist/web-admin-client/apply-ledger.js +5 -2
- package/dist/web-admin-client/center-request.d.ts +2 -2
- package/dist/web-admin-client/center-request.js +15 -15
- package/dist/web-admin-client/effective-keys.d.ts +1 -1
- package/dist/web-admin-client/effective-keys.js +1 -1
- package/dist/web-admin-client/entry-metadata.d.ts +8 -0
- package/dist/web-admin-client/entry-metadata.js +13 -0
- package/dist/web-admin-client/http-client.d.ts +1 -1
- package/dist/web-admin-client/http-client.js +23 -4
- package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
- package/dist/web-admin-client/mcp-revocation.js +2 -1
- package/dist/web-admin-client/read-warnings.d.ts +1 -0
- package/dist/web-admin-client/read-warnings.js +1 -0
- package/dist/web-admin-client/restart-signal.js +8 -4
- package/dist/web-admin-client/skills-mcp.d.ts +2 -2
- package/dist/web-admin-client/types.d.ts +1 -2
- package/dist/workspace-space.d.ts +3 -2
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
- package/docs/error-text-lexicon.json +317 -0
- package/package.json +8 -3
- package/scripts/drain-check-local.mjs +118 -147
- package/scripts/drain-check.mysql.sql +22 -2
- package/scripts/drain-check.pg.sql +22 -2
- package/scripts/embed-minimal.mjs +183 -0
- package/wire-changes/server@7.148.0.json +1517 -0
- package/wire-changes/server@7.149.0.json +372 -0
- package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
- package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
- package/dist/http/memory-layer-reply.d.ts +0 -30
- package/dist/http/memory-layer-reply.js +0 -24
- package/dist/lsp/e2b-bridge.d.ts +0 -57
- package/dist/lsp/e2b-bridge.js +0 -139
- package/dist/lsp/e2b-manager.d.ts +0 -93
- package/dist/lsp/e2b-manager.js +0 -178
- package/dist/lsp/lsp-frames.d.ts +0 -14
- package/dist/lsp/lsp-frames.js +0 -25
- package/dist/lsp/manager.d.ts +0 -129
- package/dist/lsp/manager.js +0 -127
- package/dist/lsp/types.d.ts +0 -12
- package/dist/lsp/types.js +0 -2
- package/dist/lsp/ws-transport.d.ts +0 -40
- package/dist/lsp/ws-transport.js +0 -210
- package/dist/plain-string-record.js +0 -70
|
@@ -10,15 +10,14 @@ import { toolPolicyForHands } from "../capabilities/hands-lane.js";
|
|
|
10
10
|
import { mintLegFacts } from "../leg-facts.js";
|
|
11
11
|
import { applyLongtailDefer } from "../capabilities/tool-defer.js";
|
|
12
12
|
import { assertGuardPatternsUsable, buildApprovalGrantNotice, buildOnlySensitiveBaselineWarning, createApprovalBaselinePolicy, createDeploymentGovernanceInputs } from "../deployment-governance.js";
|
|
13
|
-
import {
|
|
13
|
+
import { createSessionExemptionRead, gateIntentUnserviceableReason, singleUserAutoAcceptBaselineApplies } from "../approval.js";
|
|
14
14
|
import { acceptShellScratchpadDir, buildEnvFacts, egressForRemoteExec, ensureScratchpadDir, resumeFactsForLane, scratchpadCoveringTaskRoot } from "../env-facts.js";
|
|
15
15
|
import { FleetEventBus } from "../fleet/fleet-bus.js";
|
|
16
16
|
import { createSettingsHooksRegistrations, settingsHooksBudgetMs } from "../hooks/hook-runner.js";
|
|
17
|
-
import { HOST_POSTURE_REFUSED_CODE, permissionModeWriteFaceRefusal, taskInheritEnvRefusal } from "../hosted-posture.js";
|
|
18
17
|
import { headerStr } from "../http/principal-gate.js";
|
|
19
18
|
import { explicitOperatorOk } from "../http/server.js";
|
|
20
|
-
import { isAtMentionable, matchCatalogModel,
|
|
21
|
-
import { echoModelRef, modelUnavailableMessage } from "../model-entry-refusal.js";
|
|
19
|
+
import { isAtMentionable, matchCatalogModel, pickUserModel, refusedCatalogEntry, terminalCatalogName } from "../model-select.js";
|
|
20
|
+
import { echoModelRef, modelNotAllowedMessage, modelUnavailableMessage, refusedNameLogField } from "../model-entry-refusal.js";
|
|
22
21
|
import { PerTaskImageRegistry, resolveSandboxImageRef } from "../per-task-image.js";
|
|
23
22
|
import { remoteScratchpadDirFor } from "../plugins/remote-scratchpad.js";
|
|
24
23
|
import { attachmentBindRefusalAnswer, bindAttachmentsForTask } from "../plugins/task-attachment-store.js";
|
|
@@ -26,20 +25,23 @@ import { resourceSuspendOptIn } from "../resource-suspend.js";
|
|
|
26
25
|
import { routeServiceTask, supPostureOverrides } from "../router/route-orchestration.js";
|
|
27
26
|
import { tightenGoverned } from "../governance-overrides.js";
|
|
28
27
|
import { applyRuntimeGovernance } from "../runtime-governance.js";
|
|
29
|
-
import { HttpError, createCodedHttpError, encodeCheckpointScope } from "../security.js";
|
|
30
|
-
import {
|
|
28
|
+
import { HttpError, claimCallerOf, createCodedHttpError, encodeCheckpointScope } from "../security.js";
|
|
29
|
+
import { partsOf } from "../owner-brands.js";
|
|
30
|
+
import { recoveredSubject } from "../owner-faces.js";
|
|
31
|
+
import { taskSpecIdentityOf } from "../engine-identity.js";
|
|
32
|
+
import { anchorReaderOf, resolveHistoryAnchor } from "../history-anchor.js";
|
|
31
33
|
import { headReadOf, sessionFaceOfHead } from "../session-incarnation.js";
|
|
32
34
|
import { legProjectIdOf, sessionWorkspaceStoreOf } from "../session-workspace.js";
|
|
33
35
|
import { memorySpecForRequest } from "../memory-scope.js";
|
|
34
36
|
import { createMemoryProjectLayers } from "../memory-project-layer.js";
|
|
35
|
-
import {
|
|
37
|
+
import { inheritEnvFieldIssue, singleMemberOffFieldIssue } from "../request-value-closure.js";
|
|
36
38
|
import { a2aForScenario, mcpForScenario } from "../web-admin-client/facade.js";
|
|
37
39
|
import { compactionSpecFragment, normalizeAttachments, normalizeResilience, normalizeResumeAtMode, normalizeSuggestNextPrompts, promptLeanSpecFragment, resolveTaskLimits, retainBackgroundProcessesFromBody, taskAgentsSpecFragment, toolMaterializeStrategyFromBody, allowToolsSpecFragment, toolNameListFromBody } from "../spec-fields.js";
|
|
38
40
|
import { isAbsoluteHostPath } from "@sema-agent/settings-schema";
|
|
39
41
|
import { effectiveHostWorkspace, parseAdditionalDirectories, satisfiedByProcessCwd, shellEnvMismatchCount } from "../task-cwd.js";
|
|
40
42
|
import { DEPLOYMENT_SHAPE_PREDICATES } from "../deployment-shape.js";
|
|
41
43
|
import { assertRequestA2aEntries, resolveRequestA2a, snapshotRequestA2a } from "../task-a2a.js";
|
|
42
|
-
import {
|
|
44
|
+
import { assertRequestImages } from "../request-images.js";
|
|
43
45
|
import { assertRequestMcpEntries, assertRequestMcpUnlocked, resolveRequestMcp } from "../task-mcp.js";
|
|
44
46
|
import { GOVERNANCE_HTTP_STATUS } from "../governance-http-status.js";
|
|
45
47
|
import { storedToolAxesRereadM19 } from "../stored-request-tool-axes-m19.js";
|
|
@@ -48,8 +50,10 @@ import { storedEnvCredentialsDropM38 } from "../stored-request-env-credentials-m
|
|
|
48
50
|
import { serverCredentialValueSources } from "../server-secret-env.js";
|
|
49
51
|
import { MAX_SETTINGS_OUTPUT_STYLE_CHARS, REQUEST_SETTINGS_REFUSAL_PREFIX, SETTINGS_RULE_REFUSAL_CODE, SettingsRuleRefusalError, acceptAppendSystemPrompt, applyTaskSettings, createWorkflowAskPolicy, effectivePermissionMode, effectiveThinking, parseTaskSettings, readSettingsEnv, taskHooksHonored, settingsEnvCredentialIssue, settingsPermissionBucketIssue, withoutKeys } from "../task-settings.js";
|
|
50
52
|
import { tightenOnlySeatIssue } from "../tighten-only-seats.js";
|
|
53
|
+
import { buildNeverAutoRetiredNotice } from "../retired-name-host-notice.js";
|
|
51
54
|
import { entryProblemsFacts } from "../entry-problems.js";
|
|
52
55
|
import { inertToolListEntryOf } from "../rule-entry-list.js";
|
|
56
|
+
import { assertAttachmentIdsShape, assertImageProfileLane, assertInheritEnvServed, assertToolListsReadable, assertWriteFaceAdmitted, bodyImageProfileOf, scenarioRequestedBy } from "../request-form.js";
|
|
53
57
|
import { TENANCY_WALL_CLOCK_BASE_SEC, enableForkFromBody, normalizeRetainSubagentSessions, selfOrchestrationFromBody } from "../task-workflow.js";
|
|
54
58
|
import { redactSecrets } from "../trace/redact.js";
|
|
55
59
|
import { DeferredSandboxPathEnv, sandboxPathEnvSlots } from "./deferred-sandbox-path-env.js";
|
|
@@ -57,15 +61,21 @@ import { executionLaneHomeDir, executionLaneOf, laneIsolated, laneWiresExecution
|
|
|
57
61
|
import { executionConfigRootOf } from "../execution-config-root.js";
|
|
58
62
|
import { withUnattendedLeg } from "../unattended-permission-mode.js";
|
|
59
63
|
import { fieldConflictFacts } from "../field-conflict.js";
|
|
64
|
+
function identityAxesOf(auth) {
|
|
65
|
+
const subject = auth?.subject === undefined ? undefined : recoveredSubject(auth.subject);
|
|
66
|
+
const parts = subject === undefined ? undefined : partsOf(subject);
|
|
67
|
+
return { subject, parts, person: parts?.person };
|
|
68
|
+
}
|
|
60
69
|
function unrooted(spec) {
|
|
61
70
|
const { sessionId: _neverWritten, ...resolved } = spec;
|
|
62
71
|
return resolved;
|
|
63
72
|
}
|
|
64
73
|
export function createResolveSpec(ctx) {
|
|
65
|
-
const { config, logger, metrics, localRoot, scenarios, principalCaps, centerRuntimeCapsResolver, getKeyResolver, taskAttachmentStore, perSessionCwd, setSessionCwd, setSessionShellEnv, fenceSessionOwner, hookLlm, hookAgent, belowTaskChainPatterns, fleetBus, hookWakeBus,
|
|
74
|
+
const { config, logger, metrics, localRoot, scenarios, principalCaps, centerRuntimeCapsResolver, getKeyResolver, taskAttachmentStore, perSessionCwd, setSessionCwd, setSessionShellEnv, fenceSessionOwner, hookLlm, hookAgent, belowTaskChainPatterns, fleetBus, hookWakeBus, historyAnchors, ownerAware, taskLimitCaps, taskTimeoutSec, selectEnvTool, sendUserFileToolSpec, memoryEngine, memorySyncRunner, durableEnabled, approvalExemptionStore, checkpointStore, imageIndex, perTaskImage, sessionEnvSelection, liveQuestionFace, approverSeat, lockedKeys, loadedSkills, peerDesk, } = ctx;
|
|
66
75
|
const deploymentSkillSources = new Map(loadedSkills.map((k) => [k.spec.name, k.source]));
|
|
67
76
|
const scenarioGate = createScenarioGate({ config, scenarios, principalCaps, logger }, "enforce");
|
|
68
77
|
const sessionHeadOf = headReadOf(ownerAware);
|
|
78
|
+
const anchorsResolvable = sessionHeadOf === undefined ? undefined : historyAnchors;
|
|
69
79
|
const sessionWorkspace = sessionWorkspaceStoreOf(ownerAware);
|
|
70
80
|
assertGuardPatternsUsable(config);
|
|
71
81
|
const onlySensitiveBaseline = buildOnlySensitiveBaselineWarning(config, {
|
|
@@ -120,15 +130,7 @@ export function createResolveSpec(ctx) {
|
|
|
120
130
|
const inheritEnvIssue = inheritEnvFieldIssue(body);
|
|
121
131
|
if (inheritEnvIssue)
|
|
122
132
|
throw new HttpError(400, inheritEnvIssue.message, { code: "request.field_invalid", extra: inheritEnvIssue.facts });
|
|
123
|
-
|
|
124
|
-
const lane = config.remoteExec.provider;
|
|
125
|
-
if (lane !== "host") {
|
|
126
|
-
throw new HttpError(400, `inheritEnv:"all" applies to the host lane only (this deployment runs ${lane}) — only the host lane builds the model-driven shell's environment from this machine's own, so the declaration has no effect here; omit it (or send "scrub", the default, which every lane accepts)`, { code: "request.field_invalid", extra: inheritEnvFacts("lane_not_host") });
|
|
127
|
-
}
|
|
128
|
-
const why = taskInheritEnvRefusal(config);
|
|
129
|
-
if (why !== undefined)
|
|
130
|
-
throw new HttpError(422, why, { code: HOST_POSTURE_REFUSED_CODE });
|
|
131
|
-
}
|
|
133
|
+
assertInheritEnvServed(body, config);
|
|
132
134
|
}
|
|
133
135
|
{
|
|
134
136
|
const bucketIssue = settingsPermissionBucketIssue(body.settings?.permissions);
|
|
@@ -162,9 +164,7 @@ export function createResolveSpec(ctx) {
|
|
|
162
164
|
}
|
|
163
165
|
{
|
|
164
166
|
const replay = opts?.leg === "resume";
|
|
165
|
-
|
|
166
|
-
if (inertList !== undefined)
|
|
167
|
-
throw new HttpError(400, inertList.message, { code: inertList.code, ...(inertList.extra !== undefined ? { extra: { ...inertList.extra } } : {}) });
|
|
167
|
+
assertToolListsReadable(body, replay ? ["deny"] : undefined);
|
|
168
168
|
if (replay) {
|
|
169
169
|
const stale = inertToolListEntryOf(body, ["allow"]);
|
|
170
170
|
if (stale !== undefined) {
|
|
@@ -187,32 +187,34 @@ export function createResolveSpec(ctx) {
|
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
189
|
if (opts?.leg === "fresh")
|
|
190
|
-
|
|
190
|
+
assertRequestImages(body.images);
|
|
191
191
|
const gated = await gateScenarioAndAppend(body, auth, root, opts, settingsEnv);
|
|
192
192
|
const effMode = effectivePermissionMode(body, gated.parsedSettings.settings);
|
|
193
|
-
|
|
194
|
-
const why = permissionModeWriteFaceRefusal(effMode, config);
|
|
195
|
-
if (why !== undefined)
|
|
196
|
-
throw new HttpError(422, why, { code: HOST_POSTURE_REFUSED_CODE });
|
|
197
|
-
}
|
|
193
|
+
assertWriteFaceAdmitted(effMode, config);
|
|
198
194
|
const lane = bindSettingsCwdEnvAndModel(body, auth, root, gated, opts);
|
|
199
|
-
const anchors = await resolveHistoryAnchors(body, auth, root);
|
|
195
|
+
const anchors = await resolveHistoryAnchors(body, req, auth, root);
|
|
200
196
|
const projectKey = memoryEngine ? await memoryProjectLayers.prepare(config, auth?.memoryScope, realTaskRootOf(root)) : undefined;
|
|
201
197
|
const runSkills = buildRunSkills({ scenario: gated.cap.skills, request: body.skills, disable: body.disableSkills === true, deploymentSources: deploymentSkillSources }, logger);
|
|
202
198
|
const spec = assembleSpecLiteral(body, auth, root, req, opts, { ...gated, ...lane, ...anchors, projectKey, a2aPeers, storedToolAxes, runSkills }, effMode);
|
|
203
199
|
const folded = await foldGovernanceAndSettings(body, auth, root, spec, gated);
|
|
200
|
+
const retiredNotice = opts.onNotice !== undefined ? buildNeverAutoRetiredNotice(gated.parsedSettings.settings?.tightenOnly?.neverAuto, root) : undefined;
|
|
201
|
+
if (retiredNotice !== undefined)
|
|
202
|
+
opts.onNotice?.(retiredNotice);
|
|
204
203
|
const final = await applyImageFactsAndRouting(body, auth, root, folded.governed, {
|
|
205
204
|
scenarioName: gated.scenarioName,
|
|
206
205
|
scratchpadDir: folded.scratchpadDir,
|
|
207
206
|
hostSemanticsLane: folded.hostSemanticsLane,
|
|
208
207
|
});
|
|
209
|
-
|
|
208
|
+
const registeredCwd = perSessionCwd.get(root);
|
|
209
|
+
return { spec: final, facts: { hands: gated.hands, skills: runSkills.roster, sessionWitness: gated.sessionWitness, ...(registeredCwd !== undefined ? { registeredCwd } : {}) } };
|
|
210
210
|
};
|
|
211
211
|
const gateScenarioAndAppend = async (body, auth, root, opts, settingsEnv) => {
|
|
212
|
-
const
|
|
212
|
+
const { parts: subjectParts, person } = identityAxesOf(auth);
|
|
213
|
+
const requestedScenario = scenarioRequestedBy(subjectParts?.scenario, body.scenario);
|
|
214
|
+
const scenarioName = await scenarioGate(person, requestedScenario);
|
|
213
215
|
const rootFace = sessionHeadOf === undefined ? undefined : sessionFaceOfHead(root, await sessionHeadOf(root));
|
|
214
216
|
const sessionWitness = { sessionId: root, owner: rootFace?.owner ?? null, incarnation: rootFace?.incarnation ?? null };
|
|
215
|
-
const cap = selectScenario(scenarios, scenarioName)(body,
|
|
217
|
+
const cap = selectScenario(scenarios, scenarioName)(body, person, { sessionId: sessionWitness.sessionId, delegationRoot: sessionWitness });
|
|
216
218
|
const acceptedAppend = acceptAppendSystemPrompt(body.appendSystemPrompt, (detail) => logger.warn("append_system_prompt_dropped", { detail, sessionId: root }));
|
|
217
219
|
const objective = typeof body.objective === "string" ? body.objective : "";
|
|
218
220
|
const parsedSettings = parseTaskSettings(body.settings, {
|
|
@@ -231,18 +233,14 @@ export function createResolveSpec(ctx) {
|
|
|
231
233
|
{
|
|
232
234
|
const reqAtt = body.attachmentIds;
|
|
233
235
|
if (reqAtt !== undefined) {
|
|
234
|
-
|
|
235
|
-
throw new HttpError(400, "`attachmentIds` must be an array of attachment ids (strings)");
|
|
236
|
-
}
|
|
237
|
-
if (reqAtt.length > 16)
|
|
238
|
-
throw new HttpError(400, "`attachmentIds` exceeds the per-task limit (16)");
|
|
236
|
+
assertAttachmentIdsShape(reqAtt);
|
|
239
237
|
if (reqAtt.length > 0) {
|
|
240
238
|
if (!taskAttachmentStore)
|
|
241
239
|
throw new HttpError(501, "attachmentIds require a store backend (DB_BACKEND=mysql|pg|local)");
|
|
242
240
|
const lane = opts.execution.lane;
|
|
243
241
|
const r = await bindAttachmentsForTask({
|
|
244
242
|
store: taskAttachmentStore,
|
|
245
|
-
owner: auth?.
|
|
243
|
+
owner: auth?.subject ?? "default",
|
|
246
244
|
ids: reqAtt,
|
|
247
245
|
sessionId: root,
|
|
248
246
|
lane: { word: lane, isolated: laneIsolated(lane) },
|
|
@@ -270,7 +268,7 @@ export function createResolveSpec(ctx) {
|
|
|
270
268
|
const { objective, parsedSettings } = gated;
|
|
271
269
|
const cwdWriteGate = DEPLOYMENT_SHAPE_PREDICATES.callerCwd.holds(config);
|
|
272
270
|
const execLane = config.remoteExec.provider;
|
|
273
|
-
fenceSessionOwner(root, auth?.
|
|
271
|
+
fenceSessionOwner(root, auth?.subject ?? null, opts.execution.occupant?.incarnation);
|
|
274
272
|
if (typeof body.cwd === "string" && body.cwd.length > 0) {
|
|
275
273
|
if (cwdWriteGate && isAbsoluteHostPath(body.cwd))
|
|
276
274
|
setSessionCwd(root, body.cwd);
|
|
@@ -305,6 +303,7 @@ export function createResolveSpec(ctx) {
|
|
|
305
303
|
logger,
|
|
306
304
|
sessionId: root,
|
|
307
305
|
cwd: perSessionCwd.get(root) ?? process.cwd(),
|
|
306
|
+
hookEnvAllow: config.hookEnvAllow,
|
|
308
307
|
...(parsedSettings.settings?.shellEnv ? { shellEnv: parsedSettings.settings.shellEnv } : {}),
|
|
309
308
|
httpHookAllowlistLayers: parsedSettings.settings?.httpHookAllowlist !== undefined ? [parsedSettings.settings.httpHookAllowlist] : [],
|
|
310
309
|
belowTaskChainPatterns,
|
|
@@ -312,7 +311,7 @@ export function createResolveSpec(ctx) {
|
|
|
312
311
|
hookAgent,
|
|
313
312
|
onHookNotice: (n) => fleetBus.publishHookNotice({
|
|
314
313
|
...n,
|
|
315
|
-
...(auth?.
|
|
314
|
+
...(auth?.subject ? { ownerScope: auth.subject } : {}),
|
|
316
315
|
ownerSessionId: root,
|
|
317
316
|
}),
|
|
318
317
|
wake: async (text) => hookWakeBus.deliver
|
|
@@ -332,20 +331,19 @@ export function createResolveSpec(ctx) {
|
|
|
332
331
|
if (rawAddReadDirs !== undefined && !callerOwnsWorkerDisk) {
|
|
333
332
|
logger.warn("task_additional_read_directories_ignored", { honored: false, sessionId: root });
|
|
334
333
|
}
|
|
335
|
-
const wireCatalog =
|
|
336
|
-
const picked = resolveTaskModel(body.model ?? parsedSettings.settings?.model, objective, wireCatalog, config.atMention, config.modelRefusals);
|
|
334
|
+
const { selectable: wireCatalog, picked } = pickUserModel(config, body.model ?? parsedSettings.settings?.model, objective);
|
|
337
335
|
if (picked.unavailable !== undefined) {
|
|
338
336
|
const { requested, name, refusal, source } = picked.unavailable;
|
|
339
337
|
if (opts?.leg === "fresh") {
|
|
340
338
|
throw new HttpError(400, modelUnavailableMessage(source === "mention" ? "@-mention" : "model", requested, name, refusal), { code: "request.model_unavailable" });
|
|
341
339
|
}
|
|
342
340
|
metrics.inc("task_model_unavailable_fallback_total");
|
|
343
|
-
logger.warn("task_model_unavailable_fallback", { requested: echoModelRef(requested), name, code: refusal.code, source, fallback: picked.model, sessionId: root });
|
|
341
|
+
logger.warn("task_model_unavailable_fallback", { requested: echoModelRef(requested), ...refusedNameLogField("name", name), code: refusal.code, source, fallback: picked.model, sessionId: root });
|
|
344
342
|
}
|
|
345
343
|
if (picked.notAllowed !== undefined) {
|
|
346
344
|
const { requested, resolved, source } = picked.notAllowed;
|
|
347
345
|
if (opts?.leg === "fresh") {
|
|
348
|
-
throw new HttpError(400,
|
|
346
|
+
throw new HttpError(400, modelNotAllowedMessage("model", requested, resolved), { code: "request.model_not_allowed" });
|
|
349
347
|
}
|
|
350
348
|
metrics.inc("task_model_not_allowlisted_resume_total");
|
|
351
349
|
logger.warn("task_model_not_allowlisted_resume", { requested: echoModelRef(requested), resolved, source, sessionId: root, note: "resumed leg keeps running the model it was started on — the allowlist gates fresh picks only" });
|
|
@@ -356,18 +354,19 @@ export function createResolveSpec(ctx) {
|
|
|
356
354
|
}
|
|
357
355
|
return { taskHooks, additionalDirectories, additionalReadDirectories, wireCatalog, picked };
|
|
358
356
|
};
|
|
359
|
-
const resolveHistoryAnchors = async (body, auth, root) => {
|
|
357
|
+
const resolveHistoryAnchors = async (body, req, auth, root) => {
|
|
358
|
+
const anchorReader = req === undefined ? undefined : anchorReaderOf(req, { config, logger }, claimCallerOf(identityAxesOf(auth).subject, config));
|
|
360
359
|
let resumeAtEntryId;
|
|
361
360
|
if (typeof body.resumeAt === "string" && body.resumeAt.length > 0) {
|
|
362
|
-
if (!
|
|
361
|
+
if (!anchorsResolvable)
|
|
363
362
|
throw new HttpError(501, "resume-at is not available on this worker (no session-store backend for the anchor map)");
|
|
364
|
-
resumeAtEntryId = await resolveHistoryAnchor("resumeAt",
|
|
363
|
+
resumeAtEntryId = await resolveHistoryAnchor("resumeAt", anchorsResolvable, anchorReader, root, body.resumeAt, auth?.subject ?? null, "resumeAt");
|
|
365
364
|
}
|
|
366
365
|
let rewindFilesToEntryId;
|
|
367
366
|
if (resumeAtEntryId === undefined && typeof body.rewindFilesTo === "string" && body.rewindFilesTo.length > 0) {
|
|
368
|
-
if (!
|
|
367
|
+
if (!anchorsResolvable)
|
|
369
368
|
throw new HttpError(501, "rewind-files-to is not available on this worker (no session-store backend for the anchor map)");
|
|
370
|
-
rewindFilesToEntryId = await resolveHistoryAnchor("rewindFilesTo",
|
|
369
|
+
rewindFilesToEntryId = await resolveHistoryAnchor("rewindFilesTo", anchorsResolvable, anchorReader, root, body.rewindFilesTo, auth?.subject ?? null, "rewindFilesTo");
|
|
371
370
|
}
|
|
372
371
|
const submittedProjectId = auth?.resolvedProjectId ?? (typeof body.projectId === "string" && body.projectId ? body.projectId.toLowerCase() : undefined);
|
|
373
372
|
const s4DefaultScopes = submittedProjectId ? config.projects[submittedProjectId]?.defaultScopes : undefined;
|
|
@@ -389,6 +388,7 @@ export function createResolveSpec(ctx) {
|
|
|
389
388
|
return deriveAskEffective(askForm.form, "unresolved") === "human_reachable";
|
|
390
389
|
};
|
|
391
390
|
const assembleSpecLiteral = (body, auth, root, req, opts, parts, effMode) => {
|
|
391
|
+
const { parts: subjectParts, person } = identityAxesOf(auth);
|
|
392
392
|
const { scenarioName, cap, hands, acceptedAppend, parsedSettings, attachmentNotice, taskHooks, additionalDirectories, additionalReadDirectories, wireCatalog, picked, resumeAtEntryId, rewindFilesToEntryId, s4DefaultScopes, legProjectId, projectKey, a2aPeers, storedToolAxes, runSkills, } = parts;
|
|
393
393
|
const spec = {
|
|
394
394
|
objective: attachmentNotice ? `${picked.cleanedObjective}\n\n${attachmentNotice}` : picked.cleanedObjective,
|
|
@@ -397,7 +397,7 @@ export function createResolveSpec(ctx) {
|
|
|
397
397
|
...(body.outputStyle !== undefined ? { outputStyle: body.outputStyle } : {}),
|
|
398
398
|
...(body.projectMemory !== undefined ? { projectMemory: body.projectMemory } : {}),
|
|
399
399
|
...(legProjectId !== undefined ? { projectId: legProjectId } : {}),
|
|
400
|
-
principal:
|
|
400
|
+
principal: taskSpecIdentityOf(subjectParts).principal,
|
|
401
401
|
images: body.images,
|
|
402
402
|
...(body.userAttachments !== undefined ? { userAttachments: body.userAttachments } : {}),
|
|
403
403
|
...(body.clientContext ? { clientContext: { timeZone: body.clientContext.timeZone, userEmail: body.clientContext.userEmail } } : {}),
|
|
@@ -408,7 +408,6 @@ export function createResolveSpec(ctx) {
|
|
|
408
408
|
: {}),
|
|
409
409
|
resumeAt: resumeAtEntryId,
|
|
410
410
|
resumeAtMode: normalizeResumeAtMode(body.resumeAtMode, resumeAtEntryId !== undefined),
|
|
411
|
-
requireExistingSession: body.requireExistingSession === true ? true : undefined,
|
|
412
411
|
enableFork: enableForkFromBody(body, config, Boolean(centerRuntimeCapsResolver)),
|
|
413
412
|
suggestNextPrompts: normalizeSuggestNextPrompts(body.suggestNextPrompts),
|
|
414
413
|
restoreFiles: body.restoreFiles === true ? true : undefined,
|
|
@@ -436,7 +435,7 @@ export function createResolveSpec(ctx) {
|
|
|
436
435
|
...(declaresInteractivePosture(body, req, opts) ? { interactionPosture: "interactive" } : {}),
|
|
437
436
|
...(body.approvalReach !== undefined ? { approvalReach: body.approvalReach } : {}),
|
|
438
437
|
...(typeof body.oneShot === "boolean" ? { oneShot: body.oneShot } : {}),
|
|
439
|
-
resilience: normalizeResilience(body.resilience, explicitOperatorOk(
|
|
438
|
+
resilience: normalizeResilience(body.resilience, explicitOperatorOk(person, config)),
|
|
440
439
|
finalVerification: cap.finalVerification === true || body.finalVerification === true ? true : undefined,
|
|
441
440
|
attachments: normalizeAttachments(body.attachments),
|
|
442
441
|
...(taskHooks.length > 0 ? { mods: [...taskHooks] } : {}),
|
|
@@ -460,7 +459,7 @@ export function createResolveSpec(ctx) {
|
|
|
460
459
|
if (!isAtMentionable(cm, wireCatalog, config.atMention, config.modelRefusals)) {
|
|
461
460
|
const terminal = terminalCatalogName(cm, wireCatalog, config.modelRefusals) ?? cm;
|
|
462
461
|
if (opts?.leg === "fresh") {
|
|
463
|
-
throw new HttpError(400,
|
|
462
|
+
throw new HttpError(400, modelNotAllowedMessage("compactionModel", body.compactionModel, terminal), { code: "request.model_not_allowed" });
|
|
464
463
|
}
|
|
465
464
|
metrics.inc("task_model_not_allowlisted_resume_total");
|
|
466
465
|
logger.warn("task_model_not_allowlisted_resume", { requested: echoModelRef(body.compactionModel), resolved: terminal, source: "compaction", sessionId: root, note: "resumed leg keeps the compaction model it was started with — the allowlist gates fresh picks only" });
|
|
@@ -519,12 +518,12 @@ export function createResolveSpec(ctx) {
|
|
|
519
518
|
...(parsedSettings.settings?.skillListingBudgetFraction !== undefined ? { skillListingBudgetFraction: parsedSettings.settings.skillListingBudgetFraction } : {}),
|
|
520
519
|
...(parsedSettings.settings?.skillListingMaxDescChars !== undefined ? { skillListingMaxDescChars: parsedSettings.settings.skillListingMaxDescChars } : {}),
|
|
521
520
|
mcp: resolveRequestMcp(mcpForScenario(config.mcpServers, scenarioName), body.mcpServers, config, peerDesk, opts.lease, logger, opts?.onNotice !== undefined ? { sessionId: root, emit: opts.onNotice } : undefined, storedToolAxes),
|
|
522
|
-
a2a: resolveRequestA2a(a2aForScenario(config.a2aPeers, scenarioName), a2aPeers, config, peerDesk, opts.lease, logger,
|
|
521
|
+
a2a: resolveRequestA2a(a2aForScenario(config.a2aPeers, scenarioName), a2aPeers, config, peerDesk, opts.lease, logger, storedToolAxes),
|
|
523
522
|
toolPolicy: toolPolicyForHands(hands, durableEnabled
|
|
524
523
|
? createApprovalBaselinePolicy(config, {
|
|
525
524
|
kind: "durable",
|
|
526
525
|
question: liveQuestionFace,
|
|
527
|
-
...(approvalExemptionStore !== undefined ? { exemption:
|
|
526
|
+
...(approvalExemptionStore !== undefined ? { exemption: createSessionExemptionRead(approvalExemptionStore, root, logger, "deployment_list") } : {}),
|
|
528
527
|
})
|
|
529
528
|
: singleUserAutoAcceptBaselineApplies(config)
|
|
530
529
|
? createApprovalBaselinePolicy(config, { kind: "absent" })
|
|
@@ -533,14 +532,13 @@ export function createResolveSpec(ctx) {
|
|
|
533
532
|
? {
|
|
534
533
|
checkpointStore,
|
|
535
534
|
durableApproval: {
|
|
536
|
-
scope: encodeCheckpointScope(auth?.
|
|
535
|
+
scope: encodeCheckpointScope(auth?.subject),
|
|
537
536
|
...(config.approvalTimeoutSec > 0 ? { ttlMs: config.approvalTimeoutSec * 1000 } : {}),
|
|
538
537
|
},
|
|
539
538
|
...((rs) => (rs ? { resourceSuspend: rs } : {}))(resourceSuspendOptIn({
|
|
540
539
|
enabled: config.resourceSuspend,
|
|
541
540
|
ttlSec: config.resourceSuspendTtlSec,
|
|
542
|
-
|
|
543
|
-
scope: encodeCheckpointScope(auth?.principal),
|
|
541
|
+
scope: encodeCheckpointScope(auth?.subject),
|
|
544
542
|
totalTokens: config.resourceSuspendTotalTokens,
|
|
545
543
|
totalBudgetUsd: config.resourceSuspendTotalBudgetUsd,
|
|
546
544
|
maxSlices: config.resourceSuspendMaxSlices,
|
|
@@ -612,27 +610,19 @@ export function createResolveSpec(ctx) {
|
|
|
612
610
|
}
|
|
613
611
|
if (governed.selfOrchestration === true) {
|
|
614
612
|
governed = tightenGoverned(governed, {
|
|
615
|
-
toolPolicy: createWorkflowAskPolicy(approvalExemptionStore
|
|
616
|
-
? async (toolName) => {
|
|
617
|
-
const hit = await approvalExemptionStore.has(root, toolName);
|
|
618
|
-
if (hit)
|
|
619
|
-
logger.info("workflow_gate_exempted", { toolName, sessionId: root });
|
|
620
|
-
return hit;
|
|
621
|
-
}
|
|
622
|
-
: undefined),
|
|
613
|
+
toolPolicy: createWorkflowAskPolicy(approvalExemptionStore ? createSessionExemptionRead(approvalExemptionStore, root, logger, "workflow_gate") : undefined),
|
|
623
614
|
});
|
|
624
615
|
}
|
|
625
616
|
return { governed, scratchpadDir, hostSemanticsLane };
|
|
626
617
|
};
|
|
627
618
|
const applyImageFactsAndRouting = async (body, auth, root, governed, folded) => {
|
|
619
|
+
const { person } = identityAxesOf(auth);
|
|
628
620
|
const { scenarioName, scratchpadDir, hostSemanticsLane } = folded;
|
|
629
|
-
const bodyProfile =
|
|
621
|
+
const bodyProfile = bodyImageProfileOf(body);
|
|
630
622
|
const taskImageProfile = bodyProfile ?? (body.cascade === true || body.verify === true ? undefined : sessionEnvSelection.get(root));
|
|
631
623
|
let resolvedImageCaps;
|
|
632
624
|
if (taskImageProfile !== undefined) {
|
|
633
|
-
|
|
634
|
-
throw createCodedHttpError(501, "capability.k8s_lane_required", "sandboxImageProfile is only supported on the k8s sandbox backend");
|
|
635
|
-
}
|
|
625
|
+
assertImageProfileLane(taskImageProfile, config);
|
|
636
626
|
if (!imageIndex) {
|
|
637
627
|
throw createCodedHttpError(501, "capability.image_index_required", "sandboxImageProfile requires the sandbox-image-pool, which needs a SQL store backend (DB_BACKEND=mysql|pg) — this deployment's store wires no image index");
|
|
638
628
|
}
|
|
@@ -642,7 +632,7 @@ export function createResolveSpec(ctx) {
|
|
|
642
632
|
const resolved = await resolveSandboxImageRef({
|
|
643
633
|
profile: taskImageProfile,
|
|
644
634
|
...(capsNeeded && capsNeeded.length > 0 ? { capabilitiesNeeded: capsNeeded } : {}),
|
|
645
|
-
viewer: { operator: explicitOperatorOk(
|
|
635
|
+
viewer: { operator: explicitOperatorOk(person, config), tenantId: person ?? null },
|
|
646
636
|
index: imageIndex,
|
|
647
637
|
});
|
|
648
638
|
if (!resolved.ok)
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
*/
|
|
32
32
|
import type { RetentionPolicy } from "@sema-agent/core";
|
|
33
33
|
import type { RetentionMode } from "../config-types.js";
|
|
34
|
-
import type {
|
|
34
|
+
import type { SessionEraseSettler } from "../session-erase.js";
|
|
35
35
|
import type { RetentionExecutor } from "../plugins/retention-deployment.js";
|
|
36
36
|
/** 同 domain 连续失败多少次算「卡住了」(fail-loud 的阈值)。`5` 与 reaper 家族的
|
|
37
37
|
* `REAPER_FAILURE_WARN_THRESHOLD` 同值同理由:一次抖动(一次重连、一次超时)正是容错要吸收的,
|
|
@@ -97,9 +97,9 @@ export interface RetentionSweepCtx {
|
|
|
97
97
|
* `createThrottledReaperCatch` 必须建在 `setInterval` 之外是同一条理由。
|
|
98
98
|
*/
|
|
99
99
|
streaks?: Map<string, number>;
|
|
100
|
-
/**
|
|
101
|
-
* (
|
|
102
|
-
|
|
100
|
+
/** 删后收尾(`session-erase.ts`,与会话删除协调器同一只):enforce 删掉会话树之后,把回执里的 `erased` 交给它 —— 附件字节、完成信箱围栏、会话信箱清仓、
|
|
101
|
+
* 住客空间回收、无出处卸载结果的如实告知。每一步失败只记一行(行已删,不再有重试路)。 */
|
|
102
|
+
settle: SessionEraseSettler;
|
|
103
103
|
}
|
|
104
104
|
/** 一轮的读数(给日志与判据用;lane 自己不做任何决策依赖它)。 */
|
|
105
105
|
export interface RetentionSweepOutcome {
|
|
@@ -94,8 +94,8 @@ async function sweepDomainEnforce(ctx, d) {
|
|
|
94
94
|
};
|
|
95
95
|
const checkpoints = await ctx.executor.expireCheckpoints(input);
|
|
96
96
|
const sessions = await ctx.executor.deleteExpiredSessions(input);
|
|
97
|
-
if (sessions.
|
|
98
|
-
await ctx.
|
|
97
|
+
if (sessions.erased !== undefined)
|
|
98
|
+
await (await ctx.settle(sessions.erased)).spaces;
|
|
99
99
|
const toolResults = await ctx.executor.deleteOrphanToolResults(input);
|
|
100
100
|
const touched = checkpoints.deleted + sessions.deleted + toolResults.deleted;
|
|
101
101
|
if (touched > 0) {
|
|
@@ -28,6 +28,7 @@ import type { ToolApprovalCoordinator } from "../tool-approval.js";
|
|
|
28
28
|
import type { MemoryBackend } from "@sema-agent/core";
|
|
29
29
|
import type { MemorySyncRunner } from "../memory-sync-client.js";
|
|
30
30
|
import type { MailboxRecipientLifecycle } from "../plugins/mailbox-recipient-lifecycle.js";
|
|
31
|
+
import { DEPLOYMENT_SHAPE_PREDICATES } from "../deployment-shape.js";
|
|
31
32
|
import type { PeerDesk } from "../peer-seat.js";
|
|
32
33
|
/**
|
|
33
34
|
* `RunnerDeps.onAsk` 的装配([ref] 件4:从内联闭包提为具名导出,**纯 testability 重构、零行为变化**)。
|
|
@@ -219,19 +220,20 @@ export interface RunnerDepsCtx {
|
|
|
219
220
|
* 缺席=undefined=pre-338 语义(纯 env 部署无中心撤销面)。 */
|
|
220
221
|
mcpRevocations: RunnerDeps["mcpRevocations"];
|
|
221
222
|
/**
|
|
222
|
-
* 交接件⑤ —— commit
|
|
223
|
+
* 交接件⑤ —— commit 尾注的署名(`RunnerDeps.hands.commitCoAuthor`;缺席 = 不署)。手带(`hands`)本身由共享基座铸,调用方只交这一格。
|
|
223
224
|
*
|
|
224
|
-
* 🔴
|
|
225
|
+
* 🔴 为什么手带属于**共享基座**而不是主 runner 的差异键:署名是**部署身份**([ref]① clay 拍:
|
|
225
226
|
* 「署名 = 产品身份资产,归部署」),不是「哪一只 Runner 在跑」的属性。一个被委派出去的子代
|
|
226
227
|
* 提交进的是**同一个仓**、代表的是**同一个部署** —— 它的 commit 少一行 trailer 没有任何理由。
|
|
227
228
|
* 修前两条腿都漏:`main.ts` 与 `run-local.ts` 的 subRunner 都只在主 runner 上写了这一键,而两处
|
|
228
229
|
* 的「差异键」注释块逐条列了 sessionStore / checkpointStore / 四个座位,**都没提 hands**
|
|
229
230
|
* —— 也就是说它不是一次有理由的分歧,是漏配(与本函数头注记的 [ref]§三族A 同一个病族)。
|
|
230
|
-
*
|
|
231
|
+
* 署名由**调用方**给值(而不是在基座里按 `config` 现算):两条腿的判据本就不同(HTTP 腿按
|
|
231
232
|
* 品牌判官 `isBrandedDeployment`(`capabilities/brand-identity.ts`)分 branded/非 branded,run-local 恒是 Sema 本地形),
|
|
232
|
-
*
|
|
233
|
+
* 各自算一次、传进来一次。手带的另一格 `autoBackgroundOnTimeout` 两条腿判据相同(部署旋钮 `AUTO_BACKGROUND_ON_TIMEOUT`),
|
|
234
|
+
* 所以由手带的唯一铸点 {@link buildHandsBand} 按 `config` 读 —— 读点只有一处,两只 Runner 自动同源。
|
|
233
235
|
*/
|
|
234
|
-
|
|
236
|
+
commitCoAuthor: NonNullable<RunnerDeps["hands"]>["commitCoAuthor"];
|
|
235
237
|
executionEnvFactory: RunnerDeps["executionEnvFactory"];
|
|
236
238
|
lspManager: RunnerDeps["lspManager"];
|
|
237
239
|
fleetBus: FleetEventBus;
|
|
@@ -246,7 +248,7 @@ export interface RunnerDepsCtx {
|
|
|
246
248
|
}
|
|
247
249
|
/** [ref] A10 留档发现②:main runner `RunnerDeps` 与 main.ts subRunner 字面量之间此前手工重复
|
|
248
250
|
* 的 ~15 个键,类型标注见 {@link createSharedRunnerDeps} 头注。 */
|
|
249
|
-
export type SharedRunnerDeps = Pick<RunnerDeps, "brain" | "readFace" | "readDenyPatterns" | "readDenyBuiltinTiers" | "readDenyBuiltinExclude" | "readDenyFloorRequired" | "memoryDelegationEvidence" | "memoryProvenance" | "memoryCapturePolicy" | "delegationEntryCaps" | "crossSessionInbound" | "crossSessionDialogExpiry" | "writeProtectedPaths" | "memoryEngineDir" | "allowedTools" | "crossBoundaryPosture" | "models" | "roles" | "tiers" | "pricing" | "tracer" | "promptSource" | "executionEnvFactory" | "lspManager" | "backgroundAgentStore" | "mailboxStore" | "rosterStore" | "mods" | "toolResultStore" | "checkpointStore" | "hands" | "sessionPolicyStore" | "usageWindows" | "usageWindowStore" | "memoryScopeAdmission" | "deploymentMemoryScopes" | "sharedMemoryStores" | "compliancePostureResolver" | "lockedConfig" | "retentionPolicy" | "onNotice" | "mcpRevocations" | "peerSeat">;
|
|
251
|
+
export type SharedRunnerDeps = Pick<RunnerDeps, "brain" | "readFace" | "readDenyPatterns" | "readDenyBuiltinTiers" | "readDenyBuiltinExclude" | "readDenyFloorRequired" | "memoryDelegationEvidence" | "memoryProvenance" | "memoryCapturePolicy" | "delegationEntryCaps" | "crossSessionInbound" | "crossSessionDialogExpiry" | "writeProtectedPaths" | "memoryEngineDir" | "allowedTools" | "crossBoundaryPosture" | "models" | "roles" | "tiers" | "pricing" | "tracer" | "promptSource" | "executionEnvFactory" | "lspManager" | "backgroundAgentStore" | "mailboxStore" | "rosterStore" | "mods" | "toolResultStore" | "checkpointStore" | "fileHistoryStore" | "fileHistoryCapture" | "hands" | "sessionPolicyStore" | "usageWindows" | "usageWindowStore" | "memoryScopeAdmission" | "deploymentMemoryScopes" | "sharedMemoryStores" | "compliancePostureResolver" | "lockedConfig" | "retentionPolicy" | "onNotice" | "mcpRevocations" | "peerSeat">;
|
|
250
252
|
/**
|
|
251
253
|
* [ref] A10 留档发现②(review 2026-07-29,[ref]§三族A 同源修补的延续):main runner 的
|
|
252
254
|
* `RunnerDeps` 字面量(下方 `createRunnerDeps`)与 `main.ts` 里 subRunner 的 `new Runner({...})`
|
|
@@ -273,7 +275,7 @@ export type SharedRunnerDeps = Pick<RunnerDeps, "brain" | "readFace" | "readDeny
|
|
|
273
275
|
* 属性,比再抽一层共享基座更强的同源保证),不重复收纳进这里。
|
|
274
276
|
*/
|
|
275
277
|
/** 基座真实消费的窄面(Pick)——subRunner 调用点(main.ts)只需凑这 13 个字段,不必造全量 ctx。 */
|
|
276
|
-
export type SharedRunnerDepsCtx = Pick<RunnerDepsCtx, "config" | "brain" | "pricing" | "tracer" | "promptSource" | "executionEnvFactory" | "lspManager" | "backgroundAgentStore" | "mailboxStore" | "rosterStore" | "deploymentMods" | "toolResultStore" | "checkpointStore" | "sessionPolicyStore" | "
|
|
278
|
+
export type SharedRunnerDepsCtx = Pick<RunnerDepsCtx, "config" | "brain" | "pricing" | "tracer" | "promptSource" | "executionEnvFactory" | "lspManager" | "backgroundAgentStore" | "mailboxStore" | "rosterStore" | "deploymentMods" | "toolResultStore" | "checkpointStore" | "fileHistoryStore" | "sessionPolicyStore" | "commitCoAuthor" | "usageWindowStore" | "orgMemoryAdmission" | "sharedMemoryStores" | "logger" | "governanceSeams" | "mcpRevocations" | "metrics" | "engineDataRoot" | "peerDesk">;
|
|
277
279
|
/** 转发席只需要 `inc` —— 刻意窄到这一个动词,免得把整只 Metrics 拖进这条纯转发腿。 */
|
|
278
280
|
export interface EngineNoticeMetricsSeat {
|
|
279
281
|
inc: (name: string, labels?: Record<string, string>) => void;
|
|
@@ -347,6 +349,13 @@ export declare const CROSS_BOUNDARY_POSTURE_REQUIRES_PRINCIPAL: {
|
|
|
347
349
|
readonly single_user: false;
|
|
348
350
|
};
|
|
349
351
|
export declare function crossBoundaryPostureOf(requirePrincipal: boolean): CrossBoundaryPosture;
|
|
352
|
+
/**
|
|
353
|
+
* 手带(`RunnerDeps.hands`)的**唯一**铸点(纯数据 ⇒ `build*`)。两格两个来源:署名由腿给(两条腿判据不同,见 {@link RunnerDepsCtx.commitCoAuthor};
|
|
354
|
+
* leader 车道今天不署名,显式交 `undefined`),前台命令超时转后台读部署旋钮 `AUTO_BACKGROUND_ON_TIMEOUT` —— 旋钮的读点只有这里。
|
|
355
|
+
* 共享基座(主 / 无手 / hook 代理 / 子代,HTTP 与 run-local 两条腿)与 leader 车道(`boot/leader.ts` → `LeaderWireConfig.hands`)同调这一只:
|
|
356
|
+
* 有手的每一只 Runner 都拿到它,`/health.autoBackgroundOnTimeout` 说「生效」时没有哪只 Runner 例外。
|
|
357
|
+
*/
|
|
358
|
+
export declare function buildHandsBand(config: Pick<ServiceConfig, "autoBackgroundOnTimeout">, commitCoAuthor: RunnerDepsCtx["commitCoAuthor"]): NonNullable<RunnerDeps["hands"]>;
|
|
350
359
|
export declare function buildDeploymentPostureSeats(config: DeploymentPostureConfig): DeploymentPostureSeats;
|
|
351
360
|
/**
|
|
352
361
|
* 部署读拒行**进场**的唯一告知点(非锚定行一行 `read_deny_unanchored_rows`;判据与行形在 `read-deny-anchor-audit.ts`)。律:**一份读拒行的值第一次装进 Runner 席时点名一次** ——
|
|
@@ -356,5 +365,17 @@ export declare function buildDeploymentPostureSeats(config: DeploymentPostureCon
|
|
|
356
365
|
*/
|
|
357
366
|
export declare function announceReadDenyRows(config: Pick<ServiceConfig, "readDenyPatterns">, logger: Pick<Logger, "warn">): void;
|
|
358
367
|
export declare function createSharedRunnerDeps(ctx: SharedRunnerDepsCtx): SharedRunnerDeps;
|
|
368
|
+
/**
|
|
369
|
+
* 这台部署**声明本机属主的规则桶**吗(core `RunnerDeps.localOwnerRules`:不带主体的 run 经规则店的 `forLocalOwner()` 读持久规则,而不是读零规则)。
|
|
370
|
+
* 声明 ⟺ 单用户形(部署形表 `multiTenant` 不成立 —— `REQUIRE_PRINCIPAL` 未开)∧ 规则店装配了。
|
|
371
|
+
*
|
|
372
|
+
* 规则店缺席时不声明:core 把「声明了却没有可存规则的桶」当配置矛盾、在每次 prepare 整轮拒(连带主体的 run 一起),而「没有规则店」本来就是
|
|
373
|
+
* 「没有持久规则」—— 声明与店同生同灭。多租形不声明:不带主体的调用方在那里不是任何人的代表,零规则地板是对的。
|
|
374
|
+
* 单用户形上不带主体的调用方就是这台部署的那一个人(身份边界由跨键不变量 `single-user-anonymous-boundary` 守:无凭据 ∧ 写面无鉴权 ∧ 监听不只在回环 ⇒ 拒启)。
|
|
375
|
+
* 收编(adoption)把本机属主桶整桶改键到一个主体名下,收编计划同时要求 `REQUIRE_PRINCIPAL=true` ⇒ 声明随之撤回(计划表的 `core-decl` 行)。
|
|
376
|
+
*
|
|
377
|
+
* 读者两处、同读这一只:Runner 装配({@link createRunnerDeps})与运维整理阀门的写判官(`boot/stage-06-runners.ts`)。
|
|
378
|
+
*/
|
|
379
|
+
export declare function localOwnerRulesDeclared(config: Parameters<typeof DEPLOYMENT_SHAPE_PREDICATES.multiTenant.holds>[0], permissionRuleStore: RunnerDeps["permissionRuleStore"]): boolean;
|
|
359
380
|
export declare function createRunnerDeps(ctx: RunnerDepsCtx): RunnerDeps;
|
|
360
381
|
//# sourceMappingURL=runner-deps.d.ts.map
|
package/dist/boot/runner-deps.js
CHANGED
|
@@ -9,6 +9,7 @@ import { createHardenedVmRunner } from "../orchestration/hardened-vm-runner.js";
|
|
|
9
9
|
import { createWorkerHardenedVmRunner } from "../orchestration/hardened-vm-worker-runner.js";
|
|
10
10
|
import { WorkflowAgentRegistry } from "../orchestration/workflow-agent-steer.js";
|
|
11
11
|
import { defaultEngineNoticeRouter, redactNoticeMessage, redactNoticeRuleText } from "../trace/engine-notice-wire.js";
|
|
12
|
+
import { presentEngineNotice } from "../read-deny-floor-notice.js";
|
|
12
13
|
import { WorkflowNotifyGate } from "../orchestration/workflow-notify-journal.js";
|
|
13
14
|
import { makeLoadProjectMemory, makeProbeInstructionSources } from "../project-memory.js";
|
|
14
15
|
import { createInstructionSourceSeat } from "../instruction-source-notice.js";
|
|
@@ -48,7 +49,8 @@ export const PROMPT_CACHE_BREAK_CAUSE_LEVEL = {
|
|
|
48
49
|
const PROMPT_CACHE_BREAK_LEVELS = new Map(Object.entries(PROMPT_CACHE_BREAK_CAUSE_LEVEL));
|
|
49
50
|
const CEILING_ORIGINS = new Set(["walltime", "turns"]);
|
|
50
51
|
export function createEngineNoticeForwarder(logger, router = defaultEngineNoticeRouter, metrics) {
|
|
51
|
-
return (
|
|
52
|
+
return (engineNotice) => {
|
|
53
|
+
const notice = presentEngineNotice(engineNotice);
|
|
52
54
|
const detail = redactNoticeRuleText(notice.code, notice.detail);
|
|
53
55
|
const message = redactNoticeMessage(notice.message);
|
|
54
56
|
logger.warn("engine_notice", { code: notice.code, message, ...(detail !== undefined ? { detail } : {}) });
|
|
@@ -75,6 +77,9 @@ export function crossBoundaryPostureOf(requirePrincipal) {
|
|
|
75
77
|
}
|
|
76
78
|
throw new Error(`cross-boundary posture table has no word for requirePrincipal=${requirePrincipal} (the table must map both values)`);
|
|
77
79
|
}
|
|
80
|
+
export function buildHandsBand(config, commitCoAuthor) {
|
|
81
|
+
return { commitCoAuthor, autoBackgroundOnTimeout: config.autoBackgroundOnTimeout };
|
|
82
|
+
}
|
|
78
83
|
export function buildDeploymentPostureSeats(config) {
|
|
79
84
|
const crossSessionLayers = buildCrossSessionInboundLayers(config);
|
|
80
85
|
const lkgRows = lkgReadDenyRows(config.configLkgPath);
|
|
@@ -124,9 +129,11 @@ export function createSharedRunnerDeps(ctx) {
|
|
|
124
129
|
mailboxStore: ctx.mailboxStore ? ctx.mailboxStore : undefined,
|
|
125
130
|
rosterStore: ctx.rosterStore ? ctx.rosterStore : undefined,
|
|
126
131
|
mods: ctx.deploymentMods,
|
|
127
|
-
hands: ctx.
|
|
132
|
+
hands: buildHandsBand(ctx.config, ctx.commitCoAuthor),
|
|
128
133
|
toolResultStore: ctx.toolResultStore,
|
|
129
134
|
checkpointStore: ctx.checkpointStore ? ctx.checkpointStore : undefined,
|
|
135
|
+
fileHistoryStore: ctx.fileHistoryStore ? ctx.fileHistoryStore : undefined,
|
|
136
|
+
fileHistoryCapture: coreFileHistoryCaptureSeat(ctx.fileHistoryStore, ctx.config.fileHistoryCapture),
|
|
130
137
|
sessionPolicyStore: ctx.sessionPolicyStore ? ctx.sessionPolicyStore : undefined,
|
|
131
138
|
memoryScopeAdmission: ctx.orgMemoryAdmission.memoryScopeAdmission ? ctx.orgMemoryAdmission.memoryScopeAdmission : undefined,
|
|
132
139
|
deploymentMemoryScopes: ctx.orgMemoryAdmission.deploymentMemoryScopes && ctx.orgMemoryAdmission.deploymentMemoryScopes.length > 0 ? ctx.orgMemoryAdmission.deploymentMemoryScopes : undefined,
|
|
@@ -142,8 +149,11 @@ export function createSharedRunnerDeps(ctx) {
|
|
|
142
149
|
};
|
|
143
150
|
return shared;
|
|
144
151
|
}
|
|
152
|
+
export function localOwnerRulesDeclared(config, permissionRuleStore) {
|
|
153
|
+
return permissionRuleStore !== undefined && !DEPLOYMENT_SHAPE_PREDICATES.multiTenant.holds(config);
|
|
154
|
+
}
|
|
145
155
|
export function createRunnerDeps(ctx) {
|
|
146
|
-
const { config, logger, metrics, localRoot, outcomeSink, elicitation, question, toolApproval, sessionStore, memoryEngine, sessionCaptureRecords, memorySyncRunner, runtimeCapsResolver,
|
|
156
|
+
const { config, logger, metrics, localRoot, outcomeSink, elicitation, question, toolApproval, sessionStore, memoryEngine, sessionCaptureRecords, memorySyncRunner, runtimeCapsResolver, permissionRuleStore, fleetBus, workflowRunStore, workflowJournalStore, workflowAgentRegistry, workflowNotifyGate, deliverWorkflowCompletion, } = ctx;
|
|
147
157
|
const peerSessionLister = sessionStore.listSessionRows?.bind(sessionStore);
|
|
148
158
|
const memoryEngineIncident = createMemoryEngineIncidentSink({ logger, metrics });
|
|
149
159
|
const sharedRunnerDeps = createSharedRunnerDeps(ctx);
|
|
@@ -228,9 +238,8 @@ export function createRunnerDeps(ctx) {
|
|
|
228
238
|
}
|
|
229
239
|
: undefined,
|
|
230
240
|
runtimeCapsResolver: runtimeCapsResolver ? runtimeCapsResolver : undefined,
|
|
231
|
-
fileHistoryStore: fileHistoryStore ? fileHistoryStore : undefined,
|
|
232
|
-
fileHistoryCapture: coreFileHistoryCaptureSeat(fileHistoryStore, config.fileHistoryCapture),
|
|
233
241
|
permissionRuleStore: permissionRuleStore ? permissionRuleStore : undefined,
|
|
242
|
+
localOwnerRules: localOwnerRulesDeclared(config, permissionRuleStore),
|
|
234
243
|
onBackgroundChildEvent: fleetBackgroundChildPublisher(fleetBus, (msg, fields) => logger.info(msg, fields)),
|
|
235
244
|
loadProjectMemory: !DEPLOYMENT_SHAPE_PREDICATES.multiTenant.holds(config) && config.projectMemoryEnabled
|
|
236
245
|
? makeLoadProjectMemory({ logger, instructionSource: createInstructionSourceSeat(sessionStore, sharedRunnerDeps.onNotice) })
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { ServiceConfig } from "../config.js";
|
|
11
11
|
import type { Logger } from "../observability/logger.js";
|
|
12
|
-
import { type EntitlementsResolverFn, type MemoryOptOutVerdictSource } from "../runtime-caps-resolver.js";
|
|
12
|
+
import { type EntitlementsResolverFn, type MemoryOptOutVerdictSource, type RuntimeCapsReading } from "../runtime-caps-resolver.js";
|
|
13
13
|
export interface RuntimeCapsCtx {
|
|
14
14
|
config: ServiceConfig;
|
|
15
15
|
logger: Logger;
|
|
@@ -50,6 +50,6 @@ export declare function createRuntimeCaps(ctx: RuntimeCapsCtx): {
|
|
|
50
50
|
principalCaps: import("../runtime-caps-resolver.js").PrincipalEntitlementsClient | undefined;
|
|
51
51
|
centerRuntimeCapsResolver: ((principal: string | undefined) => Promise<import("@sema-agent/core").RuntimeCaps | undefined>) | undefined;
|
|
52
52
|
runtimeCapsResolver: EntitlementsResolverFn | undefined;
|
|
53
|
-
|
|
53
|
+
runtimeCapsPeekReading: ((principal: string | undefined) => Promise<RuntimeCapsReading>) | undefined;
|
|
54
54
|
};
|
|
55
55
|
//# sourceMappingURL=runtime-caps.d.ts.map
|
|
@@ -73,7 +73,21 @@ export function createRuntimeCaps(ctx) {
|
|
|
73
73
|
});
|
|
74
74
|
};
|
|
75
75
|
const runtimeCapsResolver = compose(centerRuntimeCapsResolver, true);
|
|
76
|
-
const
|
|
77
|
-
|
|
76
|
+
const peekOver = (base) => compose(base, false);
|
|
77
|
+
const runtimeCapsPeekReading = peekOver(principalCaps === undefined ? undefined : async () => undefined) === undefined
|
|
78
|
+
? undefined
|
|
79
|
+
: async (principal) => {
|
|
80
|
+
let refusedBy;
|
|
81
|
+
const base = principalCaps === undefined
|
|
82
|
+
? undefined
|
|
83
|
+
: async (p) => {
|
|
84
|
+
const reading = await principalCaps.peekRuntimeCapsReading(p);
|
|
85
|
+
refusedBy = reading.autoModeRefusedBy;
|
|
86
|
+
return reading.caps;
|
|
87
|
+
};
|
|
88
|
+
const caps = await peekOver(base)?.(principal);
|
|
89
|
+
return { caps, ...(refusedBy !== undefined ? { autoModeRefusedBy: refusedBy } : {}) };
|
|
90
|
+
};
|
|
91
|
+
return { principalCaps, centerRuntimeCapsResolver, runtimeCapsResolver, runtimeCapsPeekReading };
|
|
78
92
|
}
|
|
79
93
|
//# sourceMappingURL=runtime-caps.js.map
|