@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
|
@@ -4,11 +4,12 @@ import { DEGENERATE_MESSAGE, trimDegenerateTail } from "./repetition.js";
|
|
|
4
4
|
import { STREAM_TORN_WARNING, createRepetitionPoll, modelOutputInvalidOf, noteResponseModel, nameMissingCause, parseStreamedToolArgs, placeTurnNotes } from "./stream-shared.js";
|
|
5
5
|
import { admitToolCallId, providerResultIds, providerToolCallId, responseToolCallIds } from "./tool-call-id.js";
|
|
6
6
|
import { emitBrainTelemetry } from "./status-sink.js";
|
|
7
|
-
import { errorResultMediaNote, IMAGE_OMITTED_NO_VISION, imagesOmittedNoVisionNote,
|
|
7
|
+
import { errorResultMediaNote, IMAGE_OMITTED_NO_VISION, imageWithholdOf, imagesOmittedNoVisionNote, reportImagesWithheld, sendableImages } from "./media-degrade.js";
|
|
8
8
|
import { OUTPUT_CAP_KEYS, RESPONSES_RESERVED, applyExtraBody, effectiveOutputCap, headerBagOnce, lockHeader, mergeHeaders } from "./request-params.js";
|
|
9
9
|
import { admitRouteRequest, applyRouteCredentialHeaders, assertServableRequestRoot, brainConfigSnapshot, createBrainRouteJudge, joinRequestUrl, resolveRequestRootOf, resolveRouteCredential } from "./route-adjudicator.js";
|
|
10
10
|
import { requestRouteOf } from "./request-route.js";
|
|
11
|
-
import {
|
|
11
|
+
import { NAMES_AS_WRITTEN, resolveProviderDialect, endpointToolNames } from "./provider-dialect.js";
|
|
12
|
+
import { applyReasoningToRequest } from "./reasoning-request.js";
|
|
12
13
|
import { runStreamingBrain } from "./stream-engine.js";
|
|
13
14
|
import { refuseRetiredTimeoutKnobs } from "./timeout.js";
|
|
14
15
|
import { resolveFetch } from "./transport.js";
|
|
@@ -17,9 +18,6 @@ const DEGENERATE_POLL_CHARS = 64;
|
|
|
17
18
|
const MALFORMED_SAMPLE_CHARS = 160;
|
|
18
19
|
const MALFORMED_ARGS_CHARS = 200;
|
|
19
20
|
const CAPABILITY_DIAGNOSTIC_TYPE = "responses_capability";
|
|
20
|
-
function responsesCompat(model) {
|
|
21
|
-
return (model.compat ?? {});
|
|
22
|
-
}
|
|
23
21
|
const NO_CONTENT = "(no content)";
|
|
24
22
|
const DOCUMENT_OMITTED = "[PDF document omitted: PDF direct read requires an Anthropic-family model; re-Read the file (the engine will extract text/render pages when possible) or extract the text via Bash instead (e.g. `pdftotext`).]";
|
|
25
23
|
function textOf(content) {
|
|
@@ -37,16 +35,17 @@ function functionCallOutputText(text, hasCarriedImages, original) {
|
|
|
37
35
|
return "(image attached below)";
|
|
38
36
|
return Array.isArray(original) && original.length > 0 ? "(non-text tool result omitted)" : "";
|
|
39
37
|
}
|
|
40
|
-
function toUserParts(content,
|
|
38
|
+
function toUserParts(content, withhold) {
|
|
41
39
|
if (typeof content === "string") {
|
|
42
40
|
return content === "" ? [] : [{ type: "input_text", text: content }];
|
|
43
41
|
}
|
|
42
|
+
const supportsVision = withhold === undefined;
|
|
44
43
|
const nDocs = content.filter((c) => c.type === "document").length;
|
|
45
44
|
if (nDocs > 0)
|
|
46
45
|
emitBrainTelemetry({ kind: "document_placeholder", count: nDocs });
|
|
47
46
|
const images = content.filter((c) => c.type === "image" && c.data !== undefined && c.mimeType !== undefined);
|
|
48
|
-
if (
|
|
49
|
-
|
|
47
|
+
if (withhold !== undefined)
|
|
48
|
+
reportImagesWithheld(withhold, images.length);
|
|
50
49
|
const parts = [];
|
|
51
50
|
for (const c of content) {
|
|
52
51
|
if (c.type === "text" && typeof c.text === "string" && c.text.length > 0) {
|
|
@@ -64,8 +63,9 @@ function toUserParts(content, supportsVision) {
|
|
|
64
63
|
parts.push({ type: "input_text", text: imagesOmittedNoVisionNote(images.length) });
|
|
65
64
|
return parts;
|
|
66
65
|
}
|
|
67
|
-
function toResponsesInput(ctx, model, replayReasoning) {
|
|
68
|
-
const
|
|
66
|
+
function toResponsesInput(ctx, model, replayReasoning, toolNames) {
|
|
67
|
+
const imageWithhold = imageWithholdOf(model);
|
|
68
|
+
const supportsVision = imageWithhold === undefined;
|
|
69
69
|
const out = [];
|
|
70
70
|
let pendingImages = [];
|
|
71
71
|
const flushImages = () => {
|
|
@@ -87,7 +87,7 @@ function toResponsesInput(ctx, model, replayReasoning) {
|
|
|
87
87
|
if (m.role !== "toolResult")
|
|
88
88
|
flushImages();
|
|
89
89
|
if (m.role === "user") {
|
|
90
|
-
const parts = toUserParts(m.content,
|
|
90
|
+
const parts = toUserParts(m.content, imageWithhold);
|
|
91
91
|
out.push({
|
|
92
92
|
type: "message",
|
|
93
93
|
role: "user",
|
|
@@ -116,15 +116,15 @@ function toResponsesInput(ctx, model, replayReasoning) {
|
|
|
116
116
|
if (text !== "")
|
|
117
117
|
out.push({ type: "message", role: "assistant", content: [{ type: "output_text", text }] });
|
|
118
118
|
for (const tc of toolCalls) {
|
|
119
|
-
out.push({ type: "function_call", call_id: providerToolCallId(tc), name: tc.name, arguments: JSON.stringify(tc.arguments ?? {}) });
|
|
119
|
+
out.push({ type: "function_call", call_id: providerToolCallId(tc), name: toolNames.sent(tc.name), arguments: JSON.stringify(tc.arguments ?? {}) });
|
|
120
120
|
}
|
|
121
121
|
}
|
|
122
122
|
else if (m.role === "toolResult") {
|
|
123
123
|
const mediaImages = sendableImages(Array.isArray(m.content) ? m.content : []);
|
|
124
124
|
const rawImages = m.isError ? [] : mediaImages;
|
|
125
125
|
const images = supportsVision ? rawImages : [];
|
|
126
|
-
if (
|
|
127
|
-
|
|
126
|
+
if (imageWithhold !== undefined)
|
|
127
|
+
reportImagesWithheld(imageWithhold, rawImages.length);
|
|
128
128
|
const nDocs = Array.isArray(m.content) ? m.content.filter((c) => c.type === "document").length : 0;
|
|
129
129
|
if (nDocs > 0)
|
|
130
130
|
emitBrainTelemetry({ kind: "document_placeholder", count: nDocs });
|
|
@@ -145,27 +145,17 @@ function toResponsesInput(ctx, model, replayReasoning) {
|
|
|
145
145
|
flushImages();
|
|
146
146
|
return out;
|
|
147
147
|
}
|
|
148
|
-
function toResponsesTools(ctx) {
|
|
148
|
+
function toResponsesTools(ctx, toolNames) {
|
|
149
149
|
if (!ctx.tools || ctx.tools.length === 0)
|
|
150
150
|
return undefined;
|
|
151
151
|
return ctx.tools.map((t) => ({
|
|
152
152
|
type: "function",
|
|
153
|
-
name: t.name,
|
|
153
|
+
name: toolNames.sent(t.name),
|
|
154
154
|
description: t.description,
|
|
155
155
|
parameters: t.parameters,
|
|
156
156
|
strict: false,
|
|
157
157
|
}));
|
|
158
158
|
}
|
|
159
|
-
function resolveWireEffort(model, reasoning) {
|
|
160
|
-
if (model.reasoning && reasoning === "off")
|
|
161
|
-
return declaredOffSpelling(model);
|
|
162
|
-
const compat = responsesCompat(model);
|
|
163
|
-
if (compat.supportsReasoningEffort === false)
|
|
164
|
-
return undefined;
|
|
165
|
-
if (!reasoningRequestCarried(model, reasoning))
|
|
166
|
-
return undefined;
|
|
167
|
-
return mintEffortWireValue(reasoning, model, compat.reasoningEffortLevels).wireValue;
|
|
168
|
-
}
|
|
169
159
|
function computeUsage(model, raw) {
|
|
170
160
|
const input = raw?.input_tokens ?? 0;
|
|
171
161
|
const output = raw?.output_tokens ?? 0;
|
|
@@ -231,6 +221,7 @@ export function createOpenResponsesBrain(given = {}) {
|
|
|
231
221
|
let sentEffort;
|
|
232
222
|
let builtMaxTokens;
|
|
233
223
|
let builtMaxTokensLane = "unset";
|
|
224
|
+
let sentToolNames = NAMES_AS_WRITTEN;
|
|
234
225
|
return runStreamingBrain({
|
|
235
226
|
model,
|
|
236
227
|
doFetch,
|
|
@@ -245,6 +236,8 @@ export function createOpenResponsesBrain(given = {}) {
|
|
|
245
236
|
if (!root) {
|
|
246
237
|
throw new Error("createOpenResponsesBrain: no baseUrl configured (set config.baseUrl or model.baseUrl)");
|
|
247
238
|
}
|
|
239
|
+
const url = joinRequestUrl(root, "/responses");
|
|
240
|
+
const builtToolNames = endpointToolNames(resolveProviderDialect(url, model.api), model.api, (context.tools ?? []).map((t) => t.name));
|
|
248
241
|
const modelHeaders = headerBagOnce(model.headers);
|
|
249
242
|
const optionsHeaders = headerBagOnce(options?.headers);
|
|
250
243
|
const routeCredential = resolveRouteCredential({
|
|
@@ -262,15 +255,14 @@ export function createOpenResponsesBrain(given = {}) {
|
|
|
262
255
|
"remove it, or serve this model through the chat-completions lane, which does support it");
|
|
263
256
|
}
|
|
264
257
|
const requestedMaxTokens = overrides?.maxOutputTokens ?? options?.maxTokens ?? model.maxTokens;
|
|
265
|
-
const effort = resolveWireEffort(model, options?.reasoning);
|
|
266
258
|
const body = {
|
|
267
259
|
model: model.id,
|
|
268
|
-
input: toResponsesInput(context, model, config.replayReasoning !== false),
|
|
260
|
+
input: toResponsesInput(context, model, config.replayReasoning !== false, builtToolNames),
|
|
269
261
|
stream: true,
|
|
270
262
|
};
|
|
271
263
|
if (context.systemPrompt)
|
|
272
264
|
body.instructions = context.systemPrompt;
|
|
273
|
-
const tools = toResponsesTools(context);
|
|
265
|
+
const tools = toResponsesTools(context, builtToolNames);
|
|
274
266
|
if (tools)
|
|
275
267
|
body.tools = tools;
|
|
276
268
|
if (options?.temperature !== undefined)
|
|
@@ -286,16 +278,15 @@ export function createOpenResponsesBrain(given = {}) {
|
|
|
286
278
|
builtMaxTokens = undefined;
|
|
287
279
|
builtMaxTokensLane = "unset";
|
|
288
280
|
}
|
|
289
|
-
|
|
290
|
-
body.reasoning = { effort };
|
|
281
|
+
const { body: reasoningBody, effort } = applyReasoningToRequest({ api: "openai-responses", model, level: options?.reasoning, body });
|
|
291
282
|
const headers = mergeHeaders(modelHeaders, config.headers, optionsHeaders);
|
|
292
283
|
applyRouteCredentialHeaders(headers, routeCredential);
|
|
293
284
|
lockHeader(headers, "content-type", "application/json");
|
|
294
285
|
if (apiKey)
|
|
295
286
|
lockHeader(headers, OPEN_RESPONSES_KEY_HEADER, `Bearer ${apiKey}`);
|
|
296
|
-
const { body: wire, dropped: extraBodyDropped } = applyExtraBody(
|
|
287
|
+
const { body: wire, dropped: extraBodyDropped } = applyExtraBody(reasoningBody, model, RESPONSES_RESERVED);
|
|
297
288
|
return {
|
|
298
|
-
url
|
|
289
|
+
url,
|
|
299
290
|
headers,
|
|
300
291
|
body: JSON.stringify(wire),
|
|
301
292
|
extraBodyDropped,
|
|
@@ -307,6 +298,7 @@ export function createOpenResponsesBrain(given = {}) {
|
|
|
307
298
|
sentMaxTokens = builtMaxTokens;
|
|
308
299
|
sentMaxTokensLane = builtMaxTokensLane;
|
|
309
300
|
sentEffort = effort;
|
|
301
|
+
sentToolNames = builtToolNames;
|
|
310
302
|
},
|
|
311
303
|
};
|
|
312
304
|
},
|
|
@@ -457,7 +449,7 @@ export function createOpenResponsesBrain(given = {}) {
|
|
|
457
449
|
else if (itemType === "function_call") {
|
|
458
450
|
const acc = openItem(index, "function_call", itemId);
|
|
459
451
|
acc.callId = frame.item?.call_id ?? "";
|
|
460
|
-
acc.name = frame.item?.name ?? "";
|
|
452
|
+
acc.name = sentToolNames.called(frame.item?.name ?? "");
|
|
461
453
|
if (frame.item?.arguments)
|
|
462
454
|
acc.args += frame.item.arguments;
|
|
463
455
|
}
|
|
@@ -546,7 +538,7 @@ export function createOpenResponsesBrain(given = {}) {
|
|
|
546
538
|
if (!acc.callId && frame.item?.call_id)
|
|
547
539
|
acc.callId = frame.item.call_id;
|
|
548
540
|
if (!acc.name && frame.item?.name)
|
|
549
|
-
acc.name = frame.item.name;
|
|
541
|
+
acc.name = sentToolNames.called(frame.item.name);
|
|
550
542
|
if (acc.args === "" && frame.item?.arguments)
|
|
551
543
|
acc.args = frame.item.arguments;
|
|
552
544
|
}
|
package/dist/brain/openai.js
CHANGED
|
@@ -4,13 +4,14 @@ import { DEGENERATE_MESSAGE, trimDegenerateTail } from "./repetition.js";
|
|
|
4
4
|
import { STREAM_TORN_WARNING, createRepetitionPoll, createStreamEndLedger, echoFoldedWord, modelOutputInvalidOf, noteResponseModel, nameMissingCause, parseStreamedToolArgs, placeTurnNotes, truncationCauseClause } from "./stream-shared.js";
|
|
5
5
|
import { admitToolCallId, providerResultIds, providerToolCallId, responseToolCallIds } from "./tool-call-id.js";
|
|
6
6
|
import { emitBrainTelemetry } from "./status-sink.js";
|
|
7
|
-
import { errorResultMediaNote, IMAGE_OMITTED_NO_VISION, imagesOmittedNoVisionNote,
|
|
7
|
+
import { errorResultMediaNote, IMAGE_OMITTED_NO_VISION, imageWithholdOf, imagesOmittedNoVisionNote, reportImagesWithheld, sendableImages } from "./media-degrade.js";
|
|
8
|
+
import { capabilityHeld } from "./model-capability.js";
|
|
8
9
|
import { OPENAI_RESERVED, OUTPUT_CAP_KEYS, applyExtraBody, effectiveOutputCap, headerBagOnce, lockHeader, mergeHeaders } from "./request-params.js";
|
|
9
10
|
import { BrainError, providerErrorWord } from "./errors.js";
|
|
10
|
-
import { inBandProviderError } from "./provider-dialect.js";
|
|
11
|
+
import { NAMES_AS_WRITTEN, inBandProviderError, resolveProviderDialect, endpointToolNames } from "./provider-dialect.js";
|
|
11
12
|
import { admitRouteRequest, applyRouteCredentialHeaders, assertServableRequestRoot, brainConfigSnapshot, createBrainRouteJudge, joinRequestUrl, resolveRequestRootOf, resolveRouteCredential } from "./route-adjudicator.js";
|
|
12
13
|
import { requestRouteOf } from "./request-route.js";
|
|
13
|
-
import {
|
|
14
|
+
import { applyReasoningToRequest } from "./reasoning-request.js";
|
|
14
15
|
import { runStreamingBrain } from "./stream-engine.js";
|
|
15
16
|
import { refuseRetiredTimeoutKnobs } from "./timeout.js";
|
|
16
17
|
import { resolveFetch } from "./transport.js";
|
|
@@ -38,7 +39,7 @@ function textOf(content) {
|
|
|
38
39
|
}
|
|
39
40
|
const NO_CONTENT = "(no content)";
|
|
40
41
|
const DOCUMENT_OMITTED = "[PDF document omitted: PDF direct read requires an Anthropic-family model; re-Read the file (the engine will extract text/render pages when possible) or extract the text via Bash instead (e.g. `pdftotext`).]";
|
|
41
|
-
function toUserContent(content,
|
|
42
|
+
function toUserContent(content, withhold) {
|
|
42
43
|
if (typeof content === "string") {
|
|
43
44
|
return content;
|
|
44
45
|
}
|
|
@@ -52,9 +53,9 @@ function toUserContent(content, supportsVision = true) {
|
|
|
52
53
|
return base;
|
|
53
54
|
return base ? `${base}\n${DOCUMENT_OMITTED}` : DOCUMENT_OMITTED;
|
|
54
55
|
}
|
|
55
|
-
if (
|
|
56
|
+
if (withhold !== undefined) {
|
|
56
57
|
const n = content.filter((c) => c.type === "image").length;
|
|
57
|
-
|
|
58
|
+
reportImagesWithheld(withhold, n);
|
|
58
59
|
const base = textOf(content);
|
|
59
60
|
const note = imagesOmittedNoVisionNote(n);
|
|
60
61
|
const withNote = base ? `${base}\n${note}` : note;
|
|
@@ -80,85 +81,11 @@ function toUserContent(content, supportsVision = true) {
|
|
|
80
81
|
function thinkingCompat(model) {
|
|
81
82
|
return (model.compat ?? {});
|
|
82
83
|
}
|
|
83
|
-
function
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const offFormat = offCompat.thinkingFormat ?? "openai";
|
|
87
|
-
switch (offFormat) {
|
|
88
|
-
case "qwen":
|
|
89
|
-
case "zai":
|
|
90
|
-
body.enable_thinking = false;
|
|
91
|
-
break;
|
|
92
|
-
case "qwen-chat-template": {
|
|
93
|
-
const k = (typeof body.chat_template_kwargs === "object" && body.chat_template_kwargs) || {};
|
|
94
|
-
body.chat_template_kwargs = { ...k, enable_thinking: false };
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
case "deepseek":
|
|
98
|
-
body.thinking = { type: "disabled" };
|
|
99
|
-
break;
|
|
100
|
-
case "openrouter":
|
|
101
|
-
case "together":
|
|
102
|
-
body.reasoning = { enabled: false };
|
|
103
|
-
break;
|
|
104
|
-
case "openai": {
|
|
105
|
-
const offSpelling = declaredOffSpelling(model);
|
|
106
|
-
if (offSpelling !== undefined)
|
|
107
|
-
body.reasoning_effort = offSpelling;
|
|
108
|
-
break;
|
|
109
|
-
}
|
|
110
|
-
default: {
|
|
111
|
-
const _exhaustive = offFormat;
|
|
112
|
-
void _exhaustive;
|
|
113
|
-
break;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
return;
|
|
117
|
-
}
|
|
118
|
-
if (!reasoningRequestCarried(model, reasoning))
|
|
119
|
-
return;
|
|
120
|
-
const compat = thinkingCompat(model);
|
|
121
|
-
const supportsEffort = compat.supportsReasoningEffort ?? true;
|
|
122
|
-
const effortWire = mintEffortWireValue(reasoning, model, compat.reasoningEffortLevels).wireValue;
|
|
123
|
-
const format = compat.thinkingFormat ?? "openai";
|
|
124
|
-
switch (format) {
|
|
125
|
-
case "openai":
|
|
126
|
-
if (supportsEffort && effortWire !== undefined)
|
|
127
|
-
body.reasoning_effort = effortWire;
|
|
128
|
-
break;
|
|
129
|
-
case "openrouter":
|
|
130
|
-
body.reasoning = { effort: effortWire };
|
|
131
|
-
break;
|
|
132
|
-
case "deepseek":
|
|
133
|
-
body.thinking = { type: "enabled" };
|
|
134
|
-
if (supportsEffort && effortWire !== undefined)
|
|
135
|
-
body.reasoning_effort = effortWire;
|
|
136
|
-
break;
|
|
137
|
-
case "together":
|
|
138
|
-
body.reasoning = { enabled: true };
|
|
139
|
-
if (supportsEffort && effortWire !== undefined)
|
|
140
|
-
body.reasoning_effort = effortWire;
|
|
141
|
-
break;
|
|
142
|
-
case "qwen":
|
|
143
|
-
case "zai":
|
|
144
|
-
body.enable_thinking = true;
|
|
145
|
-
break;
|
|
146
|
-
case "qwen-chat-template": {
|
|
147
|
-
const k = (typeof body.chat_template_kwargs === "object" && body.chat_template_kwargs) || {};
|
|
148
|
-
body.chat_template_kwargs = { ...k, enable_thinking: true };
|
|
149
|
-
break;
|
|
150
|
-
}
|
|
151
|
-
default: {
|
|
152
|
-
const _exhaustive = format;
|
|
153
|
-
void _exhaustive;
|
|
154
|
-
break;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
function toOpenAIMessages(ctx, replayThinking = true, model) {
|
|
159
|
-
const supportsVision = modelSupportsVision(model);
|
|
84
|
+
function toOpenAIMessages(ctx, replayThinking = true, model, toolNames) {
|
|
85
|
+
const imageWithhold = imageWithholdOf(model);
|
|
86
|
+
const supportsVision = imageWithhold === undefined;
|
|
160
87
|
const out = [];
|
|
161
|
-
const needsEmptyReasoningField =
|
|
88
|
+
const needsEmptyReasoningField = model !== undefined && capabilityHeld(model, "reasoning") && thinkingCompat(model).requiresReasoningContentOnAssistantMessages === true;
|
|
162
89
|
if (ctx.systemPrompt) {
|
|
163
90
|
out.push({ role: "system", content: ctx.systemPrompt });
|
|
164
91
|
}
|
|
@@ -181,7 +108,7 @@ function toOpenAIMessages(ctx, replayThinking = true, model) {
|
|
|
181
108
|
if (m.role !== "toolResult")
|
|
182
109
|
flushImages();
|
|
183
110
|
if (m.role === "user") {
|
|
184
|
-
const uc = toUserContent(m.content,
|
|
111
|
+
const uc = toUserContent(m.content, imageWithhold);
|
|
185
112
|
const empty = uc === "" || (Array.isArray(uc) && uc.length === 0);
|
|
186
113
|
out.push({ role: "user", content: empty ? NO_CONTENT : uc });
|
|
187
114
|
}
|
|
@@ -206,7 +133,7 @@ function toOpenAIMessages(ctx, replayThinking = true, model) {
|
|
|
206
133
|
msg.tool_calls = toolCalls.map((tc) => ({
|
|
207
134
|
id: providerToolCallId(tc),
|
|
208
135
|
type: "function",
|
|
209
|
-
function: { name: tc.name, arguments: JSON.stringify(tc.arguments ?? {}) },
|
|
136
|
+
function: { name: toolNames.sent(tc.name), arguments: JSON.stringify(tc.arguments ?? {}) },
|
|
210
137
|
}));
|
|
211
138
|
}
|
|
212
139
|
out.push(msg);
|
|
@@ -215,8 +142,8 @@ function toOpenAIMessages(ctx, replayThinking = true, model) {
|
|
|
215
142
|
const mediaImages = sendableImages(Array.isArray(m.content) ? m.content : []);
|
|
216
143
|
const rawImages = m.isError ? [] : mediaImages;
|
|
217
144
|
const images = supportsVision ? rawImages : [];
|
|
218
|
-
if (
|
|
219
|
-
|
|
145
|
+
if (imageWithhold !== undefined)
|
|
146
|
+
reportImagesWithheld(imageWithhold, rawImages.length);
|
|
220
147
|
const nDocs = Array.isArray(m.content) ? m.content.filter((c) => c.type === "document").length : 0;
|
|
221
148
|
if (nDocs > 0)
|
|
222
149
|
emitBrainTelemetry({ kind: "document_placeholder", count: nDocs });
|
|
@@ -244,13 +171,13 @@ function toolResultText(text, hasCarriedImages, original) {
|
|
|
244
171
|
return "(image attached below)";
|
|
245
172
|
return Array.isArray(original) && original.length > 0 ? "(non-text tool result omitted)" : "";
|
|
246
173
|
}
|
|
247
|
-
function toOpenAITools(ctx) {
|
|
174
|
+
function toOpenAITools(ctx, toolNames) {
|
|
248
175
|
if (!ctx.tools || ctx.tools.length === 0) {
|
|
249
176
|
return undefined;
|
|
250
177
|
}
|
|
251
178
|
return ctx.tools.map((t) => ({
|
|
252
179
|
type: "function",
|
|
253
|
-
function: { name: t.name, description: t.description, parameters: t.parameters },
|
|
180
|
+
function: { name: toolNames.sent(t.name), description: t.description, parameters: t.parameters },
|
|
254
181
|
}));
|
|
255
182
|
}
|
|
256
183
|
const FINISH_REASON_READINGS = Object.freeze({
|
|
@@ -334,6 +261,7 @@ export function createOpenAIBrain(given = {}) {
|
|
|
334
261
|
let sentMaxTokensLane = "unset";
|
|
335
262
|
let builtMaxTokens;
|
|
336
263
|
let builtMaxTokensLane = "unset";
|
|
264
|
+
let sentToolNames = NAMES_AS_WRITTEN;
|
|
337
265
|
return runStreamingBrain({
|
|
338
266
|
model,
|
|
339
267
|
doFetch,
|
|
@@ -348,6 +276,8 @@ export function createOpenAIBrain(given = {}) {
|
|
|
348
276
|
if (!root) {
|
|
349
277
|
throw new Error("createOpenAIBrain: no baseUrl configured (set config.baseUrl or model.baseUrl)");
|
|
350
278
|
}
|
|
279
|
+
const url = joinRequestUrl(root, "/chat/completions");
|
|
280
|
+
const builtToolNames = endpointToolNames(resolveProviderDialect(url, model.api), model.api, (context.tools ?? []).map((t) => t.name));
|
|
351
281
|
const modelHeaders = headerBagOnce(model.headers);
|
|
352
282
|
const optionsHeaders = headerBagOnce(options?.headers);
|
|
353
283
|
const routeCredential = resolveRouteCredential({
|
|
@@ -362,11 +292,11 @@ export function createOpenAIBrain(given = {}) {
|
|
|
362
292
|
const apiKey = routeCredential.apiKey;
|
|
363
293
|
const body = {
|
|
364
294
|
model: model.id,
|
|
365
|
-
messages: toOpenAIMessages(context, config.replayThinking, model),
|
|
295
|
+
messages: toOpenAIMessages(context, config.replayThinking, model, builtToolNames),
|
|
366
296
|
stream: true,
|
|
367
297
|
stream_options: { include_usage: true },
|
|
368
298
|
};
|
|
369
|
-
const tools = toOpenAITools(context);
|
|
299
|
+
const tools = toOpenAITools(context, builtToolNames);
|
|
370
300
|
if (tools)
|
|
371
301
|
body.tools = tools;
|
|
372
302
|
if (options?.temperature !== undefined)
|
|
@@ -387,15 +317,15 @@ export function createOpenAIBrain(given = {}) {
|
|
|
387
317
|
}
|
|
388
318
|
if (options?.stop)
|
|
389
319
|
body.stop = options.stop;
|
|
390
|
-
|
|
320
|
+
const { body: reasoningBody } = applyReasoningToRequest({ api: "openai-completions", model, level: options?.reasoning, body });
|
|
391
321
|
const headers = mergeHeaders(modelHeaders, config.headers, optionsHeaders);
|
|
392
322
|
applyRouteCredentialHeaders(headers, routeCredential);
|
|
393
323
|
lockHeader(headers, "content-type", "application/json");
|
|
394
324
|
if (apiKey)
|
|
395
325
|
lockHeader(headers, OPENAI_KEY_HEADER, `Bearer ${apiKey}`);
|
|
396
|
-
const { body: wire, dropped: extraBodyDropped } = applyExtraBody(
|
|
326
|
+
const { body: wire, dropped: extraBodyDropped } = applyExtraBody(reasoningBody, model, OPENAI_RESERVED);
|
|
397
327
|
return {
|
|
398
|
-
url
|
|
328
|
+
url,
|
|
399
329
|
headers,
|
|
400
330
|
body: JSON.stringify(wire),
|
|
401
331
|
extraBodyDropped,
|
|
@@ -406,6 +336,7 @@ export function createOpenAIBrain(given = {}) {
|
|
|
406
336
|
routeAdmission();
|
|
407
337
|
sentMaxTokens = builtMaxTokens;
|
|
408
338
|
sentMaxTokensLane = builtMaxTokensLane;
|
|
339
|
+
sentToolNames = builtToolNames;
|
|
409
340
|
},
|
|
410
341
|
};
|
|
411
342
|
},
|
|
@@ -577,7 +508,7 @@ export function createOpenAIBrain(given = {}) {
|
|
|
577
508
|
if (tc.id)
|
|
578
509
|
acc.id = tc.id;
|
|
579
510
|
if (tc.function?.name)
|
|
580
|
-
acc.name = tc.function.name;
|
|
511
|
+
acc.name = sentToolNames.called(tc.function.name);
|
|
581
512
|
if (tc.function?.arguments && !acc.closedTc)
|
|
582
513
|
acc.args += tc.function.arguments;
|
|
583
514
|
toolAccum.set(idx, acc);
|
|
@@ -619,7 +550,7 @@ export function createOpenAIBrain(given = {}) {
|
|
|
619
550
|
}
|
|
620
551
|
}
|
|
621
552
|
if (config.repairTextToolCalls && toolCalls.length === 0 && textFace && context.tools && context.tools.length > 0) {
|
|
622
|
-
const names = new Set(context.tools.flatMap((t) => [t.name, ...(t.aliases ?? [])]));
|
|
553
|
+
const names = new Set(context.tools.flatMap((t) => [t.name, sentToolNames.sent(t.name), ...(t.aliases ?? [])]));
|
|
623
554
|
const repaired = repairTextToolCalls(textFace, names);
|
|
624
555
|
if (repaired.toolCalls.length > 0) {
|
|
625
556
|
finalContent.length = 0;
|
|
@@ -627,7 +558,8 @@ export function createOpenAIBrain(given = {}) {
|
|
|
627
558
|
finalContent.push({ type: "thinking", thinking: accumReasoning });
|
|
628
559
|
if (repaired.cleanedText)
|
|
629
560
|
finalContent.push({ type: "text", text: repaired.cleanedText });
|
|
630
|
-
for (const
|
|
561
|
+
for (const repairedCall of repaired.toolCalls) {
|
|
562
|
+
const tc = { ...repairedCall, name: sentToolNames.called(repairedCall.name) };
|
|
631
563
|
finalContent.push(tc);
|
|
632
564
|
toolCalls.push(tc);
|
|
633
565
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The provider dialect table — what each provider endpoint MEANS by the way it fails
|
|
3
|
-
* endpoint and read by every seat that reports a provider failure
|
|
2
|
+
* The provider dialect table — what each provider endpoint MEANS by the way it fails and by the tool names it is
|
|
3
|
+
* sent, declared once per endpoint and read by every seat that reports a provider failure or names a tool on the
|
|
4
|
+
* wire.
|
|
4
5
|
*
|
|
5
6
|
* KEY. An endpoint is named by (wire family, host suffix + path): the same brand can serve two endpoints whose
|
|
6
7
|
* failures read in opposite ways (Moonshot's open platform states an exhausted balance as a 429, its coding
|
|
@@ -14,7 +15,9 @@
|
|
|
14
15
|
* column: rows that turn a status, the envelope's word (`error.code`, else `error.type` — the same word
|
|
15
16
|
* `apiErrorCode` carries) and the envelope's sentence (`error.message`) into one {@link ProviderCondition}. The
|
|
16
17
|
* context-limit refusal is a flag on the same rows (`inputTooLong`), so "this 400 is the input being too long"
|
|
17
|
-
* and "this 400 is something else the provider named" are read off one row and cannot disagree.
|
|
18
|
+
* and "this 400 is something else the provider named" are read off one row and cannot disagree. `toolNames` is
|
|
19
|
+
* the tool-name column: names the endpoint gives a meaning of its own on one wire ({@link ToolNameRow}), read by
|
|
20
|
+
* {@link endpointToolNames} — the one projection every brain sends tool names through and reads call names back by.
|
|
18
21
|
*
|
|
19
22
|
* ONE VERDICT, TWO SEATS. {@link judgeHttpFailure} answers once per failed response; the retry decision, the
|
|
20
23
|
* retry frame (`BrainStatus.providerCondition`) and the terminal (`BrainError` → `AssistantMessage` →
|
|
@@ -142,11 +145,24 @@ export interface DialectKey {
|
|
|
142
145
|
/** A path prefix, matched at a segment boundary. Absent = every path on the host. */
|
|
143
146
|
readonly path?: string;
|
|
144
147
|
}
|
|
148
|
+
/**
|
|
149
|
+
* One row of the tool-name column. On `wire`, the endpoint treats a tool sent under `name` as a feature of its own
|
|
150
|
+
* rather than as the tool the request declares, so a tool by that name travels as `sentAs` instead, and a call the
|
|
151
|
+
* model makes to `sentAs` is a call to `name`. The name inside the engine, the prompts that mention it and the
|
|
152
|
+
* tool's parameters do not change; only the spelling on this wire does.
|
|
153
|
+
*/
|
|
154
|
+
export interface ToolNameRow {
|
|
155
|
+
readonly wire: Model["api"];
|
|
156
|
+
readonly name: string;
|
|
157
|
+
readonly sentAs: string;
|
|
158
|
+
}
|
|
145
159
|
/** One endpoint's declared dialect: its key and its columns. */
|
|
146
160
|
export interface ProviderDialect {
|
|
147
161
|
readonly name: string;
|
|
148
162
|
readonly key: DialectKey;
|
|
149
163
|
readonly failures: readonly FailureRow[];
|
|
164
|
+
/** Absent = the endpoint gives no tool name a meaning of its own: every name travels as written. */
|
|
165
|
+
readonly toolNames?: readonly ToolNameRow[];
|
|
150
166
|
}
|
|
151
167
|
/**
|
|
152
168
|
* The declared dialects. Each row's source is the provider's own error documentation as collected in the
|
|
@@ -172,6 +188,26 @@ export declare const GENERIC_FAILURES: readonly FailureRow[];
|
|
|
172
188
|
export declare function isTransientStatus(status: number): boolean;
|
|
173
189
|
/** The endpoint a request went to, or `undefined` when no dialect declares it. */
|
|
174
190
|
export declare function resolveProviderDialect(url: string, wire: Model["api"]): ProviderDialect | undefined;
|
|
191
|
+
/**
|
|
192
|
+
* How one request's tool names travel. Both halves read the one set the request declares: `sent` spells a declared
|
|
193
|
+
* tool's name, in the tool table and in every replayed call to it; `called` reads a call name the model sends back as
|
|
194
|
+
* the declared tool that travels under it. A name the request does not declare travels and comes back as written —
|
|
195
|
+
* a replayed call to a tool no longer mounted keeps its name, and a model that calls a tool by the name the prompts
|
|
196
|
+
* use still reaches it. A brain builds one with each request and keeps the one the engine commits; its parser reads
|
|
197
|
+
* call names through it.
|
|
198
|
+
*/
|
|
199
|
+
export interface EndpointToolNames {
|
|
200
|
+
readonly sent: (name: string) => string;
|
|
201
|
+
readonly called: (sentName: string) => string;
|
|
202
|
+
}
|
|
203
|
+
/** Every name travels as written: the projection of an endpoint whose dialect has no tool-name row on the wire. */
|
|
204
|
+
export declare const NAMES_AS_WRITTEN: EndpointToolNames;
|
|
205
|
+
/**
|
|
206
|
+
* The tool-name projection of one request: the dialect's rows for this wire, applied to the tools the request
|
|
207
|
+
* declares. Two declared tools that would travel under one name are refused before anything is sent — the model
|
|
208
|
+
* could not tell them apart, and neither could the call that comes back.
|
|
209
|
+
*/
|
|
210
|
+
export declare function endpointToolNames(dialect: ProviderDialect | undefined, wire: Model["api"], declared: readonly string[]): EndpointToolNames;
|
|
175
211
|
/** One failure's reading off the table. */
|
|
176
212
|
export interface ProviderVerdict {
|
|
177
213
|
readonly condition: ProviderCondition;
|
|
@@ -87,6 +87,7 @@ export const PROVIDER_DIALECTS = Object.freeze([
|
|
|
87
87
|
{ status: [429], word: ["1311", "1313"], condition: "stop_other" },
|
|
88
88
|
{ status: [400], word: ["1261"], condition: "stop_other", inputTooLong: true },
|
|
89
89
|
],
|
|
90
|
+
toolNames: [{ wire: ANTHROPIC, name: "ToolSearch", sentAs: "ToolFinder" }],
|
|
90
91
|
},
|
|
91
92
|
{
|
|
92
93
|
name: "openai",
|
|
@@ -120,6 +121,33 @@ export function resolveProviderDialect(url, wire) {
|
|
|
120
121
|
d.key.hosts.some((h) => host === h || host.endsWith(`.${h}`)) &&
|
|
121
122
|
(d.key.path === undefined || path === d.key.path || path.startsWith(`${d.key.path}/`)));
|
|
122
123
|
}
|
|
124
|
+
export const NAMES_AS_WRITTEN = Object.freeze({ sent: (name) => name, called: (sentName) => sentName });
|
|
125
|
+
export function endpointToolNames(dialect, wire, declared) {
|
|
126
|
+
const rows = (dialect?.toolNames ?? []).filter((r) => r.wire === wire);
|
|
127
|
+
if (rows.length === 0)
|
|
128
|
+
return NAMES_AS_WRITTEN;
|
|
129
|
+
const sentAs = new Map(rows.map((r) => [r.name, r.sentAs]));
|
|
130
|
+
const holderOf = new Map();
|
|
131
|
+
const forward = new Map();
|
|
132
|
+
const back = new Map();
|
|
133
|
+
for (const name of new Set(declared)) {
|
|
134
|
+
const onWire = sentAs.get(name) ?? name;
|
|
135
|
+
const holder = holderOf.get(onWire);
|
|
136
|
+
if (holder !== undefined) {
|
|
137
|
+
const moved = rows.filter((r) => r.sentAs === onWire).map((r) => JSON.stringify(r.name)).join(" / ");
|
|
138
|
+
const asWritten = [holder, name].find((n) => n === onWire);
|
|
139
|
+
throw new BrainError("invalid_request", `the request was not sent: the tools ${JSON.stringify(holder)} and ${JSON.stringify(name)} would both travel as ${JSON.stringify(onWire)}. ` +
|
|
140
|
+
`This endpoint gives the tool name ${moved} a meaning of its own on this wire, so a tool by that name is sent as ${JSON.stringify(onWire)}, ` +
|
|
141
|
+
`and two tools cannot share one name on the wire — rename ${asWritten === undefined ? "one of them" : `the tool named ${JSON.stringify(asWritten)}`}.`);
|
|
142
|
+
}
|
|
143
|
+
holderOf.set(onWire, name);
|
|
144
|
+
if (onWire !== name) {
|
|
145
|
+
forward.set(name, onWire);
|
|
146
|
+
back.set(onWire, name);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return { sent: (name) => forward.get(name) ?? name, called: (sentName) => back.get(sentName) ?? sentName };
|
|
150
|
+
}
|
|
123
151
|
function statementOf(err) {
|
|
124
152
|
if (err === undefined)
|
|
125
153
|
return undefined;
|