@sema-agent/core 7.48.0 → 7.49.1
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/CHANGELOG.md +457 -0
- package/README.md +2 -2
- package/dist/agents/cascade.d.ts +2 -5
- package/dist/agents/child-failure.d.ts +20 -0
- package/dist/agents/child-failure.js +28 -0
- package/dist/agents/cross-session-ref.d.ts +11 -3
- package/dist/agents/cross-session-ref.js +6 -0
- package/dist/agents/cumulative-stats.d.ts +12 -15
- package/dist/agents/cumulative-stats.js +1 -1
- package/dist/agents/extra-tool-names.js +1 -1
- package/dist/agents/inherited-tool-pool.d.ts +17 -13
- package/dist/agents/inherited-tool-pool.js +4 -3
- package/dist/agents/peer-session-drain.d.ts +3 -2
- package/dist/agents/peer-session-drain.js +5 -4
- package/dist/agents/send-message-tool.js +2 -9
- package/dist/agents/subagent.d.ts +10 -29
- package/dist/agents/subagent.js +65 -53
- package/dist/agents/suspend-guard.d.ts +1 -1
- package/dist/agents/tool-filter.d.ts +76 -65
- package/dist/agents/tool-filter.js +122 -92
- package/dist/agents/verify.d.ts +4 -7
- package/dist/agents/verify.js +6 -7
- package/dist/bench/metrics.d.ts +1 -2
- package/dist/brain/anthropic.js +133 -79
- package/dist/brain/errors.d.ts +53 -6
- package/dist/brain/errors.js +22 -2
- package/dist/brain/input-too-long.d.ts +40 -19
- package/dist/brain/input-too-long.js +3 -16
- package/dist/brain/open-responses.js +19 -10
- package/dist/brain/openai.js +123 -32
- package/dist/brain/provider-dialect.d.ts +214 -0
- package/dist/brain/provider-dialect.js +186 -0
- package/dist/brain/request-params.d.ts +27 -8
- package/dist/brain/request-params.js +7 -12
- package/dist/brain/request-route.d.ts +84 -0
- package/dist/brain/request-route.js +41 -0
- package/dist/brain/retry.d.ts +8 -0
- package/dist/brain/retry.js +10 -4
- package/dist/brain/route-adjudicator.d.ts +7 -0
- package/dist/brain/route-adjudicator.js +5 -1
- package/dist/brain/status-sink.d.ts +20 -0
- package/dist/brain/status-sink.js +11 -0
- package/dist/brain/stream-engine.d.ts +52 -1
- package/dist/brain/stream-engine.js +81 -24
- package/dist/brain/stream-shared.d.ts +57 -11
- package/dist/brain/stream-shared.js +28 -2
- package/dist/core/a2a.d.ts +1 -0
- package/dist/core/agent-config-dir.js +3 -2
- package/dist/core/allow-entry.d.ts +21 -12
- package/dist/core/allow-entry.js +38 -31
- package/dist/core/arg-summary.d.ts +21 -28
- package/dist/core/arg-summary.js +235 -88
- package/dist/core/ask-origin.d.ts +42 -24
- package/dist/core/ask-origin.js +18 -13
- package/dist/core/auto-mode-prompt-assets.d.ts +2 -2
- package/dist/core/auto-mode-prompt-assets.js +1 -1
- package/dist/core/auto-mode-prompt.d.ts +11 -1
- package/dist/core/auto-mode-prompt.js +13 -10
- package/dist/core/auto-mode-rebuild.d.ts +7 -0
- package/dist/core/auto-mode-rebuild.js +4 -1
- package/dist/core/canonical-json.d.ts +3 -0
- package/dist/core/canonical-json.js +2 -1
- package/dist/core/checkpoint-requirements.d.ts +892 -0
- package/dist/core/checkpoint-requirements.js +333 -0
- package/dist/core/checkpoint-store.d.ts +94 -65
- package/dist/core/checkpoint-store.js +14 -26
- package/dist/core/child-clamp-seats.d.ts +228 -69
- package/dist/core/child-clamp-seats.js +211 -17
- package/dist/core/classifier-unavailable-arm.d.ts +5 -1
- package/dist/core/classifier-unavailable-arm.js +3 -3
- package/dist/core/compliance.d.ts +3 -0
- package/dist/core/compliance.js +9 -4
- package/dist/core/credential-vocabulary.d.ts +140 -0
- package/dist/core/credential-vocabulary.js +131 -0
- package/dist/core/decision-receipt.js +1 -1
- package/dist/core/effective-path-target.d.ts +73 -16
- package/dist/core/effective-path-target.js +63 -33
- package/dist/core/engine-notice.d.ts +43 -11
- package/dist/core/file-history-store.js +2 -2
- package/dist/core/fs-write-gate-policy.d.ts +4 -0
- package/dist/core/fs-write-gate-policy.js +22 -5
- package/dist/core/gate-bounded-await.d.ts +28 -13
- package/dist/core/gate-bounded-await.js +41 -4
- package/dist/core/gate-fold.d.ts +1 -1
- package/dist/core/gate-fold.js +24 -25
- package/dist/core/gate-lanes.js +16 -15
- package/dist/core/gate-outcome.d.ts +20 -5
- package/dist/core/gate-outcome.js +5 -0
- package/dist/core/governance-codes.d.ts +11 -4
- package/dist/core/governance-codes.js +14 -3
- package/dist/core/hooks.d.ts +21 -0
- package/dist/core/locked-config.d.ts +8 -0
- package/dist/core/locked-config.js +14 -2
- package/dist/core/lsp.js +3 -5
- package/dist/core/mailbox-store.d.ts +3 -4
- package/dist/core/mcp-connection-pool.d.ts +75 -0
- package/dist/core/mcp-connection-pool.js +128 -0
- package/dist/core/mcp-failure.d.ts +2 -1
- package/dist/core/mcp-failure.js +13 -2
- package/dist/core/mcp.d.ts +4 -0
- package/dist/core/mcp.js +70 -43
- package/dist/core/memory-engine/content-origin.js +2 -14
- package/dist/core/memory-engine/engine.d.ts +32 -22
- package/dist/core/memory-engine/engine.js +103 -55
- package/dist/core/memory-engine/file-backend.d.ts +13 -30
- package/dist/core/memory-engine/file-backend.js +37 -252
- package/dist/core/memory-engine/index.d.ts +1 -1
- package/dist/core/memory-engine/index.js +1 -1
- package/dist/core/memory-engine/layout.d.ts +139 -9
- package/dist/core/memory-engine/layout.js +350 -7
- package/dist/core/memory-engine/scope-contract.d.ts +10 -0
- package/dist/core/memory-engine/scope-contract.js +8 -0
- package/dist/core/memory-engine/session-incarnation.d.ts +14 -4
- package/dist/core/memory-engine/session-incarnation.js +5 -2
- package/dist/core/memory-engine/types.d.ts +10 -1
- package/dist/core/memory.js +5 -17
- package/dist/core/model-seat.d.ts +4 -4
- package/dist/core/model-seat.js +1 -1
- package/dist/core/mounted-mcp.d.ts +57 -0
- package/dist/core/mounted-mcp.js +19 -0
- package/dist/core/namespaced-rule-name.d.ts +29 -0
- package/dist/core/namespaced-rule-name.js +52 -0
- package/dist/core/park-selfcheck.d.ts +1 -1
- package/dist/core/park-selfcheck.js +16 -6
- package/dist/core/path-guard-rows.d.ts +99 -0
- package/dist/core/path-guard-rows.js +45 -0
- package/dist/core/path-identity.d.ts +22 -16
- package/dist/core/path-identity.js +10 -10
- package/dist/core/path-rule-binding.d.ts +2 -1
- package/dist/core/path-rule-binding.js +3 -1
- package/dist/core/pause-registry.d.ts +16 -2
- package/dist/core/pause-registry.js +6 -0
- package/dist/core/permission-rule-consent.js +0 -7
- package/dist/core/permission-rule-model.d.ts +68 -24
- package/dist/core/permission-rule-model.js +105 -24
- package/dist/core/permission-rule-store.js +2 -2
- package/dist/core/permission-rules.d.ts +3 -30
- package/dist/core/permission-rules.js +4 -54
- package/dist/core/read-root-candidate.d.ts +1 -3
- package/dist/core/read-root-candidate.js +4 -15
- package/dist/core/real-approval.d.ts +4 -3
- package/dist/core/retired-keys.d.ts +13 -0
- package/dist/core/retired-keys.js +14 -0
- package/dist/core/roles.d.ts +2 -3
- package/dist/core/roles.js +15 -6
- package/dist/core/runner/assemble-result.d.ts +0 -7
- package/dist/core/runner/assemble-result.js +19 -31
- package/dist/core/runner/caller-roster.d.ts +78 -0
- package/dist/core/runner/caller-roster.js +219 -0
- package/dist/core/runner/checkpoint-scope.d.ts +16 -16
- package/dist/core/runner/checkpoint-scope.js +2 -2
- package/dist/core/runner/child-tree.js +2 -2
- package/dist/core/runner/contracts.d.ts +68 -35
- package/dist/core/runner/decide-continuation.d.ts +51 -3
- package/dist/core/runner/decide-continuation.js +76 -21
- package/dist/core/runner/denial-limit-arms.d.ts +17 -5
- package/dist/core/runner/denial-limit-arms.js +11 -9
- package/dist/core/runner/extra-body-dropped-seat.d.ts +8 -0
- package/dist/core/runner/extra-body-dropped-seat.js +22 -0
- package/dist/core/runner/finish-reason-seat.d.ts +9 -0
- package/dist/core/runner/finish-reason-seat.js +40 -0
- package/dist/core/runner/gate-exit.d.ts +44 -32
- package/dist/core/runner/gate-exit.js +112 -25
- package/dist/core/runner/inherited-ask-grants.js +6 -4
- package/dist/core/runner/mcp-redial.d.ts +3 -3
- package/dist/core/runner/mcp-redial.js +3 -4
- package/dist/core/runner/permission-rule-lanes.d.ts +1 -2
- package/dist/core/runner/permission-rule-lanes.js +5 -4
- package/dist/core/runner/prepare-artifact.d.ts +4 -0
- package/dist/core/runner/prepare-artifact.js +2 -1
- package/dist/core/runner/prepare-ask-lane.d.ts +2 -0
- package/dist/core/runner/prepare-ask-lane.js +12 -6
- package/dist/core/runner/prepare-boundary-parks.d.ts +5 -8
- package/dist/core/runner/prepare-boundary-parks.js +4 -7
- package/dist/core/runner/prepare-caps-and-workflow.d.ts +11 -15
- package/dist/core/runner/prepare-caps-and-workflow.js +19 -27
- package/dist/core/runner/prepare-config-doors.d.ts +9 -9
- package/dist/core/runner/prepare-config-doors.js +10 -5
- package/dist/core/runner/prepare-defer-classify.d.ts +2 -2
- package/dist/core/runner/prepare-defer-classify.js +5 -3
- package/dist/core/runner/prepare-delegation-surface.d.ts +1 -1
- package/dist/core/runner/prepare-delegation-surface.js +3 -3
- package/dist/core/runner/prepare-gate-stations.d.ts +4 -4
- package/dist/core/runner/prepare-gate-stations.js +9 -7
- package/dist/core/runner/prepare-hands-readface.d.ts +7 -7
- package/dist/core/runner/prepare-hands-readface.js +7 -7
- package/dist/core/runner/prepare-inherited-gate.d.ts +7 -6
- package/dist/core/runner/prepare-inherited-gate.js +14 -15
- package/dist/core/runner/prepare-listings.d.ts +7 -24
- package/dist/core/runner/prepare-listings.js +4 -5
- package/dist/core/runner/prepare-memory-engine-session.d.ts +2 -0
- package/dist/core/runner/prepare-memory-engine-session.js +4 -3
- package/dist/core/runner/prepare-memory.d.ts +6 -0
- package/dist/core/runner/prepare-memory.js +13 -13
- package/dist/core/runner/prepare-offload-wrappers.d.ts +5 -0
- package/dist/core/runner/prepare-offload-wrappers.js +3 -3
- package/dist/core/runner/prepare-park-ask.d.ts +7 -8
- package/dist/core/runner/prepare-park-ask.js +17 -10
- package/dist/core/runner/prepare-policy-chain.js +24 -44
- package/dist/core/runner/prepare-project-context.d.ts +1 -1
- package/dist/core/runner/prepare-project-context.js +3 -4
- package/dist/core/runner/prepare-protocol-tools.d.ts +9 -3
- package/dist/core/runner/prepare-protocol-tools.js +3 -4
- package/dist/core/runner/prepare-run-refs.d.ts +3 -0
- package/dist/core/runner/prepare-run-refs.js +2 -1
- package/dist/core/runner/prepare-safety-scan.d.ts +4 -8
- package/dist/core/runner/prepare-safety-scan.js +1 -2
- package/dist/core/runner/prepare-suspend-saga.d.ts +7 -1
- package/dist/core/runner/prepare-suspend-saga.js +28 -12
- package/dist/core/runner/prepare-task.d.ts +1 -1
- package/dist/core/runner/prepare-task.js +67 -56
- package/dist/core/runner/prepare-wiring-manifest.d.ts +11 -10
- package/dist/core/runner/prepare-wiring-manifest.js +5 -8
- package/dist/core/runner/resume-apply.js +7 -14
- package/dist/core/runner/resume-checkpoint-screen.js +11 -4
- package/dist/core/runner/resume-internals-and-config.js +2 -2
- package/dist/core/runner/resume-policy-outcome.js +5 -32
- package/dist/core/runner/resume-review-outcome.js +4 -1
- package/dist/core/runner/retired-runner-deps.d.ts +6 -0
- package/dist/core/runner/retired-runner-deps.js +10 -1
- package/dist/core/runner/run-brain-sinks.d.ts +4 -0
- package/dist/core/runner/run-brain-sinks.js +5 -2
- package/dist/core/runner/run-harness-handlers.js +29 -36
- package/dist/core/runner/run-leg.d.ts +0 -2
- package/dist/core/runner/run-leg.js +32 -33
- package/dist/core/runner/run-terminal-adoption.js +4 -3
- package/dist/core/runner/runtask.js +8 -8
- package/dist/core/runner/session-rule-policy.js +5 -5
- package/dist/core/runner/stream-settle-backstop.js +7 -4
- package/dist/core/runner/sub-agent-deny-lists.d.ts +51 -12
- package/dist/core/runner/sub-agent-deny-lists.js +111 -80
- package/dist/core/runner/terminal-account.d.ts +48 -0
- package/dist/core/runner/terminal-account.js +186 -0
- package/dist/core/runner/tool-end-body.d.ts +54 -17
- package/dist/core/runner/tool-end-body.js +27 -2
- package/dist/core/runner/tool-face-overlay.d.ts +3 -1
- package/dist/core/runner/tool-face-overlay.js +6 -4
- package/dist/core/runner/tool-occurrence.d.ts +106 -0
- package/dist/core/runner/tool-occurrence.js +123 -0
- package/dist/core/runner/tool-progress-lane.d.ts +16 -8
- package/dist/core/runner/tool-progress-lane.js +25 -34
- package/dist/core/runner/tool-turn-repair-seat.d.ts +28 -4
- package/dist/core/runner/tool-turn-repair-seat.js +36 -13
- package/dist/core/runner/turn-attachments.d.ts +1 -1
- package/dist/core/runner/write-protection-station.d.ts +21 -9
- package/dist/core/runner/write-protection-station.js +20 -17
- package/dist/core/runner-deps.d.ts +12 -22
- package/dist/core/secret-env.d.ts +16 -5
- package/dist/core/secret-env.js +23 -63
- package/dist/core/sensitive-path-policy.d.ts +19 -18
- package/dist/core/sensitive-path-policy.js +73 -49
- package/dist/core/session-reconcile.d.ts +3 -0
- package/dist/core/session-reconcile.js +5 -4
- package/dist/core/session-store.d.ts +5 -0
- package/dist/core/session-store.js +12 -0
- package/dist/core/session.d.ts +13 -0
- package/dist/core/shared-memory/normalize.d.ts +17 -4
- package/dist/core/shared-memory/normalize.js +7 -7
- package/dist/core/shell-lexer.js +5 -4
- package/dist/core/shell-wrapper-projection.js +1 -1
- package/dist/core/skill-grant.js +1 -1
- package/dist/core/store-contracts/checkpoint-store-contract.js +13 -0
- package/dist/core/store-contracts/mailbox-store-contract.d.ts +7 -14
- package/dist/core/store-contracts/session-store-incarnation-contract.d.ts +27 -0
- package/dist/core/store-contracts/session-store-incarnation-contract.js +92 -0
- package/dist/core/stub-env.d.ts +2 -0
- package/dist/core/stub-env.js +1 -0
- package/dist/core/synthetic-read-verdict.js +2 -2
- package/dist/core/task-event.d.ts +59 -5
- package/dist/core/task-result.d.ts +1 -1
- package/dist/core/task-spec.d.ts +42 -9
- package/dist/core/terminal-cause.d.ts +94 -11
- package/dist/core/tighten-task-spec.d.ts +5 -4
- package/dist/core/tighten-task-spec.js +20 -25
- package/dist/core/tool-catalog-entries.d.ts +5 -7
- package/dist/core/tool-catalog-entries.js +14 -15
- package/dist/core/tool-face.d.ts +47 -0
- package/dist/core/tool-face.js +5 -0
- package/dist/core/tool-model-gate.d.ts +5 -5
- package/dist/core/tool-name-aliases.d.ts +26 -2
- package/dist/core/tool-name-aliases.js +13 -0
- package/dist/core/tool-name-list.d.ts +30 -0
- package/dist/core/tool-name-list.js +55 -0
- package/dist/core/tool-name-readings.d.ts +1 -9
- package/dist/core/tool-name-readings.js +1 -3
- package/dist/core/tool-policy.d.ts +195 -85
- package/dist/core/tool-policy.js +165 -380
- package/dist/core/tool-registry.d.ts +44 -1
- package/dist/core/tool-registry.js +26 -0
- package/dist/core/tool-roster.d.ts +19 -1
- package/dist/core/tool-roster.js +21 -2
- package/dist/core/tool-spec-members.d.ts +45 -0
- package/dist/core/tool-spec-members.js +169 -0
- package/dist/core/tool-spec.d.ts +46 -8
- package/dist/core/tools.d.ts +6 -2
- package/dist/core/tools.js +8 -4
- package/dist/core/untrusted-egress.js +29 -26
- package/dist/core/untrusted-text.d.ts +13 -10
- package/dist/core/untrusted-text.js +6 -44
- package/dist/core/workflow-journal-store.d.ts +4 -1
- package/dist/core/write-protect.d.ts +65 -29
- package/dist/core/write-protect.js +235 -177
- package/dist/engine/compaction/compaction.d.ts +2 -2
- package/dist/engine/execution-env/node-execution-env.d.ts +5 -23
- package/dist/engine/execution-env/node-execution-env.js +16 -38
- package/dist/engine/execution-env/symlink-chain.d.ts +23 -0
- package/dist/engine/execution-env/symlink-chain.js +32 -0
- package/dist/engine/harness/types.d.ts +7 -0
- package/dist/engine/llm/tool-turns.d.ts +3 -0
- package/dist/engine/llm/tool-turns.js +1 -0
- package/dist/engine/llm/types.d.ts +59 -23
- package/dist/engine/loop/agent-loop.js +16 -2
- package/dist/engine/session/memory-repo.js +11 -3
- package/dist/engine/session/repo-utils.d.ts +8 -0
- package/dist/engine/session/repo-utils.js +13 -0
- package/dist/index.d.ts +20 -23
- package/dist/index.js +17 -20
- package/dist/internal/harness.d.ts +1 -1
- package/dist/internal/harness.js +1 -1
- package/dist/internal/llm.d.ts +2 -2
- package/dist/internal/llm.js +1 -1
- package/dist/orchestration/governance-baseline-validity.js +1 -1
- package/dist/orchestration/run-spec.js +3 -3
- package/dist/orchestration/run-workflow-tool.d.ts +16 -35
- package/dist/orchestration/run-workflow-tool.js +38 -78
- package/dist/orchestration/workflow-governance.d.ts +21 -25
- package/dist/orchestration/workflow-governance.js +38 -78
- package/dist/orchestration/workflow-primitives.d.ts +7 -22
- package/dist/orchestration/workflow-primitives.js +5 -12
- package/dist/orchestration/workflow-types.d.ts +1 -1
- package/dist/orchestration/workflow.d.ts +61 -11
- package/dist/orchestration/workflow.js +189 -117
- package/dist/scenarios/full-body.d.ts +1 -1
- package/dist/shell/lex.d.ts +0 -21
- package/dist/shell/lex.js +250 -68
- package/dist/shell/shell-words.d.ts +35 -0
- package/dist/shell/shell-words.js +65 -0
- package/dist/stores/file/checkpoint-store.d.ts +5 -5
- package/dist/stores/file/checkpoint-store.js +5 -2
- package/dist/stores/file/index.d.ts +0 -8
- package/dist/stores/file/index.js +0 -12
- package/dist/stores/file/session-store.d.ts +3 -0
- package/dist/stores/file/session-store.js +44 -19
- package/dist/tools/artifact/artifact-tool.js +2 -0
- package/dist/tools/fs/bash-program-position.d.ts +12 -4
- package/dist/tools/fs/bash-program-position.js +32 -9
- package/dist/tools/fs/bash-readonly-classifier.d.ts +1 -1
- package/dist/tools/fs/bash-readonly-classifier.js +8 -7
- package/dist/tools/fs/containment-face.d.ts +4 -0
- package/dist/tools/fs/containment-face.js +3 -0
- package/dist/tools/fs/fs-shared.d.ts +10 -0
- package/dist/tools/fs/fs-shared.js +18 -0
- package/dist/tools/fs/fs-write.js +4 -2
- package/dist/tools/fs/index.d.ts +1 -1
- package/dist/tools/fs/program-read-model.d.ts +46 -20
- package/dist/tools/fs/program-read-model.js +50 -20
- package/dist/tools/fs/program-read-model.rows.d.ts +0 -14
- package/dist/tools/fs/program-read-model.rows.js +16 -15
- package/dist/tools/fs/read-deny-home.d.ts +33 -47
- package/dist/tools/fs/read-deny-home.js +35 -49
- package/dist/tools/fs/read-deny.d.ts +23 -22
- package/dist/tools/fs/read-deny.js +114 -89
- package/dist/tools/fs/removal-targets.d.ts +56 -23
- package/dist/tools/fs/removal-targets.js +65 -87
- package/dist/tools/fs/safety.d.ts +29 -22
- package/dist/tools/fs/safety.js +17 -11
- package/dist/tools/fs/search.js +10 -8
- package/dist/tools/fs/shell-read-argv.js +1 -1
- package/dist/tools/fs/shell-read-bindings.d.ts +169 -37
- package/dist/tools/fs/shell-read-bindings.js +324 -86
- package/dist/tools/fs/shell-read-builtins.d.ts +35 -0
- package/dist/tools/fs/shell-read-builtins.js +43 -0
- package/dist/tools/fs/shell-read-check.d.ts +15 -1
- package/dist/tools/fs/shell-read-check.js +67 -43
- package/dist/tools/fs/shell-read-establish.js +6 -6
- package/dist/tools/fs/shell-read-functions.d.ts +22 -0
- package/dist/tools/fs/shell-read-functions.js +29 -0
- package/dist/tools/fs/shell-read-judge.d.ts +51 -18
- package/dist/tools/fs/shell-read-judge.js +40 -4
- package/dist/tools/fs/shell-read-plan.d.ts +12 -6
- package/dist/tools/fs/shell-read-plan.js +118 -113
- package/dist/tools/fs/shell-read-start.d.ts +29 -6
- package/dist/tools/fs/shell-read-start.js +16 -9
- package/dist/tools/fs/shell-read-word.js +4 -0
- package/dist/tools/fs/shell-read-workdir.d.ts +156 -0
- package/dist/tools/fs/shell-read-workdir.js +281 -0
- package/dist/tools/fs/shell-read-write-targets.d.ts +5 -2
- package/dist/tools/fs/shell-read-write-targets.js +14 -5
- package/dist/tools/fs/shell-reentry-text.d.ts +4 -6
- package/dist/tools/fs/shell-reentry-text.js +3 -11
- package/dist/tools/task-list.d.ts +1 -2
- package/dist/tools/web.js +1 -1
- package/package.json +4 -1
- package/test/export-surface.snapshot.json +107 -143
- package/wire-changes/core@7.49.0.json +4765 -0
- package/dist/agents/teacher.d.ts +0 -159
- package/dist/agents/teacher.js +0 -577
- package/dist/agents/team.d.ts +0 -226
- package/dist/agents/team.js +0 -257
- package/dist/core/strategy-store.d.ts +0 -238
- package/dist/core/strategy-store.js +0 -253
- package/dist/orchestration/builtin-workflows.d.ts +0 -133
- package/dist/orchestration/builtin-workflows.js +0 -159
- package/dist/scenarios/env.d.ts +0 -40
- package/dist/scenarios/env.js +0 -39
- package/dist/scenarios/scenario-registry.d.ts +0 -110
- package/dist/scenarios/scenario-registry.js +0 -140
- package/dist/scenarios/teacher-quickstart.d.ts +0 -40
- package/dist/scenarios/teacher-quickstart.js +0 -12
- package/dist/stores/cc/lockfile.d.ts +0 -10
- package/dist/stores/cc/lockfile.js +0 -98
- package/dist/stores/cc/mailbox-store.d.ts +0 -20
- package/dist/stores/cc/mailbox-store.js +0 -255
- package/dist/stores/cc/roster-adapter.d.ts +0 -12
- package/dist/stores/cc/roster-adapter.js +0 -117
- package/dist/stores/cc/sidecar-transcript.d.ts +0 -97
- package/dist/stores/cc/sidecar-transcript.js +0 -264
- package/dist/stores/cc/task-list-store.d.ts +0 -2
- package/dist/stores/cc/task-list-store.js +0 -125
- package/dist/stores/file/strategy-store.d.ts +0 -97
- package/dist/stores/file/strategy-store.js +0 -341
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
* of a candidate that could not be established), then containment over the canonical target alone. The
|
|
9
9
|
* deny judge is the boundary's own `denyMatch` closure (`readDenySeat`, read-deny.ts) — the same function
|
|
10
10
|
* object every read face mounts; nothing here compiles a pattern or re-derives a view set. The containment
|
|
11
|
-
* judge is `withinAnyRoot` over the roots the boundary declares
|
|
11
|
+
* judge is `withinAnyRoot` over the roots the boundary declares — a WRITE target's over the write roots, at the
|
|
12
|
+
* seat it is written, under the write face in force ({@link judgeWrite}).
|
|
12
13
|
* · `foldShellReadFindings` folds a command's findings — every segment, every nested plan — to ONE word by
|
|
13
14
|
* the priority `identity_changed > deny_hit > outside_roots > unestablishable > declined > none`.
|
|
14
15
|
* · `SHELL_READ_DECISION` is the total table (finding × seat → disposition) that is the ONLY source of
|
|
@@ -22,6 +23,7 @@
|
|
|
22
23
|
import type { BashReadonlyRootBoundary } from "./bash-readonly-classifier.js";
|
|
23
24
|
import type { ReadCandidate, ShellReadPlan, ShellReadSegment } from "./shell-read-plan.js";
|
|
24
25
|
import type { WriteSeat } from "./shell-read-write-targets.js";
|
|
26
|
+
import { type ContainmentFace } from "./containment-face.js";
|
|
25
27
|
import type { AssertAllKeysHandled } from "../../core/ask-origin.js";
|
|
26
28
|
/** WHAT the judge found about a command — a closed set, registered in `docs/CLOSED-SETS.md`. */
|
|
27
29
|
export declare const SHELL_READ_FINDINGS: readonly ["deny_hit", "outside_roots", "unestablishable", "declined", "identity_changed", "none"];
|
|
@@ -108,6 +110,9 @@ export type DecisionTableCoversEverySeat = AssertAllKeysHandled<Exclude<ShellRea
|
|
|
108
110
|
* {@link SHELL_READ_SEATS} (an untyped caller, or one still passing a retired word) is refused loudly: an
|
|
109
111
|
* absent disposition would read as "no verdict", which no caller can act on safely. */
|
|
110
112
|
export declare function decideShellRead(finding: ShellReadFinding, seat: ShellReadSeat): ShellReadDisposition;
|
|
113
|
+
/** {@link decideShellRead} for a command whose containment findings are all output redirections (`redirectsOnly`) or not — the
|
|
114
|
+
* cell {@link SHELL_REDIRECT_DECISION} states where it states one, else the table's. */
|
|
115
|
+
export declare function decideShellReadForRedirects(finding: ShellReadFinding, seat: ShellReadSeat, redirectsOnly: boolean): ShellReadDisposition;
|
|
111
116
|
/**
|
|
112
117
|
* The boundary a shell read is judged against: the declared roots (canonical), the working directory and
|
|
113
118
|
* home the plan's bases start from, the deny seat (the SAME `denyMatch` closure every read face mounts),
|
|
@@ -122,21 +127,27 @@ export interface ShellReadBoundary extends BashReadonlyRootBoundary {
|
|
|
122
127
|
/** The read table's rows AT or BELOW a path (`readDenySeat`'s `denyAtOrBelow`, read-deny.ts): read by the station's
|
|
123
128
|
* `writesPlaced` fact only, through {@link denyRowAtOrBelow}. */
|
|
124
129
|
readonly denyAtOrBelow?: (resolvedPath: string) => string | null;
|
|
125
|
-
/** The WRITE roots (canonical) —
|
|
126
|
-
*
|
|
127
|
-
* `
|
|
130
|
+
/** The WRITE roots (canonical) — the task root and every additional working directory, never a read-only grant: where a
|
|
131
|
+
* command's write targets must land ({@link judgeRead}'s write face: a target written outside them is an
|
|
132
|
+
* `outside_roots` finding), and so where a mode that accepts file commands may place them. Absent ⇒ where a write may
|
|
133
|
+
* land is unknown: a written target is `unestablishable` and nothing is placed. */
|
|
128
134
|
readonly writeRoots?: readonly string[];
|
|
129
|
-
/** The
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
readonly
|
|
135
|
+
/** The WRITE face in force — the same seat the structured write tools read (the run's resolved write face, read once per
|
|
136
|
+
* judgment where the boundary is built): `"open"` skips the write roots' containment for a finding, as it skips the
|
|
137
|
+
* structured tools' root fence ({@link skipsRootsContainment}; absent ⇒ roots). Placement still reads the write roots:
|
|
138
|
+
* a mode accepting file commands accepts them inside its own directories, whatever the face. */
|
|
139
|
+
readonly writeFace?: ContainmentFace;
|
|
140
|
+
/** The leg's ONE write judgment of an ABSOLUTE write target — the one a write tool's target meets (its spelling, its real
|
|
141
|
+
* target and every hop of its symlink chain, under the leg's one exempt root), over the write-protection TABLE and the
|
|
142
|
+
* deployment's guarded write rows (`ToolPolicy.writeGuardRows`, every policy of the leg's chain) together; `canonical` ⇔
|
|
143
|
+
* the path is a key the station established (judged as a key, never as a spelling). `"protected"`: the table covers it —
|
|
144
|
+
* the target is not placed and the verdict says so ({@link import("./shell-read-check.js").ShellReadVerdict.writeProtected});
|
|
145
|
+
* `"guarded"`: a deployment row covers it — the target is not placed; `undefined`: nothing covers it. Read by the
|
|
146
|
+
* station's write facts only. A judgment that throws fails the station's answer (the caller's fail-closed arm). */
|
|
147
|
+
readonly writeTargetJudge?: (target: string, opts?: {
|
|
134
148
|
readonly signal?: AbortSignal;
|
|
135
149
|
readonly canonical?: true;
|
|
136
|
-
}) => Promise<
|
|
137
|
-
/** The deployment's write-target guard (`ToolPolicy.writeTargetGuard`, every policy of the leg's chain): `true` ⇔ a
|
|
138
|
-
* policy guards this ABSOLUTE write target. Read by the station's `writesPlaced` fact only: a guarded target is not placed. */
|
|
139
|
-
readonly writeTargetGuard?: (target: string, signal?: AbortSignal) => Promise<boolean>;
|
|
150
|
+
}) => Promise<"protected" | "guarded" | undefined>;
|
|
140
151
|
}
|
|
141
152
|
/** How far one candidate got before it was judged. `lexical` = the folded spelling is the judged target
|
|
142
153
|
* (an isolated sandbox, or a resolver that declares no authority and did not answer); `canonical` = the
|
|
@@ -163,6 +174,11 @@ export interface EstablishedRead {
|
|
|
163
174
|
readonly walked?: true;
|
|
164
175
|
/** Why the candidate could not be established. */
|
|
165
176
|
readonly cause?: string;
|
|
177
|
+
/** The candidate's spelling WAS placed and the environment could not resolve where it leads (the whole chain unanswered by
|
|
178
|
+
* a resolver that declares itself authoritative, or a component it could not follow) — the reading's
|
|
179
|
+
* `target_unresolved` fact, as opposed to a text the station cannot read (a rewritten word, an unsettled working
|
|
180
|
+
* directory). Present only on an `unestablishable` read. */
|
|
181
|
+
readonly unresolved?: true;
|
|
166
182
|
/** WHERE the command's program writes this target — present only on a write target the program itself writes, at the
|
|
167
183
|
* seat this read was established at (`landing`: through the path's links; `entry`: the directory entry, a link there
|
|
168
184
|
* not followed). Absent on a read, and on a write-face target the program only names (a copy's source). `child`: the
|
|
@@ -235,16 +251,30 @@ export interface JudgedSegment {
|
|
|
235
251
|
export interface JudgedPlan {
|
|
236
252
|
readonly plan: ShellReadPlan;
|
|
237
253
|
readonly segments: readonly JudgedSegment[];
|
|
238
|
-
/** {@link stationGuards} of the boundary the plan was judged against. */
|
|
254
|
+
/** {@link stationGuards} of the boundary the plan was judged against — what a READ finding folds by. */
|
|
239
255
|
readonly guards: boolean;
|
|
256
|
+
/** {@link writeFaceGuards} of the same boundary — what a WRITE target's finding folds by. */
|
|
257
|
+
readonly writeGuards: boolean;
|
|
240
258
|
}
|
|
241
259
|
/**
|
|
242
260
|
* Does the station GUARD anything for this boundary — a closed face (roots: containment is what it guards; an absent
|
|
243
261
|
* face reads as roots, as {@link containmentOf} does), or a deny table with rows (`denyMatch` is present exactly then)?
|
|
244
262
|
* Where it guards nothing (an open face, no deny row), a read it could not establish has nothing to be confirmed
|
|
245
|
-
* against: no finding. The deny judgment itself is untouched (with no row there is nothing to hit).
|
|
263
|
+
* against: no finding. The deny judgment itself is untouched (with no row there is nothing to hit). The READ face's
|
|
264
|
+
* question only: a write target folds by {@link writeFaceGuards}.
|
|
246
265
|
*/
|
|
247
266
|
export declare function stationGuards(boundary: Pick<ShellReadBoundary, "face" | "denyMatch">): boolean;
|
|
267
|
+
/**
|
|
268
|
+
* Does the station guard anything on the WRITE face — the same shape for the write seats: the write face in force runs
|
|
269
|
+
* the roots-containment step ({@link skipsRootsContainment}, the structured write tools' reading; absent ⇒ roots), or
|
|
270
|
+
* the write deny table has rows. Where it guards nothing (an open write face, no write row), a write target the station
|
|
271
|
+
* could not establish has nothing to be confirmed against — as a structured write under that face is not fenced.
|
|
272
|
+
*/
|
|
273
|
+
export declare function writeFaceGuards(boundary: Pick<ShellReadBoundary, "writeFace" | "writeDenyMatch">): boolean;
|
|
274
|
+
/** Does the station guard anything on EITHER face? What a finding about the text's own structure folds by — a text the
|
|
275
|
+
* lexer could not read, a program it cannot name, program text it does not read, a working directory it lost, a text the
|
|
276
|
+
* shell re-enters — since what such a text reads AND what it writes are both unknown. */
|
|
277
|
+
export declare function anyFaceGuards(boundary: Pick<ShellReadBoundary, "face" | "denyMatch" | "writeFace" | "writeDenyMatch">): boolean;
|
|
248
278
|
/** The command-level fold and the finding that produced it. `witness` is absent for `none`; for `declined`
|
|
249
279
|
* the segment that declined stands in for a candidate. */
|
|
250
280
|
export interface ShellReadFold {
|
|
@@ -256,8 +286,10 @@ export interface ShellReadFold {
|
|
|
256
286
|
}
|
|
257
287
|
/**
|
|
258
288
|
* Fold a judged plan to ONE finding by {@link SHELL_READ_FINDING_RANK}, over every segment and every nested
|
|
259
|
-
* plan. Where the station guards nothing
|
|
260
|
-
*
|
|
289
|
+
* plan. Where the station guards nothing an `unestablishable` or `declined` finding is no finding: there is nothing to
|
|
290
|
+
* confirm it against. Which guard is asked is the face the finding is about — a read candidate's by the read face's
|
|
291
|
+
* ({@link JudgedPlan.guards}), a write target's by the write face's ({@link JudgedPlan.writeGuards}), and a finding about
|
|
292
|
+
* the text's own structure (no candidate stands in for it) by either ({@link anyFaceGuards}). Two structural rules ride the fold:
|
|
261
293
|
* · a plan the lexer refused (`unreadable`) is `unestablishable`, unconditionally — a quote-blind re-read
|
|
262
294
|
* yields more words, never zero, so an unreadable text is never "no candidates";
|
|
263
295
|
* · a SHELL re-entry segment (`sh -c S`, `eval S`, `env -S 'S'`, a launcher handing text to a shell) is at
|
|
@@ -289,7 +321,8 @@ export declare function deepestCommonDir(a: string, b: string): string | undefin
|
|
|
289
321
|
* The ONE directory whose addition to the declared roots would answer every `outside_roots` finding of a
|
|
290
322
|
* command — offered only when re-judging the same established reads with that root added leaves no
|
|
291
323
|
* finding at all (MEASURED, not argued: a deny row or an unestablishable candidate beside the out-of-root
|
|
292
|
-
* one leaves the ask standing whatever root is granted, and then nothing is offered
|
|
324
|
+
* one leaves the ask standing whatever root is granted, and then nothing is offered; so does a target written outside
|
|
325
|
+
* the WRITE roots, which no read root answers — a read grant grants no write). `exact` ⇒ the value
|
|
293
326
|
* is the one path the command NAMED, offered verbatim, because the containing directory would hand out the
|
|
294
327
|
* home or a root. A `..` spelling gets no offer: the folded and the kernel reading of it can disagree about
|
|
295
328
|
* whether the target is back inside, which no replay of the text settles.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { hasWin32AliasedComponent, normalizeAbsPathLexically, withinAnyRoot } from "./safety.js";
|
|
2
2
|
import { globInWord } from "./bash-readonly-classifier.js";
|
|
3
3
|
import { readOfText } from "./shell-read-word.js";
|
|
4
|
+
import { skipsRootsContainment } from "./containment-face.js";
|
|
4
5
|
export const SHELL_READ_FINDINGS = Object.freeze(["deny_hit", "outside_roots", "unestablishable", "declined", "identity_changed", "none"]);
|
|
5
6
|
export const SHELL_READ_SEATS = Object.freeze(["full_shell", "readonly", "rejudge"]);
|
|
6
7
|
export const SHELL_READ_FINDING_RANK = {
|
|
@@ -27,6 +28,13 @@ export function decideShellRead(finding, seat) {
|
|
|
27
28
|
}
|
|
28
29
|
return disposition;
|
|
29
30
|
}
|
|
31
|
+
const SHELL_REDIRECT_DECISION = {
|
|
32
|
+
outside_roots: { full_shell: "ordinary" },
|
|
33
|
+
};
|
|
34
|
+
export function decideShellReadForRedirects(finding, seat, redirectsOnly) {
|
|
35
|
+
const cell = redirectsOnly && Object.hasOwn(SHELL_REDIRECT_DECISION, finding) ? SHELL_REDIRECT_DECISION[finding]?.[seat] : undefined;
|
|
36
|
+
return cell ?? decideShellRead(finding, seat);
|
|
37
|
+
}
|
|
30
38
|
export function judgeRead(read, boundary) {
|
|
31
39
|
const writeTarget = read.candidate.face === "write";
|
|
32
40
|
const deny = writeTarget ? boundary.writeDenyMatch : boundary.denyMatch;
|
|
@@ -37,11 +45,11 @@ export function judgeRead(read, boundary) {
|
|
|
37
45
|
const folded = normalizeAbsPathLexically(view);
|
|
38
46
|
const pattern = writeTarget ? boundary.writeDenyMatch(folded) : boundary.denyMatch(folded, walked);
|
|
39
47
|
if (pattern !== null)
|
|
40
|
-
return { read, kind: "deny_hit", deny: { pattern, matchedView: folded, ...(writeTarget ? { face: "write" } : {}) }, containment: containmentOf(read, boundary) };
|
|
48
|
+
return { read, kind: "deny_hit", deny: { pattern, matchedView: folded, ...(writeTarget ? { face: "write" } : {}) }, containment: writeTarget ? writeContainmentOf(read, boundary) : containmentOf(read, boundary) };
|
|
41
49
|
}
|
|
42
50
|
}
|
|
43
51
|
if (writeTarget)
|
|
44
|
-
return
|
|
52
|
+
return judgeWrite(read, boundary);
|
|
45
53
|
const containment = containmentOf(read, boundary);
|
|
46
54
|
if (read.candidate.denyOnly === true)
|
|
47
55
|
return { read, kind: "none", containment };
|
|
@@ -72,19 +80,45 @@ function containmentOf(read, boundary) {
|
|
|
72
80
|
return "unknown";
|
|
73
81
|
return withinAnyRoot(boundary.roots, read.target) ? "inside" : "outside";
|
|
74
82
|
}
|
|
83
|
+
const NULL_DEVICE = "/dev/null";
|
|
84
|
+
function writeContainmentOf(read, boundary) {
|
|
85
|
+
const device = read.written?.seat === "landing" && read.candidate.expands === false && read.candidate.spelled === NULL_DEVICE;
|
|
86
|
+
if (read.written === undefined || read.candidate.denyOnly === true || device)
|
|
87
|
+
return "open";
|
|
88
|
+
const roots = boundary.writeRoots;
|
|
89
|
+
if (roots === undefined || read.target === undefined)
|
|
90
|
+
return "unknown";
|
|
91
|
+
return withinAnyRoot(roots, read.target) ? "inside" : "outside";
|
|
92
|
+
}
|
|
93
|
+
function judgeWrite(read, boundary) {
|
|
94
|
+
const containment = writeContainmentOf(read, boundary);
|
|
95
|
+
if (containment === "open")
|
|
96
|
+
return { read, kind: "none", containment };
|
|
97
|
+
if (read.established === "unestablishable" || boundary.writeRoots === undefined)
|
|
98
|
+
return { read, kind: "unestablishable", containment };
|
|
99
|
+
return { read, kind: containment === "outside" && !skipsRootsContainment(boundary.writeFace) ? "outside_roots" : "none", containment };
|
|
100
|
+
}
|
|
75
101
|
export function stationGuards(boundary) {
|
|
76
102
|
return boundary.face !== "open" || boundary.denyMatch !== undefined;
|
|
77
103
|
}
|
|
104
|
+
export function writeFaceGuards(boundary) {
|
|
105
|
+
return !skipsRootsContainment(boundary.writeFace) || boundary.writeDenyMatch !== undefined;
|
|
106
|
+
}
|
|
107
|
+
export function anyFaceGuards(boundary) {
|
|
108
|
+
return stationGuards(boundary) || writeFaceGuards(boundary);
|
|
109
|
+
}
|
|
78
110
|
export function foldShellReadFindings(judged) {
|
|
79
111
|
let best = { finding: "none" };
|
|
80
112
|
let unestablished = false;
|
|
81
113
|
const raise = (next) => {
|
|
82
114
|
if (next.finding === "unestablishable" || next.finding === "declined") {
|
|
83
|
-
|
|
115
|
+
const face = next.witness?.read.candidate.face;
|
|
116
|
+
if (!(next.witness === undefined ? judged.guards || judged.writeGuards : face === "write" ? judged.writeGuards : judged.guards))
|
|
84
117
|
return;
|
|
85
118
|
unestablished = true;
|
|
86
119
|
}
|
|
87
|
-
|
|
120
|
+
const rank = SHELL_READ_FINDING_RANK[next.finding] - SHELL_READ_FINDING_RANK[best.finding];
|
|
121
|
+
if (rank > 0 || (rank === 0 && next.witness?.read.candidate.face === "write" && best.witness?.read.candidate.face !== "write"))
|
|
88
122
|
best = next;
|
|
89
123
|
};
|
|
90
124
|
const walk = (j, denyOnly) => {
|
|
@@ -125,6 +159,7 @@ export function judgeEstablishedPlan(plan, established, boundary, nestedOf) {
|
|
|
125
159
|
nested: segment.nested.map(nestedOf),
|
|
126
160
|
})),
|
|
127
161
|
guards: stationGuards(boundary),
|
|
162
|
+
writeGuards: writeFaceGuards(boundary),
|
|
128
163
|
};
|
|
129
164
|
}
|
|
130
165
|
export function allFindings(judged) {
|
|
@@ -208,5 +243,6 @@ export function rejudge(judged, boundary) {
|
|
|
208
243
|
nested: s.nested.map((n) => rejudge(n, boundary)),
|
|
209
244
|
})),
|
|
210
245
|
guards: stationGuards(boundary),
|
|
246
|
+
writeGuards: writeFaceGuards(boundary),
|
|
211
247
|
};
|
|
212
248
|
}
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
* and here-strings are data (an UNQUOTED here-document body's substitutions are nested plans) — except to a shell
|
|
25
25
|
* whose argv names no script: what arrives on its standard input is its script, a nested plan where the text spells it;
|
|
26
26
|
* · `$(…)`, backticks and `<(…)` bodies are nested plans; a word carrying one cannot be resolved from the text;
|
|
27
|
-
* · `
|
|
28
|
-
* else does)
|
|
29
|
-
* otherwise loses the base for what follows.
|
|
27
|
+
* · the working-directory thread (`shell-read-workdir.ts`) moves the base the LATER segments resolve against, as a
|
|
28
|
+
* candidate SET (`&&` proves a move, nothing else does), and gives `PWD` / `OLDPWD` their values; a loop body with
|
|
29
|
+
* a base move is replayed per LITERAL beat and otherwise loses the base for what follows.
|
|
30
30
|
* Every ambiguity resolves toward MORE candidates, never fewer.
|
|
31
31
|
*/
|
|
32
32
|
import { type LenientConnector, type LexedRedirect, type LexedWord } from "../../shell/lex.js";
|
|
@@ -47,6 +47,9 @@ export interface ShellReadDeclarations {
|
|
|
47
47
|
readonly cwd: string;
|
|
48
48
|
readonly roots: readonly string[];
|
|
49
49
|
readonly face?: "open" | "roots";
|
|
50
|
+
/** The `CDPATH` the shell starts with (the environment's declared one, `ExecutionEnv.cdPath`; a bare relative `cd` is
|
|
51
|
+
* searched through it): absent ⇒ none declared, read as unset; `unknown` ⇒ the text cannot know it. */
|
|
52
|
+
readonly cdPath?: readonly string[] | "unknown";
|
|
50
53
|
}
|
|
51
54
|
export interface ReadCandidate {
|
|
52
55
|
/** The folded word (quotes removed, a literal leading tilde spelled `./~`) — a pattern's name where nothing matches. */
|
|
@@ -70,10 +73,10 @@ export interface ReadCandidate {
|
|
|
70
73
|
/** A home word the plan does not place (the text may rebind `HOME`, it sits in a value, or it is a literal tilde the
|
|
71
74
|
* program may expand itself): spelled with the DECLARED home. The judge reads it for deny rows ONLY. */
|
|
72
75
|
readonly floorSpelled?: string;
|
|
73
|
-
/**
|
|
76
|
+
/** Deny rows only (never containment): a `floorSpelled` shadow, or the read copy of a word the program only writes. */
|
|
74
77
|
readonly denyOnly?: true;
|
|
75
|
-
/** A WRITE target
|
|
76
|
-
*
|
|
78
|
+
/** A WRITE target (a `>`-family redirection, a `sed` `w` file, a file-writing command's operand): established like a
|
|
79
|
+
* read, judged on the WRITE face — the write deny rows, then the write roots where written — never as a read. */
|
|
77
80
|
readonly face?: "write";
|
|
78
81
|
/** A reading the station takes where no row says the program opens the word — a word of a program with no row, a
|
|
79
82
|
* role only another implementation reads — so the filesystem decides it: `containment` = the spelling always meets
|
|
@@ -129,6 +132,9 @@ export interface ShellReadSegment {
|
|
|
129
132
|
/** Substitution bodies, unquoted here-document substitutions, and re-entered shell text, each its own plan. */
|
|
130
133
|
readonly nested: readonly ShellReadPlan[];
|
|
131
134
|
readonly reach: SegmentReach;
|
|
135
|
+
/** The names a change that can reach this segment touched (`BindingTable.rebound`): any other name still holds what the
|
|
136
|
+
* shell provides here. `all`: any name may have changed. */
|
|
137
|
+
readonly rebound: ReadonlySet<string> | "all";
|
|
132
138
|
}
|
|
133
139
|
export interface ShellReadPlan {
|
|
134
140
|
readonly segments: readonly ShellReadSegment[];
|