@bastani/atomic 0.9.11-alpha.6 → 0.9.11-alpha.8
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 +38 -0
- package/README.md +3 -5
- package/dist/builtin/intercom/package.json +1 -1
- package/dist/builtin/mcp/package.json +1 -1
- package/dist/builtin/mcp/sampling-handler.ts +1 -5
- package/dist/builtin/subagents/package.json +1 -1
- package/dist/builtin/web-access/package.json +1 -1
- package/dist/builtin/workflows/CHANGELOG.md +1 -0
- package/dist/builtin/workflows/README.md +1 -1
- package/dist/builtin/workflows/package.json +1 -1
- package/dist/builtin/workflows/skills/impeccable/SKILL.md +33 -129
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_asset_producer.toml +11 -3
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_documenter.toml +26 -0
- package/dist/builtin/workflows/skills/impeccable/agents/impeccable_finish_reviewer.toml +35 -0
- package/dist/builtin/workflows/skills/impeccable/reference/android.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/animate.md +72 -189
- package/dist/builtin/workflows/skills/impeccable/reference/audit.md +10 -9
- package/dist/builtin/workflows/skills/impeccable/reference/audit.native.md +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/bolder.md +19 -108
- package/dist/builtin/workflows/skills/impeccable/reference/clarify.md +59 -253
- package/dist/builtin/workflows/skills/impeccable/reference/colorize.md +51 -222
- package/dist/builtin/workflows/skills/impeccable/reference/craft-floor.md +45 -0
- package/dist/builtin/workflows/skills/impeccable/reference/craft.md +3 -121
- package/dist/builtin/workflows/skills/impeccable/reference/critique.md +28 -20
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/asset-producer.md +97 -0
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/documenter.md +23 -0
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/finish-reviewer.md +32 -0
- package/dist/builtin/workflows/skills/impeccable/reference/degraded/manual-edit-applier.md +92 -0
- package/dist/builtin/workflows/skills/impeccable/reference/delight.md +47 -279
- package/dist/builtin/workflows/skills/impeccable/reference/distill.md +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/doctor.md +53 -0
- package/dist/builtin/workflows/skills/impeccable/reference/document.md +60 -73
- package/dist/builtin/workflows/skills/impeccable/reference/harden.md +1 -12
- package/dist/builtin/workflows/skills/impeccable/reference/hooks.md +17 -4
- package/dist/builtin/workflows/skills/impeccable/reference/init.md +64 -163
- package/dist/builtin/workflows/skills/impeccable/reference/ios.md +1 -1
- package/dist/builtin/workflows/skills/impeccable/reference/layout.md +52 -153
- package/dist/builtin/workflows/skills/impeccable/reference/live.md +44 -32
- package/dist/builtin/workflows/skills/impeccable/reference/new-work.md +105 -0
- package/dist/builtin/workflows/skills/impeccable/reference/{product.md → operate.md} +6 -5
- package/dist/builtin/workflows/skills/impeccable/reference/optimize.md +4 -4
- package/dist/builtin/workflows/skills/impeccable/reference/overdrive.md +1 -4
- package/dist/builtin/workflows/skills/impeccable/reference/polish.md +68 -212
- package/dist/builtin/workflows/skills/impeccable/reference/quieter.md +3 -3
- package/dist/builtin/workflows/skills/impeccable/reference/routing.md +18 -0
- package/dist/builtin/workflows/skills/impeccable/reference/shape.md +38 -144
- package/dist/builtin/workflows/skills/impeccable/reference/typeset.md +48 -269
- package/dist/builtin/workflows/skills/impeccable/reference/visualize.md +38 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/command-metadata.json +1 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/concept-seed.mjs +584 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/context-signals.mjs +117 -9
- package/dist/builtin/workflows/skills/impeccable/scripts/context.mjs +486 -59
- package/dist/builtin/workflows/skills/impeccable/scripts/critique-storage.mjs +16 -45
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/browser/injected/index.mjs +96 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/cli/main.mjs +143 -26
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/design-system.mjs +181 -12
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/detect-antipatterns-browser.js +3187 -182
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/browser/detect-url.mjs +102 -7
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/regex/detect-text.mjs +282 -70
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/css-cascade.mjs +183 -15
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/engines/static-html/detect-html.mjs +22 -7
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/findings.mjs +7 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/node/file-system.mjs +16 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/registry/antipatterns.mjs +155 -42
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/rules/checks.mjs +2988 -155
- package/dist/builtin/workflows/skills/impeccable/scripts/detector/shared/constants.mjs +11 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/doctor.mjs +336 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/generate-image.mjs +232 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-admin.mjs +90 -10
- package/dist/builtin/workflows/skills/impeccable/scripts/hook-lib.mjs +410 -78
- package/dist/builtin/workflows/skills/impeccable/scripts/hook.mjs +25 -8
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/artifact-schema.mjs +93 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/composition-catalog.mjs +165 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/concept-catalog.mjs +329 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-config.mjs +20 -5
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/impeccable-paths.mjs +16 -8
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/provider.mjs +1 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness-deep.mjs +455 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness-notice.mjs +169 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/staleness.mjs +457 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/surface-briefs.mjs +151 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/target-slug.mjs +33 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/lib/template-extensions.mjs +146 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/completion.mjs +10 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/live/event-validation.mjs +15 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/generation-preflight.mjs +149 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/poll-lanes.mjs +14 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/session-store.mjs +109 -32
- package/dist/builtin/workflows/skills/impeccable/scripts/live/source-lock.mjs +105 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/source-search.mjs +105 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live/sveltekit-adapter.mjs +8 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/live/tanstack-adapter.mjs +280 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live-accept.mjs +208 -68
- package/dist/builtin/workflows/skills/impeccable/scripts/live-browser.js +563 -112
- package/dist/builtin/workflows/skills/impeccable/scripts/live-commit-manual-edits.mjs +3 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/live-inject.mjs +198 -13
- package/dist/builtin/workflows/skills/impeccable/scripts/live-insert.mjs +24 -6
- package/dist/builtin/workflows/skills/impeccable/scripts/live-manual-edit-evidence.mjs +6 -1
- package/dist/builtin/workflows/skills/impeccable/scripts/live-poll.mjs +44 -14
- package/dist/builtin/workflows/skills/impeccable/scripts/live-server.mjs +398 -33
- package/dist/builtin/workflows/skills/impeccable/scripts/live-status.mjs +9 -5
- package/dist/builtin/workflows/skills/impeccable/scripts/live-wrap.mjs +81 -67
- package/dist/builtin/workflows/skills/impeccable/scripts/live.mjs +7 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/palette.mjs +76 -81
- package/dist/builtin/workflows/skills/impeccable/scripts/pin.mjs +2 -2
- package/dist/builtin/workflows/skills/impeccable/scripts/serve-question.mjs +890 -0
- package/dist/builtin/workflows/skills/impeccable/scripts/surface-brief.mjs +74 -0
- package/dist/builtin/workflows/src/extension/extension-runtime-state.ts +1 -24
- package/dist/builtin/workflows/src/extension/index.bundle.mjs +232 -50
- package/dist/builtin/workflows/src/extension/workflow-model-catalog.ts +26 -0
- package/dist/builtin/workflows/src/extension/workflow-prompts.ts +3 -2
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-control.ts +23 -9
- package/dist/builtin/workflows/src/runs/foreground/executor-stage-replay.ts +1 -0
- package/dist/builtin/workflows/src/runs/foreground/postmortem-stage-chat.ts +20 -5
- package/dist/builtin/workflows/src/runs/foreground/stage-control-registry.ts +10 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-delivery-activity.ts +86 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-context.ts +6 -2
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-controller.ts +24 -18
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-send-user-message.ts +8 -0
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-session-options.ts +3 -3
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-session.ts +2 -2
- package/dist/builtin/workflows/src/runs/foreground/stage-runner-types.ts +16 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-delivery-activity.ts +121 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-live-events.ts +42 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-state.ts +16 -0
- package/dist/builtin/workflows/src/tui/stage-chat-view-types.ts +4 -0
- package/dist/cli/list-models.d.ts +2 -2
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +5 -5
- package/dist/cli/list-models.js.map +1 -1
- package/dist/core/agent-session-accessors.js +1 -1
- package/dist/core/agent-session-accessors.js.map +1 -1
- package/dist/core/agent-session-auto-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-auto-compaction.js +2 -5
- package/dist/core/agent-session-auto-compaction.js.map +1 -1
- package/dist/core/agent-session-compaction.js +1 -1
- package/dist/core/agent-session-compaction.js.map +1 -1
- package/dist/core/agent-session-extension-bindings.js +5 -5
- package/dist/core/agent-session-extension-bindings.js.map +1 -1
- package/dist/core/agent-session-methods.d.ts +4 -4
- 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-models.d.ts +1 -1
- package/dist/core/agent-session-models.d.ts.map +1 -1
- package/dist/core/agent-session-models.js +18 -14
- package/dist/core/agent-session-models.js.map +1 -1
- package/dist/core/agent-session-post-tool-compaction.d.ts.map +1 -1
- package/dist/core/agent-session-post-tool-compaction.js +2 -4
- package/dist/core/agent-session-post-tool-compaction.js.map +1 -1
- package/dist/core/agent-session-prompt.d.ts.map +1 -1
- package/dist/core/agent-session-prompt.js +3 -7
- package/dist/core/agent-session-prompt.js.map +1 -1
- package/dist/core/agent-session-retry.js +1 -1
- package/dist/core/agent-session-retry.js.map +1 -1
- package/dist/core/agent-session-runtime-auth.d.ts +3 -3
- package/dist/core/agent-session-runtime-auth.d.ts.map +1 -1
- package/dist/core/agent-session-runtime-auth.js +4 -14
- package/dist/core/agent-session-runtime-auth.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +3 -3
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +3 -8
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +16 -23
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session-tool-registry.d.ts.map +1 -1
- package/dist/core/agent-session-tool-registry.js +2 -1
- package/dist/core/agent-session-tool-registry.js.map +1 -1
- package/dist/core/agent-session-types.d.ts +2 -2
- package/dist/core/agent-session-types.d.ts.map +1 -1
- package/dist/core/agent-session-types.js.map +1 -1
- package/dist/core/agent-session.d.ts +2 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +1 -1
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage-backends.d.ts +1 -0
- package/dist/core/auth-storage-backends.d.ts.map +1 -1
- package/dist/core/auth-storage-backends.js +18 -4
- package/dist/core/auth-storage-backends.js.map +1 -1
- package/dist/core/auth-storage.d.ts +12 -139
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +68 -374
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/copilot-env-routing.d.ts +36 -0
- package/dist/core/copilot-env-routing.d.ts.map +1 -0
- package/dist/core/copilot-env-routing.js +94 -0
- package/dist/core/copilot-env-routing.js.map +1 -0
- package/dist/core/extensions/loader-virtual-modules.d.ts.map +1 -1
- package/dist/core/extensions/loader-virtual-modules.js +10 -2
- package/dist/core/extensions/loader-virtual-modules.js.map +1 -1
- package/dist/core/extensions/provider-types.d.ts +0 -40
- package/dist/core/extensions/provider-types.d.ts.map +1 -1
- package/dist/core/extensions/provider-types.js.map +1 -1
- package/dist/core/fallback-models.d.ts +4 -4
- package/dist/core/fallback-models.d.ts.map +1 -1
- package/dist/core/fallback-models.js +3 -3
- package/dist/core/fallback-models.js.map +1 -1
- package/dist/core/model-config.d.ts +542 -0
- package/dist/core/model-config.d.ts.map +1 -0
- package/dist/core/{model-registry-schemas.js → model-config.js} +85 -34
- package/dist/core/model-config.js.map +1 -0
- package/dist/core/model-registry.d.ts +25 -85
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +65 -388
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver-cli.d.ts +2 -2
- package/dist/core/model-resolver-cli.d.ts.map +1 -1
- package/dist/core/model-resolver-cli.js +2 -2
- package/dist/core/model-resolver-cli.js.map +1 -1
- package/dist/core/model-resolver-initial.d.ts +4 -4
- package/dist/core/model-resolver-initial.d.ts.map +1 -1
- package/dist/core/model-resolver-initial.js +17 -17
- package/dist/core/model-resolver-initial.js.map +1 -1
- package/dist/core/model-resolver-scope.d.ts +3 -3
- package/dist/core/model-resolver-scope.d.ts.map +1 -1
- package/dist/core/model-resolver-scope.js +4 -4
- package/dist/core/model-resolver-scope.js.map +1 -1
- package/dist/core/model-runtime-auth.d.ts +7 -0
- package/dist/core/model-runtime-auth.d.ts.map +1 -0
- package/dist/core/model-runtime-auth.js +14 -0
- package/dist/core/model-runtime-auth.js.map +1 -0
- package/dist/core/model-runtime-providers.d.ts +6 -0
- package/dist/core/model-runtime-providers.d.ts.map +1 -0
- package/dist/core/model-runtime-providers.js +22 -0
- package/dist/core/model-runtime-providers.js.map +1 -0
- package/dist/core/model-runtime-restoration.d.ts +6 -0
- package/dist/core/model-runtime-restoration.d.ts.map +1 -0
- package/dist/core/model-runtime-restoration.js +21 -0
- package/dist/core/model-runtime-restoration.js.map +1 -0
- package/dist/core/model-runtime-snapshot.d.ts +16 -0
- package/dist/core/model-runtime-snapshot.d.ts.map +1 -0
- package/dist/core/model-runtime-snapshot.js +52 -0
- package/dist/core/model-runtime-snapshot.js.map +1 -0
- package/dist/core/model-runtime-streaming.d.ts +17 -0
- package/dist/core/model-runtime-streaming.d.ts.map +1 -0
- package/dist/core/model-runtime-streaming.js +66 -0
- package/dist/core/model-runtime-streaming.js.map +1 -0
- package/dist/core/model-runtime-types.d.ts +21 -0
- package/dist/core/model-runtime-types.d.ts.map +1 -0
- package/dist/core/model-runtime-types.js +2 -0
- package/dist/core/model-runtime-types.js.map +1 -0
- package/dist/core/model-runtime.d.ts +50 -29
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +330 -90
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/models-store.d.ts +2 -10
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js +2 -29
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/oauth-login.d.ts +24 -0
- package/dist/core/oauth-login.d.ts.map +1 -0
- package/dist/core/oauth-login.js +87 -0
- package/dist/core/oauth-login.js.map +1 -0
- package/dist/core/oauth-provider-metadata.d.ts +5 -0
- package/dist/core/oauth-provider-metadata.d.ts.map +1 -0
- package/dist/core/oauth-provider-metadata.js +19 -0
- package/dist/core/oauth-provider-metadata.js.map +1 -0
- package/dist/core/provider-composer-internal.d.ts +53 -0
- package/dist/core/provider-composer-internal.d.ts.map +1 -0
- package/dist/core/provider-composer-internal.js +273 -0
- package/dist/core/provider-composer-internal.js.map +1 -0
- package/dist/core/provider-composer.d.ts +16 -0
- package/dist/core/provider-composer.d.ts.map +1 -0
- package/dist/core/provider-composer.js +108 -0
- package/dist/core/provider-composer.js.map +1 -0
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +74 -122
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts +8 -7
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js +26 -23
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/runtime-credentials.d.ts +16 -0
- package/dist/core/runtime-credentials.d.ts.map +1 -0
- package/dist/core/runtime-credentials.js +42 -0
- package/dist/core/runtime-credentials.js.map +1 -0
- package/dist/core/sdk-types.d.ts +1 -7
- package/dist/core/sdk-types.d.ts.map +1 -1
- package/dist/core/sdk-types.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +27 -28
- package/dist/core/sdk.js.map +1 -1
- package/dist/extensions/llama/index.js +1 -1
- package/dist/extensions/llama/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts +2 -4
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +25 -17
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -4
- package/dist/index.js.map +1 -1
- package/dist/main-runtime-api-key.d.ts +6 -0
- package/dist/main-runtime-api-key.d.ts.map +1 -0
- package/dist/main-runtime-api-key.js +6 -0
- package/dist/main-runtime-api-key.js.map +1 -0
- package/dist/main-session-options.d.ts +2 -2
- package/dist/main-session-options.d.ts.map +1 -1
- package/dist/main-session-options.js +3 -3
- package/dist/main-session-options.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +9 -11
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-actions.js +2 -14
- package/dist/modes/interactive/components/chat-session-host-actions.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-events.js +9 -0
- package/dist/modes/interactive/components/chat-session-host-events.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-runtime.d.ts +25 -0
- package/dist/modes/interactive/components/chat-session-host-runtime.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host-runtime.js +53 -0
- package/dist/modes/interactive/components/chat-session-host-runtime.js.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.d.ts +13 -0
- package/dist/modes/interactive/components/chat-session-host.d.ts.map +1 -1
- package/dist/modes/interactive/components/chat-session-host.js +22 -1
- package/dist/modes/interactive/components/chat-session-host.js.map +1 -1
- package/dist/modes/interactive/components/footer.js +1 -1
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +1 -3
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +4 -3
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +56 -73
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +4 -3
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +15 -24
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/interactive-agent-events.js +10 -4
- package/dist/modes/interactive/interactive-agent-events.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-login.js +20 -31
- package/dist/modes/interactive/interactive-auth-login.js.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.d.ts +1 -1
- package/dist/modes/interactive/interactive-auth-routing.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-auth-routing.js +21 -47
- package/dist/modes/interactive/interactive-auth-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-autocomplete.js +3 -3
- package/dist/modes/interactive/interactive-autocomplete.js.map +1 -1
- package/dist/modes/interactive/interactive-deferred-startup.js +8 -8
- package/dist/modes/interactive/interactive-deferred-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-extension-runtime.js +2 -1
- package/dist/modes/interactive/interactive-extension-runtime.js.map +1 -1
- package/dist/modes/interactive/interactive-model-catalog-startup.js +2 -2
- package/dist/modes/interactive/interactive-model-catalog-startup.js.map +1 -1
- package/dist/modes/interactive/interactive-model-routing.js +11 -11
- package/dist/modes/interactive/interactive-model-routing.js.map +1 -1
- package/dist/modes/interactive/interactive-render-chat.js +1 -1
- package/dist/modes/interactive/interactive-render-chat.js.map +1 -1
- package/dist/modes/interactive/interactive-slash-commands.js +2 -2
- package/dist/modes/interactive/interactive-slash-commands.js.map +1 -1
- package/dist/modes/interactive/interactive-startup.js +1 -1
- package/dist/modes/interactive/interactive-startup.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-auth.d.ts +2 -2
- package/dist/modes/interactive-engine/isolated-auth.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-auth.js +4 -3
- package/dist/modes/interactive-engine/isolated-auth.js.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.d.ts.map +1 -1
- package/dist/modes/interactive-engine/isolated-runtime.js +4 -3
- package/dist/modes/interactive-engine/isolated-runtime.js.map +1 -1
- package/dist/modes/interactive-engine/remote-model-catalog.d.ts +0 -1
- package/dist/modes/interactive-engine/remote-model-catalog.d.ts.map +1 -1
- package/dist/modes/interactive-engine/remote-model-catalog.js +11 -50
- package/dist/modes/interactive-engine/remote-model-catalog.js.map +1 -1
- package/dist/modes/rpc/rpc-client-api.d.ts +2 -2
- package/dist/modes/rpc/rpc-client-api.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client-api.js.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-command-handler.js +26 -19
- package/dist/modes/rpc/rpc-command-handler.js.map +1 -1
- package/dist/modes/rpc/rpc-oauth-client.d.ts +1 -1
- package/dist/modes/rpc/rpc-oauth-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-oauth-client.js +1 -1
- package/dist/modes/rpc/rpc-oauth-client.js.map +1 -1
- package/dist/modes/rpc/rpc-oauth-interaction.d.ts +1 -1
- package/dist/modes/rpc/rpc-oauth-interaction.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-oauth-interaction.js +1 -1
- package/dist/modes/rpc/rpc-oauth-interaction.js.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.d.ts +4 -5
- package/dist/modes/rpc/rpc-provider-auth.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-provider-auth.js +19 -66
- package/dist/modes/rpc/rpc-provider-auth.js.map +1 -1
- package/dist/modes/rpc/rpc-session-binding.js +1 -1
- package/dist/modes/rpc/rpc-session-binding.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +7 -4
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +5 -7
- package/dist/package-manager-cli.js.map +1 -1
- package/docs/changelog.mdx +1 -1
- package/docs/custom-provider.md +1 -1
- package/docs/models.md +4 -6
- package/docs/providers.md +13 -0
- package/docs/quickstart.md +2 -1
- package/docs/sdk.md +32 -49
- package/docs/tui.md +7 -2
- package/docs/workflows.md +4 -4
- package/examples/sdk/02-custom-model.ts +8 -10
- package/examples/sdk/09-api-keys-and-oauth.ts +17 -23
- package/examples/sdk/12-full-control.ts +9 -11
- package/examples/sdk/README.md +17 -21
- package/npm-shrinkwrap.json +23 -23
- package/package.json +2 -2
- package/dist/builtin/workflows/skills/impeccable/reference/brand.md +0 -108
- package/dist/builtin/workflows/skills/impeccable/reference/codex.md +0 -105
- package/dist/builtin/workflows/skills/impeccable/reference/interaction-design.md +0 -189
- package/dist/core/model-registry-auth.d.ts +0 -10
- package/dist/core/model-registry-auth.d.ts.map +0 -1
- package/dist/core/model-registry-auth.js +0 -98
- package/dist/core/model-registry-auth.js.map +0 -1
- package/dist/core/model-registry-builtins.d.ts +0 -8
- package/dist/core/model-registry-builtins.d.ts.map +0 -1
- package/dist/core/model-registry-builtins.js +0 -104
- package/dist/core/model-registry-builtins.js.map +0 -1
- package/dist/core/model-registry-custom-loader.d.ts +0 -3
- package/dist/core/model-registry-custom-loader.d.ts.map +0 -1
- package/dist/core/model-registry-custom-loader.js +0 -255
- package/dist/core/model-registry-custom-loader.js.map +0 -1
- package/dist/core/model-registry-dynamic.d.ts +0 -7
- package/dist/core/model-registry-dynamic.d.ts.map +0 -1
- package/dist/core/model-registry-dynamic.js +0 -189
- package/dist/core/model-registry-dynamic.js.map +0 -1
- package/dist/core/model-registry-extension-refresh.d.ts +0 -23
- package/dist/core/model-registry-extension-refresh.d.ts.map +0 -1
- package/dist/core/model-registry-extension-refresh.js +0 -32
- package/dist/core/model-registry-extension-refresh.js.map +0 -1
- package/dist/core/model-registry-loader.d.ts +0 -5
- package/dist/core/model-registry-loader.d.ts.map +0 -1
- package/dist/core/model-registry-loader.js +0 -29
- package/dist/core/model-registry-loader.js.map +0 -1
- package/dist/core/model-registry-schemas.d.ts +0 -1399
- package/dist/core/model-registry-schemas.d.ts.map +0 -1
- package/dist/core/model-registry-schemas.js.map +0 -1
- package/dist/core/model-registry-types.d.ts +0 -91
- package/dist/core/model-registry-types.d.ts.map +0 -1
- package/dist/core/model-registry-types.js +0 -2
- package/dist/core/model-registry-types.js.map +0 -1
- package/dist/core/model-registry-validation.d.ts +0 -7
- package/dist/core/model-registry-validation.d.ts.map +0 -1
- package/dist/core/model-registry-validation.js +0 -12
- package/dist/core/model-registry-validation.js.map +0 -1
- package/dist/core/oauth-compat.d.ts +0 -17
- package/dist/core/oauth-compat.d.ts.map +0 -1
- package/dist/core/oauth-compat.js +0 -2
- package/dist/core/oauth-compat.js.map +0 -1
- package/dist/core/oauth-provider-bridge.d.ts +0 -63
- package/dist/core/oauth-provider-bridge.d.ts.map +0 -1
- package/dist/core/oauth-provider-bridge.js +0 -232
- package/dist/core/oauth-provider-bridge.js.map +0 -1
|
@@ -1,189 +0,0 @@
|
|
|
1
|
-
# Interaction Design
|
|
2
|
-
|
|
3
|
-
## The Eight Interactive States
|
|
4
|
-
|
|
5
|
-
Every interactive element needs these states designed:
|
|
6
|
-
|
|
7
|
-
| State | When | Visual Treatment |
|
|
8
|
-
|-------|------|------------------|
|
|
9
|
-
| **Default** | At rest | Base styling |
|
|
10
|
-
| **Hover** | Pointer over (not touch) | Subtle lift, color shift |
|
|
11
|
-
| **Focus** | Keyboard/programmatic focus | Visible ring (see below) |
|
|
12
|
-
| **Active** | Being pressed | Pressed in, darker |
|
|
13
|
-
| **Disabled** | Not interactive | Reduced opacity, no pointer |
|
|
14
|
-
| **Loading** | Processing | Spinner, skeleton |
|
|
15
|
-
| **Error** | Invalid state | Red border, icon, message |
|
|
16
|
-
| **Success** | Completed | Green check, confirmation |
|
|
17
|
-
|
|
18
|
-
**The common miss**: Designing hover without focus, or vice versa. They're different. Keyboard users never see hover states.
|
|
19
|
-
|
|
20
|
-
## Focus Rings: Do Them Right
|
|
21
|
-
|
|
22
|
-
**Never `outline: none` without replacement.** It's an accessibility violation. Instead, use `:focus-visible` to show focus only for keyboard users:
|
|
23
|
-
|
|
24
|
-
```css
|
|
25
|
-
/* Hide focus ring for mouse/touch */
|
|
26
|
-
button:focus {
|
|
27
|
-
outline: none;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/* Show focus ring for keyboard */
|
|
31
|
-
button:focus-visible {
|
|
32
|
-
outline: 2px solid var(--color-accent);
|
|
33
|
-
outline-offset: 2px;
|
|
34
|
-
}
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
**Focus ring design**:
|
|
38
|
-
- High contrast (3:1 minimum against adjacent colors)
|
|
39
|
-
- 2-3px thick
|
|
40
|
-
- Offset from element (not inside it)
|
|
41
|
-
- Consistent across all interactive elements
|
|
42
|
-
|
|
43
|
-
## Form Design: The Non-Obvious
|
|
44
|
-
|
|
45
|
-
**Placeholders aren't labels.** They disappear on input. Always use visible `<label>` elements. **Validate on blur**, not on every keystroke (exception: password strength). Place errors **below** fields with `aria-describedby` connecting them.
|
|
46
|
-
|
|
47
|
-
## Loading States
|
|
48
|
-
|
|
49
|
-
**Optimistic updates**: Show success immediately, rollback on failure. Use for low-stakes actions (likes, follows), not payments or destructive actions. **Skeleton screens > spinners**: they preview content shape and feel faster than generic spinners.
|
|
50
|
-
|
|
51
|
-
## Modals: The Inert Approach
|
|
52
|
-
|
|
53
|
-
Focus trapping in modals used to require complex JavaScript. Now use the `inert` attribute:
|
|
54
|
-
|
|
55
|
-
```html
|
|
56
|
-
<!-- When modal is open -->
|
|
57
|
-
<main inert>
|
|
58
|
-
<!-- Content behind modal can't be focused or clicked -->
|
|
59
|
-
</main>
|
|
60
|
-
<dialog open>
|
|
61
|
-
<h2>Modal Title</h2>
|
|
62
|
-
<!-- Focus stays inside modal -->
|
|
63
|
-
</dialog>
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
Or use the native `<dialog>` element:
|
|
67
|
-
|
|
68
|
-
```javascript
|
|
69
|
-
const dialog = document.querySelector('dialog');
|
|
70
|
-
dialog.showModal(); // Opens with focus trap, closes on Escape
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
## The Popover API
|
|
74
|
-
|
|
75
|
-
For tooltips, dropdowns, and non-modal overlays, use native popovers:
|
|
76
|
-
|
|
77
|
-
```html
|
|
78
|
-
<button popovertarget="menu">Open menu</button>
|
|
79
|
-
<div id="menu" popover>
|
|
80
|
-
<button>Option 1</button>
|
|
81
|
-
<button>Option 2</button>
|
|
82
|
-
</div>
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
**Benefits**: Light-dismiss (click outside closes), proper stacking, no z-index wars, accessible by default.
|
|
86
|
-
|
|
87
|
-
## Dropdown & Overlay Positioning
|
|
88
|
-
|
|
89
|
-
Dropdowns rendered with `position: absolute` inside a container that has `overflow: hidden` or `overflow: auto` will be clipped. This is the single most common dropdown bug in generated code.
|
|
90
|
-
|
|
91
|
-
### CSS Anchor Positioning
|
|
92
|
-
|
|
93
|
-
The modern solution uses the CSS Anchor Positioning API to tether an overlay to its trigger without JavaScript:
|
|
94
|
-
|
|
95
|
-
```css
|
|
96
|
-
.trigger {
|
|
97
|
-
anchor-name: --menu-trigger;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
.dropdown {
|
|
101
|
-
position: fixed;
|
|
102
|
-
position-anchor: --menu-trigger;
|
|
103
|
-
position-area: block-end span-inline-end;
|
|
104
|
-
margin-top: 4px;
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/* Flip above if no room below */
|
|
108
|
-
@position-try --flip-above {
|
|
109
|
-
position-area: block-start span-inline-end;
|
|
110
|
-
margin-bottom: 4px;
|
|
111
|
-
}
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
Because the dropdown uses `position: fixed`, it escapes any `overflow` clipping on ancestor elements. The `@position-try` block handles viewport edges automatically. **Browser support**: Chrome 125+, Edge 125+. Not yet in Firefox or Safari - use a fallback for those browsers.
|
|
115
|
-
|
|
116
|
-
### Popover + Anchor Combo
|
|
117
|
-
|
|
118
|
-
Combining the Popover API with anchor positioning gives you stacking, light-dismiss, accessibility, and correct positioning in one pattern:
|
|
119
|
-
|
|
120
|
-
```html
|
|
121
|
-
<button popovertarget="menu" class="trigger">Open</button>
|
|
122
|
-
<div id="menu" popover class="dropdown">
|
|
123
|
-
<button>Option 1</button>
|
|
124
|
-
<button>Option 2</button>
|
|
125
|
-
</div>
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
The `popover` attribute places the element in the **top layer**, which sits above all other content regardless of z-index or overflow. No portal needed.
|
|
129
|
-
|
|
130
|
-
### Portal / Teleport Pattern
|
|
131
|
-
|
|
132
|
-
In component frameworks, render the dropdown at the document root and position it with JavaScript:
|
|
133
|
-
|
|
134
|
-
- **React**: `createPortal(dropdown, document.body)`
|
|
135
|
-
- **Vue**: `<Teleport to="body">`
|
|
136
|
-
- **Svelte**: Use a portal library or mount to `document.body`
|
|
137
|
-
|
|
138
|
-
Calculate position from the trigger's `getBoundingClientRect()`, then apply `position: fixed` with `top` and `left` values. Recalculate on scroll and resize.
|
|
139
|
-
|
|
140
|
-
### Fixed Positioning Fallback
|
|
141
|
-
|
|
142
|
-
For browsers without anchor positioning support, `position: fixed` with manual coordinates avoids overflow clipping:
|
|
143
|
-
|
|
144
|
-
```css
|
|
145
|
-
.dropdown {
|
|
146
|
-
position: fixed;
|
|
147
|
-
/* top/left set via JS from trigger's getBoundingClientRect() */
|
|
148
|
-
}
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
Check viewport boundaries before rendering. If the dropdown would overflow the bottom edge, flip it above the trigger. If it would overflow the right edge, align it to the trigger's right side instead.
|
|
152
|
-
|
|
153
|
-
## Destructive Actions: Undo > Confirm
|
|
154
|
-
|
|
155
|
-
**Undo is better than confirmation dialogs.** Users click through confirmations mindlessly. Remove from UI immediately, show undo toast, actually delete after toast expires. Use confirmation only for truly irreversible actions (account deletion), high-cost actions, or batch operations.
|
|
156
|
-
|
|
157
|
-
## Keyboard Navigation Patterns
|
|
158
|
-
|
|
159
|
-
### Roving Tabindex
|
|
160
|
-
|
|
161
|
-
For component groups (tabs, menu items, radio groups), one item is tabbable; arrow keys move within:
|
|
162
|
-
|
|
163
|
-
```html
|
|
164
|
-
<div role="tablist">
|
|
165
|
-
<button role="tab" tabindex="0">Tab 1</button>
|
|
166
|
-
<button role="tab" tabindex="-1">Tab 2</button>
|
|
167
|
-
<button role="tab" tabindex="-1">Tab 3</button>
|
|
168
|
-
</div>
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
Arrow keys move `tabindex="0"` between items. Tab moves to the next component entirely.
|
|
172
|
-
|
|
173
|
-
### Skip Links
|
|
174
|
-
|
|
175
|
-
Provide skip links (`<a href="#main-content">Skip to main content</a>`) for keyboard users to jump past navigation. Hide off-screen, show on focus.
|
|
176
|
-
|
|
177
|
-
## Gesture Discoverability
|
|
178
|
-
|
|
179
|
-
Swipe-to-delete and similar gestures are invisible. Hint at their existence:
|
|
180
|
-
|
|
181
|
-
- **Partially reveal**: Show delete button peeking from edge
|
|
182
|
-
- **Onboarding**: Coach marks on first use
|
|
183
|
-
- **Alternative**: Always provide a visible fallback (menu with "Delete")
|
|
184
|
-
|
|
185
|
-
Don't rely on gestures as the only way to perform actions.
|
|
186
|
-
|
|
187
|
-
---
|
|
188
|
-
|
|
189
|
-
**Avoid**: Removing focus indicators without alternatives. Using placeholder text as labels. Touch targets <44x44px. Generic error messages. Custom controls without ARIA/keyboard support.
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { ModelAuth } from "@earendil-works/pi-ai";
|
|
2
|
-
import type { Api, Model } from "@earendil-works/pi-ai/compat";
|
|
3
|
-
import type { AuthStatus, AuthStorage } from "./auth-storage.ts";
|
|
4
|
-
import type { ProviderRequestConfig, ResolvedRequestAuth } from "./model-registry-types.ts";
|
|
5
|
-
import type { ProviderApiKeyAuthResult } from "./extensions/provider-types.ts";
|
|
6
|
-
export declare function getProviderResolvedAuth(provider: string, authStorage: AuthStorage, providerRequestConfigs: Map<string, ProviderRequestConfig>): Promise<ProviderApiKeyAuthResult | undefined>;
|
|
7
|
-
export declare function getModelRequestAuth(model: Model<Api>, authStorage: AuthStorage, providerRequestConfigs: Map<string, ProviderRequestConfig>, modelRequestHeaders: Map<string, Record<string, string>>, providerAuth?: ModelAuth): Promise<ResolvedRequestAuth>;
|
|
8
|
-
export declare function getProviderAuthStatusFromConfig(provider: string, authStorage: AuthStorage, providerRequestConfigs: Map<string, ProviderRequestConfig>): AuthStatus;
|
|
9
|
-
export declare function getApiKeyForProviderFromConfig(provider: string, authStorage: AuthStorage, providerRequestConfigs: Map<string, ProviderRequestConfig>): Promise<string | undefined>;
|
|
10
|
-
//# sourceMappingURL=model-registry-auth.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-registry-auth.d.ts","sourceRoot":"","sources":["../../src/core/model-registry-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAmB,MAAM,uBAAuB,CAAC;AACxE,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACjE,OAAO,KAAK,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAS5F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAiB/E,wBAAsB,uBAAuB,CAC5C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,EACxB,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,GACxD,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC,CAE/C;AAkBD,wBAAsB,mBAAmB,CACxC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,WAAW,EAAE,WAAW,EACxB,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,EAC1D,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EACxD,YAAY,CAAC,EAAE,SAAS,GACtB,OAAO,CAAC,mBAAmB,CAAC,CA8C9B;AAED,wBAAgB,+BAA+B,CAC9C,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,EACxB,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,GACxD,UAAU,CAuBZ;AAED,wBAAsB,8BAA8B,CACnD,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,EACxB,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,qBAAqB,CAAC,GACxD,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ7B"}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { getConfigValueEnvVarNames, isCommandConfigValue, isConfigValueConfigured, resolveConfigValueOrThrow, resolveConfigValueUncached, resolveHeadersOrThrow, } from "./resolve-config-value.js";
|
|
2
|
-
async function resolveCustomApiKeyAuth(provider, authStorage, providerRequestConfigs) {
|
|
3
|
-
const resolver = providerRequestConfigs.get(provider)?.auth?.apiKey?.resolve;
|
|
4
|
-
if (!resolver)
|
|
5
|
-
return undefined;
|
|
6
|
-
const stored = authStorage.get(provider);
|
|
7
|
-
const credential = stored?.type === "api_key" ? stored : undefined;
|
|
8
|
-
return resolver({
|
|
9
|
-
credential,
|
|
10
|
-
ctx: { env: async (name) => credential?.env?.[name] ?? process.env[name] },
|
|
11
|
-
});
|
|
12
|
-
}
|
|
13
|
-
export async function getProviderResolvedAuth(provider, authStorage, providerRequestConfigs) {
|
|
14
|
-
return resolveCustomApiKeyAuth(provider, authStorage, providerRequestConfigs);
|
|
15
|
-
}
|
|
16
|
-
function mergeHeaders(base, override) {
|
|
17
|
-
if (!base && !override)
|
|
18
|
-
return undefined;
|
|
19
|
-
const merged = {};
|
|
20
|
-
for (const source of [base, override]) {
|
|
21
|
-
for (const [name, value] of Object.entries(source ?? {})) {
|
|
22
|
-
for (const existing of Object.keys(merged)) {
|
|
23
|
-
if (existing.toLowerCase() === name.toLowerCase())
|
|
24
|
-
delete merged[existing];
|
|
25
|
-
}
|
|
26
|
-
merged[name] = value;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return Object.keys(merged).length > 0 ? merged : undefined;
|
|
30
|
-
}
|
|
31
|
-
export async function getModelRequestAuth(model, authStorage, providerRequestConfigs, modelRequestHeaders, providerAuth) {
|
|
32
|
-
try {
|
|
33
|
-
const providerConfig = providerRequestConfigs.get(model.provider);
|
|
34
|
-
const customAuth = await resolveCustomApiKeyAuth(model.provider, authStorage, providerRequestConfigs);
|
|
35
|
-
const storedAuth = await authStorage.getModelAuth(model.provider, { includeFallback: false });
|
|
36
|
-
const apiKey = providerAuth?.apiKey ??
|
|
37
|
-
customAuth?.auth.apiKey ??
|
|
38
|
-
storedAuth?.apiKey ??
|
|
39
|
-
(providerConfig?.apiKey
|
|
40
|
-
? resolveConfigValueOrThrow(providerConfig.apiKey, `API key for provider "${model.provider}"`)
|
|
41
|
-
: undefined);
|
|
42
|
-
const providerHeaders = resolveHeadersOrThrow(providerConfig?.headers, `provider "${model.provider}"`);
|
|
43
|
-
const modelHeaders = resolveHeadersOrThrow(modelRequestHeaders.get(`${model.provider}:${model.id}`), `model "${model.provider}/${model.id}"`);
|
|
44
|
-
let headers = providerAuth
|
|
45
|
-
? mergeHeaders(model.headers, providerAuth.headers)
|
|
46
|
-
: mergeHeaders(storedAuth?.headers, model.headers);
|
|
47
|
-
headers = mergeHeaders(headers, customAuth?.auth.headers);
|
|
48
|
-
headers = mergeHeaders(headers, providerHeaders);
|
|
49
|
-
headers = mergeHeaders(headers, modelHeaders);
|
|
50
|
-
if (providerConfig?.authHeader) {
|
|
51
|
-
if (!apiKey) {
|
|
52
|
-
return { ok: false, error: `No API key found for "${model.provider}"` };
|
|
53
|
-
}
|
|
54
|
-
headers = { ...headers, Authorization: `Bearer ${apiKey}` };
|
|
55
|
-
}
|
|
56
|
-
return {
|
|
57
|
-
ok: true,
|
|
58
|
-
apiKey,
|
|
59
|
-
headers: headers && Object.keys(headers).length > 0 ? headers : undefined,
|
|
60
|
-
baseUrl: providerAuth?.baseUrl ?? customAuth?.auth.baseUrl ?? storedAuth?.baseUrl,
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
catch (error) {
|
|
64
|
-
return {
|
|
65
|
-
ok: false,
|
|
66
|
-
error: error instanceof Error ? error.message : String(error),
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
export function getProviderAuthStatusFromConfig(provider, authStorage, providerRequestConfigs) {
|
|
71
|
-
const authStatus = authStorage.getAuthStatus(provider);
|
|
72
|
-
if (authStatus.source) {
|
|
73
|
-
return authStatus;
|
|
74
|
-
}
|
|
75
|
-
const providerApiKey = providerRequestConfigs.get(provider)?.apiKey;
|
|
76
|
-
if (!providerApiKey) {
|
|
77
|
-
return authStatus;
|
|
78
|
-
}
|
|
79
|
-
if (isCommandConfigValue(providerApiKey)) {
|
|
80
|
-
return { configured: true, source: "models_json_command" };
|
|
81
|
-
}
|
|
82
|
-
const envVarNames = getConfigValueEnvVarNames(providerApiKey);
|
|
83
|
-
if (envVarNames.length > 0) {
|
|
84
|
-
return isConfigValueConfigured(providerApiKey)
|
|
85
|
-
? { configured: true, source: "environment", label: envVarNames.join(", ") }
|
|
86
|
-
: { configured: false };
|
|
87
|
-
}
|
|
88
|
-
return { configured: true, source: "models_json_key" };
|
|
89
|
-
}
|
|
90
|
-
export async function getApiKeyForProviderFromConfig(provider, authStorage, providerRequestConfigs) {
|
|
91
|
-
const apiKey = await authStorage.getApiKey(provider, { includeFallback: false });
|
|
92
|
-
if (apiKey !== undefined) {
|
|
93
|
-
return apiKey;
|
|
94
|
-
}
|
|
95
|
-
const providerApiKey = providerRequestConfigs.get(provider)?.apiKey;
|
|
96
|
-
return providerApiKey ? resolveConfigValueUncached(providerApiKey) : undefined;
|
|
97
|
-
}
|
|
98
|
-
//# sourceMappingURL=model-registry-auth.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-registry-auth.js","sourceRoot":"","sources":["../../src/core/model-registry-auth.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ModelAuth, ProviderHeaders } from \"@earendil-works/pi-ai\";\nimport type { Api, Model } from \"@earendil-works/pi-ai/compat\";\nimport type { AuthStatus, AuthStorage } from \"./auth-storage.ts\";\nimport type { ProviderRequestConfig, ResolvedRequestAuth } from \"./model-registry-types.ts\";\nimport {\n\tgetConfigValueEnvVarNames,\n\tisCommandConfigValue,\n\tisConfigValueConfigured,\n\tresolveConfigValueOrThrow,\n\tresolveConfigValueUncached,\n\tresolveHeadersOrThrow,\n} from \"./resolve-config-value.ts\";\nimport type { ProviderApiKeyAuthResult } from \"./extensions/provider-types.ts\";\n\nasync function resolveCustomApiKeyAuth(\n\tprovider: string,\n\tauthStorage: AuthStorage,\n\tproviderRequestConfigs: Map<string, ProviderRequestConfig>,\n): Promise<ProviderApiKeyAuthResult | undefined> {\n\tconst resolver = providerRequestConfigs.get(provider)?.auth?.apiKey?.resolve;\n\tif (!resolver) return undefined;\n\tconst stored = authStorage.get(provider);\n\tconst credential = stored?.type === \"api_key\" ? stored : undefined;\n\treturn resolver({\n\t\tcredential,\n\t\tctx: { env: async (name) => credential?.env?.[name] ?? process.env[name] },\n\t});\n}\n\nexport async function getProviderResolvedAuth(\n\tprovider: string,\n\tauthStorage: AuthStorage,\n\tproviderRequestConfigs: Map<string, ProviderRequestConfig>,\n): Promise<ProviderApiKeyAuthResult | undefined> {\n\treturn resolveCustomApiKeyAuth(provider, authStorage, providerRequestConfigs);\n}\nfunction mergeHeaders(\n\tbase: ProviderHeaders | undefined,\n\toverride: ProviderHeaders | undefined,\n): ProviderHeaders | undefined {\n\tif (!base && !override) return undefined;\n\tconst merged: ProviderHeaders = {};\n\tfor (const source of [base, override]) {\n\t\tfor (const [name, value] of Object.entries(source ?? {})) {\n\t\t\tfor (const existing of Object.keys(merged)) {\n\t\t\t\tif (existing.toLowerCase() === name.toLowerCase()) delete merged[existing];\n\t\t\t}\n\t\t\tmerged[name] = value;\n\t\t}\n\t}\n\treturn Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nexport async function getModelRequestAuth(\n\tmodel: Model<Api>,\n\tauthStorage: AuthStorage,\n\tproviderRequestConfigs: Map<string, ProviderRequestConfig>,\n\tmodelRequestHeaders: Map<string, Record<string, string>>,\n\tproviderAuth?: ModelAuth,\n): Promise<ResolvedRequestAuth> {\n\ttry {\n\t\tconst providerConfig = providerRequestConfigs.get(model.provider);\n\t\tconst customAuth = await resolveCustomApiKeyAuth(model.provider, authStorage, providerRequestConfigs);\n\t\tconst storedAuth = await authStorage.getModelAuth(model.provider, { includeFallback: false });\n\t\tconst apiKey =\n\t\t\tproviderAuth?.apiKey ??\n\t\t\tcustomAuth?.auth.apiKey ??\n\t\t\tstoredAuth?.apiKey ??\n\t\t\t(providerConfig?.apiKey\n\t\t\t\t? resolveConfigValueOrThrow(providerConfig.apiKey, `API key for provider \"${model.provider}\"`)\n\t\t\t\t: undefined);\n\n\t\tconst providerHeaders = resolveHeadersOrThrow(providerConfig?.headers, `provider \"${model.provider}\"`);\n\t\tconst modelHeaders = resolveHeadersOrThrow(\n\t\t\tmodelRequestHeaders.get(`${model.provider}:${model.id}`),\n\t\t\t`model \"${model.provider}/${model.id}\"`,\n\t\t);\n\n\t\tlet headers = providerAuth\n\t\t\t? mergeHeaders(model.headers, providerAuth.headers)\n\t\t\t: mergeHeaders(storedAuth?.headers, model.headers);\n\t\theaders = mergeHeaders(headers, customAuth?.auth.headers);\n\t\theaders = mergeHeaders(headers, providerHeaders);\n\t\theaders = mergeHeaders(headers, modelHeaders);\n\n\t\tif (providerConfig?.authHeader) {\n\t\t\tif (!apiKey) {\n\t\t\t\treturn { ok: false, error: `No API key found for \"${model.provider}\"` };\n\t\t\t}\n\t\t\theaders = { ...headers, Authorization: `Bearer ${apiKey}` };\n\t\t}\n\n\n\t\treturn {\n\t\t\tok: true,\n\t\t\tapiKey,\n\t\t\theaders: headers && Object.keys(headers).length > 0 ? headers : undefined,\n\t\t\tbaseUrl: providerAuth?.baseUrl ?? customAuth?.auth.baseUrl ?? storedAuth?.baseUrl,\n\t\t};\n\t} catch (error) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: error instanceof Error ? error.message : String(error),\n\t\t};\n\t}\n}\n\nexport function getProviderAuthStatusFromConfig(\n\tprovider: string,\n\tauthStorage: AuthStorage,\n\tproviderRequestConfigs: Map<string, ProviderRequestConfig>,\n): AuthStatus {\n\tconst authStatus = authStorage.getAuthStatus(provider);\n\tif (authStatus.source) {\n\t\treturn authStatus;\n\t}\n\n\tconst providerApiKey = providerRequestConfigs.get(provider)?.apiKey;\n\tif (!providerApiKey) {\n\t\treturn authStatus;\n\t}\n\n\tif (isCommandConfigValue(providerApiKey)) {\n\t\treturn { configured: true, source: \"models_json_command\" };\n\t}\n\n\tconst envVarNames = getConfigValueEnvVarNames(providerApiKey);\n\tif (envVarNames.length > 0) {\n\t\treturn isConfigValueConfigured(providerApiKey)\n\t\t\t? { configured: true, source: \"environment\", label: envVarNames.join(\", \") }\n\t\t\t: { configured: false };\n\t}\n\n\treturn { configured: true, source: \"models_json_key\" };\n}\n\nexport async function getApiKeyForProviderFromConfig(\n\tprovider: string,\n\tauthStorage: AuthStorage,\n\tproviderRequestConfigs: Map<string, ProviderRequestConfig>,\n): Promise<string | undefined> {\n\tconst apiKey = await authStorage.getApiKey(provider, { includeFallback: false });\n\tif (apiKey !== undefined) {\n\t\treturn apiKey;\n\t}\n\n\tconst providerApiKey = providerRequestConfigs.get(provider)?.apiKey;\n\treturn providerApiKey ? resolveConfigValueUncached(providerApiKey) : undefined;\n}\n"]}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { type Api, type Model } from "@earendil-works/pi-ai/compat";
|
|
2
|
-
import type { ModelOverride } from "./model-registry-schemas.ts";
|
|
3
|
-
import type { ProviderOverride } from "./model-registry-types.ts";
|
|
4
|
-
export declare function mergeCompat(baseCompat: Model<Api>["compat"], overrideCompat: ModelOverride["compat"] | Model<Api>["compat"]): Model<Api>["compat"] | undefined;
|
|
5
|
-
export declare function applyModelOverride(model: Model<Api>, override: ModelOverride): Model<Api>;
|
|
6
|
-
export declare function loadBuiltInModels(overrides: Map<string, ProviderOverride>, modelOverrides: Map<string, Map<string, ModelOverride>>, baseModels?: readonly Model<Api>[]): Model<Api>[];
|
|
7
|
-
export declare function mergeCustomModels(builtInModels: Model<Api>[], customModels: Model<Api>[]): Model<Api>[];
|
|
8
|
-
//# sourceMappingURL=model-registry-builtins.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-registry-builtins.d.ts","sourceRoot":"","sources":["../../src/core/model-registry-builtins.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,GAAG,EAIR,KAAK,KAAK,EAEV,MAAM,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAkB,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGlF,wBAAgB,WAAW,CAC1B,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,EAChC,cAAc,EAAE,aAAa,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAC5D,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,SAAS,CAiClC;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CA4BzF;AAED,wBAAgB,iBAAiB,CAChC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACxC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,EACvD,UAAU,CAAC,EAAE,SAAS,KAAK,CAAC,GAAG,CAAC,EAAE,GAChC,KAAK,CAAC,GAAG,CAAC,EAAE,CA4Bd;AAED,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,CAWvG"}
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { getModels, getProviders, } from "@earendil-works/pi-ai/compat";
|
|
2
|
-
import { normalizeGrammarToolCapability } from "./model-capabilities.js";
|
|
3
|
-
export function mergeCompat(baseCompat, overrideCompat) {
|
|
4
|
-
if (!overrideCompat)
|
|
5
|
-
return normalizeGrammarToolCapability(baseCompat);
|
|
6
|
-
const base = baseCompat;
|
|
7
|
-
const override = overrideCompat;
|
|
8
|
-
const merged = { ...base, ...override };
|
|
9
|
-
const baseCompletions = base;
|
|
10
|
-
const overrideCompletions = override;
|
|
11
|
-
const mergedCompletions = merged;
|
|
12
|
-
if (baseCompletions?.openRouterRouting || overrideCompletions.openRouterRouting) {
|
|
13
|
-
mergedCompletions.openRouterRouting = {
|
|
14
|
-
...baseCompletions?.openRouterRouting,
|
|
15
|
-
...overrideCompletions.openRouterRouting,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
if (baseCompletions?.vercelGatewayRouting || overrideCompletions.vercelGatewayRouting) {
|
|
19
|
-
mergedCompletions.vercelGatewayRouting = {
|
|
20
|
-
...baseCompletions?.vercelGatewayRouting,
|
|
21
|
-
...overrideCompletions.vercelGatewayRouting,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
if (baseCompletions?.chatTemplateKwargs || overrideCompletions.chatTemplateKwargs) {
|
|
25
|
-
mergedCompletions.chatTemplateKwargs = {
|
|
26
|
-
...baseCompletions?.chatTemplateKwargs,
|
|
27
|
-
...overrideCompletions.chatTemplateKwargs,
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
return normalizeGrammarToolCapability(merged);
|
|
31
|
-
}
|
|
32
|
-
export function applyModelOverride(model, override) {
|
|
33
|
-
const result = { ...model };
|
|
34
|
-
if (override.name !== undefined)
|
|
35
|
-
result.name = override.name;
|
|
36
|
-
if (override.reasoning !== undefined)
|
|
37
|
-
result.reasoning = override.reasoning;
|
|
38
|
-
if (override.thinkingLevelMap !== undefined) {
|
|
39
|
-
result.thinkingLevelMap = { ...model.thinkingLevelMap, ...override.thinkingLevelMap };
|
|
40
|
-
}
|
|
41
|
-
if (override.input !== undefined)
|
|
42
|
-
result.input = override.input;
|
|
43
|
-
if (override.contextWindow !== undefined)
|
|
44
|
-
result.contextWindow = override.contextWindow;
|
|
45
|
-
if (override.maxTokens !== undefined)
|
|
46
|
-
result.maxTokens = override.maxTokens;
|
|
47
|
-
if (override.cost) {
|
|
48
|
-
result.cost = {
|
|
49
|
-
input: override.cost.input ?? model.cost.input,
|
|
50
|
-
output: override.cost.output ?? model.cost.output,
|
|
51
|
-
cacheRead: override.cost.cacheRead ?? model.cost.cacheRead,
|
|
52
|
-
cacheWrite: override.cost.cacheWrite ?? model.cost.cacheWrite,
|
|
53
|
-
...(override.cost.tiers !== undefined
|
|
54
|
-
? { tiers: override.cost.tiers }
|
|
55
|
-
: model.cost.tiers !== undefined
|
|
56
|
-
? { tiers: model.cost.tiers }
|
|
57
|
-
: {}),
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
result.compat = mergeCompat(model.compat, override.compat);
|
|
61
|
-
return result;
|
|
62
|
-
}
|
|
63
|
-
export function loadBuiltInModels(overrides, modelOverrides, baseModels) {
|
|
64
|
-
const providers = baseModels
|
|
65
|
-
? [...new Set(baseModels.map((model) => model.provider))]
|
|
66
|
-
: getProviders();
|
|
67
|
-
return providers.flatMap((provider) => {
|
|
68
|
-
const providerModels = baseModels
|
|
69
|
-
? baseModels.filter((model) => model.provider === provider)
|
|
70
|
-
: getModels(provider);
|
|
71
|
-
const models = [...providerModels];
|
|
72
|
-
const providerOverride = overrides.get(provider);
|
|
73
|
-
const perModelOverrides = modelOverrides.get(provider);
|
|
74
|
-
return models.map((candidate) => {
|
|
75
|
-
let model = {
|
|
76
|
-
...candidate,
|
|
77
|
-
compat: normalizeGrammarToolCapability(candidate.compat),
|
|
78
|
-
};
|
|
79
|
-
if (providerOverride) {
|
|
80
|
-
model = {
|
|
81
|
-
...model,
|
|
82
|
-
baseUrl: providerOverride.baseUrl ?? model.baseUrl,
|
|
83
|
-
compat: mergeCompat(model.compat, providerOverride.compat),
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
const modelOverride = perModelOverrides?.get(candidate.id);
|
|
87
|
-
return modelOverride ? applyModelOverride(model, modelOverride) : model;
|
|
88
|
-
});
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
export function mergeCustomModels(builtInModels, customModels) {
|
|
92
|
-
const merged = [...builtInModels];
|
|
93
|
-
for (const customModel of customModels) {
|
|
94
|
-
const existingIndex = merged.findIndex((m) => m.provider === customModel.provider && m.id === customModel.id);
|
|
95
|
-
if (existingIndex >= 0) {
|
|
96
|
-
merged[existingIndex] = customModel;
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
merged.push(customModel);
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return merged;
|
|
103
|
-
}
|
|
104
|
-
//# sourceMappingURL=model-registry-builtins.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-registry-builtins.js","sourceRoot":"","sources":["../../src/core/model-registry-builtins.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\ttype Api,\n\tgetModels,\n\tgetProviders,\n\ttype BuiltinProvider,\n\ttype Model,\n\ttype OpenAICompletionsCompat,\n} from \"@earendil-works/pi-ai/compat\";\nimport { normalizeGrammarToolCapability } from \"./model-capabilities.ts\";\nimport type { ModelOverride } from \"./model-registry-schemas.ts\";\nimport type { ProviderCompat, ProviderOverride } from \"./model-registry-types.ts\";\n\n\nexport function mergeCompat(\n\tbaseCompat: Model<Api>[\"compat\"],\n\toverrideCompat: ModelOverride[\"compat\"] | Model<Api>[\"compat\"],\n): Model<Api>[\"compat\"] | undefined {\n\tif (!overrideCompat) return normalizeGrammarToolCapability(baseCompat);\n\n\tconst base = baseCompat as ProviderCompat | undefined;\n\tconst override = overrideCompat as ProviderCompat;\n\tconst merged = { ...base, ...override } as ProviderCompat;\n\n\tconst baseCompletions = base as OpenAICompletionsCompat | undefined;\n\tconst overrideCompletions = override as OpenAICompletionsCompat;\n\tconst mergedCompletions = merged as OpenAICompletionsCompat;\n\n\tif (baseCompletions?.openRouterRouting || overrideCompletions.openRouterRouting) {\n\t\tmergedCompletions.openRouterRouting = {\n\t\t\t...baseCompletions?.openRouterRouting,\n\t\t\t...overrideCompletions.openRouterRouting,\n\t\t};\n\t}\n\n\tif (baseCompletions?.vercelGatewayRouting || overrideCompletions.vercelGatewayRouting) {\n\t\tmergedCompletions.vercelGatewayRouting = {\n\t\t\t...baseCompletions?.vercelGatewayRouting,\n\t\t\t...overrideCompletions.vercelGatewayRouting,\n\t\t};\n\t}\n\n\tif (baseCompletions?.chatTemplateKwargs || overrideCompletions.chatTemplateKwargs) {\n\t\tmergedCompletions.chatTemplateKwargs = {\n\t\t\t...baseCompletions?.chatTemplateKwargs,\n\t\t\t...overrideCompletions.chatTemplateKwargs,\n\t\t};\n\t}\n\n\treturn normalizeGrammarToolCapability(merged);\n}\n\nexport function applyModelOverride(model: Model<Api>, override: ModelOverride): Model<Api> {\n\tconst result = { ...model };\n\n\tif (override.name !== undefined) result.name = override.name;\n\tif (override.reasoning !== undefined) result.reasoning = override.reasoning;\n\tif (override.thinkingLevelMap !== undefined) {\n\t\tresult.thinkingLevelMap = { ...model.thinkingLevelMap, ...override.thinkingLevelMap };\n\t}\n\tif (override.input !== undefined) result.input = override.input as (\"text\" | \"image\")[];\n\tif (override.contextWindow !== undefined) result.contextWindow = override.contextWindow;\n\tif (override.maxTokens !== undefined) result.maxTokens = override.maxTokens;\n\n\tif (override.cost) {\n\t\tresult.cost = {\n\t\t\tinput: override.cost.input ?? model.cost.input,\n\t\t\toutput: override.cost.output ?? model.cost.output,\n\t\t\tcacheRead: override.cost.cacheRead ?? model.cost.cacheRead,\n\t\t\tcacheWrite: override.cost.cacheWrite ?? model.cost.cacheWrite,\n\t\t\t...(override.cost.tiers !== undefined\n\t\t\t\t? { tiers: override.cost.tiers }\n\t\t\t\t: model.cost.tiers !== undefined\n\t\t\t\t\t? { tiers: model.cost.tiers }\n\t\t\t\t\t: {}),\n\t\t};\n\t}\n\n\tresult.compat = mergeCompat(model.compat, override.compat);\n\treturn result;\n}\n\nexport function loadBuiltInModels(\n\toverrides: Map<string, ProviderOverride>,\n\tmodelOverrides: Map<string, Map<string, ModelOverride>>,\n\tbaseModels?: readonly Model<Api>[],\n): Model<Api>[] {\n\tconst providers = baseModels\n\t\t? [...new Set(baseModels.map((model) => model.provider))]\n\t\t: getProviders();\n\treturn providers.flatMap((provider) => {\n\t\tconst providerModels = baseModels\n\t\t\t? baseModels.filter((model) => model.provider === provider)\n\t\t\t: getModels(provider as BuiltinProvider) as Model<Api>[];\n\t\tconst models = [...providerModels];\n\t\tconst providerOverride = overrides.get(provider);\n\t\tconst perModelOverrides = modelOverrides.get(provider);\n\n\t\treturn models.map((candidate) => {\n\t\t\tlet model: Model<Api> = {\n\t\t\t\t...candidate,\n\t\t\t\tcompat: normalizeGrammarToolCapability(candidate.compat),\n\t\t\t};\n\t\t\tif (providerOverride) {\n\t\t\t\tmodel = {\n\t\t\t\t\t...model,\n\t\t\t\t\tbaseUrl: providerOverride.baseUrl ?? model.baseUrl,\n\t\t\t\t\tcompat: mergeCompat(model.compat, providerOverride.compat),\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst modelOverride = perModelOverrides?.get(candidate.id);\n\t\t\treturn modelOverride ? applyModelOverride(model, modelOverride) : model;\n\t\t});\n\t});\n}\n\nexport function mergeCustomModels(builtInModels: Model<Api>[], customModels: Model<Api>[]): Model<Api>[] {\n\tconst merged = [...builtInModels];\n\tfor (const customModel of customModels) {\n\t\tconst existingIndex = merged.findIndex((m) => m.provider === customModel.provider && m.id === customModel.id);\n\t\tif (existingIndex >= 0) {\n\t\t\tmerged[existingIndex] = customModel;\n\t\t} else {\n\t\t\tmerged.push(customModel);\n\t\t}\n\t}\n\treturn merged;\n}\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-registry-custom-loader.d.ts","sourceRoot":"","sources":["../../src/core/model-registry-custom-loader.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACX,kBAAkB,EAIlB,MAAM,2BAA2B,CAAC;AA0SnC,wBAAgB,yBAAyB,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,kBAAkB,CAYvF"}
|