@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
package/dist/tool-approval.js
CHANGED
|
@@ -3,18 +3,20 @@ import { heldAskOf, liveHostSource, readDecider, retiredDecisionKeyFacts, POLICY
|
|
|
3
3
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
4
4
|
import { uuidv7, classifyAsk, foldArbitrationRow, policyCannotAnswer, screenAskClassMembers, MAX_RULE_TEXT_CHARS, READ_ROOT_CANDIDATE_DIR_MAX, parseRuleText, pathConfinableWriteToolNames } from "@sema-agent/core";
|
|
5
5
|
import { precheckCardRuleText } from "./rules-consent.js";
|
|
6
|
-
import {
|
|
6
|
+
import { CARD_RULE_FORM_OF_MATCH, cardRuleFormOf } from "./permission-rule-vocab.js";
|
|
7
7
|
import { redactDeep, redactSecrets, redactSecretsWithArms } from "./trace/redact.js";
|
|
8
8
|
import { seatText } from "./trace/exit-seat.js";
|
|
9
9
|
import { hasBidiControls } from "./text-bidi.js";
|
|
10
10
|
import { approvalPayloadFingerprint } from "./plugins/approval-payload-fingerprint.js";
|
|
11
11
|
import { createLogger } from "./observability/logger.js";
|
|
12
12
|
import { errorKindOf } from "./observability/err-text.js";
|
|
13
|
+
import { createHitlOpenRace, deliverHitlNotice } from "./hitl-delivery.js";
|
|
13
14
|
import { recordFailOpen } from "./observability/fail-open.js";
|
|
14
15
|
import { ownerOfCheckpointScope } from "./security.js";
|
|
16
|
+
import { keyAdmits, ownerCellOf, recoveredSubject } from "./owner-faces.js";
|
|
15
17
|
import { deriveAskId, deriveAskScopedBatchId, deriveBatchId, MAX_DECISION_NOTE_CHARS, noteLandedOnRow, noteRecordedReceipt, readBoundInputHash } from "./approval-ask-machine.js";
|
|
16
18
|
import { askDemandsAPerson, storedPersonDemandRecord, currentParkArm, MAX_RULE_OFFERS, buildApprovalCard, buildApprovalCardEnvelope, adoptStoredLiveFacts, buildApprovalRequestFrame, buildReplayFrame, buildRevokeFrame, readDenialLimitFallback, readProbeCause, readProbeReason, readReadRootCandidate, readStoredCardEnvelope, readRuleEvidence, readAllowRuleShadowed, readRuleOffersAbsence, readRuleOffersAbsenceSeat, readParkRowTrueSeat, readAskClassPair, readAskReasons, readClosedWordSeat, buildApprovalCompleteFrame, readRuleOfferList, } from "./approval-card.js";
|
|
17
|
-
import {
|
|
19
|
+
import { askRowCarriesOwner, POLICY_REFUSAL_DECISION, projectAskTerminalClaimTruth } from "./plugins/approval-ask-store-sql.js";
|
|
18
20
|
import { APPROVAL_ENDING_CAUSES, SETTLE_OUTCOME, askRowEndingCause, askRowParkTrigger } from "./approval-deny-reasons.js";
|
|
19
21
|
import { settleByPolicy } from "./approval-policy-settlement.js";
|
|
20
22
|
import { governanceAskMarksFor, runWithGovernanceAskScope } from "./governance-ask-marks.js";
|
|
@@ -46,8 +48,10 @@ const PARKING_RETRY_AFTER_MS = 250;
|
|
|
46
48
|
export function approvalDecidePath(sessionId) {
|
|
47
49
|
return `/v1/approvals/${encodeURIComponent(sessionId)}/decide`;
|
|
48
50
|
}
|
|
49
|
-
function parkSessionOf(row) {
|
|
50
|
-
|
|
51
|
+
export function parkSessionOf(row) {
|
|
52
|
+
if (row.state === "PARKED")
|
|
53
|
+
return row.sourceSessionId;
|
|
54
|
+
return row.sourceSessionId !== row.taskId ? row.sourceSessionId : undefined;
|
|
51
55
|
}
|
|
52
56
|
function ruleMaterialCarriesCredentialShape(command) {
|
|
53
57
|
return redactSecretsWithArms(command, { observe: false }).arms.has("full");
|
|
@@ -227,7 +231,13 @@ function rowOrUnknown(read) {
|
|
|
227
231
|
return read.kind === "row" ? read.row : null;
|
|
228
232
|
}
|
|
229
233
|
function askRowVisibleTo(row, principal) {
|
|
230
|
-
return row !== null &&
|
|
234
|
+
return row !== null && askOwnerAdmitsAnswer(row.owner, principal);
|
|
235
|
+
}
|
|
236
|
+
function askOwnerAdmitsAnswer(owner, principal) {
|
|
237
|
+
return keyAdmits("ask.answer", { subject: recoveredSubject(principal), operator: false }, ownerCellOf(owner));
|
|
238
|
+
}
|
|
239
|
+
function receiptAnswersNow(redeemedGeneration, openGenerationNow) {
|
|
240
|
+
return redeemedGeneration === undefined || openGenerationNow === undefined || openGenerationNow <= redeemedGeneration;
|
|
231
241
|
}
|
|
232
242
|
function waitingLegsReached(entry, othersReached) {
|
|
233
243
|
return (entry.adopted === true ? 0 : 1) + othersReached;
|
|
@@ -257,8 +267,10 @@ function livePendingRowOf(e) {
|
|
|
257
267
|
...(e.adopted === true ? { consumerState: ASK_DECISION_CONSUMER_ABSENT } : {}),
|
|
258
268
|
};
|
|
259
269
|
}
|
|
270
|
+
const _legFamiliesAreFrameFamilies = true;
|
|
271
|
+
void _legFamiliesAreFrameFamilies;
|
|
260
272
|
function canPresentWithoutDurableRow(c) {
|
|
261
|
-
return c.
|
|
273
|
+
return c.family === "tool_approval";
|
|
262
274
|
}
|
|
263
275
|
export const PERSIST_RULE_TEXT_ERROR = `persistRule.rule must be a non-empty string of at most ${MAX_RULE_TEXT_CHARS} characters`;
|
|
264
276
|
export const PERSIST_RULE_EDITED_FLAG_ERROR = "persistRule.edited must be a boolean when present";
|
|
@@ -435,49 +447,6 @@ export function declaredApprovalFrameFamilies(settings) {
|
|
|
435
447
|
const raw = Reflect.get(settings, "approvalFrameFamilies");
|
|
436
448
|
return new Set(Array.isArray(raw) ? raw.filter((w) => APPROVAL_FRAME_FAMILIES.includes(w)) : []);
|
|
437
449
|
}
|
|
438
|
-
export function createApprovalCardEmitter(sinks) {
|
|
439
|
-
const present = [sinks.appendDurable, sinks.writeLive].filter((w) => w !== undefined);
|
|
440
|
-
const attempt = (write, frame) => (async () => {
|
|
441
|
-
try {
|
|
442
|
-
await write(frame);
|
|
443
|
-
return true;
|
|
444
|
-
}
|
|
445
|
-
catch (err) {
|
|
446
|
-
defaultLogger.warn("approval_card_sink_write_failed", { frame: frame.type, approvalId: frame.approvalId, errKind: errorKindOf(err) });
|
|
447
|
-
return false;
|
|
448
|
-
}
|
|
449
|
-
})();
|
|
450
|
-
const opened = new Map();
|
|
451
|
-
return async (frame, registration) => {
|
|
452
|
-
if (frame.type === "approval_request") {
|
|
453
|
-
const results = present.map((write) => attempt(write, frame));
|
|
454
|
-
opened.set(registration, results);
|
|
455
|
-
const accepted = await new Promise((resolve) => {
|
|
456
|
-
let pending = results.length;
|
|
457
|
-
if (pending === 0)
|
|
458
|
-
resolve(false);
|
|
459
|
-
for (const r of results) {
|
|
460
|
-
void r.then((ok) => {
|
|
461
|
-
if (ok)
|
|
462
|
-
resolve(true);
|
|
463
|
-
else if (--pending === 0)
|
|
464
|
-
resolve(false);
|
|
465
|
-
});
|
|
466
|
-
}
|
|
467
|
-
});
|
|
468
|
-
if (!accepted) {
|
|
469
|
-
opened.delete(registration);
|
|
470
|
-
throw new Error("approval card undeliverable — no sink accepted the frame (live stream closed and/or the durable append failed)");
|
|
471
|
-
}
|
|
472
|
-
return;
|
|
473
|
-
}
|
|
474
|
-
const results = opened.get(registration);
|
|
475
|
-
opened.delete(registration);
|
|
476
|
-
if (results === undefined)
|
|
477
|
-
return;
|
|
478
|
-
await Promise.all(present.map((write, i) => results[i].then((ok) => (ok ? attempt(write, frame) : false))));
|
|
479
|
-
};
|
|
480
|
-
}
|
|
481
450
|
export function resolveApprovalLeg(input) {
|
|
482
451
|
const active = input.streamApprovalOn;
|
|
483
452
|
const tightDeadline = active && input.legWalltimeMs !== undefined && input.legWalltimeMs - input.windowMarginMs <= 0;
|
|
@@ -512,7 +481,8 @@ export function outcomeOfDecidedRow(row) {
|
|
|
512
481
|
const allow = row.decision === "approve";
|
|
513
482
|
const source = row.settledBy !== null ? { settledBy: row.settledBy, ...(row.decidedVia !== null ? { decidedVia: row.decidedVia } : {}) } : {};
|
|
514
483
|
const edit = allow && row.updatedInput !== undefined ? { updatedInput: row.updatedInput } : {};
|
|
515
|
-
|
|
484
|
+
const denyReason = !allow && row.decisionNote ? { reason: row.decisionNote } : {};
|
|
485
|
+
return row.settledBy === null && !("updatedInput" in edit) && !("reason" in denyReason) ? allow : { allow, ...edit, ...denyReason, ...source };
|
|
516
486
|
}
|
|
517
487
|
function settleArgsOfDecided(outcome) {
|
|
518
488
|
if (typeof outcome === "boolean")
|
|
@@ -521,6 +491,7 @@ function settleArgsOfDecided(outcome) {
|
|
|
521
491
|
allowed: outcome.allow,
|
|
522
492
|
...(outcome.updatedInput !== undefined ? { updatedInput: outcome.updatedInput } : {}),
|
|
523
493
|
...(outcome.settledBy !== undefined ? { source: { settledBy: outcome.settledBy, ...(outcome.decidedVia !== undefined ? { decidedVia: outcome.decidedVia } : {}) } } : {}),
|
|
494
|
+
...(!outcome.allow && outcome.reason !== undefined ? { denyReason: outcome.reason } : {}),
|
|
524
495
|
};
|
|
525
496
|
}
|
|
526
497
|
function verdictOfDecided(args) {
|
|
@@ -529,6 +500,7 @@ function verdictOfDecided(args) {
|
|
|
529
500
|
allowed: args.allowed,
|
|
530
501
|
...(args.updatedInput !== undefined ? { updatedInput: args.updatedInput } : {}),
|
|
531
502
|
...(args.source !== undefined ? { hostSource: args.source } : {}),
|
|
503
|
+
...(args.denyReason !== undefined ? { denyReason: args.denyReason } : {}),
|
|
532
504
|
};
|
|
533
505
|
}
|
|
534
506
|
function settleArgsOf(outcome) {
|
|
@@ -764,14 +736,14 @@ export class ToolApprovalCoordinator {
|
|
|
764
736
|
}
|
|
765
737
|
});
|
|
766
738
|
}
|
|
767
|
-
static ruleOfferDerivedFactsAgree(offer) {
|
|
739
|
+
static ruleOfferDerivedFactsAgree(offer, cardTool) {
|
|
768
740
|
const derive = (rule) => {
|
|
769
741
|
const p = parseRuleText(rule, "allow");
|
|
770
742
|
return "rule" in p ? p.rule : undefined;
|
|
771
743
|
};
|
|
772
744
|
if (offer.kind === "single") {
|
|
773
745
|
const d = derive(offer.rule);
|
|
774
|
-
return d !== undefined && d.rule === offer.rule && d.match === offer.match && d.command === offer.command && ToolApprovalCoordinator.
|
|
746
|
+
return d !== undefined && d.rule === offer.rule && d.match === offer.match && d.command === offer.command && ToolApprovalCoordinator.singleOfferBelongsOnCard(d.match, d.tool, cardTool);
|
|
775
747
|
}
|
|
776
748
|
return offer.rules.every((m) => {
|
|
777
749
|
const d = derive(m.rule);
|
|
@@ -787,40 +759,21 @@ export class ToolApprovalCoordinator {
|
|
|
787
759
|
}
|
|
788
760
|
});
|
|
789
761
|
}
|
|
790
|
-
static
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
case "prefix":
|
|
794
|
-
case "wildcard":
|
|
795
|
-
case "pattern":
|
|
796
|
-
return tool === "Bash";
|
|
797
|
-
case "tool":
|
|
798
|
-
return cardTakesWholeToolConsent(tool);
|
|
799
|
-
case "subpath":
|
|
800
|
-
case "path":
|
|
801
|
-
case "name":
|
|
802
|
-
case "name_prefix":
|
|
803
|
-
case "host":
|
|
804
|
-
case "subdomain":
|
|
805
|
-
return false;
|
|
806
|
-
default: {
|
|
807
|
-
const unknown = match;
|
|
808
|
-
void unknown;
|
|
809
|
-
return false;
|
|
810
|
-
}
|
|
811
|
-
}
|
|
762
|
+
static singleOfferBelongsOnCard(match, ruleTool, cardTool) {
|
|
763
|
+
const form = CARD_RULE_FORM_OF_MATCH[match];
|
|
764
|
+
return ruleTool === cardTool && form !== undefined && form === cardRuleFormOf(cardTool);
|
|
812
765
|
}
|
|
813
|
-
static boundRuleOfferTexts(offers) {
|
|
766
|
+
static boundRuleOfferTexts(offers, cardTool) {
|
|
814
767
|
const over = (s) => s.length > MAX_RULE_TEXT_CHARS;
|
|
815
768
|
const clipSegment = (s) => (over(s) ? s.slice(0, MAX_RULE_TEXT_CHARS) : s);
|
|
816
769
|
const out = [];
|
|
817
770
|
for (const { offer } of readRuleOfferList(offers)) {
|
|
818
771
|
if (ToolApprovalCoordinator.ruleOfferTextsOverSize(offer))
|
|
819
772
|
return undefined;
|
|
820
|
-
if (!ToolApprovalCoordinator.ruleOfferDerivedFactsAgree(offer)) {
|
|
773
|
+
if (!ToolApprovalCoordinator.ruleOfferDerivedFactsAgree(offer, cardTool)) {
|
|
821
774
|
defaultLogger.warn("rule_offer_dropped_derived_facts_disagree", {
|
|
822
775
|
kind: offer.kind,
|
|
823
|
-
note: "an offer's kind/match/command/directory seats do not agree with what the shared validator derives from its rule text — dropped whole so the card never shows one grant while redeeming another (core/dist skew or forged material?)",
|
|
776
|
+
note: "an offer's kind/match/command/directory seats do not agree with what the shared validator derives from its rule text, or it is not this card's tool / card form — dropped whole so the card never shows one grant while redeeming another (core/dist skew or forged material?)",
|
|
824
777
|
});
|
|
825
778
|
continue;
|
|
826
779
|
}
|
|
@@ -857,11 +810,9 @@ export class ToolApprovalCoordinator {
|
|
|
857
810
|
return out;
|
|
858
811
|
}
|
|
859
812
|
static cardBindingOf(args, offers) {
|
|
860
|
-
const
|
|
861
|
-
if (
|
|
862
|
-
return
|
|
863
|
-
if (offers.some(isWholeTool))
|
|
864
|
-
return undefined;
|
|
813
|
+
const valueOffers = offers.filter((o) => o.kind === "single" && CARD_RULE_FORM_OF_MATCH[o.match] !== "command");
|
|
814
|
+
if (valueOffers.length > 0)
|
|
815
|
+
return valueOffers.length === 1 && offers.length === 1 ? valueOffers[0].command : undefined;
|
|
865
816
|
if (args === null || typeof args !== "object" || Array.isArray(args))
|
|
866
817
|
return undefined;
|
|
867
818
|
const command = args.command;
|
|
@@ -878,7 +829,7 @@ export class ToolApprovalCoordinator {
|
|
|
878
829
|
if (!Array.isArray(rawOffers) || rawOffers.length === 0)
|
|
879
830
|
return undefined;
|
|
880
831
|
const capped = rawOffers.length > MAX_RULE_OFFERS ? rawOffers.slice(0, MAX_RULE_OFFERS) : rawOffers;
|
|
881
|
-
const offers = ToolApprovalCoordinator.boundRuleOfferTexts(capped);
|
|
832
|
+
const offers = ToolApprovalCoordinator.boundRuleOfferTexts(capped, req.toolName);
|
|
882
833
|
if (offers === undefined)
|
|
883
834
|
return undefined;
|
|
884
835
|
const command = ToolApprovalCoordinator.cardBindingOf(req.args, offers);
|
|
@@ -1221,15 +1172,9 @@ export class ToolApprovalCoordinator {
|
|
|
1221
1172
|
emitRevokeTo(ctxs, frame) {
|
|
1222
1173
|
if (frame.askIds.length === 0)
|
|
1223
1174
|
return;
|
|
1224
|
-
for (const c of ctxs)
|
|
1225
|
-
if (
|
|
1226
|
-
|
|
1227
|
-
try {
|
|
1228
|
-
void Promise.resolve(c.emitRevoke(frame)).catch(() => undefined);
|
|
1229
|
-
}
|
|
1230
|
-
catch {
|
|
1231
|
-
}
|
|
1232
|
-
}
|
|
1175
|
+
for (const c of ctxs)
|
|
1176
|
+
if (c.family === "approval_request")
|
|
1177
|
+
void deliverHitlNotice(c.transport, frame);
|
|
1233
1178
|
}
|
|
1234
1179
|
emitRevoke(frame, target) {
|
|
1235
1180
|
const targets = new Set();
|
|
@@ -1580,6 +1525,7 @@ export class ToolApprovalCoordinator {
|
|
|
1580
1525
|
const allowedP = new Promise((resolve) => { resolveAllowed = resolve; });
|
|
1581
1526
|
let lastOutcome = SETTLE_OUTCOME.EXPIRED;
|
|
1582
1527
|
let lastCause;
|
|
1528
|
+
let completeFrame;
|
|
1583
1529
|
const abortListeners = [];
|
|
1584
1530
|
let selfEntry;
|
|
1585
1531
|
let hostSettled;
|
|
@@ -1643,8 +1589,10 @@ export class ToolApprovalCoordinator {
|
|
|
1643
1589
|
}
|
|
1644
1590
|
lastOutcome = outcome;
|
|
1645
1591
|
lastCause = verdict.by === "system" ? verdict.cause : undefined;
|
|
1646
|
-
if (
|
|
1647
|
-
|
|
1592
|
+
if (askId !== undefined) {
|
|
1593
|
+
completeFrame = buildApprovalCompleteFrame({ askId, taskId: origin.taskId, approvalId: wireApprovalId, outcome, ...(lastCause !== undefined ? { cause: lastCause } : {}), parked: parkRouted, nowMs: Date.now() });
|
|
1594
|
+
if (lastLiveRegistration)
|
|
1595
|
+
this.notifyPresentedCardWatchers(askId, completeFrame);
|
|
1648
1596
|
}
|
|
1649
1597
|
releaseAdmission();
|
|
1650
1598
|
if (selfEntry)
|
|
@@ -1949,6 +1897,7 @@ export class ToolApprovalCoordinator {
|
|
|
1949
1897
|
forceParkNow,
|
|
1950
1898
|
settleParkRoute: (cause) => settleParkRouteIfUnsettled(undefined, cause),
|
|
1951
1899
|
owner: origin.owner,
|
|
1900
|
+
ownerReadSeq: this.rowReadSeq,
|
|
1952
1901
|
...(primary ? { ctxTaskId: primary.taskId, originCtx: primary } : {}),
|
|
1953
1902
|
...(reachability === "unreached" ? { suspended: true } : {}),
|
|
1954
1903
|
...(child ? { originTaskId: req.sourceSessionId } : primary ? { targetCtxs: new Set(aliveCtxs), onTargetGone } : {}),
|
|
@@ -2011,38 +1960,24 @@ export class ToolApprovalCoordinator {
|
|
|
2011
1960
|
frame.serverNowMs = serverNowMs;
|
|
2012
1961
|
frame.expiresInMs = Math.max(0, persistedExpiresAtMs - serverNowMs);
|
|
2013
1962
|
}
|
|
2014
|
-
const
|
|
2015
|
-
|
|
2016
|
-
|
|
2017
|
-
|
|
2018
|
-
|
|
2019
|
-
|
|
2020
|
-
|
|
2021
|
-
|
|
2022
|
-
|
|
2023
|
-
|
|
2024
|
-
|
|
2025
|
-
|
|
2026
|
-
|
|
2027
|
-
|
|
2028
|
-
|
|
2029
|
-
else {
|
|
2030
|
-
family = "tool_approval";
|
|
2031
|
-
send = () => c.emit(frame);
|
|
2032
|
-
}
|
|
2033
|
-
try {
|
|
2034
|
-
await send();
|
|
2035
|
-
return { delivered: true };
|
|
2036
|
-
}
|
|
2037
|
-
catch (err) {
|
|
2038
|
-
defaultLogger.warn("approval_card_delivery_failed", { taskId: origin.taskId, approvalId: wireApprovalId, family, errKind: errorKindOf(err) });
|
|
2039
|
-
return { delivered: false };
|
|
2040
|
-
}
|
|
2041
|
-
};
|
|
2042
|
-
const openByCtx = new Map(aliveCtxs.map((c) => [c, emitOne(c)]));
|
|
1963
|
+
const cardCtxs = aliveCtxs.filter((c) => c.family === "approval_request");
|
|
1964
|
+
const legacyCtxs = aliveCtxs.filter((c) => c.family === "tool_approval");
|
|
1965
|
+
if (cardFrame === undefined && cardCtxs.length > 0) {
|
|
1966
|
+
defaultLogger.warn("approval card leg cannot present this ask: it has no confirmed durable identity (no approval_request frame is minted without one)", {
|
|
1967
|
+
taskId: origin.taskId,
|
|
1968
|
+
approvalId: wireApprovalId,
|
|
1969
|
+
toolName: req.toolName,
|
|
1970
|
+
});
|
|
1971
|
+
}
|
|
1972
|
+
const cardRace = cardFrame !== undefined && cardCtxs.length > 0
|
|
1973
|
+
? createHitlOpenRace({ targets: cardCtxs.map((c) => ({ transport: c.transport, frame: cardFrame })), settled: allowedP })
|
|
1974
|
+
: undefined;
|
|
1975
|
+
const legacyRace = legacyCtxs.length > 0 ? createHitlOpenRace({ targets: legacyCtxs.map((c) => ({ transport: c.transport, frame })), settled: allowedP }) : undefined;
|
|
1976
|
+
if (cardRace !== undefined && cardFrame !== undefined)
|
|
1977
|
+
cardCtxs.forEach((c, i) => this.notePresentedCardRegistration(cardFrame.askId, c.transport, cardRace.acceptedLive(i)));
|
|
2043
1978
|
const emitAllP = (async () => {
|
|
2044
|
-
const
|
|
2045
|
-
const anySucceeded = reachability === "unreached" || this.hasOtherSuspendedOwner(askId, selfEntry) ||
|
|
1979
|
+
const landings = await Promise.all([cardRace?.landing, legacyRace?.landing]);
|
|
1980
|
+
const anySucceeded = reachability === "unreached" || this.hasOtherSuspendedOwner(askId, selfEntry) || landings.includes("delivered");
|
|
2046
1981
|
emitSettled = true;
|
|
2047
1982
|
if (!anySucceeded && !done) {
|
|
2048
1983
|
if (this.askStore && askId !== undefined && batchId !== undefined) {
|
|
@@ -2083,35 +2018,15 @@ export class ToolApprovalCoordinator {
|
|
|
2083
2018
|
})();
|
|
2084
2019
|
await Promise.race([emitAllP, allowedP]);
|
|
2085
2020
|
const settled = await allowedP;
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2089
|
-
|
|
2090
|
-
|
|
2091
|
-
|
|
2092
|
-
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
return c.emitCard(buildApprovalCompleteFrame({
|
|
2096
|
-
askId: cardFrame.askId,
|
|
2097
|
-
taskId: cardFrame.taskId,
|
|
2098
|
-
approvalId: wireApprovalId,
|
|
2099
|
-
outcome: lastOutcome,
|
|
2100
|
-
...(lastCause !== undefined ? { cause: lastCause } : {}),
|
|
2101
|
-
parked: parkRouted,
|
|
2102
|
-
nowMs: Date.now(),
|
|
2103
|
-
}), id);
|
|
2104
|
-
}
|
|
2105
|
-
return c.emit({
|
|
2106
|
-
type: "tool_approval_complete",
|
|
2107
|
-
approvalId: wireApprovalId,
|
|
2108
|
-
outcome: lastOutcome,
|
|
2109
|
-
...(lastCause !== undefined ? { cause: lastCause } : {}),
|
|
2110
|
-
...(parkRouted ? { parked: true } : {}),
|
|
2111
|
-
});
|
|
2112
|
-
})
|
|
2113
|
-
.catch(() => undefined);
|
|
2114
|
-
}
|
|
2021
|
+
if (cardRace !== undefined && completeFrame !== undefined)
|
|
2022
|
+
cardRace.close(completeFrame);
|
|
2023
|
+
legacyRace?.close({
|
|
2024
|
+
type: "tool_approval_complete",
|
|
2025
|
+
approvalId: wireApprovalId,
|
|
2026
|
+
outcome: lastOutcome,
|
|
2027
|
+
...(lastCause !== undefined ? { cause: lastCause } : {}),
|
|
2028
|
+
...(parkRouted ? { parked: true } : {}),
|
|
2029
|
+
});
|
|
2115
2030
|
if (emitFailed)
|
|
2116
2031
|
return this.unattendedOutcome({ arm: "emit_failed", taskId: origin.taskId, ...(origin.owner !== null ? { owner: origin.owner } : {}), toolName: req.toolName, reachability });
|
|
2117
2032
|
if (windowRouteUnavailable)
|
|
@@ -2130,7 +2045,7 @@ export class ToolApprovalCoordinator {
|
|
|
2130
2045
|
const entry = this.liveEntryFor(id);
|
|
2131
2046
|
if (entry?.adopted === true)
|
|
2132
2047
|
return this.respondByRow(entry, id, principal, parsed, httpReq);
|
|
2133
|
-
if (entry !== undefined &&
|
|
2048
|
+
if (entry !== undefined && askOwnerAdmitsAnswer(entry.owner, principal))
|
|
2134
2049
|
return this.answerRegistration(entry, entry.owner, id, principal, parsed, httpReq);
|
|
2135
2050
|
if (entry !== undefined && this.registrationHasRow(entry))
|
|
2136
2051
|
return this.respondByRow(entry, id, principal, parsed, httpReq);
|
|
@@ -2142,10 +2057,13 @@ export class ToolApprovalCoordinator {
|
|
|
2142
2057
|
async respondByRow(entry, id, principal, parsed, httpReq) {
|
|
2143
2058
|
const store = this.askStore;
|
|
2144
2059
|
if (!store)
|
|
2145
|
-
return this.
|
|
2060
|
+
return this.askNotVisible();
|
|
2061
|
+
const readSeq = this.nextRowReadSeq();
|
|
2146
2062
|
const row = rowOrUnknown(await this.askRowFor(store, id, "getAsk(respond-by-row)"));
|
|
2063
|
+
if (row?.state === "STREAM_PENDING")
|
|
2064
|
+
this.followRowOwner(row.askId, row.owner, readSeq);
|
|
2147
2065
|
if (!askRowVisibleTo(row, principal))
|
|
2148
|
-
return this.
|
|
2066
|
+
return this.askNotVisible();
|
|
2149
2067
|
if (row.state !== "STREAM_PENDING")
|
|
2150
2068
|
return this.dispatchRowTruth(row, id, parsed, httpReq, principal);
|
|
2151
2069
|
return this.answerRegistration(entry, row.owner, id, principal, parsed, httpReq);
|
|
@@ -2237,31 +2155,37 @@ export class ToolApprovalCoordinator {
|
|
|
2237
2155
|
}),
|
|
2238
2156
|
};
|
|
2239
2157
|
}
|
|
2158
|
+
askNotVisible() {
|
|
2159
|
+
return { status: 404, body: refusalBody({ errorCode: "not_found.ask", message: "no such approval ask (never existed, no longer kept, or not yours)" }) };
|
|
2160
|
+
}
|
|
2240
2161
|
readApproval(id, principal) {
|
|
2241
2162
|
const entry = this.liveEntryFor(id);
|
|
2242
2163
|
if (entry !== undefined && this.registrationHasRow(entry))
|
|
2243
2164
|
return this.readByRow(entry, id, principal);
|
|
2244
|
-
if (entry !== undefined &&
|
|
2165
|
+
if (entry !== undefined && askOwnerAdmitsAnswer(entry.owner, principal)) {
|
|
2245
2166
|
const body = { state: "pending", ...livePendingRowOf(entry) };
|
|
2246
2167
|
return { status: 200, body };
|
|
2247
2168
|
}
|
|
2248
2169
|
const store = this.askStore;
|
|
2249
2170
|
if (!store)
|
|
2250
|
-
return this.
|
|
2171
|
+
return this.askNotVisible();
|
|
2251
2172
|
return this.readAskRowState(store, id, principal);
|
|
2252
2173
|
}
|
|
2253
2174
|
async readByRow(entry, id, principal) {
|
|
2254
2175
|
const store = this.askStore;
|
|
2255
2176
|
if (!store)
|
|
2256
|
-
return this.
|
|
2177
|
+
return this.askNotVisible();
|
|
2178
|
+
const readSeq = this.nextRowReadSeq();
|
|
2257
2179
|
const read = await this.askRowFor(store, id, "getAsk(read-by-row)");
|
|
2258
2180
|
if (read.kind === "unreadable") {
|
|
2259
|
-
if (entry.adopted === true || !
|
|
2260
|
-
return this.
|
|
2181
|
+
if (entry.adopted === true || !askOwnerAdmitsAnswer(entry.owner, principal))
|
|
2182
|
+
return this.askNotVisible();
|
|
2261
2183
|
const body = { state: "pending", ...livePendingRowOf(entry) };
|
|
2262
2184
|
return { status: 200, body };
|
|
2263
2185
|
}
|
|
2264
2186
|
const row = rowOrUnknown(read);
|
|
2187
|
+
if (row?.state === "STREAM_PENDING")
|
|
2188
|
+
this.followRowOwner(row.askId, row.owner, readSeq);
|
|
2265
2189
|
if (askRowVisibleTo(row, principal) && row.state === "STREAM_PENDING") {
|
|
2266
2190
|
const body = { state: "pending", ...livePendingRowOf(entry) };
|
|
2267
2191
|
return { status: 200, body };
|
|
@@ -2274,18 +2198,22 @@ export class ToolApprovalCoordinator {
|
|
|
2274
2198
|
async readParkedGate(row) {
|
|
2275
2199
|
const gate = this.parkedGate;
|
|
2276
2200
|
if (gate === undefined || row.gateToken === null)
|
|
2277
|
-
return
|
|
2201
|
+
return undefined;
|
|
2278
2202
|
try {
|
|
2279
2203
|
return await this.withStoreDeadline(gate({ gateToken: row.gateToken, gateBoundCallId: row.gateBoundCallId }), "readParkedGate", DURABLE_CONVERGE_READ_TIMEOUT_MS);
|
|
2280
2204
|
}
|
|
2281
2205
|
catch (err) {
|
|
2282
2206
|
this.noteStoreError(err, "readParkedGate");
|
|
2283
|
-
return
|
|
2207
|
+
return undefined;
|
|
2284
2208
|
}
|
|
2285
2209
|
}
|
|
2210
|
+
async openGateGeneration(row) {
|
|
2211
|
+
const gate = await this.readParkedGate(row);
|
|
2212
|
+
return gate?.kind === "open" ? gate.generation : undefined;
|
|
2213
|
+
}
|
|
2286
2214
|
async readStateOfRow(row, principal) {
|
|
2287
2215
|
if (!askRowVisibleTo(row, principal))
|
|
2288
|
-
return this.
|
|
2216
|
+
return this.askNotVisible();
|
|
2289
2217
|
const projection = buildAskRowReadProjection(row, Date.now());
|
|
2290
2218
|
let body;
|
|
2291
2219
|
switch (row.state) {
|
|
@@ -2298,13 +2226,13 @@ export class ToolApprovalCoordinator {
|
|
|
2298
2226
|
}
|
|
2299
2227
|
case "PARKING":
|
|
2300
2228
|
case "PARKED": {
|
|
2301
|
-
const gate = row.state === "PARKED" ? await this.readParkedGate(row) :
|
|
2229
|
+
const gate = row.state === "PARKED" ? await this.readParkedGate(row) : undefined;
|
|
2230
|
+
if (gate === undefined || gate.kind === "open") {
|
|
2231
|
+
const parkSession = parkSessionOf(row);
|
|
2232
|
+
body = { state: "parked", ...projection, ...(parkSession !== undefined ? { decidePath: approvalDecidePath(parkSession) } : {}), ...(gate?.reopened !== undefined ? { reopened: gate.reopened } : {}) };
|
|
2233
|
+
break;
|
|
2234
|
+
}
|
|
2302
2235
|
switch (gate.kind) {
|
|
2303
|
-
case "open": {
|
|
2304
|
-
const parkSession = parkSessionOf(row);
|
|
2305
|
-
body = { state: "parked", ...projection, ...(parkSession !== undefined ? { decidePath: approvalDecidePath(parkSession) } : {}), ...(gate.reopened !== undefined ? { reopened: gate.reopened } : {}) };
|
|
2306
|
-
break;
|
|
2307
|
-
}
|
|
2308
2236
|
case "decided":
|
|
2309
2237
|
body = { state: "decided", ...projection, decision: gate.decision, decidedAtMs: gate.decidedAtMs, ...(gate.decisionNote !== undefined ? { decisionNote: gate.decisionNote } : {}) };
|
|
2310
2238
|
break;
|
|
@@ -2347,11 +2275,11 @@ export class ToolApprovalCoordinator {
|
|
|
2347
2275
|
respondLate(id, principal, parsed, httpReq) {
|
|
2348
2276
|
const store = this.askStore;
|
|
2349
2277
|
if (!store)
|
|
2350
|
-
return this.
|
|
2278
|
+
return this.askNotVisible();
|
|
2351
2279
|
return this.dispatchLateByRow(store, id, parsed, httpReq, principal);
|
|
2352
2280
|
}
|
|
2353
|
-
watchPresentedCards(askIds, deliver) {
|
|
2354
|
-
const watcher = { deliver, askIds: new Set() };
|
|
2281
|
+
watchPresentedCards(askIds, deliver, connection) {
|
|
2282
|
+
const watcher = { deliver, connection, askIds: new Set(), registrationsOnConnection: new Map() };
|
|
2355
2283
|
for (const askId of askIds) {
|
|
2356
2284
|
if (!this.pendingByAskId.has(askId))
|
|
2357
2285
|
continue;
|
|
@@ -2367,13 +2295,26 @@ export class ToolApprovalCoordinator {
|
|
|
2367
2295
|
for (const askId of watcher.askIds)
|
|
2368
2296
|
this.dropPresentedCardWatcher(askId, watcher);
|
|
2369
2297
|
watcher.askIds.clear();
|
|
2298
|
+
watcher.registrationsOnConnection.clear();
|
|
2370
2299
|
};
|
|
2371
2300
|
}
|
|
2301
|
+
notePresentedCardRegistration(askId, transport, acceptedLive) {
|
|
2302
|
+
for (const watcher of this.presentedCardWatchers.get(askId) ?? []) {
|
|
2303
|
+
if (watcher.connection() !== transport)
|
|
2304
|
+
continue;
|
|
2305
|
+
const opens = watcher.registrationsOnConnection.get(askId);
|
|
2306
|
+
if (opens === undefined)
|
|
2307
|
+
watcher.registrationsOnConnection.set(askId, [acceptedLive]);
|
|
2308
|
+
else
|
|
2309
|
+
opens.push(acceptedLive);
|
|
2310
|
+
}
|
|
2311
|
+
}
|
|
2372
2312
|
dropPresentedCardWatcher(askId, watcher) {
|
|
2373
2313
|
const set = this.presentedCardWatchers.get(askId);
|
|
2374
2314
|
if (set === undefined)
|
|
2375
2315
|
return;
|
|
2376
2316
|
set.delete(watcher);
|
|
2317
|
+
watcher.registrationsOnConnection.delete(askId);
|
|
2377
2318
|
if (set.size === 0)
|
|
2378
2319
|
this.presentedCardWatchers.delete(askId);
|
|
2379
2320
|
}
|
|
@@ -2384,12 +2325,20 @@ export class ToolApprovalCoordinator {
|
|
|
2384
2325
|
this.presentedCardWatchers.delete(askId);
|
|
2385
2326
|
for (const watcher of set) {
|
|
2386
2327
|
watcher.askIds.delete(askId);
|
|
2387
|
-
|
|
2388
|
-
|
|
2389
|
-
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
|
|
2328
|
+
const opens = watcher.registrationsOnConnection.get(askId) ?? [];
|
|
2329
|
+
watcher.registrationsOnConnection.delete(askId);
|
|
2330
|
+
const write = () => {
|
|
2331
|
+
try {
|
|
2332
|
+
watcher.deliver(frame);
|
|
2333
|
+
}
|
|
2334
|
+
catch (err) {
|
|
2335
|
+
defaultLogger.warn("presented-card completion notice could not be written to its connection", { askId, error: err instanceof Error ? err.message : String(err) });
|
|
2336
|
+
}
|
|
2337
|
+
};
|
|
2338
|
+
if (opens.length === 0)
|
|
2339
|
+
write();
|
|
2340
|
+
else
|
|
2341
|
+
void Promise.all(opens).then((accepted) => (accepted.includes(true) ? undefined : write()));
|
|
2393
2342
|
}
|
|
2394
2343
|
}
|
|
2395
2344
|
liveEntryFor(id) {
|
|
@@ -2415,10 +2364,7 @@ export class ToolApprovalCoordinator {
|
|
|
2415
2364
|
}
|
|
2416
2365
|
async dispatchRowTruth(row, id, parsed, httpReq, principal) {
|
|
2417
2366
|
if (!askRowVisibleTo(row, principal))
|
|
2418
|
-
return this.
|
|
2419
|
-
const receipt = this.lookupParkRedemption(row.askId);
|
|
2420
|
-
if (receipt?.redeemed !== undefined)
|
|
2421
|
-
return this.replayRedeemReceipt(id, receipt, row, receipt.redeemed, parsed);
|
|
2367
|
+
return this.askNotVisible();
|
|
2422
2368
|
switch (row.state) {
|
|
2423
2369
|
case "DECIDED":
|
|
2424
2370
|
return this.replayDecidedAsk(id, row, parsed);
|
|
@@ -2478,7 +2424,6 @@ export class ToolApprovalCoordinator {
|
|
|
2478
2424
|
askId: row.askId,
|
|
2479
2425
|
idempotent: true,
|
|
2480
2426
|
...decided,
|
|
2481
|
-
...(parsed.value === "allow_session" ? { rememberApplied: false } : {}),
|
|
2482
2427
|
...noteRecordedReceipt(parsed.note, noteLandedOnRow(parsed.note, row.decisionNote)),
|
|
2483
2428
|
...this.lateRuleRefusal(parsed),
|
|
2484
2429
|
},
|
|
@@ -2492,14 +2437,17 @@ export class ToolApprovalCoordinator {
|
|
|
2492
2437
|
defaultLogger.error("tool approval parked row carries no gate token — nothing to redeem", { askId: row.askId });
|
|
2493
2438
|
return this.notPending();
|
|
2494
2439
|
}
|
|
2440
|
+
const openGenerationNow = this.lookupParkRedemption(row.askId) !== undefined ? await this.openGateGeneration(row) : undefined;
|
|
2495
2441
|
const prior = this.lookupParkRedemption(row.askId);
|
|
2496
|
-
if (prior?.redeemed !== undefined)
|
|
2442
|
+
if (prior?.redeemed !== undefined && receiptAnswersNow(prior.redeemed.gateGeneration, openGenerationNow))
|
|
2497
2443
|
return this.replayRedeemReceipt(id, prior, row, prior.redeemed, parsed);
|
|
2498
2444
|
if (prior?.inflight !== undefined) {
|
|
2499
2445
|
const shared = await prior.inflight;
|
|
2500
2446
|
if (shared.status < 200 || shared.status >= 300)
|
|
2501
2447
|
return shared;
|
|
2502
|
-
|
|
2448
|
+
if (!receiptAnswersNow(shared.gateGeneration, openGenerationNow))
|
|
2449
|
+
return this.redeemParkedAsk(id, row, parsed, httpReq, principal);
|
|
2450
|
+
return this.replayRedeemReceipt(id, prior, row, { decision: shared.decision, body: shared.body, gateGeneration: shared.gateGeneration, ...(shared.rule?.terminal === true ? { rule: shared.rule.body } : {}) }, parsed);
|
|
2503
2451
|
}
|
|
2504
2452
|
const admission = this.parkRedemptionAdmission(row.owner);
|
|
2505
2453
|
if (admission !== undefined)
|
|
@@ -2519,6 +2467,7 @@ export class ToolApprovalCoordinator {
|
|
|
2519
2467
|
...(parsed.note !== undefined ? { note: parsed.note } : {}),
|
|
2520
2468
|
decider: parsed.decider,
|
|
2521
2469
|
...(parsed.updatedInput !== undefined && parsed.value !== "deny" ? { updatedInput: parsed.updatedInput } : {}),
|
|
2470
|
+
...(parsed.value === "allow_session" ? { remember: "session" } : {}),
|
|
2522
2471
|
...(principal !== undefined ? { principal } : {}),
|
|
2523
2472
|
...(httpReq !== undefined ? { httpReq } : {}),
|
|
2524
2473
|
});
|
|
@@ -2547,7 +2496,7 @@ export class ToolApprovalCoordinator {
|
|
|
2547
2496
|
}
|
|
2548
2497
|
const rule = out.rule;
|
|
2549
2498
|
if (this.retainParkRedemption(row.askId, memo))
|
|
2550
|
-
memo.redeemed = { decision, body: out.body, ...(rule?.terminal === true ? { rule: rule.body } : {}) };
|
|
2499
|
+
memo.redeemed = { decision, body: out.body, gateGeneration: out.gateGeneration, ...(rule?.terminal === true ? { rule: rule.body } : {}) };
|
|
2551
2500
|
return {
|
|
2552
2501
|
status: out.status,
|
|
2553
2502
|
body: {
|
|
@@ -2555,7 +2504,7 @@ export class ToolApprovalCoordinator {
|
|
|
2555
2504
|
approvalId: id,
|
|
2556
2505
|
askId: row.askId,
|
|
2557
2506
|
accepted: "parked_redeemed",
|
|
2558
|
-
...(parsed.value === "allow_session" ? { rememberApplied:
|
|
2507
|
+
...(parsed.value === "allow_session" ? { rememberApplied: out.rememberApplied === true } : {}),
|
|
2559
2508
|
...(rule?.body ?? {}),
|
|
2560
2509
|
},
|
|
2561
2510
|
};
|
|
@@ -2667,7 +2616,6 @@ export class ToolApprovalCoordinator {
|
|
|
2667
2616
|
accepted: "parked_redeemed",
|
|
2668
2617
|
idempotent: true,
|
|
2669
2618
|
decision: receipt.decision === "approve" ? "allow" : "deny",
|
|
2670
|
-
...(parsed.value === "allow_session" ? { rememberApplied: false } : {}),
|
|
2671
2619
|
...(rule ?? {}),
|
|
2672
2620
|
},
|
|
2673
2621
|
};
|
|
@@ -2777,17 +2725,33 @@ export class ToolApprovalCoordinator {
|
|
|
2777
2725
|
this.noteStoreError(err, "decideAsk");
|
|
2778
2726
|
ruleEligibility.eligible = false;
|
|
2779
2727
|
try {
|
|
2728
|
+
const confirmSeq = this.nextRowReadSeq();
|
|
2780
2729
|
const row = await this.withStoreDeadline(askStore.getAsk(askId), "getAsk(decideAsk-confirm)", DURABLE_CONVERGE_READ_TIMEOUT_MS);
|
|
2781
|
-
if (row
|
|
2730
|
+
if (row?.state === "STREAM_PENDING")
|
|
2731
|
+
this.followRowOwner(askId, row.owner, confirmSeq);
|
|
2732
|
+
if (row === null || !askRowCarriesOwner(row, owner))
|
|
2782
2733
|
return { lost: true, row: null };
|
|
2783
|
-
if (row
|
|
2734
|
+
if (row.state === "DECIDED" && row.decision === (parsed.value === "deny" ? "deny" : "approve")) {
|
|
2784
2735
|
winnerRow = row;
|
|
2785
2736
|
ambiguousConfirmedRow = row;
|
|
2786
2737
|
noteLanded = noteLandedOnRow(parsed.note, row.decisionNote);
|
|
2787
2738
|
}
|
|
2739
|
+
else if (row.state !== "STREAM_PENDING") {
|
|
2740
|
+
return { lost: true, row };
|
|
2741
|
+
}
|
|
2788
2742
|
}
|
|
2789
2743
|
catch (confirmErr) {
|
|
2790
2744
|
this.noteStoreError(confirmErr, "getAsk(decideAsk-confirm)");
|
|
2745
|
+
return {
|
|
2746
|
+
lost: false,
|
|
2747
|
+
result: {
|
|
2748
|
+
status: 500,
|
|
2749
|
+
body: refusalBody({
|
|
2750
|
+
errorCode: "internal.error",
|
|
2751
|
+
message: "the approval store failed while recording this answer and could not be read back, so whether the answer was recorded is unknown — retry: a retry returns the recorded answer if it was recorded, or records it if it was not",
|
|
2752
|
+
}),
|
|
2753
|
+
},
|
|
2754
|
+
};
|
|
2791
2755
|
}
|
|
2792
2756
|
}
|
|
2793
2757
|
const wantAllowed = parsed.value !== "deny";
|
|
@@ -2840,14 +2804,16 @@ export class ToolApprovalCoordinator {
|
|
|
2840
2804
|
this.allowAllSessions.add(sessionAllowKey(judgedOwner, entry.sessionId, sessionAllowCategory(entry.toolName), entry.grantBinding));
|
|
2841
2805
|
}
|
|
2842
2806
|
const allowed = parsed.value !== "deny";
|
|
2843
|
-
const settleArgs = opts?.settleOutcome !== undefined
|
|
2807
|
+
const settleArgs = opts?.settleOutcome !== undefined
|
|
2808
|
+
? settleArgsOfDecided(opts.settleOutcome)
|
|
2809
|
+
: { allowed, updatedInput: parsed.updatedInput, source: liveHostSource(parsed.decider), ...(!allowed && parsed.note !== undefined ? { denyReason: parsed.note } : {}) };
|
|
2844
2810
|
const readRootGrant = opts?.settleOutcome === undefined || opts.settleOutcomeIsThisRequest === true ? parsed.readRootGrant : undefined;
|
|
2845
2811
|
entry.settle({
|
|
2846
2812
|
by: "human",
|
|
2847
2813
|
allowed: settleArgs.allowed,
|
|
2848
2814
|
updatedInput: settleArgs.updatedInput,
|
|
2849
2815
|
...(settleArgs.source !== undefined ? { hostSource: settleArgs.source } : {}),
|
|
2850
|
-
...(
|
|
2816
|
+
...(settleArgs.denyReason !== undefined ? { denyReason: settleArgs.denyReason } : {}),
|
|
2851
2817
|
...(readRootGrant !== undefined ? { readRootGrant } : {}),
|
|
2852
2818
|
});
|
|
2853
2819
|
const updatedInputDelivered = opts?.updatedInputDelivered ?? true;
|
|
@@ -2935,6 +2901,7 @@ export class ToolApprovalCoordinator {
|
|
|
2935
2901
|
forceParkNow: release,
|
|
2936
2902
|
settleParkRoute: (cause) => leave({ outcome: SETTLE_OUTCOME.EXPIRED, cause, parked: this.unattendedRoutesToPark }),
|
|
2937
2903
|
owner: row.owner,
|
|
2904
|
+
ownerReadSeq: this.rowReadSeq,
|
|
2938
2905
|
executionLane: row.executionLane,
|
|
2939
2906
|
...(row.sessionId !== row.taskId ? { sessionId: row.sessionId } : {}),
|
|
2940
2907
|
...(card.fromSubagent === true ? { originTaskId: row.sourceSessionId } : {}),
|
|
@@ -2968,10 +2935,42 @@ export class ToolApprovalCoordinator {
|
|
|
2968
2935
|
for (const watcher of watchers)
|
|
2969
2936
|
watcher.askIds.delete(askId);
|
|
2970
2937
|
}
|
|
2971
|
-
|
|
2972
|
-
for (const e of this.pendingByAskId.get(askId) ?? [])
|
|
2973
|
-
if (e.
|
|
2974
|
-
|
|
2938
|
+
followRowOwner(askId, owner, readSeq) {
|
|
2939
|
+
for (const e of this.pendingByAskId.get(askId) ?? []) {
|
|
2940
|
+
if (e.ownerReadSeq >= readSeq)
|
|
2941
|
+
continue;
|
|
2942
|
+
e.owner = owner;
|
|
2943
|
+
e.ownerReadSeq = readSeq;
|
|
2944
|
+
}
|
|
2945
|
+
}
|
|
2946
|
+
rowReadSeq = 0;
|
|
2947
|
+
nextRowReadSeq() {
|
|
2948
|
+
this.rowReadSeq += 1;
|
|
2949
|
+
return this.rowReadSeq;
|
|
2950
|
+
}
|
|
2951
|
+
async followRowOwners() {
|
|
2952
|
+
const store = this.askStore;
|
|
2953
|
+
const out = { read: 0, followed: 0, unreadable: 0 };
|
|
2954
|
+
if (!store)
|
|
2955
|
+
return out;
|
|
2956
|
+
for (const askId of [...this.pendingByAskId.keys()]) {
|
|
2957
|
+
out.read += 1;
|
|
2958
|
+
const readSeq = this.nextRowReadSeq();
|
|
2959
|
+
let row;
|
|
2960
|
+
try {
|
|
2961
|
+
row = await this.withStoreDeadline(store.getAsk(askId), "getAsk(follow-row-owners)", DURABLE_CONVERGE_READ_TIMEOUT_MS);
|
|
2962
|
+
}
|
|
2963
|
+
catch (err) {
|
|
2964
|
+
this.noteStoreError(err, "getAsk(follow-row-owners)");
|
|
2965
|
+
out.unreadable += 1;
|
|
2966
|
+
continue;
|
|
2967
|
+
}
|
|
2968
|
+
if (row?.state !== "STREAM_PENDING")
|
|
2969
|
+
continue;
|
|
2970
|
+
this.followRowOwner(askId, row.owner, readSeq);
|
|
2971
|
+
out.followed += 1;
|
|
2972
|
+
}
|
|
2973
|
+
return out;
|
|
2975
2974
|
}
|
|
2976
2975
|
waitingRegistrationCount(askId) {
|
|
2977
2976
|
let n = 0;
|
|
@@ -3047,6 +3046,7 @@ export class ToolApprovalCoordinator {
|
|
|
3047
3046
|
else
|
|
3048
3047
|
this.adoptedPollOffset = adoptedStart + ++polledAdopted;
|
|
3049
3048
|
let row;
|
|
3049
|
+
const readSeq = this.nextRowReadSeq();
|
|
3050
3050
|
try {
|
|
3051
3051
|
row = await this.withStoreDeadline(store.getAsk(askId), "getAsk(poll-suspended)", DURABLE_CONVERGE_READ_TIMEOUT_MS);
|
|
3052
3052
|
}
|
|
@@ -3059,7 +3059,7 @@ export class ToolApprovalCoordinator {
|
|
|
3059
3059
|
continue;
|
|
3060
3060
|
}
|
|
3061
3061
|
if (row.state === "STREAM_PENDING") {
|
|
3062
|
-
this.
|
|
3062
|
+
this.followRowOwner(askId, row.owner, readSeq);
|
|
3063
3063
|
continue;
|
|
3064
3064
|
}
|
|
3065
3065
|
if (this.editedDecisionInFlight(askId))
|