midas-mcp 1.2.0 → 1.3.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/dist/ai.d.ts +14 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +199 -0
- package/dist/ai.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +101 -0
- package/dist/config.js.map +1 -0
- package/dist/cursor.d.ts +22 -0
- package/dist/cursor.d.ts.map +1 -0
- package/dist/cursor.js +123 -0
- package/dist/cursor.js.map +1 -0
- package/dist/events.d.ts +20 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +68 -0
- package/dist/events.js.map +1 -0
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +147 -127
- package/dist/tui.js.map +1 -1
- package/package.json +1 -1
package/dist/ai.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface CodebaseContext {
|
|
2
|
+
files: string[];
|
|
3
|
+
summary: string;
|
|
4
|
+
techStack: string[];
|
|
5
|
+
suggestedNextStep: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function analyzeCodebase(projectPath: string): Promise<CodebaseContext>;
|
|
8
|
+
export declare function generateSmartPrompt(projectPath: string, phase: string, step: string, context?: CodebaseContext): Promise<string>;
|
|
9
|
+
export declare function detectStepCompletion(projectPath: string, currentStep: string): Promise<{
|
|
10
|
+
completed: boolean;
|
|
11
|
+
confidence: number;
|
|
12
|
+
reason: string;
|
|
13
|
+
}>;
|
|
14
|
+
//# sourceMappingURL=ai.d.ts.map
|
package/dist/ai.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AAkFA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAsEnF;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,MAAM,CAAC,CA+BjB;AAED,wBAAsB,oBAAoB,CACxC,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAiCrE"}
|
package/dist/ai.js
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { getApiKey } from './config.js';
|
|
2
|
+
import { readdirSync, readFileSync } from 'fs';
|
|
3
|
+
import { join, extname } from 'path';
|
|
4
|
+
// Simple HTTP client for Anthropic API (no external dependency)
|
|
5
|
+
async function callClaude(prompt, systemPrompt) {
|
|
6
|
+
const apiKey = getApiKey();
|
|
7
|
+
if (!apiKey) {
|
|
8
|
+
throw new Error('No API key configured');
|
|
9
|
+
}
|
|
10
|
+
const response = await fetch('https://api.anthropic.com/v1/messages', {
|
|
11
|
+
method: 'POST',
|
|
12
|
+
headers: {
|
|
13
|
+
'Content-Type': 'application/json',
|
|
14
|
+
'x-api-key': apiKey,
|
|
15
|
+
'anthropic-version': '2023-06-01',
|
|
16
|
+
},
|
|
17
|
+
body: JSON.stringify({
|
|
18
|
+
model: 'claude-sonnet-4-20250514',
|
|
19
|
+
max_tokens: 1024,
|
|
20
|
+
system: systemPrompt || 'You are Midas, an elite vibecoding coach. Be concise and actionable.',
|
|
21
|
+
messages: [{ role: 'user', content: prompt }],
|
|
22
|
+
}),
|
|
23
|
+
});
|
|
24
|
+
if (!response.ok) {
|
|
25
|
+
const error = await response.text();
|
|
26
|
+
throw new Error(`API error: ${response.status} - ${error}`);
|
|
27
|
+
}
|
|
28
|
+
const data = await response.json();
|
|
29
|
+
return data.content[0]?.text || '';
|
|
30
|
+
}
|
|
31
|
+
// Scan codebase for context
|
|
32
|
+
function scanCodebase(projectPath, maxFiles = 20) {
|
|
33
|
+
const files = [];
|
|
34
|
+
const importantExtensions = ['.ts', '.tsx', '.js', '.jsx', '.py', '.go', '.rs', '.swift'];
|
|
35
|
+
const ignoreDirs = ['node_modules', '.git', 'dist', 'build', '.next', '__pycache__'];
|
|
36
|
+
function scan(dir, depth = 0) {
|
|
37
|
+
if (depth > 3 || files.length >= maxFiles)
|
|
38
|
+
return;
|
|
39
|
+
try {
|
|
40
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
41
|
+
for (const entry of entries) {
|
|
42
|
+
if (files.length >= maxFiles)
|
|
43
|
+
break;
|
|
44
|
+
if (entry.name.startsWith('.'))
|
|
45
|
+
continue;
|
|
46
|
+
if (ignoreDirs.includes(entry.name))
|
|
47
|
+
continue;
|
|
48
|
+
const fullPath = join(dir, entry.name);
|
|
49
|
+
if (entry.isDirectory()) {
|
|
50
|
+
scan(fullPath, depth + 1);
|
|
51
|
+
}
|
|
52
|
+
else if (entry.isFile()) {
|
|
53
|
+
const ext = extname(entry.name);
|
|
54
|
+
if (importantExtensions.includes(ext)) {
|
|
55
|
+
files.push(fullPath);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Permission denied or other error
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
scan(projectPath);
|
|
65
|
+
return files;
|
|
66
|
+
}
|
|
67
|
+
function getFileContent(filePath, maxLines = 50) {
|
|
68
|
+
try {
|
|
69
|
+
const content = readFileSync(filePath, 'utf-8');
|
|
70
|
+
const lines = content.split('\n').slice(0, maxLines);
|
|
71
|
+
return lines.join('\n');
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return '';
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export async function analyzeCodebase(projectPath) {
|
|
78
|
+
const apiKey = getApiKey();
|
|
79
|
+
// Get file list
|
|
80
|
+
const files = scanCodebase(projectPath);
|
|
81
|
+
if (!apiKey) {
|
|
82
|
+
// Return basic analysis without AI
|
|
83
|
+
const techStack = [];
|
|
84
|
+
// Detect tech stack from files
|
|
85
|
+
const hasPackageJson = files.some(f => f.endsWith('package.json'));
|
|
86
|
+
const hasTsConfig = files.some(f => f.endsWith('tsconfig.json'));
|
|
87
|
+
const hasRequirements = files.some(f => f.endsWith('requirements.txt'));
|
|
88
|
+
const hasCargoToml = files.some(f => f.endsWith('Cargo.toml'));
|
|
89
|
+
if (hasPackageJson)
|
|
90
|
+
techStack.push('Node.js');
|
|
91
|
+
if (hasTsConfig)
|
|
92
|
+
techStack.push('TypeScript');
|
|
93
|
+
if (hasRequirements)
|
|
94
|
+
techStack.push('Python');
|
|
95
|
+
if (hasCargoToml)
|
|
96
|
+
techStack.push('Rust');
|
|
97
|
+
if (files.some(f => f.includes('react') || f.endsWith('.tsx') || f.endsWith('.jsx')))
|
|
98
|
+
techStack.push('React');
|
|
99
|
+
return {
|
|
100
|
+
files,
|
|
101
|
+
summary: `Found ${files.length} source files`,
|
|
102
|
+
techStack,
|
|
103
|
+
suggestedNextStep: 'Continue with current phase',
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
// Build context for AI
|
|
107
|
+
const fileList = files.map(f => f.replace(projectPath, '')).join('\n');
|
|
108
|
+
const sampleContent = files.slice(0, 5).map(f => {
|
|
109
|
+
const content = getFileContent(f);
|
|
110
|
+
return `--- ${f.replace(projectPath, '')} ---\n${content}`;
|
|
111
|
+
}).join('\n\n');
|
|
112
|
+
try {
|
|
113
|
+
const response = await callClaude(`Analyze this codebase and provide:
|
|
114
|
+
1. A one-line summary of what it does
|
|
115
|
+
2. The tech stack (list)
|
|
116
|
+
3. The most important next step for production readiness
|
|
117
|
+
|
|
118
|
+
Files:
|
|
119
|
+
${fileList}
|
|
120
|
+
|
|
121
|
+
Sample content:
|
|
122
|
+
${sampleContent}
|
|
123
|
+
|
|
124
|
+
Respond in JSON format:
|
|
125
|
+
{"summary": "...", "techStack": ["..."], "suggestedNextStep": "..."}`, 'You are a senior engineer analyzing a codebase. Be concise. Respond only with valid JSON.');
|
|
126
|
+
const parsed = JSON.parse(response);
|
|
127
|
+
return {
|
|
128
|
+
files,
|
|
129
|
+
summary: parsed.summary || `Found ${files.length} source files`,
|
|
130
|
+
techStack: parsed.techStack || [],
|
|
131
|
+
suggestedNextStep: parsed.suggestedNextStep || 'Continue with current phase',
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
return {
|
|
136
|
+
files,
|
|
137
|
+
summary: `Found ${files.length} source files`,
|
|
138
|
+
techStack: [],
|
|
139
|
+
suggestedNextStep: 'Continue with current phase',
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
export async function generateSmartPrompt(projectPath, phase, step, context) {
|
|
144
|
+
const apiKey = getApiKey();
|
|
145
|
+
if (!apiKey) {
|
|
146
|
+
return ''; // Fall back to default prompts
|
|
147
|
+
}
|
|
148
|
+
const codebaseContext = context || await analyzeCodebase(projectPath);
|
|
149
|
+
try {
|
|
150
|
+
const response = await callClaude(`Generate a specific, actionable prompt for a developer to paste into Cursor AI.
|
|
151
|
+
|
|
152
|
+
Project: ${codebaseContext.summary}
|
|
153
|
+
Tech stack: ${codebaseContext.techStack.join(', ')}
|
|
154
|
+
Current phase: ${phase}
|
|
155
|
+
Current step: ${step}
|
|
156
|
+
|
|
157
|
+
The prompt should:
|
|
158
|
+
1. Be specific to THIS codebase
|
|
159
|
+
2. Reference actual files/patterns if known
|
|
160
|
+
3. Be immediately actionable
|
|
161
|
+
4. Follow the Elite Vibecoding methodology
|
|
162
|
+
|
|
163
|
+
Respond with just the prompt text, no explanation.`, 'You are Midas, an elite vibecoding coach. Generate prompts that are specific, actionable, and context-aware.');
|
|
164
|
+
return response.trim();
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return '';
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
export async function detectStepCompletion(projectPath, currentStep) {
|
|
171
|
+
const apiKey = getApiKey();
|
|
172
|
+
if (!apiKey) {
|
|
173
|
+
return { completed: false, confidence: 0, reason: 'No API key' };
|
|
174
|
+
}
|
|
175
|
+
const context = await analyzeCodebase(projectPath);
|
|
176
|
+
try {
|
|
177
|
+
const response = await callClaude(`Based on this codebase analysis, determine if the following step is complete:
|
|
178
|
+
|
|
179
|
+
Step: ${currentStep}
|
|
180
|
+
Files: ${context.files.length} source files
|
|
181
|
+
Tech stack: ${context.techStack.join(', ')}
|
|
182
|
+
|
|
183
|
+
Consider:
|
|
184
|
+
- IDEA: Is there a clear project purpose?
|
|
185
|
+
- RESEARCH: Are there docs about alternatives?
|
|
186
|
+
- BRAINLIFT: Is there a brainlift.md with insights?
|
|
187
|
+
- PRD: Is there a prd.md with requirements?
|
|
188
|
+
- GAMEPLAN: Is there a gameplan.md with plan?
|
|
189
|
+
- BUILD steps: Is there working code with tests?
|
|
190
|
+
|
|
191
|
+
Respond in JSON:
|
|
192
|
+
{"completed": true/false, "confidence": 0-100, "reason": "..."}`, 'You are analyzing project completeness. Be conservative - only mark complete if clearly done.');
|
|
193
|
+
return JSON.parse(response);
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
return { completed: false, confidence: 0, reason: 'Analysis failed' };
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
//# sourceMappingURL=ai.js.map
|
package/dist/ai.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface MidasConfig {
|
|
2
|
+
anthropicApiKey?: string;
|
|
3
|
+
createdAt: string;
|
|
4
|
+
lastUsed: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function loadConfig(): MidasConfig;
|
|
7
|
+
export declare function saveConfig(config: MidasConfig): void;
|
|
8
|
+
export declare function getApiKey(): string | undefined;
|
|
9
|
+
export declare function hasApiKey(): boolean;
|
|
10
|
+
export declare function promptForApiKey(): Promise<string | undefined>;
|
|
11
|
+
export declare function ensureApiKey(): Promise<string | undefined>;
|
|
12
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAQD,wBAAgB,UAAU,IAAI,WAAW,CAmBxC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAIpD;AAED,wBAAgB,SAAS,IAAI,MAAM,GAAG,SAAS,CAS9C;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA2CnE;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAWhE"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
import { createInterface } from 'readline';
|
|
5
|
+
const CONFIG_DIR = join(homedir(), '.midas');
|
|
6
|
+
const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
|
|
7
|
+
function ensureConfigDir() {
|
|
8
|
+
if (!existsSync(CONFIG_DIR)) {
|
|
9
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function loadConfig() {
|
|
13
|
+
ensureConfigDir();
|
|
14
|
+
if (!existsSync(CONFIG_FILE)) {
|
|
15
|
+
return {
|
|
16
|
+
createdAt: new Date().toISOString(),
|
|
17
|
+
lastUsed: new Date().toISOString(),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const raw = readFileSync(CONFIG_FILE, 'utf-8');
|
|
22
|
+
return JSON.parse(raw);
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return {
|
|
26
|
+
createdAt: new Date().toISOString(),
|
|
27
|
+
lastUsed: new Date().toISOString(),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
export function saveConfig(config) {
|
|
32
|
+
ensureConfigDir();
|
|
33
|
+
config.lastUsed = new Date().toISOString();
|
|
34
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2));
|
|
35
|
+
}
|
|
36
|
+
export function getApiKey() {
|
|
37
|
+
// Check env var first
|
|
38
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
39
|
+
return process.env.ANTHROPIC_API_KEY;
|
|
40
|
+
}
|
|
41
|
+
// Then check config
|
|
42
|
+
const config = loadConfig();
|
|
43
|
+
return config.anthropicApiKey;
|
|
44
|
+
}
|
|
45
|
+
export function hasApiKey() {
|
|
46
|
+
return !!getApiKey();
|
|
47
|
+
}
|
|
48
|
+
export async function promptForApiKey() {
|
|
49
|
+
const rl = createInterface({
|
|
50
|
+
input: process.stdin,
|
|
51
|
+
output: process.stdout,
|
|
52
|
+
});
|
|
53
|
+
return new Promise((resolve) => {
|
|
54
|
+
console.log('\n');
|
|
55
|
+
console.log(' ┌─────────────────────────────────────────────────┐');
|
|
56
|
+
console.log(' │ MIDAS - First Time Setup │');
|
|
57
|
+
console.log(' ├─────────────────────────────────────────────────┤');
|
|
58
|
+
console.log(' │ │');
|
|
59
|
+
console.log(' │ For AI-powered features (smart prompts, │');
|
|
60
|
+
console.log(' │ codebase analysis, auto-detection), Midas │');
|
|
61
|
+
console.log(' │ needs an Anthropic API key. │');
|
|
62
|
+
console.log(' │ │');
|
|
63
|
+
console.log(' │ Get one at: console.anthropic.com │');
|
|
64
|
+
console.log(' │ │');
|
|
65
|
+
console.log(' │ This is optional. Press Enter to skip. │');
|
|
66
|
+
console.log(' │ │');
|
|
67
|
+
console.log(' └─────────────────────────────────────────────────┘');
|
|
68
|
+
console.log('');
|
|
69
|
+
rl.question(' Anthropic API Key: ', (answer) => {
|
|
70
|
+
rl.close();
|
|
71
|
+
const key = answer.trim();
|
|
72
|
+
if (key && key.startsWith('sk-ant-')) {
|
|
73
|
+
const config = loadConfig();
|
|
74
|
+
config.anthropicApiKey = key;
|
|
75
|
+
saveConfig(config);
|
|
76
|
+
console.log('\n ✓ API key saved to ~/.midas/config.json\n');
|
|
77
|
+
resolve(key);
|
|
78
|
+
}
|
|
79
|
+
else if (key) {
|
|
80
|
+
console.log('\n ⚠ Invalid key format. Skipping.\n');
|
|
81
|
+
resolve(undefined);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
console.log('\n Skipped. You can add it later in ~/.midas/config.json\n');
|
|
85
|
+
resolve(undefined);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
export async function ensureApiKey() {
|
|
91
|
+
const existing = getApiKey();
|
|
92
|
+
if (existing)
|
|
93
|
+
return existing;
|
|
94
|
+
// Check if this is first run
|
|
95
|
+
const config = loadConfig();
|
|
96
|
+
if (!config.anthropicApiKey && !process.env.ANTHROPIC_API_KEY) {
|
|
97
|
+
return promptForApiKey();
|
|
98
|
+
}
|
|
99
|
+
return undefined;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/cursor.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface ChatMessage {
|
|
2
|
+
type: 'user' | 'assistant';
|
|
3
|
+
text: string;
|
|
4
|
+
bubbleId?: string;
|
|
5
|
+
timestamp?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface CursorConversation {
|
|
8
|
+
composerId: string;
|
|
9
|
+
messages: ChatMessage[];
|
|
10
|
+
createdAt?: number;
|
|
11
|
+
isAgentic?: boolean;
|
|
12
|
+
model?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function isCursorAvailable(): boolean;
|
|
15
|
+
export declare function getRecentConversationIds(limit?: number): string[];
|
|
16
|
+
export declare function getConversation(composerId: string): CursorConversation | null;
|
|
17
|
+
export declare function getLatestConversation(): CursorConversation | null;
|
|
18
|
+
export declare function getRecentMessages(limit?: number): ChatMessage[];
|
|
19
|
+
export declare function watchConversations(callback: (conv: CursorConversation) => void, pollInterval?: number): () => void;
|
|
20
|
+
export declare function extractMidasToolCalls(messages: ChatMessage[]): string[];
|
|
21
|
+
export declare function getConversationSummary(conv: CursorConversation): string;
|
|
22
|
+
//# sourceMappingURL=cursor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../src/cursor.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAkBD,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,wBAAgB,wBAAwB,CAAC,KAAK,SAAK,GAAG,MAAM,EAAE,CAS7D;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,kBAAkB,GAAG,IAAI,CAiC7E;AAED,wBAAgB,qBAAqB,IAAI,kBAAkB,GAAG,IAAI,CAIjE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,SAAK,GAAG,WAAW,EAAE,CAa3D;AAED,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,EAC5C,YAAY,SAAO,GAClB,MAAM,IAAI,CAyBZ;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAcvE;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,kBAAkB,GAAG,MAAM,CASvE"}
|
package/dist/cursor.js
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import { existsSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { homedir } from 'os';
|
|
4
|
+
import { execSync } from 'child_process';
|
|
5
|
+
// Cursor's state database location
|
|
6
|
+
const CURSOR_DB_PATH = join(homedir(), 'Library', 'Application Support', 'Cursor', 'User', 'globalStorage', 'state.vscdb');
|
|
7
|
+
function runSqlite(query) {
|
|
8
|
+
if (!existsSync(CURSOR_DB_PATH)) {
|
|
9
|
+
throw new Error('Cursor database not found');
|
|
10
|
+
}
|
|
11
|
+
try {
|
|
12
|
+
const result = execSync(`sqlite3 "${CURSOR_DB_PATH}" "${query}"`, { encoding: 'utf-8', maxBuffer: 50 * 1024 * 1024 } // 50MB buffer
|
|
13
|
+
);
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
return '';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export function isCursorAvailable() {
|
|
21
|
+
return existsSync(CURSOR_DB_PATH);
|
|
22
|
+
}
|
|
23
|
+
export function getRecentConversationIds(limit = 10) {
|
|
24
|
+
const result = runSqlite(`SELECT key FROM cursorDiskKV WHERE key LIKE 'composerData:%' ORDER BY rowid DESC LIMIT ${limit}`);
|
|
25
|
+
return result
|
|
26
|
+
.split('\n')
|
|
27
|
+
.filter(Boolean)
|
|
28
|
+
.map(key => key.replace('composerData:', ''));
|
|
29
|
+
}
|
|
30
|
+
export function getConversation(composerId) {
|
|
31
|
+
const result = runSqlite(`SELECT value FROM cursorDiskKV WHERE key = 'composerData:${composerId}'`);
|
|
32
|
+
if (!result)
|
|
33
|
+
return null;
|
|
34
|
+
try {
|
|
35
|
+
const data = JSON.parse(result);
|
|
36
|
+
const messages = [];
|
|
37
|
+
const conversation = data.conversation || [];
|
|
38
|
+
for (const msg of conversation) {
|
|
39
|
+
if (msg.text && typeof msg.text === 'string' && msg.text.trim()) {
|
|
40
|
+
messages.push({
|
|
41
|
+
type: msg.type === 1 ? 'user' : 'assistant',
|
|
42
|
+
text: msg.text,
|
|
43
|
+
bubbleId: msg.bubbleId,
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
composerId: data.composerId,
|
|
49
|
+
messages,
|
|
50
|
+
createdAt: data.createdAt,
|
|
51
|
+
isAgentic: data.isAgentic,
|
|
52
|
+
model: data.modelConfig?.modelName,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
catch {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export function getLatestConversation() {
|
|
60
|
+
const ids = getRecentConversationIds(1);
|
|
61
|
+
if (ids.length === 0)
|
|
62
|
+
return null;
|
|
63
|
+
return getConversation(ids[0]);
|
|
64
|
+
}
|
|
65
|
+
export function getRecentMessages(limit = 20) {
|
|
66
|
+
const ids = getRecentConversationIds(5);
|
|
67
|
+
const messages = [];
|
|
68
|
+
for (const id of ids) {
|
|
69
|
+
const conv = getConversation(id);
|
|
70
|
+
if (conv) {
|
|
71
|
+
messages.push(...conv.messages.slice(-10));
|
|
72
|
+
}
|
|
73
|
+
if (messages.length >= limit)
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
return messages.slice(-limit);
|
|
77
|
+
}
|
|
78
|
+
export function watchConversations(callback, pollInterval = 2000) {
|
|
79
|
+
let lastSeenId = null;
|
|
80
|
+
let lastMessageCount = 0;
|
|
81
|
+
const check = () => {
|
|
82
|
+
const ids = getRecentConversationIds(1);
|
|
83
|
+
if (ids.length === 0)
|
|
84
|
+
return;
|
|
85
|
+
const currentId = ids[0];
|
|
86
|
+
const conv = getConversation(currentId);
|
|
87
|
+
if (!conv)
|
|
88
|
+
return;
|
|
89
|
+
// New conversation or new messages
|
|
90
|
+
if (currentId !== lastSeenId || conv.messages.length > lastMessageCount) {
|
|
91
|
+
lastSeenId = currentId;
|
|
92
|
+
lastMessageCount = conv.messages.length;
|
|
93
|
+
callback(conv);
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
const interval = setInterval(check, pollInterval);
|
|
97
|
+
check(); // Initial check
|
|
98
|
+
return () => clearInterval(interval);
|
|
99
|
+
}
|
|
100
|
+
export function extractMidasToolCalls(messages) {
|
|
101
|
+
const toolCalls = [];
|
|
102
|
+
for (const msg of messages) {
|
|
103
|
+
if (msg.type === 'assistant') {
|
|
104
|
+
// Look for midas tool calls in assistant messages
|
|
105
|
+
const midasMatches = msg.text.match(/midas_\w+/g);
|
|
106
|
+
if (midasMatches) {
|
|
107
|
+
toolCalls.push(...midasMatches);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return [...new Set(toolCalls)]; // Unique
|
|
112
|
+
}
|
|
113
|
+
export function getConversationSummary(conv) {
|
|
114
|
+
if (conv.messages.length === 0)
|
|
115
|
+
return 'Empty conversation';
|
|
116
|
+
const userMessages = conv.messages.filter(m => m.type === 'user');
|
|
117
|
+
if (userMessages.length === 0)
|
|
118
|
+
return 'No user messages';
|
|
119
|
+
// Get first user message as summary
|
|
120
|
+
const first = userMessages[0].text.slice(0, 100);
|
|
121
|
+
return first + (first.length >= 100 ? '...' : '');
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../src/cursor.ts"],"names":[],"mappings":"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"}
|
package/dist/events.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export interface MidasEvent {
|
|
2
|
+
id: string;
|
|
3
|
+
timestamp: string;
|
|
4
|
+
type: 'tool_called' | 'phase_changed' | 'prompt_copied' | 'step_completed' | 'ai_suggestion';
|
|
5
|
+
tool?: string;
|
|
6
|
+
phase?: string;
|
|
7
|
+
step?: string;
|
|
8
|
+
message?: string;
|
|
9
|
+
data?: Record<string, unknown>;
|
|
10
|
+
}
|
|
11
|
+
export interface EventLog {
|
|
12
|
+
events: MidasEvent[];
|
|
13
|
+
lastUpdated: string;
|
|
14
|
+
}
|
|
15
|
+
export declare function loadEvents(projectPath: string): EventLog;
|
|
16
|
+
export declare function saveEvents(projectPath: string, log: EventLog): void;
|
|
17
|
+
export declare function logEvent(projectPath: string, event: Omit<MidasEvent, 'id' | 'timestamp'>): MidasEvent;
|
|
18
|
+
export declare function getRecentEvents(projectPath: string, count?: number): MidasEvent[];
|
|
19
|
+
export declare function watchEvents(projectPath: string, callback: (events: MidasEvent[]) => void): () => void;
|
|
20
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,GAAG,eAAe,GAAG,eAAe,GAAG,gBAAgB,GAAG,eAAe,CAAC;IAC7F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAaD,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,QAAQ,CAaxD;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,IAAI,CAInE;AAED,wBAAgB,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,CAAC,GAAG,UAAU,CAcrG;AAED,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,UAAU,EAAE,CAG7E;AAED,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,IAAI,GACvC,MAAM,IAAI,CAwBZ"}
|
package/dist/events.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, watchFile, unwatchFile } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
const MIDAS_DIR = '.midas';
|
|
4
|
+
const EVENTS_FILE = 'events.json';
|
|
5
|
+
function getEventsPath(projectPath) {
|
|
6
|
+
return join(projectPath, MIDAS_DIR, EVENTS_FILE);
|
|
7
|
+
}
|
|
8
|
+
function ensureMidasDir(projectPath) {
|
|
9
|
+
const dir = join(projectPath, MIDAS_DIR);
|
|
10
|
+
if (!existsSync(dir)) {
|
|
11
|
+
mkdirSync(dir, { recursive: true });
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export function loadEvents(projectPath) {
|
|
15
|
+
const eventsPath = getEventsPath(projectPath);
|
|
16
|
+
if (!existsSync(eventsPath)) {
|
|
17
|
+
return { events: [], lastUpdated: new Date().toISOString() };
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const raw = readFileSync(eventsPath, 'utf-8');
|
|
21
|
+
return JSON.parse(raw);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
return { events: [], lastUpdated: new Date().toISOString() };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function saveEvents(projectPath, log) {
|
|
28
|
+
ensureMidasDir(projectPath);
|
|
29
|
+
log.lastUpdated = new Date().toISOString();
|
|
30
|
+
writeFileSync(getEventsPath(projectPath), JSON.stringify(log, null, 2));
|
|
31
|
+
}
|
|
32
|
+
export function logEvent(projectPath, event) {
|
|
33
|
+
const log = loadEvents(projectPath);
|
|
34
|
+
const fullEvent = {
|
|
35
|
+
...event,
|
|
36
|
+
id: `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
|
|
37
|
+
timestamp: new Date().toISOString(),
|
|
38
|
+
};
|
|
39
|
+
// Keep last 100 events
|
|
40
|
+
log.events = [...log.events.slice(-99), fullEvent];
|
|
41
|
+
saveEvents(projectPath, log);
|
|
42
|
+
return fullEvent;
|
|
43
|
+
}
|
|
44
|
+
export function getRecentEvents(projectPath, count = 10) {
|
|
45
|
+
const log = loadEvents(projectPath);
|
|
46
|
+
return log.events.slice(-count);
|
|
47
|
+
}
|
|
48
|
+
export function watchEvents(projectPath, callback) {
|
|
49
|
+
const eventsPath = getEventsPath(projectPath);
|
|
50
|
+
// Create file if doesn't exist
|
|
51
|
+
if (!existsSync(eventsPath)) {
|
|
52
|
+
saveEvents(projectPath, { events: [], lastUpdated: new Date().toISOString() });
|
|
53
|
+
}
|
|
54
|
+
let lastLength = loadEvents(projectPath).events.length;
|
|
55
|
+
const checkForUpdates = () => {
|
|
56
|
+
const log = loadEvents(projectPath);
|
|
57
|
+
if (log.events.length > lastLength) {
|
|
58
|
+
const newEvents = log.events.slice(lastLength);
|
|
59
|
+
lastLength = log.events.length;
|
|
60
|
+
callback(newEvents);
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
watchFile(eventsPath, { interval: 500 }, checkForUpdates);
|
|
64
|
+
return () => {
|
|
65
|
+
unwatchFile(eventsPath, checkForUpdates);
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|
package/dist/tui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"AA4UA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAyIpD"}
|
package/dist/tui.js
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
import { watch, existsSync } from 'fs';
|
|
2
2
|
import { join } from 'path';
|
|
3
|
+
import { exec } from 'child_process';
|
|
3
4
|
import { loadState, saveState } from './state/phase.js';
|
|
4
5
|
import { checkDocs } from './tools/docs.js';
|
|
5
|
-
import {
|
|
6
|
+
import { hasApiKey, ensureApiKey } from './config.js';
|
|
7
|
+
import { logEvent } from './events.js';
|
|
8
|
+
import { isCursorAvailable, watchConversations, extractMidasToolCalls, getConversationSummary } from './cursor.js';
|
|
9
|
+
import { generateSmartPrompt } from './ai.js';
|
|
6
10
|
// ANSI codes
|
|
7
11
|
const ESC = '\x1b';
|
|
8
12
|
const reset = `${ESC}[0m`;
|
|
@@ -12,12 +16,11 @@ const green = `${ESC}[32m`;
|
|
|
12
16
|
const yellow = `${ESC}[33m`;
|
|
13
17
|
const blue = `${ESC}[34m`;
|
|
14
18
|
const cyan = `${ESC}[36m`;
|
|
19
|
+
const magenta = `${ESC}[35m`;
|
|
15
20
|
const white = `${ESC}[37m`;
|
|
16
|
-
const bgBlue = `${ESC}[44m`;
|
|
17
21
|
const clearScreen = `${ESC}[2J${ESC}[H`;
|
|
18
22
|
// Prompts for each step
|
|
19
23
|
const STEP_PROMPTS = {
|
|
20
|
-
// Eagle Sight
|
|
21
24
|
'EAGLE_SIGHT:IDEA': {
|
|
22
25
|
action: 'Define your core idea',
|
|
23
26
|
prompt: `I'm starting a new project. Help me clarify:
|
|
@@ -30,128 +33,74 @@ Ask me clarifying questions before we proceed.`,
|
|
|
30
33
|
'EAGLE_SIGHT:RESEARCH': {
|
|
31
34
|
action: 'Research the landscape',
|
|
32
35
|
prompt: `Research the landscape for my project idea.
|
|
33
|
-
Find
|
|
34
|
-
1. Existing solutions
|
|
35
|
-
2. What they do well
|
|
36
|
-
3. What they miss
|
|
37
|
-
4. Technical approaches used
|
|
38
|
-
|
|
36
|
+
Find existing solutions, what they do well, what they miss.
|
|
39
37
|
Summarize findings.`,
|
|
40
38
|
},
|
|
41
39
|
'EAGLE_SIGHT:BRAINLIFT': {
|
|
42
40
|
action: 'Fill out docs/brainlift.md',
|
|
43
41
|
prompt: `Review my brainlift.md and help me strengthen it.
|
|
44
|
-
Ask me questions to extract
|
|
45
|
-
1. Contrarian insights I have
|
|
46
|
-
2. Domain knowledge AI lacks
|
|
47
|
-
3. Hard-won lessons from experience
|
|
48
|
-
4. Current context you might miss`,
|
|
42
|
+
Ask me questions to extract my unique insights and domain knowledge.`,
|
|
49
43
|
},
|
|
50
44
|
'EAGLE_SIGHT:PRD': {
|
|
51
45
|
action: 'Fill out docs/prd.md',
|
|
52
46
|
prompt: `Review my PRD and help me improve it.
|
|
53
|
-
Check for
|
|
54
|
-
1. Clear goals
|
|
55
|
-
2. Explicit non-goals
|
|
56
|
-
3. Complete user stories
|
|
57
|
-
4. Technical requirements
|
|
58
|
-
5. Success metrics
|
|
59
|
-
|
|
60
|
-
Ask clarifying questions.`,
|
|
47
|
+
Check for clear goals, non-goals, user stories, and requirements.`,
|
|
61
48
|
},
|
|
62
49
|
'EAGLE_SIGHT:GAMEPLAN': {
|
|
63
50
|
action: 'Fill out docs/gameplan.md',
|
|
64
51
|
prompt: `Review my gameplan and help me refine it.
|
|
65
|
-
Verify
|
|
66
|
-
1. Tech stack justified
|
|
67
|
-
2. Phases are logical
|
|
68
|
-
3. Tasks are specific
|
|
69
|
-
4. Risks identified
|
|
70
|
-
|
|
71
|
-
Suggest improvements.`,
|
|
52
|
+
Verify tech stack, phases, tasks, and risk mitigation.`,
|
|
72
53
|
},
|
|
73
|
-
// Build
|
|
74
54
|
'BUILD:RULES_LOADED': {
|
|
75
55
|
action: 'Load user rules',
|
|
76
56
|
prompt: `Read and understand user rules.
|
|
77
|
-
|
|
78
|
-
Ask me any clarifying questions.
|
|
79
|
-
Make todos of all tasks.
|
|
80
|
-
Don't start yet.`,
|
|
57
|
+
Ask clarifying questions. Make todos. Don't start yet.`,
|
|
81
58
|
},
|
|
82
59
|
'BUILD:CODEBASE_INDEXED': {
|
|
83
60
|
action: 'Index the codebase',
|
|
84
|
-
prompt: `Index this codebase
|
|
85
|
-
|
|
86
|
-
Note key files and patterns.
|
|
87
|
-
Summarize what you find.`,
|
|
61
|
+
prompt: `Index this codebase. Understand the architecture.
|
|
62
|
+
Note key files and patterns. Summarize what you find.`,
|
|
88
63
|
},
|
|
89
64
|
'BUILD:FILES_READ': {
|
|
90
65
|
action: 'Read relevant files',
|
|
91
66
|
prompt: `Read the files relevant to my current task.
|
|
92
|
-
|
|
93
|
-
Note patterns to follow.
|
|
94
|
-
Identify integration points.`,
|
|
67
|
+
Note patterns to follow and integration points.`,
|
|
95
68
|
},
|
|
96
69
|
'BUILD:RESEARCHING': {
|
|
97
70
|
action: 'Research docs and APIs',
|
|
98
|
-
prompt: `Research
|
|
99
|
-
Find
|
|
100
|
-
1. Best practices
|
|
101
|
-
2. Common pitfalls
|
|
102
|
-
3. Code examples
|
|
103
|
-
4. Security considerations`,
|
|
71
|
+
prompt: `Research documentation for the libraries/APIs I'm using.
|
|
72
|
+
Find best practices, pitfalls, and examples.`,
|
|
104
73
|
},
|
|
105
74
|
'BUILD:IMPLEMENTING': {
|
|
106
75
|
action: 'Write code with tests',
|
|
107
|
-
prompt: `Continue todos
|
|
108
|
-
|
|
109
|
-
Then implement to make tests pass.
|
|
110
|
-
Each function should do ONE thing.
|
|
111
|
-
Run tests after each file.`,
|
|
76
|
+
prompt: `Continue todos. Write test file FIRST.
|
|
77
|
+
Then implement to make tests pass. Run tests after each file.`,
|
|
112
78
|
},
|
|
113
79
|
'BUILD:TESTING': {
|
|
114
80
|
action: 'Run and fix tests',
|
|
115
|
-
prompt: `Run all tests.
|
|
116
|
-
Fix any failures.
|
|
117
|
-
Add edge case tests.
|
|
118
|
-
Verify no regressions.
|
|
81
|
+
prompt: `Run all tests. Fix failures. Add edge case tests.
|
|
119
82
|
Commit when green.`,
|
|
120
83
|
},
|
|
121
84
|
'BUILD:DEBUGGING': {
|
|
122
85
|
action: 'Debug with Tornado cycle',
|
|
123
|
-
prompt: `I'm stuck on a bug. Help
|
|
124
|
-
1. RESEARCH
|
|
125
|
-
|
|
126
|
-
3. TESTS: Write test to reproduce
|
|
127
|
-
|
|
128
|
-
Let's start with research.`,
|
|
86
|
+
prompt: `I'm stuck on a bug. Help with Tornado cycle:
|
|
87
|
+
1. RESEARCH docs 2. Add LOGS 3. Write TESTS
|
|
88
|
+
Start with research.`,
|
|
129
89
|
},
|
|
130
|
-
// Idle/Shipped
|
|
131
90
|
'IDLE': {
|
|
132
91
|
action: 'Start a new project',
|
|
133
92
|
prompt: `I want to start a new project.
|
|
134
|
-
Help me through Eagle Sight:
|
|
135
|
-
1. Clarify my idea
|
|
136
|
-
2. Research landscape
|
|
137
|
-
3. Document my brainlift
|
|
138
|
-
4. Write the PRD
|
|
139
|
-
5. Create the gameplan`,
|
|
93
|
+
Help me through Eagle Sight: Idea → Research → Brainlift → PRD → Gameplan`,
|
|
140
94
|
},
|
|
141
95
|
'SHIPPED': {
|
|
142
96
|
action: 'Run production audit',
|
|
143
|
-
prompt: `
|
|
144
|
-
Check all 12 ingredients
|
|
145
|
-
1-4: Core (Frontend, Backend, Database, Auth)
|
|
146
|
-
5-7: Power (APIs, State, Design)
|
|
147
|
-
8-10: Protection (Testing, Security, Errors)
|
|
148
|
-
11-12: Mastery (Git, Deployment)`,
|
|
97
|
+
prompt: `Project shipped. Run production readiness audit.
|
|
98
|
+
Check all 12 ingredients.`,
|
|
149
99
|
},
|
|
150
100
|
};
|
|
151
101
|
function getPhaseKey(phase) {
|
|
152
|
-
if (phase.phase === 'IDLE' || phase.phase === 'SHIPPED')
|
|
102
|
+
if (phase.phase === 'IDLE' || phase.phase === 'SHIPPED')
|
|
153
103
|
return phase.phase;
|
|
154
|
-
}
|
|
155
104
|
return `${phase.phase}:${phase.step}`;
|
|
156
105
|
}
|
|
157
106
|
function progressBar(current, total, width = 20) {
|
|
@@ -171,15 +120,34 @@ function copyToClipboard(text) {
|
|
|
171
120
|
proc.stdin?.end();
|
|
172
121
|
});
|
|
173
122
|
}
|
|
174
|
-
function
|
|
123
|
+
function truncate(str, len) {
|
|
124
|
+
if (str.length <= len)
|
|
125
|
+
return str;
|
|
126
|
+
return str.slice(0, len - 3) + '...';
|
|
127
|
+
}
|
|
128
|
+
function drawUI(state, projectPath) {
|
|
129
|
+
const { phase, cursorConnected, lastChatSummary, recentToolCalls, smartPrompt, hasApiKey: hasKey } = state;
|
|
175
130
|
const lines = [];
|
|
176
|
-
const width =
|
|
131
|
+
const width = 60;
|
|
177
132
|
const hLine = '═'.repeat(width - 2);
|
|
178
133
|
const hLineLight = '─'.repeat(width - 4);
|
|
134
|
+
// Header
|
|
179
135
|
lines.push(`${cyan}╔${hLine}╗${reset}`);
|
|
180
|
-
|
|
136
|
+
const statusIcon = cursorConnected ? `${green}●${reset}` : `${dim}○${reset}`;
|
|
137
|
+
const aiIcon = hasKey ? `${magenta}AI${reset}` : `${dim}--${reset}`;
|
|
138
|
+
lines.push(`${cyan}║${reset} ${bold}${white}MIDAS${reset} ${dim}- Elite Vibecoding Coach${reset} ${statusIcon} Cursor ${aiIcon} ${cyan}║${reset}`);
|
|
181
139
|
lines.push(`${cyan}╠${hLine}╣${reset}`);
|
|
140
|
+
// Cursor chat activity
|
|
141
|
+
if (cursorConnected && lastChatSummary) {
|
|
142
|
+
lines.push(`${cyan}║${reset} ${dim}Last chat:${reset} ${truncate(lastChatSummary, width - 16)}${' '.repeat(Math.max(0, width - 16 - Math.min(lastChatSummary.length, width - 16)))}${cyan}║${reset}`);
|
|
143
|
+
if (recentToolCalls.length > 0) {
|
|
144
|
+
const tools = recentToolCalls.slice(0, 3).join(', ');
|
|
145
|
+
lines.push(`${cyan}║${reset} ${dim}Tools used:${reset} ${magenta}${truncate(tools, width - 17)}${reset}${' '.repeat(Math.max(0, width - 17 - Math.min(tools.length, width - 17)))}${cyan}║${reset}`);
|
|
146
|
+
}
|
|
147
|
+
lines.push(`${cyan}╠${hLine}╣${reset}`);
|
|
148
|
+
}
|
|
182
149
|
lines.push(`${cyan}║${reset}${' '.repeat(width - 2)}${cyan}║${reset}`);
|
|
150
|
+
// Phase display
|
|
183
151
|
if (phase.phase === 'IDLE') {
|
|
184
152
|
lines.push(`${cyan}║${reset} ${dim}No project initialized${reset}${' '.repeat(width - 27)}${cyan}║${reset}`);
|
|
185
153
|
lines.push(`${cyan}║${reset}${' '.repeat(width - 2)}${cyan}║${reset}`);
|
|
@@ -193,21 +161,18 @@ function drawUI(phase, projectPath) {
|
|
|
193
161
|
lines.push(`${cyan}║${reset}${' '.repeat(width - 2)}${cyan}║${reset}`);
|
|
194
162
|
for (let i = 0; i < steps.length; i++) {
|
|
195
163
|
const step = steps[i];
|
|
196
|
-
let
|
|
164
|
+
let line;
|
|
197
165
|
if (i < currentIdx) {
|
|
198
|
-
|
|
199
|
-
label = `${dim}${step}${reset}`;
|
|
166
|
+
line = ` ${green}✓${reset} ${dim}${step}${reset}`;
|
|
200
167
|
}
|
|
201
168
|
else if (i === currentIdx) {
|
|
202
|
-
|
|
203
|
-
label = `${bold}${step}${reset} ${dim}(current)${reset}`;
|
|
169
|
+
line = ` ${yellow}→${reset} ${bold}${step}${reset} ${dim}(current)${reset}`;
|
|
204
170
|
}
|
|
205
171
|
else {
|
|
206
|
-
|
|
207
|
-
label = `${dim}${step}${reset}`;
|
|
172
|
+
line = ` ${dim}○ ${step}${reset}`;
|
|
208
173
|
}
|
|
209
|
-
const padding = width -
|
|
210
|
-
lines.push(`${cyan}║${reset}
|
|
174
|
+
const padding = width - 6 - step.length - (i === currentIdx ? 10 : 0);
|
|
175
|
+
lines.push(`${cyan}║${reset}${line}${' '.repeat(Math.max(0, padding))}${cyan}║${reset}`);
|
|
211
176
|
}
|
|
212
177
|
}
|
|
213
178
|
else if (phase.phase === 'BUILD') {
|
|
@@ -228,51 +193,52 @@ function drawUI(phase, projectPath) {
|
|
|
228
193
|
for (let i = 0; i < steps.length; i++) {
|
|
229
194
|
const step = steps[i];
|
|
230
195
|
const label = labels[step];
|
|
231
|
-
let
|
|
196
|
+
let line;
|
|
232
197
|
if (i < currentIdx) {
|
|
233
|
-
|
|
234
|
-
text = `${dim}${label}${reset}`;
|
|
198
|
+
line = ` ${green}✓${reset} ${dim}${label}${reset}`;
|
|
235
199
|
}
|
|
236
200
|
else if (i === currentIdx) {
|
|
237
|
-
|
|
238
|
-
text = `${bold}${label}${reset} ${dim}(current)${reset}`;
|
|
201
|
+
line = ` ${blue}→${reset} ${bold}${label}${reset} ${dim}(current)${reset}`;
|
|
239
202
|
}
|
|
240
203
|
else {
|
|
241
|
-
|
|
242
|
-
text = `${dim}${label}${reset}`;
|
|
204
|
+
line = ` ${dim}○ ${label}${reset}`;
|
|
243
205
|
}
|
|
244
|
-
const padding = width -
|
|
245
|
-
lines.push(`${cyan}║${reset}
|
|
206
|
+
const padding = width - 6 - label.length - (i === currentIdx ? 10 : 0);
|
|
207
|
+
lines.push(`${cyan}║${reset}${line}${' '.repeat(Math.max(0, padding))}${cyan}║${reset}`);
|
|
246
208
|
}
|
|
247
209
|
}
|
|
248
210
|
else if (phase.phase === 'SHIPPED') {
|
|
249
|
-
lines.push(`${cyan}║${reset} ${green}${bold}SHIPPED${reset} ${progressBar(1, 1)}${' '.repeat(width -
|
|
211
|
+
lines.push(`${cyan}║${reset} ${green}${bold}SHIPPED${reset} ${progressBar(1, 1)}${' '.repeat(width - 38)}${cyan}║${reset}`);
|
|
250
212
|
lines.push(`${cyan}║${reset}${' '.repeat(width - 2)}${cyan}║${reset}`);
|
|
251
213
|
lines.push(`${cyan}║${reset} ${green}✓${reset} Project complete!${' '.repeat(width - 23)}${cyan}║${reset}`);
|
|
252
214
|
}
|
|
253
215
|
lines.push(`${cyan}║${reset}${' '.repeat(width - 2)}${cyan}║${reset}`);
|
|
254
216
|
lines.push(`${cyan}╠${hLine}╣${reset}`);
|
|
255
|
-
// Get
|
|
217
|
+
// Get prompt
|
|
256
218
|
const key = getPhaseKey(phase);
|
|
257
219
|
const stepData = STEP_PROMPTS[key] || { action: 'Continue', prompt: 'What would you like to do?' };
|
|
220
|
+
const promptToShow = smartPrompt || stepData.prompt;
|
|
258
221
|
lines.push(`${cyan}║${reset} ${bold}NEXT:${reset} ${stepData.action}${' '.repeat(Math.max(0, width - 10 - stepData.action.length))}${cyan}║${reset}`);
|
|
222
|
+
if (smartPrompt) {
|
|
223
|
+
lines.push(`${cyan}║${reset} ${magenta}✨ AI-generated prompt${reset}${' '.repeat(width - 27)}${cyan}║${reset}`);
|
|
224
|
+
}
|
|
259
225
|
lines.push(`${cyan}║${reset}${' '.repeat(width - 2)}${cyan}║${reset}`);
|
|
260
226
|
lines.push(`${cyan}║${reset} ${dim}Paste this in Cursor:${reset}${' '.repeat(width - 26)}${cyan}║${reset}`);
|
|
261
227
|
lines.push(`${cyan}║${reset} ${dim}┌${hLineLight}┐${reset} ${cyan}║${reset}`);
|
|
262
228
|
// Wrap prompt text
|
|
263
|
-
const promptLines =
|
|
264
|
-
for (const pLine of promptLines.slice(0,
|
|
229
|
+
const promptLines = promptToShow.split('\n');
|
|
230
|
+
for (const pLine of promptLines.slice(0, 5)) {
|
|
265
231
|
const truncated = pLine.slice(0, width - 10);
|
|
266
232
|
const padding = width - 8 - truncated.length;
|
|
267
233
|
lines.push(`${cyan}║${reset} ${dim}│${reset} ${truncated}${' '.repeat(Math.max(0, padding))}${dim}│${reset} ${cyan}║${reset}`);
|
|
268
234
|
}
|
|
269
|
-
if (promptLines.length >
|
|
235
|
+
if (promptLines.length > 5) {
|
|
270
236
|
lines.push(`${cyan}║${reset} ${dim}│ ...${' '.repeat(width - 13)}│${reset} ${cyan}║${reset}`);
|
|
271
237
|
}
|
|
272
238
|
lines.push(`${cyan}║${reset} ${dim}└${hLineLight}┘${reset} ${cyan}║${reset}`);
|
|
273
239
|
lines.push(`${cyan}║${reset}${' '.repeat(width - 2)}${cyan}║${reset}`);
|
|
274
240
|
lines.push(`${cyan}╠${hLine}╣${reset}`);
|
|
275
|
-
lines.push(`${cyan}║${reset} ${dim}[c]${reset} Copy
|
|
241
|
+
lines.push(`${cyan}║${reset} ${dim}[c]${reset} Copy ${dim}[n]${reset} Next ${dim}[b]${reset} Back ${dim}[a]${reset} AI prompt ${dim}[q]${reset} Quit ${cyan}║${reset}`);
|
|
276
242
|
lines.push(`${cyan}╚${hLine}╝${reset}`);
|
|
277
243
|
return lines.join('\n');
|
|
278
244
|
}
|
|
@@ -303,6 +269,7 @@ function advancePhase(projectPath) {
|
|
|
303
269
|
}
|
|
304
270
|
}
|
|
305
271
|
saveState(projectPath, state);
|
|
272
|
+
logEvent(projectPath, { type: 'phase_changed', phase: state.current.phase, step: 'step' in state.current ? state.current.step : undefined });
|
|
306
273
|
return state.current;
|
|
307
274
|
}
|
|
308
275
|
function goBackPhase(projectPath) {
|
|
@@ -333,70 +300,123 @@ function goBackPhase(projectPath) {
|
|
|
333
300
|
}
|
|
334
301
|
export async function runInteractive() {
|
|
335
302
|
const projectPath = process.cwd();
|
|
336
|
-
//
|
|
303
|
+
// Check for API key on first run
|
|
304
|
+
await ensureApiKey();
|
|
305
|
+
// Set up raw mode
|
|
337
306
|
if (process.stdin.isTTY) {
|
|
338
307
|
process.stdin.setRawMode(true);
|
|
339
308
|
}
|
|
340
309
|
process.stdin.resume();
|
|
341
310
|
process.stdin.setEncoding('utf8');
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
311
|
+
const stateData = loadState(projectPath);
|
|
312
|
+
const tuiState = {
|
|
313
|
+
phase: stateData.current,
|
|
314
|
+
message: '',
|
|
315
|
+
cursorConnected: isCursorAvailable(),
|
|
316
|
+
lastChatSummary: '',
|
|
317
|
+
recentToolCalls: [],
|
|
318
|
+
smartPrompt: null,
|
|
319
|
+
hasApiKey: hasApiKey(),
|
|
320
|
+
isAnalyzing: false,
|
|
321
|
+
};
|
|
345
322
|
const render = () => {
|
|
346
323
|
console.log(clearScreen);
|
|
347
|
-
console.log(drawUI(
|
|
348
|
-
if (message) {
|
|
349
|
-
console.log(`\n ${message}`);
|
|
350
|
-
message = '';
|
|
324
|
+
console.log(drawUI(tuiState, projectPath));
|
|
325
|
+
if (tuiState.message) {
|
|
326
|
+
console.log(`\n ${tuiState.message}`);
|
|
327
|
+
tuiState.message = '';
|
|
351
328
|
}
|
|
352
329
|
};
|
|
353
330
|
render();
|
|
331
|
+
// Watch Cursor conversations
|
|
332
|
+
let stopWatchingCursor = null;
|
|
333
|
+
if (tuiState.cursorConnected) {
|
|
334
|
+
stopWatchingCursor = watchConversations((conv) => {
|
|
335
|
+
tuiState.lastChatSummary = getConversationSummary(conv);
|
|
336
|
+
tuiState.recentToolCalls = extractMidasToolCalls(conv.messages);
|
|
337
|
+
// Log midas tool usage
|
|
338
|
+
for (const tool of tuiState.recentToolCalls) {
|
|
339
|
+
logEvent(projectPath, { type: 'tool_called', tool });
|
|
340
|
+
}
|
|
341
|
+
render();
|
|
342
|
+
});
|
|
343
|
+
}
|
|
354
344
|
// Watch for docs changes
|
|
355
345
|
const docsPath = join(projectPath, 'docs');
|
|
356
346
|
let watcher = null;
|
|
357
347
|
if (existsSync(docsPath)) {
|
|
358
348
|
watcher = watch(docsPath, { recursive: true }, () => {
|
|
359
|
-
// Re-check docs completeness
|
|
360
349
|
const docs = checkDocs({ projectPath });
|
|
361
|
-
if (docs.ready && phase.phase === 'EAGLE_SIGHT') {
|
|
362
|
-
message = `${green}✓${reset} Docs complete! Press [n] to start BUILD.`;
|
|
350
|
+
if (docs.ready && tuiState.phase.phase === 'EAGLE_SIGHT') {
|
|
351
|
+
tuiState.message = `${green}✓${reset} Docs complete! Press [n] to start BUILD.`;
|
|
363
352
|
render();
|
|
364
353
|
}
|
|
365
354
|
});
|
|
366
355
|
}
|
|
367
356
|
process.stdin.on('data', async (key) => {
|
|
368
|
-
if (key === 'q' || key === '\u0003') {
|
|
357
|
+
if (key === 'q' || key === '\u0003') {
|
|
369
358
|
console.log(clearScreen);
|
|
370
359
|
console.log(`\n ${cyan}Midas${reset} signing off. Happy vibecoding!\n`);
|
|
371
360
|
watcher?.close();
|
|
361
|
+
stopWatchingCursor?.();
|
|
372
362
|
process.exit(0);
|
|
373
363
|
}
|
|
374
364
|
if (key === 'c') {
|
|
375
|
-
const stepKey = getPhaseKey(phase);
|
|
376
|
-
const prompt = STEP_PROMPTS[stepKey]?.prompt || '';
|
|
365
|
+
const stepKey = getPhaseKey(tuiState.phase);
|
|
366
|
+
const prompt = tuiState.smartPrompt || STEP_PROMPTS[stepKey]?.prompt || '';
|
|
377
367
|
try {
|
|
378
368
|
await copyToClipboard(prompt);
|
|
379
|
-
message = `${green}✓${reset} Prompt copied to clipboard!`;
|
|
369
|
+
tuiState.message = `${green}✓${reset} Prompt copied to clipboard!`;
|
|
370
|
+
logEvent(projectPath, { type: 'prompt_copied', message: prompt.slice(0, 100) });
|
|
380
371
|
}
|
|
381
372
|
catch {
|
|
382
|
-
message = `${yellow}!${reset} Could not copy. Manually copy the prompt
|
|
373
|
+
tuiState.message = `${yellow}!${reset} Could not copy. Manually copy the prompt.`;
|
|
383
374
|
}
|
|
384
375
|
render();
|
|
385
376
|
}
|
|
386
377
|
if (key === 'n') {
|
|
387
|
-
phase = advancePhase(projectPath);
|
|
388
|
-
|
|
378
|
+
tuiState.phase = advancePhase(projectPath);
|
|
379
|
+
tuiState.smartPrompt = null;
|
|
380
|
+
tuiState.message = `${green}→${reset} Advanced to next step`;
|
|
389
381
|
render();
|
|
390
382
|
}
|
|
391
383
|
if (key === 'b') {
|
|
392
|
-
phase = goBackPhase(projectPath);
|
|
393
|
-
|
|
384
|
+
tuiState.phase = goBackPhase(projectPath);
|
|
385
|
+
tuiState.smartPrompt = null;
|
|
386
|
+
tuiState.message = `${yellow}←${reset} Went back one step`;
|
|
387
|
+
render();
|
|
388
|
+
}
|
|
389
|
+
if (key === 'a') {
|
|
390
|
+
if (!tuiState.hasApiKey) {
|
|
391
|
+
tuiState.message = `${yellow}!${reset} No API key. Add to ~/.midas/config.json`;
|
|
392
|
+
render();
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
tuiState.message = `${magenta}⟳${reset} Generating AI prompt...`;
|
|
396
|
+
tuiState.isAnalyzing = true;
|
|
397
|
+
render();
|
|
398
|
+
try {
|
|
399
|
+
const phaseStr = tuiState.phase.phase;
|
|
400
|
+
const stepStr = 'step' in tuiState.phase ? tuiState.phase.step : '';
|
|
401
|
+
const smart = await generateSmartPrompt(projectPath, phaseStr, stepStr);
|
|
402
|
+
if (smart) {
|
|
403
|
+
tuiState.smartPrompt = smart;
|
|
404
|
+
tuiState.message = `${green}✓${reset} AI prompt generated! Press [c] to copy.`;
|
|
405
|
+
}
|
|
406
|
+
else {
|
|
407
|
+
tuiState.message = `${yellow}!${reset} Could not generate. Using default prompt.`;
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
catch (err) {
|
|
411
|
+
tuiState.message = `${yellow}!${reset} AI error. Using default prompt.`;
|
|
412
|
+
}
|
|
413
|
+
tuiState.isAnalyzing = false;
|
|
394
414
|
render();
|
|
395
415
|
}
|
|
396
416
|
if (key === 'r') {
|
|
397
|
-
|
|
398
|
-
phase =
|
|
399
|
-
message = `${blue}↻${reset} Refreshed`;
|
|
417
|
+
const stateData = loadState(projectPath);
|
|
418
|
+
tuiState.phase = stateData.current;
|
|
419
|
+
tuiState.message = `${blue}↻${reset} Refreshed`;
|
|
400
420
|
render();
|
|
401
421
|
}
|
|
402
422
|
});
|
package/dist/tui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../src/tui.ts"],"names":[],"mappings":"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"}
|