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.
- package/README.md +92 -0
- package/bin/antri.js +2 -0
- package/dist/cli/banner.d.ts +22 -0
- package/dist/cli/banner.d.ts.map +1 -0
- package/dist/cli/banner.js +133 -0
- package/dist/cli/banner.js.map +1 -0
- package/dist/cli/dialogs/filePicker.d.ts +23 -0
- package/dist/cli/dialogs/filePicker.d.ts.map +1 -0
- package/dist/cli/dialogs/filePicker.js +106 -0
- package/dist/cli/dialogs/filePicker.js.map +1 -0
- package/dist/cli/dialogs/modelPicker.d.ts +10 -0
- package/dist/cli/dialogs/modelPicker.d.ts.map +1 -0
- package/dist/cli/dialogs/modelPicker.js +205 -0
- package/dist/cli/dialogs/modelPicker.js.map +1 -0
- package/dist/cli/dialogs/profilePicker.d.ts +11 -0
- package/dist/cli/dialogs/profilePicker.d.ts.map +1 -0
- package/dist/cli/dialogs/profilePicker.js +185 -0
- package/dist/cli/dialogs/profilePicker.js.map +1 -0
- package/dist/cli/dialogs/providerPicker.d.ts +19 -0
- package/dist/cli/dialogs/providerPicker.d.ts.map +1 -0
- package/dist/cli/dialogs/providerPicker.js +205 -0
- package/dist/cli/dialogs/providerPicker.js.map +1 -0
- package/dist/cli/prompt.d.ts +3 -0
- package/dist/cli/prompt.d.ts.map +1 -0
- package/dist/cli/prompt.js +50 -0
- package/dist/cli/prompt.js.map +1 -0
- package/dist/cli/promptToolkit.d.ts +14 -0
- package/dist/cli/promptToolkit.d.ts.map +1 -0
- package/dist/cli/promptToolkit.js +389 -0
- package/dist/cli/promptToolkit.js.map +1 -0
- package/dist/cli/renderer.d.ts +21 -0
- package/dist/cli/renderer.d.ts.map +1 -0
- package/dist/cli/renderer.js +97 -0
- package/dist/cli/renderer.js.map +1 -0
- package/dist/cli/shortcuts.d.ts +13 -0
- package/dist/cli/shortcuts.d.ts.map +1 -0
- package/dist/cli/shortcuts.js +414 -0
- package/dist/cli/shortcuts.js.map +1 -0
- package/dist/core/agent.d.ts +15 -0
- package/dist/core/agent.d.ts.map +1 -0
- package/dist/core/agent.js +232 -0
- package/dist/core/agent.js.map +1 -0
- package/dist/core/citations.d.ts +19 -0
- package/dist/core/citations.d.ts.map +1 -0
- package/dist/core/citations.js +40 -0
- package/dist/core/citations.js.map +1 -0
- package/dist/core/config.d.ts +16 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +172 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/crawler.d.ts +18 -0
- package/dist/core/crawler.d.ts.map +1 -0
- package/dist/core/crawler.js +83 -0
- package/dist/core/crawler.js.map +1 -0
- package/dist/core/debugger.d.ts +20 -0
- package/dist/core/debugger.d.ts.map +1 -0
- package/dist/core/debugger.js +105 -0
- package/dist/core/debugger.js.map +1 -0
- package/dist/core/dialectic.d.ts +23 -0
- package/dist/core/dialectic.d.ts.map +1 -0
- package/dist/core/dialectic.js +300 -0
- package/dist/core/dialectic.js.map +1 -0
- package/dist/core/goalLoop.d.ts +14 -0
- package/dist/core/goalLoop.d.ts.map +1 -0
- package/dist/core/goalLoop.js +104 -0
- package/dist/core/goalLoop.js.map +1 -0
- package/dist/core/history.d.ts +13 -0
- package/dist/core/history.d.ts.map +1 -0
- package/dist/core/history.js +53 -0
- package/dist/core/history.js.map +1 -0
- package/dist/core/metaOptimizer.d.ts +27 -0
- package/dist/core/metaOptimizer.d.ts.map +1 -0
- package/dist/core/metaOptimizer.js +98 -0
- package/dist/core/metaOptimizer.js.map +1 -0
- package/dist/core/sandbox.d.ts +29 -0
- package/dist/core/sandbox.d.ts.map +1 -0
- package/dist/core/sandbox.js +141 -0
- package/dist/core/sandbox.js.map +1 -0
- package/dist/core/scraper.d.ts +22 -0
- package/dist/core/scraper.d.ts.map +1 -0
- package/dist/core/scraper.js +180 -0
- package/dist/core/scraper.js.map +1 -0
- package/dist/core/search.d.ts +27 -0
- package/dist/core/search.d.ts.map +1 -0
- package/dist/core/search.js +222 -0
- package/dist/core/search.js.map +1 -0
- package/dist/core/skillSynthesizer.d.ts +43 -0
- package/dist/core/skillSynthesizer.d.ts.map +1 -0
- package/dist/core/skillSynthesizer.js +147 -0
- package/dist/core/skillSynthesizer.js.map +1 -0
- package/dist/core/tools.d.ts +12 -0
- package/dist/core/tools.d.ts.map +1 -0
- package/dist/core/tools.js +467 -0
- package/dist/core/tools.js.map +1 -0
- package/dist/core/updater.d.ts +9 -0
- package/dist/core/updater.d.ts.map +1 -0
- package/dist/core/updater.js +63 -0
- package/dist/core/updater.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +92 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/consolidation.d.ts +17 -0
- package/dist/memory/consolidation.d.ts.map +1 -0
- package/dist/memory/consolidation.js +42 -0
- package/dist/memory/consolidation.js.map +1 -0
- package/dist/memory/episodic.d.ts +15 -0
- package/dist/memory/episodic.d.ts.map +1 -0
- package/dist/memory/episodic.js +97 -0
- package/dist/memory/episodic.js.map +1 -0
- package/dist/memory/manager.d.ts +24 -0
- package/dist/memory/manager.d.ts.map +1 -0
- package/dist/memory/manager.js +97 -0
- package/dist/memory/manager.js.map +1 -0
- package/dist/memory/profile.d.ts +21 -0
- package/dist/memory/profile.d.ts.map +1 -0
- package/dist/memory/profile.js +111 -0
- package/dist/memory/profile.js.map +1 -0
- package/dist/memory/semantic.d.ts +24 -0
- package/dist/memory/semantic.d.ts.map +1 -0
- package/dist/memory/semantic.js +102 -0
- package/dist/memory/semantic.js.map +1 -0
- package/dist/memory/types.d.ts +45 -0
- package/dist/memory/types.d.ts.map +1 -0
- package/dist/memory/types.js +2 -0
- package/dist/memory/types.js.map +1 -0
- package/dist/memory/vectorStore.d.ts +18 -0
- package/dist/memory/vectorStore.d.ts.map +1 -0
- package/dist/memory/vectorStore.js +103 -0
- package/dist/memory/vectorStore.js.map +1 -0
- package/dist/profiles/profileManager.d.ts +25 -0
- package/dist/profiles/profileManager.d.ts.map +1 -0
- package/dist/profiles/profileManager.js +205 -0
- package/dist/profiles/profileManager.js.map +1 -0
- package/dist/providers/anthropic.d.ts +14 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +80 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +7 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +2 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/gemini.d.ts +14 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +77 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/index.d.ts +4 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +65 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/mock.d.ts +8 -0
- package/dist/providers/mock.d.ts.map +1 -0
- package/dist/providers/mock.js +62 -0
- package/dist/providers/mock.js.map +1 -0
- package/dist/providers/models.d.ts +8 -0
- package/dist/providers/models.d.ts.map +1 -0
- package/dist/providers/models.js +403 -0
- package/dist/providers/models.js.map +1 -0
- package/dist/providers/openai.d.ts +18 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +162 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/types.d.ts +116 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/logger.d.ts +23 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +26 -0
- package/dist/utils/logger.js.map +1 -0
- 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,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
|