indusagi-coding-agent 0.1.41 → 0.1.42
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 +11 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/command-line/args.d.ts +56 -0
- package/dist/command-line/args.d.ts.map +1 -0
- package/dist/command-line/args.js.map +1 -0
- package/dist/command-line/config-selector.d.ts +17 -0
- package/dist/command-line/config-selector.d.ts.map +1 -0
- package/dist/command-line/config-selector.js.map +1 -0
- package/dist/command-line/file-processor.d.ts.map +1 -0
- package/dist/command-line/file-processor.js.map +1 -0
- package/dist/command-line/list-models.d.ts +9 -0
- package/dist/command-line/list-models.d.ts.map +1 -0
- package/dist/command-line/list-models.js.map +1 -0
- package/dist/command-line/login-handler.d.ts.map +1 -0
- package/dist/command-line/login-handler.js +746 -0
- package/dist/command-line/login-handler.js.map +1 -0
- package/dist/command-line/session-picker.d.ts.map +1 -0
- package/dist/command-line/session-picker.js.map +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +9 -5
- package/dist/config.js.map +1 -1
- package/dist/helpers/array.d.ts.map +1 -0
- package/dist/helpers/array.js.map +1 -0
- package/dist/helpers/changelog.d.ts.map +1 -0
- package/dist/helpers/changelog.js.map +1 -0
- package/dist/helpers/clipboard-image.d.ts.map +1 -0
- package/dist/helpers/clipboard-image.js.map +1 -0
- package/dist/helpers/clipboard.d.ts.map +1 -0
- package/dist/helpers/clipboard.js.map +1 -0
- package/dist/helpers/color-formatter.d.ts.map +1 -0
- package/dist/helpers/color-formatter.js.map +1 -0
- package/dist/helpers/data-transformer.d.ts.map +1 -0
- package/dist/helpers/data-transformer.js.map +1 -0
- package/dist/helpers/date-formatter.d.ts.map +1 -0
- package/dist/helpers/date-formatter.js.map +1 -0
- package/dist/helpers/error-handler.d.ts.map +1 -0
- package/dist/helpers/error-handler.js.map +1 -0
- package/dist/helpers/file-operations.d.ts.map +1 -0
- package/dist/helpers/file-operations.js.map +1 -0
- package/dist/helpers/frontmatter.d.ts.map +1 -0
- package/dist/helpers/frontmatter.js.map +1 -0
- package/dist/helpers/git.d.ts.map +1 -0
- package/dist/helpers/git.js.map +1 -0
- package/dist/helpers/image-convert.d.ts.map +1 -0
- package/dist/helpers/image-convert.js.map +1 -0
- package/dist/helpers/image-resize.d.ts.map +1 -0
- package/dist/helpers/image-resize.js.map +1 -0
- package/dist/helpers/json-formatter.d.ts.map +1 -0
- package/dist/helpers/json-formatter.js.map +1 -0
- package/dist/helpers/logger.d.ts.map +1 -0
- package/dist/helpers/logger.js.map +1 -0
- package/dist/helpers/markdown-formatter.d.ts.map +1 -0
- package/dist/helpers/markdown-formatter.js.map +1 -0
- package/dist/helpers/mime.d.ts.map +1 -0
- package/dist/helpers/mime.js.map +1 -0
- package/dist/helpers/path-validator.d.ts.map +1 -0
- package/dist/helpers/path-validator.js.map +1 -0
- package/dist/helpers/photon.d.ts.map +1 -0
- package/dist/helpers/photon.js.map +1 -0
- package/dist/helpers/shell.d.ts.map +1 -0
- package/dist/helpers/shell.js +142 -0
- package/dist/helpers/shell.js.map +1 -0
- package/dist/helpers/sleep.d.ts.map +1 -0
- package/dist/helpers/sleep.js.map +1 -0
- package/dist/helpers/string-formatter.d.ts.map +1 -0
- package/dist/helpers/string-formatter.js.map +1 -0
- package/dist/helpers/tools-manager.d.ts.map +1 -0
- package/dist/helpers/tools-manager.js.map +1 -0
- package/dist/helpers/type-guards.d.ts.map +1 -0
- package/dist/helpers/type-guards.js.map +1 -0
- package/dist/index.d.ts +34 -34
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -34
- package/dist/index.js.map +1 -1
- package/dist/interfaces/index.d.ts +16 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +14 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/print-mode.d.ts +561 -0
- package/dist/interfaces/print-mode.d.ts.map +1 -0
- package/dist/interfaces/print-mode.js.map +1 -0
- package/dist/interfaces/service-api/rpc-client.d.ts +1129 -0
- package/dist/interfaces/service-api/rpc-client.d.ts.map +1 -0
- package/dist/interfaces/service-api/rpc-client.js.map +1 -0
- package/dist/interfaces/service-api/rpc-mode.d.ts +813 -0
- package/dist/interfaces/service-api/rpc-mode.d.ts.map +1 -0
- package/dist/interfaces/service-api/rpc-mode.js +1229 -0
- package/dist/interfaces/service-api/rpc-mode.js.map +1 -0
- package/dist/interfaces/service-api/rpc-types.d.ts +392 -0
- package/dist/interfaces/service-api/rpc-types.d.ts.map +1 -0
- package/dist/interfaces/service-api/rpc-types.js.map +1 -0
- package/dist/interfaces/shared.d.ts.map +1 -0
- package/dist/interfaces/shared.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/armin.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/armin.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/assistant-message.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/assistant-message.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/bash-execution.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/bash-execution.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/bordered-loader.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/bordered-loader.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/branch-summary-message.d.ts +16 -0
- package/dist/interfaces/terminal-ui/components/branch-summary-message.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/branch-summary-message.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/compaction-summary-message.d.ts +16 -0
- package/dist/interfaces/terminal-ui/components/compaction-summary-message.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/compaction-summary-message.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/config-selector.d.ts +71 -0
- package/dist/interfaces/terminal-ui/components/config-selector.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/config-selector.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/countdown-timer.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/countdown-timer.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/custom-editor.d.ts +17 -0
- package/dist/interfaces/terminal-ui/components/custom-editor.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/custom-editor.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/custom-message.d.ts +19 -0
- package/dist/interfaces/terminal-ui/components/custom-message.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/custom-message.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/diff.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/diff.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/dynamic-border.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/dynamic-border.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/extension-editor.d.ts +13 -0
- package/dist/interfaces/terminal-ui/components/extension-editor.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/extension-editor.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/extension-input.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/extension-input.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/extension-selector.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/extension-selector.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/footer.d.ts +17 -0
- package/dist/interfaces/terminal-ui/components/footer.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/footer.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/index.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/index.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/keybinding-hints.d.ts +23 -0
- package/dist/interfaces/terminal-ui/components/keybinding-hints.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/keybinding-hints.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/login-dialog.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/login-dialog.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/model-selector.d.ts +43 -0
- package/dist/interfaces/terminal-ui/components/model-selector.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/model-selector.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/oauth-selector.d.ts +75 -0
- package/dist/interfaces/terminal-ui/components/oauth-selector.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/oauth-selector.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/scoped-models-selector.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/scoped-models-selector.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/session-selector-search.d.ts +21 -0
- package/dist/interfaces/terminal-ui/components/session-selector-search.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/session-selector-search.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/session-selector.d.ts +85 -0
- package/dist/interfaces/terminal-ui/components/session-selector.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/session-selector.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/settings-selector.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/settings-selector.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/show-images-selector.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/show-images-selector.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/skill-invocation-message.d.ts +17 -0
- package/dist/interfaces/terminal-ui/components/skill-invocation-message.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/skill-invocation-message.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/theme-selector.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/theme-selector.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/thinking-selector.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/thinking-selector.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/tool-execution.d.ts +72 -0
- package/dist/interfaces/terminal-ui/components/tool-execution.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/tool-execution.js +1001 -0
- package/dist/interfaces/terminal-ui/components/tool-execution.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/tree-selector.d.ts +62 -0
- package/dist/interfaces/terminal-ui/components/tree-selector.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/tree-selector.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/user-message-selector.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/user-message-selector.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/user-message.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/user-message.js.map +1 -0
- package/dist/interfaces/terminal-ui/components/visual-truncate.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/components/visual-truncate.js.map +1 -0
- package/dist/interfaces/terminal-ui/interactive-mode.d.ts +1931 -0
- package/dist/interfaces/terminal-ui/interactive-mode.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/interactive-mode.js +5733 -0
- package/dist/interfaces/terminal-ui/interactive-mode.js.map +1 -0
- package/dist/interfaces/terminal-ui/theme/theme.d.ts.map +1 -0
- package/dist/interfaces/terminal-ui/theme/theme.js.map +1 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +21 -21
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js.map +1 -1
- package/dist/runtime/agent-session.d.ts +936 -0
- package/dist/runtime/agent-session.d.ts.map +1 -0
- package/dist/runtime/agent-session.js +2737 -0
- package/dist/runtime/agent-session.js.map +1 -0
- package/dist/runtime/auth-storage.d.ts.map +1 -0
- package/dist/runtime/auth-storage.js.map +1 -0
- package/dist/runtime/bash-executor.d.ts.map +1 -0
- package/dist/runtime/bash-executor.js.map +1 -0
- package/dist/runtime/context-compression/branch-summarization.d.ts.map +1 -0
- package/dist/runtime/context-compression/branch-summarization.js.map +1 -0
- package/dist/runtime/context-compression/compaction.d.ts.map +1 -0
- package/dist/runtime/context-compression/compaction.js.map +1 -0
- package/dist/runtime/context-compression/index.d.ts.map +1 -0
- package/dist/runtime/context-compression/index.js.map +1 -0
- package/dist/runtime/context-compression/utils.d.ts.map +1 -0
- package/dist/runtime/context-compression/utils.js.map +1 -0
- package/dist/runtime/diagnostics.d.ts.map +1 -0
- package/dist/runtime/diagnostics.js.map +1 -0
- package/dist/runtime/discover-packages.d.ts.map +1 -0
- package/dist/runtime/discover-packages.js.map +1 -0
- package/dist/runtime/event-bus.d.ts.map +1 -0
- package/dist/runtime/event-bus.js.map +1 -0
- package/dist/runtime/exec.d.ts.map +1 -0
- package/dist/runtime/exec.js.map +1 -0
- package/dist/runtime/footer-data-provider.d.ts.map +1 -0
- package/dist/runtime/footer-data-provider.js.map +1 -0
- package/dist/runtime/html-export/ansi-to-html.d.ts.map +1 -0
- package/dist/runtime/html-export/ansi-to-html.js.map +1 -0
- package/dist/runtime/html-export/index.d.ts.map +1 -0
- package/dist/runtime/html-export/index.js +350 -0
- package/dist/runtime/html-export/index.js.map +1 -0
- package/dist/runtime/html-export/index.ts +433 -0
- package/dist/runtime/html-export/tool-renderer.d.ts +18 -0
- package/dist/runtime/html-export/tool-renderer.d.ts.map +1 -0
- package/dist/runtime/html-export/tool-renderer.js.map +1 -0
- package/dist/runtime/html-export/tool-renderer.ts +80 -0
- package/dist/runtime/index.d.ts +30 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +30 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/keybindings.d.ts.map +1 -0
- package/dist/runtime/keybindings.js.map +1 -0
- package/dist/runtime/lifecycle/index.d.ts.map +1 -0
- package/dist/runtime/lifecycle/index.js.map +1 -0
- package/dist/runtime/lifecycle/loader.d.ts.map +1 -0
- package/dist/runtime/lifecycle/loader.js.map +1 -0
- package/dist/runtime/lifecycle/runner.d.ts.map +1 -0
- package/dist/runtime/lifecycle/runner.js.map +1 -0
- package/dist/runtime/lifecycle/types.d.ts.map +1 -0
- package/dist/runtime/lifecycle/types.js.map +1 -0
- package/dist/runtime/messages.d.ts.map +1 -0
- package/dist/runtime/messages.js.map +1 -0
- package/dist/runtime/model-registry.d.ts.map +1 -0
- package/dist/runtime/model-registry.js.map +1 -0
- package/dist/runtime/model-resolver.d.ts.map +1 -0
- package/dist/runtime/model-resolver.js +227 -0
- package/dist/runtime/model-resolver.js.map +1 -0
- package/dist/runtime/package-manager.d.ts.map +1 -0
- package/dist/runtime/package-manager.js.map +1 -0
- package/dist/runtime/plugins/index.d.ts.map +1 -0
- package/dist/runtime/plugins/index.js.map +1 -0
- package/dist/runtime/plugins/loader.d.ts.map +1 -0
- package/dist/runtime/plugins/loader.js.map +1 -0
- package/dist/runtime/plugins/runner.d.ts.map +1 -0
- package/dist/runtime/plugins/runner.js +468 -0
- package/dist/runtime/plugins/runner.js.map +1 -0
- package/dist/runtime/plugins/types.d.ts +859 -0
- package/dist/runtime/plugins/types.d.ts.map +1 -0
- package/dist/runtime/plugins/types.js.map +1 -0
- package/dist/runtime/plugins/wrapper.d.ts +29 -0
- package/dist/runtime/plugins/wrapper.d.ts.map +1 -0
- package/dist/runtime/plugins/wrapper.js.map +1 -0
- package/dist/runtime/prompt-templates.d.ts.map +1 -0
- package/dist/runtime/prompt-templates.js +203 -0
- package/dist/runtime/prompt-templates.js.map +1 -0
- package/dist/runtime/resource-loader.d.ts +180 -0
- package/dist/runtime/resource-loader.d.ts.map +1 -0
- package/dist/runtime/resource-loader.js +530 -0
- package/dist/runtime/resource-loader.js.map +1 -0
- package/dist/runtime/sdk.d.ts +49 -0
- package/dist/runtime/sdk.d.ts.map +1 -0
- package/dist/runtime/sdk.js +306 -0
- package/dist/runtime/sdk.js.map +1 -0
- package/dist/runtime/session-manager.d.ts.map +1 -0
- package/dist/runtime/session-manager.js.map +1 -0
- package/dist/runtime/settings-manager.d.ts.map +1 -0
- package/dist/runtime/settings-manager.js.map +1 -0
- package/dist/runtime/skills.d.ts.map +1 -0
- package/dist/runtime/skills.js +277 -0
- package/dist/runtime/skills.js.map +1 -0
- package/dist/runtime/subagents.d.ts.map +1 -0
- package/dist/runtime/subagents.js +163 -0
- package/dist/runtime/subagents.js.map +1 -0
- package/dist/runtime/system-prompt.d.ts.map +1 -0
- package/dist/runtime/system-prompt.js.map +1 -0
- package/dist/runtime/task-session-manager.d.ts.map +1 -0
- package/dist/runtime/task-session-manager.js.map +1 -0
- package/dist/runtime/timings.d.ts.map +1 -0
- package/dist/runtime/timings.js.map +1 -0
- package/dist/runtime/todo-store.d.ts.map +1 -0
- package/dist/runtime/todo-store.js.map +1 -0
- package/dist/runtime/tooling/bash.d.ts.map +1 -0
- package/dist/runtime/tooling/bash.js.map +1 -0
- package/dist/runtime/tooling/bg-process.d.ts.map +1 -0
- package/dist/runtime/tooling/bg-process.js.map +1 -0
- package/dist/runtime/tooling/edit-diff.d.ts.map +1 -0
- package/dist/runtime/tooling/edit-diff.js.map +1 -0
- package/dist/runtime/tooling/edit.d.ts.map +1 -0
- package/dist/runtime/tooling/edit.js.map +1 -0
- package/dist/runtime/tooling/find.d.ts.map +1 -0
- package/dist/runtime/tooling/find.js.map +1 -0
- package/dist/runtime/tooling/grep.d.ts.map +1 -0
- package/dist/runtime/tooling/grep.js.map +1 -0
- package/dist/runtime/tooling/index.d.ts +208 -0
- package/dist/runtime/tooling/index.d.ts.map +1 -0
- package/dist/runtime/tooling/index.js.map +1 -0
- package/dist/runtime/tooling/ls.d.ts.map +1 -0
- package/dist/runtime/tooling/ls.js.map +1 -0
- package/dist/runtime/tooling/memory.d.ts.map +1 -0
- package/dist/runtime/tooling/memory.js.map +1 -0
- package/dist/runtime/tooling/path-utils.d.ts.map +1 -0
- package/dist/runtime/tooling/path-utils.js.map +1 -0
- package/dist/runtime/tooling/read.d.ts.map +1 -0
- package/dist/runtime/tooling/read.js.map +1 -0
- package/dist/runtime/tooling/registry.d.ts.map +1 -0
- package/dist/runtime/tooling/registry.js.map +1 -0
- package/dist/runtime/tooling/task.d.ts.map +1 -0
- package/dist/runtime/tooling/task.js.map +1 -0
- package/dist/runtime/tooling/todo.d.ts.map +1 -0
- package/dist/runtime/tooling/todo.js.map +1 -0
- package/dist/runtime/tooling/truncate.d.ts.map +1 -0
- package/dist/runtime/tooling/truncate.js.map +1 -0
- package/dist/runtime/tooling/webfetch.d.ts.map +1 -0
- package/dist/runtime/tooling/webfetch.js.map +1 -0
- package/dist/runtime/tooling/websearch.d.ts.map +1 -0
- package/dist/runtime/tooling/websearch.js.map +1 -0
- package/dist/runtime/tooling/write.d.ts.map +1 -0
- package/dist/runtime/tooling/write.js.map +1 -0
- package/dist/telemetry/core/config.d.ts.map +1 -0
- package/dist/telemetry/core/config.js.map +1 -0
- package/dist/telemetry/core/event-bus.d.ts.map +1 -0
- package/dist/telemetry/core/event-bus.js.map +1 -0
- package/dist/telemetry/core/index.d.ts.map +1 -0
- package/dist/telemetry/core/index.js.map +1 -0
- package/dist/telemetry/core/observability.d.ts.map +1 -0
- package/dist/telemetry/core/observability.js.map +1 -0
- package/dist/telemetry/core/span.d.ts.map +1 -0
- package/dist/telemetry/core/span.js.map +1 -0
- package/dist/telemetry/core/tracer.d.ts.map +1 -0
- package/dist/telemetry/core/tracer.js.map +1 -0
- package/dist/telemetry/core/types.d.ts.map +1 -0
- package/dist/telemetry/core/types.js.map +1 -0
- package/dist/telemetry/exporters/base-exporter.d.ts.map +1 -0
- package/dist/telemetry/exporters/base-exporter.js.map +1 -0
- package/dist/telemetry/exporters/console-exporter.d.ts.map +1 -0
- package/dist/telemetry/exporters/console-exporter.js.map +1 -0
- package/dist/telemetry/exporters/file-exporter.d.ts.map +1 -0
- package/dist/telemetry/exporters/file-exporter.js.map +1 -0
- package/dist/telemetry/exporters/index.d.ts.map +1 -0
- package/dist/telemetry/exporters/index.js.map +1 -0
- package/dist/telemetry/exporters/langfuse-exporter.d.ts.map +1 -0
- package/dist/telemetry/exporters/langfuse-exporter.js.map +1 -0
- package/dist/telemetry/exporters/sentry-exporter.d.ts.map +1 -0
- package/dist/telemetry/exporters/sentry-exporter.js.map +1 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js.map +1 -0
- package/package.json +7 -7
- package/dist/cli/args.d.ts +0 -56
- package/dist/cli/args.d.ts.map +0 -1
- package/dist/cli/args.js.map +0 -1
- package/dist/cli/config-selector.d.ts +0 -17
- package/dist/cli/config-selector.d.ts.map +0 -1
- package/dist/cli/config-selector.js.map +0 -1
- package/dist/cli/file-processor.d.ts.map +0 -1
- package/dist/cli/file-processor.js.map +0 -1
- package/dist/cli/list-models.d.ts +0 -9
- package/dist/cli/list-models.d.ts.map +0 -1
- package/dist/cli/list-models.js.map +0 -1
- package/dist/cli/login-handler.d.ts.map +0 -1
- package/dist/cli/login-handler.js +0 -746
- package/dist/cli/login-handler.js.map +0 -1
- package/dist/cli/session-picker.d.ts.map +0 -1
- package/dist/cli/session-picker.js.map +0 -1
- package/dist/core/agent-session.d.ts +0 -936
- package/dist/core/agent-session.d.ts.map +0 -1
- package/dist/core/agent-session.js +0 -2737
- package/dist/core/agent-session.js.map +0 -1
- package/dist/core/auth-storage.d.ts.map +0 -1
- package/dist/core/auth-storage.js.map +0 -1
- package/dist/core/bash-executor.d.ts.map +0 -1
- package/dist/core/bash-executor.js.map +0 -1
- package/dist/core/compaction/branch-summarization.d.ts.map +0 -1
- package/dist/core/compaction/branch-summarization.js.map +0 -1
- package/dist/core/compaction/compaction.d.ts.map +0 -1
- package/dist/core/compaction/compaction.js.map +0 -1
- package/dist/core/compaction/index.d.ts.map +0 -1
- package/dist/core/compaction/index.js.map +0 -1
- package/dist/core/compaction/utils.d.ts.map +0 -1
- package/dist/core/compaction/utils.js.map +0 -1
- package/dist/core/diagnostics.d.ts.map +0 -1
- package/dist/core/diagnostics.js.map +0 -1
- package/dist/core/discover-packages.d.ts.map +0 -1
- package/dist/core/discover-packages.js.map +0 -1
- package/dist/core/event-bus.d.ts.map +0 -1
- package/dist/core/event-bus.js.map +0 -1
- package/dist/core/exec.d.ts.map +0 -1
- package/dist/core/exec.js.map +0 -1
- package/dist/core/export-html/ansi-to-html.d.ts.map +0 -1
- package/dist/core/export-html/ansi-to-html.js.map +0 -1
- package/dist/core/export-html/index.d.ts.map +0 -1
- package/dist/core/export-html/index.js +0 -350
- package/dist/core/export-html/index.js.map +0 -1
- package/dist/core/export-html/index.ts +0 -433
- package/dist/core/export-html/tool-renderer.d.ts +0 -18
- package/dist/core/export-html/tool-renderer.d.ts.map +0 -1
- package/dist/core/export-html/tool-renderer.js.map +0 -1
- package/dist/core/export-html/tool-renderer.ts +0 -80
- package/dist/core/extensions/index.d.ts.map +0 -1
- package/dist/core/extensions/index.js.map +0 -1
- package/dist/core/extensions/loader.d.ts.map +0 -1
- package/dist/core/extensions/loader.js.map +0 -1
- package/dist/core/extensions/runner.d.ts.map +0 -1
- package/dist/core/extensions/runner.js +0 -468
- package/dist/core/extensions/runner.js.map +0 -1
- package/dist/core/extensions/types.d.ts +0 -859
- package/dist/core/extensions/types.d.ts.map +0 -1
- package/dist/core/extensions/types.js.map +0 -1
- package/dist/core/extensions/wrapper.d.ts +0 -29
- package/dist/core/extensions/wrapper.d.ts.map +0 -1
- package/dist/core/extensions/wrapper.js.map +0 -1
- package/dist/core/footer-data-provider.d.ts.map +0 -1
- package/dist/core/footer-data-provider.js.map +0 -1
- package/dist/core/hooks/index.d.ts.map +0 -1
- package/dist/core/hooks/index.js.map +0 -1
- package/dist/core/hooks/loader.d.ts.map +0 -1
- package/dist/core/hooks/loader.js.map +0 -1
- package/dist/core/hooks/runner.d.ts.map +0 -1
- package/dist/core/hooks/runner.js.map +0 -1
- package/dist/core/hooks/types.d.ts.map +0 -1
- package/dist/core/hooks/types.js.map +0 -1
- package/dist/core/index.d.ts +0 -30
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -30
- package/dist/core/index.js.map +0 -1
- package/dist/core/keybindings.d.ts.map +0 -1
- package/dist/core/keybindings.js.map +0 -1
- package/dist/core/messages.d.ts.map +0 -1
- package/dist/core/messages.js.map +0 -1
- package/dist/core/model-registry.d.ts.map +0 -1
- package/dist/core/model-registry.js.map +0 -1
- package/dist/core/model-resolver.d.ts.map +0 -1
- package/dist/core/model-resolver.js +0 -227
- package/dist/core/model-resolver.js.map +0 -1
- package/dist/core/package-manager.d.ts.map +0 -1
- package/dist/core/package-manager.js.map +0 -1
- package/dist/core/prompt-templates.d.ts.map +0 -1
- package/dist/core/prompt-templates.js +0 -203
- package/dist/core/prompt-templates.js.map +0 -1
- package/dist/core/resource-loader.d.ts +0 -180
- package/dist/core/resource-loader.d.ts.map +0 -1
- package/dist/core/resource-loader.js +0 -530
- package/dist/core/resource-loader.js.map +0 -1
- package/dist/core/sdk.d.ts +0 -49
- package/dist/core/sdk.d.ts.map +0 -1
- package/dist/core/sdk.js +0 -306
- package/dist/core/sdk.js.map +0 -1
- package/dist/core/session-manager.d.ts.map +0 -1
- package/dist/core/session-manager.js.map +0 -1
- package/dist/core/settings-manager.d.ts.map +0 -1
- package/dist/core/settings-manager.js.map +0 -1
- package/dist/core/skills.d.ts.map +0 -1
- package/dist/core/skills.js +0 -277
- package/dist/core/skills.js.map +0 -1
- package/dist/core/subagents.d.ts.map +0 -1
- package/dist/core/subagents.js +0 -163
- package/dist/core/subagents.js.map +0 -1
- package/dist/core/system-prompt.d.ts.map +0 -1
- package/dist/core/system-prompt.js.map +0 -1
- package/dist/core/task-session-manager.d.ts.map +0 -1
- package/dist/core/task-session-manager.js.map +0 -1
- package/dist/core/timings.d.ts.map +0 -1
- package/dist/core/timings.js.map +0 -1
- package/dist/core/todo-store.d.ts.map +0 -1
- package/dist/core/todo-store.js.map +0 -1
- package/dist/core/tools/bash.d.ts.map +0 -1
- package/dist/core/tools/bash.js.map +0 -1
- package/dist/core/tools/bg-process.d.ts.map +0 -1
- package/dist/core/tools/bg-process.js.map +0 -1
- package/dist/core/tools/edit-diff.d.ts.map +0 -1
- package/dist/core/tools/edit-diff.js.map +0 -1
- package/dist/core/tools/edit.d.ts.map +0 -1
- package/dist/core/tools/edit.js.map +0 -1
- package/dist/core/tools/find.d.ts.map +0 -1
- package/dist/core/tools/find.js.map +0 -1
- package/dist/core/tools/grep.d.ts.map +0 -1
- package/dist/core/tools/grep.js.map +0 -1
- package/dist/core/tools/index.d.ts +0 -208
- package/dist/core/tools/index.d.ts.map +0 -1
- package/dist/core/tools/index.js.map +0 -1
- package/dist/core/tools/ls.d.ts.map +0 -1
- package/dist/core/tools/ls.js.map +0 -1
- package/dist/core/tools/memory.d.ts.map +0 -1
- package/dist/core/tools/memory.js.map +0 -1
- package/dist/core/tools/path-utils.d.ts.map +0 -1
- package/dist/core/tools/path-utils.js.map +0 -1
- package/dist/core/tools/read.d.ts.map +0 -1
- package/dist/core/tools/read.js.map +0 -1
- package/dist/core/tools/registry.d.ts.map +0 -1
- package/dist/core/tools/registry.js.map +0 -1
- package/dist/core/tools/task.d.ts.map +0 -1
- package/dist/core/tools/task.js.map +0 -1
- package/dist/core/tools/todo.d.ts.map +0 -1
- package/dist/core/tools/todo.js.map +0 -1
- package/dist/core/tools/truncate.d.ts.map +0 -1
- package/dist/core/tools/truncate.js.map +0 -1
- package/dist/core/tools/webfetch.d.ts.map +0 -1
- package/dist/core/tools/webfetch.js.map +0 -1
- package/dist/core/tools/websearch.d.ts.map +0 -1
- package/dist/core/tools/websearch.js.map +0 -1
- package/dist/core/tools/write.d.ts.map +0 -1
- package/dist/core/tools/write.js.map +0 -1
- package/dist/modes/index.d.ts +0 -16
- package/dist/modes/index.d.ts.map +0 -1
- package/dist/modes/index.js +0 -14
- package/dist/modes/index.js.map +0 -1
- package/dist/modes/interactive/components/armin.d.ts.map +0 -1
- package/dist/modes/interactive/components/armin.js.map +0 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +0 -1
- package/dist/modes/interactive/components/assistant-message.js.map +0 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +0 -1
- package/dist/modes/interactive/components/bash-execution.js.map +0 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +0 -1
- package/dist/modes/interactive/components/bordered-loader.js.map +0 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +0 -16
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +0 -1
- package/dist/modes/interactive/components/branch-summary-message.js.map +0 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +0 -16
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +0 -1
- package/dist/modes/interactive/components/compaction-summary-message.js.map +0 -1
- package/dist/modes/interactive/components/config-selector.d.ts +0 -71
- package/dist/modes/interactive/components/config-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/config-selector.js.map +0 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +0 -1
- package/dist/modes/interactive/components/countdown-timer.js.map +0 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +0 -17
- package/dist/modes/interactive/components/custom-editor.d.ts.map +0 -1
- package/dist/modes/interactive/components/custom-editor.js.map +0 -1
- package/dist/modes/interactive/components/custom-message.d.ts +0 -19
- package/dist/modes/interactive/components/custom-message.d.ts.map +0 -1
- package/dist/modes/interactive/components/custom-message.js.map +0 -1
- package/dist/modes/interactive/components/diff.d.ts.map +0 -1
- package/dist/modes/interactive/components/diff.js.map +0 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +0 -1
- package/dist/modes/interactive/components/dynamic-border.js.map +0 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +0 -13
- package/dist/modes/interactive/components/extension-editor.d.ts.map +0 -1
- package/dist/modes/interactive/components/extension-editor.js.map +0 -1
- package/dist/modes/interactive/components/extension-input.d.ts.map +0 -1
- package/dist/modes/interactive/components/extension-input.js.map +0 -1
- package/dist/modes/interactive/components/extension-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/extension-selector.js.map +0 -1
- package/dist/modes/interactive/components/footer.d.ts +0 -17
- package/dist/modes/interactive/components/footer.d.ts.map +0 -1
- package/dist/modes/interactive/components/footer.js.map +0 -1
- package/dist/modes/interactive/components/index.d.ts.map +0 -1
- package/dist/modes/interactive/components/index.js.map +0 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts +0 -23
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +0 -1
- package/dist/modes/interactive/components/keybinding-hints.js.map +0 -1
- package/dist/modes/interactive/components/login-dialog.d.ts.map +0 -1
- package/dist/modes/interactive/components/login-dialog.js.map +0 -1
- package/dist/modes/interactive/components/model-selector.d.ts +0 -43
- package/dist/modes/interactive/components/model-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/model-selector.js.map +0 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts +0 -75
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/oauth-selector.js.map +0 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/scoped-models-selector.js.map +0 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts +0 -21
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +0 -1
- package/dist/modes/interactive/components/session-selector-search.js.map +0 -1
- package/dist/modes/interactive/components/session-selector.d.ts +0 -85
- package/dist/modes/interactive/components/session-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/session-selector.js.map +0 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/settings-selector.js.map +0 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/show-images-selector.js.map +0 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +0 -17
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +0 -1
- package/dist/modes/interactive/components/skill-invocation-message.js.map +0 -1
- package/dist/modes/interactive/components/theme-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/theme-selector.js.map +0 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/thinking-selector.js.map +0 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +0 -72
- package/dist/modes/interactive/components/tool-execution.d.ts.map +0 -1
- package/dist/modes/interactive/components/tool-execution.js +0 -1001
- package/dist/modes/interactive/components/tool-execution.js.map +0 -1
- package/dist/modes/interactive/components/tree-selector.d.ts +0 -62
- package/dist/modes/interactive/components/tree-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/tree-selector.js.map +0 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +0 -1
- package/dist/modes/interactive/components/user-message-selector.js.map +0 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +0 -1
- package/dist/modes/interactive/components/user-message.js.map +0 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +0 -1
- package/dist/modes/interactive/components/visual-truncate.js.map +0 -1
- package/dist/modes/interactive/interactive-mode.d.ts +0 -1931
- package/dist/modes/interactive/interactive-mode.d.ts.map +0 -1
- package/dist/modes/interactive/interactive-mode.js +0 -5733
- package/dist/modes/interactive/interactive-mode.js.map +0 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +0 -1
- package/dist/modes/interactive/theme/theme.js.map +0 -1
- package/dist/modes/print-mode.d.ts +0 -561
- package/dist/modes/print-mode.d.ts.map +0 -1
- package/dist/modes/print-mode.js.map +0 -1
- package/dist/modes/rpc/rpc-client.d.ts +0 -1129
- package/dist/modes/rpc/rpc-client.d.ts.map +0 -1
- package/dist/modes/rpc/rpc-client.js.map +0 -1
- package/dist/modes/rpc/rpc-mode.d.ts +0 -813
- package/dist/modes/rpc/rpc-mode.d.ts.map +0 -1
- package/dist/modes/rpc/rpc-mode.js +0 -1229
- package/dist/modes/rpc/rpc-mode.js.map +0 -1
- package/dist/modes/rpc/rpc-types.d.ts +0 -392
- package/dist/modes/rpc/rpc-types.d.ts.map +0 -1
- package/dist/modes/rpc/rpc-types.js.map +0 -1
- package/dist/modes/shared.d.ts.map +0 -1
- package/dist/modes/shared.js.map +0 -1
- package/dist/observability/core/config.d.ts.map +0 -1
- package/dist/observability/core/config.js.map +0 -1
- package/dist/observability/core/event-bus.d.ts.map +0 -1
- package/dist/observability/core/event-bus.js.map +0 -1
- package/dist/observability/core/index.d.ts.map +0 -1
- package/dist/observability/core/index.js.map +0 -1
- package/dist/observability/core/observability.d.ts.map +0 -1
- package/dist/observability/core/observability.js.map +0 -1
- package/dist/observability/core/span.d.ts.map +0 -1
- package/dist/observability/core/span.js.map +0 -1
- package/dist/observability/core/tracer.d.ts.map +0 -1
- package/dist/observability/core/tracer.js.map +0 -1
- package/dist/observability/core/types.d.ts.map +0 -1
- package/dist/observability/core/types.js.map +0 -1
- package/dist/observability/exporters/base-exporter.d.ts.map +0 -1
- package/dist/observability/exporters/base-exporter.js.map +0 -1
- package/dist/observability/exporters/console-exporter.d.ts.map +0 -1
- package/dist/observability/exporters/console-exporter.js.map +0 -1
- package/dist/observability/exporters/file-exporter.d.ts.map +0 -1
- package/dist/observability/exporters/file-exporter.js.map +0 -1
- package/dist/observability/exporters/index.d.ts.map +0 -1
- package/dist/observability/exporters/index.js.map +0 -1
- package/dist/observability/exporters/langfuse-exporter.d.ts.map +0 -1
- package/dist/observability/exporters/langfuse-exporter.js.map +0 -1
- package/dist/observability/exporters/sentry-exporter.d.ts.map +0 -1
- package/dist/observability/exporters/sentry-exporter.js.map +0 -1
- package/dist/observability/index.d.ts.map +0 -1
- package/dist/observability/index.js.map +0 -1
- package/dist/utils/array.d.ts.map +0 -1
- package/dist/utils/array.js.map +0 -1
- package/dist/utils/changelog.d.ts.map +0 -1
- package/dist/utils/changelog.js.map +0 -1
- package/dist/utils/clipboard-image.d.ts.map +0 -1
- package/dist/utils/clipboard-image.js.map +0 -1
- package/dist/utils/clipboard.d.ts.map +0 -1
- package/dist/utils/clipboard.js.map +0 -1
- package/dist/utils/color-formatter.d.ts.map +0 -1
- package/dist/utils/color-formatter.js.map +0 -1
- package/dist/utils/data-transformer.d.ts.map +0 -1
- package/dist/utils/data-transformer.js.map +0 -1
- package/dist/utils/date-formatter.d.ts.map +0 -1
- package/dist/utils/date-formatter.js.map +0 -1
- package/dist/utils/error-handler.d.ts.map +0 -1
- package/dist/utils/error-handler.js.map +0 -1
- package/dist/utils/file-operations.d.ts.map +0 -1
- package/dist/utils/file-operations.js.map +0 -1
- package/dist/utils/frontmatter.d.ts.map +0 -1
- package/dist/utils/frontmatter.js.map +0 -1
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/image-convert.d.ts.map +0 -1
- package/dist/utils/image-convert.js.map +0 -1
- package/dist/utils/image-resize.d.ts.map +0 -1
- package/dist/utils/image-resize.js.map +0 -1
- package/dist/utils/json-formatter.d.ts.map +0 -1
- package/dist/utils/json-formatter.js.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/markdown-formatter.d.ts.map +0 -1
- package/dist/utils/markdown-formatter.js.map +0 -1
- package/dist/utils/mime.d.ts.map +0 -1
- package/dist/utils/mime.js.map +0 -1
- package/dist/utils/path-validator.d.ts.map +0 -1
- package/dist/utils/path-validator.js.map +0 -1
- package/dist/utils/photon.d.ts.map +0 -1
- package/dist/utils/photon.js.map +0 -1
- package/dist/utils/shell.d.ts.map +0 -1
- package/dist/utils/shell.js +0 -142
- package/dist/utils/shell.js.map +0 -1
- package/dist/utils/sleep.d.ts.map +0 -1
- package/dist/utils/sleep.js.map +0 -1
- package/dist/utils/string-formatter.d.ts.map +0 -1
- package/dist/utils/string-formatter.js.map +0 -1
- package/dist/utils/tools-manager.d.ts.map +0 -1
- package/dist/utils/tools-manager.js.map +0 -1
- package/dist/utils/type-guards.d.ts.map +0 -1
- package/dist/utils/type-guards.js.map +0 -1
- /package/{examples → demos}/README.md +0 -0
- /package/dist/{cli → command-line}/args.js +0 -0
- /package/dist/{cli → command-line}/config-selector.js +0 -0
- /package/dist/{cli → command-line}/file-processor.d.ts +0 -0
- /package/dist/{cli → command-line}/file-processor.js +0 -0
- /package/dist/{cli → command-line}/list-models.js +0 -0
- /package/dist/{cli → command-line}/login-handler.d.ts +0 -0
- /package/dist/{cli → command-line}/session-picker.d.ts +0 -0
- /package/dist/{cli → command-line}/session-picker.js +0 -0
- /package/dist/{utils → helpers}/array.d.ts +0 -0
- /package/dist/{utils → helpers}/array.js +0 -0
- /package/dist/{utils → helpers}/changelog.d.ts +0 -0
- /package/dist/{utils → helpers}/changelog.js +0 -0
- /package/dist/{utils → helpers}/clipboard-image.d.ts +0 -0
- /package/dist/{utils → helpers}/clipboard-image.js +0 -0
- /package/dist/{utils → helpers}/clipboard.d.ts +0 -0
- /package/dist/{utils → helpers}/clipboard.js +0 -0
- /package/dist/{utils → helpers}/color-formatter.d.ts +0 -0
- /package/dist/{utils → helpers}/color-formatter.js +0 -0
- /package/dist/{utils → helpers}/data-transformer.d.ts +0 -0
- /package/dist/{utils → helpers}/data-transformer.js +0 -0
- /package/dist/{utils → helpers}/date-formatter.d.ts +0 -0
- /package/dist/{utils → helpers}/date-formatter.js +0 -0
- /package/dist/{utils → helpers}/error-handler.d.ts +0 -0
- /package/dist/{utils → helpers}/error-handler.js +0 -0
- /package/dist/{utils → helpers}/file-operations.d.ts +0 -0
- /package/dist/{utils → helpers}/file-operations.js +0 -0
- /package/dist/{utils → helpers}/frontmatter.d.ts +0 -0
- /package/dist/{utils → helpers}/frontmatter.js +0 -0
- /package/dist/{utils → helpers}/git.d.ts +0 -0
- /package/dist/{utils → helpers}/git.js +0 -0
- /package/dist/{utils → helpers}/image-convert.d.ts +0 -0
- /package/dist/{utils → helpers}/image-convert.js +0 -0
- /package/dist/{utils → helpers}/image-resize.d.ts +0 -0
- /package/dist/{utils → helpers}/image-resize.js +0 -0
- /package/dist/{utils → helpers}/json-formatter.d.ts +0 -0
- /package/dist/{utils → helpers}/json-formatter.js +0 -0
- /package/dist/{utils → helpers}/logger.d.ts +0 -0
- /package/dist/{utils → helpers}/logger.js +0 -0
- /package/dist/{utils → helpers}/markdown-formatter.d.ts +0 -0
- /package/dist/{utils → helpers}/markdown-formatter.js +0 -0
- /package/dist/{utils → helpers}/mime.d.ts +0 -0
- /package/dist/{utils → helpers}/mime.js +0 -0
- /package/dist/{utils → helpers}/path-validator.d.ts +0 -0
- /package/dist/{utils → helpers}/path-validator.js +0 -0
- /package/dist/{utils → helpers}/photon.d.ts +0 -0
- /package/dist/{utils → helpers}/photon.js +0 -0
- /package/dist/{utils → helpers}/shell.d.ts +0 -0
- /package/dist/{utils → helpers}/sleep.d.ts +0 -0
- /package/dist/{utils → helpers}/sleep.js +0 -0
- /package/dist/{utils → helpers}/string-formatter.d.ts +0 -0
- /package/dist/{utils → helpers}/string-formatter.js +0 -0
- /package/dist/{utils → helpers}/tools-manager.d.ts +0 -0
- /package/dist/{utils → helpers}/tools-manager.js +0 -0
- /package/dist/{utils → helpers}/type-guards.d.ts +0 -0
- /package/dist/{utils → helpers}/type-guards.js +0 -0
- /package/dist/{modes → interfaces}/print-mode.js +0 -0
- /package/dist/{modes/rpc → interfaces/service-api}/rpc-client.js +0 -0
- /package/dist/{modes/rpc → interfaces/service-api}/rpc-types.js +0 -0
- /package/dist/{modes → interfaces}/shared.d.ts +0 -0
- /package/dist/{modes → interfaces}/shared.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/armin.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/armin.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/assistant-message.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/assistant-message.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/bash-execution.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/bash-execution.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/bordered-loader.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/bordered-loader.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/branch-summary-message.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/compaction-summary-message.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/config-selector.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/countdown-timer.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/countdown-timer.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/custom-editor.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/custom-message.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/diff.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/diff.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/dynamic-border.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/dynamic-border.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/extension-editor.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/extension-input.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/extension-input.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/extension-selector.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/extension-selector.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/footer.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/index.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/index.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/keybinding-hints.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/login-dialog.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/login-dialog.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/model-selector.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/oauth-selector.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/scoped-models-selector.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/scoped-models-selector.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/session-selector-search.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/session-selector.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/settings-selector.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/settings-selector.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/show-images-selector.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/show-images-selector.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/skill-invocation-message.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/theme-selector.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/theme-selector.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/thinking-selector.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/thinking-selector.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/tree-selector.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/user-message-selector.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/user-message-selector.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/user-message.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/user-message.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/visual-truncate.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/components/visual-truncate.js +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/theme/dark.json +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/theme/light.json +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/theme/theme-schema.json +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/theme/theme.d.ts +0 -0
- /package/dist/{modes/interactive → interfaces/terminal-ui}/theme/theme.js +0 -0
- /package/dist/{core → runtime}/auth-storage.d.ts +0 -0
- /package/dist/{core → runtime}/auth-storage.js +0 -0
- /package/dist/{core → runtime}/bash-executor.d.ts +0 -0
- /package/dist/{core → runtime}/bash-executor.js +0 -0
- /package/dist/{core/compaction → runtime/context-compression}/branch-summarization.d.ts +0 -0
- /package/dist/{core/compaction → runtime/context-compression}/branch-summarization.js +0 -0
- /package/dist/{core/compaction → runtime/context-compression}/compaction.d.ts +0 -0
- /package/dist/{core/compaction → runtime/context-compression}/compaction.js +0 -0
- /package/dist/{core/compaction → runtime/context-compression}/index.d.ts +0 -0
- /package/dist/{core/compaction → runtime/context-compression}/index.js +0 -0
- /package/dist/{core/compaction → runtime/context-compression}/utils.d.ts +0 -0
- /package/dist/{core/compaction → runtime/context-compression}/utils.js +0 -0
- /package/dist/{core → runtime}/diagnostics.d.ts +0 -0
- /package/dist/{core → runtime}/diagnostics.js +0 -0
- /package/dist/{core → runtime}/discover-packages.d.ts +0 -0
- /package/dist/{core → runtime}/discover-packages.js +0 -0
- /package/dist/{core → runtime}/event-bus.d.ts +0 -0
- /package/dist/{core → runtime}/event-bus.js +0 -0
- /package/dist/{core → runtime}/exec.d.ts +0 -0
- /package/dist/{core → runtime}/exec.js +0 -0
- /package/dist/{core → runtime}/footer-data-provider.d.ts +0 -0
- /package/dist/{core → runtime}/footer-data-provider.js +0 -0
- /package/dist/{core/export-html → runtime/html-export}/ansi-to-html.d.ts +0 -0
- /package/dist/{core/export-html → runtime/html-export}/ansi-to-html.js +0 -0
- /package/dist/{core/export-html → runtime/html-export}/ansi-to-html.ts +0 -0
- /package/dist/{core/export-html → runtime/html-export}/index.d.ts +0 -0
- /package/dist/{core/export-html → runtime/html-export}/template.css +0 -0
- /package/dist/{core/export-html → runtime/html-export}/template.html +0 -0
- /package/dist/{core/export-html → runtime/html-export}/template.js +0 -0
- /package/dist/{core/export-html → runtime/html-export}/tool-renderer.js +0 -0
- /package/dist/{core/export-html → runtime/html-export}/vendor/highlight.min.js +0 -0
- /package/dist/{core/export-html → runtime/html-export}/vendor/marked.min.js +0 -0
- /package/dist/{core → runtime}/keybindings.d.ts +0 -0
- /package/dist/{core → runtime}/keybindings.js +0 -0
- /package/dist/{core/hooks → runtime/lifecycle}/index.d.ts +0 -0
- /package/dist/{core/hooks → runtime/lifecycle}/index.js +0 -0
- /package/dist/{core/hooks → runtime/lifecycle}/loader.d.ts +0 -0
- /package/dist/{core/hooks → runtime/lifecycle}/loader.js +0 -0
- /package/dist/{core/hooks → runtime/lifecycle}/runner.d.ts +0 -0
- /package/dist/{core/hooks → runtime/lifecycle}/runner.js +0 -0
- /package/dist/{core/hooks → runtime/lifecycle}/types.d.ts +0 -0
- /package/dist/{core/hooks → runtime/lifecycle}/types.js +0 -0
- /package/dist/{core → runtime}/messages.d.ts +0 -0
- /package/dist/{core → runtime}/messages.js +0 -0
- /package/dist/{core → runtime}/model-registry.d.ts +0 -0
- /package/dist/{core → runtime}/model-registry.js +0 -0
- /package/dist/{core → runtime}/model-resolver.d.ts +0 -0
- /package/dist/{core → runtime}/package-manager.d.ts +0 -0
- /package/dist/{core → runtime}/package-manager.js +0 -0
- /package/dist/{core/extensions → runtime/plugins}/index.d.ts +0 -0
- /package/dist/{core/extensions → runtime/plugins}/index.js +0 -0
- /package/dist/{core/extensions → runtime/plugins}/loader.d.ts +0 -0
- /package/dist/{core/extensions → runtime/plugins}/loader.js +0 -0
- /package/dist/{core/extensions → runtime/plugins}/runner.d.ts +0 -0
- /package/dist/{core/extensions → runtime/plugins}/types.js +0 -0
- /package/dist/{core/extensions → runtime/plugins}/wrapper.js +0 -0
- /package/dist/{core → runtime}/prompt-templates.d.ts +0 -0
- /package/dist/{core → runtime}/session-manager.d.ts +0 -0
- /package/dist/{core → runtime}/session-manager.js +0 -0
- /package/dist/{core → runtime}/settings-manager.d.ts +0 -0
- /package/dist/{core → runtime}/settings-manager.js +0 -0
- /package/dist/{core → runtime}/skills.d.ts +0 -0
- /package/dist/{core → runtime}/subagents.d.ts +0 -0
- /package/dist/{core → runtime}/system-prompt.d.ts +0 -0
- /package/dist/{core → runtime}/system-prompt.js +0 -0
- /package/dist/{core → runtime}/task-session-manager.d.ts +0 -0
- /package/dist/{core → runtime}/task-session-manager.js +0 -0
- /package/dist/{core → runtime}/timings.d.ts +0 -0
- /package/dist/{core → runtime}/timings.js +0 -0
- /package/dist/{core → runtime}/todo-store.d.ts +0 -0
- /package/dist/{core → runtime}/todo-store.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/bash.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/bash.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/bg-process.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/bg-process.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/edit-diff.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/edit-diff.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/edit.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/edit.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/find.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/find.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/grep.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/grep.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/index.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/ls.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/ls.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/memory.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/memory.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/path-utils.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/path-utils.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/read.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/read.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/registry.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/registry.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/task.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/task.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/todo.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/todo.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/truncate.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/truncate.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/webfetch.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/webfetch.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/websearch.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/websearch.js +0 -0
- /package/dist/{core/tools → runtime/tooling}/write.d.ts +0 -0
- /package/dist/{core/tools → runtime/tooling}/write.js +0 -0
- /package/dist/{observability → telemetry}/core/config.d.ts +0 -0
- /package/dist/{observability → telemetry}/core/config.js +0 -0
- /package/dist/{observability → telemetry}/core/event-bus.d.ts +0 -0
- /package/dist/{observability → telemetry}/core/event-bus.js +0 -0
- /package/dist/{observability → telemetry}/core/index.d.ts +0 -0
- /package/dist/{observability → telemetry}/core/index.js +0 -0
- /package/dist/{observability → telemetry}/core/observability.d.ts +0 -0
- /package/dist/{observability → telemetry}/core/observability.js +0 -0
- /package/dist/{observability → telemetry}/core/span.d.ts +0 -0
- /package/dist/{observability → telemetry}/core/span.js +0 -0
- /package/dist/{observability → telemetry}/core/tracer.d.ts +0 -0
- /package/dist/{observability → telemetry}/core/tracer.js +0 -0
- /package/dist/{observability → telemetry}/core/types.d.ts +0 -0
- /package/dist/{observability → telemetry}/core/types.js +0 -0
- /package/dist/{observability → telemetry}/exporters/base-exporter.d.ts +0 -0
- /package/dist/{observability → telemetry}/exporters/base-exporter.js +0 -0
- /package/dist/{observability → telemetry}/exporters/console-exporter.d.ts +0 -0
- /package/dist/{observability → telemetry}/exporters/console-exporter.js +0 -0
- /package/dist/{observability → telemetry}/exporters/file-exporter.d.ts +0 -0
- /package/dist/{observability → telemetry}/exporters/file-exporter.js +0 -0
- /package/dist/{observability → telemetry}/exporters/index.d.ts +0 -0
- /package/dist/{observability → telemetry}/exporters/index.js +0 -0
- /package/dist/{observability → telemetry}/exporters/langfuse-exporter.d.ts +0 -0
- /package/dist/{observability → telemetry}/exporters/langfuse-exporter.js +0 -0
- /package/dist/{observability → telemetry}/exporters/sentry-exporter.d.ts +0 -0
- /package/dist/{observability → telemetry}/exporters/sentry-exporter.js +0 -0
- /package/dist/{observability → telemetry}/index.d.ts +0 -0
- /package/dist/{observability → telemetry}/index.js +0 -0
- /package/{docs → guides}/PI_MONO_MIT_REMOVAL_GUIDE.md +0 -0
- /package/{docs → guides}/SAME_TO_SAME_PARITY_REPORT.md +0 -0
|
@@ -0,0 +1,746 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Login Handler - AI provider authentication and credential management
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
* - Handle login and logout commands for AI providers
|
|
6
|
+
* - Support OAuth and API key-based authentication
|
|
7
|
+
* - Manage multi-account support per provider
|
|
8
|
+
* - Store and retrieve credentials securely
|
|
9
|
+
* - Validate credentials before storage
|
|
10
|
+
* - Display available providers and saved accounts
|
|
11
|
+
*
|
|
12
|
+
* SECURITY CONSIDERATIONS:
|
|
13
|
+
* - Credentials are stored in ~/.indusagi/agent/auth.json with restricted file permissions
|
|
14
|
+
* - API keys are never logged or printed to console
|
|
15
|
+
* - OAuth tokens are stored with expiration times
|
|
16
|
+
* - Environment variables are checked before prompting for input
|
|
17
|
+
* - Credentials are validated before being saved
|
|
18
|
+
*
|
|
19
|
+
* MULTI-ACCOUNT SUPPORT:
|
|
20
|
+
* - Each provider can have multiple named accounts
|
|
21
|
+
* - Default account can be set for each provider
|
|
22
|
+
* - Users can switch between accounts using --account flag
|
|
23
|
+
*
|
|
24
|
+
* Based on login/logout patterns from openclaw
|
|
25
|
+
* Original: https://github.com/varunisrani/indusagi-ts/vendor/indusagi-agent
|
|
26
|
+
*
|
|
27
|
+
* Adapted to:
|
|
28
|
+
* - Improve error messages
|
|
29
|
+
* - Add comprehensive documentation
|
|
30
|
+
* - Add security-focused comments
|
|
31
|
+
* - Add credential validation
|
|
32
|
+
* - Enhance UX with better prompts
|
|
33
|
+
*/
|
|
34
|
+
// ============================================================================
|
|
35
|
+
// IMPORTS
|
|
36
|
+
// ============================================================================
|
|
37
|
+
// External dependencies
|
|
38
|
+
import { getEnvApiKey, getOAuthProviders } from "indusagi/ai";
|
|
39
|
+
import chalk from "chalk";
|
|
40
|
+
import { createInterface } from "readline";
|
|
41
|
+
// Local module imports
|
|
42
|
+
import { AuthStorage } from "../runtime/auth-storage.js";
|
|
43
|
+
import { getAgentDir } from "../config.js";
|
|
44
|
+
// ============================================================================
|
|
45
|
+
// CUSTOM ERROR CLASSES
|
|
46
|
+
// ============================================================================
|
|
47
|
+
/**
|
|
48
|
+
* Login/authentication error with helpful suggestions
|
|
49
|
+
*
|
|
50
|
+
* @class LoginError
|
|
51
|
+
* @extends {Error}
|
|
52
|
+
*/
|
|
53
|
+
export class LoginError extends Error {
|
|
54
|
+
constructor(message, code, suggestion) {
|
|
55
|
+
super(message);
|
|
56
|
+
this.code = code;
|
|
57
|
+
this.suggestion = suggestion;
|
|
58
|
+
this.name = "LoginError";
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Credential validation error
|
|
63
|
+
*
|
|
64
|
+
* @class CredentialValidationError
|
|
65
|
+
* @extends {Error}
|
|
66
|
+
*/
|
|
67
|
+
export class CredentialValidationError extends Error {
|
|
68
|
+
constructor(message, code, suggestion) {
|
|
69
|
+
super(message);
|
|
70
|
+
this.code = code;
|
|
71
|
+
this.suggestion = suggestion;
|
|
72
|
+
this.name = "CredentialValidationError";
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// ============================================================================
|
|
76
|
+
// VALIDATION FUNCTIONS
|
|
77
|
+
// ============================================================================
|
|
78
|
+
/**
|
|
79
|
+
* Validate API key format
|
|
80
|
+
*
|
|
81
|
+
* Checks for common API key patterns and basic format validation
|
|
82
|
+
* Note: This is a basic check; actual validation happens when the key is used
|
|
83
|
+
*
|
|
84
|
+
* @param apiKey - The API key to validate
|
|
85
|
+
* @param provider - Provider name for error messages
|
|
86
|
+
* @throws {CredentialValidationError} If key format appears invalid
|
|
87
|
+
*/
|
|
88
|
+
function validateApiKey(apiKey, provider) {
|
|
89
|
+
if (!apiKey || apiKey.trim().length === 0) {
|
|
90
|
+
throw new CredentialValidationError("API key cannot be empty", "EMPTY_API_KEY");
|
|
91
|
+
}
|
|
92
|
+
const trimmedKey = apiKey.trim();
|
|
93
|
+
// Basic length check (most API keys are at least 20 characters)
|
|
94
|
+
if (trimmedKey.length < 20) {
|
|
95
|
+
throw new CredentialValidationError(`API key appears too short (${trimmedKey.length} characters). Most API keys are 20+ characters.`, "API_KEY_TOO_SHORT");
|
|
96
|
+
}
|
|
97
|
+
// Check for obvious placeholder values
|
|
98
|
+
const lowerKey = trimmedKey.toLowerCase();
|
|
99
|
+
const placeholders = ["your-api-key", "api-key", "enter-key", "paste-key"];
|
|
100
|
+
if (placeholders.some((p) => lowerKey.includes(p))) {
|
|
101
|
+
throw new CredentialValidationError("API key appears to be a placeholder. Please enter your actual API key.", "PLACEHOLDER_API_KEY");
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Validate account name format
|
|
106
|
+
*
|
|
107
|
+
* @param accountName - Account name to validate
|
|
108
|
+
* @throws {CredentialValidationError} If account name is invalid
|
|
109
|
+
*/
|
|
110
|
+
function validateAccountName(accountName) {
|
|
111
|
+
if (!accountName || accountName.trim().length === 0) {
|
|
112
|
+
throw new CredentialValidationError("Account name cannot be empty", "EMPTY_ACCOUNT_NAME");
|
|
113
|
+
}
|
|
114
|
+
const trimmed = accountName.trim();
|
|
115
|
+
// Check length limit
|
|
116
|
+
if (trimmed.length > 50) {
|
|
117
|
+
throw new CredentialValidationError("Account name must be 50 characters or less", "ACCOUNT_NAME_TOO_LONG");
|
|
118
|
+
}
|
|
119
|
+
// Check for invalid characters
|
|
120
|
+
if (!/^[a-zA-Z0-9_-]+$/.test(trimmed)) {
|
|
121
|
+
throw new CredentialValidationError("Account name can only contain letters, numbers, hyphens, and underscores", "INVALID_ACCOUNT_NAME");
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Validate provider ID
|
|
126
|
+
*
|
|
127
|
+
* @param provider - Provider ID to validate
|
|
128
|
+
* @returns True if provider is valid
|
|
129
|
+
*/
|
|
130
|
+
function isValidProvider(provider) {
|
|
131
|
+
const validProviders = [
|
|
132
|
+
"kimi",
|
|
133
|
+
"kimi-coding",
|
|
134
|
+
"anthropic",
|
|
135
|
+
"openai",
|
|
136
|
+
"google",
|
|
137
|
+
"groq",
|
|
138
|
+
"cerebras",
|
|
139
|
+
"xai",
|
|
140
|
+
"openrouter",
|
|
141
|
+
"vercel-ai-gateway",
|
|
142
|
+
"zai",
|
|
143
|
+
"mistral",
|
|
144
|
+
"minimax",
|
|
145
|
+
"minimax-cn",
|
|
146
|
+
"opencode",
|
|
147
|
+
];
|
|
148
|
+
return validProviders.includes(provider);
|
|
149
|
+
}
|
|
150
|
+
// ============================================================================
|
|
151
|
+
// PARSER FUNCTIONS
|
|
152
|
+
// ============================================================================
|
|
153
|
+
/**
|
|
154
|
+
* Parse login/logout command arguments
|
|
155
|
+
*
|
|
156
|
+
* Extracts options from command line arguments
|
|
157
|
+
*
|
|
158
|
+
* @param args - Array of command line arguments
|
|
159
|
+
* @returns LoginOptions object or undefined if not a login/logout command
|
|
160
|
+
*/
|
|
161
|
+
function parseLoginCommand(args) {
|
|
162
|
+
const [command, ...rest] = args;
|
|
163
|
+
// Check if this is a login or logout command
|
|
164
|
+
if (command !== "login" && command !== "logout") {
|
|
165
|
+
return undefined;
|
|
166
|
+
}
|
|
167
|
+
const options = {};
|
|
168
|
+
const isLogout = command === "logout";
|
|
169
|
+
// Parse command options
|
|
170
|
+
for (let i = 0; i < rest.length; i++) {
|
|
171
|
+
const arg = rest[i];
|
|
172
|
+
if (arg === "--provider" && i + 1 < rest.length) {
|
|
173
|
+
options.provider = rest[++i];
|
|
174
|
+
}
|
|
175
|
+
else if (arg === "--account" && i + 1 < rest.length) {
|
|
176
|
+
options.account = rest[++i];
|
|
177
|
+
}
|
|
178
|
+
else if (arg === "--list") {
|
|
179
|
+
options.list = true;
|
|
180
|
+
}
|
|
181
|
+
else if (arg === "--all" && isLogout) {
|
|
182
|
+
options.all = true;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
return options;
|
|
186
|
+
}
|
|
187
|
+
// ============================================================================
|
|
188
|
+
// MAIN HANDLER FUNCTIONS
|
|
189
|
+
// ============================================================================
|
|
190
|
+
/**
|
|
191
|
+
* Handle login/logout commands
|
|
192
|
+
*
|
|
193
|
+
* Entry point for the login/logout command flow:
|
|
194
|
+
* 1. Parse command options
|
|
195
|
+
* 2. Initialize auth storage
|
|
196
|
+
* 3. Route to appropriate handler (list, logout, login)
|
|
197
|
+
*
|
|
198
|
+
* @param args - Command line arguments
|
|
199
|
+
* @returns Promise resolving to true if command was handled
|
|
200
|
+
*
|
|
201
|
+
* @throws {LoginError} If command fails
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* ```typescript
|
|
205
|
+
* // Handle login command
|
|
206
|
+
* await handleLoginCommand(["login", "--provider", "openai"]);
|
|
207
|
+
*
|
|
208
|
+
* // Handle logout command
|
|
209
|
+
* await handleLoginCommand(["logout", "--provider", "openai"]);
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
212
|
+
export async function handleLoginCommand(args) {
|
|
213
|
+
const options = parseLoginCommand(args);
|
|
214
|
+
// Return false if not a login/logout command
|
|
215
|
+
if (!options) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
// Initialize auth storage with agent directory
|
|
219
|
+
const agentDir = getAgentDir();
|
|
220
|
+
const authStorage = new AuthStorage(agentDir);
|
|
221
|
+
// Handle --list flag: show saved accounts
|
|
222
|
+
if (options.list) {
|
|
223
|
+
await listAccounts(authStorage);
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
// If provider not specified, show provider selection
|
|
227
|
+
if (!options.provider) {
|
|
228
|
+
await showProviderSelection(authStorage);
|
|
229
|
+
return true;
|
|
230
|
+
}
|
|
231
|
+
// Validate provider
|
|
232
|
+
if (!isValidProvider(options.provider)) {
|
|
233
|
+
throw new LoginError(`Unknown provider: ${options.provider}`, "UNKNOWN_PROVIDER", "Run with --list to see available providers");
|
|
234
|
+
}
|
|
235
|
+
// Handle logout command
|
|
236
|
+
if (args[0] === "logout") {
|
|
237
|
+
await logoutFromProvider(authStorage, options.provider, options.account, options.all);
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
// Login to specific provider
|
|
241
|
+
await loginToProvider(authStorage, options.provider, options.account);
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
// ============================================================================
|
|
245
|
+
// LIST ACCOUNTS
|
|
246
|
+
// ============================================================================
|
|
247
|
+
/**
|
|
248
|
+
* List all saved accounts across all providers
|
|
249
|
+
*
|
|
250
|
+
* Displays:
|
|
251
|
+
* - Provider name and account count
|
|
252
|
+
* - Each account with name and type
|
|
253
|
+
* - Default account indicator
|
|
254
|
+
* - Credential status (valid/expired)
|
|
255
|
+
*
|
|
256
|
+
* @param authStorage - Auth storage instance
|
|
257
|
+
*/
|
|
258
|
+
async function listAccounts(authStorage) {
|
|
259
|
+
console.log(chalk.bold("\n🔐 Saved Accounts:\n"));
|
|
260
|
+
const providers = authStorage.list();
|
|
261
|
+
if (providers.length === 0) {
|
|
262
|
+
console.log(chalk.dim("No saved accounts. Use 'indusagi login --provider <provider>' to add accounts.\n"));
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
// Display each provider and its accounts
|
|
266
|
+
for (const provider of providers) {
|
|
267
|
+
const accounts = authStorage.getAccounts(provider);
|
|
268
|
+
const defaultAccount = authStorage.getDefaultAccount(provider);
|
|
269
|
+
console.log(chalk.cyan(`${provider} (${accounts.length} account${accounts.length !== 1 ? "s" : ""}):`));
|
|
270
|
+
for (const { accountId, credential } of accounts) {
|
|
271
|
+
const isDefault = accountId === defaultAccount;
|
|
272
|
+
const defaultMarker = isDefault ? chalk.green(" [default]") : "";
|
|
273
|
+
const type = credential.type === "oauth" ? "OAuth" : "API key";
|
|
274
|
+
const name = credential.accountName || accountId;
|
|
275
|
+
let status = "✓";
|
|
276
|
+
if (credential.type === "oauth") {
|
|
277
|
+
// Check if OAuth token is expired
|
|
278
|
+
const expired = Date.now() >= credential.expires;
|
|
279
|
+
status = expired ? chalk.yellow("⚠ expired") : chalk.green("✓");
|
|
280
|
+
}
|
|
281
|
+
console.log(` ${status} ${name}${defaultMarker} (${type})`);
|
|
282
|
+
}
|
|
283
|
+
console.log();
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// ============================================================================
|
|
287
|
+
// PROVIDER SELECTION
|
|
288
|
+
// ============================================================================
|
|
289
|
+
/**
|
|
290
|
+
* Show interactive provider selection and help
|
|
291
|
+
*
|
|
292
|
+
* Displays:
|
|
293
|
+
* - List of OAuth providers with account counts
|
|
294
|
+
* - List of API key providers with account counts
|
|
295
|
+
* - Usage examples
|
|
296
|
+
*
|
|
297
|
+
* @param authStorage - Auth storage instance
|
|
298
|
+
*/
|
|
299
|
+
async function showProviderSelection(authStorage) {
|
|
300
|
+
// Get OAuth providers from indusagi/ai
|
|
301
|
+
const oauthProviders = getOAuthProviders().map((p) => ({
|
|
302
|
+
id: p.id,
|
|
303
|
+
name: p.name,
|
|
304
|
+
auth: "OAuth",
|
|
305
|
+
}));
|
|
306
|
+
// Define API key providers
|
|
307
|
+
const apiKeyProviders = [
|
|
308
|
+
{ id: "kimi", name: "Kimi (Moonshot AI)", auth: "API key" },
|
|
309
|
+
{ id: "kimi-coding", name: "Kimi Code (Moonshot - Subscription)", auth: "API key" },
|
|
310
|
+
{ id: "anthropic", name: "Anthropic (Claude)", auth: "API key" },
|
|
311
|
+
{ id: "openai", name: "OpenAI", auth: "API key" },
|
|
312
|
+
{ id: "google", name: "Google (Gemini)", auth: "API key" },
|
|
313
|
+
{ id: "groq", name: "Groq", auth: "API key" },
|
|
314
|
+
{ id: "cerebras", name: "Cerebras", auth: "API key" },
|
|
315
|
+
{ id: "xai", name: "xAI (Grok)", auth: "API key" },
|
|
316
|
+
{ id: "openrouter", name: "OpenRouter", auth: "API key" },
|
|
317
|
+
{ id: "vercel-ai-gateway", name: "Vercel AI Gateway", auth: "API key" },
|
|
318
|
+
{ id: "zai", name: "Z.AI (GLM)", auth: "API key" },
|
|
319
|
+
{ id: "mistral", name: "Mistral", auth: "API key" },
|
|
320
|
+
{ id: "minimax", name: "MiniMax", auth: "API key" },
|
|
321
|
+
{ id: "minimax-cn", name: "MiniMax (China)", auth: "API key" },
|
|
322
|
+
{ id: "opencode", name: "OpenCode Zen", auth: "API key" },
|
|
323
|
+
];
|
|
324
|
+
console.log(chalk.bold("\n🔐 Available Providers for Authentication\n"));
|
|
325
|
+
// Display OAuth providers
|
|
326
|
+
console.log(chalk.dim("OAuth Providers:"));
|
|
327
|
+
oauthProviders.forEach((p, idx) => {
|
|
328
|
+
const accountCount = authStorage.getAccounts(p.id).length;
|
|
329
|
+
const accountInfo = accountCount > 0 ? chalk.green(` (${accountCount} saved)`) : "";
|
|
330
|
+
console.log(` ${idx + 1}. ${p.name} ${chalk.dim(`(${p.auth})`)}${accountInfo}`);
|
|
331
|
+
});
|
|
332
|
+
// Display API key providers
|
|
333
|
+
console.log(chalk.dim("\nAPI Key Providers:"));
|
|
334
|
+
apiKeyProviders.forEach((p, idx) => {
|
|
335
|
+
const accountCount = authStorage.getAccounts(p.id).length;
|
|
336
|
+
const accountInfo = accountCount > 0 ? chalk.green(` (${accountCount} saved)`) : "";
|
|
337
|
+
console.log(` ${oauthProviders.length + idx + 1}. ${p.name} ${chalk.dim(`(${p.auth})`)}${accountInfo}`);
|
|
338
|
+
});
|
|
339
|
+
console.log("\n" + chalk.dim("Run: indusagi login --provider <provider-id> [--account <name>]"));
|
|
340
|
+
console.log(chalk.dim("Example: indusagi login --provider minimax --account production\n"));
|
|
341
|
+
// Show examples
|
|
342
|
+
console.log(chalk.bold("Examples:"));
|
|
343
|
+
console.log(` ${chalk.cyan("indusagi login --provider anthropic --account personal")} ${chalk.dim("# Login to Claude (personal)")}`);
|
|
344
|
+
console.log(` ${chalk.cyan("indusagi login --provider anthropic --account work")} ${chalk.dim("# Login to Claude (work)")}`);
|
|
345
|
+
console.log(` ${chalk.cyan("indusagi login --provider minimax --account prod")} ${chalk.dim("# Add MiniMax API key (prod)")}`);
|
|
346
|
+
console.log(` ${chalk.cyan("indusagi login --provider minimax --account dev")} ${chalk.dim("# Add MiniMax API key (dev)")}`);
|
|
347
|
+
console.log(` ${chalk.cyan("indusagi login --list")} ${chalk.dim("# List all saved accounts")}`);
|
|
348
|
+
console.log(` ${chalk.cyan("indusagi logout --provider minimax --account dev")} ${chalk.dim("# Logout specific account")}\n`);
|
|
349
|
+
}
|
|
350
|
+
// ============================================================================
|
|
351
|
+
// LOGIN FLOW
|
|
352
|
+
// ============================================================================
|
|
353
|
+
/**
|
|
354
|
+
* Handle login to a specific provider
|
|
355
|
+
*
|
|
356
|
+
* Flow:
|
|
357
|
+
* 1. Check if provider supports OAuth
|
|
358
|
+
* 2. If accounts exist, ask to use existing or add new
|
|
359
|
+
* 3. For OAuth: start OAuth flow with browser
|
|
360
|
+
* 4. For API key: prompt for key and validate
|
|
361
|
+
* 5. Save credentials securely
|
|
362
|
+
* 6. Set as default if first account
|
|
363
|
+
*
|
|
364
|
+
* @param authStorage - Auth storage instance
|
|
365
|
+
* @param provider - Provider ID
|
|
366
|
+
* @param accountId - Optional account name (defaults to "default")
|
|
367
|
+
*
|
|
368
|
+
* @throws {LoginError} If login fails
|
|
369
|
+
*/
|
|
370
|
+
async function loginToProvider(authStorage, provider, accountId) {
|
|
371
|
+
// Check if this is an OAuth provider
|
|
372
|
+
const oauthProviders = getOAuthProviders();
|
|
373
|
+
const oauthProvider = oauthProviders.find((p) => p.id === provider);
|
|
374
|
+
// Generate or validate account name
|
|
375
|
+
let targetAccountId = accountId || "default";
|
|
376
|
+
const existingAccounts = authStorage.getAccounts(provider);
|
|
377
|
+
// If no account specified and accounts exist, ask user what to do
|
|
378
|
+
if (!accountId && existingAccounts.length > 0) {
|
|
379
|
+
console.log(chalk.yellow(`\n⚠️ Provider '${provider}' already has ${existingAccounts.length} saved account(s):`));
|
|
380
|
+
for (const { accountId: id, credential } of existingAccounts) {
|
|
381
|
+
const name = credential.accountName || id;
|
|
382
|
+
const isDefault = id === authStorage.getDefaultAccount(provider);
|
|
383
|
+
console.log(` - ${name}${isDefault ? " [default]" : ""}`);
|
|
384
|
+
}
|
|
385
|
+
const choice = await promptChoice("What would you like to do?", ["Use existing account", "Add new account"]);
|
|
386
|
+
if (choice === "Use existing account") {
|
|
387
|
+
// Select existing account
|
|
388
|
+
const selected = await promptChoice("Select account:", existingAccounts.map((a) => a.credential.accountName || a.accountId));
|
|
389
|
+
const selectedAccount = existingAccounts.find((a) => (a.credential.accountName || a.accountId) === selected);
|
|
390
|
+
if (selectedAccount) {
|
|
391
|
+
authStorage.setDefaultAccount(provider, selectedAccount.accountId);
|
|
392
|
+
console.log(chalk.green.bold(`\n✅ Switched to account: ${selected}\n`));
|
|
393
|
+
}
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
// User wants to add new account - prompt for name
|
|
397
|
+
const newName = await promptInput("Enter new account name (e.g., 'work', 'personal'):");
|
|
398
|
+
if (!newName || newName.trim() === "") {
|
|
399
|
+
throw new LoginError("Account name is required", "ACCOUNT_NAME_REQUIRED", "Provide a descriptive account name");
|
|
400
|
+
}
|
|
401
|
+
// Validate account name
|
|
402
|
+
try {
|
|
403
|
+
validateAccountName(newName.trim());
|
|
404
|
+
}
|
|
405
|
+
catch (error) {
|
|
406
|
+
if (error instanceof CredentialValidationError) {
|
|
407
|
+
throw new LoginError(error.message, error.code, "Use letters, numbers, hyphens, and underscores only");
|
|
408
|
+
}
|
|
409
|
+
throw error;
|
|
410
|
+
}
|
|
411
|
+
// Check if name already exists
|
|
412
|
+
const nameExists = existingAccounts.some((a) => (a.credential.accountName || a.accountId) === newName.trim());
|
|
413
|
+
if (nameExists) {
|
|
414
|
+
throw new LoginError(`Account '${newName}' already exists for ${provider}`, "ACCOUNT_EXISTS", "Choose a different account name");
|
|
415
|
+
}
|
|
416
|
+
accountId = newName.trim();
|
|
417
|
+
}
|
|
418
|
+
// Ensure accountId is set (default to targetAccountId if not explicitly set)
|
|
419
|
+
const finalAccountId = accountId || targetAccountId;
|
|
420
|
+
console.log(chalk.bold(`\n🔐 Logging in to ${provider}${finalAccountId ? ` [${finalAccountId}]` : ""}...\n`));
|
|
421
|
+
// Handle OAuth login
|
|
422
|
+
if (oauthProvider) {
|
|
423
|
+
await handleOAuthLogin(authStorage, provider, oauthProvider.name, targetAccountId, finalAccountId);
|
|
424
|
+
return;
|
|
425
|
+
}
|
|
426
|
+
// Handle API key login
|
|
427
|
+
await handleApiKeyLogin(authStorage, provider, targetAccountId, finalAccountId);
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Handle OAuth login flow
|
|
431
|
+
*
|
|
432
|
+
* @param authStorage - Auth storage instance
|
|
433
|
+
* @param provider - Provider ID
|
|
434
|
+
* @param providerName - Human-readable provider name
|
|
435
|
+
* @param targetAccountId - Account ID to use
|
|
436
|
+
* @param displayAccountId - Account name for display
|
|
437
|
+
*/
|
|
438
|
+
async function handleOAuthLogin(authStorage, provider, providerName, targetAccountId, displayAccountId) {
|
|
439
|
+
console.log(chalk.dim(`Starting OAuth flow for ${providerName}...`));
|
|
440
|
+
console.log(chalk.dim("A browser window should open. Complete login to finish.\n"));
|
|
441
|
+
try {
|
|
442
|
+
// Execute OAuth login
|
|
443
|
+
await authStorage.login(provider, {
|
|
444
|
+
// Called when auth URL is available
|
|
445
|
+
onAuth: (info) => {
|
|
446
|
+
console.log(chalk.dim(`Opening: ${info.url}`));
|
|
447
|
+
if (info.instructions) {
|
|
448
|
+
console.log(chalk.dim(info.instructions));
|
|
449
|
+
}
|
|
450
|
+
},
|
|
451
|
+
// Called when user input is needed during OAuth
|
|
452
|
+
onPrompt: async (prompt) => {
|
|
453
|
+
return promptInput(prompt.message);
|
|
454
|
+
},
|
|
455
|
+
// Called for progress updates
|
|
456
|
+
onProgress: (msg) => {
|
|
457
|
+
console.log(chalk.dim(msg));
|
|
458
|
+
},
|
|
459
|
+
}, targetAccountId, displayAccountId);
|
|
460
|
+
console.log(chalk.green.bold(`\n✅ Login successful! Account: ${displayAccountId || "default"}\n`));
|
|
461
|
+
console.log(chalk.dim(`Use: indusagi --provider ${provider} --account ${displayAccountId || "default"} [options]\n`));
|
|
462
|
+
}
|
|
463
|
+
catch (error) {
|
|
464
|
+
throw new LoginError(`Login failed: ${error instanceof Error ? error.message : error}`, "OAUTH_LOGIN_FAILED", "Try again or check your internet connection");
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
/**
|
|
468
|
+
* Handle API key login flow
|
|
469
|
+
*
|
|
470
|
+
* @param authStorage - Auth storage instance
|
|
471
|
+
* @param provider - Provider ID
|
|
472
|
+
* @param targetAccountId - Account ID to use
|
|
473
|
+
* @param displayAccountId - Account name for display
|
|
474
|
+
*/
|
|
475
|
+
async function handleApiKeyLogin(authStorage, provider, targetAccountId, displayAccountId) {
|
|
476
|
+
// Check for existing environment variable
|
|
477
|
+
const envKey = getEnvApiKey(provider);
|
|
478
|
+
// Get provider info for help message
|
|
479
|
+
const providerInfo = getProviderInfo(provider);
|
|
480
|
+
if (!providerInfo) {
|
|
481
|
+
throw new LoginError(`Unknown provider: ${provider}`, "UNKNOWN_PROVIDER");
|
|
482
|
+
}
|
|
483
|
+
// Show help message with API key URL
|
|
484
|
+
if (providerInfo.helpUrl) {
|
|
485
|
+
prompter.note(`Get your ${providerInfo.name} API key at:\n${providerInfo.helpUrl}`, providerInfo.name);
|
|
486
|
+
}
|
|
487
|
+
// Check for existing env variable
|
|
488
|
+
if (envKey) {
|
|
489
|
+
const useExisting = await promptChoice(`Use existing ${providerInfo.envVar} (from environment)?`, ["Yes", "No, enter a new key"]);
|
|
490
|
+
if (useExisting === "Yes") {
|
|
491
|
+
// Validate environment variable API key
|
|
492
|
+
try {
|
|
493
|
+
validateApiKey(envKey, provider);
|
|
494
|
+
}
|
|
495
|
+
catch (error) {
|
|
496
|
+
if (error instanceof CredentialValidationError) {
|
|
497
|
+
throw new LoginError(error.message, error.code, error.suggestion);
|
|
498
|
+
}
|
|
499
|
+
throw error;
|
|
500
|
+
}
|
|
501
|
+
// Save using environment variable
|
|
502
|
+
authStorage.set(provider, targetAccountId, {
|
|
503
|
+
type: "api_key",
|
|
504
|
+
key: envKey,
|
|
505
|
+
accountId: targetAccountId,
|
|
506
|
+
accountName: displayAccountId || "Default",
|
|
507
|
+
});
|
|
508
|
+
console.log(chalk.green.bold(`\n✅ Login successful! Account: ${displayAccountId || "default"}\n`));
|
|
509
|
+
console.log(chalk.dim(`Using ${providerInfo.envVar} from environment`));
|
|
510
|
+
console.log(chalk.dim(`Use: indusagi --provider ${provider} --account ${displayAccountId || "default"} [options]\n`));
|
|
511
|
+
return;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
// Prompt for API key
|
|
515
|
+
const apiKey = await promptInput(`Enter ${providerInfo.name} API key:`);
|
|
516
|
+
if (!apiKey || apiKey.trim() === "") {
|
|
517
|
+
throw new LoginError("API key is required", "API_KEY_REQUIRED", "Provide your API key to continue");
|
|
518
|
+
}
|
|
519
|
+
// Validate API key
|
|
520
|
+
try {
|
|
521
|
+
validateApiKey(apiKey.trim(), provider);
|
|
522
|
+
}
|
|
523
|
+
catch (error) {
|
|
524
|
+
if (error instanceof CredentialValidationError) {
|
|
525
|
+
throw new LoginError(error.message, error.code, error.suggestion);
|
|
526
|
+
}
|
|
527
|
+
throw error;
|
|
528
|
+
}
|
|
529
|
+
// Save API key securely
|
|
530
|
+
authStorage.set(provider, targetAccountId, {
|
|
531
|
+
type: "api_key",
|
|
532
|
+
key: apiKey.trim(),
|
|
533
|
+
accountId: targetAccountId,
|
|
534
|
+
accountName: displayAccountId || "Default",
|
|
535
|
+
});
|
|
536
|
+
console.log(chalk.green.bold(`\n✅ Login successful! Account: ${displayAccountId || "default"}\n`));
|
|
537
|
+
console.log(chalk.dim(`API key saved for ${provider}/${displayAccountId || "default"}`));
|
|
538
|
+
console.log(chalk.dim(`Use: indusagi --provider ${provider} --account ${displayAccountId || "default"} [options]\n`));
|
|
539
|
+
}
|
|
540
|
+
// ============================================================================
|
|
541
|
+
// LOGOUT FLOW
|
|
542
|
+
// ============================================================================
|
|
543
|
+
/**
|
|
544
|
+
* Handle logout from provider
|
|
545
|
+
*
|
|
546
|
+
* @param authStorage - Auth storage instance
|
|
547
|
+
* @param provider - Provider ID
|
|
548
|
+
* @param accountId - Optional account ID to logout
|
|
549
|
+
* @param all - If true, logout all accounts for provider
|
|
550
|
+
*/
|
|
551
|
+
async function logoutFromProvider(authStorage, provider, accountId, all) {
|
|
552
|
+
// Logout all accounts if --all flag is set
|
|
553
|
+
if (all) {
|
|
554
|
+
authStorage.logout(provider);
|
|
555
|
+
console.log(chalk.green.bold(`\n✅ Logged out all accounts for: ${provider}\n`));
|
|
556
|
+
return;
|
|
557
|
+
}
|
|
558
|
+
const accounts = authStorage.getAccounts(provider);
|
|
559
|
+
// Check if any accounts exist
|
|
560
|
+
if (accounts.length === 0) {
|
|
561
|
+
console.log(chalk.yellow(`\n⚠️ No accounts found for: ${provider}\n`));
|
|
562
|
+
return;
|
|
563
|
+
}
|
|
564
|
+
// If specific account provided, logout it
|
|
565
|
+
if (accountId) {
|
|
566
|
+
authStorage.logout(provider, accountId);
|
|
567
|
+
console.log(chalk.green.bold(`\n✅ Logged out: ${provider}/${accountId}\n`));
|
|
568
|
+
return;
|
|
569
|
+
}
|
|
570
|
+
// If multiple accounts exist, ask which one to logout
|
|
571
|
+
if (accounts.length > 1) {
|
|
572
|
+
const selected = await promptChoice("Select account to logout:", [...accounts.map((a) => a.credential.accountName || a.accountId), "All accounts"]);
|
|
573
|
+
if (selected === "All accounts") {
|
|
574
|
+
authStorage.logout(provider);
|
|
575
|
+
console.log(chalk.green.bold(`\n✅ Logged out all accounts for: ${provider}\n`));
|
|
576
|
+
}
|
|
577
|
+
else {
|
|
578
|
+
const selectedAccount = accounts.find((a) => (a.credential.accountName || a.accountId) === selected);
|
|
579
|
+
if (selectedAccount) {
|
|
580
|
+
authStorage.logout(provider, selectedAccount.accountId);
|
|
581
|
+
console.log(chalk.green.bold(`\n✅ Logged out: ${provider}/${selected}\n`));
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
return;
|
|
585
|
+
}
|
|
586
|
+
// Single account - logout it
|
|
587
|
+
const singleAccount = accounts[0];
|
|
588
|
+
authStorage.logout(provider, singleAccount.accountId);
|
|
589
|
+
console.log(chalk.green.bold(`\n✅ Logged out: ${provider}/${singleAccount.credential.accountName || singleAccount.accountId}\n`));
|
|
590
|
+
}
|
|
591
|
+
// ============================================================================
|
|
592
|
+
// PROVIDER INFO
|
|
593
|
+
// ============================================================================
|
|
594
|
+
/**
|
|
595
|
+
* Get provider information for help messages
|
|
596
|
+
*
|
|
597
|
+
* @param provider - Provider ID
|
|
598
|
+
* @returns Provider info or undefined if provider not found
|
|
599
|
+
*/
|
|
600
|
+
function getProviderInfo(provider) {
|
|
601
|
+
const providers = {
|
|
602
|
+
kimi: {
|
|
603
|
+
name: "Kimi (Moonshot AI)",
|
|
604
|
+
envVar: "MOONSHOT_API_KEY",
|
|
605
|
+
helpUrl: "https://www.moonshot.cn/",
|
|
606
|
+
},
|
|
607
|
+
"kimi-coding": {
|
|
608
|
+
name: "Kimi Code (Moonshot - Subscription)",
|
|
609
|
+
envVar: "KIMI_API_KEY",
|
|
610
|
+
helpUrl: "https://www.kimi.com/code/en",
|
|
611
|
+
},
|
|
612
|
+
moonshot: {
|
|
613
|
+
name: "Moonshot AI (Kimi)",
|
|
614
|
+
envVar: "MOONSHOT_API_KEY",
|
|
615
|
+
helpUrl: "https://www.moonshot.cn/",
|
|
616
|
+
},
|
|
617
|
+
anthropic: {
|
|
618
|
+
name: "Anthropic (Claude)",
|
|
619
|
+
envVar: "ANTHROPIC_API_KEY",
|
|
620
|
+
helpUrl: "https://console.anthropic.com/",
|
|
621
|
+
},
|
|
622
|
+
openai: {
|
|
623
|
+
name: "OpenAI",
|
|
624
|
+
envVar: "OPENAI_API_KEY",
|
|
625
|
+
helpUrl: "https://platform.openai.com/api-keys",
|
|
626
|
+
},
|
|
627
|
+
google: {
|
|
628
|
+
name: "Google (Gemini)",
|
|
629
|
+
envVar: "GEMINI_API_KEY",
|
|
630
|
+
helpUrl: "https://aistudio.google.com/app/apikey",
|
|
631
|
+
},
|
|
632
|
+
groq: {
|
|
633
|
+
name: "Groq",
|
|
634
|
+
envVar: "GROQ_API_KEY",
|
|
635
|
+
helpUrl: "https://console.groq.com/keys",
|
|
636
|
+
},
|
|
637
|
+
cerebras: {
|
|
638
|
+
name: "Cerebras",
|
|
639
|
+
envVar: "CEREBRAS_API_KEY",
|
|
640
|
+
helpUrl: "https://cloud.cerebras.ai/",
|
|
641
|
+
},
|
|
642
|
+
xai: {
|
|
643
|
+
name: "xAI (Grok)",
|
|
644
|
+
envVar: "XAI_API_KEY",
|
|
645
|
+
helpUrl: "https://x.ai/api",
|
|
646
|
+
},
|
|
647
|
+
openrouter: {
|
|
648
|
+
name: "OpenRouter",
|
|
649
|
+
envVar: "OPENROUTER_API_KEY",
|
|
650
|
+
helpUrl: "https://openrouter.ai/keys",
|
|
651
|
+
},
|
|
652
|
+
"vercel-ai-gateway": {
|
|
653
|
+
name: "Vercel AI Gateway",
|
|
654
|
+
envVar: "AI_GATEWAY_API_KEY",
|
|
655
|
+
helpUrl: "https://vercel.com/docs/ai-gateway",
|
|
656
|
+
},
|
|
657
|
+
zai: {
|
|
658
|
+
name: "Z.AI (GLM)",
|
|
659
|
+
envVar: "ZAI_API_KEY",
|
|
660
|
+
helpUrl: "https://api.z.ai/",
|
|
661
|
+
},
|
|
662
|
+
mistral: {
|
|
663
|
+
name: "Mistral",
|
|
664
|
+
envVar: "MISTRAL_API_KEY",
|
|
665
|
+
helpUrl: "https://console.mistral.ai/",
|
|
666
|
+
},
|
|
667
|
+
minimax: {
|
|
668
|
+
name: "MiniMax",
|
|
669
|
+
envVar: "MINIMAX_API_KEY",
|
|
670
|
+
helpUrl: "https://www.minimaxi.com/",
|
|
671
|
+
},
|
|
672
|
+
"minimax-cn": {
|
|
673
|
+
name: "MiniMax (China)",
|
|
674
|
+
envVar: "MINIMAX_CN_API_KEY",
|
|
675
|
+
helpUrl: "https://www.minimaxi.com/",
|
|
676
|
+
},
|
|
677
|
+
opencode: {
|
|
678
|
+
name: "OpenCode Zen",
|
|
679
|
+
envVar: "OPENCODE_API_KEY",
|
|
680
|
+
helpUrl: "https://opencode.ai/",
|
|
681
|
+
},
|
|
682
|
+
};
|
|
683
|
+
return providers[provider];
|
|
684
|
+
}
|
|
685
|
+
// ============================================================================
|
|
686
|
+
// PROMPT UTILITIES
|
|
687
|
+
// ============================================================================
|
|
688
|
+
/**
|
|
689
|
+
* Prompter object with helper methods
|
|
690
|
+
* Provides consistent formatting for user prompts
|
|
691
|
+
*/
|
|
692
|
+
const prompter = {
|
|
693
|
+
/**
|
|
694
|
+
* Display a note/info message to user
|
|
695
|
+
*
|
|
696
|
+
* @param message - The message to display
|
|
697
|
+
* @param title - Title for the note
|
|
698
|
+
*/
|
|
699
|
+
note(message, title) {
|
|
700
|
+
console.log(`\n${chalk.bold(title)}`);
|
|
701
|
+
console.log(chalk.dim(message) + "\n");
|
|
702
|
+
},
|
|
703
|
+
};
|
|
704
|
+
/**
|
|
705
|
+
* Prompt user to select from a list of options
|
|
706
|
+
*
|
|
707
|
+
* @param question - The question to ask
|
|
708
|
+
* @param options - Array of option strings
|
|
709
|
+
* @returns Promise resolving to selected option
|
|
710
|
+
*/
|
|
711
|
+
function promptChoice(question, options) {
|
|
712
|
+
return new Promise((resolve) => {
|
|
713
|
+
const rl = createInterface({
|
|
714
|
+
input: process.stdin,
|
|
715
|
+
output: process.stdout,
|
|
716
|
+
});
|
|
717
|
+
console.log(chalk.bold(`\n? ${question}`));
|
|
718
|
+
options.forEach((opt, idx) => {
|
|
719
|
+
console.log(` ${idx + 1}. ${opt}`);
|
|
720
|
+
});
|
|
721
|
+
rl.question(chalk.bold("Select (1-" + options.length + "): "), (answer) => {
|
|
722
|
+
rl.close();
|
|
723
|
+
const idx = parseInt(answer, 10) - 1;
|
|
724
|
+
resolve(options[idx] || options[0]);
|
|
725
|
+
});
|
|
726
|
+
});
|
|
727
|
+
}
|
|
728
|
+
/**
|
|
729
|
+
* Prompt user for text input
|
|
730
|
+
*
|
|
731
|
+
* @param question - The question to ask
|
|
732
|
+
* @returns Promise resolving to user's input
|
|
733
|
+
*/
|
|
734
|
+
function promptInput(question) {
|
|
735
|
+
return new Promise((resolve) => {
|
|
736
|
+
const rl = createInterface({
|
|
737
|
+
input: process.stdin,
|
|
738
|
+
output: process.stdout,
|
|
739
|
+
});
|
|
740
|
+
rl.question(chalk.bold(`\n? ${question}: `), (answer) => {
|
|
741
|
+
rl.close();
|
|
742
|
+
resolve(answer.trim());
|
|
743
|
+
});
|
|
744
|
+
});
|
|
745
|
+
}
|
|
746
|
+
//# sourceMappingURL=login-handler.js.map
|