@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
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* 技能上已退役的 `manifest` 键 —— 「一条技能还带它」的**唯一判据**(core 7.41.0 起 `SkillSpec.manifest` 退役,零别名)。
|
|
3
3
|
*
|
|
4
4
|
* 两个读者,同一句话:
|
|
5
|
-
* ·
|
|
5
|
+
* · 提交口的两道技能门(顶层 `skills[i]` 与子代 `agents[a].skills[j]`,同经 `spec-fields.ts` 的 `skillItemIssue` → `namedRefusalOf`):带它(任何值)⇒ 点名拒;
|
|
6
6
|
* · 随包排空脚本(`scripts/drain-check-local.mjs` 的 `retired-skill-manifest` 判据,经脚本隔壁的编译产物 `dist/http/retired-skill-manifest.js` 取):
|
|
7
7
|
* 升级前停驻、持久化的提交体里仍带它的行,升级后续跑会被引擎按名拒(顶层 `skills[]`)或丢掉那只子代定义(`agents[].skills[]`),运维升级前要能数出来。
|
|
8
8
|
*
|
package/dist/http/route-ctx.d.ts
CHANGED
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
18
18
|
import type { HostDecision } from "../host-decision.js";
|
|
19
19
|
import type { EntryProblem } from "../entry-problems.js";
|
|
20
|
-
import type { SessionOwnerCell } from "../security.js";
|
|
21
20
|
import type { SessionNotifyDoor } from "../session-notify-door.js";
|
|
22
21
|
import type { TaskStream, TaskSpec, TaskResult, QuestionAnswer, Checkpoint, CheckpointToken, ResumeOutcome, RunInternals, Runner, EngineNotice, PendingSteerInput } from "@sema-agent/core";
|
|
23
22
|
import type { FlatServiceDeps, RequestAuth } from "./server.js";
|
|
@@ -37,6 +36,9 @@ import type { RootedTaskSpec } from "./execution-context.js";
|
|
|
37
36
|
import type { GateCommitment, GateSettlementEvidence } from "../gate-settlement.js";
|
|
38
37
|
import type { ResumeRestatement } from "./resume-restatement.js";
|
|
39
38
|
import type { RememberLaneCannotRecord } from "../parked-decide.js";
|
|
39
|
+
import type { RowWayOut } from "./resume-legs.js";
|
|
40
|
+
import type { KeyCaller } from "../owner-faces.js";
|
|
41
|
+
import type { Subject } from "../owner-brands.js";
|
|
40
42
|
/** 跨域可变状态 = lens1 §C2 实测的那 8 条「运行期登记簿」,一个对象。
|
|
41
43
|
* [ref]:`cancelledViaVerb`(按 taskId 键控的「这次是取消动词」旁表)删除 —— 中止成因改挂在每条腿自己的
|
|
42
44
|
* {@link RunAbort} 句柄上(`inflightRuns` 的值),同寿同删,不再有一张与腿不同寿的旁表。 */
|
|
@@ -59,11 +61,12 @@ export interface RouteHelpers {
|
|
|
59
61
|
readRawBody(req: IncomingMessage, max: number): Promise<Buffer>;
|
|
60
62
|
rateLimited(req: IncomingMessage, res: ServerResponse): boolean;
|
|
61
63
|
quotaExceeded(req: IncomingMessage, res: ServerResponse): boolean;
|
|
62
|
-
|
|
64
|
+
/** `seat` 在场(提交门之后的调用点)⇒ 拒经出口座写(`submission-exit.ts`:先收场、再写);缺席(提交门之前)⇒ 当场写。下面 `usageWindowDenied` / `admitRun` 同。 */
|
|
65
|
+
leaseDenied(req: IncomingMessage, res: ServerResponse, seat?: TerminalSeat): Promise<boolean>;
|
|
63
66
|
/**
|
|
64
67
|
* 🔴 **[ref]:按**付费**方(不是请求方)判的成本配额准入 —— {@link quotaExceeded} 的孪生。**
|
|
65
68
|
*
|
|
66
|
-
* `quotaExceeded` 键在 `
|
|
69
|
+
* `quotaExceeded` 键在 `gatedSubject(req)` = 谁点的按钮;本门键在**这笔钱记谁的账**。两者在自助
|
|
67
70
|
* 场景恒相等,在「显式 operator 代别人动手」的场景不等 —— 那正是配额上限被绕过的那一支。
|
|
68
71
|
* 参数 `owner` 由调用点从**已属主校验过的那一行**取(run 行的 `owner` / checkpoint 的 scope),
|
|
69
72
|
* 本门不自己推身份(推得出来就说明调用点还有第二个身份源,那才是病)。
|
|
@@ -79,23 +82,14 @@ export interface RouteHelpers {
|
|
|
79
82
|
* 「拿自己的额度去烧别人的账」的那一支。同样必须排在 owner 门之后、驱动之前。 */
|
|
80
83
|
ownerLeaseDenied(res: ServerResponse, owner: string | undefined): Promise<boolean>;
|
|
81
84
|
/** [ref]-T1:治理窗 pre-admission(异步 202 车道的唯一 429 出路;key 公式与 core 单源)。 */
|
|
82
|
-
usageWindowDenied(req: IncomingMessage, res: ServerResponse): Promise<boolean>;
|
|
85
|
+
usageWindowDenied(req: IncomingMessage, res: ServerResponse, seat?: TerminalSeat): Promise<boolean>;
|
|
83
86
|
/**
|
|
84
87
|
* 在飞 run 并发帽的提交门准入(`RUN_MAX_CONCURRENT*`,缺省关;判据、席位与拒的形全文在 `http/run-concurrency-cap.ts`):放行 ⇒ 席位(登记那一拍与 `finally` 放);
|
|
85
|
-
* 超帽 ⇒
|
|
88
|
+
* 超帽 ⇒ 已(经出口座)应答 429 + `Retry-After`、回 `undefined`。只挂**新提交**门(`createDurableRun` / `POST /v1/tasks` / `POST /v1/tasks/stream`),
|
|
86
89
|
* 排在幂等重放与 `usageWindowDenied` 之后、任何建行 / 认领 / SSE 头之前。
|
|
87
90
|
*/
|
|
88
|
-
admitRun(req: IncomingMessage, res: ServerResponse): import("./run-concurrency-cap.js").RunSlot | undefined
|
|
91
|
+
admitRun(req: IncomingMessage, res: ServerResponse, seat: TerminalSeat): Promise<import("./run-concurrency-cap.js").RunSlot | undefined>;
|
|
89
92
|
safeDecode(seg: string): string | null;
|
|
90
|
-
/** run 面的属主门(谓词 `runOwnerReadable`;非属主 ⇒ 404 `not_found.run` + 长文,与 run 读口的 unknown 臂同码同串,[ref])。 */
|
|
91
|
-
runOwnerOk(req: IncomingMessage, res: ServerResponse, owner: string | null): boolean;
|
|
92
|
-
/** 会话面的属主门(谓词 `sessionOwnerReadable`,[ref]:没有身份边界的部署不钉人,与会话列表同读;非属主 ⇒ 404 `not_found.session` +
|
|
93
|
-
* {@link SESSION_NOT_FOUND_MESSAGE},与会话读口的 unknown 臂同码同串 —— G52 [ref] / [ref])。每一个按会话寻址的属主判都走它。
|
|
94
|
-
* `cell` = 调用点经 `security.ts` 的 `sessionOwnerCellOf` 读出的那一格([ref]:无主的委派子代 placed 行只对 fleet 调用方放行,判据 `ownerlessRowOpen`)。 */
|
|
95
|
-
sessionOwnerOk(req: IncomingMessage, res: ServerResponse, cell: SessionOwnerCell): boolean;
|
|
96
|
-
runSessionAcceptOk(req: IncomingMessage, res: ServerResponse, run: {
|
|
97
|
-
sessionId: string | null;
|
|
98
|
-
}, face: string, notFoundError?: string): boolean;
|
|
99
93
|
}
|
|
100
94
|
/** 单域独占状态(lens1 实测 12 条)——不进 registry,跟着各自的域模块走;每个 server 实例一份
|
|
101
95
|
* (模块级会把 rate-limiter / 缓存跨实例串味,测试里一个进程建几十个 server)。 */
|
|
@@ -126,6 +120,8 @@ export interface RouteRequestState {
|
|
|
126
120
|
}
|
|
127
121
|
/** B4①(命名化):`prepareSpec` 的返回形(tasks.ts/runs.ts 两域共同消费的属性面)——原为 6 成员内联匿名对象。
|
|
128
122
|
* 命名后好处不只是过 B4 门:两个消费域现在都能对同一个符号做 `import type` 标注,而不是各自重推断结构。 */
|
|
123
|
+
/** 提交门之后的拒交给出口座写的那一面(`submission-exit.ts`)。 */
|
|
124
|
+
export type TerminalSeat = Pick<import("../submission-exit.js").SubmissionSeat, "deliverTerminal">;
|
|
129
125
|
export interface PreparedTaskSubmission {
|
|
130
126
|
/** 盖过根的 spec(`http/execution-context.ts` `stampSpecRoot` 是唯一写者):`sessionId` 恒在 = 这次提交的根会话。 */
|
|
131
127
|
spec: RootedTaskSpec;
|
|
@@ -171,6 +167,11 @@ export interface PreparedTaskSubmission {
|
|
|
171
167
|
* 不经提交门的内部车道(`/decide` 的宿主新 turn)铸一只不带标题器的座:不起标题。
|
|
172
168
|
*/
|
|
173
169
|
acceptance: import("../run-acceptance.js").RunAcceptance;
|
|
170
|
+
/**
|
|
171
|
+
* 这次提交的**出口座**(`submission-exit.ts`):提交门在授权之前铸,授权器登记新行时把候选交给它、受理座挂在它上面。三条提交腿认领赢时交本次 run、
|
|
172
|
+
* 交出查询责任时标 record,终局应答经 `seat.deliverTerminal` 写,在自己的路径上、终局应答之前 `seat.close()` —— 被拒的提交铸下的会话在应答发出之前撤回。
|
|
173
|
+
*/
|
|
174
|
+
seat: import("../submission-exit.js").SubmissionSeat;
|
|
174
175
|
/**
|
|
175
176
|
* 这次装配的**宿主租约**:受理漏斗在装配之前开(`peerDesk.lease("fresh")`),装配在它之下登记交给引擎的对端声明;漏斗成功即把它交到这里 ——
|
|
176
177
|
* 拿到本产物的那只函数紧接着写 `try { … } finally { prepared.peerLease.release() }`,其后每个出口(早退、合流败方、建行拒、驱动返回)按构造都放。
|
|
@@ -291,6 +292,11 @@ export interface DriveResumeArgs {
|
|
|
291
292
|
sessionId: string;
|
|
292
293
|
ctx: CheckpointCtx;
|
|
293
294
|
};
|
|
295
|
+
/**
|
|
296
|
+
* 判官判本引擎续不了这条腿要续的那张卡时,这张卡的出路(`resume-legs.ts` 的 `rowWayOutOf`;判 `ok` / 说不出 ⇒ 缺席)。`/plan_review` 与 `/resume` 在驱动前对载入行求它;
|
|
297
|
+
* catch 臂在引擎的拒留卡 pending(处置 `retriable`)时把它作 `wayOut` 加进拒体 —— 引擎的拒原样不改(码、`field`、`blockedBy`、`thrownName`、诊断都在)。
|
|
298
|
+
*/
|
|
299
|
+
rowWayOut?: RowWayOut;
|
|
294
300
|
/**
|
|
295
301
|
* 这条续跑的**宿主租约**(续跑漏斗 `resolveResumeSpecOrBlocked` 开、装配在它之下登记对端声明;调用方作用域的 `finally` 放)。
|
|
296
302
|
* 驱动腿经 `heldFor(args.peerLease, () => driveResumeLeg(…))` 自持一只:受理早回的那一形里,腿活过调用方作用域,自己落定才放。
|
|
@@ -302,7 +308,8 @@ export interface DriveResumeArgs {
|
|
|
302
308
|
/** 这条腿的部署事实(`leg-facts.ts`):续跑漏斗在复制之前读出的那一份(与 {@link PreparedTaskSubmission.legFacts} 同一律)。读者 = 本腿的 `wiring_manifest.skills` 段与会话行记录座。 */
|
|
303
309
|
legFacts: import("../leg-facts.js").LegFacts | undefined;
|
|
304
310
|
sessionId: string;
|
|
305
|
-
|
|
311
|
+
/** 卡属主的**主体**(分区键;`decodeCheckpointScope(cp.scope)` 恢复):ALS 与行属主读它,付费方两道门读它背后的人(`personOf`)。 */
|
|
312
|
+
subject: string | undefined;
|
|
306
313
|
fleetScope: string;
|
|
307
314
|
taskConfig: Omit<TaskSpec, "objective" | "sessionId">;
|
|
308
315
|
resumeObjective: string;
|
|
@@ -313,7 +320,8 @@ export interface DriveResumeArgs {
|
|
|
313
320
|
* 它只是分类:位由受理点与终局体两个边界按它铸,从不只凭这一句声明铸;缺席的取消出口(`checkpoint.resume_aborted` / 抛出臂)不铸。
|
|
314
321
|
*/
|
|
315
322
|
commitment: GateCommitment;
|
|
316
|
-
|
|
323
|
+
/** 续跑腿接着跑哪一只组合入口(verify 验证门 / cascade 梯子;缺席 = 普通腿);读法的唯一属主 = `resume-composition.ts`。 */
|
|
324
|
+
composition: import("./resume-composition.js").ResumeComposition | undefined;
|
|
317
325
|
/**
|
|
318
326
|
* **R-1**(车CJ 收车档 §10 R-1;[ref] 批落地)—— 本条 resume 腿**装配期**铸下的用户面通告
|
|
319
327
|
* (`PreparedTaskSubmission.engineNotices` 的 resume 孪生;今天唯一一族:`mcp.injection_dropped`)。
|
|
@@ -356,7 +364,7 @@ export interface DriveResumeArgs {
|
|
|
356
364
|
* markResuming CAS(409 `conflict.not_resumable`)、pre-CAS CheckpointError(绑定不符 409 /
|
|
357
365
|
* 卡不在 404)。异步化的只有模型往返段。
|
|
358
366
|
*
|
|
359
|
-
* ⚠️
|
|
367
|
+
* ⚠️ **组合腿(`composition` 在场:verify / cascade)不受本位影响**:core 的 `resumeWithVerification` 是一次整包
|
|
360
368
|
* await,没有「CAS 已过、模型还没跑」这个缝可停 —— 在那条臂上提前受理就等于把绑定判别也异步化了
|
|
361
369
|
* (那是决策证明的一部分,不能丢)。故它维持同步长调用形,如实登记在 CHANGELOG/契约文档。
|
|
362
370
|
*
|
|
@@ -468,10 +476,7 @@ export interface RouteLegs {
|
|
|
468
476
|
acceptEarly?: boolean,
|
|
469
477
|
/** [ref]:调用方已验身份的裁定 —— stale 臂铸 `currentPending` 指路键前在被读回的行上重跑 decide 门
|
|
470
478
|
* 同一属主判(缺席 ⇒ 恒不造键;判据属主=server.ts 铸键点注)。 */
|
|
471
|
-
decider?:
|
|
472
|
-
principal?: string;
|
|
473
|
-
explicitOperator: boolean;
|
|
474
|
-
},
|
|
479
|
+
decider?: KeyCaller,
|
|
475
480
|
/** 续跑请求的重述键(`mcpServers` / `a2aPeers`),门读出并判过的那一份;缺席 = 冻结读法。语义属主 = `resume-restatement.ts` 顶注。 */
|
|
476
481
|
restatement?: ResumeRestatement): Promise<ResumeCheckpointOutcome>;
|
|
477
482
|
/** 全 resume 家族的共同下半场(lease admission + 写 run log + fleet 发布)。 */
|
|
@@ -482,16 +487,13 @@ export interface RouteLegs {
|
|
|
482
487
|
acceptEarly?: boolean,
|
|
483
488
|
/** [ref]②([ref]):调用方已验身份的裁定 —— 腿内在被真正载入的 checkpoint 行上重跑属主判
|
|
484
489
|
* ([ref] R3 同形;缺席 = 匿名 dev 部署,不咬)。 */
|
|
485
|
-
decider?:
|
|
486
|
-
principal?: string;
|
|
487
|
-
explicitOperator: boolean;
|
|
488
|
-
},
|
|
490
|
+
decider?: KeyCaller,
|
|
489
491
|
/** 续跑请求的重述键(同 {@link RouteLegs.resumeCheckpoint} 末参)。 */
|
|
490
492
|
restatement?: ResumeRestatement): Promise<ResumeLegOutcome>;
|
|
491
493
|
/** notify-wake 域:唤醒一条 parked checkpoint。 */
|
|
492
494
|
resumeWake(sessionId: string,
|
|
493
495
|
/** 续跑首轮那段话连同框架位,由文本出处在铸点定好(HTTP `/wake` 正文 ⇒ `trusted: false`);语义属主 = `resume-legs.ts` 同名形参顶注。 */
|
|
494
|
-
message: PendingSteerInput | undefined, caller:
|
|
496
|
+
message: PendingSteerInput | undefined, caller: Subject | undefined, req: IncomingMessage | undefined,
|
|
495
497
|
/** [ref] 件 S-1:透传给 {@link DriveResumeArgs.acceptEarly}(200 受理语义)。HTTP `/wake` 腿传 `true`
|
|
496
498
|
* —— 本腿走 `mintFreshRun`,受理体里的 `taskId` 因此是**新铸的**那个(壳的 poll 锚)。 */
|
|
497
499
|
acceptEarly?: boolean,
|
|
@@ -515,10 +517,7 @@ export interface RouteLegs {
|
|
|
515
517
|
},
|
|
516
518
|
/** [ref]②([ref]):调用方已验身份的裁定(直连门 = HMAC 验出的 principal)—— 属主轻读与行级属主复核
|
|
517
519
|
* ([ref] R3 同形;缺席 = 匿名 dev 部署,不咬)。 */
|
|
518
|
-
decider?:
|
|
519
|
-
principal?: string;
|
|
520
|
-
explicitOperator: boolean;
|
|
521
|
-
},
|
|
520
|
+
decider?: KeyCaller,
|
|
522
521
|
/** [ref]:决断方看到的那道门(决断体的 `checkpointId`);不是当前门 ⇒ `409 approval_stale`(`approval_stale` 律,语义属主 = `resume-legs.ts` 的同名形参顶注)。 */
|
|
523
522
|
sighting?: GateSighting,
|
|
524
523
|
/** 续跑请求的重述键(同 {@link RouteLegs.resumeCheckpoint} 末参):盖在这一次 ctx 读上,存体预判按盖过的体判。 */
|
|
@@ -783,7 +782,7 @@ export declare const RUN_NOT_FOUND_MESSAGE = "run not found \u2014 the id belong
|
|
|
783
782
|
*
|
|
784
783
|
* 为什么是常量不是各点字面量:这句话要在**每一个**会话面的「不存在」臂与「非属主」臂上逐字节同串(G52 [ref] /
|
|
785
784
|
* [ref] —— 两臂差一个码或一个字就是单端点内的存在性 oracle)。十余个出站点各抄一份,漂开的那天没有任何东西会说话;
|
|
786
|
-
* 走一只常量 + `
|
|
785
|
+
* 走一只常量 + `admitRunRow(..., "session")` 的会话拼法,「改一处」就是改全域。
|
|
787
786
|
*/
|
|
788
787
|
export declare const SESSION_NOT_FOUND_MESSAGE = "session not found";
|
|
789
788
|
/** [ref] 前缀=域判别子既成契约:a\* 与 wa\* 形 id 给任务句柄读腿 / journal 指路;其余给 {@link RUN_NOT_FOUND_MESSAGE}。 */
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
2
2
|
import type { A2ATaskState } from "@sema-agent/core";
|
|
3
|
-
import type { A2aServeConfig } from "../../config-types.js";
|
|
3
|
+
import type { A2aServeConfig, A2aServeSkill } from "../../config-types.js";
|
|
4
4
|
import { type RunRecord } from "../../plugins/store-contracts.js";
|
|
5
5
|
import type { RouteCtx, RouteMatch, RouteIdsOf } from "../route-ctx.js";
|
|
6
|
+
import type { RunStore } from "../../plugins/store-backend.js";
|
|
7
|
+
import type { Person } from "../../owner-brands.js";
|
|
6
8
|
/** 本实现说的 A2A 协议版本 —— 卡的 `protocolVersion` 与每条 RPC 响应的 `a2a-version` 头同源(单点)。 */
|
|
7
9
|
export declare const A2A_PROTOCOL_VERSION = "1.0";
|
|
8
10
|
/** 版本头名。**读**请求侧的它只是诊断材料(开集容忍:认识与否都照常答),**写**响应侧的它是我们自报
|
|
@@ -15,17 +17,38 @@ interface A2aCardSkill {
|
|
|
15
17
|
name: string;
|
|
16
18
|
description?: string;
|
|
17
19
|
}
|
|
18
|
-
/** A2A AgentCard 的 server
|
|
20
|
+
/** A2A AgentCard 的 server 铸面 —— **sema 方言**:字段族是 A2A v0.3 的(顶层 `url` + `preferredTransport`,方法名 v0.3 拼法),
|
|
21
|
+
* 标签 `protocolVersion: "1.0"` 跟随 core 客户端腿;**不是**完整的 v0.3 AgentCard(v0.3 要的 `version` / `capabilities` /
|
|
22
|
+
* `defaultInputModes` / `defaultOutputModes` / 技能 `tags` / `securitySchemes` 本卡都没有 —— 已声明的方言差异,契约附录 C.1 列全)。
|
|
23
|
+
* **具名字段 + 允许未来 additive**(设计稿 §4-5 数据形扩展槽)。公开卡与扩展卡**同形**,只差 `skills` 的过滤。 */
|
|
19
24
|
interface A2aAgentCard {
|
|
20
25
|
name: string;
|
|
21
26
|
description?: string;
|
|
22
27
|
protocolVersion: string;
|
|
23
28
|
url: string;
|
|
24
29
|
preferredTransport: "JSONRPC";
|
|
30
|
+
/** 扩展卡方法在不在方法表里(**派生**,不是常量也不是配置)⇒ 与配没配 `audience` 无关:匿名读者从卡上读不出「这里有隐藏技能」。 */
|
|
31
|
+
supportsAuthenticatedExtendedCard: boolean;
|
|
25
32
|
skills: A2aCardSkill[];
|
|
26
33
|
}
|
|
27
|
-
/**
|
|
28
|
-
|
|
34
|
+
/** (配置, 这次请求验过的人, 方法表) → 卡(纯投影,零 I/O、零存量读)。`build*`:返回纯数据。
|
|
35
|
+
* `reader` 缺席 = 公开卡;在场 = 扩展卡(按 {@link skillsOfferedTo} 过滤)。旗读方法表(调用点恒传 {@link A2A_METHODS})。 */
|
|
36
|
+
export declare function buildAgentCard(serve: A2aServeConfig, reader: Person | undefined, methods: ReadonlyMap<string, A2aMethodHandler>): A2aAgentCard;
|
|
37
|
+
/** sema 方言扩展卡的方法名(A2A v0.3 §7.10 的拼法,与 `message/send` / `tasks/get` 同一方言;不加 1.0 别名 —— 一种方言一个名字)。 */
|
|
38
|
+
export declare const EXTENDED_CARD_METHOD = "agent/getAuthenticatedExtendedCard";
|
|
39
|
+
/**
|
|
40
|
+
* 🔴 **发布规则(唯一谓词)**:提供给 `reader` 的技能 = 没写 `audience` 的技能 ∪ `audience` 含这个人的技能(声明序,只滤不排)。
|
|
41
|
+
* 三处同读 —— 公开卡(`reader` 缺席)、扩展卡、`message/send` 的 `sema.skillId` 选择 ⇒ **看得见 ⇔ 点得中**;本文件读
|
|
42
|
+
* `serve.skills` 的只有这一处。
|
|
43
|
+
*
|
|
44
|
+
* **发布 ≠ 授权**:它决定这条技能对谁公告、谁能按 id 点名,**不**决定谁能跑它背后的场景。场景的唯一授权门是场景门
|
|
45
|
+
* (中心白名单,只在接了中心时存在);不读技能的入口(不带 `sema.skillId` 走指派链 / 映射到同一场景的公开技能 /
|
|
46
|
+
* 原生提交族 `POST /v1/runs` · `POST /v1/tasks` · `POST /v1/tasks/stream` 体里的 `scenario`)都不经过本谓词。
|
|
47
|
+
*
|
|
48
|
+
* 形参收**验过的人**那只品牌:只带 service 凭据(含代部署本人)的请求没有人 ⇒ 只得公开技能;fleet 资格与运维名册**不**扩大投影 ——
|
|
49
|
+
* 这里不读它们,运维照他自己这个人投影(运维不提权、fleet 不算)。
|
|
50
|
+
*/
|
|
51
|
+
export declare function skillsOfferedTo(serve: A2aServeConfig, reader: Person | undefined): readonly A2aServeSkill[];
|
|
29
52
|
/**
|
|
30
53
|
* 域入口①:公开发现面。**位置即契约** —— 必须挂在 `server.ts` 的全局 service-credential 门**之前**
|
|
31
54
|
* (R-11「公网匿名可发现」;挂在门后等于要凭据才能发现,协商第一步就断)。
|
|
@@ -55,7 +78,22 @@ export declare const A2A_TASK_NOT_FOUND_MESSAGE = "task not found";
|
|
|
55
78
|
* 而那个决议走的是持久审批口、不是一条回信 —— 与 core 对自己 `parked` 行的裁词同源。A2A 调用方因此
|
|
56
79
|
* **不能**靠再发一条 message 解开它(附录 C.3 的表里成文写着这句)。
|
|
57
80
|
*/
|
|
58
|
-
export declare function a2aStateForRun(run: Pick<RunRecord, "status" | "errorCode"
|
|
81
|
+
export declare function a2aStateForRun(run: Pick<RunRecord, "status" | "errorCode">): A2ATaskState;
|
|
82
|
+
/** 一个方法处理器。返回 `result`(被包进 JSON-RPC 成功体)、返回 `undefined`(= 已自行应答)或抛 {@link RpcError}。 */
|
|
83
|
+
type A2aMethodHandler = (args: {
|
|
84
|
+
req: IncomingMessage;
|
|
85
|
+
res: ServerResponse;
|
|
86
|
+
ctx: RouteCtx;
|
|
87
|
+
params: Record<string, unknown>;
|
|
88
|
+
serve: A2aServeConfig;
|
|
89
|
+
/** 事实 `a2aServe` 的见证:两只方法都站在这只 durable run 店上(无店 ⇒ 路由层已 404,走不到方法)。 */
|
|
90
|
+
runStore: RunStore;
|
|
91
|
+
}) => Promise<unknown>;
|
|
92
|
+
/**
|
|
93
|
+
* 技能选择拒句(**常量**,零技能 id):点名一条没声明的技能与点名一条没发布给你的技能,拒体逐字节相同 —— 同一个 throw 点、同一句话。
|
|
94
|
+
* 回显输入的 id 会把「这个 id 在这台部署上有没有含义」交给调用方比对(拼错的调用方看不到回显:它能看的技能名单就在它拉得到的卡上)。
|
|
95
|
+
*/
|
|
96
|
+
export declare const A2A_UNOFFERED_SKILL_MESSAGE = "unknown skill id \u2014 params.message.metadata[\"sema.skillId\"] does not name a skill offered to this caller; the skills a caller can name are the ones on the agent card it can read (the public card, or the authenticated extended card)";
|
|
59
97
|
/**
|
|
60
98
|
* 域入口②:JSON-RPC 端点。**位置即契约** —— 挂在全局 service-credential 门**之后**(R-11「持服务凭据
|
|
61
99
|
* 才可调」),且在 drain / model-roster-pending 两道 503 门之后(`/v1/a2a` 进 `isBillableSubmitPath`:
|
|
@@ -6,25 +6,33 @@ import { HttpError } from "../../security.js";
|
|
|
6
6
|
import { idemCallerOf, idemIdentityOf, idemKeyOf, inflightKeyOf } from "../idempotency.js";
|
|
7
7
|
import { isRunExistsConflictBody, replayOfExistingRun } from "../submit-replay.js";
|
|
8
8
|
import { isActiveRunConflictBody } from "../active-run-conflict.js";
|
|
9
|
-
import { sendJson, sendError } from "../send.js";
|
|
9
|
+
import { sendJson, sendError, sendHttpError } from "../send.js";
|
|
10
10
|
import { admissionRefusalOf, readinessOf, sendBillableRefusal } from "../readiness.js";
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
11
|
+
import { gatedPerson, gatedSubject, sendPrincipalRefusal, verifiedIdentitySource } from "../principal-gate.js";
|
|
12
|
+
import { callerOf, protocolEntry, readVisibleRun, runRowAt } from "../owner-access.js";
|
|
13
13
|
import { assertNever } from "../route-ctx.js";
|
|
14
14
|
import * as facts from "../../capability-facts.js";
|
|
15
15
|
import { createDurableRun } from "./runs.js";
|
|
16
16
|
export const A2A_PROTOCOL_VERSION = "1.0";
|
|
17
17
|
export const A2A_VERSION_HEADER = "a2a-version";
|
|
18
|
-
export function buildAgentCard(serve) {
|
|
18
|
+
export function buildAgentCard(serve, reader, methods) {
|
|
19
19
|
return {
|
|
20
20
|
name: serve.name,
|
|
21
21
|
...(serve.description !== undefined ? { description: serve.description } : {}),
|
|
22
22
|
protocolVersion: A2A_PROTOCOL_VERSION,
|
|
23
23
|
url: serve.url,
|
|
24
24
|
preferredTransport: "JSONRPC",
|
|
25
|
-
|
|
25
|
+
supportsAuthenticatedExtendedCard: methods.has(EXTENDED_CARD_METHOD),
|
|
26
|
+
skills: skillsOfferedTo(serve, reader).map((s) => ({ id: s.id, name: s.name ?? s.id, ...(s.description !== undefined ? { description: s.description } : {}) })),
|
|
26
27
|
};
|
|
27
28
|
}
|
|
29
|
+
export const EXTENDED_CARD_METHOD = "agent/getAuthenticatedExtendedCard";
|
|
30
|
+
export function skillsOfferedTo(serve, reader) {
|
|
31
|
+
return serve.skills.filter((s) => s.audience === undefined || (reader !== undefined && s.audience.includes(reader)));
|
|
32
|
+
}
|
|
33
|
+
function cardReaderOf(req, config) {
|
|
34
|
+
return verifiedIdentitySource(req, config) === undefined ? undefined : gatedPerson(req, config);
|
|
35
|
+
}
|
|
28
36
|
export async function handleA2aServe(req, res, match, ctx) {
|
|
29
37
|
const { deps } = ctx;
|
|
30
38
|
switch (match.decl.id) {
|
|
@@ -35,7 +43,7 @@ export async function handleA2aServe(req, res, match, ctx) {
|
|
|
35
43
|
return;
|
|
36
44
|
}
|
|
37
45
|
res.setHeader(A2A_VERSION_HEADER, A2A_PROTOCOL_VERSION);
|
|
38
|
-
sendJson(res, 200, buildAgentCard(peer.serve));
|
|
46
|
+
sendJson(res, 200, buildAgentCard(peer.serve, undefined, A2A_METHODS));
|
|
39
47
|
return;
|
|
40
48
|
}
|
|
41
49
|
default:
|
|
@@ -58,9 +66,7 @@ const A2A_STATE_BY_RUN_STATUS = {
|
|
|
58
66
|
suspended: null,
|
|
59
67
|
needs_review: null,
|
|
60
68
|
};
|
|
61
|
-
export function a2aStateForRun(run
|
|
62
|
-
if (stale)
|
|
63
|
-
return "failed";
|
|
69
|
+
export function a2aStateForRun(run) {
|
|
64
70
|
if (isParkedRunStatus(run.status))
|
|
65
71
|
return "input-required";
|
|
66
72
|
const mapped = A2A_STATE_BY_RUN_STATUS[run.status];
|
|
@@ -91,8 +97,8 @@ function statusTextForRun(run, state) {
|
|
|
91
97
|
return memo("errorMessage", runPlaneMessage);
|
|
92
98
|
return undefined;
|
|
93
99
|
}
|
|
94
|
-
function taskFromRun(run
|
|
95
|
-
const state = a2aStateForRun(run
|
|
100
|
+
function taskFromRun(run) {
|
|
101
|
+
const state = a2aStateForRun(run);
|
|
96
102
|
const text = statusTextForRun(run, state);
|
|
97
103
|
return {
|
|
98
104
|
kind: "task",
|
|
@@ -153,7 +159,8 @@ function objectiveFromParts(parts) {
|
|
|
153
159
|
return objective;
|
|
154
160
|
}
|
|
155
161
|
const SKILL_METADATA_KEY = "sema.skillId";
|
|
156
|
-
|
|
162
|
+
export const A2A_UNOFFERED_SKILL_MESSAGE = `unknown skill id — params.message.metadata["${SKILL_METADATA_KEY}"] does not name a skill offered to this caller; the skills a caller can name are the ones on the agent card it can read (the public card, or the authenticated extended card)`;
|
|
163
|
+
function skillFromMetadata(metadata, serve, reader) {
|
|
157
164
|
if (metadata === undefined || metadata === null)
|
|
158
165
|
return undefined;
|
|
159
166
|
const meta = asRecord(metadata, "params.message.metadata");
|
|
@@ -161,15 +168,14 @@ function skillFromMetadata(metadata, serve) {
|
|
|
161
168
|
if (raw === undefined)
|
|
162
169
|
return undefined;
|
|
163
170
|
const id = asNonEmptyString(raw, `params.message.metadata["${SKILL_METADATA_KEY}"]`, MAX_SKILL_ID_CHARS);
|
|
164
|
-
const skill = serve.
|
|
171
|
+
const skill = skillsOfferedTo(serve, reader).find((s) => s.id === id);
|
|
165
172
|
if (!skill)
|
|
166
|
-
throw new RpcError(JSONRPC_INVALID_PARAMS,
|
|
173
|
+
throw new RpcError(JSONRPC_INVALID_PARAMS, A2A_UNOFFERED_SKILL_MESSAGE);
|
|
167
174
|
return skill;
|
|
168
175
|
}
|
|
169
|
-
function rpcErrorFromTypedFailure(err
|
|
170
|
-
const where = skillId !== undefined ? `skill ${JSON.stringify(skillId)}` : "this request";
|
|
176
|
+
function rpcErrorFromTypedFailure(err) {
|
|
171
177
|
if (err.status >= 400 && err.status < 500) {
|
|
172
|
-
return new RpcError(JSONRPC_INVALID_PARAMS,
|
|
178
|
+
return new RpcError(JSONRPC_INVALID_PARAMS, "the serving deployment refused this request (its configuration does not currently admit it); the operator's logs carry the reason");
|
|
173
179
|
}
|
|
174
180
|
return new RpcError(JSONRPC_INTERNAL_ERROR, "internal error");
|
|
175
181
|
}
|
|
@@ -191,9 +197,6 @@ function readBlocking(params) {
|
|
|
191
197
|
throw new RpcError(JSONRPC_INVALID_PARAMS, "params.configuration.blocking must be a boolean");
|
|
192
198
|
return c.blocking;
|
|
193
199
|
}
|
|
194
|
-
function isStaleRun(run, runStaleSec) {
|
|
195
|
-
return run.status === "running" && Date.now() - new Date(run.updatedAt).getTime() > runStaleSec * 1000;
|
|
196
|
-
}
|
|
197
200
|
async function waitForRun(ctx, store, res, taskId, budgetMs) {
|
|
198
201
|
const { deps } = ctx;
|
|
199
202
|
const deadline = Date.now() + budgetMs;
|
|
@@ -201,14 +204,15 @@ async function waitForRun(ctx, store, res, taskId, budgetMs) {
|
|
|
201
204
|
for (;;) {
|
|
202
205
|
let run;
|
|
203
206
|
try {
|
|
204
|
-
|
|
207
|
+
const raw = await store.getRun(taskId);
|
|
208
|
+
run = raw ? await runRowAt("run.a2a", store, raw) : null;
|
|
205
209
|
}
|
|
206
210
|
catch (e) {
|
|
207
211
|
deps.logger?.warn?.("a2a_serve_wait_read_failed", { error: e?.message });
|
|
208
212
|
return last;
|
|
209
213
|
}
|
|
210
214
|
last = run ?? last;
|
|
211
|
-
if (run && a2aStateForRun(run
|
|
215
|
+
if (run && a2aStateForRun(run) !== "working")
|
|
212
216
|
return run;
|
|
213
217
|
const left = deadline - Date.now();
|
|
214
218
|
if (left <= 0)
|
|
@@ -231,7 +235,7 @@ async function handleMessageSend({ req, res, ctx, params, serve, runStore }) {
|
|
|
231
235
|
const objective = objectiveFromParts(message.parts);
|
|
232
236
|
const contextId = message.contextId === undefined ? undefined : asString(message.contextId, "params.message.contextId");
|
|
233
237
|
const messageId = asNonEmptyString(message.messageId, "params.message.messageId", MAX_MESSAGE_ID_CHARS);
|
|
234
|
-
const skill = skillFromMetadata(message.metadata, serve);
|
|
238
|
+
const skill = skillFromMetadata(message.metadata, serve, cardReaderOf(req, deps.config));
|
|
235
239
|
const skillId = skill?.id;
|
|
236
240
|
const scenario = skill?.scenario;
|
|
237
241
|
const blocking = readBlocking(params);
|
|
@@ -242,7 +246,7 @@ async function handleMessageSend({ req, res, ctx, params, serve, runStore }) {
|
|
|
242
246
|
.update(contextId ?? "").update("\x1f")
|
|
243
247
|
.update(skillId ?? "")
|
|
244
248
|
.digest("hex");
|
|
245
|
-
const submitter =
|
|
249
|
+
const submitter = gatedSubject(req, deps.config);
|
|
246
250
|
const idem = { key: idemKeyOf(fingerprint, caller, "run"), bodyFingerprint: fingerprint };
|
|
247
251
|
const body = {
|
|
248
252
|
objective,
|
|
@@ -251,9 +255,9 @@ async function handleMessageSend({ req, res, ctx, params, serve, runStore }) {
|
|
|
251
255
|
...(scenario !== undefined ? { scenario } : {}),
|
|
252
256
|
};
|
|
253
257
|
const keyed = (await runStore.getRunByIdem(idem.key).catch(() => undefined)) ?? (await runStore.getRun(body.taskId).catch(() => undefined));
|
|
254
|
-
const replay = keyed ? await replayOfExistingRun(keyed, {
|
|
258
|
+
const replay = keyed ? await replayOfExistingRun(keyed, { subject: submitter, clientTaskId: body.taskId, idem }, "durable", deps, runStore) : undefined;
|
|
255
259
|
if (keyed && replay?.status === 202) {
|
|
256
|
-
return taskFromRun(
|
|
260
|
+
return taskFromRun(await runRowAt("run.a2a", runStore, keyed));
|
|
257
261
|
}
|
|
258
262
|
const inflight = replay === undefined ? ctx.registry.idemCache.peek(inflightKeyOf(idem, "durable", body.taskId)) : undefined;
|
|
259
263
|
let receipt;
|
|
@@ -273,8 +277,10 @@ async function handleMessageSend({ req, res, ctx, params, serve, runStore }) {
|
|
|
273
277
|
typed = e;
|
|
274
278
|
});
|
|
275
279
|
if (!prepared) {
|
|
276
|
-
if (typed)
|
|
277
|
-
|
|
280
|
+
if (typed) {
|
|
281
|
+
deps.logger?.warn?.("a2a_serve_submission_refused", { status: typed.status, ...(typed.code !== undefined ? { errorCode: typed.code } : {}) });
|
|
282
|
+
throw rpcErrorFromTypedFailure(typed);
|
|
283
|
+
}
|
|
278
284
|
return undefined;
|
|
279
285
|
}
|
|
280
286
|
try {
|
|
@@ -294,7 +300,7 @@ async function handleMessageSend({ req, res, ctx, params, serve, runStore }) {
|
|
|
294
300
|
const sessionId = receiptBody.sessionId;
|
|
295
301
|
const run = await waitForRun(ctx, runStore, res, taskId, blocking ? serve.blockingWaitMs : 0);
|
|
296
302
|
if (run)
|
|
297
|
-
return taskFromRun(run
|
|
303
|
+
return taskFromRun(run);
|
|
298
304
|
return {
|
|
299
305
|
kind: "task",
|
|
300
306
|
id: taskId,
|
|
@@ -305,6 +311,8 @@ async function handleMessageSend({ req, res, ctx, params, serve, runStore }) {
|
|
|
305
311
|
function rpcErrorFromRefusedReceipt(receipt) {
|
|
306
312
|
const code = receipt.body?.errorCode;
|
|
307
313
|
const head = `the serving deployment did not accept this submission (it answered ${receipt.status}${typeof code === "string" ? ` ${code}` : ""})`;
|
|
314
|
+
if (receipt.status >= 500)
|
|
315
|
+
return new RpcError(JSONRPC_INTERNAL_ERROR, `${head}; the failure is on the serving side and nothing was started, so the same message can be sent again later`);
|
|
308
316
|
if (isActiveRunConflictBody(receipt.body))
|
|
309
317
|
return new RpcError(JSONRPC_INVALID_PARAMS, `${head}; a session already running a turn must finish or be cancelled before the next message on the same contextId`);
|
|
310
318
|
if (isRunExistsConflictBody(receipt.body))
|
|
@@ -322,15 +330,19 @@ function durableIdempotencyTaskId(scope, messageId) {
|
|
|
322
330
|
async function handleTasksGet({ req, ctx, params, runStore }) {
|
|
323
331
|
const { deps } = ctx;
|
|
324
332
|
const id = asNonEmptyString(params.id, "params.id", MAX_TASK_ID_CHARS);
|
|
325
|
-
const run = await
|
|
333
|
+
const run = await readVisibleRun(protocolEntry(req, deps, "run.a2a", callerOf(req, deps)), runStore, id);
|
|
326
334
|
if (!run)
|
|
327
335
|
throw new RpcError(A2A_TASK_NOT_FOUND, A2A_TASK_NOT_FOUND_MESSAGE);
|
|
328
|
-
return taskFromRun(run
|
|
336
|
+
return taskFromRun(run);
|
|
329
337
|
}
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
338
|
+
async function handleExtendedCard({ req, ctx, serve }) {
|
|
339
|
+
return buildAgentCard(serve, cardReaderOf(req, ctx.deps.config), A2A_METHODS);
|
|
340
|
+
}
|
|
341
|
+
const A2A_METHODS = new Map([
|
|
342
|
+
["message/send", handleMessageSend],
|
|
343
|
+
["tasks/get", handleTasksGet],
|
|
344
|
+
[EXTENDED_CARD_METHOD, handleExtendedCard],
|
|
345
|
+
]);
|
|
334
346
|
export async function handleA2a(req, res, match, ctx) {
|
|
335
347
|
const { deps } = ctx;
|
|
336
348
|
switch (match.decl.id) {
|
|
@@ -347,7 +359,18 @@ export async function handleA2a(req, res, match, ctx) {
|
|
|
347
359
|
const { serve, runStore } = peer;
|
|
348
360
|
const requestedVersion = req.headers[A2A_VERSION_HEADER];
|
|
349
361
|
res.setHeader(A2A_VERSION_HEADER, A2A_PROTOCOL_VERSION);
|
|
350
|
-
|
|
362
|
+
let a2aSubject;
|
|
363
|
+
try {
|
|
364
|
+
a2aSubject = gatedSubject(req, deps.config);
|
|
365
|
+
}
|
|
366
|
+
catch (e) {
|
|
367
|
+
if (!(e instanceof HttpError))
|
|
368
|
+
throw e;
|
|
369
|
+
deps.metrics?.inc("a2a_serve_rejected_total", { reason: "identity_refused" });
|
|
370
|
+
sendHttpError(res, e);
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
if (deps.config.requirePrincipal && !a2aSubject) {
|
|
351
374
|
deps.metrics?.inc("a2a_serve_rejected_total", { reason: "principal_required" });
|
|
352
375
|
sendPrincipalRefusal(res, req, deps.config);
|
|
353
376
|
return;
|
|
@@ -374,7 +397,7 @@ export async function handleA2a(req, res, match, ctx) {
|
|
|
374
397
|
return;
|
|
375
398
|
}
|
|
376
399
|
const method = rpc.method;
|
|
377
|
-
const handler = A2A_METHODS
|
|
400
|
+
const handler = A2A_METHODS.get(method);
|
|
378
401
|
if (!handler) {
|
|
379
402
|
deps.metrics?.inc("a2a_serve_rpc_total", { method: "(unknown)", outcome: "method_not_found" });
|
|
380
403
|
deps.metrics?.inc("a2a_serve_rejected_total", { reason: "method_not_found" });
|
|
@@ -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 * as facts from "../../capability-facts.js";
|
|
4
4
|
import { assertNever } from "../route-ctx.js";
|
|
5
5
|
export const ADMIN_CONFIG_REFRESH_PATH = "/v1/admin/config/refresh";
|
|
@@ -8,7 +8,7 @@ export async function handleAdminConfigRefresh(req, res, match, ctx) {
|
|
|
8
8
|
const { deps } = ctx;
|
|
9
9
|
switch (match.decl.id) {
|
|
10
10
|
case "admin-config-refresh": {
|
|
11
|
-
const principal =
|
|
11
|
+
const principal = gatedPerson(req, deps.config);
|
|
12
12
|
if (deps.config.requirePrincipal && !principal) {
|
|
13
13
|
sendPrincipalRefusal(res, req, deps.config);
|
|
14
14
|
return;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DRAIN_ACTION_ID, readDrainRequest } from "@sema-agent/settings-schema/fleet";
|
|
2
2
|
import { sendJson, sendError } from "../send.js";
|
|
3
|
-
import {
|
|
3
|
+
import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
|
|
4
4
|
import * as facts from "../../capability-facts.js";
|
|
5
5
|
import { fleetScopeOf } from "../../config-types.js";
|
|
6
6
|
import { drainIdentityMismatches } from "../../fleet/drain-entry.js";
|
|
@@ -12,7 +12,7 @@ export async function handleAdminDrain(req, res, match, ctx) {
|
|
|
12
12
|
const { deps } = ctx;
|
|
13
13
|
switch (match.decl.id) {
|
|
14
14
|
case "admin-drain": {
|
|
15
|
-
const principal =
|
|
15
|
+
const principal = gatedPerson(req, deps.config);
|
|
16
16
|
if (deps.config.requirePrincipal && !principal) {
|
|
17
17
|
sendPrincipalRefusal(res, req, deps.config);
|
|
18
18
|
return;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { sendJson, sendError } from "../send.js";
|
|
3
|
-
import {
|
|
3
|
+
import { gatedPerson, explicitOperatorOk, sendOperatorPrincipalsRequired, sendPrincipalRefusal } from "../principal-gate.js";
|
|
4
4
|
import { assertNever } from "../route-ctx.js";
|
|
5
5
|
import * as facts from "../../capability-facts.js";
|
|
6
6
|
import { memoryOptOutPrincipalShapeProblem } from "../../plugins/memory-optout-grant-store-sql.js";
|
|
7
|
+
import { PRINCIPAL_MAX_BYTES } from "../../principal-shape.js";
|
|
7
8
|
export const ADMIN_MEMORY_OPTOUT_PATH = "/v1/admin/memory-optout";
|
|
8
9
|
const PutBodySchema = z.object({ allow: z.boolean(), note: z.string().min(1).max(500).optional() }).strict();
|
|
9
10
|
export async function handleMemoryOptOut(req, res, match, ctx) {
|
|
@@ -11,7 +12,7 @@ export async function handleMemoryOptOut(req, res, match, ctx) {
|
|
|
11
12
|
const target = match.decl.id === "memory-optout-grants-list" || match.decl.id === "memory-optout-put-default"
|
|
12
13
|
? undefined
|
|
13
14
|
: ctx.helpers.safeDecode(match.params.principal);
|
|
14
|
-
const principal =
|
|
15
|
+
const principal = gatedPerson(req, deps.config);
|
|
15
16
|
if (deps.config.requirePrincipal && !principal) {
|
|
16
17
|
sendPrincipalRefusal(res, req, deps.config);
|
|
17
18
|
return;
|
|
@@ -40,7 +41,7 @@ export async function handleMemoryOptOut(req, res, match, ctx) {
|
|
|
40
41
|
}
|
|
41
42
|
const store = fact.store;
|
|
42
43
|
if (target !== undefined && (target === null || memoryOptOutPrincipalShapeProblem(target) !== undefined)) {
|
|
43
|
-
sendError(res, 400, "request.path_malformed",
|
|
44
|
+
sendError(res, 400, "request.path_malformed", `invalid memory opt-out grant principal — the path segment must percent-decode to a non-empty principal of at most ${PRINCIPAL_MAX_BYTES} UTF-8 bytes with no leading/trailing whitespace or control characters (the deployment default row is addressed by PUT on the collection root, not by a path segment)`);
|
|
44
45
|
return;
|
|
45
46
|
}
|
|
46
47
|
switch (match.decl.id) {
|
|
@@ -12,6 +12,9 @@
|
|
|
12
12
|
* · `adoption.destination_unrepresentable` (409):目的地身份装不进这次收编会**派生**出来的某个键
|
|
13
13
|
* (典型:memory 的 `proj:` 键 = 新 tenant 段 + 原有项目段后缀,合起来越过列宽)。与上一条分家的理由:
|
|
14
14
|
* 运维的动作完全不同 —— 那条要去清理另一个 principal 的行,这条要换一个更短的目的地身份。
|
|
15
|
+
* · `adoption.table_missing` (409):这个部署**接线了**某个可选存储面(记忆引擎 DB 后端 / 对象存储上的附件店),库上却没有它的表(表被人删了、或 boot 的建表没跑过)。
|
|
16
|
+
* 与前两条分家:那两条是**数据**事实、落永久终态;这条是**部署**事实 —— 弧不落终态(行停在 INTENT、零 UPDATE),补好表(重启一个副本,boot 会建缺的表)后**重发同一请求**即续。
|
|
17
|
+
* **没接线的可选面不在此列**:缺省 file 记忆引擎 / 没配对象存储的部署上那些表本来就不存在,它们的腿不在回执里(`legs[]` 只列真跑的腿)。
|
|
15
18
|
* · `not_found.adoption` (404):operator 拿着一个不存在的 id 来读。
|
|
16
19
|
*
|
|
17
20
|
* 幂等:同参数重跑秒回**同一份** `AdoptionReceipt`(`immutableReport` 逐字节恒同 —— 它在 phase 6
|