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.
Files changed (236) hide show
  1. package/CHANGELOG.md +101 -0
  2. package/README.md +2 -0
  3. package/dist/cli/args.d.ts +117 -1
  4. package/dist/cli/args.d.ts.map +1 -1
  5. package/dist/cli/args.js +221 -52
  6. package/dist/cli/args.js.map +1 -1
  7. package/dist/cli/config-selector.d.ts +58 -2
  8. package/dist/cli/config-selector.d.ts.map +1 -1
  9. package/dist/cli/config-selector.js +130 -12
  10. package/dist/cli/config-selector.js.map +1 -1
  11. package/dist/cli/file-processor.d.ts +70 -2
  12. package/dist/cli/file-processor.d.ts.map +1 -1
  13. package/dist/cli/file-processor.js +240 -15
  14. package/dist/cli/file-processor.js.map +1 -1
  15. package/dist/cli/list-models.d.ts +63 -3
  16. package/dist/cli/list-models.d.ts.map +1 -1
  17. package/dist/cli/list-models.js +202 -27
  18. package/dist/cli/list-models.js.map +1 -1
  19. package/dist/cli/login-handler.d.ts +82 -8
  20. package/dist/cli/login-handler.d.ts.map +1 -1
  21. package/dist/cli/login-handler.js +410 -77
  22. package/dist/cli/login-handler.js.map +1 -1
  23. package/dist/cli/session-picker.d.ts +74 -2
  24. package/dist/cli/session-picker.d.ts.map +1 -1
  25. package/dist/cli/session-picker.js +236 -12
  26. package/dist/cli/session-picker.js.map +1 -1
  27. package/dist/core/agent-session.d.ts +214 -9
  28. package/dist/core/agent-session.d.ts.map +1 -1
  29. package/dist/core/agent-session.js +214 -9
  30. package/dist/core/agent-session.js.map +1 -1
  31. package/dist/core/bash-executor.d.ts +302 -12
  32. package/dist/core/bash-executor.d.ts.map +1 -1
  33. package/dist/core/bash-executor.js +302 -12
  34. package/dist/core/bash-executor.js.map +1 -1
  35. package/dist/core/diagnostics.d.ts +191 -0
  36. package/dist/core/diagnostics.d.ts.map +1 -1
  37. package/dist/core/diagnostics.js +142 -0
  38. package/dist/core/diagnostics.js.map +1 -1
  39. package/dist/core/discover-packages.d.ts +6 -0
  40. package/dist/core/discover-packages.d.ts.map +1 -0
  41. package/dist/core/discover-packages.js +62 -0
  42. package/dist/core/discover-packages.js.map +1 -0
  43. package/dist/core/event-bus.d.ts +146 -0
  44. package/dist/core/event-bus.d.ts.map +1 -1
  45. package/dist/core/event-bus.js +93 -0
  46. package/dist/core/event-bus.js.map +1 -1
  47. package/dist/core/export-html/ansi-to-html.d.ts +4 -0
  48. package/dist/core/export-html/ansi-to-html.d.ts.map +1 -1
  49. package/dist/core/export-html/ansi-to-html.js +4 -0
  50. package/dist/core/export-html/ansi-to-html.js.map +1 -1
  51. package/dist/core/export-html/index.d.ts +128 -0
  52. package/dist/core/export-html/index.d.ts.map +1 -1
  53. package/dist/core/export-html/index.js +128 -0
  54. package/dist/core/export-html/index.js.map +1 -1
  55. package/dist/core/export-html/tool-renderer.d.ts +4 -0
  56. package/dist/core/export-html/tool-renderer.d.ts.map +1 -1
  57. package/dist/core/export-html/tool-renderer.js +4 -0
  58. package/dist/core/export-html/tool-renderer.js.map +1 -1
  59. package/dist/core/keybindings.d.ts +142 -0
  60. package/dist/core/keybindings.d.ts.map +1 -1
  61. package/dist/core/keybindings.js +142 -0
  62. package/dist/core/keybindings.js.map +1 -1
  63. package/dist/core/model-registry.d.ts +98 -1
  64. package/dist/core/model-registry.d.ts.map +1 -1
  65. package/dist/core/model-registry.js +98 -1
  66. package/dist/core/model-registry.js.map +1 -1
  67. package/dist/core/model-resolver.d.ts +99 -1
  68. package/dist/core/model-resolver.d.ts.map +1 -1
  69. package/dist/core/model-resolver.js +99 -1
  70. package/dist/core/model-resolver.js.map +1 -1
  71. package/dist/core/prompt-templates.js.map +1 -1
  72. package/dist/core/sdk.d.ts.map +1 -1
  73. package/dist/core/sdk.js +2 -0
  74. package/dist/core/sdk.js.map +1 -1
  75. package/dist/core/session-manager.d.ts +127 -0
  76. package/dist/core/session-manager.d.ts.map +1 -1
  77. package/dist/core/session-manager.js +125 -0
  78. package/dist/core/session-manager.js.map +1 -1
  79. package/dist/core/skills.js.map +1 -1
  80. package/dist/core/subagents.js.map +1 -1
  81. package/dist/core/tools/bash.d.ts +391 -11
  82. package/dist/core/tools/bash.d.ts.map +1 -1
  83. package/dist/core/tools/bash.js +269 -2
  84. package/dist/core/tools/bash.js.map +1 -1
  85. package/dist/core/tools/bg-process.d.ts +49 -0
  86. package/dist/core/tools/bg-process.d.ts.map +1 -0
  87. package/dist/core/tools/bg-process.js +69 -0
  88. package/dist/core/tools/bg-process.js.map +1 -0
  89. package/dist/core/tools/edit.d.ts +284 -6
  90. package/dist/core/tools/edit.d.ts.map +1 -1
  91. package/dist/core/tools/edit.js +238 -0
  92. package/dist/core/tools/edit.js.map +1 -1
  93. package/dist/core/tools/find.d.ts +169 -5
  94. package/dist/core/tools/find.d.ts.map +1 -1
  95. package/dist/core/tools/find.js +136 -0
  96. package/dist/core/tools/find.js.map +1 -1
  97. package/dist/core/tools/grep.d.ts +285 -5
  98. package/dist/core/tools/grep.d.ts.map +1 -1
  99. package/dist/core/tools/grep.js +247 -0
  100. package/dist/core/tools/grep.js.map +1 -1
  101. package/dist/core/tools/index.d.ts +45 -0
  102. package/dist/core/tools/index.d.ts.map +1 -1
  103. package/dist/core/tools/index.js +15 -0
  104. package/dist/core/tools/index.js.map +1 -1
  105. package/dist/core/tools/ls.d.ts +6 -0
  106. package/dist/core/tools/ls.d.ts.map +1 -1
  107. package/dist/core/tools/ls.js +6 -0
  108. package/dist/core/tools/ls.js.map +1 -1
  109. package/dist/core/tools/read.d.ts +308 -7
  110. package/dist/core/tools/read.d.ts.map +1 -1
  111. package/dist/core/tools/read.js +231 -0
  112. package/dist/core/tools/read.js.map +1 -1
  113. package/dist/core/tools/registry.d.ts +17 -0
  114. package/dist/core/tools/registry.d.ts.map +1 -0
  115. package/dist/core/tools/registry.js +108 -0
  116. package/dist/core/tools/registry.js.map +1 -0
  117. package/dist/core/tools/webfetch.d.ts +118 -3
  118. package/dist/core/tools/webfetch.d.ts.map +1 -1
  119. package/dist/core/tools/webfetch.js +118 -3
  120. package/dist/core/tools/webfetch.js.map +1 -1
  121. package/dist/core/tools/websearch.d.ts +130 -3
  122. package/dist/core/tools/websearch.d.ts.map +1 -1
  123. package/dist/core/tools/websearch.js +130 -3
  124. package/dist/core/tools/websearch.js.map +1 -1
  125. package/dist/core/tools/write.d.ts +251 -5
  126. package/dist/core/tools/write.d.ts.map +1 -1
  127. package/dist/core/tools/write.js +210 -0
  128. package/dist/core/tools/write.js.map +1 -1
  129. package/dist/main.d.ts.map +1 -1
  130. package/dist/main.js +12 -1
  131. package/dist/main.js.map +1 -1
  132. package/dist/modes/interactive/components/assistant-message.d.ts +164 -1
  133. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  134. package/dist/modes/interactive/components/assistant-message.js +164 -1
  135. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  136. package/dist/modes/interactive/components/bash-execution.d.ts +297 -1
  137. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  138. package/dist/modes/interactive/components/bash-execution.js +297 -1
  139. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  140. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  141. package/dist/modes/interactive/components/tool-execution.js +251 -1
  142. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  143. package/dist/modes/interactive/components/user-message.d.ts +186 -1
  144. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  145. package/dist/modes/interactive/components/user-message.js +186 -1
  146. package/dist/modes/interactive/components/user-message.js.map +1 -1
  147. package/dist/modes/interactive/interactive-mode.d.ts +1567 -13
  148. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  149. package/dist/modes/interactive/interactive-mode.js +1567 -13
  150. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  151. package/dist/modes/interactive/theme/theme.d.ts +422 -0
  152. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  153. package/dist/modes/interactive/theme/theme.js +422 -0
  154. package/dist/modes/interactive/theme/theme.js.map +1 -1
  155. package/dist/modes/print-mode.d.ts +538 -5
  156. package/dist/modes/print-mode.d.ts.map +1 -1
  157. package/dist/modes/print-mode.js +538 -5
  158. package/dist/modes/print-mode.js.map +1 -1
  159. package/dist/modes/rpc/rpc-client.d.ts +921 -8
  160. package/dist/modes/rpc/rpc-client.d.ts.map +1 -1
  161. package/dist/modes/rpc/rpc-client.js +921 -8
  162. package/dist/modes/rpc/rpc-client.js.map +1 -1
  163. package/dist/modes/rpc/rpc-mode.d.ts +802 -9
  164. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  165. package/dist/modes/rpc/rpc-mode.js +802 -9
  166. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  167. package/dist/modes/rpc/rpc-types.d.ts +356 -3
  168. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  169. package/dist/modes/rpc/rpc-types.js +356 -3
  170. package/dist/modes/rpc/rpc-types.js.map +1 -1
  171. package/dist/modes/shared.d.ts +386 -0
  172. package/dist/modes/shared.d.ts.map +1 -0
  173. package/dist/modes/shared.js +543 -0
  174. package/dist/modes/shared.js.map +1 -0
  175. package/dist/utils/array.d.ts +389 -0
  176. package/dist/utils/array.d.ts.map +1 -0
  177. package/dist/utils/array.js +585 -0
  178. package/dist/utils/array.js.map +1 -0
  179. package/dist/utils/color-formatter.d.ts +318 -0
  180. package/dist/utils/color-formatter.d.ts.map +1 -0
  181. package/dist/utils/color-formatter.js +442 -0
  182. package/dist/utils/color-formatter.js.map +1 -0
  183. package/dist/utils/data-transformer.d.ts +326 -0
  184. package/dist/utils/data-transformer.d.ts.map +1 -0
  185. package/dist/utils/data-transformer.js +512 -0
  186. package/dist/utils/data-transformer.js.map +1 -0
  187. package/dist/utils/date-formatter.d.ts +281 -0
  188. package/dist/utils/date-formatter.d.ts.map +1 -0
  189. package/dist/utils/date-formatter.js +503 -0
  190. package/dist/utils/date-formatter.js.map +1 -0
  191. package/dist/utils/error-handler.d.ts +541 -0
  192. package/dist/utils/error-handler.d.ts.map +1 -0
  193. package/dist/utils/error-handler.js +726 -0
  194. package/dist/utils/error-handler.js.map +1 -0
  195. package/dist/utils/file-operations.d.ts +297 -0
  196. package/dist/utils/file-operations.d.ts.map +1 -0
  197. package/dist/utils/file-operations.js +505 -0
  198. package/dist/utils/file-operations.js.map +1 -0
  199. package/dist/utils/frontmatter.d.ts +268 -6
  200. package/dist/utils/frontmatter.d.ts.map +1 -1
  201. package/dist/utils/frontmatter.js +500 -21
  202. package/dist/utils/frontmatter.js.map +1 -1
  203. package/dist/utils/json-formatter.d.ts +259 -0
  204. package/dist/utils/json-formatter.d.ts.map +1 -0
  205. package/dist/utils/json-formatter.js +517 -0
  206. package/dist/utils/json-formatter.js.map +1 -0
  207. package/dist/utils/logger.d.ts +176 -0
  208. package/dist/utils/logger.d.ts.map +1 -0
  209. package/dist/utils/logger.js +346 -0
  210. package/dist/utils/logger.js.map +1 -0
  211. package/dist/utils/markdown-formatter.d.ts +211 -0
  212. package/dist/utils/markdown-formatter.d.ts.map +1 -0
  213. package/dist/utils/markdown-formatter.js +482 -0
  214. package/dist/utils/markdown-formatter.js.map +1 -0
  215. package/dist/utils/path-validator.d.ts +603 -0
  216. package/dist/utils/path-validator.d.ts.map +1 -0
  217. package/dist/utils/path-validator.js +870 -0
  218. package/dist/utils/path-validator.js.map +1 -0
  219. package/dist/utils/string-formatter.d.ts +609 -0
  220. package/dist/utils/string-formatter.d.ts.map +1 -0
  221. package/dist/utils/string-formatter.js +806 -0
  222. package/dist/utils/string-formatter.js.map +1 -0
  223. package/dist/utils/type-guards.d.ts +629 -0
  224. package/dist/utils/type-guards.d.ts.map +1 -0
  225. package/dist/utils/type-guards.js +662 -0
  226. package/dist/utils/type-guards.js.map +1 -0
  227. package/docs/COMPLETE-GUIDE.md +300 -0
  228. package/docs/COMPREHENSIVE-CLI-SUMMARY.md +900 -0
  229. package/docs/MODES-ARCHITECTURE.md +565 -0
  230. package/docs/PRINT-MODE-GUIDE.md +456 -0
  231. package/docs/RPC-GUIDE.md +705 -0
  232. package/docs/UTILS-IMPLEMENTATION-SUMMARY.md +647 -0
  233. package/docs/UTILS-MODULE-OVERVIEW.md +1480 -0
  234. package/docs/UTILS-QA-CHECKLIST.md +1061 -0
  235. package/docs/UTILS-USAGE-GUIDE.md +1419 -0
  236. package/package.json +7 -3
@@ -1,9 +1,42 @@
1
1
  /**
2
- * List available models with optional fuzzy search
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 (e.g., 200000 -> "200K", 1000000 -> "1M")
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
- * List available models, optionally filtered by search pattern
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
- // Apply fuzzy filter if search pattern provided
29
- let filteredModels = models;
30
- if (searchPattern) {
31
- filteredModels = fuzzyFilter(models, searchPattern, (m) => `${m.provider} ${m.id}`);
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
- console.log(`No models matching "${searchPattern}"`);
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
- // Sort by provider, then by model id
38
- filteredModels.sort((a, b) => {
39
- const providerCmp = a.provider.localeCompare(b.provider);
40
- if (providerCmp !== 0)
41
- return providerCmp;
42
- return a.id.localeCompare(b.id);
43
- });
44
- // Calculate column widths
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
- const widths = {
62
- provider: Math.max(headers.provider.length, ...rows.map((r) => r.provider.length)),
63
- model: Math.max(headers.model.length, ...rows.map((r) => r.model.length)),
64
- context: Math.max(headers.context.length, ...rows.map((r) => r.context.length)),
65
- maxOut: Math.max(headers.maxOut.length, ...rows.map((r) => r.maxOut.length)),
66
- thinking: Math.max(headers.thinking.length, ...rows.map((r) => r.thinking.length)),
67
- images: Math.max(headers.images.length, ...rows.map((r) => r.images.length)),
68
- };
69
- // Print header
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
- // Print rows
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":"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"}
1
+ {"version":3,"file":"list-models.js","sourceRoot":"","sources":["../../src/cli/list-models.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,44 @@
1
1
  /**
2
- * Login command handler for AI provider authentication
3
- * Supports OAuth and API key-based authentication
2
+ * Login Handler - AI provider authentication and credential management
4
3
  *
5
- * MULTI-ACCOUNT SUPPORT: Each provider can have multiple named accounts.
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
- * Pattern matched with openclaw implementation:
8
- * - Check for environment variables (KIMI_API_KEY, MOONSHOT_API_KEY, etc.)
9
- * - Show info/help URL
10
- * - Prompt for API key input
11
- * - Store in auth storage with account name
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;;;;;;;;;;;GAWG;AAQH,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;AA2BD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CA8BzE"}
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"}