@sema-agent/server 7.146.0 → 7.148.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MIGRATION.md +1423 -24
- package/README.md +21 -8
- package/README.zh-CN.md +15 -9
- package/USAGE.md +537 -216
- package/deploy/facts/lanes.json +7 -0
- package/deploy/sema-up/README.md +18 -7
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/templates/_helpers.tpl +42 -4
- package/deploy/sema-up/chart/templates/server-v4pro.yaml +5 -4
- package/deploy/sema-up/chart/templates/server.yaml +5 -4
- package/deploy/sema-up/chart/values.yaml +4 -3
- package/deploy/sema-up/cluster-up.sh +75 -176
- package/deploy/sema-up/kube-up.sh +29 -49
- package/deploy/sema-up/lib/chart-run.sh +23 -0
- package/deploy/sema-up/lib/dataroot.sh +3 -3
- package/deploy/sema-up/lib/flagshape.sh +4 -0
- package/deploy/sema-up/lib/health.sh +62 -13
- package/deploy/sema-up/lib/helm-values-cluster.py +18 -0
- package/deploy/sema-up/lib/helm-values-kube.py +35 -0
- package/deploy/sema-up/lib/lanes.json +2 -5
- package/deploy/sema-up/lib/regcred.py +8 -0
- package/deploy/sema-up/lib/remote/helm-install.sh +3 -0
- package/deploy/sema-up/lib/remote/image-import.sh +6 -0
- package/deploy/sema-up/lib/remote/machine-precheck.sh +11 -0
- package/deploy/sema-up/lib/remote/region-probe.sh +3 -0
- package/deploy/sema-up/lib/remote/stack-ready.sh +26 -0
- package/deploy/sema-up/lib/remote/vxlan-guard.sh +8 -0
- package/deploy/sema-up/lib/render-stack.py +17 -0
- package/deploy/sema-up/lib/shell-text.sh +87 -0
- package/deploy/sema-up/lib/usage-flags.txt +10 -0
- package/deploy/sema-up/lib/usage-head.txt +1 -0
- package/deploy/sema-up/lib/usage-tail.txt +13 -0
- package/deploy/sema-up/preflight.sh +10 -8
- package/deploy/sema-up/sema-up.sh +26 -48
- package/deploy/sema-up/smoke.sh +7 -6
- package/deploy/sema-up/stack/compose.dataroot.yaml +3 -0
- package/deploy/sema-up/stack/compose.yaml +18 -5
- package/deploy/sema-up/stack/sema-stack-cluster.yaml +25 -3
- package/dist/adoption/plan.d.ts +24 -0
- package/dist/adoption/plan.js +53 -1
- package/dist/adoption/runner.d.ts +10 -1
- package/dist/adoption/runner.js +36 -16
- package/dist/adoption/wire.d.ts +3 -3
- package/dist/approval-card.d.ts +32 -34
- package/dist/approval-gate-currency.js +3 -2
- package/dist/approval-reconciler.d.ts +4 -13
- package/dist/approval-reconciler.js +2 -2
- package/dist/approval.d.ts +16 -14
- package/dist/approval.js +3 -3
- package/dist/audit.d.ts +10 -3
- package/dist/audit.js +17 -9
- package/dist/auth-bridge.d.ts +0 -14
- package/dist/auth-bridge.js +0 -7
- package/dist/auto-mode-face.d.ts +10 -7
- package/dist/auto-mode-face.js +7 -4
- package/dist/background-agent-name.d.ts +19 -1
- package/dist/background-agent-name.js +12 -2
- package/dist/background-session-reap.d.ts +1 -1
- package/dist/bake-runner/main.js +9 -6
- package/dist/bench/s1/arms.js +6 -5
- package/dist/bench/s1/live-deps.js +8 -3
- package/dist/bench/s1/run-firm.js +6 -5
- package/dist/bind-host.d.ts +25 -0
- package/dist/bind-host.js +25 -0
- package/dist/boot/adoption.d.ts +3 -0
- package/dist/boot/adoption.js +1 -0
- package/dist/boot/crash-last.js +2 -1
- package/dist/boot/deployment-mods.d.ts +1 -1
- package/dist/boot/device-lane.js +5 -5
- package/dist/boot/engine-lease.d.ts +12 -11
- package/dist/boot/execution-env.d.ts +19 -8
- package/dist/boot/execution-env.js +80 -62
- package/dist/boot/execution-lane.d.ts +37 -9
- package/dist/boot/execution-lane.js +74 -20
- package/dist/boot/exit-boundary.d.ts +3 -3
- package/dist/boot/exit-boundary.js +6 -5
- package/dist/boot/exit-last.js +2 -1
- package/dist/boot/fatal-exit.d.ts +3 -5
- package/dist/boot/fatal-exit.js +2 -2
- package/dist/boot/governance-seams.d.ts +2 -2
- package/dist/boot/leader.d.ts +15 -0
- package/dist/boot/leader.js +18 -16
- package/dist/boot/memory-boundary.d.ts +11 -11
- package/dist/boot/memory-boundary.js +3 -3
- package/dist/boot/memory-consolidation.d.ts +50 -53
- package/dist/boot/memory-consolidation.js +11 -18
- package/dist/boot/org-memory.js +4 -3
- package/dist/boot/parked-revive-gate.d.ts +1 -1
- package/dist/boot/parked-revive-gate.js +3 -3
- package/dist/boot/reapers.d.ts +4 -3
- package/dist/boot/reapers.js +20 -17
- package/dist/boot/resolve-spec.d.ts +5 -3
- package/dist/boot/resolve-spec.js +133 -165
- package/dist/boot/retention-lane.d.ts +7 -45
- package/dist/boot/retention-lane.js +2 -2
- package/dist/boot/runner-deps.d.ts +28 -7
- package/dist/boot/runner-deps.js +11 -4
- package/dist/boot/runtime-caps.d.ts +2 -2
- package/dist/boot/runtime-caps.js +16 -2
- package/dist/boot/session-faces.d.ts +17 -7
- package/dist/boot/session-faces.js +122 -96
- package/dist/boot/shutdown.d.ts +5 -4
- package/dist/boot/shutdown.js +6 -4
- package/dist/boot/stage-01-config.d.ts +1 -1
- package/dist/boot/stage-01-config.js +14 -2
- package/dist/boot/stage-02-web-admin-pull.d.ts +2 -1
- package/dist/boot/stage-02-web-admin-pull.js +15 -8
- package/dist/boot/stage-03-store-backend.d.ts +4 -1
- package/dist/boot/stage-03-store-backend.js +4 -3
- package/dist/boot/stage-04-stores.d.ts +3 -1
- package/dist/boot/stage-04-stores.js +2 -2
- package/dist/boot/stage-05-execution-env.d.ts +9 -5
- package/dist/boot/stage-05-execution-env.js +5 -5
- package/dist/boot/stage-06-runners.d.ts +13 -15
- package/dist/boot/stage-06-runners.js +24 -18
- package/dist/boot/stage-07-capability-layer.d.ts +14 -11
- package/dist/boot/stage-07-capability-layer.js +9 -12
- package/dist/boot/stage-08-reapers.d.ts +14 -11
- package/dist/boot/stage-08-reapers.js +3 -3
- package/dist/boot/stage-09-leader.d.ts +16 -18
- package/dist/boot/stage-09-leader.js +12 -4
- package/dist/boot/stage-10-http-server.d.ts +16 -18
- package/dist/boot/stage-10-http-server.js +9 -5
- package/dist/boot/store-evidence.d.ts +20 -0
- package/dist/boot/store-evidence.js +13 -0
- package/dist/boot/stores.d.ts +12 -0
- package/dist/boot/stores.js +39 -17
- package/dist/boot/task-list-lane.d.ts +4 -4
- package/dist/boot/web-admin.d.ts +4 -2
- package/dist/boot/web-admin.js +58 -38
- package/dist/boot/webfetch-summarize-lane.d.ts +1 -1
- package/dist/boot-reclaim.d.ts +3 -1
- package/dist/boot-reclaim.js +1 -1
- package/dist/brain.d.ts +7 -18
- package/dist/brain.js +5 -17
- package/dist/budget.js +6 -6
- package/dist/capabilities/center-plugins.d.ts +9 -1
- package/dist/capabilities/center-plugins.js +37 -11
- package/dist/capabilities/center-wiring.js +1 -1
- package/dist/capabilities/composite-members.d.ts +3 -2
- package/dist/capabilities/composite-members.js +3 -2
- package/dist/capabilities/execution-lane.d.ts +7 -7
- package/dist/capabilities/execution-lane.js +2 -2
- package/dist/capabilities/hands-lane.d.ts +1 -1
- package/dist/capabilities/repo-tools.d.ts +2 -0
- package/dist/capabilities/repo-tools.js +14 -12
- package/dist/capabilities/scenarios.d.ts +38 -33
- package/dist/capabilities/scenarios.js +24 -25
- package/dist/capabilities/settings-contract.d.ts +29 -0
- package/dist/capabilities/settings-contract.js +14 -0
- package/dist/capabilities/skills.d.ts +6 -6
- package/dist/capabilities/tool-defer.d.ts +1 -1
- package/dist/capability-facts.d.ts +69 -4
- package/dist/capability-facts.js +77 -5
- package/dist/card-void.d.ts +4 -4
- package/dist/card-void.js +1 -1
- package/dist/center-credential-renewer.d.ts +6 -2
- package/dist/center-credential-renewer.js +10 -5
- package/dist/config-catalog.d.ts +16 -1
- package/dist/config-catalog.js +68 -61
- package/dist/config-dir-trust.d.ts +37 -4
- package/dist/config-dir-trust.js +88 -44
- package/dist/config-invariants.d.ts +58 -4
- package/dist/config-invariants.js +104 -23
- package/dist/config-lkg.d.ts +24 -2
- package/dist/config-lkg.js +22 -9
- package/dist/config-provider.d.ts +9 -9
- package/dist/config-provider.js +25 -108
- package/dist/config-pull-failure.d.ts +50 -0
- package/dist/config-pull-failure.js +48 -0
- package/dist/config-types.d.ts +215 -202
- package/dist/config.d.ts +69 -14
- package/dist/config.js +188 -96
- package/dist/degenerate-instrument.js +1 -1
- package/dist/delegated-session-owner.d.ts +1 -1
- package/dist/deleted-session-ids.d.ts +3 -2
- package/dist/deploy-facts.js +3 -2
- package/dist/deployment-governance.d.ts +3 -3
- package/dist/deployment-shape.d.ts +51 -16
- package/dist/deployment-shape.js +31 -6
- package/dist/egress-redirect.d.ts +25 -7
- package/dist/egress-redirect.js +20 -2
- package/dist/elicitation.d.ts +6 -5
- package/dist/elicitation.js +23 -22
- package/dist/engine-identity.d.ts +28 -0
- package/dist/engine-identity.js +10 -0
- package/dist/entry-problems.d.ts +5 -7
- package/dist/entry-problems.js +1 -1
- package/dist/env-facts.d.ts +7 -5
- package/dist/env-facts.js +12 -7
- package/dist/env-witness.d.ts +7 -0
- package/dist/env-witness.js +16 -0
- package/dist/execution-config-root.d.ts +5 -5
- package/dist/execution-config-root.js +5 -5
- package/dist/execution-env-purpose.d.ts +14 -0
- package/dist/execution-env-purpose.js +29 -0
- package/dist/execution-lane-caps.d.ts +53 -103
- package/dist/execution-lane-caps.js +51 -83
- package/dist/execution-placement.d.ts +65 -9
- package/dist/execution-placement.js +58 -0
- package/dist/field-conflict.d.ts +7 -11
- package/dist/field-conflict.js +3 -3
- package/dist/file-history-capture.d.ts +3 -3
- package/dist/file-history-disclosure.d.ts +2 -2
- package/dist/file-history-disclosure.js +1 -0
- package/dist/fleet/drain-entry.d.ts +17 -10
- package/dist/fleet/drain-entry.js +1 -1
- package/dist/fleet/fleet-bus.d.ts +21 -3
- package/dist/fleet/fleet-bus.js +35 -25
- package/dist/fleet/fleet-reconciler.js +2 -2
- package/dist/fleet/serving-lease.js +6 -7
- package/dist/fleet-client.js +3 -3
- package/dist/fleet-lease.d.ts +0 -1
- package/dist/fleet-lease.js +4 -5
- package/dist/history-anchor.d.ts +42 -0
- package/dist/history-anchor.js +34 -0
- package/dist/hitl-delivery.d.ts +90 -0
- package/dist/hitl-delivery.js +98 -0
- package/dist/hooks/classic-stations.d.ts +8 -11
- package/dist/hooks/classic-stations.js +0 -7
- package/dist/hooks/command-spawn.d.ts +1 -4
- package/dist/hooks/command-spawn.js +0 -11
- package/dist/hooks/hook-llm.d.ts +5 -1
- package/dist/hooks/hook-llm.js +24 -15
- package/dist/hooks/hook-runner.d.ts +119 -65
- package/dist/hooks/hook-runner.js +415 -217
- package/dist/host-lsp-manager.d.ts +22 -8
- package/dist/host-lsp-manager.js +4 -1
- package/dist/http/active-run-conflict.d.ts +2 -43
- package/dist/http/active-run-conflict.js +3 -7
- package/dist/http/admission.d.ts +4 -18
- package/dist/http/admission.js +75 -78
- package/dist/http/approval-sweeps.d.ts +5 -8
- package/dist/http/approval-sweeps.js +55 -30
- package/dist/http/caller-trust.d.ts +8 -10
- package/dist/http/caller-trust.js +1 -2
- package/dist/http/checkpoint-ctx.d.ts +17 -0
- package/dist/http/checkpoint-ctx.js +6 -0
- package/dist/http/claim-heartbeat.d.ts +49 -0
- package/dist/http/claim-heartbeat.js +46 -0
- package/dist/http/claim-latency.d.ts +10 -0
- package/dist/http/claim-latency.js +12 -0
- package/dist/http/claimed-run.d.ts +4 -3
- package/dist/http/dispatch.d.ts +8 -1
- package/dist/http/dispatch.js +77 -31
- package/dist/http/durable-run-leg.d.ts +3 -3
- package/dist/http/durable-run-leg.js +18 -12
- package/dist/http/execution-context.d.ts +18 -42
- package/dist/http/execution-context.js +11 -5
- package/dist/http/health-reader.d.ts +36 -0
- package/dist/http/health-reader.js +21 -0
- package/dist/http/health-self-report.d.ts +9 -9
- package/dist/http/health-self-report.js +4 -4
- package/dist/http/idempotency.d.ts +9 -5
- package/dist/http/idempotency.js +4 -4
- package/dist/http/memory-compliance-failure-reply.d.ts +15 -16
- package/dist/http/memory-compliance-failure-reply.js +7 -2
- package/dist/http/memory-face-fault-reply.d.ts +67 -0
- package/dist/http/memory-face-fault-reply.js +71 -0
- package/dist/http/memory-store-refusal-reply.d.ts +3 -3
- package/dist/http/memory-store-refusal-reply.js +6 -0
- package/dist/http/owner-access.d.ts +391 -56
- package/dist/http/owner-access.js +372 -33
- package/dist/http/principal-gate.d.ts +26 -94
- package/dist/http/principal-gate.js +24 -81
- package/dist/http/refusal-body.d.ts +35 -2
- package/dist/http/refusal-body.js +34 -0
- package/dist/http/request-guards.d.ts +10 -14
- package/dist/http/request-guards.js +34 -68
- package/dist/http/resume-composition.d.ts +37 -0
- package/dist/http/resume-composition.js +18 -0
- package/dist/http/resume-ctx-read.d.ts +35 -12
- package/dist/http/resume-ctx-read.js +25 -6
- package/dist/http/resume-legs.d.ts +24 -24
- package/dist/http/resume-legs.js +260 -171
- package/dist/http/retired-skill-manifest.d.ts +1 -1
- package/dist/http/rewind-files-reply.d.ts +34 -0
- package/dist/http/rewind-files-reply.js +36 -0
- package/dist/http/route-ctx.d.ts +56 -47
- package/dist/http/route-table.js +2 -0
- package/dist/http/routes/a2a-serve.d.ts +43 -5
- package/dist/http/routes/a2a-serve.js +58 -37
- package/dist/http/routes/admin-config-refresh.js +2 -2
- package/dist/http/routes/admin-drain.js +2 -2
- package/dist/http/routes/admin-memory-optout.js +4 -3
- package/dist/http/routes/adoption.d.ts +3 -0
- package/dist/http/routes/adoption.js +17 -10
- package/dist/http/routes/agents-roster.js +13 -7
- package/dist/http/routes/approvals-assistant.js +73 -88
- package/dist/http/routes/attachments.js +2 -2
- package/dist/http/routes/background.d.ts +3 -3
- package/dist/http/routes/background.js +9 -17
- package/dist/http/routes/capabilities.js +23 -20
- package/dist/http/routes/config-catalog.js +2 -2
- package/dist/http/routes/devices.d.ts +3 -3
- package/dist/http/routes/devices.js +5 -5
- package/dist/http/routes/diagnostics.d.ts +27 -3
- package/dist/http/routes/diagnostics.js +27 -21
- package/dist/http/routes/engine.js +2 -2
- package/dist/http/routes/fleet.js +5 -3
- package/dist/http/routes/images.js +10 -6
- package/dist/http/routes/leader.d.ts +7 -2
- package/dist/http/routes/leader.js +12 -3
- package/dist/http/routes/mcp-reconnect.d.ts +1 -1
- package/dist/http/routes/mcp-reconnect.js +7 -15
- package/dist/http/routes/memory-bundle.js +4 -7
- package/dist/http/routes/memory-compliance.js +4 -4
- package/dist/http/routes/memory-consolidation.js +6 -9
- package/dist/http/routes/memory-origin.d.ts +3 -1
- package/dist/http/routes/memory-origin.js +7 -8
- package/dist/http/routes/memory-policy.js +17 -12
- package/dist/http/routes/notify-wake.js +12 -20
- package/dist/http/routes/observability.js +3 -3
- package/dist/http/routes/principal-inbox.d.ts +1 -1
- package/dist/http/routes/principal-inbox.js +2 -2
- package/dist/http/routes/projects.d.ts +70 -0
- package/dist/http/routes/projects.js +87 -0
- package/dist/http/routes/retention-ops.js +6 -9
- package/dist/http/routes/rules.js +50 -7
- package/dist/http/routes/run-memory-capture.d.ts +2 -2
- package/dist/http/routes/run-memory-capture.js +6 -12
- package/dist/http/routes/run-permission-mode.d.ts +2 -2
- package/dist/http/routes/run-permission-mode.js +10 -17
- package/dist/http/routes/runs.js +148 -233
- package/dist/http/routes/session-memory-sync.d.ts +2 -2
- package/dist/http/routes/session-memory-sync.js +7 -13
- package/dist/http/routes/session-sync.d.ts +4 -2
- package/dist/http/routes/session-sync.js +48 -30
- package/dist/http/routes/sessions-list.d.ts +3 -3
- package/dist/http/routes/sessions-list.js +9 -9
- package/dist/http/routes/sessions.d.ts +7 -1
- package/dist/http/routes/sessions.js +177 -112
- package/dist/http/routes/shared-memory.js +6 -6
- package/dist/http/routes/side-query.js +2 -2
- package/dist/http/routes/tasks.js +144 -122
- package/dist/http/routes/trace-usage.d.ts +0 -12
- package/dist/http/routes/trace-usage.js +40 -46
- package/dist/http/routes/workflows.d.ts +39 -4
- package/dist/http/routes/workflows.js +42 -14
- package/dist/http/run-concurrency-cap.d.ts +20 -12
- package/dist/http/run-concurrency-cap.js +39 -26
- package/dist/http/run-read-face.d.ts +3 -5
- package/dist/http/run-read-face.js +8 -13
- package/dist/http/send.d.ts +12 -3
- package/dist/http/send.js +42 -6
- package/dist/http/server.d.ts +63 -50
- package/dist/http/server.js +52 -16
- package/dist/http/sse-log.d.ts +17 -10
- package/dist/http/sse-log.js +7 -7
- package/dist/http/stored-body-replay.d.ts +17 -3
- package/dist/http/stored-body-replay.js +11 -2
- package/dist/http/submit-ctx.d.ts +16 -8
- package/dist/http/submit-ctx.js +6 -2
- package/dist/http/submit-replay.d.ts +19 -6
- package/dist/http/submit-replay.js +18 -6
- package/dist/http/sync-submit-body.d.ts +3 -4
- package/dist/http/sync-submit-body.js +4 -5
- package/dist/http/wire-types.d.ts +23 -13
- package/dist/identity-source.d.ts +36 -5
- package/dist/identity-source.js +27 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.js +2 -1
- package/dist/instruction-source-notice.d.ts +1 -1
- package/dist/key-resolver.d.ts +32 -0
- package/dist/key-resolver.js +23 -9
- package/dist/leader/diffup.js +2 -1
- package/dist/leader/endpoint.d.ts +26 -5
- package/dist/leader/endpoint.js +154 -14
- package/dist/leader/fanout.d.ts +3 -0
- package/dist/leader/fanout.js +78 -63
- package/dist/leader/leader.d.ts +16 -0
- package/dist/leader/leader.js +43 -3
- package/dist/leader/merge.d.ts +9 -1
- package/dist/leader/merge.js +16 -1
- package/dist/leader/repair-wire.js +1 -1
- package/dist/leader/wire.d.ts +36 -3
- package/dist/leader/wire.js +59 -18
- package/dist/lsp-evict.d.ts +6 -4
- package/dist/lsp-evict.js +2 -3
- package/dist/memory-embedder-reembed.d.ts +38 -0
- package/dist/memory-embedder-reembed.js +20 -0
- package/dist/memory-incident-sink.d.ts +0 -28
- package/dist/memory-incident-sink.js +5 -0
- package/dist/memory-operator-faces.d.ts +5 -4
- package/dist/memory-operator-faces.js +1 -1
- package/dist/memory-scope.d.ts +31 -4
- package/dist/memory-scope.js +65 -16
- package/dist/memory-store-refusal.d.ts +20 -4
- package/dist/memory-store-refusal.js +1 -1
- package/dist/memory-sync-client.d.ts +5 -2
- package/dist/memory-sync-client.js +19 -14
- package/dist/memory-sync.js +1 -1
- package/dist/model-compat.d.ts +51 -28
- package/dist/model-compat.js +55 -23
- package/dist/model-context-window.d.ts +18 -0
- package/dist/model-context-window.js +2 -0
- package/dist/model-entry-headers.d.ts +46 -4
- package/dist/model-entry-headers.js +2 -2
- package/dist/model-entry-refusal.d.ts +46 -17
- package/dist/model-entry-refusal.js +47 -27
- package/dist/model-plane-face.d.ts +19 -11
- package/dist/model-plane-face.js +9 -1
- package/dist/model-plane-probe.d.ts +2 -0
- package/dist/model-plane-probe.js +17 -0
- package/dist/model-provider.d.ts +3 -3
- package/dist/model-route-endpoint.d.ts +9 -5
- package/dist/model-route-endpoint.js +29 -7
- package/dist/model-select.d.ts +16 -0
- package/dist/model-select.js +4 -0
- package/dist/mountinfo.d.ts +37 -0
- package/dist/mountinfo.js +47 -0
- package/dist/namespaced-rule-name.d.ts +28 -2
- package/dist/namespaced-rule-name.js +10 -1
- package/dist/net-address.d.ts +1 -1
- package/dist/observability/corrupt-read-seat.d.ts +4 -4
- package/dist/observability/corrupt-read-seat.js +5 -3
- package/dist/observability/fail-open.d.ts +75 -47
- package/dist/observability/fail-open.js +77 -47
- package/dist/observability/logger.d.ts +22 -1
- package/dist/observability/logger.js +89 -12
- package/dist/observability/metrics.d.ts +2 -0
- package/dist/observability/metrics.js +5 -4
- package/dist/observability/otel-exporter.js +2 -1
- package/dist/observability/principal-context.d.ts +14 -7
- package/dist/observability/principal-context.js +8 -3
- package/dist/observability/run-terminal.d.ts +7 -1
- package/dist/observability/run-terminal.js +5 -2
- package/dist/observability/secret-env-scrub.d.ts +30 -4
- package/dist/observability/secret-env-scrub.js +15 -3
- package/dist/orchestration/hardened-vm-runner.d.ts +1 -0
- package/dist/orchestration/hardened-vm-runner.js +11 -5
- package/dist/orchestration/hardened-vm-worker-runner.d.ts +0 -14
- package/dist/orchestration/hardened-vm-worker-runner.js +5 -0
- package/dist/orchestration/hardened-vm-worker.js +2 -1
- package/dist/orchestration/workflow-agent-session-index.d.ts +7 -12
- package/dist/orchestration/workflow-agent-session-index.js +1 -6
- package/dist/orchestration/workflow-completion-inbox.d.ts +29 -9
- package/dist/orchestration/workflow-completion-inbox.js +65 -46
- package/dist/org-delivery-gate.d.ts +5 -4
- package/dist/org-delivery-gate.js +7 -6
- package/dist/org-memory-admission.d.ts +5 -2
- package/dist/org-memory-admission.js +25 -10
- package/dist/outbound-dispatcher.d.ts +1 -1
- package/dist/outbound-dispatcher.js +6 -12
- package/dist/owner-brands.d.ts +81 -0
- package/dist/owner-brands.js +42 -0
- package/dist/owner-faces.d.ts +531 -0
- package/dist/owner-faces.js +126 -0
- package/dist/parked-decide.d.ts +100 -31
- package/dist/parked-decide.js +162 -48
- package/dist/parked-revive-surface.d.ts +14 -4
- package/dist/parked-revive-surface.js +5 -4
- package/dist/peer-directory.d.ts +6 -8
- package/dist/peer-directory.js +3 -2
- package/dist/permission-rule-vocab.d.ts +53 -8
- package/dist/permission-rule-vocab.js +30 -2
- package/dist/plugins/adoption-log-sql.d.ts +0 -22
- package/dist/plugins/adoption-log-sql.js +5 -3
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.d.ts +7 -0
- package/dist/plugins/approval-ask-retired-delete-by-task-m50.js +17 -0
- package/dist/plugins/approval-ask-store-file.d.ts +28 -9
- package/dist/plugins/approval-ask-store-file.js +74 -18
- package/dist/plugins/approval-ask-store-memory.d.ts +17 -7
- package/dist/plugins/approval-ask-store-memory.js +35 -12
- package/dist/plugins/approval-ask-store-sql.d.ts +42 -20
- package/dist/plugins/approval-ask-store-sql.js +44 -11
- package/dist/plugins/approval-exemption-skill-m46.d.ts +20 -0
- package/dist/plugins/approval-exemption-skill-m46.js +25 -0
- package/dist/plugins/approval-exemption-store.d.ts +6 -1
- package/dist/plugins/approval-exemption-store.js +14 -0
- package/dist/plugins/approval-nonce-store.d.ts +39 -12
- package/dist/plugins/approval-nonce-store.js +72 -23
- package/dist/plugins/blob-backend.d.ts +40 -195
- package/dist/plugins/blob-backend.js +41 -234
- package/dist/plugins/caching-session-store.d.ts +22 -5
- package/dist/plugins/caching-session-store.js +43 -4
- package/dist/plugins/checkpoint-index-columns.d.ts +33 -6
- package/dist/plugins/checkpoint-index-columns.js +39 -3
- package/dist/plugins/checkpoint-store-face.d.ts +84 -11
- package/dist/plugins/checkpoint-store-face.js +18 -1
- package/dist/plugins/device-store-sql.d.ts +2 -2
- package/dist/plugins/device-store-sql.js +6 -10
- package/dist/plugins/ensure-index.d.ts +13 -1
- package/dist/plugins/ensure-index.js +154 -21
- package/dist/plugins/ensure-schema-lock-policy.d.ts +0 -15
- package/dist/plugins/ensure-schema-lock-policy.js +3 -2
- package/dist/plugins/execution-lane-rename-m40.d.ts +20 -0
- package/dist/plugins/execution-lane-rename-m40.js +10 -0
- package/dist/plugins/execution-placement-sql.d.ts +63 -88
- package/dist/plugins/execution-placement-sql.js +94 -54
- package/dist/plugins/file-run-store.d.ts +89 -35
- package/dist/plugins/file-run-store.js +197 -142
- package/dist/plugins/host-platform.d.ts +24 -3
- package/dist/plugins/host-platform.js +15 -1
- package/dist/plugins/image-bake-store-sql.js +2 -0
- package/dist/plugins/imported-layer-root-retirement.d.ts +19 -10
- package/dist/plugins/imported-layer-root-retirement.js +4 -8
- package/dist/plugins/inbox-payload-column.d.ts +14 -0
- package/dist/plugins/inbox-payload-column.js +13 -0
- package/dist/plugins/k8s-pod-reaper.d.ts +1 -3
- package/dist/plugins/k8s-pod-reaper.js +0 -1
- package/dist/plugins/leader-run-store-sql.d.ts +22 -0
- package/dist/plugins/leader-run-store-sql.js +34 -4
- package/dist/plugins/local-checkpoint-store.d.ts +63 -23
- package/dist/plugins/local-checkpoint-store.js +204 -81
- package/dist/plugins/local-data-dir-modes-m39.d.ts +48 -0
- package/dist/plugins/local-data-dir-modes-m39.js +183 -0
- package/dist/plugins/local-docker-capacity.d.ts +93 -0
- package/dist/plugins/local-docker-capacity.js +194 -0
- package/dist/plugins/local-docker-reaper.d.ts +92 -0
- package/dist/plugins/local-docker-reaper.js +102 -0
- package/dist/plugins/local-engine-high-water.d.ts +13 -0
- package/dist/plugins/local-engine-high-water.js +62 -0
- package/dist/plugins/local-session-store.d.ts +442 -143
- package/dist/plugins/local-session-store.js +941 -289
- package/dist/plugins/local-session-window.d.ts +3 -2
- package/dist/plugins/local-session-window.js +3 -2
- package/dist/plugins/local-sidecar-quarantine.js +3 -2
- package/dist/plugins/local-task-attachment-store.d.ts +20 -1
- package/dist/plugins/local-task-attachment-store.js +32 -12
- package/dist/plugins/memory-embedder-fingerprint.d.ts +33 -10
- package/dist/plugins/memory-embedder-fingerprint.js +52 -12
- package/dist/plugins/memory-embedder.d.ts +1 -1
- package/dist/plugins/memory-embedder.js +11 -9
- package/dist/plugins/memory-engine-pg.d.ts +7 -5
- package/dist/plugins/memory-engine-pg.js +18 -9
- package/dist/plugins/memory-engine-sql-apply.d.ts +21 -8
- package/dist/plugins/memory-engine-sql-apply.js +7 -9
- package/dist/plugins/memory-engine-tidb.d.ts +12 -7
- package/dist/plugins/memory-engine-tidb.js +18 -10
- package/dist/plugins/memory-optout-grant-store-sql.d.ts +1 -1
- package/dist/plugins/memory-optout-grant-store-sql.js +3 -3
- package/dist/plugins/memory-run-store.d.ts +39 -27
- package/dist/plugins/memory-run-store.js +72 -70
- package/dist/plugins/one-time-migration-marker.d.ts +10 -0
- package/dist/plugins/one-time-migration-marker.js +7 -0
- package/dist/plugins/one-time-migrations.d.ts +325 -74
- package/dist/plugins/one-time-migrations.js +705 -230
- package/dist/plugins/org-delivery-quota-store.js +2 -1
- package/dist/plugins/owner-only-file-mode.d.ts +29 -0
- package/dist/plugins/owner-only-file-mode.js +141 -0
- package/dist/plugins/permission-rule-store-file.d.ts +11 -11
- package/dist/plugins/permission-rule-store-file.js +14 -2
- package/dist/plugins/permission-rule-store-sql.d.ts +4 -63
- package/dist/plugins/permission-rule-store-sql.js +6 -86
- package/dist/plugins/pg-pool.d.ts +3 -32
- package/dist/plugins/pg-pool.js +27 -11
- package/dist/plugins/release-version.d.ts +20 -0
- package/dist/plugins/release-version.js +28 -0
- package/dist/plugins/remote-env-adb.d.ts +20 -4
- package/dist/plugins/remote-env-adb.js +39 -11
- package/dist/plugins/remote-env-e2b.d.ts +19 -28
- package/dist/plugins/remote-env-e2b.js +40 -29
- package/dist/plugins/remote-env-host.d.ts +11 -10
- package/dist/plugins/remote-env-host.js +40 -27
- package/dist/plugins/remote-env-k8s.d.ts +45 -47
- package/dist/plugins/remote-env-k8s.js +122 -62
- package/dist/plugins/remote-env-local-docker.d.ts +152 -15
- package/dist/plugins/remote-env-local-docker.js +370 -75
- package/dist/plugins/remote-env-ssh.d.ts +8 -2
- package/dist/plugins/remote-env-ssh.js +26 -24
- package/dist/plugins/remote-scratchpad.js +4 -0
- package/dist/plugins/remote-shell.d.ts +59 -30
- package/dist/plugins/remote-shell.js +175 -62
- package/dist/plugins/retention-declaration.d.ts +37 -0
- package/dist/plugins/retention-declaration.js +9 -0
- package/dist/plugins/retention-deployment.d.ts +158 -0
- package/dist/plugins/retention-deployment.js +119 -0
- package/dist/plugins/retention-lane-store-sql.d.ts +74 -4
- package/dist/plugins/retention-lane-store-sql.js +103 -1
- package/dist/plugins/retention-sql.d.ts +29 -0
- package/dist/plugins/retention-sql.js +8 -0
- package/dist/plugins/run-preview-m45.d.ts +11 -0
- package/dist/plugins/run-preview-m45.js +19 -0
- package/dist/plugins/run-store-sql.d.ts +56 -68
- package/dist/plugins/run-store-sql.js +127 -116
- package/dist/plugins/s3-answer.d.ts +2 -1
- package/dist/plugins/sandbox-reaper.d.ts +26 -0
- package/dist/plugins/sandbox-reaper.js +2 -0
- package/dist/plugins/scenario-prefix-switch-m42.d.ts +54 -0
- package/dist/plugins/scenario-prefix-switch-m42.js +55 -0
- package/dist/plugins/scheduler-support.d.ts +16 -1
- package/dist/plugins/scheduler-support.js +22 -2
- package/dist/plugins/schema-consistency.d.ts +42 -15
- package/dist/plugins/schema-consistency.js +213 -13
- package/dist/plugins/schema-drift-sentence.d.ts +4 -1
- package/dist/plugins/schema-drift-sentence.js +4 -4
- package/dist/plugins/schema-ensure-legs.d.ts +10 -1
- package/dist/plugins/schema-ensure-legs.js +12 -2
- package/dist/plugins/schema-indexes.js +3 -0
- package/dist/plugins/schema-live-columns.d.ts +14 -5
- package/dist/plugins/schema-live-columns.js +10 -10
- package/dist/plugins/send-user-file.js +2 -1
- package/dist/plugins/session-birth.d.ts +37 -0
- package/dist/plugins/session-birth.js +38 -0
- package/dist/plugins/session-epoch-anchor.d.ts +40 -12
- package/dist/plugins/session-epoch-anchor.js +33 -11
- package/dist/plugins/session-ext-table.d.ts +98 -0
- package/dist/plugins/session-ext-table.js +134 -0
- package/dist/plugins/session-fork.d.ts +16 -2
- package/dist/plugins/session-fork.js +3 -0
- package/dist/plugins/session-ownership.d.ts +1 -1
- package/dist/plugins/session-placement.d.ts +22 -16
- package/dist/plugins/session-placement.js +15 -12
- package/dist/plugins/session-row-sql.d.ts +20 -7
- package/dist/plugins/session-row-sql.js +16 -8
- package/dist/plugins/session-run-rollup.d.ts +29 -0
- package/dist/plugins/session-run-rollup.js +40 -0
- package/dist/plugins/session-store-sql.d.ts +157 -0
- package/dist/plugins/session-store-sql.js +398 -0
- package/dist/plugins/session-withdraw-sql.d.ts +36 -0
- package/dist/plugins/session-withdraw-sql.js +42 -0
- package/dist/plugins/session-workspace-cell.d.ts +2 -2
- package/dist/plugins/session-workspace-cell.js +2 -2
- package/dist/plugins/shared-memory-store-sql.d.ts +10 -69
- package/dist/plugins/shared-memory-store-sql.js +15 -14
- package/dist/plugins/shell-sentinel-owner-m48.d.ts +20 -0
- package/dist/plugins/shell-sentinel-owner-m48.js +3 -0
- package/dist/plugins/snapshot-bucket-presence.d.ts +2 -1
- package/dist/plugins/snapshot-bucket-presence.js +1 -1
- package/dist/plugins/sql-driver.d.ts +24 -8
- package/dist/plugins/sql-driver.js +43 -9
- package/dist/plugins/sql-errors.d.ts +35 -5
- package/dist/plugins/sql-errors.js +55 -3
- package/dist/plugins/sql-json-column.d.ts +8 -7
- package/dist/plugins/sql-json-column.js +10 -6
- package/dist/plugins/store-backend.d.ts +114 -18
- package/dist/plugins/store-backend.js +340 -87
- package/dist/plugins/store-contracts.d.ts +97 -30
- package/dist/plugins/store-contracts.js +23 -1
- package/dist/plugins/store-fault.d.ts +28 -2
- package/dist/plugins/store-fault.js +20 -2
- package/dist/plugins/task-attachment-store.d.ts +21 -11
- package/dist/plugins/task-attachment-store.js +37 -19
- package/dist/plugins/task-list-store-sql.d.ts +1 -1
- package/dist/plugins/text-column-capacity.d.ts +21 -0
- package/dist/plugins/text-column-capacity.js +5 -0
- package/dist/plugins/tidb-pool.d.ts +3 -2
- package/dist/plugins/tidb-pool.js +42 -39
- package/dist/plugins/user-input-ledger-sql.d.ts +1 -1
- package/dist/plugins/web-search.js +5 -3
- package/dist/plugins/workflow-run-store-sql.d.ts +6 -1
- package/dist/plugins/workflow-run-store-sql.js +11 -5
- package/dist/principal-jwt.d.ts +4 -4
- package/dist/principal-jwt.js +20 -5
- package/dist/principal-shape.d.ts +41 -0
- package/dist/principal-shape.js +19 -0
- package/dist/question.d.ts +13 -23
- package/dist/question.js +21 -39
- package/dist/read-face-posture.d.ts +6 -6
- package/dist/read-face-posture.js +2 -2
- package/dist/request-declaration-refusal.d.ts +35 -12
- package/dist/request-declaration-refusal.js +21 -9
- package/dist/request-form.d.ts +58 -0
- package/dist/request-form.js +72 -0
- package/dist/request-image-urls.d.ts +8 -2
- package/dist/request-image-urls.js +2 -1
- package/dist/request-images.d.ts +20 -0
- package/dist/request-images.js +59 -0
- package/dist/request-key-closure.d.ts +6 -7
- package/dist/request-key-closure.js +15 -2
- package/dist/request-value-closure.d.ts +5 -5
- package/dist/request-value-closure.js +1 -1
- package/dist/resource-suspend.d.ts +7 -16
- package/dist/resource-suspend.js +1 -1
- package/dist/retired-name-host-notice.d.ts +21 -0
- package/dist/retired-name-host-notice.js +12 -0
- package/dist/rule-entry-list.d.ts +2 -2
- package/dist/rule-entry-list.js +3 -4
- package/dist/rule-issue-reading.d.ts +58 -0
- package/dist/rule-issue-reading.js +14 -0
- package/dist/rules-consent.d.ts +46 -16
- package/dist/rules-consent.js +102 -53
- package/dist/run-acceptance.d.ts +3 -1
- package/dist/run-acceptance.js +3 -0
- package/dist/run-local.d.ts +14 -6
- package/dist/run-local.js +109 -93
- package/dist/run-stale-default.d.ts +7 -0
- package/dist/run-stale-default.js +2 -0
- package/dist/runs.d.ts +73 -44
- package/dist/runs.js +65 -43
- package/dist/runtime-caps-resolver.d.ts +36 -14
- package/dist/runtime-caps-resolver.js +31 -14
- package/dist/runtime-governance.d.ts +2 -2
- package/dist/runtime-governance.js +5 -3
- package/dist/sealed-key-layout.d.ts +12 -6
- package/dist/sealed-key-layout.js +5 -1
- package/dist/sealed-key.d.ts +12 -2
- package/dist/sealed-key.js +116 -26
- package/dist/security.d.ts +133 -161
- package/dist/security.js +163 -59
- package/dist/sema-config-dir.d.ts +20 -0
- package/dist/sema-config-dir.js +27 -2
- package/dist/server-secret-env.d.ts +23 -5
- package/dist/server-secret-env.js +14 -4
- package/dist/service-version.d.ts +2 -1
- package/dist/service-version.js +2 -2
- package/dist/session-children-retire.d.ts +7 -5
- package/dist/session-children-retire.js +7 -2
- package/dist/session-deletion.d.ts +88 -0
- package/dist/session-deletion.js +8 -0
- package/dist/session-erase.d.ts +145 -0
- package/dist/session-erase.js +115 -0
- package/dist/session-error-wire.d.ts +6 -6
- package/dist/session-error-wire.js +1 -1
- package/dist/session-incarnation.d.ts +60 -10
- package/dist/session-incarnation.js +19 -2
- package/dist/session-policy-wire.d.ts +6 -3
- package/dist/session-policy-wire.js +11 -1
- package/dist/session-resident-background.d.ts +29 -47
- package/dist/session-resident-background.js +77 -8
- package/dist/session-row.d.ts +3 -2
- package/dist/session-rules-seat.d.ts +12 -0
- package/dist/session-rules-seat.js +19 -0
- package/dist/session-sync-kernel.d.ts +1 -1
- package/dist/session-titler.d.ts +7 -15
- package/dist/session-titler.js +1 -1
- package/dist/session-workspace.d.ts +11 -2
- package/dist/session-workspace.js +5 -0
- package/dist/sighup-idle.d.ts +1 -1
- package/dist/spec-fields.d.ts +57 -3
- package/dist/spec-fields.js +72 -51
- package/dist/store-posture.d.ts +138 -21
- package/dist/store-posture.js +188 -3
- package/dist/stored-request-hooks-m20.d.ts +3 -2
- package/dist/stored-request-hooks-m20.js +21 -16
- package/dist/stores-sql/background-agent-store-sql.d.ts +11 -2
- package/dist/stores-sql/background-agent-store-sql.js +73 -20
- package/dist/stores-sql/blob-index-sql.d.ts +148 -0
- package/dist/stores-sql/blob-index-sql.js +154 -0
- package/dist/stores-sql/checkpoint-store-sql.d.ts +34 -29
- package/dist/stores-sql/checkpoint-store-sql.js +86 -71
- package/dist/{plugins → stores-sql}/file-history-store-sql.d.ts +23 -11
- package/dist/{plugins → stores-sql}/file-history-store-sql.js +23 -18
- package/dist/stores-sql/mailbox-store-sql.d.ts +7 -4
- package/dist/stores-sql/mailbox-store-sql.js +31 -32
- package/dist/{plugins → stores-sql}/pg-session-storage.d.ts +30 -81
- package/dist/{plugins → stores-sql}/pg-session-storage.js +123 -244
- package/dist/{plugins → stores-sql}/retention-store-sql.d.ts +197 -223
- package/dist/{plugins → stores-sql}/retention-store-sql.js +148 -207
- package/dist/{plugins → stores-sql}/session-event-payload.d.ts +1 -1
- package/dist/{plugins → stores-sql}/session-event-payload.js +1 -1
- package/dist/stores-sql/session-policy-store-sql.d.ts +33 -11
- package/dist/stores-sql/session-policy-store-sql.js +44 -36
- package/dist/stores-sql/session-write-hooks.d.ts +65 -0
- package/dist/stores-sql/session-write-hooks.js +2 -0
- package/dist/{plugins → stores-sql}/tidb-session-storage.d.ts +14 -15
- package/dist/{plugins → stores-sql}/tidb-session-storage.js +22 -28
- package/dist/{plugins → stores-sql}/tidb-session-store.d.ts +67 -138
- package/dist/{plugins → stores-sql}/tidb-session-store.js +130 -200
- package/dist/stores-sql/tool-result-store-sql.d.ts +1 -1
- package/dist/stores-sql/tool-result-store-sql.js +1 -1
- package/dist/stores-sql/windowed-session-storage.d.ts +61 -0
- package/dist/stores-sql/windowed-session-storage.js +70 -0
- package/dist/submission-exit.d.ts +50 -0
- package/dist/submission-exit.js +108 -0
- package/dist/task-a2a.d.ts +7 -1
- package/dist/task-a2a.js +18 -17
- package/dist/task-cwd.d.ts +31 -3
- package/dist/task-cwd.js +25 -1
- package/dist/task-mcp.d.ts +11 -3
- package/dist/task-mcp.js +16 -19
- package/dist/task-settings.d.ts +23 -14
- package/dist/task-settings.js +35 -13
- package/dist/terminal.d.ts +25 -43
- package/dist/terminal.js +31 -11
- package/dist/tool-approval.d.ts +152 -137
- package/dist/tool-approval.js +199 -199
- package/dist/trace/core-keyset-guard.d.ts +22 -9
- package/dist/trace/core-vocab-wire.d.ts +95 -0
- package/dist/trace/core-vocab-wire.js +15 -0
- package/dist/trace/engine-notice-wire.d.ts +1 -1
- package/dist/trace/engine-notice-wire.js +2 -0
- package/dist/trace/exit-seat.d.ts +52 -4
- package/dist/trace/exit-seat.js +43 -36
- package/dist/trace/extension-call-face.d.ts +3 -2
- package/dist/trace/extension-call-face.js +3 -1
- package/dist/trace/ledger-events.d.ts +4 -7
- package/dist/trace/ledger-sink.d.ts +1 -30
- package/dist/trace/ledger-sink.js +0 -11
- package/dist/trace/model-segment.d.ts +5 -5
- package/dist/trace/model-segment.js +5 -5
- package/dist/trace/project.d.ts +88 -58
- package/dist/trace/project.js +64 -28
- package/dist/trace/redact.d.ts +124 -28
- package/dist/trace/redact.js +936 -328
- package/dist/trace/self-minted-wire.d.ts +750 -29
- package/dist/trace/self-minted-wire.js +262 -25
- package/dist/trace/sema-provenance.d.ts +45 -41
- package/dist/trace/sema-provenance.js +81 -10
- package/dist/trace/task-notification-facets.d.ts +70 -2
- package/dist/trace/task-notification-facets.js +71 -1
- package/dist/trace/wire-projection-faces.d.ts +43 -8
- package/dist/trace/wire-projection-faces.js +28 -3
- package/dist/unread-request-members.d.ts +66 -0
- package/dist/unread-request-members.js +41 -0
- package/dist/upstream-body.d.ts +23 -0
- package/dist/upstream-body.js +16 -0
- package/dist/url-refusal.d.ts +3 -3
- package/dist/url-refusal.js +11 -4
- package/dist/user-authored-text.d.ts +1 -1
- package/dist/user-input-ledger.d.ts +7 -8
- package/dist/user-input-ledger.js +1 -1
- package/dist/web-admin-client/apply-effective.d.ts +6 -3
- package/dist/web-admin-client/apply-effective.js +33 -40
- package/dist/web-admin-client/apply-ledger.d.ts +16 -7
- package/dist/web-admin-client/apply-ledger.js +5 -2
- package/dist/web-admin-client/candidate-gate.d.ts +35 -3
- package/dist/web-admin-client/candidate-gate.js +53 -5
- package/dist/web-admin-client/center-request.d.ts +6 -3
- package/dist/web-admin-client/center-request.js +17 -16
- package/dist/web-admin-client/effective-keys.d.ts +1 -1
- package/dist/web-admin-client/effective-keys.js +1 -2
- package/dist/web-admin-client/entry-metadata.d.ts +8 -0
- package/dist/web-admin-client/entry-metadata.js +13 -0
- package/dist/web-admin-client/facade.d.ts +1 -1
- package/dist/web-admin-client/http-client.d.ts +2 -1
- package/dist/web-admin-client/http-client.js +40 -13
- package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
- package/dist/web-admin-client/mcp-revocation.js +2 -1
- package/dist/web-admin-client/read-warnings.d.ts +1 -0
- package/dist/web-admin-client/read-warnings.js +1 -0
- package/dist/web-admin-client/restart-signal.js +13 -6
- package/dist/web-admin-client/skills-mcp.d.ts +22 -8
- package/dist/web-admin-client/skills-mcp.js +26 -21
- package/dist/web-admin-client/types.d.ts +35 -51
- package/dist/workspace-space.d.ts +3 -2
- package/docs/DEVICE-EXECUTOR-PROTOCOL.md +4 -4
- package/package.json +16 -12
- package/scripts/drain-check-local.mjs +118 -173
- package/scripts/drain-check.mysql.sql +20 -16
- package/scripts/drain-check.pg.sql +20 -16
- package/wire-changes/server@7.147.0.json +813 -0
- package/wire-changes/server@7.148.0.json +1517 -0
- package/dist/http/memory-control-plane-corrupt-reply.d.ts +0 -25
- package/dist/http/memory-control-plane-corrupt-reply.js +0 -19
- package/dist/http/memory-layer-reply.d.ts +0 -30
- package/dist/http/memory-layer-reply.js +0 -24
- package/dist/lsp/e2b-bridge.d.ts +0 -57
- package/dist/lsp/e2b-bridge.js +0 -139
- package/dist/lsp/e2b-manager.d.ts +0 -93
- package/dist/lsp/e2b-manager.js +0 -178
- package/dist/lsp/lsp-frames.d.ts +0 -14
- package/dist/lsp/lsp-frames.js +0 -25
- package/dist/lsp/manager.d.ts +0 -129
- package/dist/lsp/manager.js +0 -127
- package/dist/lsp/types.d.ts +0 -12
- package/dist/lsp/types.js +0 -2
- package/dist/lsp/ws-transport.d.ts +0 -40
- package/dist/lsp/ws-transport.js +0 -210
|
@@ -51,8 +51,9 @@ export declare function createTidbPool(config: ServiceConfig): Pool;
|
|
|
51
51
|
* 3. 生成的全集 SQL 基线导出到 `docs/schema/baseline-mysql.sql`(由本数组机器生成;它是**产物**,不是真源
|
|
52
52
|
* —— 冲突时以本文件为准并重新生成)。
|
|
53
53
|
*
|
|
54
|
-
* 注意:`ensureSchema` 仍然保留(建表 + advisory lock + image_bake_admit 种子行)
|
|
55
|
-
*
|
|
54
|
+
* 注意:`ensureSchema` 仍然保留(建表 + advisory lock + image_bake_admit 种子行),语句数组是纯 CREATE。数组之外只有一只只读探针:会话部署格旁表
|
|
55
|
+
* `session_ext` 的外键列要抄被引列 `session_meta.session_id` 的字符集 / 排序规则(MySQL 外键两侧必须相同,而存量库上它随建库年代不同),建它之前读一次
|
|
56
|
+
* `information_schema.COLUMNS`(`session-ext-table.ts` 的 `ensureSessionExtTableMysql`;探针只读、不导出任何 ALTER)。
|
|
56
57
|
*/
|
|
57
58
|
export declare const SCHEMA_STATEMENTS: readonly string[];
|
|
58
59
|
/** Named MySQL/TiDB advisory lock that serializes the whole `ensureSchema` DDL run (see below). */
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { writeLogText } from "../observability/logger.js";
|
|
1
2
|
import mysql from "mysql2/promise";
|
|
2
3
|
import { TIDB_APPROVAL_ASK_STATEMENTS } from "./approval-ask-store-sql.js";
|
|
3
4
|
import { TIDB_MEMORY_OPTOUT_GRANT_STATEMENTS } from "./memory-optout-grant-store-sql.js";
|
|
@@ -5,17 +6,18 @@ import { TIDB_SESSION_CAPTURE_OPTOUT_STATEMENTS } from "./session-capture-record
|
|
|
5
6
|
import { TIDB_LEADER_RUN_STATEMENTS } from "./leader-run-store-sql.js";
|
|
6
7
|
import { TIDB_ADOPTION_LOG_STATEMENTS } from "./adoption-log-sql.js";
|
|
7
8
|
import { TIDB_PERMISSION_RULE_STATEMENTS } from "./permission-rule-store-sql.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
9
|
+
import { TIDB_RETENTION_TOMBSTONE_STATEMENTS } from "../stores-sql/retention-store-sql.js";
|
|
10
|
+
import { TIDB_RETENTION_LANE_STATEMENTS } from "./retention-lane-store-sql.js";
|
|
11
|
+
import { SESSION_META_INCARNATION_COLUMN, SESSION_META_LINEAGE_COLUMNS } from "../session-incarnation.js";
|
|
12
|
+
import { ensureSessionExtTableMysql } from "./session-ext-table.js";
|
|
13
|
+
import { CHECKPOINT_HOST_SESSION_COLUMN } from "./checkpoint-index-columns.js";
|
|
12
14
|
import { RUN_IDENTITY_COLUMNS } from "../identity-source.js";
|
|
13
15
|
import { SESSION_RULES_COLUMN } from "./session-rules-column.js";
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
+
import { INBOX_PAYLOAD_COLUMN } from "./inbox-payload-column.js";
|
|
17
|
+
import { PRINCIPAL_MAX_BYTES } from "../principal-shape.js";
|
|
16
18
|
import { ensureIndexes } from "./ensure-index.js";
|
|
17
19
|
import { CENTRAL_SCHEMA_INDEXES } from "./schema-indexes.js";
|
|
18
|
-
import { SESSION_INDEXES } from "
|
|
20
|
+
import { SESSION_INDEXES } from "../stores-sql/pg-session-storage.js";
|
|
19
21
|
import { TOOL_RESULT_INDEXES } from "../stores-sql/tool-result-store-sql.js";
|
|
20
22
|
import { COST_QUOTA_INDEXES } from "./pg-cost-quota.js";
|
|
21
23
|
import { RATE_LIMIT_INDEXES } from "./pg-rate-limiter.js";
|
|
@@ -25,7 +27,8 @@ import { IMAGE_BAKE_INDEXES } from "./image-bake-store-sql.js";
|
|
|
25
27
|
import { APPROVAL_ASK_INDEXES } from "./approval-ask-store-sql.js";
|
|
26
28
|
import { ADOPTION_LOG_INDEXES } from "./adoption-log-sql.js";
|
|
27
29
|
import { PERMISSION_RULE_INDEXES } from "./permission-rule-store-sql.js";
|
|
28
|
-
import {
|
|
30
|
+
import { RETENTION_TOMBSTONE_INDEXES } from "../stores-sql/retention-store-sql.js";
|
|
31
|
+
import { RETENTION_LANE_INDEXES } from "./retention-lane-store-sql.js";
|
|
29
32
|
import { LEADER_RUN_INDEXES } from "./leader-run-store-sql.js";
|
|
30
33
|
import { pollUntilLocked } from "./ensure-schema-lock-policy.js";
|
|
31
34
|
import { createCloseAwarePool } from "./sql-driver.js";
|
|
@@ -63,23 +66,8 @@ export const SCHEMA_STATEMENTS = [
|
|
|
63
66
|
updated_at DATETIME(3) NOT NULL,
|
|
64
67
|
leaf_id VARCHAR(64) NULL,
|
|
65
68
|
leaf_seq BIGINT NOT NULL DEFAULT 0,
|
|
66
|
-
--
|
|
67
|
-
--
|
|
68
|
-
-- one-liner on a submit that finds it NULL; setTitleIfNull, fills NULL only) — a user-set title is never overwritten,
|
|
69
|
-
-- a cleared one is filled again. Width = SESSION_TITLE_MAX_CHARS (the wire bound).
|
|
70
|
-
title VARCHAR(${SESSION_TITLE_MAX_CHARS}) NULL,
|
|
71
|
-
-- pinned: the user's pin (PATCH /v1/sessions/:id → writeSessionRowCells); every list row carries it, false by default.
|
|
72
|
-
pinned BOOLEAN NOT NULL DEFAULT FALSE,
|
|
73
|
-
-- instruction_source(S-690):本会话**上一次 run** 选中的项目指令文件 = 换源通告(instructions.source_changed)
|
|
74
|
-
-- 的基线。NULL = 还没有任何 run 记过(首 run 只写不发);'' = 记过、那一次没有项目指令文件;其余 = 链成员相对路径
|
|
75
|
-
-- (CLAUDE.md / .claude/CLAUDE.md / AGENTS.md / .claude/AGENTS.md)。服务端元数据:不进模型上下文、不进 wire
|
|
76
|
-
-- 会话面;住在会话行上 ⇒ 随会话删除 / 留存清扫一起消失,fork 出的新行为 NULL(新会话首 run 同样只写不发)。
|
|
77
|
-
instruction_source VARCHAR(64) NULL,
|
|
78
|
-
-- workspace:本会话上一条腿**自己的**最后一帧 workspace_changed(引擎 7.58.0 的整份快照:cwd / root / entered / project / remote)。
|
|
79
|
-
-- NULL = 还没有任何腿记过;唯一写者 = 腿的记录座(src/session-workspace.ts),列属主 = src/plugins/session-workspace-cell.ts
|
|
80
|
-
-- (列定义、形读者、编解码;存量库缺这一列 ⇒ 起服列册对账拒启,拒句里给出 ALTER)。下一条腿的 TaskSpec.projectId 读它的 project.id。
|
|
81
|
-
-- 服务端元数据:不进 wire 会话面、不进模型上下文;住在会话行上 ⇒ 随会话删除 / 留存清扫一起消失,fork 出的新行为 NULL。
|
|
82
|
-
${SESSION_META_WORKSPACE_COLUMN.mysql},
|
|
69
|
+
-- 本服务记在会话上的格(标题 / 置顶 / 换源通告基线 / 位置与项目 / 执行放置那一格 / fork 键)不住这张引擎座表:旁表 session_ext
|
|
70
|
+
-- (下一条语句;建表 / 列 / 外键级联的唯一属主 = src/plugins/session-ext-table.ts,一会话一行,随本行删除级联)。
|
|
83
71
|
-- #292 C18(core 5.48.0 design/323)subagent 转录持久化 —— placement 元组,**创建时一次落行、
|
|
84
72
|
-- first-write 不可变**(register 的 ON DUPLICATE 臂永不重写这六列)。判别位 = placement_kind:
|
|
85
73
|
-- 在场 ⇒ 该会话住在 placement 分区里(不上宿主枚举、claim 形 acquire 恒拒、release=真删除、
|
|
@@ -97,11 +85,9 @@ export const SCHEMA_STATEMENTS = [
|
|
|
97
85
|
-- src/session-incarnation.ts 的 SESSION_META_INCARNATION_COLUMN(存量库缺这一列 ⇒ 起服列册对账拒启,拒句里的 ALTER 由本建表语句生成)。
|
|
98
86
|
-- 不上 wire、不进模型上下文、日志只打前 8 位。
|
|
99
87
|
${SESSION_META_INCARNATION_COLUMN.mysql},
|
|
100
|
-
--
|
|
101
|
-
--
|
|
102
|
-
|
|
103
|
-
-- (存量库缺这些列 ⇒ 起服列册对账拒启;加列只由一次性迁移做)。
|
|
104
|
-
${sessionMetaPlacementColumnsDdl("mysql")},
|
|
88
|
+
-- fork 谱系(建这一行的那次 fork 的源会话 id + 源行那一刻的住客令牌;只由 fork 的建行写,core forkRowCells 铸):NULL = 不是 fork 建的行,
|
|
89
|
+
-- 或这两列落地之前建的 fork(源已不可知,不回填)。列定义的唯一属主 = src/session-incarnation.ts 的 SESSION_META_LINEAGE_COLUMNS。
|
|
90
|
+
${SESSION_META_LINEAGE_COLUMNS.mysql},
|
|
105
91
|
PRIMARY KEY (session_id),
|
|
106
92
|
KEY idx_session_meta_owner (owner),
|
|
107
93
|
-- listPlaced 的检索腿(kind + 租户 + 年龄升序);普通会话这三列全 NULL ⇒ 不占索引选择性。
|
|
@@ -368,9 +354,14 @@ export const SCHEMA_STATEMENTS = [
|
|
|
368
354
|
-- 两列同生同灭(stamp 在场 ⇔ 记录在场);reopen 见到记录即拒(已结算的动作不可重开)。
|
|
369
355
|
execution_outcome JSON NULL,
|
|
370
356
|
execution_at_ms BIGINT NULL,
|
|
357
|
+
-- host_session_id:这张卡**归在哪只会话上**(兑现它的那条 run 的会话;cascade 的级上卡 = 调用方的会话,其余 = session_id)。写口 put 由
|
|
358
|
+
-- plugins/checkpoint-index-columns.ts 的 hostSessionOf 求值一次;存量行由一次性迁移 M49 自 session_id 回填。按会话找卡的读口(决断 / 取消 / 收割 /
|
|
359
|
+
-- 续跑输入回收 / 运维队列行)只读它;session_id 只答「这是哪段对话」。列定义的唯一属主 = 同模块的 CHECKPOINT_HOST_SESSION_COLUMN。
|
|
360
|
+
${CHECKPOINT_HOST_SESSION_COLUMN.mysql},
|
|
371
361
|
PRIMARY KEY (token),
|
|
372
362
|
KEY idx_checkpoint_status_deadline (status, deadline),
|
|
373
|
-
KEY idx_checkpoint_session_status (session_id, status)
|
|
363
|
+
KEY idx_checkpoint_session_status (session_id, status),
|
|
364
|
+
KEY idx_checkpoint_host_session_status (host_session_id, status)
|
|
374
365
|
) COLLATE utf8mb4_bin`,
|
|
375
366
|
`CREATE TABLE IF NOT EXISTS checkpoint_ctx (
|
|
376
367
|
session_id VARCHAR(190) NOT NULL,
|
|
@@ -401,22 +392,27 @@ export const SCHEMA_STATEMENTS = [
|
|
|
401
392
|
expires_at_ms BIGINT NOT NULL,
|
|
402
393
|
PRIMARY KEY (session_id, nonce),
|
|
403
394
|
KEY idx_approval_nonce_expires (expires_at_ms)
|
|
395
|
+
) COLLATE utf8mb4_bin`,
|
|
396
|
+
`CREATE TABLE IF NOT EXISTS approval_nonce_floor (
|
|
397
|
+
singleton CHAR(1) NOT NULL DEFAULT 'x',
|
|
398
|
+
floor_ms BIGINT NOT NULL,
|
|
399
|
+
PRIMARY KEY (singleton)
|
|
404
400
|
) COLLATE utf8mb4_bin`,
|
|
405
401
|
`CREATE TABLE IF NOT EXISTS org_delivery_sender_quota (
|
|
406
|
-
from_scope VARBINARY(${
|
|
402
|
+
from_scope VARBINARY(${PRINCIPAL_MAX_BYTES}) NOT NULL,
|
|
407
403
|
window_start_ms BIGINT NOT NULL,
|
|
408
404
|
attempts INT NOT NULL,
|
|
409
405
|
PRIMARY KEY (from_scope)
|
|
410
406
|
) COLLATE utf8mb4_bin`,
|
|
411
407
|
`CREATE TABLE IF NOT EXISTS org_delivery_recipient_quota (
|
|
412
|
-
to_scope VARBINARY(${
|
|
408
|
+
to_scope VARBINARY(${PRINCIPAL_MAX_BYTES}) NOT NULL,
|
|
413
409
|
window_start_ms BIGINT NOT NULL,
|
|
414
410
|
delivered INT NOT NULL,
|
|
415
411
|
PRIMARY KEY (to_scope)
|
|
416
412
|
) COLLATE utf8mb4_bin`,
|
|
417
413
|
`CREATE TABLE IF NOT EXISTS org_delivery_pair_quota (
|
|
418
|
-
to_scope VARBINARY(${
|
|
419
|
-
from_scope VARBINARY(${
|
|
414
|
+
to_scope VARBINARY(${PRINCIPAL_MAX_BYTES}) NOT NULL,
|
|
415
|
+
from_scope VARBINARY(${PRINCIPAL_MAX_BYTES}) NOT NULL,
|
|
420
416
|
window_start_ms BIGINT NOT NULL,
|
|
421
417
|
delivered INT NOT NULL,
|
|
422
418
|
PRIMARY KEY (to_scope, from_scope)
|
|
@@ -634,7 +630,8 @@ export const SCHEMA_STATEMENTS = [
|
|
|
634
630
|
-- payload: bounded + redacted JSON extras of the entry's kind. task_notification: task_type / result / …;
|
|
635
631
|
-- workflow_complete: at most {"completionId": …, "diagnostics": …} (the engine's own correlation id, verbatim; the engine's diagnostic
|
|
636
632
|
-- teaching text, redacted + bounded at enqueue; each key absent when the engine minted none, NULL when neither).
|
|
637
|
-
payload
|
|
633
|
+
-- Column definition owner = inbox-payload-column.ts (INBOX_PAYLOAD_COLUMN); the entry byte budget derives from the same type word.
|
|
634
|
+
${INBOX_PAYLOAD_COLUMN.mysql},
|
|
638
635
|
PRIMARY KEY (session_id, run_id),
|
|
639
636
|
UNIQUE KEY uq_wfinbox_seq (seq),
|
|
640
637
|
KEY idx_wfinbox_session_seq (session_id, seq)
|
|
@@ -816,7 +813,8 @@ export const SCHEMA_STATEMENTS = [
|
|
|
816
813
|
) COLLATE utf8mb4_bin`,
|
|
817
814
|
...TIDB_ADOPTION_LOG_STATEMENTS,
|
|
818
815
|
...TIDB_PERMISSION_RULE_STATEMENTS,
|
|
819
|
-
...
|
|
816
|
+
...TIDB_RETENTION_LANE_STATEMENTS,
|
|
817
|
+
...TIDB_RETENTION_TOMBSTONE_STATEMENTS,
|
|
820
818
|
];
|
|
821
819
|
export const ENSURE_SCHEMA_LOCK = "sema_ensure_schema";
|
|
822
820
|
export async function acquireEnsureSchemaLock(conn, tag = "ensureSchema") {
|
|
@@ -830,7 +828,7 @@ export async function releaseEnsureSchemaLock(conn, tag = "ensureSchema") {
|
|
|
830
828
|
await conn.query("SELECT RELEASE_LOCK(?)", [ENSURE_SCHEMA_LOCK]);
|
|
831
829
|
}
|
|
832
830
|
catch (err) {
|
|
833
|
-
|
|
831
|
+
writeLogText("stderr", `[${tag}] RELEASE_LOCK('${ENSURE_SCHEMA_LOCK}') failed (lock auto-frees on connection close):`, err);
|
|
834
832
|
}
|
|
835
833
|
}
|
|
836
834
|
export const SCHEMA_INDEXES = [
|
|
@@ -845,7 +843,8 @@ export const SCHEMA_INDEXES = [
|
|
|
845
843
|
...APPROVAL_ASK_INDEXES,
|
|
846
844
|
...ADOPTION_LOG_INDEXES,
|
|
847
845
|
...PERMISSION_RULE_INDEXES,
|
|
848
|
-
...
|
|
846
|
+
...RETENTION_LANE_INDEXES,
|
|
847
|
+
...RETENTION_TOMBSTONE_INDEXES,
|
|
849
848
|
...LEADER_RUN_INDEXES,
|
|
850
849
|
];
|
|
851
850
|
export async function ensureSchema(pool) {
|
|
@@ -857,6 +856,10 @@ export async function ensureSchema(pool) {
|
|
|
857
856
|
for (const stmt of SCHEMA_STATEMENTS) {
|
|
858
857
|
await conn.query(stmt);
|
|
859
858
|
}
|
|
859
|
+
await ensureSessionExtTableMysql(async (sql) => {
|
|
860
|
+
const [rows] = await conn.query(sql);
|
|
861
|
+
return Array.isArray(rows) ? rows : [];
|
|
862
|
+
});
|
|
860
863
|
await conn.query("INSERT IGNORE INTO image_bake_admit (pool) VALUES ('standard')");
|
|
861
864
|
await ensureIndexes((text, params) => conn.query(text, params), "mysql", SCHEMA_INDEXES);
|
|
862
865
|
}
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*
|
|
16
16
|
* ## 会话树删除([ref])
|
|
17
17
|
* `deleteBySession` = `DELETE … WHERE session_id = ?`(真删行;File 孪生是一行会话级墓碑,同义)。两条删会话树的级联各有一臂:在线删除协调器
|
|
18
|
-
* 经本动词;托管留存的事务化孪生(`retention-
|
|
18
|
+
* 经本动词;托管留存的事务化孪生(`retention-deployment.ts` `deleteDeploymentSessionRows` ④,执行器的 `beforeDelete` 钩)在**自己的事务**里对本表发同一只谓词(`session_id` 单键,
|
|
19
19
|
* 多值集合按方言)—— 它不调店,理由见该文件顶注的布局裁定(一个事务 ⇒ 一条连接 ⇒ 一个属主)。谓词走 `(session_id, state, accepted_at_ms)` 索引的前缀。
|
|
20
20
|
*
|
|
21
21
|
* ## 读不出的行([ref] L6):逐行跳过,游标按原始行推进
|
|
@@ -2,7 +2,9 @@ import { validateHeaderValue } from "node:http";
|
|
|
2
2
|
import { createSearxngSearchBackend } from "@sema-agent/core";
|
|
3
3
|
import { findUrlCredential, findUrlUserinfo, isHierarchicalUrl } from "@sema-agent/settings-schema";
|
|
4
4
|
import { redactSecrets } from "../trace/redact.js";
|
|
5
|
+
import { createEgressFetch } from "../egress-redirect.js";
|
|
5
6
|
import { buildRequestUrlCredentialRefusal, urlCredentialFacts } from "../url-credential-refusal.js";
|
|
7
|
+
import { readUpstreamJson } from "../upstream-body.js";
|
|
6
8
|
export const WEB_SEARCH_PROVIDERS = ["brave", "tavily", "searxng"];
|
|
7
9
|
function isWebSearchProvider(word) {
|
|
8
10
|
return WEB_SEARCH_PROVIDERS.includes(word);
|
|
@@ -99,7 +101,7 @@ async function braveSearch(fetchImpl, cfg, query, max, signal) {
|
|
|
99
101
|
const res = await fetchImpl(url, { headers: { Accept: "application/json", "X-Subscription-Token": token }, signal });
|
|
100
102
|
if (!res.ok)
|
|
101
103
|
throw await httpFailure("brave", res);
|
|
102
|
-
const data = (await res
|
|
104
|
+
const data = (await readUpstreamJson(res));
|
|
103
105
|
return normalize(data.web?.results, (r) => ({ title: r.title, url: r.url, snippet: r.description }), max, "brave");
|
|
104
106
|
}
|
|
105
107
|
async function tavilySearch(fetchImpl, cfg, query, max, signal, opts) {
|
|
@@ -117,7 +119,7 @@ async function tavilySearch(fetchImpl, cfg, query, max, signal, opts) {
|
|
|
117
119
|
});
|
|
118
120
|
if (!res.ok)
|
|
119
121
|
throw await httpFailure("tavily", res);
|
|
120
|
-
const data = (await res
|
|
122
|
+
const data = (await readUpstreamJson(res));
|
|
121
123
|
return normalize(data.results, (r) => ({ title: r.title, url: r.url, snippet: r.content }), max, "tavily");
|
|
122
124
|
}
|
|
123
125
|
async function searxngSearch(fetchImpl, cfg, query, max, signal, timeoutMs, opts) {
|
|
@@ -151,7 +153,7 @@ function redactedBackendFailure(e) {
|
|
|
151
153
|
return safe === text ? e : new Error(safe);
|
|
152
154
|
}
|
|
153
155
|
export function createWebSearchBackend(cfg) {
|
|
154
|
-
const fetchImpl = cfg.fetchImpl
|
|
156
|
+
const fetchImpl = createEgressFetch("declare the final search address as WEB_SEARCH_ENDPOINT", cfg.fetchImpl);
|
|
155
157
|
const maxResults = Math.max(1, Math.min(20, cfg.maxResults ?? DEFAULT_MAX_RESULTS));
|
|
156
158
|
const timeoutMs = Math.max(1000, cfg.timeoutMs ?? DEFAULT_TIMEOUT_MS);
|
|
157
159
|
const search = async (query, signal, opts) => {
|
|
@@ -62,7 +62,7 @@ import type { WorkflowNotifyJournalStore, WorkflowNotifyJournalEntry } from "../
|
|
|
62
62
|
import { type WorkflowAgentSessionIndex, type WorkflowAgentSessionRow } from "../orchestration/workflow-agent-session-index.js";
|
|
63
63
|
import { type WorkflowParkDecision, type WorkflowParkDecisionStore } from "../orchestration/workflow-park-decision.js";
|
|
64
64
|
import type { SqlRunStore } from "./run-store-sql.js";
|
|
65
|
-
import { type SqlDriver } from "./sql-driver.js";
|
|
65
|
+
import { type SqlDialect, type SqlDriver, type SqlExec } from "./sql-driver.js";
|
|
66
66
|
type WorkflowRun = Parameters<WorkflowRunStore["put"]>[1];
|
|
67
67
|
/** Row cap guard: a run blob beyond this is NOT stored on update (the prior revision stays) — TiDB's
|
|
68
68
|
* ~6 MiB txn-entry limit would otherwise throw the (best-effort) progress write into the workflow loop.
|
|
@@ -148,6 +148,11 @@ export declare class SqlWorkflowRunStore implements WorkflowRunStore {
|
|
|
148
148
|
keep?: number;
|
|
149
149
|
}): Promise<number>;
|
|
150
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* 立一只会话的**清除围栏**(session 全宽,`run_id = ''`;窗 = `PURGE_FENCE_MS`):此后同属主的 enqueue 落空(`purgedOwner` 缺席 = 属主未知 ⇒ 围全部)。
|
|
153
|
+
* 语句源唯一:信箱自己的 `purge` 与删净会话的执行体(`retention-deployment.ts` 的部署行,在执行体那一个事务里)同调。Upsert = 再清一次刷新窗。
|
|
154
|
+
*/
|
|
155
|
+
export declare function writeInboxPurgeFenceOn(exec: SqlExec, dialect: SqlDialect, sessionId: string, purgedOwner: string | null | undefined, now: number): Promise<void>;
|
|
151
156
|
/** Dual-dialect `WorkflowCompletionInbox`. See the file header for the dialect-delta ledger. */
|
|
152
157
|
export declare class SqlWorkflowCompletionInbox implements WorkflowCompletionInbox {
|
|
153
158
|
protected readonly db: SqlDriver;
|
|
@@ -168,6 +168,16 @@ export class SqlWorkflowRunStore {
|
|
|
168
168
|
}
|
|
169
169
|
const KIND_SERVED = "served";
|
|
170
170
|
const KIND_PURGE = "purge";
|
|
171
|
+
export async function writeInboxPurgeFenceOn(exec, dialect, sessionId, purgedOwner, now) {
|
|
172
|
+
const known = purgedOwner !== undefined ? 1 : 0;
|
|
173
|
+
await exec.query(dialect === "mysql"
|
|
174
|
+
? "INSERT INTO workflow_inbox_fence (session_id, kind, run_id, owner, owner_known, until_ms) VALUES (?,?,?,?,?,?) " +
|
|
175
|
+
"ON DUPLICATE KEY UPDATE owner = VALUES(owner), owner_known = VALUES(owner_known), until_ms = VALUES(until_ms)"
|
|
176
|
+
: "INSERT INTO workflow_inbox_fence (session_id, kind, run_id, owner, owner_known, until_ms) VALUES ($1,$2,'',$3,$4,$5) " +
|
|
177
|
+
"ON CONFLICT (session_id, kind, run_id) DO UPDATE SET owner = EXCLUDED.owner, owner_known = EXCLUDED.owner_known, until_ms = EXCLUDED.until_ms", dialect === "mysql"
|
|
178
|
+
? [sessionId, KIND_PURGE, "", purgedOwner ?? null, known, now + PURGE_FENCE_MS]
|
|
179
|
+
: [sessionId, KIND_PURGE, purgedOwner ?? null, known, now + PURGE_FENCE_MS]);
|
|
180
|
+
}
|
|
171
181
|
export class SqlWorkflowCompletionInbox {
|
|
172
182
|
db;
|
|
173
183
|
onWarn;
|
|
@@ -241,11 +251,7 @@ export class SqlWorkflowCompletionInbox {
|
|
|
241
251
|
async purge(sessionId, purgedOwner) {
|
|
242
252
|
const now = Date.now();
|
|
243
253
|
await this.sweepFences(now);
|
|
244
|
-
await this.db
|
|
245
|
-
"ON DUPLICATE KEY UPDATE owner = VALUES(owner), owner_known = VALUES(owner_known), until_ms = VALUES(until_ms)", "INSERT INTO workflow_inbox_fence (session_id, kind, run_id, owner, owner_known, until_ms) VALUES ($1,$2,'',$3,$4,$5) " +
|
|
246
|
-
"ON CONFLICT (session_id, kind, run_id) DO UPDATE SET owner = EXCLUDED.owner, owner_known = EXCLUDED.owner_known, until_ms = EXCLUDED.until_ms"), this.db.dialect === "mysql"
|
|
247
|
-
? [sessionId, KIND_PURGE, "", purgedOwner ?? null, purgedOwner !== undefined ? 1 : 0, now + PURGE_FENCE_MS]
|
|
248
|
-
: [sessionId, KIND_PURGE, purgedOwner ?? null, purgedOwner !== undefined ? 1 : 0, now + PURGE_FENCE_MS]);
|
|
254
|
+
await writeInboxPurgeFenceOn(this.db, this.db.dialect, sessionId, purgedOwner, now);
|
|
249
255
|
await this.db.query(this.q("DELETE FROM workflow_completion_inbox WHERE session_id = ?", "DELETE FROM workflow_completion_inbox WHERE session_id = $1"), [sessionId]);
|
|
250
256
|
}
|
|
251
257
|
async markTerminalServed(sessionId, runId) {
|
package/dist/principal-jwt.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ApprovalHmacKey, PrincipalJwtKey } from "./auth-keys.js";
|
|
2
2
|
import { type ApprovalEnvelope } from "./approval-hmac.js";
|
|
3
|
+
import { type Person } from "./owner-brands.js";
|
|
3
4
|
/**
|
|
4
5
|
* 验签允许的**时钟不一致容差**(秒)—— 本仓这条轴上的单一来源。
|
|
5
6
|
*
|
|
@@ -45,8 +46,6 @@ export declare function verifyPrincipalJwt(token: string, keys: PrincipalJwtKey[
|
|
|
45
46
|
* 形:`sha256(utf8(editedPlan))` hex —— 与 `approvalBnd` 同摘要、同编码;逐字节,不归一化(签名器与 worker
|
|
46
47
|
* 必须对同一串字节达成一致,任何"归一化"都是第二个写者)。
|
|
47
48
|
*/
|
|
48
|
-
/** 良构 Unicode(无孤立代理项)。`u` 旗下配对代理项是一个码点、不匹配 `\p{Surrogate}`;只有孤立的才命中。 */
|
|
49
|
-
export declare function isWellFormedUnicode(s: string): boolean;
|
|
50
49
|
export declare function editedPlanBinding(editedPlan: string): string;
|
|
51
50
|
/**
|
|
52
51
|
* JWT `cnf.bnd` = **「这份身份凭据被签发去决哪一张卡」**(动作身份),故只哈希前三位。
|
|
@@ -79,10 +78,11 @@ export interface SingleUseProof {
|
|
|
79
78
|
*/
|
|
80
79
|
readonly acceptedBeforeMs: number;
|
|
81
80
|
}
|
|
82
|
-
/** {@link verifyDirectDoorProof} 的判决。`singleUse` 在场 =
|
|
81
|
+
/** {@link verifyDirectDoorProof} 的判决。`singleUse` 在场 = 调用方必须在改任何状态**之前**消费它一次。`principal` = 这一次决定的证明推出的人
|
|
82
|
+
* (带 `Person` 品牌:本函数是它的铸点之一 —— 决定口用它替换请求身份,`http/owner-access.ts` 的 `callerOfDecision` 按请求的场景铸决定者的主体)。 */
|
|
83
83
|
export type DirectDoorProofResult = {
|
|
84
84
|
ok: true;
|
|
85
|
-
principal:
|
|
85
|
+
principal: Person;
|
|
86
86
|
singleUse?: SingleUseProof;
|
|
87
87
|
} | {
|
|
88
88
|
ok: false;
|
package/dist/principal-jwt.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { createHash, createPublicKey, verify as cryptoVerify } from "node:crypto";
|
|
2
2
|
import { verifyApprovalHmac } from "./approval-hmac.js";
|
|
3
|
+
import { mintPerson } from "./owner-brands.js";
|
|
4
|
+
import { PRINCIPAL_MAX_BYTES, isWellFormedUnicode, principalShapeProblem } from "./principal-shape.js";
|
|
3
5
|
export const PRINCIPAL_JWT_CLOCK_SKEW_SEC = 30;
|
|
4
6
|
function b64urlToBuf(s) {
|
|
5
7
|
return Buffer.from(s, "base64url");
|
|
@@ -72,9 +74,6 @@ export function verifyPrincipalJwt(token, keys, expect) {
|
|
|
72
74
|
const bnd = typeof payload.cnf?.bnd === "string" ? payload.cnf.bnd : undefined;
|
|
73
75
|
return { sub: payload.sub, bnd, acceptedBeforeMs: (Math.floor(payload.exp + skew) + 1) * 1000 };
|
|
74
76
|
}
|
|
75
|
-
export function isWellFormedUnicode(s) {
|
|
76
|
-
return !/\p{Surrogate}/u.test(s);
|
|
77
|
-
}
|
|
78
77
|
export function editedPlanBinding(editedPlan) {
|
|
79
78
|
if (!isWellFormedUnicode(editedPlan))
|
|
80
79
|
throw new Error("editedPlanBinding: editedPlan is not well-formed Unicode (lone surrogate) — utf8 hashing would be lossy");
|
|
@@ -104,8 +103,24 @@ export function verifyDirectDoorProof(proof, envelope, config, opts) {
|
|
|
104
103
|
const ok = verifyApprovalHmac(envelope, proof.mac, proof.kid, config.approvalHmacKeys);
|
|
105
104
|
if (!ok)
|
|
106
105
|
return { ok: false, status: 401, errorCode: "approval_mac_invalid", error: "approval envelope MAC invalid" };
|
|
106
|
+
const shape = principalShapeProblem(verified.sub);
|
|
107
|
+
switch (shape) {
|
|
108
|
+
case undefined:
|
|
109
|
+
break;
|
|
110
|
+
case "not_a_name":
|
|
111
|
+
return { ok: false, status: 400, errorCode: "principal_not_a_name", error: "principal token subject is not a principal name — the issuer must sign a visible-character identity" };
|
|
112
|
+
case "reserved":
|
|
113
|
+
return { ok: false, status: 400, errorCode: "principal_reserved", error: "principal token subject is a reserved identifier (an internal scope sentinel or a scenario subject) — the issuer must sign the person's own identifier" };
|
|
114
|
+
case "too_long":
|
|
115
|
+
return { ok: false, status: 400, errorCode: "principal_too_long", error: `principal token subject exceeds ${PRINCIPAL_MAX_BYTES} UTF-8 bytes` };
|
|
116
|
+
default: {
|
|
117
|
+
const unknownShape = shape;
|
|
118
|
+
throw new Error(`verifyDirectDoorProof: unknown principal shape problem ${String(unknownShape)}`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
const principal = mintPerson(verified.sub);
|
|
107
122
|
return actionBinding
|
|
108
|
-
? { ok: true, principal
|
|
109
|
-
: { ok: true, principal
|
|
123
|
+
? { ok: true, principal }
|
|
124
|
+
: { ok: true, principal, singleUse: { nonce: envelope.boundCallId, acceptedBeforeMs: verified.acceptedBeforeMs } };
|
|
110
125
|
}
|
|
111
126
|
//# sourceMappingURL=principal-jwt.js.map
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🔴 **主体长度的唯一定义:至多这么多个 UTF-8 字节。** 凡判「这只串当不当得了主体 / 主体身份键」的长度,一律读它、按字节数(`Buffer.byteLength(s, "utf8")`):
|
|
3
|
+
* 本文件的判官、收件箱的键判官(收件箱 scope 就是主体)、记忆退出名单的判、两处运维 `?scope=` 查询、规则面的运维目标、配额三表两方言的身份列宽。
|
|
4
|
+
* 为什么是字节:主体原样落进的最窄一类列是按字节计宽的 `VARBINARY(190)`(收件箱 / 后台子代 / 名册的键列);按字符计宽的 `VARCHAR(190)`(TiDB utf8mb4 与 PG
|
|
5
|
+
* 都数码点)装得下任何 190 字节的串(一个码点至少一个字节)。所以 190 字节 ≤ 「190 家族」每一只主体列,升到本尺不需要改任何既有列。
|
|
6
|
+
* 不同源的 190(会话 / run / 工具调用 id 列的历史宽度惯例、断路器键、跨会话信封来源位、编码后的记忆 scope 列、令牌 scope 声明)不读本常量。
|
|
7
|
+
*/
|
|
8
|
+
export declare const PRINCIPAL_MAX_BYTES = 190;
|
|
9
|
+
/**
|
|
10
|
+
* 良构 Unicode(无孤立代理项)的唯一判式 —— 主体名判官的一格(下面),也是收件箱键判官与编辑计划绑定摘要的同一读法(住在叶子里,三处都能值导入、不成环)。
|
|
11
|
+
* `u` 旗下配对代理项是一个码点、不匹配 `\p{Surrogate}`;只有孤立的才命中。
|
|
12
|
+
*/
|
|
13
|
+
export declare function isWellFormedUnicode(s: string): boolean;
|
|
14
|
+
/** 修1 — the SINGLE registry of internal sentinel/scope identifiers a tenant principal must never equal.
|
|
15
|
+
* 🔴 新增内部 sentinel scope 必须在此登记(精确值加 RESERVED_PRINCIPALS,前缀族加
|
|
16
|
+
* RESERVED_PRINCIPAL_PREFIXES),否则 assertPrincipalShape 会放行同名租户 = 与内部 scope 行合流的超范围面。
|
|
17
|
+
* Current entries (where each is minted): `"_"` = single-user/anonymous sentinel (checkpoint/sendfile/
|
|
18
|
+
* resource-suspend scope family); `"__none__"` = the missing-principal read placeholder of the approval
|
|
19
|
+
* queue faces up to 7.132.x (7.133.0 reads the anonymous group `"_"` instead; still reserved because a 7.132.x replica in the same
|
|
20
|
+
* rolling upgrade lists that scope for anonymous callers, so a tenant by that name would merge with them there); `"_leader"` = leader durable-approval scope
|
|
21
|
+
* (src/leader/wire.ts); prefix `"_leader-"` = the leader resource-suspend scope family
|
|
22
|
+
* (`_leader-resource-<workerId>`, src/leader/wire.ts); prefix `"_orphan:"` = the owner written on a delegated session whose
|
|
23
|
+
* delegation ancestors are gone (`_orphan:<sessionId>`, src/delegated-session-owner.ts) — a caller allowed to authenticate as it
|
|
24
|
+
* would read that transcript; prefix `"_scn:"` = a subject that carries a scenario (`_scn:<scenario>:<person>`, `owner-brands.ts` `subjectOf`) —
|
|
25
|
+
* a caller allowed to authenticate as it would BE another person's scenario partition. NB the `_leader-` prefix REQUIRES the hyphen — a tenant named
|
|
26
|
+
* `_leaderX` collides with nothing internal and stays valid (boundary pinned by test). */
|
|
27
|
+
export declare const RESERVED_PRINCIPALS: readonly string[];
|
|
28
|
+
export declare const RESERVED_PRINCIPAL_PREFIXES: readonly string[];
|
|
29
|
+
/** The principal-shape rule as a VERDICT (the one judge; {@link assertPrincipalShape} is its throwing reader). `undefined` = a
|
|
30
|
+
* principal may carry this string; otherwise which rule it breaks. A reader that only needs "can this string be anyone?" (the
|
|
31
|
+
* organization delivery gate's recipient: a string that breaks the rule is nobody, refused with the same bytes as an unknown
|
|
32
|
+
* principal) reads the verdict instead of catching the throw.
|
|
33
|
+
*
|
|
34
|
+
* Order: "is it a name at all" first — the other two rules presuppose a name (a reserved identifier / a name too wide for the
|
|
35
|
+
* column), and the `reserved` sentence echoes the value while the `not_a_name` sentence never does (a string that names nobody may be a
|
|
36
|
+
* pasted credential). An empty string is `not_a_name` here (the engine's judge says so); so is a string that is not well-formed Unicode (a lone
|
|
37
|
+
* surrogate is no character). A header reader that treats a blank header as "no principal" decides that before asking. `too_long` counts UTF-8 bytes
|
|
38
|
+
* ({@link PRINCIPAL_MAX_BYTES}). */
|
|
39
|
+
export type PrincipalShapeProblem = "not_a_name" | "reserved" | "too_long";
|
|
40
|
+
export declare function principalShapeProblem(principal: string): PrincipalShapeProblem | undefined;
|
|
41
|
+
//# sourceMappingURL=principal-shape.d.ts.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { principalNameOf } from "@sema-agent/core";
|
|
2
|
+
import { ORPHAN_SESSION_OWNER_PREFIX } from "./delegated-session-owner.js";
|
|
3
|
+
import { SCENARIO_SUBJECT_PREFIX } from "./owner-brands.js";
|
|
4
|
+
export const PRINCIPAL_MAX_BYTES = 190;
|
|
5
|
+
export function isWellFormedUnicode(s) {
|
|
6
|
+
return !/\p{Surrogate}/u.test(s);
|
|
7
|
+
}
|
|
8
|
+
export const RESERVED_PRINCIPALS = ["_", "__none__", "_leader"];
|
|
9
|
+
export const RESERVED_PRINCIPAL_PREFIXES = ["_leader-", ORPHAN_SESSION_OWNER_PREFIX, SCENARIO_SUBJECT_PREFIX];
|
|
10
|
+
export function principalShapeProblem(principal) {
|
|
11
|
+
if (principalNameOf(principal) === undefined || !isWellFormedUnicode(principal))
|
|
12
|
+
return "not_a_name";
|
|
13
|
+
if (RESERVED_PRINCIPALS.includes(principal) || RESERVED_PRINCIPAL_PREFIXES.some((p) => principal.startsWith(p)))
|
|
14
|
+
return "reserved";
|
|
15
|
+
if (Buffer.byteLength(principal, "utf8") > PRINCIPAL_MAX_BYTES)
|
|
16
|
+
return "too_long";
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=principal-shape.js.map
|
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);
|