@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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
import { thrownText } from "./thrown-value.js";
|
|
2
|
+
import { readMember, thrownText } from "./thrown-value.js";
|
|
3
3
|
import { isAbsoluteForFamily, isWinFormPath, pathFamilyOf, relativeInEveryFamily } from "../tools/fs/safety.js";
|
|
4
4
|
import { fileHistoryBoundariesToKeep, resolveFileHistoryRetention } from "./file-history-retention.js";
|
|
5
5
|
const normSlash = (p) => p.replace(/\\/g, "/");
|
|
@@ -32,6 +32,7 @@ function parentDirOf(absPath) {
|
|
|
32
32
|
const parent = cut.slice(0, i);
|
|
33
33
|
return win ? parent.replace(/\//g, "\\") : parent;
|
|
34
34
|
}
|
|
35
|
+
export const FILE_HISTORY_REFUSAL_CLASSES = Object.freeze(["link_safety", "base_unavailable", "key_unresolvable"]);
|
|
35
36
|
export function trackKeyFamilyOf(root) {
|
|
36
37
|
return isWinFormPath(root) ? "win" : "posix";
|
|
37
38
|
}
|
|
@@ -53,20 +54,40 @@ export function resolveTrackKey(root, key, minted) {
|
|
|
53
54
|
const win = isWinFormPath(root);
|
|
54
55
|
if (minted !== undefined && minted.family !== trackKeyFamilyOf(root)) {
|
|
55
56
|
if (minted.kind === "absolute") {
|
|
56
|
-
return { ok: false, reason: `foreign-family absolute key cannot be restored here (recorded under a ${minted.family} root, this root is ${trackKeyFamilyOf(root)}): ${key}
|
|
57
|
+
return { ok: false, reason: `foreign-family absolute key cannot be restored here (recorded under a ${minted.family} root, this root is ${trackKeyFamilyOf(root)}): ${key}`, class: "key_unresolvable" };
|
|
57
58
|
}
|
|
58
59
|
if (isUnsafeRelPathLike(normSlash(key)) || key.includes("\\")) {
|
|
59
|
-
return { ok: false, reason: `foreign-family key is ambiguous across path families (recorded under a ${minted.family} root, this root is ${trackKeyFamilyOf(root)}): ${key}
|
|
60
|
+
return { ok: false, reason: `foreign-family key is ambiguous across path families (recorded under a ${minted.family} root, this root is ${trackKeyFamilyOf(root)}): ${key}`, class: "key_unresolvable" };
|
|
60
61
|
}
|
|
61
62
|
}
|
|
62
63
|
const keyN = win ? normSlash(key) : key;
|
|
63
64
|
if (isAbsoluteForFamily(pathFamilyOf({ root }), keyN) || (win && /^[A-Za-z]:/.test(keyN)))
|
|
64
65
|
return { ok: true, abs: key };
|
|
65
66
|
if (win ? isUnsafeRelPathLike(keyN) : keyN.split("/").includes(".."))
|
|
66
|
-
return { ok: false, reason: `unsafe recorded key escapes root: ${key}
|
|
67
|
+
return { ok: false, reason: `unsafe recorded key escapes root: ${key}`, class: "key_unresolvable" };
|
|
67
68
|
return { ok: true, abs: joinUnder(root, keyN) };
|
|
68
69
|
}
|
|
69
70
|
export const FILE_HISTORY_ERROR_CODES = Object.freeze(["track_failed", "snapshot_failed", "restore_failed", "adopt_failed", "not_found", "aborted", "unsupported_format", "conflict"]);
|
|
71
|
+
const CAUGHT_CODE_RETRY_CLASS = new Map([
|
|
72
|
+
...["EACCES", "EPERM", "EROFS", "ENAMETOOLONG", "EFBIG", "ENOTDIR", "EISDIR"].map((c) => [c, "terminal"]),
|
|
73
|
+
...["EAGAIN", "EWOULDBLOCK", "EBUSY", "EINTR", "ETIMEDOUT", "EMFILE", "ENFILE"].map((c) => [c, "transient"]),
|
|
74
|
+
]);
|
|
75
|
+
export function caughtFault(caught) {
|
|
76
|
+
const code = readMember(caught, "code");
|
|
77
|
+
const judged = typeof code === "string" ? CAUGHT_CODE_RETRY_CLASS.get(code) : undefined;
|
|
78
|
+
return judged === undefined ? {} : { permanence: judged };
|
|
79
|
+
}
|
|
80
|
+
export const DAMAGED_RECORD = Object.freeze({ permanence: "terminal" });
|
|
81
|
+
export class FileHistoryStoreError extends Error {
|
|
82
|
+
code;
|
|
83
|
+
constructor(failure, message, thrown) {
|
|
84
|
+
super(message, thrown !== undefined ? { cause: thrown.value } : undefined);
|
|
85
|
+
this.name = "FileHistoryStoreError";
|
|
86
|
+
this.code = failure.code;
|
|
87
|
+
if (failure.permanence !== undefined)
|
|
88
|
+
this.permanence = failure.permanence;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
70
91
|
export const FILE_HISTORY_DIFF_LINE_BUDGET = 2000;
|
|
71
92
|
export function countRestoreLineDiff(current, target) {
|
|
72
93
|
const isBinary = (b) => b !== undefined && b.includes(0);
|
|
@@ -252,18 +273,24 @@ export async function captureFileBackupViaEnv(env, absPath, root, signal) {
|
|
|
252
273
|
}
|
|
253
274
|
export async function worldStillMatchesMint(env, absPath, root, baseAvailable, mintedBlobHash, signal) {
|
|
254
275
|
if (!baseAvailable) {
|
|
255
|
-
return {
|
|
276
|
+
return { verdict: "kept", reason: "the first touch recorded a base-UNAVAILABLE marker, whose whole purpose is to refuse a fake pristine later — an ambiguous failure may not erase it" };
|
|
256
277
|
}
|
|
257
278
|
const cap = await captureFileBackupViaEnv(env, absPath, root, signal);
|
|
258
279
|
if (cap.state === "absent") {
|
|
259
|
-
return mintedBlobHash === null ? {
|
|
280
|
+
return mintedBlobHash === null ? { verdict: "unchanged" } : { verdict: "kept", reason: "the file recorded at the first touch is gone now" };
|
|
260
281
|
}
|
|
261
282
|
if (cap.state === "file") {
|
|
262
283
|
if (mintedBlobHash === null)
|
|
263
|
-
return {
|
|
264
|
-
return cap.hash === mintedBlobHash ? {
|
|
284
|
+
return { verdict: "kept", reason: "the path was recorded as NOT EXISTING at the first touch but holds bytes now" };
|
|
285
|
+
return cap.hash === mintedBlobHash ? { verdict: "unchanged" } : { verdict: "kept", reason: "the file's bytes differ from the ones recorded at the first touch" };
|
|
265
286
|
}
|
|
266
|
-
return {
|
|
287
|
+
return { verdict: "unjudged", reason: `the path could not be re-read to prove it is unchanged (${cap.state === "aborted" ? "aborted" : cap.cause})`, aborted: cap.state === "aborted" };
|
|
288
|
+
}
|
|
289
|
+
export function annulProofFailure(proof, absPath) {
|
|
290
|
+
if (proof.verdict === "kept") {
|
|
291
|
+
return { ok: false, error: { code: "conflict", message: `first-touch record for ${absPath} is NOT retractable: ${proof.reason} — the write this retraction compensates for may have changed the file, and deleting the only baseline of a modified file is worse than keeping a stale record` } };
|
|
292
|
+
}
|
|
293
|
+
return { ok: false, error: { code: proof.aborted ? "aborted" : "track_failed", message: `first-touch record for ${absPath} was left in place: ${proof.reason}, so whether the write this retraction compensates for changed the file was not judged` } };
|
|
267
294
|
}
|
|
268
295
|
export function modeProvenDifferent(recorded, current) {
|
|
269
296
|
return recorded !== undefined && current !== undefined && recorded !== current;
|
|
@@ -297,7 +324,7 @@ export async function applyFileRestoreViaEnv(env, absPath, target, opts) {
|
|
|
297
324
|
}
|
|
298
325
|
const w = await writeRestoredBytes(env, absPath, target.bytes, signal);
|
|
299
326
|
if (!w.ok)
|
|
300
|
-
return { outcome: w.
|
|
327
|
+
return w.refused ? { outcome: "refused", reason: `write: ${w.code}`, class: "link_safety" } : { outcome: "failed", reason: `write: ${w.code}` };
|
|
301
328
|
const modeAfter = await applyRecordedMode(env, absPath, opts, undefined);
|
|
302
329
|
return { outcome: "applied", ...(modeAfter === "unpreserved" || modeAfter === "applied_unpreserved" ? { modeNotPreserved: true } : {}) };
|
|
303
330
|
}
|
|
@@ -310,6 +337,7 @@ async function restorePreflight(env, absPath, opts) {
|
|
|
310
337
|
reason: info.value.kind === "symlink"
|
|
311
338
|
? "restore target is a SYMLINK — the recorded bytes belong to the file that was edited, not to whatever the link now points at"
|
|
312
339
|
: `restore target is a ${info.value.kind}, not a regular file — the recorded bytes are not this object's`,
|
|
340
|
+
class: "link_safety",
|
|
313
341
|
},
|
|
314
342
|
};
|
|
315
343
|
}
|
|
@@ -325,6 +353,7 @@ async function restorePreflight(env, absPath, opts) {
|
|
|
325
353
|
refused: {
|
|
326
354
|
outcome: "refused",
|
|
327
355
|
reason: `restore target's parent chain changed identity since it was recorded (recorded ${JSON.stringify(opts.parentIdent)}, now ${JSON.stringify(now)}) — writing here could land outside the task root`,
|
|
356
|
+
class: "link_safety",
|
|
328
357
|
},
|
|
329
358
|
};
|
|
330
359
|
}
|
|
@@ -491,7 +520,7 @@ export class InMemoryFileHistoryStore {
|
|
|
491
520
|
return { ok: true, minted: true };
|
|
492
521
|
}
|
|
493
522
|
catch (err) {
|
|
494
|
-
return { ok: false, error: { code: "track_failed", message: `first-touch record for ${absPath} could not be persisted: ${thrownText(err)}
|
|
523
|
+
return { ok: false, error: { code: "track_failed", message: `first-touch record for ${absPath} could not be persisted: ${thrownText(err)}`, ...caughtFault(err) } };
|
|
495
524
|
}
|
|
496
525
|
}
|
|
497
526
|
async annulTrack(scope, absPath, root, verify) {
|
|
@@ -522,9 +551,8 @@ export class InMemoryFileHistoryStore {
|
|
|
522
551
|
if (before !== undefined)
|
|
523
552
|
return { ok: false, error: { code: "conflict", message: before } };
|
|
524
553
|
const proof = verify === undefined ? undefined : await worldStillMatchesMint(verify.env, absPath, root, t.baseAvailable, t.versions[0]?.blobHash ?? null, verify.signal);
|
|
525
|
-
if (proof !== undefined &&
|
|
526
|
-
return
|
|
527
|
-
}
|
|
554
|
+
if (proof !== undefined && proof.verdict !== "unchanged")
|
|
555
|
+
return annulProofFailure(proof, absPath);
|
|
528
556
|
const after = ineligible();
|
|
529
557
|
if (after !== undefined)
|
|
530
558
|
return { ok: false, error: { code: "conflict", message: after } };
|
|
@@ -532,7 +560,7 @@ export class InMemoryFileHistoryStore {
|
|
|
532
560
|
return { ok: true };
|
|
533
561
|
}
|
|
534
562
|
catch (err) {
|
|
535
|
-
return { ok: false, error: { code: "track_failed", message: `annulling the first-touch record for ${absPath} failed: ${thrownText(err)}
|
|
563
|
+
return { ok: false, error: { code: "track_failed", message: `annulling the first-touch record for ${absPath} failed: ${thrownText(err)}`, ...caughtFault(err) } };
|
|
536
564
|
}
|
|
537
565
|
}
|
|
538
566
|
async snapshot(scope, entryId, env, root, signal) {
|
|
@@ -601,14 +629,14 @@ export class InMemoryFileHistoryStore {
|
|
|
601
629
|
}
|
|
602
630
|
catch (err) {
|
|
603
631
|
sc.spentAttempts.add(entryId);
|
|
604
|
-
return { ok: false, error: { code: "snapshot_failed", message: `boundary for entry "${entryId}" could not be committed: ${thrownText(err)}
|
|
632
|
+
return { ok: false, error: { code: "snapshot_failed", message: `boundary for entry "${entryId}" could not be committed: ${thrownText(err)}`, ...caughtFault(err) } };
|
|
605
633
|
}
|
|
606
634
|
this.applyBoundaryRetention(scope, entryId);
|
|
607
635
|
return { ok: true };
|
|
608
636
|
}
|
|
609
637
|
catch (err) {
|
|
610
638
|
sc.spentAttempts.add(entryId);
|
|
611
|
-
return { ok: false, error: { code: "snapshot_failed", message: thrownText(err) } };
|
|
639
|
+
return { ok: false, error: { code: "snapshot_failed", message: thrownText(err), ...caughtFault(err) } };
|
|
612
640
|
}
|
|
613
641
|
finally {
|
|
614
642
|
sc.activeAttempts.delete(entryId);
|
|
@@ -635,7 +663,7 @@ export class InMemoryFileHistoryStore {
|
|
|
635
663
|
let targetVersion = boundary.get(key);
|
|
636
664
|
if (targetVersion === undefined) {
|
|
637
665
|
if (!t.baseAvailable) {
|
|
638
|
-
ledger.refused.push({ path: key, reason: "base_unavailable" });
|
|
666
|
+
ledger.refused.push({ path: key, reason: "base_unavailable", class: "base_unavailable" });
|
|
639
667
|
continue;
|
|
640
668
|
}
|
|
641
669
|
targetVersion = 1;
|
|
@@ -647,7 +675,7 @@ export class InMemoryFileHistoryStore {
|
|
|
647
675
|
}
|
|
648
676
|
const resolved = resolveTrackKey(root, key, t.keyDesc);
|
|
649
677
|
if (!resolved.ok) {
|
|
650
|
-
ledger.refused.push({ path: key, reason: resolved.reason });
|
|
678
|
+
ledger.refused.push({ path: key, reason: resolved.reason, class: resolved.class });
|
|
651
679
|
continue;
|
|
652
680
|
}
|
|
653
681
|
let target;
|
|
@@ -678,7 +706,7 @@ export class InMemoryFileHistoryStore {
|
|
|
678
706
|
else if (applied.outcome === "identical")
|
|
679
707
|
ledger.identicalSkipped.push(key);
|
|
680
708
|
else if (applied.outcome === "refused")
|
|
681
|
-
ledger.refused.push({ path: key, reason: applied.reason });
|
|
709
|
+
ledger.refused.push({ path: key, reason: applied.reason, class: applied.class });
|
|
682
710
|
else
|
|
683
711
|
ledger.failed.push({ path: key, reason: applied.reason });
|
|
684
712
|
if ((applied.outcome === "applied" || applied.outcome === "identical") && applied.modeNotPreserved === true)
|
|
@@ -688,7 +716,7 @@ export class InMemoryFileHistoryStore {
|
|
|
688
716
|
}
|
|
689
717
|
catch (err) {
|
|
690
718
|
const touched = empty.filesChanged.length > 0 || empty.identicalSkipped.length > 0 || empty.refused.length > 0 || empty.failed.length > 0;
|
|
691
|
-
return { outcome: touched ? "partial" : "failed", ...empty, error: { code: "restore_failed", message: thrownText(err) } };
|
|
719
|
+
return { outcome: touched ? "partial" : "failed", ...empty, error: { code: "restore_failed", message: thrownText(err), ...caughtFault(err) } };
|
|
692
720
|
}
|
|
693
721
|
}
|
|
694
722
|
async canRestore(scope, entryId) {
|
|
@@ -795,14 +823,12 @@ export class InMemoryFileHistoryStore {
|
|
|
795
823
|
return { ok: true };
|
|
796
824
|
}
|
|
797
825
|
catch (err) {
|
|
798
|
-
return { ok: false, error: { code: "adopt_failed", message: `adoptScope failed: ${thrownText(err)}
|
|
826
|
+
return { ok: false, error: { code: "adopt_failed", message: `adoptScope failed: ${thrownText(err)}`, ...caughtFault(err) } };
|
|
799
827
|
}
|
|
800
828
|
}
|
|
801
829
|
async exportHistory(scope) {
|
|
802
830
|
const sc = this.scopes.get(scope);
|
|
803
|
-
|
|
804
|
-
return null;
|
|
805
|
-
return this.exportOf(sc);
|
|
831
|
+
return { ok: true, history: sc === undefined || (sc.tracked.size === 0 && sc.boundaries.size === 0) ? null : this.exportOf(sc) };
|
|
806
832
|
}
|
|
807
833
|
exportOf(sc) {
|
|
808
834
|
return {
|
|
@@ -826,9 +852,9 @@ export class InMemoryFileHistoryStore {
|
|
|
826
852
|
const shaped = validateFileHistoryExport(data);
|
|
827
853
|
if (!shaped.ok)
|
|
828
854
|
return shaped;
|
|
829
|
-
const existing =
|
|
830
|
-
if (existing !==
|
|
831
|
-
if (fileHistoryExportDigest(existing) === fileHistoryExportDigest(data))
|
|
855
|
+
const existing = this.scopes.get(scope);
|
|
856
|
+
if (existing !== undefined && (existing.tracked.size > 0 || existing.boundaries.size > 0)) {
|
|
857
|
+
if (fileHistoryExportDigest(this.exportOf(existing)) === fileHistoryExportDigest(data))
|
|
832
858
|
return { ok: true };
|
|
833
859
|
return { ok: false, error: { code: "conflict", message: `importHistory target "${scope}" already holds a DIFFERENT history — a first import requires an empty target and a retry is legal only for the identical envelope (atomic visibility prevents half-graphs; this law prevents publishing the wrong complete graph over locally-grown history)` } };
|
|
834
860
|
}
|
|
@@ -848,7 +874,7 @@ export class InMemoryFileHistoryStore {
|
|
|
848
874
|
}
|
|
849
875
|
}
|
|
850
876
|
catch (err) {
|
|
851
|
-
return { ok: false, error: { code: "unsupported_format", message: `importHistory failed: ${thrownText(err)}
|
|
877
|
+
return { ok: false, error: { code: "unsupported_format", message: `importHistory failed: ${thrownText(err)}`, ...caughtFault(err) } };
|
|
852
878
|
}
|
|
853
879
|
}
|
|
854
880
|
async importStaged(scope, data, srcGetBlob, needed) {
|
|
@@ -862,10 +888,10 @@ export class InMemoryFileHistoryStore {
|
|
|
862
888
|
bytes = await srcGetBlob(hash);
|
|
863
889
|
}
|
|
864
890
|
catch (err) {
|
|
865
|
-
return { ok: false, error: { code: "unsupported_format", message: `source blob ${hash} fetch failed: ${thrownText(err)}
|
|
891
|
+
return { ok: false, error: { code: "unsupported_format", message: `source blob ${hash} fetch failed: ${thrownText(err)}`, ...caughtFault(err) } };
|
|
866
892
|
}
|
|
867
893
|
if (bytes === undefined)
|
|
868
|
-
return { ok: false, error: { code: "
|
|
894
|
+
return { ok: false, error: { code: "adopt_failed", message: `source blob ${hash} is missing — the envelope's graph cannot be completed, so nothing is published` } };
|
|
869
895
|
if (createHash("sha256").update(bytes).digest("hex") !== hash) {
|
|
870
896
|
return { ok: false, error: { code: "unsupported_format", message: `source blob ${hash} fails content-address integrity — refused, nothing published` } };
|
|
871
897
|
}
|
|
@@ -894,7 +920,7 @@ export class InMemoryFileHistoryStore {
|
|
|
894
920
|
return { ok: true };
|
|
895
921
|
}
|
|
896
922
|
catch (err) {
|
|
897
|
-
return { ok: false, error: { code: "unsupported_format", message: `importHistory failed: ${thrownText(err)}
|
|
923
|
+
return { ok: false, error: { code: "unsupported_format", message: `importHistory failed: ${thrownText(err)}`, ...caughtFault(err) } };
|
|
898
924
|
}
|
|
899
925
|
}
|
|
900
926
|
}
|
package/dist/core/gate-fold.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type GatePass } from "./runner/gate-exit.js";
|
|
2
2
|
import type { ToolGateResult } from "./hooks.js";
|
|
3
3
|
/**
|
|
4
4
|
* Run the fold over the pass: adjudicate, fold the hook-ask, tighten. Writes `req` (re-minted over the FINAL
|
package/dist/core/gate-fold.js
CHANGED
|
@@ -2,6 +2,8 @@ import { inlineUntrusted } from "./untrusted-text.js";
|
|
|
2
2
|
import { markTightenMessage } from "./safety-axis-vocab.js";
|
|
3
3
|
import { PROBE_REASON_MAX, normalizeProbeCause } from "./checkpoint-store.js";
|
|
4
4
|
import { normalizeReadRootCandidate } from "./read-root-candidate.js";
|
|
5
|
+
import { engineFailClosedExit, hookDenyExit } from "./runner/gate-exit.js";
|
|
6
|
+
import { readRejudge, screenRewrite } from "./rewrite-rejudge.js";
|
|
5
7
|
import { traceHookCrash } from "./gate-crash-trace.js";
|
|
6
8
|
import { writeProtectionMandated, writeProtectionTightenDecision } from "./write-protect.js";
|
|
7
9
|
import { createGateDeadline, awaitWriteProtectionJudgment, gateWaitFailureOf, withGateTimeout } from "./gate-bounded-await.js";
|
|
@@ -10,6 +12,7 @@ import { failedJudgmentDeny } from "./runner/policy-throw.js";
|
|
|
10
12
|
import { thrownText } from "./thrown-value.js";
|
|
11
13
|
import { argsAsTheToolReads } from "./effective-path-target.js";
|
|
12
14
|
import { foldHookAsk, refuseOutOfContractDecision } from "./tool-policy.js";
|
|
15
|
+
import { withProbeMandate } from "./ask-origin.js";
|
|
13
16
|
import { applyUnansweredSilence, readStationAnswer, silencedBy } from "./shell-read-silence.js";
|
|
14
17
|
import { asksUnstated, permissionSeatAt, unstatedAskMessage } from "./mode-policy.js";
|
|
15
18
|
export async function runGateFold(pass) {
|
|
@@ -25,7 +28,7 @@ export async function runGateFold(pass) {
|
|
|
25
28
|
catch (error) {
|
|
26
29
|
unread = { error };
|
|
27
30
|
}
|
|
28
|
-
pass.decision = unread !== undefined ? failedJudgmentDeny(unread.error, callSignal ?? input.abortSignal, (e) => traceHookCrash(input, e, notifier), "the call's target reading", { toolName, toolCallId }) : adjudicate ? refuseOutOfContractDecision(await (callSignal !== undefined ? adjudicate(pass.req, callSignal) : adjudicate(pass.req))) : { action: "allow" };
|
|
31
|
+
pass.decision = unread !== undefined ? failedJudgmentDeny(unread.error, callSignal ?? input.abortSignal, (e) => traceHookCrash(input, e, notifier), "the call's target reading", { toolName, toolCallId }) : adjudicate ? refuseOutOfContractDecision(await (callSignal !== undefined ? adjudicate(pass.req, callSignal) : adjudicate(pass.req)), { call: pass.req }) : { action: "allow" };
|
|
29
32
|
{
|
|
30
33
|
const read = ledger.fromDecision(pass.decision);
|
|
31
34
|
pass.decision = read.decision;
|
|
@@ -37,6 +40,18 @@ export async function runGateFold(pass) {
|
|
|
37
40
|
if (attributed !== undefined)
|
|
38
41
|
pass.classifierRound = attributed;
|
|
39
42
|
}
|
|
43
|
+
const rewritten = pass.screening !== undefined && pass.decision.action !== "deny" ? readRejudge(pass.req, pass.currentInput, pass.decision) : undefined;
|
|
44
|
+
if (pass.screening !== undefined && rewritten?.kind === "rewritten") {
|
|
45
|
+
const second = await screenRewrite(pass.screening, pass.req, rewritten.form, `the rewritten call to "${toolName}"`);
|
|
46
|
+
if (second.kind === "refused") {
|
|
47
|
+
pass.currentInput = rewritten.form;
|
|
48
|
+
return second.by === "hook" ? hookDenyExit(pass, second.reason) : await engineFailClosedExit(pass, second.reason);
|
|
49
|
+
}
|
|
50
|
+
if (second.answer?.additionalContext)
|
|
51
|
+
pass.preToolContext.push(second.answer.additionalContext);
|
|
52
|
+
pass.hookAsk = second.answer?.action === "ask" ? second.answer : undefined;
|
|
53
|
+
pass.hookAllowedBy = second.answer?.action === "allow" ? (second.answeredBy !== undefined ? [second.answeredBy] : []) : undefined;
|
|
54
|
+
}
|
|
40
55
|
if ((pass.decision.action === "allow" || pass.decision.action === "ask") && pass.decision.updatedInput !== undefined) {
|
|
41
56
|
pass.policyRewrite = argsAsTheToolReads(pass.req, pass.decision.updatedInput);
|
|
42
57
|
}
|
|
@@ -123,7 +138,7 @@ export async function runGateFold(pass) {
|
|
|
123
138
|
if (tighten) {
|
|
124
139
|
pass.decision = {
|
|
125
140
|
action: "ask",
|
|
126
|
-
message: markTightenMessage(toolName, "irreversible"),
|
|
141
|
+
message: markTightenMessage(toolName, input.irreversibility === "always" ? "irreversible" : "unproven"),
|
|
127
142
|
decisionReason: "safety",
|
|
128
143
|
...(probeReason !== undefined ? { probeReason } : {}),
|
|
129
144
|
...(probeCause !== undefined ? { probeCause } : {}),
|
|
@@ -133,7 +148,7 @@ export async function runGateFold(pass) {
|
|
|
133
148
|
pass.tightenedBy = input.shellGated === true ? "shell_gate" : "safety";
|
|
134
149
|
}
|
|
135
150
|
else if (alreadyAsking && probeMandated === true && pass.decision.action === "ask") {
|
|
136
|
-
pass.decision =
|
|
151
|
+
pass.decision = withProbeMandate(pass.decision, probeReason);
|
|
137
152
|
}
|
|
138
153
|
}
|
|
139
154
|
if (input.peerMessage === true && pass.decision.action === "allow" && input.autoMode !== undefined) {
|
|
@@ -218,19 +233,18 @@ function applyShellReadVerdict(pass, answer, toolName, shellGated) {
|
|
|
218
233
|
pass.shellReadDetails = verdict.details;
|
|
219
234
|
if (pass.decision.action !== "allow") {
|
|
220
235
|
if (pass.decision.action === "ask")
|
|
221
|
-
pass.decision =
|
|
236
|
+
pass.decision = silencedBy(withProbeMandate(pass.decision, account), verdict, pass.req);
|
|
222
237
|
return;
|
|
223
238
|
}
|
|
224
239
|
const candidate = normalizeReadRootCandidate(verdict.readRootCandidate);
|
|
225
|
-
pass.decision = {
|
|
240
|
+
pass.decision = silencedBy({
|
|
226
241
|
action: "ask",
|
|
227
242
|
message: shellReadAskMessage(toolName, verdict),
|
|
228
243
|
decisionReason: "safety",
|
|
229
244
|
probeMandated: true,
|
|
230
|
-
...silencedBy(verdict, {}),
|
|
231
245
|
...(account !== undefined ? { probeReason: account } : {}),
|
|
232
246
|
...(candidate !== undefined ? { probeReadRootCandidate: candidate } : {}),
|
|
233
|
-
};
|
|
247
|
+
}, verdict, pass.req);
|
|
234
248
|
if (candidate !== undefined)
|
|
235
249
|
pass.shellReadOffer = true;
|
|
236
250
|
pass.tightenedBy = shellGated ? "shell_gate" : "safety";
|
|
@@ -241,17 +255,16 @@ function applyShellReadVerdict(pass, answer, toolName, shellGated) {
|
|
|
241
255
|
if (verdict.details !== undefined)
|
|
242
256
|
pass.shellReadDetails = verdict.details;
|
|
243
257
|
if (pass.decision.action === "ask")
|
|
244
|
-
pass.decision =
|
|
258
|
+
pass.decision = silencedBy(pass.decision, verdict, pass.req);
|
|
245
259
|
if (pass.decision.action === "allow") {
|
|
246
260
|
const candidate = normalizeReadRootCandidate(verdict.readRootCandidate);
|
|
247
|
-
pass.decision = {
|
|
261
|
+
pass.decision = silencedBy({
|
|
248
262
|
action: "ask",
|
|
249
263
|
message: shellReadAskMessage(toolName, verdict),
|
|
250
264
|
decisionReason: "safety",
|
|
251
|
-
...silencedBy(verdict, {}),
|
|
252
265
|
...(account !== undefined ? { probeReason: account } : {}),
|
|
253
266
|
...(candidate !== undefined ? { probeReadRootCandidate: candidate } : {}),
|
|
254
|
-
};
|
|
267
|
+
}, verdict, pass.req);
|
|
255
268
|
if (candidate !== undefined)
|
|
256
269
|
pass.shellReadOffer = true;
|
|
257
270
|
pass.tightenedBy = shellGated ? "shell_gate" : "safety";
|