@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
|
@@ -3,8 +3,7 @@ import { canonicalize, UNCANONICALIZABLE } from "../core/canonical-json.js";
|
|
|
3
3
|
import { SPAWNER_SURFACE_LEG_KINDS } from "../core/tool-face.js";
|
|
4
4
|
import { ruleSpellingOf } from "../core/permission-rule-syntax.js";
|
|
5
5
|
import { TOOL_CATALOG_ENTRIES } from "../core/tool-catalog-entries.js";
|
|
6
|
-
import {
|
|
7
|
-
import { protocolOf } from "../core/protocol-table.js";
|
|
6
|
+
import { isCoveringRuleName, ruleNameCovers, ruleNameReachIntoPeer } from "../core/namespaced-rule-name.js";
|
|
8
7
|
import { splitNamespacedName } from "../core/tool-name-aliases.js";
|
|
9
8
|
import { readToolNameList, snapshotToolNameList, valueTypeLabel } from "../core/tool-name-list.js";
|
|
10
9
|
export function readDeniedEntry(entry) {
|
|
@@ -72,23 +71,19 @@ export function persistedToolNameList(entries, side) {
|
|
|
72
71
|
function reachOf(entries, side) {
|
|
73
72
|
const names = new Set();
|
|
74
73
|
const covering = [];
|
|
75
|
-
const wholeProtocols = new Set();
|
|
76
74
|
for (const entry of entries) {
|
|
77
75
|
const name = toolNameOfEntry(entry, side);
|
|
78
76
|
if (name === undefined)
|
|
79
77
|
continue;
|
|
80
|
-
|
|
81
|
-
if (split !== undefined && split.tool === undefined && split.peer === "*") {
|
|
82
|
-
if (side === "denied")
|
|
83
|
-
wholeProtocols.add(split.ns.id);
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
if (isNamespacedCoveringRuleName(name))
|
|
78
|
+
if (isCoveringRuleName(name, side === "denied" ? "deny" : "allow"))
|
|
87
79
|
covering.push(name);
|
|
88
|
-
else
|
|
80
|
+
else if (!name.includes("*"))
|
|
89
81
|
names.add(name);
|
|
90
82
|
}
|
|
91
|
-
return { names, covering
|
|
83
|
+
return { names, covering };
|
|
84
|
+
}
|
|
85
|
+
export function namesEveryTool(entry) {
|
|
86
|
+
return toolNameOfEntry(entry, "allowed") === "*";
|
|
92
87
|
}
|
|
93
88
|
export function readAllowedToolList(allowTools) {
|
|
94
89
|
if (allowTools === undefined || allowTools === null)
|
|
@@ -96,7 +91,7 @@ export function readAllowedToolList(allowTools) {
|
|
|
96
91
|
const list = readToolNameList(allowTools);
|
|
97
92
|
if (list.kind !== "entries")
|
|
98
93
|
return reachOf([], "allowed");
|
|
99
|
-
if (list.entries.some(
|
|
94
|
+
if (list.entries.some(namesEveryTool))
|
|
100
95
|
return undefined;
|
|
101
96
|
return reachOf(list.entries, "allowed");
|
|
102
97
|
}
|
|
@@ -109,13 +104,8 @@ export function listReaches(reach, tool) {
|
|
|
109
104
|
if (reach.names.has(spelling))
|
|
110
105
|
return true;
|
|
111
106
|
for (const pattern of reach.covering)
|
|
112
|
-
if (
|
|
107
|
+
if (ruleNameCovers(pattern, spelling))
|
|
113
108
|
return true;
|
|
114
|
-
if (reach.wholeProtocols.size > 0) {
|
|
115
|
-
const ns = protocolOf(spelling);
|
|
116
|
-
if (ns !== undefined && reach.wholeProtocols.has(ns.id))
|
|
117
|
-
return true;
|
|
118
|
-
}
|
|
119
109
|
}
|
|
120
110
|
return false;
|
|
121
111
|
}
|
|
@@ -127,21 +117,11 @@ export function protocolToolNames(legs) {
|
|
|
127
117
|
return [...new Set(PROTOCOL_ROWS.filter((r) => r.legs.some((l) => legs.includes(l))).map((r) => r.name))];
|
|
128
118
|
}
|
|
129
119
|
function reachTouchesPeer(reach, peer) {
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
const inPeer = (spelling) => {
|
|
133
|
-
const split = splitNamespacedName(spelling);
|
|
134
|
-
return split !== undefined && split.ns.id === peer.ns && split.peer === peer.peer;
|
|
135
|
-
};
|
|
136
|
-
return [...reach.names].some(inPeer) || reach.covering.some(inPeer);
|
|
120
|
+
const into = (spelling) => ruleNameReachIntoPeer(spelling, peer.ns, peer.peer) !== "none";
|
|
121
|
+
return [...reach.names].some(into) || reach.covering.some(into);
|
|
137
122
|
}
|
|
138
123
|
function reachCoversPeer(reach, peer) {
|
|
139
|
-
|
|
140
|
-
return true;
|
|
141
|
-
return reach.covering.some((pattern) => {
|
|
142
|
-
const split = splitNamespacedName(pattern);
|
|
143
|
-
return split !== undefined && split.ns.id === peer.ns && split.peer === peer.peer && (split.tool === undefined || split.tool === "*");
|
|
144
|
-
});
|
|
124
|
+
return reach.covering.some((pattern) => ruleNameReachIntoPeer(pattern, peer.ns, peer.peer) === "all");
|
|
145
125
|
}
|
|
146
126
|
export function isToolSelectorLayer(layer) {
|
|
147
127
|
return typeof layer === "object" && layer !== null && !Array.isArray(layer);
|
|
@@ -166,7 +146,7 @@ export function compileToolSelector(layers, legs = []) {
|
|
|
166
146
|
const split = splitNamespacedName(prefix);
|
|
167
147
|
if (split === undefined)
|
|
168
148
|
return false;
|
|
169
|
-
const peer = { ns: split.ns
|
|
149
|
+
const peer = { ns: split.ns, peer: split.peer };
|
|
170
150
|
return compiled.every((l) => (l.allow === undefined || reachTouchesPeer(l.allow, peer)) && !reachCoversPeer(l.deny, peer));
|
|
171
151
|
},
|
|
172
152
|
});
|
package/dist/agents/verify.d.ts
CHANGED
|
@@ -7,13 +7,13 @@ import type { ModelRef, TaskResult, TaskSpec, TaskStatus, ToolSpec } from "../co
|
|
|
7
7
|
* an implementation task and tries to BREAK it — read-only, evidence-required, returning a structured
|
|
8
8
|
* verdict — then the gate loops fix→re-verify until PASS or a round cap.
|
|
9
9
|
*
|
|
10
|
-
* PROVENANCE (2026-07-14; re-verified and CORRECTED
|
|
10
|
+
* PROVENANCE (2026-07-14; re-verified and CORRECTED): distilled and de-branded from the
|
|
11
11
|
* MIT-era upstream source's dedicated `verification` agent — which was an Anthropic-internal A/B experiment
|
|
12
|
-
* (third-party default OFF) and has since been RETIRED upstream:
|
|
12
|
+
* (third-party default OFF) and has since been RETIRED upstream: later releases ship NO verification
|
|
13
13
|
* agent. The current upstream completion-gate shape is (a) the Stop hook (`decision:"block"` + reason fed
|
|
14
14
|
* back — sema's Stop hook is at full parity) and (b) — corrected — NOT a bundled skill. There is no built-in
|
|
15
15
|
* `verify` skill in the 220 corpus. What 220 ships is an INSTRUCTION TO CREATE ONE PER PROJECT: its memory
|
|
16
|
-
* prompt
|
|
16
|
+
* prompt forbids creating project skills ("never create one — a new project skill
|
|
17
17
|
* silently shadows a same-named built-in skill") and makes exactly one exception — "The single exception is
|
|
18
18
|
* verify, because how a project verifies changes is project-specific: put a verify correction in the
|
|
19
19
|
* `.claude/skills/verify/ SKILL.md` closest to the code it covers … and if that file does not exist, create
|
|
@@ -338,8 +338,9 @@ export interface DeveloperTaskConfig extends VerifyConfig {
|
|
|
338
338
|
verify?: boolean;
|
|
339
339
|
}
|
|
340
340
|
/**
|
|
341
|
-
* One-stop developer-mode convenience:
|
|
342
|
-
* own
|
|
341
|
+
* One-stop developer-mode convenience: gives the task the catalog's coding role base by word (`promptRole: "code"`, on
|
|
342
|
+
* the task's own seat, so no role preset overtakes it) unless the task names a role base of its own (`promptRole` or
|
|
343
|
+
* `systemPrompt`), and, by default, runs the {@link runWithVerification} gate. Equivalent to wiring
|
|
343
344
|
* the building blocks by hand — use the building blocks directly when you want full control.
|
|
344
345
|
*
|
|
345
346
|
* Pair with a role map that gives a strong implementation model and cheaper helper/verifier models for
|
package/dist/agents/verify.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Type } from "typebox";
|
|
2
|
-
import {
|
|
2
|
+
import { namesRoleBase } from "../prompt-assembly/role-base.js";
|
|
3
3
|
import { releaseSession } from "./session-util.js";
|
|
4
4
|
import { childClampSeats, clampSourceOf, engineHeadlessLegSeats } from "../core/child-clamp-seats.js";
|
|
5
5
|
import { mapNestedSuspend, isDurablePause, pauseFamily } from "./suspend-guard.js";
|
|
@@ -179,7 +179,7 @@ export async function verifyCompleted(runner, result, specBase, objective, confi
|
|
|
179
179
|
? { restoreGatedTools: Array.isArray(specBase.restoreGatedTools) ? [...specBase.restoreGatedTools] : specBase.restoreGatedTools }
|
|
180
180
|
: {}),
|
|
181
181
|
...(specBase.clientContext !== undefined ? { clientContext: { ...specBase.clientContext } } : {}),
|
|
182
|
-
...(specBase.
|
|
182
|
+
...(specBase.promptLean !== undefined ? { promptLean: specBase.promptLean } : {}),
|
|
183
183
|
signal: specBase.signal,
|
|
184
184
|
};
|
|
185
185
|
const v = await runner.runTask(verifierSpec, withLegIdentity(legInternals(), { kind: "verifier", round }));
|
|
@@ -297,7 +297,7 @@ export async function resumeWithVerification(runner, token, outcome, taskConfig,
|
|
|
297
297
|
return verifyCompleted(runner, result, taskConfig, objective, config, internals);
|
|
298
298
|
}
|
|
299
299
|
export async function runDeveloperTask(runner, spec, config = {}, internals) {
|
|
300
|
-
const implSpec =
|
|
300
|
+
const implSpec = namesRoleBase(spec) ? spec : { ...spec, promptRole: "code" };
|
|
301
301
|
if (config.verify === false) {
|
|
302
302
|
const result = await runner.runTask(implSpec, withLegIdentity(internals, IMPL_LEG));
|
|
303
303
|
return { ...result, verification: { verdict: "unverified", unverifiedReason: "opted_out", rounds: 0, findings: [] } };
|
package/dist/brain/anthropic.js
CHANGED
|
@@ -5,20 +5,15 @@ import { DEGENERATE_MESSAGE, trimDegenerateTail } from "./repetition.js";
|
|
|
5
5
|
import { STREAM_TORN_WARNING, createRepetitionPoll, createStreamEndLedger, modelOutputInvalidOf, noteResponseModel, nameMissingCause, parseStreamedToolArgs, placeTurnNotes, truncationCauseClause } from "./stream-shared.js";
|
|
6
6
|
import { admitToolCallId, providerResultIds, providerToolCallId, responseToolCallIds } from "./tool-call-id.js";
|
|
7
7
|
import { emitBrainTelemetry, reportReasoningWireFacts } from "./status-sink.js";
|
|
8
|
-
import { errorResultMediaNote, IMAGE_OMITTED_NO_VISION,
|
|
9
|
-
import { ANTHROPIC_RESERVED, OUTPUT_CAP_KEYS, applyExtraBody, effectiveOutputCap, headerBagOnce, lockHeader, mergeHeaders,
|
|
8
|
+
import { errorResultMediaNote, IMAGE_OMITTED_NO_VISION, imageWithholdOf, reportImagesWithheld, sendableImages } from "./media-degrade.js";
|
|
9
|
+
import { ANTHROPIC_RESERVED, OUTPUT_CAP_KEYS, applyExtraBody, effectiveOutputCap, headerBagOnce, lockHeader, mergeHeaders, takeHeaderSpellings } from "./request-params.js";
|
|
10
10
|
import { admitRouteRequest, applyRouteCredentialHeaders, assertServableRequestRoot, brainConfigSnapshot, createBrainRouteJudge, joinRequestUrl, resolveRequestRootOf, resolveRouteCredential } from "./route-adjudicator.js";
|
|
11
11
|
import { requestRouteOf } from "./request-route.js";
|
|
12
|
-
import {
|
|
12
|
+
import { NAMES_AS_WRITTEN, resolveProviderDialect, endpointToolNames } from "./provider-dialect.js";
|
|
13
|
+
import { applyReasoningToRequest, mergeReasoningHeaders } from "./reasoning-request.js";
|
|
13
14
|
import { runStreamingBrain } from "./stream-engine.js";
|
|
14
15
|
import { refuseRetiredTimeoutKnobs } from "./timeout.js";
|
|
15
16
|
import { resolveFetch } from "./transport.js";
|
|
16
|
-
function thinkingBudget(maxTokens, share, fixed, hardCap = false) {
|
|
17
|
-
const max = hardCap ? maxTokens : Math.max(maxTokens, MIN_THINKING_TOKENS * 2);
|
|
18
|
-
const want = fixed ?? Math.floor(max * share);
|
|
19
|
-
const budget = Math.min(Math.max(MIN_THINKING_TOKENS, want), max - 1);
|
|
20
|
-
return { max, budget };
|
|
21
|
-
}
|
|
22
17
|
const EPHEMERAL = { type: "ephemeral" };
|
|
23
18
|
const DOCUMENT_OMITTED_NO_VISION = "[PDF document omitted: the serving model does not support document input; extract the text via Bash instead (e.g. `pdftotext`).]";
|
|
24
19
|
function textOf(content) {
|
|
@@ -26,7 +21,7 @@ function textOf(content) {
|
|
|
26
21
|
? content
|
|
27
22
|
: content.filter((c) => c.type === "text" && typeof c.text === "string").map((c) => c.text).join("");
|
|
28
23
|
}
|
|
29
|
-
function toUserBlocks(content,
|
|
24
|
+
function toUserBlocks(content, withhold) {
|
|
30
25
|
if (typeof content === "string") {
|
|
31
26
|
return content.length > 0 ? [{ type: "text", text: content }] : [];
|
|
32
27
|
}
|
|
@@ -37,7 +32,7 @@ function toUserBlocks(content, supportsVision = true) {
|
|
|
37
32
|
blocks.push({ type: "text", text: c.text });
|
|
38
33
|
}
|
|
39
34
|
else if (c.type === "image" && c.data && c.mimeType) {
|
|
40
|
-
if (
|
|
35
|
+
if (withhold === undefined)
|
|
41
36
|
blocks.push({ type: "image", source: { type: "base64", media_type: c.mimeType, data: c.data } });
|
|
42
37
|
else {
|
|
43
38
|
omitted++;
|
|
@@ -45,12 +40,13 @@ function toUserBlocks(content, supportsVision = true) {
|
|
|
45
40
|
}
|
|
46
41
|
}
|
|
47
42
|
}
|
|
48
|
-
if (
|
|
49
|
-
|
|
43
|
+
if (withhold !== undefined)
|
|
44
|
+
reportImagesWithheld(withhold, omitted);
|
|
50
45
|
return blocks;
|
|
51
46
|
}
|
|
52
|
-
function toAnthropicMessages(ctx, model) {
|
|
53
|
-
const
|
|
47
|
+
function toAnthropicMessages(ctx, model, toolNames) {
|
|
48
|
+
const imageWithhold = imageWithholdOf(model);
|
|
49
|
+
const supportsVision = imageWithhold === undefined;
|
|
54
50
|
const raw = [];
|
|
55
51
|
let pendingDocs = [];
|
|
56
52
|
const flushDocs = () => {
|
|
@@ -64,7 +60,7 @@ function toAnthropicMessages(ctx, model) {
|
|
|
64
60
|
if (m.role !== "toolResult")
|
|
65
61
|
flushDocs();
|
|
66
62
|
if (m.role === "user") {
|
|
67
|
-
const ub = toUserBlocks(m.content,
|
|
63
|
+
const ub = toUserBlocks(m.content, imageWithhold);
|
|
68
64
|
raw.push({ role: "user", content: ub.length ? ub : [{ type: "text", text: NO_CONTENT }] });
|
|
69
65
|
}
|
|
70
66
|
else if (m.role === "assistant") {
|
|
@@ -86,7 +82,7 @@ function toAnthropicMessages(ctx, model) {
|
|
|
86
82
|
blocks.push({ type: "text", text: c.text });
|
|
87
83
|
}
|
|
88
84
|
else if (c.type === "toolCall") {
|
|
89
|
-
blocks.push({ type: "tool_use", id: providerToolCallId(c), name: c.name, input: c.arguments ?? {} });
|
|
85
|
+
blocks.push({ type: "tool_use", id: providerToolCallId(c), name: toolNames.sent(c.name), input: c.arguments ?? {} });
|
|
90
86
|
}
|
|
91
87
|
}
|
|
92
88
|
raw.push({ role: "assistant", content: blocks.length ? blocks : [{ type: "text", text: NO_CONTENT }] });
|
|
@@ -96,7 +92,7 @@ function toAnthropicMessages(ctx, model) {
|
|
|
96
92
|
const docs = parts ? parts.filter((c) => c.type === "document") : [];
|
|
97
93
|
const rest = docs.length > 0 && parts ? parts.filter((c) => c.type !== "document") : m.content;
|
|
98
94
|
const hasImage = !m.isError && Array.isArray(rest) && rest.some((c) => c.type === "image");
|
|
99
|
-
let inner = hasImage ? toUserBlocks(rest,
|
|
95
|
+
let inner = hasImage ? toUserBlocks(rest, imageWithhold) : textOf(rest);
|
|
100
96
|
if (docs.length > 0 && !m.isError) {
|
|
101
97
|
if (supportsVision) {
|
|
102
98
|
for (const d of docs) {
|
|
@@ -155,12 +151,12 @@ function toAnthropicMessages(ctx, model) {
|
|
|
155
151
|
}
|
|
156
152
|
return merged;
|
|
157
153
|
}
|
|
158
|
-
function toAnthropicTools(ctx, cacheBreakpoints) {
|
|
154
|
+
function toAnthropicTools(ctx, cacheBreakpoints, toolNames) {
|
|
159
155
|
if (!ctx.tools || ctx.tools.length === 0) {
|
|
160
156
|
return undefined;
|
|
161
157
|
}
|
|
162
158
|
return ctx.tools.map((t, i) => ({
|
|
163
|
-
name: t.name,
|
|
159
|
+
name: toolNames.sent(t.name),
|
|
164
160
|
description: t.description,
|
|
165
161
|
input_schema: t.parameters,
|
|
166
162
|
...(cacheBreakpoints && i === ctx.tools.length - 1 ? { cache_control: EPHEMERAL } : {}),
|
|
@@ -238,6 +234,7 @@ export function createAnthropicBrain(given = {}) {
|
|
|
238
234
|
let thinkingRequested = false;
|
|
239
235
|
let sentMaxTokens;
|
|
240
236
|
let sentMaxTokensLane = "config-default";
|
|
237
|
+
let sentToolNames = NAMES_AS_WRITTEN;
|
|
241
238
|
return runStreamingBrain({
|
|
242
239
|
model,
|
|
243
240
|
doFetch,
|
|
@@ -249,6 +246,8 @@ export function createAnthropicBrain(given = {}) {
|
|
|
249
246
|
buildRequest: (overrides) => {
|
|
250
247
|
const routed = { id: model.id, baseUrl: model.baseUrl };
|
|
251
248
|
const { root, origin: rootOrigin } = resolveRequestRootOf(routed.baseUrl, config.baseUrl, ANTHROPIC_DEFAULT_BASE_URL);
|
|
249
|
+
const url = joinRequestUrl(root, "/v1/messages");
|
|
250
|
+
const builtToolNames = endpointToolNames(resolveProviderDialect(url, model.api), model.api, (context.tools ?? []).map((t) => t.name));
|
|
252
251
|
const modelHeaders = headerBagOnce(model.headers);
|
|
253
252
|
const optionsHeaders = headerBagOnce(options?.headers);
|
|
254
253
|
const routeCredential = resolveRouteCredential({
|
|
@@ -274,80 +273,42 @@ export function createAnthropicBrain(given = {}) {
|
|
|
274
273
|
const body = {
|
|
275
274
|
model: model.id,
|
|
276
275
|
max_tokens: overrides?.maxOutputTokens ?? options?.maxTokens ?? model.maxTokens ?? config.defaultMaxTokens ?? 4096,
|
|
277
|
-
messages: toAnthropicMessages(context, model),
|
|
276
|
+
messages: toAnthropicMessages(context, model, builtToolNames),
|
|
278
277
|
stream: true,
|
|
279
278
|
};
|
|
280
279
|
if (system)
|
|
281
280
|
body.system = system;
|
|
282
|
-
const tools = toAnthropicTools(context, cacheBreakpoints);
|
|
281
|
+
const tools = toAnthropicTools(context, cacheBreakpoints, builtToolNames);
|
|
283
282
|
if (tools)
|
|
284
283
|
body.tools = tools;
|
|
285
284
|
const anthCompat = (model.compat ?? {});
|
|
286
285
|
if (options?.temperature !== undefined && anthCompat.supportsTemperature !== false) {
|
|
287
286
|
body.temperature = options.temperature;
|
|
288
287
|
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
if (budgetCapSkipsThinking(builtReasoningFacts.outputCapTokens, builtReasoningFacts.hardOutputCap)) {
|
|
300
|
-
body.thinking = undefined;
|
|
301
|
-
delete body.thinking;
|
|
302
|
-
}
|
|
303
|
-
else {
|
|
304
|
-
const share = config.thinkingBudgetShare ?? reasoningBudgetShare(options.reasoning);
|
|
305
|
-
const { max, budget } = thinkingBudget(body.max_tokens, share, config.thinkingBudgetTokens, hardCap);
|
|
306
|
-
body.max_tokens = max;
|
|
307
|
-
body.thinking = { type: "enabled", budget_tokens: budget };
|
|
308
|
-
thinkingOn = true;
|
|
309
|
-
}
|
|
310
|
-
}
|
|
311
|
-
if (thinkingOn)
|
|
312
|
-
delete body.temperature;
|
|
313
|
-
}
|
|
314
|
-
else if (model.reasoning && options?.reasoning === "off" && anthCompat.thinkingMode !== "adaptive") {
|
|
315
|
-
body.thinking = { type: "disabled" };
|
|
316
|
-
}
|
|
317
|
-
const betas = [];
|
|
318
|
-
let sendEffortBeta = false;
|
|
319
|
-
const declaredEffort = declaredEffortLevels(anthCompat.effortLevels);
|
|
320
|
-
if (declaredEffort !== undefined && reasoningRequestCarried(model, options?.reasoning)) {
|
|
321
|
-
const { effective } = resolveEffort(options.reasoning, declaredEffort);
|
|
322
|
-
const wireEffort = effective === "minimal" ? "low" : effective;
|
|
323
|
-
body.output_config = { effort: wireEffort };
|
|
324
|
-
sendEffortBeta = true;
|
|
325
|
-
}
|
|
326
|
-
if (sendEffortBeta)
|
|
327
|
-
betas.push("effort-2025-11-24");
|
|
328
|
-
if (anthCompat.contextManagement && thinkingOn) {
|
|
329
|
-
body.context_management = { edits: [{ type: "clear_thinking_20251015", keep: "all" }] };
|
|
330
|
-
betas.push("context-management-2025-06-27");
|
|
331
|
-
}
|
|
332
|
-
if (anthCompat.interleavedThinking) {
|
|
333
|
-
betas.push("interleaved-thinking-2025-05-14");
|
|
334
|
-
}
|
|
335
|
-
const headers = mergeHeaders(modelHeaders, config.headers, optionsHeaders);
|
|
288
|
+
const hardCap = overrides?.maxOutputTokens !== undefined || options?.maxTokens !== undefined;
|
|
289
|
+
const { body: reasoningBody, headers: reasoningHeaders, wireFacts: builtReasoningFacts, } = applyReasoningToRequest({
|
|
290
|
+
api: "anthropic-messages",
|
|
291
|
+
model,
|
|
292
|
+
level: options?.reasoning,
|
|
293
|
+
body,
|
|
294
|
+
budget: { capIsHard: hardCap, share: config.thinkingBudgetShare, tokens: config.thinkingBudgetTokens },
|
|
295
|
+
});
|
|
296
|
+
const headerLayers = [modelHeaders, config.headers, optionsHeaders];
|
|
297
|
+
const headers = mergeHeaders(...headerLayers);
|
|
336
298
|
applyRouteCredentialHeaders(headers, routeCredential);
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
for (const
|
|
340
|
-
if (
|
|
341
|
-
|
|
342
|
-
}
|
|
343
|
-
headers["anthropic-beta"] = existing.join(",");
|
|
299
|
+
takeHeaderSpellings(headers, "anthropic-beta");
|
|
300
|
+
for (const layer of headerLayers) {
|
|
301
|
+
for (const [name, value] of Object.entries(layer ?? {}))
|
|
302
|
+
if (name.toLowerCase() === "anthropic-beta")
|
|
303
|
+
mergeReasoningHeaders(headers, { [name]: value });
|
|
344
304
|
}
|
|
305
|
+
mergeReasoningHeaders(headers, reasoningHeaders);
|
|
345
306
|
lockHeader(headers, "content-type", "application/json");
|
|
346
307
|
lockHeader(headers, "anthropic-version", config.version ?? "2023-06-01");
|
|
347
308
|
if (apiKey)
|
|
348
309
|
lockHeader(headers, ANTHROPIC_KEY_HEADER, apiKey);
|
|
349
|
-
const builtThinkingRequested =
|
|
350
|
-
const builtMaxTokens =
|
|
310
|
+
const builtThinkingRequested = reasoningBody.thinking !== undefined;
|
|
311
|
+
const builtMaxTokens = reasoningBody.max_tokens;
|
|
351
312
|
const builtMaxTokensLane = overrides?.maxOutputTokens !== undefined
|
|
352
313
|
? "engine"
|
|
353
314
|
: options?.maxTokens !== undefined
|
|
@@ -355,9 +316,9 @@ export function createAnthropicBrain(given = {}) {
|
|
|
355
316
|
: model.maxTokens !== undefined
|
|
356
317
|
? "model"
|
|
357
318
|
: "config-default";
|
|
358
|
-
const { body: wire, dropped: extraBodyDropped } = applyExtraBody(
|
|
319
|
+
const { body: wire, dropped: extraBodyDropped } = applyExtraBody(reasoningBody, model, ANTHROPIC_RESERVED);
|
|
359
320
|
return {
|
|
360
|
-
url
|
|
321
|
+
url,
|
|
361
322
|
headers,
|
|
362
323
|
body: JSON.stringify(wire),
|
|
363
324
|
extraBodyDropped,
|
|
@@ -369,6 +330,7 @@ export function createAnthropicBrain(given = {}) {
|
|
|
369
330
|
thinkingRequested = builtThinkingRequested;
|
|
370
331
|
sentMaxTokens = builtMaxTokens;
|
|
371
332
|
sentMaxTokensLane = builtMaxTokensLane;
|
|
333
|
+
sentToolNames = builtToolNames;
|
|
372
334
|
if (builtReasoningFacts !== undefined)
|
|
373
335
|
reportReasoningWireFacts(builtReasoningFacts);
|
|
374
336
|
},
|
|
@@ -540,7 +502,7 @@ export function createAnthropicBrain(given = {}) {
|
|
|
540
502
|
else if (cb.type === "tool_use") {
|
|
541
503
|
acc.type = "tool_use";
|
|
542
504
|
acc.toolId = cb.id ?? "";
|
|
543
|
-
acc.toolName = cb.name ?? "";
|
|
505
|
+
acc.toolName = sentToolNames.called(cb.name ?? "");
|
|
544
506
|
}
|
|
545
507
|
else {
|
|
546
508
|
acc.type = "text";
|
package/dist/brain/errors.d.ts
CHANGED
|
@@ -256,6 +256,21 @@ export declare function abortLikeName(err: unknown): "AbortError" | "TimeoutErro
|
|
|
256
256
|
* rather than testing `instanceof BrainError`, which walks a chain a revoked proxy traps — and the one
|
|
257
257
|
* site that did so sits in an async IIFE with no `.catch`. */
|
|
258
258
|
export declare function brainErrorCodeOf(e: unknown): BrainErrorCode | undefined;
|
|
259
|
+
/** What a thrown brain failure says about itself in machine words: its code, and the structural input-too-long cause
|
|
260
|
+
* its minter declared (or ruled out). Empty for a value that carries no brain code. */
|
|
261
|
+
export interface ThrownBrainFailure {
|
|
262
|
+
readonly code?: BrainErrorCode;
|
|
263
|
+
readonly errorKind?: "input_too_long";
|
|
264
|
+
readonly inputTooLongRuledOut?: true;
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* The one reading of a thrown brain failure's structure: the code word ({@link brainErrorCodeOf}, never `instanceof`)
|
|
268
|
+
* and, only when the value carries a code, the input-too-long cause it was minted with — read by brand, so a value from
|
|
269
|
+
* another realm or behind a revoked proxy reads the same as a local `BrainError`. The stream engine's terminal shell and
|
|
270
|
+
* every caller that catches a brain call read it, so a failure that is thrown and one that is returned on a message
|
|
271
|
+
* carry the same facts.
|
|
272
|
+
*/
|
|
273
|
+
export declare function thrownBrainFailure(e: unknown): ThrownBrainFailure;
|
|
259
274
|
/** Render a transport-level error WITHOUT folding away its cause chain: undici rejects with
|
|
260
275
|
* `TypeError("fetch failed", { cause })` where the CAUSE carries the actionable fact, and the shell
|
|
261
276
|
* alone reads the same for refused / DNS / mid-stream disconnect. Walks the chain (bounded), appending
|
package/dist/brain/errors.js
CHANGED
|
@@ -247,6 +247,16 @@ export function brainErrorCodeOf(e) {
|
|
|
247
247
|
const code = readMember(e, "code");
|
|
248
248
|
return typeof code === "string" && BRAIN_ERROR_CODES.includes(code) ? code : undefined;
|
|
249
249
|
}
|
|
250
|
+
export function thrownBrainFailure(e) {
|
|
251
|
+
const code = brainErrorCodeOf(e);
|
|
252
|
+
if (code === undefined)
|
|
253
|
+
return {};
|
|
254
|
+
if (readMember(e, "inputTooLong") === true)
|
|
255
|
+
return { code, errorKind: "input_too_long" };
|
|
256
|
+
if (readMember(e, "inputTooLongRuledOut") === true)
|
|
257
|
+
return { code, inputTooLongRuledOut: true };
|
|
258
|
+
return { code };
|
|
259
|
+
}
|
|
250
260
|
export function describeNetworkError(e) {
|
|
251
261
|
const top = thrownText(e);
|
|
252
262
|
const parts = [];
|
|
@@ -7,15 +7,26 @@
|
|
|
7
7
|
* sentence that drifts is a string consumers grep for.
|
|
8
8
|
*/
|
|
9
9
|
import type { Model } from "../internal/llm.js";
|
|
10
|
+
import { type CapabilityDeclaration } from "./model-capability.js";
|
|
11
|
+
/** Why a request's images are withheld from the SERVING model: the entry's image declaration, when it is not held
|
|
12
|
+
* (the withheld-capability report's `cause`, `status-sink.ts`). */
|
|
13
|
+
export type ImageWithholdCause = Exclude<CapabilityDeclaration, "declared_on">;
|
|
14
|
+
/** A request whose images are withheld: which model, and why. */
|
|
15
|
+
export interface ImageWithhold {
|
|
16
|
+
readonly modelId: string;
|
|
17
|
+
readonly cause: ImageWithholdCause;
|
|
18
|
+
}
|
|
10
19
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
* gets the placeholder path — the case a text-only API rejects with a hard 400 on an image part.
|
|
20
|
+
* The image row of the capability table for one request: `undefined` = images ride as images; otherwise the model and
|
|
21
|
+
* the declaration that withholds them. Read off the one capability reading (`capabilityHeld` / `capabilityOf`), so an
|
|
22
|
+
* entry that never declared `input` gets its images exactly as the table says, and an entry that declares a list without
|
|
23
|
+
* `"image"` gets the placeholder path — the case a text-only API rejects with a hard 400 on an image part. No model =
|
|
24
|
+
* images ride.
|
|
17
25
|
*/
|
|
18
|
-
export declare function
|
|
26
|
+
export declare function imageWithholdOf(model?: Model): ImageWithhold | undefined;
|
|
27
|
+
/** Report `count` images of one request replaced by placeholders — the one emit for every lane: the operator trace frame
|
|
28
|
+
* (telemetry, per request) and the leg's withheld-capability account (the person's notice, once per conversation). */
|
|
29
|
+
export declare function reportImagesWithheld(withhold: ImageWithhold, count: number): void;
|
|
19
30
|
/** Placeholder for an image block dropped because the serving model declares no image input. */
|
|
20
31
|
export declare const IMAGE_OMITTED_NO_VISION = "[image omitted: the serving model does not support image input]";
|
|
21
32
|
/** {@link IMAGE_OMITTED_NO_VISION}, counted — a batch of dropped images states how many were lost. */
|
|
@@ -1,5 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { capabilityHeld, capabilityOf } from "./model-capability.js";
|
|
2
|
+
import { emitBrainTelemetry, reportCapabilityWithheld } from "./status-sink.js";
|
|
3
|
+
export function imageWithholdOf(model) {
|
|
4
|
+
if (model === undefined)
|
|
5
|
+
return undefined;
|
|
6
|
+
const declared = capabilityOf(model, "image");
|
|
7
|
+
return declared === "declared_on" || capabilityHeld(model, "image") ? undefined : { modelId: model.id, cause: declared };
|
|
8
|
+
}
|
|
9
|
+
export function reportImagesWithheld(withhold, count) {
|
|
10
|
+
if (count === 0)
|
|
11
|
+
return;
|
|
12
|
+
emitBrainTelemetry({ kind: "vision_placeholder", count });
|
|
13
|
+
reportCapabilityWithheld({ modelId: withhold.modelId, capability: "image", cause: withhold.cause, count });
|
|
3
14
|
}
|
|
4
15
|
export const IMAGE_OMITTED_NO_VISION = "[image omitted: the serving model does not support image input]";
|
|
5
16
|
export function imagesOmittedNoVisionNote(count) {
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ONE reading of a model's capability declarations — image input and reasoning.
|
|
3
|
+
*
|
|
4
|
+
* A `Model` declares each capability in one of three states: on (`reasoning: true`; `input` lists `"image"`), off
|
|
5
|
+
* (`reasoning: false`; an `input` list without `"image"`), or not at all (the key is absent). Every reader in the engine
|
|
6
|
+
* (bar the PDF profile's no-metadata shortcut in `pdfModelCapabilitiesOf`, which looks at the absence itself) asks {@link capabilityOf} for the declaration, or {@link capabilityHeld} for "does the engine treat this model as
|
|
7
|
+
* having it", and what an undeclared capability means is stated once, in {@link UNKNOWN_CAPABILITY_READS} — no caller
|
|
8
|
+
* decides it for itself. A request never carries a capability declared off; one declared on is never dropped here.
|
|
9
|
+
*
|
|
10
|
+
* A declaration of the wrong shape is refused where it is read: a `reasoning` that is not a boolean, or an `input` that
|
|
11
|
+
* is not a list of strings, throws, naming the model and the key. Reading it some other way (by truthiness, or as
|
|
12
|
+
* undeclared) would turn a typo into a capability nobody declared.
|
|
13
|
+
*/
|
|
14
|
+
import type { Model } from "../internal/llm.js";
|
|
15
|
+
/** The capabilities a model declares. `image` = accepts image input (`Model.input` lists `"image"`). */
|
|
16
|
+
export declare const MODEL_CAPABILITIES: readonly ["image", "reasoning"];
|
|
17
|
+
export type ModelCapability = (typeof MODEL_CAPABILITIES)[number];
|
|
18
|
+
/** What a model's entry says about one capability. `unknown` = the entry does not say. */
|
|
19
|
+
export declare const CAPABILITY_DECLARATIONS: readonly ["declared_on", "declared_off", "unknown"];
|
|
20
|
+
export type CapabilityDeclaration = (typeof CAPABILITY_DECLARATIONS)[number];
|
|
21
|
+
/**
|
|
22
|
+
* What the engine does with a capability the entry does not declare, per capability — the only place this is said.
|
|
23
|
+
* Image input is used (an entry that never filled in `input` keeps the images it was always sent). Reasoning is not:
|
|
24
|
+
* no thinking keys go out for an entry that does not declare `reasoning` (the request is the provider's default).
|
|
25
|
+
*/
|
|
26
|
+
export declare const UNKNOWN_CAPABILITY_READS: Readonly<Record<ModelCapability, "held" | "not_held">>;
|
|
27
|
+
/** The part of a model this module reads (`id` only names the model in a refusal; the structural readers that take a
|
|
28
|
+
* model-shaped object without one still get the same answer). */
|
|
29
|
+
export type CapabilityDeclaringModel = {
|
|
30
|
+
readonly id?: Model["id"];
|
|
31
|
+
readonly reasoning?: unknown;
|
|
32
|
+
readonly input?: unknown;
|
|
33
|
+
};
|
|
34
|
+
/** The entry's declaration of `cap`. Throws a `TypeError` on a declaration of the wrong shape (see the module note). */
|
|
35
|
+
export declare function capabilityOf(model: CapabilityDeclaringModel, cap: ModelCapability): CapabilityDeclaration;
|
|
36
|
+
/** Whether the engine treats the model as having `cap`: declared on, or undeclared where {@link UNKNOWN_CAPABILITY_READS} says held. */
|
|
37
|
+
export declare function capabilityHeld(model: CapabilityDeclaringModel, cap: ModelCapability): boolean;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export const MODEL_CAPABILITIES = Object.freeze(["image", "reasoning"]);
|
|
2
|
+
export const CAPABILITY_DECLARATIONS = Object.freeze(["declared_on", "declared_off", "unknown"]);
|
|
3
|
+
export const UNKNOWN_CAPABILITY_READS = Object.freeze({
|
|
4
|
+
image: "held",
|
|
5
|
+
reasoning: "not_held",
|
|
6
|
+
});
|
|
7
|
+
function typeWordOf(value) {
|
|
8
|
+
return value === null ? "null" : Array.isArray(value) ? "array" : typeof value;
|
|
9
|
+
}
|
|
10
|
+
function nameOf(model) {
|
|
11
|
+
return typeof model.id === "string" ? `"${model.id}"` : "a model with no id";
|
|
12
|
+
}
|
|
13
|
+
export function capabilityOf(model, cap) {
|
|
14
|
+
if (cap === "reasoning") {
|
|
15
|
+
const declared = model.reasoning;
|
|
16
|
+
if (declared === undefined)
|
|
17
|
+
return "unknown";
|
|
18
|
+
if (typeof declared !== "boolean") {
|
|
19
|
+
throw new TypeError(`Model.reasoning of ${nameOf(model)} must be true, false or absent; got ${typeWordOf(declared)}`);
|
|
20
|
+
}
|
|
21
|
+
return declared ? "declared_on" : "declared_off";
|
|
22
|
+
}
|
|
23
|
+
const input = model.input;
|
|
24
|
+
if (input === undefined)
|
|
25
|
+
return "unknown";
|
|
26
|
+
if (!Array.isArray(input) || !input.every((m) => typeof m === "string")) {
|
|
27
|
+
throw new TypeError(`Model.input of ${nameOf(model)} must be a list of input kinds or absent; got ${Array.isArray(input) ? "a list holding a non-string" : typeWordOf(input)}`);
|
|
28
|
+
}
|
|
29
|
+
return input.includes("image") ? "declared_on" : "declared_off";
|
|
30
|
+
}
|
|
31
|
+
export function capabilityHeld(model, cap) {
|
|
32
|
+
const declared = capabilityOf(model, cap);
|
|
33
|
+
return declared === "declared_on" || (declared === "unknown" && UNKNOWN_CAPABILITY_READS[cap] === "held");
|
|
34
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* First-party model presets (design/119
|
|
2
|
+
* First-party model presets (design/119).
|
|
3
3
|
*
|
|
4
4
|
* sema stays caller-injects-`Model` by design (no baked catalog — the CC catalog/alias/family layer
|
|
5
5
|
* is a product surface we deliberately don't carry). What IS worth shipping is the per-model
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
* (adaptive thinking form, effort tiers, temperature rejection) that a wrong guess turns into a
|
|
8
8
|
* hard 400. These presets are DATA, not mechanism — every field can be overridden by the caller.
|
|
9
9
|
*
|
|
10
|
-
* Pricing is deliberately NOT baked (
|
|
10
|
+
* Pricing is deliberately NOT baked (the reference doesn't bake it either): `cost` defaults to zeros and a
|
|
11
11
|
* deployment that wants cost accounting fills in the current official per-MTok rates.
|
|
12
12
|
*/
|
|
13
13
|
import type { AnthropicMessagesCompat, Model } from "../internal/llm.js";
|
|
14
14
|
/**
|
|
15
|
-
* The Fable-5-class Anthropic wire contract (
|
|
15
|
+
* The Fable-5-class Anthropic wire contract (capability bits, design/119 P0):
|
|
16
16
|
* - `thinkingMode: "adaptive"` — `thinking: { type: "adaptive" }`, NO budget_tokens (400 on budget).
|
|
17
17
|
* - `effortLevels` — the full five-tier `output_config.effort` range (fable-5 has `xhigh_effort` +
|
|
18
18
|
* `max_effort`; a model without those bits should declare a shorter list and higher requests clamp).
|
|
@@ -20,15 +20,9 @@ import type { AnthropicMessagesCompat, Model } from "../internal/llm.js";
|
|
|
20
20
|
*/
|
|
21
21
|
export declare const FABLE_5_COMPAT: AnthropicMessagesCompat;
|
|
22
22
|
/**
|
|
23
|
-
*
|
|
24
|
-
* text; this name stays exported for hosts that read them. The preset below no longer carries them as
|
|
25
|
-
* `promptGuidance`: the prompt composes them itself, once, where they are the only fable text.
|
|
26
|
-
*/
|
|
27
|
-
export declare const FABLE_5_PROMPT_GUIDANCE: readonly string[];
|
|
28
|
-
/**
|
|
29
|
-
* A ready-to-use `claude-fable-5` {@link Model} (CC 2.1.198 registry facts: 1M-token native context
|
|
23
|
+
* A ready-to-use `claude-fable-5` {@link Model} (registry facts: 1M-token native context
|
|
30
24
|
* window, 64k default max output — the 128k tier is opt-in via `maxTokens` override, knowledge
|
|
31
|
-
* cutoff Jan 2026, `default_effort: "high"
|
|
32
|
-
* accounting (not baked — see module note).
|
|
25
|
+
* cutoff Jan 2026, `default_effort: "high"`, prompt capabilities `lean_prompt` + `fable_5_mitigations`).
|
|
26
|
+
* Override anything per deployment; set `cost` for accounting (not baked — see module note).
|
|
33
27
|
*/
|
|
34
28
|
export declare function fable5Model(overrides?: Partial<Model>): Model;
|
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
import { catalogText } from "../prompt-assembly/catalog/index.js";
|
|
2
1
|
import { ANTHROPIC_DEFAULT_BASE_URL } from "./anthropic.js";
|
|
3
2
|
export const FABLE_5_COMPAT = {
|
|
4
3
|
thinkingMode: "adaptive",
|
|
5
4
|
effortLevels: ["low", "medium", "high", "xhigh", "max"],
|
|
6
5
|
supportsTemperature: false,
|
|
7
6
|
};
|
|
8
|
-
export const FABLE_5_PROMPT_GUIDANCE = [
|
|
9
|
-
catalogText("core/behavior.fable-classic.final-message"),
|
|
10
|
-
catalogText("core/behavior.fable-classic.autonomy"),
|
|
11
|
-
catalogText("core/behavior.fable-classic.tool-json"),
|
|
12
|
-
];
|
|
13
7
|
export function fable5Model(overrides = {}) {
|
|
14
8
|
return {
|
|
15
9
|
id: "claude-fable-5",
|
|
@@ -25,6 +19,7 @@ export function fable5Model(overrides = {}) {
|
|
|
25
19
|
maxTokens: 64_000,
|
|
26
20
|
charsPerToken: 3,
|
|
27
21
|
compat: { ...FABLE_5_COMPAT },
|
|
22
|
+
promptTraits: ["lean_prompt", "fable_5_mitigations"],
|
|
28
23
|
...overrides,
|
|
29
24
|
};
|
|
30
25
|
}
|