antri_cli 1.26.0

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 (171) hide show
  1. package/README.md +92 -0
  2. package/bin/antri.js +2 -0
  3. package/dist/cli/banner.d.ts +22 -0
  4. package/dist/cli/banner.d.ts.map +1 -0
  5. package/dist/cli/banner.js +133 -0
  6. package/dist/cli/banner.js.map +1 -0
  7. package/dist/cli/dialogs/filePicker.d.ts +23 -0
  8. package/dist/cli/dialogs/filePicker.d.ts.map +1 -0
  9. package/dist/cli/dialogs/filePicker.js +106 -0
  10. package/dist/cli/dialogs/filePicker.js.map +1 -0
  11. package/dist/cli/dialogs/modelPicker.d.ts +10 -0
  12. package/dist/cli/dialogs/modelPicker.d.ts.map +1 -0
  13. package/dist/cli/dialogs/modelPicker.js +205 -0
  14. package/dist/cli/dialogs/modelPicker.js.map +1 -0
  15. package/dist/cli/dialogs/profilePicker.d.ts +11 -0
  16. package/dist/cli/dialogs/profilePicker.d.ts.map +1 -0
  17. package/dist/cli/dialogs/profilePicker.js +185 -0
  18. package/dist/cli/dialogs/profilePicker.js.map +1 -0
  19. package/dist/cli/dialogs/providerPicker.d.ts +19 -0
  20. package/dist/cli/dialogs/providerPicker.d.ts.map +1 -0
  21. package/dist/cli/dialogs/providerPicker.js +205 -0
  22. package/dist/cli/dialogs/providerPicker.js.map +1 -0
  23. package/dist/cli/prompt.d.ts +3 -0
  24. package/dist/cli/prompt.d.ts.map +1 -0
  25. package/dist/cli/prompt.js +50 -0
  26. package/dist/cli/prompt.js.map +1 -0
  27. package/dist/cli/promptToolkit.d.ts +14 -0
  28. package/dist/cli/promptToolkit.d.ts.map +1 -0
  29. package/dist/cli/promptToolkit.js +389 -0
  30. package/dist/cli/promptToolkit.js.map +1 -0
  31. package/dist/cli/renderer.d.ts +21 -0
  32. package/dist/cli/renderer.d.ts.map +1 -0
  33. package/dist/cli/renderer.js +97 -0
  34. package/dist/cli/renderer.js.map +1 -0
  35. package/dist/cli/shortcuts.d.ts +13 -0
  36. package/dist/cli/shortcuts.d.ts.map +1 -0
  37. package/dist/cli/shortcuts.js +414 -0
  38. package/dist/cli/shortcuts.js.map +1 -0
  39. package/dist/core/agent.d.ts +15 -0
  40. package/dist/core/agent.d.ts.map +1 -0
  41. package/dist/core/agent.js +232 -0
  42. package/dist/core/agent.js.map +1 -0
  43. package/dist/core/citations.d.ts +19 -0
  44. package/dist/core/citations.d.ts.map +1 -0
  45. package/dist/core/citations.js +40 -0
  46. package/dist/core/citations.js.map +1 -0
  47. package/dist/core/config.d.ts +16 -0
  48. package/dist/core/config.d.ts.map +1 -0
  49. package/dist/core/config.js +172 -0
  50. package/dist/core/config.js.map +1 -0
  51. package/dist/core/crawler.d.ts +18 -0
  52. package/dist/core/crawler.d.ts.map +1 -0
  53. package/dist/core/crawler.js +83 -0
  54. package/dist/core/crawler.js.map +1 -0
  55. package/dist/core/debugger.d.ts +20 -0
  56. package/dist/core/debugger.d.ts.map +1 -0
  57. package/dist/core/debugger.js +105 -0
  58. package/dist/core/debugger.js.map +1 -0
  59. package/dist/core/dialectic.d.ts +23 -0
  60. package/dist/core/dialectic.d.ts.map +1 -0
  61. package/dist/core/dialectic.js +300 -0
  62. package/dist/core/dialectic.js.map +1 -0
  63. package/dist/core/goalLoop.d.ts +14 -0
  64. package/dist/core/goalLoop.d.ts.map +1 -0
  65. package/dist/core/goalLoop.js +104 -0
  66. package/dist/core/goalLoop.js.map +1 -0
  67. package/dist/core/history.d.ts +13 -0
  68. package/dist/core/history.d.ts.map +1 -0
  69. package/dist/core/history.js +53 -0
  70. package/dist/core/history.js.map +1 -0
  71. package/dist/core/metaOptimizer.d.ts +27 -0
  72. package/dist/core/metaOptimizer.d.ts.map +1 -0
  73. package/dist/core/metaOptimizer.js +98 -0
  74. package/dist/core/metaOptimizer.js.map +1 -0
  75. package/dist/core/sandbox.d.ts +29 -0
  76. package/dist/core/sandbox.d.ts.map +1 -0
  77. package/dist/core/sandbox.js +141 -0
  78. package/dist/core/sandbox.js.map +1 -0
  79. package/dist/core/scraper.d.ts +22 -0
  80. package/dist/core/scraper.d.ts.map +1 -0
  81. package/dist/core/scraper.js +180 -0
  82. package/dist/core/scraper.js.map +1 -0
  83. package/dist/core/search.d.ts +27 -0
  84. package/dist/core/search.d.ts.map +1 -0
  85. package/dist/core/search.js +222 -0
  86. package/dist/core/search.js.map +1 -0
  87. package/dist/core/skillSynthesizer.d.ts +43 -0
  88. package/dist/core/skillSynthesizer.d.ts.map +1 -0
  89. package/dist/core/skillSynthesizer.js +147 -0
  90. package/dist/core/skillSynthesizer.js.map +1 -0
  91. package/dist/core/tools.d.ts +12 -0
  92. package/dist/core/tools.d.ts.map +1 -0
  93. package/dist/core/tools.js +467 -0
  94. package/dist/core/tools.js.map +1 -0
  95. package/dist/core/updater.d.ts +9 -0
  96. package/dist/core/updater.d.ts.map +1 -0
  97. package/dist/core/updater.js +63 -0
  98. package/dist/core/updater.js.map +1 -0
  99. package/dist/index.d.ts +3 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +92 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/memory/consolidation.d.ts +17 -0
  104. package/dist/memory/consolidation.d.ts.map +1 -0
  105. package/dist/memory/consolidation.js +42 -0
  106. package/dist/memory/consolidation.js.map +1 -0
  107. package/dist/memory/episodic.d.ts +15 -0
  108. package/dist/memory/episodic.d.ts.map +1 -0
  109. package/dist/memory/episodic.js +97 -0
  110. package/dist/memory/episodic.js.map +1 -0
  111. package/dist/memory/manager.d.ts +24 -0
  112. package/dist/memory/manager.d.ts.map +1 -0
  113. package/dist/memory/manager.js +97 -0
  114. package/dist/memory/manager.js.map +1 -0
  115. package/dist/memory/profile.d.ts +21 -0
  116. package/dist/memory/profile.d.ts.map +1 -0
  117. package/dist/memory/profile.js +111 -0
  118. package/dist/memory/profile.js.map +1 -0
  119. package/dist/memory/semantic.d.ts +24 -0
  120. package/dist/memory/semantic.d.ts.map +1 -0
  121. package/dist/memory/semantic.js +102 -0
  122. package/dist/memory/semantic.js.map +1 -0
  123. package/dist/memory/types.d.ts +45 -0
  124. package/dist/memory/types.d.ts.map +1 -0
  125. package/dist/memory/types.js +2 -0
  126. package/dist/memory/types.js.map +1 -0
  127. package/dist/memory/vectorStore.d.ts +18 -0
  128. package/dist/memory/vectorStore.d.ts.map +1 -0
  129. package/dist/memory/vectorStore.js +103 -0
  130. package/dist/memory/vectorStore.js.map +1 -0
  131. package/dist/profiles/profileManager.d.ts +25 -0
  132. package/dist/profiles/profileManager.d.ts.map +1 -0
  133. package/dist/profiles/profileManager.js +205 -0
  134. package/dist/profiles/profileManager.js.map +1 -0
  135. package/dist/providers/anthropic.d.ts +14 -0
  136. package/dist/providers/anthropic.d.ts.map +1 -0
  137. package/dist/providers/anthropic.js +80 -0
  138. package/dist/providers/anthropic.js.map +1 -0
  139. package/dist/providers/base.d.ts +7 -0
  140. package/dist/providers/base.d.ts.map +1 -0
  141. package/dist/providers/base.js +2 -0
  142. package/dist/providers/base.js.map +1 -0
  143. package/dist/providers/gemini.d.ts +14 -0
  144. package/dist/providers/gemini.d.ts.map +1 -0
  145. package/dist/providers/gemini.js +77 -0
  146. package/dist/providers/gemini.js.map +1 -0
  147. package/dist/providers/index.d.ts +4 -0
  148. package/dist/providers/index.d.ts.map +1 -0
  149. package/dist/providers/index.js +65 -0
  150. package/dist/providers/index.js.map +1 -0
  151. package/dist/providers/mock.d.ts +8 -0
  152. package/dist/providers/mock.d.ts.map +1 -0
  153. package/dist/providers/mock.js +62 -0
  154. package/dist/providers/mock.js.map +1 -0
  155. package/dist/providers/models.d.ts +8 -0
  156. package/dist/providers/models.d.ts.map +1 -0
  157. package/dist/providers/models.js +403 -0
  158. package/dist/providers/models.js.map +1 -0
  159. package/dist/providers/openai.d.ts +18 -0
  160. package/dist/providers/openai.d.ts.map +1 -0
  161. package/dist/providers/openai.js +162 -0
  162. package/dist/providers/openai.js.map +1 -0
  163. package/dist/types.d.ts +116 -0
  164. package/dist/types.d.ts.map +1 -0
  165. package/dist/types.js +2 -0
  166. package/dist/types.js.map +1 -0
  167. package/dist/utils/logger.d.ts +23 -0
  168. package/dist/utils/logger.d.ts.map +1 -0
  169. package/dist/utils/logger.js +26 -0
  170. package/dist/utils/logger.js.map +1 -0
  171. package/package.json +57 -0
package/README.md ADDED
@@ -0,0 +1,92 @@
1
+ # ⚡ ANTRI Code (`antri_cli`)
2
+
3
+ > An intelligent, terminal-first AI coding chatbot, proactive facilitator, and autonomous meta-agent.
4
+
5
+ ```text
6
+ ██████ ███ ██ ████████ ███████ ██████
7
+ ██ ██ ████ ██ ██ ██ ██ ██
8
+ ██████ ██ ██ ██ ██ ██████ ██
9
+ ██ ██ ██ ████ ██ ██ ██ ██
10
+ ██ ██ ██ ███ ██ ██ ██ ██████
11
+
12
+ # ANTRI Code v1.26.0 VIBE MODE · perms: ask-first
13
+ # models: meta/llama-3.1-8b-instruct
14
+ # ~/Projects/my-app
15
+ ────────────────────────────────────────────────────────────────────────────────
16
+ > Ask your question...
17
+ ────────────────────────────────────────────────────────────────────────────────
18
+ ? shortcuts · /plan [PLAN MODE] · /profile [profile_1] · @ files
19
+ ```
20
+
21
+ ---
22
+
23
+ ## 🚀 One-Shot Global Installation
24
+
25
+ Install globally via npm and start coding immediately:
26
+
27
+ ```bash
28
+ npm install -g antri_cli
29
+ ```
30
+
31
+ Launch ANTRI:
32
+ ```bash
33
+ antri
34
+ ```
35
+
36
+ ### Self-Updating
37
+ Update to the latest release anytime with zero lockfile churn:
38
+ ```bash
39
+ antri update
40
+ ```
41
+
42
+ ---
43
+
44
+ ## ✨ Key Features
45
+
46
+ - **🗺️ Plan Mode vs. ⚡ Vibe Mode**:
47
+ - `/plan` — Collaborative architectural design, blueprinting, and step-by-step roadmaps before writing code.
48
+ - `/vibe` — Direct conversational coding; writes files, runs tools, and executes in real-time flow.
49
+ - **🛡️ Privacy & Security Permission Gate**:
50
+ - Sensitive tools (`web_search`, `run_command`, `execute_python`, `synthesize_skill`) prompt for confirmation (`[y/n/a]`).
51
+ - Toggle Always-Allow with `/alwaysallow` or run `antri -alwaysallow`.
52
+ - **🎯 Autonomous Goal Loop (`/goal`, `/loop`)**:
53
+ - 3-iteration self-refinement engine: Draft -> Adversarial Review & Score -> Hardened Synthesis.
54
+ - **👤 Multi-Profile Thinking (`/profile`, `/notes`)**:
55
+ - Markdown profiles in `~/.antri/profiles/` (`profile_1.md`, `architect.md`).
56
+ - Automatically captures notes and adapts to your thinking style during chat.
57
+ - **🧠 Multi-Tiered Persistent Memory**:
58
+ - Episodic Store, 128-dim Semantic Vector Store (Cosine Similarity), and Project Conventions (`.antri/conventions.md`).
59
+ - Autonomous self-recall (`/memory`, `/consolidate`, `/learn`).
60
+ - **💡 Dialectic Reasoning Engine (`/debate`)**:
61
+ - 4-persona self-debate (`Proposer`, `Adversary`, `Researcher`, `Judge`) with configurable depth (`quick`, `deep`, `rigorous`).
62
+ - **📎 Interactive `@` File Attachment Picker**:
63
+ - Type `@` to browse directories and attach files directly into conversation context.
64
+ - **🤖 Autonomous Meta-Agent Capabilities**:
65
+ - Isolated Python runtime (`execute_python`), Self-Debugging error recovery, and Dynamic Skill Synthesis (`synthesize_skill` to `~/.agent-cli/skills/`).
66
+
67
+ ---
68
+
69
+ ## ⌨️ Command Reference
70
+
71
+ | Command | Description |
72
+ |---|---|
73
+ | `antri` | Launch interactive session |
74
+ | `antri --mode plan` | Launch directly into Plan Mode |
75
+ | `antri -alwaysallow` | Launch with all tool permissions allowed |
76
+ | `antri update` | Self-update to latest npm release |
77
+ | `antri --goal "<task>"` | Run autonomous 3-iteration goal loop |
78
+ | `antri --debate "<topic>"` | Run Dialectic Engine self-debate |
79
+ | `/plan` / `/vibe` | Switch operating modes |
80
+ | `/profile` | Open interactive profile switcher & creator |
81
+ | `/notes` | View active profile notes & insights |
82
+ | `/goal <task>` | Run multi-step refinement loop |
83
+ | `/connect` | Open interactive AI Provider selector |
84
+ | `/models` | Search and switch between AI models |
85
+ | `/tools` / `Ctrl+O` | Open detailed tool execution inspector |
86
+ | `/memory` / `/consolidate` | Manage persistent memory store |
87
+ | `/alwaysallow` | Toggle permission prompts for sensitive tools |
88
+
89
+ ---
90
+
91
+ ## 📜 License
92
+ MIT
package/bin/antri.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '../dist/index.js';
@@ -0,0 +1,22 @@
1
+ import { AntriConfig } from '../types.js';
2
+ /**
3
+ * Formats working directory path as ~ if home or relative
4
+ */
5
+ export declare function formatWorkingDir(dirPath: string): string;
6
+ /**
7
+ * Renders the full ANTRI banner matching Home.png
8
+ */
9
+ export declare function renderBanner(config: AntriConfig): void;
10
+ /**
11
+ * Returns a styled horizontal divider string
12
+ */
13
+ export declare function getDividerString(width?: number): string;
14
+ /**
15
+ * Renders the horizontal divider line
16
+ */
17
+ export declare function renderDivider(): void;
18
+ /**
19
+ * Renders the status bar footer (e.g. "? for shortcuts")
20
+ */
21
+ export declare function renderFooter(): void;
22
+ //# sourceMappingURL=banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/cli/banner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAgD1C;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CA0DtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,SAA2D,GAAG,MAAM,CAEzG;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAGnC"}
@@ -0,0 +1,133 @@
1
+ import chalk from 'chalk';
2
+ import path from 'path';
3
+ import os from 'os';
4
+ // Custom Chunky Block Font for ANTRI matching the aesthetic of Home.png
5
+ const BLOCK_LETTERS = {
6
+ A: [
7
+ '██████',
8
+ '██ ██',
9
+ '██████',
10
+ '██ ██',
11
+ '██ ██',
12
+ ],
13
+ N: [
14
+ '███ ██',
15
+ '████ ██',
16
+ '██ ██ ██',
17
+ '██ ████',
18
+ '██ ███',
19
+ ],
20
+ T: [
21
+ '████████',
22
+ ' ██ ',
23
+ ' ██ ',
24
+ ' ██ ',
25
+ ' ██ ',
26
+ ],
27
+ R: [
28
+ '███████',
29
+ '██ ██',
30
+ '██████ ',
31
+ '██ ██ ',
32
+ '██ ██',
33
+ ],
34
+ I: [
35
+ '██████',
36
+ ' ██ ',
37
+ ' ██ ',
38
+ ' ██ ',
39
+ '██████',
40
+ ],
41
+ ' ': [
42
+ ' ',
43
+ ' ',
44
+ ' ',
45
+ ' ',
46
+ ' ',
47
+ ],
48
+ };
49
+ /**
50
+ * Formats working directory path as ~ if home or relative
51
+ */
52
+ export function formatWorkingDir(dirPath) {
53
+ const home = os.homedir();
54
+ if (dirPath.startsWith(home)) {
55
+ const rel = dirPath.slice(home.length).replace(/\\/g, '/');
56
+ return rel ? '~' + rel : '~';
57
+ }
58
+ return path.basename(dirPath) || '~';
59
+ }
60
+ /**
61
+ * Renders the full ANTRI banner matching Home.png
62
+ */
63
+ export function renderBanner(config) {
64
+ const bg = chalk.bgRgb(37, 33, 73); // Purple background matching Home.png
65
+ const fg = chalk.rgb(158, 170, 251); // Light lavender block font matching Home.png
66
+ const word = 'ANTRI';
67
+ const rows = ['', '', '', '', ''];
68
+ for (let col = 0; col < word.length; col++) {
69
+ const char = word[col];
70
+ const letterMatrix = BLOCK_LETTERS[char] || BLOCK_LETTERS[' '];
71
+ for (let r = 0; r < 5; r++) {
72
+ rows[r] += letterMatrix[r] + (col < word.length - 1 ? ' ' : '');
73
+ }
74
+ }
75
+ const contentWidth = rows[0].length;
76
+ const paddingX = 3;
77
+ const totalBoxWidth = contentWidth + (paddingX * 2);
78
+ // Top padding row
79
+ const emptyRow = ' '.repeat(totalBoxWidth);
80
+ console.log(bg(emptyRow));
81
+ // Letter rows with background
82
+ for (let r = 0; r < 5; r++) {
83
+ const line = ' '.repeat(paddingX) + rows[r] + ' '.repeat(paddingX);
84
+ let coloredLine = '';
85
+ for (const ch of line) {
86
+ if (ch === '█') {
87
+ coloredLine += fg(bg('█'));
88
+ }
89
+ else {
90
+ coloredLine += bg(' ');
91
+ }
92
+ }
93
+ console.log(coloredLine);
94
+ }
95
+ // Bottom padding row
96
+ console.log(bg(emptyRow));
97
+ console.log(); // Blank line
98
+ // Metadata lines
99
+ const commentHash = chalk.hex('#64748b')('#');
100
+ const codeTitle = chalk.bold.white('ANTRI Code');
101
+ const versionStr = chalk.hex('#94a3b8')(`v${config.version}`);
102
+ const modeBadge = config.mode === 'plan' ? chalk.bgHex('#0284c7').bold.white(' PLAN MODE ') : chalk.bgHex('#7c3aed').bold.white(' VIBE MODE ');
103
+ const permsBadge = config.alwaysAllow ? chalk.hex('#10b981')('· perms: always-allow') : chalk.hex('#f59e0b')('· perms: ask-first');
104
+ console.log(`${commentHash} ${codeTitle} ${versionStr} ${modeBadge} ${permsBadge}`);
105
+ // Models line
106
+ const modelsLabel = chalk.hex('#64748b')('models:');
107
+ const activeModel = chalk.hex('#cbd5e1')(config.model);
108
+ console.log(`${commentHash} ${modelsLabel} ${activeModel}`);
109
+ // Working directory line
110
+ const dirDisplay = formatWorkingDir(config.workingDir);
111
+ console.log(`${commentHash} ${chalk.hex('#94a3b8')(dirDisplay)}`);
112
+ console.log();
113
+ }
114
+ /**
115
+ * Returns a styled horizontal divider string
116
+ */
117
+ export function getDividerString(width = Math.max(40, Math.min(process.stdout.columns || 80, 95))) {
118
+ return chalk.hex('#334155')('─'.repeat(width));
119
+ }
120
+ /**
121
+ * Renders the horizontal divider line
122
+ */
123
+ export function renderDivider() {
124
+ console.log(getDividerString());
125
+ }
126
+ /**
127
+ * Renders the status bar footer (e.g. "? for shortcuts")
128
+ */
129
+ export function renderFooter() {
130
+ const shortcutHint = chalk.hex('#64748b')('? for shortcuts');
131
+ console.log(shortcutHint);
132
+ }
133
+ //# sourceMappingURL=banner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../../src/cli/banner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAGpB,wEAAwE;AACxE,MAAM,aAAa,GAA6B;IAC9C,CAAC,EAAE;QACD,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;KACT;IACD,CAAC,EAAE;QACD,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;KACX;IACD,CAAC,EAAE;QACD,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;KACX;IACD,CAAC,EAAE;QACD,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;KACV;IACD,CAAC,EAAE;QACD,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,QAAQ;KACT;IACD,GAAG,EAAE;QACH,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;QACL,KAAK;KACN;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC9C,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC1B,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC3D,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAmB;IAC9C,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,sCAAsC;IAC1E,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,8CAA8C;IAEnF,MAAM,IAAI,GAAG,OAAO,CAAC;IACrB,MAAM,IAAI,GAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAE5C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,YAAY,GAAG,aAAa,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;QAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,IAAI,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACpC,MAAM,QAAQ,GAAG,CAAC,CAAC;IACnB,MAAM,aAAa,GAAG,YAAY,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAEpD,kBAAkB;IAClB,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAE1B,8BAA8B;IAC9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnE,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,WAAW,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,WAAW,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC;IAED,qBAAqB;IACrB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,aAAa;IAE5B,iBAAiB;IACjB,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC/I,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,oBAAoB,CAAC,CAAC;IACnI,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,IAAI,SAAS,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,EAAE,CAAC,CAAC;IAErF,cAAc;IACd,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC,CAAC;IAE5D,yBAAyB;IACzB,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,GAAG,WAAW,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAClE,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/F,OAAO,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,23 @@
1
+ export interface FilePickerItem {
2
+ name: string;
3
+ relativePath: string;
4
+ fullPath: string;
5
+ isDirectory: boolean;
6
+ }
7
+ export declare class FilePickerService {
8
+ /**
9
+ * Scans a directory and returns sorted directories and files
10
+ */
11
+ static listDirectory(baseDir: string, query?: string): {
12
+ currentDir: string;
13
+ items: FilePickerItem[];
14
+ };
15
+ /**
16
+ * Resolves and reads attached files in user prompt
17
+ */
18
+ static extractAndReadAttachments(prompt: string, baseDir: string): {
19
+ enhancedPrompt: string;
20
+ attachedFiles: string[];
21
+ };
22
+ }
23
+ //# sourceMappingURL=filePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filePicker.d.ts","sourceRoot":"","sources":["../../../src/cli/dialogs/filePicker.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,iBAAiB;IAC5B;;OAEG;WACW,aAAa,CACzB,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAW,GACjB;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,cAAc,EAAE,CAAA;KAAE;IAmFlD;;OAEG;WACW,yBAAyB,CACrC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,EAAE,CAAA;KAAE;CA6BvD"}
@@ -0,0 +1,106 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ export class FilePickerService {
4
+ /**
5
+ * Scans a directory and returns sorted directories and files
6
+ */
7
+ static listDirectory(baseDir, query = '') {
8
+ let targetDir = baseDir;
9
+ let filter = query;
10
+ // Handle relative paths inside query (e.g. @src/cli or @../)
11
+ if (query.includes('/') || query.includes('\\')) {
12
+ const parts = query.split(/[/\\]/);
13
+ filter = parts.pop() || '';
14
+ const subPath = parts.join(path.sep);
15
+ targetDir = path.resolve(baseDir, subPath);
16
+ }
17
+ if (!fs.existsSync(targetDir) || !fs.statSync(targetDir).isDirectory()) {
18
+ targetDir = baseDir;
19
+ }
20
+ const items = [];
21
+ // Add parent directory navigation if not root
22
+ const parentDir = path.dirname(targetDir);
23
+ if (parentDir !== targetDir) {
24
+ items.push({
25
+ name: '../',
26
+ relativePath: '../',
27
+ fullPath: parentDir,
28
+ isDirectory: true,
29
+ });
30
+ }
31
+ try {
32
+ const entries = fs.readdirSync(targetDir, { withFileTypes: true });
33
+ // Sort directories first, then files
34
+ const dirs = [];
35
+ const files = [];
36
+ for (const entry of entries) {
37
+ // Skip common large/binary/hidden folders from top-level clutter if not explicitly matching
38
+ if (entry.name === '.git' || entry.name === 'node_modules') {
39
+ if (!filter.toLowerCase().startsWith(entry.name.toLowerCase())) {
40
+ continue;
41
+ }
42
+ }
43
+ const fullPath = path.join(targetDir, entry.name);
44
+ const relFromBase = path.relative(baseDir, fullPath).replace(/\\/g, '/');
45
+ if (entry.isDirectory()) {
46
+ dirs.push({
47
+ name: entry.name + '/',
48
+ relativePath: relFromBase + '/',
49
+ fullPath,
50
+ isDirectory: true,
51
+ });
52
+ }
53
+ else {
54
+ files.push({
55
+ name: entry.name,
56
+ relativePath: relFromBase,
57
+ fullPath,
58
+ isDirectory: false,
59
+ });
60
+ }
61
+ }
62
+ dirs.sort((a, b) => a.name.localeCompare(b.name));
63
+ files.sort((a, b) => a.name.localeCompare(b.name));
64
+ const combined = [...dirs, ...files];
65
+ if (filter.trim()) {
66
+ const q = filter.toLowerCase().trim();
67
+ const filtered = combined.filter((i) => i.name === '../' || i.name.toLowerCase().includes(q));
68
+ return { currentDir: targetDir, items: [items[0], ...filtered.filter(i => i.name !== '../')].filter(Boolean) };
69
+ }
70
+ return { currentDir: targetDir, items: [...items, ...combined] };
71
+ }
72
+ catch {
73
+ return { currentDir: targetDir, items };
74
+ }
75
+ }
76
+ /**
77
+ * Resolves and reads attached files in user prompt
78
+ */
79
+ static extractAndReadAttachments(prompt, baseDir) {
80
+ // Regex matching @<path> tokens (e.g. @package.json, @src/core/agent.ts)
81
+ const attachmentRegex = /(?:^|\s)@([a-zA-Z0-9_.\-\/\\]+)/g;
82
+ const attachedFiles = [];
83
+ const attachmentsContent = [];
84
+ let match;
85
+ while ((match = attachmentRegex.exec(prompt)) !== null) {
86
+ const relativePath = match[1];
87
+ const fullPath = path.resolve(baseDir, relativePath);
88
+ if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {
89
+ try {
90
+ const content = fs.readFileSync(fullPath, 'utf-8');
91
+ attachedFiles.push(relativePath);
92
+ attachmentsContent.push(`[Attached File: ${relativePath}]\n\`\`\`\n${content}\n\`\`\``);
93
+ }
94
+ catch {
95
+ // Ignore unreadable files
96
+ }
97
+ }
98
+ }
99
+ if (attachmentsContent.length === 0) {
100
+ return { enhancedPrompt: prompt, attachedFiles: [] };
101
+ }
102
+ const enhancedPrompt = `${attachmentsContent.join('\n\n')}\n\nUser Question:\n${prompt}`;
103
+ return { enhancedPrompt, attachedFiles };
104
+ }
105
+ }
106
+ //# sourceMappingURL=filePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filePicker.js","sourceRoot":"","sources":["../../../src/cli/dialogs/filePicker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { AntriConfig, ModelInfo } from '../../types.js';
2
+ /**
3
+ * Interactive Model Picker Dialog matching refrence_model_picker.png
4
+ */
5
+ export declare function showModelPickerDialog(config: AntriConfig): Promise<ModelInfo | null>;
6
+ /**
7
+ * Handles the full model picker workflow
8
+ */
9
+ export declare function runModelPickerWorkflow(): Promise<void>;
10
+ //# sourceMappingURL=modelPicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelPicker.d.ts","sourceRoot":"","sources":["../../../src/cli/dialogs/modelPicker.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAMxD;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAqN1F;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAW5D"}
@@ -0,0 +1,205 @@
1
+ import readline from 'readline';
2
+ import chalk from 'chalk';
3
+ import { configManager } from '../../core/config.js';
4
+ import { getAvailableModels } from '../../providers/models.js';
5
+ import { PROVIDERS_LIST } from './providerPicker.js';
6
+ import { log, colors } from '../../utils/logger.js';
7
+ /**
8
+ * Interactive Model Picker Dialog matching refrence_model_picker.png
9
+ */
10
+ export async function showModelPickerDialog(config) {
11
+ const providerName = PROVIDERS_LIST.find((p) => p.id === config.provider)?.name || config.provider;
12
+ // Show quick loading indicator while fetching models from provider API
13
+ process.stdout.write(chalk.hex('#64748b')(`Loading models for ${providerName}...\r`));
14
+ const allModels = await getAvailableModels(config);
15
+ process.stdout.write('\x1b[2K\r'); // Clear loading line
16
+ return new Promise((resolve) => {
17
+ let searchQuery = '';
18
+ let selectedIndex = 0;
19
+ let renderedLines = 0;
20
+ // Find initial index matching current model if possible
21
+ const initialIdx = allModels.findIndex((m) => m.id === config.model);
22
+ if (initialIdx !== -1)
23
+ selectedIndex = initialIdx;
24
+ const stdin = process.stdin;
25
+ const stdout = process.stdout;
26
+ readline.emitKeypressEvents(stdin);
27
+ const isRawSupported = stdin.isTTY && typeof stdin.setRawMode === 'function';
28
+ if (isRawSupported) {
29
+ stdin.setRawMode(true);
30
+ }
31
+ stdin.resume();
32
+ stdout.write('\x1b[?25l'); // Hide cursor
33
+ const eraseDialog = () => {
34
+ if (renderedLines > 0) {
35
+ stdout.write('\x1b[2K\r');
36
+ for (let i = 1; i < renderedLines; i++) {
37
+ stdout.write('\x1b[1A\x1b[2K\r');
38
+ }
39
+ renderedLines = 0;
40
+ }
41
+ };
42
+ const getFilteredModels = () => {
43
+ if (!searchQuery.trim())
44
+ return allModels;
45
+ const q = searchQuery.toLowerCase().trim();
46
+ return allModels.filter((m) => m.name.toLowerCase().includes(q) ||
47
+ m.id.toLowerCase().includes(q) ||
48
+ m.category.toLowerCase().includes(q) ||
49
+ m.description.toLowerCase().includes(q));
50
+ };
51
+ const render = () => {
52
+ eraseDialog();
53
+ const filtered = getFilteredModels();
54
+ const totalCount = filtered.length;
55
+ if (selectedIndex >= totalCount)
56
+ selectedIndex = Math.max(0, totalCount - 1);
57
+ if (selectedIndex < 0)
58
+ selectedIndex = 0;
59
+ const lines = [];
60
+ // 1. Header matching refrence_model_picker.png
61
+ lines.push(chalk.bold.hex('#c084fc')('Select model'));
62
+ lines.push(chalk.hex('#94a3b8')(`Showing models for ${chalk.cyan(providerName)}. Sets the default for new sessions.`));
63
+ lines.push('');
64
+ // 2. Search input bar
65
+ const searchPrompt = chalk.bold.white('> ');
66
+ const searchDisplay = searchQuery.length
67
+ ? chalk.white(searchQuery) + chalk.bgWhite.black(' ')
68
+ : chalk.hex('#475569')('Type to search models...');
69
+ lines.push(`${searchPrompt}${searchDisplay}`);
70
+ lines.push('');
71
+ // 3. Paginated Model List (window of up to 10 visible items)
72
+ const pageSize = 10;
73
+ let startIdx = Math.max(0, Math.min(selectedIndex - Math.floor(pageSize / 2), totalCount - pageSize));
74
+ if (startIdx < 0)
75
+ startIdx = 0;
76
+ const visibleItems = filtered.slice(startIdx, startIdx + pageSize);
77
+ let lastCategory = '';
78
+ if (totalCount === 0) {
79
+ lines.push(chalk.hex('#64748b')(' (No models found matching your search)'));
80
+ }
81
+ else {
82
+ for (let i = 0; i < visibleItems.length; i++) {
83
+ const item = visibleItems[i];
84
+ const actualIndex = startIdx + i;
85
+ const isSelected = actualIndex === selectedIndex;
86
+ const isCurrent = item.id === config.model;
87
+ // Print category header if changed and not searching
88
+ if (item.category !== lastCategory && !searchQuery.trim()) {
89
+ lastCategory = item.category;
90
+ lines.push(chalk.hex('#64748b')(item.category));
91
+ }
92
+ const col1Width = 30;
93
+ const displayName = item.name.length > col1Width - 2 ? item.name.slice(0, col1Width - 3) + '...' : item.name;
94
+ const col1 = displayName.padEnd(col1Width);
95
+ const col2 = item.description;
96
+ const checkmark = isCurrent ? chalk.green(' √') : '';
97
+ if (isSelected) {
98
+ const rowContent = ` ${col1} ${col2}${checkmark} `;
99
+ lines.push(chalk.bgRgb(46, 41, 84).bold.white(rowContent));
100
+ }
101
+ else {
102
+ const nameCol = chalk.hex('#e2e8f0')(col1);
103
+ const descCol = chalk.hex('#64748b')(col2);
104
+ lines.push(` ${nameCol} ${descCol}${checkmark}`);
105
+ }
106
+ }
107
+ }
108
+ lines.push('');
109
+ // 4. Pagination status & controls footer
110
+ const endIdx = Math.min(startIdx + pageSize, totalCount);
111
+ const paginationInfo = totalCount > 0
112
+ ? `Showing ${startIdx + 1}-${endIdx} of ${totalCount}${startIdx > 0 ? ' · ↑ more' : ''}${endIdx < totalCount ? ' · ↓ more' : ''}`
113
+ : '0 models';
114
+ lines.push(chalk.hex('#64748b')(paginationInfo));
115
+ lines.push('');
116
+ lines.push(chalk.italic.hex('#64748b')('type to search · ↑/↓ navigate · enter to select · esc to cancel'));
117
+ stdout.write(lines.join('\n'));
118
+ renderedLines = lines.length;
119
+ };
120
+ const cleanup = () => {
121
+ eraseDialog();
122
+ stdin.removeListener('keypress', onKeypress);
123
+ if (isRawSupported) {
124
+ stdin.setRawMode(false);
125
+ }
126
+ stdout.write('\x1b[2K\r');
127
+ stdout.write('\x1b[?25h');
128
+ };
129
+ const onKeypress = (str, key) => {
130
+ if (!key) {
131
+ if (str) {
132
+ searchQuery += str;
133
+ selectedIndex = 0;
134
+ render();
135
+ }
136
+ return;
137
+ }
138
+ if (key.name === 'escape' || (key.ctrl && key.name === 'c')) {
139
+ cleanup();
140
+ resolve(null);
141
+ return;
142
+ }
143
+ if (key.name === 'up') {
144
+ const filtered = getFilteredModels();
145
+ if (filtered.length > 0) {
146
+ selectedIndex = (selectedIndex - 1 + filtered.length) % filtered.length;
147
+ render();
148
+ }
149
+ return;
150
+ }
151
+ if (key.name === 'down') {
152
+ const filtered = getFilteredModels();
153
+ if (filtered.length > 0) {
154
+ selectedIndex = (selectedIndex + 1) % filtered.length;
155
+ render();
156
+ }
157
+ return;
158
+ }
159
+ if (key.name === 'backspace') {
160
+ if (searchQuery.length > 0) {
161
+ searchQuery = searchQuery.slice(0, -1);
162
+ selectedIndex = 0;
163
+ render();
164
+ }
165
+ return;
166
+ }
167
+ if (key.name === 'return' || key.name === 'enter') {
168
+ const filtered = getFilteredModels();
169
+ if (filtered.length > 0) {
170
+ const chosen = filtered[selectedIndex];
171
+ cleanup();
172
+ resolve(chosen);
173
+ }
174
+ else {
175
+ cleanup();
176
+ resolve(null);
177
+ }
178
+ return;
179
+ }
180
+ // Regular character typed into search
181
+ if (str && !key.ctrl && !key.meta) {
182
+ searchQuery += str;
183
+ selectedIndex = 0;
184
+ render();
185
+ }
186
+ };
187
+ stdin.on('keypress', onKeypress);
188
+ render();
189
+ });
190
+ }
191
+ /**
192
+ * Handles the full model picker workflow
193
+ */
194
+ export async function runModelPickerWorkflow() {
195
+ const currentConfig = configManager.get();
196
+ const chosenModel = await showModelPickerDialog(currentConfig);
197
+ if (chosenModel) {
198
+ configManager.set('model', chosenModel.id);
199
+ if (chosenModel.provider !== currentConfig.provider) {
200
+ configManager.setProvider(chosenModel.provider, chosenModel.id);
201
+ }
202
+ log.success(`Active model switched to ${colors.primary(chosenModel.name)} (${chalk.cyan(chosenModel.id)})`);
203
+ }
204
+ }
205
+ //# sourceMappingURL=modelPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelPicker.js","sourceRoot":"","sources":["../../../src/cli/dialogs/modelPicker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export declare class ProfilePicker {
2
+ private profiles;
3
+ private searchQuery;
4
+ private selectedIndex;
5
+ private renderedLines;
6
+ constructor();
7
+ run(): Promise<string | null>;
8
+ private promptForNewProfileName;
9
+ }
10
+ export declare function runProfilePickerWorkflow(): Promise<string | null>;
11
+ //# sourceMappingURL=profilePicker.d.ts.map