@astralyn/pi 0.83.0 → 0.84.1
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 +66 -0
- 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 +22 -3
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/auth-check.d.ts +19 -0
- package/dist/cli/auth-check.d.ts.map +1 -0
- package/dist/cli/auth-check.js +50 -0
- package/dist/cli/auth-check.js.map +1 -0
- package/dist/cli/auth-command.d.ts +24 -0
- package/dist/cli/auth-command.d.ts.map +1 -0
- package/dist/cli/auth-command.js +104 -0
- package/dist/cli/auth-command.js.map +1 -0
- 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 +5 -15
- package/dist/cli/credential-print.d.ts.map +1 -1
- package/dist/cli/credential-print.js +42 -82
- package/dist/cli/credential-print.js.map +1 -1
- 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 +0 -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 +30 -10
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +177 -187
- 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 +25 -9
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +235 -42
- 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 +2 -1
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +25 -29
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +26 -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.map +1 -1
- package/dist/core/footer-data-provider.js +17 -18
- 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 +165 -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 +42 -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 +241 -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 +63 -42
- 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.map +1 -1
- package/dist/core/resource-loader.js +2 -46
- 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 +4 -0
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +18 -14
- 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 +4 -0
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +15 -10
- 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 +7 -0
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +18 -17
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +4 -0
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +5 -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 +4 -0
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +5 -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 +4 -0
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +7 -3
- 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 +4 -0
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +6 -3
- 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 +0 -1
- 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 -0
- 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 +21 -7
- 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 +70 -25
- 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.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 +28 -29
- 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.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +46 -5
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +538 -282
- 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 +24 -12
- 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 +4 -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/server/create-harness.d.ts +26 -0
- package/dist/server/create-harness.d.ts.map +1 -0
- package/dist/server/create-harness.js +104 -0
- package/dist/server/create-harness.js.map +1 -0
- 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 +20 -4
- package/dist/utils/coalescing-terminal.d.ts.map +1 -1
- package/dist/utils/coalescing-terminal.js +48 -12
- 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 +3 -0
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +23 -1
- 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 +1 -0
- 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/custom-provider.md +123 -2
- package/docs/development.md +83 -0
- package/docs/docs.json +8 -4
- package/docs/extensions.md +30 -5
- package/docs/json.md +21 -2
- package/docs/keybindings.md +46 -14
- package/docs/models.md +21 -3
- package/docs/providers.md +9 -1
- package/docs/quickstart.md +2 -0
- package/docs/rpc.md +12 -11
- package/docs/sdk.md +46 -0
- package/docs/security.md +1 -1
- package/docs/settings.md +4 -1
- package/docs/themes.md +7 -5
- package/docs/usage.md +8 -0
- package/examples/extensions/custom-compaction.ts +1 -16
- package/examples/extensions/custom-provider-anthropic/index.ts +2 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +5 -5
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +2 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/doom-overlay/wad-finder.ts +7 -3
- package/examples/extensions/dynamic-resources/dynamic.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/handoff.ts +2 -11
- package/examples/extensions/qna.ts +3 -7
- package/examples/extensions/sandbox/package-lock.json +3 -3
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/summarize.ts +8 -18
- package/examples/extensions/with-deps/package-lock.json +4 -4
- package/examples/extensions/with-deps/package.json +1 -1
- 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 +1 -1
- package/examples/sdk/README.md +1 -0
- package/npm-shrinkwrap.json +193 -264
- package/package.json +15 -8
|
@@ -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
|