@sema-agent/server 7.146.0 → 7.148.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 +1423 -24
- package/README.md +21 -8
- package/README.zh-CN.md +15 -9
- package/USAGE.md +537 -216
- package/deploy/facts/lanes.json +7 -0
- package/deploy/sema-up/README.md +18 -7
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/templates/_helpers.tpl +42 -4
- package/deploy/sema-up/chart/templates/server-v4pro.yaml +5 -4
- package/deploy/sema-up/chart/templates/server.yaml +5 -4
- package/deploy/sema-up/chart/values.yaml +4 -3
- package/deploy/sema-up/cluster-up.sh +75 -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/flagshape.sh +4 -0
- 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/lanes.json +2 -5
- 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 +26 -48
- 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 +18 -5
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +25 -3
- 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/adoption/wire.d.ts +3 -3
- package/dist/approval-card.d.ts +32 -34
- package/dist/approval-gate-currency.js +3 -2
- package/dist/approval-reconciler.d.ts +4 -13
- package/dist/approval-reconciler.js +2 -2
- package/dist/approval.d.ts +16 -14
- package/dist/approval.js +3 -3
- package/dist/audit.d.ts +10 -3
- package/dist/audit.js +17 -9
- package/dist/auth-bridge.d.ts +0 -14
- package/dist/auth-bridge.js +0 -7
- 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 +8 -3
- 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/crash-last.js +2 -1
- package/dist/boot/deployment-mods.d.ts +1 -1
- package/dist/boot/device-lane.js +5 -5
- package/dist/boot/engine-lease.d.ts +12 -11
- package/dist/boot/execution-env.d.ts +19 -8
- package/dist/boot/execution-env.js +80 -62
- package/dist/boot/execution-lane.d.ts +37 -9
- package/dist/boot/execution-lane.js +74 -20
- package/dist/boot/exit-boundary.d.ts +3 -3
- package/dist/boot/exit-boundary.js +6 -5
- package/dist/boot/exit-last.js +2 -1
- package/dist/boot/fatal-exit.d.ts +3 -5
- package/dist/boot/fatal-exit.js +2 -2
- package/dist/boot/governance-seams.d.ts +2 -2
- package/dist/boot/leader.d.ts +15 -0
- package/dist/boot/leader.js +18 -16
- package/dist/boot/memory-boundary.d.ts +11 -11
- package/dist/boot/memory-boundary.js +3 -3
- package/dist/boot/memory-consolidation.d.ts +50 -53
- package/dist/boot/memory-consolidation.js +11 -18
- package/dist/boot/org-memory.js +4 -3
- package/dist/boot/parked-revive-gate.d.ts +1 -1
- package/dist/boot/parked-revive-gate.js +3 -3
- package/dist/boot/reapers.d.ts +4 -3
- package/dist/boot/reapers.js +20 -17
- package/dist/boot/resolve-spec.d.ts +5 -3
- package/dist/boot/resolve-spec.js +133 -165
- package/dist/boot/retention-lane.d.ts +7 -45
- package/dist/boot/retention-lane.js +2 -2
- package/dist/boot/runner-deps.d.ts +28 -7
- package/dist/boot/runner-deps.js +11 -4
- package/dist/boot/runtime-caps.d.ts +2 -2
- package/dist/boot/runtime-caps.js +16 -2
- package/dist/boot/session-faces.d.ts +17 -7
- package/dist/boot/session-faces.js +122 -96
- package/dist/boot/shutdown.d.ts +5 -4
- package/dist/boot/shutdown.js +6 -4
- package/dist/boot/stage-01-config.d.ts +1 -1
- package/dist/boot/stage-01-config.js +14 -2
- package/dist/boot/stage-02-web-admin-pull.d.ts +2 -1
- package/dist/boot/stage-02-web-admin-pull.js +15 -8
- package/dist/boot/stage-03-store-backend.d.ts +4 -1
- package/dist/boot/stage-03-store-backend.js +4 -3
- package/dist/boot/stage-04-stores.d.ts +3 -1
- package/dist/boot/stage-04-stores.js +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +9 -5
- package/dist/boot/stage-05-execution-env.js +5 -5
- package/dist/boot/stage-06-runners.d.ts +13 -15
- package/dist/boot/stage-06-runners.js +24 -18
- package/dist/boot/stage-07-capability-layer.d.ts +14 -11
- package/dist/boot/stage-07-capability-layer.js +9 -12
- package/dist/boot/stage-08-reapers.d.ts +14 -11
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +16 -18
- package/dist/boot/stage-09-leader.js +12 -4
- package/dist/boot/stage-10-http-server.d.ts +16 -18
- package/dist/boot/stage-10-http-server.js +9 -5
- package/dist/boot/store-evidence.d.ts +20 -0
- package/dist/boot/store-evidence.js +13 -0
- package/dist/boot/stores.d.ts +12 -0
- package/dist/boot/stores.js +39 -17
- 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 +58 -38
- 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 +9 -1
- package/dist/capabilities/center-plugins.js +37 -11
- package/dist/capabilities/center-wiring.js +1 -1
- package/dist/capabilities/composite-members.d.ts +3 -2
- package/dist/capabilities/composite-members.js +3 -2
- package/dist/capabilities/execution-lane.d.ts +7 -7
- package/dist/capabilities/execution-lane.js +2 -2
- package/dist/capabilities/hands-lane.d.ts +1 -1
- package/dist/capabilities/repo-tools.d.ts +2 -0
- package/dist/capabilities/repo-tools.js +14 -12
- package/dist/capabilities/scenarios.d.ts +38 -33
- package/dist/capabilities/scenarios.js +24 -25
- package/dist/capabilities/settings-contract.d.ts +29 -0
- package/dist/capabilities/settings-contract.js +14 -0
- package/dist/capabilities/skills.d.ts +6 -6
- package/dist/capabilities/tool-defer.d.ts +1 -1
- package/dist/capability-facts.d.ts +69 -4
- package/dist/capability-facts.js +77 -5
- package/dist/card-void.d.ts +4 -4
- package/dist/card-void.js +1 -1
- package/dist/center-credential-renewer.d.ts +6 -2
- package/dist/center-credential-renewer.js +10 -5
- package/dist/config-catalog.d.ts +16 -1
- package/dist/config-catalog.js +68 -61
- package/dist/config-dir-trust.d.ts +37 -4
- package/dist/config-dir-trust.js +88 -44
- package/dist/config-invariants.d.ts +58 -4
- package/dist/config-invariants.js +104 -23
- package/dist/config-lkg.d.ts +24 -2
- package/dist/config-lkg.js +22 -9
- package/dist/config-provider.d.ts +9 -9
- package/dist/config-provider.js +25 -108
- package/dist/config-pull-failure.d.ts +50 -0
- package/dist/config-pull-failure.js +48 -0
- package/dist/config-types.d.ts +215 -202
- package/dist/config.d.ts +69 -14
- package/dist/config.js +188 -96
- package/dist/degenerate-instrument.js +1 -1
- package/dist/delegated-session-owner.d.ts +1 -1
- package/dist/deleted-session-ids.d.ts +3 -2
- package/dist/deploy-facts.js +3 -2
- package/dist/deployment-governance.d.ts +3 -3
- package/dist/deployment-shape.d.ts +51 -16
- package/dist/deployment-shape.js +31 -6
- 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.d.ts +7 -5
- package/dist/env-facts.js +12 -7
- package/dist/env-witness.d.ts +7 -0
- package/dist/env-witness.js +16 -0
- package/dist/execution-config-root.d.ts +5 -5
- package/dist/execution-config-root.js +5 -5
- package/dist/execution-env-purpose.d.ts +14 -0
- package/dist/execution-env-purpose.js +29 -0
- package/dist/execution-lane-caps.d.ts +53 -103
- package/dist/execution-lane-caps.js +51 -83
- package/dist/execution-placement.d.ts +65 -9
- package/dist/execution-placement.js +58 -0
- 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.d.ts +2 -2
- package/dist/file-history-disclosure.js +1 -0
- package/dist/fleet/drain-entry.d.ts +17 -10
- package/dist/fleet/drain-entry.js +1 -1
- 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 +6 -7
- 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 +42 -0
- package/dist/history-anchor.js +34 -0
- 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 +1 -4
- package/dist/hooks/command-spawn.js +0 -11
- package/dist/hooks/hook-llm.d.ts +5 -1
- package/dist/hooks/hook-llm.js +24 -15
- package/dist/hooks/hook-runner.d.ts +119 -65
- package/dist/hooks/hook-runner.js +415 -217
- 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 +75 -78
- package/dist/http/approval-sweeps.d.ts +5 -8
- package/dist/http/approval-sweeps.js +55 -30
- package/dist/http/caller-trust.d.ts +8 -10
- package/dist/http/caller-trust.js +1 -2
- package/dist/http/checkpoint-ctx.d.ts +17 -0
- package/dist/http/checkpoint-ctx.js +6 -0
- package/dist/http/claim-heartbeat.d.ts +49 -0
- package/dist/http/claim-heartbeat.js +46 -0
- package/dist/http/claim-latency.d.ts +10 -0
- package/dist/http/claim-latency.js +12 -0
- package/dist/http/claimed-run.d.ts +4 -3
- package/dist/http/dispatch.d.ts +8 -1
- package/dist/http/dispatch.js +77 -31
- package/dist/http/durable-run-leg.d.ts +3 -3
- package/dist/http/durable-run-leg.js +18 -12
- package/dist/http/execution-context.d.ts +18 -42
- package/dist/http/execution-context.js +11 -5
- 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 +7 -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 +3 -3
- package/dist/http/memory-store-refusal-reply.js +6 -0
- package/dist/http/owner-access.d.ts +391 -56
- package/dist/http/owner-access.js +372 -33
- package/dist/http/principal-gate.d.ts +26 -94
- package/dist/http/principal-gate.js +24 -81
- package/dist/http/refusal-body.d.ts +35 -2
- package/dist/http/refusal-body.js +34 -0
- package/dist/http/request-guards.d.ts +10 -14
- 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 +35 -12
- package/dist/http/resume-ctx-read.js +25 -6
- package/dist/http/resume-legs.d.ts +24 -24
- package/dist/http/resume-legs.js +260 -171
- package/dist/http/retired-skill-manifest.d.ts +1 -1
- package/dist/http/rewind-files-reply.d.ts +34 -0
- package/dist/http/rewind-files-reply.js +36 -0
- package/dist/http/route-ctx.d.ts +56 -47
- package/dist/http/route-table.js +2 -0
- package/dist/http/routes/a2a-serve.d.ts +43 -5
- package/dist/http/routes/a2a-serve.js +58 -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 -88
- 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 +23 -20
- package/dist/http/routes/config-catalog.js +2 -2
- package/dist/http/routes/devices.d.ts +3 -3
- package/dist/http/routes/devices.js +5 -5
- package/dist/http/routes/diagnostics.d.ts +27 -3
- package/dist/http/routes/diagnostics.js +27 -21
- 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 +3 -1
- 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 +12 -20
- package/dist/http/routes/observability.js +3 -3
- package/dist/http/routes/principal-inbox.d.ts +1 -1
- package/dist/http/routes/principal-inbox.js +2 -2
- package/dist/http/routes/projects.d.ts +70 -0
- package/dist/http/routes/projects.js +87 -0
- package/dist/http/routes/retention-ops.js +6 -9
- package/dist/http/routes/rules.js +50 -7
- 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 +148 -233
- 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 +4 -2
- package/dist/http/routes/session-sync.js +48 -30
- package/dist/http/routes/sessions-list.d.ts +3 -3
- package/dist/http/routes/sessions-list.js +9 -9
- package/dist/http/routes/sessions.d.ts +7 -1
- package/dist/http/routes/sessions.js +177 -112
- package/dist/http/routes/shared-memory.js +6 -6
- package/dist/http/routes/side-query.js +2 -2
- package/dist/http/routes/tasks.js +144 -122
- 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 +63 -50
- package/dist/http/server.js +52 -16
- 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 +17 -3
- package/dist/http/stored-body-replay.js +11 -2
- package/dist/http/submit-ctx.d.ts +16 -8
- package/dist/http/submit-ctx.js +6 -2
- 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 +23 -13
- package/dist/identity-source.d.ts +36 -5
- package/dist/identity-source.js +27 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2 -1
- package/dist/instruction-source-notice.d.ts +1 -1
- 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/lsp-evict.d.ts +6 -4
- package/dist/lsp-evict.js +2 -3
- package/dist/memory-embedder-reembed.d.ts +38 -0
- package/dist/memory-embedder-reembed.js +20 -0
- package/dist/memory-incident-sink.d.ts +0 -28
- package/dist/memory-incident-sink.js +5 -0
- package/dist/memory-operator-faces.d.ts +5 -4
- package/dist/memory-operator-faces.js +1 -1
- package/dist/memory-scope.d.ts +31 -4
- package/dist/memory-scope.js +65 -16
- package/dist/memory-store-refusal.d.ts +20 -4
- package/dist/memory-store-refusal.js +1 -1
- package/dist/memory-sync-client.d.ts +5 -2
- package/dist/memory-sync-client.js +19 -14
- package/dist/memory-sync.js +1 -1
- package/dist/model-compat.d.ts +51 -28
- package/dist/model-compat.js +55 -23
- package/dist/model-context-window.d.ts +18 -0
- package/dist/model-context-window.js +2 -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 +46 -17
- package/dist/model-entry-refusal.js +47 -27
- 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-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 +28 -2
- package/dist/namespaced-rule-name.js +10 -1
- 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 +75 -47
- package/dist/observability/fail-open.js +77 -47
- package/dist/observability/logger.d.ts +22 -1
- package/dist/observability/logger.js +89 -12
- package/dist/observability/metrics.d.ts +2 -0
- package/dist/observability/metrics.js +5 -4
- 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 +5 -2
- package/dist/observability/secret-env-scrub.d.ts +30 -4
- package/dist/observability/secret-env-scrub.js +15 -3
- 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-agent-session-index.d.ts +7 -12
- package/dist/orchestration/workflow-agent-session-index.js +1 -6
- package/dist/orchestration/workflow-completion-inbox.d.ts +29 -9
- package/dist/orchestration/workflow-completion-inbox.js +65 -46
- package/dist/org-delivery-gate.d.ts +5 -4
- package/dist/org-delivery-gate.js +7 -6
- package/dist/org-memory-admission.d.ts +5 -2
- package/dist/org-memory-admission.js +25 -10
- 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 +531 -0
- package/dist/owner-faces.js +126 -0
- package/dist/parked-decide.d.ts +100 -31
- package/dist/parked-decide.js +162 -48
- package/dist/parked-revive-surface.d.ts +14 -4
- package/dist/parked-revive-surface.js +5 -4
- package/dist/peer-directory.d.ts +6 -8
- 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 +0 -22
- package/dist/plugins/adoption-log-sql.js +5 -3
- 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 +28 -9
- package/dist/plugins/approval-ask-store-file.js +74 -18
- package/dist/plugins/approval-ask-store-memory.d.ts +17 -7
- package/dist/plugins/approval-ask-store-memory.js +35 -12
- package/dist/plugins/approval-ask-store-sql.d.ts +42 -20
- package/dist/plugins/approval-ask-store-sql.js +44 -11
- package/dist/plugins/approval-exemption-skill-m46.d.ts +20 -0
- package/dist/plugins/approval-exemption-skill-m46.js +25 -0
- package/dist/plugins/approval-exemption-store.d.ts +6 -1
- package/dist/plugins/approval-exemption-store.js +14 -0
- 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 +40 -195
- package/dist/plugins/blob-backend.js +41 -234
- package/dist/plugins/caching-session-store.d.ts +22 -5
- package/dist/plugins/caching-session-store.js +43 -4
- package/dist/plugins/checkpoint-index-columns.d.ts +33 -6
- package/dist/plugins/checkpoint-index-columns.js +39 -3
- package/dist/plugins/checkpoint-store-face.d.ts +84 -11
- package/dist/plugins/checkpoint-store-face.js +18 -1
- package/dist/plugins/device-store-sql.d.ts +2 -2
- package/dist/plugins/device-store-sql.js +6 -10
- 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 +0 -15
- package/dist/plugins/ensure-schema-lock-policy.js +3 -2
- package/dist/plugins/execution-lane-rename-m40.d.ts +20 -0
- package/dist/plugins/execution-lane-rename-m40.js +10 -0
- package/dist/plugins/execution-placement-sql.d.ts +63 -88
- package/dist/plugins/execution-placement-sql.js +94 -54
- package/dist/plugins/file-run-store.d.ts +89 -35
- package/dist/plugins/file-run-store.js +197 -142
- 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 +19 -10
- package/dist/plugins/imported-layer-root-retirement.js +4 -8
- package/dist/plugins/inbox-payload-column.d.ts +14 -0
- package/dist/plugins/inbox-payload-column.js +13 -0
- 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 +63 -23
- package/dist/plugins/local-checkpoint-store.js +204 -81
- package/dist/plugins/local-data-dir-modes-m39.d.ts +48 -0
- package/dist/plugins/local-data-dir-modes-m39.js +183 -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 +13 -0
- package/dist/plugins/local-engine-high-water.js +62 -0
- package/dist/plugins/local-session-store.d.ts +442 -143
- package/dist/plugins/local-session-store.js +941 -289
- 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 +20 -1
- package/dist/plugins/local-task-attachment-store.js +32 -12
- package/dist/plugins/memory-embedder-fingerprint.d.ts +33 -10
- package/dist/plugins/memory-embedder-fingerprint.js +52 -12
- package/dist/plugins/memory-embedder.d.ts +1 -1
- package/dist/plugins/memory-embedder.js +11 -9
- package/dist/plugins/memory-engine-pg.d.ts +7 -5
- package/dist/plugins/memory-engine-pg.js +18 -9
- package/dist/plugins/memory-engine-sql-apply.d.ts +21 -8
- package/dist/plugins/memory-engine-sql-apply.js +7 -9
- package/dist/plugins/memory-engine-tidb.d.ts +12 -7
- package/dist/plugins/memory-engine-tidb.js +18 -10
- 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 +39 -27
- package/dist/plugins/memory-run-store.js +72 -70
- package/dist/plugins/one-time-migration-marker.d.ts +10 -0
- package/dist/plugins/one-time-migration-marker.js +7 -0
- package/dist/plugins/one-time-migrations.d.ts +325 -74
- package/dist/plugins/one-time-migrations.js +705 -230
- package/dist/plugins/org-delivery-quota-store.js +2 -1
- package/dist/plugins/owner-only-file-mode.d.ts +29 -0
- package/dist/plugins/owner-only-file-mode.js +141 -0
- package/dist/plugins/permission-rule-store-file.d.ts +11 -11
- package/dist/plugins/permission-rule-store-file.js +14 -2
- package/dist/plugins/permission-rule-store-sql.d.ts +4 -63
- package/dist/plugins/permission-rule-store-sql.js +6 -86
- package/dist/plugins/pg-pool.d.ts +3 -32
- package/dist/plugins/pg-pool.js +27 -11
- package/dist/plugins/release-version.d.ts +20 -0
- package/dist/plugins/release-version.js +28 -0
- package/dist/plugins/remote-env-adb.d.ts +20 -4
- package/dist/plugins/remote-env-adb.js +39 -11
- package/dist/plugins/remote-env-e2b.d.ts +19 -28
- package/dist/plugins/remote-env-e2b.js +40 -29
- package/dist/plugins/remote-env-host.d.ts +11 -10
- package/dist/plugins/remote-env-host.js +40 -27
- package/dist/plugins/remote-env-k8s.d.ts +45 -47
- package/dist/plugins/remote-env-k8s.js +122 -62
- package/dist/plugins/remote-env-local-docker.d.ts +152 -15
- package/dist/plugins/remote-env-local-docker.js +370 -75
- package/dist/plugins/remote-env-ssh.d.ts +8 -2
- package/dist/plugins/remote-env-ssh.js +26 -24
- package/dist/plugins/remote-scratchpad.js +4 -0
- package/dist/plugins/remote-shell.d.ts +59 -30
- package/dist/plugins/remote-shell.js +175 -62
- package/dist/plugins/retention-declaration.d.ts +37 -0
- package/dist/plugins/retention-declaration.js +9 -0
- package/dist/plugins/retention-deployment.d.ts +158 -0
- package/dist/plugins/retention-deployment.js +119 -0
- package/dist/plugins/retention-lane-store-sql.d.ts +74 -4
- package/dist/plugins/retention-lane-store-sql.js +103 -1
- package/dist/plugins/retention-sql.d.ts +29 -0
- package/dist/plugins/retention-sql.js +8 -0
- 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 +56 -68
- package/dist/plugins/run-store-sql.js +127 -116
- 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 +54 -0
- package/dist/plugins/scenario-prefix-switch-m42.js +55 -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 +42 -15
- package/dist/plugins/schema-consistency.js +213 -13
- package/dist/plugins/schema-drift-sentence.d.ts +4 -1
- package/dist/plugins/schema-drift-sentence.js +4 -4
- package/dist/plugins/schema-ensure-legs.d.ts +10 -1
- package/dist/plugins/schema-ensure-legs.js +12 -2
- 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 +98 -0
- package/dist/plugins/session-ext-table.js +134 -0
- package/dist/plugins/session-fork.d.ts +16 -2
- package/dist/plugins/session-fork.js +3 -0
- package/dist/plugins/session-ownership.d.ts +1 -1
- package/dist/plugins/session-placement.d.ts +22 -16
- package/dist/plugins/session-placement.js +15 -12
- package/dist/plugins/session-row-sql.d.ts +20 -7
- package/dist/plugins/session-row-sql.js +16 -8
- 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 +157 -0
- package/dist/plugins/session-store-sql.js +398 -0
- package/dist/plugins/session-withdraw-sql.d.ts +36 -0
- package/dist/plugins/session-withdraw-sql.js +42 -0
- package/dist/plugins/session-workspace-cell.d.ts +2 -2
- package/dist/plugins/session-workspace-cell.js +2 -2
- package/dist/plugins/shared-memory-store-sql.d.ts +10 -69
- package/dist/plugins/shared-memory-store-sql.js +15 -14
- package/dist/plugins/shell-sentinel-owner-m48.d.ts +20 -0
- package/dist/plugins/shell-sentinel-owner-m48.js +3 -0
- package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
- package/dist/plugins/snapshot-bucket-presence.js +1 -1
- package/dist/plugins/sql-driver.d.ts +24 -8
- package/dist/plugins/sql-driver.js +43 -9
- package/dist/plugins/sql-errors.d.ts +35 -5
- package/dist/plugins/sql-errors.js +55 -3
- package/dist/plugins/sql-json-column.d.ts +8 -7
- package/dist/plugins/sql-json-column.js +10 -6
- package/dist/plugins/store-backend.d.ts +114 -18
- package/dist/plugins/store-backend.js +340 -87
- package/dist/plugins/store-contracts.d.ts +97 -30
- package/dist/plugins/store-contracts.js +23 -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 +21 -11
- package/dist/plugins/task-attachment-store.js +37 -19
- package/dist/plugins/task-list-store-sql.d.ts +1 -1
- package/dist/plugins/text-column-capacity.d.ts +21 -0
- package/dist/plugins/text-column-capacity.js +5 -0
- package/dist/plugins/tidb-pool.d.ts +3 -2
- package/dist/plugins/tidb-pool.js +42 -39
- package/dist/plugins/user-input-ledger-sql.d.ts +1 -1
- 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/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/question.d.ts +13 -23
- package/dist/question.js +21 -39
- package/dist/read-face-posture.d.ts +6 -6
- package/dist/read-face-posture.js +2 -2
- 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/request-value-closure.d.ts +5 -5
- package/dist/request-value-closure.js +1 -1
- 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 +46 -16
- package/dist/rules-consent.js +102 -53
- package/dist/run-acceptance.d.ts +3 -1
- package/dist/run-acceptance.js +3 -0
- package/dist/run-local.d.ts +14 -6
- package/dist/run-local.js +109 -93
- package/dist/run-stale-default.d.ts +7 -0
- package/dist/run-stale-default.js +2 -0
- package/dist/runs.d.ts +73 -44
- package/dist/runs.js +65 -43
- package/dist/runtime-caps-resolver.d.ts +36 -14
- package/dist/runtime-caps-resolver.js +31 -14
- package/dist/runtime-governance.d.ts +2 -2
- package/dist/runtime-governance.js +5 -3
- package/dist/sealed-key-layout.d.ts +12 -6
- package/dist/sealed-key-layout.js +5 -1
- package/dist/sealed-key.d.ts +12 -2
- package/dist/sealed-key.js +116 -26
- package/dist/security.d.ts +133 -161
- package/dist/security.js +163 -59
- package/dist/sema-config-dir.d.ts +20 -0
- package/dist/sema-config-dir.js +27 -2
- package/dist/server-secret-env.d.ts +23 -5
- package/dist/server-secret-env.js +14 -4
- package/dist/service-version.d.ts +2 -1
- package/dist/service-version.js +2 -2
- package/dist/session-children-retire.d.ts +7 -5
- package/dist/session-children-retire.js +7 -2
- 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 +6 -6
- package/dist/session-error-wire.js +1 -1
- package/dist/session-incarnation.d.ts +60 -10
- 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 +29 -47
- package/dist/session-resident-background.js +77 -8
- package/dist/session-row.d.ts +3 -2
- package/dist/session-rules-seat.d.ts +12 -0
- package/dist/session-rules-seat.js +19 -0
- package/dist/session-sync-kernel.d.ts +1 -1
- package/dist/session-titler.d.ts +7 -15
- package/dist/session-titler.js +1 -1
- package/dist/session-workspace.d.ts +11 -2
- package/dist/session-workspace.js +5 -0
- package/dist/sighup-idle.d.ts +1 -1
- package/dist/spec-fields.d.ts +57 -3
- package/dist/spec-fields.js +72 -51
- package/dist/store-posture.d.ts +138 -21
- package/dist/store-posture.js +188 -3
- package/dist/stored-request-hooks-m20.d.ts +3 -2
- package/dist/stored-request-hooks-m20.js +21 -16
- 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/blob-index-sql.d.ts +148 -0
- package/dist/stores-sql/blob-index-sql.js +154 -0
- package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
- package/dist/stores-sql/checkpoint-store-sql.js +86 -71
- package/dist/{plugins → stores-sql}/file-history-store-sql.d.ts +23 -11
- package/dist/{plugins → stores-sql}/file-history-store-sql.js +23 -18
- package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
- package/dist/stores-sql/mailbox-store-sql.js +31 -32
- package/dist/{plugins → stores-sql}/pg-session-storage.d.ts +30 -81
- package/dist/{plugins → stores-sql}/pg-session-storage.js +123 -244
- package/dist/{plugins → stores-sql}/retention-store-sql.d.ts +197 -223
- package/dist/{plugins → stores-sql}/retention-store-sql.js +148 -207
- package/dist/{plugins → stores-sql}/session-event-payload.d.ts +1 -1
- package/dist/{plugins → stores-sql}/session-event-payload.js +1 -1
- package/dist/stores-sql/session-policy-store-sql.d.ts +33 -11
- package/dist/stores-sql/session-policy-store-sql.js +44 -36
- package/dist/stores-sql/session-write-hooks.d.ts +65 -0
- package/dist/stores-sql/session-write-hooks.js +2 -0
- package/dist/{plugins → stores-sql}/tidb-session-storage.d.ts +14 -15
- package/dist/{plugins → stores-sql}/tidb-session-storage.js +22 -28
- package/dist/{plugins → stores-sql}/tidb-session-store.d.ts +67 -138
- package/dist/{plugins → stores-sql}/tidb-session-store.js +130 -200
- package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
- package/dist/stores-sql/tool-result-store-sql.js +1 -1
- package/dist/stores-sql/windowed-session-storage.d.ts +61 -0
- package/dist/stores-sql/windowed-session-storage.js +70 -0
- package/dist/submission-exit.d.ts +50 -0
- package/dist/submission-exit.js +108 -0
- package/dist/task-a2a.d.ts +7 -1
- package/dist/task-a2a.js +18 -17
- package/dist/task-cwd.d.ts +31 -3
- package/dist/task-cwd.js +25 -1
- package/dist/task-mcp.d.ts +11 -3
- package/dist/task-mcp.js +16 -19
- package/dist/task-settings.d.ts +23 -14
- package/dist/task-settings.js +35 -13
- package/dist/terminal.d.ts +25 -43
- package/dist/terminal.js +31 -11
- package/dist/tool-approval.d.ts +152 -137
- package/dist/tool-approval.js +199 -199
- package/dist/trace/core-keyset-guard.d.ts +22 -9
- 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 +1 -1
- package/dist/trace/engine-notice-wire.js +2 -0
- package/dist/trace/exit-seat.d.ts +52 -4
- package/dist/trace/exit-seat.js +43 -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 +1 -30
- 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 +88 -58
- package/dist/trace/project.js +64 -28
- package/dist/trace/redact.d.ts +124 -28
- package/dist/trace/redact.js +936 -328
- package/dist/trace/self-minted-wire.d.ts +750 -29
- package/dist/trace/self-minted-wire.js +262 -25
- package/dist/trace/sema-provenance.d.ts +45 -41
- package/dist/trace/sema-provenance.js +81 -10
- package/dist/trace/task-notification-facets.d.ts +70 -2
- package/dist/trace/task-notification-facets.js +71 -1
- package/dist/trace/wire-projection-faces.d.ts +43 -8
- package/dist/trace/wire-projection-faces.js +28 -3
- package/dist/unread-request-members.d.ts +66 -0
- package/dist/unread-request-members.js +41 -0
- 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 -40
- 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/candidate-gate.d.ts +35 -3
- package/dist/web-admin-client/candidate-gate.js +53 -5
- package/dist/web-admin-client/center-request.d.ts +6 -3
- package/dist/web-admin-client/center-request.js +17 -16
- package/dist/web-admin-client/effective-keys.d.ts +1 -1
- package/dist/web-admin-client/effective-keys.js +1 -2
- 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/facade.d.ts +1 -1
- package/dist/web-admin-client/http-client.d.ts +2 -1
- package/dist/web-admin-client/http-client.js +40 -13
- 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 +13 -6
- package/dist/web-admin-client/skills-mcp.d.ts +22 -8
- package/dist/web-admin-client/skills-mcp.js +26 -21
- package/dist/web-admin-client/types.d.ts +35 -51
- package/dist/workspace-space.d.ts +3 -2
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
- package/package.json +16 -12
- package/scripts/drain-check-local.mjs +118 -173
- package/scripts/drain-check.mysql.sql +20 -16
- package/scripts/drain-check.pg.sql +20 -16
- package/wire-changes/server@7.147.0.json +813 -0
- package/wire-changes/server@7.148.0.json +1517 -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
|
@@ -2,7 +2,7 @@ import { realpathSync } from "node:fs";
|
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { NodeExecutionEnv, QUESTION_AWAITS_RESUME, deriveAskEffective, expandTiers, resolveAskSeamForm } from "@sema-agent/core";
|
|
4
4
|
import { cappedCeiling } from "../budget.js";
|
|
5
|
-
import {
|
|
5
|
+
import { unreadRequestMembers, unreadRequestMembersRefusal } from "../unread-request-members.js";
|
|
6
6
|
import { SessionEnvironmentSelection, selectEnvironmentTool } from "../capabilities/select-environment-tool.js";
|
|
7
7
|
import { sendUserFileTool } from "../capabilities/send-user-file-tool.js";
|
|
8
8
|
import { buildExcludeToolsSeat, buildPromptSeats, buildRunSkills, createScenarioGate, selectScenario } from "../capabilities/scenarios.js";
|
|
@@ -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 } 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,19 +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";
|
|
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";
|
|
30
33
|
import { headReadOf, sessionFaceOfHead } from "../session-incarnation.js";
|
|
31
34
|
import { legProjectIdOf, sessionWorkspaceStoreOf } from "../session-workspace.js";
|
|
32
35
|
import { memorySpecForRequest } from "../memory-scope.js";
|
|
33
36
|
import { createMemoryProjectLayers } from "../memory-project-layer.js";
|
|
34
|
-
import {
|
|
37
|
+
import { inheritEnvFieldIssue, singleMemberOffFieldIssue } from "../request-value-closure.js";
|
|
35
38
|
import { a2aForScenario, mcpForScenario } from "../web-admin-client/facade.js";
|
|
36
39
|
import { compactionSpecFragment, normalizeAttachments, normalizeResilience, normalizeResumeAtMode, normalizeSuggestNextPrompts, promptLeanSpecFragment, resolveTaskLimits, retainBackgroundProcessesFromBody, taskAgentsSpecFragment, toolMaterializeStrategyFromBody, allowToolsSpecFragment, toolNameListFromBody } from "../spec-fields.js";
|
|
37
40
|
import { isAbsoluteHostPath } from "@sema-agent/settings-schema";
|
|
38
41
|
import { effectiveHostWorkspace, parseAdditionalDirectories, satisfiedByProcessCwd, shellEnvMismatchCount } from "../task-cwd.js";
|
|
39
42
|
import { DEPLOYMENT_SHAPE_PREDICATES } from "../deployment-shape.js";
|
|
40
43
|
import { assertRequestA2aEntries, resolveRequestA2a, snapshotRequestA2a } from "../task-a2a.js";
|
|
41
|
-
import {
|
|
44
|
+
import { assertRequestImages } from "../request-images.js";
|
|
42
45
|
import { assertRequestMcpEntries, assertRequestMcpUnlocked, resolveRequestMcp } from "../task-mcp.js";
|
|
43
46
|
import { GOVERNANCE_HTTP_STATUS } from "../governance-http-status.js";
|
|
44
47
|
import { storedToolAxesRereadM19 } from "../stored-request-tool-axes-m19.js";
|
|
@@ -47,8 +50,10 @@ import { storedEnvCredentialsDropM38 } from "../stored-request-env-credentials-m
|
|
|
47
50
|
import { serverCredentialValueSources } from "../server-secret-env.js";
|
|
48
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";
|
|
49
52
|
import { tightenOnlySeatIssue } from "../tighten-only-seats.js";
|
|
53
|
+
import { buildNeverAutoRetiredNotice } from "../retired-name-host-notice.js";
|
|
50
54
|
import { entryProblemsFacts } from "../entry-problems.js";
|
|
51
55
|
import { inertToolListEntryOf } from "../rule-entry-list.js";
|
|
56
|
+
import { assertAttachmentIdsShape, assertImageProfileLane, assertInheritEnvServed, assertToolListsReadable, assertWriteFaceAdmitted, bodyImageProfileOf, scenarioRequestedBy } from "../request-form.js";
|
|
52
57
|
import { TENANCY_WALL_CLOCK_BASE_SEC, enableForkFromBody, normalizeRetainSubagentSessions, selfOrchestrationFromBody } from "../task-workflow.js";
|
|
53
58
|
import { redactSecrets } from "../trace/redact.js";
|
|
54
59
|
import { DeferredSandboxPathEnv, sandboxPathEnvSlots } from "./deferred-sandbox-path-env.js";
|
|
@@ -56,26 +61,32 @@ import { executionLaneHomeDir, executionLaneOf, laneIsolated, laneWiresExecution
|
|
|
56
61
|
import { executionConfigRootOf } from "../execution-config-root.js";
|
|
57
62
|
import { withUnattendedLeg } from "../unattended-permission-mode.js";
|
|
58
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
|
+
}
|
|
59
69
|
function unrooted(spec) {
|
|
60
70
|
const { sessionId: _neverWritten, ...resolved } = spec;
|
|
61
71
|
return resolved;
|
|
62
72
|
}
|
|
63
73
|
export function createResolveSpec(ctx) {
|
|
64
|
-
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;
|
|
65
75
|
const deploymentSkillSources = new Map(loadedSkills.map((k) => [k.spec.name, k.source]));
|
|
66
76
|
const scenarioGate = createScenarioGate({ config, scenarios, principalCaps, logger }, "enforce");
|
|
67
77
|
const sessionHeadOf = headReadOf(ownerAware);
|
|
78
|
+
const anchorsResolvable = sessionHeadOf === undefined ? undefined : historyAnchors;
|
|
68
79
|
const sessionWorkspace = sessionWorkspaceStoreOf(ownerAware);
|
|
69
80
|
assertGuardPatternsUsable(config);
|
|
70
81
|
const onlySensitiveBaseline = buildOnlySensitiveBaselineWarning(config, {
|
|
71
82
|
approvalSeat: durableEnabled ? "durable" : "absent",
|
|
72
83
|
singleUserAutoAcceptBaseline: singleUserAutoAcceptBaselineApplies(config),
|
|
73
84
|
});
|
|
74
|
-
const realTaskRootOf = (
|
|
85
|
+
const realTaskRootOf = (root) => {
|
|
75
86
|
if (DEPLOYMENT_SHAPE_PREDICATES.sandboxPathAdjudication.holds(config))
|
|
76
87
|
return undefined;
|
|
77
|
-
const sessionCwd =
|
|
78
|
-
return sessionCwd ?? (
|
|
88
|
+
const sessionCwd = effectiveHostWorkspace(perSessionCwd.get(root), {});
|
|
89
|
+
return sessionCwd ?? (laneWiresExecutionEnv(config.remoteExec.provider) ? undefined : process.cwd());
|
|
79
90
|
};
|
|
80
91
|
const memoryProjectLayers = createMemoryProjectLayers({ stores: memoryEngine, syncRunner: memorySyncRunner, log: logger });
|
|
81
92
|
if (onlySensitiveBaseline)
|
|
@@ -84,6 +95,7 @@ export function createResolveSpec(ctx) {
|
|
|
84
95
|
if (approvalGrantNotice)
|
|
85
96
|
logger.info(approvalGrantNotice.event, approvalGrantNotice.fields);
|
|
86
97
|
const resolveSpec = async (body, req, auth, opts) => {
|
|
98
|
+
const root = opts.execution.root;
|
|
87
99
|
const seatRefusal = gateIntentUnserviceableReason(config, checkpointStore !== undefined);
|
|
88
100
|
if (seatRefusal !== undefined)
|
|
89
101
|
throw createCodedHttpError(501, "capability.checkpoint_store_required", seatRefusal);
|
|
@@ -102,7 +114,7 @@ export function createResolveSpec(ctx) {
|
|
|
102
114
|
cwd: body.cwd,
|
|
103
115
|
shellScratchpadDir: body.scratchpadDir,
|
|
104
116
|
localDataRoot: config.localDataRoot ?? localRoot,
|
|
105
|
-
sessionId:
|
|
117
|
+
sessionId: root,
|
|
106
118
|
requirePrincipal: config.requirePrincipal,
|
|
107
119
|
callerOwnsWorkerDisk: DEPLOYMENT_SHAPE_PREDICATES.callerOwnsWorkerDisk.holds(config),
|
|
108
120
|
});
|
|
@@ -118,17 +130,7 @@ export function createResolveSpec(ctx) {
|
|
|
118
130
|
const inheritEnvIssue = inheritEnvFieldIssue(body);
|
|
119
131
|
if (inheritEnvIssue)
|
|
120
132
|
throw new HttpError(400, inheritEnvIssue.message, { code: "request.field_invalid", extra: inheritEnvIssue.facts });
|
|
121
|
-
|
|
122
|
-
const lane = executionLaneOf(config.remoteExec?.provider);
|
|
123
|
-
if (lane !== "host") {
|
|
124
|
-
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") });
|
|
125
|
-
}
|
|
126
|
-
const why = taskInheritEnvRefusal(config);
|
|
127
|
-
if (why !== undefined)
|
|
128
|
-
throw new HttpError(422, why, { code: HOST_POSTURE_REFUSED_CODE });
|
|
129
|
-
if (!auth?.sessionId)
|
|
130
|
-
throw new HttpError(400, `inheritEnv:"all" requires a session-resolving deployment (no authorizer session) — the host shell's environment is bound per session`, { code: "request.field_invalid", extra: inheritEnvFacts("no_authorizer_session") });
|
|
131
|
-
}
|
|
133
|
+
assertInheritEnvServed(body, config);
|
|
132
134
|
}
|
|
133
135
|
{
|
|
134
136
|
const bucketIssue = settingsPermissionBucketIssue(body.settings?.permissions);
|
|
@@ -151,7 +153,7 @@ export function createResolveSpec(ctx) {
|
|
|
151
153
|
dropped[e.match]++;
|
|
152
154
|
logger.warn("settings_env_credentials_dropped", {
|
|
153
155
|
migration: "M38",
|
|
154
|
-
sessionId:
|
|
156
|
+
sessionId: root,
|
|
155
157
|
dropped,
|
|
156
158
|
note: "this replayed request was stored before the upgrade and its settings.env carries credentials (a credential variable name of this engine, or a value shaped like a secret); while one-time migration M38 is open they are dropped from what the session's shell and hooks receive and the task resumes — the engine's own credentials come from its process environment and are unaffected; once the window closes the same request is refused",
|
|
157
159
|
});
|
|
@@ -162,14 +164,12 @@ 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) {
|
|
171
171
|
logger.warn("stored_allow_list_inert_resumed", {
|
|
172
|
-
sessionId:
|
|
172
|
+
sessionId: root,
|
|
173
173
|
layer: stale.layer,
|
|
174
174
|
sentence: stale.message,
|
|
175
175
|
note: "this resumed task's stored request carries an allow-list entry the engine reads as nothing (a retired name, a case twin, an unreadable spelling or a content form): the entry stays as written and grants nothing — the task ran that way before the upgrade, so it continues; fix the entry in a new submission to get what it was meant to allow",
|
|
@@ -179,88 +179,82 @@ export function createResolveSpec(ctx) {
|
|
|
179
179
|
}
|
|
180
180
|
if (opts?.leg === "fresh")
|
|
181
181
|
assertRequestA2aEntries(a2aPeers);
|
|
182
|
-
if (opts?.leg === "fresh")
|
|
183
|
-
assertRequestImageUrls(body.images);
|
|
184
|
-
const gated = await gateScenarioAndAppend(body, auth, opts, settingsEnv);
|
|
185
|
-
const effMode = effectivePermissionMode(body, gated.parsedSettings.settings);
|
|
186
182
|
{
|
|
187
|
-
const
|
|
188
|
-
if (
|
|
189
|
-
|
|
183
|
+
const unread = unreadRequestMembers({ settings: body.settings, mcpServers: body.mcpServers, a2aPeers }, config, opts?.leg === "fresh" ? { replay: false, settingsEnv } : { replay: true, today: new Date().toISOString().slice(0, 10), storedToolAxes, settingsEnv });
|
|
184
|
+
if (unread.length > 0) {
|
|
185
|
+
const refusal = unreadRequestMembersRefusal(unread);
|
|
186
|
+
throw new HttpError(400, refusal.message, { code: refusal.errorCode, ...(refusal.facts !== undefined ? { extra: { ...refusal.facts } } : {}) });
|
|
187
|
+
}
|
|
190
188
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
const
|
|
189
|
+
if (opts?.leg === "fresh")
|
|
190
|
+
assertRequestImages(body.images);
|
|
191
|
+
const gated = await gateScenarioAndAppend(body, auth, root, opts, settingsEnv);
|
|
192
|
+
const effMode = effectivePermissionMode(body, gated.parsedSettings.settings);
|
|
193
|
+
assertWriteFaceAdmitted(effMode, config);
|
|
194
|
+
const lane = bindSettingsCwdEnvAndModel(body, auth, root, gated, opts);
|
|
195
|
+
const anchors = await resolveHistoryAnchors(body, req, auth, root);
|
|
196
|
+
const projectKey = memoryEngine ? await memoryProjectLayers.prepare(config, auth?.memoryScope, realTaskRootOf(root)) : undefined;
|
|
194
197
|
const runSkills = buildRunSkills({ scenario: gated.cap.skills, request: body.skills, disable: body.disableSkills === true, deploymentSources: deploymentSkillSources }, logger);
|
|
195
|
-
const spec = assembleSpecLiteral(body, auth, req, opts, { ...gated, ...lane, ...anchors, projectKey, a2aPeers, storedToolAxes, runSkills }, effMode);
|
|
196
|
-
const folded = await foldGovernanceAndSettings(body, auth, spec, gated);
|
|
197
|
-
const
|
|
198
|
+
const spec = assembleSpecLiteral(body, auth, root, req, opts, { ...gated, ...lane, ...anchors, projectKey, a2aPeers, storedToolAxes, runSkills }, effMode);
|
|
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);
|
|
203
|
+
const final = await applyImageFactsAndRouting(body, auth, root, folded.governed, {
|
|
198
204
|
scenarioName: gated.scenarioName,
|
|
199
205
|
scratchpadDir: folded.scratchpadDir,
|
|
200
206
|
hostSemanticsLane: folded.hostSemanticsLane,
|
|
201
207
|
});
|
|
202
208
|
return { spec: final, facts: { hands: gated.hands, skills: runSkills.roster, sessionWitness: gated.sessionWitness } };
|
|
203
209
|
};
|
|
204
|
-
const gateScenarioAndAppend = async (body, auth, opts, settingsEnv) => {
|
|
205
|
-
const
|
|
206
|
-
const
|
|
210
|
+
const gateScenarioAndAppend = async (body, auth, root, opts, settingsEnv) => {
|
|
211
|
+
const { parts: subjectParts, person } = identityAxesOf(auth);
|
|
212
|
+
const requestedScenario = scenarioRequestedBy(subjectParts?.scenario, body.scenario);
|
|
213
|
+
const scenarioName = await scenarioGate(person, requestedScenario);
|
|
207
214
|
const rootFace = sessionHeadOf === undefined ? undefined : sessionFaceOfHead(root, await sessionHeadOf(root));
|
|
208
215
|
const sessionWitness = { sessionId: root, owner: rootFace?.owner ?? null, incarnation: rootFace?.incarnation ?? null };
|
|
209
|
-
const cap = selectScenario(scenarios, scenarioName)(body,
|
|
210
|
-
const acceptedAppend = acceptAppendSystemPrompt(body.appendSystemPrompt, (detail) => logger.warn("append_system_prompt_dropped", { detail, sessionId:
|
|
216
|
+
const cap = selectScenario(scenarios, scenarioName)(body, person, { sessionId: sessionWitness.sessionId, delegationRoot: sessionWitness });
|
|
217
|
+
const acceptedAppend = acceptAppendSystemPrompt(body.appendSystemPrompt, (detail) => logger.warn("append_system_prompt_dropped", { detail, sessionId: root }));
|
|
211
218
|
const objective = typeof body.objective === "string" ? body.objective : "";
|
|
212
219
|
const parsedSettings = parseTaskSettings(body.settings, {
|
|
213
220
|
...(opts?.leg === "fresh" || !taskHooksHonored(config) ? {} : { storedHooksReread: storedHooksRereadM20(new Date().toISOString().slice(0, 10)) }),
|
|
214
221
|
settingsEnv,
|
|
215
222
|
});
|
|
216
|
-
if (parsedSettings.deferred.length > 0) {
|
|
217
|
-
logger.warn("task_settings_deferred", { fields: parsedSettings.deferred, sessionId: auth?.sessionId ?? null });
|
|
218
|
-
}
|
|
219
223
|
if (parsedSettings.hooksReread !== undefined) {
|
|
220
224
|
logger.warn("hooks_read_as_before_upgrade", {
|
|
221
225
|
migration: "M20",
|
|
222
|
-
sessionId:
|
|
226
|
+
sessionId: root,
|
|
223
227
|
stripped: parsedSettings.hooksReread.stripped,
|
|
224
|
-
note: "this replayed request was stored before the upgrade and its settings.hooks carries a shape the hooks reader now refuses (a key the reader does not know that hides a guard-event member, or a JSON `__proto__` event key); while one-time migration M20 is open the keys named in `stripped` are dropped — what the pre-upgrade reader dropped — and the rest goes through the same reader again, so the guard hooks keep running; once the window closes the same request
|
|
228
|
+
note: "this replayed request was stored before the upgrade and its settings.hooks carries a shape the hooks reader now refuses (a key the reader does not know that hides a guard-event member, or a JSON `__proto__` event key); while one-time migration M20 is open the keys named in `stripped` are dropped — what the pre-upgrade reader dropped — and the rest goes through the same reader again, so the guard hooks keep running; once the window closes the same request is refused on resume (409 resume_blocked_by_policy)",
|
|
225
229
|
});
|
|
226
230
|
}
|
|
227
|
-
if (parsedSettings.deferred.includes("hooks") && taskHooksHonored(config)) {
|
|
228
|
-
recordFailOpen("server.hooks.resume-reader-refused", `leg=${opts?.leg ?? "resume"}`);
|
|
229
|
-
}
|
|
230
231
|
let attachmentNotice;
|
|
231
232
|
{
|
|
232
233
|
const reqAtt = body.attachmentIds;
|
|
233
234
|
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)");
|
|
235
|
+
assertAttachmentIdsShape(reqAtt);
|
|
239
236
|
if (reqAtt.length > 0) {
|
|
240
237
|
if (!taskAttachmentStore)
|
|
241
238
|
throw new HttpError(501, "attachmentIds require a store backend (DB_BACKEND=mysql|pg|local)");
|
|
242
|
-
if (!auth?.sessionId)
|
|
243
|
-
throw new HttpError(400, "`attachmentIds` requires a session-resolving deployment (no authorizer session)");
|
|
244
|
-
const sid = auth.sessionId;
|
|
245
239
|
const lane = opts.execution.lane;
|
|
246
240
|
const r = await bindAttachmentsForTask({
|
|
247
241
|
store: taskAttachmentStore,
|
|
248
|
-
owner: auth?.
|
|
242
|
+
owner: auth?.subject ?? "default",
|
|
249
243
|
ids: reqAtt,
|
|
250
|
-
sessionId:
|
|
244
|
+
sessionId: root,
|
|
251
245
|
lane: { word: lane, isolated: laneIsolated(lane) },
|
|
252
246
|
leg: opts?.leg === "fresh" ? "fresh" : "resume",
|
|
253
247
|
nowMs: Date.now(),
|
|
254
248
|
onMissing: (id) => {
|
|
255
249
|
if (opts?.leg === "fresh")
|
|
256
250
|
throw new HttpError(400, `attachment not found: ${id}`);
|
|
257
|
-
logger.warn("attachment_missing_on_resume", { sessionId:
|
|
251
|
+
logger.warn("attachment_missing_on_resume", { sessionId: root, id });
|
|
258
252
|
},
|
|
259
253
|
onRefused: (refusal) => {
|
|
260
254
|
const answer = attachmentBindRefusalAnswer(refusal);
|
|
261
255
|
if (opts?.leg === "fresh")
|
|
262
256
|
throw createCodedHttpError(answer.status, answer.errorCode, answer.message, answer.extra);
|
|
263
|
-
logger.warn("attachment_refused_on_resume", { sessionId:
|
|
257
|
+
logger.warn("attachment_refused_on_resume", { sessionId: root, errorCode: answer.errorCode, ...answer.extra });
|
|
264
258
|
},
|
|
265
259
|
});
|
|
266
260
|
attachmentNotice = r.notice;
|
|
@@ -269,46 +263,45 @@ export function createResolveSpec(ctx) {
|
|
|
269
263
|
}
|
|
270
264
|
return { scenarioName, cap, hands: cap.hands, acceptedAppend, objective, parsedSettings, attachmentNotice, sessionWitness };
|
|
271
265
|
};
|
|
272
|
-
const bindSettingsCwdEnvAndModel = (body, auth, gated, opts) => {
|
|
266
|
+
const bindSettingsCwdEnvAndModel = (body, auth, root, gated, opts) => {
|
|
273
267
|
const { objective, parsedSettings } = gated;
|
|
274
268
|
const cwdWriteGate = DEPLOYMENT_SHAPE_PREDICATES.callerCwd.holds(config);
|
|
275
|
-
const execLane =
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
if (typeof body.cwd === "string" && body.cwd.length > 0 && auth?.sessionId) {
|
|
269
|
+
const execLane = config.remoteExec.provider;
|
|
270
|
+
fenceSessionOwner(root, auth?.subject ?? null, opts.execution.occupant?.incarnation);
|
|
271
|
+
if (typeof body.cwd === "string" && body.cwd.length > 0) {
|
|
279
272
|
if (cwdWriteGate && isAbsoluteHostPath(body.cwd))
|
|
280
|
-
setSessionCwd(
|
|
281
|
-
else if (DEPLOYMENT_SHAPE_PREDICATES.
|
|
282
|
-
logger.debug("task_cwd_inherited", { lane: execLane, sessionId:
|
|
273
|
+
setSessionCwd(root, body.cwd);
|
|
274
|
+
else if (DEPLOYMENT_SHAPE_PREDICATES.noHandsSingleUser.holds(config) && isAbsoluteHostPath(body.cwd) && satisfiedByProcessCwd(body.cwd, realpathSync))
|
|
275
|
+
logger.debug("task_cwd_inherited", { lane: execLane, sessionId: root });
|
|
283
276
|
else
|
|
284
|
-
logger.warn("task_cwd_ignored", { honored: cwdWriteGate, lane: execLane, sessionId:
|
|
277
|
+
logger.warn("task_cwd_ignored", { honored: cwdWriteGate, lane: execLane, sessionId: root });
|
|
285
278
|
}
|
|
286
|
-
if (parsedSettings.settings?.shellEnv
|
|
279
|
+
if (parsedSettings.settings?.shellEnv) {
|
|
287
280
|
if (cwdWriteGate)
|
|
288
|
-
setSessionShellEnv(
|
|
289
|
-
else if (DEPLOYMENT_SHAPE_PREDICATES.
|
|
281
|
+
setSessionShellEnv(root, parsedSettings.settings.shellEnv);
|
|
282
|
+
else if (DEPLOYMENT_SHAPE_PREDICATES.noHandsSingleUser.holds(config)) {
|
|
290
283
|
const requested = parsedSettings.settings.shellEnv;
|
|
291
284
|
const mismatched = shellEnvMismatchCount(requested, process.env);
|
|
292
285
|
if (mismatched === 0)
|
|
293
|
-
logger.debug("task_shell_env_inherited", { lane: execLane, keys: Object.keys(requested).length, sessionId:
|
|
286
|
+
logger.debug("task_shell_env_inherited", { lane: execLane, keys: Object.keys(requested).length, sessionId: root });
|
|
294
287
|
else
|
|
295
|
-
logger.warn("task_shell_env_ignored", { honored: false, lane: execLane, mismatchedKeys: mismatched, sessionId:
|
|
288
|
+
logger.warn("task_shell_env_ignored", { honored: false, lane: execLane, mismatchedKeys: mismatched, sessionId: root });
|
|
296
289
|
}
|
|
297
290
|
else
|
|
298
|
-
logger.warn("task_shell_env_ignored", { honored: false, lane: execLane, sessionId:
|
|
291
|
+
logger.warn("task_shell_env_ignored", { honored: false, lane: execLane, sessionId: root });
|
|
299
292
|
}
|
|
300
293
|
const taskHooks = (() => {
|
|
301
294
|
const hc = parsedSettings.settings?.hooks;
|
|
302
295
|
if (!hc)
|
|
303
296
|
return [];
|
|
304
297
|
if (!taskHooksHonored(config)) {
|
|
305
|
-
logger.warn("task_hooks_ignored", { honored: false, sessionId:
|
|
298
|
+
logger.warn("task_hooks_ignored", { honored: false, sessionId: root });
|
|
306
299
|
return [];
|
|
307
300
|
}
|
|
308
301
|
return createSettingsHooksRegistrations(hc, {
|
|
309
302
|
logger,
|
|
310
|
-
sessionId:
|
|
311
|
-
cwd:
|
|
303
|
+
sessionId: root,
|
|
304
|
+
cwd: perSessionCwd.get(root) ?? process.cwd(),
|
|
312
305
|
...(parsedSettings.settings?.shellEnv ? { shellEnv: parsedSettings.settings.shellEnv } : {}),
|
|
313
306
|
httpHookAllowlistLayers: parsedSettings.settings?.httpHookAllowlist !== undefined ? [parsedSettings.settings.httpHookAllowlist] : [],
|
|
314
307
|
belowTaskChainPatterns,
|
|
@@ -316,79 +309,66 @@ export function createResolveSpec(ctx) {
|
|
|
316
309
|
hookAgent,
|
|
317
310
|
onHookNotice: (n) => fleetBus.publishHookNotice({
|
|
318
311
|
...n,
|
|
319
|
-
...(auth?.
|
|
320
|
-
|
|
312
|
+
...(auth?.subject ? { ownerScope: auth.subject } : {}),
|
|
313
|
+
ownerSessionId: root,
|
|
321
314
|
}),
|
|
322
|
-
|
|
323
|
-
?
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
hookWakeBus.deliver(auth.sessionId, `[hook asyncRewake] ${redactSecrets(text)}`)
|
|
327
|
-
: false,
|
|
328
|
-
}
|
|
329
|
-
: {}),
|
|
315
|
+
wake: async (text) => hookWakeBus.deliver
|
|
316
|
+
?
|
|
317
|
+
hookWakeBus.deliver(root, `[hook asyncRewake] ${redactSecrets(text)}`)
|
|
318
|
+
: false,
|
|
330
319
|
}, settingsHooksBudgetMs(config));
|
|
331
320
|
})();
|
|
332
321
|
const rawAddDirs = body.additionalDirectories;
|
|
333
322
|
const callerOwnsWorkerDisk = DEPLOYMENT_SHAPE_PREDICATES.callerOwnsWorkerDisk.holds(config);
|
|
334
323
|
const additionalDirectories = callerOwnsWorkerDisk ? parseAdditionalDirectories(rawAddDirs) : undefined;
|
|
335
324
|
if (rawAddDirs !== undefined && !callerOwnsWorkerDisk) {
|
|
336
|
-
logger.warn("task_additional_directories_ignored", { honored: false, sessionId:
|
|
325
|
+
logger.warn("task_additional_directories_ignored", { honored: false, sessionId: root });
|
|
337
326
|
}
|
|
338
327
|
const rawAddReadDirs = body.additionalReadDirectories;
|
|
339
328
|
const additionalReadDirectories = callerOwnsWorkerDisk ? parseAdditionalDirectories(rawAddReadDirs) : undefined;
|
|
340
329
|
if (rawAddReadDirs !== undefined && !callerOwnsWorkerDisk) {
|
|
341
|
-
logger.warn("task_additional_read_directories_ignored", { honored: false, sessionId:
|
|
330
|
+
logger.warn("task_additional_read_directories_ignored", { honored: false, sessionId: root });
|
|
342
331
|
}
|
|
343
|
-
const wireCatalog =
|
|
344
|
-
const picked = resolveTaskModel(body.model ?? parsedSettings.settings?.model, objective, wireCatalog, config.atMention, config.modelRefusals);
|
|
332
|
+
const { selectable: wireCatalog, picked } = pickUserModel(config, body.model ?? parsedSettings.settings?.model, objective);
|
|
345
333
|
if (picked.unavailable !== undefined) {
|
|
346
334
|
const { requested, name, refusal, source } = picked.unavailable;
|
|
347
335
|
if (opts?.leg === "fresh") {
|
|
348
336
|
throw new HttpError(400, modelUnavailableMessage(source === "mention" ? "@-mention" : "model", requested, name, refusal), { code: "request.model_unavailable" });
|
|
349
337
|
}
|
|
350
338
|
metrics.inc("task_model_unavailable_fallback_total");
|
|
351
|
-
logger.warn("task_model_unavailable_fallback", { requested: echoModelRef(requested), name, code: refusal.code, source, fallback: picked.model, sessionId:
|
|
339
|
+
logger.warn("task_model_unavailable_fallback", { requested: echoModelRef(requested), name, code: refusal.code, source, fallback: picked.model, sessionId: root });
|
|
352
340
|
}
|
|
353
341
|
if (picked.notAllowed !== undefined) {
|
|
354
342
|
const { requested, resolved, source } = picked.notAllowed;
|
|
355
343
|
if (opts?.leg === "fresh") {
|
|
356
|
-
throw new HttpError(400,
|
|
344
|
+
throw new HttpError(400, modelNotAllowedMessage("model", requested, resolved), { code: "request.model_not_allowed" });
|
|
357
345
|
}
|
|
358
346
|
metrics.inc("task_model_not_allowlisted_resume_total");
|
|
359
|
-
logger.warn("task_model_not_allowlisted_resume", { requested: echoModelRef(requested), resolved, source, sessionId:
|
|
347
|
+
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" });
|
|
360
348
|
}
|
|
361
349
|
if (picked.unknownExplicit !== undefined) {
|
|
362
350
|
metrics.inc("task_model_unknown_fallback_total");
|
|
363
|
-
logger.warn("task_model_unknown_fallback", { requested: echoModelRef(picked.unknownExplicit), fallback: picked.model, sessionId:
|
|
351
|
+
logger.warn("task_model_unknown_fallback", { requested: echoModelRef(picked.unknownExplicit), fallback: picked.model, sessionId: root });
|
|
364
352
|
}
|
|
365
353
|
return { taskHooks, additionalDirectories, additionalReadDirectories, wireCatalog, picked };
|
|
366
354
|
};
|
|
367
|
-
const
|
|
368
|
-
|
|
355
|
+
const resolveHistoryAnchors = async (body, req, auth, root) => {
|
|
356
|
+
const anchorReader = req === undefined ? undefined : anchorReaderOf(req, { config, logger }, claimCallerOf(identityAxesOf(auth).subject, config));
|
|
369
357
|
let resumeAtEntryId;
|
|
370
358
|
if (typeof body.resumeAt === "string" && body.resumeAt.length > 0) {
|
|
371
|
-
if (!
|
|
372
|
-
throw new HttpError(422, "resumeAt requires a session to branch (resume_at.no_session)", { code: "resume_at.no_session" });
|
|
373
|
-
if (!resumeAnchorStore || !sessionHeadOf)
|
|
359
|
+
if (!anchorsResolvable)
|
|
374
360
|
throw new HttpError(501, "resume-at is not available on this worker (no session-store backend for the anchor map)");
|
|
375
|
-
resumeAtEntryId = await
|
|
376
|
-
if (resumeAtEntryId === undefined)
|
|
377
|
-
throw new HttpError(404, `resumeAt: no such message in this session (resume_at.unknown_event) — ${NO_ANCHOR_HINT}; give an explicit resumeAt`, { code: "resume_at.unknown_event" });
|
|
361
|
+
resumeAtEntryId = await resolveHistoryAnchor("resumeAt", anchorsResolvable, anchorReader, root, body.resumeAt, auth?.subject ?? null, "resumeAt");
|
|
378
362
|
}
|
|
379
363
|
let rewindFilesToEntryId;
|
|
380
364
|
if (resumeAtEntryId === undefined && typeof body.rewindFilesTo === "string" && body.rewindFilesTo.length > 0) {
|
|
381
|
-
if (!
|
|
382
|
-
throw new HttpError(422, "rewindFilesTo requires a session (rewind_files_to.no_session)", { code: "rewind_files_to.no_session" });
|
|
383
|
-
if (!resumeAnchorStore || !sessionHeadOf)
|
|
365
|
+
if (!anchorsResolvable)
|
|
384
366
|
throw new HttpError(501, "rewind-files-to is not available on this worker (no session-store backend for the anchor map)");
|
|
385
|
-
rewindFilesToEntryId = await
|
|
386
|
-
if (rewindFilesToEntryId === undefined)
|
|
387
|
-
throw new HttpError(404, `rewindFilesTo: no such message in this session (rewind_files_to.unknown_event) — ${NO_ANCHOR_HINT}; name another prompt`, { code: "rewind_files_to.unknown_event" });
|
|
367
|
+
rewindFilesToEntryId = await resolveHistoryAnchor("rewindFilesTo", anchorsResolvable, anchorReader, root, body.rewindFilesTo, auth?.subject ?? null, "rewindFilesTo");
|
|
388
368
|
}
|
|
389
369
|
const submittedProjectId = auth?.resolvedProjectId ?? (typeof body.projectId === "string" && body.projectId ? body.projectId.toLowerCase() : undefined);
|
|
390
370
|
const s4DefaultScopes = submittedProjectId ? config.projects[submittedProjectId]?.defaultScopes : undefined;
|
|
391
|
-
const legProjectId = await legProjectIdOf(submittedProjectId, sessionWorkspace,
|
|
371
|
+
const legProjectId = await legProjectIdOf(submittedProjectId, sessionWorkspace, root);
|
|
392
372
|
return { resumeAtEntryId, rewindFilesToEntryId, s4DefaultScopes, legProjectId };
|
|
393
373
|
};
|
|
394
374
|
const declaresInteractivePosture = (body, req, opts) => {
|
|
@@ -405,7 +385,8 @@ export function createResolveSpec(ctx) {
|
|
|
405
385
|
const askForm = resolveAskSeamForm(body.approvalReach !== undefined ? { approvalReach: body.approvalReach } : {}, approverSeat !== undefined ? { onAsk: approverSeat } : {});
|
|
406
386
|
return deriveAskEffective(askForm.form, "unresolved") === "human_reachable";
|
|
407
387
|
};
|
|
408
|
-
const assembleSpecLiteral = (body, auth, req, opts, parts, effMode) => {
|
|
388
|
+
const assembleSpecLiteral = (body, auth, root, req, opts, parts, effMode) => {
|
|
389
|
+
const { parts: subjectParts, person } = identityAxesOf(auth);
|
|
409
390
|
const { scenarioName, cap, hands, acceptedAppend, parsedSettings, attachmentNotice, taskHooks, additionalDirectories, additionalReadDirectories, wireCatalog, picked, resumeAtEntryId, rewindFilesToEntryId, s4DefaultScopes, legProjectId, projectKey, a2aPeers, storedToolAxes, runSkills, } = parts;
|
|
410
391
|
const spec = {
|
|
411
392
|
objective: attachmentNotice ? `${picked.cleanedObjective}\n\n${attachmentNotice}` : picked.cleanedObjective,
|
|
@@ -414,7 +395,7 @@ export function createResolveSpec(ctx) {
|
|
|
414
395
|
...(body.outputStyle !== undefined ? { outputStyle: body.outputStyle } : {}),
|
|
415
396
|
...(body.projectMemory !== undefined ? { projectMemory: body.projectMemory } : {}),
|
|
416
397
|
...(legProjectId !== undefined ? { projectId: legProjectId } : {}),
|
|
417
|
-
principal:
|
|
398
|
+
principal: taskSpecIdentityOf(subjectParts).principal,
|
|
418
399
|
images: body.images,
|
|
419
400
|
...(body.userAttachments !== undefined ? { userAttachments: body.userAttachments } : {}),
|
|
420
401
|
...(body.clientContext ? { clientContext: { timeZone: body.clientContext.timeZone, userEmail: body.clientContext.userEmail } } : {}),
|
|
@@ -425,7 +406,6 @@ export function createResolveSpec(ctx) {
|
|
|
425
406
|
: {}),
|
|
426
407
|
resumeAt: resumeAtEntryId,
|
|
427
408
|
resumeAtMode: normalizeResumeAtMode(body.resumeAtMode, resumeAtEntryId !== undefined),
|
|
428
|
-
requireExistingSession: body.requireExistingSession === true ? true : undefined,
|
|
429
409
|
enableFork: enableForkFromBody(body, config, Boolean(centerRuntimeCapsResolver)),
|
|
430
410
|
suggestNextPrompts: normalizeSuggestNextPrompts(body.suggestNextPrompts),
|
|
431
411
|
restoreFiles: body.restoreFiles === true ? true : undefined,
|
|
@@ -439,8 +419,8 @@ export function createResolveSpec(ctx) {
|
|
|
439
419
|
selfOrchestration: selfOrchestrationFromBody({ selfOrchestration: body.selfOrchestration === true || parsedSettings.settings?.ultracode === true }, config, Boolean(centerRuntimeCapsResolver)),
|
|
440
420
|
forwardSubagentEvents: body.forwardSubagentEvents === true ? true : undefined,
|
|
441
421
|
retainSubagentSessions: normalizeRetainSubagentSessions(body.retainSubagentSessions),
|
|
442
|
-
...taskAgentsSpecFragment(body.agents, config.requirePrincipal, (event, fields) => logger.warn(event, { ...fields, sessionId:
|
|
443
|
-
...(retainBackgroundProcessesFromBody(body.retainBackgroundProcesses, config.requirePrincipal, (event, fields) => logger.warn(event, { ...fields, sessionId:
|
|
422
|
+
...taskAgentsSpecFragment(body.agents, config.requirePrincipal, (event, fields) => logger.warn(event, { ...fields, sessionId: root })),
|
|
423
|
+
...(retainBackgroundProcessesFromBody(body.retainBackgroundProcesses, config.requirePrincipal, (event, fields) => logger.warn(event, { ...fields, sessionId: root })) === true
|
|
444
424
|
? { retainBackgroundProcesses: true }
|
|
445
425
|
: {}),
|
|
446
426
|
...(body.excludeAllTools === true ? { excludeAllTools: true } : {}),
|
|
@@ -453,7 +433,7 @@ export function createResolveSpec(ctx) {
|
|
|
453
433
|
...(declaresInteractivePosture(body, req, opts) ? { interactionPosture: "interactive" } : {}),
|
|
454
434
|
...(body.approvalReach !== undefined ? { approvalReach: body.approvalReach } : {}),
|
|
455
435
|
...(typeof body.oneShot === "boolean" ? { oneShot: body.oneShot } : {}),
|
|
456
|
-
resilience: normalizeResilience(body.resilience, explicitOperatorOk(
|
|
436
|
+
resilience: normalizeResilience(body.resilience, explicitOperatorOk(person, config)),
|
|
457
437
|
finalVerification: cap.finalVerification === true || body.finalVerification === true ? true : undefined,
|
|
458
438
|
attachments: normalizeAttachments(body.attachments),
|
|
459
439
|
...(taskHooks.length > 0 ? { mods: [...taskHooks] } : {}),
|
|
@@ -471,23 +451,23 @@ export function createResolveSpec(ctx) {
|
|
|
471
451
|
throw new HttpError(400, `unknown compactionModel "${echoModelRef(body.compactionModel)}" — not in the configured catalog (name, tier word, or id; a catalog refresh may have removed it mid-request)`);
|
|
472
452
|
}
|
|
473
453
|
metrics.inc("task_model_unknown_fallback_total");
|
|
474
|
-
logger.warn("compaction_model_unknown_fallback", { requested: echoModelRef(body.compactionModel), sessionId:
|
|
454
|
+
logger.warn("compaction_model_unknown_fallback", { requested: echoModelRef(body.compactionModel), sessionId: root });
|
|
475
455
|
return {};
|
|
476
456
|
}
|
|
477
457
|
if (!isAtMentionable(cm, wireCatalog, config.atMention, config.modelRefusals)) {
|
|
478
458
|
const terminal = terminalCatalogName(cm, wireCatalog, config.modelRefusals) ?? cm;
|
|
479
459
|
if (opts?.leg === "fresh") {
|
|
480
|
-
throw new HttpError(400,
|
|
460
|
+
throw new HttpError(400, modelNotAllowedMessage("compactionModel", body.compactionModel, terminal), { code: "request.model_not_allowed" });
|
|
481
461
|
}
|
|
482
462
|
metrics.inc("task_model_not_allowlisted_resume_total");
|
|
483
|
-
logger.warn("task_model_not_allowlisted_resume", { requested: echoModelRef(body.compactionModel), resolved: terminal, source: "compaction", sessionId:
|
|
463
|
+
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" });
|
|
484
464
|
}
|
|
485
465
|
return { compactionModel: cm };
|
|
486
466
|
})()),
|
|
487
467
|
thinking: effectiveThinking(body.reasoningEffort, parsedSettings.settings?.ultracode === true),
|
|
488
468
|
getApiKeyAndHeaders: getKeyResolver(),
|
|
489
469
|
...(() => {
|
|
490
|
-
const limits = resolveTaskLimits(body.limits, taskLimitCaps, taskTimeoutSec, config.requirePrincipal, (event, fields) => logger.warn(event, { ...fields, sessionId:
|
|
470
|
+
const limits = resolveTaskLimits(body.limits, taskLimitCaps, taskTimeoutSec, config.requirePrincipal, (event, fields) => logger.warn(event, { ...fields, sessionId: root }));
|
|
491
471
|
const declarations = [];
|
|
492
472
|
if (taskLimitCaps.timeoutSec !== undefined)
|
|
493
473
|
declarations.push({ key: "server.limits.timeoutSecCap", value: String(taskLimitCaps.timeoutSec), reason: "env TASK_TIMEOUT_MAX_SEC (seconds; operator ceiling applied to caller limits.maxWalltimeMs as cap×1000)" });
|
|
@@ -535,13 +515,13 @@ export function createResolveSpec(ctx) {
|
|
|
535
515
|
...(() => { const v = toolNameListFromBody(body.userInvokedSkills); return v ? { userInvokedSkills: v } : {}; })(),
|
|
536
516
|
...(parsedSettings.settings?.skillListingBudgetFraction !== undefined ? { skillListingBudgetFraction: parsedSettings.settings.skillListingBudgetFraction } : {}),
|
|
537
517
|
...(parsedSettings.settings?.skillListingMaxDescChars !== undefined ? { skillListingMaxDescChars: parsedSettings.settings.skillListingMaxDescChars } : {}),
|
|
538
|
-
mcp: resolveRequestMcp(mcpForScenario(config.mcpServers, scenarioName), body.mcpServers, config, peerDesk, opts.lease, logger, opts?.onNotice !== undefined ? { sessionId:
|
|
518
|
+
mcp: resolveRequestMcp(mcpForScenario(config.mcpServers, scenarioName), body.mcpServers, config, peerDesk, opts.lease, logger, opts?.onNotice !== undefined ? { sessionId: root, emit: opts.onNotice } : undefined, storedToolAxes),
|
|
539
519
|
a2a: resolveRequestA2a(a2aForScenario(config.a2aPeers, scenarioName), a2aPeers, config, peerDesk, opts.lease, logger, opts?.leg === "fresh" ? "fresh" : "resume", storedToolAxes),
|
|
540
520
|
toolPolicy: toolPolicyForHands(hands, durableEnabled
|
|
541
521
|
? createApprovalBaselinePolicy(config, {
|
|
542
522
|
kind: "durable",
|
|
543
523
|
question: liveQuestionFace,
|
|
544
|
-
...(approvalExemptionStore !== undefined
|
|
524
|
+
...(approvalExemptionStore !== undefined ? { exemption: createSessionExemptionRead(approvalExemptionStore, root, logger, "deployment_list") } : {}),
|
|
545
525
|
})
|
|
546
526
|
: singleUserAutoAcceptBaselineApplies(config)
|
|
547
527
|
? createApprovalBaselinePolicy(config, { kind: "absent" })
|
|
@@ -550,14 +530,13 @@ export function createResolveSpec(ctx) {
|
|
|
550
530
|
? {
|
|
551
531
|
checkpointStore,
|
|
552
532
|
durableApproval: {
|
|
553
|
-
scope: encodeCheckpointScope(auth?.
|
|
533
|
+
scope: encodeCheckpointScope(auth?.subject),
|
|
554
534
|
...(config.approvalTimeoutSec > 0 ? { ttlMs: config.approvalTimeoutSec * 1000 } : {}),
|
|
555
535
|
},
|
|
556
536
|
...((rs) => (rs ? { resourceSuspend: rs } : {}))(resourceSuspendOptIn({
|
|
557
537
|
enabled: config.resourceSuspend,
|
|
558
538
|
ttlSec: config.resourceSuspendTtlSec,
|
|
559
|
-
|
|
560
|
-
scope: encodeCheckpointScope(auth?.principal),
|
|
539
|
+
scope: encodeCheckpointScope(auth?.subject),
|
|
561
540
|
totalTokens: config.resourceSuspendTotalTokens,
|
|
562
541
|
totalBudgetUsd: config.resourceSuspendTotalBudgetUsd,
|
|
563
542
|
maxSlices: config.resourceSuspendMaxSlices,
|
|
@@ -568,7 +547,7 @@ export function createResolveSpec(ctx) {
|
|
|
568
547
|
};
|
|
569
548
|
return spec;
|
|
570
549
|
};
|
|
571
|
-
const foldGovernanceAndSettings = async (body, auth, spec, gated) => {
|
|
550
|
+
const foldGovernanceAndSettings = async (body, auth, root, spec, gated) => {
|
|
572
551
|
const { acceptedAppend, parsedSettings } = gated;
|
|
573
552
|
const hostSemanticsLane = !DEPLOYMENT_SHAPE_PREDICATES.sandboxPathAdjudication.holds(config);
|
|
574
553
|
const laneHomeBase = () => {
|
|
@@ -577,7 +556,7 @@ export function createResolveSpec(ctx) {
|
|
|
577
556
|
};
|
|
578
557
|
const pathAdjudication = hostSemanticsLane
|
|
579
558
|
? (() => {
|
|
580
|
-
const realRoot = realTaskRootOf(
|
|
559
|
+
const realRoot = realTaskRootOf(root);
|
|
581
560
|
const gateCwd = realRoot ?? join(config.localDataRoot ?? localRoot, "fs-write-gate-unrooted");
|
|
582
561
|
return {
|
|
583
562
|
env: new NodeExecutionEnv({ cwd: gateCwd }),
|
|
@@ -588,9 +567,9 @@ export function createResolveSpec(ctx) {
|
|
|
588
567
|
})()
|
|
589
568
|
: {
|
|
590
569
|
env: new DeferredSandboxPathEnv({
|
|
591
|
-
sessionId:
|
|
570
|
+
sessionId: root,
|
|
592
571
|
slots: sandboxPathEnvSlots,
|
|
593
|
-
logger: { warn: (event, fields) => logger.warn(event, { ...(fields ?? {}), lane: config.remoteExec
|
|
572
|
+
logger: { warn: (event, fields) => logger.warn(event, { ...(fields ?? {}), lane: config.remoteExec.provider }) },
|
|
594
573
|
}),
|
|
595
574
|
...laneHomeBase(),
|
|
596
575
|
};
|
|
@@ -598,18 +577,18 @@ export function createResolveSpec(ctx) {
|
|
|
598
577
|
let governed = governedBase;
|
|
599
578
|
let effectiveSettings = parsedSettings.settings;
|
|
600
579
|
if (effectiveSettings?.outputStyle && acceptedAppend && acceptedAppend.length + 2 + effectiveSettings.outputStyle.length > MAX_SETTINGS_OUTPUT_STYLE_CHARS) {
|
|
601
|
-
logger.warn("output_style_dropped", { detail: `combined append carriers exceed the ${MAX_SETTINGS_OUTPUT_STYLE_CHARS} cap (rider ${acceptedAppend.length} + style ${effectiveSettings.outputStyle.length}) — style dropped (pre-cap stored body on a resume leg?)`, sessionId:
|
|
580
|
+
logger.warn("output_style_dropped", { detail: `combined append carriers exceed the ${MAX_SETTINGS_OUTPUT_STYLE_CHARS} cap (rider ${acceptedAppend.length} + style ${effectiveSettings.outputStyle.length}) — style dropped (pre-cap stored body on a resume leg?)`, sessionId: root });
|
|
602
581
|
const { outputStyle: _dropped2, ...rest2 } = effectiveSettings;
|
|
603
582
|
effectiveSettings = Object.keys(rest2).length > 0 ? rest2 : undefined;
|
|
604
583
|
}
|
|
605
584
|
const shellScratchpad = await acceptShellScratchpadDir(body.scratchpadDir, {
|
|
606
585
|
requirePrincipal: config.requirePrincipal,
|
|
607
586
|
hostSemanticsLane,
|
|
608
|
-
warn: (msg, meta) => logger.warn(msg, { ...(meta ?? {}), sessionId:
|
|
587
|
+
warn: (msg, meta) => logger.warn(msg, { ...(meta ?? {}), sessionId: root }),
|
|
609
588
|
});
|
|
610
589
|
const scratchpadDir = shellScratchpad ??
|
|
611
|
-
(hostSemanticsLane
|
|
612
|
-
? await ensureScratchpadDir(config.localDataRoot ?? localRoot,
|
|
590
|
+
(hostSemanticsLane
|
|
591
|
+
? await ensureScratchpadDir(config.localDataRoot ?? localRoot, root, (msg, meta) => logger.warn(msg, { ...(meta ?? {}), sessionId: root }))
|
|
613
592
|
: undefined);
|
|
614
593
|
if (effectiveSettings) {
|
|
615
594
|
const configRoot = executionConfigRootOf(config);
|
|
@@ -629,52 +608,41 @@ export function createResolveSpec(ctx) {
|
|
|
629
608
|
}
|
|
630
609
|
if (governed.selfOrchestration === true) {
|
|
631
610
|
governed = tightenGoverned(governed, {
|
|
632
|
-
toolPolicy: createWorkflowAskPolicy(approvalExemptionStore
|
|
633
|
-
? async (toolName) => {
|
|
634
|
-
const hit = await approvalExemptionStore.has(auth.sessionId, toolName);
|
|
635
|
-
if (hit)
|
|
636
|
-
logger.info("workflow_gate_exempted", { toolName, sessionId: auth.sessionId });
|
|
637
|
-
return hit;
|
|
638
|
-
}
|
|
639
|
-
: undefined),
|
|
611
|
+
toolPolicy: createWorkflowAskPolicy(approvalExemptionStore ? createSessionExemptionRead(approvalExemptionStore, root, logger, "workflow_gate") : undefined),
|
|
640
612
|
});
|
|
641
613
|
}
|
|
642
614
|
return { governed, scratchpadDir, hostSemanticsLane };
|
|
643
615
|
};
|
|
644
|
-
const applyImageFactsAndRouting = async (body, auth, governed, folded) => {
|
|
616
|
+
const applyImageFactsAndRouting = async (body, auth, root, governed, folded) => {
|
|
617
|
+
const { person } = identityAxesOf(auth);
|
|
645
618
|
const { scenarioName, scratchpadDir, hostSemanticsLane } = folded;
|
|
646
|
-
const bodyProfile =
|
|
647
|
-
const taskImageProfile = bodyProfile ?? (body.cascade === true || body.verify === true ? undefined : sessionEnvSelection.get(
|
|
619
|
+
const bodyProfile = bodyImageProfileOf(body);
|
|
620
|
+
const taskImageProfile = bodyProfile ?? (body.cascade === true || body.verify === true ? undefined : sessionEnvSelection.get(root));
|
|
648
621
|
let resolvedImageCaps;
|
|
649
622
|
if (taskImageProfile !== undefined) {
|
|
650
|
-
|
|
651
|
-
throw createCodedHttpError(501, "capability.k8s_lane_required", "sandboxImageProfile is only supported on the k8s sandbox backend");
|
|
652
|
-
}
|
|
623
|
+
assertImageProfileLane(taskImageProfile, config);
|
|
653
624
|
if (!imageIndex) {
|
|
654
625
|
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");
|
|
655
626
|
}
|
|
656
|
-
if (!auth?.sessionId) {
|
|
657
|
-
throw createCodedHttpError(400, "request.precondition_unmet", "sandboxImageProfile requires a resolved session");
|
|
658
|
-
}
|
|
659
627
|
const capsNeeded = Array.isArray(body.capabilitiesNeeded)
|
|
660
628
|
? body.capabilitiesNeeded.filter((c) => typeof c === "string")
|
|
661
629
|
: undefined;
|
|
662
630
|
const resolved = await resolveSandboxImageRef({
|
|
663
631
|
profile: taskImageProfile,
|
|
664
632
|
...(capsNeeded && capsNeeded.length > 0 ? { capabilitiesNeeded: capsNeeded } : {}),
|
|
665
|
-
viewer: { operator: explicitOperatorOk(
|
|
633
|
+
viewer: { operator: explicitOperatorOk(person, config), tenantId: person ?? null },
|
|
666
634
|
index: imageIndex,
|
|
667
635
|
});
|
|
668
636
|
if (!resolved.ok)
|
|
669
637
|
throw createCodedHttpError(resolved.status, resolved.errorCode, resolved.message);
|
|
670
|
-
perTaskImage.set(
|
|
638
|
+
perTaskImage.set(root, resolved.ref);
|
|
671
639
|
resolvedImageCaps = resolved.capabilities;
|
|
672
640
|
}
|
|
673
641
|
const remoteScratchpadDir = !hostSemanticsLane && DEPLOYMENT_SHAPE_PREDICATES.remoteScratchpad.holds(config)
|
|
674
|
-
? remoteScratchpadDirFor(
|
|
642
|
+
? remoteScratchpadDirFor(root)
|
|
675
643
|
: undefined;
|
|
676
644
|
const declaredScratchpadDir = scratchpadDir ?? remoteScratchpadDir;
|
|
677
|
-
const pkgSourceLane = config.remoteExec
|
|
645
|
+
const pkgSourceLane = config.remoteExec.provider === "e2b" || config.remoteExec.provider === "k8s";
|
|
678
646
|
const facts = buildEnvFacts({
|
|
679
647
|
...(declaredScratchpadDir ? { scratchpadDir: declaredScratchpadDir } : {}),
|
|
680
648
|
...(config.envFactsEnabled
|
|
@@ -683,7 +651,7 @@ export function createResolveSpec(ctx) {
|
|
|
683
651
|
capabilities: resolvedImageCaps,
|
|
684
652
|
...(pkgSourceLane ? { pkgSource: config.sandboxPkgSource } : {}),
|
|
685
653
|
egress: egressForRemoteExec(config.remoteExec),
|
|
686
|
-
resumeFacts: resumeFactsForLane(config.remoteExec
|
|
654
|
+
resumeFacts: resumeFactsForLane(config.remoteExec.provider, config.remoteExec.provider === "k8s" ? { k8sSnapshot: Boolean(config.remoteExec.s3Snapshot) } : undefined),
|
|
687
655
|
}
|
|
688
656
|
: {}),
|
|
689
657
|
});
|
|
@@ -692,10 +660,10 @@ export function createResolveSpec(ctx) {
|
|
|
692
660
|
if (config.routerEnabled) {
|
|
693
661
|
const decision = routeServiceTask({
|
|
694
662
|
vmIsolatedExecEnv: DEPLOYMENT_SHAPE_PREDICATES.vmIsolatedHands.holds(config),
|
|
695
|
-
hasExecutionEnv: laneWiresExecutionEnv(
|
|
663
|
+
hasExecutionEnv: laneWiresExecutionEnv(config.remoteExec.provider),
|
|
696
664
|
...(config.autonomy ? { autonomy: config.autonomy } : {}),
|
|
697
665
|
});
|
|
698
|
-
logger.info("orchestration_routed", { mode: decision.mode, reason: decision.reason, sessionId:
|
|
666
|
+
logger.info("orchestration_routed", { mode: decision.mode, reason: decision.reason, sessionId: root });
|
|
699
667
|
if (decision.mode === "supervisor") {
|
|
700
668
|
return tightenGoverned(governed, supPostureOverrides());
|
|
701
669
|
}
|