@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,7 +1,7 @@
|
|
|
1
|
-
import { existsSync, readdirSync, rmSync,
|
|
1
|
+
import { closeSync, existsSync, fstatSync, openSync, readdirSync, rmSync, utimesSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import { BaseSessionStorage, StoredSession, SessionError, assertForkTarget, forkRowCells, getEntriesToFork, incarnationCell, uuidv7, validateEntriesForImport, } from "../../internal/harness.js";
|
|
4
|
-
import { canonicalStoreKey, AppendLog, atomicWriteFile, ensureDir, readJsonlRecords, sanitizePathComponent } from "./fs-atomic.js";
|
|
3
|
+
import { BaseSessionStorage, StoredSession, SessionError, assertForkTarget, compareOccupants, forkRowCells, frozenRow, getEntriesToFork, importRowCells, incarnationCell, leafIdAfterEntry, ownerCell, readIncarnationCell, readOwnerCell, uuidv7, validateEntriesForImport, } from "../../internal/harness.js";
|
|
4
|
+
import { canonicalStoreKey, AppendLog, atomicWriteFile, ensureDir, firstJsonlRecord, lastJsonlRecord, readJsonlRecords, sanitizePathComponent, writeThenLink } from "./fs-atomic.js";
|
|
5
5
|
import { guardCorruptSink } from "./corrupt-read-sink.js";
|
|
6
6
|
import { assertAdoptionBootGate } from "./adoption/marker.js";
|
|
7
7
|
import { thrownText } from "../../core/thrown-value.js";
|
|
@@ -9,9 +9,14 @@ const SUFFIX = ".jsonl";
|
|
|
9
9
|
const SESSION_LINE_JUDGE = {
|
|
10
10
|
accepts: (r) => {
|
|
11
11
|
const line = r;
|
|
12
|
-
|
|
12
|
+
if (line.kind === "meta")
|
|
13
|
+
return true;
|
|
14
|
+
if (line.kind !== "entry" || line.entry === null || typeof line.entry !== "object" || Array.isArray(line.entry))
|
|
15
|
+
return false;
|
|
16
|
+
const entry = line.entry;
|
|
17
|
+
return typeof entry.id === "string" && (entry.type !== "leaf" || entry.targetId === null || typeof entry.targetId === "string");
|
|
13
18
|
},
|
|
14
|
-
what: "a session line is neither a meta header nor an entry record",
|
|
19
|
+
what: "a session line is neither a meta header nor an entry record with a string id (and, for a leaf, a string or null target)",
|
|
15
20
|
};
|
|
16
21
|
const sharedSessionStorages = new Map();
|
|
17
22
|
const sessionStorageFinalizer = new FinalizationRegistry(({ canonical, log }) => {
|
|
@@ -31,10 +36,12 @@ class FileSessionStorage extends BaseSessionStorage {
|
|
|
31
36
|
log;
|
|
32
37
|
canonicalPath;
|
|
33
38
|
holders = new Set();
|
|
39
|
+
occupant;
|
|
34
40
|
constructor(log, meta, entries, canonicalPath) {
|
|
35
41
|
super(meta, entries);
|
|
36
42
|
this.log = log;
|
|
37
43
|
this.canonicalPath = canonicalPath;
|
|
44
|
+
this.occupant = { incarnation: meta.incarnation };
|
|
38
45
|
}
|
|
39
46
|
addHolder(holder) {
|
|
40
47
|
this.holders.add(holder);
|
|
@@ -46,6 +53,9 @@ class FileSessionStorage extends BaseSessionStorage {
|
|
|
46
53
|
closeLog() {
|
|
47
54
|
this.log.close();
|
|
48
55
|
}
|
|
56
|
+
isViewOf(row) {
|
|
57
|
+
return this.log.isFileAtPath() && compareOccupants(this.occupant, row) !== "different";
|
|
58
|
+
}
|
|
49
59
|
persistSync(entry) {
|
|
50
60
|
this.log.append({ kind: "entry", entry }, true);
|
|
51
61
|
}
|
|
@@ -91,45 +101,70 @@ export class FileSessionRepo {
|
|
|
91
101
|
tally = info;
|
|
92
102
|
this.onCorruptRead?.({ ...info, sessionId: id });
|
|
93
103
|
}, SESSION_LINE_JUDGE);
|
|
94
|
-
|
|
104
|
+
const meta = this.headerOf(id, path, lines[0], () => ` (${tally?.dropped ?? 0} of ${tally?.total ?? lines.length} records skipped as corrupt)`);
|
|
95
105
|
const entries = [];
|
|
96
|
-
for (const line of lines)
|
|
97
|
-
if (line.kind === "
|
|
98
|
-
meta = line;
|
|
99
|
-
else
|
|
106
|
+
for (const line of lines)
|
|
107
|
+
if (line.kind === "entry")
|
|
100
108
|
entries.push(line.entry);
|
|
109
|
+
return { meta, entries };
|
|
110
|
+
}
|
|
111
|
+
headerOf(id, path, first, skipped = () => "") {
|
|
112
|
+
if (first === undefined || first.kind !== "meta")
|
|
113
|
+
throw new SessionError("corrupt_session", `Session ${id} is unreadable: its log has no meta header${skipped()}`);
|
|
114
|
+
const said = (key) => (detail) => this.disclose(path, `session header ${key}: ${detail}`, id);
|
|
115
|
+
const incarnation = readIncarnationCell(first.incarnation, said("incarnation"));
|
|
116
|
+
const forkedFromIncarnation = readIncarnationCell(first.forkedFromIncarnation, said("forkedFromIncarnation"));
|
|
117
|
+
return {
|
|
118
|
+
id,
|
|
119
|
+
createdAt: first.createdAt,
|
|
120
|
+
...(first.forkedFrom !== undefined ? { forkedFrom: first.forkedFrom } : {}),
|
|
121
|
+
...(first.placement !== undefined ? { placement: first.placement } : {}),
|
|
122
|
+
...(incarnation !== undefined ? { incarnation } : {}),
|
|
123
|
+
...(forkedFromIncarnation !== undefined ? { forkedFromIncarnation } : {}),
|
|
124
|
+
owner: readOwnerCell(first.owner, id),
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
async headOf(sessionId) {
|
|
128
|
+
return this.atRow(sessionId, (fd, size, meta) => {
|
|
129
|
+
const last = lastJsonlRecord(fd, size, (r) => r.kind === "entry", SESSION_LINE_JUDGE);
|
|
130
|
+
return { owner: meta.owner ?? null, incarnation: meta.incarnation, leafId: last === undefined ? null : leafIdAfterEntry(last.entry) };
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
rowOf(sessionId) {
|
|
134
|
+
return this.atRow(sessionId, (_fd, _size, meta, mtimeMs) => ({ ...meta, lastActiveAt: Math.trunc(mtimeMs) }));
|
|
135
|
+
}
|
|
136
|
+
atRow(sessionId, read) {
|
|
137
|
+
const path = this.pathFor(sessionId);
|
|
138
|
+
let fd;
|
|
139
|
+
try {
|
|
140
|
+
fd = openSync(path, "r");
|
|
101
141
|
}
|
|
102
|
-
|
|
103
|
-
|
|
142
|
+
catch (err) {
|
|
143
|
+
if (err.code === "ENOENT")
|
|
144
|
+
return undefined;
|
|
145
|
+
throw err;
|
|
104
146
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
147
|
+
try {
|
|
148
|
+
const { size, mtimeMs } = fstatSync(fd);
|
|
149
|
+
return read(fd, size, this.headerOf(sessionId, path, firstJsonlRecord(fd, size, SESSION_LINE_JUDGE)), mtimeMs);
|
|
150
|
+
}
|
|
151
|
+
finally {
|
|
152
|
+
closeSync(fd);
|
|
109
153
|
}
|
|
110
|
-
return {
|
|
111
|
-
meta: {
|
|
112
|
-
id,
|
|
113
|
-
createdAt,
|
|
114
|
-
...(forkedFrom !== undefined ? { forkedFrom } : {}),
|
|
115
|
-
...(placement !== undefined ? { placement } : {}),
|
|
116
|
-
...(typeof incarnation === "string" ? { incarnation } : {}),
|
|
117
|
-
...(typeof forkedFromIncarnation === "string" ? { forkedFromIncarnation } : {}),
|
|
118
|
-
},
|
|
119
|
-
entries,
|
|
120
|
-
};
|
|
121
154
|
}
|
|
122
155
|
storage(meta, entries) {
|
|
123
156
|
const { id } = meta;
|
|
124
157
|
const canonical = canonicalStoreKey(this.pathFor(id));
|
|
125
158
|
const live = sharedSessionStorages.get(canonical)?.deref();
|
|
126
|
-
if (live !== undefined) {
|
|
159
|
+
if (live !== undefined && live.isViewOf(meta)) {
|
|
127
160
|
live.addHolder(this);
|
|
128
161
|
this.joined.set(canonical, new WeakRef(live));
|
|
129
162
|
return live;
|
|
130
163
|
}
|
|
164
|
+
if (live !== undefined)
|
|
165
|
+
evictSharedSessionStorage(canonical);
|
|
131
166
|
const log = new AppendLog(this.pathFor(id));
|
|
132
|
-
const created = new FileSessionStorage(log, meta, entries, canonical);
|
|
167
|
+
const created = new FileSessionStorage(log, frozenRow({ ...meta, ...(meta.placement !== undefined ? { placement: { ...meta.placement } } : {}) }), entries, canonical);
|
|
133
168
|
sharedSessionStorages.set(canonical, new WeakRef(created));
|
|
134
169
|
created.addHolder(this);
|
|
135
170
|
this.joined.set(canonical, new WeakRef(created));
|
|
@@ -153,10 +188,17 @@ export class FileSessionRepo {
|
|
|
153
188
|
const createdAt = new Date().toISOString();
|
|
154
189
|
const path = this.pathFor(id);
|
|
155
190
|
if (!existsSync(path)) {
|
|
156
|
-
|
|
191
|
+
const owner = ownerCell(options.owner);
|
|
157
192
|
const placement = options.placement !== undefined ? { ...options.placement, placedAt: options.placement.placedAt ?? Date.now() } : undefined;
|
|
158
|
-
const meta = { id, createdAt, ...(placement !== undefined ? { placement } : {}), ...incarnationCell(undefined) };
|
|
159
|
-
|
|
193
|
+
const meta = { id, createdAt, ...(placement !== undefined ? { placement } : {}), ...incarnationCell(undefined), ...owner };
|
|
194
|
+
try {
|
|
195
|
+
writeThenLink(path, `${JSON.stringify({ kind: "meta", ...meta })}\n`);
|
|
196
|
+
}
|
|
197
|
+
catch (err) {
|
|
198
|
+
if (err.code === "EEXIST")
|
|
199
|
+
throw new SessionError("conflict", `session ${id} was created by another writer between this create's existence check and its write — refusing to replace or attach to that row`);
|
|
200
|
+
throw err;
|
|
201
|
+
}
|
|
160
202
|
return new StoredSession(this.storage(meta, []));
|
|
161
203
|
}
|
|
162
204
|
const { meta, entries } = this.read(id);
|
|
@@ -166,80 +208,65 @@ export class FileSessionRepo {
|
|
|
166
208
|
const { meta, entries } = this.read(metadata.id);
|
|
167
209
|
return new StoredSession(this.storage(meta, entries));
|
|
168
210
|
}
|
|
169
|
-
async
|
|
170
|
-
|
|
211
|
+
async touch(sessionId) {
|
|
212
|
+
const now = new Date();
|
|
171
213
|
try {
|
|
172
|
-
|
|
214
|
+
utimesSync(this.pathFor(sessionId), now, now);
|
|
173
215
|
}
|
|
174
216
|
catch (err) {
|
|
175
|
-
if (err.code
|
|
176
|
-
|
|
177
|
-
}
|
|
178
|
-
return [];
|
|
179
|
-
}
|
|
180
|
-
const out = [];
|
|
181
|
-
for (const name of names) {
|
|
182
|
-
if (!name.endsWith(SUFFIX))
|
|
183
|
-
continue;
|
|
184
|
-
const id = name.slice(0, -SUFFIX.length);
|
|
185
|
-
try {
|
|
186
|
-
const { createdAt, forkedFrom, placement } = this.read(id).meta;
|
|
187
|
-
if (placement !== undefined)
|
|
188
|
-
continue;
|
|
189
|
-
out.push({ id, createdAt, ...(forkedFrom !== undefined ? { forkedFrom } : {}) });
|
|
190
|
-
}
|
|
191
|
-
catch (err) {
|
|
192
|
-
if (!(err instanceof SessionError && err.code === "not_found")) {
|
|
193
|
-
this.disclose(this.pathFor(id), `session log unreadable (${thrownText(err)}) — skipped from the listing`, id);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
217
|
+
if (err.code === "ENOENT")
|
|
218
|
+
return;
|
|
219
|
+
throw new SessionError("storage", `session ${sessionId}'s activity could not be recorded: ${thrownText(err)}`, err instanceof Error ? err : undefined);
|
|
196
220
|
}
|
|
197
|
-
return out.sort((a, b) => a.createdAt.localeCompare(b.createdAt));
|
|
198
221
|
}
|
|
199
|
-
async
|
|
222
|
+
async list() {
|
|
223
|
+
return this.rows("the listing")
|
|
224
|
+
.filter((row) => row.placement === undefined)
|
|
225
|
+
.sort((a, b) => a.createdAt.localeCompare(b.createdAt));
|
|
226
|
+
}
|
|
227
|
+
rows(listing) {
|
|
200
228
|
let names;
|
|
201
229
|
try {
|
|
202
230
|
names = readdirSync(this.dir);
|
|
203
231
|
}
|
|
204
232
|
catch (err) {
|
|
205
233
|
if (err.code !== "ENOENT") {
|
|
206
|
-
this.disclose(this.dir, `session directory unreadable (${err.code ?? "unknown"}) —
|
|
234
|
+
this.disclose(this.dir, `session directory unreadable (${err.code ?? "unknown"}) — ${listing} degraded to empty`);
|
|
207
235
|
}
|
|
208
236
|
return [];
|
|
209
237
|
}
|
|
210
|
-
const now = Date.now();
|
|
211
238
|
const out = [];
|
|
212
239
|
for (const name of names) {
|
|
213
240
|
if (!name.endsWith(SUFFIX))
|
|
214
241
|
continue;
|
|
215
242
|
const id = name.slice(0, -SUFFIX.length);
|
|
216
|
-
let
|
|
243
|
+
let row;
|
|
217
244
|
try {
|
|
218
|
-
|
|
245
|
+
row = this.rowOf(id);
|
|
219
246
|
}
|
|
220
247
|
catch (err) {
|
|
221
|
-
|
|
222
|
-
this.disclose(this.pathFor(id), `session log unreadable (${thrownText(err)}) — skipped from the placed listing`, id);
|
|
223
|
-
}
|
|
248
|
+
this.disclose(this.pathFor(id), `session log unreadable (${thrownText(err)}) — skipped from ${listing}`, id);
|
|
224
249
|
continue;
|
|
225
250
|
}
|
|
251
|
+
if (row !== undefined)
|
|
252
|
+
out.push(row);
|
|
253
|
+
}
|
|
254
|
+
return out;
|
|
255
|
+
}
|
|
256
|
+
async listPlaced(kind, opts) {
|
|
257
|
+
const now = Date.now();
|
|
258
|
+
const out = [];
|
|
259
|
+
for (const row of this.rows("the placed listing")) {
|
|
260
|
+
const placement = row.placement;
|
|
226
261
|
if (placement === undefined || placement.kind !== kind)
|
|
227
262
|
continue;
|
|
228
263
|
if (opts?.scope !== undefined && placement.scope !== opts.scope)
|
|
229
264
|
continue;
|
|
230
|
-
if (opts?.olderThanMs !== undefined)
|
|
231
|
-
|
|
232
|
-
try {
|
|
233
|
-
ageAnchor = statSync(this.pathFor(id)).mtimeMs;
|
|
234
|
-
}
|
|
235
|
-
catch {
|
|
236
|
-
}
|
|
237
|
-
if (now - ageAnchor <= opts.olderThanMs)
|
|
238
|
-
continue;
|
|
239
|
-
}
|
|
265
|
+
if (opts?.olderThanMs !== undefined && now - row.lastActiveAt <= opts.olderThanMs)
|
|
266
|
+
continue;
|
|
240
267
|
out.push(placement.scope !== undefined && placement.handle !== undefined
|
|
241
|
-
? { sessionId: id, placedAt: placement.placedAt, scope: placement.scope, handle: placement.handle }
|
|
242
|
-
: { sessionId: id, placedAt: placement.placedAt, tupleIncomplete: true });
|
|
268
|
+
? { sessionId: row.id, placedAt: placement.placedAt, scope: placement.scope, handle: placement.handle }
|
|
269
|
+
: { sessionId: row.id, placedAt: placement.placedAt, tupleIncomplete: true });
|
|
243
270
|
}
|
|
244
271
|
return out;
|
|
245
272
|
}
|
|
@@ -248,15 +275,19 @@ export class FileSessionRepo {
|
|
|
248
275
|
return this.read(id).meta;
|
|
249
276
|
}
|
|
250
277
|
catch (err) {
|
|
251
|
-
|
|
278
|
+
if (err instanceof SessionError && err.code === "not_found")
|
|
279
|
+
return undefined;
|
|
280
|
+
throw err;
|
|
252
281
|
}
|
|
253
282
|
}
|
|
254
283
|
async placementOf(sessionId) {
|
|
255
284
|
try {
|
|
256
285
|
return this.read(sessionId).meta.placement;
|
|
257
286
|
}
|
|
258
|
-
catch {
|
|
259
|
-
|
|
287
|
+
catch (err) {
|
|
288
|
+
if (err instanceof SessionError && err.code === "not_found")
|
|
289
|
+
return undefined;
|
|
290
|
+
throw err;
|
|
260
291
|
}
|
|
261
292
|
}
|
|
262
293
|
async delete(metadata) {
|
|
@@ -275,7 +306,7 @@ export class FileSessionRepo {
|
|
|
275
306
|
const id = options.id ?? uuidv7();
|
|
276
307
|
const createdAt = new Date().toISOString();
|
|
277
308
|
const path = this.pathFor(id);
|
|
278
|
-
const meta = { id, createdAt, ...forkRowCells(await source.getMetadata()) };
|
|
309
|
+
const meta = { id, createdAt, ...forkRowCells(await source.getMetadata(), options.owner) };
|
|
279
310
|
const lines = [JSON.stringify({ kind: "meta", ...meta })];
|
|
280
311
|
for (const entry of forked) {
|
|
281
312
|
lines.push(JSON.stringify({ kind: "entry", entry }));
|
|
@@ -288,12 +319,10 @@ export class FileSessionRepo {
|
|
|
288
319
|
return this.read(sessionId).entries;
|
|
289
320
|
}
|
|
290
321
|
async importEntries(sessionId, owner, entries, options) {
|
|
291
|
-
void owner;
|
|
292
322
|
const validated = validateEntriesForImport(entries, options);
|
|
293
|
-
const
|
|
323
|
+
const meta = importRowCells(sessionId, owner, this.priorHeader(sessionId), new Date().toISOString());
|
|
294
324
|
evictSharedSessionStorage(canonicalStoreKey(this.pathFor(sessionId)));
|
|
295
|
-
const
|
|
296
|
-
const lines = [JSON.stringify({ kind: "meta", id: sessionId, createdAt, ...incarnationCell(prior) })];
|
|
325
|
+
const lines = [JSON.stringify({ kind: "meta", ...meta })];
|
|
297
326
|
for (const entry of validated) {
|
|
298
327
|
lines.push(JSON.stringify({ kind: "entry", entry }));
|
|
299
328
|
}
|
|
@@ -48,9 +48,9 @@ export declare const RESUME_CLAIM_SWEEP_INTERVAL_MS = 60000;
|
|
|
48
48
|
*/
|
|
49
49
|
export declare const RESUME_CLAIM_REAP_GRACE_MS: number;
|
|
50
50
|
export interface FileWorkflowJournalStoreOptions {
|
|
51
|
-
/** Disclosure seat for a ledger line
|
|
52
|
-
* with
|
|
53
|
-
*
|
|
51
|
+
/** Disclosure seat for a ledger line that is not one of the run's records (not JSON, not an object, no `scope` /
|
|
52
|
+
* `ordinal`, another scope) and — with the refusal, carrying the ledger's path — for whatever refused a `load`.
|
|
53
|
+
* Never fires on a missing ledger or on a crash's unterminated tail; swallow-guarded. */
|
|
54
54
|
onCorruptRead?: (info: CorruptReadInfo) => void;
|
|
55
55
|
}
|
|
56
56
|
export declare class FileWorkflowJournalStore implements WorkflowJournalStore {
|
|
@@ -79,9 +79,15 @@ export declare class FileWorkflowJournalStore implements WorkflowJournalStore {
|
|
|
79
79
|
/** CC local form: the run's on-disk journal path for the notification diagnostics line.
|
|
80
80
|
* Traversal-shaped ids (LLM-controlled on some paths) degrade to undefined, never throw. */
|
|
81
81
|
locator(runId: string): string | undefined;
|
|
82
|
-
/** Replay a run's ledger: last-writer-wins per ordinal
|
|
82
|
+
/** Replay a run's ledger: last-writer-wins per ordinal, with every line that is not one of the run's records
|
|
83
|
+
* (`notRecords`) and the scope the first record fixes. Rows come back as written — which arm each one is, and
|
|
84
|
+
* whether anything refuses, is {@link load}'s question, so the scope lookup `append` makes refuses on nothing. */
|
|
83
85
|
private replay;
|
|
84
86
|
append(runId: string, scope: string, entry: WorkflowJournalEntry): Promise<void>;
|
|
87
|
+
/** The run's entries, ascending by ordinal, each winning line read through {@link readWorkflowJournalEntry}. A
|
|
88
|
+
* ledger line that is not one of the run's records, or a corrupt row, REFUSES the whole load: dropped, what it
|
|
89
|
+
* held would look never journaled and a resume would run it again. Only the unterminated tail a crash leaves is
|
|
90
|
+
* uncommitted. The location goes to `onCorruptRead`, not into the message; a superseded line is not read. */
|
|
85
91
|
load(runId: string, scope: string): Promise<WorkflowJournalEntry[]>;
|
|
86
92
|
/**
|
|
87
93
|
* RB-242 — the claim file for `(sourceRunId, scope)`. Keyed by BOTH: a cross-scope caller already
|
|
@@ -1,18 +1,13 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, readdirSync, statSync, unlinkSync } from "node:fs";
|
|
2
2
|
import { createHash } from "node:crypto";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
-
import { callKeyOrdinal } from "../../core/workflow-journal-store.js";
|
|
4
|
+
import { callKeyOrdinal, readWorkflowJournalEntry, WorkflowJournalIncompatibleError, } from "../../core/workflow-journal-store.js";
|
|
5
5
|
import { AppendLog, readJsonlRecords } from "./fs-atomic.js";
|
|
6
6
|
import { guardCorruptSink } from "./corrupt-read-sink.js";
|
|
7
7
|
import { canonicalStoreKey, sanitizePathComponent, writeThenLink } from "./fs-atomic.js";
|
|
8
8
|
import { assertAdoptionBootGate } from "./adoption/marker.js";
|
|
9
9
|
import { assertJournalEntryFits } from "../../core/workflow-journal-store.js";
|
|
10
10
|
export { MAX_JOURNAL_RESULT_BYTES, oversizeJournalResult } from "../../core/workflow-journal-store.js";
|
|
11
|
-
function entryOf(rec) {
|
|
12
|
-
if (rec.parked !== undefined)
|
|
13
|
-
return { callKey: rec.callKey, parked: rec.parked };
|
|
14
|
-
return { callKey: rec.callKey, result: rec.result };
|
|
15
|
-
}
|
|
16
11
|
export const RESUME_CLAIM_TTL_MS = 60 * 60 * 1000;
|
|
17
12
|
export const RESUME_CLAIM_RELEASE_GRACE_MS = 5_000;
|
|
18
13
|
export const RESUME_CLAIM_SWEEP_INTERVAL_MS = 60_000;
|
|
@@ -21,7 +16,7 @@ const sharedJournalDirs = new Map();
|
|
|
21
16
|
const MAX_OPEN_JOURNAL_LOGS = 64;
|
|
22
17
|
function isJournalLine(r) {
|
|
23
18
|
const rec = r;
|
|
24
|
-
return typeof rec.
|
|
19
|
+
return typeof rec.scope === "string" && Number.isFinite(rec.ordinal);
|
|
25
20
|
}
|
|
26
21
|
export class FileWorkflowJournalStore {
|
|
27
22
|
fsyncEnabled;
|
|
@@ -86,11 +81,17 @@ export class FileWorkflowJournalStore {
|
|
|
86
81
|
scope ??= r.scope;
|
|
87
82
|
return r.scope === scope;
|
|
88
83
|
},
|
|
89
|
-
what: "a journal line carries no
|
|
84
|
+
what: "a journal line carries no scope/ordinal pair, or a scope other than its run's first line",
|
|
85
|
+
};
|
|
86
|
+
const notRecords = [];
|
|
87
|
+
const onCorrupt = (info) => {
|
|
88
|
+
if (info.kind === "record")
|
|
89
|
+
notRecords.push(info);
|
|
90
|
+
this.discloseCorrupt?.(info);
|
|
90
91
|
};
|
|
91
|
-
for (const rec of readJsonlRecords(path,
|
|
92
|
-
byOrdinal.set(rec.ordinal,
|
|
93
|
-
return
|
|
92
|
+
for (const rec of readJsonlRecords(path, onCorrupt, judge))
|
|
93
|
+
byOrdinal.set(rec.ordinal, rec);
|
|
94
|
+
return { scope, byOrdinal, notRecords };
|
|
94
95
|
}
|
|
95
96
|
async append(runId, scope, entry) {
|
|
96
97
|
assertJournalEntryFits(entry);
|
|
@@ -126,9 +127,23 @@ export class FileWorkflowJournalStore {
|
|
|
126
127
|
}
|
|
127
128
|
async load(runId, scope) {
|
|
128
129
|
const rec = this.replay(runId);
|
|
129
|
-
if (!rec || rec.scope !== scope)
|
|
130
|
+
if (!rec || (rec.scope !== undefined && rec.scope !== scope))
|
|
130
131
|
return [];
|
|
131
|
-
|
|
132
|
+
const lost = rec.notRecords[0];
|
|
133
|
+
if (lost !== undefined) {
|
|
134
|
+
this.discloseCorrupt?.({ kind: "file", path: this.pathFor(runId), reason: `${lost.form}: ledger line ${lost.line} is not one of the run's records (the run's journal is refused)` });
|
|
135
|
+
throw WorkflowJournalIncompatibleError.ledgerLine(runId, lost.line, lost.form);
|
|
136
|
+
}
|
|
137
|
+
const out = [];
|
|
138
|
+
for (const [ordinal, line] of [...rec.byOrdinal.entries()].sort((a, b) => a[0] - b[0])) {
|
|
139
|
+
const read = readWorkflowJournalEntry(line);
|
|
140
|
+
if ("corrupt" in read) {
|
|
141
|
+
this.discloseCorrupt?.({ kind: "file", path: this.pathFor(runId), reason: `${read.corrupt}: journal entry #${ordinal} ${read.why} (the run's journal is refused)` });
|
|
142
|
+
throw new WorkflowJournalIncompatibleError(runId, ordinal, line);
|
|
143
|
+
}
|
|
144
|
+
out.push(read.entry);
|
|
145
|
+
}
|
|
146
|
+
return out;
|
|
132
147
|
}
|
|
133
148
|
claimPathFor(sourceRunId, scope) {
|
|
134
149
|
const scopeTag = createHash("sha256").update(scope).digest("hex").slice(0, 16);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The model-facing text of the Artifact tool. Every sentence is the upstream tool's wording, taken
|
|
3
|
-
* byte-for-byte from the reference corpus (
|
|
3
|
+
* byte-for-byte from the reference corpus (the line of each constant is
|
|
4
4
|
* noted beside it) with one class of edit: a reference to a hosting product this library does not have
|
|
5
5
|
* (`claude.ai`, its terminal/gallery/Slack surfaces, an `out_dir` save) is replaced by the smallest
|
|
6
6
|
* neutral phrase. The replacement list is registered in the divergence register beside this package.
|
|
@@ -8,8 +8,8 @@ const ARTIFACT_ACTION_LEGS = {
|
|
|
8
8
|
hosted: { publish: ["env", "outside_write"], list: ["outside_read"], read: ["outside_read"], list_files: ["outside_read"], read_file: ["outside_read"] },
|
|
9
9
|
"local-stub": { publish: ["env"], list: [], read: [], list_files: [], read_file: [] },
|
|
10
10
|
};
|
|
11
|
-
import { ARTIFACT_TOOL_NAME, toolFace } from "../../core/tool-catalog-entries.js";
|
|
12
|
-
import { resolveAsk } from "../../core/tool-policy.js";
|
|
11
|
+
import { ARTIFACT_TOOL_NAME, mountRuleFace, toolFace } from "../../core/tool-catalog-entries.js";
|
|
12
|
+
import { attest, resolveAsk } from "../../core/tool-policy.js";
|
|
13
13
|
import { NOT_BINDABLE } from "../../core/skill-grant-binding.js";
|
|
14
14
|
import { approvalCardOf } from "../../core/tool-roster.js";
|
|
15
15
|
import { errorResult } from "../../core/tools.js";
|
|
@@ -328,7 +328,8 @@ export function createArtifactTool(opts) {
|
|
|
328
328
|
if (sharedReadApproved.has(url))
|
|
329
329
|
return Promise.resolve({ ok: true });
|
|
330
330
|
if (permissionMode !== undefined) {
|
|
331
|
-
const
|
|
331
|
+
const call = { toolCallId: ctx.toolCallId, toolName: ARTIFACT_TOOL_NAME };
|
|
332
|
+
const verdict = arbitrateByMode(permissionMode(), classifyAsk(attest({ action: "ask", requiresRealApproval: true }, call, { guards: ["artifact_shared_read"] }), { call, contentQuestion: false, markedUnresolvable: false, org: undefined, tightened: undefined, mandateMarks: {} }));
|
|
332
333
|
if (verdict.kind === "released") {
|
|
333
334
|
if (!releaseAnnounced && onNotice !== undefined) {
|
|
334
335
|
releaseAnnounced = true;
|
|
@@ -448,6 +449,7 @@ export function createArtifactTool(opts) {
|
|
|
448
449
|
return {
|
|
449
450
|
name: ARTIFACT_TOOL_NAME,
|
|
450
451
|
...toolFace("artifact"),
|
|
452
|
+
ruleFace: mountRuleFace("artifact"),
|
|
451
453
|
contentOrigin: ARTIFACT_PLANE_CONTENT_ORIGIN[caps.plane],
|
|
452
454
|
description: artifactDescription(caps.plane, caps.actions),
|
|
453
455
|
parameters: buildSchema(caps),
|
|
@@ -39,14 +39,27 @@ export declare const LOOP_LIST_HEADS: ReadonlySet<string>;
|
|
|
39
39
|
* over control words and earlier assignments re-traces). One fact, two readers that must agree.
|
|
40
40
|
*/
|
|
41
41
|
export declare function isLeadingAssignmentWord(words: readonly LexedWord[], i: number): boolean;
|
|
42
|
-
export declare const PROGRAM_POSITION_REFUSAL_KINDS: readonly ["option_at_program_position", "control_syntax_at_program_position"];
|
|
42
|
+
export declare const PROGRAM_POSITION_REFUSAL_KINDS: readonly ["option_at_program_position", "control_syntax_at_program_position", "wildcard_program_word"];
|
|
43
43
|
export type ProgramPositionRefusalKind = (typeof PROGRAM_POSITION_REFUSAL_KINDS)[number];
|
|
44
44
|
/** Why the program could not be read — a closed set, each member minted into one sentence. `owner` is the word
|
|
45
45
|
* that took the offending token: the control word or the first launcher of the chain. */
|
|
46
|
-
export type ProgramPositionRefusal =
|
|
46
|
+
export type ProgramPositionRefusal =
|
|
47
|
+
/** `endedBy`: the launcher whose bare `--` ended its options before this word — the word is then no option of anyone's
|
|
48
|
+
* but a name spelled like one (`env -- -i ls` runs a program named `-i`), and the sentence says that, not "the option". */
|
|
49
|
+
{
|
|
47
50
|
readonly kind: "option_at_program_position";
|
|
48
51
|
readonly owner: string;
|
|
49
52
|
readonly option: string;
|
|
53
|
+
readonly endedBy?: string;
|
|
54
|
+
}
|
|
55
|
+
/** The program word carries an unquoted glob (`s[h]`, `s*h`, `./c?t`): the shell expands it against the filesystem,
|
|
56
|
+
* so which program runs — a shell among them — is not readable from the text (`touch sh; s[h] -c '…'`). `word` is the
|
|
57
|
+
* word as written, `at` its argv index (the words AFTER it are still handed over, so a deny operand still refuses).
|
|
58
|
+
* Both faces ask, the same as any unreadable program position. */
|
|
59
|
+
| {
|
|
60
|
+
readonly kind: "wildcard_program_word";
|
|
61
|
+
readonly word: string;
|
|
62
|
+
readonly at: number;
|
|
50
63
|
} | {
|
|
51
64
|
readonly kind: "control_syntax_at_program_position";
|
|
52
65
|
readonly owner: string;
|
|
@@ -130,3 +143,7 @@ export declare function programPositionRunsShell(pos: ProgramPosition, runsShell
|
|
|
130
143
|
export declare function shellScanDeclineOf(pos: ProgramPosition, acceptsStreamTarget: (basename: string) => boolean): ShellScanDecline | undefined;
|
|
131
144
|
/** ONE sentence per refusal kind, minted here and nowhere else. */
|
|
132
145
|
export declare function programPositionRefusalSentence(refusal: ProgramPositionRefusal): string;
|
|
146
|
+
/** The sentence a segment whose program the walk DECLINED carries, read off the segment's text — the program-position reader's own
|
|
147
|
+
* refusal, the stream fact, or that no program could be named: the read station's account of the segment and the removal guard's
|
|
148
|
+
* are this one sentence. */
|
|
149
|
+
export declare function declinedProgramSentence(text: string): string;
|