@sema-agent/server 7.147.0 → 7.149.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MIGRATION.md +1468 -24
- package/README.md +35 -7
- package/README.zh-CN.md +18 -8
- package/USAGE.md +444 -193
- package/deploy/sema-up/README.md +16 -5
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/templates/_helpers.tpl +20 -4
- package/deploy/sema-up/chart/values.yaml +3 -2
- package/deploy/sema-up/cluster-up.sh +74 -176
- package/deploy/sema-up/kube-up.sh +29 -49
- package/deploy/sema-up/lib/chart-run.sh +23 -0
- package/deploy/sema-up/lib/dataroot.sh +3 -3
- package/deploy/sema-up/lib/health.sh +62 -13
- package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
- package/deploy/sema-up/lib/helm-values-kube.py +35 -0
- package/deploy/sema-up/lib/regcred.py +8 -0
- package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
- package/deploy/sema-up/lib/remote/image-import.sh +6 -0
- package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
- package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
- package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
- package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
- package/deploy/sema-up/lib/render-stack.py +17 -0
- package/deploy/sema-up/lib/shell-text.sh +87 -0
- package/deploy/sema-up/lib/usage-flags.txt +10 -0
- package/deploy/sema-up/lib/usage-head.txt +1 -0
- package/deploy/sema-up/lib/usage-tail.txt +13 -0
- package/deploy/sema-up/preflight.sh +10 -8
- package/deploy/sema-up/sema-up.sh +14 -39
- package/deploy/sema-up/smoke.sh +7 -6
- package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
- package/deploy/sema-up/stack/compose.yaml +13 -1
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +21 -0
- package/dist/adoption/plan.d.ts +24 -0
- package/dist/adoption/plan.js +53 -1
- package/dist/adoption/runner.d.ts +10 -1
- package/dist/adoption/runner.js +36 -16
- package/dist/approval-card.d.ts +36 -38
- package/dist/approval-gate-currency.js +3 -2
- package/dist/approval-leg-origin.d.ts +33 -0
- package/dist/approval-leg-origin.js +4 -0
- package/dist/approval-reconciler.d.ts +4 -13
- package/dist/approval-reconciler.js +2 -2
- package/dist/approval.d.ts +13 -11
- package/dist/approval.js +3 -3
- package/dist/audit.d.ts +10 -3
- package/dist/audit.js +15 -7
- package/dist/auth-bridge.d.ts +9 -15
- package/dist/auth-bridge.js +4 -11
- package/dist/auth-keys.d.ts +10 -1
- package/dist/auth-keys.js +8 -0
- package/dist/auto-mode-face.d.ts +10 -7
- package/dist/auto-mode-face.js +7 -4
- package/dist/background-agent-name.d.ts +19 -1
- package/dist/background-agent-name.js +12 -2
- package/dist/background-session-reap.d.ts +1 -1
- package/dist/bake-runner/main.js +9 -6
- package/dist/bench/s1/arms.js +6 -5
- package/dist/bench/s1/live-deps.js +5 -2
- package/dist/bench/s1/run-firm.js +6 -5
- package/dist/bind-host.d.ts +25 -0
- package/dist/bind-host.js +25 -0
- package/dist/boot/adoption.d.ts +3 -0
- package/dist/boot/adoption.js +1 -0
- package/dist/boot/deployment-mods.d.ts +1 -1
- package/dist/boot/execution-env.d.ts +17 -7
- package/dist/boot/execution-env.js +47 -42
- package/dist/boot/execution-lane.d.ts +6 -4
- package/dist/boot/execution-lane.js +3 -1
- package/dist/boot/exit-boundary.d.ts +2 -2
- package/dist/boot/exit-boundary.js +6 -5
- package/dist/boot/fatal-exit.d.ts +3 -5
- package/dist/boot/fatal-exit.js +2 -2
- package/dist/boot/leader.d.ts +15 -0
- package/dist/boot/leader.js +17 -15
- package/dist/boot/memory-consolidation.d.ts +37 -29
- package/dist/boot/memory-consolidation.js +11 -5
- package/dist/boot/org-delivery.d.ts +3 -2
- package/dist/boot/org-memory.js +1 -1
- package/dist/boot/parked-revive-gate.js +2 -2
- package/dist/boot/reapers.d.ts +4 -3
- package/dist/boot/reapers.js +19 -16
- package/dist/boot/resolve-spec.d.ts +5 -3
- package/dist/boot/resolve-spec.js +60 -70
- package/dist/boot/retention-lane.d.ts +4 -4
- package/dist/boot/retention-lane.js +2 -2
- package/dist/boot/runner-deps.d.ts +28 -7
- package/dist/boot/runner-deps.js +14 -5
- package/dist/boot/runtime-caps.d.ts +2 -2
- package/dist/boot/runtime-caps.js +16 -2
- package/dist/boot/session-faces.d.ts +16 -7
- package/dist/boot/session-faces.js +114 -94
- package/dist/boot/shutdown.d.ts +5 -4
- package/dist/boot/shutdown.js +6 -4
- package/dist/boot/stage-01-config.d.ts +1 -0
- package/dist/boot/stage-01-config.js +13 -4
- package/dist/boot/stage-02-web-admin-pull.d.ts +2 -0
- package/dist/boot/stage-02-web-admin-pull.js +16 -3
- package/dist/boot/stage-03-store-backend.d.ts +4 -0
- package/dist/boot/stage-03-store-backend.js +4 -3
- package/dist/boot/stage-04-stores.d.ts +3 -0
- package/dist/boot/stage-04-stores.js +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +8 -3
- package/dist/boot/stage-05-execution-env.js +2 -2
- package/dist/boot/stage-06-runners.d.ts +12 -13
- package/dist/boot/stage-06-runners.js +23 -15
- package/dist/boot/stage-07-capability-layer.d.ts +13 -9
- package/dist/boot/stage-07-capability-layer.js +5 -3
- package/dist/boot/stage-08-reapers.d.ts +13 -9
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +14 -16
- package/dist/boot/stage-09-leader.js +12 -4
- package/dist/boot/stage-10-http-server.d.ts +14 -16
- package/dist/boot/stage-10-http-server.js +7 -4
- package/dist/boot/store-evidence.d.ts +20 -0
- package/dist/boot/store-evidence.js +13 -0
- package/dist/boot/stores.d.ts +6 -0
- package/dist/boot/stores.js +41 -27
- package/dist/boot/task-list-lane.d.ts +4 -4
- package/dist/boot/web-admin.d.ts +4 -2
- package/dist/boot/web-admin.js +55 -35
- package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
- package/dist/boot-reclaim.d.ts +3 -1
- package/dist/boot-reclaim.js +1 -1
- package/dist/brain.d.ts +7 -18
- package/dist/brain.js +5 -17
- package/dist/budget.js +6 -6
- package/dist/capabilities/center-plugins.d.ts +7 -1
- package/dist/capabilities/center-plugins.js +32 -10
- package/dist/capabilities/center-wiring.js +1 -1
- package/dist/capabilities/composite-members.d.ts +2 -2
- package/dist/capabilities/composite-members.js +2 -2
- package/dist/capabilities/repo-tools.d.ts +2 -0
- package/dist/capabilities/repo-tools.js +14 -12
- package/dist/capabilities/scenarios.d.ts +6 -15
- package/dist/capabilities/scenarios.js +11 -16
- package/dist/capabilities/skills.d.ts +1 -1
- package/dist/capabilities/tool-defer.d.ts +1 -1
- package/dist/capability-facts.d.ts +39 -11
- package/dist/capability-facts.js +35 -7
- package/dist/card-settle-stored-scope.d.ts +56 -0
- package/dist/card-settle-stored-scope.js +27 -0
- package/dist/card-void.d.ts +8 -13
- package/dist/card-void.js +2 -7
- package/dist/center-credential-renewer.d.ts +6 -2
- package/dist/center-credential-renewer.js +7 -3
- package/dist/config-catalog.d.ts +28 -1
- package/dist/config-catalog.js +95 -85
- package/dist/config-dir-trust.d.ts +37 -4
- package/dist/config-dir-trust.js +88 -44
- package/dist/config-invariants.d.ts +43 -3
- package/dist/config-invariants.js +69 -5
- package/dist/config-lkg.d.ts +23 -1
- package/dist/config-lkg.js +17 -3
- package/dist/config-provider.d.ts +9 -9
- package/dist/config-provider.js +25 -110
- package/dist/config-pull-failure.d.ts +50 -0
- package/dist/config-pull-failure.js +48 -0
- package/dist/config-types.d.ts +62 -21
- package/dist/config.d.ts +14 -21
- package/dist/config.js +141 -64
- package/dist/context-window-notice.d.ts +31 -0
- package/dist/context-window-notice.js +28 -0
- package/dist/delegated-session-owner.d.ts +1 -1
- package/dist/deleted-session-ids.d.ts +3 -2
- package/dist/deployment-governance.d.ts +3 -3
- package/dist/deployment-shape.d.ts +46 -11
- package/dist/deployment-shape.js +8 -0
- package/dist/egress-redirect.d.ts +25 -7
- package/dist/egress-redirect.js +20 -2
- package/dist/elicitation.d.ts +6 -5
- package/dist/elicitation.js +23 -22
- package/dist/engine-identity.d.ts +28 -0
- package/dist/engine-identity.js +10 -0
- package/dist/entry-problems.d.ts +5 -7
- package/dist/entry-problems.js +1 -1
- package/dist/env-facts.js +2 -1
- package/dist/env-name-allowlist-knobs.d.ts +6 -5
- package/dist/env-name-allowlist-knobs.js +5 -0
- package/dist/env-witness.d.ts +7 -0
- package/dist/env-witness.js +16 -0
- package/dist/execution-lane-caps.d.ts +25 -23
- package/dist/execution-lane-caps.js +18 -26
- package/dist/execution-placement.d.ts +58 -18
- package/dist/execution-placement.js +41 -2
- package/dist/field-conflict.d.ts +7 -11
- package/dist/field-conflict.js +3 -3
- package/dist/file-history-capture.d.ts +3 -3
- package/dist/file-history-disclosure.js +1 -0
- package/dist/fleet/fleet-bus.d.ts +21 -3
- package/dist/fleet/fleet-bus.js +35 -25
- package/dist/fleet/fleet-reconciler.js +2 -2
- package/dist/fleet/serving-lease.js +3 -3
- package/dist/fleet-client.js +3 -3
- package/dist/fleet-lease.d.ts +0 -1
- package/dist/fleet-lease.js +4 -5
- package/dist/history-anchor.d.ts +23 -3
- package/dist/history-anchor.js +24 -4
- package/dist/hitl-delivery.d.ts +90 -0
- package/dist/hitl-delivery.js +98 -0
- package/dist/hooks/classic-stations.d.ts +8 -11
- package/dist/hooks/classic-stations.js +0 -7
- package/dist/hooks/command-spawn.d.ts +7 -2
- package/dist/hooks/command-spawn.js +13 -6
- package/dist/hooks/hook-llm.d.ts +5 -1
- package/dist/hooks/hook-llm.js +24 -15
- package/dist/hooks/hook-runner.d.ts +72 -57
- package/dist/hooks/hook-runner.js +271 -193
- package/dist/host-lsp-manager.d.ts +22 -8
- package/dist/host-lsp-manager.js +4 -1
- package/dist/http/active-run-conflict.d.ts +2 -43
- package/dist/http/active-run-conflict.js +3 -7
- package/dist/http/admission.d.ts +4 -18
- package/dist/http/admission.js +76 -79
- package/dist/http/approval-sweeps.d.ts +3 -3
- package/dist/http/approval-sweeps.js +56 -31
- package/dist/http/caller-trust.d.ts +8 -10
- package/dist/http/caller-trust.js +1 -2
- package/dist/http/claim-heartbeat.d.ts +49 -0
- package/dist/http/claim-heartbeat.js +46 -0
- package/dist/http/claimed-run.d.ts +16 -8
- package/dist/http/claimed-run.js +8 -0
- package/dist/http/dispatch.d.ts +8 -1
- package/dist/http/dispatch.js +78 -30
- package/dist/http/durable-run-leg.d.ts +11 -4
- package/dist/http/durable-run-leg.js +45 -21
- package/dist/http/execution-context.d.ts +122 -47
- package/dist/http/execution-context.js +135 -43
- package/dist/http/health-reader.d.ts +36 -0
- package/dist/http/health-reader.js +21 -0
- package/dist/http/health-self-report.d.ts +9 -9
- package/dist/http/health-self-report.js +4 -4
- package/dist/http/idempotency.d.ts +9 -5
- package/dist/http/idempotency.js +4 -4
- package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
- package/dist/http/memory-compliance-failure-reply.js +4 -2
- package/dist/http/memory-face-fault-reply.d.ts +67 -0
- package/dist/http/memory-face-fault-reply.js +71 -0
- package/dist/http/memory-store-refusal-reply.d.ts +1 -1
- package/dist/http/memory-store-refusal-reply.js +3 -0
- package/dist/http/owner-access.d.ts +392 -67
- package/dist/http/owner-access.js +370 -35
- package/dist/http/principal-gate.d.ts +39 -89
- package/dist/http/principal-gate.js +26 -68
- package/dist/http/refusal-body.d.ts +35 -2
- package/dist/http/refusal-body.js +34 -0
- package/dist/http/request-guards.d.ts +9 -13
- package/dist/http/request-guards.js +34 -68
- package/dist/http/resume-composition.d.ts +37 -0
- package/dist/http/resume-composition.js +18 -0
- package/dist/http/resume-ctx-read.d.ts +46 -12
- package/dist/http/resume-ctx-read.js +31 -6
- package/dist/http/resume-legs.d.ts +54 -19
- package/dist/http/resume-legs.js +408 -196
- package/dist/http/retired-skill-manifest.d.ts +1 -1
- package/dist/http/route-ctx.d.ts +31 -32
- package/dist/http/routes/a2a-serve.d.ts +43 -5
- package/dist/http/routes/a2a-serve.js +60 -37
- package/dist/http/routes/admin-config-refresh.js +2 -2
- package/dist/http/routes/admin-drain.js +2 -2
- package/dist/http/routes/admin-memory-optout.js +4 -3
- package/dist/http/routes/adoption.d.ts +3 -0
- package/dist/http/routes/adoption.js +17 -10
- package/dist/http/routes/agents-roster.js +13 -7
- package/dist/http/routes/approvals-assistant.js +73 -67
- package/dist/http/routes/attachments.js +2 -2
- package/dist/http/routes/background.d.ts +3 -3
- package/dist/http/routes/background.js +9 -17
- package/dist/http/routes/capabilities.js +16 -19
- package/dist/http/routes/config-catalog.js +2 -2
- package/dist/http/routes/devices.d.ts +3 -3
- package/dist/http/routes/devices.js +4 -4
- package/dist/http/routes/diagnostics.d.ts +29 -3
- package/dist/http/routes/diagnostics.js +49 -18
- package/dist/http/routes/engine.js +2 -2
- package/dist/http/routes/fleet.js +5 -3
- package/dist/http/routes/images.js +10 -6
- package/dist/http/routes/leader.d.ts +7 -2
- package/dist/http/routes/leader.js +12 -3
- package/dist/http/routes/mcp-reconnect.d.ts +1 -1
- package/dist/http/routes/mcp-reconnect.js +7 -15
- package/dist/http/routes/memory-bundle.js +4 -7
- package/dist/http/routes/memory-compliance.js +4 -4
- package/dist/http/routes/memory-consolidation.js +6 -9
- package/dist/http/routes/memory-origin.d.ts +2 -0
- package/dist/http/routes/memory-origin.js +7 -8
- package/dist/http/routes/memory-policy.js +17 -12
- package/dist/http/routes/notify-wake.js +10 -19
- package/dist/http/routes/observability.js +3 -3
- package/dist/http/routes/principal-inbox.d.ts +4 -2
- package/dist/http/routes/principal-inbox.js +5 -4
- package/dist/http/routes/projects.d.ts +1 -1
- package/dist/http/routes/projects.js +3 -2
- package/dist/http/routes/retention-ops.js +6 -9
- package/dist/http/routes/rules.js +20 -5
- package/dist/http/routes/run-memory-capture.d.ts +2 -2
- package/dist/http/routes/run-memory-capture.js +6 -12
- package/dist/http/routes/run-permission-mode.d.ts +2 -2
- package/dist/http/routes/run-permission-mode.js +10 -17
- package/dist/http/routes/runs.js +155 -237
- package/dist/http/routes/session-memory-sync.d.ts +2 -2
- package/dist/http/routes/session-memory-sync.js +7 -13
- package/dist/http/routes/session-sync.d.ts +28 -7
- package/dist/http/routes/session-sync.js +63 -50
- package/dist/http/routes/sessions-list.d.ts +3 -3
- package/dist/http/routes/sessions-list.js +9 -9
- package/dist/http/routes/sessions.js +87 -124
- package/dist/http/routes/shared-memory.js +6 -6
- package/dist/http/routes/side-query.js +2 -2
- package/dist/http/routes/tasks.js +237 -187
- package/dist/http/routes/trace-usage.d.ts +0 -12
- package/dist/http/routes/trace-usage.js +40 -46
- package/dist/http/routes/workflows.d.ts +39 -4
- package/dist/http/routes/workflows.js +42 -14
- package/dist/http/run-concurrency-cap.d.ts +20 -12
- package/dist/http/run-concurrency-cap.js +39 -26
- package/dist/http/run-read-face.d.ts +3 -5
- package/dist/http/run-read-face.js +8 -13
- package/dist/http/send.d.ts +12 -3
- package/dist/http/send.js +42 -6
- package/dist/http/server.d.ts +43 -45
- package/dist/http/server.js +61 -11
- package/dist/http/sse-log.d.ts +17 -10
- package/dist/http/sse-log.js +7 -7
- package/dist/http/stored-body-replay.d.ts +12 -0
- package/dist/http/stored-body-replay.js +2 -2
- package/dist/http/submit-ctx.d.ts +17 -8
- package/dist/http/submit-ctx.js +8 -5
- package/dist/http/submit-replay.d.ts +19 -6
- package/dist/http/submit-replay.js +18 -6
- package/dist/http/sync-submit-body.d.ts +3 -4
- package/dist/http/sync-submit-body.js +4 -5
- package/dist/http/wire-types.d.ts +4 -3
- package/dist/identity-source.d.ts +36 -5
- package/dist/identity-source.js +27 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.js +2 -0
- package/dist/key-resolver.d.ts +32 -0
- package/dist/key-resolver.js +23 -9
- package/dist/leader/diffup.js +2 -1
- package/dist/leader/endpoint.d.ts +26 -5
- package/dist/leader/endpoint.js +154 -14
- package/dist/leader/fanout.d.ts +3 -0
- package/dist/leader/fanout.js +78 -63
- package/dist/leader/leader.d.ts +16 -0
- package/dist/leader/leader.js +43 -3
- package/dist/leader/merge.d.ts +9 -1
- package/dist/leader/merge.js +16 -1
- package/dist/leader/repair-wire.js +1 -1
- package/dist/leader/wire.d.ts +36 -3
- package/dist/leader/wire.js +59 -18
- package/dist/leg-facts.d.ts +7 -2
- package/dist/leg-facts.js +1 -0
- package/dist/local-store-declaration.d.ts +54 -0
- package/dist/local-store-declaration.js +59 -0
- package/dist/lsp-evict.d.ts +6 -4
- package/dist/lsp-evict.js +2 -3
- package/dist/mcp-assertion-header.d.ts +1 -1
- package/dist/mcp-assertion-header.js +1 -1
- package/dist/memory-operator-faces.d.ts +5 -4
- package/dist/memory-operator-faces.js +1 -1
- package/dist/memory-project-layer.js +1 -1
- package/dist/memory-scope.d.ts +33 -6
- package/dist/memory-scope.js +68 -19
- package/dist/memory-store-refusal.d.ts +5 -2
- package/dist/memory-sync-client.d.ts +3 -2
- package/dist/memory-sync-client.js +8 -5
- package/dist/model-compat.d.ts +17 -8
- package/dist/model-compat.js +6 -2
- package/dist/model-context-window.d.ts +57 -0
- package/dist/model-context-window.js +21 -0
- package/dist/model-entry-headers.d.ts +46 -4
- package/dist/model-entry-headers.js +2 -2
- package/dist/model-entry-refusal.d.ts +40 -20
- package/dist/model-entry-refusal.js +57 -30
- package/dist/model-plane-face.d.ts +19 -11
- package/dist/model-plane-face.js +9 -1
- package/dist/model-plane-probe.d.ts +2 -0
- package/dist/model-plane-probe.js +17 -0
- package/dist/model-provider.d.ts +3 -3
- package/dist/model-reach-scope.d.ts +2 -1
- package/dist/model-route-endpoint.d.ts +9 -5
- package/dist/model-route-endpoint.js +29 -7
- package/dist/model-select.d.ts +16 -0
- package/dist/model-select.js +4 -0
- package/dist/mountinfo.d.ts +37 -0
- package/dist/mountinfo.js +47 -0
- package/dist/namespaced-rule-name.d.ts +23 -14
- package/dist/namespaced-rule-name.js +8 -11
- package/dist/net-address.d.ts +1 -1
- package/dist/observability/corrupt-read-seat.d.ts +4 -4
- package/dist/observability/corrupt-read-seat.js +5 -3
- package/dist/observability/fail-open.d.ts +72 -40
- package/dist/observability/fail-open.js +74 -40
- package/dist/observability/logger.d.ts +22 -1
- package/dist/observability/logger.js +89 -12
- package/dist/observability/metrics.js +4 -5
- package/dist/observability/otel-exporter.js +2 -1
- package/dist/observability/principal-context.d.ts +14 -7
- package/dist/observability/principal-context.js +8 -3
- package/dist/observability/run-terminal.d.ts +7 -1
- package/dist/observability/run-terminal.js +6 -2
- package/dist/observability/secret-env-scrub.d.ts +1 -1
- package/dist/observability/secret-env-scrub.js +1 -1
- package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
- package/dist/orchestration/hardened-vm-runner.js +11 -5
- package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
- package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
- package/dist/orchestration/hardened-vm-worker.js +2 -1
- package/dist/orchestration/workflow-completion-inbox.d.ts +3 -3
- package/dist/orchestration/workflow-completion-inbox.js +3 -2
- package/dist/org-delivery-gate.d.ts +36 -10
- package/dist/org-delivery-gate.js +12 -8
- package/dist/outbound-dispatcher.d.ts +1 -1
- package/dist/outbound-dispatcher.js +6 -12
- package/dist/owner-brands.d.ts +81 -0
- package/dist/owner-brands.js +42 -0
- package/dist/owner-faces.d.ts +532 -0
- package/dist/owner-faces.js +126 -0
- package/dist/park-row-commit.d.ts +67 -0
- package/dist/park-row-commit.js +76 -0
- package/dist/parked-decide.d.ts +76 -12
- package/dist/parked-decide.js +152 -11
- package/dist/parked-revive-surface.d.ts +14 -4
- package/dist/parked-revive-surface.js +5 -4
- package/dist/peer-directory.d.ts +7 -9
- package/dist/peer-directory.js +3 -2
- package/dist/permission-rule-vocab.d.ts +53 -8
- package/dist/permission-rule-vocab.js +30 -2
- package/dist/plugins/adoption-log-sql.d.ts +3 -25
- package/dist/plugins/adoption-log-sql.js +23 -21
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
- package/dist/plugins/approval-ask-store-file.d.ts +18 -7
- package/dist/plugins/approval-ask-store-file.js +37 -14
- package/dist/plugins/approval-ask-store-memory.d.ts +12 -4
- package/dist/plugins/approval-ask-store-memory.js +24 -10
- package/dist/plugins/approval-ask-store-sql.d.ts +40 -21
- package/dist/plugins/approval-ask-store-sql.js +44 -15
- package/dist/plugins/approval-exemption-skill-cutoff.d.ts +64 -0
- package/dist/plugins/approval-exemption-skill-cutoff.js +122 -0
- package/dist/plugins/approval-exemption-skill-m46.d.ts +14 -0
- package/dist/plugins/approval-exemption-skill-m46.js +21 -0
- package/dist/plugins/approval-exemption-store.d.ts +32 -2
- package/dist/plugins/approval-exemption-store.js +42 -19
- package/dist/plugins/approval-nonce-store.d.ts +39 -12
- package/dist/plugins/approval-nonce-store.js +72 -23
- package/dist/plugins/blob-backend.d.ts +2 -0
- package/dist/plugins/blob-backend.js +9 -6
- package/dist/plugins/caching-session-store.d.ts +13 -1
- package/dist/plugins/caching-session-store.js +43 -4
- package/dist/plugins/checkpoint-index-columns.d.ts +32 -5
- package/dist/plugins/checkpoint-index-columns.js +36 -1
- package/dist/plugins/checkpoint-store-face.d.ts +83 -10
- package/dist/plugins/checkpoint-store-face.js +18 -1
- package/dist/plugins/device-store-sql.js +1 -0
- package/dist/plugins/ensure-index.d.ts +13 -1
- package/dist/plugins/ensure-index.js +154 -21
- package/dist/plugins/ensure-schema-lock-policy.d.ts +36 -18
- package/dist/plugins/ensure-schema-lock-policy.js +76 -9
- package/dist/plugins/file-run-store.d.ts +85 -32
- package/dist/plugins/file-run-store.js +177 -94
- package/dist/plugins/host-platform.d.ts +24 -3
- package/dist/plugins/host-platform.js +15 -1
- package/dist/plugins/image-bake-store-sql.js +2 -0
- package/dist/plugins/imported-layer-root-retirement.d.ts +2 -2
- package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
- package/dist/plugins/k8s-pod-reaper.js +0 -1
- package/dist/plugins/leader-run-store-sql.d.ts +22 -0
- package/dist/plugins/leader-run-store-sql.js +34 -4
- package/dist/plugins/local-checkpoint-store.d.ts +62 -23
- package/dist/plugins/local-checkpoint-store.js +197 -77
- package/dist/plugins/local-data-dir-modes-m39.js +2 -1
- package/dist/plugins/local-data-root-admission.d.ts +52 -0
- package/dist/plugins/local-data-root-admission.js +100 -0
- package/dist/plugins/local-docker-capacity.d.ts +93 -0
- package/dist/plugins/local-docker-capacity.js +194 -0
- package/dist/plugins/local-docker-reaper.d.ts +92 -0
- package/dist/plugins/local-docker-reaper.js +102 -0
- package/dist/plugins/local-engine-high-water.d.ts +29 -6
- package/dist/plugins/local-engine-high-water.js +27 -19
- package/dist/plugins/local-session-store.d.ts +458 -140
- package/dist/plugins/local-session-store.js +906 -292
- package/dist/plugins/local-session-window.d.ts +3 -2
- package/dist/plugins/local-session-window.js +3 -2
- package/dist/plugins/local-sidecar-quarantine.js +3 -2
- package/dist/plugins/local-task-attachment-store.d.ts +18 -1
- package/dist/plugins/local-task-attachment-store.js +22 -1
- package/dist/plugins/memory-embedder.js +9 -7
- package/dist/plugins/memory-engine-pg.d.ts +3 -2
- package/dist/plugins/memory-engine-pg.js +14 -5
- package/dist/plugins/memory-engine-sql-apply.d.ts +8 -4
- package/dist/plugins/memory-engine-sql-apply.js +6 -8
- package/dist/plugins/memory-engine-tidb.d.ts +4 -2
- package/dist/plugins/memory-engine-tidb.js +11 -2
- package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
- package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
- package/dist/plugins/memory-run-store.d.ts +53 -36
- package/dist/plugins/memory-run-store.js +116 -88
- package/dist/plugins/one-time-migration-marker.d.ts +26 -0
- package/dist/plugins/one-time-migration-marker.js +13 -0
- package/dist/plugins/one-time-migrations.d.ts +214 -47
- package/dist/plugins/one-time-migrations.js +481 -135
- package/dist/plugins/org-delivery-quota-store.d.ts +34 -11
- package/dist/plugins/org-delivery-quota-store.js +31 -15
- package/dist/plugins/permission-rule-store-file.d.ts +3 -3
- package/dist/plugins/permission-rule-store-sql.d.ts +5 -64
- package/dist/plugins/permission-rule-store-sql.js +11 -95
- package/dist/plugins/pg-pool.d.ts +2 -32
- package/dist/plugins/pg-pool.js +24 -17
- package/dist/plugins/remote-env-device.d.ts +3 -2
- package/dist/plugins/remote-env-e2b.d.ts +8 -32
- package/dist/plugins/remote-env-e2b.js +44 -32
- package/dist/plugins/remote-env-host.d.ts +51 -17
- package/dist/plugins/remote-env-host.js +111 -42
- package/dist/plugins/remote-env-k8s.d.ts +40 -45
- package/dist/plugins/remote-env-k8s.js +111 -60
- package/dist/plugins/remote-env-local-docker.d.ts +152 -15
- package/dist/plugins/remote-env-local-docker.js +352 -72
- package/dist/plugins/remote-scratchpad.js +4 -0
- package/dist/plugins/retention-deployment.d.ts +49 -17
- package/dist/plugins/retention-deployment.js +39 -8
- package/dist/plugins/run-preview-m45.d.ts +11 -0
- package/dist/plugins/run-preview-m45.js +19 -0
- package/dist/plugins/run-store-sql.d.ts +82 -75
- package/dist/plugins/run-store-sql.js +164 -125
- package/dist/plugins/s3-answer.d.ts +2 -1
- package/dist/plugins/sandbox-reaper.d.ts +26 -0
- package/dist/plugins/sandbox-reaper.js +2 -0
- package/dist/plugins/scenario-prefix-switch-m42.d.ts +56 -0
- package/dist/plugins/scenario-prefix-switch-m42.js +56 -0
- package/dist/plugins/scheduler-support.d.ts +16 -1
- package/dist/plugins/scheduler-support.js +22 -2
- package/dist/plugins/schema-consistency.d.ts +131 -14
- package/dist/plugins/schema-consistency.js +388 -18
- package/dist/plugins/schema-drift-sentence.d.ts +10 -6
- package/dist/plugins/schema-drift-sentence.js +15 -7
- package/dist/plugins/schema-ensure-legs.d.ts +9 -0
- package/dist/plugins/schema-ensure-legs.js +1 -1
- package/dist/plugins/schema-indexes.js +3 -0
- package/dist/plugins/schema-live-columns.d.ts +14 -5
- package/dist/plugins/schema-live-columns.js +10 -10
- package/dist/plugins/send-user-file.js +2 -1
- package/dist/plugins/session-birth.d.ts +37 -0
- package/dist/plugins/session-birth.js +38 -0
- package/dist/plugins/session-epoch-anchor.d.ts +40 -12
- package/dist/plugins/session-epoch-anchor.js +33 -11
- package/dist/plugins/session-ext-table.d.ts +27 -3
- package/dist/plugins/session-ext-table.js +19 -6
- package/dist/plugins/session-fork.d.ts +15 -1
- package/dist/plugins/session-fork.js +3 -0
- package/dist/plugins/session-ownership.d.ts +1 -1
- package/dist/plugins/session-placement.d.ts +27 -20
- package/dist/plugins/session-placement.js +15 -12
- package/dist/plugins/session-row-sql.d.ts +12 -0
- package/dist/plugins/session-row-sql.js +3 -3
- package/dist/plugins/session-run-rollup.d.ts +29 -0
- package/dist/plugins/session-run-rollup.js +40 -0
- package/dist/plugins/session-store-sql.d.ts +38 -12
- package/dist/plugins/session-store-sql.js +130 -30
- package/dist/plugins/session-withdraw-sql.d.ts +36 -0
- package/dist/plugins/session-withdraw-sql.js +42 -0
- package/dist/plugins/shared-memory-store-sql.d.ts +0 -69
- package/dist/plugins/shared-memory-store-sql.js +2 -1
- package/dist/plugins/shell-sentinel-owner-m48.d.ts +42 -0
- package/dist/plugins/shell-sentinel-owner-m48.js +9 -0
- package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
- package/dist/plugins/sql-driver.d.ts +1 -1
- package/dist/plugins/sql-driver.js +2 -1
- package/dist/plugins/sql-errors.d.ts +32 -5
- package/dist/plugins/sql-errors.js +55 -7
- package/dist/plugins/sql-json-column.d.ts +8 -7
- package/dist/plugins/sql-json-column.js +10 -6
- package/dist/plugins/stop-then-start-sentence.d.ts +16 -0
- package/dist/plugins/stop-then-start-sentence.js +7 -0
- package/dist/plugins/store-backend.d.ts +99 -16
- package/dist/plugins/store-backend.js +230 -65
- package/dist/plugins/store-contracts.d.ts +123 -33
- package/dist/plugins/store-contracts.js +38 -1
- package/dist/plugins/store-fault.d.ts +28 -2
- package/dist/plugins/store-fault.js +20 -2
- package/dist/plugins/task-attachment-store.d.ts +15 -3
- package/dist/plugins/task-attachment-store.js +22 -9
- package/dist/plugins/tidb-pool.d.ts +11 -6
- package/dist/plugins/tidb-pool.js +39 -18
- package/dist/plugins/web-search.js +5 -3
- package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
- package/dist/plugins/workflow-run-store-sql.js +11 -5
- package/dist/plugins/workspace-custody.d.ts +44 -0
- package/dist/plugins/workspace-custody.js +47 -0
- package/dist/principal-jwt.d.ts +4 -4
- package/dist/principal-jwt.js +20 -5
- package/dist/principal-shape.d.ts +41 -0
- package/dist/principal-shape.js +19 -0
- package/dist/project-identity.d.ts +8 -7
- package/dist/project-identity.js +40 -17
- package/dist/project-layer-key.d.ts +13 -2
- package/dist/project-layer-key.js +9 -1
- package/dist/question.d.ts +13 -23
- package/dist/question.js +21 -39
- package/dist/read-deny-floor-notice.d.ts +36 -0
- package/dist/read-deny-floor-notice.js +40 -0
- package/dist/{plain-string-record.d.ts → request-declaration-disposition.d.ts} +9 -23
- package/dist/request-declaration-disposition.js +39 -0
- package/dist/request-declaration-refusal.d.ts +35 -12
- package/dist/request-declaration-refusal.js +21 -9
- package/dist/request-form.d.ts +58 -0
- package/dist/request-form.js +72 -0
- package/dist/request-image-urls.d.ts +8 -2
- package/dist/request-image-urls.js +2 -1
- package/dist/request-images.d.ts +20 -0
- package/dist/request-images.js +59 -0
- package/dist/request-key-closure.d.ts +6 -7
- package/dist/request-key-closure.js +15 -2
- package/dist/resource-suspend.d.ts +7 -16
- package/dist/resource-suspend.js +1 -1
- package/dist/retired-name-host-notice.d.ts +21 -0
- package/dist/retired-name-host-notice.js +12 -0
- package/dist/rule-entry-list.d.ts +2 -2
- package/dist/rule-entry-list.js +3 -4
- package/dist/rule-issue-reading.d.ts +58 -0
- package/dist/rule-issue-reading.js +14 -0
- package/dist/rules-consent.d.ts +5 -3
- package/dist/rules-consent.js +1 -0
- package/dist/run-acceptance.d.ts +3 -1
- package/dist/run-acceptance.js +3 -0
- package/dist/run-cancel-card.d.ts +28 -0
- package/dist/run-cancel-card.js +19 -0
- package/dist/run-cancel-context.d.ts +10 -0
- package/dist/run-cancel-context.js +1 -0
- package/dist/run-local.d.ts +14 -6
- package/dist/run-local.js +117 -90
- package/dist/run-stale-default.d.ts +7 -0
- package/dist/run-stale-default.js +2 -0
- package/dist/runs.d.ts +56 -21
- package/dist/runs.js +73 -43
- package/dist/runtime-caps-resolver.d.ts +21 -6
- package/dist/runtime-caps-resolver.js +17 -4
- package/dist/runtime-governance.d.ts +2 -2
- package/dist/runtime-governance.js +5 -3
- package/dist/sealed-key-layout.d.ts +12 -5
- package/dist/sealed-key-layout.js +5 -0
- package/dist/sealed-key.d.ts +12 -2
- package/dist/sealed-key.js +115 -27
- package/dist/security.d.ts +128 -158
- package/dist/security.js +163 -59
- package/dist/sema-config-dir.d.ts +20 -0
- package/dist/sema-config-dir.js +25 -0
- package/dist/server-secret-env.d.ts +55 -25
- package/dist/server-secret-env.js +75 -22
- package/dist/session-agent.d.ts +3 -2
- package/dist/session-children-retire.d.ts +13 -8
- package/dist/session-children-retire.js +9 -7
- package/dist/session-deletion.d.ts +88 -0
- package/dist/session-deletion.js +8 -0
- package/dist/session-erase.d.ts +145 -0
- package/dist/session-erase.js +115 -0
- package/dist/session-error-wire.d.ts +5 -5
- package/dist/session-error-wire.js +1 -1
- package/dist/session-incarnation.d.ts +52 -5
- package/dist/session-incarnation.js +19 -2
- package/dist/session-policy-wire.d.ts +6 -3
- package/dist/session-policy-wire.js +11 -1
- package/dist/session-resident-background.d.ts +0 -71
- package/dist/session-resident-background.js +4 -3
- package/dist/session-row.d.ts +2 -1
- package/dist/session-rules-seat.d.ts +12 -0
- package/dist/session-rules-seat.js +19 -0
- package/dist/session-titler.d.ts +7 -15
- package/dist/session-titler.js +1 -1
- package/dist/session-workspace.d.ts +3 -3
- package/dist/spec-fields.d.ts +57 -3
- package/dist/spec-fields.js +72 -51
- package/dist/store-admission.d.ts +33 -0
- package/dist/store-admission.js +49 -0
- package/dist/store-posture.d.ts +141 -20
- package/dist/store-posture.js +205 -3
- package/dist/stored-request-hooks-m20.js +2 -2
- package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
- package/dist/stores-sql/background-agent-store-sql.js +73 -20
- package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
- package/dist/stores-sql/checkpoint-store-sql.js +78 -49
- package/dist/stores-sql/file-history-store-sql.d.ts +1 -1
- package/dist/stores-sql/file-history-store-sql.js +3 -5
- package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
- package/dist/stores-sql/mailbox-store-sql.js +31 -32
- package/dist/stores-sql/pg-session-storage.d.ts +7 -5
- package/dist/stores-sql/pg-session-storage.js +54 -46
- package/dist/stores-sql/retention-store-sql.d.ts +87 -19
- package/dist/stores-sql/retention-store-sql.js +92 -27
- package/dist/stores-sql/session-policy-store-sql.d.ts +32 -10
- package/dist/stores-sql/session-policy-store-sql.js +44 -36
- package/dist/stores-sql/session-write-hooks.d.ts +12 -6
- package/dist/stores-sql/tidb-session-storage.d.ts +4 -4
- package/dist/stores-sql/tidb-session-storage.js +13 -8
- package/dist/stores-sql/tidb-session-store.d.ts +36 -17
- package/dist/stores-sql/tidb-session-store.js +69 -39
- package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
- package/dist/stores-sql/tool-result-store-sql.js +4 -6
- package/dist/stores-sql/windowed-session-storage.d.ts +5 -0
- package/dist/stores-sql/windowed-session-storage.js +9 -0
- package/dist/submission-exit.d.ts +50 -0
- package/dist/submission-exit.js +108 -0
- package/dist/task-a2a.d.ts +3 -8
- package/dist/task-a2a.js +28 -30
- package/dist/task-cwd.d.ts +43 -7
- package/dist/task-cwd.js +11 -0
- package/dist/task-mcp.d.ts +3 -3
- package/dist/task-mcp.js +4 -4
- package/dist/task-settings.d.ts +14 -10
- package/dist/task-settings.js +19 -7
- package/dist/terminal.d.ts +27 -43
- package/dist/terminal.js +49 -14
- package/dist/tool-approval.d.ts +173 -163
- package/dist/tool-approval.js +247 -232
- package/dist/trace/core-keyset-guard.d.ts +13 -6
- package/dist/trace/core-vocab-wire.d.ts +95 -0
- package/dist/trace/core-vocab-wire.js +15 -0
- package/dist/trace/engine-notice-wire.d.ts +24 -21
- package/dist/trace/engine-notice-wire.js +7 -3
- package/dist/trace/exit-seat.d.ts +30 -4
- package/dist/trace/exit-seat.js +40 -36
- package/dist/trace/extension-call-face.d.ts +3 -2
- package/dist/trace/extension-call-face.js +3 -1
- package/dist/trace/ledger-events.d.ts +4 -7
- package/dist/trace/ledger-sink.d.ts +4 -31
- package/dist/trace/ledger-sink.js +0 -11
- package/dist/trace/model-segment.d.ts +5 -5
- package/dist/trace/model-segment.js +5 -5
- package/dist/trace/project.d.ts +59 -44
- package/dist/trace/project.js +60 -26
- package/dist/trace/redact.d.ts +135 -27
- package/dist/trace/redact.js +884 -260
- package/dist/trace/self-minted-wire.d.ts +567 -20
- package/dist/trace/self-minted-wire.js +205 -24
- package/dist/trace/wire-projection-faces.d.ts +5 -6
- package/dist/trace/wire-projection-faces.js +2 -2
- package/dist/upstream-body.d.ts +23 -0
- package/dist/upstream-body.js +16 -0
- package/dist/url-refusal.d.ts +3 -3
- package/dist/url-refusal.js +11 -4
- package/dist/user-authored-text.d.ts +1 -1
- package/dist/user-input-ledger.d.ts +7 -8
- package/dist/user-input-ledger.js +1 -1
- package/dist/web-admin-client/apply-effective.d.ts +6 -3
- package/dist/web-admin-client/apply-effective.js +33 -23
- package/dist/web-admin-client/apply-ledger.d.ts +16 -7
- package/dist/web-admin-client/apply-ledger.js +5 -2
- package/dist/web-admin-client/center-request.d.ts +2 -2
- package/dist/web-admin-client/center-request.js +15 -15
- package/dist/web-admin-client/effective-keys.d.ts +1 -1
- package/dist/web-admin-client/effective-keys.js +1 -1
- package/dist/web-admin-client/entry-metadata.d.ts +8 -0
- package/dist/web-admin-client/entry-metadata.js +13 -0
- package/dist/web-admin-client/http-client.d.ts +1 -1
- package/dist/web-admin-client/http-client.js +23 -4
- package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
- package/dist/web-admin-client/mcp-revocation.js +2 -1
- package/dist/web-admin-client/read-warnings.d.ts +1 -0
- package/dist/web-admin-client/read-warnings.js +1 -0
- package/dist/web-admin-client/restart-signal.js +8 -4
- package/dist/web-admin-client/skills-mcp.d.ts +2 -2
- package/dist/web-admin-client/types.d.ts +1 -2
- package/dist/workspace-space.d.ts +3 -2
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
- package/docs/error-text-lexicon.json +317 -0
- package/package.json +8 -3
- package/scripts/drain-check-local.mjs +118 -147
- package/scripts/drain-check.mysql.sql +22 -2
- package/scripts/drain-check.pg.sql +22 -2
- package/scripts/embed-minimal.mjs +183 -0
- package/wire-changes/server@7.148.0.json +1517 -0
- package/wire-changes/server@7.149.0.json +372 -0
- package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
- package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
- package/dist/http/memory-layer-reply.d.ts +0 -30
- package/dist/http/memory-layer-reply.js +0 -24
- package/dist/lsp/e2b-bridge.d.ts +0 -57
- package/dist/lsp/e2b-bridge.js +0 -139
- package/dist/lsp/e2b-manager.d.ts +0 -93
- package/dist/lsp/e2b-manager.js +0 -178
- package/dist/lsp/lsp-frames.d.ts +0 -14
- package/dist/lsp/lsp-frames.js +0 -25
- package/dist/lsp/manager.d.ts +0 -129
- package/dist/lsp/manager.js +0 -127
- package/dist/lsp/types.d.ts +0 -12
- package/dist/lsp/types.js +0 -2
- package/dist/lsp/ws-transport.d.ts +0 -40
- package/dist/lsp/ws-transport.js +0 -210
- package/dist/plain-string-record.js +0 -70
package/dist/question.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type AskQuestionRequest, type OnQuestionOutcome, type QuestionAnswer, type AskQuestion } from "@sema-agent/core";
|
|
2
|
+
import { type HitlTransport } from "./hitl-delivery.js";
|
|
2
3
|
/** A live question frame delivered to whoever tails this run's stream. `type` IS the SSE event name (mirrors the
|
|
3
4
|
* named-event convention; the payload also carries `type` so a proxy that strips event names still works). The shell
|
|
4
5
|
* renders `question` as a dialog and dismisses on `question_complete`. */
|
|
@@ -23,30 +24,20 @@ export interface QuestionFrame {
|
|
|
23
24
|
/** "question" only: `serverNowMs + expiresInMs` — absolute deadline on the server's clock. */
|
|
24
25
|
expiresAtMs?: number;
|
|
25
26
|
}
|
|
26
|
-
/** The per-run context `onQuestion` recovers via ALS. `
|
|
27
|
-
*
|
|
27
|
+
/** The per-run context `onQuestion` recovers via ALS. `transport` = the leg's ONE HITL transport (shared with the elicitation
|
|
28
|
+
* and approval contexts of the same leg; `hitl-delivery.ts` owns the law: ledger first, then live — a frame the ledger
|
|
29
|
+
* cannot take never reaches the live face). `abortSignal` (the run's own cancel signal) releases a question parked
|
|
30
|
+
* awaiting a human when the run aborts.
|
|
28
31
|
*
|
|
29
|
-
* 🔴 ONE LAW for every leg: a question frame that enters a run's stream has a LEDGER TWIN (the row
|
|
30
|
-
* `GET /v1/runs/:id/events` replays — a page reload recovers the open card from it); the leg decides only whether it
|
|
31
|
-
* ALSO writes a live socket. The background leg has no socket, so its `emit` IS the durable append; the synchronous
|
|
32
|
-
* stream leg lands the same frame in the ledger first and then writes the SSE connection (`createLedgerTwinEmit`).
|
|
33
32
|
* The ledger carries the CARD, not the answer door: `POST /v1/questions/:id/respond` stays live-only (this replica's
|
|
34
|
-
* memory, `ttlMs`), so a replayed card is answerable only until its own `expiresAtMs` and only on this replica.
|
|
33
|
+
* memory, `ttlMs`), so a replayed card is answerable only until its own `expiresAtMs` and only on this replica.
|
|
34
|
+
* The adjudication probe ({@link QuestionCoordinator.hasLiveContext}) reads the same transport's `reachable()` — one
|
|
35
|
+
* reading of "can this leg's face show a card right now?". */
|
|
35
36
|
export interface QuestionRunContext {
|
|
36
37
|
taskId: string;
|
|
37
38
|
owner: string | null;
|
|
38
|
-
|
|
39
|
+
transport: HitlTransport<QuestionFrame>;
|
|
39
40
|
abortSignal?: AbortSignal;
|
|
40
|
-
/** OPTIONAL reachability predicate for this leg's LIVE delivery face — one reading, two consumers:
|
|
41
|
-
* {@link QuestionCoordinator.hasLiveContext} (the park-vs-live adjudication probe) and the OPEN frame itself (a face
|
|
42
|
-
* that cannot show the card right now refuses the ask on the spot, the same failed-delivery arm, instead of parking it
|
|
43
|
-
* to TTL on a ledger row nobody is watching). CONSTRAINT: a leg whose face can go away WHILE the leg keeps running MUST
|
|
44
|
-
* supply it — `/v1/tasks/stream` under `x-detach-on-disconnect: true` keeps executing inside this ALS scope after the
|
|
45
|
-
* client left. Without the predicate the adjudication would read "live" and hand the leg to a face nobody can reach.
|
|
46
|
-
* ABSENT ⇒ always reachable, which is exactly right for the background leg (its face IS the durable events tail,
|
|
47
|
-
* readable whenever a client attaches). The CLOSE frame never asks it: it is a record, and it lands in the ledger twin
|
|
48
|
-
* whether or not the socket is still there. */
|
|
49
|
-
deliverable?: () => boolean;
|
|
50
41
|
}
|
|
51
42
|
/** The per-run question window the deployment owns (core caps nothing). Env: `QUESTION_MAX_CONCURRENT_PER_RUN` /
|
|
52
43
|
* `QUESTION_MAX_TOTAL_PER_RUN` / `QUESTION_TTL_MS` (see `ServiceConfig.questionThrottle`). */
|
|
@@ -91,7 +82,7 @@ export declare class QuestionCoordinator {
|
|
|
91
82
|
question: (req: AskQuestionRequest, signal?: AbortSignal) => Promise<OnQuestionOutcome>;
|
|
92
83
|
/** `POST /v1/questions/:id/respond` — resolve a parked question with the shell's answer. Owner-gated with a 404 (no
|
|
93
84
|
* existence oracle): a non-owner AND an unknown id (answered / expired / wrong replica) both get 404. Returns the
|
|
94
|
-
* HTTP {status, body}; the HTTP layer owns auth (
|
|
85
|
+
* HTTP {status, body}; the HTTP layer owns auth (gatedSubject + REQUIRE_PRINCIPAL) before calling. */
|
|
95
86
|
respond(id: string, principal: string | undefined, body: unknown): {
|
|
96
87
|
status: number;
|
|
97
88
|
body: unknown;
|
|
@@ -103,10 +94,9 @@ export declare class QuestionCoordinator {
|
|
|
103
94
|
* resolve-spec 的 durable question policy 用它在**判决时**分腿:有活流 ⇒ allow(问活人),无 ⇒
|
|
104
95
|
* ask(durable park)。ALS 让这个判断天然 per-leg,policy 组装期不必预知腿别。
|
|
105
96
|
* 🔴 判据是「投递面此刻可达」而不只是「ALS 在场」(复审 A1):detach 腿断连后 run 仍在本作用域里跑,
|
|
106
|
-
* 只判 ALS 会把一条谁也收不到的问题判成 allow
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
* fail-closed 到 park(park 可由运维补答,续跑掉的问题不可回收)。 */
|
|
97
|
+
* 只判 ALS 会把一条谁也收不到的问题判成 allow;park 才是它该走的腿。读的是本腿传输的 `reachable()`
|
|
98
|
+
* (有直写面 ⇒ 直写此刻活着;只有账本 ⇒ 恒真,后台腿的 durable events tail 语义;谓词读不出 ⇒ 假,判决面 fail-closed 到 park)。
|
|
99
|
+
* 只服务判决面:判决放行之后的开帧投递只读传输律(有账本的腿上死直写 = 卡在账本里,送到)。 */
|
|
110
100
|
hasLiveContext(): boolean;
|
|
111
101
|
private countersFor;
|
|
112
102
|
}
|
package/dist/question.js
CHANGED
|
@@ -3,17 +3,9 @@ import { uuidv7 } from "@sema-agent/core";
|
|
|
3
3
|
import { redactDeep } from "./trace/redact.js";
|
|
4
4
|
import { recordFailOpen } from "./observability/fail-open.js";
|
|
5
5
|
import { refusalBody } from "./http/refusal-body.js";
|
|
6
|
+
import { keyAdmits, ownerCellOf, recoveredSubject } from "./owner-faces.js";
|
|
7
|
+
import { createHitlOpenRace } from "./hitl-delivery.js";
|
|
6
8
|
const MAX_QUESTIONS_BYTES = 16384;
|
|
7
|
-
function isFaceReachable(ctx) {
|
|
8
|
-
if (ctx.deliverable === undefined)
|
|
9
|
-
return true;
|
|
10
|
-
try {
|
|
11
|
-
return ctx.deliverable();
|
|
12
|
-
}
|
|
13
|
-
catch {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
9
|
export const DEFAULT_QUESTION_THROTTLE = {
|
|
18
10
|
maxConcurrentPerRun: 2,
|
|
19
11
|
maxTotalPerRun: 20,
|
|
@@ -113,39 +105,29 @@ export class QuestionCoordinator {
|
|
|
113
105
|
signal?.addEventListener("abort", onAbort, { once: true });
|
|
114
106
|
ctx.abortSignal?.addEventListener("abort", onAbort, { once: true });
|
|
115
107
|
this.pending.set(id, { settle, owner: ctx.owner, taskId: ctx.taskId });
|
|
116
|
-
const
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
.then((r) => r, () => "failed");
|
|
124
|
-
const delivery = await Promise.race([emitted, answerP.then(() => "stalled")]);
|
|
125
|
-
if (delivery === "ok" || delivery === "landed-face-gone") {
|
|
108
|
+
const now = Date.now();
|
|
109
|
+
const race = createHitlOpenRace({
|
|
110
|
+
targets: [{ transport: ctx.transport, frame: { type: "question", questionId: id, questions, serverNowMs: now, expiresInMs: this.throttle.ttlMs, expiresAtMs: now + this.throttle.ttlMs } }],
|
|
111
|
+
settled: answerP,
|
|
112
|
+
});
|
|
113
|
+
const phase = await race.phase;
|
|
114
|
+
if (phase === "delivered") {
|
|
126
115
|
rc.total += 1;
|
|
127
|
-
if (delivery === "landed-face-gone") {
|
|
128
|
-
recordFailOpen("server.question.open-frame-undelivered", `question=${id} face-gone-while-landing`);
|
|
129
|
-
settle(UNAVAILABLE, "unanswered");
|
|
130
|
-
}
|
|
131
116
|
}
|
|
132
|
-
else if (
|
|
117
|
+
else if (phase === "undelivered") {
|
|
133
118
|
recordFailOpen("server.question.open-frame-undelivered", `question=${id}`);
|
|
134
119
|
settle(UNAVAILABLE, "unanswered");
|
|
135
120
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
121
|
+
else {
|
|
122
|
+
void race.landing.then((late) => {
|
|
123
|
+
if (late === "delivered")
|
|
124
|
+
rc.total += 1;
|
|
125
|
+
else
|
|
141
126
|
recordFailOpen("server.question.open-frame-undelivered", `question=${id}`);
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
return ctx.emit({ type: "question_complete", questionId: id, outcome: lastOutcome, serverNowMs: Date.now() });
|
|
147
|
-
})
|
|
148
|
-
.catch(() => recordFailOpen("server.question.complete-breadcrumb-dropped", `question=${id}`));
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
const answer = await answerP;
|
|
130
|
+
race.close({ type: "question_complete", questionId: id, outcome: lastOutcome, serverNowMs: Date.now() });
|
|
149
131
|
return answer;
|
|
150
132
|
};
|
|
151
133
|
respond(id, principal, body) {
|
|
@@ -153,7 +135,7 @@ export class QuestionCoordinator {
|
|
|
153
135
|
if (!parsed.ok)
|
|
154
136
|
return { status: 400, body: refusalBody({ errorCode: "request.body_shape", message: parsed.error }) };
|
|
155
137
|
const entry = this.pending.get(id);
|
|
156
|
-
if (!entry || (
|
|
138
|
+
if (!entry || !keyAdmits("ask.answer", { subject: recoveredSubject(principal), operator: false }, ownerCellOf(entry.owner))) {
|
|
157
139
|
return { status: 404, body: refusalBody({ errorCode: "question.not_pending", message: "no pending question for this id (answered, expired, or not on this replica)" }) };
|
|
158
140
|
}
|
|
159
141
|
entry.settle(parsed.value, "answered");
|
|
@@ -164,7 +146,7 @@ export class QuestionCoordinator {
|
|
|
164
146
|
}
|
|
165
147
|
hasLiveContext() {
|
|
166
148
|
const ctx = this.als.getStore();
|
|
167
|
-
return ctx !== undefined &&
|
|
149
|
+
return ctx !== undefined && ctx.transport.reachable();
|
|
168
150
|
}
|
|
169
151
|
countersFor(taskId) {
|
|
170
152
|
let rc = this.counters.get(taskId);
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** 引擎的码(`tools/fs/read-floor.js` 的字面量;包根不导出)—— 通告与拒起同一个词。 */
|
|
2
|
+
export declare const READ_DENY_FLOOR_UNKEPT = "config.read_deny_floor_unkept";
|
|
3
|
+
/** 终局结果上的那一格(`PersistedResultSideKeys.readDenyFloor`):在场 ⇔ 这条 run 照跑了、它的读拒行不按字节守。 */
|
|
4
|
+
export interface ReadDenyFloorSummary {
|
|
5
|
+
readonly code: typeof READ_DENY_FLOOR_UNKEPT;
|
|
6
|
+
readonly message: string;
|
|
7
|
+
}
|
|
8
|
+
/** 呈现只读部署的执行车道(活读,不拷值)。 */
|
|
9
|
+
interface ReadDenyFloorDeployment {
|
|
10
|
+
readonly remoteExec: {
|
|
11
|
+
readonly provider: string;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
/** 进程入口装一次(`boot/execution-lane.ts` 的 `settleReadDenyFloor`);再装 = 换成新的部署(同进程只有一个部署;测试按需各装)。 */
|
|
15
|
+
export declare function installReadDenyFloorDeployment(deployment: ReadDenyFloorDeployment): void;
|
|
16
|
+
/** 记录的上限:一条 run 从准备期(通告)到出口封口(结果)之间,本进程里又有这么多条照跑的 run 起步,它的那一条才会被挤掉。 */
|
|
17
|
+
export declare const RAN_RUNS_CAP = 10000;
|
|
18
|
+
/**
|
|
19
|
+
* 转发体的第一步(每条引擎通告都过,先于日志与分流):{@link READ_DENY_FLOOR_UNKEPT} ⇒ `message` 换成本仓那一句(`ran`),记下 `detail.runId`,
|
|
20
|
+
* 归属 = 这条 run 所在的腿(见顶注「帧投到哪条流」):顶层 `sessionId`(分流器先读它)= 腿的会话,投递键 `taskId` = 腿的 run;腿没有 run 资源 / 作用域外 ⇒ 引擎填的原样、无投递键;
|
|
21
|
+
* 其余码 / 没装部署 ⇒ 同一引用原样。`detail` 不动(引擎的 `rowCount` / `sessionId` / `runId`)。
|
|
22
|
+
*/
|
|
23
|
+
export declare function presentEngineNotice<N extends {
|
|
24
|
+
readonly code: string;
|
|
25
|
+
readonly message: string;
|
|
26
|
+
readonly detail?: Record<string, unknown>;
|
|
27
|
+
readonly sessionId?: unknown;
|
|
28
|
+
}>(notice: N): N & {
|
|
29
|
+
readonly taskId?: string;
|
|
30
|
+
};
|
|
31
|
+
/** 失败终局的对外句(`terminal.ts` 两只出口属主读它):{@link READ_DENY_FLOOR_UNKEPT} ⇒ 本仓那一句(`refused`);别的码 / 没装部署 ⇒ `undefined`(句子不归这里)。 */
|
|
32
|
+
export declare function readDenyFloorRefusalMessage(code: string): string | undefined;
|
|
33
|
+
/** 一条结果(按它的 `runId`)该带的那一格;这条 run 没有被呈现过的通告 ⇒ `undefined`。 */
|
|
34
|
+
export declare function readDenyFloorSummaryOf(runId: unknown): ReadDenyFloorSummary | undefined;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=read-deny-floor-notice.d.ts.map
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { buildReadDenyFloorSentence } from "./execution-lane-caps.js";
|
|
2
|
+
import { currentModelReachLeg } from "./model-reach-scope.js";
|
|
3
|
+
export const READ_DENY_FLOOR_UNKEPT = "config.read_deny_floor_unkept";
|
|
4
|
+
let installed;
|
|
5
|
+
export function installReadDenyFloorDeployment(deployment) {
|
|
6
|
+
installed = deployment;
|
|
7
|
+
}
|
|
8
|
+
export const RAN_RUNS_CAP = 10_000;
|
|
9
|
+
const ranRuns = new Set();
|
|
10
|
+
function noteRan(runId) {
|
|
11
|
+
ranRuns.delete(runId);
|
|
12
|
+
ranRuns.add(runId);
|
|
13
|
+
while (ranRuns.size > RAN_RUNS_CAP) {
|
|
14
|
+
const oldest = ranRuns.values().next();
|
|
15
|
+
if (oldest.done === true)
|
|
16
|
+
break;
|
|
17
|
+
ranRuns.delete(oldest.value);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export function presentEngineNotice(notice) {
|
|
21
|
+
if (notice.code !== READ_DENY_FLOOR_UNKEPT || installed === undefined)
|
|
22
|
+
return notice;
|
|
23
|
+
const runId = notice.detail?.runId;
|
|
24
|
+
if (typeof runId === "string" && runId.length > 0)
|
|
25
|
+
noteRan(runId);
|
|
26
|
+
const leg = currentModelReachLeg();
|
|
27
|
+
const message = buildReadDenyFloorSentence(installed.remoteExec.provider, "ran");
|
|
28
|
+
return leg?.taskId !== undefined ? { ...notice, message, sessionId: leg.sessionId, taskId: leg.taskId } : { ...notice, message };
|
|
29
|
+
}
|
|
30
|
+
export function readDenyFloorRefusalMessage(code) {
|
|
31
|
+
if (code !== READ_DENY_FLOOR_UNKEPT || installed === undefined)
|
|
32
|
+
return undefined;
|
|
33
|
+
return buildReadDenyFloorSentence(installed.remoteExec.provider, "refused");
|
|
34
|
+
}
|
|
35
|
+
export function readDenyFloorSummaryOf(runId) {
|
|
36
|
+
if (typeof runId !== "string" || !ranRuns.has(runId) || installed === undefined)
|
|
37
|
+
return undefined;
|
|
38
|
+
return { code: READ_DENY_FLOOR_UNKEPT, message: buildReadDenyFloorSentence(installed.remoteExec.provider, "ran") };
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=read-deny-floor-notice.js.map
|
|
@@ -1,27 +1,13 @@
|
|
|
1
|
-
/** 一个没进副本的成员:名字(调用方写的,原样;回显前由调用点清洗)与它为什么不能交(只说种类,不回显值)。 */
|
|
2
|
-
export interface PlainStringRecordMemberFault {
|
|
3
|
-
readonly name: string;
|
|
4
|
-
readonly fault: string;
|
|
5
|
-
}
|
|
6
1
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
2
|
+
* 请求面一份声明(MCP 条目 / A2A 对端)里每个键的**去处**:处置表机制与唯一拆法 —— 两条请求腿同读。
|
|
3
|
+
*
|
|
4
|
+
* ## 律(一条):「名 → 串」记录从不进交给引擎的声明
|
|
5
|
+
* 引擎的声明收据对带 `headers` / `env` 的声明整条拒(`config.credential_in_declaration`):一份声明至多带一只不透明引用,件由部署的对端座在每次发送时作答。
|
|
6
|
+
* 所以请求面一份声明按它的**处置表**({@link DeclarationDispositionTable};MCP 两臂在 `mcp-assertion-header.ts`,A2A 对端在 `task-a2a.ts`)由 {@link splitDeclaration} 一只函数拆开:
|
|
7
|
+
* 标 `engine` 的键进交给引擎的声明,标 `seat` 的那一张记录(契约包「名 → 串」记录读法 `readPlainStringRecord` 交出的副本 —— MCP `transport.env` / `transport.headers` 与 A2A `headers` 同一只读法)进草稿的件,
|
|
8
|
+
* 标 `withheld` 的键两边都不进。草稿只有胜出者(部署同名者赢)才交给对端座登记,登记换来的引用放进声明的引用位 —— 交给引擎的声明里零件值。
|
|
9
|
+
* 件的名与值由引擎的座答读器在每次发送时判(名不是头名 / 变量名、值带 CR / LF / NUL 等 ⇒ 那一台不发、兄弟照挂),受理只判形、不替它判。
|
|
10
10
|
*/
|
|
11
|
-
export type PlainStringRecordRead = {
|
|
12
|
-
readonly ok: true;
|
|
13
|
-
readonly record: Record<string, string>;
|
|
14
|
-
readonly stripped: readonly PlainStringRecordMemberFault[];
|
|
15
|
-
} | {
|
|
16
|
-
readonly ok: false;
|
|
17
|
-
readonly fault: string;
|
|
18
|
-
readonly member?: string;
|
|
19
|
-
};
|
|
20
|
-
/**
|
|
21
|
-
* 读一份「名 → 串」记录(见模块头注的律)。成员 = `Object.getOwnPropertyNames` 的每一个名字(不可枚举的也算,与引擎收据同读法),值按属性描述读:
|
|
22
|
-
* 数据属性取值,访问器调一次。先判每个成员的值(`__proto__` 名的成员也判:它的值不是串 ⇒ 整只不交,与 7.131.x 同),再剔 `__proto__` 名。调用方的对象不被交出去、也不被改。
|
|
23
|
-
*/
|
|
24
|
-
export declare function readPlainStringRecord(v: unknown): PlainStringRecordRead;
|
|
25
11
|
/**
|
|
26
12
|
* 请求面一份声明里每个键的**去处**(闭集;{@link splitDeclaration} 对它穷尽 `switch`):
|
|
27
13
|
* · `engine` —— 进交给引擎的声明;
|
|
@@ -60,4 +46,4 @@ export declare function splitDeclaration<R extends object, T extends Declaration
|
|
|
60
46
|
readonly engine: Pick<R, EngineKeysOf<T> & keyof R>;
|
|
61
47
|
readonly pieces?: Readonly<Record<string, string>>;
|
|
62
48
|
};
|
|
63
|
-
//# sourceMappingURL=
|
|
49
|
+
//# sourceMappingURL=request-declaration-disposition.d.ts.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export function declarationKeys(table) {
|
|
2
|
+
return Object.freeze(Object.keys(table));
|
|
3
|
+
}
|
|
4
|
+
export function splitDeclaration(declaration, table) {
|
|
5
|
+
const dispositions = table;
|
|
6
|
+
const engine = {};
|
|
7
|
+
let pieces;
|
|
8
|
+
let seatSeen = false;
|
|
9
|
+
for (const [key, value] of Object.entries(declaration)) {
|
|
10
|
+
if (value === undefined)
|
|
11
|
+
continue;
|
|
12
|
+
const disposition = Object.hasOwn(dispositions, key) ? dispositions[key] : undefined;
|
|
13
|
+
switch (disposition) {
|
|
14
|
+
case "engine":
|
|
15
|
+
engine[key] = value;
|
|
16
|
+
break;
|
|
17
|
+
case "seat": {
|
|
18
|
+
if (seatSeen)
|
|
19
|
+
throw new Error("request declaration: two members are marked as pieces in one disposition table");
|
|
20
|
+
seatSeen = true;
|
|
21
|
+
const record = value;
|
|
22
|
+
if (Object.keys(record).length > 0)
|
|
23
|
+
pieces = record;
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
case "withheld":
|
|
27
|
+
break;
|
|
28
|
+
case undefined:
|
|
29
|
+
throw new Error(`request declaration: a member the disposition table does not classify (${JSON.stringify(key.slice(0, 40))})`);
|
|
30
|
+
default: {
|
|
31
|
+
const unknownDisposition = disposition;
|
|
32
|
+
void unknownDisposition;
|
|
33
|
+
throw new Error("request declaration: a disposition outside the closed set");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return { engine: engine, ...(pieces === undefined ? {} : { pieces }) };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=request-declaration-disposition.js.map
|
|
@@ -6,11 +6,16 @@
|
|
|
6
6
|
* ① **列表**:在场却不是数组 / 超过挂载上限 / 某一条不是对象 ⇒ `400 request.field_invalid`(整份拒而不是挂前 N 条 / 摘掉读不出的那条:一份被悄悄截短的声明,在发送方那里读起来是「生效了」);
|
|
7
7
|
* 超上限用撞帽的唯一铸点({@link limitRefusal}),拒体带机读位一组键(`field` · `reason:"over_cap"` · `count` · `cap`);
|
|
8
8
|
* ② **键名**:条目层的词表外键 ⇒ `400 request.body_shape` + `unknownKeys`(句子由各座自己写 —— 受理键表与嵌套层是座位自己的事);
|
|
9
|
-
* ③ **键值**:每个受理键一只判官 ⇒ `400 request.field_invalid`,句子 `<坐标>.<键路径> (
|
|
9
|
+
* ③ **键值**:每个受理键一只判官 ⇒ `400 request.field_invalid`,句子 `<坐标>.<键路径>[ (<条目指认>)] is not a usable declaration — <判官原因句>. …`(条目指认由座位给:有申报名的座位 `(server "<名>")`,没有名字的座位不带),不回显值;
|
|
10
10
|
* 判官答「URL 带凭据」时拒体另带机读位 `field` / `reason`({@link urlCredentialFacts})。
|
|
11
11
|
* 第一处坏形即答:先列表、后条目;条目里先键名、后键值。各座只写**自己的**两件事:受理键表 + 键值判官表(以及它自己的词表外键句)。拒形、句尾、撞帽句不在座位文件里手拼 ——
|
|
12
12
|
* 两份手拼的拒形迟早分岔(`a2aPeers` 上线时就是缺了这一整套,坏形换回 200 + 运维 warn,调用方以为声明生效了)。
|
|
13
13
|
*
|
|
14
|
+
* ## 机读位(`request.field_invalid` 的每一只拒都带)
|
|
15
|
+
* 列表级与条目级的 `request.field_invalid` 拒体恒带 `field`(体内坐标:列表键 / `<列表>[i]` / `<列表>[i].<键路径>`),条目级(含条目不是对象)另带 `index`(条目在列表里的下标);撞帽那一形仍是撞帽的一组键,
|
|
16
|
+
* URL 带凭据那一形在 `field` / `reason` 之外同带 `index`。机读位只在这里铸:判官({@link DeclarationKeyJudge})只交原因,`field` 由原因的键路径铸、`index` 由骨架的循环铸 —— 座位与判官不手拼坐标。
|
|
17
|
+
* `request.body_shape` 的词表外键拒另有自己的机读位(`unknownKeys`,全坐标),不在这一组。
|
|
18
|
+
*
|
|
14
19
|
* ## 射程
|
|
15
20
|
* 纯值域、与租户车道无关;只在 fresh 提交腿上问(`boot/resolve-spec.ts` 的 `opts.leg`):重放存量 body 的腿走宽容读器,一个 4xx 打在 resume 上会永久砖死一条 parked 任务。
|
|
16
21
|
*/
|
|
@@ -19,26 +24,44 @@ import { type LimitFacts } from "./limit-refusal.js";
|
|
|
19
24
|
import { type UrlCredentialFacts } from "./url-credential-refusal.js";
|
|
20
25
|
/** 一座声明列表的名字与上限、以及拒句里要用的称呼(座位的常量,铸点只读)。 */
|
|
21
26
|
export interface DeclarationSeat {
|
|
22
|
-
/** 请求体里这张列表的键,也是机读坐标的根(`mcpServers` | `a2aPeers`)。 */
|
|
27
|
+
/** 请求体里这张列表的键,也是机读坐标的根(`mcpServers` | `a2aPeers` | `images`)。 */
|
|
23
28
|
readonly list: string;
|
|
24
29
|
/** 挂载上限(条数;超过 ⇒ 撞帽拒)。 */
|
|
25
30
|
readonly cap: number;
|
|
26
|
-
/**
|
|
27
|
-
readonly
|
|
31
|
+
/** 条目级拒句里条目的指认(带前导空格,接在坐标后):有申报名的座位 = ` (server "<名>")`;坐标本身唯一的座位(没有名字的条目)= 空串。 */
|
|
32
|
+
readonly identify: (entry: Record<string, unknown>) => string;
|
|
33
|
+
/** 条目级拒句的收尾句:说清「为什么整份请求被拒、而不是照坏条目办」与出路。 */
|
|
34
|
+
readonly entryTail: string;
|
|
28
35
|
/** 「一条声明」的整称(`an MCP server declaration`)。 */
|
|
29
36
|
readonly declaration: string;
|
|
30
37
|
/** 「多条声明」的整称(`MCP server declarations`)。 */
|
|
31
38
|
readonly declarations: string;
|
|
32
39
|
}
|
|
40
|
+
/** 有申报名、挂在一个外部服务上的座位(`mcpServers` · `a2aPeers`)的座位常量:指认 = ` (<subject> "<名>")`,收尾句说「不挂就跑偏」。`subject` = 一条声明所声明的东西(`server` | `peer`)。 */
|
|
41
|
+
export declare function createMountSeat(o: {
|
|
42
|
+
readonly list: string;
|
|
43
|
+
readonly cap: number;
|
|
44
|
+
readonly subject: string;
|
|
45
|
+
readonly declaration: string;
|
|
46
|
+
readonly declarations: string;
|
|
47
|
+
}): DeclarationSeat;
|
|
33
48
|
/** 一次拒绝:码 + 句 + 词表外的键名表(只在闭集那一形上在场)+ 机读位(撞帽 / URL 带凭据两形上在场)。受理口(同步 400)与探测口(`POST …/probe`)原样转述同一份。 */
|
|
34
49
|
export interface DeclarationRefusal {
|
|
35
50
|
readonly errorCode: "request.body_shape" | "request.field_invalid";
|
|
36
51
|
readonly message: string;
|
|
37
52
|
/** 词表外的键,全路径形(已清洗 + 截长 + 排序 + 封顶)。 */
|
|
38
53
|
readonly unknownKeys?: readonly string[];
|
|
39
|
-
/**
|
|
40
|
-
readonly facts?:
|
|
54
|
+
/** 机读位:撞帽 = `field` · `reason:"over_cap"` · `count` · `cap`;URL 带凭据 = `field` · `reason`(判官的拒因词)· `index`;其余 `request.field_invalid` = `field`(条目级另带 `index`)。 */
|
|
55
|
+
readonly facts?: DeclarationEntryFacts | LimitFacts;
|
|
41
56
|
}
|
|
57
|
+
/** 条目判官(座位的 `judgeEntry` · 键值判官表)交回的拒:机读位只会是条目级的那一组({@link DeclarationEntryFacts}),撞帽那一形只由骨架的列表级铸 —— 所以补 `index` 的函数收窄到这一型,不靠运行期猜。 */
|
|
58
|
+
export type EntryRefusal = Omit<DeclarationRefusal, "facts"> & {
|
|
59
|
+
readonly facts?: DeclarationEntryFacts;
|
|
60
|
+
};
|
|
61
|
+
/** 列表级 / 条目级 `request.field_invalid` 拒的机读位:`field` 恒在;`index` = 条目级才有(条目在列表里的下标);URL 带凭据那一形另带判官的拒因词 `reason`。 */
|
|
62
|
+
export type DeclarationEntryFacts = (Pick<UrlCredentialFacts, "field"> | UrlCredentialFacts) & {
|
|
63
|
+
readonly index?: number;
|
|
64
|
+
};
|
|
42
65
|
/** 一处键值坏形:键路径(相对条目)+ 判官的原因句;答「URL 带凭据」时另带判官的答案(⇒ 拒体带机读位)。 */
|
|
43
66
|
export interface DeclarationKeyIssue {
|
|
44
67
|
readonly path: string;
|
|
@@ -55,8 +78,8 @@ export declare function declaredName(e: unknown): string;
|
|
|
55
78
|
export declare function declarationNameIssue(entry: Record<string, unknown>): DeclarationKeyIssue | undefined;
|
|
56
79
|
/** 列表级拒句的收尾句:说清「为什么整份被拒、而不是只按读得出的那部分办」与出路(空列表 = 什么都不声明)。 */
|
|
57
80
|
export declare const LIST_REFUSAL_TAIL: string;
|
|
58
|
-
/** 列表级的一处坏形 → 拒(码恒 `request.field_invalid`)。`head`
|
|
59
|
-
export declare function declarationListRefusal(head: string):
|
|
81
|
+
/** 列表级的一处坏形 → 拒(码恒 `request.field_invalid`,体带 `field`)。`head` 只说位置与形的**种类**,不回显值;`field` = 坏形所在的体内坐标(列表键 / `<列表>[i]`)。 */
|
|
82
|
+
export declare function declarationListRefusal(head: string, field: string): EntryRefusal;
|
|
60
83
|
/**
|
|
61
84
|
* 一处键值坏形**怎么被说出来**:体内坐标(`<条目坐标>.<键路径>`)+ 判官的原因句(只剥控制与双向字符,不回显值)。受理口的拒句与读器的丢弃因(请求腿运维 warn 的 `field` / `reason`)读**这一只** ——
|
|
62
85
|
* 原因只来自判官表,组句只在这里(两边各写一份,迟早分岔)。
|
|
@@ -78,17 +101,17 @@ export declare function declarationOverCapFacts(seat: DeclarationSeat, count: nu
|
|
|
78
101
|
* 「什么算对象」只在这里判。
|
|
79
102
|
*/
|
|
80
103
|
export declare function declarationEntryNotObject(seat: DeclarationSeat, entry: unknown, at: string): string | undefined;
|
|
81
|
-
/** 一处键值坏形 →
|
|
82
|
-
export declare function declarationFieldRefusal(seat: DeclarationSeat, entry: Record<string, unknown>, at: string, issue: DeclarationKeyIssue):
|
|
104
|
+
/** 一处键值坏形 → 拒。**所有键同一个形**;条目指认由座位给({@link DeclarationSeat.identify}),坐标与原因句由 {@link declarationIssueFacts} 铸,机读位 `field`(判官答 URL 带凭据时另带 `reason`)与句子点名同一个坐标。 */
|
|
105
|
+
export declare function declarationFieldRefusal(seat: DeclarationSeat, entry: Record<string, unknown>, at: string, issue: DeclarationKeyIssue): EntryRefusal;
|
|
83
106
|
/** 一条条目的键值判官表按受理键序问一遍,第一处坏形即返回。 */
|
|
84
107
|
export declare function judgeDeclarationKeys<K extends string, E extends Record<string, unknown>>(seat: DeclarationSeat, entry: E, at: string, keys: readonly K[], judges: {
|
|
85
108
|
readonly [P in K]: DeclarationKeyJudge<E>;
|
|
86
|
-
}):
|
|
109
|
+
}): EntryRefusal | undefined;
|
|
87
110
|
/**
|
|
88
111
|
* 一张声明列表「能不能原样用」的回答者骨架:列表级(缺席 / `null` ⇒ 没声明;不是数组 / 超上限 / 条目不是对象)在这里,条目级交座位的 `judgeEntry`(词表外的键 → 键值)。
|
|
89
112
|
* `undefined` = 能原样用(或没声明;各门自己定缺席的意思)。
|
|
90
113
|
*/
|
|
91
|
-
export declare function requestDeclarationRefusal(seat: DeclarationSeat, list: unknown, judgeEntry: (entry: Record<string, unknown>, at: string) =>
|
|
114
|
+
export declare function requestDeclarationRefusal(seat: DeclarationSeat, list: unknown, judgeEntry: (entry: Record<string, unknown>, at: string) => EntryRefusal | undefined): DeclarationRefusal | undefined;
|
|
92
115
|
/** 受理口的转述:有答案 ⇒ 同步 400(码 / 句 / `unknownKeys` / 机读位原样);没有 ⇒ 什么也不做。 */
|
|
93
116
|
export declare function throwDeclarationRefusal(refusal: DeclarationRefusal | undefined): void;
|
|
94
117
|
//# sourceMappingURL=request-declaration-refusal.d.ts.map
|
|
@@ -3,6 +3,16 @@ import { createCodedHttpError } from "./security.js";
|
|
|
3
3
|
import { limitRefusal } from "./limit-refusal.js";
|
|
4
4
|
import { echoKeyName } from "./request-key-closure.js";
|
|
5
5
|
import { urlCredentialFacts } from "./url-credential-refusal.js";
|
|
6
|
+
export function createMountSeat(o) {
|
|
7
|
+
return {
|
|
8
|
+
list: o.list,
|
|
9
|
+
cap: o.cap,
|
|
10
|
+
identify: (entry) => ` (${o.subject} "${echoKeyName("", declaredName(entry))}")`,
|
|
11
|
+
entryTail: mountedEntryTail(o.subject),
|
|
12
|
+
declaration: o.declaration,
|
|
13
|
+
declarations: o.declarations,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
6
16
|
export const MALFORMED_NAME = "<malformed>";
|
|
7
17
|
export function declaredName(e) {
|
|
8
18
|
return e && typeof e === "object" && typeof e.name === "string" && e.name !== ""
|
|
@@ -14,10 +24,10 @@ export function declarationNameIssue(entry) {
|
|
|
14
24
|
}
|
|
15
25
|
export const LIST_REFUSAL_TAIL = "The request is refused rather than acting on part of the list: declarations that silently did not apply would read as in effect to whoever sent them. " +
|
|
16
26
|
"Fix the list (an empty list declares none).";
|
|
17
|
-
export function declarationListRefusal(head) {
|
|
18
|
-
return { errorCode: "request.field_invalid", message: `${head}. ${LIST_REFUSAL_TAIL}
|
|
27
|
+
export function declarationListRefusal(head, field) {
|
|
28
|
+
return { errorCode: "request.field_invalid", message: `${head}. ${LIST_REFUSAL_TAIL}`, facts: { field } };
|
|
19
29
|
}
|
|
20
|
-
function
|
|
30
|
+
function mountedEntryTail(subject) {
|
|
21
31
|
return (`The request is refused rather than mounting the ${subject} without it: a declaration that silently did not apply would leave the ${subject} running differently from what you declared. ` +
|
|
22
32
|
"Fix the entry (an optional key may also be omitted).");
|
|
23
33
|
}
|
|
@@ -32,14 +42,16 @@ export function declarationEntryNotObject(seat, entry, at) {
|
|
|
32
42
|
return entry === null || typeof entry !== "object" || Array.isArray(entry) ? `${at} is ${describeValueShape(entry)}, not ${seat.declaration} (an object)` : undefined;
|
|
33
43
|
}
|
|
34
44
|
export function declarationFieldRefusal(seat, entry, at, issue) {
|
|
35
|
-
const name = echoKeyName("", declaredName(entry));
|
|
36
45
|
const { field, reason } = declarationIssueFacts(at, issue);
|
|
37
46
|
return {
|
|
38
47
|
errorCode: "request.field_invalid",
|
|
39
|
-
message: `${field}
|
|
40
|
-
|
|
48
|
+
message: `${field}${seat.identify(entry)} is not a usable declaration — ${reason}. ${seat.entryTail}`,
|
|
49
|
+
facts: issue.credential === undefined ? { field } : urlCredentialFacts(field, issue.credential),
|
|
41
50
|
};
|
|
42
51
|
}
|
|
52
|
+
function withEntryIndex(refusal, index) {
|
|
53
|
+
return refusal.errorCode === "request.field_invalid" && refusal.facts !== undefined ? { ...refusal, facts: { ...refusal.facts, index } } : refusal;
|
|
54
|
+
}
|
|
43
55
|
export function judgeDeclarationKeys(seat, entry, at, keys, judges) {
|
|
44
56
|
for (const key of keys) {
|
|
45
57
|
const issue = judges[key](entry, at);
|
|
@@ -52,7 +64,7 @@ export function requestDeclarationRefusal(seat, list, judgeEntry) {
|
|
|
52
64
|
if (list === undefined || list === null)
|
|
53
65
|
return undefined;
|
|
54
66
|
if (!Array.isArray(list))
|
|
55
|
-
return declarationListRefusal(`${seat.list} is ${describeValueShape(list)}, not an array of ${seat.declarations}
|
|
67
|
+
return declarationListRefusal(`${seat.list} is ${describeValueShape(list)}, not an array of ${seat.declarations}`, seat.list);
|
|
56
68
|
if (list.length > seat.cap) {
|
|
57
69
|
const capped = limitRefusal(seat.list, "entries", list.length, seat.cap, { tail: LIST_REFUSAL_TAIL });
|
|
58
70
|
return { errorCode: "request.field_invalid", message: capped.message, facts: capped.facts };
|
|
@@ -62,10 +74,10 @@ export function requestDeclarationRefusal(seat, list, judgeEntry) {
|
|
|
62
74
|
const at = `${seat.list}[${i}]`;
|
|
63
75
|
const notObject = declarationEntryNotObject(seat, entry, at);
|
|
64
76
|
if (notObject !== undefined)
|
|
65
|
-
return declarationListRefusal(notObject);
|
|
77
|
+
return withEntryIndex(declarationListRefusal(notObject, at), i);
|
|
66
78
|
const refusal = judgeEntry(entry, at);
|
|
67
79
|
if (refusal !== undefined)
|
|
68
|
-
return refusal;
|
|
80
|
+
return withEntryIndex(refusal, i);
|
|
69
81
|
}
|
|
70
82
|
return undefined;
|
|
71
83
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* **请求形的拒** —— 一条律:门先于铸。
|
|
3
|
+
*
|
|
4
|
+
* 一次提交里,判据只读**请求本身**(体 · 头里验过的主体 · 到达的腿)与**进程期不变的部署配置**(车道、主体姿态、运维旋钮 —— 不是热应用的模型面)就答得出的拒,
|
|
5
|
+
* 在授权器铸下任何会话行之前答(受理漏斗 `http/admission.ts` 调 {@link assertRequestFormBeforeMint}):会话店零写、撤回出口零次,壳的 `--resume` 清单里不会出现这次提交。
|
|
6
|
+
* 铸点之后剩下的拒,判据都要读状态 —— 会话行与它的放置、店里的内容、装配器自己装配的事实(锁集、数据根、店的接线)、热应用的模型面、主体的中心裁定、在飞状态、引擎 ——
|
|
7
|
+
* 由提交出口(`submission-exit.ts`)在终局应答之前条件撤回收场。两类不交,也没有第三类。
|
|
8
|
+
*
|
|
9
|
+
* 分类的单位是**拒绝点**(一处拒与守着它的判据),只看判据的输入,不看它今天住在哪一段。本文件的判官在铸点之前答过,装配器(`boot/resolve-spec.ts`)对同一只判官的复判读同一份输入
|
|
10
|
+
* (受理门交给装配器的那一份体 · 同一只 `ServiceConfig` 的不变字段 · 按请求记忆化的主体),答同一个结论 —— 那一读是续跑重放腿与直调嵌入方的门(它们不经受理漏斗),
|
|
11
|
+
* 在 HTTP 新提交腿上恒不拒。
|
|
12
|
+
*
|
|
13
|
+
* 句与码的唯一属主是各判官;本文件把装配器里原先内联的几只判(`inheritEnv` 的车道与射程、工具名清单读成空、附件句柄形、写容纳面、镜像档 × 车道)收成导出函数,
|
|
14
|
+
* 装配器与受理门同调;规则表的那一判与存量体重放预判共用一只组合(`http/stored-body-replay.ts` 的 `ruleTablesRefusalWithoutTaskRoot`)。
|
|
15
|
+
*/
|
|
16
|
+
import type { IncomingMessage } from "node:http";
|
|
17
|
+
import { type TaskHostPostureScope, type TaskWriteFaceInput } from "./hosted-posture.js";
|
|
18
|
+
import { type ToolListSide } from "./rule-entry-list.js";
|
|
19
|
+
import { type Scenario } from "./owner-brands.js";
|
|
20
|
+
import type { PermissionMode } from "@sema-agent/core";
|
|
21
|
+
import type { ServiceConfig } from "./config-types.js";
|
|
22
|
+
import type { TaskRequestBody } from "./http/wire-types.js";
|
|
23
|
+
/**
|
|
24
|
+
* 一次提交请求的场景名从哪来(唯一读法):带场景头 ⇒ 头就是本请求的场景(分区与工具面同一个场景);体再给一个不同的 ⇒ 400 `scenario_conflict`
|
|
25
|
+
* (只在提交腿:读面没有体)。没带头 ⇒ 体原样(缺席 ⇒ 门走指派链)。
|
|
26
|
+
*/
|
|
27
|
+
export declare function scenarioRequestedBy(headerScenario: Scenario | undefined, bodyScenario: unknown): unknown;
|
|
28
|
+
/**
|
|
29
|
+
* `inheritEnv:"all"` 的车道与射程两判(值形判在 `request-value-closure.ts` 的 `inheritEnvFieldIssue`,先于本函数):只有 host 车道消费这一位 ⇒ 别的车道 400 + 机读位
|
|
30
|
+
* `reason: lane_not_host`;射程读写容纳面那一只谓词(`hosted-posture.ts` 腿④)⇒ 托管 422 `request.host_posture_refused`。`"scrub"` 是缺省,任何车道受理。
|
|
31
|
+
*/
|
|
32
|
+
export declare function assertInheritEnvServed(body: {
|
|
33
|
+
readonly inheritEnv?: unknown;
|
|
34
|
+
}, config: TaskHostPostureScope): void;
|
|
35
|
+
/** 工具名清单里读成空的条目 ⇒ 400(判与句的属主 = `rule-entry-list.ts` `inertToolListEntryOf`;`sides` 缺省 = 两个方向都判,续跑腿只判限制方向)。 */
|
|
36
|
+
export declare function assertToolListsReadable(body: unknown, sides?: readonly ToolListSide[]): void;
|
|
37
|
+
/** 体 `attachmentIds` 的形:在场就必须是至多 16 只、每只 1–64 字符的串(只判形;句柄在不在、绑不绑得上读附件店,在装配器的绑定核)。 */
|
|
38
|
+
export declare function assertAttachmentIdsShape(raw: unknown): void;
|
|
39
|
+
/** 任务层「掀开写围栏」的模式词 × 部署天花板(判据与拒因属主 `hosted-posture.ts`)⇒ 422 `request.host_posture_refused`。 */
|
|
40
|
+
export declare function assertWriteFaceAdmitted(mode: PermissionMode | undefined, config: TaskWriteFaceInput): void;
|
|
41
|
+
/**
|
|
42
|
+
* 体点名的每任务镜像档 × 本部署的执行车道:车道不是 k8s ⇒ 501 `capability.k8s_lane_required`(这台部署接不了每任务镜像,换部署形态才行)。
|
|
43
|
+
* 装配器判的是**生效**的那一档(体给的 ∨ 会话绑定的);体给了档时会话绑定不读 ⇒ 这一判只读请求与车道,受理门在铸点之前判体那一档。
|
|
44
|
+
*/
|
|
45
|
+
export declare function assertImageProfileLane(profile: string | undefined, config: TaskHostPostureScope): void;
|
|
46
|
+
/** 体上的每任务镜像档(非空串;形在受理门的值形门判过 —— 与装配器同一读法)。 */
|
|
47
|
+
export declare function bodyImageProfileOf(body: {
|
|
48
|
+
readonly sandboxImageProfile?: unknown;
|
|
49
|
+
}): string | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* **新提交的请求形判,铸点之前一次答完**(受理漏斗在值形门之后、授权器之前调;抛 `HttpError`,与装配器的同名判同句同码)。
|
|
52
|
+
* `body` = 受理门盖过入口模式章的那一份(装配器拿到的就是它)。序 = 装配器里这些判的序(一份体同时撞上两只时,先答的与修前同一只):
|
|
53
|
+
* 主体(场景头的三判)→ MCP 条目 → `inheritEnv` 车道 / 射程 → 工具名清单 → A2A 条目(超 32 条整份拒)→ `images` → 场景头 × 体 → `attachmentIds` 形 → 写容纳面 →
|
|
54
|
+
* 规则表里不靠任务根的拒(三桶 → `neverAuto`)→ 体点名的镜像档 × 车道。
|
|
55
|
+
* 不在这里的:装配器自己装配的事实(运维锁集、数据根、店的接线)、热应用的模型面(目录 / 名单 / 拒因表)、会话 / 店 / 中心 / 在飞 / 引擎 —— 那些判在铸点之后,拒走条件撤回。
|
|
56
|
+
*/
|
|
57
|
+
export declare function assertRequestFormBeforeMint(body: TaskRequestBody, req: IncomingMessage, config: ServiceConfig): void;
|
|
58
|
+
//# sourceMappingURL=request-form.d.ts.map
|