indusagi-coding-agent 0.1.38 → 0.1.40
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 +22 -7
- package/{LICENSE.md → LICENSE} +0 -1
- package/README.md +2 -4
- package/dist/cli/args.d.ts +6 -128
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +277 -472
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts +9 -62
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +31 -146
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts +1 -69
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +36 -267
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/list-models.d.ts +0 -60
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +53 -246
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/session-picker.d.ts +1 -72
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +57 -231
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/cli.js +25 -31
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +0 -42
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +62 -97
- package/dist/config.js.map +1 -1
- package/dist/core/agent-session.d.ts +26 -2
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +78 -66
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/auth-storage.d.ts +4 -95
- package/dist/core/auth-storage.d.ts.map +1 -1
- package/dist/core/auth-storage.js +233 -288
- package/dist/core/auth-storage.js.map +1 -1
- package/dist/core/bash-executor.d.ts +0 -323
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +126 -359
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/compaction/branch-summarization.d.ts +3 -3
- package/dist/core/compaction/branch-summarization.js +16 -16
- package/dist/core/compaction/branch-summarization.js.map +1 -1
- package/dist/core/compaction/compaction.d.ts +3 -3
- package/dist/core/compaction/compaction.js +40 -40
- package/dist/core/compaction/compaction.js.map +1 -1
- package/dist/core/compaction/index.d.ts +32 -4
- package/dist/core/compaction/index.d.ts.map +1 -1
- package/dist/core/compaction/index.js +30 -4
- package/dist/core/compaction/index.js.map +1 -1
- package/dist/core/compaction/utils.d.ts +1 -19
- package/dist/core/compaction/utils.d.ts.map +1 -1
- package/dist/core/compaction/utils.js +92 -113
- package/dist/core/compaction/utils.js.map +1 -1
- package/dist/core/discover-packages.d.ts +0 -4
- package/dist/core/discover-packages.d.ts.map +1 -1
- package/dist/core/discover-packages.js +41 -44
- package/dist/core/discover-packages.js.map +1 -1
- package/dist/core/event-bus.d.ts +1 -147
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js +17 -106
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/exec.d.ts +0 -16
- package/dist/core/exec.d.ts.map +1 -1
- package/dist/core/exec.js +18 -27
- package/dist/core/exec.js.map +1 -1
- package/dist/core/export-html/ansi-to-html.ts +262 -0
- package/dist/core/export-html/index.ts +433 -0
- package/dist/core/export-html/template.html +48 -26
- package/dist/core/export-html/tool-renderer.d.ts +0 -21
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +35 -51
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/export-html/tool-renderer.ts +80 -0
- package/dist/core/export-html/vendor/highlight.min.js +401 -370
- package/dist/core/export-html/vendor/marked.min.js +71 -3
- package/dist/core/extensions/index.d.ts +7 -4
- package/dist/core/extensions/index.d.ts.map +1 -1
- package/dist/core/extensions/index.js +17 -3
- package/dist/core/extensions/index.js.map +1 -1
- package/dist/core/extensions/loader.d.ts +0 -6
- package/dist/core/extensions/loader.d.ts.map +1 -1
- package/dist/core/extensions/loader.js +60 -56
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/extensions/runner.d.ts +3 -0
- package/dist/core/extensions/runner.d.ts.map +1 -1
- package/dist/core/extensions/runner.js +48 -80
- package/dist/core/extensions/runner.js.map +1 -1
- package/dist/core/extensions/types.d.ts +50 -23
- package/dist/core/extensions/types.d.ts.map +1 -1
- package/dist/core/footer-data-provider.d.ts +2 -15
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +21 -33
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/hooks/loader.js +2 -2
- package/dist/core/hooks/loader.js.map +1 -1
- package/dist/core/index.d.ts +29 -10
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +29 -10
- package/dist/core/index.js.map +1 -1
- package/dist/core/keybindings.d.ts +2 -179
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +64 -238
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-registry.d.ts +26 -181
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +228 -407
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +0 -139
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +34 -215
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/package-manager.d.ts +25 -57
- package/dist/core/package-manager.d.ts.map +1 -1
- package/dist/core/package-manager.js +326 -964
- package/dist/core/package-manager.js.map +1 -1
- package/dist/core/prompt-templates.d.ts +2 -34
- package/dist/core/prompt-templates.d.ts.map +1 -1
- package/dist/core/prompt-templates.js +122 -170
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/resource-loader.d.ts +19 -12
- package/dist/core/resource-loader.d.ts.map +1 -1
- package/dist/core/resource-loader.js +353 -467
- package/dist/core/resource-loader.js.map +1 -1
- package/dist/core/sdk.d.ts +2 -61
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +184 -252
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +447 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +1176 -1
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +9 -12
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +170 -398
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/skills.d.ts +2 -27
- package/dist/core/skills.d.ts.map +1 -1
- package/dist/core/skills.js +149 -212
- package/dist/core/skills.js.map +1 -1
- package/dist/core/subagents.d.ts +2 -2
- package/dist/core/subagents.d.ts.map +1 -1
- package/dist/core/subagents.js +21 -14
- package/dist/core/subagents.js.map +1 -1
- package/dist/core/system-prompt.d.ts +0 -11
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +168 -139
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/core/timings.d.ts +1 -4
- package/dist/core/timings.d.ts.map +1 -1
- package/dist/core/timings.js +34 -18
- package/dist/core/timings.js.map +1 -1
- package/dist/core/todo-store.d.ts +20 -0
- package/dist/core/todo-store.d.ts.map +1 -0
- package/dist/core/todo-store.js +60 -0
- package/dist/core/todo-store.js.map +1 -0
- package/dist/core/tools/bash.d.ts +2 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +2 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/bg-process.d.ts +1 -6
- package/dist/core/tools/bg-process.d.ts.map +1 -1
- package/dist/core/tools/bg-process.js +4 -18
- package/dist/core/tools/bg-process.js.map +1 -1
- package/dist/core/tools/edit-diff.d.ts +9 -0
- package/dist/core/tools/edit-diff.d.ts.map +1 -0
- package/dist/core/tools/edit-diff.js +2 -0
- package/dist/core/tools/edit-diff.js.map +1 -0
- package/dist/core/tools/edit.d.ts +2 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +2 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/find.d.ts +2 -0
- package/dist/core/tools/find.d.ts.map +1 -0
- package/dist/core/tools/find.js +2 -0
- package/dist/core/tools/find.js.map +1 -0
- package/dist/core/tools/grep.d.ts +2 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +2 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/index.d.ts +8 -2
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/ls.d.ts +2 -0
- package/dist/core/tools/ls.d.ts.map +1 -0
- package/dist/core/tools/ls.js +2 -0
- package/dist/core/tools/ls.js.map +1 -0
- package/dist/core/tools/memory.d.ts +50 -1
- package/dist/core/tools/memory.d.ts.map +1 -1
- package/dist/core/tools/memory.js +11 -7
- package/dist/core/tools/memory.js.map +1 -1
- package/dist/core/tools/path-utils.d.ts +2 -0
- package/dist/core/tools/path-utils.d.ts.map +1 -0
- package/dist/core/tools/path-utils.js +2 -0
- package/dist/core/tools/path-utils.js.map +1 -0
- package/dist/core/tools/read.d.ts +2 -0
- package/dist/core/tools/read.d.ts.map +1 -0
- package/dist/core/tools/read.js +2 -0
- package/dist/core/tools/read.js.map +1 -0
- package/dist/core/tools/registry.d.ts +0 -15
- package/dist/core/tools/registry.d.ts.map +1 -1
- package/dist/core/tools/registry.js +13 -37
- package/dist/core/tools/registry.js.map +1 -1
- package/dist/core/tools/task.d.ts +17 -23
- package/dist/core/tools/task.d.ts.map +1 -1
- package/dist/core/tools/task.js +43 -82
- package/dist/core/tools/task.js.map +1 -1
- package/dist/core/tools/todo.d.ts +17 -20
- package/dist/core/tools/todo.d.ts.map +1 -1
- package/dist/core/tools/todo.js +79 -58
- package/dist/core/tools/todo.js.map +1 -1
- package/dist/core/tools/truncate.d.ts +2 -0
- package/dist/core/tools/truncate.d.ts.map +1 -0
- package/dist/core/tools/truncate.js +2 -0
- package/dist/core/tools/truncate.js.map +1 -0
- package/dist/core/tools/webfetch.d.ts +2 -0
- package/dist/core/tools/webfetch.d.ts.map +1 -0
- package/dist/core/tools/webfetch.js +2 -0
- package/dist/core/tools/webfetch.js.map +1 -0
- package/dist/core/tools/websearch.d.ts +2 -0
- package/dist/core/tools/websearch.d.ts.map +1 -0
- package/dist/core/tools/websearch.js +2 -0
- package/dist/core/tools/websearch.js.map +1 -0
- package/dist/core/tools/write.d.ts +2 -0
- package/dist/core/tools/write.d.ts.map +1 -0
- package/dist/core/tools/write.js +2 -0
- package/dist/core/tools/write.js.map +1 -0
- package/dist/index.d.ts +35 -29
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -41
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +237 -225
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts +0 -25
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +129 -180
- package/dist/migrations.js.map +1 -1
- package/dist/modes/index.d.ts +13 -6
- package/dist/modes/index.d.ts.map +1 -1
- package/dist/modes/index.js +11 -5
- package/dist/modes/index.js.map +1 -1
- package/dist/modes/interactive/components/armin.d.ts +8 -23
- package/dist/modes/interactive/components/armin.d.ts.map +1 -1
- package/dist/modes/interactive/components/armin.js +217 -266
- package/dist/modes/interactive/components/armin.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +2 -168
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +61 -216
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +6 -313
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +86 -403
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.d.ts +1 -3
- package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
- package/dist/modes/interactive/components/bordered-loader.js +59 -29
- package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.d.ts +3 -3
- package/dist/modes/interactive/components/branch-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/branch-summary-message.js +30 -17
- package/dist/modes/interactive/components/branch-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.d.ts +3 -3
- package/dist/modes/interactive/components/compaction-summary-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/compaction-summary-message.js +35 -18
- package/dist/modes/interactive/components/compaction-summary-message.js.map +1 -1
- package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/config-selector.js +60 -68
- package/dist/modes/interactive/components/config-selector.js.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.d.ts +2 -6
- package/dist/modes/interactive/components/countdown-timer.d.ts.map +1 -1
- package/dist/modes/interactive/components/countdown-timer.js +32 -18
- package/dist/modes/interactive/components/countdown-timer.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts +1 -5
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +45 -37
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/custom-message.d.ts +5 -6
- package/dist/modes/interactive/components/custom-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-message.js +43 -53
- package/dist/modes/interactive/components/custom-message.js.map +1 -1
- package/dist/modes/interactive/components/diff.d.ts +0 -3
- package/dist/modes/interactive/components/diff.d.ts.map +1 -1
- package/dist/modes/interactive/components/diff.js +101 -108
- package/dist/modes/interactive/components/diff.js.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.d.ts +7 -2
- package/dist/modes/interactive/components/dynamic-border.d.ts.map +1 -1
- package/dist/modes/interactive/components/dynamic-border.js +24 -4
- package/dist/modes/interactive/components/dynamic-border.js.map +1 -1
- package/dist/modes/interactive/components/extension-editor.d.ts +5 -9
- package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-editor.js +43 -46
- package/dist/modes/interactive/components/extension-editor.js.map +1 -1
- package/dist/modes/interactive/components/extension-input.d.ts +4 -9
- package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-input.js +45 -28
- package/dist/modes/interactive/components/extension-input.js.map +1 -1
- package/dist/modes/interactive/components/extension-selector.d.ts +7 -12
- package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/extension-selector.js +54 -32
- package/dist/modes/interactive/components/extension-selector.js.map +1 -1
- package/dist/modes/interactive/components/footer.d.ts +2 -11
- package/dist/modes/interactive/components/footer.d.ts.map +1 -1
- package/dist/modes/interactive/components/footer.js +135 -183
- package/dist/modes/interactive/components/footer.js.map +1 -1
- package/dist/modes/interactive/components/index.d.ts +79 -30
- package/dist/modes/interactive/components/index.d.ts.map +1 -1
- package/dist/modes/interactive/components/index.js +73 -31
- package/dist/modes/interactive/components/index.js.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.d.ts +0 -18
- package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
- package/dist/modes/interactive/components/keybinding-hints.js +24 -31
- package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
- package/dist/modes/interactive/components/login-dialog.d.ts +11 -24
- package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
- package/dist/modes/interactive/components/login-dialog.js +89 -86
- package/dist/modes/interactive/components/login-dialog.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts +15 -19
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +104 -157
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/oauth-selector.js +5 -5
- package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.d.ts +12 -22
- package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/scoped-models-selector.js +111 -132
- package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.d.ts +3 -3
- package/dist/modes/interactive/components/session-selector-search.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector-search.js +92 -103
- package/dist/modes/interactive/components/session-selector-search.js.map +1 -1
- package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/session-selector.js +28 -39
- package/dist/modes/interactive/components/session-selector.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +111 -203
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts +1 -1
- package/dist/modes/interactive/components/show-images-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/show-images-selector.js +17 -19
- package/dist/modes/interactive/components/show-images-selector.js.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.d.ts +3 -3
- package/dist/modes/interactive/components/skill-invocation-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/skill-invocation-message.js +29 -19
- package/dist/modes/interactive/components/skill-invocation-message.js.map +1 -1
- package/dist/modes/interactive/components/theme-selector.d.ts +2 -2
- package/dist/modes/interactive/components/theme-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/theme-selector.js +20 -25
- package/dist/modes/interactive/components/theme-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts +1 -1
- package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-selector.js +19 -20
- package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +12 -10
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +14 -8
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/tree-selector.js +53 -60
- package/dist/modes/interactive/components/tree-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.d.ts +3 -9
- package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message-selector.js +57 -68
- package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.d.ts +0 -12
- package/dist/modes/interactive/components/visual-truncate.d.ts.map +1 -1
- package/dist/modes/interactive/components/visual-truncate.js +14 -22
- package/dist/modes/interactive/components/visual-truncate.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +6 -0
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +118 -113
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +189 -39
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +8 -1
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +88 -59
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +24 -46
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +75 -409
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js +21 -360
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/observability/core/config.d.ts +28 -0
- package/dist/observability/core/config.d.ts.map +1 -0
- package/dist/observability/core/config.js +150 -0
- package/dist/observability/core/config.js.map +1 -0
- package/dist/observability/core/event-bus.d.ts +15 -0
- package/dist/observability/core/event-bus.d.ts.map +1 -0
- package/dist/observability/core/event-bus.js +37 -0
- package/dist/observability/core/event-bus.js.map +1 -0
- package/dist/observability/core/index.d.ts +12 -0
- package/dist/observability/core/index.d.ts.map +1 -0
- package/dist/observability/core/index.js +14 -0
- package/dist/observability/core/index.js.map +1 -0
- package/dist/observability/core/observability.d.ts +63 -0
- package/dist/observability/core/observability.d.ts.map +1 -0
- package/dist/observability/core/observability.js +127 -0
- package/dist/observability/core/observability.js.map +1 -0
- package/dist/observability/core/span.d.ts +37 -0
- package/dist/observability/core/span.d.ts.map +1 -0
- package/dist/observability/core/span.js +90 -0
- package/dist/observability/core/span.js.map +1 -0
- package/dist/observability/core/tracer.d.ts +22 -0
- package/dist/observability/core/tracer.d.ts.map +1 -0
- package/dist/observability/core/tracer.js +79 -0
- package/dist/observability/core/tracer.js.map +1 -0
- package/dist/observability/core/types.d.ts +155 -0
- package/dist/observability/core/types.d.ts.map +1 -0
- package/dist/observability/core/types.js +38 -0
- package/dist/observability/core/types.js.map +1 -0
- package/dist/observability/exporters/base-exporter.d.ts +16 -0
- package/dist/observability/exporters/base-exporter.d.ts.map +1 -0
- package/dist/observability/exporters/base-exporter.js +26 -0
- package/dist/observability/exporters/base-exporter.js.map +1 -0
- package/dist/observability/exporters/console-exporter.d.ts +22 -0
- package/dist/observability/exporters/console-exporter.d.ts.map +1 -0
- package/dist/observability/exporters/console-exporter.js +80 -0
- package/dist/observability/exporters/console-exporter.js.map +1 -0
- package/dist/observability/exporters/file-exporter.d.ts +31 -0
- package/dist/observability/exporters/file-exporter.d.ts.map +1 -0
- package/dist/observability/exporters/file-exporter.js +120 -0
- package/dist/observability/exporters/file-exporter.js.map +1 -0
- package/dist/observability/exporters/index.d.ts +12 -0
- package/dist/observability/exporters/index.d.ts.map +1 -0
- package/dist/observability/exporters/index.js +11 -0
- package/dist/observability/exporters/index.js.map +1 -0
- package/dist/observability/exporters/langfuse-exporter.d.ts +27 -0
- package/dist/observability/exporters/langfuse-exporter.d.ts.map +1 -0
- package/dist/observability/exporters/langfuse-exporter.js +146 -0
- package/dist/observability/exporters/langfuse-exporter.js.map +1 -0
- package/dist/observability/exporters/sentry-exporter.d.ts +22 -0
- package/dist/observability/exporters/sentry-exporter.d.ts.map +1 -0
- package/dist/observability/exporters/sentry-exporter.js +121 -0
- package/dist/observability/exporters/sentry-exporter.js.map +1 -0
- package/dist/observability/index.d.ts +3 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +3 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/utils/changelog.d.ts +1 -2
- package/dist/utils/changelog.d.ts.map +1 -1
- package/dist/utils/changelog.js +53 -61
- package/dist/utils/changelog.js.map +1 -1
- package/dist/utils/clipboard-image.d.ts.map +1 -1
- package/dist/utils/clipboard-image.js +77 -83
- package/dist/utils/clipboard-image.js.map +1 -1
- package/dist/utils/clipboard.d.ts.map +1 -1
- package/dist/utils/clipboard.js +62 -49
- package/dist/utils/clipboard.js.map +1 -1
- package/dist/utils/image-convert.d.ts +6 -6
- package/dist/utils/image-convert.d.ts.map +1 -1
- package/dist/utils/image-convert.js +29 -23
- package/dist/utils/image-convert.js.map +1 -1
- package/dist/utils/image-resize.d.ts +0 -17
- package/dist/utils/image-resize.d.ts.map +1 -1
- package/dist/utils/image-resize.js +100 -138
- package/dist/utils/image-resize.js.map +1 -1
- package/dist/utils/mime.d.ts +1 -0
- package/dist/utils/mime.d.ts.map +1 -1
- package/dist/utils/mime.js +35 -15
- package/dist/utils/mime.js.map +1 -1
- package/dist/utils/photon.d.ts +4 -15
- package/dist/utils/photon.d.ts.map +1 -1
- package/dist/utils/photon.js +71 -60
- package/dist/utils/photon.js.map +1 -1
- package/dist/utils/shell.d.ts +4 -21
- package/dist/utils/shell.d.ts.map +1 -1
- package/dist/utils/shell.js +101 -124
- package/dist/utils/shell.js.map +1 -1
- package/dist/utils/sleep.d.ts +1 -1
- package/dist/utils/sleep.d.ts.map +1 -1
- package/dist/utils/sleep.js +32 -8
- package/dist/utils/sleep.js.map +1 -1
- package/dist/utils/tools-manager.d.ts +4 -2
- package/dist/utils/tools-manager.d.ts.map +1 -1
- package/dist/utils/tools-manager.js +96 -122
- package/dist/utils/tools-manager.js.map +1 -1
- package/docs/PI_MONO_MIT_REMOVAL_GUIDE.md +2132 -0
- package/docs/SAME_TO_SAME_PARITY_REPORT.md +312 -0
- package/examples/README.md +12 -0
- package/package.json +62 -88
- package/dist/modes/interactive/theme/dark.json +0 -85
- package/dist/modes/interactive/theme/light.json +0 -84
- package/dist/modes/interactive/theme/theme-schema.json +0 -335
- package/docs/FEATURES.md +0 -306
- package/docs/MCP.md +0 -341
- package/docs/MEMORY.md +0 -443
- package/examples/mcp-servers.example.json +0 -50
package/dist/core/keybindings.js
CHANGED
|
@@ -1,153 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Purpose:
|
|
5
|
-
* Manages both application-level actions (agent-specific) and editor actions
|
|
6
|
-
* (from TUI system). Allows full customization via keybindings.json config file.
|
|
7
|
-
*
|
|
8
|
-
* Architecture:
|
|
9
|
-
* - Two-tier system: App actions + Editor actions
|
|
10
|
-
* - Config file: ~/.indusagi/keybindings.json
|
|
11
|
-
* - Defaults: Built-in defaults for all actions
|
|
12
|
-
* - Override: User config overrides defaults
|
|
13
|
-
* - Resolution: Defaults merged with user config
|
|
14
|
-
*
|
|
15
|
-
* Key Features:
|
|
16
|
-
* - Customizable keyboard shortcuts via JSON config
|
|
17
|
-
* - Multiple keys per action support
|
|
18
|
-
* - Case-insensitive key matching
|
|
19
|
-
* - Modifier key support (ctrl, shift, alt, cmd)
|
|
20
|
-
* - Special key names (escape, enter, tab, etc.)
|
|
21
|
-
* - Type-safe action names
|
|
22
|
-
* - Quick creation from config or in-memory
|
|
23
|
-
*
|
|
24
|
-
* Application Actions (Agent-Specific):
|
|
25
|
-
* - "interrupt" - Stop current operation (default: Escape)
|
|
26
|
-
* - "clear" - Clear messages from context (default: Ctrl+C)
|
|
27
|
-
* - "exit" - Quit agent (default: Ctrl+D)
|
|
28
|
-
* - "suspend" - Suspend to shell (default: Ctrl+Z)
|
|
29
|
-
* - "cycleThinkingLevel" - Next thinking level (default: Shift+Tab)
|
|
30
|
-
* - "cycleModelForward" - Next model (default: Ctrl+P)
|
|
31
|
-
* - "cycleModelBackward" - Previous model (default: Shift+Ctrl+P)
|
|
32
|
-
* - "selectModel" - Show model selector (default: Ctrl+L)
|
|
33
|
-
* - "expandTools" - Toggle tool output (default: Ctrl+O)
|
|
34
|
-
* - "toggleThinking" - Show/hide thinking (default: Ctrl+T)
|
|
35
|
-
* - "externalEditor" - Open in external editor (default: Ctrl+G)
|
|
36
|
-
* - "followUp" - Send follow-up message (default: Alt+Enter)
|
|
37
|
-
* - "dequeue" - Remove message from queue (default: Alt+Up)
|
|
38
|
-
* - "pasteImage" - Paste image from clipboard (default: Ctrl+V)
|
|
39
|
-
*
|
|
40
|
-
* Editor Actions (from TUI):
|
|
41
|
-
* - Movement: "moveUp", "moveDown", "moveLeft", "moveRight"
|
|
42
|
-
* - Selection: "selectUp", "selectDown", "selectLeft", "selectRight"
|
|
43
|
-
* - Editing: "delete", "backspace", "insertNewline"
|
|
44
|
-
* - Navigation: "pageUp", "pageDown", "home", "end"
|
|
45
|
-
*
|
|
46
|
-
* Key Format:
|
|
47
|
-
* - Simple: "a", "enter", "escape", "tab"
|
|
48
|
-
* - With modifier: "ctrl+a", "shift+enter", "alt+tab"
|
|
49
|
-
* - Multiple modifiers: "ctrl+shift+a", "cmd+alt+d"
|
|
50
|
-
* - Special keys: "backspace", "delete", "insert", "home", "end"
|
|
51
|
-
* - Function keys: "f1" through "f12"
|
|
52
|
-
*
|
|
53
|
-
* Configuration File Format (keybindings.json):
|
|
54
|
-
* ```json
|
|
55
|
-
* {
|
|
56
|
-
* "interrupt": "escape",
|
|
57
|
-
* "clear": ["ctrl+c", "ctrl+x"],
|
|
58
|
-
* "cycleModelForward": "ctrl+n",
|
|
59
|
-
* "cycleModelBackward": "ctrl+p",
|
|
60
|
-
* "selectModel": "ctrl+m",
|
|
61
|
-
* "exitAgent": "ctrl+q",
|
|
62
|
-
* "moveUp": "up",
|
|
63
|
-
* "moveDown": "down"
|
|
64
|
-
* }
|
|
65
|
-
* ```
|
|
66
|
-
*
|
|
67
|
-
* Multiple Keys Per Action:
|
|
68
|
-
* ```json
|
|
69
|
-
* {
|
|
70
|
-
* "interrupt": ["escape", "ctrl+c"],
|
|
71
|
-
* "exit": ["ctrl+d", "ctrl+q"]
|
|
72
|
-
* }
|
|
73
|
-
* ```
|
|
74
|
-
*
|
|
75
|
-
* Usage Examples:
|
|
76
|
-
* ```typescript
|
|
77
|
-
* // Create from config file
|
|
78
|
-
* const manager = KeybindingsManager.create();
|
|
79
|
-
*
|
|
80
|
-
* // Create in-memory with defaults
|
|
81
|
-
* const manager = KeybindingsManager.inMemory();
|
|
82
|
-
*
|
|
83
|
-
* // Create in-memory with custom config
|
|
84
|
-
* const manager = KeybindingsManager.inMemory({
|
|
85
|
-
* interrupt: "ctrl+c",
|
|
86
|
-
* cycleModelForward: "right"
|
|
87
|
-
* });
|
|
88
|
-
*
|
|
89
|
-
* // Check if input matches an action
|
|
90
|
-
* if (manager.matches(inputData, "interrupt")) {
|
|
91
|
-
* console.log("User pressed interrupt key");
|
|
92
|
-
* }
|
|
93
|
-
*
|
|
94
|
-
* // Get all keys bound to an action
|
|
95
|
-
* const keys = manager.getKeys("cycleModelForward");
|
|
96
|
-
* console.log("Model forward keys:", keys);
|
|
97
|
-
*
|
|
98
|
-
* // Get full effective config (defaults + overrides)
|
|
99
|
-
* const fullConfig = manager.getEffectiveConfig();
|
|
100
|
-
* ```
|
|
101
|
-
*
|
|
102
|
-
* Default Keybindings:
|
|
103
|
-
* - Escape: Interrupt (stop operation)
|
|
104
|
-
* - Ctrl+C: Clear context
|
|
105
|
-
* - Ctrl+D: Exit
|
|
106
|
-
* - Ctrl+Z: Suspend
|
|
107
|
-
* - Shift+Tab: Cycle thinking level
|
|
108
|
-
* - Ctrl+P: Cycle model forward
|
|
109
|
-
* - Shift+Ctrl+P: Cycle model backward
|
|
110
|
-
* - Ctrl+L: Select model
|
|
111
|
-
* - Ctrl+O: Expand tools
|
|
112
|
-
* - Ctrl+T: Toggle thinking
|
|
113
|
-
* - Ctrl+G: External editor
|
|
114
|
-
* - Alt+Enter: Follow-up message
|
|
115
|
-
* - Alt+Up: Dequeue message
|
|
116
|
-
* - Ctrl+V: Paste image
|
|
117
|
-
*
|
|
118
|
-
* Configuration Loading:
|
|
119
|
-
* 1. Check for keybindings.json in agent directory
|
|
120
|
-
* 2. If not found, use empty config
|
|
121
|
-
* 3. Merge with defaults
|
|
122
|
-
* 4. If JSON is invalid, use defaults silently
|
|
123
|
-
*
|
|
124
|
-
* Editor Integration:
|
|
125
|
-
* - Editor keybindings set globally when created
|
|
126
|
-
* - Shared action "expandTools" available to both systems
|
|
127
|
-
* - EditorKeybindingsManager injected via setEditorKeybindings
|
|
128
|
-
*
|
|
129
|
-
* Error Handling:
|
|
130
|
-
* - Missing config file: Uses defaults silently
|
|
131
|
-
* - Invalid JSON: Falls back to defaults
|
|
132
|
-
* - Invalid action names: Ignored with no error
|
|
133
|
-
* - Invalid key syntax: May not match (fails gracefully)
|
|
134
|
-
*
|
|
135
|
-
* Performance:
|
|
136
|
-
* - Key matching is O(n) where n = keys for action (typically 1-3)
|
|
137
|
-
* - Maps built once at creation time
|
|
138
|
-
* - No external I/O after initial load
|
|
139
|
-
*
|
|
140
|
-
* Based on keybindings system from indusagi-tui
|
|
141
|
-
* Original: https://github.com/varunisrani/indusagi-ts/indusagi/tui/src/keybindings.ts
|
|
142
|
-
*/
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
143
3
|
import { DEFAULT_EDITOR_KEYBINDINGS, EditorKeybindingsManager, matchesKey, setEditorKeybindings, } from "indusagi/tui";
|
|
144
|
-
import { existsSync, readFileSync } from "fs";
|
|
145
|
-
import { join } from "path";
|
|
146
4
|
import { getAgentDir } from "../config.js";
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
5
|
+
const APP_ACTION_LIST = [
|
|
6
|
+
"interrupt",
|
|
7
|
+
"clear",
|
|
8
|
+
"exit",
|
|
9
|
+
"suspend",
|
|
10
|
+
"cycleThinkingLevel",
|
|
11
|
+
"cycleModelForward",
|
|
12
|
+
"cycleModelBackward",
|
|
13
|
+
"selectModel",
|
|
14
|
+
"expandTools",
|
|
15
|
+
"toggleThinking",
|
|
16
|
+
"externalEditor",
|
|
17
|
+
"followUp",
|
|
18
|
+
"dequeue",
|
|
19
|
+
"pasteImage",
|
|
20
|
+
];
|
|
21
|
+
const APP_DEFAULTS = {
|
|
151
22
|
interrupt: "escape",
|
|
152
23
|
clear: "ctrl+c",
|
|
153
24
|
exit: "ctrl+d",
|
|
@@ -163,121 +34,76 @@ export const DEFAULT_APP_KEYBINDINGS = {
|
|
|
163
34
|
dequeue: "alt+up",
|
|
164
35
|
pasteImage: "ctrl+v",
|
|
165
36
|
};
|
|
166
|
-
|
|
167
|
-
* All default keybindings (app + editor).
|
|
168
|
-
*/
|
|
37
|
+
export const DEFAULT_APP_KEYBINDINGS = APP_DEFAULTS;
|
|
169
38
|
export const DEFAULT_KEYBINDINGS = {
|
|
170
39
|
...DEFAULT_EDITOR_KEYBINDINGS,
|
|
171
40
|
...DEFAULT_APP_KEYBINDINGS,
|
|
172
41
|
};
|
|
173
|
-
// App actions list for type checking
|
|
174
|
-
const APP_ACTIONS = [
|
|
175
|
-
"interrupt",
|
|
176
|
-
"clear",
|
|
177
|
-
"exit",
|
|
178
|
-
"suspend",
|
|
179
|
-
"cycleThinkingLevel",
|
|
180
|
-
"cycleModelForward",
|
|
181
|
-
"cycleModelBackward",
|
|
182
|
-
"selectModel",
|
|
183
|
-
"expandTools",
|
|
184
|
-
"toggleThinking",
|
|
185
|
-
"externalEditor",
|
|
186
|
-
"followUp",
|
|
187
|
-
"dequeue",
|
|
188
|
-
"pasteImage",
|
|
189
|
-
];
|
|
190
42
|
function isAppAction(action) {
|
|
191
|
-
return
|
|
43
|
+
return APP_ACTION_LIST.includes(action);
|
|
44
|
+
}
|
|
45
|
+
function normalizeKeys(keys) {
|
|
46
|
+
return Array.isArray(keys) ? [...keys] : [keys];
|
|
47
|
+
}
|
|
48
|
+
function loadConfigFile(configPath) {
|
|
49
|
+
if (!existsSync(configPath)) {
|
|
50
|
+
return {};
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
return JSON.parse(readFileSync(configPath, "utf-8"));
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return {};
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function buildAppKeyMap(config) {
|
|
60
|
+
const actionMap = new Map();
|
|
61
|
+
for (const action of APP_ACTION_LIST) {
|
|
62
|
+
actionMap.set(action, normalizeKeys(APP_DEFAULTS[action]));
|
|
63
|
+
}
|
|
64
|
+
for (const [action, keys] of Object.entries(config)) {
|
|
65
|
+
if (keys !== undefined && isAppAction(action)) {
|
|
66
|
+
actionMap.set(action, normalizeKeys(keys));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return actionMap;
|
|
70
|
+
}
|
|
71
|
+
function buildEditorConfig(config) {
|
|
72
|
+
const editorConfig = {};
|
|
73
|
+
for (const [action, keys] of Object.entries(config)) {
|
|
74
|
+
if (!isAppAction(action) || action === "expandTools") {
|
|
75
|
+
editorConfig[action] = keys;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return editorConfig;
|
|
192
79
|
}
|
|
193
|
-
/**
|
|
194
|
-
* Manages all keybindings (app + editor).
|
|
195
|
-
*/
|
|
196
80
|
export class KeybindingsManager {
|
|
197
81
|
constructor(config) {
|
|
198
82
|
this.config = config;
|
|
199
|
-
this.appActionToKeys =
|
|
200
|
-
this.buildMaps();
|
|
83
|
+
this.appActionToKeys = buildAppKeyMap(config);
|
|
201
84
|
}
|
|
202
|
-
/**
|
|
203
|
-
* Create from config file and set up editor keybindings.
|
|
204
|
-
*/
|
|
205
85
|
static create(agentDir = getAgentDir()) {
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
// Set up editor keybindings globally
|
|
210
|
-
// Include both editor actions and expandTools (shared between app and editor)
|
|
211
|
-
const editorConfig = {};
|
|
212
|
-
for (const [action, keys] of Object.entries(config)) {
|
|
213
|
-
if (!isAppAction(action) || action === "expandTools") {
|
|
214
|
-
editorConfig[action] = keys;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
setEditorKeybindings(new EditorKeybindingsManager(editorConfig));
|
|
218
|
-
return manager;
|
|
86
|
+
const config = loadConfigFile(join(agentDir, "keybindings.json"));
|
|
87
|
+
setEditorKeybindings(new EditorKeybindingsManager(buildEditorConfig(config)));
|
|
88
|
+
return new KeybindingsManager(config);
|
|
219
89
|
}
|
|
220
|
-
/**
|
|
221
|
-
* Create in-memory.
|
|
222
|
-
*/
|
|
223
90
|
static inMemory(config = {}) {
|
|
224
91
|
return new KeybindingsManager(config);
|
|
225
92
|
}
|
|
226
|
-
static loadFromFile(path) {
|
|
227
|
-
if (!existsSync(path))
|
|
228
|
-
return {};
|
|
229
|
-
try {
|
|
230
|
-
return JSON.parse(readFileSync(path, "utf-8"));
|
|
231
|
-
}
|
|
232
|
-
catch {
|
|
233
|
-
return {};
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
buildMaps() {
|
|
237
|
-
this.appActionToKeys.clear();
|
|
238
|
-
// Set defaults for app actions
|
|
239
|
-
for (const [action, keys] of Object.entries(DEFAULT_APP_KEYBINDINGS)) {
|
|
240
|
-
const keyArray = Array.isArray(keys) ? keys : [keys];
|
|
241
|
-
this.appActionToKeys.set(action, [...keyArray]);
|
|
242
|
-
}
|
|
243
|
-
// Override with user config (app actions only)
|
|
244
|
-
for (const [action, keys] of Object.entries(this.config)) {
|
|
245
|
-
if (keys === undefined || !isAppAction(action))
|
|
246
|
-
continue;
|
|
247
|
-
const keyArray = Array.isArray(keys) ? keys : [keys];
|
|
248
|
-
this.appActionToKeys.set(action, keyArray);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Check if input matches an app action.
|
|
253
|
-
*/
|
|
254
93
|
matches(data, action) {
|
|
255
|
-
|
|
256
|
-
if (!keys)
|
|
257
|
-
return false;
|
|
258
|
-
for (const key of keys) {
|
|
259
|
-
if (matchesKey(data, key))
|
|
260
|
-
return true;
|
|
261
|
-
}
|
|
262
|
-
return false;
|
|
94
|
+
return (this.appActionToKeys.get(action) ?? []).some((key) => matchesKey(data, key));
|
|
263
95
|
}
|
|
264
|
-
/**
|
|
265
|
-
* Get keys bound to an app action.
|
|
266
|
-
*/
|
|
267
96
|
getKeys(action) {
|
|
268
97
|
return this.appActionToKeys.get(action) ?? [];
|
|
269
98
|
}
|
|
270
|
-
/**
|
|
271
|
-
* Get the full effective config.
|
|
272
|
-
*/
|
|
273
99
|
getEffectiveConfig() {
|
|
274
|
-
const
|
|
100
|
+
const effective = { ...DEFAULT_KEYBINDINGS };
|
|
275
101
|
for (const [action, keys] of Object.entries(this.config)) {
|
|
276
102
|
if (keys !== undefined) {
|
|
277
|
-
|
|
103
|
+
effective[action] = keys;
|
|
278
104
|
}
|
|
279
105
|
}
|
|
280
|
-
return
|
|
106
|
+
return effective;
|
|
281
107
|
}
|
|
282
108
|
}
|
|
283
109
|
//# sourceMappingURL=keybindings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keybindings.js","sourceRoot":"","sources":["../../src/core/keybindings.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"keybindings.js","sourceRoot":"","sources":["../../src/core/keybindings.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,186 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Model Registry - Central management of AI models and provider configuration
|
|
3
|
-
*
|
|
4
|
-
* Purpose:
|
|
5
|
-
* Manages all available AI models (built-in + custom), handles provider configuration,
|
|
6
|
-
* and resolves API keys through multiple sources (env vars, commands, OAuth, auth storage).
|
|
7
|
-
*
|
|
8
|
-
* Architecture:
|
|
9
|
-
* - Loads built-in models from indusagi/ai package
|
|
10
|
-
* - Optionally loads custom models from models.json config file
|
|
11
|
-
* - Supports provider overrides (baseUrl, headers, apiKey)
|
|
12
|
-
* - Integrates with AuthStorage for credential management
|
|
13
|
-
* - Supports dynamic provider registration from extensions
|
|
14
|
-
*
|
|
15
|
-
* Key Features:
|
|
16
|
-
* - API key resolution from environment variables or shell commands
|
|
17
|
-
* - Custom model definitions via models.json with full schema validation
|
|
18
|
-
* - Provider override support (baseUrl, headers without replacing models)
|
|
19
|
-
* - OAuth provider integration for subscription-based services
|
|
20
|
-
* - Error handling with detailed validation messages
|
|
21
|
-
* - Command result caching for performance
|
|
22
|
-
*
|
|
23
|
-
* Configuration Sources (in order of priority):
|
|
24
|
-
* 1. models.json in agent directory (custom models + provider overrides)
|
|
25
|
-
* 2. Built-in models from indusagi/ai
|
|
26
|
-
* 3. OAuth providers via AuthStorage
|
|
27
|
-
* 4. Environment variables for API keys
|
|
28
|
-
*
|
|
29
|
-
* API Key Resolution:
|
|
30
|
-
* - Values starting with "!" are treated as shell commands
|
|
31
|
-
* - Other values checked against environment variables first
|
|
32
|
-
* - Falls back to literal value if env var not found
|
|
33
|
-
* - Commands cached for process lifetime to avoid re-execution
|
|
34
|
-
*
|
|
35
|
-
* Built-in Providers Supported:
|
|
36
|
-
* - OpenAI (gpt-4, gpt-4-turbo, gpt-3.5-turbo, etc.)
|
|
37
|
-
* - Anthropic (claude-3-opus, claude-3-sonnet, claude-3-haiku, etc.)
|
|
38
|
-
* - Google (gemini-pro, gemini-1.5, etc.)
|
|
39
|
-
* - Mistral (mistral-large, mistral-medium, etc.)
|
|
40
|
-
* - OpenRouter (routing to 200+ models)
|
|
41
|
-
* - Custom providers via models.json
|
|
42
|
-
*
|
|
43
|
-
* Example models.json:
|
|
44
|
-
* ```json
|
|
45
|
-
* {
|
|
46
|
-
* "providers": {
|
|
47
|
-
* "custom-local": {
|
|
48
|
-
* "baseUrl": "http://localhost:8000/v1",
|
|
49
|
-
* "apiKey": "CUSTOM_API_KEY",
|
|
50
|
-
* "models": [{
|
|
51
|
-
* "id": "local-model",
|
|
52
|
-
* "name": "Local Model",
|
|
53
|
-
* "api": "openai",
|
|
54
|
-
* "reasoning": false,
|
|
55
|
-
* "input": ["text"],
|
|
56
|
-
* "cost": {"input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0},
|
|
57
|
-
* "contextWindow": 8192,
|
|
58
|
-
* "maxTokens": 4096
|
|
59
|
-
* }]
|
|
60
|
-
* }
|
|
61
|
-
* }
|
|
62
|
-
* }
|
|
63
|
-
* ```
|
|
64
|
-
*
|
|
65
|
-
* Usage:
|
|
66
|
-
* ```typescript
|
|
67
|
-
* const registry = new ModelRegistry(authStorage);
|
|
68
|
-
*
|
|
69
|
-
* // Get all available models
|
|
70
|
-
* const allModels = registry.getAll();
|
|
71
|
-
*
|
|
72
|
-
* // Get only models with configured auth
|
|
73
|
-
* const available = registry.getAvailable();
|
|
74
|
-
*
|
|
75
|
-
* // Find specific model
|
|
76
|
-
* const model = registry.find("openai", "gpt-4");
|
|
77
|
-
*
|
|
78
|
-
* // Get API key for model
|
|
79
|
-
* const apiKey = await registry.getApiKey(model);
|
|
80
|
-
*
|
|
81
|
-
* // Register custom provider from extension
|
|
82
|
-
* registry.registerProvider("my-provider", {
|
|
83
|
-
* baseUrl: "https://api.example.com",
|
|
84
|
-
* apiKey: "EXAMPLE_API_KEY",
|
|
85
|
-
* models: [...]
|
|
86
|
-
* });
|
|
87
|
-
*
|
|
88
|
-
* // Reload models from disk
|
|
89
|
-
* registry.refresh();
|
|
90
|
-
* ```
|
|
91
|
-
*
|
|
92
|
-
* Error Handling:
|
|
93
|
-
* - Invalid models.json schema returns detailed error messages
|
|
94
|
-
* - Validation failures include field name and error description
|
|
95
|
-
* - Built-in models loaded even if custom models fail
|
|
96
|
-
* - Use getError() to check for loading issues
|
|
97
|
-
*
|
|
98
|
-
* Based on model registry from indusagi-agent
|
|
99
|
-
* Original: https://github.com/varunisrani/indusagi-ts/vendor/indusagi-agent/src/model-registry.ts
|
|
100
|
-
*/
|
|
101
1
|
import { type Api, type AssistantMessageEventStream, type Context, type Model, type OAuthProviderInterface, type SimpleStreamOptions } from "indusagi/ai";
|
|
102
2
|
import type { AuthStorage } from "./auth-storage.js";
|
|
103
|
-
/** Clear the config value command cache. Exported for testing. */
|
|
104
3
|
export declare function clearApiKeyCache(): void;
|
|
105
|
-
/**
|
|
106
|
-
* Model registry - loads and manages models, resolves API keys via AuthStorage.
|
|
107
|
-
*/
|
|
108
|
-
export declare class ModelRegistry {
|
|
109
|
-
readonly authStorage: AuthStorage;
|
|
110
|
-
private modelsJsonPath;
|
|
111
|
-
private models;
|
|
112
|
-
private customProviderApiKeys;
|
|
113
|
-
private registeredProviders;
|
|
114
|
-
private loadError;
|
|
115
|
-
constructor(authStorage: AuthStorage, modelsJsonPath?: string | undefined);
|
|
116
|
-
/**
|
|
117
|
-
* Reload models from disk (built-in + custom from models.json).
|
|
118
|
-
*/
|
|
119
|
-
refresh(): void;
|
|
120
|
-
/**
|
|
121
|
-
* Get any error from loading models.json (undefined if no error).
|
|
122
|
-
*/
|
|
123
|
-
getError(): string | undefined;
|
|
124
|
-
private loadModels;
|
|
125
|
-
/** Load built-in models, skipping replaced providers and applying overrides */
|
|
126
|
-
private loadBuiltInModels;
|
|
127
|
-
private loadCustomModels;
|
|
128
|
-
private validateConfig;
|
|
129
|
-
private parseModels;
|
|
130
|
-
/**
|
|
131
|
-
* Get all models (built-in + custom).
|
|
132
|
-
* If models.json had errors, returns only built-in models.
|
|
133
|
-
*/
|
|
134
|
-
getAll(): Model<Api>[];
|
|
135
|
-
/**
|
|
136
|
-
* Get only models that have auth configured.
|
|
137
|
-
* This is a fast check that doesn't refresh OAuth tokens.
|
|
138
|
-
*/
|
|
139
|
-
getAvailable(): Model<Api>[];
|
|
140
|
-
/**
|
|
141
|
-
* Find a model by provider and ID.
|
|
142
|
-
*/
|
|
143
|
-
find(provider: string, modelId: string): Model<Api> | undefined;
|
|
144
|
-
/**
|
|
145
|
-
* Get API key for a model.
|
|
146
|
-
* @param model - The model to get API key for
|
|
147
|
-
* @param accountId - Optional account ID for multi-account providers
|
|
148
|
-
*/
|
|
149
|
-
getApiKey(model: Model<Api>, accountId?: string): Promise<string | undefined>;
|
|
150
|
-
/**
|
|
151
|
-
* Get API key for a provider.
|
|
152
|
-
* @param provider - The provider ID
|
|
153
|
-
* @param accountId - Optional account ID for multi-account providers
|
|
154
|
-
*/
|
|
155
|
-
getApiKeyForProvider(provider: string, accountId?: string): Promise<string | undefined>;
|
|
156
|
-
/**
|
|
157
|
-
* Get all accounts for a provider.
|
|
158
|
-
*/
|
|
159
|
-
getAccounts(provider: string): Array<{
|
|
160
|
-
accountId: string;
|
|
161
|
-
credential: any;
|
|
162
|
-
}>;
|
|
163
|
-
/**
|
|
164
|
-
* Get default account for a provider.
|
|
165
|
-
*/
|
|
166
|
-
getDefaultAccount(provider: string): string | undefined;
|
|
167
|
-
/**
|
|
168
|
-
* Check if a model is using OAuth credentials (subscription).
|
|
169
|
-
*/
|
|
170
|
-
isUsingOAuth(model: Model<Api>): boolean;
|
|
171
|
-
/**
|
|
172
|
-
* Register a provider dynamically (from extensions).
|
|
173
|
-
*
|
|
174
|
-
* If provider has models: replaces all existing models for this provider.
|
|
175
|
-
* If provider has only baseUrl/headers: overrides existing models' URLs.
|
|
176
|
-
* If provider has oauth: registers OAuth provider for /login support.
|
|
177
|
-
*/
|
|
178
|
-
registerProvider(providerName: string, config: ProviderConfigInput): void;
|
|
179
|
-
private applyProviderConfig;
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Input type for registerProvider API.
|
|
183
|
-
*/
|
|
184
4
|
export interface ProviderConfigInput {
|
|
185
5
|
baseUrl?: string;
|
|
186
6
|
apiKey?: string;
|
|
@@ -188,7 +8,6 @@ export interface ProviderConfigInput {
|
|
|
188
8
|
streamSimple?: (model: Model<Api>, context: Context, options?: SimpleStreamOptions) => AssistantMessageEventStream;
|
|
189
9
|
headers?: Record<string, string>;
|
|
190
10
|
authHeader?: boolean;
|
|
191
|
-
/** OAuth provider for /login support */
|
|
192
11
|
oauth?: Omit<OAuthProviderInterface, "id">;
|
|
193
12
|
models?: Array<{
|
|
194
13
|
id: string;
|
|
@@ -208,4 +27,30 @@ export interface ProviderConfigInput {
|
|
|
208
27
|
compat?: Model<Api>["compat"];
|
|
209
28
|
}>;
|
|
210
29
|
}
|
|
30
|
+
export declare class ModelRegistry {
|
|
31
|
+
readonly authStorage: AuthStorage;
|
|
32
|
+
private modelsJsonPath;
|
|
33
|
+
private models;
|
|
34
|
+
private customProviderApiKeys;
|
|
35
|
+
private registeredProviders;
|
|
36
|
+
private loadError;
|
|
37
|
+
constructor(authStorage: AuthStorage, modelsJsonPath?: string | undefined);
|
|
38
|
+
refresh(): void;
|
|
39
|
+
getError(): string | undefined;
|
|
40
|
+
private loadModels;
|
|
41
|
+
private registerExtensionProvider;
|
|
42
|
+
private applyProviderConfig;
|
|
43
|
+
getAll(): Model<Api>[];
|
|
44
|
+
getAvailable(): Model<Api>[];
|
|
45
|
+
find(provider: string, modelId: string): Model<Api> | undefined;
|
|
46
|
+
getApiKey(model: Model<Api>, accountId?: string): Promise<string | undefined>;
|
|
47
|
+
getApiKeyForProvider(provider: string, accountId?: string): Promise<string | undefined>;
|
|
48
|
+
getAccounts(provider: string): Array<{
|
|
49
|
+
accountId: string;
|
|
50
|
+
credential: any;
|
|
51
|
+
}>;
|
|
52
|
+
getDefaultAccount(provider: string): string | undefined;
|
|
53
|
+
isUsingOAuth(model: Model<Api>): boolean;
|
|
54
|
+
registerProvider(providerName: string, config: ProviderConfigInput): void;
|
|
55
|
+
}
|
|
211
56
|
//# sourceMappingURL=model-registry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-registry.d.ts","sourceRoot":"","sources":["../../src/core/model-registry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"model-registry.d.ts","sourceRoot":"","sources":["../../src/core/model-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,GAAG,EACR,KAAK,2BAA2B,EAChC,KAAK,OAAO,EAIZ,KAAK,KAAK,EACV,KAAK,sBAAsB,EAG3B,KAAK,mBAAmB,EACxB,MAAM,aAAa,CAAC;AAOrB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AA8TrD,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,MAAM,WAAW,mBAAmB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,mBAAmB,KAAK,2BAA2B,CAAC;IACnH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;IAC3C,MAAM,CAAC,EAAE,KAAK,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,CAAC,EAAE,GAAG,CAAC;QACV,SAAS,EAAE,OAAO,CAAC;QACnB,KAAK,EAAE,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC;QAC5B,IAAI,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAC;YAAC,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/E,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;KAC9B,CAAC,CAAC;CACH;AAED,qBAAa,aAAa;IAOxB,QAAQ,CAAC,WAAW,EAAE,WAAW;IACjC,OAAO,CAAC,cAAc;IAPvB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,OAAO,CAAC,mBAAmB,CAA0C;IACrE,OAAO,CAAC,SAAS,CAAqB;gBAG5B,WAAW,EAAE,WAAW,EACzB,cAAc,GAAE,MAAM,GAAG,SAA8C;IAShF,OAAO,IAAI,IAAI;IASf,QAAQ,IAAI,MAAM,GAAG,SAAS;IAI9B,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,yBAAyB;IAKjC,OAAO,CAAC,mBAAmB;IAoE3B,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;IAItB,YAAY,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE;IAI5B,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,SAAS;IAIzD,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI7E,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAI7F,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,GAAG,CAAA;KAAE,CAAC;IAI5E,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIvD,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO;IAIxC,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI;CAGzE"}
|