@bastani/atomic 0.9.28-alpha.3 → 0.9.28-alpha.4
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 +23 -0
- package/dist/builtin/intercom/package.json +2 -2
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +6 -0
- package/dist/builtin/subagents/package.json +3 -3
- package/dist/builtin/subagents/skills/agent-browser/SKILL.md +1 -1
- package/dist/builtin/subagents/skills/cua-driver/BROWSER.md +60 -39
- package/dist/builtin/subagents/skills/cua-driver/EMBEDDING.md +119 -36
- package/dist/builtin/subagents/skills/cua-driver/LINUX.md +225 -183
- package/dist/builtin/subagents/skills/cua-driver/MACOS.md +120 -89
- package/dist/builtin/subagents/skills/cua-driver/README.md +16 -7
- package/dist/builtin/subagents/skills/cua-driver/RECORDING.md +85 -115
- package/dist/builtin/subagents/skills/cua-driver/RUNTIME.md +113 -0
- package/dist/builtin/subagents/skills/cua-driver/SKILL.md +55 -1071
- package/dist/builtin/subagents/skills/cua-driver/VISUAL.md +125 -0
- package/dist/builtin/subagents/skills/cua-driver/WINDOWS.md +145 -185
- package/dist/builtin/subagents/skills/cua-driver/WORKFLOW.md +173 -0
- package/dist/builtin/web-access/package.json +2 -2
- package/dist/builtin/workflows/CHANGELOG.md +10 -0
- package/dist/builtin/workflows/README.md +1 -1
- package/dist/builtin/workflows/package.json +2 -2
- package/dist/builtin/workflows/skills/impeccable/SKILL.md +8 -2
- package/dist/builtin/workflows/skills/impeccable/reference/adapt.md +6 -0
- package/dist/builtin/workflows/skills/impeccable/reference/audit.md +2 -1
- package/dist/builtin/workflows/skills/impeccable/reference/component-review.md +63 -0
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/asset-producer.md +5 -0
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/finish-reviewer.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/generate.md +101 -0
- package/dist/builtin/workflows/skills/impeccable/reference/harden.md +9 -0
- package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +3 -1
- package/dist/builtin/workflows/skills/impeccable/reference/mode-operate.md +21 -0
- package/dist/builtin/workflows/skills/impeccable/reference/mode-persuade.md +19 -0
- package/dist/builtin/workflows/skills/impeccable/reference/mode-read.md +21 -0
- package/dist/builtin/workflows/skills/impeccable/reference/new-work.md +19 -12
- package/dist/builtin/workflows/skills/impeccable/reference/region-map.md +26 -0
- package/dist/builtin/workflows/skills/impeccable/reference/routing.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/visualize.md +5 -5
- package/dist/builtin/workflows/skills/impeccable/scripts/VERSION +1 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/command-metadata.json +4 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/impeccable.cmd +2 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser-session.js +5 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +524 -4
- package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +1 -0
- package/dist/builtin/workflows/skills/prompt-engineer/references/claude_haiku_5_5.md +81 -0
- package/dist/codemode-worker.js +2 -2
- package/dist/core/agent-session-compaction.d.ts +3 -3
- package/dist/core/agent-session-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-compaction.js +5 -1
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +1 -0
- package/dist/core/agent-session-events.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.d.ts.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +4 -0
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +6 -1
- package/dist/core/agent-session-methods.d.ts.map +1 -1
- package/dist/core/agent-session-methods.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +3 -2
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +1 -0
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +1 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +2 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/agent-events.d.ts +2 -0
- package/dist/core/extensions/agent-events.d.ts.map +1 -1
- package/dist/core/extensions/agent-events.js.map +1 -1
- package/dist/core/extensions/context-types.d.ts +2 -0
- package/dist/core/extensions/context-types.d.ts.map +1 -1
- package/dist/core/extensions/context-types.js.map +1 -1
- package/dist/core/extensions/mcp-server-registry.d.ts +4 -1
- package/dist/core/extensions/mcp-server-registry.d.ts.map +1 -1
- package/dist/core/extensions/mcp-server-registry.js +7 -4
- package/dist/core/extensions/mcp-server-registry.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +3 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +19 -0
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/tool-types.d.ts +2 -0
- package/dist/core/extensions/tool-types.d.ts.map +1 -1
- package/dist/core/extensions/tool-types.js.map +1 -1
- package/dist/core/fast-model-variants.d.ts.map +1 -1
- package/dist/core/fast-model-variants.js +3 -2
- package/dist/core/fast-model-variants.js.map +1 -1
- package/dist/core/model-resolver-defaults.d.ts.map +1 -1
- package/dist/core/model-resolver-defaults.js +2 -0
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/nested-tool-calls.d.ts +1 -0
- package/dist/core/nested-tool-calls.d.ts.map +1 -1
- package/dist/core/nested-tool-calls.js +1 -0
- package/dist/core/nested-tool-calls.js.map +1 -1
- package/dist/core/settings-types.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +7 -3
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit.js +1 -1
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/extensions/codemode/execute.d.ts.map +1 -1
- package/dist/extensions/codemode/execute.js +55 -7
- package/dist/extensions/codemode/execute.js.map +1 -1
- package/dist/extensions/codemode/index.d.ts.map +1 -1
- package/dist/extensions/codemode/index.js +7 -0
- package/dist/extensions/codemode/index.js.map +1 -1
- package/dist/extensions/codemode/tool.d.ts +2 -0
- package/dist/extensions/codemode/tool.d.ts.map +1 -1
- package/dist/extensions/codemode/tool.js +2 -0
- package/dist/extensions/codemode/tool.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +5 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +17 -14
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +2 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +5 -2
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.d.ts +1 -0
- package/dist/modes/interactive/components/chat-message-renderer.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-message-renderer.js +19 -8
- package/dist/modes/interactive/components/chat-message-renderer.js.map +1 -1
- package/dist/modes/interactive/components/compaction-boundary-message.d.ts +3 -2
- package/dist/modes/interactive/components/compaction-boundary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-boundary-message.js +7 -4
- package/dist/modes/interactive/components/compaction-boundary-message.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts +3 -1
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js +8 -2
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +1 -0
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js +1 -1
- package/dist/modes/interactive/components/settings-selector-items.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +2 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +5 -2
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +4 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +10 -0
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +3 -1
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-login.js +6 -0
- package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
- package/dist/modes/interactive/interactive-bash-compact.js +2 -2
- package/dist/modes/interactive/interactive-bash-compact.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-dialogs.js +11 -2
- package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.d.ts +3 -0
- package/dist/modes/interactive/interactive-mode-base.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-base.js +6 -0
- package/dist/modes/interactive/interactive-mode-base.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +2 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +7 -5
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-selectors.js +8 -1
- package/dist/modes/interactive/interactive-selectors.js.map +1 -1
- package/dist/modes/interactive/interactive-session-runtime.js +1 -0
- package/dist/modes/interactive/interactive-session-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +1 -0
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive/program-status-reporter.d.ts +24 -0
- package/dist/modes/interactive/program-status-reporter.d.ts.map +1 -0
- package/dist/modes/interactive/program-status-reporter.js +96 -0
- package/dist/modes/interactive/program-status-reporter.js.map +1 -0
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.js +1 -0
- package/dist/modes/interactive-engine/engine-custom-ui.js.map +1 -1
- package/dist/modes/interactive-engine/engine-render-service.d.ts.map +1 -1
- package/dist/modes/interactive-engine/engine-render-service.js +3 -1
- package/dist/modes/interactive-engine/engine-render-service.js.map +1 -1
- package/dist/modes/interactive-engine/protocol.d.ts +1 -0
- package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
- package/dist/modes/interactive-engine/protocol.js +1 -0
- package/dist/modes/interactive-engine/protocol.js.map +1 -1
- package/dist/modes/interactive-engine/remote-renderer.d.ts +3 -0
- package/dist/modes/interactive-engine/remote-renderer.d.ts.map +1 -1
- package/dist/modes/interactive-engine/remote-renderer.js +7 -0
- package/dist/modes/interactive-engine/remote-renderer.js.map +1 -1
- package/docs/codemode.md +10 -6
- package/docs/compaction.md +1 -1
- package/docs/computer-use.md +9 -9
- package/docs/custom-provider/streaming.md +4 -0
- package/docs/environment-variables.md +2 -0
- package/docs/extensions/api-reference.md +1 -1
- package/docs/extensions/authoring.md +2 -0
- package/docs/extensions/events.md +5 -1
- package/docs/getting-started/first-session.md +1 -1
- package/docs/json.md +6 -1
- package/docs/models/evals.md +34 -3
- package/docs/models.md +1 -1
- package/docs/providers.md +8 -0
- package/docs/sdk.md +7 -1
- package/docs/settings.md +1 -1
- package/docs/skills.md +1 -1
- package/docs/terminal-setup.md +14 -0
- package/docs/workflows/authoring.md +3 -3
- package/examples/extensions/sandbox/package-lock.json +3 -3
- package/npm-shrinkwrap.json +67 -67
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fast-model-variants.js","sourceRoot":"","sources":["../../src/core/fast-model-variants.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Api,\n\ttype Credential,\n\tgetServiceTierCost,\n\ttype Model,\n\ttype ModelFastRoute,\n\ttype Provider,\n} from \"@bastani/pi-ai\";\nimport type { ModelsJsonModelOverride } from \"./model-config.ts\";\nimport { applyModelOverride } from \"./provider-composer-internal.ts\";\n\n/** Canonical suffix every selectable fast model variant carries. */\nexport const FAST_MODEL_ID_SUFFIX = \"-fast\";\n\n/** Service tier OpenAI-style providers use to route fast traffic. */\nexport const FAST_MODEL_SERVICE_TIER = \"priority\" as const;\n\n/** Codex's Ultrafast tier, offered only for models that advertise it; access depends on the account. */\nexport const ULTRAFAST_MODEL_ID_SUFFIX = \"-ultrafast\";\nexport const ULTRAFAST_MODEL_SERVICE_TIER = \"ultrafast\" as const;\n\n/** Inference speed Anthropic's Messages API uses to route fast traffic. */\nexport const FAST_MODEL_SPEED = \"fast\" as const;\n\n/**\n * Claude models Anthropic's fast mode accepts. Requesting `speed: \"fast\"` on any other model is an\n * error, so the list is explicit rather than a family-name pattern.\n * https://platform.claude.com/docs/en/build-with-claude/fast-mode#supported-models\n */\nexport const ANTHROPIC_FAST_MODE_MODEL_IDS: ReadonlySet<string> = new Set([\n\t\"claude-opus-5-5\",\n\t\"claude-opus-5\",\n\t\"claude-opus-4-8\",\n]);\n\n/** A derived fast variant that was suppressed because something already owns its exact model ID. */\nexport interface FastModelVariantDiagnostic {\n\tprovider: string;\n\t/** The exact selectable model ID that collided. */\n\tmodelId: string;\n\tmessage: string;\n}\n\nexport interface FastModelVariantDerivation {\n\tmodels: readonly Model<Api>[];\n\tdiagnostics: readonly FastModelVariantDiagnostic[];\n}\n\nexport interface DeriveFastModelVariantsOptions {\n\t/** Exact fast model IDs the stored GitHub Copilot credential advertises for this account. */\n\tcopilotFastModelIds?: readonly string[];\n\t/** `models.json` `modelOverrides` for this provider, applied to derived entries by their exact `-fast` ID. */\n\tmodelOverrides?: Readonly<Record<string, ModelsJsonModelOverride>>;\n\t/** APIs whose transport a registered extension owns for this provider. No variant is derived for them. */\n\textensionOwnedApis?: ReadonlySet<Api>;\n\t/** IDs explicitly declared in this provider's models.json models array. Never derive siblings for them. */\n\tcustomModelIds?: ReadonlySet<string>;\n}\n\nexport interface FastModelVariantsOptions {\n\t/**\n\t * Synchronous read of the exact fast model IDs the stored GitHub Copilot credential advertises.\n\t * Read per call so a credential that lands after provider composition still takes effect.\n\t */\n\tgetCopilotFastModelIds?: () => readonly string[] | undefined;\n\t/** Synchronous read of this provider's `models.json` `modelOverrides`, so a reload takes effect. */\n\tgetModelOverrides?: () => Readonly<Record<string, ModelsJsonModelOverride>> | undefined;\n\t/** Read current custom model IDs per pass so models.json reloads update eligibility. */\n\tgetCustomModelIds?: () => ReadonlySet<string>;\n\t/**\n\t * Synchronous read of the APIs a registered extension supplies a stream function for. Read per call\n\t * because extensions register after initial composition on some paths.\n\t */\n\tgetExtensionOwnedApis?: () => ReadonlySet<Api> | undefined;\n\t/** Called after every derivation pass with the complete diagnostic list for this provider. */\n\tonDiagnostics?: (providerId: string, diagnostics: readonly FastModelVariantDiagnostic[]) => void;\n}\n\n/** Canonical selectable ID of the fast variant of `baseModelId`. */\nexport function fastModelId(baseModelId: string): string {\n\treturn `${baseModelId}${FAST_MODEL_ID_SUFFIX}`;\n}\n\n/**\n * The two pi-ai adapters that serialize `service_tier`. `azure-openai-responses` and\n * `openai-completions` have no such option, and `streamSimple` drops it, so a service-tier route on\n * any other API would silently degrade to an ordinary request.\n */\nexport function isNativeFastRouteApi(api: Api): api is \"openai-responses\" | \"openai-codex-responses\" {\n\treturn api === \"openai-responses\" || api === \"openai-codex-responses\";\n}\n\n/**\n * OpenAI-style fast routing keeps the base upstream model ID and adds a priority service tier.\n *\n * Eligibility requires both a first-party provider ID and an adapter that serializes\n * `service_tier`. A renamed provider, proxy, Azure (`azure`), OpenRouter\n * (`openai-completions`), and generic OpenAI-compatible providers do not qualify. An `openai` or\n * `openai-codex` model on an adapter that cannot carry `service_tier` must not offer a fast variant,\n * because selecting it would send an ordinary request under a name that promises otherwise.\n */\nexport function usesOpenAIFastServiceTier(model: Pick<Model<Api>, \"api\" | \"provider\">): boolean {\n\treturn isNativeFastRouteApi(model.api) && (model.provider === \"openai\" || model.provider === \"openai-codex\");\n}\n\n/**\n * xAI Priority Processing keeps the base upstream Grok model ID and adds the same\n * `service_tier: \"priority\"` field on the Responses API. xAI has no `-fast` model slugs for current\n * Grok models; priority is billed at twice the standard token rates, and only when the response\n * confirms the tier. https://docs.x.ai/developers/advanced-api-usage/priority-processing\n *\n * Eligibility requires the first-party `xai` provider on `openai-responses`. OpenRouter, Vercel AI\n * Gateway, and renamed or proxied xAI-compatible providers do not qualify.\n */\nexport function usesXaiFastServiceTier(model: Pick<Model<Api>, \"api\" | \"provider\">): boolean {\n\treturn model.api === \"openai-responses\" && model.provider === \"xai\";\n}\n\n/** GitHub Copilot advertises real fast sibling model IDs per account; it never uses a service tier. */\nexport function isGitHubCopilotModel(model: Pick<Model<Api>, \"provider\">): boolean {\n\treturn model.provider === \"github-copilot\";\n}\n\n/**\n * Anthropic fast mode keeps the base upstream model ID and adds `speed: \"fast\"` with the fast-mode beta.\n *\n * Eligibility requires the first-party `anthropic` provider on the Messages API and a supported model.\n * Fast mode is not offered through Amazon Bedrock, Google Vertex, GitHub Copilot, OpenRouter, or a\n * renamed or proxied Anthropic-compatible provider.\n */\nexport function usesAnthropicFastMode(model: Pick<Model<Api>, \"api\" | \"id\" | \"provider\">): boolean {\n\treturn (\n\t\tmodel.api === \"anthropic-messages\" &&\n\t\tmodel.provider === \"anthropic\" &&\n\t\tANTHROPIC_FAST_MODE_MODEL_IDS.has(model.id)\n\t);\n}\n\nfunction advertisedModelIds(value: unknown): readonly string[] | undefined {\n\tif (!Array.isArray(value) || !value.every((entry) => typeof entry === \"string\")) return undefined;\n\treturn value;\n}\n\n/** Read the exact fast model IDs a stored GitHub Copilot OAuth credential advertises. */\nexport function copilotAdvertisedFastModelIds(credential: Credential | undefined): readonly string[] | undefined {\n\tif (credential?.type !== \"oauth\") return undefined;\n\treturn advertisedModelIds(credential.fastModelIds);\n}\n\n/**\n * Whether a stored GitHub Copilot OAuth credential advertises this exact model ID at all — as a\n * selectable picker/policy model or as a fast sibling.\n *\n * Copilot's per-account advertisement is the authority the provider's own `filterModels` uses, so\n * restoration consults the same lists. An ID the account advertises as an ordinary model is ordinary,\n * whatever its name ends in.\n */\nexport function copilotAdvertisesModelId(credential: Credential | undefined, modelId: string): boolean {\n\tif (credential?.type !== \"oauth\") return false;\n\treturn (\n\t\tadvertisedModelIds(credential.availableModelIds)?.includes(modelId) === true ||\n\t\tadvertisedModelIds(credential.fastModelIds)?.includes(modelId) === true\n\t);\n}\n\n/** A model without tier metadata keeps offering Fast; one that lists its tiers must advertise it, as in Codex. */\nfunction advertisesFastServiceTier(model: Model<Api>): boolean {\n\treturn model.serviceTiers === undefined || getServiceTierCost(model, FAST_MODEL_SERVICE_TIER) !== undefined;\n}\n\nfunction fastRouteForBaseModel(\n\tmodel: Model<Api>,\n\tentitledCopilotFastModelIds: ReadonlySet<string>,\n): ModelFastRoute | undefined {\n\tif (usesOpenAIFastServiceTier(model)) {\n\t\treturn advertisesFastServiceTier(model)\n\t\t\t? { baseModelId: model.id, upstreamModelId: model.id, serviceTier: FAST_MODEL_SERVICE_TIER }\n\t\t\t: undefined;\n\t}\n\tif (usesXaiFastServiceTier(model)) {\n\t\treturn { baseModelId: model.id, upstreamModelId: model.id, serviceTier: FAST_MODEL_SERVICE_TIER };\n\t}\n\tif (usesAnthropicFastMode(model)) {\n\t\treturn { baseModelId: model.id, upstreamModelId: model.id, speed: FAST_MODEL_SPEED };\n\t}\n\tif (isGitHubCopilotModel(model)) {\n\t\tconst advertisedId = fastModelId(model.id);\n\t\treturn entitledCopilotFastModelIds.has(advertisedId)\n\t\t\t? { baseModelId: model.id, upstreamModelId: advertisedId }\n\t\t\t: undefined;\n\t}\n\treturn undefined;\n}\n\n/**\n * Add a selectable `<base-model-id>-fast` entry for every eligible model, carrying the explicit\n * {@link ModelFastRoute} metadata that gives it fast semantics. The input list is preserved verbatim\n * and in order; each derived entry is appended directly after the model it derives from.\n *\n * A model whose exact `-fast` ID is already owned by the provider, a `models.json` custom model, or an\n * extension wins: derivation is suppressed for it and a diagnostic is recorded. The owning model keeps\n * whatever semantics it declares, because fast behavior comes only from `fastRoute`, never from the\n * `-fast` suffix. For the same reason a base model whose ID already ends in `-fast` is never used to\n * derive a `-fast-fast` variant: that is not a canonical ID this scheme defines.\n *\n * A derived entry is a real catalog model, so a `modelOverrides` entry keyed on its exact `-fast` ID\n * applies to it after derivation. Without that pass the derived entry would inherit the *base* model's\n * overrides and its own would be silently inert.\n *\n * No variant is derived for an API whose transport a registered extension owns, because Atomic cannot\n * enforce the route through a transport it does not serialize.\n */\nexport function deriveFastModelVariants(\n\tproviderId: string,\n\tmodels: readonly Model<Api>[],\n\toptions: DeriveFastModelVariantsOptions = {},\n): FastModelVariantDerivation {\n\tconst ownedModelIds = new Set(models.map((model) => model.id));\n\tconst entitledCopilotFastModelIds = new Set(options.copilotFastModelIds ?? []);\n\tconst derived: Model<Api>[] = [];\n\tconst diagnostics: FastModelVariantDiagnostic[] = [];\n\tlet changed = false;\n\tfor (const model of models) {\n\t\tderived.push(model);\n\t\tif (\n\t\t\tmodel.fastRoute !== undefined ||\n\t\t\tmodel.id.endsWith(FAST_MODEL_ID_SUFFIX) ||\n\t\t\tmodel.id.endsWith(ULTRAFAST_MODEL_ID_SUFFIX)\n\t\t)\n\t\t\tcontinue;\n\t\tif (options.customModelIds?.has(model.id)) continue;\n\t\t// An extension that supplies this API's stream function owns its serialization, so Atomic cannot\n\t\t// guarantee the route reaches the wire. Publishing a `-fast` choice it may not honor is the same\n\t\t// hazard as publishing one for an adapter that cannot carry the tier.\n\t\tif (options.extensionOwnedApis?.has(model.api) === true) continue;\n\t\tconst fastRoute = fastRouteForBaseModel(model, entitledCopilotFastModelIds);\n\t\tconst routes: Array<{ suffix: string; label: string; route: ModelFastRoute }> = [];\n\t\tif (fastRoute) routes.push({ suffix: FAST_MODEL_ID_SUFFIX, label: \"fast\", route: fastRoute });\n\t\tif (usesOpenAIFastServiceTier(model) && getServiceTierCost(model, ULTRAFAST_MODEL_SERVICE_TIER)) {\n\t\t\troutes.push({\n\t\t\t\tsuffix: ULTRAFAST_MODEL_ID_SUFFIX,\n\t\t\t\tlabel: \"ultrafast\",\n\t\t\t\troute: { baseModelId: model.id, upstreamModelId: model.id, serviceTier: ULTRAFAST_MODEL_SERVICE_TIER },\n\t\t\t});\n\t\t}\n\t\tfor (const { suffix, label, route } of routes) {\n\t\t\tconst variantId = `${model.id}${suffix}`;\n\t\t\tif (ownedModelIds.has(variantId)) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tprovider: providerId,\n\t\t\t\t\tmodelId: variantId,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`Model \"${providerId}/${variantId}\" is already defined by the provider, models.json, or an extension, ` +\n\t\t\t\t\t\t`so Atomic did not derive a ${label} variant of \"${providerId}/${model.id}\". ` +\n\t\t\t\t\t\t`That model routes exactly as declared. Rename or remove it to get the derived ${label} variant instead.`,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst override = options.modelOverrides?.[variantId];\n\t\t\tconst variant: Model<Api> = { ...model, id: variantId, name: `${model.name} (${label})`, fastRoute: route };\n\t\t\tderived.push(override ? applyModelOverride(variant, override) : variant);\n\t\t\tchanged = true;\n\t\t}\n\t}\n\tif (!changed && diagnostics.length === 0) return { models, diagnostics };\n\treturn { models: derived, diagnostics };\n}\n\n/**\n * Overlay derived fast model variants onto a composed provider. Apply this after built-in,\n * `models.json`, extension, and `modelOverrides` composition so exact user-owned `-fast` IDs are\n * already present and win the collision.\n */\nexport function withFastModelVariants(provider: Provider, options: FastModelVariantsOptions = {}): Provider {\n\treturn {\n\t\t...provider,\n\t\tgetModels: () => {\n\t\t\tconst { models, diagnostics } = deriveFastModelVariants(provider.id, provider.getModels(), {\n\t\t\t\tcopilotFastModelIds: isGitHubCopilotModel({ provider: provider.id })\n\t\t\t\t\t? options.getCopilotFastModelIds?.()\n\t\t\t\t\t: undefined,\n\t\t\t\tmodelOverrides: options.getModelOverrides?.(),\n\t\t\t\textensionOwnedApis: options.getExtensionOwnedApis?.(),\n\t\t\t\tcustomModelIds: options.getCustomModelIds?.(),\n\t\t\t});\n\t\t\toptions.onDiagnostics?.(provider.id, diagnostics);\n\t\t\treturn models;\n\t\t},\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"fast-model-variants.js","sourceRoot":"","sources":["../../src/core/fast-model-variants.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Api,\n\ttype Credential,\n\tgetServiceTierCost,\n\ttype Model,\n\ttype ModelFastRoute,\n\ttype Provider,\n} from \"@bastani/pi-ai\";\nimport type { ModelsJsonModelOverride } from \"./model-config.ts\";\nimport { applyModelOverride } from \"./provider-composer-internal.ts\";\n\n/** Canonical suffix every selectable fast model variant carries. */\nexport const FAST_MODEL_ID_SUFFIX = \"-fast\";\n\n/** Service tier OpenAI-style providers use to route fast traffic. */\nexport const FAST_MODEL_SERVICE_TIER = \"priority\" as const;\n\n/** Codex's Ultrafast tier, offered only for models that advertise it; access depends on the account. */\nexport const ULTRAFAST_MODEL_ID_SUFFIX = \"-ultrafast\";\nexport const ULTRAFAST_MODEL_SERVICE_TIER = \"ultrafast\" as const;\n\n/** Inference speed Anthropic's Messages API uses to route fast traffic. */\nexport const FAST_MODEL_SPEED = \"fast\" as const;\n\n/**\n * Claude models Anthropic's fast mode accepts. Requesting `speed: \"fast\"` on any other model is an\n * error, so the list is explicit rather than a family-name pattern.\n * https://platform.claude.com/docs/en/build-with-claude/fast-mode#supported-models\n */\nexport const ANTHROPIC_FAST_MODE_MODEL_IDS: ReadonlySet<string> = new Set([\n\t\"claude-opus-5-5\",\n\t\"claude-opus-5\",\n\t\"claude-opus-4-8\",\n]);\n\n/** A derived fast variant that was suppressed because something already owns its exact model ID. */\nexport interface FastModelVariantDiagnostic {\n\tprovider: string;\n\t/** The exact selectable model ID that collided. */\n\tmodelId: string;\n\tmessage: string;\n}\n\nexport interface FastModelVariantDerivation {\n\tmodels: readonly Model<Api>[];\n\tdiagnostics: readonly FastModelVariantDiagnostic[];\n}\n\nexport interface DeriveFastModelVariantsOptions {\n\t/** Exact fast model IDs the stored GitHub Copilot credential advertises for this account. */\n\tcopilotFastModelIds?: readonly string[];\n\t/** `models.json` `modelOverrides` for this provider, applied to derived entries by their exact `-fast` ID. */\n\tmodelOverrides?: Readonly<Record<string, ModelsJsonModelOverride>>;\n\t/** APIs whose transport a registered extension owns for this provider. No variant is derived for them. */\n\textensionOwnedApis?: ReadonlySet<Api>;\n\t/** IDs explicitly declared in this provider's models.json models array. Never derive siblings for them. */\n\tcustomModelIds?: ReadonlySet<string>;\n}\n\nexport interface FastModelVariantsOptions {\n\t/**\n\t * Synchronous read of the exact fast model IDs the stored GitHub Copilot credential advertises.\n\t * Read per call so a credential that lands after provider composition still takes effect.\n\t */\n\tgetCopilotFastModelIds?: () => readonly string[] | undefined;\n\t/** Synchronous read of this provider's `models.json` `modelOverrides`, so a reload takes effect. */\n\tgetModelOverrides?: () => Readonly<Record<string, ModelsJsonModelOverride>> | undefined;\n\t/** Read current custom model IDs per pass so models.json reloads update eligibility. */\n\tgetCustomModelIds?: () => ReadonlySet<string>;\n\t/**\n\t * Synchronous read of the APIs a registered extension supplies a stream function for. Read per call\n\t * because extensions register after initial composition on some paths.\n\t */\n\tgetExtensionOwnedApis?: () => ReadonlySet<Api> | undefined;\n\t/** Called after every derivation pass with the complete diagnostic list for this provider. */\n\tonDiagnostics?: (providerId: string, diagnostics: readonly FastModelVariantDiagnostic[]) => void;\n}\n\n/** Canonical selectable ID of the fast variant of `baseModelId`. */\nexport function fastModelId(baseModelId: string): string {\n\treturn `${baseModelId}${FAST_MODEL_ID_SUFFIX}`;\n}\n\n/**\n * The two pi-ai adapters that serialize `service_tier`. `azure-openai-responses` and\n * `openai-completions` have no such option, and `streamSimple` drops it, so a service-tier route on\n * any other API would silently degrade to an ordinary request.\n */\nexport function isNativeFastRouteApi(api: Api): api is \"openai-responses\" | \"openai-codex-responses\" {\n\treturn api === \"openai-responses\" || api === \"openai-codex-responses\";\n}\n\n/**\n * OpenAI-style fast routing keeps the base upstream model ID and adds a priority service tier.\n *\n * Eligibility requires both a first-party provider ID and an adapter that serializes\n * `service_tier`. A renamed provider, proxy, Azure (`azure`), OpenRouter\n * (`openai-completions`), and generic OpenAI-compatible providers do not qualify. An `openai` or\n * `openai-codex` model on an adapter that cannot carry `service_tier` must not offer a fast variant,\n * because selecting it would send an ordinary request under a name that promises otherwise.\n */\nexport function usesOpenAIFastServiceTier(model: Pick<Model<Api>, \"api\" | \"provider\">): boolean {\n\treturn (\n\t\tisNativeFastRouteApi(model.api) &&\n\t\t(model.provider === \"openai\" || model.provider === \"openai-api\" || model.provider === \"openai-codex\")\n\t);\n}\n\n/**\n * xAI Priority Processing keeps the base upstream Grok model ID and adds the same\n * `service_tier: \"priority\"` field on the Responses API. xAI has no `-fast` model slugs for current\n * Grok models; priority is billed at twice the standard token rates, and only when the response\n * confirms the tier. https://docs.x.ai/developers/advanced-api-usage/priority-processing\n *\n * Eligibility requires the first-party `xai` provider on `openai-responses`. OpenRouter, Vercel AI\n * Gateway, and renamed or proxied xAI-compatible providers do not qualify.\n */\nexport function usesXaiFastServiceTier(model: Pick<Model<Api>, \"api\" | \"provider\">): boolean {\n\treturn model.api === \"openai-responses\" && model.provider === \"xai\";\n}\n\n/** GitHub Copilot advertises real fast sibling model IDs per account; it never uses a service tier. */\nexport function isGitHubCopilotModel(model: Pick<Model<Api>, \"provider\">): boolean {\n\treturn model.provider === \"github-copilot\";\n}\n\n/**\n * Anthropic fast mode keeps the base upstream model ID and adds `speed: \"fast\"` with the fast-mode beta.\n *\n * Eligibility requires the first-party `anthropic` provider on the Messages API and a supported model.\n * Fast mode is not offered through Amazon Bedrock, Google Vertex, GitHub Copilot, OpenRouter, or a\n * renamed or proxied Anthropic-compatible provider.\n */\nexport function usesAnthropicFastMode(model: Pick<Model<Api>, \"api\" | \"id\" | \"provider\">): boolean {\n\treturn (\n\t\tmodel.api === \"anthropic-messages\" &&\n\t\t(model.provider === \"anthropic\" || model.provider === \"anthropic-api\") &&\n\t\tANTHROPIC_FAST_MODE_MODEL_IDS.has(model.id)\n\t);\n}\n\nfunction advertisedModelIds(value: unknown): readonly string[] | undefined {\n\tif (!Array.isArray(value) || !value.every((entry) => typeof entry === \"string\")) return undefined;\n\treturn value;\n}\n\n/** Read the exact fast model IDs a stored GitHub Copilot OAuth credential advertises. */\nexport function copilotAdvertisedFastModelIds(credential: Credential | undefined): readonly string[] | undefined {\n\tif (credential?.type !== \"oauth\") return undefined;\n\treturn advertisedModelIds(credential.fastModelIds);\n}\n\n/**\n * Whether a stored GitHub Copilot OAuth credential advertises this exact model ID at all — as a\n * selectable picker/policy model or as a fast sibling.\n *\n * Copilot's per-account advertisement is the authority the provider's own `filterModels` uses, so\n * restoration consults the same lists. An ID the account advertises as an ordinary model is ordinary,\n * whatever its name ends in.\n */\nexport function copilotAdvertisesModelId(credential: Credential | undefined, modelId: string): boolean {\n\tif (credential?.type !== \"oauth\") return false;\n\treturn (\n\t\tadvertisedModelIds(credential.availableModelIds)?.includes(modelId) === true ||\n\t\tadvertisedModelIds(credential.fastModelIds)?.includes(modelId) === true\n\t);\n}\n\n/** A model without tier metadata keeps offering Fast; one that lists its tiers must advertise it, as in Codex. */\nfunction advertisesFastServiceTier(model: Model<Api>): boolean {\n\treturn model.serviceTiers === undefined || getServiceTierCost(model, FAST_MODEL_SERVICE_TIER) !== undefined;\n}\n\nfunction fastRouteForBaseModel(\n\tmodel: Model<Api>,\n\tentitledCopilotFastModelIds: ReadonlySet<string>,\n): ModelFastRoute | undefined {\n\tif (usesOpenAIFastServiceTier(model)) {\n\t\treturn advertisesFastServiceTier(model)\n\t\t\t? { baseModelId: model.id, upstreamModelId: model.id, serviceTier: FAST_MODEL_SERVICE_TIER }\n\t\t\t: undefined;\n\t}\n\tif (usesXaiFastServiceTier(model)) {\n\t\treturn { baseModelId: model.id, upstreamModelId: model.id, serviceTier: FAST_MODEL_SERVICE_TIER };\n\t}\n\tif (usesAnthropicFastMode(model)) {\n\t\treturn { baseModelId: model.id, upstreamModelId: model.id, speed: FAST_MODEL_SPEED };\n\t}\n\tif (isGitHubCopilotModel(model)) {\n\t\tconst advertisedId = fastModelId(model.id);\n\t\treturn entitledCopilotFastModelIds.has(advertisedId)\n\t\t\t? { baseModelId: model.id, upstreamModelId: advertisedId }\n\t\t\t: undefined;\n\t}\n\treturn undefined;\n}\n\n/**\n * Add a selectable `<base-model-id>-fast` entry for every eligible model, carrying the explicit\n * {@link ModelFastRoute} metadata that gives it fast semantics. The input list is preserved verbatim\n * and in order; each derived entry is appended directly after the model it derives from.\n *\n * A model whose exact `-fast` ID is already owned by the provider, a `models.json` custom model, or an\n * extension wins: derivation is suppressed for it and a diagnostic is recorded. The owning model keeps\n * whatever semantics it declares, because fast behavior comes only from `fastRoute`, never from the\n * `-fast` suffix. For the same reason a base model whose ID already ends in `-fast` is never used to\n * derive a `-fast-fast` variant: that is not a canonical ID this scheme defines.\n *\n * A derived entry is a real catalog model, so a `modelOverrides` entry keyed on its exact `-fast` ID\n * applies to it after derivation. Without that pass the derived entry would inherit the *base* model's\n * overrides and its own would be silently inert.\n *\n * No variant is derived for an API whose transport a registered extension owns, because Atomic cannot\n * enforce the route through a transport it does not serialize.\n */\nexport function deriveFastModelVariants(\n\tproviderId: string,\n\tmodels: readonly Model<Api>[],\n\toptions: DeriveFastModelVariantsOptions = {},\n): FastModelVariantDerivation {\n\tconst ownedModelIds = new Set(models.map((model) => model.id));\n\tconst entitledCopilotFastModelIds = new Set(options.copilotFastModelIds ?? []);\n\tconst derived: Model<Api>[] = [];\n\tconst diagnostics: FastModelVariantDiagnostic[] = [];\n\tlet changed = false;\n\tfor (const model of models) {\n\t\tderived.push(model);\n\t\tif (\n\t\t\tmodel.fastRoute !== undefined ||\n\t\t\tmodel.id.endsWith(FAST_MODEL_ID_SUFFIX) ||\n\t\t\tmodel.id.endsWith(ULTRAFAST_MODEL_ID_SUFFIX)\n\t\t)\n\t\t\tcontinue;\n\t\tif (options.customModelIds?.has(model.id)) continue;\n\t\t// An extension that supplies this API's stream function owns its serialization, so Atomic cannot\n\t\t// guarantee the route reaches the wire. Publishing a `-fast` choice it may not honor is the same\n\t\t// hazard as publishing one for an adapter that cannot carry the tier.\n\t\tif (options.extensionOwnedApis?.has(model.api) === true) continue;\n\t\tconst fastRoute = fastRouteForBaseModel(model, entitledCopilotFastModelIds);\n\t\tconst routes: Array<{ suffix: string; label: string; route: ModelFastRoute }> = [];\n\t\tif (fastRoute) routes.push({ suffix: FAST_MODEL_ID_SUFFIX, label: \"fast\", route: fastRoute });\n\t\tif (usesOpenAIFastServiceTier(model) && getServiceTierCost(model, ULTRAFAST_MODEL_SERVICE_TIER)) {\n\t\t\troutes.push({\n\t\t\t\tsuffix: ULTRAFAST_MODEL_ID_SUFFIX,\n\t\t\t\tlabel: \"ultrafast\",\n\t\t\t\troute: { baseModelId: model.id, upstreamModelId: model.id, serviceTier: ULTRAFAST_MODEL_SERVICE_TIER },\n\t\t\t});\n\t\t}\n\t\tfor (const { suffix, label, route } of routes) {\n\t\t\tconst variantId = `${model.id}${suffix}`;\n\t\t\tif (ownedModelIds.has(variantId)) {\n\t\t\t\tdiagnostics.push({\n\t\t\t\t\tprovider: providerId,\n\t\t\t\t\tmodelId: variantId,\n\t\t\t\t\tmessage:\n\t\t\t\t\t\t`Model \"${providerId}/${variantId}\" is already defined by the provider, models.json, or an extension, ` +\n\t\t\t\t\t\t`so Atomic did not derive a ${label} variant of \"${providerId}/${model.id}\". ` +\n\t\t\t\t\t\t`That model routes exactly as declared. Rename or remove it to get the derived ${label} variant instead.`,\n\t\t\t\t});\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tconst override = options.modelOverrides?.[variantId];\n\t\t\tconst variant: Model<Api> = { ...model, id: variantId, name: `${model.name} (${label})`, fastRoute: route };\n\t\t\tderived.push(override ? applyModelOverride(variant, override) : variant);\n\t\t\tchanged = true;\n\t\t}\n\t}\n\tif (!changed && diagnostics.length === 0) return { models, diagnostics };\n\treturn { models: derived, diagnostics };\n}\n\n/**\n * Overlay derived fast model variants onto a composed provider. Apply this after built-in,\n * `models.json`, extension, and `modelOverrides` composition so exact user-owned `-fast` IDs are\n * already present and win the collision.\n */\nexport function withFastModelVariants(provider: Provider, options: FastModelVariantsOptions = {}): Provider {\n\treturn {\n\t\t...provider,\n\t\tgetModels: () => {\n\t\t\tconst { models, diagnostics } = deriveFastModelVariants(provider.id, provider.getModels(), {\n\t\t\t\tcopilotFastModelIds: isGitHubCopilotModel({ provider: provider.id })\n\t\t\t\t\t? options.getCopilotFastModelIds?.()\n\t\t\t\t\t: undefined,\n\t\t\t\tmodelOverrides: options.getModelOverrides?.(),\n\t\t\t\textensionOwnedApis: options.getExtensionOwnedApis?.(),\n\t\t\t\tcustomModelIds: options.getCustomModelIds?.(),\n\t\t\t});\n\t\t\toptions.onDiagnostics?.(provider.id, diagnostics);\n\t\t\treturn models;\n\t\t},\n\t};\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-resolver-defaults.d.ts","sourceRoot":"","sources":["../../src/core/model-resolver-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAExD,gDAAgD;AAChD,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"model-resolver-defaults.d.ts","sourceRoot":"","sources":["../../src/core/model-resolver-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAExD,gDAAgD;AAChD,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA4C1D,CAAC;AAEF,wBAAgB,2BAA2B,CAAC,eAAe,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS,CASjG"}
|
|
@@ -2,7 +2,9 @@
|
|
|
2
2
|
export const defaultModelPerProvider = {
|
|
3
3
|
"amazon-bedrock": "us.anthropic.claude-opus-4-6-v1",
|
|
4
4
|
anthropic: "claude-opus-4-8",
|
|
5
|
+
"anthropic-api": "claude-opus-4-8",
|
|
5
6
|
openai: "gpt-5.5",
|
|
7
|
+
"openai-api": "gpt-5.5",
|
|
6
8
|
azure: "gpt-5.4",
|
|
7
9
|
"openai-codex": "gpt-6.1-sol",
|
|
8
10
|
radius: "balanced",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-resolver-defaults.js","sourceRoot":"","sources":["../../src/core/model-resolver-defaults.ts"],"names":[],"mappings":"AAEA,gDAAgD;AAChD,MAAM,CAAC,MAAM,uBAAuB,GAA2B;IAC9D,gBAAgB,EAAE,iCAAiC;IACnD,SAAS,EAAE,iBAAiB;IAC5B,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;IAChB,cAAc,EAAE,aAAa;IAC7B,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,mCAAmC;IAC3C,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,wBAAwB;IAChC,eAAe,EAAE,wBAAwB;IACzC,gBAAgB,EAAE,SAAS;IAC3B,UAAU,EAAE,sBAAsB;IAClC,mBAAmB,EAAE,aAAa;IAClC,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,qBAAqB;IAC3B,QAAQ,EAAE,cAAc;IACxB,UAAU,EAAE,aAAa;IACzB,GAAG,EAAE,SAAS;IACd,eAAe,EAAE,SAAS;IAC1B,OAAO,EAAE,wBAAwB;IACjC,OAAO,EAAE,cAAc;IACvB,YAAY,EAAE,cAAc;IAC5B,UAAU,EAAE,WAAW;IACvB,eAAe,EAAE,WAAW;IAC5B,WAAW,EAAE,sBAAsB;IACnC,SAAS,EAAE,mCAAmC;IAC9C,QAAQ,EAAE,oBAAoB;IAC9B,OAAO,EAAE,iBAAiB;IAC1B,QAAQ,EAAE,WAAW;IACrB,aAAa,EAAE,SAAS;IACxB,aAAa,EAAE,iBAAiB;IAChC,IAAI,EAAE,gBAAgB;IACtB,uBAAuB,EAAE,0BAA0B;IACnD,uBAAuB,EAAE,qCAAqC;IAC9D,iBAAiB,EAAE,aAAa;IAChC,oBAAoB,EAAE,aAAa;IACnC,4BAA4B,EAAE,aAAa;IAC3C,MAAM,EAAE,eAAe;IACvB,sBAAsB,EAAE,eAAe;IACvC,uBAAuB,EAAE,eAAe;IACxC,uBAAuB,EAAE,eAAe;CACxC,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,eAA6B;IACxE,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC7E,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QACzF,IAAI,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC","sourcesContent":["import type { Api, Model } from \"@bastani/pi-ai/compat\";\n\n/** Default model IDs for each known provider */\nexport const defaultModelPerProvider: Record<string, string> = {\n\t\"amazon-bedrock\": \"us.anthropic.claude-opus-4-6-v1\",\n\tanthropic: \"claude-opus-4-8\",\n\topenai: \"gpt-5.5\",\n\tazure: \"gpt-5.4\",\n\t\"openai-codex\": \"gpt-6.1-sol\",\n\tradius: \"balanced\",\n\tnvidia: \"nvidia/nemotron-3-ultra-550b-a55b\",\n\tdeepseek: \"deepseek-v4-pro\",\n\tgoogle: \"gemini-3.1-pro-preview\",\n\t\"google-vertex\": \"gemini-3.1-pro-preview\",\n\t\"github-copilot\": \"gpt-5.4\",\n\topenrouter: \"moonshotai/kimi-k2.6\",\n\t\"vercel-ai-gateway\": \"zai/glm-5.1\",\n\txai: \"grok-4.7\",\n\tgroq: \"openai/gpt-oss-120b\",\n\tcerebras: \"gpt-oss-120b\",\n\t\"ant-ling\": \"Ring-2.6-1T\",\n\tzai: \"glm-5.3\",\n\t\"zai-coding-cn\": \"glm-5.3\",\n\tmistral: \"devstral-medium-latest\",\n\tminimax: \"MiniMax-M2.7\",\n\t\"minimax-cn\": \"MiniMax-M2.7\",\n\tmoonshotai: \"kimi-k2.6\",\n\t\"moonshotai-cn\": \"kimi-k2.6\",\n\thuggingface: \"moonshotai/Kimi-K2.6\",\n\tfireworks: \"accounts/fireworks/models/kimi-k3\",\n\ttogether: \"moonshotai/Kimi-K3\",\n\tbaseten: \"zai-org/GLM-5.3\",\n\topencode: \"kimi-k2.6\",\n\t\"opencode-go\": \"kimi-k3\",\n\t\"kimi-coding\": \"kimi-for-coding\",\n\tmeta: \"muse-spark-1.3\",\n\t\"cloudflare-workers-ai\": \"@cf/moonshotai/kimi-k2.6\",\n\t\"cloudflare-ai-gateway\": \"workers-ai/@cf/moonshotai/kimi-k2.6\",\n\t\"qwen-token-plan\": \"qwen3.7-max\",\n\t\"qwen-token-plan-cn\": \"qwen3.7-max\",\n\t\"qwen-token-plan-individual\": \"qwen3.8-max\",\n\txiaomi: \"mimo-v2.5-pro\",\n\t\"xiaomi-token-plan-cn\": \"mimo-v2.5-pro\",\n\t\"xiaomi-token-plan-ams\": \"mimo-v2.5-pro\",\n\t\"xiaomi-token-plan-sgp\": \"mimo-v2.5-pro\",\n};\n\nexport function findPreferredAvailableModel(availableModels: Model<Api>[]): Model<Api> | undefined {\n\tfor (const [provider, defaultId] of Object.entries(defaultModelPerProvider)) {\n\t\tconst match = availableModels.find((m) => m.provider === provider && m.id === defaultId);\n\t\tif (match) {\n\t\t\treturn match;\n\t\t}\n\t}\n\n\treturn availableModels[0];\n}\n"]}
|
|
1
|
+
{"version":3,"file":"model-resolver-defaults.js","sourceRoot":"","sources":["../../src/core/model-resolver-defaults.ts"],"names":[],"mappings":"AAEA,gDAAgD;AAChD,MAAM,CAAC,MAAM,uBAAuB,GAA2B;IAC9D,gBAAgB,EAAE,iCAAiC;IACnD,SAAS,EAAE,iBAAiB;IAC5B,eAAe,EAAE,iBAAiB;IAClC,MAAM,EAAE,SAAS;IACjB,YAAY,EAAE,SAAS;IACvB,KAAK,EAAE,SAAS;IAChB,cAAc,EAAE,aAAa;IAC7B,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,mCAAmC;IAC3C,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE,wBAAwB;IAChC,eAAe,EAAE,wBAAwB;IACzC,gBAAgB,EAAE,SAAS;IAC3B,UAAU,EAAE,sBAAsB;IAClC,mBAAmB,EAAE,aAAa;IAClC,GAAG,EAAE,UAAU;IACf,IAAI,EAAE,qBAAqB;IAC3B,QAAQ,EAAE,cAAc;IACxB,UAAU,EAAE,aAAa;IACzB,GAAG,EAAE,SAAS;IACd,eAAe,EAAE,SAAS;IAC1B,OAAO,EAAE,wBAAwB;IACjC,OAAO,EAAE,cAAc;IACvB,YAAY,EAAE,cAAc;IAC5B,UAAU,EAAE,WAAW;IACvB,eAAe,EAAE,WAAW;IAC5B,WAAW,EAAE,sBAAsB;IACnC,SAAS,EAAE,mCAAmC;IAC9C,QAAQ,EAAE,oBAAoB;IAC9B,OAAO,EAAE,iBAAiB;IAC1B,QAAQ,EAAE,WAAW;IACrB,aAAa,EAAE,SAAS;IACxB,aAAa,EAAE,iBAAiB;IAChC,IAAI,EAAE,gBAAgB;IACtB,uBAAuB,EAAE,0BAA0B;IACnD,uBAAuB,EAAE,qCAAqC;IAC9D,iBAAiB,EAAE,aAAa;IAChC,oBAAoB,EAAE,aAAa;IACnC,4BAA4B,EAAE,aAAa;IAC3C,MAAM,EAAE,eAAe;IACvB,sBAAsB,EAAE,eAAe;IACvC,uBAAuB,EAAE,eAAe;IACxC,uBAAuB,EAAE,eAAe;CACxC,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,eAA6B;IACxE,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC;QAC7E,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QACzF,IAAI,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IAED,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC;AAC3B,CAAC","sourcesContent":["import type { Api, Model } from \"@bastani/pi-ai/compat\";\n\n/** Default model IDs for each known provider */\nexport const defaultModelPerProvider: Record<string, string> = {\n\t\"amazon-bedrock\": \"us.anthropic.claude-opus-4-6-v1\",\n\tanthropic: \"claude-opus-4-8\",\n\t\"anthropic-api\": \"claude-opus-4-8\",\n\topenai: \"gpt-5.5\",\n\t\"openai-api\": \"gpt-5.5\",\n\tazure: \"gpt-5.4\",\n\t\"openai-codex\": \"gpt-6.1-sol\",\n\tradius: \"balanced\",\n\tnvidia: \"nvidia/nemotron-3-ultra-550b-a55b\",\n\tdeepseek: \"deepseek-v4-pro\",\n\tgoogle: \"gemini-3.1-pro-preview\",\n\t\"google-vertex\": \"gemini-3.1-pro-preview\",\n\t\"github-copilot\": \"gpt-5.4\",\n\topenrouter: \"moonshotai/kimi-k2.6\",\n\t\"vercel-ai-gateway\": \"zai/glm-5.1\",\n\txai: \"grok-4.7\",\n\tgroq: \"openai/gpt-oss-120b\",\n\tcerebras: \"gpt-oss-120b\",\n\t\"ant-ling\": \"Ring-2.6-1T\",\n\tzai: \"glm-5.3\",\n\t\"zai-coding-cn\": \"glm-5.3\",\n\tmistral: \"devstral-medium-latest\",\n\tminimax: \"MiniMax-M2.7\",\n\t\"minimax-cn\": \"MiniMax-M2.7\",\n\tmoonshotai: \"kimi-k2.6\",\n\t\"moonshotai-cn\": \"kimi-k2.6\",\n\thuggingface: \"moonshotai/Kimi-K2.6\",\n\tfireworks: \"accounts/fireworks/models/kimi-k3\",\n\ttogether: \"moonshotai/Kimi-K3\",\n\tbaseten: \"zai-org/GLM-5.3\",\n\topencode: \"kimi-k2.6\",\n\t\"opencode-go\": \"kimi-k3\",\n\t\"kimi-coding\": \"kimi-for-coding\",\n\tmeta: \"muse-spark-1.3\",\n\t\"cloudflare-workers-ai\": \"@cf/moonshotai/kimi-k2.6\",\n\t\"cloudflare-ai-gateway\": \"workers-ai/@cf/moonshotai/kimi-k2.6\",\n\t\"qwen-token-plan\": \"qwen3.7-max\",\n\t\"qwen-token-plan-cn\": \"qwen3.7-max\",\n\t\"qwen-token-plan-individual\": \"qwen3.8-max\",\n\txiaomi: \"mimo-v2.5-pro\",\n\t\"xiaomi-token-plan-cn\": \"mimo-v2.5-pro\",\n\t\"xiaomi-token-plan-ams\": \"mimo-v2.5-pro\",\n\t\"xiaomi-token-plan-sgp\": \"mimo-v2.5-pro\",\n};\n\nexport function findPreferredAvailableModel(availableModels: Model<Api>[]): Model<Api> | undefined {\n\tfor (const [provider, defaultId] of Object.entries(defaultModelPerProvider)) {\n\t\tconst match = availableModels.find((m) => m.provider === provider && m.id === defaultId);\n\t\tif (match) {\n\t\t\treturn match;\n\t\t}\n\t}\n\n\treturn availableModels[0];\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nested-tool-calls.d.ts","sourceRoot":"","sources":["../../src/core/nested-tool-calls.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,oBAAoB,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC/F,OAAO,KAAK,EACX,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,uBAAuB,EACvB,MAAM,+BAA+B,CAAC;AAGvC,eAAO,MAAM,kBAAkB;aAC9B,QAAQ,EAAE,GAAG;aACb,uBAAuB;aACvB,qBAAqB;aACrB,aAAa,EAAE,GAAG;CACT,CAAC;AAEX,MAAM,WAAW,iBAAiB;IACjC,KAAK,EAAE,eAAe,GAAG,SAAS,CAAC;IACnC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;CACzB;AAED,wEAAwE;AACxE,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,KAAK,CAA8B;IAC3C,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,KAAK,CAAoB;IACjC,KAAK,CAAC,QAAQ,EAAE,aAAa,GAAG,oBAAoB,GAAG,SAAS,CAqB/D;IACD,MAAM,CAAC,MAAM,EAAE,oBAAoB,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAM1F;IACD,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAE3B;IACD,IAAI,UAAU,IAAI,KAAK,GAAG,SAAS,CAElC;IACD,QAAQ,IAAI,eAAe,GAAG,SAAS,CAItC;CACD;AAED,MAAM,WAAW,qBAAqB;IACrC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,uBAAuB,CAAC;CACnC;AACD,MAAM,MAAM,wBAAwB,GACjC;IAAE,IAAI,EAAE,sBAAsB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,GAC/G;IACA,IAAI,EAAE,uBAAuB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACxC,gBAAgB,EAAE,MAAM,CAAC;CACxB,GACD;IACA,IAAI,EAAE,oBAAoB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;CACxB,CAAC;AACL,MAAM,WAAW,kBAAkB;IAClC,WAAW,CACV,QAAQ,EAAE,aAAa,EACvB,gBAAgB,EAAE,MAAM,EACxB,MAAM,EAAE,WAAW,GAAG,SAAS,EAC/B,QAAQ,EAAE,CAAC,aAAa,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAClE,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrD;AAYD,oGAAoG;AACpG,qBAAa,oBAAoB;IAChC,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,IAAI,CAAqB;IACjC,YAAY,IAAI,EAAE,kBAAkB,EAEnC;IACK,OAAO,CACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,qBAA0B,GACjC,OAAO,CAAC,oBAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"nested-tool-calls.d.ts","sourceRoot":"","sources":["../../src/core/nested-tool-calls.ts"],"names":[],"mappings":"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"}
|
|
@@ -116,6 +116,7 @@ export class NestedToolCallRunner {
|
|
|
116
116
|
toolName: name,
|
|
117
117
|
result: outcome.result,
|
|
118
118
|
isError: outcome.isError,
|
|
119
|
+
...(outcome.durationMs === undefined ? {} : { durationMs: outcome.durationMs }),
|
|
119
120
|
parentToolCallId: callerId,
|
|
120
121
|
});
|
|
121
122
|
return outcome;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nested-tool-calls.js","sourceRoot":"","sources":["../../src/core/nested-tool-calls.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsonObject, NestedToolCallRecord, NestedToolCalls, Usage } from \"@bastani/pi-ai\";\nimport type {\n\tAgentToolCall,\n\tAgentToolCallOutcome,\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n} from \"@earendil-works/pi-agent-core\";\nimport { combineUsage } from \"./usage-totals.ts\";\n\nexport const NESTED_CALL_LIMITS = {\n\tmaxCalls: 256,\n\tmaxArgumentBytesPerCall: 8 * 1024,\n\tmaxArgumentBytesTotal: 32 * 1024,\n\tmaxErrorChars: 500,\n} as const;\nconst encoder = new TextEncoder();\nexport interface NestedCallSummary {\n\tcalls: NestedToolCalls | undefined;\n\tusage: Usage | undefined;\n}\n\n/** Bounded session record. Tool output is deliberately not retained. */\nexport class NestedCallRecorder {\n\tprivate calls: NestedToolCallRecord[] = [];\n\tprivate startedAt = new Map<NestedToolCallRecord, number>();\n\tprivate complete = true;\n\tprivate argumentBytes = 0;\n\tprivate usage: Usage | undefined;\n\tstart(toolCall: AgentToolCall): NestedToolCallRecord | undefined {\n\t\tif (this.calls.length >= NESTED_CALL_LIMITS.maxCalls) {\n\t\t\tthis.complete = false;\n\t\t\treturn undefined;\n\t\t}\n\t\tconst record: NestedToolCallRecord = { id: toolCall.id, name: toolCall.name, status: \"unfinished\" };\n\t\tconst json = JSON.stringify(toolCall.arguments ?? {});\n\t\tconst bytes = encoder.encode(json).length;\n\t\tif (\n\t\t\tbytes > NESTED_CALL_LIMITS.maxArgumentBytesPerCall ||\n\t\t\tthis.argumentBytes + bytes > NESTED_CALL_LIMITS.maxArgumentBytesTotal\n\t\t) {\n\t\t\trecord.argumentsBytes = bytes;\n\t\t\tthis.complete = false;\n\t\t} else {\n\t\t\trecord.arguments = JSON.parse(json) as JsonObject;\n\t\t\tthis.argumentBytes += bytes;\n\t\t}\n\t\tthis.calls.push(record);\n\t\tthis.startedAt.set(record, performance.now());\n\t\treturn record;\n\t}\n\tfinish(record: NestedToolCallRecord | undefined, isError: boolean, errorText: string): void {\n\t\tif (!record) return;\n\t\trecord.status = isError ? \"error\" : \"ok\";\n\t\trecord.durationMs = Math.round(performance.now() - (this.startedAt.get(record) ?? performance.now()));\n\t\tthis.startedAt.delete(record);\n\t\tif (isError && errorText) record.error = errorText.slice(0, NESTED_CALL_LIMITS.maxErrorChars);\n\t}\n\taddUsage(usage: Usage): void {\n\t\tthis.usage = this.usage ? combineUsage(this.usage, usage) : usage;\n\t}\n\tget totalUsage(): Usage | undefined {\n\t\treturn this.usage;\n\t}\n\tsnapshot(): NestedToolCalls | undefined {\n\t\tif (this.calls.length === 0 && this.complete) return undefined;\n\t\tconst calls = this.calls.map((call) => ({ ...call }));\n\t\treturn { calls, complete: this.complete && calls.every((call) => call.status !== \"unfinished\") };\n\t}\n}\n\nexport interface NestedToolCallOptions {\n\tsignal?: AbortSignal;\n\tonUpdate?: AgentToolUpdateCallback;\n}\nexport type NestedToolExecutionEvent =\n\t| { type: \"tool_execution_start\"; toolCallId: string; toolName: string; args: unknown; parentToolCallId: string }\n\t| {\n\t\t\ttype: \"tool_execution_update\";\n\t\t\ttoolCallId: string;\n\t\t\ttoolName: string;\n\t\t\targs: unknown;\n\t\t\tpartialResult: AgentToolResult<unknown>;\n\t\t\tparentToolCallId: string;\n\t }\n\t| {\n\t\t\ttype: \"tool_execution_end\";\n\t\t\ttoolCallId: string;\n\t\t\ttoolName: string;\n\t\t\tresult: AgentToolResult<unknown>;\n\t\t\tisError: boolean;\n\t\t\tparentToolCallId: string;\n\t };\nexport interface NestedToolCallHost {\n\trunToolCall(\n\t\ttoolCall: AgentToolCall,\n\t\tparentToolCallId: string,\n\t\tsignal: AbortSignal | undefined,\n\t\tonUpdate: (partialResult: AgentToolResult<unknown>) => Promise<void>,\n\t): Promise<AgentToolCallOutcome>;\n\temit(event: NestedToolExecutionEvent): Promise<void>;\n}\ninterface CallScope {\n\trecorder: NestedCallRecorder;\n\tnextId: number;\n}\nfunction textOf(result: AgentToolResult<unknown>): string {\n\treturn result.content\n\t\t.filter((block) => block.type === \"text\")\n\t\t.map((block) => block.text)\n\t\t.join(\"\\n\");\n}\n\n/** Nested execution retains Atomic's session scheduler rather than maintaining a competing lock. */\nexport class NestedToolCallRunner {\n\tprivate scopes = new Map<string, CallScope>();\n\tprivate host: NestedToolCallHost;\n\tconstructor(host: NestedToolCallHost) {\n\t\tthis.host = host;\n\t}\n\tasync execute(\n\t\tcallerId: string,\n\t\tname: string,\n\t\targs: unknown,\n\t\toptions: NestedToolCallOptions = {},\n\t): Promise<AgentToolCallOutcome> {\n\t\tlet scope = this.scopes.get(callerId);\n\t\tif (!scope) {\n\t\t\tscope = { recorder: new NestedCallRecorder(), nextId: 1 };\n\t\t\tthis.scopes.set(callerId, scope);\n\t\t}\n\t\tconst toolCall: AgentToolCall = {\n\t\t\ttype: \"toolCall\",\n\t\t\tid: `${callerId}/${scope.nextId++}`,\n\t\t\tname,\n\t\t\targuments: (args ?? {}) as AgentToolCall[\"arguments\"],\n\t\t};\n\t\tconst record = scope.recorder.start(toolCall);\n\t\tawait this.host.emit({\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: name,\n\t\t\targs: toolCall.arguments,\n\t\t\tparentToolCallId: callerId,\n\t\t});\n\t\tthis.scopes.set(toolCall.id, { recorder: scope.recorder, nextId: 1 });\n\t\tlet outcome: AgentToolCallOutcome;\n\t\ttry {\n\t\t\toutcome = await this.host.runToolCall(toolCall, callerId, options.signal, async (partialResult) => {\n\t\t\t\toptions.onUpdate?.(partialResult);\n\t\t\t\tawait this.host.emit({\n\t\t\t\t\ttype: \"tool_execution_update\",\n\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\ttoolName: name,\n\t\t\t\t\targs: toolCall.arguments,\n\t\t\t\t\tpartialResult,\n\t\t\t\t\tparentToolCallId: callerId,\n\t\t\t\t});\n\t\t\t});\n\t\t} finally {\n\t\t\tthis.scopes.delete(toolCall.id);\n\t\t}\n\t\tscope.recorder.finish(record, outcome.isError, textOf(outcome.result));\n\t\tif (outcome.result.usage) scope.recorder.addUsage(outcome.result.usage);\n\t\tawait this.host.emit({\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: name,\n\t\t\tresult: outcome.result,\n\t\t\tisError: outcome.isError,\n\t\t\tparentToolCallId: callerId,\n\t\t});\n\t\treturn outcome;\n\t}\n\ttakeRecord(toolCallId: string): NestedCallSummary | undefined {\n\t\tconst scope = this.scopes.get(toolCallId);\n\t\tthis.scopes.delete(toolCallId);\n\t\treturn scope ? { calls: scope.recorder.snapshot(), usage: scope.recorder.totalUsage } : undefined;\n\t}\n\tclear(): void {\n\t\tthis.scopes.clear();\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"nested-tool-calls.js","sourceRoot":"","sources":["../../src/core/nested-tool-calls.ts"],"names":[],"mappings":"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","sourcesContent":["import type { JsonObject, NestedToolCallRecord, NestedToolCalls, Usage } from \"@bastani/pi-ai\";\nimport type {\n\tAgentToolCall,\n\tAgentToolCallOutcome,\n\tAgentToolResult,\n\tAgentToolUpdateCallback,\n} from \"@earendil-works/pi-agent-core\";\nimport { combineUsage } from \"./usage-totals.ts\";\n\nexport const NESTED_CALL_LIMITS = {\n\tmaxCalls: 256,\n\tmaxArgumentBytesPerCall: 8 * 1024,\n\tmaxArgumentBytesTotal: 32 * 1024,\n\tmaxErrorChars: 500,\n} as const;\nconst encoder = new TextEncoder();\nexport interface NestedCallSummary {\n\tcalls: NestedToolCalls | undefined;\n\tusage: Usage | undefined;\n}\n\n/** Bounded session record. Tool output is deliberately not retained. */\nexport class NestedCallRecorder {\n\tprivate calls: NestedToolCallRecord[] = [];\n\tprivate startedAt = new Map<NestedToolCallRecord, number>();\n\tprivate complete = true;\n\tprivate argumentBytes = 0;\n\tprivate usage: Usage | undefined;\n\tstart(toolCall: AgentToolCall): NestedToolCallRecord | undefined {\n\t\tif (this.calls.length >= NESTED_CALL_LIMITS.maxCalls) {\n\t\t\tthis.complete = false;\n\t\t\treturn undefined;\n\t\t}\n\t\tconst record: NestedToolCallRecord = { id: toolCall.id, name: toolCall.name, status: \"unfinished\" };\n\t\tconst json = JSON.stringify(toolCall.arguments ?? {});\n\t\tconst bytes = encoder.encode(json).length;\n\t\tif (\n\t\t\tbytes > NESTED_CALL_LIMITS.maxArgumentBytesPerCall ||\n\t\t\tthis.argumentBytes + bytes > NESTED_CALL_LIMITS.maxArgumentBytesTotal\n\t\t) {\n\t\t\trecord.argumentsBytes = bytes;\n\t\t\tthis.complete = false;\n\t\t} else {\n\t\t\trecord.arguments = JSON.parse(json) as JsonObject;\n\t\t\tthis.argumentBytes += bytes;\n\t\t}\n\t\tthis.calls.push(record);\n\t\tthis.startedAt.set(record, performance.now());\n\t\treturn record;\n\t}\n\tfinish(record: NestedToolCallRecord | undefined, isError: boolean, errorText: string): void {\n\t\tif (!record) return;\n\t\trecord.status = isError ? \"error\" : \"ok\";\n\t\trecord.durationMs = Math.round(performance.now() - (this.startedAt.get(record) ?? performance.now()));\n\t\tthis.startedAt.delete(record);\n\t\tif (isError && errorText) record.error = errorText.slice(0, NESTED_CALL_LIMITS.maxErrorChars);\n\t}\n\taddUsage(usage: Usage): void {\n\t\tthis.usage = this.usage ? combineUsage(this.usage, usage) : usage;\n\t}\n\tget totalUsage(): Usage | undefined {\n\t\treturn this.usage;\n\t}\n\tsnapshot(): NestedToolCalls | undefined {\n\t\tif (this.calls.length === 0 && this.complete) return undefined;\n\t\tconst calls = this.calls.map((call) => ({ ...call }));\n\t\treturn { calls, complete: this.complete && calls.every((call) => call.status !== \"unfinished\") };\n\t}\n}\n\nexport interface NestedToolCallOptions {\n\tsignal?: AbortSignal;\n\tonUpdate?: AgentToolUpdateCallback;\n}\nexport type NestedToolExecutionEvent =\n\t| { type: \"tool_execution_start\"; toolCallId: string; toolName: string; args: unknown; parentToolCallId: string }\n\t| {\n\t\t\ttype: \"tool_execution_update\";\n\t\t\ttoolCallId: string;\n\t\t\ttoolName: string;\n\t\t\targs: unknown;\n\t\t\tpartialResult: AgentToolResult<unknown>;\n\t\t\tparentToolCallId: string;\n\t }\n\t| {\n\t\t\ttype: \"tool_execution_end\";\n\t\t\ttoolCallId: string;\n\t\t\ttoolName: string;\n\t\t\tresult: AgentToolResult<unknown>;\n\t\t\tisError: boolean;\n\t\t\tdurationMs?: number;\n\t\t\tparentToolCallId: string;\n\t };\nexport interface NestedToolCallHost {\n\trunToolCall(\n\t\ttoolCall: AgentToolCall,\n\t\tparentToolCallId: string,\n\t\tsignal: AbortSignal | undefined,\n\t\tonUpdate: (partialResult: AgentToolResult<unknown>) => Promise<void>,\n\t): Promise<AgentToolCallOutcome>;\n\temit(event: NestedToolExecutionEvent): Promise<void>;\n}\ninterface CallScope {\n\trecorder: NestedCallRecorder;\n\tnextId: number;\n}\nfunction textOf(result: AgentToolResult<unknown>): string {\n\treturn result.content\n\t\t.filter((block) => block.type === \"text\")\n\t\t.map((block) => block.text)\n\t\t.join(\"\\n\");\n}\n\n/** Nested execution retains Atomic's session scheduler rather than maintaining a competing lock. */\nexport class NestedToolCallRunner {\n\tprivate scopes = new Map<string, CallScope>();\n\tprivate host: NestedToolCallHost;\n\tconstructor(host: NestedToolCallHost) {\n\t\tthis.host = host;\n\t}\n\tasync execute(\n\t\tcallerId: string,\n\t\tname: string,\n\t\targs: unknown,\n\t\toptions: NestedToolCallOptions = {},\n\t): Promise<AgentToolCallOutcome> {\n\t\tlet scope = this.scopes.get(callerId);\n\t\tif (!scope) {\n\t\t\tscope = { recorder: new NestedCallRecorder(), nextId: 1 };\n\t\t\tthis.scopes.set(callerId, scope);\n\t\t}\n\t\tconst toolCall: AgentToolCall = {\n\t\t\ttype: \"toolCall\",\n\t\t\tid: `${callerId}/${scope.nextId++}`,\n\t\t\tname,\n\t\t\targuments: (args ?? {}) as AgentToolCall[\"arguments\"],\n\t\t};\n\t\tconst record = scope.recorder.start(toolCall);\n\t\tawait this.host.emit({\n\t\t\ttype: \"tool_execution_start\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: name,\n\t\t\targs: toolCall.arguments,\n\t\t\tparentToolCallId: callerId,\n\t\t});\n\t\tthis.scopes.set(toolCall.id, { recorder: scope.recorder, nextId: 1 });\n\t\tlet outcome: AgentToolCallOutcome;\n\t\ttry {\n\t\t\toutcome = await this.host.runToolCall(toolCall, callerId, options.signal, async (partialResult) => {\n\t\t\t\toptions.onUpdate?.(partialResult);\n\t\t\t\tawait this.host.emit({\n\t\t\t\t\ttype: \"tool_execution_update\",\n\t\t\t\t\ttoolCallId: toolCall.id,\n\t\t\t\t\ttoolName: name,\n\t\t\t\t\targs: toolCall.arguments,\n\t\t\t\t\tpartialResult,\n\t\t\t\t\tparentToolCallId: callerId,\n\t\t\t\t});\n\t\t\t});\n\t\t} finally {\n\t\t\tthis.scopes.delete(toolCall.id);\n\t\t}\n\t\tscope.recorder.finish(record, outcome.isError, textOf(outcome.result));\n\t\tif (outcome.result.usage) scope.recorder.addUsage(outcome.result.usage);\n\t\tawait this.host.emit({\n\t\t\ttype: \"tool_execution_end\",\n\t\t\ttoolCallId: toolCall.id,\n\t\t\ttoolName: name,\n\t\t\tresult: outcome.result,\n\t\t\tisError: outcome.isError,\n\t\t\t...(outcome.durationMs === undefined ? {} : { durationMs: outcome.durationMs }),\n\t\t\tparentToolCallId: callerId,\n\t\t});\n\t\treturn outcome;\n\t}\n\ttakeRecord(toolCallId: string): NestedCallSummary | undefined {\n\t\tconst scope = this.scopes.get(toolCallId);\n\t\tthis.scopes.delete(toolCallId);\n\t\treturn scope ? { calls: scope.recorder.snapshot(), usage: scope.recorder.totalUsage } : undefined;\n\t}\n\tclear(): void {\n\t\tthis.scopes.clear();\n\t}\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-types.js","sourceRoot":"","sources":["../../src/core/settings-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC","sourcesContent":["export const CACHE_WARMING_MODES = [\"off\", \"streaming\", \"idle\"] as const;\nexport type CacheWarmingMode = (typeof CACHE_WARMING_MODES)[number];\n\nimport type { Transport } from \"@bastani/pi-ai/compat\";\nimport type { ScrollViewScrollbar, WheelScrollLines } from \"@earendil-works/pi-tui\";\n\nexport interface CompactionModelOverride {\n\treserveTokens?: number;\n\tpreserve_recent?: number;\n}\n\nexport interface CompactionSettings {\n\tenabled?: boolean; // default: true\n\treserveTokens?: number; // default: 16384\n\tcompression_ratio?: number; // default: 0.5 (fraction of compactable context to keep)\n\tpreserve_recent?: number; // default: 2 (recent context-eligible messages to keep)\n\tquery?: string; // default: auto-detected from session context\n\tmodelOverrides?: Record<string, CompactionModelOverride>; // exact \"provider/modelId\" keys\n}\n\nexport interface BranchSummarySettings {\n\treserveTokens?: number; // default: 16384 (tokens reserved for prompt + LLM response)\n\tskipPrompt?: boolean; // default: false - when true, skips \"Summarize branch?\" prompt and defaults to no summary\n}\n\nexport interface SessionSummarySettings {\n\tenabled?: boolean; // default: true - generate a one-line resume-picker summary once the agent goes idle\n}\n\nexport interface ProviderRetrySettings {\n\ttimeoutMs?: number; // SDK/provider request timeout in milliseconds\n\tmaxRetries?: number; // SDK/provider retry attempts\n\tmaxRetryDelayMs?: number; // default: 60000 (max server-requested delay before failing)\n}\n\nexport interface RetrySettings {\n\tenabled?: boolean; // default: true\n\tmaxRetries?: number; // default: 3\n\tbaseDelayMs?: number; // default: 2000 (exponential backoff: 2s, 4s, 8s)\n\tmaxAgentDelayMs?: number; // default: 60000\n\tprovider?: ProviderRetrySettings;\n}\n\nexport interface TerminalSettings {\n\tshowImages?: boolean; // default: true (only relevant if terminal supports images)\n\timageWidthCells?: number; // default: 60 (preferred inline image width in terminal cells)\n\tclearOnShrink?: boolean; // default: false (clear empty rows when content shrinks)\n\tshowTerminalProgress?: boolean; // default: false (OSC 9;4 terminal progress indicators)\n\thyperlinks?: boolean | \"auto\";\n\timages?: \"kitty\" | \"iterm2\" | \"auto\" | false;\n\ttrueColor?: boolean | \"auto\";\n}\n\nexport interface ImageSettings {\n\tautoResize?: boolean; // default: true (resize images to 2000x2000 max for better model compatibility)\n\tblockImages?: boolean; // default: false - when true, prevents all images from being sent to LLM providers\n}\n\nexport interface SearchSettings {\n\tcontextBefore?: number;\n\tcontextAfter?: number;\n}\nexport interface ThinkingBudgetsSettings {\n\tminimal?: number;\n\tlow?: number;\n\tmedium?: number;\n\thigh?: number;\n}\n\nexport type MermaidRenderingMode = \"off\" | \"final\" | \"streaming\";\n\nexport interface MarkdownSettings {\n\tcodeBlockIndent?: string; // default: \" \"\n\tmermaid?: MermaidRenderingMode; // default: \"streaming\"\n\tlatex?: boolean; // default: true\n}\n\nexport interface WarningSettings {\n\tanthropicExtraUsage?: boolean; // default: true\n}\n\nexport type DefaultProjectTrust = \"ask\" | \"always\" | \"never\";\nexport type QuietStartup = boolean | \"header\";\n\nexport type TransportSetting = Transport;\n\n/** What the terminal keeps when Atomic's fullscreen session exits. */\nexport type FullscreenExitOutput = \"transcript\" | \"resume-hint\";\n\nexport type CodemodeMode = \"on\" | \"only\";\n\n/**\n * Package source for npm/git packages.\n * - String form: load all resources from the package\n * - Object form: filter which resources to load\n * - autoload=false: start empty and apply only explicit resource patterns\n */\nexport type PackageSource =\n\t| string\n\t| {\n\t\t\tsource: string;\n\t\t\tautoload?: boolean;\n\t\t\textensions?: string[];\n\t\t\tskills?: string[];\n\t\t\tprompts?: string[];\n\t\t\tthemes?: string[];\n\t\t\tworkflows?: string[];\n\t\t\tmcpServers?: string[];\n\t };\n\nexport interface BashInterceptorSettings {\n\tenabled?: boolean; // default: false\n}\n\n/** Provider filters for the candidates `model: \"auto\"` may route to. Does not affect `routerModel`. */\nexport interface ModelRoutingSettings {\n\t/** When nonempty, only these provider IDs are routing candidates. */\n\tallowedProviders?: string[];\n\t/** Provider IDs that are never routing candidates; applied after `allowedProviders`. */\n\texcludedProviders?: string[];\n}\n\nexport interface Settings {\n\tlastChangelogVersion?: string;\n\tfirstRunOnboardingStartedVersion?: string;\n\tonboardedVersion?: string;\n\tdefaultProvider?: string;\n\tdefaultModel?: string;\n\trouterModel?: string; // default: \"\"; workflow-stage/subagent auto-model router inference only, never \"auto\"\n\tcompactionModel?: string;\n\tmodelRouting?: ModelRoutingSettings;\n\tdefaultThinkingLevel?: \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n\tmodelThinkingLevels?: Record<string, \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\">;\n\tfallbackModels?: string[]; // Ordered main-chat fallback models, optionally suffixed with :thinkingLevel\n\ttransport?: TransportSetting; // default: \"auto\"\n\tsteeringMode?: \"all\" | \"one-at-a-time\";\n\tfollowUpMode?: \"all\" | \"one-at-a-time\";\n\ttheme?: string;\n\tenableAnalytics?: boolean; // storage only; no analytics transmission is performed\n\ttrackingId?: string; // stable UUID generated on first analytics opt-in\n\tdeviceId?: string; // global installation ID, created only when a login needs it\n\tshowCacheMissNotices?: boolean; // default: false - show cache costs and provider recovery diagnostics\n\tcompaction?: CompactionSettings;\n\tbranchSummary?: BranchSummarySettings;\n\tsessionSummary?: SessionSummarySettings;\n\tretry?: RetrySettings;\n\thideThinkingBlock?: boolean;\n\texternalEditor?: string; // Command for Ctrl+G external editor; takes precedence over VISUAL/EDITOR\n\tshellPath?: string; // Custom shell path (e.g., for Cygwin users on Windows)\n\tquietStartup?: QuietStartup; // default: false; true hides all startup output, \"header\" keeps only the startup header\n\tdefaultProjectTrust?: DefaultProjectTrust; // default: \"ask\"; global setting only\n\tshellCommandPrefix?: string; // Prefix prepended to every bash command (e.g., \"shopt -s expand_aliases\" for alias support)\n\tbashInterceptor?: BashInterceptorSettings; // default: disabled; when enabled, user_bash handlers can intercept bash tool execution\n\tsearch?: SearchSettings; // Context lines for search results; defaults: before=1, after=3\n\tnpmCommand?: string[]; // Command used for npm package lookup/install operations, argv-style (e.g., [\"mise\", \"exec\", \"node@20\", \"--\", \"npm\"])\n\tcollapseChangelog?: boolean; // Show condensed changelog after update (use /changelog for full)\n\tenableInstallTelemetry?: boolean; // default: true - version-adoption ping on first interactive launch with fresh settings or after an update with changelog entries\n\tpackages?: PackageSource[]; // Array of npm/git package sources (string or object with filtering)\n\textensions?: string[]; // Array of local extension file paths or directories\n\tskills?: string[]; // Array of local skill file paths or directories\n\tprompts?: string[]; // Array of local prompt template paths or directories\n\tthemes?: string[]; // Array of local theme file paths or directories\n\tworkflows?:\n\t\t| string[]\n\t\t| {\n\t\t\t\tpaths?: string[];\n\t\t\t\tdurability?: { systemDatabaseUrl?: string; systemDatabaseUrlFile?: string };\n\t\t };\n\tenableSkillCommands?: boolean; // default: true - register skills as /skill:name commands\n\tterminal?: TerminalSettings;\n\therdr?: { enabled?: boolean }; // default: true, only inside an interactive Herdr pane\n\timages?: ImageSettings;\n\tenabledModels?: string[]; // Model patterns for cycling (same format as --models CLI flag)\n\tdefaultTools?: string[]; // Initial tool selection; +name/-name modify inherited selection\n\tdoubleEscapeAction?: \"fork\" | \"tree\" | \"none\"; // Action for double-escape with empty editor (default: \"tree\")\n\ttreeFilterMode?: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\"; // Default filter when opening /tree\n\tthinkingBudgets?: ThinkingBudgetsSettings; // Custom token budgets for thinking levels\n\teditorPaddingX?: number; // Horizontal padding for input editor (default: 0)\n\toutputPad?: 0 | 1; // Horizontal padding for chat message output (default: 1)\n\tautocompleteMaxVisible?: number; // Max visible items in autocomplete dropdown (default: 5)\n\tshowHardwareCursor?: boolean; // Show terminal cursor while still positioning it for IME\n\tfullscreenScrollbar?: ScrollViewScrollbar; // default: \"auto\"\n\tfullscreenExitOutput?: FullscreenExitOutput; // default: \"transcript\"\n\tfullscreenCopyOnSelect?: boolean; // default: true\n\tfullscreenWheelScrollLines?: WheelScrollLines; // default: \"auto\", numeric values 1-100\n\tcodemode?: { mode?: CodemodeMode; inlineBudget?: number };\n\tmarkdown?: MarkdownSettings;\n\twarnings?: WarningSettings;\n\tsessionDir?: string; // Custom session storage directory (same format as --session-dir CLI flag)\n\thttpProxy?: string; // Proxy URL applied as HTTP_PROXY and HTTPS_PROXY; global setting only\n\thttpIdleTimeoutMs?: number | string; // HTTP idle timeout; 0 or \"disabled\" disables it\n\tcacheWarming?: CacheWarmingMode; // Global only; each refresh costs money. Default: streaming.\n\twebsocketConnectTimeoutMs?: number | string; // WebSocket connect timeout; 0 or \"disabled\" disables it\n\tstreamDeadlineMs?: number | string; // Max idle gap between provider stream events; 0 or \"disabled\" disables it\n}\n\nexport type SettingsScope = \"global\" | \"project\";\n\nexport interface SettingsManagerCreateOptions {\n\tprojectTrusted?: boolean;\n}\n\nexport type SettingsFieldOrigin = \"primary\" | \"legacy\";\n\nexport interface SettingsStorage {\n\twithLock(scope: SettingsScope, fn: (current: string | undefined) => string | undefined): void;\n\t/**\n\t * Optional write-specific lock whose callback receives the current primary\n\t * document rather than a layered effective view. Storage implementations\n\t * without a distinct primary document can omit this method; layered storage\n\t * implementations must provide it to keep fallback fields out of the primary\n\t * document.\n\t */\n\twithPrimaryWriteLock?(scope: SettingsScope, fn: (currentPrimary: string | undefined) => string | undefined): void;\n\tgetFieldOrigin?(scope: SettingsScope, field: keyof Settings): SettingsFieldOrigin | undefined;\n}\n\nexport interface SettingsError {\n\tscope: SettingsScope;\n\tpath?: string;\n\terror: Error;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"settings-types.js","sourceRoot":"","sources":["../../src/core/settings-types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,CAAU,CAAC","sourcesContent":["export const CACHE_WARMING_MODES = [\"off\", \"streaming\", \"idle\"] as const;\nexport type CacheWarmingMode = (typeof CACHE_WARMING_MODES)[number];\n\nimport type { Transport } from \"@bastani/pi-ai/compat\";\nimport type { ScrollViewScrollbar, WheelScrollLines } from \"@earendil-works/pi-tui\";\n\nexport interface CompactionModelOverride {\n\treserveTokens?: number;\n\tpreserve_recent?: number;\n}\n\nexport interface CompactionSettings {\n\tenabled?: boolean; // default: true\n\treserveTokens?: number; // default: 16384\n\tcompression_ratio?: number; // default: 0.5 (fraction of compactable context to keep)\n\tpreserve_recent?: number; // default: 2 (recent context-eligible messages to keep)\n\tquery?: string; // default: auto-detected from session context\n\tmodelOverrides?: Record<string, CompactionModelOverride>; // exact \"provider/modelId\" keys\n}\n\nexport interface BranchSummarySettings {\n\treserveTokens?: number; // default: 16384 (tokens reserved for prompt + LLM response)\n\tskipPrompt?: boolean; // default: false - when true, skips \"Summarize branch?\" prompt and defaults to no summary\n}\n\nexport interface SessionSummarySettings {\n\tenabled?: boolean; // default: true - generate a one-line resume-picker summary once the agent goes idle\n}\n\nexport interface ProviderRetrySettings {\n\ttimeoutMs?: number; // SDK/provider request timeout in milliseconds\n\tmaxRetries?: number; // SDK/provider retry attempts\n\tmaxRetryDelayMs?: number; // default: 60000 (max server-requested delay before failing)\n}\n\nexport interface RetrySettings {\n\tenabled?: boolean; // default: true\n\tmaxRetries?: number; // default: 3\n\tbaseDelayMs?: number; // default: 2000 (exponential backoff: 2s, 4s, 8s)\n\tmaxAgentDelayMs?: number; // default: 60000\n\tprovider?: ProviderRetrySettings;\n}\n\nexport interface TerminalSettings {\n\tshowImages?: boolean; // default: true (only relevant if terminal supports images)\n\timageWidthCells?: number; // default: 60 (preferred inline image width in terminal cells)\n\tclearOnShrink?: boolean; // default: false (clear empty rows when content shrinks)\n\tshowTerminalProgress?: boolean; // default: false (OSC 9;4 terminal progress indicators)\n\thyperlinks?: boolean | \"auto\";\n\timages?: \"kitty\" | \"iterm2\" | \"auto\" | false;\n\ttrueColor?: boolean | \"auto\";\n}\n\nexport interface ImageSettings {\n\tautoResize?: boolean; // default: true (resize images to 2000x2000 max for better model compatibility)\n\tblockImages?: boolean; // default: false - when true, prevents all images from being sent to LLM providers\n}\n\nexport interface SearchSettings {\n\tcontextBefore?: number;\n\tcontextAfter?: number;\n}\nexport interface ThinkingBudgetsSettings {\n\tminimal?: number;\n\tlow?: number;\n\tmedium?: number;\n\thigh?: number;\n}\n\nexport type MermaidRenderingMode = \"off\" | \"final\" | \"streaming\";\n\nexport interface MarkdownSettings {\n\tcodeBlockIndent?: string; // default: \" \"\n\tmermaid?: MermaidRenderingMode; // default: \"streaming\"\n\tlatex?: boolean; // default: true\n}\n\nexport interface WarningSettings {\n\tanthropicExtraUsage?: boolean; // default: true\n}\n\nexport type DefaultProjectTrust = \"ask\" | \"always\" | \"never\";\nexport type QuietStartup = boolean | \"header\";\n\nexport type TransportSetting = Transport;\n\n/** What the terminal keeps when Atomic's fullscreen session exits. */\nexport type FullscreenExitOutput = \"transcript\" | \"resume-hint\";\n\nexport type CodemodeMode = \"on\" | \"only\";\n\n/**\n * Package source for npm/git packages.\n * - String form: load all resources from the package\n * - Object form: filter which resources to load\n * - autoload=false: start empty and apply only explicit resource patterns\n */\nexport type PackageSource =\n\t| string\n\t| {\n\t\t\tsource: string;\n\t\t\tautoload?: boolean;\n\t\t\textensions?: string[];\n\t\t\tskills?: string[];\n\t\t\tprompts?: string[];\n\t\t\tthemes?: string[];\n\t\t\tworkflows?: string[];\n\t\t\tmcpServers?: string[];\n\t };\n\nexport interface BashInterceptorSettings {\n\tenabled?: boolean; // default: false\n}\n\n/** Provider filters for the candidates `model: \"auto\"` may route to. Does not affect `routerModel`. */\nexport interface ModelRoutingSettings {\n\t/** When nonempty, only these provider IDs are routing candidates. */\n\tallowedProviders?: string[];\n\t/** Provider IDs that are never routing candidates; applied after `allowedProviders`. */\n\texcludedProviders?: string[];\n}\n\nexport interface Settings {\n\tlastChangelogVersion?: string;\n\tfirstRunOnboardingStartedVersion?: string;\n\tonboardedVersion?: string;\n\tdefaultProvider?: string;\n\tdefaultModel?: string;\n\trouterModel?: string; // default: \"\"; workflow-stage/subagent auto-model router inference only, never \"auto\"\n\tcompactionModel?: string;\n\tmodelRouting?: ModelRoutingSettings;\n\tdefaultThinkingLevel?: \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n\tmodelThinkingLevels?: Record<string, \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\">;\n\tfallbackModels?: string[]; // Ordered main-chat fallback models, optionally suffixed with :thinkingLevel\n\ttransport?: TransportSetting; // default: \"auto\"\n\tsteeringMode?: \"all\" | \"one-at-a-time\";\n\tfollowUpMode?: \"all\" | \"one-at-a-time\";\n\ttheme?: string;\n\tenableAnalytics?: boolean; // storage only; no analytics transmission is performed\n\ttrackingId?: string; // stable UUID generated on first analytics opt-in\n\tdeviceId?: string; // global installation ID, created only when a login needs it\n\tshowCacheMissNotices?: boolean; // default: false - show cache costs and provider recovery diagnostics\n\tcompaction?: CompactionSettings;\n\tbranchSummary?: BranchSummarySettings;\n\tsessionSummary?: SessionSummarySettings;\n\tretry?: RetrySettings;\n\thideThinkingBlock?: boolean;\n\texternalEditor?: string; // Command for Ctrl+G external editor; takes precedence over VISUAL/EDITOR\n\tshellPath?: string; // Custom shell path (e.g., for Cygwin users on Windows)\n\tquietStartup?: QuietStartup; // default: false; true hides all startup output, \"header\" keeps only the startup header\n\tdefaultProjectTrust?: DefaultProjectTrust; // default: \"ask\"; global setting only\n\tshellCommandPrefix?: string; // Prefix prepended to every bash command (e.g., \"shopt -s expand_aliases\" for alias support)\n\tbashInterceptor?: BashInterceptorSettings; // default: disabled; when enabled, user_bash handlers can intercept bash tool execution\n\tsearch?: SearchSettings; // Context lines for search results; defaults: before=1, after=3\n\tnpmCommand?: string[]; // Command used for npm package lookup/install operations, argv-style (e.g., [\"mise\", \"exec\", \"node@20\", \"--\", \"npm\"])\n\tcollapseChangelog?: boolean; // Show condensed changelog after update (use /changelog for full)\n\tenableInstallTelemetry?: boolean; // default: true - version-adoption ping on first interactive launch with fresh settings or after an update with changelog entries\n\tpackages?: PackageSource[]; // Array of npm/git package sources (string or object with filtering)\n\textensions?: string[]; // Array of local extension file paths or directories\n\tskills?: string[]; // Array of local skill file paths or directories\n\tprompts?: string[]; // Array of local prompt template paths or directories\n\tthemes?: string[]; // Array of local theme file paths or directories\n\tworkflows?:\n\t\t| string[]\n\t\t| {\n\t\t\t\tpaths?: string[];\n\t\t\t\tdurability?: { systemDatabaseUrl?: string; systemDatabaseUrlFile?: string };\n\t\t };\n\tenableSkillCommands?: boolean; // default: true - register skills as /skill:name commands\n\tterminal?: TerminalSettings;\n\therdr?: { enabled?: boolean }; // default: true, only inside an interactive Herdr pane\n\timages?: ImageSettings;\n\tenabledModels?: string[]; // Model patterns for cycling (same format as --models CLI flag)\n\tdefaultTools?: string[]; // Initial tool selection; +name/-name modify inherited selection\n\tdoubleEscapeAction?: \"fork\" | \"tree\" | \"none\"; // Action for double-escape with empty editor (default: \"tree\")\n\ttreeFilterMode?: \"default\" | \"no-tools\" | \"user-only\" | \"labeled-only\" | \"all\"; // Default filter when opening /tree\n\tthinkingBudgets?: ThinkingBudgetsSettings; // Custom token budgets for thinking levels\n\teditorPaddingX?: number; // Horizontal padding for input editor (default: 0)\n\toutputPad?: 0 | 1; // Horizontal padding for transcript content (default: 1)\n\tautocompleteMaxVisible?: number; // Max visible items in autocomplete dropdown (default: 5)\n\tshowHardwareCursor?: boolean; // Show terminal cursor while still positioning it for IME\n\tfullscreenScrollbar?: ScrollViewScrollbar; // default: \"auto\"\n\tfullscreenExitOutput?: FullscreenExitOutput; // default: \"transcript\"\n\tfullscreenCopyOnSelect?: boolean; // default: true\n\tfullscreenWheelScrollLines?: WheelScrollLines; // default: \"auto\", numeric values 1-100\n\tcodemode?: { mode?: CodemodeMode; inlineBudget?: number };\n\tmarkdown?: MarkdownSettings;\n\twarnings?: WarningSettings;\n\tsessionDir?: string; // Custom session storage directory (same format as --session-dir CLI flag)\n\thttpProxy?: string; // Proxy URL applied as HTTP_PROXY and HTTPS_PROXY; global setting only\n\thttpIdleTimeoutMs?: number | string; // HTTP idle timeout; 0 or \"disabled\" disables it\n\tcacheWarming?: CacheWarmingMode; // Global only; each refresh costs money. Default: streaming.\n\twebsocketConnectTimeoutMs?: number | string; // WebSocket connect timeout; 0 or \"disabled\" disables it\n\tstreamDeadlineMs?: number | string; // Max idle gap between provider stream events; 0 or \"disabled\" disables it\n}\n\nexport type SettingsScope = \"global\" | \"project\";\n\nexport interface SettingsManagerCreateOptions {\n\tprojectTrusted?: boolean;\n}\n\nexport type SettingsFieldOrigin = \"primary\" | \"legacy\";\n\nexport interface SettingsStorage {\n\twithLock(scope: SettingsScope, fn: (current: string | undefined) => string | undefined): void;\n\t/**\n\t * Optional write-specific lock whose callback receives the current primary\n\t * document rather than a layered effective view. Storage implementations\n\t * without a distinct primary document can omit this method; layered storage\n\t * implementations must provide it to keep fallback fields out of the primary\n\t * document.\n\t */\n\twithPrimaryWriteLock?(scope: SettingsScope, fn: (currentPrimary: string | undefined) => string | undefined): void;\n\tgetFieldOrigin?(scope: SettingsScope, field: keyof Settings): SettingsFieldOrigin | undefined;\n}\n\nexport interface SettingsError {\n\tscope: SettingsScope;\n\tpath?: string;\n\terror: Error;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../src/core/tools/bash.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"bash.d.ts","sourceRoot":"","sources":["../../../src/core/tools/bash.ts"],"names":[],"mappings":"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"}
|
package/dist/core/tools/bash.js
CHANGED
|
@@ -250,7 +250,7 @@ function formatBashCall(args, prompt) {
|
|
|
250
250
|
const commandDisplay = command === null ? invalidArgText(theme) : command ? command : theme.fg("toolOutput", "...");
|
|
251
251
|
return theme.fg("toolTitle", theme.bold(`${prompt} ${commandDisplay}`)) + timeoutSuffix;
|
|
252
252
|
}
|
|
253
|
-
function rebuildBashResultRenderComponent(component, result, options, showImages, startedAt, endedAt) {
|
|
253
|
+
function rebuildBashResultRenderComponent(component, result, options, showImages, startedAt, endedAt, durationMs) {
|
|
254
254
|
component.clear();
|
|
255
255
|
let output = getTextOutput(result, showImages).trim();
|
|
256
256
|
const observation = result.details?.observation;
|
|
@@ -303,7 +303,11 @@ function rebuildBashResultRenderComponent(component, result, options, showImages
|
|
|
303
303
|
}
|
|
304
304
|
component.addChild(new Text(`\n${theme.fg("warning", `[${warnings.join(". ")}]`)}`, 0, 0));
|
|
305
305
|
}
|
|
306
|
-
if (
|
|
306
|
+
if (!options.isPartial && durationMs !== undefined) {
|
|
307
|
+
const label = observation?.kind === "yielded" ? "Observed for" : "Took";
|
|
308
|
+
component.addChild(new Text(`\n${theme.fg("muted", `${label} ${formatDuration(durationMs)}`)}`, 0, 0));
|
|
309
|
+
}
|
|
310
|
+
else if (startedAt !== undefined) {
|
|
307
311
|
const label = options.isPartial ? "Elapsed" : observation?.kind === "yielded" ? "Observed for" : "Took";
|
|
308
312
|
const endTime = endedAt ?? Date.now();
|
|
309
313
|
component.addChild(new Text(`\n${theme.fg("muted", `${label} ${formatDuration(endTime - startedAt)}`)}`, 0, 0));
|
|
@@ -604,7 +608,7 @@ export function createBashToolDefinition(cwd, options, presentation = BASH_SHELL
|
|
|
604
608
|
}
|
|
605
609
|
}
|
|
606
610
|
const component = context.lastComponent ?? new Container();
|
|
607
|
-
rebuildBashResultRenderComponent(component, result, options, context.showImages, state.startedAt, state.endedAt);
|
|
611
|
+
rebuildBashResultRenderComponent(component, result, options, context.showImages, state.startedAt, state.endedAt, context.durationMs);
|
|
608
612
|
component.invalidate();
|
|
609
613
|
return component;
|
|
610
614
|
},
|