@bastani/atomic 0.9.45 → 0.9.46
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 +79 -0
- package/dist/builtin/intercom/CHANGELOG.md +22 -0
- package/dist/builtin/intercom/broker/broker.ts +124 -10
- package/dist/builtin/intercom/broker/client.ts +177 -25
- package/dist/builtin/intercom/broker/multinode-router.ts +228 -27
- package/dist/builtin/intercom/broker/multinode-state-store.ts +10 -0
- package/dist/builtin/intercom/broker/recipient-receipts.ts +38 -4
- package/dist/builtin/intercom/broker/send-handler.ts +9 -2
- package/dist/builtin/intercom/broker/sql-outbox-store.ts +29 -4
- package/dist/builtin/intercom/group.ts +25 -0
- package/dist/builtin/intercom/index.bundle.mjs +177 -35
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/intercom/retry-policy.ts +7 -0
- package/dist/builtin/intercom/types.ts +21 -0
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/subagents/CHANGELOG.md +21 -0
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/subagents/src/extension/index.bundle.mjs +152 -56
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +79 -0
- package/dist/builtin/workflows/builtin/{chunk-6901nsd6.js → chunk-6jpwc09k.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-vwx023ge.js → chunk-qhm35ntx.js} +1 -1
- package/dist/builtin/workflows/builtin/{chunk-jvna28mq.js → chunk-zhyqnf5g.js} +331 -68
- package/dist/builtin/workflows/builtin/goal.js +2 -2
- package/dist/builtin/workflows/builtin/index.js +3 -3
- package/dist/builtin/workflows/builtin/ralph.js +2 -2
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/skills/prompt-engineer/SKILL.md +1 -0
- package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6.md +2 -2
- package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6_1_sol.md +2 -2
- package/dist/builtin/workflows/skills/prompt-engineer/references/gpt_6_1_terra.md +77 -0
- package/dist/builtin/workflows/src/authoring.d.ts +1 -1
- package/dist/builtin/workflows/src/durable/journal/internal.d.ts +2 -0
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +7104 -3387
- package/dist/builtin/workflows/src/extension/local-worker-entry.mjs +11105 -7264
- package/dist/builtin/workflows/src/index.js +6796 -3606
- package/dist/builtin/workflows/src/local-worker-entry.mjs +11105 -7264
- package/dist/builtin/workflows/src/shared/authoring-contract-ui.d.ts +19 -0
- package/dist/core/agent-session-boundaries.d.ts.map +1 -1
- package/dist/core/agent-session-boundaries.js +1 -0
- package/dist/core/agent-session-boundaries.js.map +1 -1
- package/dist/core/agent-session-events.d.ts.map +1 -1
- package/dist/core/agent-session-events.js +2 -1
- 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 +15 -2
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +3 -2
- 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 +4 -2
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +13 -8
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-recovery.d.ts.map +1 -1
- package/dist/core/agent-session-recovery.js +92 -1
- package/dist/core/agent-session-recovery.js.map +1 -1
- package/dist/core/agent-session-tasks.d.ts.map +1 -1
- package/dist/core/agent-session-tasks.js +8 -1
- package/dist/core/agent-session-tasks.js.map +1 -1
- package/dist/core/agent-session-transfer.d.ts.map +1 -1
- package/dist/core/agent-session-transfer.js +5 -0
- package/dist/core/agent-session-transfer.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -0
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +2 -0
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/copilot-errors.d.ts +6 -0
- package/dist/core/copilot-errors.d.ts.map +1 -0
- package/dist/core/copilot-errors.js +17 -0
- package/dist/core/copilot-errors.js.map +1 -0
- package/dist/core/execution-model-router.d.ts.map +1 -1
- package/dist/core/execution-model-router.js +12 -2
- package/dist/core/execution-model-router.js.map +1 -1
- package/dist/core/extensions/context-types.d.ts +7 -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/runner-context.d.ts.map +1 -1
- package/dist/core/extensions/runner-context.js +6 -0
- package/dist/core/extensions/runner-context.js.map +1 -1
- package/dist/core/extensions/ui-types.d.ts +9 -1
- package/dist/core/extensions/ui-types.d.ts.map +1 -1
- package/dist/core/extensions/ui-types.js.map +1 -1
- package/dist/core/extensions/workflow-activity-hub.d.ts +4 -0
- package/dist/core/extensions/workflow-activity-hub.d.ts.map +1 -1
- package/dist/core/extensions/workflow-activity-hub.js +26 -5
- package/dist/core/extensions/workflow-activity-hub.js.map +1 -1
- package/dist/core/extensions/workflow-events.d.ts +5 -0
- package/dist/core/extensions/workflow-events.d.ts.map +1 -1
- package/dist/core/extensions/workflow-events.js.map +1 -1
- package/dist/core/messages.d.ts +5 -0
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-fallback-failures.d.ts +1 -1
- package/dist/core/model-fallback-failures.d.ts.map +1 -1
- package/dist/core/model-fallback-failures.js +37 -3
- package/dist/core/model-fallback-failures.js.map +1 -1
- package/dist/core/model-resolver-defaults.js +2 -2
- package/dist/core/model-resolver-defaults.js.map +1 -1
- package/dist/core/model-runtime-streaming.js +2 -2
- package/dist/core/model-runtime-streaming.js.map +1 -1
- package/dist/core/package-manager-npm.d.ts.map +1 -1
- package/dist/core/package-manager-npm.js +7 -3
- package/dist/core/package-manager-npm.js.map +1 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +19 -11
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/provider-rate-limits.d.ts +55 -6
- package/dist/core/provider-rate-limits.d.ts.map +1 -1
- package/dist/core/provider-rate-limits.js +182 -29
- package/dist/core/provider-rate-limits.js.map +1 -1
- package/dist/core/provider-request-admission.d.ts.map +1 -1
- package/dist/core/provider-request-admission.js +42 -18
- package/dist/core/provider-request-admission.js.map +1 -1
- package/dist/core/storage/node-sqlite.d.ts.map +1 -1
- package/dist/core/storage/node-sqlite.js +176 -19
- package/dist/core/storage/node-sqlite.js.map +1 -1
- package/dist/core/storage/provider.d.ts +4 -2
- package/dist/core/storage/provider.d.ts.map +1 -1
- package/dist/core/storage/provider.js +94 -5
- package/dist/core/storage/provider.js.map +1 -1
- package/dist/core/structured-output/index.d.ts.map +1 -1
- package/dist/core/structured-output/index.js +15 -8
- package/dist/core/structured-output/index.js.map +1 -1
- package/dist/core/structured-output/provider-failure.d.ts +17 -0
- package/dist/core/structured-output/provider-failure.d.ts.map +1 -0
- package/dist/core/structured-output/provider-failure.js +28 -0
- package/dist/core/structured-output/provider-failure.js.map +1 -0
- package/dist/core/tasks/completion.d.ts +6 -1
- package/dist/core/tasks/completion.d.ts.map +1 -1
- package/dist/core/tasks/completion.js +33 -18
- package/dist/core/tasks/completion.js.map +1 -1
- package/dist/core/tasks/pause.d.ts +2 -1
- package/dist/core/tasks/pause.d.ts.map +1 -1
- package/dist/core/tasks/pause.js +3 -2
- package/dist/core/tasks/pause.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +13 -7
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +6 -4
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/shell-task-render.d.ts +1 -0
- package/dist/core/tools/shell-task-render.d.ts.map +1 -1
- package/dist/core/tools/shell-task-render.js +7 -2
- package/dist/core/tools/shell-task-render.js.map +1 -1
- package/dist/core/tools/shell-task-status.d.ts.map +1 -1
- package/dist/core/tools/shell-task-status.js +2 -1
- package/dist/core/tools/shell-task-status.js.map +1 -1
- package/dist/extensions/tool-search/tool.d.ts +5 -0
- package/dist/extensions/tool-search/tool.d.ts.map +1 -1
- package/dist/extensions/tool-search/tool.js +38 -5
- package/dist/extensions/tool-search/tool.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +20 -12
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.js +3 -2
- package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +42 -14
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-context.js +2 -1
- package/dist/modes/interactive/interactive-extension-context.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-custom-ui.js +1 -1
- package/dist/modes/interactive/interactive-extension-custom-ui.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-dialogs.js +10 -4
- package/dist/modes/interactive/interactive-extension-dialogs.js.map +1 -1
- package/dist/modes/interactive/interactive-mode-surface.d.ts +1 -0
- 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-startup.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +5 -6
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive-engine/engine-custom-ui.d.ts +3 -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/protocol.d.ts +6 -0
- package/dist/modes/interactive-engine/protocol.d.ts.map +1 -1
- package/dist/modes/interactive-engine/protocol.js +9 -0
- package/dist/modes/interactive-engine/protocol.js.map +1 -1
- package/dist/modes/interactive-engine/remote-component.d.ts.map +1 -1
- package/dist/modes/interactive-engine/remote-component.js +3 -2
- package/dist/modes/interactive-engine/remote-component.js.map +1 -1
- package/dist/modes/rpc/rpc-client-process.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-process.js +8 -1
- package/dist/modes/rpc/rpc-client-process.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +7 -1
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/utils/ansi.d.ts +2 -0
- package/dist/utils/ansi.d.ts.map +1 -1
- package/dist/utils/ansi.js +5 -0
- package/dist/utils/ansi.js.map +1 -1
- package/docs/codemode.md +1 -1
- package/docs/intercom/reference.md +3 -3
- package/docs/llama-cpp.md +25 -14
- package/docs/models/evals.md +31 -12
- package/docs/models/reference.md +23 -51
- package/docs/models.md +3 -4
- package/docs/providers.md +5 -15
- package/docs/settings.md +1 -1
- package/docs/storage.md +2 -2
- package/docs/tools.md +1 -1
- package/docs/tui.md +2 -0
- package/docs/workflows/api-reference.md +20 -1
- package/docs/workflows/operations.md +17 -4
- package/npm-shrinkwrap.json +64 -44
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-runtime-streaming.js","sourceRoot":"","sources":["../../src/core/model-runtime-streaming.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Api,\n\ttype ApiStreamOptions,\n\ttype AssistantMessage,\n\ttype AssistantMessageEvent,\n\ttype AssistantMessageEventStream,\n\ttype AuthResult,\n\tassertChatModel,\n\ttype Context,\n\ttype DeferredCancelOptions,\n\ttype DeferredFetchOptions,\n\ttype DeferredHandle,\n\tgetOpenCodeSessionHeaders,\n\tlazyStream,\n\ttype Model,\n\ttype ModelsApiStreamOptions,\n\ttype ModelsDeferredCancelOptions,\n\ttype ModelsDeferredFetchOptions,\n\tModelsError,\n\ttype ModelsRequestTransforms,\n\ttype ModelsSimpleStreamOptions,\n\ttype MutableModels,\n\tnormalizeContext,\n\ttype Provider,\n\ttype ProviderHeaders,\n\ttype SimpleStreamOptions,\n\ttype StreamOptions,\n} from \"@bastani/pi-ai\";\nimport { normalizeModelProvider } from \"./azure-provider-compat.js\";\nimport { usesChatGptCodexTransport, withChatGptCodexTransportRouting } from \"./fast-model-routing.ts\";\nimport { installCodexFastRouteWebSocketIdentity } from \"./fast-model-routing-transport.ts\";\nimport type { ModelRuntimeAuthOverrides } from \"./model-runtime-types.ts\";\nimport { recordProviderSuccess } from \"./provider-rate-limits.js\";\nimport { admitProviderStream } from \"./provider-request-admission.js\";\n\nexport function mergeHeaders(\n\tbase: ProviderHeaders | undefined,\n\toverride: ProviderHeaders | undefined,\n): ProviderHeaders | undefined {\n\tif (!base && !override) return undefined;\n\tconst merged = { ...base };\n\tfor (const [name, value] of Object.entries(override ?? {})) {\n\t\tconst lowerName = name.toLowerCase();\n\t\tfor (const existingName of Object.keys(merged)) {\n\t\t\tif (existingName.toLowerCase() === lowerName) delete merged[existingName];\n\t\t}\n\t\tmerged[name] = value;\n\t}\n\treturn merged;\n}\n\n/** SDK-owned request-auth result so transport preparation does not start a second deadline. */\nexport interface PreparedRequestAuth {\n\treadonly resolution: AuthResult | undefined;\n\treadonly reprepare?: () => Promise<{ model: Model<Api>; options: ModelRuntimeSimpleStreamOptions }>;\n\treadonly streamSimple?: (\n\t\tmodel: Model<Api>,\n\t\tcontext: Context,\n\t\toptions: SimpleStreamOptions,\n\t) => AssistantMessageEventStream;\n}\n\nexport type ModelRuntimePreparedStreamOptions = StreamOptions &\n\tModelsRequestTransforms & {\n\t\tpreparedRequestAuth?: PreparedRequestAuth;\n\t};\n\nexport type ModelRuntimeSimpleStreamOptions = ModelsSimpleStreamOptions & {\n\tpreparedRequestAuth?: PreparedRequestAuth;\n};\n\ntype ResolveAuth = (model: Model<Api>, overrides?: ModelRuntimeAuthOverrides) => Promise<AuthResult | undefined>;\n/** Whether an extension owns this model's transport, in which case it owns its serialization too. */\ntype OwnsExtensionTransport = (model: Model<Api>) => boolean;\n\n/** Streaming request preparation split from ModelRuntime solely for Atomic's 500-line source gate. */\nexport class ModelRuntimeStreaming {\n\tprivate readonly models: MutableModels;\n\tprivate readonly resolveAuth: ResolveAuth;\n\tprivate readonly ownsExtensionTransport: OwnsExtensionTransport;\n\tprivate readonly transportModel: (model: Model<Api>) => Model<Api>;\n\tprivate readonly reloadCredentials: () => Promise<void>;\n\tconstructor(\n\t\tmodels: MutableModels,\n\t\tresolveAuth: ResolveAuth,\n\t\townsExtensionTransport: OwnsExtensionTransport,\n\t\ttransportModel: (model: Model<Api>) => Model<Api> = (model) => model,\n\t\treloadCredentials: () => Promise<void> = async () => {},\n\t) {\n\t\tthis.models = models;\n\t\tthis.resolveAuth = resolveAuth;\n\t\tthis.ownsExtensionTransport = ownsExtensionTransport;\n\t\tthis.transportModel = transportModel;\n\t\tthis.reloadCredentials = reloadCredentials;\n\t}\n\n\t/**\n\t * Attach the first-party ChatGPT Codex routing identity to a prepared request.\n\t *\n\t * This must happen *after* `prepareRequest`, not before it. The wrapper works by mutating the\n\t * header object it captures at construction, and `prepareRequest` rebuilds headers through\n\t * `mergeHeaders`, which copies — so a wrapper applied upstream is silently inert. The wrapper\n\t * decides from the final payload whether the request is priority, so a normal model still ends up\n\t * with `originator: pi` and no routing hint.\n\t */\n\tprivate withCodexRouting<TOptions extends StreamOptions>(model: Model<Api>, options: TOptions): TOptions {\n\t\tmodel = this.transportModel(model);\n\t\tif (!usesChatGptCodexTransport(model) || this.ownsExtensionTransport(model)) return options;\n\t\t// The WebSocket handshake builds its headers inside pi-ai and the constructor can be cached, so\n\t\t// the identity is repaired through the global constructor rather than per-request options. CLI\n\t\t// entrypoints install this through the HTTP dispatcher; a pure SDK embedder never does.\n\t\tif (options.transport !== \"sse\") installCodexFastRouteWebSocketIdentity();\n\t\treturn withChatGptCodexTransportRouting(model, options);\n\t}\n\n\tprivate async prepareRequest(\n\t\tmodel: Model<Api>,\n\t\toptions: ModelRuntimePreparedStreamOptions | undefined,\n\t): Promise<{ provider: Provider; model: Model<Api>; options: StreamOptions; authIdentity: string }> {\n\t\tassertChatModel(model);\n\t\tmodel = normalizeModelProvider(model);\n\t\tconst provider = this.models.getProvider(model.provider);\n\t\tif (!provider) throw new ModelsError(\"provider\", `Unknown provider: ${model.provider}`);\n\t\tconst { transformHeaders, preparedRequestAuth, ...providerOptions } = options ?? {};\n\t\tconst resolution = preparedRequestAuth\n\t\t\t? preparedRequestAuth.resolution\n\t\t\t: await this.resolveAuth(model, {\n\t\t\t\t\tapiKey: options?.apiKey,\n\t\t\t\t\tenv: options?.env,\n\t\t\t\t\tsignal: options?.signal,\n\t\t\t\t});\n\t\toptions?.signal?.throwIfAborted();\n\t\tif (!resolution) throw new ModelsError(\"auth\", `Provider is not configured: ${model.provider}`);\n\n\t\tconst requestModel = resolution.auth.baseUrl ? { ...model, baseUrl: resolution.auth.baseUrl } : model;\n\t\t// An SDK-prepared request already carries the session header, which `before_provider_headers`\n\t\t// handlers may have removed, so only other requests add it here.\n\t\tconst sessionHeaders = preparedRequestAuth\n\t\t\t? undefined\n\t\t\t: getOpenCodeSessionHeaders(requestModel, providerOptions.sessionId);\n\t\tlet headers = mergeHeaders(mergeHeaders(sessionHeaders, resolution.auth.headers), providerOptions.headers);\n\t\tif (transformHeaders) headers = await transformHeaders(headers ?? {});\n\t\toptions?.signal?.throwIfAborted();\n\t\tconst env =\n\t\t\tresolution.env || providerOptions.env\n\t\t\t\t? { ...(resolution.env ?? {}), ...(providerOptions.env ?? {}) }\n\t\t\t\t: undefined;\n\t\tconst apiKey = providerOptions.apiKey ?? resolution.auth.apiKey;\n\t\tconst credentialHeaderNames = new Set(\n\t\t\tObject.keys(resolution.auth.headers ?? {}).map((name) => name.toLowerCase()),\n\t\t);\n\t\treturn {\n\t\t\tprovider,\n\t\t\tauthIdentity: JSON.stringify({\n\t\t\t\tapiKey,\n\t\t\t\theaders: Object.entries(headers ?? {})\n\t\t\t\t\t.map(([name, value]) => [name.toLowerCase(), value] as const)\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t([name]) =>\n\t\t\t\t\t\t\tcredentialHeaderNames.has(name) ||\n\t\t\t\t\t\t\t/^(?:authorization|proxy-authorization|x-api-key|api-key|cookie)$/.test(name),\n\t\t\t\t\t)\n\t\t\t\t\t.sort(([left], [right]) => left.localeCompare(right)),\n\t\t\t\tenv: Object.entries(env ?? {}).sort(([left], [right]) => left.localeCompare(right)),\n\t\t\t\tbaseUrl: resolution.auth.baseUrl ?? model.baseUrl,\n\t\t\t}),\n\t\t\tmodel: requestModel,\n\t\t\toptions: {\n\t\t\t\t...providerOptions,\n\t\t\t\tapiKey,\n\t\t\t\theaders,\n\t\t\t\tenv,\n\t\t\t},\n\t\t};\n\t}\n\n\tstream<TApi extends Api>(\n\t\tmodel: Model<TApi>,\n\t\tcontext: Context,\n\t\toptions?: ModelsApiStreamOptions<TApi>,\n\t): AssistantMessageEventStream {\n\t\tconst transcript = normalizeContext(context);\n\t\treturn this.streamWithCredentialRetry(model, options, (prepared) =>\n\t\t\tprepared.provider.stream(\n\t\t\t\tprepared.model as Model<TApi>,\n\t\t\t\ttranscript,\n\t\t\t\tthis.withCodexRouting(prepared.model, prepared.options) as ApiStreamOptions<TApi>,\n\t\t\t),\n\t\t);\n\t}\n\n\tcomplete<TApi extends Api>(\n\t\tmodel: Model<TApi>,\n\t\tcontext: Context,\n\t\toptions?: ModelsApiStreamOptions<TApi>,\n\t): Promise<AssistantMessage> {\n\t\treturn this.stream(model, context, options).result();\n\t}\n\n\tstreamSimple(\n\t\tmodel: Model<Api>,\n\t\tcontext: Context,\n\t\toptions?: ModelRuntimeSimpleStreamOptions,\n\t): AssistantMessageEventStream {\n\t\tconst transcript = normalizeContext(context);\n\t\tconst dispatch = options?.preparedRequestAuth?.streamSimple;\n\t\treturn this.streamWithCredentialRetry(model, options, (prepared) =>\n\t\t\tdispatch\n\t\t\t\t? dispatch(prepared.model, context, prepared.options as SimpleStreamOptions)\n\t\t\t\t: prepared.provider.streamSimple(\n\t\t\t\t\t\tprepared.model,\n\t\t\t\t\t\ttranscript,\n\t\t\t\t\t\tthis.withCodexRouting(prepared.model, prepared.options) as SimpleStreamOptions,\n\t\t\t\t\t),\n\t\t);\n\t}\n\n\tcompleteSimple(\n\t\tmodel: Model<Api>,\n\t\tcontext: Context,\n\t\toptions?: ModelRuntimeSimpleStreamOptions,\n\t): Promise<AssistantMessage> {\n\t\treturn this.streamSimple(model, context, options).result();\n\t}\n\n\tprivate streamWithCredentialRetry(\n\t\tmodel: Model<Api>,\n\t\toptions: ModelRuntimePreparedStreamOptions | undefined,\n\t\tinvoke: (prepared: Awaited<ReturnType<ModelRuntimeStreaming[\"prepareRequest\"]>>) => AssistantMessageEventStream,\n\t): AssistantMessageEventStream {\n\t\tconst prepare = () => this.prepareRequest(model, options);\n\t\tconst reprepareCredentials = async (previous: Awaited<ReturnType<typeof prepare>>) => {\n\t\t\tif (options?.signal?.aborted) return undefined;\n\t\t\tawait this.reloadCredentials();\n\t\t\tconst { preparedRequestAuth: previousAuth, ...callerOptions } = options ?? {};\n\t\t\tconst reprepared = previousAuth?.reprepare ? await previousAuth.reprepare() : undefined;\n\t\t\tconst next = reprepared\n\t\t\t\t? await this.prepareRequest(reprepared.model, {\n\t\t\t\t\t\t...callerOptions,\n\t\t\t\t\t\tapiKey: reprepared.options.apiKey,\n\t\t\t\t\t\theaders: reprepared.options.headers,\n\t\t\t\t\t\tenv: reprepared.options.env,\n\t\t\t\t\t\tpreparedRequestAuth: reprepared.options.preparedRequestAuth,\n\t\t\t\t\t})\n\t\t\t\t: await this.prepareRequest(model, callerOptions);\n\t\t\treturn next.authIdentity !== previous.authIdentity ? next : undefined;\n\t\t};\n\t\tconst retry = (previous: Awaited<ReturnType<typeof prepare>>) =>\n\t\t\treprepareCredentials(previous).catch(() => undefined);\n\t\tconst ownsTransport = (requestModel: Model<Api>) => this.ownsExtensionTransport(requestModel);\n\t\tconst iterate = async function* (): AsyncGenerator<AssistantMessageEvent> {\n\t\t\tlet prepared = await prepare();\n\t\t\tfor (let attempt = 0; attempt < 2; attempt++) {\n\t\t\t\tconst pending: AssistantMessageEvent[] = [];\n\t\t\t\tlet deliveredContent = false;\n\t\t\t\tlet rejection: AssistantMessageEvent | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst admission = await admitProviderStream(\n\t\t\t\t\t\tprepared.model,\n\t\t\t\t\t\tprepared.options,\n\t\t\t\t\t\townsTransport(prepared.model),\n\t\t\t\t\t);\n\t\t\t\t\tprepared = { ...prepared, options: admission.options };\n\t\t\t\t\toptions?.signal?.throwIfAborted();\n\t\t\t\t\tconst source = admission.run(() => invoke(prepared));\n\t\t\t\t\tlet terminal = false;\n\t\t\t\t\tfor await (const event of source) {\n\t\t\t\t\t\tif (event.type === \"error\") admission.observeFailure(event.error);\n\t\t\t\t\t\tif (event.type === \"done\") recordProviderSuccess(prepared.model.provider);\n\t\t\t\t\t\tif (event.type === \"start\") {\n\t\t\t\t\t\t\tpending.push(event);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tevent.type === \"error\" &&\n\t\t\t\t\t\t\t!deliveredContent &&\n\t\t\t\t\t\t\tattempt === 0 &&\n\t\t\t\t\t\t\tisCredentialRejection(event.error.errorMessage)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\trejection = event;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tyield* pending.splice(0);\n\t\t\t\t\t\tyield event;\n\t\t\t\t\t\tterminal = event.type === \"done\" || event.type === \"error\";\n\t\t\t\t\t\tdeliveredContent = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (!rejection && !terminal) {\n\t\t\t\t\t\tconst result = await source.result();\n\t\t\t\t\t\tif (result.stopReason !== \"error\" && result.stopReason !== \"aborted\")\n\t\t\t\t\t\t\trecordProviderSuccess(prepared.model.provider);\n\t\t\t\t\t\tif (result.stopReason === \"error\") admission.observeFailure(result);\n\t\t\t\t\t\tconst event: AssistantMessageEvent =\n\t\t\t\t\t\t\tresult.stopReason === \"error\" || result.stopReason === \"aborted\"\n\t\t\t\t\t\t\t\t? { type: \"error\", reason: result.stopReason, error: result }\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\ttype: \"done\",\n\t\t\t\t\t\t\t\t\t\treason: result.stopReason === \"pending\" ? \"stop\" : result.stopReason,\n\t\t\t\t\t\t\t\t\t\tmessage: result,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!deliveredContent &&\n\t\t\t\t\t\t\tattempt === 0 &&\n\t\t\t\t\t\t\tresult.stopReason === \"error\" &&\n\t\t\t\t\t\t\tisCredentialRejection(result.errorMessage)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\trejection = event;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tyield* pending;\n\t\t\t\t\t\t\tyield event;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!deliveredContent && options?.signal?.aborted) {\n\t\t\t\t\t\tconst aborted: AssistantMessage = {\n\t\t\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\t\t\tapi: prepared.model.api,\n\t\t\t\t\t\t\tprovider: prepared.model.provider,\n\t\t\t\t\t\t\tmodel: prepared.model.id,\n\t\t\t\t\t\t\tcontent: [],\n\t\t\t\t\t\t\tusage: {\n\t\t\t\t\t\t\t\tinput: 0,\n\t\t\t\t\t\t\t\toutput: 0,\n\t\t\t\t\t\t\t\tcacheRead: 0,\n\t\t\t\t\t\t\t\tcacheWrite: 0,\n\t\t\t\t\t\t\t\ttotalTokens: 0,\n\t\t\t\t\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstopReason: \"aborted\",\n\t\t\t\t\t\t\terrorMessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t};\n\t\t\t\t\t\tyield* pending;\n\t\t\t\t\t\tyield { type: \"error\", reason: \"aborted\", error: aborted };\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tdeliveredContent ||\n\t\t\t\t\t\tattempt !== 0 ||\n\t\t\t\t\t\t!isCredentialRejection(error instanceof Error ? error : String(error))\n\t\t\t\t\t)\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\tconst next = await retry(prepared);\n\t\t\t\t\tif (!next) throw error;\n\t\t\t\t\tprepared = next;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (!rejection) return;\n\t\t\t\tconst next = await retry(prepared);\n\t\t\t\tif (!next) {\n\t\t\t\t\tyield* pending;\n\t\t\t\t\tyield rejection;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tprepared = next;\n\t\t\t}\n\t\t};\n\t\treturn lazyStream(model, async () => iterate());\n\t}\n\tasync fetchDeferred(\n\t\tmodel: Model<Api>,\n\t\thandle: DeferredHandle,\n\t\toptions?: ModelsDeferredFetchOptions,\n\t): Promise<AssistantMessage> {\n\t\treturn lazyStream(model, async () => {\n\t\t\tconst prepared = await this.prepareRequest(model, options);\n\t\t\tif (!prepared.provider.fetchDeferred) {\n\t\t\t\tthrow new ModelsError(\"provider\", `Provider ${model.provider} does not support deferred responses`);\n\t\t\t}\n\t\t\treturn prepared.provider.fetchDeferred(prepared.model, handle, prepared.options as DeferredFetchOptions);\n\t\t}).result();\n\t}\n\n\tasync cancelDeferred(\n\t\tmodel: Model<Api>,\n\t\thandle: DeferredHandle,\n\t\toptions?: ModelsDeferredCancelOptions,\n\t): Promise<void> {\n\t\tconst prepared = await this.prepareRequest(model, options);\n\t\tif (!prepared.provider.cancelDeferred) {\n\t\t\tthrow new ModelsError(\"provider\", `Provider ${model.provider} does not support deferred responses`);\n\t\t}\n\t\tawait prepared.provider.cancelDeferred(prepared.model, handle, prepared.options as DeferredCancelOptions);\n\t}\n}\n\nconst HTTP_401_PATTERN = /^\\W*401\\b|\\b(?:http|status|code|error)\\W{0,3}401\\b|\\(401\\)/i;\nconst CREDENTIAL_REJECTION_PATTERN =\n\t/unauthori[sz]ed|invalid(?:ated)?[_\\s-]*(?:api[_\\s-]*key|(?:access[_\\s-]*|auth[_\\s-]*|oauth[_\\s-]*)?token)|(?:token|api[_\\s-]*key)[_\\s-]*(?:(?:is|has[_\\s-]*been)[_\\s-]*)?(?:invalid|revoked|expired|invalidated)/i;\n\nfunction isCredentialRejection(error: object | string | undefined): boolean {\n\tif (error instanceof Error) {\n\t\tif ((\"status\" in error && error.status === 401) || (\"statusCode\" in error && error.statusCode === 401))\n\t\t\treturn true;\n\t\terror = error.message;\n\t}\n\treturn typeof error === \"string\" && (HTTP_401_PATTERN.test(error) || CREDENTIAL_REJECTION_PATTERN.test(error));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"model-runtime-streaming.js","sourceRoot":"","sources":["../../src/core/model-runtime-streaming.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Api,\n\ttype ApiStreamOptions,\n\ttype AssistantMessage,\n\ttype AssistantMessageEvent,\n\ttype AssistantMessageEventStream,\n\ttype AuthResult,\n\tassertChatModel,\n\ttype Context,\n\ttype DeferredCancelOptions,\n\ttype DeferredFetchOptions,\n\ttype DeferredHandle,\n\tgetOpenCodeSessionHeaders,\n\tlazyStream,\n\ttype Model,\n\ttype ModelsApiStreamOptions,\n\ttype ModelsDeferredCancelOptions,\n\ttype ModelsDeferredFetchOptions,\n\tModelsError,\n\ttype ModelsRequestTransforms,\n\ttype ModelsSimpleStreamOptions,\n\ttype MutableModels,\n\tnormalizeContext,\n\ttype Provider,\n\ttype ProviderHeaders,\n\ttype SimpleStreamOptions,\n\ttype StreamOptions,\n} from \"@bastani/pi-ai\";\nimport { normalizeModelProvider } from \"./azure-provider-compat.js\";\nimport { usesChatGptCodexTransport, withChatGptCodexTransportRouting } from \"./fast-model-routing.ts\";\nimport { installCodexFastRouteWebSocketIdentity } from \"./fast-model-routing-transport.ts\";\nimport type { ModelRuntimeAuthOverrides } from \"./model-runtime-types.ts\";\nimport { recordProviderSuccess } from \"./provider-rate-limits.js\";\nimport { admitProviderStream } from \"./provider-request-admission.js\";\n\nexport function mergeHeaders(\n\tbase: ProviderHeaders | undefined,\n\toverride: ProviderHeaders | undefined,\n): ProviderHeaders | undefined {\n\tif (!base && !override) return undefined;\n\tconst merged = { ...base };\n\tfor (const [name, value] of Object.entries(override ?? {})) {\n\t\tconst lowerName = name.toLowerCase();\n\t\tfor (const existingName of Object.keys(merged)) {\n\t\t\tif (existingName.toLowerCase() === lowerName) delete merged[existingName];\n\t\t}\n\t\tmerged[name] = value;\n\t}\n\treturn merged;\n}\n\n/** SDK-owned request-auth result so transport preparation does not start a second deadline. */\nexport interface PreparedRequestAuth {\n\treadonly resolution: AuthResult | undefined;\n\treadonly reprepare?: () => Promise<{ model: Model<Api>; options: ModelRuntimeSimpleStreamOptions }>;\n\treadonly streamSimple?: (\n\t\tmodel: Model<Api>,\n\t\tcontext: Context,\n\t\toptions: SimpleStreamOptions,\n\t) => AssistantMessageEventStream;\n}\n\nexport type ModelRuntimePreparedStreamOptions = StreamOptions &\n\tModelsRequestTransforms & {\n\t\tpreparedRequestAuth?: PreparedRequestAuth;\n\t};\n\nexport type ModelRuntimeSimpleStreamOptions = ModelsSimpleStreamOptions & {\n\tpreparedRequestAuth?: PreparedRequestAuth;\n};\n\ntype ResolveAuth = (model: Model<Api>, overrides?: ModelRuntimeAuthOverrides) => Promise<AuthResult | undefined>;\n/** Whether an extension owns this model's transport, in which case it owns its serialization too. */\ntype OwnsExtensionTransport = (model: Model<Api>) => boolean;\n\n/** Streaming request preparation split from ModelRuntime solely for Atomic's 500-line source gate. */\nexport class ModelRuntimeStreaming {\n\tprivate readonly models: MutableModels;\n\tprivate readonly resolveAuth: ResolveAuth;\n\tprivate readonly ownsExtensionTransport: OwnsExtensionTransport;\n\tprivate readonly transportModel: (model: Model<Api>) => Model<Api>;\n\tprivate readonly reloadCredentials: () => Promise<void>;\n\tconstructor(\n\t\tmodels: MutableModels,\n\t\tresolveAuth: ResolveAuth,\n\t\townsExtensionTransport: OwnsExtensionTransport,\n\t\ttransportModel: (model: Model<Api>) => Model<Api> = (model) => model,\n\t\treloadCredentials: () => Promise<void> = async () => {},\n\t) {\n\t\tthis.models = models;\n\t\tthis.resolveAuth = resolveAuth;\n\t\tthis.ownsExtensionTransport = ownsExtensionTransport;\n\t\tthis.transportModel = transportModel;\n\t\tthis.reloadCredentials = reloadCredentials;\n\t}\n\n\t/**\n\t * Attach the first-party ChatGPT Codex routing identity to a prepared request.\n\t *\n\t * This must happen *after* `prepareRequest`, not before it. The wrapper works by mutating the\n\t * header object it captures at construction, and `prepareRequest` rebuilds headers through\n\t * `mergeHeaders`, which copies — so a wrapper applied upstream is silently inert. The wrapper\n\t * decides from the final payload whether the request is priority, so a normal model still ends up\n\t * with `originator: pi` and no routing hint.\n\t */\n\tprivate withCodexRouting<TOptions extends StreamOptions>(model: Model<Api>, options: TOptions): TOptions {\n\t\tmodel = this.transportModel(model);\n\t\tif (!usesChatGptCodexTransport(model) || this.ownsExtensionTransport(model)) return options;\n\t\t// The WebSocket handshake builds its headers inside pi-ai and the constructor can be cached, so\n\t\t// the identity is repaired through the global constructor rather than per-request options. CLI\n\t\t// entrypoints install this through the HTTP dispatcher; a pure SDK embedder never does.\n\t\tif (options.transport !== \"sse\") installCodexFastRouteWebSocketIdentity();\n\t\treturn withChatGptCodexTransportRouting(model, options);\n\t}\n\n\tprivate async prepareRequest(\n\t\tmodel: Model<Api>,\n\t\toptions: ModelRuntimePreparedStreamOptions | undefined,\n\t): Promise<{ provider: Provider; model: Model<Api>; options: StreamOptions; authIdentity: string }> {\n\t\tassertChatModel(model);\n\t\tmodel = normalizeModelProvider(model);\n\t\tconst provider = this.models.getProvider(model.provider);\n\t\tif (!provider) throw new ModelsError(\"provider\", `Unknown provider: ${model.provider}`);\n\t\tconst { transformHeaders, preparedRequestAuth, ...providerOptions } = options ?? {};\n\t\tconst resolution = preparedRequestAuth\n\t\t\t? preparedRequestAuth.resolution\n\t\t\t: await this.resolveAuth(model, {\n\t\t\t\t\tapiKey: options?.apiKey,\n\t\t\t\t\tenv: options?.env,\n\t\t\t\t\tsignal: options?.signal,\n\t\t\t\t});\n\t\toptions?.signal?.throwIfAborted();\n\t\tif (!resolution) throw new ModelsError(\"auth\", `Provider is not configured: ${model.provider}`);\n\n\t\tconst requestModel = resolution.auth.baseUrl ? { ...model, baseUrl: resolution.auth.baseUrl } : model;\n\t\t// An SDK-prepared request already carries the session header, which `before_provider_headers`\n\t\t// handlers may have removed, so only other requests add it here.\n\t\tconst sessionHeaders = preparedRequestAuth\n\t\t\t? undefined\n\t\t\t: getOpenCodeSessionHeaders(requestModel, providerOptions.sessionId);\n\t\tlet headers = mergeHeaders(mergeHeaders(sessionHeaders, resolution.auth.headers), providerOptions.headers);\n\t\tif (transformHeaders) headers = await transformHeaders(headers ?? {});\n\t\toptions?.signal?.throwIfAborted();\n\t\tconst env =\n\t\t\tresolution.env || providerOptions.env\n\t\t\t\t? { ...(resolution.env ?? {}), ...(providerOptions.env ?? {}) }\n\t\t\t\t: undefined;\n\t\tconst apiKey = providerOptions.apiKey ?? resolution.auth.apiKey;\n\t\tconst credentialHeaderNames = new Set(\n\t\t\tObject.keys(resolution.auth.headers ?? {}).map((name) => name.toLowerCase()),\n\t\t);\n\t\treturn {\n\t\t\tprovider,\n\t\t\tauthIdentity: JSON.stringify({\n\t\t\t\tapiKey,\n\t\t\t\theaders: Object.entries(headers ?? {})\n\t\t\t\t\t.map(([name, value]) => [name.toLowerCase(), value] as const)\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t([name]) =>\n\t\t\t\t\t\t\tcredentialHeaderNames.has(name) ||\n\t\t\t\t\t\t\t/^(?:authorization|proxy-authorization|x-api-key|api-key|cookie)$/.test(name),\n\t\t\t\t\t)\n\t\t\t\t\t.sort(([left], [right]) => left.localeCompare(right)),\n\t\t\t\tenv: Object.entries(env ?? {}).sort(([left], [right]) => left.localeCompare(right)),\n\t\t\t\tbaseUrl: resolution.auth.baseUrl ?? model.baseUrl,\n\t\t\t}),\n\t\t\tmodel: requestModel,\n\t\t\toptions: {\n\t\t\t\t...providerOptions,\n\t\t\t\tapiKey,\n\t\t\t\theaders,\n\t\t\t\tenv,\n\t\t\t},\n\t\t};\n\t}\n\n\tstream<TApi extends Api>(\n\t\tmodel: Model<TApi>,\n\t\tcontext: Context,\n\t\toptions?: ModelsApiStreamOptions<TApi>,\n\t): AssistantMessageEventStream {\n\t\tconst transcript = normalizeContext(context);\n\t\treturn this.streamWithCredentialRetry(model, options, (prepared) =>\n\t\t\tprepared.provider.stream(\n\t\t\t\tprepared.model as Model<TApi>,\n\t\t\t\ttranscript,\n\t\t\t\tthis.withCodexRouting(prepared.model, prepared.options) as ApiStreamOptions<TApi>,\n\t\t\t),\n\t\t);\n\t}\n\n\tcomplete<TApi extends Api>(\n\t\tmodel: Model<TApi>,\n\t\tcontext: Context,\n\t\toptions?: ModelsApiStreamOptions<TApi>,\n\t): Promise<AssistantMessage> {\n\t\treturn this.stream(model, context, options).result();\n\t}\n\n\tstreamSimple(\n\t\tmodel: Model<Api>,\n\t\tcontext: Context,\n\t\toptions?: ModelRuntimeSimpleStreamOptions,\n\t): AssistantMessageEventStream {\n\t\tconst transcript = normalizeContext(context);\n\t\tconst dispatch = options?.preparedRequestAuth?.streamSimple;\n\t\treturn this.streamWithCredentialRetry(model, options, (prepared) =>\n\t\t\tdispatch\n\t\t\t\t? dispatch(prepared.model, context, prepared.options as SimpleStreamOptions)\n\t\t\t\t: prepared.provider.streamSimple(\n\t\t\t\t\t\tprepared.model,\n\t\t\t\t\t\ttranscript,\n\t\t\t\t\t\tthis.withCodexRouting(prepared.model, prepared.options) as SimpleStreamOptions,\n\t\t\t\t\t),\n\t\t);\n\t}\n\n\tcompleteSimple(\n\t\tmodel: Model<Api>,\n\t\tcontext: Context,\n\t\toptions?: ModelRuntimeSimpleStreamOptions,\n\t): Promise<AssistantMessage> {\n\t\treturn this.streamSimple(model, context, options).result();\n\t}\n\n\tprivate streamWithCredentialRetry(\n\t\tmodel: Model<Api>,\n\t\toptions: ModelRuntimePreparedStreamOptions | undefined,\n\t\tinvoke: (prepared: Awaited<ReturnType<ModelRuntimeStreaming[\"prepareRequest\"]>>) => AssistantMessageEventStream,\n\t): AssistantMessageEventStream {\n\t\tconst prepare = () => this.prepareRequest(model, options);\n\t\tconst reprepareCredentials = async (previous: Awaited<ReturnType<typeof prepare>>) => {\n\t\t\tif (options?.signal?.aborted) return undefined;\n\t\t\tawait this.reloadCredentials();\n\t\t\tconst { preparedRequestAuth: previousAuth, ...callerOptions } = options ?? {};\n\t\t\tconst reprepared = previousAuth?.reprepare ? await previousAuth.reprepare() : undefined;\n\t\t\tconst next = reprepared\n\t\t\t\t? await this.prepareRequest(reprepared.model, {\n\t\t\t\t\t\t...callerOptions,\n\t\t\t\t\t\tapiKey: reprepared.options.apiKey,\n\t\t\t\t\t\theaders: reprepared.options.headers,\n\t\t\t\t\t\tenv: reprepared.options.env,\n\t\t\t\t\t\tpreparedRequestAuth: reprepared.options.preparedRequestAuth,\n\t\t\t\t\t})\n\t\t\t\t: await this.prepareRequest(model, callerOptions);\n\t\t\treturn next.authIdentity !== previous.authIdentity ? next : undefined;\n\t\t};\n\t\tconst retry = (previous: Awaited<ReturnType<typeof prepare>>) =>\n\t\t\treprepareCredentials(previous).catch(() => undefined);\n\t\tconst ownsTransport = (requestModel: Model<Api>) => this.ownsExtensionTransport(requestModel);\n\t\tconst iterate = async function* (): AsyncGenerator<AssistantMessageEvent> {\n\t\t\tlet prepared = await prepare();\n\t\t\tfor (let attempt = 0; attempt < 2; attempt++) {\n\t\t\t\tconst pending: AssistantMessageEvent[] = [];\n\t\t\t\tlet deliveredContent = false;\n\t\t\t\tlet rejection: AssistantMessageEvent | undefined;\n\t\t\t\ttry {\n\t\t\t\t\tconst admission = await admitProviderStream(\n\t\t\t\t\t\tprepared.model,\n\t\t\t\t\t\tprepared.options,\n\t\t\t\t\t\townsTransport(prepared.model),\n\t\t\t\t\t);\n\t\t\t\t\tprepared = { ...prepared, options: admission.options };\n\t\t\t\t\toptions?.signal?.throwIfAborted();\n\t\t\t\t\tconst source = admission.run(() => invoke(prepared));\n\t\t\t\t\tlet terminal = false;\n\t\t\t\t\tfor await (const event of source) {\n\t\t\t\t\t\tif (event.type === \"error\") admission.observeFailure(event.error);\n\t\t\t\t\t\tif (event.type === \"done\") recordProviderSuccess(prepared.model.provider, prepared.model.id);\n\t\t\t\t\t\tif (event.type === \"start\") {\n\t\t\t\t\t\t\tpending.push(event);\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tevent.type === \"error\" &&\n\t\t\t\t\t\t\t!deliveredContent &&\n\t\t\t\t\t\t\tattempt === 0 &&\n\t\t\t\t\t\t\tisCredentialRejection(event.error.errorMessage)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\trejection = event;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tyield* pending.splice(0);\n\t\t\t\t\t\tyield event;\n\t\t\t\t\t\tterminal = event.type === \"done\" || event.type === \"error\";\n\t\t\t\t\t\tdeliveredContent = true;\n\t\t\t\t\t}\n\t\t\t\t\tif (!rejection && !terminal) {\n\t\t\t\t\t\tconst result = await source.result();\n\t\t\t\t\t\tif (result.stopReason !== \"error\" && result.stopReason !== \"aborted\")\n\t\t\t\t\t\t\trecordProviderSuccess(prepared.model.provider, prepared.model.id);\n\t\t\t\t\t\tif (result.stopReason === \"error\") admission.observeFailure(result);\n\t\t\t\t\t\tconst event: AssistantMessageEvent =\n\t\t\t\t\t\t\tresult.stopReason === \"error\" || result.stopReason === \"aborted\"\n\t\t\t\t\t\t\t\t? { type: \"error\", reason: result.stopReason, error: result }\n\t\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\t\ttype: \"done\",\n\t\t\t\t\t\t\t\t\t\treason: result.stopReason === \"pending\" ? \"stop\" : result.stopReason,\n\t\t\t\t\t\t\t\t\t\tmessage: result,\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!deliveredContent &&\n\t\t\t\t\t\t\tattempt === 0 &&\n\t\t\t\t\t\t\tresult.stopReason === \"error\" &&\n\t\t\t\t\t\t\tisCredentialRejection(result.errorMessage)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\trejection = event;\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tyield* pending;\n\t\t\t\t\t\t\tyield event;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!deliveredContent && options?.signal?.aborted) {\n\t\t\t\t\t\tconst aborted: AssistantMessage = {\n\t\t\t\t\t\t\trole: \"assistant\",\n\t\t\t\t\t\t\tapi: prepared.model.api,\n\t\t\t\t\t\t\tprovider: prepared.model.provider,\n\t\t\t\t\t\t\tmodel: prepared.model.id,\n\t\t\t\t\t\t\tcontent: [],\n\t\t\t\t\t\t\tusage: {\n\t\t\t\t\t\t\t\tinput: 0,\n\t\t\t\t\t\t\t\toutput: 0,\n\t\t\t\t\t\t\t\tcacheRead: 0,\n\t\t\t\t\t\t\t\tcacheWrite: 0,\n\t\t\t\t\t\t\t\ttotalTokens: 0,\n\t\t\t\t\t\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstopReason: \"aborted\",\n\t\t\t\t\t\t\terrorMessage: error instanceof Error ? error.message : String(error),\n\t\t\t\t\t\t\ttimestamp: Date.now(),\n\t\t\t\t\t\t};\n\t\t\t\t\t\tyield* pending;\n\t\t\t\t\t\tyield { type: \"error\", reason: \"aborted\", error: aborted };\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (\n\t\t\t\t\t\tdeliveredContent ||\n\t\t\t\t\t\tattempt !== 0 ||\n\t\t\t\t\t\t!isCredentialRejection(error instanceof Error ? error : String(error))\n\t\t\t\t\t)\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\tconst next = await retry(prepared);\n\t\t\t\t\tif (!next) throw error;\n\t\t\t\t\tprepared = next;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (!rejection) return;\n\t\t\t\tconst next = await retry(prepared);\n\t\t\t\tif (!next) {\n\t\t\t\t\tyield* pending;\n\t\t\t\t\tyield rejection;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tprepared = next;\n\t\t\t}\n\t\t};\n\t\treturn lazyStream(model, async () => iterate());\n\t}\n\tasync fetchDeferred(\n\t\tmodel: Model<Api>,\n\t\thandle: DeferredHandle,\n\t\toptions?: ModelsDeferredFetchOptions,\n\t): Promise<AssistantMessage> {\n\t\treturn lazyStream(model, async () => {\n\t\t\tconst prepared = await this.prepareRequest(model, options);\n\t\t\tif (!prepared.provider.fetchDeferred) {\n\t\t\t\tthrow new ModelsError(\"provider\", `Provider ${model.provider} does not support deferred responses`);\n\t\t\t}\n\t\t\treturn prepared.provider.fetchDeferred(prepared.model, handle, prepared.options as DeferredFetchOptions);\n\t\t}).result();\n\t}\n\n\tasync cancelDeferred(\n\t\tmodel: Model<Api>,\n\t\thandle: DeferredHandle,\n\t\toptions?: ModelsDeferredCancelOptions,\n\t): Promise<void> {\n\t\tconst prepared = await this.prepareRequest(model, options);\n\t\tif (!prepared.provider.cancelDeferred) {\n\t\t\tthrow new ModelsError(\"provider\", `Provider ${model.provider} does not support deferred responses`);\n\t\t}\n\t\tawait prepared.provider.cancelDeferred(prepared.model, handle, prepared.options as DeferredCancelOptions);\n\t}\n}\n\nconst HTTP_401_PATTERN = /^\\W*401\\b|\\b(?:http|status|code|error)\\W{0,3}401\\b|\\(401\\)/i;\nconst CREDENTIAL_REJECTION_PATTERN =\n\t/unauthori[sz]ed|invalid(?:ated)?[_\\s-]*(?:api[_\\s-]*key|(?:access[_\\s-]*|auth[_\\s-]*|oauth[_\\s-]*)?token)|(?:token|api[_\\s-]*key)[_\\s-]*(?:(?:is|has[_\\s-]*been)[_\\s-]*)?(?:invalid|revoked|expired|invalidated)/i;\n\nfunction isCredentialRejection(error: object | string | undefined): boolean {\n\tif (error instanceof Error) {\n\t\tif ((\"status\" in error && error.status === 401) || (\"statusCode\" in error && error.statusCode === 401))\n\t\t\treturn true;\n\t\terror = error.message;\n\t}\n\treturn typeof error === \"string\" && (HTTP_401_PATTERN.test(error) || CREDENTIAL_REJECTION_PATTERN.test(error));\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager-npm.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-npm.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACX,oBAAoB,EACpB,SAAS,EACT,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,MAAM,4BAA4B,CAAC;AAEpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,qBAAqB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAUjG;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAmB5E;AAED,wBAAsB,aAAa,CAClC,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACxB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAMxF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAiBpF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"package-manager-npm.d.ts","sourceRoot":"","sources":["../../src/core/package-manager-npm.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACX,oBAAoB,EACpB,SAAS,EACT,sBAAsB,EACtB,qBAAqB,EACrB,WAAW,EACX,MAAM,4BAA4B,CAAC;AAEpC,wBAAgB,aAAa,CAAC,OAAO,EAAE,qBAAqB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAUjG;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAmB5E;AAED,wBAAsB,aAAa,CAClC,OAAO,EAAE,qBAAqB,EAC9B,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GACxB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAMxF;AAED,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,EAAE,CAiBpF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAkBhH;AAED,wBAAsB,UAAU,CAC/B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,EAClB,SAAS,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC,CAIf;AAED,wBAAsB,YAAY,CACjC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,wBAAsB,eAAe,CACpC,OAAO,EAAE,qBAAqB,EAC9B,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,oBAAoB,GACzB,OAAO,CAAC,IAAI,CAAC,CAIf;AAeD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAQjD;AAED,wBAAgB,wBAAwB,CACvC,OAAO,EAAE,sBAAsB,EAC/B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,MAAM,CAQR;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,qBAAqB,GAAG,MAAM,CAcvE;AA4BD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,GAAG,MAAM,CAO/G;AAED,wBAAgB,yBAAyB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,WAAW,GAChB,MAAM,GAAG,SAAS,CAWpB;AAED,wBAAsB,oCAAoC,CACzD,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,CAclB;AAED,wBAAsB,qBAAqB,CAC1C,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,CAclB;AAED,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAUhF;AAED,wBAAsB,mBAAmB,CACxC,OAAO,EAAE,qBAAqB,EAC9B,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,CAyBjB"}
|
|
@@ -67,7 +67,7 @@ export function getGitDependencyInstallArgs(context) {
|
|
|
67
67
|
"--config.strict-dep-builds=false",
|
|
68
68
|
];
|
|
69
69
|
case "npm":
|
|
70
|
-
return ["install", "--omit=dev", "--legacy-peer-deps"];
|
|
70
|
+
return ["install", "--omit=dev", "--legacy-peer-deps", "--no-audit", "--no-fund"];
|
|
71
71
|
default:
|
|
72
72
|
return ["install"];
|
|
73
73
|
}
|
|
@@ -88,7 +88,8 @@ export function getNpmInstallArgs(context, specs, installRoot) {
|
|
|
88
88
|
"--config.strict-dep-builds=false",
|
|
89
89
|
];
|
|
90
90
|
}
|
|
91
|
-
|
|
91
|
+
// npm audit fix would run without --legacy-peer-deps and install Atomic peers, so skip audit advice.
|
|
92
|
+
return ["install", ...specs, "--prefix", installRoot, "--legacy-peer-deps", "--no-audit", "--no-fund"];
|
|
92
93
|
}
|
|
93
94
|
export async function installNpm(context, source, scope, temporary) {
|
|
94
95
|
const installRoot = getNpmInstallRoot(context, scope, temporary);
|
|
@@ -104,7 +105,10 @@ export async function uninstallNpm(context, source, scope) {
|
|
|
104
105
|
await runNpmCommand(context, ["uninstall", source.name, "--cwd", installRoot]);
|
|
105
106
|
return;
|
|
106
107
|
}
|
|
107
|
-
|
|
108
|
+
const args = ["uninstall", source.name, "--prefix", installRoot];
|
|
109
|
+
if (getPackageManagerName(context) !== "pnpm")
|
|
110
|
+
args.push("--no-audit", "--no-fund");
|
|
111
|
+
await runNpmCommand(context, args);
|
|
108
112
|
}
|
|
109
113
|
export async function installNpmBatch(context, specs, scope) {
|
|
110
114
|
const installRoot = getNpmInstallRoot(context, scope, false);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-manager-npm.js","sourceRoot":"","sources":["../../src/core/package-manager-npm.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\nimport { gt, maxSatisfying, rcompare, satisfies } from \"semver\";\nimport { APP_NAME, CONFIG_DIR_NAME, getProjectConfigDirs } from \"../config.js\";\nimport { markPathIgnoredByCloudSync } from \"../utils/paths.ts\";\nimport { stripBom } from \"../utils/text.ts\";\nimport { runCommand, runCommandCapture, runCommandSync } from \"./package-manager-command.ts\";\nimport { NETWORK_TIMEOUT_MS } from \"./package-manager-constants.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport { getNpmInstallRoot } from \"./package-manager-paths.ts\";\nimport type {\n\tInstalledSourceScope,\n\tNpmSource,\n\tPackageLocationContext,\n\tPackageManagerContext,\n\tSourceScope,\n} from \"./package-manager-types.ts\";\n\nexport function getNpmCommand(context: PackageManagerContext): { command: string; args: string[] } {\n\tconst configuredCommand = context.settingsManager.getNpmCommand();\n\tif (!configuredCommand || configuredCommand.length === 0) {\n\t\treturn { command: \"npm\", args: [] };\n\t}\n\tconst [command, ...args] = configuredCommand;\n\tif (!command) {\n\t\tthrow new Error(\"Invalid npmCommand: first array entry must be a non-empty command\");\n\t}\n\treturn { command, args };\n}\n\nexport function getPackageManagerName(context: PackageManagerContext): string {\n\tconst npmCommand = getNpmCommand(context);\n\tconst normalizeCommandName = (command: string): string => basename(command).replace(/\\.(cmd|exe)$/i, \"\");\n\tconst supportedPackageManagers = new Set([\"npm\", \"pnpm\", \"bun\"]);\n\tconst directCommand = normalizeCommandName(npmCommand.command);\n\tconst separatorIndex = npmCommand.args.lastIndexOf(\"--\");\n\tif (separatorIndex >= 0) {\n\t\tconst wrappedCommand = npmCommand.args[separatorIndex + 1];\n\t\treturn wrappedCommand ? normalizeCommandName(wrappedCommand) : directCommand;\n\t}\n\tif (supportedPackageManagers.has(directCommand)) return directCommand;\n\n\tconst wrappedPackageManagers = [\n\t\t...new Set(npmCommand.args.map(normalizeCommandName).filter((command) => supportedPackageManagers.has(command))),\n\t];\n\tif (wrappedPackageManagers.length > 1) {\n\t\tthrow new Error(`Ambiguous npmCommand package managers: ${wrappedPackageManagers.join(\", \")}`);\n\t}\n\treturn wrappedPackageManagers[0] ?? directCommand;\n}\n\nexport async function runNpmCommand(\n\tcontext: PackageManagerContext,\n\targs: string[],\n\toptions?: { cwd?: string },\n): Promise<void> {\n\tconst npmCommand = getNpmCommand(context);\n\tif (context.driver) {\n\t\tawait context.driver.runCommand(npmCommand.command, [...npmCommand.args, ...args], options);\n\t\treturn;\n\t}\n\tawait runCommand(npmCommand.command, [...npmCommand.args, ...args], options);\n}\n\nexport function runNpmCommandSync(context: PackageManagerContext, args: string[]): string {\n\tconst npmCommand = getNpmCommand(context);\n\tif (context.driver) {\n\t\treturn context.driver.runCommandSync(npmCommand.command, [...npmCommand.args, ...args]);\n\t}\n\treturn runCommandSync(npmCommand.command, [...npmCommand.args, ...args]);\n}\n\nexport function getGitDependencyInstallArgs(context: PackageManagerContext): string[] {\n\tswitch (getPackageManagerName(context)) {\n\t\tcase \"bun\":\n\t\t\treturn [\"install\", \"--omit=dev\", \"--omit=peer\"];\n\t\tcase \"pnpm\":\n\t\t\treturn [\n\t\t\t\t\"install\",\n\t\t\t\t\"--prod\",\n\t\t\t\t\"--config.auto-install-peers=false\",\n\t\t\t\t\"--config.strict-peer-dependencies=false\",\n\t\t\t\t\"--config.strict-dep-builds=false\",\n\t\t\t];\n\t\tcase \"npm\":\n\t\t\treturn [\"install\", \"--omit=dev\", \"--legacy-peer-deps\"];\n\t\tdefault:\n\t\t\treturn [\"install\"];\n\t}\n}\n\nexport function getNpmInstallArgs(context: PackageManagerContext, specs: string[], installRoot: string): string[] {\n\tconst packageManagerName = getPackageManagerName(context);\n\tif (packageManagerName === \"bun\") {\n\t\treturn [\"install\", ...specs, \"--cwd\", installRoot, \"--omit=peer\"];\n\t}\n\tif (packageManagerName === \"pnpm\") {\n\t\treturn [\n\t\t\t\"install\",\n\t\t\t...specs,\n\t\t\t\"--prefix\",\n\t\t\tinstallRoot,\n\t\t\t\"--config.auto-install-peers=false\",\n\t\t\t\"--config.strict-peer-dependencies=false\",\n\t\t\t\"--config.strict-dep-builds=false\",\n\t\t];\n\t}\n\treturn [\"install\", ...specs, \"--prefix\", installRoot, \"--legacy-peer-deps\"];\n}\n\nexport async function installNpm(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tscope: SourceScope,\n\ttemporary: boolean,\n): Promise<void> {\n\tconst installRoot = getNpmInstallRoot(context, scope, temporary);\n\tensureNpmProject(installRoot);\n\tawait runNpmCommand(context, getNpmInstallArgs(context, [source.spec], installRoot));\n}\n\nexport async function uninstallNpm(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tscope: SourceScope,\n): Promise<void> {\n\tconst installRoot = getNpmInstallRoot(context, scope, false);\n\tif (!existsSync(installRoot)) {\n\t\treturn;\n\t}\n\tif (getPackageManagerName(context) === \"bun\") {\n\t\tawait runNpmCommand(context, [\"uninstall\", source.name, \"--cwd\", installRoot]);\n\t\treturn;\n\t}\n\tawait runNpmCommand(context, [\"uninstall\", source.name, \"--prefix\", installRoot]);\n}\n\nexport async function installNpmBatch(\n\tcontext: PackageManagerContext,\n\tspecs: string[],\n\tscope: InstalledSourceScope,\n): Promise<void> {\n\tconst installRoot = getNpmInstallRoot(context, scope, false);\n\tensureNpmProject(installRoot);\n\tawait runNpmCommand(context, getNpmInstallArgs(context, specs, installRoot));\n}\n\nfunction ensureNpmProject(installRoot: string): void {\n\tif (!existsSync(installRoot)) {\n\t\tmkdirSync(installRoot, { recursive: true });\n\t}\n\tmarkPathIgnoredByCloudSync(installRoot);\n\tensureGitIgnore(installRoot);\n\tconst packageJsonPath = join(installRoot, \"package.json\");\n\tif (!existsSync(packageJsonPath)) {\n\t\tconst pkgJson = { name: `${APP_NAME}-extensions`, private: true };\n\t\twriteFileSync(packageJsonPath, JSON.stringify(pkgJson, null, 2), \"utf-8\");\n\t}\n}\n\nexport function ensureGitIgnore(dir: string): void {\n\tif (!existsSync(dir)) {\n\t\tmkdirSync(dir, { recursive: true });\n\t}\n\tconst ignorePath = join(dir, \".gitignore\");\n\tif (!existsSync(ignorePath)) {\n\t\twriteFileSync(ignorePath, \"*\\n!.gitignore\\n\", \"utf-8\");\n\t}\n}\n\nexport function getManagedNpmInstallPath(\n\tcontext: PackageLocationContext,\n\tsource: NpmSource,\n\tscope: SourceScope,\n): string {\n\tif (scope === \"temporary\") {\n\t\treturn join(getNpmInstallRoot(context, scope, true), \"node_modules\", source.name);\n\t}\n\tif (scope === \"project\") {\n\t\treturn join(context.cwd, CONFIG_DIR_NAME, \"npm\", \"node_modules\", source.name);\n\t}\n\treturn join(context.agentDir, \"npm\", \"node_modules\", source.name);\n}\n\nexport function getGlobalNpmRoot(context: PackageManagerContext): string {\n\tconst npmCommand = getNpmCommand(context);\n\tconst commandKey = [npmCommand.command, ...npmCommand.args].join(\"\\0\");\n\tif (context.globalNpmRoot && context.globalNpmRootCommandKey === commandKey) {\n\t\treturn context.globalNpmRoot;\n\t}\n\tif (getPackageManagerName(context) === \"bun\") {\n\t\tconst binDir = runNpmCommandSync(context, [\"pm\", \"bin\", \"-g\"]).trim();\n\t\tcontext.globalNpmRoot = join(dirname(binDir), \"install\", \"global\", \"node_modules\");\n\t} else {\n\t\tcontext.globalNpmRoot = runNpmCommandSync(context, [\"root\", \"-g\"]).trim();\n\t}\n\tcontext.globalNpmRootCommandKey = commandKey;\n\treturn context.globalNpmRoot;\n}\n\nfunction getPnpmGlobalPackagePath(context: PackageManagerContext, packageName: string): string | undefined {\n\tif (getPackageManagerName(context) !== \"pnpm\") {\n\t\treturn undefined;\n\t}\n\tconst output = runNpmCommandSync(context, [\"list\", \"-g\", \"--depth\", \"0\", \"--json\"]);\n\tconst entries = JSON.parse(output) as Array<{ dependencies?: Record<string, { path?: string }> }>;\n\tfor (const entry of entries) {\n\t\tconst path = entry.dependencies?.[packageName]?.path;\n\t\tif (path) return path;\n\t}\n\treturn undefined;\n}\n\nfunction getLegacyGlobalNpmInstallPath(context: PackageManagerContext, source: NpmSource): string | undefined {\n\ttry {\n\t\tconst pnpmPath = getPnpmGlobalPackagePath(context, source.name);\n\t\tif (pnpmPath) return pnpmPath;\n\t\tconst globalRoot = context.driver?.getGlobalNpmRoot\n\t\t\t? context.driver.getGlobalNpmRoot()\n\t\t\t: getGlobalNpmRoot(context);\n\t\treturn join(globalRoot, source.name);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function getNpmInstallPath(context: PackageManagerContext, source: NpmSource, scope: SourceScope): string {\n\tconst managedPath = getManagedNpmInstallPath(context, source, scope);\n\tif (scope !== \"user\" || existsSync(managedPath)) {\n\t\treturn managedPath;\n\t}\n\tconst legacyPath = getLegacyGlobalNpmInstallPath(context, source);\n\treturn legacyPath && existsSync(legacyPath) ? legacyPath : managedPath;\n}\n\nexport function getExistingNpmInstallPath(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tscope: SourceScope,\n): string | undefined {\n\tconst candidates = [getNpmInstallPath(context, source, scope)];\n\tif (scope === \"project\") {\n\t\tfor (const configDir of getProjectConfigDirs(context.cwd)) {\n\t\t\tcandidates.push(join(configDir, \"npm\", \"node_modules\", source.name));\n\t\t}\n\t}\n\tfor (const candidate of Array.from(new Set(candidates))) {\n\t\tif (existsSync(candidate)) return candidate;\n\t}\n\treturn undefined;\n}\n\nexport async function installedNpmMatchesConfiguredVersion(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tinstalledPath: string,\n): Promise<boolean> {\n\tconst installedVersion = getInstalledNpmVersion(installedPath);\n\tif (!installedVersion) return false;\n\tif (source.range) return satisfies(installedVersion, source.range);\n\tif (source.version !== undefined) {\n\t\tif (isOfflineModeEnabled()) return true;\n\t\ttry {\n\t\t\tconst targetVersion = await getLatestNpmVersion(context, source.spec);\n\t\t\treturn installedVersion === targetVersion;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nexport async function npmHasAvailableUpdate(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tinstalledPath: string,\n): Promise<boolean> {\n\tif (isOfflineModeEnabled()) return false;\n\tconst installedVersion = getInstalledNpmVersion(installedPath);\n\tif (!installedVersion) return false;\n\ttry {\n\t\tconst targetVersion = await getLatestNpmVersion(\n\t\t\tcontext,\n\t\t\tsource.version ? source.spec : source.name,\n\t\t\tsource.range,\n\t\t);\n\t\treturn gt(targetVersion, installedVersion);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function getInstalledNpmVersion(installedPath: string): string | undefined {\n\tconst packageJsonPath = join(installedPath, \"package.json\");\n\tif (!existsSync(packageJsonPath)) return undefined;\n\ttry {\n\t\tconst content = readFileSync(packageJsonPath, \"utf-8\");\n\t\tconst pkg = JSON.parse(stripBom(content)) as { version?: string };\n\t\treturn pkg.version;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport async function getLatestNpmVersion(\n\tcontext: PackageManagerContext,\n\tpackageSpec: string,\n\trange?: string,\n): Promise<string> {\n\tconst npmCommand = getNpmCommand(context);\n\tconst stdout = context.driver\n\t\t? await context.driver.runCommandCapture(\n\t\t\t\tnpmCommand.command,\n\t\t\t\t[...npmCommand.args, \"view\", packageSpec, \"version\", \"--json\"],\n\t\t\t\t{\n\t\t\t\t\tcwd: context.cwd,\n\t\t\t\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\t\t\t},\n\t\t\t)\n\t\t: await runCommandCapture(npmCommand.command, [...npmCommand.args, \"view\", packageSpec, \"version\", \"--json\"], {\n\t\t\t\tcwd: context.cwd,\n\t\t\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\t\t});\n\tconst raw = stdout.trim();\n\tif (!raw) throw new Error(\"Empty response from npm view\");\n\tconst parsed = JSON.parse(raw) as string | string[];\n\tif (typeof parsed === \"string\") return parsed;\n\tif (Array.isArray(parsed)) {\n\t\tconst versions = parsed.filter((value) => typeof value === \"string\" && value.length > 0);\n\t\tconst latest = range ? maxSatisfying(versions, range) : [...versions].sort(rcompare)[0];\n\t\tif (latest) return latest;\n\t}\n\tthrow new Error(\"Unexpected response from npm view\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"package-manager-npm.js","sourceRoot":"","sources":["../../src/core/package-manager-npm.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { basename, dirname, join } from \"node:path\";\nimport { gt, maxSatisfying, rcompare, satisfies } from \"semver\";\nimport { APP_NAME, CONFIG_DIR_NAME, getProjectConfigDirs } from \"../config.js\";\nimport { markPathIgnoredByCloudSync } from \"../utils/paths.ts\";\nimport { stripBom } from \"../utils/text.ts\";\nimport { runCommand, runCommandCapture, runCommandSync } from \"./package-manager-command.ts\";\nimport { NETWORK_TIMEOUT_MS } from \"./package-manager-constants.ts\";\nimport { isOfflineModeEnabled } from \"./package-manager-env.ts\";\nimport { getNpmInstallRoot } from \"./package-manager-paths.ts\";\nimport type {\n\tInstalledSourceScope,\n\tNpmSource,\n\tPackageLocationContext,\n\tPackageManagerContext,\n\tSourceScope,\n} from \"./package-manager-types.ts\";\n\nexport function getNpmCommand(context: PackageManagerContext): { command: string; args: string[] } {\n\tconst configuredCommand = context.settingsManager.getNpmCommand();\n\tif (!configuredCommand || configuredCommand.length === 0) {\n\t\treturn { command: \"npm\", args: [] };\n\t}\n\tconst [command, ...args] = configuredCommand;\n\tif (!command) {\n\t\tthrow new Error(\"Invalid npmCommand: first array entry must be a non-empty command\");\n\t}\n\treturn { command, args };\n}\n\nexport function getPackageManagerName(context: PackageManagerContext): string {\n\tconst npmCommand = getNpmCommand(context);\n\tconst normalizeCommandName = (command: string): string => basename(command).replace(/\\.(cmd|exe)$/i, \"\");\n\tconst supportedPackageManagers = new Set([\"npm\", \"pnpm\", \"bun\"]);\n\tconst directCommand = normalizeCommandName(npmCommand.command);\n\tconst separatorIndex = npmCommand.args.lastIndexOf(\"--\");\n\tif (separatorIndex >= 0) {\n\t\tconst wrappedCommand = npmCommand.args[separatorIndex + 1];\n\t\treturn wrappedCommand ? normalizeCommandName(wrappedCommand) : directCommand;\n\t}\n\tif (supportedPackageManagers.has(directCommand)) return directCommand;\n\n\tconst wrappedPackageManagers = [\n\t\t...new Set(npmCommand.args.map(normalizeCommandName).filter((command) => supportedPackageManagers.has(command))),\n\t];\n\tif (wrappedPackageManagers.length > 1) {\n\t\tthrow new Error(`Ambiguous npmCommand package managers: ${wrappedPackageManagers.join(\", \")}`);\n\t}\n\treturn wrappedPackageManagers[0] ?? directCommand;\n}\n\nexport async function runNpmCommand(\n\tcontext: PackageManagerContext,\n\targs: string[],\n\toptions?: { cwd?: string },\n): Promise<void> {\n\tconst npmCommand = getNpmCommand(context);\n\tif (context.driver) {\n\t\tawait context.driver.runCommand(npmCommand.command, [...npmCommand.args, ...args], options);\n\t\treturn;\n\t}\n\tawait runCommand(npmCommand.command, [...npmCommand.args, ...args], options);\n}\n\nexport function runNpmCommandSync(context: PackageManagerContext, args: string[]): string {\n\tconst npmCommand = getNpmCommand(context);\n\tif (context.driver) {\n\t\treturn context.driver.runCommandSync(npmCommand.command, [...npmCommand.args, ...args]);\n\t}\n\treturn runCommandSync(npmCommand.command, [...npmCommand.args, ...args]);\n}\n\nexport function getGitDependencyInstallArgs(context: PackageManagerContext): string[] {\n\tswitch (getPackageManagerName(context)) {\n\t\tcase \"bun\":\n\t\t\treturn [\"install\", \"--omit=dev\", \"--omit=peer\"];\n\t\tcase \"pnpm\":\n\t\t\treturn [\n\t\t\t\t\"install\",\n\t\t\t\t\"--prod\",\n\t\t\t\t\"--config.auto-install-peers=false\",\n\t\t\t\t\"--config.strict-peer-dependencies=false\",\n\t\t\t\t\"--config.strict-dep-builds=false\",\n\t\t\t];\n\t\tcase \"npm\":\n\t\t\treturn [\"install\", \"--omit=dev\", \"--legacy-peer-deps\", \"--no-audit\", \"--no-fund\"];\n\t\tdefault:\n\t\t\treturn [\"install\"];\n\t}\n}\n\nexport function getNpmInstallArgs(context: PackageManagerContext, specs: string[], installRoot: string): string[] {\n\tconst packageManagerName = getPackageManagerName(context);\n\tif (packageManagerName === \"bun\") {\n\t\treturn [\"install\", ...specs, \"--cwd\", installRoot, \"--omit=peer\"];\n\t}\n\tif (packageManagerName === \"pnpm\") {\n\t\treturn [\n\t\t\t\"install\",\n\t\t\t...specs,\n\t\t\t\"--prefix\",\n\t\t\tinstallRoot,\n\t\t\t\"--config.auto-install-peers=false\",\n\t\t\t\"--config.strict-peer-dependencies=false\",\n\t\t\t\"--config.strict-dep-builds=false\",\n\t\t];\n\t}\n\t// npm audit fix would run without --legacy-peer-deps and install Atomic peers, so skip audit advice.\n\treturn [\"install\", ...specs, \"--prefix\", installRoot, \"--legacy-peer-deps\", \"--no-audit\", \"--no-fund\"];\n}\n\nexport async function installNpm(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tscope: SourceScope,\n\ttemporary: boolean,\n): Promise<void> {\n\tconst installRoot = getNpmInstallRoot(context, scope, temporary);\n\tensureNpmProject(installRoot);\n\tawait runNpmCommand(context, getNpmInstallArgs(context, [source.spec], installRoot));\n}\n\nexport async function uninstallNpm(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tscope: SourceScope,\n): Promise<void> {\n\tconst installRoot = getNpmInstallRoot(context, scope, false);\n\tif (!existsSync(installRoot)) {\n\t\treturn;\n\t}\n\tif (getPackageManagerName(context) === \"bun\") {\n\t\tawait runNpmCommand(context, [\"uninstall\", source.name, \"--cwd\", installRoot]);\n\t\treturn;\n\t}\n\tconst args = [\"uninstall\", source.name, \"--prefix\", installRoot];\n\tif (getPackageManagerName(context) !== \"pnpm\") args.push(\"--no-audit\", \"--no-fund\");\n\tawait runNpmCommand(context, args);\n}\n\nexport async function installNpmBatch(\n\tcontext: PackageManagerContext,\n\tspecs: string[],\n\tscope: InstalledSourceScope,\n): Promise<void> {\n\tconst installRoot = getNpmInstallRoot(context, scope, false);\n\tensureNpmProject(installRoot);\n\tawait runNpmCommand(context, getNpmInstallArgs(context, specs, installRoot));\n}\n\nfunction ensureNpmProject(installRoot: string): void {\n\tif (!existsSync(installRoot)) {\n\t\tmkdirSync(installRoot, { recursive: true });\n\t}\n\tmarkPathIgnoredByCloudSync(installRoot);\n\tensureGitIgnore(installRoot);\n\tconst packageJsonPath = join(installRoot, \"package.json\");\n\tif (!existsSync(packageJsonPath)) {\n\t\tconst pkgJson = { name: `${APP_NAME}-extensions`, private: true };\n\t\twriteFileSync(packageJsonPath, JSON.stringify(pkgJson, null, 2), \"utf-8\");\n\t}\n}\n\nexport function ensureGitIgnore(dir: string): void {\n\tif (!existsSync(dir)) {\n\t\tmkdirSync(dir, { recursive: true });\n\t}\n\tconst ignorePath = join(dir, \".gitignore\");\n\tif (!existsSync(ignorePath)) {\n\t\twriteFileSync(ignorePath, \"*\\n!.gitignore\\n\", \"utf-8\");\n\t}\n}\n\nexport function getManagedNpmInstallPath(\n\tcontext: PackageLocationContext,\n\tsource: NpmSource,\n\tscope: SourceScope,\n): string {\n\tif (scope === \"temporary\") {\n\t\treturn join(getNpmInstallRoot(context, scope, true), \"node_modules\", source.name);\n\t}\n\tif (scope === \"project\") {\n\t\treturn join(context.cwd, CONFIG_DIR_NAME, \"npm\", \"node_modules\", source.name);\n\t}\n\treturn join(context.agentDir, \"npm\", \"node_modules\", source.name);\n}\n\nexport function getGlobalNpmRoot(context: PackageManagerContext): string {\n\tconst npmCommand = getNpmCommand(context);\n\tconst commandKey = [npmCommand.command, ...npmCommand.args].join(\"\\0\");\n\tif (context.globalNpmRoot && context.globalNpmRootCommandKey === commandKey) {\n\t\treturn context.globalNpmRoot;\n\t}\n\tif (getPackageManagerName(context) === \"bun\") {\n\t\tconst binDir = runNpmCommandSync(context, [\"pm\", \"bin\", \"-g\"]).trim();\n\t\tcontext.globalNpmRoot = join(dirname(binDir), \"install\", \"global\", \"node_modules\");\n\t} else {\n\t\tcontext.globalNpmRoot = runNpmCommandSync(context, [\"root\", \"-g\"]).trim();\n\t}\n\tcontext.globalNpmRootCommandKey = commandKey;\n\treturn context.globalNpmRoot;\n}\n\nfunction getPnpmGlobalPackagePath(context: PackageManagerContext, packageName: string): string | undefined {\n\tif (getPackageManagerName(context) !== \"pnpm\") {\n\t\treturn undefined;\n\t}\n\tconst output = runNpmCommandSync(context, [\"list\", \"-g\", \"--depth\", \"0\", \"--json\"]);\n\tconst entries = JSON.parse(output) as Array<{ dependencies?: Record<string, { path?: string }> }>;\n\tfor (const entry of entries) {\n\t\tconst path = entry.dependencies?.[packageName]?.path;\n\t\tif (path) return path;\n\t}\n\treturn undefined;\n}\n\nfunction getLegacyGlobalNpmInstallPath(context: PackageManagerContext, source: NpmSource): string | undefined {\n\ttry {\n\t\tconst pnpmPath = getPnpmGlobalPackagePath(context, source.name);\n\t\tif (pnpmPath) return pnpmPath;\n\t\tconst globalRoot = context.driver?.getGlobalNpmRoot\n\t\t\t? context.driver.getGlobalNpmRoot()\n\t\t\t: getGlobalNpmRoot(context);\n\t\treturn join(globalRoot, source.name);\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport function getNpmInstallPath(context: PackageManagerContext, source: NpmSource, scope: SourceScope): string {\n\tconst managedPath = getManagedNpmInstallPath(context, source, scope);\n\tif (scope !== \"user\" || existsSync(managedPath)) {\n\t\treturn managedPath;\n\t}\n\tconst legacyPath = getLegacyGlobalNpmInstallPath(context, source);\n\treturn legacyPath && existsSync(legacyPath) ? legacyPath : managedPath;\n}\n\nexport function getExistingNpmInstallPath(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tscope: SourceScope,\n): string | undefined {\n\tconst candidates = [getNpmInstallPath(context, source, scope)];\n\tif (scope === \"project\") {\n\t\tfor (const configDir of getProjectConfigDirs(context.cwd)) {\n\t\t\tcandidates.push(join(configDir, \"npm\", \"node_modules\", source.name));\n\t\t}\n\t}\n\tfor (const candidate of Array.from(new Set(candidates))) {\n\t\tif (existsSync(candidate)) return candidate;\n\t}\n\treturn undefined;\n}\n\nexport async function installedNpmMatchesConfiguredVersion(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tinstalledPath: string,\n): Promise<boolean> {\n\tconst installedVersion = getInstalledNpmVersion(installedPath);\n\tif (!installedVersion) return false;\n\tif (source.range) return satisfies(installedVersion, source.range);\n\tif (source.version !== undefined) {\n\t\tif (isOfflineModeEnabled()) return true;\n\t\ttry {\n\t\t\tconst targetVersion = await getLatestNpmVersion(context, source.spec);\n\t\t\treturn installedVersion === targetVersion;\n\t\t} catch {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nexport async function npmHasAvailableUpdate(\n\tcontext: PackageManagerContext,\n\tsource: NpmSource,\n\tinstalledPath: string,\n): Promise<boolean> {\n\tif (isOfflineModeEnabled()) return false;\n\tconst installedVersion = getInstalledNpmVersion(installedPath);\n\tif (!installedVersion) return false;\n\ttry {\n\t\tconst targetVersion = await getLatestNpmVersion(\n\t\t\tcontext,\n\t\t\tsource.version ? source.spec : source.name,\n\t\t\tsource.range,\n\t\t);\n\t\treturn gt(targetVersion, installedVersion);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function getInstalledNpmVersion(installedPath: string): string | undefined {\n\tconst packageJsonPath = join(installedPath, \"package.json\");\n\tif (!existsSync(packageJsonPath)) return undefined;\n\ttry {\n\t\tconst content = readFileSync(packageJsonPath, \"utf-8\");\n\t\tconst pkg = JSON.parse(stripBom(content)) as { version?: string };\n\t\treturn pkg.version;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nexport async function getLatestNpmVersion(\n\tcontext: PackageManagerContext,\n\tpackageSpec: string,\n\trange?: string,\n): Promise<string> {\n\tconst npmCommand = getNpmCommand(context);\n\tconst stdout = context.driver\n\t\t? await context.driver.runCommandCapture(\n\t\t\t\tnpmCommand.command,\n\t\t\t\t[...npmCommand.args, \"view\", packageSpec, \"version\", \"--json\"],\n\t\t\t\t{\n\t\t\t\t\tcwd: context.cwd,\n\t\t\t\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\t\t\t},\n\t\t\t)\n\t\t: await runCommandCapture(npmCommand.command, [...npmCommand.args, \"view\", packageSpec, \"version\", \"--json\"], {\n\t\t\t\tcwd: context.cwd,\n\t\t\t\ttimeoutMs: NETWORK_TIMEOUT_MS,\n\t\t\t});\n\tconst raw = stdout.trim();\n\tif (!raw) throw new Error(\"Empty response from npm view\");\n\tconst parsed = JSON.parse(raw) as string | string[];\n\tif (typeof parsed === \"string\") return parsed;\n\tif (Array.isArray(parsed)) {\n\t\tconst versions = parsed.filter((value) => typeof value === \"string\" && value.length > 0);\n\t\tconst latest = range ? maxSatisfying(versions, range) : [...versions].sort(rcompare)[0];\n\t\tif (latest) return latest;\n\t}\n\tthrow new Error(\"Unexpected response from npm view\");\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-composer.d.ts","sourceRoot":"","sources":["../../src/core/provider-composer.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,QAAQ,EAUb,KAAK,QAAQ,EACb,KAAK,eAAe,EAIpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAkBvF,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC7G,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAMnE,wBAAgB,yBAAyB,CACxC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,YAAY,EAAE,kBAAkB,GAAG,SAAS,EAC5C,SAAS,EAAE,mBAAmB,GAC5B,IAAI,CAcN;AAED,uFAAuF;AACvF,wBAAgB,oBAAoB,CACnC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,mBAAmB,GAAG,SAAS,GACxC,QAAQ,
|
|
1
|
+
{"version":3,"file":"provider-composer.d.ts","sourceRoot":"","sources":["../../src/core/provider-composer.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,QAAQ,EAUb,KAAK,QAAQ,EACb,KAAK,eAAe,EAIpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAkBvF,YAAY,EAAE,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAC7G,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAMnE,wBAAgB,yBAAyB,CACxC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,YAAY,EAAE,kBAAkB,GAAG,SAAS,EAC5C,SAAS,EAAE,mBAAmB,GAC5B,IAAI,CAcN;AAED,uFAAuF;AACvF,wBAAgB,oBAAoB,CACnC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,QAAQ,GAAG,SAAS,EAC1B,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,mBAAmB,GAAG,SAAS,GACxC,QAAQ,CA0JV;AAED,wBAAgB,6BAA6B,CAC5C,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,kBAAkB,GAAG,SAAS,EACtC,SAAS,EAAE,mBAAmB,GAAG,SAAS,EAC1C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAMpC;AAED,MAAM,WAAW,0BAA0B;IAC1C,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,iCAAiC,CAChD,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,kBAAkB,GAAG,SAAS,EACtC,SAAS,EAAE,mBAAmB,GAAG,SAAS,GACxC,0BAA0B,CAS5B;AAED,wBAAgB,2BAA2B,CAC1C,MAAM,EAAE,kBAAkB,GAAG,SAAS,EACtC,SAAS,EAAE,mBAAmB,GAAG,SAAS,GACxC,UAAU,GAAG,SAAS,CAWxB"}
|
|
@@ -99,17 +99,25 @@ export function composeModelProvider(providerId, base, modelConfig, extension) {
|
|
|
99
99
|
}
|
|
100
100
|
: undefined,
|
|
101
101
|
filterModels: base?.filterModels
|
|
102
|
-
? (models, credential) =>
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
102
|
+
? (models, credential) => {
|
|
103
|
+
// Models the user defines in models.json are an explicit choice: the base provider's
|
|
104
|
+
// account filter (such as GitHub Copilot's model list) must not hide them.
|
|
105
|
+
const isConfigured = (model) => config?.models?.some((entry) => entry.id === model.id) === true;
|
|
106
|
+
const filtered = new Map(base.filterModels(models, credential).map((model) => [model.id, model]));
|
|
107
|
+
return models.flatMap((original) => {
|
|
108
|
+
if (isConfigured(original))
|
|
109
|
+
return [original];
|
|
110
|
+
const model = filtered.get(original.id);
|
|
111
|
+
if (model === undefined)
|
|
112
|
+
return [];
|
|
113
|
+
const inheritedContext = model.fastRoute
|
|
114
|
+
? config?.modelOverrides?.[model.fastRoute.baseModelId]?.contextWindow
|
|
115
|
+
: undefined;
|
|
116
|
+
const personalized = inheritedContext === undefined ? model : { ...model, contextWindow: inheritedContext };
|
|
117
|
+
const override = config?.modelOverrides?.[model.id];
|
|
118
|
+
return [override ? applyModelOverride(personalized, override) : personalized];
|
|
119
|
+
});
|
|
120
|
+
}
|
|
113
121
|
: undefined,
|
|
114
122
|
filterAllModels: base?.filterAllModels
|
|
115
123
|
? (models, credential) => base.filterAllModels(models, credential)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-composer.js","sourceRoot":"","sources":["../../src/core/provider-composer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype AnyModel,\n\ttype Api,\n\ttype AssistantMessageEventStream,\n\ttype Credential,\n\tclassifierErrorResult,\n\timageErrorResult,\n\tisModelType,\n\tlazyStream,\n\ttype Model,\n\ttype OAuthCredentials,\n\ttype Provider,\n\ttype ProviderHeaders,\n\ttype SimpleStreamOptions,\n\ttype StreamOptions,\n\ttype TranscriptContext,\n} from \"@bastani/pi-ai\";\nimport { getApiProvider } from \"@bastani/pi-ai/compat\";\nimport type { ModelConfig, ModelsJsonProvider } from \"./model-config.ts\";\nimport type { AuthStatus, ProviderConfigInput } from \"./provider-composer-internal.ts\";\nimport {\n\tapplyExtension,\n\tapplyModelOverride,\n\tapplyModelsJson,\n\tcomposeApiKeyAuth,\n\tcomposeOAuthAuth,\n\tconfiguredApiKey,\n\tconfiguredHeaders,\n\trawModelHeaders,\n} from \"./provider-composer-internal.ts\";\nimport {\n\tgetConfigValueEnvVarNames,\n\tisCommandConfigValue,\n\tisConfigValueConfigured,\n\tresolveHeadersOrThrow,\n} from \"./resolve-config-value.ts\";\n\nexport type { AuthStatus, ExtensionOAuthConfig, ProviderConfigInput } from \"./provider-composer-internal.ts\";\nexport { clearApiKeyCache } from \"./provider-composer-internal.ts\";\n\nfunction getAllProviderModels(provider: Provider | undefined): readonly AnyModel[] {\n\treturn provider ? (provider.getAllModels?.() ?? provider.getModels()) : [];\n}\n\nexport function validateExtensionProvider(\n\tproviderId: string,\n\tbase: Provider | undefined,\n\tmodelsConfig: ModelsJsonProvider | undefined,\n\textension: ProviderConfigInput,\n): void {\n\tif (extension.aliasOf !== undefined) {\n\t\tif (!providerId.trim() || !extension.aliasOf.trim() || providerId === extension.aliasOf) {\n\t\t\tthrow new Error(\"A provider alias needs distinct, non-empty alias and source IDs.\");\n\t\t}\n\t\tif (Object.keys(extension).some((key) => ![\"aliasOf\", \"name\"].includes(key))) {\n\t\t\tthrow new Error(\"Provider aliases accept only aliasOf and name; configure the source provider instead.\");\n\t\t}\n\t\treturn;\n\t}\n\tif (extension.streamSimple && !extension.api) {\n\t\tthrow new Error(`Provider ${providerId}: \"api\" is required when registering streamSimple.`);\n\t}\n\tapplyExtension(providerId, applyModelsJson(providerId, getAllProviderModels(base), modelsConfig), extension);\n}\n\n/** Compose built-in, models.json, and extension layers without reading credentials. */\nexport function composeModelProvider(\n\tproviderId: string,\n\tbase: Provider | undefined,\n\tmodelConfig: ModelConfig,\n\textension: ProviderConfigInput | undefined,\n): Provider {\n\tconst config = modelConfig.getProvider(providerId);\n\tlet extensionOAuthCredential: OAuthCredentials | undefined;\n\tlet refreshedExtensionModels: ProviderConfigInput[\"models\"];\n\tconst currentExtension = (): ProviderConfigInput | undefined =>\n\t\textension && refreshedExtensionModels ? { ...extension, models: refreshedExtensionModels } : extension;\n\t// models.json modelOverrides are the topmost user-config layer: they apply once,\n\t// after custom-model upserts, extension model replacement, and legacy OAuth projection.\n\tconst getAllModels = (): AnyModel[] => {\n\t\tlet models = applyExtension(\n\t\t\tproviderId,\n\t\t\tapplyModelsJson(providerId, getAllProviderModels(base), config),\n\t\t\tcurrentExtension(),\n\t\t);\n\t\tif (extensionOAuthCredential && extension?.oauth?.modifyModels) {\n\t\t\t// The extension hook is chat-only; other model types pass through untouched.\n\t\t\tmodels = [\n\t\t\t\t...extension.oauth.modifyModels(\n\t\t\t\t\tmodels.filter((model) => isModelType(model, \"chat\")),\n\t\t\t\t\textensionOAuthCredential,\n\t\t\t\t),\n\t\t\t\t...models.filter((model) => !isModelType(model, \"chat\")),\n\t\t\t];\n\t\t}\n\t\treturn models.map((model) => {\n\t\t\tconst override = config?.modelOverrides?.[model.id];\n\t\t\treturn override && isModelType(model, \"chat\") ? applyModelOverride(model, override) : model;\n\t\t});\n\t};\n\t// Validate eagerly so registration/reload reports structural errors immediately.\n\tgetAllModels();\n\tconst apiKey = composeApiKeyAuth(providerId, base, config, extension);\n\tconst oauth = composeOAuthAuth(providerId, base, config, extension);\n\tif (!apiKey && !oauth) throw new Error(`Provider ${providerId}: no authentication method configured.`);\n\n\tconst supportsBaseApi = (model: Model<Api>) => base?.getModels().some((entry) => entry.api === model.api) ?? false;\n\tconst streamWith = (\n\t\tmodel: Model<Api>,\n\t\tcontext: TranscriptContext,\n\t\toptions: StreamOptions | undefined,\n\t\tsimple: boolean,\n\t): AssistantMessageEventStream =>\n\t\tlazyStream(model, async () => {\n\t\t\tif (extension?.streamSimple && model.api === extension.api) {\n\t\t\t\treturn extension.streamSimple(model, context, options as SimpleStreamOptions);\n\t\t\t}\n\t\t\tif (base && supportsBaseApi(model)) {\n\t\t\t\treturn simple\n\t\t\t\t\t? base.streamSimple(model, context, options as SimpleStreamOptions)\n\t\t\t\t\t: base.stream(model, context, options);\n\t\t\t}\n\t\t\tconst api = getApiProvider(model.api);\n\t\t\tif (!api) throw new Error(`No API provider registered for api: ${model.api}`);\n\t\t\treturn simple\n\t\t\t\t? api.streamSimple(model, context, options as SimpleStreamOptions)\n\t\t\t\t: api.stream(model, context, options);\n\t\t});\n\n\tconst provider: Provider = {\n\t\tid: providerId,\n\t\tname: extension?.name ?? config?.name ?? base?.name ?? extension?.oauth?.name ?? providerId,\n\t\tbaseUrl: extension?.baseUrl ?? config?.baseUrl ?? base?.baseUrl,\n\t\theaders: base?.headers,\n\t\tauth: { ...(apiKey ? { apiKey } : {}), ...(oauth ? { oauth } : {}) },\n\t\tgetModels: () => getAllModels().filter((model) => isModelType(model, \"chat\")),\n\t\tgetAllModels,\n\t\trefreshModels:\n\t\t\tbase?.refreshModels || extension?.refreshModels || extension?.oauth?.modifyModels\n\t\t\t\t? async (context) => {\n\t\t\t\t\t\tawait base?.refreshModels?.(context);\n\t\t\t\t\t\tlet refreshed: NonNullable<ProviderConfigInput[\"models\"]> | undefined;\n\t\t\t\t\t\tif (extension?.refreshModels) refreshed = await extension.refreshModels(context);\n\t\t\t\t\t\tif (context.signal.aborted) return;\n\t\t\t\t\t\tconst oauthCredential = context.credential?.type === \"oauth\" ? context.credential : undefined;\n\t\t\t\t\t\tawait context.publish({\n\t\t\t\t\t\t\tupdate: () => {\n\t\t\t\t\t\t\t\tif (refreshed) {\n\t\t\t\t\t\t\t\t\t// Validate before publishing the new synchronous list.\n\t\t\t\t\t\t\t\t\tapplyExtension(providerId, applyModelsJson(providerId, getAllProviderModels(base), config), {\n\t\t\t\t\t\t\t\t\t\t...extension,\n\t\t\t\t\t\t\t\t\t\tmodels: refreshed,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\trefreshedExtensionModels = refreshed;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\textensionOAuthCredential = oauthCredential;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\tfilterModels: base?.filterModels\n\t\t\t? (models, credential: Credential | undefined) =>\n\t\t\t\t\tbase.filterModels!(models, credential).map((model) => {\n\t\t\t\t\t\tconst original = models.find((entry) => entry.id === model.id);\n\t\t\t\t\t\tif (config?.models?.some((entry) => entry.id === model.id)) return original ?? model;\n\t\t\t\t\t\tconst inheritedContext = model.fastRoute\n\t\t\t\t\t\t\t? config?.modelOverrides?.[model.fastRoute.baseModelId]?.contextWindow\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tconst personalized =\n\t\t\t\t\t\t\tinheritedContext === undefined ? model : { ...model, contextWindow: inheritedContext };\n\t\t\t\t\t\tconst override = config?.modelOverrides?.[model.id];\n\t\t\t\t\t\treturn override ? applyModelOverride(personalized, override) : personalized;\n\t\t\t\t\t})\n\t\t\t: undefined,\n\t\tfilterAllModels: base?.filterAllModels\n\t\t\t? (models, credential: Credential | undefined) => base.filterAllModels!(models, credential)\n\t\t\t: undefined,\n\t\tstream: (model, context, options) => streamWith(model, context, options, false),\n\t\tstreamSimple: (model, context, options) => streamWith(model, context, options, true),\n\t};\n\n\tconst fetchDeferred = base?.fetchDeferred;\n\tif (fetchDeferred) {\n\t\tprovider.fetchDeferred = (model, handle, options) => fetchDeferred(model, handle, options);\n\t}\n\tconst cancelDeferred = base?.cancelDeferred;\n\tif (cancelDeferred) {\n\t\tprovider.cancelDeferred = (model, handle, options) => cancelDeferred(model, handle, options);\n\t}\n\tconst extensionImages = extension?.images;\n\tconst generateImages = base?.generateImages;\n\tif (generateImages || Object.keys(extensionImages ?? {}).length > 0) {\n\t\tprovider.generateImages = (model, context, options) => {\n\t\t\tconst implementation = extensionImages?.[model.api];\n\t\t\tif (implementation) return implementation.generateImages(model, context, options);\n\t\t\tif (generateImages) return generateImages(model, context, options);\n\t\t\treturn Promise.resolve(\n\t\t\t\timageErrorResult(model, new Error(`Provider ${providerId} has no image implementation for \"${model.api}\"`)),\n\t\t\t);\n\t\t};\n\t}\n\tconst extensionClassifiers = extension?.classifiers;\n\tconst classify = base?.classify;\n\tif (classify || Object.keys(extensionClassifiers ?? {}).length > 0) {\n\t\tprovider.classify = (model, context, options) => {\n\t\t\tconst implementation = extensionClassifiers?.[model.api];\n\t\t\tif (implementation) return implementation.classify(model, context, options);\n\t\t\tif (classify) return classify(model, context, options);\n\t\t\treturn Promise.resolve(\n\t\t\t\tclassifierErrorResult(\n\t\t\t\t\tmodel,\n\t\t\t\t\tnew Error(`Provider ${providerId} has no classifier implementation for \"${model.api}\"`),\n\t\t\t\t),\n\t\t\t);\n\t\t};\n\t}\n\n\treturn provider;\n}\n\nexport function resolveConfiguredModelHeaders(\n\tmodel: AnyModel,\n\tconfig: ModelsJsonProvider | undefined,\n\textension: ProviderConfigInput | undefined,\n\tenv?: Record<string, string>,\n): Record<string, string> | undefined {\n\treturn resolveHeadersOrThrow(\n\t\trawModelHeaders(model, config, extension),\n\t\t`model \"${model.provider}/${model.id}\"`,\n\t\tenv,\n\t);\n}\n\nexport interface CompatibilityRequestConfig {\n\theaders?: ProviderHeaders;\n\tauthHeader: boolean;\n}\n\nexport function resolveCompatibilityRequestConfig(\n\tmodel: AnyModel,\n\tconfig: ModelsJsonProvider | undefined,\n\textension: ProviderConfigInput | undefined,\n): CompatibilityRequestConfig {\n\tconst configured = resolveHeadersOrThrow(\n\t\t{ ...configuredHeaders(config, extension), ...rawModelHeaders(model, config, extension) },\n\t\t`model \"${model.provider}/${model.id}\"`,\n\t);\n\treturn {\n\t\theaders: model.headers || configured ? { ...model.headers, ...configured } : undefined,\n\t\tauthHeader: extension?.authHeader ?? config?.authHeader ?? false,\n\t};\n}\n\nexport function configuredRequestAuthStatus(\n\tconfig: ModelsJsonProvider | undefined,\n\textension: ProviderConfigInput | undefined,\n): AuthStatus | undefined {\n\tconst value = configuredApiKey(config, extension);\n\tif (value === undefined) return undefined;\n\tif (isCommandConfigValue(value)) return { configured: true, source: \"models_json_command\" };\n\tconst names = getConfigValueEnvVarNames(value);\n\tif (names.length > 0) {\n\t\treturn isConfigValueConfigured(value)\n\t\t\t? { configured: true, source: \"environment\", label: names.join(\", \") }\n\t\t\t: { configured: false };\n\t}\n\treturn { configured: true, source: extension?.apiKey !== undefined ? \"fallback\" : \"models_json_key\" };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"provider-composer.js","sourceRoot":"","sources":["../../src/core/provider-composer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype AnyModel,\n\ttype Api,\n\ttype AssistantMessageEventStream,\n\ttype Credential,\n\tclassifierErrorResult,\n\timageErrorResult,\n\tisModelType,\n\tlazyStream,\n\ttype Model,\n\ttype OAuthCredentials,\n\ttype Provider,\n\ttype ProviderHeaders,\n\ttype SimpleStreamOptions,\n\ttype StreamOptions,\n\ttype TranscriptContext,\n} from \"@bastani/pi-ai\";\nimport { getApiProvider } from \"@bastani/pi-ai/compat\";\nimport type { ModelConfig, ModelsJsonProvider } from \"./model-config.ts\";\nimport type { AuthStatus, ProviderConfigInput } from \"./provider-composer-internal.ts\";\nimport {\n\tapplyExtension,\n\tapplyModelOverride,\n\tapplyModelsJson,\n\tcomposeApiKeyAuth,\n\tcomposeOAuthAuth,\n\tconfiguredApiKey,\n\tconfiguredHeaders,\n\trawModelHeaders,\n} from \"./provider-composer-internal.ts\";\nimport {\n\tgetConfigValueEnvVarNames,\n\tisCommandConfigValue,\n\tisConfigValueConfigured,\n\tresolveHeadersOrThrow,\n} from \"./resolve-config-value.ts\";\n\nexport type { AuthStatus, ExtensionOAuthConfig, ProviderConfigInput } from \"./provider-composer-internal.ts\";\nexport { clearApiKeyCache } from \"./provider-composer-internal.ts\";\n\nfunction getAllProviderModels(provider: Provider | undefined): readonly AnyModel[] {\n\treturn provider ? (provider.getAllModels?.() ?? provider.getModels()) : [];\n}\n\nexport function validateExtensionProvider(\n\tproviderId: string,\n\tbase: Provider | undefined,\n\tmodelsConfig: ModelsJsonProvider | undefined,\n\textension: ProviderConfigInput,\n): void {\n\tif (extension.aliasOf !== undefined) {\n\t\tif (!providerId.trim() || !extension.aliasOf.trim() || providerId === extension.aliasOf) {\n\t\t\tthrow new Error(\"A provider alias needs distinct, non-empty alias and source IDs.\");\n\t\t}\n\t\tif (Object.keys(extension).some((key) => ![\"aliasOf\", \"name\"].includes(key))) {\n\t\t\tthrow new Error(\"Provider aliases accept only aliasOf and name; configure the source provider instead.\");\n\t\t}\n\t\treturn;\n\t}\n\tif (extension.streamSimple && !extension.api) {\n\t\tthrow new Error(`Provider ${providerId}: \"api\" is required when registering streamSimple.`);\n\t}\n\tapplyExtension(providerId, applyModelsJson(providerId, getAllProviderModels(base), modelsConfig), extension);\n}\n\n/** Compose built-in, models.json, and extension layers without reading credentials. */\nexport function composeModelProvider(\n\tproviderId: string,\n\tbase: Provider | undefined,\n\tmodelConfig: ModelConfig,\n\textension: ProviderConfigInput | undefined,\n): Provider {\n\tconst config = modelConfig.getProvider(providerId);\n\tlet extensionOAuthCredential: OAuthCredentials | undefined;\n\tlet refreshedExtensionModels: ProviderConfigInput[\"models\"];\n\tconst currentExtension = (): ProviderConfigInput | undefined =>\n\t\textension && refreshedExtensionModels ? { ...extension, models: refreshedExtensionModels } : extension;\n\t// models.json modelOverrides are the topmost user-config layer: they apply once,\n\t// after custom-model upserts, extension model replacement, and legacy OAuth projection.\n\tconst getAllModels = (): AnyModel[] => {\n\t\tlet models = applyExtension(\n\t\t\tproviderId,\n\t\t\tapplyModelsJson(providerId, getAllProviderModels(base), config),\n\t\t\tcurrentExtension(),\n\t\t);\n\t\tif (extensionOAuthCredential && extension?.oauth?.modifyModels) {\n\t\t\t// The extension hook is chat-only; other model types pass through untouched.\n\t\t\tmodels = [\n\t\t\t\t...extension.oauth.modifyModels(\n\t\t\t\t\tmodels.filter((model) => isModelType(model, \"chat\")),\n\t\t\t\t\textensionOAuthCredential,\n\t\t\t\t),\n\t\t\t\t...models.filter((model) => !isModelType(model, \"chat\")),\n\t\t\t];\n\t\t}\n\t\treturn models.map((model) => {\n\t\t\tconst override = config?.modelOverrides?.[model.id];\n\t\t\treturn override && isModelType(model, \"chat\") ? applyModelOverride(model, override) : model;\n\t\t});\n\t};\n\t// Validate eagerly so registration/reload reports structural errors immediately.\n\tgetAllModels();\n\tconst apiKey = composeApiKeyAuth(providerId, base, config, extension);\n\tconst oauth = composeOAuthAuth(providerId, base, config, extension);\n\tif (!apiKey && !oauth) throw new Error(`Provider ${providerId}: no authentication method configured.`);\n\n\tconst supportsBaseApi = (model: Model<Api>) => base?.getModels().some((entry) => entry.api === model.api) ?? false;\n\tconst streamWith = (\n\t\tmodel: Model<Api>,\n\t\tcontext: TranscriptContext,\n\t\toptions: StreamOptions | undefined,\n\t\tsimple: boolean,\n\t): AssistantMessageEventStream =>\n\t\tlazyStream(model, async () => {\n\t\t\tif (extension?.streamSimple && model.api === extension.api) {\n\t\t\t\treturn extension.streamSimple(model, context, options as SimpleStreamOptions);\n\t\t\t}\n\t\t\tif (base && supportsBaseApi(model)) {\n\t\t\t\treturn simple\n\t\t\t\t\t? base.streamSimple(model, context, options as SimpleStreamOptions)\n\t\t\t\t\t: base.stream(model, context, options);\n\t\t\t}\n\t\t\tconst api = getApiProvider(model.api);\n\t\t\tif (!api) throw new Error(`No API provider registered for api: ${model.api}`);\n\t\t\treturn simple\n\t\t\t\t? api.streamSimple(model, context, options as SimpleStreamOptions)\n\t\t\t\t: api.stream(model, context, options);\n\t\t});\n\n\tconst provider: Provider = {\n\t\tid: providerId,\n\t\tname: extension?.name ?? config?.name ?? base?.name ?? extension?.oauth?.name ?? providerId,\n\t\tbaseUrl: extension?.baseUrl ?? config?.baseUrl ?? base?.baseUrl,\n\t\theaders: base?.headers,\n\t\tauth: { ...(apiKey ? { apiKey } : {}), ...(oauth ? { oauth } : {}) },\n\t\tgetModels: () => getAllModels().filter((model) => isModelType(model, \"chat\")),\n\t\tgetAllModels,\n\t\trefreshModels:\n\t\t\tbase?.refreshModels || extension?.refreshModels || extension?.oauth?.modifyModels\n\t\t\t\t? async (context) => {\n\t\t\t\t\t\tawait base?.refreshModels?.(context);\n\t\t\t\t\t\tlet refreshed: NonNullable<ProviderConfigInput[\"models\"]> | undefined;\n\t\t\t\t\t\tif (extension?.refreshModels) refreshed = await extension.refreshModels(context);\n\t\t\t\t\t\tif (context.signal.aborted) return;\n\t\t\t\t\t\tconst oauthCredential = context.credential?.type === \"oauth\" ? context.credential : undefined;\n\t\t\t\t\t\tawait context.publish({\n\t\t\t\t\t\t\tupdate: () => {\n\t\t\t\t\t\t\t\tif (refreshed) {\n\t\t\t\t\t\t\t\t\t// Validate before publishing the new synchronous list.\n\t\t\t\t\t\t\t\t\tapplyExtension(providerId, applyModelsJson(providerId, getAllProviderModels(base), config), {\n\t\t\t\t\t\t\t\t\t\t...extension,\n\t\t\t\t\t\t\t\t\t\tmodels: refreshed,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\trefreshedExtensionModels = refreshed;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\textensionOAuthCredential = oauthCredential;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\tfilterModels: base?.filterModels\n\t\t\t? (models, credential: Credential | undefined) => {\n\t\t\t\t\t// Models the user defines in models.json are an explicit choice: the base provider's\n\t\t\t\t\t// account filter (such as GitHub Copilot's model list) must not hide them.\n\t\t\t\t\tconst isConfigured = (model: Model<Api>) =>\n\t\t\t\t\t\tconfig?.models?.some((entry) => entry.id === model.id) === true;\n\t\t\t\t\tconst filtered = new Map(base.filterModels!(models, credential).map((model) => [model.id, model]));\n\t\t\t\t\treturn models.flatMap((original) => {\n\t\t\t\t\t\tif (isConfigured(original)) return [original];\n\t\t\t\t\t\tconst model = filtered.get(original.id);\n\t\t\t\t\t\tif (model === undefined) return [];\n\t\t\t\t\t\tconst inheritedContext = model.fastRoute\n\t\t\t\t\t\t\t? config?.modelOverrides?.[model.fastRoute.baseModelId]?.contextWindow\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t\tconst personalized =\n\t\t\t\t\t\t\tinheritedContext === undefined ? model : { ...model, contextWindow: inheritedContext };\n\t\t\t\t\t\tconst override = config?.modelOverrides?.[model.id];\n\t\t\t\t\t\treturn [override ? applyModelOverride(personalized, override) : personalized];\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tfilterAllModels: base?.filterAllModels\n\t\t\t? (models, credential: Credential | undefined) => base.filterAllModels!(models, credential)\n\t\t\t: undefined,\n\t\tstream: (model, context, options) => streamWith(model, context, options, false),\n\t\tstreamSimple: (model, context, options) => streamWith(model, context, options, true),\n\t};\n\n\tconst fetchDeferred = base?.fetchDeferred;\n\tif (fetchDeferred) {\n\t\tprovider.fetchDeferred = (model, handle, options) => fetchDeferred(model, handle, options);\n\t}\n\tconst cancelDeferred = base?.cancelDeferred;\n\tif (cancelDeferred) {\n\t\tprovider.cancelDeferred = (model, handle, options) => cancelDeferred(model, handle, options);\n\t}\n\tconst extensionImages = extension?.images;\n\tconst generateImages = base?.generateImages;\n\tif (generateImages || Object.keys(extensionImages ?? {}).length > 0) {\n\t\tprovider.generateImages = (model, context, options) => {\n\t\t\tconst implementation = extensionImages?.[model.api];\n\t\t\tif (implementation) return implementation.generateImages(model, context, options);\n\t\t\tif (generateImages) return generateImages(model, context, options);\n\t\t\treturn Promise.resolve(\n\t\t\t\timageErrorResult(model, new Error(`Provider ${providerId} has no image implementation for \"${model.api}\"`)),\n\t\t\t);\n\t\t};\n\t}\n\tconst extensionClassifiers = extension?.classifiers;\n\tconst classify = base?.classify;\n\tif (classify || Object.keys(extensionClassifiers ?? {}).length > 0) {\n\t\tprovider.classify = (model, context, options) => {\n\t\t\tconst implementation = extensionClassifiers?.[model.api];\n\t\t\tif (implementation) return implementation.classify(model, context, options);\n\t\t\tif (classify) return classify(model, context, options);\n\t\t\treturn Promise.resolve(\n\t\t\t\tclassifierErrorResult(\n\t\t\t\t\tmodel,\n\t\t\t\t\tnew Error(`Provider ${providerId} has no classifier implementation for \"${model.api}\"`),\n\t\t\t\t),\n\t\t\t);\n\t\t};\n\t}\n\n\treturn provider;\n}\n\nexport function resolveConfiguredModelHeaders(\n\tmodel: AnyModel,\n\tconfig: ModelsJsonProvider | undefined,\n\textension: ProviderConfigInput | undefined,\n\tenv?: Record<string, string>,\n): Record<string, string> | undefined {\n\treturn resolveHeadersOrThrow(\n\t\trawModelHeaders(model, config, extension),\n\t\t`model \"${model.provider}/${model.id}\"`,\n\t\tenv,\n\t);\n}\n\nexport interface CompatibilityRequestConfig {\n\theaders?: ProviderHeaders;\n\tauthHeader: boolean;\n}\n\nexport function resolveCompatibilityRequestConfig(\n\tmodel: AnyModel,\n\tconfig: ModelsJsonProvider | undefined,\n\textension: ProviderConfigInput | undefined,\n): CompatibilityRequestConfig {\n\tconst configured = resolveHeadersOrThrow(\n\t\t{ ...configuredHeaders(config, extension), ...rawModelHeaders(model, config, extension) },\n\t\t`model \"${model.provider}/${model.id}\"`,\n\t);\n\treturn {\n\t\theaders: model.headers || configured ? { ...model.headers, ...configured } : undefined,\n\t\tauthHeader: extension?.authHeader ?? config?.authHeader ?? false,\n\t};\n}\n\nexport function configuredRequestAuthStatus(\n\tconfig: ModelsJsonProvider | undefined,\n\textension: ProviderConfigInput | undefined,\n): AuthStatus | undefined {\n\tconst value = configuredApiKey(config, extension);\n\tif (value === undefined) return undefined;\n\tif (isCommandConfigValue(value)) return { configured: true, source: \"models_json_command\" };\n\tconst names = getConfigValueEnvVarNames(value);\n\tif (names.length > 0) {\n\t\treturn isConfigValueConfigured(value)\n\t\t\t? { configured: true, source: \"environment\", label: names.join(\", \") }\n\t\t\t: { configured: false };\n\t}\n\treturn { configured: true, source: extension?.apiKey !== undefined ? \"fallback\" : \"models_json_key\" };\n}\n"]}
|
|
@@ -7,16 +7,65 @@ export interface ProviderRateLimitSnapshot {
|
|
|
7
7
|
readonly rateLimitCount: number;
|
|
8
8
|
readonly cooldownUntil: number;
|
|
9
9
|
}
|
|
10
|
+
/** The limit a failure was recorded against: the whole provider or one of its models. */
|
|
11
|
+
export interface ProviderLimitScope {
|
|
12
|
+
readonly key: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A limit one process recorded, in a form other processes on the same host can apply: the provider, the
|
|
16
|
+
* model when the limit covers only that model, and the wall-clock time the limit ends.
|
|
17
|
+
*/
|
|
18
|
+
export interface ProviderRateLimitObservation {
|
|
19
|
+
readonly provider: string;
|
|
20
|
+
readonly model?: string;
|
|
21
|
+
/** `cooldown` holds requests back; `unavailable` (an exhausted quota) makes the fallback walk skip the account. */
|
|
22
|
+
readonly kind: "cooldown" | "unavailable";
|
|
23
|
+
readonly untilEpochMs: number;
|
|
24
|
+
}
|
|
10
25
|
export declare function configureProviderRequestBudget(provider: string, budget: ProviderRequestBudget | undefined): void;
|
|
11
26
|
export declare function providerRateLimitSnapshot(provider: string): ProviderRateLimitSnapshot | undefined;
|
|
12
27
|
export declare function providerIdForModel(model: string | object | undefined): string | undefined;
|
|
13
|
-
|
|
14
|
-
export declare function
|
|
15
|
-
|
|
28
|
+
/** Model ID within its provider, from a `provider/model` reference or a model object. */
|
|
29
|
+
export declare function modelIdForModel(model: string | object | undefined): string | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* Time until requests to the provider (and, when given, this model) are admitted again. Pass `now` to compare
|
|
32
|
+
* several limits against one clock reading.
|
|
33
|
+
*/
|
|
34
|
+
export declare function providerCooldownMs(provider: string | undefined, model?: string, now?: number): number;
|
|
35
|
+
/** Time until an exhausted quota on the provider (and, when given, this model) resets. */
|
|
36
|
+
export declare function providerUnavailableMs(provider: string | undefined, model?: string, now?: number): number;
|
|
37
|
+
export declare function providerAdmissionDelayMs(provider: string, model?: string): number;
|
|
38
|
+
export declare function tryAdmitProviderRequest(provider: string, model?: string): number;
|
|
16
39
|
export declare function isProviderRateLimit(error: unknown): boolean;
|
|
17
|
-
|
|
18
|
-
export declare function
|
|
19
|
-
export declare function
|
|
40
|
+
/** A rate limit or an exhausted quota: either makes the account unusable until the server's reset. */
|
|
41
|
+
export declare function isProviderLimitFailure(error: unknown): boolean;
|
|
42
|
+
export declare function markProviderRateLimitObserved(error: object, scope: ProviderLimitScope): void;
|
|
43
|
+
/**
|
|
44
|
+
* Record a rate limit or exhausted quota and return how long the account stays limited. The limit covers
|
|
45
|
+
* only `model` when the failure names that model, and the whole provider otherwise.
|
|
46
|
+
*/
|
|
47
|
+
export declare function recordProviderRateLimit(provider: string | undefined, error: unknown, model?: string): number | undefined;
|
|
48
|
+
/** The limit a failure belongs to: its model when the failure names that model, else the whole provider. */
|
|
49
|
+
export declare function providerLimitScope(provider: string, error: unknown, model?: string): ProviderLimitScope;
|
|
50
|
+
/**
|
|
51
|
+
* Merge a limit another process observed. It only ever extends the limit of the same provider or model
|
|
52
|
+
* scope, ignores limits that already ended, and counts no failure here. Returns whether the limit grew.
|
|
53
|
+
* Observers are not told: the observation came from elsewhere, so sending it on would echo it back.
|
|
54
|
+
*/
|
|
55
|
+
export declare function applyProviderRateLimitObservation(observation: ProviderRateLimitObservation): boolean;
|
|
56
|
+
/** Every limit of this process that has not ended yet, as observations another process can apply. */
|
|
57
|
+
export declare function providerRateLimitObservations(): ProviderRateLimitObservation[];
|
|
58
|
+
/**
|
|
59
|
+
* Be told each time this process records or extends a limit, but not when it applies another process's
|
|
60
|
+
* observation. Only rate-limited and quota-exhausted responses notify, never ordinary requests.
|
|
61
|
+
*/
|
|
62
|
+
export declare function observeProviderRateLimits(observer: (observation: ProviderRateLimitObservation) => void): () => void;
|
|
63
|
+
/**
|
|
64
|
+
* Apply the server retry hint of a failure that was already recorded against `scope`, without counting it
|
|
65
|
+
* again. A limit only ever grows, so a guess made before the hint was known cannot shorten it.
|
|
66
|
+
*/
|
|
67
|
+
export declare function recordProviderRetryHint(provider: string | undefined, error: unknown, scope: ProviderLimitScope): void;
|
|
68
|
+
export declare function recordProviderSuccess(provider: string, model?: string): void;
|
|
20
69
|
export declare function providerRetryHint(error: unknown): {
|
|
21
70
|
retryAfterMs?: number;
|
|
22
71
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-rate-limits.d.ts","sourceRoot":"","sources":["../../src/core/provider-rate-limits.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,yBAAyB;IACzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAC/B;
|
|
1
|
+
{"version":3,"file":"provider-rate-limits.d.ts","sourceRoot":"","sources":["../../src/core/provider-rate-limits.ts"],"names":[],"mappings":"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"}
|