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.
Files changed (216) hide show
  1. package/.env.example +24 -1
  2. package/CONTRIBUTING.md +275 -0
  3. package/OPEN_SOURCE_MANIFESTO.md +172 -0
  4. package/README.md +832 -123
  5. package/dist/adapters/claude.d.ts +19 -4
  6. package/dist/adapters/claude.d.ts.map +1 -1
  7. package/dist/adapters/claude.js +908 -42
  8. package/dist/adapters/claude.js.map +1 -1
  9. package/dist/adapters/gemini.d.ts +55 -0
  10. package/dist/adapters/gemini.d.ts.map +1 -0
  11. package/dist/adapters/gemini.js +318 -0
  12. package/dist/adapters/gemini.js.map +1 -0
  13. package/dist/adapters/grok.d.ts +73 -0
  14. package/dist/adapters/grok.d.ts.map +1 -0
  15. package/dist/adapters/grok.js +430 -0
  16. package/dist/adapters/grok.js.map +1 -0
  17. package/dist/adapters/openai.d.ts +1 -1
  18. package/dist/adapters/openai.d.ts.map +1 -1
  19. package/dist/adapters/openai.js +47 -8
  20. package/dist/adapters/openai.js.map +1 -1
  21. package/dist/auth/claude.d.ts +11 -9
  22. package/dist/auth/claude.d.ts.map +1 -1
  23. package/dist/auth/claude.js +107 -71
  24. package/dist/auth/claude.js.map +1 -1
  25. package/dist/auth/gemini.d.ts +58 -0
  26. package/dist/auth/gemini.d.ts.map +1 -0
  27. package/dist/auth/gemini.js +172 -0
  28. package/dist/auth/gemini.js.map +1 -0
  29. package/dist/auth/grok.d.ts +73 -0
  30. package/dist/auth/grok.d.ts.map +1 -0
  31. package/dist/auth/grok.js +211 -0
  32. package/dist/auth/grok.js.map +1 -0
  33. package/dist/auth/index.d.ts +14 -7
  34. package/dist/auth/index.d.ts.map +1 -1
  35. package/dist/auth/index.js +41 -6
  36. package/dist/auth/index.js.map +1 -1
  37. package/dist/auth/keychain.d.ts +20 -7
  38. package/dist/auth/keychain.d.ts.map +1 -1
  39. package/dist/auth/keychain.js +85 -29
  40. package/dist/auth/keychain.js.map +1 -1
  41. package/dist/auth/openai.d.ts +2 -2
  42. package/dist/auth/openai.d.ts.map +1 -1
  43. package/dist/auth/openai.js +30 -32
  44. package/dist/auth/openai.js.map +1 -1
  45. package/dist/cli/commands/auth.d.ts +1 -1
  46. package/dist/cli/commands/auth.d.ts.map +1 -1
  47. package/dist/cli/commands/auth.js +79 -8
  48. package/dist/cli/commands/auth.js.map +1 -1
  49. package/dist/cli/commands/create.d.ts.map +1 -1
  50. package/dist/cli/commands/create.js +15 -4
  51. package/dist/cli/commands/create.js.map +1 -1
  52. package/dist/cli/interactive.d.ts.map +1 -1
  53. package/dist/cli/interactive.js +1494 -114
  54. package/dist/cli/interactive.js.map +1 -1
  55. package/dist/config/defaults.d.ts +9 -1
  56. package/dist/config/defaults.d.ts.map +1 -1
  57. package/dist/config/defaults.js +19 -2
  58. package/dist/config/defaults.js.map +1 -1
  59. package/dist/config/index.d.ts +19 -0
  60. package/dist/config/index.d.ts.map +1 -1
  61. package/dist/config/index.js +33 -1
  62. package/dist/config/index.js.map +1 -1
  63. package/dist/config/schema.d.ts +47 -0
  64. package/dist/config/schema.d.ts.map +1 -1
  65. package/dist/config/schema.js +29 -1
  66. package/dist/config/schema.js.map +1 -1
  67. package/dist/generators/fullstack.d.ts +32 -0
  68. package/dist/generators/fullstack.d.ts.map +1 -0
  69. package/dist/generators/fullstack.js +497 -0
  70. package/dist/generators/fullstack.js.map +1 -0
  71. package/dist/generators/index.d.ts +4 -3
  72. package/dist/generators/index.d.ts.map +1 -1
  73. package/dist/generators/index.js +15 -1
  74. package/dist/generators/index.js.map +1 -1
  75. package/dist/generators/python.d.ts +17 -1
  76. package/dist/generators/python.d.ts.map +1 -1
  77. package/dist/generators/python.js +34 -20
  78. package/dist/generators/python.js.map +1 -1
  79. package/dist/generators/templates/fullstack.d.ts +113 -0
  80. package/dist/generators/templates/fullstack.d.ts.map +1 -0
  81. package/dist/generators/templates/fullstack.js +1004 -0
  82. package/dist/generators/templates/fullstack.js.map +1 -0
  83. package/dist/generators/typescript.d.ts +19 -1
  84. package/dist/generators/typescript.d.ts.map +1 -1
  85. package/dist/generators/typescript.js +37 -20
  86. package/dist/generators/typescript.js.map +1 -1
  87. package/dist/state/index.d.ts +108 -0
  88. package/dist/state/index.d.ts.map +1 -1
  89. package/dist/state/index.js +551 -4
  90. package/dist/state/index.js.map +1 -1
  91. package/dist/state/registry.d.ts +52 -0
  92. package/dist/state/registry.d.ts.map +1 -0
  93. package/dist/state/registry.js +215 -0
  94. package/dist/state/registry.js.map +1 -0
  95. package/dist/types/cli.d.ts +8 -0
  96. package/dist/types/cli.d.ts.map +1 -1
  97. package/dist/types/cli.js.map +1 -1
  98. package/dist/types/consensus.d.ts +186 -4
  99. package/dist/types/consensus.d.ts.map +1 -1
  100. package/dist/types/consensus.js +35 -3
  101. package/dist/types/consensus.js.map +1 -1
  102. package/dist/types/project.d.ts +76 -0
  103. package/dist/types/project.d.ts.map +1 -1
  104. package/dist/types/project.js +1 -1
  105. package/dist/types/project.js.map +1 -1
  106. package/dist/types/workflow.d.ts +217 -16
  107. package/dist/types/workflow.d.ts.map +1 -1
  108. package/dist/types/workflow.js +40 -1
  109. package/dist/types/workflow.js.map +1 -1
  110. package/dist/workflow/auto-fix.d.ts +45 -0
  111. package/dist/workflow/auto-fix.d.ts.map +1 -0
  112. package/dist/workflow/auto-fix.js +274 -0
  113. package/dist/workflow/auto-fix.js.map +1 -0
  114. package/dist/workflow/consensus.d.ts +70 -2
  115. package/dist/workflow/consensus.d.ts.map +1 -1
  116. package/dist/workflow/consensus.js +872 -17
  117. package/dist/workflow/consensus.js.map +1 -1
  118. package/dist/workflow/execution-mode.d.ts +10 -4
  119. package/dist/workflow/execution-mode.d.ts.map +1 -1
  120. package/dist/workflow/execution-mode.js +547 -58
  121. package/dist/workflow/execution-mode.js.map +1 -1
  122. package/dist/workflow/index.d.ts +14 -2
  123. package/dist/workflow/index.d.ts.map +1 -1
  124. package/dist/workflow/index.js +69 -6
  125. package/dist/workflow/index.js.map +1 -1
  126. package/dist/workflow/milestone-workflow.d.ts +34 -0
  127. package/dist/workflow/milestone-workflow.d.ts.map +1 -0
  128. package/dist/workflow/milestone-workflow.js +414 -0
  129. package/dist/workflow/milestone-workflow.js.map +1 -0
  130. package/dist/workflow/plan-mode.d.ts +80 -3
  131. package/dist/workflow/plan-mode.d.ts.map +1 -1
  132. package/dist/workflow/plan-mode.js +767 -49
  133. package/dist/workflow/plan-mode.js.map +1 -1
  134. package/dist/workflow/plan-storage.d.ts +386 -0
  135. package/dist/workflow/plan-storage.d.ts.map +1 -0
  136. package/dist/workflow/plan-storage.js +878 -0
  137. package/dist/workflow/plan-storage.js.map +1 -0
  138. package/dist/workflow/project-verification.d.ts +37 -0
  139. package/dist/workflow/project-verification.d.ts.map +1 -0
  140. package/dist/workflow/project-verification.js +381 -0
  141. package/dist/workflow/project-verification.js.map +1 -0
  142. package/dist/workflow/task-workflow.d.ts +37 -0
  143. package/dist/workflow/task-workflow.d.ts.map +1 -0
  144. package/dist/workflow/task-workflow.js +386 -0
  145. package/dist/workflow/task-workflow.js.map +1 -0
  146. package/dist/workflow/test-runner.d.ts +9 -0
  147. package/dist/workflow/test-runner.d.ts.map +1 -1
  148. package/dist/workflow/test-runner.js +101 -5
  149. package/dist/workflow/test-runner.js.map +1 -1
  150. package/dist/workflow/ui-designer.d.ts +82 -0
  151. package/dist/workflow/ui-designer.d.ts.map +1 -0
  152. package/dist/workflow/ui-designer.js +234 -0
  153. package/dist/workflow/ui-designer.js.map +1 -0
  154. package/dist/workflow/ui-setup.d.ts +58 -0
  155. package/dist/workflow/ui-setup.d.ts.map +1 -0
  156. package/dist/workflow/ui-setup.js +685 -0
  157. package/dist/workflow/ui-setup.js.map +1 -0
  158. package/dist/workflow/ui-verification.d.ts +114 -0
  159. package/dist/workflow/ui-verification.d.ts.map +1 -0
  160. package/dist/workflow/ui-verification.js +258 -0
  161. package/dist/workflow/ui-verification.js.map +1 -0
  162. package/dist/workflow/workflow-logger.d.ts +110 -0
  163. package/dist/workflow/workflow-logger.d.ts.map +1 -0
  164. package/dist/workflow/workflow-logger.js +267 -0
  165. package/dist/workflow/workflow-logger.js.map +1 -0
  166. package/dist/workflow/workspace-manager.d.ts +342 -0
  167. package/dist/workflow/workspace-manager.d.ts.map +1 -0
  168. package/dist/workflow/workspace-manager.js +733 -0
  169. package/dist/workflow/workspace-manager.js.map +1 -0
  170. package/package.json +2 -2
  171. package/src/adapters/claude.ts +1067 -47
  172. package/src/adapters/gemini.ts +373 -0
  173. package/src/adapters/grok.ts +492 -0
  174. package/src/adapters/openai.ts +48 -9
  175. package/src/auth/claude.ts +120 -78
  176. package/src/auth/gemini.ts +207 -0
  177. package/src/auth/grok.ts +255 -0
  178. package/src/auth/index.ts +47 -9
  179. package/src/auth/keychain.ts +95 -28
  180. package/src/auth/openai.ts +29 -36
  181. package/src/cli/commands/auth.ts +89 -10
  182. package/src/cli/commands/create.ts +13 -4
  183. package/src/cli/interactive.ts +1774 -142
  184. package/src/config/defaults.ts +19 -2
  185. package/src/config/index.ts +36 -1
  186. package/src/config/schema.ts +30 -1
  187. package/src/generators/fullstack.ts +551 -0
  188. package/src/generators/index.ts +25 -1
  189. package/src/generators/python.ts +65 -20
  190. package/src/generators/templates/fullstack.ts +1047 -0
  191. package/src/generators/typescript.ts +69 -20
  192. package/src/state/index.ts +713 -4
  193. package/src/state/registry.ts +278 -0
  194. package/src/types/cli.ts +8 -0
  195. package/src/types/consensus.ts +197 -6
  196. package/src/types/project.ts +82 -1
  197. package/src/types/workflow.ts +90 -1
  198. package/src/workflow/auto-fix.ts +340 -0
  199. package/src/workflow/consensus.ts +1180 -16
  200. package/src/workflow/execution-mode.ts +673 -74
  201. package/src/workflow/index.ts +95 -6
  202. package/src/workflow/milestone-workflow.ts +576 -0
  203. package/src/workflow/plan-mode.ts +924 -50
  204. package/src/workflow/plan-storage.ts +1282 -0
  205. package/src/workflow/project-verification.ts +471 -0
  206. package/src/workflow/task-workflow.ts +528 -0
  207. package/src/workflow/test-runner.ts +120 -5
  208. package/src/workflow/ui-designer.ts +337 -0
  209. package/src/workflow/ui-setup.ts +797 -0
  210. package/src/workflow/ui-verification.ts +357 -0
  211. package/src/workflow/workflow-logger.ts +353 -0
  212. package/src/workflow/workspace-manager.ts +912 -0
  213. package/tests/config/config.test.ts +1 -1
  214. package/tests/types/consensus.test.ts +3 -3
  215. package/tests/workflow/plan-mode.test.ts +213 -0
  216. 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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"}