@sema-agent/server 7.134.0 → 7.135.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 +134 -0
- package/USAGE.md +98 -30
- 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 +62 -150
- package/dist/approval-card.js +33 -51
- package/dist/approval-content-kind.d.ts +22 -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 +1 -1
- 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/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/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 +28 -24
- package/dist/boot/runner-deps.d.ts +11 -11
- package/dist/boot/runner-deps.js +3 -2
- 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-05-execution-env.js +4 -4
- package/dist/boot/stage-06-runners.js +0 -2
- package/dist/boot/stores.js +2 -1
- package/dist/boot/web-admin.d.ts +17 -17
- package/dist/boot/web-admin.js +5 -10
- package/dist/boot/workflow-orchestration.js +2 -9
- package/dist/brain.d.ts +11 -11
- package/dist/budget.d.ts +4 -4
- 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 +10 -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 +26 -25
- package/dist/capability-facts.js +14 -16
- package/dist/center-config-tier.d.ts +1 -1
- package/dist/center-credential.d.ts +4 -4
- 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-invariants.d.ts +4 -4
- package/dist/config-invariants.js +3 -2
- package/dist/config-lkg.d.ts +1 -1
- package/dist/config-provider.d.ts +13 -13
- package/dist/config-provider.js +2 -1
- package/dist/config-types.d.ts +83 -83
- package/dist/config.d.ts +26 -24
- package/dist/config.js +12 -10
- 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/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 +23 -11
- package/dist/file-history-disclosure.js +7 -12
- 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 +13 -13
- package/dist/fleet-lease.d.ts +16 -16
- package/dist/governance-http-status.d.ts +2 -2
- package/dist/hooks/hook-llm.d.ts +7 -7
- package/dist/hooks/hook-runner.d.ts +57 -30
- package/dist/hooks/hook-runner.js +36 -18
- 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 +39 -13
- package/dist/http/checkpoint-ctx.js +74 -35
- package/dist/http/dispatch.d.ts +3 -3
- 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 +7 -7
- package/dist/http/resume-ctx-read.js +1 -1
- 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 -5
- package/dist/http/routes/approvals-assistant.js +55 -15
- 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 +22 -10
- package/dist/http/routes/session-sync.d.ts +1 -1
- package/dist/http/routes/session-sync.js +73 -44
- package/dist/http/routes/sessions-list.js +1 -1
- package/dist/http/routes/sessions.js +30 -44
- 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 +28 -21
- 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-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/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 +12 -8
- package/dist/observability/fail-open.js +12 -8
- package/dist/observability/metrics.d.ts +3 -3
- 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 +16 -15
- package/dist/parked-decide.js +5 -4
- package/dist/parked-revive-surface.d.ts +7 -7
- package/dist/parked-revive-surface.js +2 -3
- package/dist/peer-directory.d.ts +3 -3
- package/dist/peer-directory.js +1 -1
- 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 +34 -15
- package/dist/plugins/approval-ask-store-sql.js +18 -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/caching-session-store.d.ts +23 -32
- package/dist/plugins/caching-session-store.js +5 -17
- package/dist/plugins/checkpoint-index-columns.d.ts +81 -0
- package/dist/plugins/checkpoint-index-columns.js +62 -0
- package/dist/plugins/checkpoint-store-sql.d.ts +44 -66
- package/dist/plugins/checkpoint-store-sql.js +55 -102
- 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 +9 -7
- package/dist/plugins/file-history-store-sql.js +27 -15
- 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 +3 -4
- 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 +66 -40
- package/dist/plugins/one-time-migrations.js +115 -34
- 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 +8 -8
- 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/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/sql-driver.d.ts +8 -8
- package/dist/plugins/sql-errors.d.ts +1 -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/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 +9 -2
- 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 +19 -4
- 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-key-closure.d.ts +1 -1
- package/dist/request-key-closure.js +1 -1
- 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-governance.d.ts +9 -9
- package/dist/sandbox-pkg-source.d.ts +9 -31
- package/dist/sandbox-pkg-source.js +14 -8
- package/dist/sealed-key.d.ts +3 -3
- 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 +52 -35
- package/dist/session-incarnation.js +23 -8
- 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-sync-kernel.d.ts +4 -4
- package/dist/session-sync.d.ts +49 -6
- package/dist/session-sync.js +52 -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 +3 -1
- package/dist/task-a2a.js +34 -2
- package/dist/task-cwd.d.ts +7 -88
- package/dist/task-cwd.js +2 -15
- package/dist/task-mcp.d.ts +12 -8
- package/dist/task-mcp.js +19 -4
- 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 +143 -197
- package/dist/tool-approval.js +13 -28
- package/dist/tool-rule-names.d.ts +2 -2
- package/dist/trace/core-keyset-guard.d.ts +12 -7
- 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 +41 -63
- 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 +44 -30
- package/dist/trace/redact.js +191 -89
- package/dist/trace/self-minted-wire.d.ts +35 -14
- package/dist/trace/self-minted-wire.js +8 -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.d.ts +52 -0
- package/dist/url-credential.js +49 -0
- package/dist/url-refusal.d.ts +6 -2
- package/dist/url-refusal.js +8 -1
- 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 +5 -3
- package/dist/write-protection.d.ts +2 -2
- package/package.json +4 -3
- package/scripts/drain-check-local.mjs +2 -1
- package/scripts/drain-check.mysql.sql +4 -2
- package/scripts/drain-check.pg.sql +4 -2
- package/skills/loop.md +1 -1
- 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/trace/project.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* old session-join `toolOutput` hook is gone, there's a real source now); `eventId`/`parentToolCallId` (§E2) ride
|
|
13
13
|
* each content event, additive / tolerate-absent.
|
|
14
14
|
*
|
|
15
|
-
* 🔴 **本族 `*EventData` 构造器的入参型不是白名单**(
|
|
15
|
+
* 🔴 **本族 `*EventData` 构造器的入参型不是白名单**([ref] 起,别再照旧读法维护它)。
|
|
16
16
|
* 每只构造器的形参型是**这条投影的本地入参形**,故意比 core 的分支型松:三条腿里有两条(durable 账本 /
|
|
17
17
|
* resume 回放)手里只有磁盘上的 `Record<string, unknown>`,窄值型在那里结构上不成立,所以 `unknown` +
|
|
18
18
|
* 内部逐层窄化是**有意**的,不是欠账;核过的 core 键在场性由投影体自己的条件展开臂决定。
|
|
@@ -125,7 +125,7 @@ export type TraceBlock = {
|
|
|
125
125
|
readonly [member: string]: unknown;
|
|
126
126
|
};
|
|
127
127
|
/**
|
|
128
|
-
* 🔴 **模型自由文本账本行(`text` / `reasoning`)的唯一载荷铸点**(
|
|
128
|
+
* 🔴 **模型自由文本账本行(`text` / `reasoning`)的唯一载荷铸点**([ref] / [ref],7.75.1)。
|
|
129
129
|
*
|
|
130
130
|
* ## 为什么是一只函数,而不是两处各写一句
|
|
131
131
|
* 这两行的载荷此前由**两条腿各自手拼**:`trace/ledger-sink.ts` 的 turn flush 与 `http/server.ts` 的
|
|
@@ -160,11 +160,11 @@ export declare function toolStartEventData(ev: {
|
|
|
160
160
|
parentToolCallId?: string;
|
|
161
161
|
}): Record<string, unknown>;
|
|
162
162
|
/**
|
|
163
|
-
* 🔴 **筛子是一只总函数**(
|
|
163
|
+
* 🔴 **筛子是一只总函数**([ref],codex 对抗复审 r1 [medium] 亲核复现后修)—— 上面纪律②许诺的
|
|
164
164
|
* 「坏形 ⇒ report + withhold,**不抛**」此前是靠**逐条枚举**坏形兑现的,枚举不到的那些照样抛:
|
|
165
165
|
* `projectSettlement` 对 `note` / `who.approver` 先 `redactSecrets` 再截断,而 `redactSecrets` 会在
|
|
166
|
-
* 病态输入上爆回溯栈(`RangeError`:≥2^23 单段那一形已由
|
|
167
|
-
* PEM 栅栏臂的标签交替循环由
|
|
166
|
+
* 病态输入上爆回溯栈(`RangeError`:≥2^23 单段那一形已由 [ref] 的 `atLeast` 铸点闭掉,JSON 秘密字段臂的转义对循环与
|
|
167
|
+
* PEM 栅栏臂的标签交替循环由 [ref] 换成手写扫描器闭掉 —— 已知形全部闭掉,本段写的是「当时为什么要总函数化」),
|
|
168
168
|
* 两条叶各能抛一次。总函数化照留:它兑现的是「坏字节一律 withhold」这条**结构**,不依赖脱敏器今天抛不抛。
|
|
169
169
|
*
|
|
170
170
|
* 抛出去的代价按腿算,而且一条比一条重:写腿落账那处的 `.catch` 看不到**同步**投影期的异常;读腿上它
|
|
@@ -179,7 +179,7 @@ export declare function toolStartEventData(ev: {
|
|
|
179
179
|
*/
|
|
180
180
|
export declare function screenedGate(v: unknown): GateOutcome | undefined;
|
|
181
181
|
/**
|
|
182
|
-
* 🔴 **账本裸回放面的读腿一步**(
|
|
182
|
+
* 🔴 **账本裸回放面的读腿一步**([ref])—— `GET /v1/runs/:id/events`(`http/routes/runs.ts` 的
|
|
183
183
|
* `formatEvent`)对每一行走这一口,把行上的 `GateOutcome` 交给**同一只** {@link screenedGate}。
|
|
184
184
|
*
|
|
185
185
|
* ## 它补的是哪一格
|
|
@@ -197,7 +197,7 @@ export declare function screenedGate(v: unknown): GateOutcome | undefined;
|
|
|
197
197
|
* ## 读腿与写腿现在是**同一只**筛(零双读)
|
|
198
198
|
* 7.72.0–7.73.0 期间读腿多一步「认本服务上一版写下的退役词旧拼法」(`unresolvable` → `ancestor_marked`),
|
|
199
199
|
* 那是一条**长期双读臂**:同一份字节在写腿与读腿上有两种理解,而且没有到期日。7.74.0 把它换成**一次性
|
|
200
|
-
* 迁移**(启动期把存量字节原地改名;窗关后已删码)。
|
|
200
|
+
* 迁移**(启动期把存量字节原地改名;窗关后已删码)。[ref](core 7.51.0 [ref])起这只筛是 core `screenGateOutcome(g)` 缺省的**档案读法**
|
|
201
201
|
* (每个闭集 = 今日成员 ∪ core `RETIRED_MEMBERS`),读腿与写腿同走它:残留旧拼法的字节(local 车道引擎 File 店里不可改写的已决行)
|
|
202
202
|
* **整条读回、原词上帧、计数 0**(档案词是当年合法铸下的事实,不是缺陷,不改写成今天的词);整条 withhold + 计数的只有真缺陷
|
|
203
203
|
* (集外且不在退役表的词、破不变量、形坏)。读法只有一种。
|
|
@@ -211,12 +211,12 @@ export declare function screenedGate(v: unknown): GateOutcome | undefined;
|
|
|
211
211
|
export declare function screenedStoredEventData(type: string, data: unknown): unknown;
|
|
212
212
|
/** `text_end` 段末帧的**唯一**铸点(三腿共用:top stream / 转发子代腿 / 子代 tail 面)。content = 段权威全文 ⇒ 与
|
|
213
213
|
* durable 面(`result` / 账本 `text` 行)同一只 {@link redactModelText}(认出才改写、抛则占位、不设上限)。
|
|
214
|
-
* 此前三处各自逐字透传 —— 同一份文本毫秒后在 `done.result.result` 上已脱,live 面却在凭据生成瞬间明文(
|
|
215
|
-
* `text_delta` 仍逐字:跨 chunk 的凭据无法就地判;clay [ref] ②(2026-09-18)裁定**维持逐字成文**(
|
|
214
|
+
* 此前三处各自逐字透传 —— 同一份文本毫秒后在 `done.result.result` 上已脱,live 面却在凭据生成瞬间明文([ref])。
|
|
215
|
+
* `text_delta` 仍逐字:跨 chunk 的凭据无法就地判;clay [ref] ②(2026-09-18)裁定**维持逐字成文**([ref] U-3 关票),
|
|
216
216
|
* 权威段 `text_end.content` 已脱敏、消费端段末整段替换即得脱敏读法。
|
|
217
217
|
* 坏形(content 非串/空串)⇒ null(丢帧,不铸「权威空段」:core 契约明言空段不发本帧,消费端收到空段会清掉已攒 delta)。
|
|
218
218
|
* 身份**四键**随行(live 现状带全四键,消费端可能已依赖);值经 {@link identityKey} —— 非空 string 才上 wire
|
|
219
|
-
* (
|
|
219
|
+
* ([ref] 起不再逐字透传:坏形身份键会在 live 写口上铸出假游标)。 */
|
|
220
220
|
export declare function textEndEventData(ev: Record<string, unknown>): SegmentEndFields | null;
|
|
221
221
|
/**
|
|
222
222
|
* live 面的**身份四键**(core `TaskEventIdentity` 全集)—— 一个属主,两处共用({@link segmentEndFields}
|
|
@@ -224,7 +224,7 @@ export declare function textEndEventData(ev: Record<string, unknown>): SegmentEn
|
|
|
224
224
|
* **只剩键集**:那边两键(durable builder 对另两键的既定排除),这边四键(live 现状,消费端已依赖);
|
|
225
225
|
* **值判据是同一条** —— 两只都问 {@link identityKey}(非空 `string` 才上 wire,绝不强转)。
|
|
226
226
|
*
|
|
227
|
-
* 🔴 **型必须说得出口**(
|
|
227
|
+
* 🔴 **型必须说得出口**([ref]):`eventId` 是 live 腿 SSE `id:` 行的**唯一**来源,而 `id:` 行是续流游标
|
|
228
228
|
* ——一个连值的型都说不出的键不许铸成游标。非串/空串 ⇒ 键缺席(与「无锚不发 `id:` 行」同一条纪律:
|
|
229
229
|
* 不可锚的位置绝不伪装成可锚)。转发子代腿的帧是 UNTRUSTED RAW(§E1),这一道同时是它的形判门。
|
|
230
230
|
*
|
|
@@ -309,12 +309,12 @@ export declare function toolEndEventData(ev: {
|
|
|
309
309
|
* 真源是 `tool_end`(core 明写 `elapsedTimeSeconds` **不等于** `tool_end` 的 duration)。
|
|
310
310
|
*
|
|
311
311
|
* ## 信任划线
|
|
312
|
-
* · `toolCallId` / `toolName` —— 调用 id(🔴
|
|
312
|
+
* · `toolCallId` / `toolName` —— 调用 id(🔴 [ref] 订正:出身是**服务商**在 tool_use / tool_calls 里给的,引擎缺席时自铸兜底、越界时折叠 ——
|
|
313
313
|
* 此前写「引擎铸」不实)与名册里的工具名(与 `tool_start` 逐字同源)⇒ verbatim。调用 id 这一族的形状在**全部面的共同入口**一次施加 ——
|
|
314
|
-
* core 7.36.0(
|
|
315
|
-
* 恒是在形的引擎 id(残余两条
|
|
314
|
+
* core 7.36.0([ref])brain 建调用那一行的准入(在形原样 / 越界单射折叠,原字节只在转录 `ToolCall.wireId`),一方 brain 新铸的调用在逐帧面上
|
|
315
|
+
* 恒是在形的引擎 id(残余两条 [ref]:≤7.106.0 写下的存量行 resume 出来的帧是服务商原串逐字;宿主 Brain 不准入 KL-1207-a —— 详见
|
|
316
316
|
* run-terminal `admitProviderEcho` 顶注);
|
|
317
|
-
* 本仓不设第二道闸(见 run-terminal `admitProviderEcho` 顶注;
|
|
317
|
+
* 本仓不设第二道闸(见 run-terminal `admitProviderEcho` 顶注;[ref] 关)。
|
|
318
318
|
* · `elapsedTimeSeconds` —— 引擎铸的整秒,单调、一 call 一个原点 ⇒ 有限数才铸键。
|
|
319
319
|
* · `output` —— 🔴 **UNTRUSTED RAW**,core 逐字「exactly as `tool_end.output`: process output that may
|
|
320
320
|
* carry secrets, paths or PII; core bounds only its SIZE, and a consumer MUST redact before persisting
|
|
@@ -490,7 +490,7 @@ export declare function taskNotificationEventData(ev: {
|
|
|
490
490
|
* `kind` 过闭集(`trace/sema-provenance.ts` 单点,park 半场同一判据);`agentType` 本 mount 恒缺席(工具无
|
|
491
491
|
* agent-type 席),在场即透传(fleet spawn 帧按 taskId 可 join 时上游给)。 */
|
|
492
492
|
_sema_provenance?: SemaProvenanceInput;
|
|
493
|
-
/** core 7.30.0 [ref] S1 /
|
|
493
|
+
/** core 7.30.0 [ref] S1 / [ref] / [ref]([ref]):委派终态帧三枚 facet + 重供两键 —— 判据单点在
|
|
494
494
|
* `trace/task-notification-facets.ts`(与 park 半场同一只;入参按 `unknown` 收、判过形才成 typed)。 */
|
|
495
495
|
spawnName?: string;
|
|
496
496
|
handback?: string;
|
|
@@ -594,7 +594,7 @@ export declare function compactionOutcomeEventData(ev: {
|
|
|
594
594
|
reason?: SafeText;
|
|
595
595
|
}>;
|
|
596
596
|
/**
|
|
597
|
-
* `compaction_started`(
|
|
597
|
+
* `compaction_started`([ref],core 7.53.0 [ref])—— 一次压缩 pass 在提交点(触发闸过了、切点在、`preCompact` 没拦)宣告开始,先于摘要调用:
|
|
598
598
|
* 一次在供应方重试表里等很久的摘要(core 实测 503 × 11、173 s)从此在流上不是静默的。**原样投影**:`{ trigger, pass, startedAt }` + 身份两键,
|
|
599
599
|
* 不自铸相位、不铸 run / session id(那是流的,不是帧的键)。三键都是引擎铸的闭形值:`trigger` 闭集词(`auto` / `manual` / `forced`,与结束帧同一张词表)、
|
|
600
600
|
* `pass` 不透明 id(结束这次 pass 的那一帧 —— `compacted` 或 `compaction_outcome` —— 带同一个 `pass`)、`startedAt` 引擎时钟 epoch 毫秒 ⇒ 不脱敏、逐字;
|
|
@@ -694,7 +694,7 @@ export declare function workspaceChangedEventData(ev: {
|
|
|
694
694
|
* 两词:core 只看合成后的 caps deny 位,本仓分得出这个 false 是 center 下发的还是本地 env 写的)。
|
|
695
695
|
* ⚠️ **`settings_denied` 不折进 `denied`,它折进 `no_intent`**(codex 车BO r1 [medium] 验真后纠):
|
|
696
696
|
* settings 层的 kill-switch 折的是**模式**(`effectivePermissionMode`:auto → default),于是 resolve-spec
|
|
697
|
-
* 阶段④ 写的 `TaskSpec.permissionMode` 是 `"default"`(
|
|
697
|
+
* 阶段④ 写的 `TaskSpec.permissionMode` 是 `"default"`([ref] 前是「不写意图座 `autoModeRequested`」)⇒ core 的武装谓词第一项就落空;
|
|
698
698
|
* 而本地 env 腿折的是 **caps**(`applyLocalAutoModeDeny`),模式照写 `"auto"` ⇒ core 才报 `denied`(并按 `operator_deny` 折 default、发
|
|
699
699
|
* `config.permission_mode_unavailable`)。两条腿在 manifest 上
|
|
700
700
|
* **分不开**,要分辨得读 `/v1/capabilities`。对照表与保鲜钉在 `test/wiring-manifest-projection.test.ts`
|
|
@@ -706,7 +706,7 @@ export declare function workspaceChangedEventData(ev: {
|
|
|
706
706
|
* 抛)。账本回放/第三方 producer 送来的矛盾对若原样上 wire,按 `armed` 读与按 `reason` 读的消费端会得到
|
|
707
707
|
* **相反**的答案 —— 这条轴上(@cli `sema doctor permissions` 正读它)两个答案比没答案更坏 ⇒ 整段不铸。
|
|
708
708
|
* 这不是改语义:它与本函数「畸形值一律按缺席」是同一条规则,而这条不变量是 core 自己写的段内契约。
|
|
709
|
-
* · `mcp[]`(`WiringManifestMcpEntry[]`;core 7.5.0 [ref],
|
|
709
|
+
* · `mcp[]`(`WiringManifestMcpEntry[]`;core 7.5.0 [ref],[ref] 提货件)—— **裁:租户可见,逐条目挑键,
|
|
710
710
|
* `error` 一格不投**。
|
|
711
711
|
* ① **同主体同受众**:它是 per-leg 的读面「我这条腿申报的每台 MCP 服务器,连上了没有、挂了是哪一类、
|
|
712
712
|
* 挂上来几个工具」。同一主体(调用方自己的 run)、同一条轴上,本仓早已把**更粗**的同类事实投给
|
|
@@ -730,7 +730,7 @@ export declare function workspaceChangedEventData(ev: {
|
|
|
730
730
|
* (「connection state is a fact about this leg's attempt, not about the assembly」)。
|
|
731
731
|
* ⚠️ 空数组 ≠ 缺席:core 顶注逐字「an empty array is "this leg declared no servers", absence is an older
|
|
732
732
|
* mint or an external derivation」⇒ 空数组照铸,别折成缺席。
|
|
733
|
-
* 🔴 **⑤ `liveness`(core 7.24.3 [ref] /
|
|
733
|
+
* 🔴 **⑤ `liveness`(core 7.24.3 [ref] / [ref] 提货件)—— 裁:租户可见,整条记录投,逐键挑**。
|
|
734
734
|
* `{state, observedAt, errorCode?}` = 引擎**最后一次观察**到的「这台还够得着吗」。受众判据与同行
|
|
735
735
|
* 其余键**同一条**(同主体同受众、引擎派生的闭形值、非 governance 侧信道 —— 它同样不进
|
|
736
736
|
* `configFingerprint`),所以这一格不需要新的裁定,只需要新的**读法**。
|
|
@@ -747,17 +747,17 @@ export declare function workspaceChangedEventData(ev: {
|
|
|
747
747
|
* 而经过本投影后**判形没过也落缺席**(词出闭集 / `observedAt` 非有限数 / 整只不是对象)。
|
|
748
748
|
* ⇒ 对消费端,缺席只能读成「**没有可用的观察记录**」,**不许**据它反推这条腿拨没拨过号。
|
|
749
749
|
* · `writeProtection`(`{ targetView: "spelling-only" | "target" }`;core 7.20.1 [ref] / clay [ref] 丙,
|
|
750
|
-
*
|
|
750
|
+
* [ref] 提货件)—— **裁:租户可见,逐字透传**。它是 per-leg 的读面:「这条腿的写保护判官,拿到的是
|
|
751
751
|
* 哪一种目标读法」——`"target"` = 判官握着执行环境,拼法没命中时会在**解析后的真目标**上再判一次;
|
|
752
752
|
* `"spelling-only"` = 没有环境,拼法就是全部判决,只经别名/软链够到受保护行的写被清掉。
|
|
753
753
|
* ① **同主体同受众**:同一条腿、调用方自己的 run。而且这件事对该调用方**本就行为可观测** —— 在无手
|
|
754
|
-
* 车道上用一只声明了 `pathTarget` 写面的 MCP 工具对别名写一次就看得见(
|
|
754
|
+
* 车道上用一只声明了 `pathTarget` 写面的 MCP 工具对别名写一次就看得见([ref] 亲核可达)。剥掉它
|
|
755
755
|
* 并不收走任何能力,只收走那句诚实的标签,等于把 [ref] 刚刚消灭的**静默**在租户半场原样重建。
|
|
756
756
|
* ② **值的形**:core 的**两词闭集**,判据走 core 导出的 `WRITE_PROTECTION_TARGET_VIEWS` 常量(不抄
|
|
757
757
|
* 词表 —— 与 `delivered` 的 `MCP_DELIVERY_VERDICTS` 同一条);引擎派生、非用户内容 ⇒ 不脱敏、逐字。
|
|
758
758
|
* ③ 🔴 **最小披露仍然成立**:本键只答「判官有哪一种读法」,**从不**答「判官握着哪些路径」——
|
|
759
759
|
* 名表逐行内容(`rows` / `source` / `droppedDefaultRows`)照旧只在 operator 面
|
|
760
|
-
* (`GET /v1/diagnostics/wiring` 的 `writeProtection` 键,
|
|
760
|
+
* (`GET /v1/diagnostics/wiring` 的 `writeProtection` 键,[ref]),租户面照旧只有
|
|
761
761
|
* `/v1/capabilities.writeProtection.{armed, rows, replaced}` 三项计数。两者语义不同、同名不同物:
|
|
762
762
|
* 诊断面那一格是**本 server 装配的名表**(boot 产物),本段是**core 判官的自报读法**(per-leg)。
|
|
763
763
|
* ④ **不是 governance 侧信道**:它是「这条腿接没接手」的函数,与 lockedConfig/compliance/
|
|
@@ -766,7 +766,7 @@ export declare function workspaceChangedEventData(ev: {
|
|
|
766
766
|
* ⚠️ **缺席 = 第三态**:core 的段是 **present-iff 编译出了判官**,`writeProtectedPaths: []` 的部署
|
|
767
767
|
* 整段缺席。缺席**绝不**折成 `"spelling-only"`(那是「判官在、但只认拼法」,完全不同的一件事),
|
|
768
768
|
* 也不铸 `writeProtection: {}`。词出闭集同样**不**折进缺席,走 `dropProjectedFace` 留痕(见那里)。
|
|
769
|
-
* · `autoConsolidation`(`{ onRecommendation: true }`;core 7.21.0 [ref],
|
|
769
|
+
* · `autoConsolidation`(`{ onRecommendation: true }`;core 7.21.0 [ref],[ref] 提货件)—— **裁:operator
|
|
770
770
|
* 受众,租户面剥**,所以它**不在本构造器里**,在 {@link wiringManifestOperatorEventData}。四条判据逐字在
|
|
771
771
|
* `core-keyset-guard.ts` ⑥b 的 `WiringSectionExcluded` 那一行(与 `governance` / `configFingerprint`
|
|
772
772
|
* 同表同处,免得同一条裁定有两个写者)。一句话:它是**出口事实**(武装 = 每个建议任务之后整库记忆自动
|
|
@@ -774,15 +774,15 @@ export declare function workspaceChangedEventData(ev: {
|
|
|
774
774
|
* 并且它对调用方**本就不可观测**(整理跑在终端 harvest 之后、fire-and-forget、宿主侧),剥掉它不收走
|
|
775
775
|
* 任何能力 —— 这正是 `writeProtection` 判据①**不成立**的那一格。
|
|
776
776
|
* ⚠️ **缺席 = 未武装**(core present-iff),不折 `false`、不读「未知」。
|
|
777
|
-
* 🔴 **
|
|
777
|
+
* 🔴 **[ref](7.85.0)起本条要连着 `core-keyset-guard.ts` ⑥b 判据②的补句读**:同一个事实在会话面
|
|
778
778
|
* (`GET /v1/sessions/:id/memory-status` 的 `autoConsolidationArmed`)是可读的,而这一段仍然剥 ——
|
|
779
779
|
* 「一个事实一张脸」,两处同源、唯一读点。裁定正文在那一处,这里不抄第二份。
|
|
780
|
-
* · `readDeny`(`{ builtinTiers: readonly string[] }`;core 7.22.0 [ref],
|
|
780
|
+
* · `readDeny`(`{ builtinTiers: readonly string[] }`;core 7.22.0 [ref],[ref] 提货件)—— **裁:operator
|
|
781
781
|
* 受众,租户面剥**,所以它**不在本构造器里**,在 {@link wiringManifestOperatorEventData}。四条判据逐字在
|
|
782
782
|
* `core-keyset-guard.ts` ⑥b 的 `WiringSectionExcluded` 那一行(与 `governance` / `configFingerprint` /
|
|
783
783
|
* `autoConsolidation` 同表同处,免得同一条裁定有两个写者)。一句话:它答的是**这台部署选了哪几档内置
|
|
784
784
|
* 敏感路径 deny 表**——一条部署治理面的**选择**,与 `writeProtection` 那种「这条腿手里有什么设施」的
|
|
785
|
-
* 自述不同族;而且它是本仓 env `READ_DENY_BUILTIN_TIERS` 的生效读出口,名表面归 operator(
|
|
785
|
+
* 自述不同族;而且它是本仓 env `READ_DENY_BUILTIN_TIERS` 的生效读出口,名表面归 operator([ref])。
|
|
786
786
|
* ⚠️ **缺席 = 没有内置行判这条腿**(core present-iff:实质激活至少一行才铸),**不是**「没有读被 deny
|
|
787
787
|
* 判」—— 部署自己的 `readDenyPatterns` 刻意不上报(模式文本是部署材料,不是枚举)。**空数组永不发出**
|
|
788
788
|
* (「关」与「开到什么都不判」是同一个事实)⇒ 收到空数组按**坏 producer** 处置并留痕,见那里。
|
|
@@ -793,10 +793,10 @@ export declare function workspaceChangedEventData(ev: {
|
|
|
793
793
|
* `core-keyset-guard.ts` ⑥b —— 那才是「core 加了段/加了成员」的可靠红点,两道并用缺一不可。
|
|
794
794
|
*/
|
|
795
795
|
/**
|
|
796
|
-
* 🔴 **`wiring_manifest.mcp[]` 一行上 wire 的形 —— 全仓唯一属主**(
|
|
796
|
+
* 🔴 **`wiring_manifest.mcp[]` 一行上 wire 的形 —— 全仓唯一属主**([ref] 从 {@link wiringManifestEventData}
|
|
797
797
|
* 的内联 IIFE **逐字**提出来,零行为变化;既有钉在 `test/wiring-manifest-projection.test.ts`)。
|
|
798
798
|
*
|
|
799
|
-
* 为什么必须是一只具名函数:
|
|
799
|
+
* 为什么必须是一只具名函数:[ref] 又开了两条读面(`GET /v1/capabilities/mcp` /
|
|
800
800
|
* `POST /v1/capabilities/mcp/probe`),它们发的是**同一种**行。留在内联里,那两条面只能各自再挑一遍键
|
|
801
801
|
* —— 而契约 §G.7 第 3 条(`error` 远端原话**有意不投**,理由是「再脱一遍就是同一语义面的第二个写者」)
|
|
802
802
|
* 这种**裁定**一旦有两个实现,下一个人只会改到其中一个。
|
|
@@ -822,7 +822,7 @@ export declare function projectWiringManifestMcpRows(mcpIn: unknown): Array<Reco
|
|
|
822
822
|
* `tool_end` 之前),`delta.fromDigest` = 消费端手上那份名册的 digest。7.66.0 写下的「前瞻接线」披露随本版
|
|
823
823
|
* 退役:本臂现在会真的触发,消费端可以依赖它了。
|
|
824
824
|
*
|
|
825
|
-
* 🔴 **三腿共用本构造器(
|
|
825
|
+
* 🔴 **三腿共用本构造器([ref],7.71.0)**:live 腿(`routes/tasks.ts`)+ 两条 durable 腿
|
|
826
826
|
* (`trace/ledger-sink.ts` 的 `onEvent` / `http/server.ts` 的 resume switch)。返回 `undefined` 的那一格在
|
|
827
827
|
* 三腿上是同一件事 ——**整帧不发 / 整帧不落账**,绝不半张名册上 wire 或落库。落账的正当性(旧裁定
|
|
828
828
|
* 「不落账」为何在 7.71.0 撤销)逐字记在 `core-keyset-guard.ts` ⑪ 段。
|
|
@@ -833,12 +833,14 @@ export declare function toolRosterDeltaEventData(ev: {
|
|
|
833
833
|
parentToolCallId?: unknown;
|
|
834
834
|
}): Record<string, unknown> | undefined;
|
|
835
835
|
/**
|
|
836
|
-
*
|
|
837
|
-
*
|
|
838
|
-
* 选择规则),所以不从 `ev` 读:每条投帧的腿把**自己那只** `InstructionSelectionLeg.segment()` 递进来。必传而不是可选 ——
|
|
839
|
-
* 漏递的腿当场 tsc 红,而不是静默投出一个「缺席」(缺席在 wire 上是一句话:「这条腿没有关于指令文件的陈述」)。
|
|
840
|
-
* `undefined` ⇒ 段缺席;`{ selected: [] }` ⇒ 显式空(走了链、没选中)。登记:`wire-projection-faces.ts` 租户行 `minted`。
|
|
836
|
+
* `wiring_manifest.sessionRules` 段的**处置表**(core 7.55.0 [ref];[ref] 起新面写表 —— 门 `core-keyset-guard.ts` ⑥b 读 `TableCoreKeys`,core 给段加成员 ⇒ tsc 红,
|
|
837
|
+
* 先判受众再写进表)。唯一一位 `childrenReadLive` 是布尔才出门(读法拒 ⇒ 表的丢弃口计一次)。裁定 = 两个出口都投(理由在 ⑥b 段注)。
|
|
841
838
|
*/
|
|
839
|
+
export declare const WIRING_SESSION_RULES_DISPOSITIONS: {
|
|
840
|
+
readonly childrenReadLive: {
|
|
841
|
+
readonly forward: (raw: unknown) => raw is boolean;
|
|
842
|
+
};
|
|
843
|
+
};
|
|
842
844
|
export declare function wiringManifestEventData(ev: {
|
|
843
845
|
manifest?: unknown;
|
|
844
846
|
eventId?: unknown;
|
|
@@ -865,7 +867,7 @@ export declare function wiringManifestEventData(ev: {
|
|
|
865
867
|
* governance **逐键挑**(禁 `{...governance}`):core 往这个段里加第五键时必须由人显式处置,而不是顺着
|
|
866
868
|
* spread 裸上线 —— 这个段的每一键都是部署治理面,新键的默认待遇必须是「不发」。
|
|
867
869
|
*
|
|
868
|
-
* `autoConsolidation`(core 7.21.0 [ref],
|
|
870
|
+
* `autoConsolidation`(core 7.21.0 [ref],[ref])与 governance 同规:租户面剥、本面发(裁定四条判据在
|
|
869
871
|
* `core-keyset-guard.ts` ⑥b `WiringSectionExcluded`)。**present-iff 武装**:
|
|
870
872
|
* · 整段缺席 ⇒ **未武装**,不铸键、不计数(正面事实,不是「未知」,更不是 `{onRecommendation:false}`);
|
|
871
873
|
* · 在场且 `onRecommendation === true` ⇒ 逐字铸出(core 的在场形只有这一个,构造期门已拒掉「武装但跑不起来」);
|
|
@@ -881,7 +883,7 @@ export declare function wiringManifestOperatorEventData(ev: {
|
|
|
881
883
|
parentToolCallId?: unknown;
|
|
882
884
|
}, instructions: InstructionsSegment | undefined): Record<string, unknown>;
|
|
883
885
|
/**
|
|
884
|
-
* `wiring_manifest` 的**唯一分叉点**(
|
|
886
|
+
* `wiring_manifest` 的**唯一分叉点**([ref])—— 两条知道调用方身份的 live 消费腿共用它:
|
|
885
887
|
* `/v1/tasks/stream` 的 SSE 帧,与 `POST /v1/tasks`(非流式)200 体里的 `wiringManifest` 起手回执。
|
|
886
888
|
*
|
|
887
889
|
* 🔴 **为什么是一只函数,而不是两处 `cond ? operator : tenant`**:那个三元判的是「这份产物给谁看」——
|
|
@@ -997,7 +999,7 @@ export declare function compactedEventData(ev: {
|
|
|
997
999
|
* 的数、post 恒是结构和 + 固定提示词开销,两者的差混坐标,实测在普通 run 上是负数)。本仓的处置因此
|
|
998
1000
|
* 是**三条都逐字透传、一条都不合成**:谁要画上下文表就读 `freedTokens`,读不到就渲染 unknown。 */
|
|
999
1001
|
freedTokens?: number;
|
|
1000
|
-
/** core 7.30.0
|
|
1002
|
+
/** core 7.30.0 [ref]([ref]):这一次压缩**摘要掉**了几条之前已交给模型的跨会话消息(在场 iff ≥1)。 */
|
|
1001
1003
|
summarizedCrossSessionMessages?: number;
|
|
1002
1004
|
durationMs?: number;
|
|
1003
1005
|
phaseDurations?: {
|
|
@@ -1006,7 +1008,7 @@ export declare function compactedEventData(ev: {
|
|
|
1006
1008
|
persistMs?: number;
|
|
1007
1009
|
ptlRetries?: number;
|
|
1008
1010
|
};
|
|
1009
|
-
/**
|
|
1011
|
+
/** [ref](core 7.53.0 [ref]):这次落地的压缩 pass 的 id —— 与它的 `compaction_started` 帧同一个值(引擎在每次落地上都设;型上可选)。逐字。 */
|
|
1010
1012
|
pass?: string;
|
|
1011
1013
|
}): FrameData<{
|
|
1012
1014
|
attachedFiles?: Array<{
|
|
@@ -1027,7 +1029,7 @@ export interface TraceTurn {
|
|
|
1027
1029
|
* cache-MISS 分量(命名取自 core `uncachedInputTokensOf`),只在能确认自己踩在新契约帧上时才发
|
|
1028
1030
|
* (见 {@link toContractTokens})。
|
|
1029
1031
|
*
|
|
1030
|
-
* 🔴 **
|
|
1032
|
+
* 🔴 **[ref]⑥:五个子键**全部按同族 OMIT 契约走 —— 引擎那一侧报了才铸,没报就**缺席**,恒不折 `0`。
|
|
1031
1033
|
* `in`/`out` 此前是必填座、缺一键时写 `?? 0`:读端拿到的 `in:0` 与「这一轮真的零输入」逐字节同形,
|
|
1032
1034
|
* 于是一次 usage 半缺(某些 provider 只回 output 侧)在面板上显示成一个可核对的真数字。
|
|
1033
1035
|
* 0 是一个数,未知不是 —— 两者同形正是本仓 `boundCallId`/`gateKind`/`approvalCard` 一族一直在防的事。
|
|
@@ -1077,10 +1079,10 @@ export declare function contextUsageEventData(ev: {
|
|
|
1077
1079
|
* (`ledger-sink.ts`)、resume 腿(`resume-legs.ts`)。live 臂此前是一份**手抄**的键集,于是 core 7.29.0 加的
|
|
1078
1080
|
* `responseModel` 在 durable 面由这里补上以后,live 面仍会被那份手抄静默剥掉 —— 同一帧两条腿两套键集。
|
|
1079
1081
|
*
|
|
1080
|
-
* `responseModel`(core 7.29.0
|
|
1082
|
+
* `responseModel`(core 7.29.0 [ref]):**供应商自己**报的、回答这一 turn 的模型名,**只在**它 ≠ 请求所带 id
|
|
1081
1083
|
* 时在场。缺席 = 「报了同名」或「没报」,**一个读法**(请求 id 读 `TaskResult.model`)。值是供应商铸的名字
|
|
1082
|
-
* (与 `apiFailure.requestId` 同类:不是模型写的自由文本)⇒ 🔴 **
|
|
1083
|
-
* ({@link admitProviderEcho}:长度 1–128 的可见 ASCII 原样,越界 ⇒ 不铸键 + 计数,与 core
|
|
1084
|
+
* (与 `apiFailure.requestId` 同类:不是模型写的自由文本)⇒ 🔴 **[ref] 起过 provider 回声的形状闸**
|
|
1085
|
+
* ({@link admitProviderEcho}:长度 1–128 的可见 ASCII 原样,越界 ⇒ 不铸键 + 计数,与 core [ref] 源头闸同一条;不过脱敏器),
|
|
1084
1086
|
* 与结果面的孪生 `TaskResult.responseModel` 同一只闸 —— 同一个名字在两张脸上不许两种待遇。非串 / 空串同样不铸键(空串在
|
|
1085
1087
|
* 那条谓词的长度下界之外;core 的读律 `providerReportedModel` 对空串也答「没报」)。
|
|
1086
1088
|
*/
|
|
@@ -1118,7 +1120,7 @@ export declare function turnEndEventData(ev: {
|
|
|
1118
1120
|
* `in` 落回旧值,读端零伤)。`uncachedIn` 只在**能确认自己踩在新契约帧上**(`totalInputTokens` 在场)时
|
|
1119
1121
|
* 才发——旧帧的 `inputTokens` 是族依赖的旧语义,标成「uncachedIn(cache-MISS)」会是谎言。
|
|
1120
1122
|
*
|
|
1121
|
-
* 🔴
|
|
1123
|
+
* 🔴 [ref]⑥:**一条规则管五个子键** —— 源侧在场就铸、缺席就不铸,没有 `?? 0`。此前 `in`/`out` 两座
|
|
1122
1124
|
* 各带一个默认 0,于是 usage 半缺(provider 只回 output 侧)被投影成 `in:0` = 一个看起来可核对的真
|
|
1123
1125
|
* 数字;`uncachedIn`/`cacheRead`/`cacheWrite` 三键从第一天起就是缺席制,`in`/`out` 只是漏进了默认值。
|
|
1124
1126
|
* 早退分支语义不变:输入两键(择一)与 `outputTokens` 全缺 ⇒ 整只 `tokens` 缺席(不铸空对象)。
|
|
@@ -1126,7 +1128,7 @@ export declare function turnEndEventData(ev: {
|
|
|
1126
1128
|
* 🔴 **7.74.0 / core 7.17.0([ref]):`usageMissing` 是本投影的输入,不只是事件面的一枚标。**引擎自该版起
|
|
1127
1129
|
* 在「这一轮 provider 没回 usage 帧」时也**恒发** `turn_end.usage` —— 内容是六个 0 的占位对象,旁边挂
|
|
1128
1130
|
* `usageMissing: true`。只看 usage 会把「未测量」投成一只全 0 对象,与「真的零用量」在
|
|
1129
|
-
* `GET /v1/tasks/:id/turns` 与 trace SSE 的 `turn` 事件上逐字节同形 —— 正是
|
|
1131
|
+
* `GET /v1/tasks/:id/turns` 与 trace SSE 的 `turn` 事件上逐字节同形 —— 正是 [ref]⑥「0 是一个数,未知不是」
|
|
1130
1132
|
* 要消灭的那一形。契约里「未知 = `tokens` 整只缺席」早就是唯一读法 ⇒ 标在场就**不铸**(与 7.73.1 及以前的
|
|
1131
1133
|
* wire 读数逐字节相同),不按「六个 0」的值形猜、也不给 `TraceTurn.tokens` 加第二枚「未知」座(同一事实两种
|
|
1132
1134
|
* 拼法)。标的域是 core 的 `true | 缺席`(永不 `false`)⇒ 严判 `=== true`,别的值不是标。 */
|
package/dist/trace/project.js
CHANGED
|
@@ -10,6 +10,7 @@ import { injectionTierOrAbsent } from "./injection-tier.js";
|
|
|
10
10
|
import { semaProvenanceOrAbsent } from "./sema-provenance.js";
|
|
11
11
|
import { resupplyFields, terminalFrameFacetFields } from "./task-notification-facets.js";
|
|
12
12
|
import { dropProjectedFace } from "./projection-drop.js";
|
|
13
|
+
import { projectByTable } from "./projection-table.js";
|
|
13
14
|
export async function appendModelUsageDelta(append, modelUsage, taskId) {
|
|
14
15
|
const delta = modelUsage?.drain(taskId);
|
|
15
16
|
if (delta) {
|
|
@@ -145,6 +146,15 @@ function screenedGateOrThrow(v) {
|
|
|
145
146
|
...(rel.mandate === undefined ? {} : { mandate: rel.mandate }),
|
|
146
147
|
...(rel.reason === undefined ? {} : { reason: rel.reason }),
|
|
147
148
|
};
|
|
149
|
+
const clr = d.kind === "allowed" ? d.clearedBy : undefined;
|
|
150
|
+
const clearedBy = clr === undefined
|
|
151
|
+
? undefined
|
|
152
|
+
: {
|
|
153
|
+
member: clr.member,
|
|
154
|
+
entries: clr.entries.map((e) => seatText("trace-frame-text", e)),
|
|
155
|
+
...(clr.omitted === undefined ? {} : { omitted: clr.omitted }),
|
|
156
|
+
...(clr.positions === undefined ? {} : { positions: [...clr.positions] }),
|
|
157
|
+
};
|
|
148
158
|
return {
|
|
149
159
|
disposition: d.kind === "denied"
|
|
150
160
|
? {
|
|
@@ -156,7 +166,7 @@ function screenedGateOrThrow(v) {
|
|
|
156
166
|
...(d.askClass === undefined ? {} : { askClass: d.askClass }),
|
|
157
167
|
...(d.classes === undefined ? {} : { classes: [...d.classes] }),
|
|
158
168
|
}
|
|
159
|
-
: { kind: "allowed", ...(classifier === undefined ? {} : { classifier }), ...(released === undefined ? {} : { released }) },
|
|
169
|
+
: { kind: "allowed", ...(classifier === undefined ? {} : { classifier }), ...(released === undefined ? {} : { released }), ...(clearedBy === undefined ? {} : { clearedBy }) },
|
|
160
170
|
...(settlement === undefined ? {} : { settlement }),
|
|
161
171
|
...(g.origin === undefined ? {} : { origin: g.origin }),
|
|
162
172
|
};
|
|
@@ -447,6 +457,9 @@ export function toolRosterDeltaEventData(ev) {
|
|
|
447
457
|
}
|
|
448
458
|
return { delta: ev.delta, ...identityFields(ev) };
|
|
449
459
|
}
|
|
460
|
+
export const WIRING_SESSION_RULES_DISPOSITIONS = {
|
|
461
|
+
childrenReadLive: { forward: (raw) => typeof raw === "boolean" },
|
|
462
|
+
};
|
|
450
463
|
export function wiringManifestEventData(ev, instructions) {
|
|
451
464
|
const str = (v) => (typeof v === "string" && v.length > 0 ? v : undefined);
|
|
452
465
|
const bool = (v) => (typeof v === "boolean" ? v : undefined);
|
|
@@ -641,12 +654,31 @@ export function wiringManifestEventData(ev, instructions) {
|
|
|
641
654
|
return dropProjectedFace("wiring_manifest.permissionMode is not a receipt shape (effective a non-empty string, requested / foldedBy absent or non-empty strings)");
|
|
642
655
|
return { ...(requested !== undefined ? { requested } : {}), effective, ...(foldedBy !== undefined ? { foldedBy } : {}) };
|
|
643
656
|
})();
|
|
657
|
+
const sessionRules = (() => {
|
|
658
|
+
if (m.sessionRules === undefined)
|
|
659
|
+
return undefined;
|
|
660
|
+
const seg = sec(m.sessionRules);
|
|
661
|
+
if (seg === undefined || seg.childrenReadLive === undefined)
|
|
662
|
+
return dropProjectedFace("wiring_manifest.sessionRules is not { childrenReadLive: boolean }");
|
|
663
|
+
const out = projectByTable("wiring_manifest.sessionRules", WIRING_SESSION_RULES_DISPOSITIONS, seg, undefined);
|
|
664
|
+
return out.childrenReadLive === undefined ? undefined : out;
|
|
665
|
+
})();
|
|
666
|
+
const projectMemory = (() => {
|
|
667
|
+
if (m.projectMemory === undefined)
|
|
668
|
+
return undefined;
|
|
669
|
+
const word = str(m.projectMemory);
|
|
670
|
+
if (word === undefined)
|
|
671
|
+
return dropProjectedFace("wiring_manifest.projectMemory is not a non-empty string");
|
|
672
|
+
return word;
|
|
673
|
+
})();
|
|
644
674
|
return {
|
|
645
675
|
...(num(m.schemaVersion) !== undefined ? { schemaVersion: m.schemaVersion } : {}),
|
|
646
676
|
...(str(legIn.kind) !== undefined ? { leg: { kind: legIn.kind } } : {}),
|
|
647
677
|
...(teamRole !== undefined ? { teamRole } : {}),
|
|
648
678
|
...(fileHistory !== undefined ? { fileHistory } : {}),
|
|
649
679
|
...(permissionMode !== undefined ? { permissionMode } : {}),
|
|
680
|
+
...(sessionRules !== undefined ? { sessionRules } : {}),
|
|
681
|
+
...(projectMemory !== undefined ? { projectMemory } : {}),
|
|
650
682
|
...(ask !== undefined ? { ask } : {}),
|
|
651
683
|
...(question !== undefined ? { question } : {}),
|
|
652
684
|
...(str(interactionIn.posture) !== undefined ? { interaction: { posture: interactionIn.posture } } : {}),
|
package/dist/trace/redact.d.ts
CHANGED
|
@@ -35,10 +35,11 @@ export declare function armPoolBudgetForTest(): {
|
|
|
35
35
|
urlSegmentReplays: number;
|
|
36
36
|
ssh2ScanBytes: number;
|
|
37
37
|
mappedUnits: number;
|
|
38
|
+
readings: number;
|
|
38
39
|
};
|
|
39
40
|
export declare function resetArmPoolBudgetForTest(): void;
|
|
40
41
|
/**
|
|
41
|
-
* 🔴 **脱敏的两个档 —— 「这段文本是自由文本,还是一个结构有界的单元」**(
|
|
42
|
+
* 🔴 **脱敏的两个档 —— 「这段文本是自由文本,还是一个结构有界的单元」**([ref],闭集两词)。
|
|
42
43
|
*
|
|
43
44
|
* · `"free-text"`:CoT / 日志 / 任意字节。臂**全员**在场,读数就是 {@link redactSecrets} 的对外语义。
|
|
44
45
|
* · `"bounded-unit"`:一个 URL 路径段、一个 query 键名或值 —— 边界由**结构**给(WHATWG 已经把界告诉我们了)。
|
|
@@ -54,18 +55,28 @@ export declare function resetArmPoolBudgetForTest(): void;
|
|
|
54
55
|
*/
|
|
55
56
|
type RedactionScope = "free-text" | "bounded-unit";
|
|
56
57
|
/** 本模块会写进文本的全部替换 token(`«…»` 字面),从三张表现算 —— 表改这里自动跟,不另抄一份。
|
|
57
|
-
* 🔴 **
|
|
58
|
+
* 🔴 **[ref] v2 修复轮起它只剩一个语义:闭形闭集的加载期校验**。运行期「这一段是不是一枚记号」已经由
|
|
58
59
|
* {@link credentialSpans} 的闭**形**那一支一处答完({@link opaqueUnitEnd}),按闭**集**再认一遍的
|
|
59
60
|
* `redactionTokenEndAt` 与它同义而更窄,已删 —— 两只「什么算记号」的判别器就是两个定义。 */
|
|
60
|
-
/** {@link buildDisplaySafeUrl} 解析不动一个配置型 URL 时的**占位**(
|
|
61
|
+
/** {@link buildDisplaySafeUrl} 解析不动一个配置型 URL 时的**占位**([ref] 件B)——fail-closed:输出**不含原串的
|
|
61
62
|
* 任何字节**(连 host 都不留),不许回落成原值。它不是任何一条臂的产物,所以要在这里**显式**进闭集
|
|
62
63
|
* {@link REDACTION_TOKENS}(闭形的加载期校验对它同样成立),消费端按契约 §5.1 的闭形逐枚解析时认得它。 */
|
|
63
64
|
declare const DISPLAY_SAFE_URL_TOKEN = "\u00ABredacted:url\u00BB";
|
|
64
|
-
/**
|
|
65
|
+
/** [ref]:出网代理 URL 的回显尺(`outbound-dispatcher.ts` `displayProxyUrl`)形不干净时整只用**同一枚**占位 —— 单独一行导出,
|
|
65
66
|
* 上面那行字面量保持 `const NAME = "…";` 形(`test/api-notice-text-freeze.test.ts` §6 的冻结扫描按这一形认替换 token)。 */
|
|
66
67
|
export { DISPLAY_SAFE_URL_TOKEN };
|
|
67
68
|
/**
|
|
68
|
-
*
|
|
69
|
+
* 名表的**只读导出**([ref]:第四处消费 —— 受理口的 URL 凭据判官 `url-credential.ts`;文档同步钉按它对表)。
|
|
70
|
+
* 表的属主仍是本模块的 {@link CREDENTIAL_NAME_ANCHORS};加一个名字只改那一处,本数组与下面的谓词随之现算。
|
|
71
|
+
*/
|
|
72
|
+
export declare const CREDENTIAL_PARAM_NAMES: readonly string[];
|
|
73
|
+
/**
|
|
74
|
+
* 「这个**已解码**的参数名是不是凭据名」([ref] 第四处消费)。入参是收方读到的那一形(`URLSearchParams` 解过一次码的名字),
|
|
75
|
+
* 判法与本模块 URL 参数臂同读 —— 同一只判定 {@link credentialNameAnchor}:整名在表里(ASCII 大小写不敏感,不做 Unicode 折叠)。
|
|
76
|
+
*/
|
|
77
|
+
export declare function isCredentialParamName(decodedName: string): boolean;
|
|
78
|
+
/**
|
|
79
|
+
* 🔴 **取证相的重扫模式(测试座,[ref])** —— 生产恒 `"incremental"`;`"full"` 是**参照语义** = 「没有可复用的上一次执行」:
|
|
69
80
|
* 每级五条取证臂整段重跑、URL 臂每段重扫,既不读足迹也不回放(池把每一级的脏区间当作「未知」交下去,与级 0 同一个读法)。
|
|
70
81
|
* 证据表的建法(级 0 记号档 + 逐级折入)与收敛判据(脏区间为空)两种模式是同一条,所以两种模式只差「复用与否」这一位 ——
|
|
71
82
|
* 增量重扫的全部正确性主张只有一句:**任何输入上两种模式输出逐字相同**(`test/forensic-incremental-rescan.test.ts` 并跑比对;
|
|
@@ -81,7 +92,7 @@ export declare function credentialSpansFoldForTest(prev: ReadonlyArray<readonly
|
|
|
81
92
|
/** 🧪 结构读数(与 {@link ppkScanBytesForTest} 同一条技法):本扫描器读过的单元数,线性钉用。 */
|
|
82
93
|
export declare function anchoredScanUnitsForTest(): number;
|
|
83
94
|
export declare function resetAnchoredScanUnitsForTest(): void;
|
|
84
|
-
/** 测试可见(
|
|
95
|
+
/** 测试可见([ref] 真值表的两半):结构段里**表行只作声明、实现是手写扫描器**的臂 —— 声明正则的**新拷贝**
|
|
85
96
|
* (`lastIndex` 不与模块内那一枚共享)+ 扫描器在一份原文上产的候选跨度 `[起, 止)`。臂名是闭集 ⇒ 穷尽 `switch`
|
|
86
97
|
* (少一个 `case` = 缺返回 = 编译红)。 */
|
|
87
98
|
export declare function structuralScannerForTest(arm: "json-secret-field" | "pem-fence"): {
|
|
@@ -105,19 +116,25 @@ export declare function resetPpkScanBytesForTest(): void;
|
|
|
105
116
|
* 所以一个 `arm="fragment"` 计数可能来自残片,也可能来自一个恰好落在阈值之上的 look-alike;
|
|
106
117
|
* core [ref] 落地后这一支**趋零是证据、不归零不是证明**。别把它当截断事实的度量用。 */
|
|
107
118
|
/**
|
|
108
|
-
* 🔴 **词名 = 表归属,不是语义**(clay 裁 [ref] ①,2026-09-18,关
|
|
119
|
+
* 🔴 **词名 = 表归属,不是语义**(clay 裁 [ref] ①,2026-09-18,关 [ref]):`"full"` = 强证据表(`SECRET_PATTERNS` 一族,
|
|
109
120
|
* 含 7.76.2 起改判进来的 PEM/ppk 体)命中的臂,`"fragment"` = 弱证据表({@link FRAGMENT_SECRET_PATTERNS})命中的臂。
|
|
110
121
|
* 7.76.2 起两档语义已是「强证据 / 弱证据」,词名**刻意保留**:它是 Prometheus 标签 `redactions_applied_total{arm}` 的
|
|
111
122
|
* 标签值,改名 = 硬 breaking 的标签值漂移(面板与告警按值匹配),而语义只在这一段注释里说全即可。判据是 {@link armOfToken}。
|
|
112
123
|
*/
|
|
113
124
|
export type RedactionArm = "full" | "fragment";
|
|
114
125
|
export interface RedactionHitMeta {
|
|
115
|
-
/** 命中臂的**判别力档位**(闭集两词,
|
|
126
|
+
/** 命中臂的**判别力档位**(闭集两词,[ref]):`"fragment"` = {@link FRAGMENT_SECRET_PATTERNS} 那一族
|
|
116
127
|
* 「短前缀 + 长度/熵阈值」的弱证据臂;`"full"` = 其余全部(结构锚 / 词法关键字 / 定长裸形)。
|
|
117
128
|
* 判据 = 表归属,不是 token 的 `:partial` 后缀 —— 两条轴的分家逐字见 {@link armOfToken}。 */
|
|
118
129
|
arm: RedactionArm;
|
|
119
130
|
}
|
|
120
131
|
export declare function setRedactionObserver(fn: ((patternLabel: string, count: number, meta: RedactionHitMeta) => void) | undefined): void;
|
|
132
|
+
/**
|
|
133
|
+
* 一段文本的**出门形**(闭集两词,穷尽 `switch` 消费)—— 读不读第 ④ 类(原始的空白控制字符),只由它定(见 {@link deleteInvisibleCharacters} 顶注的表):
|
|
134
|
+
* · `multi-line`:出口保留行结构(trace 帧、结果、CoT、审批预览 …;{@link redactSecrets} 一族全是这一形)⇒ ①②③;
|
|
135
|
+
* · `single-line`:出口在读者看见之前把文本压成一行(出口座的日志字段行 / 标题行:空白控制字符被删或折成空格)⇒ ①②③④。
|
|
136
|
+
*/
|
|
137
|
+
export type RedactionLayout = "multi-line" | "single-line";
|
|
121
138
|
export declare function redactSecrets(text: string, opts?: {
|
|
122
139
|
observe?: boolean;
|
|
123
140
|
json?: boolean;
|
|
@@ -126,13 +143,13 @@ export declare function redactSecrets(text: string, opts?: {
|
|
|
126
143
|
* 脱敏 + **这一遍命中了哪些档位的臂**({@link RedactionArm} 闭集两词)—— 与 {@link redactSecrets} 同一只
|
|
127
144
|
* 脱敏器、同一张表、同一遍扫描的另一个出口。
|
|
128
145
|
*
|
|
129
|
-
* 🔴 **为什么要这个出口**(
|
|
146
|
+
* 🔴 **为什么要这个出口**([ref]):下游有一类消费方问的不是「脱完长什么样」而是「这段文本里有没有
|
|
130
147
|
* **强证据**的凭据形」——`tool-approval.ts` 的规则素材闸是头一个。旧形只能拿「字节变了没有」当谓词,
|
|
131
148
|
* 于是弱证据臂(短前缀 + 阈值启发式)的一次多脱就等于一次「素材整只扣下」,用户拿不到常驻放行。
|
|
132
149
|
* 出口开在脱敏器**自己**身上是硬约束:全仓只该有一个「什么算凭据」的属主,消费方**不许**按 token 字面
|
|
133
150
|
* (`includes(":partial»")`)或另跑一遍正则去反推 —— 那就是第二只脱敏器。
|
|
134
151
|
*
|
|
135
|
-
* `arms` 是**这一遍真命中的档位集合**。「`text !== 入参`」与「`arms` 非空」仍不是一回事(
|
|
152
|
+
* `arms` 是**这一遍真命中的档位集合**。「`text !== 入参`」与「`arms` 非空」仍不是一回事([ref] 起理由换了):
|
|
136
153
|
* 前者 ⇔ 至少一条跨度改写了字节(强弱两档都算 —— 格式字符不再改字节);后者 = 至少一条臂命中,**含**字节没变的那种
|
|
137
154
|
* (重扫已脱敏文本时,臂命中自己产出的记号、换回同一枚记号)。凭据形的证据是档位:规则素材闸问的是 `arms.has("full")`。
|
|
138
155
|
*/
|
|
@@ -147,8 +164,8 @@ export declare function redactSecretsWithArms(text: string, opts?: {
|
|
|
147
164
|
* 🧪 **跨度出口 —— 只给测试**(车 UH 脱敏基线门 `test/redaction-baseline-gate.test.ts`:判「必隐字节**每一个**都被盖住」,
|
|
148
165
|
* 而不是「必隐串整串不在」—— 后者对截断式脱敏(值的前缀被洗、尾段留着)恒判已藏,gpt-6 腿 r1-F1 [high])。
|
|
149
166
|
*
|
|
150
|
-
* 同一只 {@link runRedaction}、同一遍扫描,交出池算好的 `kept` 跨度映回**原文**之后的那一份(
|
|
151
|
-
* 与产物同一套 ——
|
|
167
|
+
* 同一只 {@link runRedaction}、同一遍扫描,交出池算好的 `kept` 跨度映回**原文**之后的那一份([ref] 那一份;坐标在原文上,
|
|
168
|
+
* 与产物同一套 —— [ref] 起;此前在剥后视图上),
|
|
152
169
|
* 不是第二只脱敏器、不改任何判据、不喂观察者(`observe:false`,与影子重扫同口);`opts.json` 与 {@link redactSecrets} 的同名选项
|
|
153
170
|
* 逐字同义(JSON 模式,`redactedPreview` 走的那一条)。生产代码不调用它:
|
|
154
171
|
* 问「有没有凭据形」的消费方走 {@link redactSecretsWithArms}。
|
|
@@ -163,12 +180,11 @@ export declare function redactionSpansForTest(text: string, opts?: {
|
|
|
163
180
|
}>;
|
|
164
181
|
};
|
|
165
182
|
/**
|
|
166
|
-
* 🔴 **出口座的提案口**(
|
|
183
|
+
* 🔴 **出口座的提案口**([ref] / RH-1 第一期;座 = `src/trace/exit-seat.ts` 的 `seatText`)。
|
|
167
184
|
*
|
|
168
|
-
* 同一只 {@link runRedaction}
|
|
169
|
-
* `
|
|
170
|
-
*
|
|
171
|
-
* (合并律与渲染律住在座里,本模块不拼第二份产物给座)。
|
|
185
|
+
* 同一只 {@link runRedaction}、同一张不可见字符读法格、同一次观察者计数(座上的一次脱敏就是一次主扫),交出**原文坐标**上的跨度与各自的替换串:臂认什么、档里有哪些臂、
|
|
186
|
+
* 一段文本有几种读法,仍然只由本模块答。`layout` = 这一行出口的出门形({@link RedactionLayout};必填 —— 出口自己说它把文本压不压成一行,第 ④ 类读不读随之定)。
|
|
187
|
+
* 座拿它做**一次区间合并 + 一次渲染 + 按出门形整形 + 按记号边界切**(合并律与渲染律住在座里,本模块不拼第二份产物给座)。
|
|
172
188
|
*
|
|
173
189
|
* 第一期交的是池解完重叠之后的那一份(升序、两两不交);第二期改交未解重叠的原始候选,池内并集律 {@link resolveSpanOverlaps} 与
|
|
174
190
|
* {@link applySpans} 随之删除 —— 那时本口是自由文本脱敏的唯一出口。
|
|
@@ -179,9 +195,7 @@ export type RedactionSpan = {
|
|
|
179
195
|
readonly repl: string;
|
|
180
196
|
};
|
|
181
197
|
export type { RedactionScope };
|
|
182
|
-
export declare function proposeRedactionSpans(text: string, scope: RedactionScope,
|
|
183
|
-
readonly countHits?: boolean;
|
|
184
|
-
}): readonly RedactionSpan[];
|
|
198
|
+
export declare function proposeRedactionSpans(text: string, scope: RedactionScope, layout: RedactionLayout): readonly RedactionSpan[];
|
|
185
199
|
/**
|
|
186
200
|
* 🔴 环 + 深度预算(2026-07-25 补)。原实现是纯递归、**既不记已访问节点也不限深度**,而它的调用位置是
|
|
187
201
|
* **最不可信的边界**:`toolStart`/`toolEnd` 把工具的 `args`/`output`/`structured` 直接喂进来。后果两条:
|
|
@@ -209,14 +223,14 @@ export declare function redactDeepWith(value: unknown, leaf: (s: string) => stri
|
|
|
209
223
|
*/
|
|
210
224
|
export declare function redactedPreview(value: unknown, cap?: number): string | null;
|
|
211
225
|
/**
|
|
212
|
-
* 🔴 **配置型 URL 上日志 / 诊断面的唯一 display-safe 铸点**(
|
|
226
|
+
* 🔴 **配置型 URL 上日志 / 诊断面的唯一 display-safe 铸点**([ref] 件B;`build*` = 返回纯数据的一只纯函数)。
|
|
213
227
|
*
|
|
214
228
|
* 病(7.87.2 亲核):启动日志 `listening` 行把配置里的 URL 写**原值** —— `brain: brainSummary(config)` 里的
|
|
215
229
|
* `gateway: config.gatewayBaseUrl` 与同行的 `otel: config.otel.endpoint`,logger 不脱敏。部署若把凭据放在
|
|
216
230
|
* 网关 URL 的 userinfo / query 里,密码明文落 `engine-*.log`(日志的读者面比 run 错误文本更宽:它落盘、
|
|
217
231
|
* 被采集、进工单)。同类出口不止这两处,类级机器门在 `test/config-url-display-safe.test.ts`。
|
|
218
232
|
*
|
|
219
|
-
* 🔴 **
|
|
233
|
+
* 🔴 **[ref] 展示半场(7.90.0 / core 7.24.0):两条正交的律合成一次,名表的射程缩到不可约的那一半**。
|
|
220
234
|
* 改前内部只有一条:`redactSecrets(new URL(raw).href)` —— 自由文本那条**名单制**的律,query 的值只在键名
|
|
221
235
|
* 落在 `CREDENTIAL_NAME_WORDS`(或值本身像个密钥)时才遮,于是**没人列过的那个键名**就是它的盲点
|
|
222
236
|
* (`?sig=…` / `?auth=…` / 部署自定义的网关参数名)。现在前面先跑 core 的 `displayUrlOf`,它是**位置制**的:
|
|
@@ -244,20 +258,20 @@ export declare function redactedPreview(value: unknown, cap?: number): string |
|
|
|
244
258
|
* 成文代价:`MODEL_GATEWAY_BASEURL=gw.internal:8000` 这种缺 scheme 的配置在日志上变成 `«redacted:url»`
|
|
245
259
|
* —— 而它在 `fetch` 那一侧本来就是必然失败的形(WHATWG 要求绝对 URL),日志上响亮一点方向一致。
|
|
246
260
|
* ② **空串 = 未设**:里面没有凭据,原样回空串(不铸占位 —— 占位会让「没配」读成「配了但看不见」)。
|
|
247
|
-
* ⚠️ **保形只到 host / port / path 这一层**(
|
|
248
|
-
* 的
|
|
261
|
+
* ⚠️ **保形只到 host / port / path 这一层**([ref] 起如实改口;`test/config-url-display-safe.test.ts`
|
|
262
|
+
* 的 [ref]-o 是这句话的机器读数,别在散文里再抄一遍):scheme / host / port / path 的字节逐字(模 WHATWG
|
|
249
263
|
* 的 HTTP 等价归一:默认端口省、host 小写、IDN→punycode、点段折叠,再加**整串末尾**的斜杠去掉 ——
|
|
250
264
|
* 是**整串末尾**不是「路径末尾」:`…/p/` ⇒ `…/p`,而 `…/p/?k=v` 的 `/p/` 保留),query 只留**键名**。
|
|
251
265
|
*/
|
|
252
266
|
/** 位置律的**形** —— 生产路径恒是 core 的 {@link displayUrlOf}。参数化是**为可测性开的唯一一个缝**
|
|
253
|
-
* (
|
|
267
|
+
* ([ref] 的「违反格」要造一个「位置律漏了一段」的世界,而拿上游的现成缺陷当触发器会在它修好那天失效);
|
|
254
268
|
* 生产调用方**不传**这个参数。 */
|
|
255
269
|
export type PositionalUrlLaw = (url: string) => string;
|
|
256
270
|
/** 测试口(与 `observability/fail-open.ts` 的 `resetFailOpenRecorderForTest` 同姿势):一次性 warn 的闸是
|
|
257
271
|
* 模块级的,而「只 warn 一次」本身要被钉,所以给测试一个复位口。生产零调用。 */
|
|
258
272
|
export declare function resetDisplaySafeFailClosedWarnForTest(): void;
|
|
259
273
|
/**
|
|
260
|
-
* 🔴 **
|
|
274
|
+
* 🔴 **[ref] 的不变量 —— 形状律在 query / fragment 区间上有一条凭据跨度 ⇒ 那一整段不出门**。
|
|
261
275
|
*
|
|
262
276
|
* 为什么需要它(差分实测 650 形里 26 个反例,本车亲跑复现):两条律**串起来**的时候,前一条会把后一条
|
|
263
277
|
* 赖以认字的**结构**改掉。实测的病形是 `https://h/?next=https://u:&pw@h=` —— 位置律先按 `&` 切段、把
|
|
@@ -268,7 +282,7 @@ export declare function resetDisplaySafeFailClosedWarnForTest(): void;
|
|
|
268
282
|
* 击穿:①凭据**整段**不得是产物的子串 —— 位置律把它切开了,整段自然不是子串;②切成**片** + 长度下限 ——
|
|
269
283
|
* 材料能被切成全是单字符(`&a!b!c!d@`)甚至纯标点(`&!$()*+,;@`),任何下限都漏;③**字符集**包含 ——
|
|
270
284
|
* 密码的每个字符都能在同一条 URL 的 path / host / 别的键名里另外出现一次,包含关系成立而明文骑在产物上
|
|
271
|
-
* (`https://h/abcdefghijklmnopqrstuvwxyz0123456789?ok=1&next=https://u:&secret123=x@h`,
|
|
285
|
+
* (`https://h/abcdefghijklmnopqrstuvwxyz0123456789?ok=1&next=https://u:&secret123=x@h`,[ref]-k)。
|
|
272
286
|
* 共同的根:**切开之后,「这个字节来自凭据」在文本上不可判**。⇒ 判据搬到切分之前,用形状律自己报的
|
|
273
287
|
* **跨度坐标**当出处证明({@link shapeLawCredentialInQueryOrFragment})—— 不需要长度下限、字符类白名单
|
|
274
288
|
* 或任何集合运算,**规则比前三版都少**,而且对「将来出现的新形」天然封闭(新形状照样落在跨度里)。
|
|
@@ -279,8 +293,8 @@ export declare function resetDisplaySafeFailClosedWarnForTest(): void;
|
|
|
279
293
|
* ② 否则照旧合成:位置律 → 形状律。
|
|
280
294
|
* **过度遮的射程如实**:一条 query 里**真的**带凭据的配置型 URL,自本版起读不到它的**其它**参数名了
|
|
281
295
|
* (改前是逐参数遮)。方向一致,而且干净的根**零影响** —— Azure 式 `?api-version=…&deployment=…` 上
|
|
282
|
-
* 形状律一条跨度都没有,结构上走不到这一步(
|
|
283
|
-
* 逐字保留 `pathname`,形状律在产物上照常认得它(
|
|
296
|
+
* 形状律一条跨度都没有,结构上走不到这一步([ref]-e 单独钉住)。path 区间的凭据**不**走这条路:位置律
|
|
297
|
+
* 逐字保留 `pathname`,形状律在产物上照常认得它([ref]-f 的并集格)。
|
|
284
298
|
* 🔴 这是 fail-**closed**(扣下信息),**不**登记 `recordFailOpen` —— 那张表记的是「放行了本该拒的」。
|
|
285
299
|
* 只打一条一次性 warn(**不含原文**:原文就是那段凭据)。
|
|
286
300
|
*/
|
|
@@ -300,7 +314,7 @@ export declare function buildDisplaySafeUrlChecked(raw: string, positionalLaw?:
|
|
|
300
314
|
failedClosed: boolean;
|
|
301
315
|
};
|
|
302
316
|
/**
|
|
303
|
-
* 🔴 **引用了一条「铸点都守不住」的 URL 的自由文本,一律扣下**(
|
|
317
|
+
* 🔴 **引用了一条「铸点都守不住」的 URL 的自由文本,一律扣下**([ref] 的第二个出口;codex 第三轮 [high] 二)。
|
|
304
318
|
*
|
|
305
319
|
* 料 = 上游(core)的路由拒因:一句自由文本,里面嵌着 core **已经用位置律改写过**的那条 URL。到本仓手上时
|
|
306
320
|
* `://<userinfo>@` 的结构已经没了 ⇒ 形状律认不出那一段 ⇒ 光过一遍 `redactSecrets` 兜不住(实测:降级拒因
|