popeye-cli 1.0.1 → 1.2.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/.env.example +24 -1
- package/CONTRIBUTING.md +275 -0
- package/OPEN_SOURCE_MANIFESTO.md +172 -0
- package/README.md +832 -123
- package/dist/adapters/claude.d.ts +19 -4
- package/dist/adapters/claude.d.ts.map +1 -1
- package/dist/adapters/claude.js +908 -42
- package/dist/adapters/claude.js.map +1 -1
- package/dist/adapters/gemini.d.ts +55 -0
- package/dist/adapters/gemini.d.ts.map +1 -0
- package/dist/adapters/gemini.js +318 -0
- package/dist/adapters/gemini.js.map +1 -0
- package/dist/adapters/grok.d.ts +73 -0
- package/dist/adapters/grok.d.ts.map +1 -0
- package/dist/adapters/grok.js +430 -0
- package/dist/adapters/grok.js.map +1 -0
- package/dist/adapters/openai.d.ts +1 -1
- package/dist/adapters/openai.d.ts.map +1 -1
- package/dist/adapters/openai.js +47 -8
- package/dist/adapters/openai.js.map +1 -1
- package/dist/auth/claude.d.ts +11 -9
- package/dist/auth/claude.d.ts.map +1 -1
- package/dist/auth/claude.js +107 -71
- package/dist/auth/claude.js.map +1 -1
- package/dist/auth/gemini.d.ts +58 -0
- package/dist/auth/gemini.d.ts.map +1 -0
- package/dist/auth/gemini.js +172 -0
- package/dist/auth/gemini.js.map +1 -0
- package/dist/auth/grok.d.ts +73 -0
- package/dist/auth/grok.d.ts.map +1 -0
- package/dist/auth/grok.js +211 -0
- package/dist/auth/grok.js.map +1 -0
- package/dist/auth/index.d.ts +14 -7
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +41 -6
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/keychain.d.ts +20 -7
- package/dist/auth/keychain.d.ts.map +1 -1
- package/dist/auth/keychain.js +85 -29
- package/dist/auth/keychain.js.map +1 -1
- package/dist/auth/openai.d.ts +2 -2
- package/dist/auth/openai.d.ts.map +1 -1
- package/dist/auth/openai.js +30 -32
- package/dist/auth/openai.js.map +1 -1
- package/dist/cli/commands/auth.d.ts +1 -1
- package/dist/cli/commands/auth.d.ts.map +1 -1
- package/dist/cli/commands/auth.js +79 -8
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/create.d.ts.map +1 -1
- package/dist/cli/commands/create.js +15 -4
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/interactive.d.ts.map +1 -1
- package/dist/cli/interactive.js +1494 -114
- package/dist/cli/interactive.js.map +1 -1
- package/dist/config/defaults.d.ts +9 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +19 -2
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/index.d.ts +19 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +33 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/schema.d.ts +47 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +29 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/generators/fullstack.d.ts +32 -0
- package/dist/generators/fullstack.d.ts.map +1 -0
- package/dist/generators/fullstack.js +497 -0
- package/dist/generators/fullstack.js.map +1 -0
- package/dist/generators/index.d.ts +4 -3
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +15 -1
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/python.d.ts +17 -1
- package/dist/generators/python.d.ts.map +1 -1
- package/dist/generators/python.js +34 -20
- package/dist/generators/python.js.map +1 -1
- package/dist/generators/templates/fullstack.d.ts +113 -0
- package/dist/generators/templates/fullstack.d.ts.map +1 -0
- package/dist/generators/templates/fullstack.js +1004 -0
- package/dist/generators/templates/fullstack.js.map +1 -0
- package/dist/generators/typescript.d.ts +19 -1
- package/dist/generators/typescript.d.ts.map +1 -1
- package/dist/generators/typescript.js +37 -20
- package/dist/generators/typescript.js.map +1 -1
- package/dist/state/index.d.ts +108 -0
- package/dist/state/index.d.ts.map +1 -1
- package/dist/state/index.js +551 -4
- package/dist/state/index.js.map +1 -1
- package/dist/state/registry.d.ts +52 -0
- package/dist/state/registry.d.ts.map +1 -0
- package/dist/state/registry.js +215 -0
- package/dist/state/registry.js.map +1 -0
- package/dist/types/cli.d.ts +8 -0
- package/dist/types/cli.d.ts.map +1 -1
- package/dist/types/cli.js.map +1 -1
- package/dist/types/consensus.d.ts +186 -4
- package/dist/types/consensus.d.ts.map +1 -1
- package/dist/types/consensus.js +35 -3
- package/dist/types/consensus.js.map +1 -1
- package/dist/types/project.d.ts +76 -0
- package/dist/types/project.d.ts.map +1 -1
- package/dist/types/project.js +1 -1
- package/dist/types/project.js.map +1 -1
- package/dist/types/workflow.d.ts +217 -16
- package/dist/types/workflow.d.ts.map +1 -1
- package/dist/types/workflow.js +40 -1
- package/dist/types/workflow.js.map +1 -1
- package/dist/workflow/auto-fix.d.ts +45 -0
- package/dist/workflow/auto-fix.d.ts.map +1 -0
- package/dist/workflow/auto-fix.js +274 -0
- package/dist/workflow/auto-fix.js.map +1 -0
- package/dist/workflow/consensus.d.ts +70 -2
- package/dist/workflow/consensus.d.ts.map +1 -1
- package/dist/workflow/consensus.js +872 -17
- package/dist/workflow/consensus.js.map +1 -1
- package/dist/workflow/execution-mode.d.ts +10 -4
- package/dist/workflow/execution-mode.d.ts.map +1 -1
- package/dist/workflow/execution-mode.js +547 -58
- package/dist/workflow/execution-mode.js.map +1 -1
- package/dist/workflow/index.d.ts +14 -2
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +69 -6
- package/dist/workflow/index.js.map +1 -1
- package/dist/workflow/milestone-workflow.d.ts +34 -0
- package/dist/workflow/milestone-workflow.d.ts.map +1 -0
- package/dist/workflow/milestone-workflow.js +414 -0
- package/dist/workflow/milestone-workflow.js.map +1 -0
- package/dist/workflow/plan-mode.d.ts +80 -3
- package/dist/workflow/plan-mode.d.ts.map +1 -1
- package/dist/workflow/plan-mode.js +767 -49
- package/dist/workflow/plan-mode.js.map +1 -1
- package/dist/workflow/plan-storage.d.ts +386 -0
- package/dist/workflow/plan-storage.d.ts.map +1 -0
- package/dist/workflow/plan-storage.js +878 -0
- package/dist/workflow/plan-storage.js.map +1 -0
- package/dist/workflow/project-verification.d.ts +37 -0
- package/dist/workflow/project-verification.d.ts.map +1 -0
- package/dist/workflow/project-verification.js +381 -0
- package/dist/workflow/project-verification.js.map +1 -0
- package/dist/workflow/task-workflow.d.ts +37 -0
- package/dist/workflow/task-workflow.d.ts.map +1 -0
- package/dist/workflow/task-workflow.js +386 -0
- package/dist/workflow/task-workflow.js.map +1 -0
- package/dist/workflow/test-runner.d.ts +9 -0
- package/dist/workflow/test-runner.d.ts.map +1 -1
- package/dist/workflow/test-runner.js +101 -5
- package/dist/workflow/test-runner.js.map +1 -1
- package/dist/workflow/ui-designer.d.ts +82 -0
- package/dist/workflow/ui-designer.d.ts.map +1 -0
- package/dist/workflow/ui-designer.js +234 -0
- package/dist/workflow/ui-designer.js.map +1 -0
- package/dist/workflow/ui-setup.d.ts +58 -0
- package/dist/workflow/ui-setup.d.ts.map +1 -0
- package/dist/workflow/ui-setup.js +685 -0
- package/dist/workflow/ui-setup.js.map +1 -0
- package/dist/workflow/ui-verification.d.ts +114 -0
- package/dist/workflow/ui-verification.d.ts.map +1 -0
- package/dist/workflow/ui-verification.js +258 -0
- package/dist/workflow/ui-verification.js.map +1 -0
- package/dist/workflow/workflow-logger.d.ts +110 -0
- package/dist/workflow/workflow-logger.d.ts.map +1 -0
- package/dist/workflow/workflow-logger.js +267 -0
- package/dist/workflow/workflow-logger.js.map +1 -0
- package/dist/workflow/workspace-manager.d.ts +342 -0
- package/dist/workflow/workspace-manager.d.ts.map +1 -0
- package/dist/workflow/workspace-manager.js +733 -0
- package/dist/workflow/workspace-manager.js.map +1 -0
- package/package.json +2 -2
- package/src/adapters/claude.ts +1067 -47
- package/src/adapters/gemini.ts +373 -0
- package/src/adapters/grok.ts +492 -0
- package/src/adapters/openai.ts +48 -9
- package/src/auth/claude.ts +120 -78
- package/src/auth/gemini.ts +207 -0
- package/src/auth/grok.ts +255 -0
- package/src/auth/index.ts +47 -9
- package/src/auth/keychain.ts +95 -28
- package/src/auth/openai.ts +29 -36
- package/src/cli/commands/auth.ts +89 -10
- package/src/cli/commands/create.ts +13 -4
- package/src/cli/interactive.ts +1774 -142
- package/src/config/defaults.ts +19 -2
- package/src/config/index.ts +36 -1
- package/src/config/schema.ts +30 -1
- package/src/generators/fullstack.ts +551 -0
- package/src/generators/index.ts +25 -1
- package/src/generators/python.ts +65 -20
- package/src/generators/templates/fullstack.ts +1047 -0
- package/src/generators/typescript.ts +69 -20
- package/src/state/index.ts +713 -4
- package/src/state/registry.ts +278 -0
- package/src/types/cli.ts +8 -0
- package/src/types/consensus.ts +197 -6
- package/src/types/project.ts +82 -1
- package/src/types/workflow.ts +90 -1
- package/src/workflow/auto-fix.ts +340 -0
- package/src/workflow/consensus.ts +1180 -16
- package/src/workflow/execution-mode.ts +673 -74
- package/src/workflow/index.ts +95 -6
- package/src/workflow/milestone-workflow.ts +576 -0
- package/src/workflow/plan-mode.ts +924 -50
- package/src/workflow/plan-storage.ts +1282 -0
- package/src/workflow/project-verification.ts +471 -0
- package/src/workflow/task-workflow.ts +528 -0
- package/src/workflow/test-runner.ts +120 -5
- package/src/workflow/ui-designer.ts +337 -0
- package/src/workflow/ui-setup.ts +797 -0
- package/src/workflow/ui-verification.ts +357 -0
- package/src/workflow/workflow-logger.ts +353 -0
- package/src/workflow/workspace-manager.ts +912 -0
- package/tests/config/config.test.ts +1 -1
- package/tests/types/consensus.test.ts +3 -3
- package/tests/workflow/plan-mode.test.ts +213 -0
- package/tests/workflow/test-runner.test.ts +5 -3
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workflow Logger
|
|
3
|
+
* Provides persistent logging of all workflow stages for transparency and debugging
|
|
4
|
+
*/
|
|
5
|
+
import { promises as fs } from 'node:fs';
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
/**
|
|
8
|
+
* Workflow logger class that persists logs to the project's docs folder
|
|
9
|
+
*/
|
|
10
|
+
export class WorkflowLogger {
|
|
11
|
+
projectDir;
|
|
12
|
+
logFile;
|
|
13
|
+
entries = [];
|
|
14
|
+
initialized = false;
|
|
15
|
+
constructor(projectDir) {
|
|
16
|
+
this.projectDir = projectDir;
|
|
17
|
+
this.logFile = path.join(projectDir, 'docs', 'WORKFLOW_LOG.md');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Initialize the logger and load existing entries
|
|
21
|
+
*/
|
|
22
|
+
async initialize() {
|
|
23
|
+
if (this.initialized)
|
|
24
|
+
return;
|
|
25
|
+
const docsDir = path.join(this.projectDir, 'docs');
|
|
26
|
+
try {
|
|
27
|
+
await fs.mkdir(docsDir, { recursive: true });
|
|
28
|
+
// Check if log file exists
|
|
29
|
+
try {
|
|
30
|
+
const content = await fs.readFile(this.logFile, 'utf-8');
|
|
31
|
+
// Parse existing entries from the file
|
|
32
|
+
this.entries = this.parseExistingLog(content);
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// File doesn't exist yet, start fresh
|
|
36
|
+
this.entries = [];
|
|
37
|
+
}
|
|
38
|
+
this.initialized = true;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.error('Failed to initialize workflow logger:', error);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parse existing log entries from markdown file
|
|
46
|
+
*/
|
|
47
|
+
parseExistingLog(content) {
|
|
48
|
+
const entries = [];
|
|
49
|
+
// Parse entries from the markdown format
|
|
50
|
+
const entryRegex = /### \[(\d{4}-\d{2}-\d{2}T[^\]]+)\] \[([^\]]+)\] \[([^\]]+)\] ([^\n]+)\n([\s\S]*?)(?=### \[|## Session|$)/g;
|
|
51
|
+
let match;
|
|
52
|
+
while ((match = entryRegex.exec(content)) !== null) {
|
|
53
|
+
try {
|
|
54
|
+
const entry = {
|
|
55
|
+
timestamp: match[1],
|
|
56
|
+
level: match[2],
|
|
57
|
+
stage: match[3],
|
|
58
|
+
event: '',
|
|
59
|
+
message: match[4].trim(),
|
|
60
|
+
};
|
|
61
|
+
// Try to parse data if present
|
|
62
|
+
const dataMatch = match[5]?.match(/```json\n([\s\S]*?)\n```/);
|
|
63
|
+
if (dataMatch) {
|
|
64
|
+
try {
|
|
65
|
+
entry.data = JSON.parse(dataMatch[1]);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Ignore JSON parse errors
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
entries.push(entry);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Skip malformed entries
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return entries;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Log an entry to the workflow log
|
|
81
|
+
*/
|
|
82
|
+
async log(stage, event, message, data, level = 'info') {
|
|
83
|
+
await this.initialize();
|
|
84
|
+
const entry = {
|
|
85
|
+
timestamp: new Date().toISOString(),
|
|
86
|
+
stage,
|
|
87
|
+
event,
|
|
88
|
+
message,
|
|
89
|
+
data,
|
|
90
|
+
level,
|
|
91
|
+
};
|
|
92
|
+
this.entries.push(entry);
|
|
93
|
+
await this.persist();
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Log info message
|
|
97
|
+
*/
|
|
98
|
+
async info(stage, event, message, data) {
|
|
99
|
+
await this.log(stage, event, message, data, 'info');
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Log warning message
|
|
103
|
+
*/
|
|
104
|
+
async warn(stage, event, message, data) {
|
|
105
|
+
await this.log(stage, event, message, data, 'warn');
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Log error message
|
|
109
|
+
*/
|
|
110
|
+
async error(stage, event, message, data) {
|
|
111
|
+
await this.log(stage, event, message, data, 'error');
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Log success message
|
|
115
|
+
*/
|
|
116
|
+
async success(stage, event, message, data) {
|
|
117
|
+
await this.log(stage, event, message, data, 'success');
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Log stage start
|
|
121
|
+
*/
|
|
122
|
+
async stageStart(stage, description, data) {
|
|
123
|
+
await this.info(stage, 'stage_start', `Starting: ${description}`, data);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Log stage completion
|
|
127
|
+
*/
|
|
128
|
+
async stageComplete(stage, description, data) {
|
|
129
|
+
await this.success(stage, 'stage_complete', `Completed: ${description}`, data);
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Log stage failure
|
|
133
|
+
*/
|
|
134
|
+
async stageFailed(stage, description, error, data) {
|
|
135
|
+
await this.error(stage, 'stage_failed', `Failed: ${description} - ${error}`, data);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Persist log entries to file
|
|
139
|
+
*/
|
|
140
|
+
async persist() {
|
|
141
|
+
try {
|
|
142
|
+
const content = this.formatMarkdown();
|
|
143
|
+
await fs.writeFile(this.logFile, content, 'utf-8');
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
console.error('Failed to persist workflow log:', error);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Format log entries as markdown
|
|
151
|
+
*/
|
|
152
|
+
formatMarkdown() {
|
|
153
|
+
const lines = [
|
|
154
|
+
'# Workflow Execution Log',
|
|
155
|
+
'',
|
|
156
|
+
'This file tracks all stages of the Popeye workflow execution for transparency and debugging.',
|
|
157
|
+
'',
|
|
158
|
+
'---',
|
|
159
|
+
'',
|
|
160
|
+
];
|
|
161
|
+
// Group entries by date
|
|
162
|
+
const entriesByDate = new Map();
|
|
163
|
+
for (const entry of this.entries) {
|
|
164
|
+
const date = entry.timestamp.split('T')[0];
|
|
165
|
+
if (!entriesByDate.has(date)) {
|
|
166
|
+
entriesByDate.set(date, []);
|
|
167
|
+
}
|
|
168
|
+
entriesByDate.get(date).push(entry);
|
|
169
|
+
}
|
|
170
|
+
// Write entries grouped by date
|
|
171
|
+
for (const [date, dateEntries] of entriesByDate) {
|
|
172
|
+
lines.push(`## Session: ${date}`);
|
|
173
|
+
lines.push('');
|
|
174
|
+
for (const entry of dateEntries) {
|
|
175
|
+
const levelIcon = this.getLevelIcon(entry.level);
|
|
176
|
+
const time = entry.timestamp.split('T')[1].split('.')[0];
|
|
177
|
+
lines.push(`### [${time}] ${levelIcon} **${entry.stage}** - ${entry.message}`);
|
|
178
|
+
if (entry.data && Object.keys(entry.data).length > 0) {
|
|
179
|
+
lines.push('');
|
|
180
|
+
lines.push('<details>');
|
|
181
|
+
lines.push('<summary>Details</summary>');
|
|
182
|
+
lines.push('');
|
|
183
|
+
lines.push('```json');
|
|
184
|
+
lines.push(JSON.stringify(entry.data, null, 2));
|
|
185
|
+
lines.push('```');
|
|
186
|
+
lines.push('</details>');
|
|
187
|
+
}
|
|
188
|
+
lines.push('');
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Add summary statistics
|
|
192
|
+
lines.push('---');
|
|
193
|
+
lines.push('');
|
|
194
|
+
lines.push('## Summary Statistics');
|
|
195
|
+
lines.push('');
|
|
196
|
+
lines.push(`- **Total Entries:** ${this.entries.length}`);
|
|
197
|
+
lines.push(`- **Errors:** ${this.entries.filter(e => e.level === 'error').length}`);
|
|
198
|
+
lines.push(`- **Warnings:** ${this.entries.filter(e => e.level === 'warn').length}`);
|
|
199
|
+
lines.push(`- **Successful Steps:** ${this.entries.filter(e => e.level === 'success').length}`);
|
|
200
|
+
lines.push('');
|
|
201
|
+
return lines.join('\n');
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* Get icon for log level
|
|
205
|
+
*/
|
|
206
|
+
getLevelIcon(level) {
|
|
207
|
+
switch (level) {
|
|
208
|
+
case 'error':
|
|
209
|
+
return '[ERROR]';
|
|
210
|
+
case 'warn':
|
|
211
|
+
return '[WARN]';
|
|
212
|
+
case 'success':
|
|
213
|
+
return '[OK]';
|
|
214
|
+
case 'debug':
|
|
215
|
+
return '[DEBUG]';
|
|
216
|
+
default:
|
|
217
|
+
return '[INFO]';
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get all log entries
|
|
222
|
+
*/
|
|
223
|
+
getEntries() {
|
|
224
|
+
return [...this.entries];
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Get entries for a specific stage
|
|
228
|
+
*/
|
|
229
|
+
getEntriesForStage(stage) {
|
|
230
|
+
return this.entries.filter(e => e.stage === stage);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Get error entries
|
|
234
|
+
*/
|
|
235
|
+
getErrors() {
|
|
236
|
+
return this.entries.filter(e => e.level === 'error');
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Clear the log (for testing or reset)
|
|
240
|
+
*/
|
|
241
|
+
async clear() {
|
|
242
|
+
this.entries = [];
|
|
243
|
+
await this.persist();
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Global logger instances cache
|
|
248
|
+
*/
|
|
249
|
+
const loggerCache = new Map();
|
|
250
|
+
/**
|
|
251
|
+
* Get or create a workflow logger for a project
|
|
252
|
+
*/
|
|
253
|
+
export function getWorkflowLogger(projectDir) {
|
|
254
|
+
const normalizedPath = path.resolve(projectDir);
|
|
255
|
+
if (!loggerCache.has(normalizedPath)) {
|
|
256
|
+
loggerCache.set(normalizedPath, new WorkflowLogger(normalizedPath));
|
|
257
|
+
}
|
|
258
|
+
return loggerCache.get(normalizedPath);
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Quick logging functions for common use cases
|
|
262
|
+
*/
|
|
263
|
+
export async function logWorkflowEvent(projectDir, stage, event, message, data, level = 'info') {
|
|
264
|
+
const logger = getWorkflowLogger(projectDir);
|
|
265
|
+
await logger.log(stage, event, message, data, level);
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=workflow-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-logger.js","sourceRoot":"","sources":["../../src/workflow/workflow-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace manager module
|
|
3
|
+
* Handles loading, saving, and querying workspace configuration for fullstack projects
|
|
4
|
+
* Also provides app-specific context for AI reviews
|
|
5
|
+
*/
|
|
6
|
+
import type { WorkspaceConfig, WorkspaceApp } from '../types/project.js';
|
|
7
|
+
import type { ReviewAppTarget } from '../types/consensus.js';
|
|
8
|
+
/**
|
|
9
|
+
* Context for AI review of a specific app
|
|
10
|
+
*/
|
|
11
|
+
export interface AppReviewContext {
|
|
12
|
+
appName: 'frontend' | 'backend';
|
|
13
|
+
language: 'python' | 'typescript';
|
|
14
|
+
path: string;
|
|
15
|
+
/** Key source files content for review */
|
|
16
|
+
sourceFiles: Array<{
|
|
17
|
+
path: string;
|
|
18
|
+
content: string;
|
|
19
|
+
}>;
|
|
20
|
+
/** UI spec for frontend */
|
|
21
|
+
uiSpec?: string;
|
|
22
|
+
/** API contracts (OpenAPI) */
|
|
23
|
+
apiContracts?: string;
|
|
24
|
+
/** Test file content */
|
|
25
|
+
testFiles?: Array<{
|
|
26
|
+
path: string;
|
|
27
|
+
content: string;
|
|
28
|
+
}>;
|
|
29
|
+
/** Dependencies (package.json or pyproject.toml) */
|
|
30
|
+
dependencies?: string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Combined review context for fullstack projects
|
|
34
|
+
*/
|
|
35
|
+
export interface FullstackReviewContext {
|
|
36
|
+
frontend?: AppReviewContext;
|
|
37
|
+
backend?: AppReviewContext;
|
|
38
|
+
/** Shared contracts (OpenAPI spec) */
|
|
39
|
+
contracts?: string;
|
|
40
|
+
/** Project-level context */
|
|
41
|
+
projectName: string;
|
|
42
|
+
projectIdea?: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Workspace manager class
|
|
46
|
+
*/
|
|
47
|
+
export declare class WorkspaceManager {
|
|
48
|
+
private projectDir;
|
|
49
|
+
private config;
|
|
50
|
+
constructor(projectDir: string);
|
|
51
|
+
/**
|
|
52
|
+
* Get the path to workspace.json
|
|
53
|
+
*/
|
|
54
|
+
private getWorkspacePath;
|
|
55
|
+
/**
|
|
56
|
+
* Check if this is a workspace project
|
|
57
|
+
*/
|
|
58
|
+
isWorkspaceProject(): Promise<boolean>;
|
|
59
|
+
/**
|
|
60
|
+
* Load workspace configuration
|
|
61
|
+
*/
|
|
62
|
+
load(): Promise<WorkspaceConfig | null>;
|
|
63
|
+
/**
|
|
64
|
+
* Save workspace configuration
|
|
65
|
+
*/
|
|
66
|
+
save(config: WorkspaceConfig): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* Get the loaded configuration
|
|
69
|
+
*/
|
|
70
|
+
getConfig(): WorkspaceConfig | null;
|
|
71
|
+
/**
|
|
72
|
+
* Get a specific app configuration
|
|
73
|
+
*/
|
|
74
|
+
getApp(appName: 'frontend' | 'backend'): WorkspaceApp | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* Get the absolute path to an app
|
|
77
|
+
*/
|
|
78
|
+
getAppPath(appName: 'frontend' | 'backend'): string | null;
|
|
79
|
+
/**
|
|
80
|
+
* Get all app names
|
|
81
|
+
*/
|
|
82
|
+
getAppNames(): ('frontend' | 'backend')[];
|
|
83
|
+
/**
|
|
84
|
+
* Get test command for a specific app
|
|
85
|
+
*/
|
|
86
|
+
getTestCommand(appName: 'frontend' | 'backend'): string | null;
|
|
87
|
+
/**
|
|
88
|
+
* Get all test commands (returns object with app names as keys)
|
|
89
|
+
*/
|
|
90
|
+
getAllTestCommands(): Record<string, {
|
|
91
|
+
path: string;
|
|
92
|
+
command: string;
|
|
93
|
+
}>;
|
|
94
|
+
/**
|
|
95
|
+
* Get the combined test-all command
|
|
96
|
+
*/
|
|
97
|
+
getTestAllCommand(): string | null;
|
|
98
|
+
/**
|
|
99
|
+
* Get lint command for a specific app
|
|
100
|
+
*/
|
|
101
|
+
getLintCommand(appName: 'frontend' | 'backend'): string | null;
|
|
102
|
+
/**
|
|
103
|
+
* Get all lint commands
|
|
104
|
+
*/
|
|
105
|
+
getAllLintCommands(): Record<string, {
|
|
106
|
+
path: string;
|
|
107
|
+
command: string;
|
|
108
|
+
}>;
|
|
109
|
+
/**
|
|
110
|
+
* Get the combined lint-all command
|
|
111
|
+
*/
|
|
112
|
+
getLintAllCommand(): string | null;
|
|
113
|
+
/**
|
|
114
|
+
* Get build command for a specific app
|
|
115
|
+
*/
|
|
116
|
+
getBuildCommand(appName: 'frontend' | 'backend'): string | null;
|
|
117
|
+
/**
|
|
118
|
+
* Get all build commands
|
|
119
|
+
*/
|
|
120
|
+
getAllBuildCommands(): Record<string, {
|
|
121
|
+
path: string;
|
|
122
|
+
command: string;
|
|
123
|
+
}>;
|
|
124
|
+
/**
|
|
125
|
+
* Get the combined build-all command
|
|
126
|
+
*/
|
|
127
|
+
getBuildAllCommand(): string | null;
|
|
128
|
+
/**
|
|
129
|
+
* Get dev command for a specific app
|
|
130
|
+
*/
|
|
131
|
+
getDevCommand(appName: 'frontend' | 'backend'): string | null;
|
|
132
|
+
/**
|
|
133
|
+
* Get all dev commands
|
|
134
|
+
*/
|
|
135
|
+
getAllDevCommands(): Record<string, {
|
|
136
|
+
path: string;
|
|
137
|
+
command: string;
|
|
138
|
+
}>;
|
|
139
|
+
/**
|
|
140
|
+
* Get the combined dev-all command (usually docker-compose up)
|
|
141
|
+
*/
|
|
142
|
+
getDevAllCommand(): string | null;
|
|
143
|
+
/**
|
|
144
|
+
* Get docker-compose path
|
|
145
|
+
*/
|
|
146
|
+
getDockerComposePath(): string | null;
|
|
147
|
+
/**
|
|
148
|
+
* Get context roots for an app (files to include in AI context)
|
|
149
|
+
*/
|
|
150
|
+
getContextRoots(appName: 'frontend' | 'backend'): string[];
|
|
151
|
+
/**
|
|
152
|
+
* Get UI spec path (for frontend)
|
|
153
|
+
*/
|
|
154
|
+
getUiSpecPath(): string | null;
|
|
155
|
+
/**
|
|
156
|
+
* Get contracts path (OpenAPI spec)
|
|
157
|
+
*/
|
|
158
|
+
getContractsPath(): string | null;
|
|
159
|
+
/**
|
|
160
|
+
* Get app language
|
|
161
|
+
*/
|
|
162
|
+
getAppLanguage(appName: 'frontend' | 'backend'): 'python' | 'typescript' | null;
|
|
163
|
+
/**
|
|
164
|
+
* Determine which app should handle a file based on path
|
|
165
|
+
*/
|
|
166
|
+
getAppForFile(filePath: string): 'frontend' | 'backend' | null;
|
|
167
|
+
/**
|
|
168
|
+
* Get review context for a specific app
|
|
169
|
+
* Reads key files from contextRoots to provide to AI reviewers
|
|
170
|
+
*/
|
|
171
|
+
getAppReviewContext(appName: 'frontend' | 'backend', options?: {
|
|
172
|
+
maxFiles?: number;
|
|
173
|
+
maxFileSize?: number;
|
|
174
|
+
includeTests?: boolean;
|
|
175
|
+
}): Promise<AppReviewContext | null>;
|
|
176
|
+
/**
|
|
177
|
+
* Get combined review context for fullstack project
|
|
178
|
+
*/
|
|
179
|
+
getFullstackReviewContext(projectName: string, projectIdea?: string, options?: {
|
|
180
|
+
maxFilesPerApp?: number;
|
|
181
|
+
includeTests?: boolean;
|
|
182
|
+
}): Promise<FullstackReviewContext>;
|
|
183
|
+
/**
|
|
184
|
+
* Format app context for AI review prompt
|
|
185
|
+
*/
|
|
186
|
+
formatContextForReview(context: AppReviewContext): string;
|
|
187
|
+
/**
|
|
188
|
+
* Format fullstack context for review prompt
|
|
189
|
+
*/
|
|
190
|
+
formatFullstackContextForReview(context: FullstackReviewContext): string;
|
|
191
|
+
/**
|
|
192
|
+
* Determine review app target based on plan content
|
|
193
|
+
* Analyzes plan text to determine if it's frontend, backend, or unified
|
|
194
|
+
*/
|
|
195
|
+
categorizeByPlanContent(planContent: string): ReviewAppTarget;
|
|
196
|
+
/**
|
|
197
|
+
* Read directory recursively and return file contents
|
|
198
|
+
*/
|
|
199
|
+
private readDirectoryRecursive;
|
|
200
|
+
/**
|
|
201
|
+
* Find test files in a directory
|
|
202
|
+
*/
|
|
203
|
+
private findTestFiles;
|
|
204
|
+
/**
|
|
205
|
+
* Get feedback document paths for workspace
|
|
206
|
+
*/
|
|
207
|
+
getFeedbackPaths(): {
|
|
208
|
+
master: {
|
|
209
|
+
unified: string;
|
|
210
|
+
frontend: string;
|
|
211
|
+
backend: string;
|
|
212
|
+
};
|
|
213
|
+
getMilestonePaths: (milestoneId: string) => {
|
|
214
|
+
unified: string;
|
|
215
|
+
frontend: string;
|
|
216
|
+
backend: string;
|
|
217
|
+
};
|
|
218
|
+
getTaskPaths: (milestoneId: string, taskId: string) => {
|
|
219
|
+
unified: string;
|
|
220
|
+
frontend: string;
|
|
221
|
+
backend: string;
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Load workspace configuration from a project directory
|
|
227
|
+
*
|
|
228
|
+
* @param projectDir - Project directory
|
|
229
|
+
* @returns WorkspaceConfig or null if not a workspace project
|
|
230
|
+
*/
|
|
231
|
+
export declare function loadWorkspace(projectDir: string): Promise<WorkspaceConfig | null>;
|
|
232
|
+
/**
|
|
233
|
+
* Save workspace configuration to a project directory
|
|
234
|
+
*
|
|
235
|
+
* @param projectDir - Project directory
|
|
236
|
+
* @param config - Workspace configuration
|
|
237
|
+
*/
|
|
238
|
+
export declare function saveWorkspace(projectDir: string, config: WorkspaceConfig): Promise<void>;
|
|
239
|
+
/**
|
|
240
|
+
* Check if a directory is a workspace project
|
|
241
|
+
*
|
|
242
|
+
* @param projectDir - Project directory
|
|
243
|
+
* @returns True if workspace project
|
|
244
|
+
*/
|
|
245
|
+
export declare function isWorkspaceProject(projectDir: string): Promise<boolean>;
|
|
246
|
+
/**
|
|
247
|
+
* Get app context for AI code generation
|
|
248
|
+
*
|
|
249
|
+
* @param projectDir - Project directory
|
|
250
|
+
* @param appName - App name
|
|
251
|
+
* @returns Object with app info and context files
|
|
252
|
+
*/
|
|
253
|
+
export declare function getAppContext(projectDir: string, appName: 'frontend' | 'backend'): Promise<{
|
|
254
|
+
app: WorkspaceApp | undefined;
|
|
255
|
+
language: 'python' | 'typescript' | null;
|
|
256
|
+
contextRoots: string[];
|
|
257
|
+
path: string | null;
|
|
258
|
+
} | null>;
|
|
259
|
+
/**
|
|
260
|
+
* Get test commands for workspace
|
|
261
|
+
*
|
|
262
|
+
* @param projectDir - Project directory
|
|
263
|
+
* @returns Test commands per app and combined command
|
|
264
|
+
*/
|
|
265
|
+
export declare function getTestCommands(projectDir: string): Promise<{
|
|
266
|
+
perApp: Record<string, {
|
|
267
|
+
path: string;
|
|
268
|
+
command: string;
|
|
269
|
+
}>;
|
|
270
|
+
combined: string | null;
|
|
271
|
+
} | null>;
|
|
272
|
+
/**
|
|
273
|
+
* Get build commands for workspace
|
|
274
|
+
*
|
|
275
|
+
* @param projectDir - Project directory
|
|
276
|
+
* @returns Build commands per app and combined command
|
|
277
|
+
*/
|
|
278
|
+
export declare function getBuildCommands(projectDir: string): Promise<{
|
|
279
|
+
perApp: Record<string, {
|
|
280
|
+
path: string;
|
|
281
|
+
command: string;
|
|
282
|
+
}>;
|
|
283
|
+
combined: string | null;
|
|
284
|
+
} | null>;
|
|
285
|
+
/**
|
|
286
|
+
* Get app-specific review context
|
|
287
|
+
*
|
|
288
|
+
* @param projectDir - Project directory
|
|
289
|
+
* @param appName - App name (frontend or backend)
|
|
290
|
+
* @returns Review context with source files and metadata
|
|
291
|
+
*/
|
|
292
|
+
export declare function getAppReviewContext(projectDir: string, appName: 'frontend' | 'backend'): Promise<AppReviewContext | null>;
|
|
293
|
+
/**
|
|
294
|
+
* Get fullstack review context for AI reviews
|
|
295
|
+
*
|
|
296
|
+
* @param projectDir - Project directory
|
|
297
|
+
* @param projectName - Project name
|
|
298
|
+
* @param projectIdea - Original project idea
|
|
299
|
+
* @returns Combined review context for both apps
|
|
300
|
+
*/
|
|
301
|
+
export declare function getFullstackReviewContext(projectDir: string, projectName: string, projectIdea?: string): Promise<FullstackReviewContext | null>;
|
|
302
|
+
/**
|
|
303
|
+
* Format context for AI review prompt
|
|
304
|
+
*
|
|
305
|
+
* @param projectDir - Project directory
|
|
306
|
+
* @param projectName - Project name
|
|
307
|
+
* @param projectIdea - Original project idea
|
|
308
|
+
* @returns Formatted string for AI review
|
|
309
|
+
*/
|
|
310
|
+
export declare function formatContextForAIReview(projectDir: string, projectName: string, projectIdea?: string): Promise<string | null>;
|
|
311
|
+
/**
|
|
312
|
+
* Categorize a task/plan as frontend, backend, or unified
|
|
313
|
+
*
|
|
314
|
+
* @param projectDir - Project directory
|
|
315
|
+
* @param planContent - Plan or task content to analyze
|
|
316
|
+
* @returns App target category
|
|
317
|
+
*/
|
|
318
|
+
export declare function categorizePlanContent(projectDir: string, planContent: string): Promise<ReviewAppTarget>;
|
|
319
|
+
/**
|
|
320
|
+
* Get feedback paths for a workspace project
|
|
321
|
+
*
|
|
322
|
+
* @param projectDir - Project directory
|
|
323
|
+
* @returns Object with feedback path getters
|
|
324
|
+
*/
|
|
325
|
+
export declare function getWorkspaceFeedbackPaths(projectDir: string): Promise<{
|
|
326
|
+
master: {
|
|
327
|
+
unified: string;
|
|
328
|
+
frontend: string;
|
|
329
|
+
backend: string;
|
|
330
|
+
};
|
|
331
|
+
getMilestonePaths: (milestoneId: string) => {
|
|
332
|
+
unified: string;
|
|
333
|
+
frontend: string;
|
|
334
|
+
backend: string;
|
|
335
|
+
};
|
|
336
|
+
getTaskPaths: (milestoneId: string, taskId: string) => {
|
|
337
|
+
unified: string;
|
|
338
|
+
frontend: string;
|
|
339
|
+
backend: string;
|
|
340
|
+
};
|
|
341
|
+
} | null>;
|
|
342
|
+
//# sourceMappingURL=workspace-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-manager.d.ts","sourceRoot":"","sources":["../../src/workflow/workspace-manager.ts"],"names":[],"mappings":"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"}
|