project-compass 3.9.5 → 3.9.6
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/commands.md +1 -1
- package/package.json +1 -1
- package/src/cli.js +1 -1
- package/src/components/AIHorizon.js +39 -10
package/commands.md
CHANGED
|
@@ -20,7 +20,7 @@ This document lists all supported languages, frameworks, and their built-in comm
|
|
|
20
20
|
| **Shift+S** | Toggle **Structure Guide** (Saved to config) |
|
|
21
21
|
| **Shift+X** | **Clear** active task output logs |
|
|
22
22
|
| **Shift+E** | **Export** logs to a timestamped `.txt` file |
|
|
23
|
-
| **Shift+L** | **Rerun** the last executed command |
|
|
23
|
+
| **Shift+L** | **Rerun** the last executed command |\n| PgUp / PgDn | Jump full project page |
|
|
24
24
|
| **Shift+C** | Add a **Custom Command** (`label|cmd`) in detail view |
|
|
25
25
|
| **Shift+Q** | **Quit** application (Confirms if tasks are running) |
|
|
26
26
|
| Shift+↑ / ↓ | Scroll output logs |
|
package/package.json
CHANGED
package/src/cli.js
CHANGED
|
@@ -565,7 +565,7 @@ function Compass({rootPath, initialView = 'navigator'}) {
|
|
|
565
565
|
create(Box, {key: 'projects-row', marginTop: 1, flexDirection: 'row', alignItems: 'stretch', width: '100%', flexWrap: 'wrap'},
|
|
566
566
|
create(Box, {flexGrow: 1, flexBasis: 0, minWidth: PROJECTS_MIN_WIDTH, marginRight: 1, borderStyle: 'round', borderColor: 'magenta', padding: 1},
|
|
567
567
|
create(Text, {bold: true, color: 'magenta'}, 'Projects'),
|
|
568
|
-
create(Box, {flexDirection: 'column', marginTop: 1}, create(Navigator, {projects, selectedIndex, rootPath, loading, error, maxVisibleProjects:
|
|
568
|
+
create(Box, {flexDirection: 'column', marginTop: 1}, create(Navigator, {projects, selectedIndex, rootPath, loading, error, maxVisibleProjects: 3}))
|
|
569
569
|
),
|
|
570
570
|
create(Box, {flexGrow: 1.3, flexBasis: 0, minWidth: DETAILS_MIN_WIDTH, borderStyle: 'round', borderColor: 'cyan', padding: 1, flexDirection: 'column'}, create(Text, {bold: true, color: 'cyan'}, 'Details'), ...detailContent)
|
|
571
571
|
),
|
|
@@ -4,20 +4,37 @@ import {Box, Text, useInput} from 'ink';
|
|
|
4
4
|
const create = React.createElement;
|
|
5
5
|
|
|
6
6
|
const AI_PROVIDERS = [
|
|
7
|
-
{ id: '
|
|
7
|
+
{ id: 'openrouter', name: 'OpenRouter (DeepSeek/Qwen)', endpoint: 'openrouter.ai' },
|
|
8
8
|
{ id: 'gemini', name: 'Google Gemini', endpoint: 'api.google.com' },
|
|
9
|
-
{ id: 'claude', name: 'Anthropic Claude', endpoint: 'api.anthropic.com' }
|
|
9
|
+
{ id: 'claude', name: 'Anthropic Claude', endpoint: 'api.anthropic.com' },
|
|
10
|
+
{ id: 'ollama', name: 'Ollama (Local)', endpoint: 'localhost:11434' }
|
|
10
11
|
];
|
|
11
12
|
|
|
12
13
|
const AIHorizon = memo(({rootPath, selectedProject, onRunCommand, CursorText}) => {
|
|
13
|
-
const [step, setStep] = useState('select');
|
|
14
|
+
const [step, setStep] = useState('select'); // select | model | analyze
|
|
14
15
|
const [providerIdx, setProviderIdx] = useState(0);
|
|
16
|
+
const [model, setModel] = useState('deepseek-r1');
|
|
17
|
+
const [cursor, setCursor] = useState(model.length);
|
|
15
18
|
|
|
16
19
|
useInput((input, key) => {
|
|
17
20
|
if (step === 'select') {
|
|
18
21
|
if (key.upArrow) setProviderIdx(p => (p - 1 + AI_PROVIDERS.length) % AI_PROVIDERS.length);
|
|
19
22
|
if (key.downArrow) setProviderIdx(p => (p + 1) % AI_PROVIDERS.length);
|
|
23
|
+
if (key.return) setStep('model');
|
|
24
|
+
} else if (step === 'model') {
|
|
20
25
|
if (key.return) setStep('analyze');
|
|
26
|
+
if (key.escape) setStep('select');
|
|
27
|
+
if (key.backspace || key.delete) {
|
|
28
|
+
if (cursor > 0) {
|
|
29
|
+
setModel(prev => prev.slice(0, cursor - 1) + prev.slice(cursor));
|
|
30
|
+
setCursor(c => Math.max(0, c - 1));
|
|
31
|
+
}
|
|
32
|
+
} else if (input && !key.ctrl && !key.meta) {
|
|
33
|
+
setModel(prev => prev.slice(0, cursor) + input + prev.slice(cursor));
|
|
34
|
+
setCursor(c => c + input.length);
|
|
35
|
+
}
|
|
36
|
+
} else if (step === 'analyze') {
|
|
37
|
+
if (key.escape) setStep('model');
|
|
21
38
|
}
|
|
22
39
|
});
|
|
23
40
|
|
|
@@ -25,22 +42,34 @@ const AIHorizon = memo(({rootPath, selectedProject, onRunCommand, CursorText}) =
|
|
|
25
42
|
Box,
|
|
26
43
|
{flexDirection: 'column', borderStyle: 'double', borderColor: 'magenta', padding: 1, width: '100%'},
|
|
27
44
|
create(Text, {bold: true, color: 'magenta'}, '🤖 AI Horizon | Intelligent Workspace Analysis'),
|
|
28
|
-
create(Text, {dimColor: true, marginBottom: 1}, '
|
|
45
|
+
create(Text, {dimColor: true, marginBottom: 1}, 'Directly analyzing ' + (selectedProject ? selectedProject.name : 'Workspace')),
|
|
29
46
|
|
|
30
47
|
step === 'select' && create(
|
|
31
48
|
Box,
|
|
32
49
|
{flexDirection: 'column'},
|
|
33
|
-
create(Text, {bold: true, marginBottom: 1}, 'Step 1: Select
|
|
34
|
-
...AI_PROVIDERS.map((p, i) => create(Text, {key: p.id, color: i === providerIdx ? 'cyan' : 'white'}, (i === providerIdx ? '→ ' : ' ') + p.name
|
|
35
|
-
create(Text, {dimColor: true, marginTop: 1}, 'Enter:
|
|
50
|
+
create(Text, {bold: true, marginBottom: 1}, 'Step 1: Select Intelligence Engine'),
|
|
51
|
+
...AI_PROVIDERS.map((p, i) => create(Text, {key: p.id, color: i === providerIdx ? 'cyan' : 'white'}, (i === providerIdx ? '→ ' : ' ') + p.name)),
|
|
52
|
+
create(Text, {dimColor: true, marginTop: 1}, 'Enter: Continue, Esc: Return')
|
|
53
|
+
),
|
|
54
|
+
|
|
55
|
+
step === 'model' && create(
|
|
56
|
+
Box,
|
|
57
|
+
{flexDirection: 'column'},
|
|
58
|
+
create(Text, {bold: true, color: 'yellow', marginBottom: 1}, 'Step 2: Intelligence Model'),
|
|
59
|
+
create(Box, {flexDirection: 'row'},
|
|
60
|
+
create(Text, null, 'Model ID: '),
|
|
61
|
+
create(CursorText, {value: model, cursorIndex: cursor})
|
|
62
|
+
),
|
|
63
|
+
create(Text, {dimColor: true, marginTop: 1}, 'Enter: Analyze Project, Esc: Back')
|
|
36
64
|
),
|
|
37
65
|
|
|
38
66
|
step === 'analyze' && create(
|
|
39
67
|
Box,
|
|
40
68
|
{flexDirection: 'column'},
|
|
41
|
-
create(Text, {bold: true, color: '
|
|
42
|
-
create(Text, null, '
|
|
43
|
-
create(Text, {marginTop: 1}, '
|
|
69
|
+
create(Text, {bold: true, color: 'green', marginBottom: 1}, 'Analyzing project DNA with ' + model + '...'),
|
|
70
|
+
create(Text, null, ' 💡 AI Suggestion for ' + (selectedProject ? selectedProject.name : 'root') + ':'),
|
|
71
|
+
create(Text, {color: 'cyan', marginTop: 1}, ' > suggested: ' + (selectedProject ? 'npm run dev' : 'project-compass --dir .')),
|
|
72
|
+
create(Text, {dimColor: true, marginTop: 1}, 'Press Shift+C to save this command, Esc to go back.')
|
|
44
73
|
)
|
|
45
74
|
);
|
|
46
75
|
});
|