@sema-agent/server 7.134.0 → 7.136.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 +197 -1
- package/USAGE.md +147 -42
- package/deploy/sema-up/README.md +1 -1
- package/deploy/sema-up/chart/templates/NOTES.txt +1 -1
- package/deploy/sema-up/chart/values.yaml +1 -1
- package/dist/adoption/plan.d.ts +1 -1
- package/dist/approval-ask-audit-store.d.ts +24 -24
- package/dist/approval-ask-machine.d.ts +2 -2
- package/dist/approval-card.d.ts +122 -154
- package/dist/approval-card.js +50 -51
- package/dist/approval-content-kind.d.ts +23 -5
- package/dist/approval-content-kind.js +8 -1
- package/dist/approval-deny-reasons.d.ts +1 -1
- package/dist/approval-gate-currency.d.ts +22 -3
- package/dist/approval-gate-currency.js +44 -18
- package/dist/approval-hmac.d.ts +7 -7
- package/dist/approval-policy-settlement.d.ts +2 -2
- package/dist/approval-reconciler.d.ts +3 -3
- package/dist/approval.d.ts +8 -8
- package/dist/approval.js +4 -2
- package/dist/auth-bridge.d.ts +35 -6
- package/dist/auth-bridge.js +20 -3
- package/dist/auto-mode-face.d.ts +4 -4
- package/dist/background-session-reap.d.ts +2 -2
- package/dist/bake-runner/main.d.ts +2 -2
- package/dist/bake-runner/runner.d.ts +4 -4
- package/dist/bench/s1/live-deps.d.ts +1 -1
- package/dist/bench/s1/run-firm.d.ts +1 -1
- package/dist/boot/budget-tracing.d.ts +1 -2
- package/dist/boot/budget-tracing.js +2 -2
- package/dist/boot/coordinators.d.ts +2 -2
- package/dist/boot/coordinators.js +2 -2
- package/dist/boot/deferred-sandbox-path-env.d.ts +0 -6
- package/dist/boot/deferred-sandbox-path-env.js +0 -5
- package/dist/boot/engine-lease.d.ts +5 -5
- package/dist/boot/execution-env.d.ts +16 -15
- package/dist/boot/execution-env.js +19 -21
- package/dist/boot/fatal-exit.d.ts +2 -2
- package/dist/boot/late-binds.d.ts +1 -1
- package/dist/boot/leader.d.ts +1 -1
- package/dist/boot/memory-boundary.d.ts +2 -2
- package/dist/boot/memory-consolidation.d.ts +15 -15
- package/dist/boot/org-memory.js +1 -1
- package/dist/boot/parked-revive-gate.d.ts +3 -3
- package/dist/boot/parked-revive-gate.js +3 -2
- package/dist/boot/reapers.d.ts +4 -4
- package/dist/boot/resolve-spec.d.ts +1 -1
- package/dist/boot/resolve-spec.js +36 -29
- package/dist/boot/runner-deps.d.ts +11 -11
- package/dist/boot/runner-deps.js +7 -4
- package/dist/boot/session-faces.d.ts +3 -3
- package/dist/boot/session-faces.js +11 -30
- package/dist/boot/shutdown.d.ts +5 -5
- package/dist/boot/side-query-lane.d.ts +2 -2
- package/dist/boot/stage-04-stores.d.ts +1 -1
- package/dist/boot/stage-05-execution-env.d.ts +1 -1
- package/dist/boot/stage-05-execution-env.js +4 -4
- package/dist/boot/stage-06-runners.d.ts +1 -1
- package/dist/boot/stage-06-runners.js +0 -2
- package/dist/boot/stage-07-capability-layer.d.ts +1 -1
- package/dist/boot/stage-08-reapers.d.ts +1 -1
- package/dist/boot/stage-09-leader.d.ts +1 -1
- package/dist/boot/stage-10-http-server.d.ts +1 -1
- package/dist/boot/stores.js +4 -4
- package/dist/boot/web-admin.d.ts +17 -17
- package/dist/boot/web-admin.js +15 -27
- package/dist/boot/workflow-orchestration.js +2 -9
- package/dist/brain.d.ts +11 -11
- package/dist/brain.js +12 -3
- package/dist/budget.d.ts +7 -7
- package/dist/budget.js +4 -0
- package/dist/capabilities/approvals-push.d.ts +4 -4
- package/dist/capabilities/builtin-tools.d.ts +5 -5
- package/dist/capabilities/center-plugins.d.ts +5 -5
- package/dist/capabilities/center-plugins.js +1 -1
- package/dist/capabilities/center-prompts.d.ts +1 -1
- package/dist/capabilities/center-wiring.d.ts +1 -1
- package/dist/capabilities/composite-members.d.ts +1 -1
- package/dist/capabilities/execution-lane.d.ts +5 -5
- package/dist/capabilities/execution-lane.js +2 -2
- package/dist/capabilities/hands-lane.d.ts +5 -5
- package/dist/capabilities/mcp-probe.d.ts +11 -7
- package/dist/capabilities/sandbox-file-send.d.ts +1 -18
- package/dist/capabilities/sandbox-file-send.js +0 -7
- package/dist/capabilities/scenarios.d.ts +28 -10
- package/dist/capabilities/scenarios.js +15 -5
- package/dist/capabilities/send-user-file-tool.d.ts +1 -1
- package/dist/capabilities/skills.d.ts +31 -12
- package/dist/capabilities/skills.js +23 -17
- package/dist/capabilities/tool-defer.d.ts +1 -1
- package/dist/capability-facts.d.ts +29 -32
- package/dist/capability-facts.js +17 -21
- package/dist/center-config-tier.d.ts +1 -1
- package/dist/center-credential.d.ts +22 -8
- package/dist/center-credential.js +18 -3
- package/dist/checkpoint-identity.d.ts +5 -0
- package/dist/checkpoint-identity.js +14 -0
- package/dist/config-catalog.d.ts +12 -12
- package/dist/config-catalog.js +12 -10
- package/dist/config-d-migration.js +1 -1
- package/dist/config-invariants.d.ts +5 -5
- package/dist/config-invariants.js +11 -2
- package/dist/config-lkg.d.ts +1 -39
- package/dist/config-lkg.js +1 -83
- package/dist/config-provider.d.ts +13 -13
- package/dist/config-provider.js +2 -1
- package/dist/config-types.d.ts +95 -87
- package/dist/config.d.ts +26 -24
- package/dist/config.js +38 -18
- package/dist/cross-session-settings.d.ts +1 -1
- package/dist/delegated-session-owner.d.ts +16 -13
- package/dist/delegated-session-owner.js +9 -10
- package/dist/deployment-governance.d.ts +16 -16
- package/dist/deployment-shape.d.ts +127 -0
- package/dist/deployment-shape.js +72 -0
- package/dist/device-store.d.ts +1 -1
- package/dist/device-ws-hub.d.ts +1 -1
- package/dist/egress-redirect.d.ts +1 -1
- package/dist/elicitation.d.ts +8 -7
- package/dist/elicitation.js +9 -8
- package/dist/entry-mode-clamp-notice.d.ts +2 -2
- package/dist/env-facts.d.ts +10 -9
- package/dist/env-facts.js +1 -1
- package/dist/env-name-allowlist-knobs.d.ts +5 -5
- package/dist/exec-bounds.d.ts +2 -2
- package/dist/execution-lane-caps.d.ts +31 -43
- package/dist/execution-lane-caps.js +0 -13
- package/dist/file-history-capture.d.ts +9 -9
- package/dist/file-history-disclosure.d.ts +25 -11
- package/dist/file-history-disclosure.js +25 -14
- package/dist/fleet/drain-entry.d.ts +2 -2
- package/dist/fleet/fleet-bus.d.ts +22 -14
- package/dist/fleet/fleet-bus.js +5 -5
- package/dist/fleet/fleet-reconciler.d.ts +9 -9
- package/dist/fleet/subagent-tail-bus.d.ts +4 -4
- package/dist/fleet-client.d.ts +45 -14
- package/dist/fleet-client.js +24 -4
- package/dist/fleet-lease.d.ts +23 -19
- package/dist/fleet-lease.js +31 -23
- package/dist/governance-http-status.d.ts +2 -2
- package/dist/hooks/hook-llm.d.ts +7 -7
- package/dist/hooks/hook-llm.js +14 -8
- package/dist/hooks/hook-runner.d.ts +58 -31
- package/dist/hooks/hook-runner.js +37 -19
- package/dist/host-decision.d.ts +5 -5
- package/dist/host-lsp-manager.d.ts +5 -5
- package/dist/hosted-posture.d.ts +23 -13
- package/dist/hosted-posture.js +4 -9
- package/dist/http/admission.d.ts +2 -2
- package/dist/http/admission.js +20 -5
- package/dist/http/approval-sweeps.d.ts +1 -1
- package/dist/http/approval-sweeps.js +2 -1
- package/dist/http/checkpoint-ctx.d.ts +62 -17
- package/dist/http/checkpoint-ctx.js +78 -35
- package/dist/http/dispatch.d.ts +3 -3
- package/dist/http/dispatch.js +9 -9
- package/dist/http/durable-run-leg.js +4 -3
- package/dist/http/idempotency.d.ts +2 -2
- package/dist/http/mcp-dial-deadline.d.ts +7 -5
- package/dist/http/memory-compliance-failure-reply.d.ts +4 -4
- package/dist/http/owner-access.d.ts +4 -6
- package/dist/http/owner-access.js +1 -1
- package/dist/http/principal-gate.d.ts +7 -7
- package/dist/http/principal-gate.js +3 -2
- package/dist/http/readiness.d.ts +1 -1
- package/dist/http/request-guards.d.ts +4 -4
- package/dist/http/request-guards.js +2 -1
- package/dist/http/resume-ctx-read.d.ts +9 -23
- package/dist/http/resume-ctx-read.js +2 -3
- package/dist/http/resume-legs.d.ts +3 -3
- package/dist/http/resume-legs.js +11 -8
- package/dist/http/route-ctx.d.ts +29 -29
- package/dist/http/route-table.d.ts +9 -9
- package/dist/http/routes/agents-roster.d.ts +1 -1
- package/dist/http/routes/approvals-assistant.d.ts +5 -7
- package/dist/http/routes/approvals-assistant.js +101 -26
- package/dist/http/routes/background.d.ts +3 -3
- package/dist/http/routes/background.js +2 -2
- package/dist/http/routes/capabilities.d.ts +1 -1
- package/dist/http/routes/capabilities.js +16 -8
- package/dist/http/routes/config-catalog.d.ts +1 -1
- package/dist/http/routes/devices.d.ts +1 -1
- package/dist/http/routes/diagnostics.d.ts +3 -3
- package/dist/http/routes/fleet.d.ts +1 -1
- package/dist/http/routes/fleet.js +2 -1
- package/dist/http/routes/mcp-reconnect.d.ts +4 -4
- package/dist/http/routes/mcp-reconnect.js +3 -3
- package/dist/http/routes/memory-consolidation.d.ts +1 -1
- package/dist/http/routes/notify-wake.d.ts +1 -1
- package/dist/http/routes/notify-wake.js +2 -2
- package/dist/http/routes/rules.d.ts +1 -1
- package/dist/http/routes/runs.js +23 -11
- package/dist/http/routes/session-sync.d.ts +1 -1
- package/dist/http/routes/session-sync.js +97 -46
- package/dist/http/routes/sessions-list.js +1 -1
- package/dist/http/routes/sessions.js +43 -53
- package/dist/http/routes/tasks.d.ts +1 -1
- package/dist/http/routes/trace-usage.d.ts +1 -1
- package/dist/http/routes/workflows.d.ts +3 -0
- package/dist/http/routes/workflows.js +31 -28
- package/dist/http/send.d.ts +5 -5
- package/dist/http/server.d.ts +34 -34
- package/dist/http/session-inherit-env.d.ts +3 -3
- package/dist/http/sse-lifecycle.d.ts +1 -1
- package/dist/http/sse-log.d.ts +2 -2
- package/dist/http/submit-ctx.js +1 -1
- package/dist/http/sync-submit-body.d.ts +1 -1
- package/dist/http/verify-rounds.d.ts +1 -1
- package/dist/http/wire-types.d.ts +33 -24
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/instruction-source-notice.d.ts +2 -2
- package/dist/key-resolver.d.ts +3 -3
- package/dist/lane-home-probe.d.ts +1 -1
- package/dist/leader/diffout.d.ts +1 -1
- package/dist/leader/diffup.d.ts +2 -2
- package/dist/leader/endpoint.d.ts +1 -1
- package/dist/leader/fanout.d.ts +1 -1
- package/dist/leader/leader.d.ts +4 -4
- package/dist/leader/merge.d.ts +3 -3
- package/dist/leader/repair-wire.d.ts +1 -1
- package/dist/leader/wire.d.ts +6 -6
- package/dist/list-entry-display.d.ts +1 -1
- package/dist/lsp-evict.d.ts +1 -1
- package/dist/mcp-assertion-header.d.ts +1 -1
- package/dist/memory-layer-legacy-lock.d.ts +1 -1
- package/dist/memory-operator-faces.d.ts +1 -1
- package/dist/memory-posture.js +4 -2
- package/dist/memory-project-layer.d.ts +1 -1
- package/dist/memory-scope.d.ts +19 -19
- package/dist/memory-store-refusal.d.ts +4 -4
- package/dist/model-entry-headers.d.ts +2 -2
- package/dist/model-entry-refusal.d.ts +17 -17
- package/dist/model-provider.d.ts +10 -10
- package/dist/model-reach-scope.d.ts +1 -1
- package/dist/model-route-endpoint.d.ts +6 -6
- package/dist/model-route-gap.d.ts +49 -4
- package/dist/model-route-gap.js +34 -1
- package/dist/model-route-url.d.ts +5 -5
- package/dist/model-select.d.ts +15 -6
- package/dist/model-select.js +5 -0
- package/dist/model-unreachable-notice.d.ts +3 -3
- package/dist/namespaced-rule-name.d.ts +15 -5
- package/dist/namespaced-rule-name.js +3 -2
- package/dist/object-store-buckets.d.ts +13 -0
- package/dist/object-store-buckets.js +3 -0
- package/dist/observability/corrupt-read-seat.d.ts +9 -9
- package/dist/observability/cost-taxonomy.d.ts +1 -1
- package/dist/observability/err-text.d.ts +1 -1
- package/dist/observability/fail-open.d.ts +17 -13
- package/dist/observability/fail-open.js +17 -13
- package/dist/observability/metrics.d.ts +3 -3
- package/dist/observability/metrics.js +1 -1
- package/dist/observability/principal-context.d.ts +4 -1
- package/dist/observability/principal-context.js +6 -1
- package/dist/observability/run-terminal.d.ts +36 -36
- package/dist/observability/secret-env-scrub.d.ts +3 -3
- package/dist/observability/tool-trace.d.ts +1 -1
- package/dist/operator-ask.d.ts +4 -4
- package/dist/orchestration/workflow-agent-session-index.d.ts +3 -3
- package/dist/orchestration/workflow-completion-inbox.d.ts +20 -5
- package/dist/orchestration/workflow-completion-inbox.js +29 -7
- package/dist/orchestration/workflow-notify-journal.d.ts +43 -19
- package/dist/orchestration/workflow-notify-journal.js +17 -0
- package/dist/outbound-dispatcher.d.ts +4 -4
- package/dist/parent-watch.d.ts +4 -4
- package/dist/parked-decide.d.ts +20 -18
- package/dist/parked-decide.js +31 -11
- package/dist/parked-revive-surface.d.ts +7 -7
- package/dist/parked-revive-surface.js +2 -3
- package/dist/peer-directory.d.ts +5 -4
- package/dist/peer-directory.js +6 -6
- package/dist/permission-rule-list.d.ts +10 -1
- package/dist/permission-rule-list.js +7 -5
- package/dist/permission-rule-vocab.d.ts +2 -2
- package/dist/plugins/adoption-log-sql.d.ts +1 -1
- package/dist/plugins/approval-ask-store-file.d.ts +8 -1
- package/dist/plugins/approval-ask-store-file.js +6 -3
- package/dist/plugins/approval-ask-store-memory.d.ts +11 -7
- package/dist/plugins/approval-ask-store-memory.js +11 -7
- package/dist/plugins/approval-ask-store-sql.d.ts +42 -15
- package/dist/plugins/approval-ask-store-sql.js +21 -5
- package/dist/plugins/approval-exemption-store.d.ts +3 -3
- package/dist/plugins/approval-nonce-store.d.ts +3 -3
- package/dist/plugins/background-agent-store-sql.d.ts +1 -1
- package/dist/plugins/background-shell-support.d.ts +2 -2
- package/dist/plugins/blob-backend.d.ts +1 -1
- package/dist/plugins/blob-backend.js +2 -1
- package/dist/plugins/caching-session-store.d.ts +23 -32
- package/dist/plugins/caching-session-store.js +5 -17
- package/dist/plugins/checkpoint-index-columns.d.ts +130 -0
- package/dist/plugins/checkpoint-index-columns.js +90 -0
- package/dist/plugins/checkpoint-store-sql.d.ts +71 -69
- package/dist/plugins/checkpoint-store-sql.js +109 -127
- package/dist/plugins/device-store-sql.d.ts +7 -6
- package/dist/plugins/e2b-orphan-reclaim.d.ts +1 -1
- package/dist/plugins/ensure-schema-lock-policy.d.ts +1 -1
- package/dist/plugins/file-history-store-sql.d.ts +15 -7
- package/dist/plugins/file-history-store-sql.js +55 -36
- package/dist/plugins/file-run-store.d.ts +8 -8
- package/dist/plugins/fork-routing-session-store.d.ts +2 -2
- package/dist/plugins/fork-routing-session-store.js +1 -1
- package/dist/plugins/host-platform.d.ts +10 -10
- package/dist/plugins/image-bake-store-sql.d.ts +1 -1
- package/dist/plugins/image-index-sql.d.ts +1 -1
- package/dist/plugins/leader-run-store-sql.d.ts +1 -1
- package/dist/plugins/local-checkpoint-store.d.ts +10 -10
- package/dist/plugins/local-checkpoint-store.js +7 -7
- package/dist/plugins/local-session-store.d.ts +34 -38
- package/dist/plugins/local-session-store.js +20 -39
- package/dist/plugins/local-session-window.d.ts +1 -1
- package/dist/plugins/mailbox-store-sql.d.ts +2 -2
- package/dist/plugins/memory-engine-pg.d.ts +1 -1
- package/dist/plugins/memory-run-store.d.ts +4 -4
- package/dist/plugins/memory-sync-store-pg.d.ts +3 -3
- package/dist/plugins/one-time-migrations.d.ts +73 -54
- package/dist/plugins/one-time-migrations.js +131 -134
- package/dist/plugins/outcome-ledger-sql.d.ts +1 -1
- package/dist/plugins/park-commit-watch.d.ts +3 -3
- package/dist/plugins/permission-rule-store-file.d.ts +5 -5
- package/dist/plugins/permission-rule-store-file.js +12 -19
- package/dist/plugins/permission-rule-store-sql.d.ts +38 -4
- package/dist/plugins/permission-rule-store-sql.js +67 -24
- package/dist/plugins/pg-cost-quota.d.ts +1 -1
- package/dist/plugins/pg-pool.d.ts +2 -2
- package/dist/plugins/pg-pool.js +5 -2
- package/dist/plugins/pg-rate-limiter.d.ts +1 -1
- package/dist/plugins/pg-session-storage.d.ts +8 -20
- package/dist/plugins/pg-session-storage.js +14 -27
- package/dist/plugins/remote-env-adb.d.ts +10 -10
- package/dist/plugins/remote-env-device.d.ts +10 -9
- package/dist/plugins/remote-env-device.js +6 -2
- package/dist/plugins/remote-env-e2b.d.ts +3 -3
- package/dist/plugins/remote-env-host.d.ts +16 -16
- package/dist/plugins/remote-env-k8s.d.ts +26 -13
- package/dist/plugins/remote-env-k8s.js +24 -7
- package/dist/plugins/remote-env-local-docker.d.ts +2 -2
- package/dist/plugins/remote-env-ssh.d.ts +4 -4
- package/dist/plugins/remote-scratchpad.d.ts +2 -3
- package/dist/plugins/remote-scratchpad.js +0 -4
- package/dist/plugins/remote-shell.d.ts +6 -6
- package/dist/plugins/retention-lane-store-sql.d.ts +4 -4
- package/dist/plugins/retention-store-sql.d.ts +4 -4
- package/dist/plugins/roster-store-sql.d.ts +1 -1
- package/dist/plugins/run-store-sql.d.ts +8 -8
- package/dist/plugins/s3-answer.d.ts +15 -0
- package/dist/plugins/s3-answer.js +5 -0
- package/dist/plugins/schema-consistency.d.ts +2 -2
- package/dist/plugins/schema-ensure-legs.d.ts +3 -3
- package/dist/plugins/schema-indexes.d.ts +1 -1
- package/dist/plugins/schema-live-columns.d.ts +1 -1
- package/dist/plugins/session-event-payload.d.ts +4 -4
- package/dist/plugins/session-fork.d.ts +34 -0
- package/dist/plugins/session-fork.js +29 -0
- package/dist/plugins/session-ownership.js +1 -1
- package/dist/plugins/session-placement.d.ts +1 -1
- package/dist/plugins/session-policy-store-sql.d.ts +12 -12
- package/dist/plugins/session-store.d.ts +2 -2
- package/dist/plugins/session-store.js +2 -2
- package/dist/plugins/shared-memory-store-sql.d.ts +2 -2
- package/dist/plugins/snapshot-bucket-presence.d.ts +39 -4
- package/dist/plugins/snapshot-bucket-presence.js +35 -7
- package/dist/plugins/sql-driver.d.ts +8 -8
- package/dist/plugins/sql-errors.d.ts +40 -1
- package/dist/plugins/sql-errors.js +49 -1
- package/dist/plugins/sql-json-column.d.ts +21 -21
- package/dist/plugins/sql-row-helpers.d.ts +2 -2
- package/dist/plugins/store-backend.d.ts +17 -16
- package/dist/plugins/store-backend.js +3 -3
- package/dist/plugins/store-contracts.d.ts +21 -21
- package/dist/plugins/store-fault.d.ts +4 -0
- package/dist/plugins/store-fault.js +8 -0
- package/dist/plugins/task-attachment-store.d.ts +2 -2
- package/dist/plugins/task-list-store-sql.d.ts +1 -1
- package/dist/plugins/tidb-pool.d.ts +2 -2
- package/dist/plugins/tidb-pool.js +10 -3
- package/dist/plugins/tidb-session-store.d.ts +16 -26
- package/dist/plugins/tidb-session-store.js +15 -27
- package/dist/plugins/tool-result-store-sql.d.ts +1 -1
- package/dist/plugins/usage-window-store-sql.d.ts +3 -3
- package/dist/plugins/user-input-ledger-file.d.ts +1 -1
- package/dist/plugins/user-input-ledger-sql.d.ts +3 -3
- package/dist/plugins/web-search.d.ts +19 -5
- package/dist/plugins/web-search.js +20 -5
- package/dist/{orchestration/workflow-journal-entry.d.ts → plugins/workflow-journal-payload.d.ts} +23 -32
- package/dist/plugins/workflow-journal-payload.js +32 -0
- package/dist/plugins/workflow-journal-store-sql.d.ts +28 -14
- package/dist/plugins/workflow-journal-store-sql.js +34 -15
- package/dist/plugins/workflow-run-store-sql.d.ts +4 -4
- package/dist/posture-source.d.ts +11 -11
- package/dist/principal-jwt.d.ts +6 -6
- package/dist/project-identity.d.ts +3 -3
- package/dist/project-memory.d.ts +4 -4
- package/dist/read-face-posture.d.ts +7 -7
- package/dist/request-declaration-refusal.d.ts +94 -0
- package/dist/request-declaration-refusal.js +78 -0
- package/dist/request-image-urls.d.ts +6 -0
- package/dist/request-image-urls.js +27 -0
- package/dist/request-key-closure.d.ts +6 -1
- package/dist/request-key-closure.js +5 -2
- package/dist/request-value-closure.d.ts +15 -8
- package/dist/request-value-closure.js +2 -0
- package/dist/router/route-orchestration.d.ts +11 -16
- package/dist/router/route-orchestration.js +2 -12
- package/dist/rule-entry-list.d.ts +8 -7
- package/dist/rule-entry-list.js +2 -9
- package/dist/rules-consent.d.ts +6 -6
- package/dist/rules-consent.js +2 -0
- package/dist/run-cancel-context.d.ts +5 -5
- package/dist/run-local.d.ts +10 -10
- package/dist/runs.d.ts +13 -11
- package/dist/runs.js +15 -1
- package/dist/runtime-caps-resolver.d.ts +6 -6
- package/dist/runtime-caps-resolver.js +1 -1
- package/dist/runtime-governance.d.ts +9 -9
- package/dist/sandbox-pkg-source.d.ts +17 -12
- package/dist/sandbox-pkg-source.js +14 -9
- package/dist/sealed-key.d.ts +22 -3
- package/dist/sealed-key.js +47 -4
- package/dist/security.d.ts +23 -26
- package/dist/security.js +12 -9
- package/dist/server-secret-env.d.ts +10 -10
- package/dist/session-children-retire.d.ts +1 -1
- package/dist/session-error-wire.d.ts +7 -7
- package/dist/session-incarnation.d.ts +65 -37
- package/dist/session-incarnation.js +30 -12
- package/dist/session-policy-wire.d.ts +27 -5
- package/dist/session-policy-wire.js +15 -1
- package/dist/session-records-skipped-notice.d.ts +1 -1
- package/dist/session-row.d.ts +3 -17
- package/dist/session-row.js +4 -0
- package/dist/session-sync-kernel.d.ts +4 -4
- package/dist/session-sync.d.ts +61 -6
- package/dist/session-sync.js +55 -10
- package/dist/session-titler.d.ts +7 -6
- package/dist/session-titler.js +8 -13
- package/dist/session-watch.d.ts +3 -3
- package/dist/session-watch.js +4 -4
- package/dist/sighup-idle.d.ts +2 -2
- package/dist/spec-fields.d.ts +4 -4
- package/dist/sql-engine-posture.d.ts +3 -3
- package/dist/store-posture.d.ts +2 -2
- package/dist/stored-request-tool-axes-m19.d.ts +1 -1
- package/dist/task-a2a.d.ts +52 -79
- package/dist/task-a2a.js +224 -62
- package/dist/task-cwd.d.ts +7 -88
- package/dist/task-cwd.js +2 -15
- package/dist/task-mcp.d.ts +13 -17
- package/dist/task-mcp.js +29 -49
- package/dist/task-settings.d.ts +30 -18
- package/dist/task-settings.js +33 -3
- package/dist/task-workflow.d.ts +0 -24
- package/dist/task-workflow.js +2 -1
- package/dist/terminal.d.ts +5 -5
- package/dist/tighten-only-seats.d.ts +7 -6
- package/dist/tighten-only-seats.js +1 -1
- package/dist/tool-approval.d.ts +166 -207
- package/dist/tool-approval.js +61 -61
- package/dist/tool-rule-names.d.ts +2 -2
- package/dist/trace/core-keyset-guard.d.ts +13 -8
- package/dist/trace/engine-notice-wire.d.ts +5 -5
- package/dist/trace/engine-notice-wire.js +1 -0
- package/dist/trace/exit-seat.d.ts +31 -4
- package/dist/trace/exit-seat.js +69 -67
- package/dist/trace/ledger-events.d.ts +3 -3
- package/dist/trace/ledger-sink.d.ts +1 -1
- package/dist/trace/model-segment.d.ts +3 -3
- package/dist/trace/project.d.ts +47 -45
- package/dist/trace/project.js +33 -1
- package/dist/trace/redact.d.ts +61 -31
- package/dist/trace/redact.js +394 -153
- package/dist/trace/self-minted-wire.d.ts +302 -14
- package/dist/trace/self-minted-wire.js +87 -0
- package/dist/trace/sema-provenance.d.ts +1 -1
- package/dist/trace/task-notification-facets.d.ts +4 -4
- package/dist/trace/wire-projection-faces.d.ts +3 -3
- package/dist/trace/wire-projection-faces.js +1 -1
- package/dist/unattended-permission-mode.d.ts +5 -5
- package/dist/url-credential-refusal.d.ts +52 -0
- package/dist/url-credential-refusal.js +14 -0
- package/dist/url-refusal.d.ts +16 -3
- package/dist/url-refusal.js +15 -2
- package/dist/usage-analytics.d.ts +2 -2
- package/dist/user-input-ledger.d.ts +23 -23
- package/dist/web-admin-client/apply-effective.d.ts +5 -5
- package/dist/web-admin-client/apply-effective.js +2 -1
- package/dist/web-admin-client/apply-ledger.d.ts +2 -2
- package/dist/web-admin-client/center-request.d.ts +2 -2
- package/dist/web-admin-client/facade.d.ts +5 -5
- package/dist/web-admin-client/facade.js +1 -1
- package/dist/web-admin-client/hot-keys-registry.d.ts +2 -2
- package/dist/web-admin-client/http-client.d.ts +4 -4
- package/dist/web-admin-client/mcp-revocation.d.ts +1 -1
- package/dist/web-admin-client/pull-state.d.ts +1 -1
- package/dist/web-admin-client/read-face.d.ts +2 -2
- package/dist/web-admin-client/read-warnings.d.ts +5 -5
- package/dist/web-admin-client/restart-signal.d.ts +6 -6
- package/dist/web-admin-client/skills-mcp.d.ts +28 -3
- package/dist/web-admin-client/skills-mcp.js +29 -1
- package/dist/web-admin-client/types.d.ts +16 -9
- package/dist/workspace-space.d.ts +32 -3
- package/dist/workspace-space.js +26 -0
- package/dist/write-protection.d.ts +2 -2
- package/package.json +5 -3
- package/scripts/drain-check-local.mjs +4 -2
- package/scripts/drain-check.mysql.sql +6 -2
- package/scripts/drain-check.pg.sql +6 -2
- package/skills/loop.md +1 -1
- package/skills/schedule.md +1 -1
- package/wire-changes/server@7.104.0.json +134 -0
- package/wire-changes/server@7.105.0.json +53 -0
- package/wire-changes/server@7.106.0.json +475 -0
- package/wire-changes/server@7.107.0.json +64 -0
- package/wire-changes/server@7.108.0.json +153 -0
- package/wire-changes/server@7.109.0.json +46 -0
- package/wire-changes/server@7.110.0.json +90 -0
- package/wire-changes/server@7.111.0.json +86 -0
- package/wire-changes/server@7.112.0.json +60 -0
- package/wire-changes/server@7.113.0.json +26 -0
- package/wire-changes/server@7.114.0.json +26 -0
- package/wire-changes/server@7.115.0.json +97 -0
- package/wire-changes/server@7.116.0.json +218 -0
- package/wire-changes/server@7.116.1.json +26 -0
- package/wire-changes/server@7.117.0.json +65 -0
- package/wire-changes/server@7.118.0.json +129 -0
- package/wire-changes/server@7.119.0.json +65 -0
- package/wire-changes/server@7.120.0.json +89 -0
- package/wire-changes/server@7.121.0.json +219 -0
- package/wire-changes/server@7.122.0.json +54 -0
- package/wire-changes/server@7.123.0.json +26 -0
- package/wire-changes/server@7.124.0.json +336 -0
- package/wire-changes/server@7.124.1.json +26 -0
- package/wire-changes/server@7.125.0.json +111 -0
- package/wire-changes/server@7.126.0.json +285 -0
- package/wire-changes/server@7.127.0.json +77 -0
- package/wire-changes/server@7.127.1.json +26 -0
- package/wire-changes/server@7.127.2.json +53 -0
- package/wire-changes/server@7.128.0.json +26 -0
- package/wire-changes/server@7.129.0.json +106 -0
- package/wire-changes/server@7.129.1.json +26 -0
- package/wire-changes/server@7.130.0.json +26 -0
- package/wire-changes/server@7.131.0.json +118 -0
- package/wire-changes/server@7.132.0.json +226 -0
- package/wire-changes/server@7.133.0.json +1155 -0
- package/wire-changes/server@7.134.0.json +107 -0
- package/wire-changes/server@7.135.0.json +174 -0
- package/wire-changes/server@7.136.0.json +448 -0
- package/dist/http/run-declared-families.d.ts +0 -16
- package/dist/http/run-declared-families.js +0 -12
- package/dist/orchestration/workflow-journal-entry.js +0 -27
package/dist/tool-approval.d.ts
CHANGED
|
@@ -1,64 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* [ref]/[ref]② tool-approval bridge — the SERVICE side of core's `RunnerDeps.onAsk` seam (core `tool-policy.ts`
|
|
3
|
-
* `resolveAsk`, 1.290's sync-ask leg). The SIBLING of {@link import("./question.js").QuestionCoordinator}: onQuestion
|
|
4
|
-
* routes the agent's AskUserQuestion tool to a live human; THIS routes a policy `ask` DECISION (e.g. the
|
|
5
|
-
* `createFsWriteGatePolicy` fs-write gate, an ask-list rule, or a non-durable safety ask) to the live human as a
|
|
6
|
-
* CC-parity three-choice card (Yes / Yes-allow-all-session / No).
|
|
7
|
-
*
|
|
8
|
-
* Wire shape (mirrors question end to end): core adjudicates a tool call `ask` → `resolveAsk(req, onAsk)` calls this
|
|
9
|
-
* coordinator's `ask` → we mint a pending entry + emit a `tool_approval` SSE frame on the run's live stream → the
|
|
10
|
-
* shell renders the three-choice card → `POST /v1/tool-approvals/:id/respond` settles the parked promise →
|
|
11
|
-
* `resolveAsk` maps our boolean to allow/deny. RESPOND BODY selection rationale: the question precedent's body is
|
|
12
|
-
* core's own QuestionAnswer (a structured multi-answer object) because core FENCES its semantics; an approval has no
|
|
13
|
-
* core-side answer object — `OnAsk` resolves to a BARE boolean — so the wire body is a minimal closed enum
|
|
14
|
-
* `{decision: "allow" | "allow_session" | "deny"}` mapping 1:1 onto the CC card's three choices (no free text = no
|
|
15
|
-
* fence needed; "allow_session" carries the Yes-allow-all intent that a boolean cannot).
|
|
16
|
-
*
|
|
17
|
-
* Session state ([ref]② "桥内会话态"): `allow_session` remembers a per-CAPABILITY grant keyed by
|
|
18
|
-
* `[owner, sessionId, category]` — a LATER ask in that (owner, session) whose tool maps to the SAME category
|
|
19
|
-
* auto-allows WITHOUT a card (CC 207: "Yes, allow all edits during this session") only through the FOUR-WAY
|
|
20
|
-
* conjunction at the short-circuit (see `ask`): {@link standingAnswerHome} over the ask's three facts
|
|
21
|
-
* (NOT governance-forced [ref] 件7/[ref], NOT `requiresRealApproval` [ref], NOT `mandated` S-660 — the SAME
|
|
22
|
-
* predicate decides whether an `allow_session` answer may MINT a grant, see `finishRespond`) ∧ a truthy sessionId ∧
|
|
23
|
-
* the grant itself ∧ `sessionGrantUncontestedByRow` (the durable row must not contradict the local peek). The category collapses the
|
|
24
|
-
* fs-WRITE tool family (Write/Edit/NotebookEdit, canonical space) into ONE bucket `"fs-write"`; any OTHER tool is
|
|
25
|
-
* its OWN bucket `"tool:<canonical>"`. 🔴 A `allow_session` on a NON-fs-write ask (an irreversible-Bash safety ask,
|
|
26
|
-
* an ask-list rule on another tool) therefore unlocks ONLY that same tool for the session — it must NEVER unlock the
|
|
27
|
-
* fs-write family (the "approve a cheap ask once → all future Write/Edit auto-allowed" scope widening, 三路复审 A 组 修2).
|
|
28
|
-
* The key is scoped to the VERIFIED owner too, so a session id shared across principals cannot inherit another's
|
|
29
|
-
* grant. This is the cheapest mid-task implementation; a mode SWITCH (default → acceptEdits) still goes through the
|
|
30
|
-
* shell's intent on the next task ([ref] table).
|
|
31
|
-
*
|
|
32
|
-
* 🔒 FAIL-CLOSED everywhere (the inverse of the question lane — an unanswered QUESTION never blocks the run: since
|
|
33
|
-
* [ref] the coordinator reports `unavailable` and CORE decides the landing, which depends on WHEN the human became
|
|
34
|
-
* unreachable — at policy time the durable gate says `ask` and the leg parks; once the tool is already running core is
|
|
35
|
-
* past `suspendAsk`, so it continues on `declined_unavailable`; an unanswered APPROVAL must NOT let the write
|
|
36
|
-
* proceed): TTL expiry and client disconnect ([ref] `parkOpenAsksForTask` → `forceParkNow`) land on the ONE
|
|
37
|
-
* unattended-outcome former ({@link ToolApprovalCoordinator.unattendedOutcome}, [ref] R-13) — park route
|
|
38
|
-
* ("unavailable" ⇒ core durable-parks) by default, a DEPLOYMENT-POLICY refusal (`{allow:false, settledBy:"policy",
|
|
39
|
-
* reason}` ⇒ core settles `policy_refused`; S-689 — never a bare `false`, which core reads as a PERSON's refusal)
|
|
40
|
-
* ONLY where the deployment declared `UNATTENDED_APPROVAL_POLICY=deny`; a run ABORT (task cancel → `runCancel`)
|
|
41
|
-
* still resolves `false` — the row goes VOID, there is nothing left to redeem. Since [ref] G1 (core 1.295
|
|
42
|
-
* OnAsk 三值化) the "no reachable human" class returns
|
|
43
|
-
* "unavailable" instead of false — no ALS context AND no bound-closure broker hit(1.258 起 bg/嵌套子代经
|
|
44
|
-
* spec.onAsk 的 bound 闭包 + streams broker 直达宿主活流,「无 ctx」只剩 durable-submit/headless resume
|
|
45
|
-
* 残余腿)and emit failure
|
|
46
|
-
* (card never delivered, and only when this catch is the first settler — a human verdict that raced in during the
|
|
47
|
-
* await keeps its boolean) ⇒ "unavailable" → core durable-parks (or fail-closed denies without a checkpoint). core's
|
|
48
|
-
* `resolveAsk` maps false to a deny WITH the ask message, so the model can re-route (deny + continue turn, [ref]⑤).
|
|
49
|
-
* Owner gate on respond = the VERIFIED principal (gatedPrincipal at the HTTP layer), 404 without an existence oracle
|
|
50
|
-
* — same posture as question/elicit. The frame's model-authored surfaces (message + args) are secret-REDACTED
|
|
51
|
-
* before they are streamed; the SIZE bound is per-surface: args ride a byte cap (`MAX_APPROVAL_ARGS_BYTES`,
|
|
52
|
-
* over-cap ⇒ `argsOmitted`), while the legacy frame's `message` is redacted but NOT length-capped — the char
|
|
53
|
-
* cap (`MAX_MESSAGE`, approval-card.ts `capText`) lives on the card/`approval_request` projection only (same
|
|
54
|
-
* redact-at-write contract as question; the args are shown to a human,
|
|
55
|
-
* never re-fed to a model). No throttle (unlike question): an approval breach-default would be a DENY (task failure),
|
|
56
|
-
* and asks are turn-blocking by construction — the TTL bounds the human-side exposure instead.
|
|
57
|
-
*/
|
|
58
|
-
import { type ParkedGateFace } from "./approval-content-kind.js";
|
|
59
1
|
import { type ApprovalDecidedBy, type HostSettledBy, type RetiredDecisionKeyFacts } from "./host-decision.js";
|
|
60
2
|
import type { IncomingMessage } from "node:http";
|
|
61
|
-
import { type AskClass, type AskRequest, type AskOutcome, type PermissionResult, type CheckpointGate, type PendingAction, type PersistedRuleMandate, type ReadRootGrantCandidate, type RuleOffer, type AutoModeFallbackCause, type BoundGrantAbsence, type BoundSkillGrants, type ToolApprovalCard } from "@sema-agent/core";
|
|
3
|
+
import { type AskClass, type AskRequest, type AskOutcome, type PermissionResult, type CheckpointGate, type PendingAction, type PersistedRuleMandate, type ReadRootGrantCandidate, type RuleOffer, type AutoModeFallbackCause, type BoundGrantAbsence, type BoundSkillGrants, type ToolApprovalCard, type ReopenReason } from "@sema-agent/core";
|
|
62
4
|
import { type CardRulePersisted, type RuleConsentLane } from "./rules-consent.js";
|
|
63
5
|
import type { GateCurrencyStore } from "./approval-gate-currency.js";
|
|
64
6
|
import { type AllowRuleShadowProjection, type DenialLimitFallback, type RuleOffersAbsence, type ApprovalRequestFrame, type ApprovalRevokeFrame, type ApprovalCardLegFrame, type ApprovalCompleteFrame, type RuleEvidenceProjection } from "./approval-card.js";
|
|
@@ -70,20 +12,6 @@ import { type GovernanceAskMarks } from "./governance-ask-marks.js";
|
|
|
70
12
|
import { type GovernancePosture } from "./runtime-governance.js";
|
|
71
13
|
import { type GrantBinding, type StandingAnswerCall } from "./standing-answer-grant.js";
|
|
72
14
|
import { type ApprovalExemptionStore } from "./plugins/approval-exemption-store.js";
|
|
73
|
-
/** [ref]:审批 gate kind 闭集(core gateMatch 的 `human`/`irreversible_ask` ↔ outcome.gate "policy_ask")。
|
|
74
|
-
* 此前 7 份手写副本散在两只 checkpoint store 的数组/SQL 字面与 /decide 守卫——core 加审批味 kind 时
|
|
75
|
-
* 全部静默漂移。core 无导出词表(全大写导出面零命中,2026-08-09 亲验),属主落此;SQL IN 片段从
|
|
76
|
-
* 数组派生保证同源。门=test/approval-gate-kinds-single-owner.test.ts(副本回潮即红)。 */
|
|
77
|
-
export declare const APPROVAL_GATE_KINDS: readonly ["human", "irreversible_ask"];
|
|
78
|
-
export type ApprovalGateKind = (typeof APPROVAL_GATE_KINDS)[number];
|
|
79
|
-
export declare function isApprovalGateKind(k: string | undefined): k is ApprovalGateKind;
|
|
80
|
-
/**
|
|
81
|
-
* 停驻行的到期归 SLA 拒扫腿(deny)而不是作废(expire)?—— **一只谓词**:审批门型 ∧ core `facetOf(gate)` 读作 `A`(问答卡 ⇒ `B`,到期作废;
|
|
82
|
-
* 无门型 / 非审批门 ⇒ 不归拒扫)。两只店的拒扫选行与作废腿的补集都读这一只(SQL 腿的 `gate_kind IN …` 只是它的粗筛前置,判官仍是 core)。
|
|
83
|
-
*/
|
|
84
|
-
export declare function denySweepOwns(gate: ParkedGateFace | undefined): boolean;
|
|
85
|
-
/** 两方言同形的 SQL IN 片段(值为闭集常量字面,无注入面)。 */
|
|
86
|
-
export declare const APPROVAL_GATE_KINDS_SQL_IN: string;
|
|
87
15
|
/** {@link ToolApprovalCoordinator.adoptOpenAsks} 的读数(装配点进启动日志)。 */
|
|
88
16
|
interface OpenAskAdoption {
|
|
89
17
|
/** 本次接管进活集合的问数。 */
|
|
@@ -96,7 +24,7 @@ interface OpenAskAdoption {
|
|
|
96
24
|
readonly capped: boolean;
|
|
97
25
|
}
|
|
98
26
|
/**
|
|
99
|
-
* 耐久回决口 `POST /v1/approvals/:sessionId/decide` 的路径串 ——
|
|
27
|
+
* 耐久回决口 `POST /v1/approvals/:sessionId/decide` 的路径串 —— [ref]:迟到回决口 PARKING 臂 202 体的机读指路 `decidePath`。
|
|
100
28
|
* 路由表那一行(`http/routes/approvals-assistant.ts` 的 `approval-decide`)按 pattern 匹配它;两者同形由往返钉守
|
|
101
29
|
* (`test/parked-late-decision.test.ts` G3-c:本函数的输出经 `lookupRoute` 落 `approval-decide`)。会话段按路由的 `safeDecode` 对称编码。
|
|
102
30
|
*/
|
|
@@ -115,8 +43,8 @@ export type NotPendingCause = AskRowEndingCause | typeof NOT_PENDING_UNKNOWN_CAU
|
|
|
115
43
|
/**
|
|
116
44
|
* `GET /v1/tool-approvals/:approvalId` 应答体 `state` 的**闭集**(一只 ask 此刻在哪一态;读法与应答口逐条同源):
|
|
117
45
|
* · `pending` —— 本副本上有在等它的活登记(应答口此刻收得下);
|
|
118
|
-
* · `decided` —— 行 `DECIDED`(有人 / 有策略决过;回执三键同晚答回放体),**或**行 `PARKED` 而它的门已被决(
|
|
119
|
-
* · `parked` —— 行 `PARKING`,或行 `PARKED` 且门仍是该会话当前待决的审批门(转后台候批;应答口走迟到受理,耐久回决口照收);
|
|
46
|
+
* · `decided` —— 行 `DECIDED`(有人 / 有策略决过;回执三键同晚答回放体),**或**行 `PARKED` 而它的门已被决([ref]:checkpoint 已结算,见 {@link ParkedGateReading});
|
|
47
|
+
* · `parked` —— 行 `PARKING`,或行 `PARKED` 且门仍是该会话当前待决的审批门(转后台候批;应答口走迟到受理,耐久回决口照收);门是被引擎重开的(决过之后续跑腿在动作开跑前失败)⇒ 另带 `reopened`([ref],见 {@link ReopenedGate});
|
|
120
48
|
* · `void` —— 行 `DENIED` / `VOID`(没有人决过它,答案无处兑现;`cause` 同晚答 404),**或**行 `PARKED` 而它的门已过期 / 被取代(含停驻 run 被取消;此时 `cause` 缺席)。
|
|
121
49
|
*/
|
|
122
50
|
export declare const TOOL_APPROVAL_READ_STATES: readonly ["pending", "decided", "parked", "void"];
|
|
@@ -141,6 +69,7 @@ export type ToolApprovalReadBody = ({
|
|
|
141
69
|
} & AskRowReadProjection) | ({
|
|
142
70
|
state: "parked";
|
|
143
71
|
decidePath?: string;
|
|
72
|
+
reopened?: ReopenedGate;
|
|
144
73
|
} & AskRowReadProjection) | ({
|
|
145
74
|
state: "void";
|
|
146
75
|
cause?: AskRowEndingCause;
|
|
@@ -186,7 +115,7 @@ export type SettleVerdict = {
|
|
|
186
115
|
* 语义边界(禁扩读):它答的是「本副本此刻有没有活体消费者」,**不是**「这条 run 还活着吗」——持有
|
|
187
116
|
* 悬挂 promise 的可能是另一个副本(F4 的轮询腿会在它自己的下一拍续跑)。run 的生死读 run 面。
|
|
188
117
|
*
|
|
189
|
-
*
|
|
118
|
+
* [ref] 起**同一个词、同一句语义**也出现在 live 面:审批机起服时从问账接管的登记(没有引擎腿在等)在 `livePending` 行上带它,
|
|
190
119
|
* 在 live 应答口的 200 回执上按同一判据(本副本被唤醒的等待腿数 = 0)带它。一个事实,各面一个读法。
|
|
191
120
|
*/
|
|
192
121
|
export declare const ASK_DECISION_CONSUMER_ABSENT = "absent";
|
|
@@ -208,7 +137,7 @@ export interface ParkedAskRedeemRequest {
|
|
|
208
137
|
decision: "approve" | "deny";
|
|
209
138
|
/** [ref] 同源的人写理由(deny 时 core 把它交给模型;allow 只进审计面)。 */
|
|
210
139
|
note?: string;
|
|
211
|
-
/**
|
|
140
|
+
/** [ref]:决定体的**出处位**(已过 `readDecidedBy` 的 wire 词,缺席已落成 `"person"`),经 `hostDecisionFacts` 落到停驻座的
|
|
212
141
|
* `hostDecision.decidedBy`。live 命中臂与本 PARKED 臂读**同一格** —— 同一份体落在哪条臂上只取决于副本与时序;两臂各走自己座的
|
|
213
142
|
* 那一只映射(live = `liveSettledBy`,停驻 = 恒等),词表只有一份。 */
|
|
214
143
|
decidedBy: ApprovalDecidedBy;
|
|
@@ -228,8 +157,21 @@ export type ParkedAskRedeem = (req: ParkedAskRedeemRequest) => Promise<{
|
|
|
228
157
|
body: Record<string, unknown>;
|
|
229
158
|
}>;
|
|
230
159
|
/**
|
|
231
|
-
*
|
|
232
|
-
*
|
|
160
|
+
* 一张门被引擎**重开**过的停驻卡([ref]):决过之后,续跑腿在被批准的动作开跑之前失败,引擎把同一张门(同一把 token)翻回待决。
|
|
161
|
+
* `reason` = core 记在行上的重开因由词原样(闭集 `REOPEN_REASONS`:`env_failed` 同一个决议经耐久回决口(`decidePath`)再交一次即可续跑 —— 本副本还留着首次受理回执时(缺省 1 小时内、未被容量帽逐出)应答口回放那张回执、不驱续跑;`tool_unavailable` / `constraint_rejected` 要重新决;`config_refused` 改好部署配置后再交原决议,或重新决);
|
|
162
|
+
* `decision` / `decidedAtMs` / `decisionNote?` = 重开之前的那次决议(读法与已结算门的 `decided` 同一只;读不出 ⇒ 三键缺席,只带因由词)。
|
|
163
|
+
*/
|
|
164
|
+
export type ReopenedGate = {
|
|
165
|
+
readonly reason: ReopenReason;
|
|
166
|
+
} | {
|
|
167
|
+
readonly reason: ReopenReason;
|
|
168
|
+
readonly decision: "allow" | "deny";
|
|
169
|
+
readonly decidedAtMs: number;
|
|
170
|
+
readonly decisionNote?: string;
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* 按问读口对一张 `PARKED` 卡的**门读法**([ref];判官的唯一属主 = `approval-gate-currency.ts`,协调器本身不认识 checkpoint 的形):
|
|
174
|
+
* · `open` —— 这张卡的门仍是该会话当前待决的审批门(应答口收得下)⇒ 读口说 `parked`;门被引擎重开过 ⇒ 另带 `reopened`([ref],{@link ReopenedGate});
|
|
233
175
|
* · `decided` —— 门已被决:方向 / 时刻 / 理由取自 checkpoint 上的结算赢家 ⇒ 读口说 `decided`;
|
|
234
176
|
* · `void` —— 门已过期 / 被取代(含停驻 run 被取消:取消先把门 expire)⇒ 读口说 `void`(没有人决过它,答案无处兑现);
|
|
235
177
|
* · `unknown` —— 说不出可信的话:`row_absent` = checkpoint 行没了;`decision_unreadable` = 门已结算却读不出可用的决议(行的 status 词或结算种类不在闭集表里 / 结算记录过不了 core 的
|
|
@@ -238,6 +180,7 @@ export type ParkedAskRedeem = (req: ParkedAskRedeemRequest) => Promise<{
|
|
|
238
180
|
*/
|
|
239
181
|
export type ParkedGateReading = {
|
|
240
182
|
readonly kind: "open";
|
|
183
|
+
readonly reopened?: ReopenedGate;
|
|
241
184
|
} | {
|
|
242
185
|
readonly kind: "decided";
|
|
243
186
|
readonly decision: "allow" | "deny";
|
|
@@ -272,7 +215,7 @@ export declare function carriesDeploymentListQuestion(deploymentListAsks: boolea
|
|
|
272
215
|
* 继承问),而**能不能读**与审批席 / 回决写侧是同一只判据({@link standingAnswerDurablyRecordable}):记得下的才代答,记不下的(带授予绑定的问 ……)不代答,
|
|
273
216
|
* 存量行也不例外 —— 一事一读。事实取自**这一问本身**:类集经 core 包根唯一的类派生 `classifyAsk`({@link NO_GATE_FACTS});`requiresRealApproval` /
|
|
274
217
|
* `mandated` 读这一问自报的成员;治理位恒假(本层不是治理层);授予绑定读**调用**(`callGrantBindingOf` —— 本层手里还没有引擎铸的卡,core 7.51.0 不在
|
|
275
|
-
* `ToolCallRequest` 上盖绑定词,
|
|
218
|
+
* `ToolCallRequest` 上盖绑定词,[ref] 载体问题见 `standing-answer-grant.ts` 头注)。
|
|
276
219
|
*/
|
|
277
220
|
export declare function policyAskStandingAnswerFacts(req: StandingAnswerCall, ask: Extract<PermissionResult, {
|
|
278
221
|
action: "ask";
|
|
@@ -284,7 +227,7 @@ export declare function policyAskStandingAnswerFacts(req: StandingAnswerCall, as
|
|
|
284
227
|
* 而不是漏传一格被静默读成 `false`(那是安全轴上的 fail-open)。读者各自从自己手里的形折成这三格,
|
|
285
228
|
* 然后交**同一只** {@link standingAnswerHome}(判据只有一份,折法各归读者):
|
|
286
229
|
* · live 读侧取 `req` + 本地治理 peek;live 写侧取 pending 条目;
|
|
287
|
-
* · 耐久 `/decide` 腿(
|
|
230
|
+
* · 耐久 `/decide` 腿([ref] → NP-1,7.100.0)取 park 行,经 {@link parkRowStandingAnswerFacts}(三格全从行上读)。
|
|
288
231
|
* 本型**不绑** live 条目。
|
|
289
232
|
*/
|
|
290
233
|
export interface StandingAnswerFacts {
|
|
@@ -295,9 +238,9 @@ export interface StandingAnswerFacts {
|
|
|
295
238
|
/** core 闸站盖的强制位([ref]):规则清不掉、站着的答案退不掉,只有对**这一次调用**的应答能答。 */
|
|
296
239
|
readonly mandated: boolean;
|
|
297
240
|
/** 这一问的应答**授不授予**这一次调用之外的东西、授予的话绑定是什么(批准引擎的 `Skill` = 激活技能 + 本 run 内清单免问)。
|
|
298
|
-
* `bound` ⇒ 站着的答案按「工具 + 绑定」记、只代答绑定相同的问(core 7.43.0
|
|
241
|
+
* `bound` ⇒ 站着的答案按「工具 + 绑定」记、只代答绑定相同的问(core 7.43.0 [ref] / [ref]:活的问与停驻行同带 `boundGrantDigest`);
|
|
299
242
|
* `unreadable` ⇒ 不可记、不被代答(fail-closed)。读者一律经 `standing-answer-grant.ts` 折这一位:载体由问的属主定(`questionGrantBindingOf`)——
|
|
300
|
-
* 引擎铸的问读卡上引擎的词(`grantBindingOf`),部署名单自己的问与策略层的调用读 `callGrantBindingOf`(
|
|
243
|
+
* 引擎铸的问读卡上引擎的词(`grantBindingOf`),部署名单自己的问与策略层的调用读 `callGrantBindingOf`([ref])。 */
|
|
301
244
|
readonly grantBinding: GrantBinding;
|
|
302
245
|
/** 引擎盖在这一问上的**类集**(`AskRequest.classes` / 停驻行孪生座;经 core 的屏 `screenAskClassMembers` 读)。`undefined` = 卡上没有类
|
|
303
246
|
* (老引擎 / 不盖类的站)或屏拒 —— 读不出的类不是「无类」。 */
|
|
@@ -319,7 +262,7 @@ export interface StandingAnswerFacts {
|
|
|
319
262
|
*/
|
|
320
263
|
export type StandingAnswerHome = "none" | "seat" | "server_store";
|
|
321
264
|
/**
|
|
322
|
-
* 🔴 **
|
|
265
|
+
* 🔴 **[ref] —— 会话级放行的唯一判据:站着的答案能不能退掉这一问,能的话它记在哪({@link StandingAnswerHome})。** 纯函数,读者:
|
|
323
266
|
* · **读侧**(`askBroadcast` 的会话授权短路 {@link ToolApprovalCoordinator.standingGrantSettles}):`seat` 才可能由既有授权代答,否则往下走真出卡;
|
|
324
267
|
* · **写侧**(`finishRespond` 的 `grantable` 与 `recordDeploymentListAnswer`):`seat` 把 `allow_session` 铸成进程内授权;`server_store` 落 server 的会话豁免店;
|
|
325
268
|
* `none` 只放行这一次、`rememberApplied:false`;
|
|
@@ -331,7 +274,7 @@ export type StandingAnswerHome = "none" | "seat" | "server_store";
|
|
|
331
274
|
* **为什么三位是同一类**(「站着的答案退不掉的一问」):会话授权 = **上一次**应答记下的一揽子放行,不是对
|
|
332
275
|
* **这一次**调用的应答 —— 与持久 allow 规则同族,只是更短命(`askBroadcast` 短路处的注早已这么定性)。
|
|
333
276
|
* · `mandated`:core `PermissionResult` ask 臂 `mandated` 成员的文档。7.29.0 原句「no persisted allow rule and no standing
|
|
334
|
-
* posture may retire it, only an answer to THIS call」;**7.30.0 起 d.ts 已落 [ref] 澄清**(
|
|
277
|
+
* posture may retire it, only an answer to THIS call」;**7.30.0 起 d.ts 已落 [ref] 澄清**([ref] 在 7.30.1 装树亲核):
|
|
335
278
|
* core `PermissionResult` ask 臂的 `mandated` 成员文档「no persisted allow rule and no STANDING ANSWER (a release remembered
|
|
336
279
|
* from an earlier call, at any scope, a session included) may retire it」,`AskRequest.mandated` 孪生句同义 ——
|
|
337
280
|
* 「从早先某次回答记住的放行,**任何 scope、会话级也算**」都是站着的答案。core `ruleClearanceOf` 的文档
|
|
@@ -347,7 +290,7 @@ export type StandingAnswerHome = "none" | "seat" | "server_store";
|
|
|
347
290
|
* **自己**的位 —— core 每一次过闸(含 failover / 重启后的重入)都由 `runGateLanes` 里的 `stampAskOrigin`
|
|
348
291
|
* 重新盖、经同一处的 `carryOf` 带上 `AskRequest`,读侧手里的 `req` 恒是这一次过闸的真值。`governanceForced`
|
|
349
292
|
* 需要行读,是因为它来自本仓的**进程内**治理标表:failover / 重启后幂等命中既有行时本地表恒空,行上的卡才
|
|
350
|
-
* 存着落库那一刻的判定。(那张「行」是本仓的 ask 账本行,不是 core 的 park 行;core 7.31.0
|
|
293
|
+
* 存着落库那一刻的判定。(那张「行」是本仓的 ask 账本行,不是 core 的 park 行;core 7.31.0 [ref] 起 park 行上的
|
|
351
294
|
* `mandated` 孪生座由**耐久** `/decide` 腿读,见 {@link parkRowStandingAnswerFacts}。)
|
|
352
295
|
*/
|
|
353
296
|
export declare function standingAnswerHome(facts: StandingAnswerFacts): StandingAnswerHome;
|
|
@@ -360,7 +303,7 @@ export declare function standingAnswerHome(facts: StandingAnswerFacts): Standing
|
|
|
360
303
|
*/
|
|
361
304
|
export declare function standingAnswerDurablyRecordable(facts: StandingAnswerFacts): boolean;
|
|
362
305
|
/**
|
|
363
|
-
* 🔴 **
|
|
306
|
+
* 🔴 **[ref] → NP-1(7.100.0 合并复审 [ref] 交叉表 #2)—— 耐久 `/decide` 腿的 {@link StandingAnswerFacts}:从 park 行铸三位。**
|
|
364
307
|
* 纯投影,**不判**:判据是同一只 {@link standingAnswerHome}(唯一读点 = `http/resume-legs.ts` 的 remember 可记性,
|
|
365
308
|
* `standingAnswerDurablyRecordable(parkRowStandingAnswerFacts(…))`)。修前耐久腿自成一只谓词、只读 `ruleOffersAbsence` 一词,同一行上
|
|
366
309
|
* core 盖好的 `requiresRealApproval` 与治理出身都不读 ⇒ 那两类卡的 `remember:"session"` 照旧铸会话免询问,而 live 腿对同一张卡
|
|
@@ -372,18 +315,18 @@ export declare function standingAnswerDurablyRecordable(facts: StandingAnswerFac
|
|
|
372
315
|
* park 行上唯一的取证格只有 `riskDescriptor.shellGateDoctrine`(见下方 🚧);
|
|
373
316
|
* · `requiresRealApproval` —— 行上 core 铸的那一位,经 `approval-card.ts` 的 {@link readParkRowTrueSeat}(与运维
|
|
374
317
|
* 队列 `parkRowFacts` 同一只读法,`=== true`)。刻意**不**经 `parkRowFacts` 本身:那只展示投影顺手对 `ruleOffersAbsence`
|
|
375
|
-
* 的集外词计展示面 F 类 tag,而本读者对同一格是 fail-closed(
|
|
376
|
-
* · `mandated` —— **
|
|
318
|
+
* 的集外词计展示面 F 类 tag,而本读者对同一格是 fail-closed([ref] codex r1 钉「权限面不计展示面 tag」);
|
|
319
|
+
* · `mandated` —— **[ref] 二段(core [ref],7.31.0 / [ref])**:行上 core 铸的孪生座 `PendingAction.tool_approval.mandated`,经
|
|
377
320
|
* **同一只** {@link readParkRowTrueSeat}(`=== true`);**或**强制子集 `ruleOffersAbsence` 经三态窄读
|
|
378
321
|
* {@link readRuleOffersAbsenceSeat} 读成 `"mandated"` / 读不出(集外词 / 非串值,世代差)⇒ `true`。两臂是**两个事实**的析取,
|
|
379
322
|
* 不是同一个事实的新旧两种读法:core 对 `"mandated"` 这一词的定义就是「no persisted rule could ever clear this ask」(强制的
|
|
380
|
-
* 充分条件),而
|
|
323
|
+
* 充分条件),而 [ref] 之前铸的行(7.30.x 引擎 park、升级后才被 `/decide`)没有孪生座 —— 只读孪生座会让这类在飞行照旧落豁免,
|
|
381
324
|
* 是对上一版的回归;读不出按强制是 fail-closed(一个本仓不认识的新词可能正是一种强制因由)。
|
|
382
325
|
*
|
|
383
326
|
* 🚧 **剩余不对称一处**(耐久腿读得到的事实比 live 腿少,读不到的一律照旧可记):
|
|
384
|
-
* ① (已关,
|
|
327
|
+
* ① (已关,[ref] 二段)`mandated` 孪生位 —— core [ref] 到货,行上词为 `shadowed` / 缺席的强制卡由孪生座读到
|
|
385
328
|
* (`test/approval-exemption-http.test.ts` 原 🚧 格已按钉翻成「false + 零行」);
|
|
386
|
-
* ② **非 shell 治理(候
|
|
329
|
+
* ② **非 shell 治理(候 [ref])**:治理位经 `governanceOriginOf` 只覆盖 shell 门 `always` 档;敏感写路径
|
|
387
330
|
* (`SENSITIVE_WRITE_PATTERNS`)、`commandPolicy`、`AUTONOMY` 内层策略产的门与 shellGate `classify` 档,park 行上没有取证格
|
|
388
331
|
* (live 腿靠进程内标记表,跨副本 / 重启后够不着),本折法读不到它们的治理出身。
|
|
389
332
|
*/
|
|
@@ -460,8 +403,8 @@ export interface ToolApprovalFrame {
|
|
|
460
403
|
* 车道**有什么可给,而那条车道对它不说话的工具、**没接规则店的部署**(本仓的 live-only 形)、装不下规则的
|
|
461
404
|
* 任务都是结构性沉默 —— 它的缺席**不是**断言。本键是这一问**自己**的属性,凡强制皆在场。读错的代价 core
|
|
462
405
|
* 实测过:同一条根外读命令在 shell 工具上是强制问、在 monitor 工具上看起来是普通问。
|
|
463
|
-
* (耐久 `/decide` 腿手里只有 park 行:core 7.31.0
|
|
464
|
-
*
|
|
406
|
+
* (耐久 `/decide` 腿手里只有 park 行:core 7.31.0 [ref] 起行上有本键的孪生座 `PendingAction.tool_approval.mandated`,
|
|
407
|
+
* [ref] 二段读它;[ref] 之前铸的行没有孪生座,那条腿仍读那一词的**在场**(`"mandated"` ⇒ 强制)、从不读它的缺席 —— 见
|
|
465
408
|
* {@link parkRowStandingAnswerFacts}。live 腿恒读本键。)
|
|
466
409
|
*
|
|
467
410
|
* 🔴 **它不是 `requiresRealApproval`**:强制只说「没有规则能清掉」,**不**说「没有应答者可以答」——
|
|
@@ -469,12 +412,12 @@ export interface ToolApprovalFrame {
|
|
|
469
412
|
*
|
|
470
413
|
* 🔴 **真才带,缺席绝不编 `false`**(`governanceForced` / `requiresRealApproval` 同形)。缺席覆盖「不是强制」「老引擎」
|
|
471
414
|
* 两形。**本仓从不自铸本键**:活卡帧(与 `livePending` 行顶层,T4①)只读 `AskRequest.mandated`;耐久面(运维队列行 / inbox 行)
|
|
472
|
-
* 自 core 7.31.0
|
|
473
|
-
*
|
|
415
|
+
* 自 core 7.31.0 [ref] 起读 core 在 park 行上铸的孪生座(`PendingAction.tool_approval.mandated` / `CheckpointSummary.mandated`,
|
|
416
|
+
* [ref] 二段),同样只投 core 给的那一位 —— 自铸一个就是本仓成了这个事实的第二个源。⚠️ **`card_json` 卡面不带本键**
|
|
474
417
|
* (`ApprovalCardSchema` 没有这一位,`.strict()`)⇒ 断连重放的 `approval_request` 帧(`buildReplayFrame` 只回放卡)上它恒缺席,
|
|
475
418
|
* 消费方读队列行 / 活卡帧 / `livePending` 行(8D-6:此前这里写的「`card_json` 只读 `AskRequest.mandated`」是错句,T4② 车OC 改真)。
|
|
476
419
|
* 🔴 **server 不判「是不是强制」**(判定属主在 core 的闸站),只**读**闸站盖好的这一位 —— 读者恰一个:
|
|
477
|
-
*
|
|
420
|
+
* [ref] 起的会话级放行判据 {@link standingAnswerHome}(会话授权是**上一次**应答记下的站着的答案,
|
|
478
421
|
* 不是对这一次调用的应答 ⇒ 强制卡上既不被既有 grant 代答、也不铸 grant)。上一段「一揽子 `onAsk:"allow"`
|
|
479
422
|
* 席照常答得了」说的是**这一次调用的应答者**,本仓不改它。
|
|
480
423
|
*/
|
|
@@ -489,7 +432,7 @@ export interface ToolApprovalFrame {
|
|
|
489
432
|
*/
|
|
490
433
|
rememberRefused?: true;
|
|
491
434
|
/**
|
|
492
|
-
* **
|
|
435
|
+
* **[ref](core 7.32.0 [ref];ADDITIVE,`"tool_approval"` only)** —— 强制位**站在哪一个词上**:core `PERSISTED_RULE_MANDATES`
|
|
493
436
|
* 六词之一(`operator_always` / `tool_marks` / `probe_mandate` / `probe_unanswered` / `write_protection` /
|
|
494
437
|
* `target_unresolved`,词义属主在 core)。只在 `mandated: true` 的**整因**是那一个词时在场;另一扇门(治理 / hook /
|
|
495
438
|
* 祖先)或不止一个理由 ⇒ 缺席 —— **缺席从不命名一个词**,也不等于「不强制」(读 `mandated`)。值经 `approval-card.ts` 的
|
|
@@ -499,7 +442,7 @@ export interface ToolApprovalFrame {
|
|
|
499
442
|
*/
|
|
500
443
|
mandate?: PersistedRuleMandate;
|
|
501
444
|
/**
|
|
502
|
-
* **
|
|
445
|
+
* **[ref]③/[ref]**(core 7.5.0;**ADDITIVE**,`"tool_approval"` only)—— 这只 ask 的**出身**:
|
|
503
446
|
* 谁提的这一问,一个 core 闭集词(`ASK_ORIGINS` **11 员**,core 7.14.0 现值:content_question /
|
|
504
447
|
* ancestor_marked / org_unavailable / org_rule / rule_store_unavailable / hook / ask_rule /
|
|
505
448
|
* denial_limit_fallback / shell_gate_tighten / safety_tighten / policy)。引擎在门上盖章(core d.ts:
|
|
@@ -517,7 +460,7 @@ export interface ToolApprovalFrame {
|
|
|
517
460
|
* 🔴 **不枚举词表**(`string` 而不是本仓自铸的联合):词表单一属主在 core,在这里抄一份会把 core 加的
|
|
518
461
|
* 新词吞成缺席 —— 与 `wiring_manifest.autoMode.reason` 的透传纪律逐字同规。缺席 = 老引擎 / 非 ask 路径。
|
|
519
462
|
*
|
|
520
|
-
* 同一个词的其余四面(
|
|
463
|
+
* 同一个词的其余四面([ref] 起全部在场):`livePending` 行顶层 / `live_pending` 帧(条目铸定时与本键**同一次**读定);运维队列行
|
|
521
464
|
* (`GET /v1/approvals` 的 `pending[]` + `/stream` 的 `pending` 帧,读 park 行孪生座 `PendingAction.tool_approval.origin`,经
|
|
522
465
|
* `approval-card.ts` 的 `readClosedWordSeat(…, "origin")` —— 那一面读的是持久层原字节、中间没有 core 投影,所以亲手调 core 的
|
|
523
466
|
* `isAskOrigin`);inbox 行(core `CheckpointSummary.origin`,core 投影处已筛)。本键读的是引擎在门上刚盖好的值(盖章点即 core
|
|
@@ -529,42 +472,43 @@ export interface ToolApprovalFrame {
|
|
|
529
472
|
*/
|
|
530
473
|
origin?: string;
|
|
531
474
|
/**
|
|
532
|
-
* **
|
|
475
|
+
* **[ref] ②(core 7.37.0 [ref];ADDITIVE,`"tool_approval"` only)** —— 这一问的**类**:`classes` 的首员(core `ASK_CLASSES` 序),
|
|
533
476
|
* `MODE_ARBITRATION` 的行键(权限模式读的就是它 / 它们)。引擎在每一个铸 `origin` 的站盖章(策略自报的值在盖章处被替换),本仓经
|
|
534
|
-
* `approval-card.ts` 的 `readAskClassPair(req)` 窄读(判法 = core 屏 `screenAskClassMembers`,
|
|
535
|
-
*
|
|
536
|
-
* display:壳按类渲卡(cli 卡面、client-core
|
|
477
|
+
* `approval-card.ts` 的 `readAskClassPair(req)` 窄读(判法 = core 屏 `screenAskClassMembers`,[ref] ⑥ / [ref],本仓零自写对判;屏拒 ⇒ 两键都不投 + 计一次
|
|
478
|
+
* [ref] 集外 tag)。**与 {@link classes} 同在同缺**;缺席 = 老引擎 / 不盖类的站(共享制品读确认,core KL-1214-a),不是「无类」。
|
|
479
|
+
* display:壳按类渲卡(cli 卡面、client-core [ref]),durable 审批席按类答;**本仓不按它裁决**(无人值守腿的按类作答读 core 交来的
|
|
537
480
|
* `AskRequest.classes` 本身)。同一对的其余面:`card_json` 卡面 / `approval_request` 呈卡帧 / 断连重放帧(同一份素材)、运维队列行
|
|
538
481
|
* (`parkRowFacts`,读停车行孪生座 `PendingAction.tool_approval.askClass`);inbox 行不带(core `CheckpointSummary` 不回显)。
|
|
539
482
|
*/
|
|
540
483
|
askClass?: AskClass;
|
|
541
|
-
/**
|
|
484
|
+
/** [ref] ②:这一问属于的**全部**类(core `ASK_CLASSES` 序,`classes[0] === askClass`,非空)—— 读整只集合,别只读 {@link askClass}(一问可同属
|
|
542
485
|
* 几类)。与 `askClass` 同在同缺、同一只窄读;逐字同序过境,不排序不去重。 */
|
|
543
486
|
classes?: AskClass[];
|
|
544
487
|
/**
|
|
545
|
-
* core 7.43.0
|
|
488
|
+
* core 7.43.0 [ref] / [ref](**ADDITIVE**,`"tool_approval"` only)—— 对引擎 `Skill` 工具的调用,批准它**还授予**的东西的摘要
|
|
546
489
|
* (`AskRequest.boundGrantDigest`,技能名 + 两只清单规范拼写的哈希);别的卡缺席。与停驻行 / inbox 行的同名位同值(core:同一只工厂铸,
|
|
547
|
-
* 活卡与它的停驻孪生按 `(toolCallId, boundGrantDigest)` 对账)。逐字过境,本仓不重算;站着的答案按「工具 + 它」记(
|
|
490
|
+
* 活卡与它的停驻孪生按 `(toolCallId, boundGrantDigest)` 对账)。逐字过境,本仓不重算;站着的答案按「工具 + 它」记([ref])。
|
|
548
491
|
*/
|
|
549
492
|
boundGrantDigest?: string;
|
|
550
493
|
/** 上一位哈希的那一份值:`{ skill, allowedTools, disallowedTools }`(`skill: null` = 调用没点名任何已载技能)。与摘要同在同缺;**部署文本**,
|
|
551
494
|
* 壳按上下文转义渲染(core:display metadata)。逐字过境。 */
|
|
552
495
|
boundGrants?: BoundSkillGrants;
|
|
553
|
-
/**
|
|
496
|
+
/** [ref](core 7.51.0 [ref],**ADDITIVE**,`"tool_approval"` only):这张卡为什么没有 {@link boundGrantDigest} —— 引擎铸的每张卡恰带两者之一:
|
|
554
497
|
* `not_bindable`(这一问不是引擎 `Skill` 工具的激活,不绑任何授予 ⇒ 应答可按工具记)/ `unreadable`(绑着却读不出;活卡上引擎恒给摘要,这一词
|
|
555
498
|
* 只出现在读存量行的面上)。闭集经 `readClosedWordSeat(req, "boundGrantAbsence")` 窄读(筛 = core `BOUND_GRANT_ABSENCES`),集外 ⇒ 缺席 + 计一次。
|
|
556
499
|
* 与停驻行 / 运维队列行 / inbox 行的同名位同值;站着的答案的授予绑定(引擎铸的问那一家;部署名单自己的问读调用口)读它(`standing-answer-grant.ts` `grantBindingOf`)。display。 */
|
|
557
500
|
boundGrantAbsence?: BoundGrantAbsence;
|
|
558
|
-
/** core 7.43.0
|
|
501
|
+
/** core 7.43.0 [ref]:分类器没给判词的成因词(`error` / `timeout` / `parse_error`;只在类 `classifier_no_ruling` 的卡上)。闭集经 core 的
|
|
559
502
|
* `readClosedWordSeat(req, "classifierNoRuling")` 窄读(筛 = core `isAutoModeFallbackCause`),集外 ⇒ 缺席 + 计一次。display:本仓不按它裁决。 */
|
|
560
503
|
classifierNoRuling?: AutoModeFallbackCause;
|
|
561
504
|
/**
|
|
562
|
-
* **core 7.49.0
|
|
563
|
-
*
|
|
505
|
+
* **core 7.49.0 [ref](ADDITIVE,`"tool_approval"` only)—— 这一问渲在哪张卡上**:引擎在闸站铸的那一个词(闭集 = core 的 `TOOL_APPROVAL_CARDS`,
|
|
506
|
+
* 本文不抄词表 —— 词表的唯一写者在引擎),`AskRequest.approvalCard` 逐字过境,经
|
|
564
507
|
* `approval-content-kind.ts` 的 `readApprovalCard` 闭集窄读(集外 ⇒ 缺席 + 计一次 closed-word-out-of-set)。`question` = 问用户的问题(引擎保留的
|
|
565
508
|
* 问答工具),不是副作用工具。**本仓不从工具名回推卡**(工具名只作展示):此前按名字铸的 `livePending` 行 / 队列行 `contentKind` 随本键删。
|
|
566
509
|
* 停驻孪生 = 门的 `gate.approvalCard`(运维队列行顶层同名键,两只店读同一只 `parkedApprovalCard`)。display:本仓不按它裁决。
|
|
567
|
-
* 🔴 缺席即缺席(宿主自建的 ask / 老引擎),不编 `generic
|
|
510
|
+
* 🔴 缺席即缺席(宿主自建的 ask / 老引擎),不编 `generic`。7.136.0 起卡面同带(`ApprovalCardSchema.approvalCard`:发帧点把这一格交给铸卡 ⇒
|
|
511
|
+
* `card_json` 与断连重放帧的卡上是同一个词)。
|
|
568
512
|
*/
|
|
569
513
|
approvalCard?: ToolApprovalCard;
|
|
570
514
|
/**
|
|
@@ -626,7 +570,7 @@ export interface ToolApprovalFrame {
|
|
|
626
570
|
expiresInMs?: number;
|
|
627
571
|
serverNowMs?: number;
|
|
628
572
|
/**
|
|
629
|
-
* core 7.42.0
|
|
573
|
+
* core 7.42.0 [ref](**硬破坏换名**:取代 7.41.x 的 `persistedRuleShadowed`,零别名;`"tool_approval"` only)——
|
|
630
574
|
* allow 层里**命中了这次调用、却没能清掉这只 ask** 的成员,每个成员一条 `{ member, entries, omitted? }`:`member` ∈ core `ALLOW_RULE_MEMBERS`
|
|
631
575
|
* (`hook` 部署 PreToolUse hook 的 allow / `deployment` 运维的 `APPROVAL_GRANT` / `persisted` 人存的 allow 规则 / `skill` 被激活技能的清单 /
|
|
632
576
|
* `request` 请求的 `settings.permissions.allow`);`entries` = 那个成员命中的条目原文(hook 恒空表);`omitted` = 没列出的条目数。
|
|
@@ -670,7 +614,7 @@ export interface ToolApprovalFrame {
|
|
|
670
614
|
*/
|
|
671
615
|
ruleOffersAbsence?: RuleOffersAbsence;
|
|
672
616
|
/**
|
|
673
|
-
*
|
|
617
|
+
* [ref](core 7.4.0 [ref];**ADDITIVE**,`"tool_approval"` only)—— 这只 ask 是 auto 模式分类器的**限额
|
|
674
618
|
* 回落卡**:分类器连续(缺省 3)或累计(缺省 20)拒到限额的**那一次**调用不再静默 deny,而是落成一张
|
|
675
619
|
* 必须真人批的卡(同一次铸造同时盖 `requiresRealApproval`,两键是孪生)。
|
|
676
620
|
* `{consecutive, total, limit:"consecutive"|"total", autoDenyAfterMs}` —— 触限时的两个计数、哪一道界
|
|
@@ -710,7 +654,7 @@ export interface ToolApprovalFrame {
|
|
|
710
654
|
* 耐久路的对偶 = `gate.riskDescriptor.probeCause`(同值,core `buildRiskDescriptor` 铸),走 checkpoint
|
|
711
655
|
* 行的**整体透传**到 `GET /v1/approvals` —— 键集零施工,钉在同一个文件的 §4。
|
|
712
656
|
*
|
|
713
|
-
* 姊妹键 `probeReason`(同一件事的**散文**兄弟)见下一键 —— 7.115.0 起投影(
|
|
657
|
+
* 姊妹键 `probeReason`(同一件事的**散文**兄弟)见下一键 —— 7.115.0 起投影([ref]),与本键**并列不替代**。
|
|
714
658
|
*/
|
|
715
659
|
probeCause?: {
|
|
716
660
|
code: string;
|
|
@@ -724,7 +668,7 @@ export interface ToolApprovalFrame {
|
|
|
724
668
|
};
|
|
725
669
|
};
|
|
726
670
|
/**
|
|
727
|
-
*
|
|
671
|
+
* [ref](7.115.0;**ADDITIVE**,`"tool_approval"` only)—— 这次 ask 被收紧时探针给出的那一句**散文**因由
|
|
728
672
|
* (`AskRequest.probeReason`:core 在 maybe 档收紧点 `inlineUntrusted(…, 200)` 过的一句话)。与
|
|
729
673
|
* {@link probeCause}(结构化因由)**并列、不替代**:引擎自己铸的因由走结构位,**部署自写的探针**只会写这一句
|
|
730
674
|
* —— 一只只给 reason 不给 cause 的探针,此前其审批人在活卡上读不到任何因由(耐久面
|
|
@@ -811,15 +755,15 @@ export interface LivePendingRow {
|
|
|
811
755
|
governanceForced?: true;
|
|
812
756
|
/** T4①(八病审计 8D-5,车OC / 7.101.0):强制位([ref],`AskRequest.mandated`)—— 与上两位**同层同形**(真才带,缺席不编 false),
|
|
813
757
|
* 值 = 条目上那一位(`askBroadcast` 铸条目时取自这一次过闸的 `req.mandated`,与 {@link frame} 上的同名键同源)。此前只在
|
|
814
|
-
* `frame` 里:同一个 `GET /v1/approvals` 响应的 durable `pending[]` 行顶层带它(
|
|
758
|
+
* `frame` 里:同一个 `GET /v1/approvals` 响应的 durable `pending[]` 行顶层带它([ref] 二段),live 行却要进帧里读。 */
|
|
815
759
|
mandated?: true;
|
|
816
760
|
/** 7.116.0(审计修复批 S4):这张卡上的「本会话放行」不会被记住 —— 与 {@link ToolApprovalFrame.rememberRefused} 同名同义同源
|
|
817
761
|
* (同一只判据,读条目上的四位事实);真才带。 */
|
|
818
762
|
rememberRefused?: true;
|
|
819
|
-
/**
|
|
763
|
+
/** [ref](core 7.32.0 [ref]):强制位站在哪一个词上 —— 与 `mandated` 同层同形(在场逐字,缺席不编词),值 = 条目上那一个词
|
|
820
764
|
* (与 {@link frame} 上同名键同源;帧型该键顶注是全文)。 */
|
|
821
765
|
mandate?: PersistedRuleMandate;
|
|
822
|
-
/**
|
|
766
|
+
/** [ref](cli [ref] / [ref]):ask 的**出身词**(谁提的这一问,core `ASK_ORIGINS` 闭集一词)—— 与 `mandate` 同层同形(在场逐字,
|
|
823
767
|
* 缺席不编词),值 = 条目上那一个词(铸条目那一次与 {@link frame} 上同名键**同一次**读定;帧型该键顶注是全文)。同一个
|
|
824
768
|
* `GET /v1/approvals` 响应里 durable `pending[]` 行的 `origin` 也在顶层(park 行孪生座),两族行同一种读法。 */
|
|
825
769
|
origin?: string;
|
|
@@ -833,12 +777,12 @@ export interface LivePendingRow {
|
|
|
833
777
|
* 子代 ask)上恒等成立。缺席 = 顶层 ask。`fromSubagent` 保留不动(byte-compat:先于本键的消费方仍按
|
|
834
778
|
* 它判别)。 */
|
|
835
779
|
originTaskId?: string;
|
|
836
|
-
/** core 7.49.0
|
|
780
|
+
/** core 7.49.0 [ref]:这一问的卡词 —— 与 {@link frame} 上的 `approvalCard` **同一个值**(行读帧上那一格,不另读一遍),与 durable
|
|
837
781
|
* 队列行顶层的同名键同层同形(那一面读门的 `gate.approvalCard`)。缺席 = 引擎没给(宿主自建 ask / 老引擎)。展示/分诊用,永不参与决议路由。
|
|
838
|
-
* (此前此处是按工具名铸的 `contentKind`,随
|
|
782
|
+
* (此前此处是按工具名铸的 `contentKind`,随 [ref] 删:卡只有引擎铸的这一个词。) */
|
|
839
783
|
approvalCard?: ToolApprovalCard;
|
|
840
784
|
/**
|
|
841
|
-
* 🔴
|
|
785
|
+
* 🔴 [ref](P1;cli [ref] / 板 [ref]):这只 ask **本来会 emit 的那只活卡帧**。
|
|
842
786
|
*
|
|
843
787
|
* 值 = {@link PendingApproval.frame} 的**引用** —— `askBroadcast` 里那一处唯一构造(已过
|
|
844
788
|
* `redactDeep` / 字节帽 / [ref] 窗三键补写)的**同一个对象**,悬挂与可达两条路共用它。⇒ 这一格
|
|
@@ -857,7 +801,7 @@ export interface LivePendingRow {
|
|
|
857
801
|
*/
|
|
858
802
|
frame?: ToolApprovalFrame | ApprovalRequestFrame;
|
|
859
803
|
/**
|
|
860
|
-
*
|
|
804
|
+
* [ref]:**本副本上没有引擎腿在等这只问** —— 与耐久决断口 200 体同名同值同义的那一位({@link ASK_DECISION_CONSUMER_ABSENT})。
|
|
861
805
|
* 在场 ⇔ 这一行是审批机起服时从问账接管的问(前一个进程 / 别的副本铸下、行仍 `STREAM_PENDING`;见 {@link ToolApprovalCoordinator.adoptOpenAsks}):
|
|
862
806
|
* 它照常列得出、照常应答得了(行落 `DECIDED`,应答回执同带这一位),但这一决不会让本副本上任何在跑的东西续跑 —— 续没续跑读 run 面。
|
|
863
807
|
* 只记真:缺席 = 本副本有引擎腿在等它(或老 server)。
|
|
@@ -998,19 +942,19 @@ export declare const PERSIST_RULE_BATCH_EXCLUSIVE_ERROR = "persistRule.batchOffe
|
|
|
998
942
|
* 指定 scope = 让一次「在项目 A 里点的同意」写成一条覆盖项目 B(或全局)的常驻放行 —— 那是这条轴上
|
|
999
943
|
* 最贵的一次扩权。静默忽略同样不行:客户端会以为自己设上了。响亮拒,一句话说清谁拥有这一格。
|
|
1000
944
|
*/
|
|
1001
|
-
/**
|
|
945
|
+
/** [ref](core 7.32.0 [ref])—— `readRootGrant` 只随 `decision:"allow"`(CC 卡的第三选项「Yes, and add directory」= 放行这一次
|
|
1002
946
|
* + 加目录;`allow_session` 不是那一个选项,`deny` 上它没有意义)。裁决之前响亮拒,不静默丢。 */
|
|
1003
947
|
export declare const READ_ROOT_GRANT_ALLOW_ONLY = "readRootGrant is only meaningful with decision \"allow\" \u2014 it is the card's \"Yes, and add directory\" answer (allow this call and add the card's readRootCandidate.dir to this run's read directories)";
|
|
1004
948
|
/**
|
|
1005
|
-
*
|
|
949
|
+
* [ref]:这台部署不受理读根授权时,带 `readRootGrant` 的应答的拒句。受理与否是**部署姿态**(能力事实 `readRootGrant`,位 `approvalReadRootGrant`;
|
|
1006
950
|
* 判据的唯一属主在 `capability-facts.ts`,回决路由把它读来交给 {@link ToolApprovalCoordinator.respond}):不受理 ⇒ 裁决**之前**响亮 400,
|
|
1007
|
-
* 这只 ask 没被结算,同一张卡不带该键的 `allow` 照常成。不静默丢键 —— 壳以为加上了目录而引擎只看到一次普通放行,是
|
|
951
|
+
* 这只 ask 没被结算,同一张卡不带该键的 `allow` 照常成。不静默丢键 —— 壳以为加上了目录而引擎只看到一次普通放行,是 [ref] 修过的那一种病。
|
|
1008
952
|
*/
|
|
1009
953
|
export declare const READ_ROOT_GRANT_NOT_ACCEPTED = "readRootGrant is not accepted on this deployment \u2014 a read-directory grant is honored only on a single-user host-lane deployment (GET /v1/capabilities approvalReadRootGrant is false here); answer with plain decision \"allow\" instead";
|
|
1010
|
-
/**
|
|
954
|
+
/** [ref]:`readRootGrant` 的形 —— 卡上 `readRootCandidate.dir` 的原串(非空,≤ core `READ_ROOT_CANDIDATE_DIR_MAX`;超限整只拒,不截:截过的目录是另一个目录)。 */
|
|
1011
955
|
export declare const READ_ROOT_GRANT_SHAPE = "readRootGrant must be the card's readRootCandidate.dir sent back byte for byte \u2014 a non-empty string of at most 1024 characters";
|
|
1012
956
|
export declare const PERSIST_RULE_SCOPE_REFUSED = "this endpoint does not accept a rule scope \u2014 the server mints it from where the approval happened (send neither `scope` nor `persistRule.scope`)";
|
|
1013
|
-
/**
|
|
957
|
+
/** [ref]:`respond()` 要的**部署事实**(由回决路由从能力事实交进;协调器不读 config,也不自判姿态)。 */
|
|
1014
958
|
export interface ToolApprovalRespondDeployment {
|
|
1015
959
|
/** 这台部署受理不受理应答体里的 `readRootGrant` —— 能力事实 `readRootGrant` 的 `.available`(位 `approvalReadRootGrant` 的同一个值)。 */
|
|
1016
960
|
readonly readRootGrantAccepted: boolean;
|
|
@@ -1051,8 +995,8 @@ export declare function parseToolApprovalResponse(body: unknown): ParsedToolAppr
|
|
|
1051
995
|
*/
|
|
1052
996
|
export type UnattendedApprovalPolicy = "park" | "deny";
|
|
1053
997
|
/**
|
|
1054
|
-
*
|
|
1055
|
-
* (`settledBy:"policy"` ⇒ core 结算 `policy_refused`、`who.party:"policy"`(core 7.39.0
|
|
998
|
+
* [ref] —— `deny` 政策下「无人可答」交给 core 的形:core `AskOutcome` 对象臂的**部署政策拒**
|
|
999
|
+
* (`settledBy:"policy"` ⇒ core 结算 `policy_refused`、`who.party:"policy"`(core 7.39.0 [ref] 起;此前 `"none"`),模型读的是策略句)。
|
|
1056
1000
|
*
|
|
1057
1001
|
* 修前这里交**裸 `false`** —— 而在 core 的 onAsk 契约里裸 `false` 就是「一个人拒了」:结算记
|
|
1058
1002
|
* `human_refused` / `who.party:"person"`,模型被告知「用户不想继续,停下来等他」,run 以
|
|
@@ -1072,15 +1016,15 @@ export type UnattendedPolicyRefusal = Extract<AskOutcome, {
|
|
|
1072
1016
|
/**
|
|
1073
1017
|
* {@link UnattendedPolicyRefusal} 的**唯一**构造(纯数据 ⇒ `build*`)。来源词读店落行的**同一个**常量(`POLICY_REFUSAL_DECISION`,NP-2):
|
|
1074
1018
|
* 行上记的与交给 core 的在构造上是一个词。两个铸点读它:协调器 deny 政策的「无人可答」({@link ToolApprovalCoordinator.unattendedOutcome})
|
|
1075
|
-
* 与 run-local 本地席没有人可问的两臂(
|
|
1019
|
+
* 与 run-local 本地席没有人可问的两臂([ref]:无 TTY / 参数展示不出 —— `src/run-local.ts` `createLocalApprover`)。`reason` = 铸点的
|
|
1076
1020
|
* 闭集拒因句(core 以 `policy note` 围栏交给模型),不带调用方的字节。
|
|
1077
1021
|
*/
|
|
1078
1022
|
export declare function buildUnattendedPolicyRefusal(reason: string): UnattendedPolicyRefusal;
|
|
1079
1023
|
/** 「无人可答」终局的**闭集** —— core `AskOutcome` 联合里只有这两臂由 {@link ToolApprovalCoordinator.unattendedOutcome}
|
|
1080
|
-
* 铸:park 政策的路由答 `"unavailable"`,deny 政策的 {@link UnattendedPolicyRefusal}。没有布尔臂(
|
|
1024
|
+
* 铸:park 政策的路由答 `"unavailable"`,deny 政策的 {@link UnattendedPolicyRefusal}。没有布尔臂([ref]:裸 `false`
|
|
1081
1025
|
* 是人的拒绝,这个口从不替人说话)。 */
|
|
1082
1026
|
export type UnattendedAskOutcome = Extract<AskOutcome, "unavailable"> | UnattendedPolicyRefusal;
|
|
1083
|
-
/**
|
|
1027
|
+
/** [ref] 候裁 16:耐久会话授权店(`src/plugins/approval-exemption-store.ts` 的同一只店):审批席读它(引擎的问),活卡上部署名单那一问的
|
|
1084
1028
|
* 「本会话放行」写它(名单门在出问之前读同一行)。 */
|
|
1085
1029
|
export type SessionGrantStore = Pick<ApprovalExemptionStore, "has" | "grant">;
|
|
1086
1030
|
/**
|
|
@@ -1103,7 +1047,7 @@ export type SessionGrantStore = Pick<ApprovalExemptionStore, "has" | "grant">;
|
|
|
1103
1047
|
* `tool_approval` 活卡腿逐字保留,而不是「把 ask 推向一个不存在的目的地」(§14 属主照准,core [ref]
|
|
1104
1048
|
* 回帖确认即原意)。
|
|
1105
1049
|
*
|
|
1106
|
-
* 🔴 **
|
|
1050
|
+
* 🔴 **[ref]:第 5 项(旧第 4 项 `volatile_ask_ledger` = 「账必须是持久的」,判据 `kind !== "local"`)
|
|
1107
1051
|
* 已整条删除,词也从闭集里删了(零别名)**。它当年成立的唯一输入是 local 车道交的 `InMemoryApprovalAskStore`;
|
|
1108
1052
|
* `FileApprovalAskStore` 落地后 `StoreBackend.approvalAsk()` 的三条腿全是持久店 ⇒ 这条合取项**没有任何
|
|
1109
1053
|
* 能让它为假的输入**,留着就是一条永不触发的规则(「修完让规则集更小」)。持久性的义务搬到
|
|
@@ -1158,12 +1102,13 @@ export declare function resolveStreamApprovalGate<TStore extends GateCurrencySto
|
|
|
1158
1102
|
export declare const APPROVAL_FRAME_FAMILIES: readonly ["tool_approval", "approval_request"];
|
|
1159
1103
|
export type ApprovalFrameFamily = (typeof APPROVAL_FRAME_FAMILIES)[number];
|
|
1160
1104
|
/**
|
|
1161
|
-
* 这台 worker **呈卡用的那一个族**(活卡协调器在场时)——
|
|
1162
|
-
* 壳读它决定声明什么)
|
|
1163
|
-
*
|
|
1105
|
+
* 这台 worker **呈卡用的那一个族**(活卡协调器在场时)—— 全仓唯一的映射,三个读者:能力位 `approvalFrameFamilies`(`capability-facts.ts`,
|
|
1106
|
+
* 壳读它决定声明什么)、{@link resolveApprovalLeg}(腿判「这条 run 声明了没有」)与耐久事件流开流 preamble(`routes/runs.ts`:这条 run 名下的卡
|
|
1107
|
+
* 铸于声明了这一族的腿,卡作证的声明就是它)。各写一份三元式 = 壳照一份声明、服务端照另一份判,那正是 [ref] 要封的「两边各说各话」。
|
|
1108
|
+
* 入参 = {@link resolveStreamApprovalGate} 的 `active`。
|
|
1164
1109
|
*/
|
|
1165
1110
|
export declare function presentedApprovalFrameFamily(streamApprovalOn: boolean): ApprovalFrameFamily;
|
|
1166
|
-
/** 坏声明的拒体(fresh 受理面 400 `request.field_invalid`):一句话 + 机读位,形与
|
|
1111
|
+
/** 坏声明的拒体(fresh 受理面 400 `request.field_invalid`):一句话 + 机读位,形与 [ref] 座位族 / [ref] 三桶的 `bad_entry` 同。 */
|
|
1167
1112
|
export interface ApprovalFrameFamiliesIssue {
|
|
1168
1113
|
readonly message: string;
|
|
1169
1114
|
readonly fields: {
|
|
@@ -1173,14 +1118,14 @@ export interface ApprovalFrameFamiliesIssue {
|
|
|
1173
1118
|
};
|
|
1174
1119
|
}
|
|
1175
1120
|
/**
|
|
1176
|
-
*
|
|
1121
|
+
* [ref] —— 请求面声明 `settings.approvalFrameFamilies` 的**唯一判官**:这条 run 的客户端渲染得了哪些审批开卡帧族。
|
|
1177
1122
|
* 合法 = 数组,每项是 {@link APPROVAL_FRAME_FAMILIES} 里的词、各出现一次(空数组合法 = 一个族都不渲染,与缺席同读)。非数组 / 词表外 / 重复 ⇒ 拒体点名坐标。
|
|
1178
1123
|
* 两个读者:fresh 受理门(`http/admission.ts`,400)与宽容读者 {@link declaredApprovalFrameFamilies}(续跑重放读存体)。入参是 `body.settings`
|
|
1179
1124
|
* 本身(非对象 / 缺席 ⇒ 本判官不判,留给 `settings` 自己的形门)。拒句不回显调用方的字节,只报坐标与词表。
|
|
1180
1125
|
*/
|
|
1181
1126
|
export declare function approvalFrameFamiliesIssue(settings: unknown): ApprovalFrameFamiliesIssue | null;
|
|
1182
1127
|
/**
|
|
1183
|
-
*
|
|
1128
|
+
* [ref] —— 一条 run 声明的帧族集合(三条执行腿读的**唯一**读者;读的是这条 run 的请求体 `settings`:sync = 本次请求、bg = 受理过的提交体、
|
|
1184
1129
|
* resume / wake = 持久化体 —— 声明随体重放,不另存)。缺席 ⇒ 空集。判官说不合法 ⇒ 空集:只有绕过受理门的存体走得到这一形,
|
|
1185
1130
|
* 空集 = 这条腿没有活审批通道(问当场交无人值守政策口)—— 失效方向是不呈卡,不是猜一个族去呈。
|
|
1186
1131
|
*/
|
|
@@ -1210,7 +1155,7 @@ export interface ApprovalLegInput {
|
|
|
1210
1155
|
/** 本腿**开始执行的时刻**的 `performance.now()`。取值点绝不能挪到腿启动之后:误差方向必须是
|
|
1211
1156
|
* 「窗偏短」(安全侧,§7.3 的误差方向论证)。 */
|
|
1212
1157
|
nowMonotonicMs: number;
|
|
1213
|
-
/**
|
|
1158
|
+
/** [ref]:这条 run 声明的帧族(唯一读者 {@link declaredApprovalFrameFamilies},读本 run 的请求体 / 存体)。必填 —— 漏传的装配点编译红,
|
|
1214
1159
|
* 不许有「没传 ⇒ 当作声明了」的默认。 */
|
|
1215
1160
|
declaredFamilies: ReadonlySet<ApprovalFrameFamily>;
|
|
1216
1161
|
}
|
|
@@ -1236,7 +1181,7 @@ export interface ApprovalLegInput {
|
|
|
1236
1181
|
* `streamApprovalOn` 后面** —— 那是部署级旋钮,它的语义不该因为这台机器有没有 durable ask 账而改变
|
|
1237
1182
|
* (`ApprovalLegAssembly.unattended` 顶注写了那条病)。第三源(贴 deadline)照旧只在协议上场时参与。
|
|
1238
1183
|
*
|
|
1239
|
-
* 🔴 **
|
|
1184
|
+
* 🔴 **[ref]**:「这条腿有没有活审批通道」多一个成因 —— 这条 run 没声明本 worker 呈卡用的族。它与关窗是**同一件事**(不呈卡、问当场交政策口),
|
|
1240
1185
|
* 所以进同一个字段(`unattended` 的成因词),三条腿零新分支;判据读 {@link presentedApprovalFrameFamily}(能力位读同一只)。
|
|
1241
1186
|
* 判据**不**放进 {@link resolveStreamApprovalGate}:那是 worker 级谓词(协调器注入 / 能力位 / 回决 501 都没有 run),且它为假时腿退回旧族 `emit` ——
|
|
1242
1187
|
* 正是「回退发 `tool_approval`」。
|
|
@@ -1260,7 +1205,7 @@ export interface ApprovalLegAssembly {
|
|
|
1260
1205
|
* 🔴 [ref] 起与 `active` 解耦:`0` 是**部署级**旋钮,在两条车道上是同一个意思(旧形下关协议的部署配了 `0` 拿到的是等满 5min 的活卡)。
|
|
1261
1206
|
* ⚠️ 「窗**缺席**」(`windowMs: undefined` = 这份装配根本没有 streamApproval 段,只出现在 stub-harness)**不是**关窗。
|
|
1262
1207
|
* 排在声明之前:那时谁都不呈卡,缺的不是客户端的声明。
|
|
1263
|
-
* · `frame_family_undeclared`(
|
|
1208
|
+
* · `frame_family_undeclared`([ref])—— 这条 run 的请求没有声明本 worker 呈卡用的族(`settings.approvalFrameFamilies`)。判据对两个族同一条:
|
|
1264
1209
|
* 不回退发另一族、不双发、没有「键缺席 ⇒ 视作旧族」的默认。
|
|
1265
1210
|
* 三条腿只问「在场没有」,成因随席交给唯一铸点(遥测臂 + deny 政策的拒因句)。 */
|
|
1266
1211
|
unattended?: LegUnattended;
|
|
@@ -1271,12 +1216,12 @@ export interface ApprovalLegAssembly {
|
|
|
1271
1216
|
/**
|
|
1272
1217
|
* [ref] 车3 刀 3b(codex 交叉复审 round2 R2-1,2026-08-06 真 finding)—— 呈卡腿的**双 sink 投递口**(开卡帧 + 消卡帧)。
|
|
1273
1218
|
*
|
|
1274
|
-
* 🔴 为什么必须收成一个有属主的工厂:「呈卡帧送达」决定「卡到底有没有送到人手上」(见 `emitOne` 顶注;
|
|
1219
|
+
* 🔴 为什么必须收成一个有属主的工厂:「呈卡帧送达」决定「卡到底有没有送到人手上」(见 `emitOne` 顶注;[ref] 起呈卡腿只有这一族)。
|
|
1275
1220
|
* sync 腿原来那个内联闭包把两个 sink 的失败都吞掉、然后**正常返回** —— 于是「账本写失败 ∧ socket 已死」这种**真的一路都没送到**的
|
|
1276
1221
|
* 情形被上报成成功,`anySucceeded` 因此压住了 park 路由。诚实的形只有一个:**至少一个 sink 真的接下了才算送达**,一个都没接下就抛 ——
|
|
1277
1222
|
* 调用点(`emitOne`)的 catch 会把它如实记成没送到。
|
|
1278
1223
|
*
|
|
1279
|
-
* 🔴 **两只 sink 各自推进、各自配对**(
|
|
1224
|
+
* 🔴 **两只 sink 各自推进、各自配对**([ref] codex 一轮 F1 / F2,红先钉在 `test/approval-leg-frame-family.test.ts`):
|
|
1280
1225
|
* · 开卡帧同时交两只 sink,**任一只接下即算送达**(不按序串行 —— 旧族退场后 live 面只剩呈卡族这一条路,一只挂住的账本写不能挡住
|
|
1281
1226
|
* 健康的 live 出口;修前先 await 账本再写 live)。两只都失败才抛。
|
|
1282
1227
|
* · 消卡帧只交给**接下过本卡开卡帧**的那只 sink,且排在该 sink 自己的开卡写之后(每只 sink 内开在合前;没接下开卡的 sink 不收消卡 =
|
|
@@ -1296,8 +1241,9 @@ export declare function createApprovalCardEmitter(sinks: {
|
|
|
1296
1241
|
}): (frame: ApprovalCardLegFrame, registration: string) => Promise<void>;
|
|
1297
1242
|
export declare function resolveApprovalLeg(input: ApprovalLegInput): ApprovalLegAssembly;
|
|
1298
1243
|
/**
|
|
1299
|
-
* 🔴 **开流 preamble 往本连接投卡与否的唯一判据**(
|
|
1300
|
-
* (`routes/runs.ts
|
|
1244
|
+
* 🔴 **开流 preamble 往本连接投卡与否的唯一判据**([ref] / H5)—— 两条 preamble 共用:sync 腿(`routes/tasks.ts`,入参的声明读本次请求的 `settings`:
|
|
1245
|
+
* 那条连接列的是整个会话的卡)与耐久事件流(`routes/runs.ts`,那条连接只列这条 run 名下的卡,而无通道的腿一张卡都不落 ⇒ 声明由卡作证,入参 =
|
|
1246
|
+
* {@link presentedApprovalFrameFamily})。preamble 也是往本连接投卡:只在本腿**有活审批通道**时重放、订消卡 ——
|
|
1301
1247
|
* 协议在本 worker 上场、没关窗、这条 run 声明了本 worker 呈卡用的族;与本腿呈不呈卡是同一只装配({@link resolveApprovalLeg}),不在 preamble 一侧另写一份合取式。
|
|
1302
1248
|
* 为假 ⇒ 零帧且零 ask 账读(与「协议未上场」同形)。时钟不参与这一判:`nowMonotonicMs` 只喂 `legDeadlineMonotonic`(窗长三元),不进 `unattended` 的三个成因。
|
|
1303
1249
|
*/
|
|
@@ -1310,7 +1256,7 @@ type DecidedRowFacts = Pick<AskRow, "decision" | "settledBy"> & {
|
|
|
1310
1256
|
updatedInput?: unknown;
|
|
1311
1257
|
};
|
|
1312
1258
|
/**
|
|
1313
|
-
* 🔴 **一条 DECIDED 行 → 交还给引擎的那个 outcome:全仓唯一铸点**(
|
|
1259
|
+
* 🔴 **一条 DECIDED 行 → 交还给引擎的那个 outcome:全仓唯一铸点**([ref])。
|
|
1314
1260
|
*
|
|
1315
1261
|
* 存在理由 = 这条投影此前被**手抄**在每个消费点上(`row.decision === "approve"` + `row.updatedInput`,
|
|
1316
1262
|
* 六处),于是给行加一格新事实就得记得改六处 —— `settledBy` 正是那个没人改到的格:一次**策略拒**在
|
|
@@ -1321,10 +1267,10 @@ type DecidedRowFacts = Pick<AskRow, "decision" | "settledBy"> & {
|
|
|
1321
1267
|
* · **方向** —— `decision !== "approve"` 即拒(列的二值由店的 CAS 保证);
|
|
1322
1268
|
* · **编辑载荷**([ref])—— `updatedInput` 键缺席 = 没带编辑 ⇒ 裸 `true`;在场(**含 `null`**)= 编辑的
|
|
1323
1269
|
* 字面值 ⇒ 对象臂(语义三态的唯一属主 = `AskRow.updatedInput` 顶注);
|
|
1324
|
-
* · **结算来源**(
|
|
1270
|
+
* · **结算来源**([ref])—— 行上非 null 即宿主自报的那个词(`null` = 人决,与「不铸这个键」同义;
|
|
1325
1271
|
* 语义属主 = `AskRow.settledBy` 顶注)。
|
|
1326
1272
|
*
|
|
1327
|
-
* 🔴
|
|
1273
|
+
* 🔴 [ref]:来源位**两向都读**。决定体的出处位 `decidedBy:"policy"` 在 allow 与 deny 上都会落列(引擎 7.39.0 起铸
|
|
1328
1274
|
* `policy_allowed`),所以 approve 行带来源位是一条合法的行,它的每条读回路径交还 `{allow:true, settledBy:"policy", updatedInput?}`
|
|
1329
1275
|
* —— 与当次回决交给引擎的那一只逐字同形。
|
|
1330
1276
|
*/
|
|
@@ -1409,7 +1355,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
1409
1355
|
* `pollSuspendedDecisions` 里那段:按 askId 记的形会在「上一拍最后碰的那条被结算掉」时塌回队首,
|
|
1410
1356
|
* 构造出永久饥饿的前缀)。只回答「上一拍扫到第几个」,单调推进、按当前长度取模。 */
|
|
1411
1357
|
private suspendedPollOffset;
|
|
1412
|
-
/**
|
|
1358
|
+
/** [ref]:悬挂轮询腿第二层(接管登记)的轮转游标 —— 与 {@link suspendedPollOffset} 同一条理由,两层各一只。 */
|
|
1413
1359
|
private adoptedPollOffset;
|
|
1414
1360
|
/** [ref] + codex R3-[critical]:askId → **此刻正带着 `updatedInput` 决它的请求数**(见
|
|
1415
1361
|
* {@link markEditedDecisionInFlight} 顶注)。只在 `decideAsk` 那一次调用期间非空,故天然有界。 */
|
|
@@ -1448,7 +1394,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
1448
1394
|
* 构造之后才装配;同款 holder 先例 = main.ts 的 `getRunDenySweep`)。取到 undefined ⇒ 该臂逐字回落
|
|
1449
1395
|
* 修前 404,partial 部署安全。 */
|
|
1450
1396
|
private readonly parkedRedeem;
|
|
1451
|
-
/**
|
|
1397
|
+
/** [ref]:按问读口对 `PARKED` 卡的门读席(见 {@link ParkedGateRead})。缺席(没有 checkpoint 店的部署 / 只装 ask 账的嵌入)⇒ 读口只能说行说的话(`parked`)。
|
|
1452
1398
|
* 不是晚绑取值口:checkpoint 店在协调器构造之前就装好了(`boot/stage-06`),与 `parkCommits` 同一只店。 */
|
|
1453
1399
|
private readonly parkedGate;
|
|
1454
1400
|
/** [ref] 裁 (c):local 车道的 File ask **审计** sink(在场 ⇔ `DB_BACKEND=local` ∧ 审批面开着,装配点
|
|
@@ -1456,7 +1402,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
1456
1402
|
* 腿闭(`runWithContext` finally)。**纯观察面**:sink 自己吞写失败并 `recordFailOpen`,任何一次审计
|
|
1457
1403
|
* 写都不得改变审批终局(店头注成文)。SQL 车道恒缺席(那里有真 ask 店)。 */
|
|
1458
1404
|
private readonly askAudit;
|
|
1459
|
-
/**
|
|
1405
|
+
/** [ref] 候裁 16 → A:耐久会话授权店(`/decide` 的 `remember:"session"` 写、本席读)。在场 ⇔ 部署有 store backend
|
|
1460
1406
|
* (装配点 `boot/coordinators.ts`,与 `/decide` 写的是**同一只**店)。读口唯一 = {@link standingGrantSettles};写口唯一 = {@link recordDeploymentListAnswer}
|
|
1461
1407
|
* (活卡上部署名单那一问的「本会话放行」)。 */
|
|
1462
1408
|
private readonly sessionGrants;
|
|
@@ -1464,13 +1410,13 @@ export declare class ToolApprovalCoordinator {
|
|
|
1464
1410
|
* 缺席(没有豁免店的装配)⇒ 没有一张卡读作名单的问 —— 名单那一问的答案没有地方记,它就按引擎的类表读(记不住)。
|
|
1465
1411
|
* 活的一问(`AskRequest`)上只有 wire 名(没有调用的别名面)⇒ 名单靠别名命中的调用读不出属主,按引擎的问读(记不住;方向是多问)。 */
|
|
1466
1412
|
private readonly deploymentListAsks;
|
|
1467
|
-
/**
|
|
1413
|
+
/** [ref]:有序关停已开始(`drainForShutdown` 锁存,不复位 —— 进程正在退出)。之后登记的每一张卡在登记那一刻按关停收场。 */
|
|
1468
1414
|
private shutdownDraining;
|
|
1469
|
-
/**
|
|
1415
|
+
/** [ref]:此刻在 `askBroadcast` 里的 ask 数(进出成对,见那里的 try/finally)—— 关停等待「还没登记进 `pending` 的卡」的计数。 */
|
|
1470
1416
|
private asksInFlight;
|
|
1471
|
-
/**
|
|
1417
|
+
/** [ref] F1:park 提交的观察面(checkpoint 店的装饰层;在场 ⇔ 本部署有 park 设施,装配点 `boot/stage-06-runners.ts`)。 */
|
|
1472
1418
|
private readonly parkCommits;
|
|
1473
|
-
/**
|
|
1419
|
+
/** [ref] F1:有序关停下路由到 park、**处置尚未被观察到**的卡 —— 审计 settle 行在这里候着({@link settleParksAwaitingCommit})。
|
|
1474
1420
|
* 只在关停期有成员(进程随后退出,不需要回收)。 */
|
|
1475
1421
|
private readonly parksAwaitingCommit;
|
|
1476
1422
|
constructor(opts?: {
|
|
@@ -1492,7 +1438,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
1492
1438
|
ruleScopeRootFor?: (sessionId: string | undefined) => string | undefined;
|
|
1493
1439
|
/** [ref]:PARKED 臂赎回席的**晚绑取值口**(见 {@link ToolApprovalCoordinator.parkedRedeem})。 */
|
|
1494
1440
|
parkedRedeem?: () => ParkedAskRedeem | undefined;
|
|
1495
|
-
/**
|
|
1441
|
+
/** [ref]:按问读口的门读席(见 {@link ToolApprovalCoordinator.parkedGate})。 */
|
|
1496
1442
|
parkedGate?: ParkedGateRead;
|
|
1497
1443
|
/** [ref]:受理回执表两道界(缺省见 {@link DEFAULT_PARK_REDEMPTION_MAX}/{@link DEFAULT_PARK_REDEMPTION_TTL_MS})。
|
|
1498
1444
|
* 不是部署旋钮(不接 env),可注入只为让「有界」这件事被判据观测得到。 */
|
|
@@ -1502,26 +1448,26 @@ export declare class ToolApprovalCoordinator {
|
|
|
1502
1448
|
parkRedemptionPerPrincipalMax?: number;
|
|
1503
1449
|
/** [ref] (c):local 车道审计 sink(见 {@link ToolApprovalCoordinator.askAudit})。 */
|
|
1504
1450
|
askAudit?: ApprovalAskAuditSink;
|
|
1505
|
-
/**
|
|
1451
|
+
/** [ref] 候裁 16:耐久会话授权店(见 {@link ToolApprovalCoordinator.sessionGrants})。 */
|
|
1506
1452
|
sessionGrants?: SessionGrantStore;
|
|
1507
1453
|
/** 问的属主的读法(见 {@link ToolApprovalCoordinator.deploymentListAsks})。只能与 `sessionGrants` 同在:名单那一问的答案就记在那只店里。 */
|
|
1508
1454
|
deploymentListAsks?: (call: {
|
|
1509
1455
|
readonly toolName: string;
|
|
1510
1456
|
}) => boolean;
|
|
1511
|
-
/**
|
|
1457
|
+
/** [ref] F1:park 提交的观察面(见 {@link ToolApprovalCoordinator.parkCommits})。 */
|
|
1512
1458
|
parkCommits?: ParkCommitWatch;
|
|
1513
1459
|
});
|
|
1514
1460
|
/**
|
|
1515
1461
|
* [ref] R-13 C —— 「**无人可答**」这一类终局的**唯一**成形口(park 路由 vs deny 政策)。
|
|
1516
1462
|
*
|
|
1517
|
-
* 终局形(
|
|
1463
|
+
* 终局形([ref]):park ⇒ `"unavailable"`;deny ⇒ {@link UnattendedPolicyRefusal}
|
|
1518
1464
|
* `{allow:false, settledBy:"policy", reason}`(core 记 `policy_refused`)。**从不**交裸 `false`:那在 core 的
|
|
1519
1465
|
* onAsk 契约里是「一个人拒了」,而本口的全部臂都是「没有人能答」。
|
|
1520
1466
|
*
|
|
1521
1467
|
* 五臂(设计稿 §1 的表)全部读它,`unattendedPolicy` 因此是一处施加、五处消费:
|
|
1522
1468
|
* (a) 有店窗到期 `expireAsk` 赢 CAS / (b) 无店窗到期(D1)/ (c) 有店但 `expireAsk` 报错
|
|
1523
1469
|
* —— 三条走 `windowRouteUnavailable` 标志,在 {@link shapeOutcome}(askBroadcast 内)成形;
|
|
1524
|
-
* (d) 没有活审批通道的腿(装配层短路:关窗 / 未声明呈卡族,
|
|
1470
|
+
* (d) 没有活审批通道的腿(装配层短路:关窗 / 未声明呈卡族,[ref])与无 ALS 上下文的 headless 腿 —— 走本方法/{@link ask};
|
|
1525
1471
|
* (e) 断连 `forceParkNow` / emit 全灭 / 写侧准入超限 —— 走本方法。
|
|
1526
1472
|
*
|
|
1527
1473
|
* **持久回放的两个口也归它管**(codex R1-F1 验真后收口,红先钉在
|
|
@@ -1531,7 +1477,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
1531
1477
|
* 的终局会取决于「谁赢了那把 CAS」「重试没重试」—— 比残余更坏的不可解释性。人的**真决议**(回放出
|
|
1532
1478
|
* `true`/`false`)当然不过这个口:那不是「无人可答」。
|
|
1533
1479
|
*
|
|
1534
|
-
* **`ensureAsk` 的两条兜底臂也归它管**(
|
|
1480
|
+
* **`ensureAsk` 的两条兜底臂也归它管**([ref],7.100.0 合并复审 opus 腿 E1;此前两臂直接交裸 `"unavailable"`,是这句
|
|
1535
1481
|
* 「唯一成形口」的例外):行不可用(`persisted_row_unusable`:信封形不合 / deadline 越界)与身份不定(`ensure_indeterminate`:
|
|
1536
1482
|
* ensure 失败且复核读全失败)。两臂的**处置**不变 —— 不编造 wire 身份、不在身份未定时呈卡收人决(fail-closed)—— 变的只是
|
|
1537
1483
|
* 「不呈卡之后交什么」:它们同样是「这只 ask 没有人能答」,于是同样过这个口(park ⇒ `"unavailable"` 逐字不变;deny ⇒
|
|
@@ -1543,9 +1489,9 @@ export declare class ToolApprovalCoordinator {
|
|
|
1543
1489
|
* `refuse` 意图(政策→意图的唯一映射在 `approval-policy-settlement.ts` 的 `settleByPolicy`)—— STREAM_PENDING→DECIDED(deny) + `settled_by = "policy"`,**按 ask
|
|
1544
1490
|
* 作用域**(不碰批、不连坐兄弟)。落的来源词与本口交给 core 的是**同一个常量**(`POLICY_REFUSAL_DECISION`),于是
|
|
1545
1491
|
* 同 ask 重入 / 收敛后重入由 `outcomeOfDecidedRow` 读回同一个对象。当年「危害为零」的论证(PARKING 行绑不上、
|
|
1546
|
-
* 自行收敛成 DENIED/VOID)在
|
|
1492
|
+
* 自行收敛成 DENIED/VOID)在 [ref] 之后不再成立:首判交 `{allow:false, settledBy:"policy"}`,行停 PARKING 的回放
|
|
1547
1493
|
* 却交裸 `false`(收敛后 DENIED 无来源)—— core 当成人拒、可停批,两次判决第一次可被观测地分家。
|
|
1548
|
-
*
|
|
1494
|
+
* [ref] / [ref] 把同一只 claim 接到了另外三处:两条兜底臂({@link landUnattendedOutcome})与崩溃恢复腿(收敛器孤儿段,
|
|
1549
1495
|
* 它是窗到期竞争者在崩溃后的补位)—— 四处调的是**一只** `settleByPolicy`,谁也不自己挑意图。deny 部署上仍按 PARKING
|
|
1550
1496
|
* 记账的只剩一形:别的写者(park 政策副本 / 切换政策之前)推进过的行,重入走本口(`replayed_parked`)。
|
|
1551
1497
|
* deny 政策下批仍是**单 ask 批**(见 {@link batchIdFor}):`refuse` 本来就不碰批,单 ask 批让新行与存量整腿批行
|
|
@@ -1554,12 +1500,12 @@ export declare class ToolApprovalCoordinator {
|
|
|
1554
1500
|
private unattendedOutcome;
|
|
1555
1501
|
/** 政策**读**口(不是终局铸口)—— 回答「这台部署把无人可答翻成 park 吗」。
|
|
1556
1502
|
*
|
|
1557
|
-
* 🔴 与 {@link unattendedOutcome} 分家是
|
|
1503
|
+
* 🔴 与 {@link unattendedOutcome} 分家是 [ref] 的一半:此前两件事共用一只方法,于是 park 路由判别那次
|
|
1558
1504
|
* 纯粹的**政策查询**(`unattendedOutcome() !== false`)会和同一只 ask 的真终局各记一条遥测 ——
|
|
1559
1505
|
* 「一只 ask 一条线」当场不成立。读口不落日志,铸口落;谁也不兼职。 */
|
|
1560
1506
|
private get unattendedRoutesToPark();
|
|
1561
1507
|
/**
|
|
1562
|
-
* 一只 ask 落在**哪只批**里 —— 批作用域随政策(
|
|
1508
|
+
* 一只 ask 落在**哪只批**里 —— 批作用域随政策([ref] codex R1-F1,判据全文见 {@link deriveAskScopedBatchId})。
|
|
1563
1509
|
* · park 路由 ⇒ 整腿一批(`deriveBatchId`):窗到期赢家整批转投递面、兄弟连坐,core 随后 park,腿就此结束;
|
|
1564
1510
|
* · deny 政策 ⇒ 单 ask 批:没有 park 路由,腿在一次部署政策拒之后继续跑 —— 整腿一批会让首只到期把批关掉,
|
|
1565
1511
|
* 同腿后续的卡人批不动(`decideAsk` batch_closed ⇒ 404),兄弟还被连坐成 VOID、以裸 `false` 交 core(人拒)。
|
|
@@ -1574,7 +1520,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
1574
1520
|
toolName?: string;
|
|
1575
1521
|
}): UnattendedAskOutcome;
|
|
1576
1522
|
/**
|
|
1577
|
-
*
|
|
1523
|
+
* [ref] —— 两条兜底臂的「无人可答」终局的**落行**半场。交给 core 的值已由 {@link unattendedOutcome} 一处铸好,这里只回答
|
|
1578
1524
|
* 「这条持久行上落什么」,判据是「交出去的是不是**结算**」(行 = 真源:交出去的结算必须同时是行上的结算,否则同 ask 重入 /
|
|
1579
1525
|
* 收敛后重入回放出来的是另一个答案 —— NP-2 在 live 腿上收掉的同一种分家):
|
|
1580
1526
|
* · park 路由(`"unavailable"`)不是结算 ⇒ 行**不动**:它留在 STREAM_PENDING,投递面由既有机器接(崩溃恢复腿按政策代打),
|
|
@@ -1584,7 +1530,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
1584
1530
|
* 🔴 **只对「本次调用插下的」行调用**(调用方的义务;codex 对抗复审 F1 + R2-2 / [ref] 件2 同一条纪律「放弃收尾只许动本次插入的
|
|
1585
1531
|
* 行」):兜底臂发生在**窗开之前** —— 一条幂等命中的 STREAM_PENDING 行此刻可能正被别的登记(另一副本 / 另一版本 / 重入)呈卡、
|
|
1586
1532
|
* 有人正要按;当场 refuse 等于把一张活卡在它自己的窗走完之前作废。所以归属证不出(幂等命中、ensure 报错、迟到结果
|
|
1587
|
-
* `inserted:false`)⇒ 本方法不被调用、行不动:它的属主按自己的窗收场,属主不在了由收敛器孤儿段(同一只 claim,
|
|
1533
|
+
* `inserted:false`)⇒ 本方法不被调用、行不动:它的属主按自己的窗收场,属主不在了由收敛器孤儿段(同一只 claim,[ref])在
|
|
1588
1534
|
* 窗过 + 宽限之后落同一个政策结算。`row.batchId` 恒取**行上**的批(claim 的 scope;本地派生的批可能与存量行不同,
|
|
1589
1535
|
* 错 scope 的 claim 答 absent,不证明「行上没有决议」—— codex F1)。
|
|
1590
1536
|
*
|
|
@@ -1671,7 +1617,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
1671
1617
|
*/
|
|
1672
1618
|
beginDrain(): void;
|
|
1673
1619
|
/**
|
|
1674
|
-
* 🔴 **
|
|
1620
|
+
* 🔴 **[ref] —— 有序关停的审批面收尾(一只;`boot/shutdown.ts` 的 `hardShutdown` 起点调,SIGTERM / SIGINT / SIGHUP 三条停止路同一处)。**
|
|
1675
1621
|
*
|
|
1676
1622
|
* 病(cli [ref] S7):修前关停序不碰协调器 ⇒ 本进程握着的活卡在下一次 boot 被审计收敛器标成 `crashed_before_park`,
|
|
1677
1623
|
* 用户屏上看到「crashed」而实为有序重启。
|
|
@@ -1679,7 +1625,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
1679
1625
|
* 三步:
|
|
1680
1626
|
* ① 本进程握着的**每一张**未决卡(可达 / 悬挂 / 委派子代,不挑)按**断连同路**收场 —— {@link PendingApproval.forceParkNow}(park 路由;
|
|
1681
1627
|
* `deny` 政策下是部署政策拒;有持久 ask 店时走同一把终局 claim)。有序关停与断连是同一件事:投递面要没了,**不是**有人拒了
|
|
1682
|
-
* (不交裸 `false`,
|
|
1628
|
+
* (不交裸 `false`,[ref] 同律)。审计 settle 行携 `cause:"shutdown_before_park"`(`forceParkNow` 的调用点点名它);
|
|
1683
1629
|
* ② 在 `deadlineMs` 之前等:未决卡结清、在飞腿闭合(闭了的腿照常落 `leg_closed`)、**本次路由到 park 的卡全部结清**
|
|
1684
1630
|
* (F1:观察到 core 已处置这次调用 —— 停车行提交或承载它的腿退场 ⇒ 那张卡的审计 settle 行此刻才写,见 {@link settleParksAwaitingCommit})、
|
|
1685
1631
|
* 店里在飞的 `put` 静默;
|
|
@@ -1700,7 +1646,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
1700
1646
|
}>;
|
|
1701
1647
|
}>;
|
|
1702
1648
|
/**
|
|
1703
|
-
*
|
|
1649
|
+
* [ref] F1:checkpoint 店的观察层报「一只审批停车行提交了」({@link CommittedParkCalls}:行自己陈述的会话与握着的调用)⇒ 候着的
|
|
1704
1650
|
* **同一次调用**结清:执行会话**相等**(候者记的是 ask 自己陈述的发起会话,行陈述的是它停住的会话 —— core 同一个变量)∧ 调用 id ∈ 行握着的调用。
|
|
1705
1651
|
* 不做「会话相交」:调用 id 只在 run 内唯一(父子各自的第一只调用常同名),宿主会话若作子代的等价别名,宿主停车行一提交就会冒充子代的提交(车 SO)。
|
|
1706
1652
|
* 只在关停期有候者;非关停期的提交一个不碰。
|
|
@@ -1708,7 +1654,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
1708
1654
|
*/
|
|
1709
1655
|
private noteParkCommitted;
|
|
1710
1656
|
/**
|
|
1711
|
-
*
|
|
1657
|
+
* [ref] F1 的**结清口**(一处):有序关停下 park 路由的卡,在**观察到 core 已处置这次调用**时写它的审计 settle 行 —— 两种观察,同一件事实:
|
|
1712
1658
|
* · `park-committed` —— 停车行提交了(观察层看到 `put` 落定,或 core 回读确认的那一次 `get` 读到了行);
|
|
1713
1659
|
* · `leg-closed` —— **承载它的那条腿**退场了(`runWithContext` finally 按 ctx 身份配 {@link ParkAwaitingCommit.carrierLeg}:core 已走完这条腿 ——
|
|
1714
1660
|
* 停靠了,或拒了停靠 fail-closed 继续)。
|
|
@@ -1751,12 +1697,12 @@ export declare class ToolApprovalCoordinator {
|
|
|
1751
1697
|
* 投递到哪条连接不参与 —— 见 {@link AskOriginIdentity} 顶注。 */
|
|
1752
1698
|
private governanceForcedOf;
|
|
1753
1699
|
/**
|
|
1754
|
-
* 🔴 **
|
|
1700
|
+
* 🔴 **[ref] 候裁 16 → A —— 站着的答案(会话授权)的唯一兑现口**(主会话裁定 2026-09-29;core 7.34.0 wire 段逐字指定的兑现位:
|
|
1755
1701
|
* 「a host approval seat that settles asks from a session grant reads it [`authoredBy`] to keep its hands off」)。
|
|
1756
1702
|
*
|
|
1757
1703
|
* **一条判据**:一只 ask 由会话授权代答 ⇔ ① 判据说它的站着的答案在本席({@link standingAnswerHome} 答 `seat` —— 治理强制 /
|
|
1758
1704
|
* `requiresRealApproval` / `mandated` 三位的既有排除一字不动;运维「恒问人」的卡(`APPROVAL_NEVER_AUTO` / 耐久预算耗尽)
|
|
1759
|
-
* 自
|
|
1705
|
+
* 自 [ref] 起盖部署出身 ⇒ core 盖 `mandated`,同落这一臂)∧ ② 有真会话 ∧ ③ 两只授权店任一命中:live `allow_session` 的
|
|
1760
1706
|
* 进程内表(按能力桶,[ref]② 修2)或耐久 `/decide` `remember:"session"` 的豁免店(按 canonical 工具名,`/decide` 写的同一只店;
|
|
1761
1707
|
* 读失败 ⇒ 不命中 = fail-closed,人多看一张卡而不是被静默代答)∧ ④ 行上没有与本地 peek 矛盾的出处({@link sessionGrantUncontestedByRow})。
|
|
1762
1708
|
*
|
|
@@ -1777,14 +1723,14 @@ export declare class ToolApprovalCoordinator {
|
|
|
1777
1723
|
* 问已经发出去了)。 */
|
|
1778
1724
|
private durableGrantHas;
|
|
1779
1725
|
/**
|
|
1780
|
-
* 🔴 **
|
|
1726
|
+
* 🔴 **[ref] 候裁 16 —— 无通道席**(旧名「窗 0 席」):本席**不呈卡**,但在报「无人可答」之前先问站着的答案。装配点 = 三条腿上没有活审批通道
|
|
1781
1727
|
* 的那一支({@link ApprovalLegAssembly.unattended} 在场;sync `http/routes/tasks.ts`、bg `runs.ts`、resume `http/resume-legs.ts`),成因 `why`
|
|
1782
|
-
* 随席交给唯一铸点(遥测臂 + deny 政策的拒因句;
|
|
1728
|
+
* 随席交给唯一铸点(遥测臂 + deny 政策的拒因句;[ref] 起两个成因:关窗 / 这条 run 没声明呈卡族)。修前三处是装配层的就地闭包 `() => unattendedAskOutcome(...)`
|
|
1783
1729
|
* —— 不读授权,引擎那一问(模式写门 / 形状层)在窗 0 部署上 remember 恒无效。改形后:授权命中 ⇒ `true`;否则逐字走
|
|
1784
1730
|
* {@link unattendedAskOutcome} 这**一个**政策口(五臂一处施加,[ref] R-13 C 不变)。
|
|
1785
1731
|
* parked 赎回腿的继承条目席**不**改:那条腿上到席的问全是继承问(core 盖 `mandated`),本席依约不退役,改了也兑现不了任何东西 ——
|
|
1786
1732
|
* 赎回腿上那类问的授权照旧由重建链里 durable 名单门的策略层探针兑现(锚 = 行的 root 会话)。复活子代**自己的**引擎问(模式写门 /
|
|
1787
|
-
* 形状层)则经赎回腿铸的 execute ctx `onAsk` 落本席(身份 = 行的 root 会话,
|
|
1733
|
+
* 形状层)则经赎回腿铸的 execute ctx `onAsk` 落本席(身份 = 行的 root 会话,[ref] 四续 ⑪,`parked-decide.ts` `approverSeatFor`)。
|
|
1788
1734
|
*/
|
|
1789
1735
|
boundUnattendedAsk: (identity: {
|
|
1790
1736
|
owner: string | null;
|
|
@@ -1792,7 +1738,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
1792
1738
|
sessionId?: string;
|
|
1793
1739
|
}, why: LegUnattended) => ((req: AskRequest) => Promise<AskOutcome>);
|
|
1794
1740
|
/**
|
|
1795
|
-
* 🔴 session grant 短路前的**持久出处复核**([ref] 的 codex R1-[high] 补丁;[ref] 换判据;
|
|
1741
|
+
* 🔴 session grant 短路前的**持久出处复核**([ref] 的 codex R1-[high] 补丁;[ref] 换判据;[ref] / SN-C1 换读口)。
|
|
1796
1742
|
*
|
|
1797
1743
|
* 回 `true` = 「这次调用在这条腿上从来没有过持久出处」⇒ 一揽子放行可以短路;
|
|
1798
1744
|
* 回 `false` = 这次调用在腿内有行(任何状态、任何 ask 身份),**或**读不出来(不知道 = 不放宽)⇒ 调用方必须往下走真出卡。
|
|
@@ -1801,10 +1747,10 @@ export declare class ToolApprovalCoordinator {
|
|
|
1801
1747
|
* 而 `ensureAsk` 会写行。为什么一行都没有就放行:这次调用在这条腿上的行只可能由**这次调用的某一问**铸出来,
|
|
1802
1748
|
* 一行都没有 ⇒ 从来没有过一份能反驳本地判据的持久出处(这也是常见形:grant 命中的调用多半是头一次到)。
|
|
1803
1749
|
*
|
|
1804
|
-
* ## 争议按**调用**判,不按 ask 身份判(
|
|
1750
|
+
* ## 争议按**调用**判,不按 ask 身份判([ref] / SN-C1)
|
|
1805
1751
|
*
|
|
1806
1752
|
* 争议的真源是调用:人对这次调用说过什么、这次调用还有没有一张卡挂着。ask 身份(`deriveAskId`)只是其中**一问**的主键,而身份会加轴 ——
|
|
1807
|
-
*
|
|
1753
|
+
* [ref] 把这一问的类集并进身份后,按身份点读会把两类行读成「不存在」:① 同一调用另一类集的那一问(core [ref] 的委派第二张卡与首卡);
|
|
1808
1754
|
* ② 升级前按旧派生写的行(同一 resume token 重投 = 同一 `legKey`,跨版本重入同一调用)。两形都让一揽子放行代答、人拒 / 挂着的卡被绕过
|
|
1809
1755
|
* (codex 车内 r1 [high] + [ref] gpt-6 腿 A 同指)。⇒ 读口 = 店的 `listByCall`(四列 = 这次调用在这条腿上的坐标,精确匹配),本函数不派生 askId。
|
|
1810
1756
|
* **身份可以加轴,争议判据不得依赖身份。**
|
|
@@ -1826,7 +1772,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
1826
1772
|
* · **codex 交叉复审**([ref] 同批,验真后采纳):只补终态判据仍漏「卡还在别处挂着」——
|
|
1827
1773
|
* STREAM_PENDING 行意味着已有一张卡在等人,凭 grant 抢跑会让行上的终局与真实执行长期矛盾
|
|
1828
1774
|
* (那张卡随后可被人/另一副本决成相反答案,或 TTL 到点被收敛成幻影 gate)。
|
|
1829
|
-
* · **
|
|
1775
|
+
* · **[ref] / SN-C1**(见上节):读口按身份点读,身份加轴后漏掉同调用别的问与旧派生的行。
|
|
1830
1776
|
* 几次都不是各自独立的 bug,是同一句话没说全,故最终判据收成一条而不是几个分支。
|
|
1831
1777
|
*
|
|
1832
1778
|
* 零额外 IO(一次读),且 fail-closed **by construction**:将来 `AskState` 加词、ask 身份再加轴,都不需要动这里。
|
|
@@ -1879,7 +1825,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
1879
1825
|
private hasOtherSuspendedOwner;
|
|
1880
1826
|
private settleSameAskIdParkRoute;
|
|
1881
1827
|
/**
|
|
1882
|
-
* claim 败方真相的**同 askId 分发口**(codex [ref] R6-2 / R7-1 立在 live 腿的闭包里;
|
|
1828
|
+
* claim 败方真相的**同 askId 分发口**(codex [ref] R6-2 / R7-1 立在 live 腿的闭包里;[ref] codex F2 起两条兜底臂的落行半场
|
|
1883
1829
|
* {@link landUnattendedOutcome} 也调它 —— 一个分发口,不写第二份):真相是**行**的,不是某一条登记的 ⇒ 真决议经
|
|
1884
1830
|
* {@link notifyExternalDecision}、投递面经 {@link settleSameAskIdParkRoute} 交给同 askId 的全部本地登记;各登记的 settle 自带
|
|
1885
1831
|
* 单赢者卫兵,对已落的恒无操作。absent / 编辑在飞没有可分发的真相。
|
|
@@ -2016,7 +1962,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
2016
1962
|
* 舰队 scope,与 `/decide` 腿同姿势);live 命中路径一个字节都不看它。缺席 = 非 HTTP 调用点
|
|
2017
1963
|
* (测试/内部),赎回席按「无请求」形处置。 */
|
|
2018
1964
|
httpReq?: IncomingMessage,
|
|
2019
|
-
/**
|
|
1965
|
+
/** [ref]:本次回决的**部署事实**(协调器自己不读 config;回决路由从能力事实读来交进)。缺席 ⇒ 按「不受理读根授权」读(失败方向 = 拒)。 */
|
|
2020
1966
|
deployment?: ToolApprovalRespondDeployment): {
|
|
2021
1967
|
status: number;
|
|
2022
1968
|
body: unknown;
|
|
@@ -2024,15 +1970,21 @@ export declare class ToolApprovalCoordinator {
|
|
|
2024
1970
|
status: number;
|
|
2025
1971
|
body: unknown;
|
|
2026
1972
|
}>;
|
|
2027
|
-
/**
|
|
2028
|
-
|
|
2029
|
-
|
|
2030
|
-
* (
|
|
2031
|
-
|
|
2032
|
-
|
|
2033
|
-
|
|
1973
|
+
/** [ref]:这条登记**有没有问账行**(有 ⇒ 属主的唯一来源是行上当下的 owner 列;没有 ⇒ 登记记下的那一位是唯一可读的属主事实)。 */
|
|
1974
|
+
private registrationHasRow;
|
|
1975
|
+
/**
|
|
1976
|
+
* [ref]([ref] 的接管登记一臂并进来):**读行判属主**的应答 —— 接管登记恒走这里;活登记在登记记下的属主不认调用方时走这里(行可能已被收编改给调用方)。
|
|
1977
|
+
* 属主门读**行当下的** owner:登记上记下的那一格是铸卡(或接管)那一刻的进程内快照,`/v1/adoption` 改写行之后它就落后了(契约:应答口的授权判据取
|
|
1978
|
+
* 当下的持久事实,收编之后旧属主手里的卡作废、新属主照常答得了 —— 与耐久决断口同答)。行仍 `STREAM_PENDING` ⇒ {@link answerRegistration}(同一把
|
|
1979
|
+
* `decideAsk` CAS,绑门刚读到的那位属主,[ref];活登记上那条在等的腿照常收到决议);行已有终局(别处答了 / 对账器收了,本副本还没闻讯)⇒ 按行的真相答
|
|
1980
|
+
* (与晚答口同一张表)。读不出行 ⇒ 不知道属主是谁 ⇒ 与未知 id 同形同码(属主门 fail-closed)。
|
|
1981
|
+
*/
|
|
1982
|
+
private respondByRow;
|
|
1983
|
+
/** 一条已过属主门的登记(活登记或接管登记)的应答 —— 两者同一条路:规则文本前门 → 要人门 → CAS → 兑付。
|
|
1984
|
+
* `judgedOwner` = 门判过的那位属主([ref]:决议作用域的属主维,CAS 与确认读都绑它;见 `askRowCarriesOwner`)。 */
|
|
2034
1985
|
private answerRegistration;
|
|
2035
|
-
/** 一次 live 回决**落定之后**的两件兑付(部署名单那一问的豁免、「不再询问」的规则)—— 两件都只在 200 那一支、都读同一只资格。
|
|
1986
|
+
/** 一次 live 回决**落定之后**的两件兑付(部署名单那一问的豁免、「不再询问」的规则)—— 两件都只在 200 那一支、都读同一只资格。
|
|
1987
|
+
* `judgedOwner` = 这次决议的门判过的那位属主([ref]:一次决议只读一次属主 —— 决议 CAS、会话放行、规则落店、豁免记账都用这一份,不回头重读登记上的那一格)。 */
|
|
2036
1988
|
private afterLiveDecision;
|
|
2037
1989
|
/**
|
|
2038
1990
|
* **部署名单(`APPROVAL_REQUIRE`)那一问的「本会话放行」只落 server 的会话豁免店**(谁问的,谁的站着的答案算数):名单的问是 server 铸的,
|
|
@@ -2080,12 +2032,17 @@ export declare class ToolApprovalCoordinator {
|
|
|
2080
2032
|
status: number;
|
|
2081
2033
|
body: unknown;
|
|
2082
2034
|
}>;
|
|
2083
|
-
/**
|
|
2084
|
-
|
|
2035
|
+
/**
|
|
2036
|
+
* [ref]:有行的登记的按问读口 —— 行可见且仍 `STREAM_PENDING` ⇒ `pending`(列表面同一只行投影);否则按行的态答(与读行半场同一张表)。
|
|
2037
|
+
* 🔴 行**读不出**(店抛 / 超时)⇒ 只有**本协调器自己铸的活登记**回落:登记记下的属主认调用方 ⇒ `pending`,否则与未知 id 同答 —— 与同一刻的应答口同答
|
|
2038
|
+
* (活登记的应答拿登记属主当候选、不多读一次店,店抖动不挡真实回决,D5),也与 7.135.x 的读口同答。**接管登记**([ref],起服从问账接管、没有引擎腿在等)的
|
|
2039
|
+
* 属主跟着行走,登记上那一格不是权威 —— 应答口对它恒读行判、读不出 ⇒ 404,读口同样 404(两口同答;7.135.x 两口都 404)。读得出的「没有这一行」不回落(那是行的真相)。
|
|
2040
|
+
*/
|
|
2041
|
+
private readByRow;
|
|
2085
2042
|
/** {@link readApproval} 的读行半场。 */
|
|
2086
2043
|
private readAskRowState;
|
|
2087
2044
|
/**
|
|
2088
|
-
* `PARKED` 行的门读法(
|
|
2045
|
+
* `PARKED` 行的门读法([ref]):问判官「这张卡的门此刻还是不是该会话当前待决的审批门」。行是终态、不随赎回 / 取消改写,所以只有 checkpoint 知道。
|
|
2089
2046
|
* 没有门读席 / 行上没有 gate token ⇒ `open`(读口只能说行说的话;应答口对同一张卡的 PARKED 臂此时也答不了受理,不另有第二个答案)。
|
|
2090
2047
|
* 读不出(店故障 / 超时)⇒ 按本协调器的店故障姿势(D5:记账 + 一次 warn)退回 `open` —— 这一臂只影响**展示**,应答口对同一张卡仍按自己的判官 fail-closed。
|
|
2091
2048
|
*/
|
|
@@ -2122,8 +2079,10 @@ export declare class ToolApprovalCoordinator {
|
|
|
2122
2079
|
/** {@link respondLate} 的读行:按 id 读出行,交 {@link dispatchRowTruth}。 */
|
|
2123
2080
|
private dispatchLateByRow;
|
|
2124
2081
|
/**
|
|
2125
|
-
* 按 wire 身份(= 行的键)
|
|
2126
|
-
*
|
|
2082
|
+
* 按 wire 身份(= 行的键)读行 —— 三态分开交回({@link AskRowRead}):读到了 / 读得出的「没有这一行」/ 读不出(店抛或超时,记账)。
|
|
2083
|
+
* 「读不出」与「不在」不折成一个值:调用点各自表态 —— 应答口与晚答口按「查无」答(读不出 = **不知道**这只 ask 落在哪一态,而受理臂都在对客户端做承诺,
|
|
2084
|
+
* 不知道 ⇒ 回那句 404,绝不把未知说成受理;D5 的 fail-open 只覆盖「不挡人的真实回决」那一面,这条腿方向相反),按问读口对本协调器自己铸的活登记回落那一份登记
|
|
2085
|
+
* (接管登记不回落,{@link readByRow})。
|
|
2127
2086
|
*/
|
|
2128
2087
|
private askRowFor;
|
|
2129
2088
|
/**
|
|
@@ -2217,18 +2176,18 @@ export declare class ToolApprovalCoordinator {
|
|
|
2217
2176
|
* 的唯一数据源,**同时**是 `/v1/approvals/stream` 的 live 半场 diff 源(推与拉必须同源:feed 收到
|
|
2218
2177
|
* `live_pending` 事件就会去 `list()`,两处各读各的会给出一条列不出来的事件)。纯读投影,零锁/零结算
|
|
2219
2178
|
* 语义。
|
|
2220
|
-
* 🔴 **
|
|
2179
|
+
* 🔴 **[ref] 起行上带整只活卡帧**(`frame`,见 {@link LivePendingRow.frame}):旧文那句「input/args
|
|
2221
2180
|
* 不上列表,详情走流帧」对**悬挂 ask 结构上不成立**(它永远没有流帧),而 `frame` 是 `askBroadcast`
|
|
2222
2181
|
* 那一处构造的同一个对象 ⇒ 仍然只有**一个**脱敏属主、零第二投影。`scope` 与 durable 面同一个值(checkpoint scope):`undefined` = operator 全量(含 owner null 的
|
|
2223
2182
|
* 条目),`_`(`CHECKPOINT_PUBLIC_SCOPE`)= 匿名那一组 = owner null 的条目(R7:不带主体的调用方列得出它答得了的那几张),
|
|
2224
2183
|
* 其余串 = 只见 `owner === scope` 的条目(null-owner 行对具名主体不列,宁少列不超范围)。行的 `approvalId` 就是 `respond()` 收的 id
|
|
2225
2184
|
* (同源可达,[ref] 判据);`expiresAtMs` 照抄登记时单点铸定的窗死线([ref] 三键同一个数)。 */
|
|
2226
2185
|
/**
|
|
2227
|
-
* 🔴
|
|
2186
|
+
* 🔴 [ref] —— **起服接管**:把问账里仍 `STREAM_PENDING` 的问接进本审批机的活集合,让 `livePending[]`(及 `/v1/approvals/stream` 的 live 半场、
|
|
2228
2187
|
* 按问读口、应答口)在重启之后不重开流也看得见、答得了它们。审批机仍是这些读面**唯一**的读源:读问账的只有这里(起服一次),之后列表行由
|
|
2229
2188
|
* 同一只 {@link livePendingRowOf} 投影,卡帧 = `buildReplayFrame`(开流 preamble 同一只构造)—— 不是 GET 上加一只读表的第二 reader。
|
|
2230
2189
|
*
|
|
2231
|
-
* 律(设计稿 `design-
|
|
2190
|
+
* 律(设计稿 `design-[ref].md` §2):接管登记**没有引擎腿在等它**(铸它的进程没了,或它活在别的副本上),与活登记同一只状态机 ——
|
|
2232
2191
|
* 应答 = 同一把 `decideAsk` CAS({@link answerRegistration}),收敛 = 同一条悬挂轮询腿读行({@link pollSuspendedDecisions});它活多久只由行说了算,
|
|
2233
2192
|
* 没有自己的窗(无等待腿的行的到期写者已经存在:对账器段二,同一只政策感知终态 claim,窗 + 宽限 —— 接管不新增竞争者)。
|
|
2234
2193
|
* 「本副本没有引擎腿在等它」机读披露:列表行与应答回执带 `consumerState:"absent"`({@link ASK_DECISION_CONSUMER_ABSENT})。
|
|
@@ -2240,26 +2199,26 @@ export declare class ToolApprovalCoordinator {
|
|
|
2240
2199
|
*/
|
|
2241
2200
|
adoptOpenAsks(): Promise<OpenAskAdoption>;
|
|
2242
2201
|
/**
|
|
2243
|
-
*
|
|
2202
|
+
* [ref]:由一条待决行铸一条接管登记并放进活集合(唯一铸点;读法见 {@link AdoptedRegistrationPart})。事实全部取自行与行上的卡:属主 / 会话(adhoc 替身
|
|
2244
2203
|
* = taskId 时不投,与按问读口的行投影同读)/ 子代出身(卡 `fromSubagent` ⇒ 行 `sourceTaskId`)/ 窗死线 / 铸造时刻取行;工具名、要人位、治理位、类集取卡;
|
|
2245
2204
|
* 授予绑定卡上没有 ⇒ `unreadable`(于是站着的答案判据答 `none`:`rememberRefused`,`allow_session` 只放行这一次 —— 既有律);规则素材不在 ⇒ `persistRule`
|
|
2246
2205
|
* 答 `rule_lane_unavailable`(晚答腿同一个词)。卡面的 `rememberRefused` 与条目同一只判据(活登记那一处的同一条纪律)。
|
|
2247
2206
|
*/
|
|
2248
2207
|
private registerAdopted;
|
|
2249
|
-
/**
|
|
2208
|
+
/** [ref]:放掉这只 askId 的全部接管登记(不碰行、不发消卡帧)。两个读者:悬挂轮询读到行没了(接管登记没有窗,没有行就没有活着的依据);本副本来了这只问的活登记(它让位)。活登记不动。 */
|
|
2250
2209
|
private releaseAdoptedRegistrations;
|
|
2251
2210
|
/**
|
|
2252
|
-
*
|
|
2211
|
+
* [ref]:问账里**这只问的行没了**(行被删)⇒ 放掉它的接管登记;放完本副本若已没有这只问的任何登记,经 preamble 订了它的消卡订阅也一并撤掉
|
|
2253
2212
|
* (不发帧 —— 问不是被谁答掉的,编一帧消卡就是撒谎;壳的结构补偿仍是下一次 preamble 的全量对账基准)。还有活登记 ⇒ 订阅留给它的结算。
|
|
2254
2213
|
*/
|
|
2255
2214
|
private forgetAdoptedAsk;
|
|
2256
|
-
/**
|
|
2215
|
+
/** [ref]:接管登记的属主跟行走 —— 悬挂轮询每读到一次仍待决的行就对齐一次(`/v1/adoption` 改写 `approval_ask.owner` 之后,列表面在一拍之内跟上;应答口与读口另读行当下的 owner)。 */
|
|
2257
2216
|
private followAdoptedOwner;
|
|
2258
2217
|
/** 这只 askId 在本副本上有几条**有引擎腿在等**的登记(接管登记不算)—— 轮询腿的「被唤醒数」读它。 */
|
|
2259
2218
|
private waitingRegistrationCount;
|
|
2260
2219
|
listLivePending(scope: string | undefined): LivePendingRow[];
|
|
2261
2220
|
/**
|
|
2262
|
-
*
|
|
2221
|
+
* [ref]:某只委派子代此刻有没有**待决**的活卡 —— fleet 对账腿「子代活性由属主说了算」的属主②读口(另一只是
|
|
2263
2222
|
* bg registry 账)。子代卡在一张没人答的卡上时当然不出帧,只看「静默」就会把它当孤儿扫下面板(报案的真形)。
|
|
2264
2223
|
* 只答是非、不交出 Map(与 `isRunLiveOnThisReplica` 同姿势);纯读,零锁零结算语义。
|
|
2265
2224
|
* 键 = ask 发起者域(`originTaskId` = core `AskRequest.sourceTaskId` = 子代自己的 core session id),**不是**
|
|
@@ -2344,7 +2303,7 @@ export declare class ToolApprovalCoordinator {
|
|
|
2344
2303
|
/** [ref]:当前挂着的**悬挂**条目数(零投递集合铸的那一类)——运维/判据读它证「悬挂队列有多长」。 */
|
|
2345
2304
|
suspendedCount(): number;
|
|
2346
2305
|
sessionAllowedCount(): number;
|
|
2347
|
-
/**
|
|
2306
|
+
/** [ref]:当前在场的 preamble 消卡订阅(按 askId)数 —— 判据据它证「订阅有界于本副本的登记,没有登记、没有行的问不留订阅」。 */
|
|
2348
2307
|
presentedCardWatcherCount(): number;
|
|
2349
2308
|
/** [ref]:当前在场的受理回执数(有界性的可观测面 —— 判据据它证「帽是硬的、过期会被清」)。 */
|
|
2350
2309
|
parkRedemptionCount(): number;
|