@sema-agent/core 7.54.1 → 7.56.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/CHANGELOG.md +950 -0
- package/dist/agents/agent-transcript-tool.js +2 -1
- package/dist/agents/builtin-agents.d.ts +12 -14
- package/dist/agents/cascade.js +1 -1
- package/dist/agents/cc-peer-directory.d.ts +36 -0
- package/dist/agents/cc-peer-directory.js +139 -0
- package/dist/agents/cc-peer-wire.d.ts +105 -0
- package/dist/agents/cc-peer-wire.js +98 -0
- package/dist/agents/cc-uds-peer-channel.d.ts +40 -0
- package/dist/agents/cc-uds-peer-channel.js +457 -0
- package/dist/agents/child-model-seat.d.ts +0 -11
- package/dist/agents/child-model-seat.js +0 -3
- package/dist/agents/cross-session-envelope.d.ts +4 -1
- package/dist/agents/cross-session-envelope.js +8 -1
- package/dist/agents/cross-session-judge.d.ts +2 -2
- package/dist/agents/list-agents-tool.d.ts +3 -1
- package/dist/agents/list-agents-tool.js +9 -8
- package/dist/agents/observer.d.ts +4 -5
- package/dist/agents/observer.js +2 -1
- package/dist/agents/peer-admission.d.ts +6 -0
- package/dist/agents/peer-admission.js +4 -1
- package/dist/agents/peer-directory.d.ts +65 -13
- package/dist/agents/peer-directory.js +90 -25
- package/dist/agents/peer-notices.d.ts +1 -1
- package/dist/agents/peer-session-drain.d.ts +3 -1
- package/dist/agents/peer-session-drain.js +3 -2
- package/dist/agents/read-inbox-tool.js +2 -1
- package/dist/agents/repair-loop.js +2 -2
- package/dist/agents/retain-ledger.d.ts +1 -1
- package/dist/agents/roster-store.d.ts +1 -1
- package/dist/agents/send-message-tool.d.ts +10 -0
- package/dist/agents/send-message-tool.js +37 -8
- package/dist/agents/subagent.d.ts +39 -82
- package/dist/agents/subagent.js +109 -106
- package/dist/agents/tool-filter.d.ts +31 -46
- package/dist/agents/tool-filter.js +13 -33
- package/dist/agents/verify.d.ts +6 -5
- package/dist/agents/verify.js +3 -3
- package/dist/brain/anthropic.js +43 -81
- package/dist/brain/errors.d.ts +15 -0
- package/dist/brain/errors.js +10 -0
- package/dist/brain/media-degrade.d.ts +18 -7
- package/dist/brain/media-degrade.js +13 -2
- package/dist/brain/model-capability.d.ts +37 -0
- package/dist/brain/model-capability.js +34 -0
- package/dist/brain/model-presets.d.ts +6 -12
- package/dist/brain/model-presets.js +1 -6
- package/dist/brain/open-responses.js +27 -35
- package/dist/brain/openai.js +30 -98
- package/dist/brain/provider-dialect.d.ts +39 -3
- package/dist/brain/provider-dialect.js +28 -0
- package/dist/brain/reasoning-request.d.ts +96 -0
- package/dist/brain/reasoning-request.js +174 -0
- package/dist/brain/reasoning.d.ts +12 -12
- package/dist/brain/reasoning.js +4 -3
- package/dist/brain/request-params.d.ts +62 -9
- package/dist/brain/request-params.js +42 -7
- package/dist/brain/retry.d.ts +1 -1
- package/dist/brain/route-adjudicator.d.ts +15 -0
- package/dist/brain/route-adjudicator.js +15 -0
- package/dist/brain/status-sink.d.ts +20 -0
- package/dist/brain/status-sink.js +7 -0
- package/dist/brain/stream-engine.js +6 -5
- package/dist/brain/stream-shared.d.ts +1 -1
- package/dist/core/a2a.d.ts +2 -1
- package/dist/core/a2a.js +19 -13
- package/dist/core/advisor-verdict.d.ts +120 -0
- package/dist/core/advisor-verdict.js +92 -0
- package/dist/core/agent-definition.d.ts +17 -8
- package/dist/core/allow-entry.d.ts +69 -36
- package/dist/core/allow-entry.js +81 -52
- package/dist/core/allow-rule-shadow.d.ts +10 -3
- package/dist/core/approval-object.d.ts +2 -1
- package/dist/core/approval-object.js +6 -6
- package/dist/core/ask-origin.d.ts +127 -29
- package/dist/core/ask-origin.js +87 -25
- package/dist/core/ask-question.d.ts +51 -8
- package/dist/core/ask-question.js +12 -7
- package/dist/core/ask-unresolvable-notice.d.ts +8 -3
- package/dist/core/ask-unresolvable-notice.js +16 -2
- package/dist/core/auto-compaction.d.ts +11 -8
- package/dist/core/auto-compaction.js +4 -2
- package/dist/core/auto-mode-arming.d.ts +2 -2
- package/dist/core/auto-mode-defaults.d.ts +8 -8
- package/dist/core/auto-mode-prompt-assets.d.ts +3 -3
- package/dist/core/auto-mode-prompt.d.ts +1 -1
- package/dist/core/auto-mode.d.ts +17 -9
- package/dist/core/auto-mode.js +9 -6
- package/dist/core/background-agent-store.d.ts +3 -3
- package/dist/core/canonical-json.d.ts +1 -1
- package/dist/core/canonical-json.js +2 -2
- package/dist/core/checkpoint-generation.d.ts +53 -0
- package/dist/core/checkpoint-generation.js +35 -0
- package/dist/core/checkpoint-queries.d.ts +180 -0
- package/dist/core/checkpoint-queries.js +272 -0
- package/dist/core/checkpoint-requirements.d.ts +19 -4
- package/dist/core/checkpoint-requirements.js +8 -14
- package/dist/core/checkpoint-store.d.ts +165 -72
- package/dist/core/checkpoint-store.js +79 -82
- package/dist/core/child-clamp-seats.d.ts +6 -0
- package/dist/core/child-clamp-seats.js +3 -16
- package/dist/core/compliance.d.ts +2 -2
- package/dist/core/context-edit.d.ts +6 -7
- package/dist/core/cross-boundary-taint.d.ts +11 -4
- package/dist/core/cross-boundary-taint.js +3 -3
- package/dist/core/decision-receipt.d.ts +37 -3
- package/dist/core/decision-receipt.js +19 -19
- package/dist/core/delegation-not-started.d.ts +6 -0
- package/dist/core/delegation-not-started.js +17 -0
- package/dist/core/effective-path-target.d.ts +1 -1
- package/dist/core/engine-attestation.d.ts +93 -0
- package/dist/core/engine-attestation.js +70 -0
- package/dist/core/engine-capabilities.d.ts +4 -1
- package/dist/core/engine-capabilities.js +1 -1
- package/dist/core/engine-notice.d.ts +45 -12
- package/dist/core/exec-output-tail.d.ts +1 -1
- package/dist/core/file-history-retention.d.ts +1 -1
- package/dist/core/file-history-store.d.ts +147 -21
- package/dist/core/file-history-store.js +58 -32
- package/dist/core/gate-fold.d.ts +1 -1
- package/dist/core/gate-fold.js +24 -11
- package/dist/core/gate-lanes.js +81 -68
- package/dist/core/gate-outcome.d.ts +40 -6
- package/dist/core/gate-outcome.js +56 -0
- package/dist/core/governance-codes.d.ts +17 -3
- package/dist/core/governance-codes.js +16 -0
- package/dist/core/hands-band.d.ts +1 -1
- package/dist/core/hooks.d.ts +21 -20
- package/dist/core/hooks.js +3 -1
- package/dist/core/host-floor.d.ts +128 -0
- package/dist/core/host-floor.js +206 -0
- package/dist/core/host-target.d.ts +84 -0
- package/dist/core/host-target.js +92 -0
- package/dist/core/image-downsample.d.ts +1 -1
- package/dist/core/lsp-diagnostics.d.ts +4 -4
- package/dist/core/lsp.d.ts +3 -3
- package/dist/core/mailbox-store.d.ts +4 -0
- package/dist/core/mcp-connection-pool.d.ts +18 -2
- package/dist/core/mcp-connection-pool.js +53 -6
- package/dist/core/mcp-failure.d.ts +23 -4
- package/dist/core/mcp-failure.js +26 -11
- package/dist/core/mcp-listing-drift.d.ts +10 -0
- package/dist/core/mcp-listing-drift.js +6 -0
- package/dist/core/mcp-server-link.d.ts +173 -0
- package/dist/core/mcp-server-link.js +127 -0
- package/dist/core/mcp-server-spec.d.ts +4 -2
- package/dist/core/mcp-session-end.d.ts +26 -0
- package/dist/core/mcp-session-end.js +29 -0
- package/dist/core/mcp-startup-request.d.ts +17 -0
- package/dist/core/mcp-startup-request.js +17 -0
- package/dist/core/mcp.d.ts +17 -13
- package/dist/core/mcp.js +240 -189
- package/dist/core/media-byte-cap.d.ts +1 -1
- package/dist/core/memory-engine/delegation-settlement.js +15 -24
- package/dist/core/memory-engine/engine.d.ts +9 -9
- package/dist/core/memory-engine/engine.js +4 -4
- package/dist/core/memory-engine/layout.d.ts +60 -8
- package/dist/core/memory-engine/layout.js +65 -6
- package/dist/core/memory-engine/provenance-wording.d.ts +1 -1
- package/dist/core/memory-engine/tools.js +4 -1
- package/dist/core/mode-policy.d.ts +1 -1
- package/dist/core/model-seat.d.ts +10 -3
- package/dist/core/mods/classic-events.d.ts +67 -0
- package/dist/core/mods/classic-events.js +1 -0
- package/dist/core/mods/dollar.d.ts +13 -0
- package/dist/core/mods/extension-call.d.ts +31 -0
- package/dist/core/mods/extension-call.js +43 -0
- package/dist/core/mods/kernel/dispatch.d.ts +20 -3
- package/dist/core/mods/kernel/dispatch.js +140 -69
- package/dist/core/mods/kernel/events.d.ts +47 -11
- package/dist/core/mods/kernel/events.js +66 -42
- package/dist/core/mods/kernel/index.d.ts +4 -4
- package/dist/core/mods/kernel/index.js +2 -2
- package/dist/core/mods/kernel/receive.d.ts +39 -5
- package/dist/core/mods/kernel/receive.js +290 -17
- package/dist/core/mods/kernel/registration.d.ts +33 -2
- package/dist/core/mods/kernel/registration.js +6 -7
- package/dist/core/mods/kernel/site-rules.d.ts +44 -16
- package/dist/core/mods/kernel/site-rules.js +24 -42
- package/dist/core/mods/spec-seats.d.ts +69 -0
- package/dist/core/mods/spec-seats.js +114 -0
- package/dist/core/mods/stations.d.ts +28 -8
- package/dist/core/mods/stations.js +29 -13
- package/dist/core/mods/tool-call.d.ts +79 -0
- package/dist/core/mods/tool-call.js +152 -0
- package/dist/core/namespaced-rule-name.d.ts +44 -24
- package/dist/core/namespaced-rule-name.js +50 -43
- package/dist/core/output-style.d.ts +1 -1
- package/dist/core/param-rule-reach.d.ts +15 -0
- package/dist/core/param-rule-reach.js +30 -0
- package/dist/core/parent-spec-seat.d.ts +13 -1
- package/dist/core/parent-spec-seat.js +6 -0
- package/dist/core/park-selfcheck.js +1 -0
- package/dist/core/pause-registry.d.ts +16 -5
- package/dist/core/pause-registry.js +6 -2
- package/dist/core/peer-channel.d.ts +70 -0
- package/dist/core/peer-channel.js +1 -0
- package/dist/core/permission-rule-consent.d.ts +30 -5
- package/dist/core/permission-rule-consent.js +147 -50
- package/dist/core/permission-rule-model.d.ts +245 -65
- package/dist/core/permission-rule-model.js +421 -107
- package/dist/core/permission-rule-org.d.ts +6 -2
- package/dist/core/permission-rule-org.js +7 -3
- package/dist/core/permission-rule-provider.d.ts +6 -2
- package/dist/core/permission-rule-provider.js +41 -11
- package/dist/core/permission-rule-store.d.ts +22 -26
- package/dist/core/permission-rule-store.js +12 -6
- package/dist/core/permission-rule-sync.d.ts +11 -2
- package/dist/core/permission-rule-sync.js +11 -3
- package/dist/core/permission-rule-syntax.d.ts +5 -4
- package/dist/core/permission-rule-syntax.js +2 -2
- package/dist/core/permission-rules.d.ts +53 -15
- package/dist/core/permission-rules.js +125 -100
- package/dist/core/persisted-rule-arms.d.ts +6 -4
- package/dist/core/persisted-rule-arms.js +10 -12
- package/dist/core/present-plan-tool.js +3 -1
- package/dist/core/principal-name.d.ts +20 -0
- package/dist/core/principal-name.js +22 -0
- package/dist/core/prompt-section-seat.js +4 -6
- package/dist/core/protocol-http-auth.d.ts +26 -5
- package/dist/core/protocol-http-auth.js +137 -4
- package/dist/core/protocol-naming.d.ts +2 -2
- package/dist/core/read-only-shell-table.d.ts +1 -1
- package/dist/core/read-only-shell.d.ts +1 -1
- package/dist/core/retired-keys.d.ts +16 -0
- package/dist/core/retired-keys.js +16 -4
- package/dist/core/rewrite-rejudge.d.ts +60 -0
- package/dist/core/rewrite-rejudge.js +36 -0
- package/dist/core/roles.d.ts +34 -3
- package/dist/core/roles.js +66 -53
- package/dist/core/rule-lane-reads.d.ts +20 -15
- package/dist/core/rule-lane-reads.js +45 -17
- package/dist/core/rule-offer-read.d.ts +53 -0
- package/dist/core/rule-offer-read.js +146 -0
- package/dist/core/rule-owner.d.ts +46 -0
- package/dist/core/rule-owner.js +29 -0
- package/dist/core/runner/advisor-instructions.d.ts +70 -0
- package/dist/core/runner/advisor-instructions.js +61 -0
- package/dist/core/runner/advisor-tool.d.ts +33 -0
- package/dist/core/runner/advisor-tool.js +112 -0
- package/dist/core/runner/announce-once-ledger.d.ts +18 -26
- package/dist/core/runner/announce-once-ledger.js +19 -46
- package/dist/core/runner/approval-feedback.js +6 -3
- package/dist/core/runner/assemble-result.d.ts +2 -1
- package/dist/core/runner/assemble-result.js +1 -1
- package/dist/core/runner/call-hook-stations.d.ts +3 -2
- package/dist/core/runner/caller-roster.d.ts +21 -2
- package/dist/core/runner/caller-roster.js +38 -0
- package/dist/core/runner/capability-withheld-seat.d.ts +5 -0
- package/dist/core/runner/capability-withheld-seat.js +24 -0
- package/dist/core/runner/classifier-ladder.d.ts +33 -13
- package/dist/core/runner/classifier-ladder.js +15 -14
- package/dist/core/runner/compaction-restate.d.ts +10 -6
- package/dist/core/runner/compaction-restate.js +9 -3
- package/dist/core/runner/construction-doors.js +3 -0
- package/dist/core/runner/contracts.d.ts +40 -33
- package/dist/core/runner/conversation-segment.d.ts +28 -0
- package/dist/core/runner/conversation-segment.js +42 -0
- package/dist/core/runner/cross-boundary-lane.d.ts +21 -16
- package/dist/core/runner/cross-boundary-lane.js +58 -34
- package/dist/core/runner/decide-continuation.d.ts +7 -4
- package/dist/core/runner/decide-continuation.js +2 -2
- package/dist/core/runner/denial-limit-arms.d.ts +4 -4
- package/dist/core/runner/denial-limit-arms.js +1 -1
- package/dist/core/runner/derived-route-fallback.d.ts +24 -24
- package/dist/core/runner/derived-route-fallback.js +9 -7
- package/dist/core/runner/file-history-request.d.ts +18 -0
- package/dist/core/runner/file-history-request.js +21 -13
- package/dist/core/runner/file-history-restore.d.ts +45 -0
- package/dist/core/runner/file-history-restore.js +46 -0
- package/dist/core/runner/gate-exit.d.ts +9 -3
- package/dist/core/runner/gate-exit.js +11 -5
- package/dist/core/runner/image.d.ts +7 -17
- package/dist/core/runner/image.js +9 -60
- package/dist/core/runner/initial-run-state.js +1 -1
- package/dist/core/runner/permission-rule-lanes.d.ts +6 -6
- package/dist/core/runner/permission-rule-lanes.js +38 -15
- package/dist/core/runner/person-path-rows.d.ts +12 -9
- package/dist/core/runner/person-path-rows.js +19 -8
- package/dist/core/runner/prepare-advisor.d.ts +63 -0
- package/dist/core/runner/prepare-advisor.js +77 -0
- package/dist/core/runner/prepare-ask-lane.d.ts +2 -2
- package/dist/core/runner/prepare-ask-lane.js +5 -2
- package/dist/core/runner/prepare-caps-and-workflow.d.ts +4 -6
- package/dist/core/runner/prepare-caps-and-workflow.js +5 -4
- package/dist/core/runner/prepare-config-doors.d.ts +31 -38
- package/dist/core/runner/prepare-config-doors.js +57 -34
- package/dist/core/runner/prepare-defer-classify.d.ts +4 -3
- package/dist/core/runner/prepare-defer-classify.js +7 -8
- package/dist/core/runner/prepare-delegation-surface.d.ts +2 -2
- package/dist/core/runner/prepare-delegation-surface.js +1 -1
- package/dist/core/runner/prepare-file-history.d.ts +48 -8
- package/dist/core/runner/prepare-file-history.js +41 -73
- package/dist/core/runner/prepare-gate-stations.d.ts +2 -5
- package/dist/core/runner/prepare-gate-stations.js +12 -8
- package/dist/core/runner/prepare-hands-readface.d.ts +2 -8
- package/dist/core/runner/prepare-hands-readface.js +15 -14
- package/dist/core/runner/prepare-inherited-gate.d.ts +11 -7
- package/dist/core/runner/prepare-inherited-gate.js +8 -6
- package/dist/core/runner/prepare-memory-engine-session.js +1 -1
- package/dist/core/runner/prepare-park-ask.js +12 -12
- package/dist/core/runner/prepare-policy-chain.d.ts +7 -4
- package/dist/core/runner/prepare-policy-chain.js +68 -81
- package/dist/core/runner/prepare-project-context.d.ts +5 -2
- package/dist/core/runner/prepare-project-context.js +6 -3
- package/dist/core/runner/prepare-prompt-assembly.d.ts +5 -7
- package/dist/core/runner/prepare-prompt-assembly.js +10 -8
- package/dist/core/runner/prepare-prompt-inputs.d.ts +11 -9
- package/dist/core/runner/prepare-prompt-inputs.js +4 -6
- package/dist/core/runner/prepare-protocol-tools.d.ts +4 -2
- package/dist/core/runner/prepare-protocol-tools.js +5 -4
- package/dist/core/runner/prepare-safety-scan.d.ts +9 -12
- package/dist/core/runner/prepare-safety-scan.js +8 -23
- package/dist/core/runner/prepare-suspend-saga.d.ts +2 -0
- package/dist/core/runner/prepare-suspend-saga.js +5 -6
- package/dist/core/runner/prepare-task.d.ts +1 -1
- package/dist/core/runner/prepare-task.js +41 -35
- package/dist/core/runner/prepare-tool-disclosure-mount.d.ts +7 -4
- package/dist/core/runner/prepare-tool-disclosure-mount.js +24 -18
- package/dist/core/runner/prepare-turn-wiring.d.ts +0 -4
- package/dist/core/runner/prepare-turn-wiring.js +2 -7
- package/dist/core/runner/prepare-wiring-manifest.d.ts +11 -4
- package/dist/core/runner/prepare-wiring-manifest.js +3 -3
- package/dist/core/runner/resume-admission.js +1 -1
- package/dist/core/runner/resume-apply.js +11 -12
- package/dist/core/runner/resume-checkpoint-screen.js +3 -0
- package/dist/core/runner/resume-claim.d.ts +4 -2
- package/dist/core/runner/resume-claim.js +15 -8
- package/dist/core/runner/resume-policy-outcome.js +1 -1
- package/dist/core/runner/retired-runner-deps.js +2 -1
- package/dist/core/runner/rewind-files.d.ts +15 -0
- package/dist/core/runner/rewind-files.js +132 -0
- package/dist/core/runner/run-attachment-seats.js +2 -2
- package/dist/core/runner/run-brain-sinks.d.ts +4 -1
- package/dist/core/runner/run-brain-sinks.js +4 -2
- package/dist/core/runner/run-compaction-machinery.d.ts +1 -1
- package/dist/core/runner/run-compaction-machinery.js +2 -12
- package/dist/core/runner/run-git-lane.d.ts +1 -0
- package/dist/core/runner/run-harness-handlers.js +14 -7
- package/dist/core/runner/run-leg.d.ts +1 -1
- package/dist/core/runner/run-leg.js +43 -18
- package/dist/core/runner/run-settle-and-teardown.js +3 -2
- package/dist/core/runner/run-telemetry-and-budget-seats.js +1 -1
- package/dist/core/runner/run-turn-boundary.d.ts +1 -0
- package/dist/core/runner/run-turn-boundary.js +15 -22
- package/dist/core/runner/runtask.d.ts +3 -0
- package/dist/core/runner/runtask.js +8 -9
- package/dist/core/runner/session-read-file-states.d.ts +15 -0
- package/dist/core/runner/session-read-file-states.js +28 -0
- package/dist/core/runner/session-rule-policy.d.ts +22 -21
- package/dist/core/runner/session-rule-policy.js +17 -31
- package/dist/core/runner/shell-env-withheld.d.ts +33 -0
- package/dist/core/runner/shell-env-withheld.js +51 -0
- package/dist/core/runner/side-call-account.d.ts +32 -8
- package/dist/core/runner/side-call-account.js +23 -1
- package/dist/core/runner/skills-seat.js +6 -2
- package/dist/core/runner/stream-settle-backstop.js +1 -1
- package/dist/core/runner/strict-output-schema.d.ts +1 -1
- package/dist/core/runner/sub-agent-deny-lists.js +4 -6
- package/dist/core/runner/synthetic-tools.d.ts +16 -13
- package/dist/core/runner/synthetic-tools.js +8 -3
- package/dist/core/runner/tool-disclosure.d.ts +10 -12
- package/dist/core/runner/tool-disclosure.js +3 -4
- package/dist/core/runner/tool-end-body.d.ts +1 -1
- package/dist/core/runner/tool-end-body.js +10 -9
- package/dist/core/runner/tool-face-overlay.d.ts +2 -1
- package/dist/core/runner/tool-face-overlay.js +17 -1
- package/dist/core/runner/tool-not-executed.d.ts +5 -0
- package/dist/core/runner/tool-not-executed.js +11 -0
- package/dist/core/runner/tool-occurrence.d.ts +8 -0
- package/dist/core/runner/tool-occurrence.js +7 -0
- package/dist/core/runner/tool-progress-lane.d.ts +2 -2
- package/dist/core/runner/tool-turn-repair-seat.d.ts +3 -2
- package/dist/core/runner/turn-attachments.d.ts +91 -80
- package/dist/core/runner/turn-attachments.js +62 -37
- package/dist/core/runner-deps.d.ts +42 -42
- package/dist/core/runtime-caps.d.ts +4 -4
- package/dist/core/safety-axis-vocab.d.ts +6 -4
- package/dist/core/safety-axis-vocab.js +6 -5
- package/dist/core/safety-merge-corpus.js +26 -2
- package/dist/core/same-plain-value.d.ts +40 -0
- package/dist/core/same-plain-value.js +49 -0
- package/dist/core/scheduler.d.ts +1 -1
- package/dist/core/secret-env.d.ts +26 -3
- package/dist/core/secret-env.js +44 -8
- package/dist/core/select-model.js +3 -3
- package/dist/core/sensitive-path-policy.d.ts +1 -1
- package/dist/core/sensitive-path-policy.js +1 -1
- package/dist/core/session-policy-store.d.ts +102 -35
- package/dist/core/session-policy-store.js +210 -48
- package/dist/core/session-reconcile.d.ts +2 -2
- package/dist/core/session-store.d.ts +106 -37
- package/dist/core/session-store.js +165 -91
- package/dist/core/session.d.ts +101 -57
- package/dist/core/session.js +53 -0
- package/dist/core/shared-memory/tools.js +3 -1
- package/dist/core/shared-memory/types.d.ts +1 -1
- package/dist/core/shell-read-silence.d.ts +11 -12
- package/dist/core/shell-read-silence.js +9 -5
- package/dist/core/shell-run-candidates.js +3 -1
- package/dist/core/shell-wrapper-projection.js +1 -1
- package/dist/core/shell-wrapper-table.d.ts +14 -7
- package/dist/core/shell-wrapper-table.js +5 -4
- package/dist/core/side-query.d.ts +10 -0
- package/dist/core/side-query.js +15 -1
- package/dist/core/skill-grant.d.ts +7 -2
- package/dist/core/skill-grant.js +5 -0
- package/dist/core/skills-directory.js +6 -2
- package/dist/core/store-contracts/checkpoint-store-contract.d.ts +11 -1
- package/dist/core/store-contracts/checkpoint-store-contract.js +168 -3
- package/dist/core/store-contracts/file-history-store-contract.js +74 -4
- package/dist/core/store-contracts/peer-directory-contract.d.ts +7 -2
- package/dist/core/store-contracts/peer-directory-contract.js +14 -2
- package/dist/core/store-contracts/session-policy-store-contract.d.ts +7 -0
- package/dist/core/store-contracts/session-policy-store-contract.js +130 -0
- package/dist/core/store-contracts/session-repo-contract.js +176 -0
- package/dist/core/store-contracts/session-store-contract.d.ts +6 -8
- package/dist/core/store-contracts/session-store-contract.js +361 -51
- package/dist/core/store-contracts/workflow-journal-store-contract.js +26 -1
- package/dist/core/stub-env.d.ts +2 -0
- package/dist/core/stub-env.js +1 -0
- package/dist/core/surrogate-safe-slice.d.ts +3 -3
- package/dist/core/synthetic-read-verdict.js +3 -3
- package/dist/core/task-event.d.ts +42 -8
- package/dist/core/task-notification.d.ts +19 -15
- package/dist/core/task-registry-agent.d.ts +4 -4
- package/dist/core/task-registry-shared.d.ts +4 -4
- package/dist/core/task-registry-shared.js +1 -0
- package/dist/core/task-registry.d.ts +13 -4
- package/dist/core/task-registry.js +14 -2
- package/dist/core/task-result.d.ts +21 -3
- package/dist/core/task-spec.d.ts +69 -64
- package/dist/core/task-stream.d.ts +6 -6
- package/dist/core/task-tool-shape.d.ts +4 -4
- package/dist/core/tighten-task-spec.d.ts +1 -1
- package/dist/core/tighten-task-spec.js +2 -1
- package/dist/core/tool-catalog-entries.d.ts +36 -2
- package/dist/core/tool-catalog-entries.js +69 -43
- package/dist/core/tool-check-reading.d.ts +11 -0
- package/dist/core/tool-check-reading.js +11 -6
- package/dist/core/tool-conformance.js +1 -0
- package/dist/core/tool-errors.d.ts +2 -2
- package/dist/core/tool-face-reader.js +5 -3
- package/dist/core/tool-face.d.ts +21 -2
- package/dist/core/tool-face.js +1 -1
- package/dist/core/tool-model-gate.d.ts +5 -5
- package/dist/core/tool-name-aliases.d.ts +29 -8
- package/dist/core/tool-name-aliases.js +22 -4
- package/dist/core/tool-name-readings.d.ts +10 -43
- package/dist/core/tool-name-readings.js +2 -11
- package/dist/core/tool-policy.d.ts +85 -196
- package/dist/core/tool-policy.js +150 -175
- package/dist/core/tool-registry.d.ts +14 -7
- package/dist/core/tool-registry.js +17 -7
- package/dist/core/tool-result-store.js +5 -1
- package/dist/core/tool-roster.d.ts +57 -33
- package/dist/core/tool-roster.js +56 -68
- package/dist/core/tool-spec-members.js +8 -3
- package/dist/core/tool-spec.d.ts +53 -31
- package/dist/core/tools.js +51 -10
- package/dist/core/trace.d.ts +6 -2
- package/dist/core/types.d.ts +1 -1
- package/dist/core/untrusted-egress.d.ts +1 -1
- package/dist/core/untrusted-text.d.ts +1 -1
- package/dist/core/user-attachment.d.ts +8 -1
- package/dist/core/user-attachment.js +64 -4
- package/dist/core/warm-resume.d.ts +1 -1
- package/dist/core/wiring-manifest.d.ts +58 -0
- package/dist/core/wiring-manifest.js +14 -5
- package/dist/core/workflow-journal-store.d.ts +62 -0
- package/dist/core/workflow-journal-store.js +78 -2
- package/dist/core/workflow-run-store.d.ts +6 -0
- package/dist/core/workflow-run-store.js +2 -0
- package/dist/engine/compaction/compaction.d.ts +9 -9
- package/dist/engine/compaction/compaction.js +3 -2
- package/dist/engine/execution-env/node-execution-env.d.ts +26 -8
- package/dist/engine/execution-env/node-execution-env.js +54 -24
- package/dist/engine/harness/agent-harness.d.ts +39 -9
- package/dist/engine/harness/agent-harness.js +87 -33
- package/dist/engine/harness/types.d.ts +58 -9
- package/dist/engine/harness/types.js +12 -1
- package/dist/engine/llm/types.d.ts +36 -19
- package/dist/engine/llm/validation.d.ts +4 -1
- package/dist/engine/llm/validation.js +13 -1
- package/dist/engine/loop/agent-loop.d.ts +23 -1
- package/dist/engine/loop/agent-loop.js +26 -34
- package/dist/engine/loop/types.d.ts +31 -19
- package/dist/engine/lsp/node-lsp-manager.d.ts +2 -2
- package/dist/engine/session/memory-repo.d.ts +18 -12
- package/dist/engine/session/memory-repo.js +24 -9
- package/dist/engine/session/parent-chain-guard.d.ts +3 -2
- package/dist/engine/session/parent-chain-guard.js +1 -1
- package/dist/engine/session/repo-utils.d.ts +32 -3
- package/dist/engine/session/repo-utils.js +50 -5
- package/dist/index.d.ts +47 -23
- package/dist/index.js +35 -17
- package/dist/internal/harness-types.d.ts +1 -1
- package/dist/internal/harness.d.ts +3 -3
- package/dist/internal/harness.js +2 -2
- package/dist/internal/llm.d.ts +2 -2
- package/dist/internal/llm.js +1 -1
- package/dist/orchestration/goal.js +2 -2
- package/dist/orchestration/run-workflow-tool.d.ts +8 -6
- package/dist/orchestration/run-workflow-tool.js +10 -6
- package/dist/orchestration/workflow-size-guideline.d.ts +4 -4
- package/dist/orchestration/workflow-types.d.ts +18 -0
- package/dist/orchestration/workflow-types.js +6 -0
- package/dist/orchestration/workflow.d.ts +5 -13
- package/dist/orchestration/workflow.js +57 -49
- package/dist/prompt-assembly/artifact.d.ts +2 -2
- package/dist/prompt-assembly/artifact.js +5 -3
- package/dist/prompt-assembly/assemble.d.ts +3 -2
- package/dist/prompt-assembly/assemble.js +1 -1
- package/dist/prompt-assembly/catalog/schema.d.ts +43 -12
- package/dist/prompt-assembly/catalog/schema.js +34 -2
- package/dist/prompt-assembly/catalog/sections.js +0 -1
- package/dist/prompt-assembly/composer.d.ts +3 -1
- package/dist/prompt-assembly/composer.js +1 -1
- package/dist/prompt-assembly/event-registry.js +2 -0
- package/dist/prompt-assembly/overlay.js +3 -3
- package/dist/prompt-assembly/renderers.d.ts +1 -1
- package/dist/prompt-assembly/renderers.js +0 -3
- package/dist/prompt-assembly/role-base.d.ts +15 -0
- package/dist/prompt-assembly/role-base.js +9 -0
- package/dist/prompt-assembly/select.d.ts +39 -14
- package/dist/prompt-assembly/select.js +47 -16
- package/dist/prompt-assembly/sugar.d.ts +17 -11
- package/dist/prompt-assembly/sugar.js +8 -3
- package/dist/prompt-assembly/tool-catalog.d.ts +39 -2
- package/dist/prompt-assembly/tool-catalog.js +117 -4
- package/dist/prompt-assembly/turn-snapshot.d.ts +4 -10
- package/dist/prompt-assembly/turn-snapshot.js +0 -3
- package/dist/prompt-assembly/types.d.ts +0 -7
- package/dist/prompts/default.d.ts +14 -14
- package/dist/scenarios/full-body.d.ts +15 -15
- package/dist/scenarios/full-body.js +4 -3
- package/dist/shell/lex.js +10 -1
- package/dist/stores/file/adoption/adopt.d.ts +4 -3
- package/dist/stores/file/adoption/adopt.js +27 -33
- package/dist/stores/file/adoption/marker.d.ts +6 -13
- package/dist/stores/file/adoption/marker.js +9 -17
- package/dist/stores/file/checkpoint-store.d.ts +24 -0
- package/dist/stores/file/checkpoint-store.js +45 -7
- package/dist/stores/file/file-history-store.d.ts +20 -19
- package/dist/stores/file/file-history-store.js +157 -141
- package/dist/stores/file/fs-atomic.d.ts +15 -0
- package/dist/stores/file/fs-atomic.js +89 -14
- package/dist/stores/file/index.d.ts +1 -1
- package/dist/stores/file/index.js +2 -1
- package/dist/stores/file/mailbox-store.d.ts +3 -0
- package/dist/stores/file/mailbox-store.js +3 -1
- package/dist/stores/file/permission-rule-adopt.d.ts +1 -1
- package/dist/stores/file/permission-rule-adopt.js +18 -18
- package/dist/stores/file/permission-rule-store.d.ts +18 -2
- package/dist/stores/file/permission-rule-store.js +31 -18
- package/dist/stores/file/session-policy-store.d.ts +3 -3
- package/dist/stores/file/session-store.d.ts +54 -16
- package/dist/stores/file/session-store.js +114 -85
- package/dist/stores/file/workflow-journal-store.d.ts +10 -4
- package/dist/stores/file/workflow-journal-store.js +28 -13
- package/dist/tools/artifact/artifact-text.d.ts +1 -1
- package/dist/tools/artifact/artifact-tool.js +5 -3
- package/dist/tools/fs/bash-program-position.d.ts +19 -2
- package/dist/tools/fs/bash-program-position.js +56 -9
- package/dist/tools/fs/bash-readonly-classifier.d.ts +3 -3
- package/dist/tools/fs/fs-bash.d.ts +2 -2
- package/dist/tools/fs/fs-bash.js +8 -6
- package/dist/tools/fs/fs-glob.d.ts +86 -0
- package/dist/tools/fs/fs-glob.js +226 -0
- package/dist/tools/fs/fs-read.js +14 -14
- package/dist/tools/fs/fs-search-tools.js +7 -7
- package/dist/tools/fs/fs-shared.d.ts +8 -8
- package/dist/tools/fs/gh-rate-limit.d.ts +1 -1
- package/dist/tools/fs/notebook.d.ts +2 -2
- package/dist/tools/fs/pattern-kill-guard.d.ts +22 -0
- package/dist/tools/fs/pattern-kill-guard.js +397 -0
- package/dist/tools/fs/pdf.d.ts +9 -6
- package/dist/tools/fs/pdf.js +3 -3
- package/dist/tools/fs/program-read-model.d.ts +57 -7
- package/dist/tools/fs/program-read-model.js +11 -1
- package/dist/tools/fs/program-read-model.rows.js +78 -21
- package/dist/tools/fs/read-deny-home.js +3 -2
- package/dist/tools/fs/read-deny.d.ts +29 -7
- package/dist/tools/fs/read-deny.js +63 -22
- package/dist/tools/fs/removal-targets.d.ts +18 -8
- package/dist/tools/fs/removal-targets.js +47 -20
- package/dist/tools/fs/safety.d.ts +9 -9
- package/dist/tools/fs/search.d.ts +16 -6
- package/dist/tools/fs/search.js +20 -26
- package/dist/tools/fs/shell-read-argv.js +89 -12
- package/dist/tools/fs/shell-read-bindings.d.ts +31 -0
- package/dist/tools/fs/shell-read-bindings.js +41 -0
- package/dist/tools/fs/shell-read-check.js +12 -20
- package/dist/tools/fs/shell-read-environment.d.ts +5 -1
- package/dist/tools/fs/shell-read-environment.js +3 -2
- package/dist/tools/fs/shell-read-establish.d.ts +15 -0
- package/dist/tools/fs/shell-read-establish.js +19 -20
- package/dist/tools/fs/shell-read-judge.d.ts +4 -0
- package/dist/tools/fs/shell-read-judge.js +5 -2
- package/dist/tools/fs/shell-read-plan.js +24 -16
- package/dist/tools/fs/shell-read-start.d.ts +6 -1
- package/dist/tools/fs/shell-read-write-targets.d.ts +5 -1
- package/dist/tools/fs/shell-read-write-targets.js +2 -3
- package/dist/tools/fs/shell-reentry-text.d.ts +9 -0
- package/dist/tools/fs/shell-reentry-text.js +40 -2
- package/dist/tools/loop-tick.d.ts +2 -2
- package/dist/tools/scheduler-tools.js +5 -1
- package/dist/tools/task-list.d.ts +7 -7
- package/dist/tools/task-list.js +5 -1
- package/dist/tools/todo.js +65 -64
- package/dist/tools/web.d.ts +20 -15
- package/dist/tools/web.js +55 -69
- package/dist/tools/worktree.d.ts +3 -3
- package/dist/tools/worktree.js +3 -1
- package/package.json +1 -1
- package/test/export-surface.snapshot.json +5894 -5638
- package/wire-changes/core@7.55.0.json +3318 -0
- package/wire-changes/core@7.56.0.json +3891 -0
- package/wire-changes/mods-kernel@7.56.0.json +303 -0
- package/dist/core/store-contracts/session-store-incarnation-contract.d.ts +0 -39
- package/dist/core/store-contracts/session-store-incarnation-contract.js +0 -95
|
@@ -15,7 +15,7 @@ import type { Brain, ModelRef, ModelRoles } from "./model-seat.js";
|
|
|
15
15
|
import type { RuntimeCaps, WorkflowGovernanceBaseline } from "./runtime-caps.js";
|
|
16
16
|
/**
|
|
17
17
|
* parity-204 — structured `RunnerDeps.loadProjectMemory` return (backward-compatible, RL-1336-project-memory-bare: a bare
|
|
18
|
-
* `string | null` keeps its exact historical meaning). Adds the
|
|
18
|
+
* `string | null` keeps its exact historical meaning). Adds the `seededFromContext`
|
|
19
19
|
* seam (cc204-bundle @17917159: CC preloads readFileState for CLAUDE.md/nested-memory files it
|
|
20
20
|
* placed in context, and a DEFAULT whole-file Read of an unchanged seeded file answers with the
|
|
21
21
|
* already-in-context reminder instead of re-transmitting the body — token economy, GA in 204).
|
|
@@ -27,7 +27,7 @@ export interface ProjectMemoryLoad {
|
|
|
27
27
|
* Files whose FULL, disk-verbatim text the deployment has placed in the model's context (e.g. the
|
|
28
28
|
* CLAUDE.md that `content` embeds). The Runner pre-seeds the hands' read state (through the same
|
|
29
29
|
* resolveKey containment as a real Read — an out-of-root path is silently skipped), so a default
|
|
30
|
-
* whole-file Read of an UNCHANGED seeded file returns the
|
|
30
|
+
* whole-file Read of an UNCHANGED seeded file returns the reminder
|
|
31
31
|
* (`This file is already in your context (see "Contents of <path>" above) and has not changed on
|
|
32
32
|
* disk…`) instead of the body. `content` here MUST be the file's exact disk text at load time —
|
|
33
33
|
* the unchanged check hashes it; never declare a truncated/annotated variant (CC's `isPartialView`
|
|
@@ -52,10 +52,8 @@ export interface ProjectMemoryLoad {
|
|
|
52
52
|
*/
|
|
53
53
|
instructionSources?: ReadonlyArray<{
|
|
54
54
|
path: string;
|
|
55
|
-
/**
|
|
56
|
-
*
|
|
57
|
-
* Runtime already handled null (collectInstructionsChange's from===null arm); this widening
|
|
58
|
-
* only aligns the declared type with the shipped behavior. */
|
|
55
|
+
/** `null` = the source is DECLARED but currently ABSENT from disk — the change probe then watches for
|
|
56
|
+
* its APPEARANCE (renders "absent → hash"). */
|
|
59
57
|
contentHash: string | null;
|
|
60
58
|
}>;
|
|
61
59
|
}
|
|
@@ -240,13 +238,13 @@ export interface RunnerDeps {
|
|
|
240
238
|
*/
|
|
241
239
|
agentConfigDir?: string;
|
|
242
240
|
/**
|
|
243
|
-
* backlog #286 (#279 —
|
|
241
|
+
* backlog #286 (#279 — `DANGEROUS_FILES`/`DANGEROUS_DIRECTORIES`/
|
|
244
242
|
* `DANGEROUS_DIRECTORY_PATHS` parity): the WRITE-protection table. DEFAULT-ON: a path-confinable
|
|
245
243
|
* write (Write/Edit/NotebookEdit) whose target lands on a table row has a surviving `allow`
|
|
246
244
|
* demoted to `ask` at the tool gate (`decisionReason: "safety"`; a deny/ask verdict is untouched;
|
|
247
245
|
* approval flows the ordinary ask-resolution chain — classifier, blanket `onAsk`, durable park —
|
|
248
246
|
* with no `requiresRealApproval` mandate). Absent =
|
|
249
|
-
* {@link import("./write-protect.js").WRITE_PROTECTED_DEFAULT_TABLE} (the
|
|
247
|
+
* {@link import("./write-protect.js").WRITE_PROTECTED_DEFAULT_TABLE} (the reference triple +
|
|
250
248
|
* the two argued sema rows). This key IS the whole-table escape hatch, deployment seat ONLY — the
|
|
251
249
|
* task layer's twin is add-only ({@link TaskSpec.writeProtectedAdditions}: its rows UNION this
|
|
252
250
|
* table and can remove none), and no governed-workflow channel reaches either: `[]` = no table (explicit and legal); a non-empty
|
|
@@ -545,6 +543,8 @@ export interface RunnerDeps {
|
|
|
545
543
|
fileHistoryStore?: import("./file-history-store.js").FileHistoryStore | "disabled";
|
|
546
544
|
/** The deployment's CAPTURE switch, apart from the store seat: `"off"` (the only word, and only beside a wired store; anything else refuses prepare, `config.invalid_file_history_capture`) ⇒ no run records — no first-touch record, no turn boundary, no fork carry, no liveness advisory, manifest `fileHistory: "disabled"` — while a wired {@link fileHistoryStore} still serves {@link TaskSpec.restoreFiles} / {@link TaskSpec.rewindFilesTo} from what it already holds. */
|
|
547
545
|
fileHistoryCapture?: "off";
|
|
546
|
+
/** The deployment's ADVISOR switch: `"disabled"` (the only word; anything else refuses prepare, `config.advisor_tool_invalid`) ⇒ no leg attaches the `advisor` tool and every {@link TaskSpec.advisorModel} is ignored unread — manifest `advisor: { state: "not_attached", reason: "disabled" }`, no notice. */
|
|
547
|
+
advisorTool?: "disabled";
|
|
548
548
|
/**
|
|
549
549
|
* design/381 DV-14 (终审落锤) — what an Edit/Write/NotebookEdit does when its FIRST-TOUCH history
|
|
550
550
|
* record cannot be persisted (`FileHistoryStore.trackEdit` answered `{ok:false}` = NO durable
|
|
@@ -563,13 +563,13 @@ export interface RunnerDeps {
|
|
|
563
563
|
*/
|
|
564
564
|
onTrackFailure?: "refuse" | "proceed-unprotected";
|
|
565
565
|
/**
|
|
566
|
-
* design/99 §E6 — DURABLE per-session permission rules (a deny-narrowing folded into the task-time tool
|
|
567
|
-
*
|
|
568
|
-
*
|
|
569
|
-
*
|
|
570
|
-
*
|
|
571
|
-
*
|
|
572
|
-
* honors the `operator` flag the
|
|
566
|
+
* design/99 §E6 — DURABLE per-session permission rules (a deny-narrowing folded into the task-time tool policy).
|
|
567
|
+
* Omitted ⇒ OFF (no rules read). A deployment's cross-replica backend matches the CAS-rev + tighten-only semantics of
|
|
568
|
+
* {@link import("./session-policy-store.js").InMemorySessionPolicyStore}. A task carrying its own `sessionId` has its
|
|
569
|
+
* rules re-read at every tool gate of its own AND of every delegated leg; a descendant reads the key from ITS runner's store,
|
|
570
|
+
* whichever that is — none ⇒ it keeps its spawn-time snapshot and announces `config.session_rules_unreadable`; a DIFFERENT
|
|
571
|
+
* store answers for the key itself, silently (no row there ⇒ nothing binds), so give delegation runners this same store.
|
|
572
|
+
* Composed BEFORE the caller policy, they only SUBTRACT capability. core does NOT verify owner/operator identity — the store honors the `operator` flag the caller freezes from a verified principal.
|
|
573
573
|
*/
|
|
574
574
|
sessionPolicyStore?: import("./session-policy-store.js").SessionPolicyStore;
|
|
575
575
|
/**
|
|
@@ -730,9 +730,9 @@ export interface RunnerDeps {
|
|
|
730
730
|
* engine-spawned child) AND this face is present AND the per-principal DENY bit is not set
|
|
731
731
|
* ({@link RuntimeCaps.autoMode}` !== false` — absent is not a denial).
|
|
732
732
|
*
|
|
733
|
-
* 🔐 Trust gate (the
|
|
733
|
+
* 🔐 Trust gate (the three-source invariant): classifier RULES enter EXCLUSIVELY
|
|
734
734
|
* here — a deployment-constructed object, never a `TaskSpec` field, never a repo-file plane. The
|
|
735
|
-
* prompt is assembled from the SHA-locked
|
|
735
|
+
* prompt is assembled from the SHA-locked reference assets (`buildAutoModePrompt`) with these
|
|
736
736
|
* rules merged CC-exactly (user rules replace a section; the `"$defaults"` sentinel splices the
|
|
737
737
|
* stock rules back in). The classify leg runs on the `classifier` role's model (fallback
|
|
738
738
|
* `summarize → default`; tier default `flash`) via the brain's simple-completion pipe — same
|
|
@@ -747,7 +747,7 @@ export interface RunnerDeps {
|
|
|
747
747
|
isolatePeers?: true;
|
|
748
748
|
};
|
|
749
749
|
autoMode?: {
|
|
750
|
-
/** Rule overrides for the four permissions sections (omitted section =
|
|
750
|
+
/** Rule overrides for the four permissions sections (omitted section = the defaults). */
|
|
751
751
|
rules?: import("./auto-mode-prompt.js").AutoModeRules;
|
|
752
752
|
/** Settings-plane deny rules rendered into the `<settings_deny_rules>` slot (circumvention catch). */
|
|
753
753
|
settingsDenyRules?: readonly string[];
|
|
@@ -784,7 +784,7 @@ export interface RunnerDeps {
|
|
|
784
784
|
*/
|
|
785
785
|
classifierFallback?: import("./auto-mode.js").AutoModeClassifierFallback;
|
|
786
786
|
/**
|
|
787
|
-
* The classifier DENIAL LIMIT
|
|
787
|
+
* The classifier DENIAL LIMIT: a run whose classifier keeps blocking falls
|
|
788
788
|
* back to a PERSON instead of being denied without end. Per run: a `block` first increments the
|
|
789
789
|
* consecutive and total counts and then judges `consecutive >= maxConsecutive || total >= maxTotal`
|
|
790
790
|
* — the block that reaches a bound is itself the one that becomes an `ask` (the 3rd consecutive
|
|
@@ -942,19 +942,19 @@ export interface RunnerDeps {
|
|
|
942
942
|
* `SendMessageToolOptions.lane` and into the session-box drain; read per call / per pass. */
|
|
943
943
|
peerLane?: Partial<import("../agents/peer-admission.js").PeerLaneConfig>;
|
|
944
944
|
/**
|
|
945
|
-
* design/385 §2.1 / §5.1 — the peer-session DIRECTORY: the discovery truth of the cross-session
|
|
946
|
-
*
|
|
947
|
-
*
|
|
948
|
-
*
|
|
949
|
-
*
|
|
950
|
-
*
|
|
951
|
-
*
|
|
952
|
-
*
|
|
953
|
-
*
|
|
954
|
-
* `crossProcessSafe: true`; otherwise the lane is REFUSED at prepare with a named
|
|
955
|
-
* `config.peer_lane_unmounted` notice (never mounted on luck), and the seat is inert for that run.
|
|
945
|
+
* design/385 §2.1 / §5.1 — the peer-session DIRECTORY: the discovery truth of the cross-session lane (other sessions
|
|
946
|
+
* of this engine for the same user). A HOST implements the contract (cli: the pid-keyed registration files; server: its
|
|
947
|
+
* session table) and writes the rows; the engine only reads them. Seat semantics = the mailbox seat's: NO seat, NO lane —
|
|
948
|
+
* every face stays byte-identical to a pre-385 build. With the seat wired the engine (a) mounts `ListAgents` (alias
|
|
949
|
+
* `ListPeers`), (b) opens SendMessage's `session.<id>` address arm and its last `name [ref]` rung, (c) drains this
|
|
950
|
+
* session's own `session.<sessionId>` box at every turn boundary (the mailbox contract's third consumption chain), and
|
|
951
|
+
* (d) splices the cross-session rule into the auto-mode classifier slot. HARD PRECONDITION (design/385 §1.2⑥):
|
|
952
|
+
* `mailboxStore` must be wired AND declare `crossProcessSafe: true`; otherwise the lane is REFUSED at prepare with a
|
|
953
|
+
* named `config.peer_lane_unmounted` notice (never mounted on luck), and the seat is inert for that run.
|
|
956
954
|
*/
|
|
957
955
|
peerDirectory?: import("../agents/peer-directory.js").PeerDirectory;
|
|
956
|
+
/** The cross-session SOCKET channel ({@link import("./peer-channel.js").PeerChannel}; bundled: `createCcUdsPeerChannel`, the reference agent's dialect). SendMessage reads each target row's lane once (`peerSessionLane`, against {@link mailboxStore}'s `identity`): a row whose capability bit names this store keeps its box append and its socket gets a content-free doorbell; any other row with a socket (a reference-agent session, a session of this engine on another store) gets the message over its socket, at-most-once (`via: "uds"`). Absent ⇒ such a row refuses `peer_send.not_reachable`, never an append into a box nobody drains; every other face is unchanged. The engine never listens (a host calls `listen`). Inert without {@link peerDirectory}. */
|
|
957
|
+
peerChannel?: import("./peer-channel.js").PeerChannel;
|
|
958
958
|
/**
|
|
959
959
|
* design/385 §4.4 — this deployment's `crossSessionInbound` setting LAYERS for the drain-point
|
|
960
960
|
* judgment (managed / user / repo, resolved by `resolveCrossSessionInboundSetting` — explicit value
|
|
@@ -977,7 +977,7 @@ export interface RunnerDeps {
|
|
|
977
977
|
assistant: string;
|
|
978
978
|
};
|
|
979
979
|
/**
|
|
980
|
-
* design/385 §4.4 (slice 4) — this deployment's `dialogExpiry` (
|
|
980
|
+
* design/385 §4.4 (slice 4) — this deployment's `dialogExpiry` (settings key, vocabulary
|
|
981
981
|
* `"60s" | "5m" | "10m" | "never"`, default `"5m"`): how long a HELD cross-session message whose cause
|
|
982
982
|
* a human review could resolve (mode-mismatch / no-mode-asserted / invalid attestation) waits in this
|
|
983
983
|
* session's held queue before it resolves to its safe no-action default — EXPIRED, dropped WITH a
|
|
@@ -1079,7 +1079,7 @@ export interface RunnerDeps {
|
|
|
1079
1079
|
/**
|
|
1080
1080
|
* design/138 S1 — the NEW-ARCHITECTURE memory seam (MemoryEngine over a {@link import("./memory-engine/types.js").MemoryBackend}).
|
|
1081
1081
|
* When set AND `spec.memory.enabled`, the task runs the INJECTION-FIRST file-based memory lifecycle
|
|
1082
|
-
* (materialize → session file ops → harvest with the full gate set), the
|
|
1082
|
+
* (materialize → session file ops → harvest with the full gate set), the `# Memory`
|
|
1083
1083
|
* instruction + fenced derived index replace the legacy `<user_memory>` block, and NO remember/recall
|
|
1084
1084
|
* tools are mounted (memory = the model's ordinary file skills). **S4: unset ⇒
|
|
1085
1085
|
* the task runs MEMORY-LESS** — the legacy `memoryStore` runtime path was retired (one deprecation
|
|
@@ -1288,13 +1288,13 @@ export interface RunnerDeps {
|
|
|
1288
1288
|
* never instead of them. A `classic.PreToolUse` handler's `allow` never bypasses `toolPolicy` — the policy is always
|
|
1289
1289
|
* the final say.
|
|
1290
1290
|
*/
|
|
1291
|
-
mods?: readonly import("./mods/
|
|
1291
|
+
mods?: readonly import("./mods/classic-events.js").EngineModRegistration[];
|
|
1292
1292
|
/**
|
|
1293
|
-
*
|
|
1294
|
-
*
|
|
1295
|
-
*
|
|
1293
|
+
* The deployment's HOST FLOOR (`{ deny?, only? }`, host patterns `example.com` / `*.example.com`): read by the gate (a deny-only layer no rule, mode or
|
|
1294
|
+
* approver clears) and by the engine executors before they connect — the fetch tool's every hop, task images, each MCP http dial (pooled included), every
|
|
1295
|
+
* A2A request and hop, WebSearch's SearXNG backend request and every redirect hop. `only` present ⇒ nothing else is reachable (it also lifts the private-network floor for a host it names); read once at construction (a frozen copy), a bad value refuses (`config.host_floor_invalid`).
|
|
1296
1296
|
*/
|
|
1297
|
-
|
|
1297
|
+
hostFloor?: import("./host-floor.js").HostFloorDeclaration;
|
|
1298
1298
|
/**
|
|
1299
1299
|
* Optional sink for best-effort background errors/warnings that are otherwise swallowed:
|
|
1300
1300
|
* - `"compaction"` — a compaction failure (F8); a persistently failing one (flaky gateway, empty
|
|
@@ -1326,9 +1326,9 @@ export interface RunnerDeps {
|
|
|
1326
1326
|
* simply carries no suggestions.
|
|
1327
1327
|
* - `"rewind"` — the file-history machinery backing rewind reported a best-effort failure: a
|
|
1328
1328
|
* turn-start boundary capture failed or timed out (that turn cannot be rewound to; the turn
|
|
1329
|
-
* itself proceeds),
|
|
1330
|
-
*
|
|
1331
|
-
* `
|
|
1329
|
+
* itself proceeds), a first-touch failure was tolerated under `onTrackFailure:"proceed-unprotected"`, a
|
|
1330
|
+
* first-touch record could not be retracted, or a fork's history carry failed. `err` is always a
|
|
1331
|
+
* `FileHistoryStoreError`: read its `code` / `permanence`, never the message text.
|
|
1332
1332
|
* - `"hook"` — a deployment hook misbehaved: a callback threw, or returned a verdict it was not
|
|
1333
1333
|
* allowed to (e.g. a declared-observational hook). The engine applies the hook's own documented
|
|
1334
1334
|
* fallback (swallow, or fail-closed deny, per its contract) and reports the fact here.
|
|
@@ -1415,7 +1415,7 @@ export interface RunnerDeps {
|
|
|
1415
1415
|
/**
|
|
1416
1416
|
* design/374 — the microCompact knobs. Both default ON (`machine: "cc"`, `clearOnRejection: true`).
|
|
1417
1417
|
*
|
|
1418
|
-
* - `machine`: `"cc"` (default: the
|
|
1418
|
+
* - `machine`: `"cc"` (default: the rejection-leg form — keep 5, ≥20k minimum-savings
|
|
1419
1419
|
* gate, one deep clear beyond the keep window, CC marker bytes) or `"off"` (no proactive
|
|
1420
1420
|
* frontier clearing at all — the D-2 off switch; the machine then gets its ONE shot at the
|
|
1421
1421
|
* blocking point instead, the slice-3 arm A, trace trigger `"blocking"`). The vocabulary is
|
|
@@ -1452,7 +1452,7 @@ export interface RunnerDeps {
|
|
|
1452
1452
|
cacheBreakDetection?: boolean;
|
|
1453
1453
|
/**
|
|
1454
1454
|
* Aggregate inline-MEDIA (image) byte budget for the request (batch-C/§17.2 sibling of the text budget;
|
|
1455
|
-
*
|
|
1455
|
+
* `tengu_media_byte_cap` in the reference). Image reads (`Read` → ImageContent) are per-image-capped but
|
|
1456
1456
|
* accumulate across turns; this bounds the SUM in the request by stripping the OLDEST images (replaced with a
|
|
1457
1457
|
* marker) — request-only, non-destructive (the durable session keeps the image; the model can re-Read it).
|
|
1458
1458
|
* The same budget bounds the media of one `tool_end.output` (spent there as base64 on the wire, x 4/3); both readers
|
|
@@ -86,7 +86,7 @@ export interface WorkflowGovernanceBaseline {
|
|
|
86
86
|
*/
|
|
87
87
|
/**
|
|
88
88
|
* #692 C-d — WHICH plane's ratchet denied auto mode, when the resolver knows: the three settings sources
|
|
89
|
-
*
|
|
89
|
+
* the reference's `permissions.disableAutoMode` can come from, as the resolver folds them into the one deny bit
|
|
90
90
|
* ({@link RuntimeCaps.autoMode} `=== false`). `org` = a managed / organization policy plane; `local` = the
|
|
91
91
|
* machine's local settings; `settings` = the user's / project's settings file. Read ONLY beside the deny bit
|
|
92
92
|
* (a source with no denial is a contradiction the value screen refuses as a resolver fault); projected onto
|
|
@@ -112,7 +112,7 @@ export interface RuntimeCaps {
|
|
|
112
112
|
* deployment, never GRANT beyond it. */
|
|
113
113
|
allowFork?: boolean;
|
|
114
114
|
/**
|
|
115
|
-
* Observer agents
|
|
115
|
+
* Observer agents: honor
|
|
116
116
|
* {@link AgentDefinition.observer} auto-spawn declarations. **POLARITY NOTE — unlike
|
|
117
117
|
* `allowWorkflows`/`allowFork` (`undefined` = unrestricted), this one is `=== true` EXPLICIT
|
|
118
118
|
* opt-in, default OFF**: CC's gate pair is a default-UNSET experimental env var
|
|
@@ -133,7 +133,7 @@ export interface RuntimeCaps {
|
|
|
133
133
|
* must not demote a reachable person into the model answering for them). */
|
|
134
134
|
forceDurableGate?: boolean;
|
|
135
135
|
/**
|
|
136
|
-
* The per-principal auto-mode DENY bit (
|
|
136
|
+
* The per-principal auto-mode DENY bit (the mirror of the settings-plane
|
|
137
137
|
* `permissions.disableAutoMode` ratchet: an organization may only take auto mode AWAY; it is the
|
|
138
138
|
* USER who turns it on, by requesting the mode at {@link TaskSpec.permissionMode}).
|
|
139
139
|
*
|
|
@@ -145,7 +145,7 @@ export interface RuntimeCaps {
|
|
|
145
145
|
* unset. The arming itself: intent ∧ {@link RunnerDeps.autoMode} present ∧ this bit not `false`
|
|
146
146
|
* (allow → run; block → deny `source:"classifier"`; classifier failure → FAIL-CLOSED back to the
|
|
147
147
|
* original ask chain). The trust gate is unchanged: classifier RULES enter only through the
|
|
148
|
-
* deployment assembly face, never a repo-controlled plane (the
|
|
148
|
+
* deployment assembly face, never a repo-controlled plane (the three-source invariant).
|
|
149
149
|
* A denial resolves to a no-op (asks flow the original chain; no warn — the gate, not a mistake).
|
|
150
150
|
*/
|
|
151
151
|
autoMode?: boolean;
|
|
@@ -31,7 +31,9 @@ export declare const SAFETY_AXIS_VOCABULARY: {
|
|
|
31
31
|
readonly permissionDecision: readonly ["allow", "ask", "deny"];
|
|
32
32
|
};
|
|
33
33
|
/** The mark tighten's sentence — the ONE spelling of each safety-mark frame (an egress-marked tool = an external write; an
|
|
34
|
-
* always-irreversible tool; a tool
|
|
35
|
-
*
|
|
36
|
-
*
|
|
37
|
-
|
|
34
|
+
* always-irreversible tool; a tool that may be irreversible, `"maybe"`, whose call nothing showed reversible — its probe's own
|
|
35
|
+
* account rides the card's `probeReason`, never this sentence; a tool whose server declared that a call must be put to a
|
|
36
|
+
* person), read by the gate's two tighten arms (`gate-fold.ts`) and by the inherited lane's card for a marked tool
|
|
37
|
+
* (`judgeInheritedClassifier`): a person who answers a card for a marked call is told what the mark means, whichever lane
|
|
38
|
+
* minted the card. */
|
|
39
|
+
export declare function markTightenMessage(toolName: string, mark: "egress" | "irreversible" | "unproven" | "interaction"): string;
|
|
@@ -10,9 +10,10 @@ export const SAFETY_AXIS_VOCABULARY = {
|
|
|
10
10
|
const _toolEffectExhaustive = true;
|
|
11
11
|
void _toolEffectExhaustive;
|
|
12
12
|
export function markTightenMessage(toolName, mark) {
|
|
13
|
-
|
|
14
|
-
return `tool "${toolName}" asks for a person's confirmation (server-declared) — explicit approval required`;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
: `tool "${toolName}"
|
|
13
|
+
switch (mark) {
|
|
14
|
+
case "interaction": return `tool "${toolName}" asks for a person's confirmation (server-declared) — explicit approval required`;
|
|
15
|
+
case "egress": return `tool "${toolName}" performs an external write (egress) — explicit approval required`;
|
|
16
|
+
case "irreversible": return `tool "${toolName}" performs an irreversible action — explicit approval required`;
|
|
17
|
+
case "unproven": return `tool "${toolName}" was not shown to be reversible — explicit approval required`;
|
|
18
|
+
}
|
|
18
19
|
}
|
|
@@ -177,12 +177,36 @@ export const SAFETY_MERGE_CONFORMANCE_CORPUS = [
|
|
|
177
177
|
},
|
|
178
178
|
{
|
|
179
179
|
name: "inert-deny-entry-removed-safe",
|
|
180
|
-
intent: "removing a deny entry the grammar reads that names nothing (a
|
|
181
|
-
prior: { toolDeny: ["Bash", "
|
|
180
|
+
intent: "removing a deny entry the grammar reads that names nothing (a `__` name with no protocol prefix) relaxes nothing — the comparison reads the EFFECTIVE entries on both sides",
|
|
181
|
+
prior: { toolDeny: ["Bash", "github__x"] },
|
|
182
182
|
next: { toolDeny: ["Bash"] },
|
|
183
183
|
loosens: false,
|
|
184
184
|
reasons: [],
|
|
185
185
|
},
|
|
186
|
+
{
|
|
187
|
+
name: "glob-deny-removed-loosened",
|
|
188
|
+
intent: "a `*` anywhere in a deny entry's name is a wildcard over the whole name (`mcp__git*` every peer it matches, `Re*d` every tool it matches, `*` every tool): removing one lifts a real deny",
|
|
189
|
+
prior: { toolDeny: ["Bash", "mcp__git*", "Re*d"] },
|
|
190
|
+
next: { toolDeny: ["Bash"] },
|
|
191
|
+
loosens: true,
|
|
192
|
+
reasons: ['removed toolDeny "mcp__git*"', 'removed toolDeny "Re*d"'],
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
name: "whole-protocol-deny-removed-loosened",
|
|
196
|
+
intent: "`mcp__*` and `mcp__*__*` in a deny list name every tool of every MCP server: removing either lifts a real deny",
|
|
197
|
+
prior: { toolDeny: ["Bash", "mcp__*"] },
|
|
198
|
+
next: { toolDeny: ["Bash"] },
|
|
199
|
+
loosens: true,
|
|
200
|
+
reasons: ['removed toolDeny "mcp__*"'],
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
name: "whole-protocol-deny-both-spellings-removed-loosened",
|
|
204
|
+
intent: "each whole-protocol spelling is its own deny entry: dropping one while keeping the other still removes an entry the base layer wrote",
|
|
205
|
+
prior: { toolDeny: ["mcp__*", "mcp__*__*"] },
|
|
206
|
+
next: { toolDeny: ["mcp__*"] },
|
|
207
|
+
loosens: true,
|
|
208
|
+
reasons: ['removed toolDeny "mcp__*__*"'],
|
|
209
|
+
},
|
|
186
210
|
{
|
|
187
211
|
name: "unreadable-deny-prior-loosened",
|
|
188
212
|
intent: "rules whose toolDeny holds an entry no rule grammar reads (an empty entry) cannot be read and refuse every call — an override that can be read loosens them",
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The conservative value-sameness proof the park mint reads when it decides whether a fidelity projection
|
|
3
|
+
* moved a value, and whether a policy's rewrite names the very value about to be filed. A leaf: no imports.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* CONSERVATIVE "these two are provably the same value" for deciding whether a
|
|
7
|
+
* {@link import("./checkpoint-store.js").encodeAtFidelity} projection moved anything, and whether a policy's
|
|
8
|
+
* rewrite names the very value about to be filed.
|
|
9
|
+
*
|
|
10
|
+
* Deliberately NOT the binding hash, which is the wrong instrument for this question in two directions:
|
|
11
|
+
* it folds `-0` onto `0` (a real projection change the policy may care about, invisible to the hash), and
|
|
12
|
+
* it is a digest, so a collision would read as sameness. `Object.is` at the leaves keeps the `-0`
|
|
13
|
+
* distinction; comparing own-key SETS keeps the dropped `undefined`-valued key visible.
|
|
14
|
+
*
|
|
15
|
+
* Conservative on purpose — the answer it must never give wrongly is TRUE, because both callers read
|
|
16
|
+
* TRUE as "nothing moved / the policy named this very value" and act by filing. So sameness has to be
|
|
17
|
+
* PROVED, not merely un-disproved:
|
|
18
|
+
* - the PROTOTYPES must match and be the plain-object or array one. `[object Object]` is not proof of
|
|
19
|
+
* a plain object — a class instance and a null-prototype object both report it, and a tool executing
|
|
20
|
+
* the arguments can observe inherited behaviour. (Neither input to the projection comparison can be
|
|
21
|
+
* such a value: `structuredClone` and `JSON.parse` both produce plain data. A policy's rewrite can.)
|
|
22
|
+
* - own keys are compared with `Reflect.ownKeys` and POSITIONALLY, so a SYMBOL key or a non-enumerable
|
|
23
|
+
* property on one side is a difference rather than an invisible extra, and so is a different order
|
|
24
|
+
* (which `Object.keys`, `JSON.stringify` and any tool iterating its arguments can see).
|
|
25
|
+
* - properties are compared through their DESCRIPTORS — every flag, so a frozen object is not the
|
|
26
|
+
* mutable value a JSON decode produces — and an accessor on either side answers FALSE without being
|
|
27
|
+
* read: an approval decision must not be made by running deployment code, and what a getter returns
|
|
28
|
+
* need not be the same twice.
|
|
29
|
+
* - reference TOPOLOGY counts: two properties that share one object are not two properties holding
|
|
30
|
+
* equal objects, and a JSON round trip is precisely what turns the first into the second.
|
|
31
|
+
* - what it CANNOT prove on its own is that the value it inspected answers ordinary reads the way its
|
|
32
|
+
* descriptors did — a Proxy reports the target's descriptors and can return anything from a `get`.
|
|
33
|
+
* A caller comparing a value it did not construct must first establish that it is an inert data
|
|
34
|
+
* graph (the capture clone does exactly that, and refuses a Proxy outright).
|
|
35
|
+
* - any brand outside plain object/array that is not already reference-identical answers FALSE (a Date
|
|
36
|
+
* is never the string a JSON codec leaves behind, a Map is never the `{}`), and so does any
|
|
37
|
+
* inspection that throws.
|
|
38
|
+
* An uncertain answer therefore costs a policy consultation or a park, never a silently filed value.
|
|
39
|
+
*/
|
|
40
|
+
export declare function samePlainValue(a: unknown, b: unknown): boolean;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const MAX_SAME_VALUE_DEPTH = 256;
|
|
2
|
+
export function samePlainValue(a, b) {
|
|
3
|
+
return sameValueAt(a, b, 0, new Map(), new Map());
|
|
4
|
+
}
|
|
5
|
+
function sameValueAt(a, b, depth, aToB, bToA) {
|
|
6
|
+
if (Object.is(a, b))
|
|
7
|
+
return true;
|
|
8
|
+
if (depth >= MAX_SAME_VALUE_DEPTH)
|
|
9
|
+
return false;
|
|
10
|
+
if (a === null || b === null || typeof a !== "object" || typeof b !== "object")
|
|
11
|
+
return false;
|
|
12
|
+
try {
|
|
13
|
+
const pairedWithA = aToB.get(a);
|
|
14
|
+
const pairedWithB = bToA.get(b);
|
|
15
|
+
if (pairedWithA !== undefined || pairedWithB !== undefined)
|
|
16
|
+
return pairedWithA === b && pairedWithB === a;
|
|
17
|
+
aToB.set(a, b);
|
|
18
|
+
bToA.set(b, a);
|
|
19
|
+
const proto = Object.getPrototypeOf(a);
|
|
20
|
+
if (proto !== Object.getPrototypeOf(b))
|
|
21
|
+
return false;
|
|
22
|
+
if (proto !== Object.prototype && proto !== Array.prototype)
|
|
23
|
+
return false;
|
|
24
|
+
if (Object.isExtensible(a) !== Object.isExtensible(b))
|
|
25
|
+
return false;
|
|
26
|
+
const ka = Reflect.ownKeys(a);
|
|
27
|
+
const kb = Reflect.ownKeys(b);
|
|
28
|
+
if (ka.length !== kb.length)
|
|
29
|
+
return false;
|
|
30
|
+
for (const [i, k] of ka.entries()) {
|
|
31
|
+
if (k !== kb[i])
|
|
32
|
+
return false;
|
|
33
|
+
const da = Object.getOwnPropertyDescriptor(a, k);
|
|
34
|
+
const db = Object.getOwnPropertyDescriptor(b, k);
|
|
35
|
+
if (da === undefined || db === undefined)
|
|
36
|
+
return false;
|
|
37
|
+
if (!("value" in da) || !("value" in db))
|
|
38
|
+
return false;
|
|
39
|
+
if (da.enumerable !== db.enumerable || da.writable !== db.writable || da.configurable !== db.configurable)
|
|
40
|
+
return false;
|
|
41
|
+
if (!sameValueAt(da.value, db.value, depth + 1, aToB, bToA))
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
package/dist/core/scheduler.d.ts
CHANGED
|
@@ -111,7 +111,7 @@ export interface ScheduledTaskSummary {
|
|
|
111
111
|
/** 下次触发的 epoch ms(cron/at 可算;daemon 提供)。 */
|
|
112
112
|
nextRunMs?: number;
|
|
113
113
|
/** 执行形态回显({@link ScheduledIntent.mode})。ScheduleWakeup 的 stop:true 靠它定位要取消的 pending
|
|
114
|
-
* wakeup(cron/task 意图不受 stop
|
|
114
|
+
* wakeup(cron/task 意图不受 stop 影响)。老 backend 不回 = undefined(工具壳以
|
|
115
115
|
* label 兜底过滤)。 */
|
|
116
116
|
mode?: "task" | "session-wakeup";
|
|
117
117
|
/** [c209-D2]:生命周期层级回显({@link ScheduledIntent.lifetime})——缺了它,任务创建后就再无
|
|
@@ -112,6 +112,9 @@ export declare function declareWithheldEnv(table: WithheldEnvDeclaration): void;
|
|
|
112
112
|
* the peer is not dialed.
|
|
113
113
|
*/
|
|
114
114
|
export declare function holdOwnCredentialValues(values: Iterable<string | undefined>, onNotice?: (notice: EngineNotice) => void): void;
|
|
115
|
+
/** The part of a `<word> <rest>` value after its first word and the spaces that follow it (`Bearer x` → `x`), or undefined when the value does
|
|
116
|
+
* not read that way. The cut is made of the VALUE's shape, whatever the header is called. */
|
|
117
|
+
export declare function authSchemeCredentials(value: string): string | undefined;
|
|
115
118
|
/** THE one reading of which HTTP header carries a credential by its NAME — the credential vocabulary's header-name
|
|
116
119
|
* reading ({@link isSensitiveHeaderName}: `Authorization`, `Proxy-Authorization`, `X-Api-Key`, Azure's `api-key`,
|
|
117
120
|
* `x-goog-api-key`, `Cookie`, any name holding a credential word; not a gateway's own spelling of a name the
|
|
@@ -160,12 +163,32 @@ export declare function inheritedHostEnv(policy: InheritEnvPolicy | undefined, f
|
|
|
160
163
|
export declare function inheritEnvPolicyProblem(value: unknown): string | undefined;
|
|
161
164
|
/** Test seam: never called by production code. */
|
|
162
165
|
export declare function __resetSecretEnvScrubNoticeAnnouncement(): void;
|
|
166
|
+
/** What both disclosures say about one set of findings: every withheld name, and those that are this deployment's own
|
|
167
|
+
* credential — withheld under every policy — whichever rule withheld them first ({@link ownCredentialJudge}, the
|
|
168
|
+
* subtraction's own judgment, over the entry's value in this process's environment: every finding names an entry of
|
|
169
|
+
* it). The rest the scrub withheld, and `"all"` or an allow list naming them hands them on. */
|
|
170
|
+
export declare function withheldEnvNames(findings: readonly SecretEnvFinding[]): {
|
|
171
|
+
names: string[];
|
|
172
|
+
ownCredentials: string[];
|
|
173
|
+
};
|
|
163
174
|
/**
|
|
164
175
|
* The ONE disclosure point for a scrub's withheld keys. Routed through {@link deliverEngineNotice} — the
|
|
165
176
|
* engine's one notice throat — so a wired `onNotice` seat REPLACES the console line exactly as every
|
|
166
177
|
* other `EngineNotice` does, and an absent seat prints the same words `console.warn` always printed here.
|
|
167
|
-
* `detail
|
|
168
|
-
* subset
|
|
169
|
-
*
|
|
178
|
+
* `detail` is {@link withheldEnvNames}: `names` every withheld key, `ownCredentials` (present only when one was
|
|
179
|
+
* withheld) the subset that is the deployment's own credential. Once per PROCESS, never per call or per site; an
|
|
180
|
+
* EMPTY findings array is a no-op.
|
|
170
181
|
*/
|
|
171
182
|
export declare function announceSecretEnvScrub(onNotice: ((notice: EngineNotice) => void) | undefined, findings: readonly SecretEnvFinding[]): void;
|
|
183
|
+
/**
|
|
184
|
+
* The session user's half of the same fact, from the execution environment's `withheldEnv`: the notice telling the
|
|
185
|
+
* person whose run drives a tool shell which variables of the engine's environment that shell does not receive — names
|
|
186
|
+
* only, never a value, split as {@link withheldEnvNames} splits them, with the way out for each half (`detail.state`
|
|
187
|
+
* `"withheld"`); or, when the environment answered `"unknown"`, that the engine could not determine them (`"unknown"`,
|
|
188
|
+
* no names: an empty list never stands for unknown). `undefined` when nothing is withheld. Minted by the Runner
|
|
189
|
+
* (`runner/shell-env-withheld.ts`).
|
|
190
|
+
*/
|
|
191
|
+
export declare function withheldEnvUserNotice(withheld: readonly SecretEnvFinding[] | "unknown", at: {
|
|
192
|
+
sessionId: string;
|
|
193
|
+
runId?: string | undefined;
|
|
194
|
+
}): EngineNotice | undefined;
|
package/dist/core/secret-env.js
CHANGED
|
@@ -281,6 +281,9 @@ export function holdOwnCredentialValues(values, onNotice) {
|
|
|
281
281
|
indexAdd(held, v);
|
|
282
282
|
}
|
|
283
283
|
const AUTH_SCHEME_VALUE_RE = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+ +(\S[\s\S]*)$/;
|
|
284
|
+
export function authSchemeCredentials(value) {
|
|
285
|
+
return AUTH_SCHEME_VALUE_RE.exec(value)?.[1];
|
|
286
|
+
}
|
|
284
287
|
const SCHEMED_HEADER_RE = /^(?:proxy-)?authorization$/i;
|
|
285
288
|
export function isCredentialHeaderName(name) {
|
|
286
289
|
return isSensitiveHeaderName(name);
|
|
@@ -293,7 +296,7 @@ export function credentialHeaderValues(headers) {
|
|
|
293
296
|
for (const [name, value] of Object.entries(headers ?? {})) {
|
|
294
297
|
if (typeof value !== "string" || !(isCredentialHeaderName(name) || looksLikeCredentialValue(value)))
|
|
295
298
|
continue;
|
|
296
|
-
const credentials =
|
|
299
|
+
const credentials = authSchemeCredentials(value);
|
|
297
300
|
if (credentials !== undefined && isSchemedCredentialHeader(name) && notACredentialReason(credentials) !== undefined) {
|
|
298
301
|
out.push(credentials);
|
|
299
302
|
continue;
|
|
@@ -324,16 +327,21 @@ export function __resetWithheldEnv() {
|
|
|
324
327
|
Reflect.set(globalThis, WITHHELD_ENV, { names: NOTHING_NAMED, declared: new Map(), held: new Map() });
|
|
325
328
|
intakeSaid.clear();
|
|
326
329
|
}
|
|
327
|
-
function
|
|
330
|
+
function ownCredentialJudge() {
|
|
328
331
|
const table = withheldEnvOf();
|
|
329
332
|
if (table.names.length === 0 && table.declared.size === 0 && table.held.size === 0)
|
|
330
|
-
return
|
|
333
|
+
return undefined;
|
|
331
334
|
const own = new Set(table.names.map(envNameKey));
|
|
335
|
+
return (key, value) => own.has(envNameKey(key)) || (typeof value === "string" && (indexHas(table.declared, value) || indexHas(table.held, value)));
|
|
336
|
+
}
|
|
337
|
+
function withholdOwnCredentials(inherited, findings) {
|
|
338
|
+
const isOwn = ownCredentialJudge();
|
|
339
|
+
if (isOwn === undefined)
|
|
340
|
+
return inherited;
|
|
332
341
|
const kept = [];
|
|
333
342
|
for (const key of Object.keys(inherited)) {
|
|
334
343
|
const value = inherited[key];
|
|
335
|
-
|
|
336
|
-
if (!own.has(envNameKey(key)) && !ownValue)
|
|
344
|
+
if (!isOwn(key, value))
|
|
337
345
|
kept.push([key, value]);
|
|
338
346
|
else
|
|
339
347
|
findings?.push({ key, kind: "own-credential", confidence: SECRET_ENV_KIND_CONFIDENCE["own-credential"], source: "secret-env" });
|
|
@@ -377,16 +385,44 @@ let secretEnvScrubNoticeAnnounced = false;
|
|
|
377
385
|
export function __resetSecretEnvScrubNoticeAnnouncement() {
|
|
378
386
|
secretEnvScrubNoticeAnnounced = false;
|
|
379
387
|
}
|
|
388
|
+
export function withheldEnvNames(findings) {
|
|
389
|
+
const names = [...new Set(findings.map((f) => f.key))];
|
|
390
|
+
const isOwn = ownCredentialJudge();
|
|
391
|
+
const ownCredentials = isOwn === undefined ? [] : names.filter((k) => isOwn(k, process.env[k]));
|
|
392
|
+
return { names, ownCredentials };
|
|
393
|
+
}
|
|
380
394
|
export function announceSecretEnvScrub(onNotice, findings) {
|
|
381
395
|
if (findings.length === 0 || secretEnvScrubNoticeAnnounced)
|
|
382
396
|
return;
|
|
383
397
|
secretEnvScrubNoticeAnnounced = true;
|
|
384
|
-
const names = findings
|
|
385
|
-
const ownCredentials = findings.filter((f) => f.kind === "own-credential").map((f) => f.key);
|
|
398
|
+
const { names, ownCredentials } = withheldEnvNames(findings);
|
|
386
399
|
const own = ownCredentials.length > 0 ? `; ${ownCredentials.length} of them this deployment's own credential(s) (${ownCredentials.join(", ")})` : "";
|
|
387
400
|
deliverEngineNotice(onNotice, {
|
|
388
401
|
code: "config.secret_env_scrubbed",
|
|
389
|
-
message: `secret_env_scrubbed: ${
|
|
402
|
+
message: `secret_env_scrubbed: ${names.length} env key(s) withheld from a spawned child's environment (${names.join(", ")})${own} — once per process; wire onNotice for the structured form`,
|
|
390
403
|
detail: { names, ...(ownCredentials.length > 0 ? { ownCredentials } : {}) },
|
|
391
404
|
});
|
|
392
405
|
}
|
|
406
|
+
export function withheldEnvUserNotice(withheld, at) {
|
|
407
|
+
const route = { sessionId: at.sessionId, ...(at.runId !== undefined ? { runId: at.runId } : {}) };
|
|
408
|
+
if (withheld === "unknown") {
|
|
409
|
+
return {
|
|
410
|
+
code: "inherit_env.names_withheld",
|
|
411
|
+
message: "The engine could not determine which variables of its environment the tool shell in this session does not receive: the execution environment does not say. Variables you set may read as unset there.",
|
|
412
|
+
detail: { state: "unknown", ...route },
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
const { names, ownCredentials } = withheldEnvNames(withheld);
|
|
416
|
+
if (names.length === 0)
|
|
417
|
+
return undefined;
|
|
418
|
+
const scrubbed = names.filter((k) => !ownCredentials.includes(k));
|
|
419
|
+
const halves = [
|
|
420
|
+
...(scrubbed.length > 0 ? [`${scrubbed.join(", ")} — withheld by the credential scrub; the run's inheritEnv ("all", or a list naming them) hands them on`] : []),
|
|
421
|
+
...(ownCredentials.length > 0 ? [`${ownCredentials.join(", ")} — this deployment's own credential(s), withheld under every inheritEnv`] : []),
|
|
422
|
+
];
|
|
423
|
+
return {
|
|
424
|
+
code: "inherit_env.names_withheld",
|
|
425
|
+
message: `The tool shell in this session does not receive ${names.length} variable(s) of the engine's environment: ${halves.join("; ")}. Values are never shown.`,
|
|
426
|
+
detail: { state: "withheld", names, ...(ownCredentials.length > 0 ? { ownCredentials } : {}), ...route },
|
|
427
|
+
};
|
|
428
|
+
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { capabilityHeld } from "../brain/model-capability.js";
|
|
1
2
|
function asList(models) {
|
|
2
3
|
return Array.isArray(models) ? models : Object.values(models);
|
|
3
4
|
}
|
|
@@ -9,9 +10,8 @@ function costOf(m) {
|
|
|
9
10
|
}
|
|
10
11
|
function matches(m, c) {
|
|
11
12
|
for (const need of c.needs ?? []) {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
if (need === "reasoning" && !m.reasoning)
|
|
13
|
+
const cap = need === "vision" ? "image" : need === "reasoning" ? "reasoning" : undefined;
|
|
14
|
+
if (cap !== undefined && !capabilityHeld(m, cap))
|
|
15
15
|
return false;
|
|
16
16
|
}
|
|
17
17
|
if (c.minContext != null && (m.contextTokens ?? m.contextWindow ?? 0) < c.minContext) {
|
|
@@ -23,7 +23,7 @@ import type { ToolPolicy } from "./tool-policy.js";
|
|
|
23
23
|
export declare function agentConfigDenyPatterns(): readonly string[];
|
|
24
24
|
/**
|
|
25
25
|
* RECOMMENDED default pattern set for {@link createSensitivePathPolicy} (additive export).
|
|
26
|
-
* NO upstream
|
|
26
|
+
* NO upstream anchor exists (the anchor set carries no sensitive/dangerous file-pattern
|
|
27
27
|
* material), so this is an ENGINEERING-CONSENSUS set — each line states its tradeoff. The factory's
|
|
28
28
|
* default behavior is unchanged (no implicit default list; wiring this set is the caller's opt-in:
|
|
29
29
|
* `createSensitivePathPolicy({ patterns: RECOMMENDED_SENSITIVE_PATTERNS, … })`).
|
|
@@ -134,7 +134,7 @@ export function createSensitivePathPolicy(opts) {
|
|
|
134
134
|
const fold = CASE_INSENSITIVE_FS ? "ascii" : "none";
|
|
135
135
|
const lower = (segs) => (CASE_INSENSITIVE_FS ? segs.map((seg) => seg.replace(/[A-Z]/g, (c) => c.toLowerCase())) : segs);
|
|
136
136
|
const anchors = [configRoot, ...(env === undefined ? [] : await canonicalDataRootKeys(env, [configRoot], signal))].map((root) => lower(agentConfigDirSegments(root)));
|
|
137
|
-
return configRows.map(({ raw, tail }) => ({ ...(compileSegmentPattern(tail, fold) ?? { raw, segments: [],
|
|
137
|
+
return configRows.map(({ raw, tail }) => ({ ...(compileSegmentPattern(tail, fold) ?? { raw, segments: [], fold }), raw, anchors, rootedOnly: true }));
|
|
138
138
|
};
|
|
139
139
|
const rowsOf = async (env, signal) => [...guardRows, ...(await configTwins(env, signal)).map(rowOf)];
|
|
140
140
|
const unstampedRoots = Object.freeze(dataRootSpellings(undefined));
|