@astralyn/pi 0.82.7 → 0.84.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +78 -5099
- package/README.md +12 -111
- package/dist/bun/cli.d.ts.map +1 -1
- package/dist/bun/cli.js.map +1 -1
- package/dist/bun/register-bedrock.d.ts.map +1 -1
- package/dist/bun/restore-sandbox-env.d.ts.map +1 -1
- package/dist/bun/restore-sandbox-env.js.map +1 -1
- package/dist/cli/args.d.ts +2 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +28 -2
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +2 -2
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/credential-print.d.ts +23 -0
- package/dist/cli/credential-print.d.ts.map +1 -0
- package/dist/cli/credential-print.js +117 -0
- package/dist/cli/credential-print.js.map +1 -0
- package/dist/cli/experimental/auth.d.ts +16 -0
- package/dist/cli/experimental/auth.d.ts.map +1 -0
- package/dist/cli/experimental/auth.js +13 -0
- package/dist/cli/experimental/auth.js.map +1 -0
- package/dist/cli/experimental/cli.d.ts +6 -0
- package/dist/cli/experimental/cli.d.ts.map +1 -0
- package/dist/cli/experimental/cli.js +5 -0
- package/dist/cli/experimental/cli.js.map +1 -0
- package/dist/cli/experimental/command-options.d.ts +17 -0
- package/dist/cli/experimental/command-options.d.ts.map +1 -0
- package/dist/cli/experimental/command-options.js +35 -0
- package/dist/cli/experimental/command-options.js.map +1 -0
- package/dist/cli/experimental/command.d.ts +63 -0
- package/dist/cli/experimental/command.d.ts.map +1 -0
- package/dist/cli/experimental/command.js +127 -0
- package/dist/cli/experimental/command.js.map +1 -0
- package/dist/cli/experimental/commands/client.d.ts +13 -0
- package/dist/cli/experimental/commands/client.d.ts.map +1 -0
- package/dist/cli/experimental/commands/client.js +25 -0
- package/dist/cli/experimental/commands/client.js.map +1 -0
- package/dist/cli/experimental/commands/pi.d.ts +15 -0
- package/dist/cli/experimental/commands/pi.d.ts.map +1 -0
- package/dist/cli/experimental/commands/pi.js +28 -0
- package/dist/cli/experimental/commands/pi.js.map +1 -0
- package/dist/cli/experimental/commands/server.d.ts +13 -0
- package/dist/cli/experimental/commands/server.d.ts.map +1 -0
- package/dist/cli/experimental/commands/server.js +25 -0
- package/dist/cli/experimental/commands/server.js.map +1 -0
- package/dist/cli/experimental/transport-address.d.ts +10 -0
- package/dist/cli/experimental/transport-address.d.ts.map +1 -0
- package/dist/cli/experimental/transport-address.js +38 -0
- package/dist/cli/experimental/transport-address.js.map +1 -0
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/initial-message.d.ts +1 -1
- package/dist/cli/initial-message.d.ts.map +1 -1
- package/dist/cli/initial-message.js.map +1 -1
- package/dist/cli/list-models.d.ts +1 -1
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +2 -2
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/project-trust.d.ts.map +1 -1
- package/dist/cli/project-trust.js.map +1 -1
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli/startup-ui.d.ts +1 -1
- package/dist/cli/startup-ui.d.ts.map +1 -1
- package/dist/cli/startup-ui.js +2 -2
- package/dist/cli/startup-ui.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +1 -0
- package/dist/cli.js.map +1 -1
- package/dist/client/index.d.ts +3 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +3 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/remote-session.d.ts +53 -0
- package/dist/client/remote-session.d.ts.map +1 -0
- package/dist/client/remote-session.js +340 -0
- package/dist/client/remote-session.js.map +1 -0
- package/dist/client/transcript.d.ts +12 -0
- package/dist/client/transcript.d.ts.map +1 -0
- package/dist/client/transcript.js +98 -0
- package/dist/client/transcript.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session-runtime.d.ts.map +1 -1
- package/dist/core/agent-session-runtime.js +3 -8
- package/dist/core/agent-session-runtime.js.map +1 -1
- package/dist/core/agent-session-services.d.ts +1 -0
- package/dist/core/agent-session-services.d.ts.map +1 -1
- package/dist/core/agent-session-services.js +1 -0
- package/dist/core/agent-session-services.js.map +1 -1
- package/dist/core/agent-session.d.ts +31 -11
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +189 -192
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-guidance.d.ts.map +1 -1
- package/dist/core/auth-guidance.js.map +1 -1
- package/dist/core/auth-storage.d.ts +15 -9
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +159 -41
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/cache-stats.d.ts.map +1 -1
- package/dist/core/cache-stats.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +1 -1
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts.map +1 -1
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/index.d.ts.map +1 -1
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/defaults.d.ts.map +1 -1
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js.map +1 -1
- package/dist/core/experimental.d.ts.map +1 -1
- package/dist/core/experimental.js.map +1 -1
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/extensions/index.d.ts +1 -1
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +43 -20
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +3 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +31 -28
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +28 -3
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/extensions/types.js.map +1 -1
- package/dist/core/extensions/wrapper.d.ts.map +1 -1
- package/dist/core/extensions/wrapper.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +10 -0
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +18 -19
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/http-dispatcher.d.ts.map +1 -1
- package/dist/core/http-dispatcher.js +5 -0
- package/dist/core/http-dispatcher.js.map +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/keybindings.d.ts +157 -125
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +0 -1
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/messages.d.ts.map +1 -1
- package/dist/core/messages.js.map +1 -1
- package/dist/core/model-config.d.ts +37 -13
- package/dist/core/model-config.d.ts.map +1 -1
- package/dist/core/model-config.js +4 -2
- package/dist/core/model-config.js.map +1 -1
- package/dist/core/model-registry.d.ts +5 -3
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +13 -11
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +4 -3
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +41 -10
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/model-runtime.d.ts +30 -13
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +239 -91
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/models-store.d.ts +12 -7
- package/dist/core/models-store.d.ts.map +1 -1
- package/dist/core/models-store.js +84 -16
- package/dist/core/models-store.js.map +1 -1
- package/dist/core/output-guard.d.ts.map +1 -1
- package/dist/core/output-guard.js.map +1 -1
- package/dist/core/package-manager.d.ts +4 -1
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +76 -48
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/pi-manifest.d.ts +8 -0
- package/dist/core/pi-manifest.d.ts.map +1 -0
- package/dist/core/pi-manifest.js +25 -0
- package/dist/core/pi-manifest.js.map +1 -0
- package/dist/core/project-trust.d.ts.map +1 -1
- package/dist/core/project-trust.js.map +1 -1
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/provider-attribution.d.ts.map +1 -1
- package/dist/core/provider-attribution.js.map +1 -1
- package/dist/core/provider-composer.d.ts +4 -1
- package/dist/core/provider-composer.d.ts.map +1 -1
- package/dist/core/provider-composer.js +36 -15
- package/dist/core/provider-composer.js.map +1 -1
- package/dist/core/radius.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.d.ts.map +1 -1
- package/dist/core/remote-catalog-provider.js +73 -67
- package/dist/core/remote-catalog-provider.js.map +1 -1
- package/dist/core/resolve-config-value.d.ts.map +1 -1
- package/dist/core/resolve-config-value.js.map +1 -1
- package/dist/core/resource-loader.d.ts +15 -0
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +68 -51
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/runtime-credentials.d.ts +5 -5
- package/dist/core/runtime-credentials.d.ts.map +1 -1
- package/dist/core/runtime-credentials.js +12 -10
- package/dist/core/runtime-credentials.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-cwd.d.ts.map +1 -1
- package/dist/core/session-cwd.js +0 -1
- package/dist/core/session-cwd.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +10 -12
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +12 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +47 -33
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/source-info.d.ts.map +1 -1
- package/dist/core/source-info.js.map +1 -1
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/telemetry.d.ts.map +1 -1
- package/dist/core/telemetry.js.map +1 -1
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js.map +1 -1
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +12 -10
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts.map +1 -1
- package/dist/core/tools/edit-diff.js.map +1 -1
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +4 -3
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/file-mutation-queue.d.ts.map +1 -1
- package/dist/core/tools/file-mutation-queue.js.map +1 -1
- package/dist/core/tools/find.d.ts +3 -0
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +47 -20
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/output-accumulator.d.ts.map +1 -1
- package/dist/core/tools/output-accumulator.js +12 -18
- package/dist/core/tools/output-accumulator.js.map +1 -1
- package/dist/core/tools/path-utils.d.ts.map +1 -1
- package/dist/core/tools/path-utils.js.map +1 -1
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +1 -1
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/render-utils.d.ts.map +1 -1
- package/dist/core/tools/render-utils.js.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.d.ts.map +1 -1
- package/dist/core/tools/tool-definition-wrapper.js.map +1 -1
- package/dist/core/tools/truncate.d.ts.map +1 -1
- package/dist/core/tools/truncate.js.map +1 -1
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +0 -1
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/trust-manager.d.ts.map +1 -1
- package/dist/core/trust-manager.js +48 -10
- package/dist/core/trust-manager.js.map +1 -1
- package/dist/core/usage-totals.d.ts.map +1 -1
- package/dist/core/usage-totals.js.map +1 -1
- package/dist/extensions/biu/index.d.ts +19 -0
- package/dist/extensions/biu/index.d.ts.map +1 -0
- package/dist/extensions/biu/index.js +350 -0
- package/dist/extensions/biu/index.js.map +1 -0
- package/dist/extensions/biu/prompts.d.ts +26 -0
- package/dist/extensions/biu/prompts.d.ts.map +1 -0
- package/dist/extensions/biu/prompts.js +260 -0
- package/dist/extensions/biu/prompts.js.map +1 -0
- package/dist/extensions/biu/workspace.d.ts +122 -0
- package/dist/extensions/biu/workspace.d.ts.map +1 -0
- package/dist/extensions/biu/workspace.js +404 -0
- package/dist/extensions/biu/workspace.js.map +1 -0
- package/dist/extensions/deepwiki/client.d.ts.map +1 -1
- package/dist/extensions/deepwiki/client.js.map +1 -1
- package/dist/extensions/deepwiki/constants.d.ts.map +1 -1
- package/dist/extensions/deepwiki/constants.js.map +1 -1
- package/dist/extensions/deepwiki/contents.d.ts.map +1 -1
- package/dist/extensions/deepwiki/contents.js.map +1 -1
- package/dist/extensions/deepwiki/execute.d.ts.map +1 -1
- package/dist/extensions/deepwiki/execute.js.map +1 -1
- package/dist/extensions/deepwiki/http.d.ts.map +1 -1
- package/dist/extensions/deepwiki/http.js.map +1 -1
- package/dist/extensions/deepwiki/index.d.ts.map +1 -1
- package/dist/extensions/deepwiki/index.js.map +1 -1
- package/dist/extensions/deepwiki/render.d.ts.map +1 -1
- package/dist/extensions/deepwiki/render.js.map +1 -1
- package/dist/extensions/deepwiki/schema.d.ts +1 -1
- package/dist/extensions/deepwiki/schema.d.ts.map +1 -1
- package/dist/extensions/deepwiki/schema.js.map +1 -1
- package/dist/extensions/index.d.ts.map +1 -1
- package/dist/extensions/index.js +2 -2
- package/dist/extensions/index.js.map +1 -1
- package/dist/extensions/llama/client.d.ts.map +1 -1
- package/dist/extensions/llama/client.js +0 -2
- package/dist/extensions/llama/client.js.map +1 -1
- package/dist/extensions/llama/huggingface.d.ts.map +1 -1
- package/dist/extensions/llama/huggingface.js +0 -2
- package/dist/extensions/llama/huggingface.js.map +1 -1
- package/dist/extensions/llama/index.d.ts.map +1 -1
- package/dist/extensions/llama/index.js +11 -2
- package/dist/extensions/llama/index.js.map +1 -1
- package/dist/extensions/llama/provider.d.ts.map +1 -1
- package/dist/extensions/llama/provider.js +22 -8
- package/dist/extensions/llama/provider.js.map +1 -1
- package/dist/extensions/llama/ui.d.ts.map +1 -1
- package/dist/extensions/llama/ui.js +12 -28
- package/dist/extensions/llama/ui.js.map +1 -1
- package/dist/extensions/question/constants.d.ts.map +1 -1
- package/dist/extensions/question/constants.js.map +1 -1
- package/dist/extensions/question/dialog-primitives.d.ts.map +1 -1
- package/dist/extensions/question/dialog-primitives.js.map +1 -1
- package/dist/extensions/question/dialog.d.ts.map +1 -1
- package/dist/extensions/question/dialog.js.map +1 -1
- package/dist/extensions/question/index.d.ts.map +1 -1
- package/dist/extensions/question/index.js.map +1 -1
- package/dist/extensions/question/limits.d.ts.map +1 -1
- package/dist/extensions/question/render-cache.d.ts.map +1 -1
- package/dist/extensions/question/render-cache.js +3 -4
- package/dist/extensions/question/render-cache.js.map +1 -1
- package/dist/extensions/question/render.d.ts.map +1 -1
- package/dist/extensions/question/render.js.map +1 -1
- package/dist/extensions/question/results.d.ts.map +1 -1
- package/dist/extensions/question/results.js.map +1 -1
- package/dist/extensions/question/schema.d.ts.map +1 -1
- package/dist/extensions/question/schema.js.map +1 -1
- package/dist/extensions/question/state.d.ts.map +1 -1
- package/dist/extensions/question/state.js.map +1 -1
- package/dist/extensions/question/types.d.ts.map +1 -1
- package/dist/extensions/rewind/anchor.d.ts.map +1 -1
- package/dist/extensions/rewind/anchor.js.map +1 -1
- package/dist/extensions/rewind/config.d.ts.map +1 -1
- package/dist/extensions/rewind/config.js.map +1 -1
- package/dist/extensions/rewind/engine.d.ts.map +1 -1
- package/dist/extensions/rewind/engine.js.map +1 -1
- package/dist/extensions/rewind/gc.d.ts.map +1 -1
- package/dist/extensions/rewind/gc.js.map +1 -1
- package/dist/extensions/rewind/index.d.ts.map +1 -1
- package/dist/extensions/rewind/index.js.map +1 -1
- package/dist/extensions/rewind/menu.d.ts.map +1 -1
- package/dist/extensions/rewind/menu.js.map +1 -1
- package/dist/extensions/rewind/paths.d.ts.map +1 -1
- package/dist/extensions/rewind/paths.js.map +1 -1
- package/dist/extensions/rewind/restore.d.ts.map +1 -1
- package/dist/extensions/rewind/restore.js.map +1 -1
- package/dist/extensions/rewind/snapshot.d.ts.map +1 -1
- package/dist/extensions/rewind/snapshot.js.map +1 -1
- package/dist/extensions/rewind/storage.d.ts.map +1 -1
- package/dist/extensions/rewind/storage.js.map +1 -1
- package/dist/extensions/rewind/text.d.ts.map +1 -1
- package/dist/extensions/rewind/text.js.map +1 -1
- package/dist/extensions/rewind/tool-path.d.ts.map +1 -1
- package/dist/extensions/rewind/tool-path.js.map +1 -1
- package/dist/extensions/router/constants.d.ts +3 -0
- package/dist/extensions/router/constants.d.ts.map +1 -1
- package/dist/extensions/router/constants.js +3 -0
- package/dist/extensions/router/constants.js.map +1 -1
- package/dist/extensions/router/dialog.d.ts +14 -7
- package/dist/extensions/router/dialog.d.ts.map +1 -1
- package/dist/extensions/router/dialog.js +70 -132
- package/dist/extensions/router/dialog.js.map +1 -1
- package/dist/extensions/router/index.d.ts.map +1 -1
- package/dist/extensions/router/index.js.map +1 -1
- package/dist/extensions/router/presets.d.ts +8 -3
- package/dist/extensions/router/presets.d.ts.map +1 -1
- package/dist/extensions/router/presets.js +33 -17
- package/dist/extensions/router/presets.js.map +1 -1
- package/dist/extensions/router/probe.d.ts.map +1 -1
- package/dist/extensions/router/probe.js.map +1 -1
- package/dist/extensions/router/register.d.ts +3 -3
- package/dist/extensions/router/register.d.ts.map +1 -1
- package/dist/extensions/router/register.js.map +1 -1
- package/dist/extensions/router/store.d.ts.map +1 -1
- package/dist/extensions/router/store.js.map +1 -1
- package/dist/extensions/router/stream.d.ts.map +1 -1
- package/dist/extensions/router/stream.js.map +1 -1
- package/dist/extensions/router/types.d.ts.map +1 -1
- package/dist/extensions/router/ui.d.ts +11 -2
- package/dist/extensions/router/ui.d.ts.map +1 -1
- package/dist/extensions/router/ui.js +316 -171
- package/dist/extensions/router/ui.js.map +1 -1
- package/dist/extensions/statusline/index.d.ts.map +1 -1
- package/dist/extensions/statusline/index.js +17 -9
- package/dist/extensions/statusline/index.js.map +1 -1
- package/dist/extensions/subagent/activity.d.ts.map +1 -1
- package/dist/extensions/subagent/activity.js.map +1 -1
- package/dist/extensions/subagent/agents.d.ts.map +1 -1
- package/dist/extensions/subagent/agents.js.map +1 -1
- package/dist/extensions/subagent/constants.d.ts.map +1 -1
- package/dist/extensions/subagent/index.d.ts +3 -0
- package/dist/extensions/subagent/index.d.ts.map +1 -1
- package/dist/extensions/subagent/index.js +83 -12
- package/dist/extensions/subagent/index.js.map +1 -1
- package/dist/extensions/subagent/picker.d.ts.map +1 -1
- package/dist/extensions/subagent/picker.js +2 -9
- package/dist/extensions/subagent/picker.js.map +1 -1
- package/dist/extensions/subagent/render.d.ts.map +1 -1
- package/dist/extensions/subagent/render.js +33 -9
- package/dist/extensions/subagent/render.js.map +1 -1
- package/dist/extensions/subagent/resolve.d.ts.map +1 -1
- package/dist/extensions/subagent/resolve.js.map +1 -1
- package/dist/extensions/subagent/retry.d.ts.map +1 -1
- package/dist/extensions/subagent/retry.js.map +1 -1
- package/dist/extensions/subagent/runner.d.ts +2 -1
- package/dist/extensions/subagent/runner.d.ts.map +1 -1
- package/dist/extensions/subagent/runner.js +10 -12
- package/dist/extensions/subagent/runner.js.map +1 -1
- package/dist/extensions/subagent/schema.d.ts.map +1 -1
- package/dist/extensions/subagent/schema.js.map +1 -1
- package/dist/extensions/subagent/sdk-runner.d.ts.map +1 -1
- package/dist/extensions/subagent/sdk-runner.js +41 -1
- package/dist/extensions/subagent/sdk-runner.js.map +1 -1
- package/dist/extensions/subagent/settings.d.ts.map +1 -1
- package/dist/extensions/subagent/settings.js +46 -36
- package/dist/extensions/subagent/settings.js.map +1 -1
- package/dist/extensions/subagent/types.d.ts +0 -1
- package/dist/extensions/subagent/types.d.ts.map +1 -1
- package/dist/extensions/subagent/types.js.map +1 -1
- package/dist/extensions/todo/constants.d.ts.map +1 -1
- package/dist/extensions/todo/constants.js.map +1 -1
- package/dist/extensions/todo/index.d.ts.map +1 -1
- package/dist/extensions/todo/index.js.map +1 -1
- package/dist/extensions/todo/overlay.d.ts.map +1 -1
- package/dist/extensions/todo/overlay.js +6 -10
- package/dist/extensions/todo/overlay.js.map +1 -1
- package/dist/extensions/todo/schema.d.ts +2 -2
- package/dist/extensions/todo/schema.d.ts.map +1 -1
- package/dist/extensions/todo/state.d.ts.map +1 -1
- package/dist/extensions/todo/state.js.map +1 -1
- package/dist/extensions/todo/view.d.ts.map +1 -1
- package/dist/extensions/todo/view.js.map +1 -1
- package/dist/index.d.ts +4 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +57 -5
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js.map +1 -1
- package/dist/modes/index.d.ts +1 -0
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/index.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js +6 -10
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +5 -2
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +13 -11
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +4 -10
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +0 -3
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +1 -3
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +1 -3
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +5 -22
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js +1 -7
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +8 -8
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-entry.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-entry.js +1 -4
- package/dist/modes/interactive/components/custom-entry.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +1 -7
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/daxnuts.d.ts.map +1 -1
- package/dist/modes/interactive/components/daxnuts.js +6 -8
- package/dist/modes/interactive/components/daxnuts.js.map +1 -1
- package/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js +0 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.d.ts.map +1 -1
- package/dist/modes/interactive/components/earendil-announcement.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +1 -7
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +2 -8
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +1 -9
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
- package/dist/modes/interactive/components/first-time-setup.js +2 -4
- package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +2 -4
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +3 -9
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/markdown-transform.d.ts +3 -0
- package/dist/modes/interactive/components/markdown-transform.d.ts.map +1 -0
- package/dist/modes/interactive/components/markdown-transform.js +19 -0
- package/dist/modes/interactive/components/markdown-transform.js.map +1 -0
- package/dist/modes/interactive/components/mermaid.d.ts +11 -0
- package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
- package/dist/modes/interactive/components/mermaid.js +75 -0
- package/dist/modes/interactive/components/mermaid.js.map +1 -0
- package/dist/modes/interactive/components/model-selector.d.ts +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +32 -30
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +3 -11
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +4 -0
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +34 -13
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +35 -60
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +8 -2
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +30 -14
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +0 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +1 -3
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/status-indicator.d.ts.map +1 -1
- package/dist/modes/interactive/components/status-indicator.js +0 -2
- package/dist/modes/interactive/components/status-indicator.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +0 -2
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +0 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +18 -36
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tool-group.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-group.js +2 -3
- package/dist/modes/interactive/components/tool-group.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +19 -39
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/trust-selector.js +0 -6
- package/dist/modes/interactive/components/trust-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +3 -6
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +3 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +8 -5
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/external-editor.d.ts.map +1 -1
- package/dist/modes/interactive/external-editor.js +40 -3
- package/dist/modes/interactive/external-editor.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +46 -4
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +538 -275
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/model-search.d.ts.map +1 -1
- package/dist/modes/interactive/model-search.js.map +1 -1
- package/dist/modes/interactive/theme/dark.json +1 -0
- package/dist/modes/interactive/theme/light.json +1 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts +3 -0
- package/dist/modes/interactive/theme/theme-controller.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme-controller.js +11 -8
- package/dist/modes/interactive/theme/theme-controller.js.map +1 -1
- package/dist/modes/interactive/theme/theme-schema.json +5 -1
- package/dist/modes/interactive/theme/theme.d.ts +4 -4
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +13 -9
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/json-event.d.ts +28 -0
- package/dist/modes/json-event.d.ts.map +1 -0
- package/dist/modes/json-event.js +12 -0
- package/dist/modes/json-event.js.map +1 -0
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +12 -2
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/jsonl.d.ts.map +1 -1
- package/dist/modes/rpc/jsonl.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +5 -4
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +7 -8
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +17 -3
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/package-manager-cli.d.ts.map +1 -1
- package/dist/package-manager-cli.js +11 -9
- package/dist/package-manager-cli.js.map +1 -1
- package/dist/rpc-entry.d.ts.map +1 -1
- package/dist/rpc-entry.js +1 -0
- package/dist/rpc-entry.js.map +1 -1
- package/dist/utils/abort.d.ts +5 -0
- package/dist/utils/abort.d.ts.map +1 -0
- package/dist/utils/abort.js +48 -0
- package/dist/utils/abort.js.map +1 -0
- package/dist/utils/ansi.d.ts.map +1 -1
- package/dist/utils/ansi.js.map +1 -1
- package/dist/utils/changelog.d.ts.map +1 -1
- package/dist/utils/changelog.js.map +1 -1
- package/dist/utils/child-process.d.ts.map +1 -1
- package/dist/utils/child-process.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard-native.d.ts.map +1 -1
- package/dist/utils/clipboard-native.js.map +1 -1
- package/dist/utils/clipboard.d.ts +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +22 -2
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/coalescing-terminal.d.ts +1 -0
- package/dist/utils/coalescing-terminal.d.ts.map +1 -1
- package/dist/utils/coalescing-terminal.js +16 -8
- package/dist/utils/coalescing-terminal.js.map +1 -1
- package/dist/utils/deprecation.d.ts.map +1 -1
- package/dist/utils/deprecation.js.map +1 -1
- package/dist/utils/exif-orientation.d.ts.map +1 -1
- package/dist/utils/exif-orientation.js.map +1 -1
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/fs-watch.d.ts.map +1 -1
- package/dist/utils/fs-watch.js.map +1 -1
- package/dist/utils/git.d.ts.map +1 -1
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/html.d.ts.map +1 -1
- package/dist/utils/html.js.map +1 -1
- package/dist/utils/image-convert.d.ts.map +1 -1
- package/dist/utils/image-convert.js.map +1 -1
- package/dist/utils/image-process.d.ts.map +1 -1
- package/dist/utils/image-process.js.map +1 -1
- package/dist/utils/image-resize-core.d.ts.map +1 -1
- package/dist/utils/image-resize-core.js.map +1 -1
- package/dist/utils/image-resize-worker.d.ts.map +1 -1
- package/dist/utils/image-resize-worker.js.map +1 -1
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js.map +1 -1
- package/dist/utils/json.d.ts.map +1 -1
- package/dist/utils/json.js.map +1 -1
- package/dist/utils/management-http.d.ts +23 -0
- package/dist/utils/management-http.d.ts.map +1 -0
- package/dist/utils/management-http.js +50 -0
- package/dist/utils/management-http.js.map +1 -0
- package/dist/utils/mime.d.ts.map +1 -1
- package/dist/utils/mime.js.map +1 -1
- package/dist/utils/open-browser.d.ts.map +1 -1
- package/dist/utils/open-browser.js.map +1 -1
- package/dist/utils/paths.d.ts +5 -3
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +25 -4
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/photon.d.ts.map +1 -1
- package/dist/utils/photon.js.map +1 -1
- package/dist/utils/pi-user-agent.d.ts.map +1 -1
- package/dist/utils/pi-user-agent.js.map +1 -1
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/sleep.d.ts.map +1 -1
- package/dist/utils/sleep.js.map +1 -1
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/dist/utils/tool-result-images.d.ts +19 -0
- package/dist/utils/tool-result-images.d.ts.map +1 -0
- package/dist/utils/tool-result-images.js +45 -0
- package/dist/utils/tool-result-images.js.map +1 -0
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +4 -6
- package/dist/utils/tools-manager.js.map +1 -1
- package/dist/utils/version-check.d.ts +4 -0
- package/dist/utils/version-check.d.ts.map +1 -1
- package/dist/utils/version-check.js +20 -2
- package/dist/utils/version-check.js.map +1 -1
- package/dist/utils/windows-self-update.d.ts.map +1 -1
- package/dist/utils/windows-self-update.js.map +1 -1
- package/docs/bundled/README.md +14 -16
- package/docs/bundled/extensions/biu.md +63 -0
- package/docs/bundled/extensions/router.md +20 -14
- package/docs/bundled/extensions/statusline.md +7 -5
- package/docs/bundled/themes.md +1 -1
- package/docs/compaction.md +25 -30
- package/docs/custom-provider.md +303 -467
- package/docs/development.md +83 -0
- package/docs/docs.json +6 -10
- package/docs/extensions.md +139 -119
- package/docs/index.md +18 -74
- package/docs/json.md +40 -15
- package/docs/keybindings.md +38 -10
- package/docs/models.md +210 -150
- package/docs/providers.md +3 -1
- package/docs/quickstart.md +5 -3
- package/docs/rpc.md +177 -134
- package/docs/sdk.md +165 -178
- package/docs/security.md +2 -2
- package/docs/session-format.md +139 -119
- package/docs/settings.md +4 -1
- package/docs/skills.md +0 -1
- package/docs/themes.md +5 -3
- package/docs/tui.md +411 -549
- package/docs/usage.md +11 -11
- package/examples/README.md +6 -1
- package/examples/extensions/README.md +13 -33
- package/examples/extensions/custom-compaction.ts +1 -16
- package/examples/extensions/custom-provider-anthropic/index.ts +11 -4
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -1
- package/examples/extensions/doom-overlay/wad-finder.ts +7 -3
- package/examples/extensions/handoff.ts +2 -11
- package/examples/extensions/qna.ts +3 -7
- package/examples/extensions/summarize.ts +8 -18
- package/examples/extensions/truncated-tool.ts +2 -2
- package/examples/rpc-extension-ui.ts +11 -2
- package/examples/sdk/02-custom-model.ts +1 -2
- package/examples/sdk/09-api-keys-and-oauth.ts +1 -1
- package/examples/sdk/12-full-control.ts +3 -1
- package/examples/sdk/README.md +1 -0
- package/npm-shrinkwrap.json +199 -270
- package/package.json +16 -9
- package/dist/extensions/plan/constants.d.ts +0 -68
- package/dist/extensions/plan/constants.d.ts.map +0 -1
- package/dist/extensions/plan/constants.js +0 -100
- package/dist/extensions/plan/constants.js.map +0 -1
- package/dist/extensions/plan/index.d.ts +0 -30
- package/dist/extensions/plan/index.d.ts.map +0 -1
- package/dist/extensions/plan/index.js +0 -429
- package/dist/extensions/plan/index.js.map +0 -1
- package/dist/extensions/plan/schema.d.ts +0 -20
- package/dist/extensions/plan/schema.d.ts.map +0 -1
- package/dist/extensions/plan/schema.js +0 -13
- package/dist/extensions/plan/schema.js.map +0 -1
- package/dist/extensions/plan/state.d.ts +0 -38
- package/dist/extensions/plan/state.d.ts.map +0 -1
- package/dist/extensions/plan/state.js +0 -96
- package/dist/extensions/plan/state.js.map +0 -1
- package/dist/extensions/plan/storage.d.ts +0 -26
- package/dist/extensions/plan/storage.d.ts.map +0 -1
- package/dist/extensions/plan/storage.js +0 -83
- package/dist/extensions/plan/storage.js.map +0 -1
- package/dist/extensions/plan/view.d.ts +0 -44
- package/dist/extensions/plan/view.d.ts.map +0 -1
- package/dist/extensions/plan/view.js +0 -149
- package/dist/extensions/plan/view.js.map +0 -1
- package/docs/bundled/extensions/README.md +0 -19
- package/docs/bundled/extensions/plan.md +0 -34
- package/examples/extensions/plan-mode/README.md +0 -66
- package/examples/extensions/plan-mode/index.ts +0 -390
- package/examples/extensions/plan-mode/utils.ts +0 -168
|
@@ -1,16 +1,60 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* /router interactive flows: list, add, edit, fetch, thinking map.
|
|
3
3
|
*
|
|
4
|
-
* Relay edits
|
|
5
|
-
*
|
|
4
|
+
* Relay edits are live: confirmed inputs and every toggle persist immediately.
|
|
5
|
+
* Searchable pickers follow Pi's native /model interaction pattern.
|
|
6
6
|
*/
|
|
7
7
|
import { BorderedLoader } from "../../modes/interactive/components/bordered-loader.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
8
|
+
import { getModelSelectorSearchText } from "../../modes/interactive/model-search.js";
|
|
9
|
+
import { formatError, isValidRelayId, NO_UI_WARNING, ROUTER_THINKING_LEVELS, truncate } from "./constants.js";
|
|
10
|
+
import { createModelChecklist, createSearchableSelector, createThinkingMapEditor, } from "./dialog.js";
|
|
11
|
+
import { createDefaultModelConfig, displayModelLabel, resolveModelConfig, resolveRouterThinkingMap, summarizeThinkingMap, } from "./presets.js";
|
|
11
12
|
import { probeRelayModels } from "./probe.js";
|
|
12
13
|
import { applyRouterFile, registerOneRelay, unregisterOneRelay } from "./register.js";
|
|
13
14
|
import { loadRouterFile, removeRelay, upsertRelay } from "./store.js";
|
|
15
|
+
/**
|
|
16
|
+
* Serialize live relay mutations without forcing a model-registry refresh for
|
|
17
|
+
* every checkbox press. Provider registration follows each snapshot; the
|
|
18
|
+
* registry is refreshed once when the editor closes.
|
|
19
|
+
*/
|
|
20
|
+
class RelayAutoSaver {
|
|
21
|
+
constructor(ctx, pi, relay) {
|
|
22
|
+
this.chain = Promise.resolve();
|
|
23
|
+
this.needsRefresh = false;
|
|
24
|
+
this.ctx = ctx;
|
|
25
|
+
this.pi = pi;
|
|
26
|
+
this.relay = relay;
|
|
27
|
+
}
|
|
28
|
+
save() {
|
|
29
|
+
const snapshot = structuredClone(this.relay);
|
|
30
|
+
this.needsRefresh = true;
|
|
31
|
+
this.chain = this.chain
|
|
32
|
+
.catch(() => { })
|
|
33
|
+
.then(async () => {
|
|
34
|
+
await upsertRelay(snapshot);
|
|
35
|
+
registerOneRelay(this.pi, snapshot);
|
|
36
|
+
this.error = undefined;
|
|
37
|
+
})
|
|
38
|
+
.catch((error) => {
|
|
39
|
+
this.error = error;
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
async flush() {
|
|
43
|
+
await this.chain;
|
|
44
|
+
if (this.error !== undefined) {
|
|
45
|
+
const error = this.error;
|
|
46
|
+
this.error = undefined;
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
49
|
+
if (this.needsRefresh) {
|
|
50
|
+
this.needsRefresh = false;
|
|
51
|
+
await this.ctx.modelRegistry.refresh();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export function isCurrentRouterModel(current, relayId, modelId) {
|
|
56
|
+
return current?.provider === relayId && current.id === modelId;
|
|
57
|
+
}
|
|
14
58
|
export async function runRouterCommand(args, ctx, pi) {
|
|
15
59
|
if (!ctx.hasUI) {
|
|
16
60
|
ctx.ui.notify(NO_UI_WARNING, "warning");
|
|
@@ -76,7 +120,7 @@ async function openMainMenu(ctx, pi, initialQuery) {
|
|
|
76
120
|
items,
|
|
77
121
|
initialValue: cursor,
|
|
78
122
|
initialQuery: query,
|
|
79
|
-
maxVisible:
|
|
123
|
+
maxVisible: 10,
|
|
80
124
|
}))
|
|
81
125
|
: await selectNative(ctx, "API relays", items.map((item) => ({ value: item.value, label: item.label, description: item.description })));
|
|
82
126
|
query = undefined;
|
|
@@ -152,20 +196,13 @@ async function addRelayFlow(ctx, pi) {
|
|
|
152
196
|
apiKey: apiKey.trim(),
|
|
153
197
|
models: [],
|
|
154
198
|
};
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
else {
|
|
162
|
-
relay.models = models;
|
|
199
|
+
// Connection fields are committed before the network step so cancelling or
|
|
200
|
+
// failing catalog discovery never loses the relay the user just entered.
|
|
201
|
+
await persistRelay(ctx, pi, relay);
|
|
202
|
+
await fetchAndSelectModels(ctx, pi, relay);
|
|
203
|
+
if (relay.models.length === 0) {
|
|
204
|
+
ctx.ui.notify(`Relay "${relay.id}" has no models yet.`, "warning");
|
|
163
205
|
}
|
|
164
|
-
await persistRelay(ctx, pi, relay, {
|
|
165
|
-
notify: relay.models.length > 0
|
|
166
|
-
? `Saved "${relay.id}" with ${relay.models.length} model(s).`
|
|
167
|
-
: `Saved "${relay.id}" (no models yet).`,
|
|
168
|
-
});
|
|
169
206
|
return relay.id;
|
|
170
207
|
}
|
|
171
208
|
/**
|
|
@@ -192,7 +229,7 @@ async function editRelayFlow(ctx, pi, initial) {
|
|
|
192
229
|
{ value: "baseUrl", label: "Base URL", description: relay.baseUrl },
|
|
193
230
|
{ value: "apiKey", label: "API key", description: maskKey(relay.apiKey) },
|
|
194
231
|
{ value: "remove", label: "Remove relay", description: "Delete from router.json" },
|
|
195
|
-
{ value: "back", label: "Back", description: "
|
|
232
|
+
{ value: "back", label: "Back", description: "Return to relays" },
|
|
196
233
|
]);
|
|
197
234
|
if (choice === undefined || choice === "back")
|
|
198
235
|
return;
|
|
@@ -214,7 +251,7 @@ async function editRelayFlow(ctx, pi, initial) {
|
|
|
214
251
|
if (normalized === relay.baseUrl)
|
|
215
252
|
continue;
|
|
216
253
|
relay.baseUrl = normalized;
|
|
217
|
-
await persistRelay(ctx, pi, relay
|
|
254
|
+
await persistRelay(ctx, pi, relay);
|
|
218
255
|
continue;
|
|
219
256
|
}
|
|
220
257
|
if (choice === "apiKey") {
|
|
@@ -225,7 +262,7 @@ async function editRelayFlow(ctx, pi, initial) {
|
|
|
225
262
|
if (trimmed === relay.apiKey)
|
|
226
263
|
continue;
|
|
227
264
|
relay.apiKey = trimmed;
|
|
228
|
-
await persistRelay(ctx, pi, relay
|
|
265
|
+
await persistRelay(ctx, pi, relay);
|
|
229
266
|
continue;
|
|
230
267
|
}
|
|
231
268
|
if (choice === "models") {
|
|
@@ -235,6 +272,10 @@ async function editRelayFlow(ctx, pi, initial) {
|
|
|
235
272
|
continue;
|
|
236
273
|
}
|
|
237
274
|
if (choice === "remove") {
|
|
275
|
+
if (ctx.model?.provider === relay.id) {
|
|
276
|
+
ctx.ui.notify(`Switch away from relay "${relay.id}" before removing it.`, "warning");
|
|
277
|
+
continue;
|
|
278
|
+
}
|
|
238
279
|
const ok = await ctx.ui.confirm(`Remove relay "${relay.id}"?`, "Models will disappear from /model.");
|
|
239
280
|
if (!ok)
|
|
240
281
|
continue;
|
|
@@ -247,43 +288,57 @@ async function editRelayFlow(ctx, pi, initial) {
|
|
|
247
288
|
}
|
|
248
289
|
}
|
|
249
290
|
/**
|
|
250
|
-
* Models screen:
|
|
251
|
-
* its editor (name / thinking
|
|
291
|
+
* Models screen: searchable configured models plus fetch/manual-add actions.
|
|
292
|
+
* Selecting a model opens its editor (name / thinking / remove).
|
|
252
293
|
*/
|
|
253
294
|
async function manageModelsFlow(ctx, pi, relay) {
|
|
295
|
+
let cursor;
|
|
254
296
|
while (true) {
|
|
255
|
-
const empty = relay.models.length === 0;
|
|
256
297
|
const items = [
|
|
257
|
-
{
|
|
258
|
-
value: "action:fetch",
|
|
259
|
-
label: "Fetch catalog",
|
|
260
|
-
description: empty
|
|
261
|
-
? "GET /models · multi-select · auto-saves"
|
|
262
|
-
: "Refresh from server (keeps name/thinking for kept ids)",
|
|
263
|
-
},
|
|
264
298
|
...relay.models.map((model) => {
|
|
265
299
|
const resolved = resolveModelConfig(model);
|
|
266
300
|
const label = displayModelLabel(resolved);
|
|
267
301
|
const thinking = summarizeThinkingMap(resolved.thinkingLevelMap);
|
|
302
|
+
const current = ctx.model?.provider === relay.id && ctx.model.id === model.id ? " ✓" : "";
|
|
268
303
|
return {
|
|
269
304
|
value: `model:${model.id}`,
|
|
270
|
-
label: model.id
|
|
305
|
+
label: `${model.id}${current}`,
|
|
271
306
|
description: label !== model.id ? `${label} · ${thinking}` : thinking,
|
|
307
|
+
searchText: `${getModelSelectorSearchText({ id: model.id, provider: relay.id, name: resolved.name })} ${thinking}`,
|
|
272
308
|
};
|
|
273
309
|
}),
|
|
274
|
-
{
|
|
310
|
+
{
|
|
311
|
+
value: "action:fetch",
|
|
312
|
+
label: "Fetch catalog",
|
|
313
|
+
description: relay.models.length === 0
|
|
314
|
+
? "GET /models · select models"
|
|
315
|
+
: "Refresh from server · keeps selected customizations",
|
|
316
|
+
searchText: "fetch catalog refresh models server",
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
value: "action:manual",
|
|
320
|
+
label: "Add models manually",
|
|
321
|
+
description: "Comma- or newline-separated model ids",
|
|
322
|
+
searchText: "add manual custom model ids",
|
|
323
|
+
},
|
|
324
|
+
{ value: "action:back", label: "Back", description: "Return to relay", searchText: "back return" },
|
|
275
325
|
];
|
|
276
|
-
const
|
|
326
|
+
const currentValue = `model:${ctx.model?.id}`;
|
|
327
|
+
const initialValue = cursor ?? (ctx.model?.provider === relay.id ? currentValue : undefined);
|
|
328
|
+
const choice = await selectNative(ctx, `Relay · ${relay.id} · models`, items, { initialValue });
|
|
277
329
|
if (choice === undefined || choice === "action:back")
|
|
278
330
|
return;
|
|
331
|
+
cursor = choice;
|
|
279
332
|
if (choice === "action:fetch") {
|
|
280
|
-
|
|
281
|
-
|
|
333
|
+
await fetchAndSelectModels(ctx, pi, relay);
|
|
334
|
+
continue;
|
|
335
|
+
}
|
|
336
|
+
if (choice === "action:manual") {
|
|
337
|
+
const additions = await manualModelEntry(ctx);
|
|
338
|
+
if (!additions)
|
|
282
339
|
continue;
|
|
283
|
-
relay.models =
|
|
284
|
-
await persistRelay(ctx, pi, relay
|
|
285
|
-
notify: `Saved "${relay.id}" · ${relay.models.length} model(s).`,
|
|
286
|
-
});
|
|
340
|
+
relay.models = mergeAddedModels(relay.models, additions);
|
|
341
|
+
await persistRelay(ctx, pi, relay);
|
|
287
342
|
continue;
|
|
288
343
|
}
|
|
289
344
|
if (choice.startsWith("model:")) {
|
|
@@ -295,7 +350,7 @@ async function manageModelsFlow(ctx, pi, relay) {
|
|
|
295
350
|
}
|
|
296
351
|
}
|
|
297
352
|
}
|
|
298
|
-
/** Single-model editor: display name + thinking.
|
|
353
|
+
/** Single-model editor: display name + thinking. Every confirmed change is live. */
|
|
299
354
|
async function editModelFlow(ctx, pi, relay, model) {
|
|
300
355
|
while (true) {
|
|
301
356
|
const resolved = resolveModelConfig(model);
|
|
@@ -307,7 +362,8 @@ async function editModelFlow(ctx, pi, relay, model) {
|
|
|
307
362
|
label: "Thinking levels",
|
|
308
363
|
description: summarizeThinkingMap(resolved.thinkingLevelMap),
|
|
309
364
|
},
|
|
310
|
-
{ value: "
|
|
365
|
+
{ value: "remove", label: "Remove model", description: "Delete this model from the relay" },
|
|
366
|
+
{ value: "back", label: "Back", description: "Return to models" },
|
|
311
367
|
]);
|
|
312
368
|
if (action === undefined || action === "back")
|
|
313
369
|
return;
|
|
@@ -324,167 +380,249 @@ async function editModelFlow(ctx, pi, relay, model) {
|
|
|
324
380
|
model.name = nextName;
|
|
325
381
|
else
|
|
326
382
|
delete model.name;
|
|
327
|
-
await persistRelay(ctx, pi, relay
|
|
328
|
-
notify: model.name
|
|
329
|
-
? `Saved display name "${model.name}" for ${model.id}.`
|
|
330
|
-
: `Cleared display name for ${model.id}; /model shows id.`,
|
|
331
|
-
});
|
|
383
|
+
await persistRelay(ctx, pi, relay);
|
|
332
384
|
continue;
|
|
333
385
|
}
|
|
334
386
|
if (action === "thinking") {
|
|
335
|
-
const
|
|
336
|
-
|
|
387
|
+
const saver = new RelayAutoSaver(ctx, pi, relay);
|
|
388
|
+
if (ctx.mode === "tui") {
|
|
389
|
+
await ctx.ui.custom(createThinkingMapEditor({
|
|
337
390
|
title: `Thinking · ${relay.id} / ${model.id}`,
|
|
338
391
|
map: resolved.thinkingLevelMap,
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
392
|
+
levels: ROUTER_THINKING_LEVELS,
|
|
393
|
+
onChange: (nextMap) => {
|
|
394
|
+
model.thinkingLevelMap = nextMap;
|
|
395
|
+
model.reasoning = true;
|
|
396
|
+
saver.save();
|
|
397
|
+
},
|
|
398
|
+
}));
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
await editThinkingMapNative(ctx, resolved.thinkingLevelMap, (nextMap) => {
|
|
402
|
+
model.thinkingLevelMap = nextMap;
|
|
403
|
+
model.reasoning = true;
|
|
404
|
+
saver.save();
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
await saver.flush();
|
|
408
|
+
continue;
|
|
409
|
+
}
|
|
410
|
+
if (action === "remove") {
|
|
411
|
+
if (isCurrentRouterModel(ctx.model, relay.id, model.id)) {
|
|
412
|
+
ctx.ui.notify(`Switch away from model "${model.id}" before removing it.`, "warning");
|
|
342
413
|
continue;
|
|
343
|
-
|
|
344
|
-
model.
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
414
|
+
}
|
|
415
|
+
const ok = await ctx.ui.confirm(`Remove model "${model.id}"?`, "Its display name and thinking settings will be removed.");
|
|
416
|
+
if (!ok)
|
|
417
|
+
continue;
|
|
418
|
+
relay.models = relay.models.filter((entry) => entry.id !== model.id);
|
|
419
|
+
await persistRelay(ctx, pi, relay);
|
|
420
|
+
ctx.ui.notify(`Removed model "${model.id}".`, "info");
|
|
421
|
+
return;
|
|
348
422
|
}
|
|
349
423
|
}
|
|
350
424
|
}
|
|
351
|
-
async function editThinkingMapNative(ctx, map) {
|
|
352
|
-
|
|
425
|
+
async function editThinkingMapNative(ctx, map, onChange) {
|
|
426
|
+
let working = resolveRouterThinkingMap(map);
|
|
353
427
|
while (true) {
|
|
354
428
|
const choice = await selectNative(ctx, "Toggle thinking level", [
|
|
355
|
-
...
|
|
429
|
+
...ROUTER_THINKING_LEVELS.map((level) => ({
|
|
356
430
|
value: level,
|
|
357
431
|
label: level,
|
|
358
432
|
description: working[level] === null ? "hidden" : working[level] === undefined ? "default" : String(working[level]),
|
|
359
433
|
})),
|
|
360
|
-
{ value: "
|
|
361
|
-
{ value: "cancel", label: "Cancel" },
|
|
434
|
+
{ value: "back", label: "Back", description: "Changes are live" },
|
|
362
435
|
]);
|
|
363
|
-
if (choice === undefined || choice === "
|
|
364
|
-
return
|
|
365
|
-
if (choice
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
working[
|
|
436
|
+
if (choice === undefined || choice === "back")
|
|
437
|
+
return;
|
|
438
|
+
if (!ROUTER_THINKING_LEVELS.includes(choice))
|
|
439
|
+
continue;
|
|
440
|
+
const level = choice;
|
|
441
|
+
working = {
|
|
442
|
+
...working,
|
|
443
|
+
[level]: working[level] === null ? level : null,
|
|
444
|
+
off: null,
|
|
445
|
+
minimal: null,
|
|
446
|
+
};
|
|
447
|
+
onChange({ ...working });
|
|
371
448
|
}
|
|
372
449
|
}
|
|
373
|
-
async function fetchAndSelectModels(ctx,
|
|
374
|
-
const
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
450
|
+
async function fetchAndSelectModels(ctx, pi, relay) {
|
|
451
|
+
const key = resolveProbeApiKey(relay.apiKey);
|
|
452
|
+
if (key.error) {
|
|
453
|
+
ctx.ui.notify(key.error, "warning");
|
|
454
|
+
await recoverWithManualModels(ctx, pi, relay);
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
378
457
|
let result;
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
458
|
+
while (true) {
|
|
459
|
+
const probeOptions = { baseUrl: relay.baseUrl, apiKey: key.value };
|
|
460
|
+
if (ctx.mode === "tui") {
|
|
461
|
+
result = await ctx.ui.custom((tui, theme, _kb, done) => {
|
|
462
|
+
const loader = new BorderedLoader(tui, theme, `Fetching models · ${relay.id}`, {
|
|
463
|
+
cancellable: true,
|
|
464
|
+
});
|
|
465
|
+
let settled = false;
|
|
466
|
+
const finish = (value) => {
|
|
467
|
+
if (settled)
|
|
468
|
+
return;
|
|
469
|
+
settled = true;
|
|
470
|
+
loader.dispose();
|
|
471
|
+
done(value);
|
|
472
|
+
};
|
|
473
|
+
loader.onAbort = () => finish(undefined);
|
|
474
|
+
void probeRelayModels({ ...probeOptions, signal: loader.signal })
|
|
475
|
+
.then(finish)
|
|
476
|
+
.catch((error) => finish({ ok: false, error: formatError(error) }));
|
|
477
|
+
return loader;
|
|
383
478
|
});
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
479
|
+
}
|
|
480
|
+
else {
|
|
481
|
+
ctx.ui.notify(`Fetching models from ${relay.baseUrl}…`, "info");
|
|
482
|
+
result = await probeRelayModels(probeOptions);
|
|
483
|
+
}
|
|
484
|
+
if (result === undefined)
|
|
485
|
+
return;
|
|
486
|
+
if (result.ok && result.models.length === 0) {
|
|
487
|
+
ctx.ui.notify("Server returned an empty model list.", "warning");
|
|
488
|
+
const recovery = await selectNative(ctx, `Catalog empty · ${relay.id}`, [
|
|
489
|
+
{ value: "retry", label: "Retry", description: "Fetch /models again" },
|
|
490
|
+
{ value: "manual", label: "Add models manually", description: "Enter model ids without a catalog" },
|
|
491
|
+
{ value: "back", label: "Back", description: "Return to relay settings" },
|
|
492
|
+
]);
|
|
493
|
+
if (recovery === "retry")
|
|
494
|
+
continue;
|
|
495
|
+
if (recovery === "manual")
|
|
496
|
+
await recoverWithManualModels(ctx, pi, relay);
|
|
497
|
+
return;
|
|
498
|
+
}
|
|
499
|
+
if (result.ok)
|
|
500
|
+
break;
|
|
406
501
|
ctx.ui.notify(`Fetch failed: ${result.error}`, "error");
|
|
407
|
-
const
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
502
|
+
const recovery = await selectNative(ctx, `Catalog unavailable · ${relay.id}`, [
|
|
503
|
+
{ value: "retry", label: "Retry", description: "Fetch /models again" },
|
|
504
|
+
{ value: "manual", label: "Add models manually", description: "Enter model ids without a catalog" },
|
|
505
|
+
{ value: "back", label: "Back", description: "Return to relay settings" },
|
|
506
|
+
]);
|
|
507
|
+
if (recovery === "retry")
|
|
508
|
+
continue;
|
|
509
|
+
if (recovery === "manual")
|
|
510
|
+
await recoverWithManualModels(ctx, pi, relay);
|
|
511
|
+
return;
|
|
415
512
|
}
|
|
416
|
-
if (result.
|
|
513
|
+
if (!result || !result.ok)
|
|
514
|
+
return;
|
|
515
|
+
if (result.truncated)
|
|
417
516
|
ctx.ui.notify("Catalog truncated to 2,000 models.", "warning");
|
|
418
|
-
|
|
419
|
-
|
|
517
|
+
const catalog = mergeCatalogWithConfigured(relay.models, result.models);
|
|
518
|
+
const initiallySelected = new Set(relay.models.map((model) => model.id));
|
|
519
|
+
const activeModelId = ctx.model?.provider === relay.id ? ctx.model.id : undefined;
|
|
520
|
+
const currentModelId = activeModelId && initiallySelected.has(activeModelId) ? activeModelId : undefined;
|
|
521
|
+
const protectedIds = currentModelId ? new Set([currentModelId]) : undefined;
|
|
522
|
+
const preserved = new Map(relay.models.map((model) => [model.id, structuredClone(model)]));
|
|
523
|
+
const saver = new RelayAutoSaver(ctx, pi, relay);
|
|
524
|
+
const applySelection = (selectedIds) => {
|
|
525
|
+
if (currentModelId && !selectedIds.includes(currentModelId)) {
|
|
526
|
+
ctx.ui.notify(`Switch away from model "${currentModelId}" before disabling it.`, "warning");
|
|
527
|
+
return;
|
|
528
|
+
}
|
|
529
|
+
relay.models = selectedIds.map((id) => {
|
|
530
|
+
const previous = preserved.get(id);
|
|
531
|
+
if (previous)
|
|
532
|
+
return structuredClone(previous);
|
|
533
|
+
const next = createDefaultModelConfig(id);
|
|
534
|
+
preserved.set(id, next);
|
|
535
|
+
return structuredClone(next);
|
|
536
|
+
});
|
|
537
|
+
saver.save();
|
|
538
|
+
};
|
|
420
539
|
if (ctx.mode === "tui") {
|
|
421
540
|
const choice = await ctx.ui.custom(createModelChecklist({
|
|
422
541
|
title: `Select models · ${relay.id}`,
|
|
423
|
-
subtitle: "Space
|
|
424
|
-
models:
|
|
542
|
+
subtitle: "Space toggles immediately · Enter/Esc returns",
|
|
543
|
+
models: catalog,
|
|
425
544
|
initiallySelected,
|
|
545
|
+
protectedIds,
|
|
546
|
+
onChange: applySelection,
|
|
547
|
+
onProtectedToggle: (id) => ctx.ui.notify(`Switch away from model "${id}" before disabling it.`, "warning"),
|
|
426
548
|
}));
|
|
427
|
-
if (choice.kind === "
|
|
428
|
-
|
|
429
|
-
selectedIds = choice.selectedIds;
|
|
549
|
+
if (choice.kind === "close")
|
|
550
|
+
applySelectionIfChanged(relay, choice.selectedIds, applySelection);
|
|
430
551
|
}
|
|
431
552
|
else {
|
|
432
|
-
const ok = await ctx.ui.confirm(`Import ${result.models.length} models?`, "Non-TUI mode imports the full catalog.
|
|
433
|
-
if (
|
|
434
|
-
|
|
435
|
-
selectedIds = result.models.map((model) => model.id);
|
|
553
|
+
const ok = await ctx.ui.confirm(`Import ${result.models.length} models?`, "Non-TUI mode imports the full catalog.");
|
|
554
|
+
if (ok)
|
|
555
|
+
applySelection([...new Set([...initiallySelected, ...result.models.map((model) => model.id)])]);
|
|
436
556
|
}
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
}
|
|
441
|
-
// Do not import remote catalog names — leave name empty so /model shows the id
|
|
442
|
-
// unless the user sets a custom display name later.
|
|
443
|
-
return selectedIds.map((id) => createDefaultModelConfig(id));
|
|
557
|
+
await saver.flush();
|
|
558
|
+
if (relay.models.length === 0)
|
|
559
|
+
ctx.ui.notify(`No models enabled for "${relay.id}".`, "warning");
|
|
444
560
|
}
|
|
445
561
|
async function manualModelEntry(ctx) {
|
|
446
562
|
const value = await ctx.ui.input("Model IDs (comma-separated)", "gpt-5.6-sol, gpt-5.6-luna");
|
|
447
563
|
if (value === undefined)
|
|
448
564
|
return undefined;
|
|
449
|
-
const ids =
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
565
|
+
const ids = [
|
|
566
|
+
...new Set(value
|
|
567
|
+
.split(/[,\r\n]+/)
|
|
568
|
+
.map((id) => id.trim())
|
|
569
|
+
.filter(Boolean)),
|
|
570
|
+
];
|
|
453
571
|
if (ids.length === 0) {
|
|
454
572
|
ctx.ui.notify("Enter at least one model id.", "warning");
|
|
455
573
|
return undefined;
|
|
456
574
|
}
|
|
457
575
|
return ids.map((id) => createDefaultModelConfig(id));
|
|
458
576
|
}
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
577
|
+
async function recoverWithManualModels(ctx, pi, relay) {
|
|
578
|
+
const additions = await manualModelEntry(ctx);
|
|
579
|
+
if (!additions)
|
|
580
|
+
return;
|
|
581
|
+
relay.models = mergeAddedModels(relay.models, additions);
|
|
582
|
+
await persistRelay(ctx, pi, relay);
|
|
583
|
+
}
|
|
584
|
+
function mergeAddedModels(previous, additions) {
|
|
585
|
+
const result = previous.map((model) => structuredClone(model));
|
|
586
|
+
const ids = new Set(result.map((model) => model.id));
|
|
587
|
+
for (const model of additions) {
|
|
588
|
+
if (ids.has(model.id))
|
|
589
|
+
continue;
|
|
590
|
+
ids.add(model.id);
|
|
591
|
+
result.push(model);
|
|
592
|
+
}
|
|
593
|
+
return result;
|
|
594
|
+
}
|
|
595
|
+
function mergeCatalogWithConfigured(configured, catalog) {
|
|
596
|
+
const items = new Map();
|
|
597
|
+
const configuredById = new Map(configured.map((model) => [model.id, model]));
|
|
598
|
+
for (const model of catalog) {
|
|
599
|
+
const previous = configuredById.get(model.id);
|
|
600
|
+
items.set(model.id, {
|
|
601
|
+
id: model.id,
|
|
602
|
+
name: previous?.name ?? model.name,
|
|
603
|
+
});
|
|
604
|
+
}
|
|
605
|
+
for (const model of configured) {
|
|
606
|
+
if (!items.has(model.id)) {
|
|
607
|
+
items.set(model.id, {
|
|
608
|
+
id: model.id,
|
|
609
|
+
name: model.name ?? model.id,
|
|
610
|
+
unavailable: true,
|
|
611
|
+
});
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
return [...items.values()].sort((left, right) => left.id.localeCompare(right.id));
|
|
615
|
+
}
|
|
616
|
+
function applySelectionIfChanged(relay, selectedIds, apply) {
|
|
617
|
+
const current = new Set(relay.models.map((model) => model.id));
|
|
618
|
+
if (current.size === selectedIds.length && selectedIds.every((id) => current.has(id)))
|
|
619
|
+
return;
|
|
620
|
+
apply([...selectedIds]);
|
|
481
621
|
}
|
|
482
|
-
async function persistRelay(ctx, pi, relay
|
|
622
|
+
async function persistRelay(ctx, pi, relay) {
|
|
483
623
|
await upsertRelay(relay);
|
|
484
624
|
registerOneRelay(pi, relay);
|
|
485
625
|
await ctx.modelRegistry.refresh();
|
|
486
|
-
if (opts?.notify)
|
|
487
|
-
ctx.ui.notify(opts.notify, "info");
|
|
488
626
|
}
|
|
489
627
|
async function promptText(ctx, title, placeholder, validate) {
|
|
490
628
|
while (true) {
|
|
@@ -499,12 +637,14 @@ async function promptText(ctx, title, placeholder, validate) {
|
|
|
499
637
|
return value;
|
|
500
638
|
}
|
|
501
639
|
}
|
|
502
|
-
async function selectNative(ctx, title, items) {
|
|
640
|
+
async function selectNative(ctx, title, items, opts) {
|
|
503
641
|
if (ctx.mode === "tui") {
|
|
504
642
|
return ctx.ui.custom(createSearchableSelector({
|
|
505
643
|
title,
|
|
506
644
|
items,
|
|
507
|
-
|
|
645
|
+
initialValue: opts?.initialValue,
|
|
646
|
+
initialQuery: opts?.initialQuery,
|
|
647
|
+
maxVisible: opts?.maxVisible ?? Math.min(10, Math.max(1, items.length)),
|
|
508
648
|
}));
|
|
509
649
|
}
|
|
510
650
|
const labels = items.map((item) => (item.description ? `${item.label} — ${item.description}` : item.label));
|
|
@@ -520,19 +660,24 @@ function maskKey(key) {
|
|
|
520
660
|
return "••••";
|
|
521
661
|
return `${key.slice(0, 4)}…${key.slice(-4)}`;
|
|
522
662
|
}
|
|
523
|
-
/**
|
|
524
|
-
function
|
|
663
|
+
/** Resolve only keys that can be safely used by the catalog probe. */
|
|
664
|
+
export function resolveProbeApiKey(apiKey) {
|
|
525
665
|
const trimmed = apiKey.trim();
|
|
526
|
-
if (!trimmed
|
|
527
|
-
return
|
|
666
|
+
if (!trimmed)
|
|
667
|
+
return {};
|
|
668
|
+
if (trimmed.startsWith("!")) {
|
|
669
|
+
return { error: "This API key uses a !command and cannot be resolved for catalog probing." };
|
|
670
|
+
}
|
|
528
671
|
const envOnly = trimmed.match(/^\$([A-Za-z_][A-Za-z0-9_]*)$/);
|
|
529
|
-
if (envOnly)
|
|
530
|
-
return process.env[envOnly[1]];
|
|
531
672
|
const braced = trimmed.match(/^\$\{([A-Za-z_][A-Za-z0-9_]*)\}$/);
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
return
|
|
536
|
-
|
|
673
|
+
const envName = envOnly?.[1] ?? braced?.[1];
|
|
674
|
+
if (envName) {
|
|
675
|
+
const value = process.env[envName]?.trim();
|
|
676
|
+
return value ? { value } : { error: `Environment variable $${envName} is not set.` };
|
|
677
|
+
}
|
|
678
|
+
if (trimmed.includes("$")) {
|
|
679
|
+
return { error: "This API key contains interpolation and cannot be resolved for catalog probing." };
|
|
680
|
+
}
|
|
681
|
+
return { value: trimmed };
|
|
537
682
|
}
|
|
538
683
|
//# sourceMappingURL=ui.js.map
|