@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
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { sendJson, sendError } from "../send.js";
|
|
3
3
|
import { sentMemoryStoreRefusal } from "../memory-store-refusal-reply.js";
|
|
4
|
-
import { sentControlPlaneCorrupt } from "../memory-control-plane-corrupt-reply.js";
|
|
5
4
|
import { buildOriginFence, readOriginAware } from "../../memory-origin-fence.js";
|
|
6
|
-
import { readLayerSeat,
|
|
7
|
-
import {
|
|
5
|
+
import { readLayerSeat, sentMemoryFaceFault } from "../memory-face-fault-reply.js";
|
|
6
|
+
import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
|
|
8
7
|
import { assertNever } from "../route-ctx.js";
|
|
9
8
|
import * as facts from "../../capability-facts.js";
|
|
10
9
|
export const MEMORY_ORIGIN_EXTERNAL_PATH = "/v1/memory/origin/external";
|
|
@@ -50,7 +49,7 @@ function codeOf(err) {
|
|
|
50
49
|
return typeof code === "string" ? code : undefined;
|
|
51
50
|
}
|
|
52
51
|
function sentClassifiedFailure(res, ctx, face, err) {
|
|
53
|
-
if (
|
|
52
|
+
if (sentMemoryFaceFault(res, err, { kind: "operator" }))
|
|
54
53
|
return true;
|
|
55
54
|
if (face === "clear") {
|
|
56
55
|
const coreCode = codeOf(err);
|
|
@@ -59,8 +58,6 @@ function sentClassifiedFailure(res, ctx, face, err) {
|
|
|
59
58
|
}
|
|
60
59
|
if (face !== "clearances" && sentMemoryStoreRefusal(res, err, ctx.deps.logger))
|
|
61
60
|
return true;
|
|
62
|
-
if (sentControlPlaneCorrupt(res, err, { kind: "operator" }))
|
|
63
|
-
return true;
|
|
64
61
|
ctx.deps.logger?.warn?.(`memory_origin_${face}_failed`, { err: String(err) });
|
|
65
62
|
return false;
|
|
66
63
|
}
|
|
@@ -98,6 +95,7 @@ export function buildClearanceRowWire(r) {
|
|
|
98
95
|
...(r.tombstonedAt !== undefined ? { tombstonedAt: r.tombstonedAt } : {}),
|
|
99
96
|
events: r.events.map(buildClearanceEventWire),
|
|
100
97
|
custodyBytes: Buffer.byteLength(r.entryText, "utf8"),
|
|
98
|
+
...(r.custodyErased === true ? { custodyErased: true } : {}),
|
|
101
99
|
};
|
|
102
100
|
}
|
|
103
101
|
function parseScopes(raw) {
|
|
@@ -113,7 +111,7 @@ function parseScopes(raw) {
|
|
|
113
111
|
}
|
|
114
112
|
export async function handleMemoryOrigin(req, res, match, ctx) {
|
|
115
113
|
const { deps } = ctx;
|
|
116
|
-
const principal =
|
|
114
|
+
const principal = gatedPerson(req, deps.config);
|
|
117
115
|
if (deps.config.requirePrincipal && !principal) {
|
|
118
116
|
sendPrincipalRefusal(res, req, deps.config);
|
|
119
117
|
return;
|
|
@@ -163,7 +161,8 @@ export async function handleMemoryOrigin(req, res, match, ctx) {
|
|
|
163
161
|
if (at === null)
|
|
164
162
|
return;
|
|
165
163
|
try {
|
|
166
|
-
|
|
164
|
+
const rows = await (at !== undefined ? faces.listClearances(at) : faces.listClearances());
|
|
165
|
+
sendJson(res, 200, { clearances: rows.map(buildClearanceRowWire) });
|
|
167
166
|
}
|
|
168
167
|
catch (err) {
|
|
169
168
|
if (!sentClassifiedFailure(res, ctx, "clearances", err))
|
|
@@ -5,9 +5,14 @@ import * as facts from "../../capability-facts.js";
|
|
|
5
5
|
import { sendJson, sendError } from "../send.js";
|
|
6
6
|
import { buildOriginFence, readOriginAware } from "../../memory-origin-fence.js";
|
|
7
7
|
import { parseProjectLayerKey } from "../../project-layer-key.js";
|
|
8
|
-
import {
|
|
8
|
+
import { gatedPerson, explicitOperatorOk, sendPrincipalRefusal, sendUnauthorized } from "../principal-gate.js";
|
|
9
9
|
import { assertNever } from "../route-ctx.js";
|
|
10
|
-
import {
|
|
10
|
+
import { sentMemoryFaceFault } from "../memory-face-fault-reply.js";
|
|
11
|
+
function layerFaceAudience(deps, principal, face, scope) {
|
|
12
|
+
if (explicitOperatorOk(principal, deps.config))
|
|
13
|
+
return { kind: "operator" };
|
|
14
|
+
return { kind: "layer_owner", face, withheld: (coreMessage) => deps.logger?.warn?.(face === "export" ? "memory_export_refused" : "memory_sync_refused", { scope, err: coreMessage }) };
|
|
15
|
+
}
|
|
11
16
|
const ORG_PREFIX = "org:";
|
|
12
17
|
export const MEMORY_EXPORT_MAX_LIMIT = 500;
|
|
13
18
|
function encodeExportCursor(c) {
|
|
@@ -36,16 +41,16 @@ function directoryDecidesThisFace(mode) {
|
|
|
36
41
|
return false;
|
|
37
42
|
}
|
|
38
43
|
}
|
|
39
|
-
async function gateMemoryScope(deps,
|
|
40
|
-
if (scope === formatUserScope(
|
|
44
|
+
async function gateMemoryScope(deps, person, scope, need) {
|
|
45
|
+
if (scope === formatUserScope(person) || parseProjectLayerKey(scope)?.owner === person)
|
|
41
46
|
return { kind: "allow" };
|
|
42
|
-
if (explicitOperatorOk(
|
|
47
|
+
if (explicitOperatorOk(person, deps.config))
|
|
43
48
|
return { kind: "allow" };
|
|
44
49
|
const directory = deps.orgMemoryDirectory;
|
|
45
50
|
if (!scope.startsWith(ORG_PREFIX) || directory === undefined || !directoryDecidesThisFace(deps.config.memoryOrgAdmissionMode)) {
|
|
46
51
|
return { kind: "not_found" };
|
|
47
52
|
}
|
|
48
|
-
const lookup = await directory.lookup(
|
|
53
|
+
const lookup = await directory.lookup(person);
|
|
49
54
|
if (lookup.kind === "unavailable")
|
|
50
55
|
return { kind: "unavailable", retryAfterMs: lookup.retryAfterMs };
|
|
51
56
|
const grant = lookup.scopes[scope];
|
|
@@ -70,7 +75,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
|
|
|
70
75
|
const { readJson, safeDecode } = ctx.helpers;
|
|
71
76
|
switch (match.decl.id) {
|
|
72
77
|
case "memory-export": {
|
|
73
|
-
const principal =
|
|
78
|
+
const principal = gatedPerson(req, deps.config);
|
|
74
79
|
if (!principal) {
|
|
75
80
|
sendUnauthorized(res, "identity");
|
|
76
81
|
return;
|
|
@@ -100,7 +105,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
|
|
|
100
105
|
}
|
|
101
106
|
const decoded = beforeRaw === null ? undefined : decodeExportCursor(beforeRaw);
|
|
102
107
|
if (decoded !== undefined && !decoded.ok) {
|
|
103
|
-
sendError(res, 400, "request.query_invalid",
|
|
108
|
+
sendError(res, 400, "request.query_invalid", `before must be the opaque \`nextBefore\` cursor from a previous page of this endpoint: ${decoded.why}`);
|
|
104
109
|
return;
|
|
105
110
|
}
|
|
106
111
|
try {
|
|
@@ -125,7 +130,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
|
|
|
125
130
|
});
|
|
126
131
|
}
|
|
127
132
|
catch (err) {
|
|
128
|
-
if (
|
|
133
|
+
if (sentMemoryFaceFault(res, err, layerFaceAudience(deps, principal, "export", scope)))
|
|
129
134
|
return;
|
|
130
135
|
deps.logger?.warn?.("memory_export_failed", { scope, err: String(err) });
|
|
131
136
|
sendError(res, 500, "internal.error", "memory export failed");
|
|
@@ -133,7 +138,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
|
|
|
133
138
|
return;
|
|
134
139
|
}
|
|
135
140
|
case "memory-sync-scope": {
|
|
136
|
-
const principal =
|
|
141
|
+
const principal = gatedPerson(req, deps.config);
|
|
137
142
|
if (!principal) {
|
|
138
143
|
sendUnauthorized(res, "identity");
|
|
139
144
|
return;
|
|
@@ -185,7 +190,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
|
|
|
185
190
|
sendJson(res, 200, out);
|
|
186
191
|
}
|
|
187
192
|
catch (err) {
|
|
188
|
-
if (
|
|
193
|
+
if (sentMemoryFaceFault(res, err, layerFaceAudience(deps, principal, "sync", scope)))
|
|
189
194
|
return;
|
|
190
195
|
deps.logger?.warn?.("memory_sync_failed", { scope, peer: parsed.value.peer, err: String(err) });
|
|
191
196
|
sendError(res, 500, "internal.error", "memory sync failed");
|
|
@@ -193,7 +198,7 @@ export async function handleMemoryPolicy(req, res, match, ctx) {
|
|
|
193
198
|
return;
|
|
194
199
|
}
|
|
195
200
|
case "policy": {
|
|
196
|
-
const principal =
|
|
201
|
+
const principal = gatedPerson(req, deps.config);
|
|
197
202
|
if (deps.config.requirePrincipal && !principal) {
|
|
198
203
|
sendPrincipalRefusal(res, req, deps.config);
|
|
199
204
|
return;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { sendJson, sendError } from "../send.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { gatedSubject, sendPrincipalRefusal } from "../principal-gate.js";
|
|
3
|
+
import { admitSessionRow, enter, refuse } from "../owner-access.js";
|
|
4
4
|
import { sendResumeOutcome } from "../route-ctx.js";
|
|
5
|
-
import { assertNever
|
|
5
|
+
import { assertNever } from "../route-ctx.js";
|
|
6
6
|
import * as facts from "../../capability-facts.js";
|
|
7
7
|
import { readResumeRestatement } from "../resume-restatement.js";
|
|
8
8
|
export async function handleNotifyWake(req, res, match, ctx) {
|
|
@@ -13,11 +13,9 @@ export async function handleNotifyWake(req, res, match, ctx) {
|
|
|
13
13
|
case "session-notify": {
|
|
14
14
|
if (rateLimited(req, res) || quotaExceeded(req, res))
|
|
15
15
|
return;
|
|
16
|
-
const
|
|
17
|
-
if (
|
|
18
|
-
sendPrincipalRefusal(res, req, deps.config);
|
|
16
|
+
const notifyEntry = enter(req, res, deps, "session-notify");
|
|
17
|
+
if (notifyEntry === undefined)
|
|
19
18
|
return;
|
|
20
|
-
}
|
|
21
19
|
const notifySession = safeDecode(match.params.sessionId);
|
|
22
20
|
if (notifySession === null) {
|
|
23
21
|
sendError(res, 400, "request.path_malformed", "session id segment is not valid percent-encoding");
|
|
@@ -57,16 +55,9 @@ export async function handleNotifyWake(req, res, match, ctx) {
|
|
|
57
55
|
return;
|
|
58
56
|
}
|
|
59
57
|
const notifyHead = await owned.sessionStorage.headOf(notifySession);
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
const notifyAdmitted = await admitSessionRow(notifyEntry, res, owned.sessionStorage, notifySession, notifyHead);
|
|
59
|
+
if (notifyAdmitted === undefined)
|
|
62
60
|
return;
|
|
63
|
-
}
|
|
64
|
-
const notifyOwner = notifyHead.owner;
|
|
65
|
-
const notifyOperator = explicitOperatorOk(principal, deps.config);
|
|
66
|
-
if (!notifyOperator && notifyOwner !== principal && !ownerlessRowOpen(await sessionOwnerCellOf(owned.sessionStorage, notifySession, notifyOwner), sessionCallerOf(req, deps))) {
|
|
67
|
-
sendError(res, 404, "not_found.session", SESSION_NOT_FOUND_MESSAGE);
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
61
|
const payload = {
|
|
71
62
|
task_id: nb.task_id,
|
|
72
63
|
status: nb.status,
|
|
@@ -75,7 +66,7 @@ export async function handleNotifyWake(req, res, match, ctx) {
|
|
|
75
66
|
...(nb.seq !== undefined ? { seq: nb.seq } : {}),
|
|
76
67
|
...(nb.source !== undefined ? { source: nb.source } : {}),
|
|
77
68
|
};
|
|
78
|
-
const out = await ctx.legs.sessionNotify.deliver({ sessionId: notifySession, occupant:
|
|
69
|
+
const out = await ctx.legs.sessionNotify.deliver({ sessionId: notifySession, occupant: notifyAdmitted.row, ownerlessEntryOwner: notifyEntry.caller.subject ?? null }, payload);
|
|
79
70
|
switch (out.delivery) {
|
|
80
71
|
case "live":
|
|
81
72
|
sendJson(res, 200, { sessionId: notifySession, delivery: "live" });
|
|
@@ -90,7 +81,7 @@ export async function handleNotifyWake(req, res, match, ctx) {
|
|
|
90
81
|
sendJson(res, 202, { sessionId: notifySession, delivery: "parked", note: "no live stream — parked in the session inbox; drained as a task_notification on the next stream open" });
|
|
91
82
|
return;
|
|
92
83
|
case "withdrawn":
|
|
93
|
-
|
|
84
|
+
refuse(notifyEntry, res, "missing");
|
|
94
85
|
return;
|
|
95
86
|
default:
|
|
96
87
|
return assertNever(out);
|
|
@@ -103,7 +94,7 @@ export async function handleNotifyWake(req, res, match, ctx) {
|
|
|
103
94
|
}
|
|
104
95
|
if (rateLimited(req, res) || quotaExceeded(req, res) || (await leaseDenied(req, res)))
|
|
105
96
|
return;
|
|
106
|
-
const principal =
|
|
97
|
+
const principal = gatedSubject(req, deps.config);
|
|
107
98
|
if (deps.config.requirePrincipal && principal === undefined) {
|
|
108
99
|
sendPrincipalRefusal(res, req, deps.config);
|
|
109
100
|
return;
|
|
@@ -119,7 +110,8 @@ export async function handleNotifyWake(req, res, match, ctx) {
|
|
|
119
110
|
return;
|
|
120
111
|
}
|
|
121
112
|
const restatement = readResumeRestatement(wakeBody);
|
|
122
|
-
const
|
|
113
|
+
const message = typeof wakeBody.message === "string" ? { text: wakeBody.message, trusted: false } : undefined;
|
|
114
|
+
const out = await resumeWake(wakeSession, message, principal, req, true, undefined, undefined, restatement);
|
|
123
115
|
sendResumeOutcome(res, out, deps.logger);
|
|
124
116
|
return;
|
|
125
117
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sendJson, sendError } from "../send.js";
|
|
2
|
-
import {
|
|
2
|
+
import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
|
|
3
3
|
import { assertNever } from "../route-ctx.js";
|
|
4
4
|
import * as facts from "../../capability-facts.js";
|
|
5
5
|
import { quotaWindowResetsAt } from "../../observability/cost-quota.js";
|
|
@@ -12,7 +12,7 @@ export async function handleObservability(req, res, match, ctx) {
|
|
|
12
12
|
sendOperatorPrincipalsRequired(res);
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
|
-
if (!explicitOperatorOk(
|
|
15
|
+
if (!explicitOperatorOk(gatedPerson(req, deps.config), deps.config)) {
|
|
16
16
|
sendError(res, 403, "auth.operator_only", "the outcomes view is operator-only");
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
@@ -41,7 +41,7 @@ export async function handleObservability(req, res, match, ctx) {
|
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
43
|
case "usage": {
|
|
44
|
-
const principal =
|
|
44
|
+
const principal = gatedPerson(req, deps.config);
|
|
45
45
|
if (!principal) {
|
|
46
46
|
sendPrincipalRefusal(res, req, deps.config);
|
|
47
47
|
return;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 跨主体投递门的**受理口**:`POST /v1/principal-inbox/messages`。
|
|
3
3
|
*
|
|
4
4
|
* 本口只做三件事,其余全归门(`src/org-delivery-gate.ts`,规则全文在它的头注):
|
|
5
|
-
* ① 取发件人 —— **只**取自验过的身份面(`
|
|
5
|
+
* ① 取发件人 —— **只**取自验过的身份面(`gatedSubject`),交给门的 `authedFrom` 就是 `{ scope: <那位主体> }`;
|
|
6
6
|
* 体里没有发件人这个键(写了 = 词表外键,400)。没有验过的身份 ⇒ 401(身份面那一句),不论部署是否要求 principal ——
|
|
7
7
|
* 门要一个发件人 scope,匿名者没有。无凭证部署上 principal 头只是调用方自报 ⇒ 本口在分派器的无凭证写门内
|
|
8
8
|
* (声明行 `credentialGated`,503 `auth.service_token_required`;本地开发显式 `ALLOW_UNAUTHED_WRITES=true` 才放行);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { sendJson, sendError } from "../send.js";
|
|
2
|
-
import {
|
|
2
|
+
import { gatedSubject, sendUnauthorized } from "../principal-gate.js";
|
|
3
3
|
import { assertNever } from "../route-ctx.js";
|
|
4
4
|
import * as facts from "../../capability-facts.js";
|
|
5
5
|
import { principalInboxBodyKeyIssue } from "../../request-key-closure.js";
|
|
@@ -27,7 +27,7 @@ export async function handlePrincipalInbox(req, res, match, ctx) {
|
|
|
27
27
|
const { readJson } = ctx.helpers;
|
|
28
28
|
switch (match.decl.id) {
|
|
29
29
|
case "principal-inbox-messages": {
|
|
30
|
-
const principal =
|
|
30
|
+
const principal = gatedSubject(req, deps.config);
|
|
31
31
|
if (principal === undefined) {
|
|
32
32
|
sendUnauthorized(res, "identity");
|
|
33
33
|
return;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 项目登记簿的**读面** —— `GET /v1/projects`、`GET /v1/projects/:id`。
|
|
3
|
+
*
|
|
4
|
+
* ## 律(三句)
|
|
5
|
+
* · **一个项目 = settings-schema 的一只 `ProjectRegistration`**:形与判官只在 settings-schema;本仓把判过的登记原样放在 `config.projects` 一张表里
|
|
6
|
+
* (`web-admin-client/apply-effective.ts` 的 stage 是唯一写者),本面只读那一张。行 = `{ id, …登记的原键原名 }` —— 不铸 `name` / `repos` /
|
|
7
|
+
* `createdAt` 之类的别名(端侧要别的叫法自己投影),逐键处置在 {@link PROJECT_ROW_DISPOSITIONS} 一张表里(settings-schema 给登记加键 ⇒ 这里 tsc 红,
|
|
8
|
+
* 先表态再上 wire)。
|
|
9
|
+
* · **登记簿只由配置中心下发**:settings-schema 的本地读取集不收 `projects` 域 ⇒ 没有中心腿在应用配置的部署上没有登记簿 —— 两口 501
|
|
10
|
+
* `capability.unavailable`,能力位 `capabilities.projects`(布尔)读同一只事实(`capability-facts.ts` 的 `projectRegistry`)答 `false`;
|
|
11
|
+
* 有登记簿时答 `true`。本面不开写动词(写到哪里由另一张设计定;写面到货时另立一位,本位不改义)。
|
|
12
|
+
* · **可见性 fail-closed**:身份判在登记簿在场判**之前**(否则「这台有没有登记簿」先于 401 泄出去);fleet 调用方(列表面 `list.read` 读档(`listFilterOf`))看全部;
|
|
13
|
+
* 带验过主体的调用方只看 `registeredBy` 恰是自己的登记;看不见的与不存在的同码同句(404 `not_found.project`,不给存在性预言机)。
|
|
14
|
+
*
|
|
15
|
+
* 归档:`archivedAt` 在场 = 已归档。列表缺省不列,`?archived=true` 只列已归档的,`?archived=false` 与缺省同;单项读不论归档与否都答(会话行引用它)。
|
|
16
|
+
*/
|
|
17
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
18
|
+
import type { ProjectRegistration } from "@sema-agent/settings-schema";
|
|
19
|
+
import type { RouteCtx, RouteMatch, RouteIdsOf } from "../route-ctx.js";
|
|
20
|
+
/** 404 的唯一句(不存在与看不见同句)。 */
|
|
21
|
+
export declare const PROJECT_NOT_FOUND_MESSAGE = "no such project";
|
|
22
|
+
/** 投影根:这只登记的 id(登记簿的键 —— 不是登记的成员)。 */
|
|
23
|
+
interface ProjectRowRoot {
|
|
24
|
+
readonly id: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 项目行的**逐键处置**(表序 = 出口序)。登记的每个键原样出门;`contextItems` 逐条按成员处置(闭集三形,成员同为 `kind` / `value`)。
|
|
28
|
+
* `id` 是本面铸的唯一键:登记簿的键,行上要有它才能回指 `GET /v1/projects/:id` 与提交体 `projectId`。
|
|
29
|
+
*/
|
|
30
|
+
export declare const PROJECT_ROW_DISPOSITIONS: {
|
|
31
|
+
readonly id: {
|
|
32
|
+
readonly mint: (_reg: ProjectRegistration, root: ProjectRowRoot) => string;
|
|
33
|
+
};
|
|
34
|
+
readonly displayName: "forward";
|
|
35
|
+
readonly goal: "forward";
|
|
36
|
+
readonly contextItems: {
|
|
37
|
+
readonly nested: {
|
|
38
|
+
readonly kind: "forward";
|
|
39
|
+
readonly value: "forward";
|
|
40
|
+
};
|
|
41
|
+
readonly rows: "each";
|
|
42
|
+
};
|
|
43
|
+
readonly gitRemotes: "forward";
|
|
44
|
+
readonly defaultScopes: "forward";
|
|
45
|
+
readonly notes: "forward";
|
|
46
|
+
readonly icon: "forward";
|
|
47
|
+
readonly color: "forward";
|
|
48
|
+
readonly registeredBy: "forward";
|
|
49
|
+
readonly registeredAt: "forward";
|
|
50
|
+
readonly archivedAt: "forward";
|
|
51
|
+
};
|
|
52
|
+
/** 项目行的键全集(处置表的键 = wire 上可能出现的每一个键;自铸登记表 `trace/self-minted-wire.ts` 的 `projectRowKey` 按它 `satisfies`)。 */
|
|
53
|
+
export type ProjectRowKey = keyof typeof PROJECT_ROW_DISPOSITIONS;
|
|
54
|
+
/** 一只登记 → wire 行(唯一投影)。 */
|
|
55
|
+
export declare function projectRowOf(id: string, registration: ProjectRegistration): Record<string, unknown>;
|
|
56
|
+
export declare function handleProjects(req: IncomingMessage, res: ServerResponse, match: RouteMatch<ProjectsRouteId>, ctx: RouteCtx): Promise<void>;
|
|
57
|
+
export declare const PROJECTS_ROUTES: readonly [{
|
|
58
|
+
readonly id: "projects-list";
|
|
59
|
+
readonly path: "/v1/projects";
|
|
60
|
+
readonly methods: readonly ["GET"];
|
|
61
|
+
}, {
|
|
62
|
+
readonly id: "project-get";
|
|
63
|
+
readonly pattern: RegExp;
|
|
64
|
+
readonly label: "/v1/projects/:id";
|
|
65
|
+
readonly methods: readonly ["GET"];
|
|
66
|
+
}];
|
|
67
|
+
/** 本域可分派行的 `id` 闭集。 */
|
|
68
|
+
export type ProjectsRouteId = RouteIdsOf<typeof PROJECTS_ROUTES>;
|
|
69
|
+
export {};
|
|
70
|
+
//# sourceMappingURL=projects.d.ts.map
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { PROJECT_ID_REGEX } from "@sema-agent/core";
|
|
2
|
+
import { sendJson, sendError } from "../send.js";
|
|
3
|
+
import { sendUnauthorized } from "../principal-gate.js";
|
|
4
|
+
import { routeListFilter } from "../owner-access.js";
|
|
5
|
+
import { assertNever } from "../route-ctx.js";
|
|
6
|
+
import * as facts from "../../capability-facts.js";
|
|
7
|
+
import { projectByTable } from "../../trace/projection-table.js";
|
|
8
|
+
export const PROJECT_NOT_FOUND_MESSAGE = "no such project";
|
|
9
|
+
export const PROJECT_ROW_DISPOSITIONS = {
|
|
10
|
+
id: { mint: (_reg, root) => root.id },
|
|
11
|
+
displayName: "forward",
|
|
12
|
+
goal: "forward",
|
|
13
|
+
contextItems: { nested: { kind: "forward", value: "forward" }, rows: "each" },
|
|
14
|
+
gitRemotes: "forward",
|
|
15
|
+
defaultScopes: "forward",
|
|
16
|
+
notes: "forward",
|
|
17
|
+
icon: "forward",
|
|
18
|
+
color: "forward",
|
|
19
|
+
registeredBy: "forward",
|
|
20
|
+
registeredAt: "forward",
|
|
21
|
+
archivedAt: "forward",
|
|
22
|
+
};
|
|
23
|
+
export function projectRowOf(id, registration) {
|
|
24
|
+
return projectByTable("project", PROJECT_ROW_DISPOSITIONS, registration, { id });
|
|
25
|
+
}
|
|
26
|
+
function readArchivedQuery(raw) {
|
|
27
|
+
switch (raw) {
|
|
28
|
+
case null:
|
|
29
|
+
case "false":
|
|
30
|
+
return false;
|
|
31
|
+
case "true":
|
|
32
|
+
return true;
|
|
33
|
+
default:
|
|
34
|
+
return "invalid";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export async function handleProjects(req, res, match, ctx) {
|
|
38
|
+
const { deps } = ctx;
|
|
39
|
+
const { safeDecode } = ctx.helpers;
|
|
40
|
+
const { fleetWide, gateOwner } = routeListFilter(req, deps, match.decl.id);
|
|
41
|
+
if (!fleetWide && gateOwner === null) {
|
|
42
|
+
sendUnauthorized(res, "identity");
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const registry = facts.projectRegistry(deps);
|
|
46
|
+
if (!registry.available) {
|
|
47
|
+
sendError(res, 501, "capability.unavailable", "the project registry is not available on this deployment: projects are published only by the configuration center, and no center configuration is applied here");
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const visible = (registration) => fleetWide || registration.registeredBy === gateOwner;
|
|
51
|
+
switch (match.decl.id) {
|
|
52
|
+
case "projects-list": {
|
|
53
|
+
const archived = readArchivedQuery(new URLSearchParams(match.search).get("archived"));
|
|
54
|
+
if (archived === "invalid") {
|
|
55
|
+
sendError(res, 400, "request.query_invalid", "archived must be `true` or `false`");
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
const projects = Object.entries(registry.registry)
|
|
59
|
+
.filter(([, registration]) => visible(registration) && (registration.archivedAt !== undefined) === archived)
|
|
60
|
+
.map(([id, registration]) => projectRowOf(id, registration));
|
|
61
|
+
sendJson(res, 200, { projects });
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
case "project-get": {
|
|
65
|
+
const raw = safeDecode(match.params.projectId);
|
|
66
|
+
if (raw === null || !PROJECT_ID_REGEX.test(raw)) {
|
|
67
|
+
sendError(res, 400, "request.id_invalid", "invalid project id (must be a canonical uuid)");
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const id = raw.toLowerCase();
|
|
71
|
+
const registration = Object.hasOwn(registry.registry, id) ? registry.registry[id] : undefined;
|
|
72
|
+
if (registration === undefined || !visible(registration)) {
|
|
73
|
+
sendError(res, 404, "not_found.project", PROJECT_NOT_FOUND_MESSAGE);
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
sendJson(res, 200, projectRowOf(id, registration));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
default:
|
|
80
|
+
return assertNever(match.decl.id);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
export const PROJECTS_ROUTES = [
|
|
84
|
+
{ id: "projects-list", path: "/v1/projects", methods: ["GET"] },
|
|
85
|
+
{ id: "project-get", pattern: /^\/v1\/projects\/(?<projectId>[^/]+)$/, label: "/v1/projects/:id", methods: ["GET"] },
|
|
86
|
+
];
|
|
87
|
+
//# sourceMappingURL=projects.js.map
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { sendJson, sendError } from "../send.js";
|
|
2
|
-
import {
|
|
2
|
+
import { limitFacts } from "../../limit-refusal.js";
|
|
3
|
+
import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
|
|
3
4
|
import * as facts from "../../capability-facts.js";
|
|
4
5
|
import { assertNever } from "../route-ctx.js";
|
|
5
6
|
import { RETENTION_AUDIT_DEFAULT_LIMIT, RETENTION_AUDIT_MAX_LIMIT } from "../../plugins/retention-lane-store-sql.js";
|
|
@@ -27,7 +28,7 @@ function decodeCursor(raw) {
|
|
|
27
28
|
}
|
|
28
29
|
export async function handleRetention(req, res, match, ctx) {
|
|
29
30
|
const { deps } = ctx;
|
|
30
|
-
const principal =
|
|
31
|
+
const principal = gatedPerson(req, deps.config);
|
|
31
32
|
if (deps.config.requirePrincipal && !principal) {
|
|
32
33
|
sendPrincipalRefusal(res, req, deps.config);
|
|
33
34
|
return;
|
|
@@ -64,9 +65,7 @@ async function handleHold(req, res, ctx, store, rawDomain, principal, held) {
|
|
|
64
65
|
return;
|
|
65
66
|
}
|
|
66
67
|
if (domain.length > DOMAIN_MAX_CHARS) {
|
|
67
|
-
sendError(res, 400, "request.field_invalid",
|
|
68
|
-
detail: `domain is ${domain.length} characters; retention_hold.domain holds at most ${DOMAIN_MAX_CHARS}`,
|
|
69
|
-
});
|
|
68
|
+
sendError(res, 400, "request.field_invalid", `the retention domain does not fit the hold table's identity column: domain is ${domain.length} characters; retention_hold.domain holds at most ${DOMAIN_MAX_CHARS}`, limitFacts("domain", "characters", domain.length, DOMAIN_MAX_CHARS));
|
|
70
69
|
return;
|
|
71
70
|
}
|
|
72
71
|
let note;
|
|
@@ -84,9 +83,7 @@ async function handleHold(req, res, ctx, store, rawDomain, principal, held) {
|
|
|
84
83
|
return;
|
|
85
84
|
}
|
|
86
85
|
if (n.length > NOTE_MAX_CHARS) {
|
|
87
|
-
sendError(res, 400, "request.field_invalid",
|
|
88
|
-
detail: `note is ${n.length} characters; the limit is ${NOTE_MAX_CHARS}`,
|
|
89
|
-
});
|
|
86
|
+
sendError(res, 400, "request.field_invalid", `the retention hold note is longer than this face accepts: note is ${n.length} characters; the limit is ${NOTE_MAX_CHARS}`, limitFacts("note", "characters", n.length, NOTE_MAX_CHARS));
|
|
90
87
|
return;
|
|
91
88
|
}
|
|
92
89
|
note = n;
|
|
@@ -125,7 +122,7 @@ async function handleAuditRead(res, store, search) {
|
|
|
125
122
|
const beforeRaw = q.get("before");
|
|
126
123
|
const decoded = beforeRaw === null ? undefined : decodeCursor(beforeRaw);
|
|
127
124
|
if (decoded !== undefined && !decoded.ok) {
|
|
128
|
-
sendError(res, 400, "request.query_invalid",
|
|
125
|
+
sendError(res, 400, "request.query_invalid", `before must be the opaque \`nextBefore\` cursor from a previous page of this endpoint: ${decoded.why}`);
|
|
129
126
|
return;
|
|
130
127
|
}
|
|
131
128
|
const domainRaw = q.get("domain");
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { sendJson, sendError } from "../send.js";
|
|
3
|
-
import {
|
|
3
|
+
import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendUnauthorized } from "../principal-gate.js";
|
|
4
4
|
import { assertNever } from "../route-ctx.js";
|
|
5
|
+
import { principalShapeProblem } from "../../principal-shape.js";
|
|
5
6
|
import * as facts from "../../capability-facts.js";
|
|
6
7
|
import { createLogger } from "../../observability/logger.js";
|
|
7
8
|
import { RULE_IMPORT_RETRY_AFTER_SEC, RULE_SCOPE_REFUSAL_SENTENCE, MAX_RULE_SCOPE_CHARS, buildCcImportLayerRootRefusal, parseRuleScope, serializeRuleScope } from "../../rules-consent.js";
|
|
@@ -75,7 +76,7 @@ const RuleIdentityBodySchema = z
|
|
|
75
76
|
behavior: z.enum(RULE_BEHAVIORS),
|
|
76
77
|
rule: z.string().min(1).max(1024),
|
|
77
78
|
scope: z.string().min(1).max(MAX_RULE_SCOPE_CHARS),
|
|
78
|
-
principal: z.string().
|
|
79
|
+
principal: z.string().optional(),
|
|
79
80
|
})
|
|
80
81
|
.strict();
|
|
81
82
|
const RULES_CURSOR_FORMAT = 2;
|
|
@@ -100,7 +101,7 @@ export async function handleRules(req, res, match, ctx) {
|
|
|
100
101
|
const { readJson, rateLimited } = ctx.helpers;
|
|
101
102
|
if (rateLimited(req, res))
|
|
102
103
|
return;
|
|
103
|
-
const principal =
|
|
104
|
+
const principal = gatedPerson(req, deps.config);
|
|
104
105
|
if (principal === undefined) {
|
|
105
106
|
sendUnauthorized(res, "identity");
|
|
106
107
|
return;
|
|
@@ -142,6 +143,10 @@ export async function handleRules(req, res, match, ctx) {
|
|
|
142
143
|
logger.info("local rule import tightening write failed", { detail: prepared.detail, committed: prepared.committed });
|
|
143
144
|
sendRuleWriteFailure(res, "import-tightening", prepared.committed);
|
|
144
145
|
return;
|
|
146
|
+
case "record-store-refused":
|
|
147
|
+
logger.info("local rule import record store refused", { detail: prepared.detail, committed: prepared.committed });
|
|
148
|
+
sendRuleWriteFailure(res, "import-record", prepared.committed);
|
|
149
|
+
return;
|
|
145
150
|
default: {
|
|
146
151
|
const unknown = prepared;
|
|
147
152
|
throw new Error(`unknown local import refusal: ${JSON.stringify(unknown)}`);
|
|
@@ -189,8 +194,19 @@ export async function handleRules(req, res, match, ctx) {
|
|
|
189
194
|
}
|
|
190
195
|
const prepared = await lane.prepareImport(principal, parsed.data.layers);
|
|
191
196
|
if (!prepared.ok) {
|
|
192
|
-
|
|
193
|
-
|
|
197
|
+
switch (prepared.reason) {
|
|
198
|
+
case "too-many-candidates":
|
|
199
|
+
sendError(res, 413, "request.payload_too_large", "too many allow entries across the submitted settings layers");
|
|
200
|
+
return;
|
|
201
|
+
case "record-store-refused":
|
|
202
|
+
logger.info("rule import record store refused", { detail: prepared.detail, committed: prepared.committed });
|
|
203
|
+
sendRuleWriteFailure(res, "import-record", prepared.committed);
|
|
204
|
+
return;
|
|
205
|
+
default: {
|
|
206
|
+
const unknown = prepared;
|
|
207
|
+
throw new Error(`unknown rule import refusal: ${JSON.stringify(unknown)}`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
194
210
|
}
|
|
195
211
|
sendJson(res, 200, { preview: prepared.preview, ...(prepared.ticket !== undefined ? { ticket: prepared.ticket, expiresAtMs: prepared.expiresAtMs } : {}) });
|
|
196
212
|
return;
|
|
@@ -230,8 +246,13 @@ function resolveTargetPrincipal(requested, caller, config) {
|
|
|
230
246
|
return { ok: false, why: "operator_principals_empty" };
|
|
231
247
|
if (!explicitOperatorOk(caller, config))
|
|
232
248
|
return { ok: false, why: "not_operator" };
|
|
249
|
+
if (principalShapeProblem(requested) !== undefined)
|
|
250
|
+
return { ok: false, why: "not_a_principal" };
|
|
233
251
|
return { ok: true, principal: requested };
|
|
234
252
|
}
|
|
253
|
+
function sendTargetNotAPrincipal(res) {
|
|
254
|
+
sendError(res, 400, "request.field_invalid", "principal must name a principal a caller can authenticate as (a visible-character, well-formed name, not a reserved identifier, at most the principal byte length)", { field: "principal" });
|
|
255
|
+
}
|
|
235
256
|
async function handleRuleList(res, search, caller, lane, config) {
|
|
236
257
|
const q = new URLSearchParams(search);
|
|
237
258
|
const target = resolveTargetPrincipal(q.get("principal") ?? undefined, caller, config);
|
|
@@ -243,6 +264,9 @@ async function handleRuleList(res, search, caller, lane, config) {
|
|
|
243
264
|
case "not_operator":
|
|
244
265
|
sendError(res, 403, "auth.operator_only", "reading another principal's rules is an operator-only action");
|
|
245
266
|
return;
|
|
267
|
+
case "not_a_principal":
|
|
268
|
+
sendTargetNotAPrincipal(res);
|
|
269
|
+
return;
|
|
246
270
|
default:
|
|
247
271
|
return assertNever(target.why);
|
|
248
272
|
}
|
|
@@ -306,6 +330,19 @@ function sendRuleWriteFailure(res, verb, committed) {
|
|
|
306
330
|
throw new Error(`unknown rule-write committed word: ${JSON.stringify(unknownWord)}`);
|
|
307
331
|
}
|
|
308
332
|
}
|
|
333
|
+
case "import-record":
|
|
334
|
+
switch (committed) {
|
|
335
|
+
case "no":
|
|
336
|
+
sendError(res, 503, "state.rule_write_failed", "the import's approval record could not be created (no ticket was issued and no allow rule was written; deny / ask rows of a local batch may already be in force) — send the same request again", { committed });
|
|
337
|
+
return;
|
|
338
|
+
case "unknown":
|
|
339
|
+
sendError(res, 503, "state.rule_write_failed", "the import's approval record may or may not have been created (no ticket was issued and no allow rule was written; deny / ask rows of a local batch may already be in force) — send the same request again", { committed });
|
|
340
|
+
return;
|
|
341
|
+
default: {
|
|
342
|
+
const unknownWord = committed;
|
|
343
|
+
throw new Error(`unknown rule-import committed word: ${JSON.stringify(unknownWord)}`);
|
|
344
|
+
}
|
|
345
|
+
}
|
|
309
346
|
case "revoke":
|
|
310
347
|
switch (committed) {
|
|
311
348
|
case "no":
|
|
@@ -350,6 +387,9 @@ async function handleRuleWrite(res, rawBody, caller, lane, config) {
|
|
|
350
387
|
case "not_operator":
|
|
351
388
|
sendError(res, 403, "auth.operator_only", "writing another principal's rules is an operator-only action");
|
|
352
389
|
return;
|
|
390
|
+
case "not_a_principal":
|
|
391
|
+
sendTargetNotAPrincipal(res);
|
|
392
|
+
return;
|
|
353
393
|
default:
|
|
354
394
|
return assertNever(target.why);
|
|
355
395
|
}
|
|
@@ -364,9 +404,9 @@ async function handleRuleWrite(res, rawBody, caller, lane, config) {
|
|
|
364
404
|
return;
|
|
365
405
|
case "rejected":
|
|
366
406
|
logger.info("rule write refused", { reason: written.reason, detail: written.detail });
|
|
367
|
-
sendError(res, 400, "request.field_invalid",
|
|
407
|
+
sendError(res, 400, "request.field_invalid", `this rule was not written — \`reason\` names which check refused it: ${written.detail}`, {
|
|
368
408
|
reason: written.reason,
|
|
369
|
-
|
|
409
|
+
...(written.canonical !== undefined ? { canonical: written.canonical } : {}),
|
|
370
410
|
});
|
|
371
411
|
return;
|
|
372
412
|
case "failed":
|
|
@@ -399,6 +439,9 @@ async function handleRuleRevoke(res, rawBody, caller, lane, config) {
|
|
|
399
439
|
case "not_operator":
|
|
400
440
|
sendError(res, 403, "auth.operator_only", "revoking another principal's rules is an operator-only action");
|
|
401
441
|
return;
|
|
442
|
+
case "not_a_principal":
|
|
443
|
+
sendTargetNotAPrincipal(res);
|
|
444
|
+
return;
|
|
402
445
|
default:
|
|
403
446
|
return assertNever(target.why);
|
|
404
447
|
}
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*
|
|
11
11
|
* ── 权限法条(steer 车道逐字)────────────────────────────────────────────────────────────────────
|
|
12
12
|
* core 不认证:持有活流句柄即能力。**本面拥有 verified-principal / 会话所有权判定**:裸 sessionId 中继会让任何人
|
|
13
|
-
* 关掉任何人的记忆(可用性攻击)。所以:身份来自 `
|
|
13
|
+
* 关掉任何人的记忆(可用性攻击)。所以:身份来自 `gatedSubject`(验证过的身份,不是可自造的头),run 属主不符
|
|
14
14
|
* ⇒ 404 `not_found.run` **同串反枚举**(与 steer/interrupt 同判)。core 在翻转时刻**重新裁决** per-principal
|
|
15
15
|
* entitlement(`RuntimeCaps.allowMemoryOptOut` under `memoryCapturePolicy`,fresh resolve)—— 被拒 ⇒ typed
|
|
16
16
|
* `memory.capture_optout_denied` + 零记录残留;server 不复刻那条裁决。
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
* `sessionBackgroundable` 同谓词):老 worker 键缺席 ⇒ 壳不渲入口(假 affordance 纪律)。
|
|
29
29
|
*/
|
|
30
30
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
31
|
-
import {
|
|
31
|
+
import type { RouteCtx, RouteMatch, RouteIdsOf } from "../route-ctx.js";
|
|
32
32
|
export declare function handleRunMemoryCapture(req: IncomingMessage, res: ServerResponse, match: RouteMatch<RunMemoryCaptureRouteId>, ctx: RouteCtx): Promise<void>;
|
|
33
33
|
export declare const RUN_MEMORY_CAPTURE_ROUTES: readonly [{
|
|
34
34
|
readonly id: "run-memory-capture-optout";
|