indusagi-coding-agent 0.1.23 → 0.1.25
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 +101 -0
- package/README.md +2 -0
- package/dist/cli/args.d.ts +117 -1
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +221 -52
- package/dist/cli/args.js.map +1 -1
- package/dist/cli/config-selector.d.ts +58 -2
- package/dist/cli/config-selector.d.ts.map +1 -1
- package/dist/cli/config-selector.js +130 -12
- package/dist/cli/config-selector.js.map +1 -1
- package/dist/cli/file-processor.d.ts +70 -2
- package/dist/cli/file-processor.d.ts.map +1 -1
- package/dist/cli/file-processor.js +240 -15
- package/dist/cli/file-processor.js.map +1 -1
- package/dist/cli/list-models.d.ts +63 -3
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +202 -27
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli/login-handler.d.ts +82 -8
- package/dist/cli/login-handler.d.ts.map +1 -1
- package/dist/cli/login-handler.js +410 -77
- package/dist/cli/login-handler.js.map +1 -1
- package/dist/cli/session-picker.d.ts +74 -2
- package/dist/cli/session-picker.d.ts.map +1 -1
- package/dist/cli/session-picker.js +236 -12
- package/dist/cli/session-picker.js.map +1 -1
- package/dist/core/agent-session.d.ts +214 -9
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +214 -9
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/bash-executor.d.ts +302 -12
- package/dist/core/bash-executor.d.ts.map +1 -1
- package/dist/core/bash-executor.js +302 -12
- package/dist/core/bash-executor.js.map +1 -1
- package/dist/core/diagnostics.d.ts +191 -0
- package/dist/core/diagnostics.d.ts.map +1 -1
- package/dist/core/diagnostics.js +142 -0
- package/dist/core/diagnostics.js.map +1 -1
- package/dist/core/discover-packages.d.ts +6 -0
- package/dist/core/discover-packages.d.ts.map +1 -0
- package/dist/core/discover-packages.js +62 -0
- package/dist/core/discover-packages.js.map +1 -0
- package/dist/core/event-bus.d.ts +146 -0
- package/dist/core/event-bus.d.ts.map +1 -1
- package/dist/core/event-bus.js +93 -0
- package/dist/core/event-bus.js.map +1 -1
- package/dist/core/export-html/ansi-to-html.d.ts +4 -0
- package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
- package/dist/core/export-html/ansi-to-html.js +4 -0
- package/dist/core/export-html/ansi-to-html.js.map +1 -1
- package/dist/core/export-html/index.d.ts +128 -0
- package/dist/core/export-html/index.d.ts.map +1 -1
- package/dist/core/export-html/index.js +128 -0
- package/dist/core/export-html/index.js.map +1 -1
- package/dist/core/export-html/tool-renderer.d.ts +4 -0
- package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
- package/dist/core/export-html/tool-renderer.js +4 -0
- package/dist/core/export-html/tool-renderer.js.map +1 -1
- package/dist/core/keybindings.d.ts +142 -0
- package/dist/core/keybindings.d.ts.map +1 -1
- package/dist/core/keybindings.js +142 -0
- package/dist/core/keybindings.js.map +1 -1
- package/dist/core/model-registry.d.ts +98 -1
- package/dist/core/model-registry.d.ts.map +1 -1
- package/dist/core/model-registry.js +98 -1
- package/dist/core/model-registry.js.map +1 -1
- package/dist/core/model-resolver.d.ts +99 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +99 -1
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/prompt-templates.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +2 -0
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts +127 -0
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +125 -0
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/skills.js.map +1 -1
- package/dist/core/subagents.js.map +1 -1
- package/dist/core/tools/bash.d.ts +391 -11
- package/dist/core/tools/bash.d.ts.map +1 -1
- package/dist/core/tools/bash.js +269 -2
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/bg-process.d.ts +49 -0
- package/dist/core/tools/bg-process.d.ts.map +1 -0
- package/dist/core/tools/bg-process.js +69 -0
- package/dist/core/tools/bg-process.js.map +1 -0
- package/dist/core/tools/edit.d.ts +284 -6
- package/dist/core/tools/edit.d.ts.map +1 -1
- package/dist/core/tools/edit.js +238 -0
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/find.d.ts +169 -5
- package/dist/core/tools/find.d.ts.map +1 -1
- package/dist/core/tools/find.js +136 -0
- package/dist/core/tools/find.js.map +1 -1
- package/dist/core/tools/grep.d.ts +285 -5
- package/dist/core/tools/grep.d.ts.map +1 -1
- package/dist/core/tools/grep.js +247 -0
- package/dist/core/tools/grep.js.map +1 -1
- package/dist/core/tools/index.d.ts +45 -0
- package/dist/core/tools/index.d.ts.map +1 -1
- package/dist/core/tools/index.js +15 -0
- package/dist/core/tools/index.js.map +1 -1
- package/dist/core/tools/ls.d.ts +6 -0
- package/dist/core/tools/ls.d.ts.map +1 -1
- package/dist/core/tools/ls.js +6 -0
- package/dist/core/tools/ls.js.map +1 -1
- package/dist/core/tools/read.d.ts +308 -7
- package/dist/core/tools/read.d.ts.map +1 -1
- package/dist/core/tools/read.js +231 -0
- package/dist/core/tools/read.js.map +1 -1
- package/dist/core/tools/registry.d.ts +17 -0
- package/dist/core/tools/registry.d.ts.map +1 -0
- package/dist/core/tools/registry.js +108 -0
- package/dist/core/tools/registry.js.map +1 -0
- package/dist/core/tools/webfetch.d.ts +118 -3
- package/dist/core/tools/webfetch.d.ts.map +1 -1
- package/dist/core/tools/webfetch.js +118 -3
- package/dist/core/tools/webfetch.js.map +1 -1
- package/dist/core/tools/websearch.d.ts +130 -3
- package/dist/core/tools/websearch.d.ts.map +1 -1
- package/dist/core/tools/websearch.js +130 -3
- package/dist/core/tools/websearch.js.map +1 -1
- package/dist/core/tools/write.d.ts +251 -5
- package/dist/core/tools/write.d.ts.map +1 -1
- package/dist/core/tools/write.js +210 -0
- package/dist/core/tools/write.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +12 -1
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +164 -1
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +164 -1
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/bash-execution.d.ts +297 -1
- package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/bash-execution.js +297 -1
- package/dist/modes/interactive/components/bash-execution.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +251 -1
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +186 -1
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +186 -1
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1567 -13
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +1567 -13
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/theme/theme.d.ts +422 -0
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +422 -0
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/modes/print-mode.d.ts +538 -5
- package/dist/modes/print-mode.d.ts.map +1 -1
- package/dist/modes/print-mode.js +538 -5
- package/dist/modes/print-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-client.d.ts +921 -8
- package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-client.js +921 -8
- package/dist/modes/rpc/rpc-client.js.map +1 -1
- package/dist/modes/rpc/rpc-mode.d.ts +802 -9
- package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-mode.js +802 -9
- package/dist/modes/rpc/rpc-mode.js.map +1 -1
- package/dist/modes/rpc/rpc-types.d.ts +356 -3
- package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
- package/dist/modes/rpc/rpc-types.js +356 -3
- package/dist/modes/rpc/rpc-types.js.map +1 -1
- package/dist/modes/shared.d.ts +386 -0
- package/dist/modes/shared.d.ts.map +1 -0
- package/dist/modes/shared.js +543 -0
- package/dist/modes/shared.js.map +1 -0
- package/dist/utils/array.d.ts +389 -0
- package/dist/utils/array.d.ts.map +1 -0
- package/dist/utils/array.js +585 -0
- package/dist/utils/array.js.map +1 -0
- package/dist/utils/color-formatter.d.ts +318 -0
- package/dist/utils/color-formatter.d.ts.map +1 -0
- package/dist/utils/color-formatter.js +442 -0
- package/dist/utils/color-formatter.js.map +1 -0
- package/dist/utils/data-transformer.d.ts +326 -0
- package/dist/utils/data-transformer.d.ts.map +1 -0
- package/dist/utils/data-transformer.js +512 -0
- package/dist/utils/data-transformer.js.map +1 -0
- package/dist/utils/date-formatter.d.ts +281 -0
- package/dist/utils/date-formatter.d.ts.map +1 -0
- package/dist/utils/date-formatter.js +503 -0
- package/dist/utils/date-formatter.js.map +1 -0
- package/dist/utils/error-handler.d.ts +541 -0
- package/dist/utils/error-handler.d.ts.map +1 -0
- package/dist/utils/error-handler.js +726 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/file-operations.d.ts +297 -0
- package/dist/utils/file-operations.d.ts.map +1 -0
- package/dist/utils/file-operations.js +505 -0
- package/dist/utils/file-operations.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +268 -6
- package/dist/utils/frontmatter.d.ts.map +1 -1
- package/dist/utils/frontmatter.js +500 -21
- package/dist/utils/frontmatter.js.map +1 -1
- package/dist/utils/json-formatter.d.ts +259 -0
- package/dist/utils/json-formatter.d.ts.map +1 -0
- package/dist/utils/json-formatter.js +517 -0
- package/dist/utils/json-formatter.js.map +1 -0
- package/dist/utils/logger.d.ts +176 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +346 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/markdown-formatter.d.ts +211 -0
- package/dist/utils/markdown-formatter.d.ts.map +1 -0
- package/dist/utils/markdown-formatter.js +482 -0
- package/dist/utils/markdown-formatter.js.map +1 -0
- package/dist/utils/path-validator.d.ts +603 -0
- package/dist/utils/path-validator.d.ts.map +1 -0
- package/dist/utils/path-validator.js +870 -0
- package/dist/utils/path-validator.js.map +1 -0
- package/dist/utils/string-formatter.d.ts +609 -0
- package/dist/utils/string-formatter.d.ts.map +1 -0
- package/dist/utils/string-formatter.js +806 -0
- package/dist/utils/string-formatter.js.map +1 -0
- package/dist/utils/type-guards.d.ts +629 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +662 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/docs/COMPLETE-GUIDE.md +300 -0
- package/docs/COMPREHENSIVE-CLI-SUMMARY.md +900 -0
- package/docs/MODES-ARCHITECTURE.md +565 -0
- package/docs/PRINT-MODE-GUIDE.md +456 -0
- package/docs/RPC-GUIDE.md +705 -0
- package/docs/UTILS-IMPLEMENTATION-SUMMARY.md +647 -0
- package/docs/UTILS-MODULE-OVERVIEW.md +1480 -0
- package/docs/UTILS-QA-CHECKLIST.md +1061 -0
- package/docs/UTILS-USAGE-GUIDE.md +1419 -0
- package/package.json +7 -3
package/dist/cli/list-models.js
CHANGED
|
@@ -1,9 +1,42 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* List available models with optional
|
|
2
|
+
* Model List Formatter - Display available models with optional filtering
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
* - Retrieve available models from model registry
|
|
6
|
+
* - Apply fuzzy search filtering
|
|
7
|
+
* - Sort models by provider and ID
|
|
8
|
+
* - Format model information in a readable table
|
|
9
|
+
* - Display model capabilities (context, max output, thinking, images)
|
|
10
|
+
*
|
|
11
|
+
* Based on model listing patterns from indusagi-agent
|
|
12
|
+
* Original: https://github.com/varunisrani/indusagi-ts/vendor/indusagi-agent
|
|
13
|
+
*
|
|
14
|
+
* Adapted to:
|
|
15
|
+
* - Improve display formatting
|
|
16
|
+
* - Add comprehensive documentation
|
|
17
|
+
* - Add model filtering options
|
|
18
|
+
* - Add model capability indicators
|
|
19
|
+
* - Enhance UX with better sorting
|
|
3
20
|
*/
|
|
4
21
|
import { fuzzyFilter } from "indusagi/tui";
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// UTILITY FUNCTIONS
|
|
24
|
+
// ============================================================================
|
|
5
25
|
/**
|
|
6
|
-
* Format a number as human-readable
|
|
26
|
+
* Format a number as human-readable token count
|
|
27
|
+
*
|
|
28
|
+
* Converts large numbers to abbreviated format:
|
|
29
|
+
* - 1,000,000 -> "1M"
|
|
30
|
+
* - 200,000 -> "200K"
|
|
31
|
+
* - 500 -> "500"
|
|
32
|
+
*
|
|
33
|
+
* @param count - The number to format
|
|
34
|
+
* @returns Human-readable string
|
|
35
|
+
*
|
|
36
|
+
* @example
|
|
37
|
+
* formatTokenCount(1_000_000); // "1M"
|
|
38
|
+
* formatTokenCount(250_000); // "250K"
|
|
39
|
+
* formatTokenCount(500); // "500"
|
|
7
40
|
*/
|
|
8
41
|
function formatTokenCount(count) {
|
|
9
42
|
if (count >= 1_000_000) {
|
|
@@ -17,31 +50,164 @@ function formatTokenCount(count) {
|
|
|
17
50
|
return count.toString();
|
|
18
51
|
}
|
|
19
52
|
/**
|
|
20
|
-
*
|
|
53
|
+
* Apply filters to models list
|
|
54
|
+
*
|
|
55
|
+
* Filters models by:
|
|
56
|
+
* - Provider name (exact match)
|
|
57
|
+
* - Thinking/reasoning capability
|
|
58
|
+
* - Image input support
|
|
59
|
+
*
|
|
60
|
+
* @param models - List of models to filter
|
|
61
|
+
* @param options - Filter options
|
|
62
|
+
* @returns Filtered list of models
|
|
63
|
+
*/
|
|
64
|
+
function filterModels(models, options) {
|
|
65
|
+
let filtered = models;
|
|
66
|
+
// Filter by provider
|
|
67
|
+
if (options.provider) {
|
|
68
|
+
filtered = filtered.filter((m) => m.provider === options.provider);
|
|
69
|
+
}
|
|
70
|
+
// Filter by thinking capability
|
|
71
|
+
if (options.thinkingOnly) {
|
|
72
|
+
filtered = filtered.filter((m) => !!m.reasoning);
|
|
73
|
+
}
|
|
74
|
+
// Filter by image support
|
|
75
|
+
if (options.imageSupport) {
|
|
76
|
+
filtered = filtered.filter((m) => m.input.includes("image"));
|
|
77
|
+
}
|
|
78
|
+
// Apply fuzzy search pattern
|
|
79
|
+
if (options.searchPattern) {
|
|
80
|
+
filtered = fuzzyFilter(filtered, options.searchPattern, (m) => `${m.provider} ${m.id}`);
|
|
81
|
+
}
|
|
82
|
+
return filtered;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Sort models by provider and then by model ID
|
|
86
|
+
*
|
|
87
|
+
* This provides a predictable, organized display order
|
|
88
|
+
*
|
|
89
|
+
* @param models - List of models to sort
|
|
90
|
+
* @returns Sorted list of models
|
|
91
|
+
*/
|
|
92
|
+
function sortModels(models) {
|
|
93
|
+
return models.sort((a, b) => {
|
|
94
|
+
// Primary sort: provider name (alphabetical)
|
|
95
|
+
const providerCmp = a.provider.localeCompare(b.provider);
|
|
96
|
+
if (providerCmp !== 0)
|
|
97
|
+
return providerCmp;
|
|
98
|
+
// Secondary sort: model ID (alphabetical)
|
|
99
|
+
return a.id.localeCompare(b.id);
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Calculate column widths for formatted table output
|
|
104
|
+
*
|
|
105
|
+
* Ensures columns are wide enough for headers and all data
|
|
106
|
+
*
|
|
107
|
+
* @param rows - Array of formatted model rows
|
|
108
|
+
* @returns Object with column widths
|
|
109
|
+
*/
|
|
110
|
+
function calculateColumnWidths(headers, rows) {
|
|
111
|
+
return {
|
|
112
|
+
provider: Math.max(headers.provider.length, ...rows.map((r) => r.provider.length)),
|
|
113
|
+
model: Math.max(headers.model.length, ...rows.map((r) => r.model.length)),
|
|
114
|
+
context: Math.max(headers.context.length, ...rows.map((r) => r.context.length)),
|
|
115
|
+
maxOut: Math.max(headers.maxOut.length, ...rows.map((r) => r.maxOut.length)),
|
|
116
|
+
thinking: Math.max(headers.thinking.length, ...rows.map((r) => r.thinking.length)),
|
|
117
|
+
images: Math.max(headers.images.length, ...rows.map((r) => r.images.length)),
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// ============================================================================
|
|
121
|
+
// MAIN FUNCTIONS
|
|
122
|
+
// ============================================================================
|
|
123
|
+
/**
|
|
124
|
+
* List available models, optionally filtered by search pattern or criteria
|
|
125
|
+
*
|
|
126
|
+
* This function:
|
|
127
|
+
* 1. Retrieves available models from the registry
|
|
128
|
+
* 2. Applies any requested filters (provider, thinking, images, search)
|
|
129
|
+
* 3. Sorts models by provider and ID
|
|
130
|
+
* 4. Formats model information into a readable table
|
|
131
|
+
* 5. Displays the table to stdout
|
|
132
|
+
*
|
|
133
|
+
* The table shows:
|
|
134
|
+
* - Provider name
|
|
135
|
+
* - Model ID
|
|
136
|
+
* - Context window size
|
|
137
|
+
* - Max output tokens
|
|
138
|
+
* - Thinking/reasoning capability
|
|
139
|
+
* - Image input support
|
|
140
|
+
*
|
|
141
|
+
* @param modelRegistry - Model registry instance
|
|
142
|
+
* @param searchPattern - Optional fuzzy search pattern for model IDs/providers
|
|
143
|
+
* @returns Promise that resolves when listing is complete
|
|
144
|
+
*
|
|
145
|
+
* @example
|
|
146
|
+
* ```typescript
|
|
147
|
+
* // List all models
|
|
148
|
+
* await listModels(modelRegistry);
|
|
149
|
+
*
|
|
150
|
+
* // List models matching "sonnet"
|
|
151
|
+
* await listModels(modelRegistry, "sonnet");
|
|
152
|
+
* ```
|
|
21
153
|
*/
|
|
22
154
|
export async function listModels(modelRegistry, searchPattern) {
|
|
155
|
+
// ============================================================================
|
|
156
|
+
// MODEL RETRIEVAL
|
|
157
|
+
// ============================================================================
|
|
158
|
+
/**
|
|
159
|
+
* Get all available models from registry
|
|
160
|
+
* Returns empty array if no providers are configured
|
|
161
|
+
*/
|
|
23
162
|
const models = modelRegistry.getAvailable();
|
|
163
|
+
/**
|
|
164
|
+
* Handle case where no models are available
|
|
165
|
+
* This typically means no API keys are configured
|
|
166
|
+
*/
|
|
24
167
|
if (models.length === 0) {
|
|
25
168
|
console.log("No models available. Set API keys in environment variables.");
|
|
26
169
|
return;
|
|
27
170
|
}
|
|
28
|
-
//
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
171
|
+
// ============================================================================
|
|
172
|
+
// FILTERING
|
|
173
|
+
// ============================================================================
|
|
174
|
+
/**
|
|
175
|
+
* Parse filter options
|
|
176
|
+
* Support both string (search pattern) and object (full options) formats
|
|
177
|
+
*/
|
|
178
|
+
const filterOptions = typeof searchPattern === "string" ? { searchPattern } : searchPattern || {};
|
|
179
|
+
/**
|
|
180
|
+
* Apply filters to models
|
|
181
|
+
* Includes provider, thinking, image, and fuzzy search filters
|
|
182
|
+
*/
|
|
183
|
+
let filteredModels = filterModels(models, filterOptions);
|
|
184
|
+
/**
|
|
185
|
+
* Handle case where filter produces no results
|
|
186
|
+
*/
|
|
33
187
|
if (filteredModels.length === 0) {
|
|
34
|
-
|
|
188
|
+
if (filterOptions.searchPattern) {
|
|
189
|
+
console.log(`No models matching "${filterOptions.searchPattern}"`);
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
console.log("No models match the specified criteria");
|
|
193
|
+
}
|
|
35
194
|
return;
|
|
36
195
|
}
|
|
37
|
-
//
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
196
|
+
// ============================================================================
|
|
197
|
+
// SORTING
|
|
198
|
+
// ============================================================================
|
|
199
|
+
/**
|
|
200
|
+
* Sort models by provider and ID
|
|
201
|
+
* Provides organized, predictable display order
|
|
202
|
+
*/
|
|
203
|
+
filteredModels = sortModels(filteredModels);
|
|
204
|
+
// ============================================================================
|
|
205
|
+
// TABLE FORMATTING
|
|
206
|
+
// ============================================================================
|
|
207
|
+
/**
|
|
208
|
+
* Format models into table rows
|
|
209
|
+
* Converts numeric values to human-readable format
|
|
210
|
+
*/
|
|
45
211
|
const rows = filteredModels.map((m) => ({
|
|
46
212
|
provider: m.provider,
|
|
47
213
|
model: m.id,
|
|
@@ -50,6 +216,9 @@ export async function listModels(modelRegistry, searchPattern) {
|
|
|
50
216
|
thinking: m.reasoning ? "yes" : "no",
|
|
51
217
|
images: m.input.includes("image") ? "yes" : "no",
|
|
52
218
|
}));
|
|
219
|
+
/**
|
|
220
|
+
* Define table headers
|
|
221
|
+
*/
|
|
53
222
|
const headers = {
|
|
54
223
|
provider: "provider",
|
|
55
224
|
model: "model",
|
|
@@ -58,15 +227,18 @@ export async function listModels(modelRegistry, searchPattern) {
|
|
|
58
227
|
thinking: "thinking",
|
|
59
228
|
images: "images",
|
|
60
229
|
};
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
230
|
+
/**
|
|
231
|
+
* Calculate column widths based on headers and data
|
|
232
|
+
* Ensures all content fits without truncation
|
|
233
|
+
*/
|
|
234
|
+
const widths = calculateColumnWidths(headers, rows);
|
|
235
|
+
// ============================================================================
|
|
236
|
+
// OUTPUT
|
|
237
|
+
// ============================================================================
|
|
238
|
+
/**
|
|
239
|
+
* Print header row
|
|
240
|
+
* Separated by two spaces for readability
|
|
241
|
+
*/
|
|
70
242
|
const headerLine = [
|
|
71
243
|
headers.provider.padEnd(widths.provider),
|
|
72
244
|
headers.model.padEnd(widths.model),
|
|
@@ -76,7 +248,10 @@ export async function listModels(modelRegistry, searchPattern) {
|
|
|
76
248
|
headers.images.padEnd(widths.images),
|
|
77
249
|
].join(" ");
|
|
78
250
|
console.log(headerLine);
|
|
79
|
-
|
|
251
|
+
/**
|
|
252
|
+
* Print each model row
|
|
253
|
+
* Aligned with header for clean table appearance
|
|
254
|
+
*/
|
|
80
255
|
for (const row of rows) {
|
|
81
256
|
const line = [
|
|
82
257
|
row.provider.padEnd(widths.provider),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list-models.js","sourceRoot":"","sources":["../../src/cli/list-models.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"list-models.js","sourceRoot":"","sources":["../../src/cli/list-models.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAQH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA6C3C,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E;;;;;;;;;;;;;;;GAeG;AACH,SAAS,gBAAgB,CAAC,KAAa;IACtC,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;QACxB,MAAM,QAAQ,GAAG,KAAK,GAAG,SAAS,CAAC;QACnC,OAAO,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IACxE,CAAC;IACD,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;QACpB,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;QAChC,OAAO,SAAS,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC3E,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AACzB,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,YAAY,CAAC,MAAoB,EAAE,OAA2B;IACtE,IAAI,QAAQ,GAAG,MAAM,CAAC;IAEtB,qBAAqB;IACrB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpE,CAAC;IAED,gCAAgC;IAChC,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QAC1B,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAClD,CAAC;IAED,0BAA0B;IAC1B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QAC1B,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,6BAA6B;IAC7B,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3B,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,UAAU,CAAC,MAAoB;IACvC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAC3B,6CAA6C;QAC7C,MAAM,WAAW,GAAG,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,WAAW,KAAK,CAAC;YAAE,OAAO,WAAW,CAAC;QAE1C,0CAA0C;QAC1C,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,qBAAqB,CAAC,OAAuC,EAAE,IAAgB;IACvF,OAAO;QACN,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClF,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC/E,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5E,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClF,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;KAC5E,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC/B,aAA4B,EAC5B,aAA2C;IAE3C,+EAA+E;IAC/E,kBAAkB;IAClB,+EAA+E;IAE/E;;;OAGG;IACH,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC;IAE5C;;;OAGG;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,6DAA6D,CAAC,CAAC;QAC3E,OAAO;IACR,CAAC;IAED,+EAA+E;IAC/E,YAAY;IACZ,+EAA+E;IAE/E;;;OAGG;IACH,MAAM,aAAa,GAClB,OAAO,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC;IAE7E;;;OAGG;IACH,IAAI,cAAc,GAAiB,YAAY,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAEvE;;OAEG;IACH,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,IAAI,aAAa,CAAC,aAAa,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,uBAAuB,aAAa,CAAC,aAAa,GAAG,CAAC,CAAC;QACpE,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;QACvD,CAAC;QACD,OAAO;IACR,CAAC;IAED,+EAA+E;IAC/E,UAAU;IACV,+EAA+E;IAE/E;;;OAGG;IACH,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAE5C,+EAA+E;IAC/E,mBAAmB;IACnB,+EAA+E;IAE/E;;;OAGG;IACH,MAAM,IAAI,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAY,EAAE,CAAC,CAAC;QACjD,QAAQ,EAAE,CAAC,CAAC,QAAQ;QACpB,KAAK,EAAE,CAAC,CAAC,EAAE;QACX,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC;QAC1C,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;QACrC,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QACpC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;KAChD,CAAC,CAAC,CAAC;IAEJ;;OAEG;IACH,MAAM,OAAO,GAAa;QACzB,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,OAAO;QACd,OAAO,EAAE,SAAS;QAClB,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,QAAQ;KAChB,CAAC;IAEF;;;OAGG;IACH,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAEpD,+EAA+E;IAC/E,SAAS;IACT,+EAA+E;IAE/E;;;OAGG;IACH,MAAM,UAAU,GAAG;QAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;QAClC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;QACtC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACxC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;KACpC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAExB;;;OAGG;IACH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG;YACZ,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YAC9B,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAClC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;YAChC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;SAChC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;AACF,CAAC"}
|
|
@@ -1,14 +1,44 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Login
|
|
3
|
-
* Supports OAuth and API key-based authentication
|
|
2
|
+
* Login Handler - AI provider authentication and credential management
|
|
4
3
|
*
|
|
5
|
-
*
|
|
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
|
|
6
11
|
*
|
|
7
|
-
*
|
|
8
|
-
* -
|
|
9
|
-
* -
|
|
10
|
-
* -
|
|
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
|
+
* Login command options
|
|
36
|
+
*
|
|
37
|
+
* @interface LoginOptions
|
|
38
|
+
* @property {string} [provider] - Provider ID to login to
|
|
39
|
+
* @property {string} [account] - Account name for multi-account providers
|
|
40
|
+
* @property {boolean} [list] - List saved accounts instead of logging in
|
|
41
|
+
* @property {boolean} [all] - Logout all accounts for provider
|
|
12
42
|
*/
|
|
13
43
|
export interface LoginOptions {
|
|
14
44
|
provider?: string;
|
|
@@ -16,5 +46,49 @@ export interface LoginOptions {
|
|
|
16
46
|
list?: boolean;
|
|
17
47
|
all?: boolean;
|
|
18
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Login/authentication error with helpful suggestions
|
|
51
|
+
*
|
|
52
|
+
* @class LoginError
|
|
53
|
+
* @extends {Error}
|
|
54
|
+
*/
|
|
55
|
+
export declare class LoginError extends Error {
|
|
56
|
+
readonly code: string;
|
|
57
|
+
readonly suggestion?: string | undefined;
|
|
58
|
+
constructor(message: string, code: string, suggestion?: string | undefined);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Credential validation error
|
|
62
|
+
*
|
|
63
|
+
* @class CredentialValidationError
|
|
64
|
+
* @extends {Error}
|
|
65
|
+
*/
|
|
66
|
+
export declare class CredentialValidationError extends Error {
|
|
67
|
+
readonly code: string;
|
|
68
|
+
readonly suggestion?: string | undefined;
|
|
69
|
+
constructor(message: string, code: string, suggestion?: string | undefined);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Handle login/logout commands
|
|
73
|
+
*
|
|
74
|
+
* Entry point for the login/logout command flow:
|
|
75
|
+
* 1. Parse command options
|
|
76
|
+
* 2. Initialize auth storage
|
|
77
|
+
* 3. Route to appropriate handler (list, logout, login)
|
|
78
|
+
*
|
|
79
|
+
* @param args - Command line arguments
|
|
80
|
+
* @returns Promise resolving to true if command was handled
|
|
81
|
+
*
|
|
82
|
+
* @throws {LoginError} If command fails
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```typescript
|
|
86
|
+
* // Handle login command
|
|
87
|
+
* await handleLoginCommand(["login", "--provider", "openai"]);
|
|
88
|
+
*
|
|
89
|
+
* // Handle logout command
|
|
90
|
+
* await handleLoginCommand(["logout", "--provider", "openai"]);
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
19
93
|
export declare function handleLoginCommand(args: string[]): Promise<boolean>;
|
|
20
94
|
//# sourceMappingURL=login-handler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login-handler.d.ts","sourceRoot":"","sources":["../../src/cli/login-handler.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"login-handler.d.ts","sourceRoot":"","sources":["../../src/cli/login-handler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAmBH;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AAoBD;;;;;GAKG;AACH,qBAAa,UAAW,SAAQ,KAAK;aAGnB,IAAI,EAAE,MAAM;aACZ,UAAU,CAAC,EAAE,MAAM;gBAFnC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,YAAA;CAKpC;AAED;;;;;GAKG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;aAGlC,IAAI,EAAE,MAAM;aACZ,UAAU,CAAC,EAAE,MAAM;gBAFnC,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,YAAA;CAKpC;AAsJD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA0CzE"}
|