@rajat-rastogi/maestro 0.1.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 (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +254 -0
  3. package/defaults/agents/documentation.txt +18 -0
  4. package/defaults/agents/implementation.txt +16 -0
  5. package/defaults/agents/quality.txt +19 -0
  6. package/defaults/agents/simplification.txt +19 -0
  7. package/defaults/agents/testing.txt +16 -0
  8. package/defaults/config +46 -0
  9. package/defaults/plan-tips.md +50 -0
  10. package/defaults/prompts/finalize.txt +14 -0
  11. package/defaults/prompts/hint_analysis.txt +38 -0
  12. package/defaults/prompts/plan_create.txt +36 -0
  13. package/defaults/prompts/review_first.txt +37 -0
  14. package/defaults/prompts/review_second.txt +36 -0
  15. package/defaults/prompts/task.txt +23 -0
  16. package/dist/backend/backend.d.ts +29 -0
  17. package/dist/backend/backend.d.ts.map +1 -0
  18. package/dist/backend/backend.js +9 -0
  19. package/dist/backend/backend.js.map +1 -0
  20. package/dist/backend/claude.d.ts +12 -0
  21. package/dist/backend/claude.d.ts.map +1 -0
  22. package/dist/backend/claude.js +155 -0
  23. package/dist/backend/claude.js.map +1 -0
  24. package/dist/backend/copilot.d.ts +11 -0
  25. package/dist/backend/copilot.d.ts.map +1 -0
  26. package/dist/backend/copilot.js +110 -0
  27. package/dist/backend/copilot.js.map +1 -0
  28. package/dist/backend/factory.d.ts +4 -0
  29. package/dist/backend/factory.d.ts.map +1 -0
  30. package/dist/backend/factory.js +13 -0
  31. package/dist/backend/factory.js.map +1 -0
  32. package/dist/config/configserver.d.ts +9 -0
  33. package/dist/config/configserver.d.ts.map +1 -0
  34. package/dist/config/configserver.js +141 -0
  35. package/dist/config/configserver.js.map +1 -0
  36. package/dist/config/dump.d.ts +2 -0
  37. package/dist/config/dump.d.ts.map +1 -0
  38. package/dist/config/dump.js +24 -0
  39. package/dist/config/dump.js.map +1 -0
  40. package/dist/config/loader.d.ts +11 -0
  41. package/dist/config/loader.d.ts.map +1 -0
  42. package/dist/config/loader.js +119 -0
  43. package/dist/config/loader.js.map +1 -0
  44. package/dist/config/prompts.d.ts +19 -0
  45. package/dist/config/prompts.d.ts.map +1 -0
  46. package/dist/config/prompts.js +128 -0
  47. package/dist/config/prompts.js.map +1 -0
  48. package/dist/config/reset.d.ts +3 -0
  49. package/dist/config/reset.d.ts.map +1 -0
  50. package/dist/config/reset.js +23 -0
  51. package/dist/config/reset.js.map +1 -0
  52. package/dist/config/template.d.ts +5 -0
  53. package/dist/config/template.d.ts.map +1 -0
  54. package/dist/config/template.js +11 -0
  55. package/dist/config/template.js.map +1 -0
  56. package/dist/config/types.d.ts +35 -0
  57. package/dist/config/types.d.ts.map +1 -0
  58. package/dist/config/types.js +42 -0
  59. package/dist/config/types.js.map +1 -0
  60. package/dist/config/write.d.ts +5 -0
  61. package/dist/config/write.d.ts.map +1 -0
  62. package/dist/config/write.js +59 -0
  63. package/dist/config/write.js.map +1 -0
  64. package/dist/dashboard/assets/config.html +1012 -0
  65. package/dist/dashboard/assets/dashboard.html +871 -0
  66. package/dist/dashboard/assets/help.html +657 -0
  67. package/dist/dashboard/assets.d.ts +2 -0
  68. package/dist/dashboard/assets.d.ts.map +1 -0
  69. package/dist/dashboard/assets.js +5 -0
  70. package/dist/dashboard/assets.js.map +1 -0
  71. package/dist/dashboard/event-bus.d.ts +11 -0
  72. package/dist/dashboard/event-bus.d.ts.map +1 -0
  73. package/dist/dashboard/event-bus.js +4 -0
  74. package/dist/dashboard/event-bus.js.map +1 -0
  75. package/dist/dashboard/replay-parser.d.ts +6 -0
  76. package/dist/dashboard/replay-parser.d.ts.map +1 -0
  77. package/dist/dashboard/replay-parser.js +56 -0
  78. package/dist/dashboard/replay-parser.js.map +1 -0
  79. package/dist/dashboard/server.d.ts +14 -0
  80. package/dist/dashboard/server.d.ts.map +1 -0
  81. package/dist/dashboard/server.js +178 -0
  82. package/dist/dashboard/server.js.map +1 -0
  83. package/dist/dashboard/watcher.d.ts +17 -0
  84. package/dist/dashboard/watcher.d.ts.map +1 -0
  85. package/dist/dashboard/watcher.js +73 -0
  86. package/dist/dashboard/watcher.js.map +1 -0
  87. package/dist/executor/hints.d.ts +21 -0
  88. package/dist/executor/hints.d.ts.map +1 -0
  89. package/dist/executor/hints.js +102 -0
  90. package/dist/executor/hints.js.map +1 -0
  91. package/dist/executor/task.d.ts +19 -0
  92. package/dist/executor/task.d.ts.map +1 -0
  93. package/dist/executor/task.js +119 -0
  94. package/dist/executor/task.js.map +1 -0
  95. package/dist/executor/validation.d.ts +18 -0
  96. package/dist/executor/validation.d.ts.map +1 -0
  97. package/dist/executor/validation.js +73 -0
  98. package/dist/executor/validation.js.map +1 -0
  99. package/dist/git/branch.d.ts +23 -0
  100. package/dist/git/branch.d.ts.map +1 -0
  101. package/dist/git/branch.js +64 -0
  102. package/dist/git/branch.js.map +1 -0
  103. package/dist/git/commit.d.ts +21 -0
  104. package/dist/git/commit.d.ts.map +1 -0
  105. package/dist/git/commit.js +37 -0
  106. package/dist/git/commit.js.map +1 -0
  107. package/dist/git/diff.d.ts +15 -0
  108. package/dist/git/diff.d.ts.map +1 -0
  109. package/dist/git/diff.js +26 -0
  110. package/dist/git/diff.js.map +1 -0
  111. package/dist/git/git.d.ts +9 -0
  112. package/dist/git/git.d.ts.map +1 -0
  113. package/dist/git/git.js +20 -0
  114. package/dist/git/git.js.map +1 -0
  115. package/dist/git/gitignore.d.ts +2 -0
  116. package/dist/git/gitignore.d.ts.map +1 -0
  117. package/dist/git/gitignore.js +66 -0
  118. package/dist/git/gitignore.js.map +1 -0
  119. package/dist/git/worktree.d.ts +3 -0
  120. package/dist/git/worktree.d.ts.map +1 -0
  121. package/dist/git/worktree.js +17 -0
  122. package/dist/git/worktree.js.map +1 -0
  123. package/dist/main.d.ts +3 -0
  124. package/dist/main.d.ts.map +1 -0
  125. package/dist/main.js +212 -0
  126. package/dist/main.js.map +1 -0
  127. package/dist/orchestrator/orchestrator.d.ts +21 -0
  128. package/dist/orchestrator/orchestrator.d.ts.map +1 -0
  129. package/dist/orchestrator/orchestrator.js +218 -0
  130. package/dist/orchestrator/orchestrator.js.map +1 -0
  131. package/dist/plan/creator.d.ts +27 -0
  132. package/dist/plan/creator.d.ts.map +1 -0
  133. package/dist/plan/creator.js +251 -0
  134. package/dist/plan/creator.js.map +1 -0
  135. package/dist/plan/parser.d.ts +11 -0
  136. package/dist/plan/parser.d.ts.map +1 -0
  137. package/dist/plan/parser.js +151 -0
  138. package/dist/plan/parser.js.map +1 -0
  139. package/dist/plan/types.d.ts +23 -0
  140. package/dist/plan/types.d.ts.map +1 -0
  141. package/dist/plan/types.js +2 -0
  142. package/dist/plan/types.js.map +1 -0
  143. package/dist/plan/updater.d.ts +16 -0
  144. package/dist/plan/updater.d.ts.map +1 -0
  145. package/dist/plan/updater.js +59 -0
  146. package/dist/plan/updater.js.map +1 -0
  147. package/dist/progress/colors.d.ts +9 -0
  148. package/dist/progress/colors.d.ts.map +1 -0
  149. package/dist/progress/colors.js +39 -0
  150. package/dist/progress/colors.js.map +1 -0
  151. package/dist/progress/logger.d.ts +17 -0
  152. package/dist/progress/logger.d.ts.map +1 -0
  153. package/dist/progress/logger.js +101 -0
  154. package/dist/progress/logger.js.map +1 -0
  155. package/dist/progress/notify.d.ts +2 -0
  156. package/dist/progress/notify.d.ts.map +1 -0
  157. package/dist/progress/notify.js +37 -0
  158. package/dist/progress/notify.js.map +1 -0
  159. package/dist/progress/timestamp.d.ts +5 -0
  160. package/dist/progress/timestamp.d.ts.map +1 -0
  161. package/dist/progress/timestamp.js +13 -0
  162. package/dist/progress/timestamp.js.map +1 -0
  163. package/dist/review/agents.d.ts +18 -0
  164. package/dist/review/agents.d.ts.map +1 -0
  165. package/dist/review/agents.js +43 -0
  166. package/dist/review/agents.js.map +1 -0
  167. package/dist/review/pipeline.d.ts +36 -0
  168. package/dist/review/pipeline.d.ts.map +1 -0
  169. package/dist/review/pipeline.js +210 -0
  170. package/dist/review/pipeline.js.map +1 -0
  171. package/dist/sea.d.ts +19 -0
  172. package/dist/sea.d.ts.map +1 -0
  173. package/dist/sea.js +41 -0
  174. package/dist/sea.js.map +1 -0
  175. package/package.json +57 -0
package/dist/main.js ADDED
@@ -0,0 +1,212 @@
1
+ #!/usr/bin/env node
2
+ import * as fs from 'fs';
3
+ import * as os from 'os';
4
+ import * as path from 'path';
5
+ import { spawn } from 'child_process';
6
+ import { Command } from 'commander';
7
+ import { Orchestrator } from './orchestrator/orchestrator.js';
8
+ import { loadConfig } from './config/loader.js';
9
+ import { createLogger } from './progress/logger.js';
10
+ import { sendNotification } from './progress/notify.js';
11
+ process.on('uncaughtException', (err) => {
12
+ console.error(`maestro: uncaught exception: ${err.message}`);
13
+ process.exit(1);
14
+ });
15
+ process.on('unhandledRejection', (reason) => {
16
+ console.error(`maestro: unhandled rejection: ${reason instanceof Error ? reason.message : String(reason)}`);
17
+ process.exit(1);
18
+ });
19
+ const program = new Command();
20
+ program
21
+ .name('maestro')
22
+ .description('Conduct your codebase — autonomous AI coding orchestrator')
23
+ .version('0.1.0')
24
+ .argument('[plan-file]', 'Path to the markdown plan file to execute')
25
+ .option('--provider <name>', 'AI provider to use: claude or copilot')
26
+ .option('-m, --max-iterations <n>', 'Maximum task execution iterations', '50')
27
+ .option('--max-external-iterations <n>', 'Override second review iteration limit (0 = auto)', '0')
28
+ .option('-r, --review', 'Skip tasks, run full review pipeline on current branch')
29
+ .option('-t, --tasks-only', 'Run only tasks, skip all reviews')
30
+ .option('-b, --base-ref <ref>', 'Override default branch for review diffs')
31
+ .option('--skip-finalize', 'Skip finalize step even if enabled in config')
32
+ .option('--worktree', 'Run in isolated git worktree')
33
+ .option('--plan <description>', 'Create plan interactively via Claude')
34
+ .option('-s, --serve', 'Start web dashboard')
35
+ .option('--replay', 'Browse completed runs in the offline dashboard')
36
+ .option('-p, --port <n>', 'Web dashboard port', '8080')
37
+ .option('-w, --watch <dir>', 'Watch directory for progress files (repeatable)', collect, [])
38
+ .option('-d, --debug', 'Enable debug logging')
39
+ .option('--no-color', 'Disable ANSI color output')
40
+ .option('--plan-tips', 'Show plan authoring best practices and exit')
41
+ .option('--reset', 'Interactively reset global config to defaults')
42
+ .option('--dump-defaults <dir>', 'Extract embedded defaults to directory')
43
+ .option('--config-dir <dir>', 'Override config directory')
44
+ .option('--config', 'Open web UI to view and edit maestro configuration')
45
+ .option('--docs', 'Open full reference documentation in browser');
46
+ function collect(value, previous) {
47
+ return previous.concat([value]);
48
+ }
49
+ function openBrowser(url) {
50
+ const child = process.platform === 'win32'
51
+ ? spawn('cmd', ['/c', 'start', '', url], { detached: true, stdio: 'ignore' })
52
+ : process.platform === 'darwin'
53
+ ? spawn('open', [url], { detached: true, stdio: 'ignore' })
54
+ : spawn('xdg-open', [url], { detached: true, stdio: 'ignore' });
55
+ child.unref(); // allow parent to exit without waiting for child
56
+ }
57
+ program.parse();
58
+ const opts = program.opts();
59
+ const args = program.args;
60
+ // Apply environment variable overrides (lower priority than flags)
61
+ if (process.env['MAESTRO_CONFIG_DIR'] && !opts['configDir']) {
62
+ opts['configDir'] = process.env['MAESTRO_CONFIG_DIR'];
63
+ }
64
+ if (process.env['MAESTRO_NO_COLOR'] && !opts['noColor']) {
65
+ opts['color'] = false;
66
+ }
67
+ if (process.env['MAESTRO_DEBUG'] && !opts['debug']) {
68
+ opts['debug'] = true;
69
+ }
70
+ if (process.env['MAESTRO_PORT'] && !opts['port']) {
71
+ opts['port'] = process.env['MAESTRO_PORT'];
72
+ }
73
+ let planFile = args[0];
74
+ async function main() {
75
+ let config;
76
+ try {
77
+ config = loadConfig({
78
+ configDir: opts['configDir'],
79
+ cliOverrides: {
80
+ ai_provider: opts['provider'],
81
+ max_iterations: opts['maxIterations'] ? parseInt(opts['maxIterations']) : undefined,
82
+ max_external_iterations: opts['maxExternalIterations'] ? parseInt(opts['maxExternalIterations']) : undefined,
83
+ use_worktree: opts['worktree'] ? true : undefined,
84
+ default_branch: opts['baseRef'],
85
+ finalize_enabled: opts['skipFinalize'] ? false : undefined,
86
+ },
87
+ noColor: opts['color'] === false,
88
+ debug: opts['debug'],
89
+ port: opts['port'] ? parseInt(opts['port']) : undefined,
90
+ });
91
+ }
92
+ catch (err) {
93
+ console.error(`maestro: failed to load config: ${err instanceof Error ? err.message : String(err)}`);
94
+ process.exit(1);
95
+ }
96
+ const logger = createLogger(config, undefined);
97
+ if (opts['dumpDefaults']) {
98
+ const { dumpDefaults } = await import('./config/dump.js');
99
+ await dumpDefaults(opts['dumpDefaults']);
100
+ process.exit(0);
101
+ }
102
+ if (opts['reset']) {
103
+ const { resetConfig } = await import('./config/reset.js');
104
+ await resetConfig(config);
105
+ process.exit(0);
106
+ }
107
+ if (opts['planTips']) {
108
+ const { loadPlanTips } = await import('./config/prompts.js');
109
+ process.stdout.write(loadPlanTips(config) + '\n');
110
+ process.exit(0);
111
+ }
112
+ if (opts['docs']) {
113
+ const { fileURLToPath } = await import('url');
114
+ const { readHtmlAsset } = await import('./sea.js');
115
+ // Resolve the installed help.html path (works in npm-install mode)
116
+ const installedPath = path.join(path.dirname(fileURLToPath(import.meta.url)), 'dashboard', 'assets', 'help.html');
117
+ // In SEA mode the file doesn't exist on disk — extract to a temp file
118
+ const helpPath = fs.existsSync(installedPath)
119
+ ? installedPath
120
+ : (() => {
121
+ const tmp = path.join(os.tmpdir(), 'maestro-help.html');
122
+ fs.writeFileSync(tmp, readHtmlAsset('help.html'), 'utf8');
123
+ return tmp;
124
+ })();
125
+ const fileUrl = 'file:///' + helpPath.replace(/\\/g, '/');
126
+ logger.info(`Opening docs: ${fileUrl}`);
127
+ openBrowser(process.platform === 'win32' ? helpPath : fileUrl);
128
+ process.exit(0);
129
+ }
130
+ if (opts['config']) {
131
+ const { ConfigServer } = await import('./config/configserver.js');
132
+ const globalConfigPath = path.join(config.config_dir, 'config');
133
+ const projectConfigPath = path.join(process.cwd(), '.maestro', 'config');
134
+ const server = new ConfigServer();
135
+ const url = `http://localhost:${config.port}`;
136
+ const shutdown = () => { server.stop(); process.exit(0); };
137
+ server.start(config.port, globalConfigPath, projectConfigPath, () => {
138
+ logger.info('Browser tab closed — stopping config server');
139
+ shutdown();
140
+ });
141
+ openBrowser(url);
142
+ logger.info(`Config UI: ${url} — press Ctrl+C to exit`);
143
+ process.on('SIGINT', shutdown);
144
+ process.on('SIGTERM', shutdown);
145
+ await new Promise(() => { });
146
+ }
147
+ if (opts['plan']) {
148
+ const { createProvider } = await import('./backend/factory.js');
149
+ const { PlanCreator } = await import('./plan/creator.js');
150
+ const description = opts['plan'];
151
+ const backend = createProvider(config);
152
+ const creator = new PlanCreator(config, backend, logger);
153
+ const result = await creator.create(description);
154
+ if (!result.runNow) {
155
+ logger.info(`Run with: maestro ${result.filePath}`);
156
+ process.exit(0);
157
+ }
158
+ planFile = result.filePath;
159
+ // fall through to orchestrator
160
+ }
161
+ // --replay: start an offline dashboard showing completed runs from .maestro/progress/
162
+ if (opts['replay']) {
163
+ const { DashboardServer } = await import('./dashboard/server.js');
164
+ const replayServer = new DashboardServer();
165
+ const watchDirs = [process.cwd(), ...opts['watch']];
166
+ replayServer.start(config.port, null, planFile ?? '', watchDirs, true);
167
+ logger.info(`Replay dashboard: http://localhost:${config.port} — press Ctrl+C to exit`);
168
+ const shutdown = () => { replayServer.stop(); process.exit(0); };
169
+ process.on('SIGINT', shutdown);
170
+ process.on('SIGTERM', shutdown);
171
+ await new Promise(() => { }); // keep alive until Ctrl+C
172
+ }
173
+ if (!planFile && !opts['review']) {
174
+ program.help();
175
+ process.exit(1);
176
+ }
177
+ let dashboardServer;
178
+ if (opts['serve']) {
179
+ const { EventBus } = await import('./dashboard/event-bus.js');
180
+ const { DashboardServer } = await import('./dashboard/server.js');
181
+ const bus = new EventBus();
182
+ logger.setEventBus(bus);
183
+ dashboardServer = new DashboardServer();
184
+ const planFilePath = planFile ?? '';
185
+ dashboardServer.start(config.port, bus, planFilePath, opts['watch']);
186
+ logger.info(`Dashboard: http://localhost:${config.port}`);
187
+ }
188
+ const orchestrator = new Orchestrator(config, logger, {
189
+ planFile,
190
+ reviewOnly: opts['review'],
191
+ tasksOnly: opts['tasksOnly'],
192
+ serve: opts['serve'],
193
+ watchDirs: opts['watch'],
194
+ skipFinalize: opts['skipFinalize'],
195
+ });
196
+ try {
197
+ await orchestrator.run();
198
+ }
199
+ catch (err) {
200
+ const message = err instanceof Error ? err.message : String(err);
201
+ logger.error(`Fatal: ${message}`);
202
+ await sendNotification('Maestro', `Plan failed: ${message}`);
203
+ if (opts['debug']) {
204
+ console.error(err);
205
+ }
206
+ dashboardServer?.stop();
207
+ process.exit(1);
208
+ }
209
+ dashboardServer?.stop();
210
+ }
211
+ main();
212
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { Config } from '../config/types.js';
2
+ import { Logger } from '../progress/logger.js';
3
+ export interface OrchestratorOptions {
4
+ planFile?: string;
5
+ reviewOnly?: boolean;
6
+ tasksOnly?: boolean;
7
+ serve?: boolean;
8
+ watchDirs?: string[];
9
+ skipFinalize?: boolean;
10
+ }
11
+ export declare class Orchestrator {
12
+ private readonly config;
13
+ private readonly logger;
14
+ private readonly opts;
15
+ constructor(config: Config, logger: Logger, opts: OrchestratorOptions);
16
+ run(): Promise<void>;
17
+ private runTaskPhase;
18
+ private runFinalizePhase;
19
+ private runReviewPhases;
20
+ }
21
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAa/C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFJ,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,mBAAmB;IAGtC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YA6HZ,YAAY;YA+CZ,gBAAgB;YAgChB,eAAe;CAqB9B"}
@@ -0,0 +1,218 @@
1
+ import * as path from 'path';
2
+ import { createProvider } from '../backend/factory.js';
3
+ import { loadPrompt } from '../config/prompts.js';
4
+ import { expandTemplate } from '../config/template.js';
5
+ import { parsePlanFile, findFirstIncompleteTask, isAllTasksComplete } from '../plan/parser.js';
6
+ import { movePlanToCompleted } from '../plan/updater.js';
7
+ import { branchNameFromPlan, createOrCheckoutBranch, detectDefaultBranch, getCurrentBranch, getShortCommitHash } from '../git/branch.js';
8
+ import { pushBranch } from '../git/commit.js';
9
+ import { createWorktree, removeWorktree } from '../git/worktree.js';
10
+ import { sendNotification } from '../progress/notify.js';
11
+ import { TaskExecutor } from '../executor/task.js';
12
+ import { ReviewPipeline } from '../review/pipeline.js';
13
+ export class Orchestrator {
14
+ config;
15
+ logger;
16
+ opts;
17
+ constructor(config, logger, opts) {
18
+ this.config = config;
19
+ this.logger = logger;
20
+ this.opts = opts;
21
+ }
22
+ async run() {
23
+ const { planFile, reviewOnly, tasksOnly } = this.opts;
24
+ if (!planFile) {
25
+ throw new Error('A plan file is required. Usage: maestro docs/plans/my-plan.md');
26
+ }
27
+ const originalCwd = process.cwd();
28
+ let cwd = originalCwd;
29
+ let worktreePath;
30
+ const doWorktreeCleanup = () => {
31
+ if (worktreePath) {
32
+ try {
33
+ removeWorktree(worktreePath, originalCwd);
34
+ }
35
+ catch { /* best effort */ }
36
+ worktreePath = undefined;
37
+ }
38
+ };
39
+ const sigintHandler = () => {
40
+ this.logger.warn('\nInterrupted — cleaning up...');
41
+ doWorktreeCleanup();
42
+ process.exit(130);
43
+ };
44
+ process.on('SIGINT', sigintHandler);
45
+ process.on('SIGTERM', sigintHandler);
46
+ try {
47
+ // Detect default branch
48
+ let defaultBranch = this.config.default_branch;
49
+ if (!defaultBranch) {
50
+ defaultBranch = detectDefaultBranch(cwd);
51
+ }
52
+ const planName = path.basename(planFile, '.md');
53
+ const branchName = branchNameFromPlan(planFile);
54
+ // Derive branch / worktree
55
+ let planFileInCwd = planFile;
56
+ if (this.config.use_worktree && !reviewOnly) {
57
+ this.logger.info(`creating worktree for branch: ${branchName}`);
58
+ worktreePath = createWorktree(branchName, cwd);
59
+ cwd = worktreePath;
60
+ planFileInCwd = path.join(cwd, path.relative(originalCwd, path.resolve(planFile)));
61
+ this.logger.info(`worktree: ${worktreePath}`);
62
+ }
63
+ else if (!reviewOnly) {
64
+ this.logger.info(`creating branch: ${branchName}`);
65
+ createOrCheckoutBranch(branchName, cwd);
66
+ }
67
+ // Parse plan (from worktree copy if applicable)
68
+ const plan = parsePlanFile(planFileInCwd);
69
+ // Set up progress logging
70
+ this.logger.setProgressFile(planName);
71
+ const progressFilePath = this.logger.getProgressFilePath();
72
+ // Print startup header
73
+ const shortHash = getShortCommitHash(cwd);
74
+ const now = new Date();
75
+ const ts = formatHeaderTimestamp(now);
76
+ const currentBranch = getCurrentBranch(cwd);
77
+ this.logger.info(`maestro ${currentBranch}-${shortHash}-${ts}`);
78
+ this.logger.info(`starting maestro loop: ${planFileInCwd} (max ${this.config.max_iterations} iterations)`);
79
+ this.logger.info(`branch: ${currentBranch}`);
80
+ this.logger.info(`provider: ${this.config.ai_provider}`);
81
+ this.logger.info(`progress log: ${path.basename(progressFilePath)}`);
82
+ this.logger.info('');
83
+ // Guard: fail early if no tasks were parsed (likely a format or encoding issue)
84
+ if (!reviewOnly && plan.tasks.length === 0) {
85
+ throw new Error(`No tasks found in plan file: ${planFileInCwd}\n` +
86
+ `Ensure tasks use the format:\n ### Task 1: Title\n - [ ] checkbox`);
87
+ }
88
+ this.logger.info(`found ${plan.tasks.length} task(s)`);
89
+ // Phase 1: Task execution
90
+ if (!reviewOnly) {
91
+ await this.runTaskPhase(plan, planName, defaultBranch, progressFilePath, cwd);
92
+ }
93
+ // Phase 2 & 3: Review pipeline
94
+ if (!tasksOnly) {
95
+ await this.runReviewPhases(plan, defaultBranch, progressFilePath, cwd);
96
+ }
97
+ // Phase 4: Finalize
98
+ if (this.config.finalize_enabled && !this.opts.skipFinalize && !tasksOnly) {
99
+ await this.runFinalizePhase(defaultBranch, progressFilePath, planFileInCwd, cwd);
100
+ }
101
+ // Move plan to completed
102
+ if (!reviewOnly) {
103
+ const plansDir = path.resolve(cwd, this.config.plans_dir);
104
+ const completedPath = movePlanToCompleted(plan, plansDir);
105
+ this.logger.info(`Plan moved to: ${completedPath}`);
106
+ }
107
+ this.logger.signal('PLAN_COMPLETE');
108
+ await sendNotification('Maestro', `Plan complete: ${planName}`);
109
+ if (this.config.push_on_complete) {
110
+ this.logger.info(`pushing branch: ${branchName}`);
111
+ pushBranch(branchName, cwd);
112
+ this.logger.info('branch pushed');
113
+ }
114
+ if (worktreePath) {
115
+ removeWorktree(worktreePath, originalCwd);
116
+ this.logger.info('worktree cleaned up');
117
+ worktreePath = undefined;
118
+ }
119
+ }
120
+ catch (err) {
121
+ doWorktreeCleanup();
122
+ throw err;
123
+ }
124
+ finally {
125
+ process.removeListener('SIGINT', sigintHandler);
126
+ process.removeListener('SIGTERM', sigintHandler);
127
+ }
128
+ }
129
+ async runTaskPhase(plan, planName, defaultBranch, progressFilePath, cwd) {
130
+ this.logger.info('starting task execution phase');
131
+ this.logger.info('');
132
+ const backend = createProvider(this.config);
133
+ const executor = new TaskExecutor({
134
+ config: this.config,
135
+ backend,
136
+ logger: this.logger,
137
+ defaultBranch,
138
+ progressFilePath,
139
+ cwd,
140
+ });
141
+ let iteration = 0;
142
+ while (iteration < this.config.max_iterations) {
143
+ const task = findFirstIncompleteTask(plan);
144
+ if (!task)
145
+ break;
146
+ iteration++;
147
+ this.logger.header(`--- task iteration ${iteration} ---`);
148
+ try {
149
+ await executor.executeTask(plan, task);
150
+ }
151
+ catch (err) {
152
+ this.logger.error(`Task ${task.index} failed: ${err instanceof Error ? err.message : String(err)}`);
153
+ throw err;
154
+ }
155
+ }
156
+ if (isAllTasksComplete(plan)) {
157
+ this.logger.info('');
158
+ this.logger.signal('ALL_TASKS_DONE');
159
+ this.logger.info('');
160
+ this.logger.info('all tasks completed, starting code review...');
161
+ }
162
+ else {
163
+ throw new Error(`Max iterations (${this.config.max_iterations}) reached before all tasks completed.`);
164
+ }
165
+ }
166
+ async runFinalizePhase(defaultBranch, progressFilePath, planFilePath, cwd) {
167
+ this.logger.header('--- finalize ---');
168
+ this.logger.info('running finalize phase...');
169
+ const rawTemplate = loadPrompt('finalize', this.config);
170
+ const prompt = expandTemplate(rawTemplate, {
171
+ DEFAULT_BRANCH: defaultBranch,
172
+ PLAN_FILE: planFilePath,
173
+ PROGRESS_FILE: progressFilePath,
174
+ });
175
+ const backend = createProvider(this.config);
176
+ await backend.run(prompt, (line) => {
177
+ if (line.type === 'text') {
178
+ for (const textLine of line.text.split('\n')) {
179
+ if (textLine.trim())
180
+ this.logger.log(textLine, 'review');
181
+ }
182
+ }
183
+ else if (line.type === 'error') {
184
+ this.logger.error(line.text);
185
+ }
186
+ else if (line.type === 'debug' && this.config.debug) {
187
+ this.logger.debug(line.text);
188
+ }
189
+ });
190
+ this.logger.signal('FINALIZE_DONE');
191
+ }
192
+ async runReviewPhases(plan, defaultBranch, progressFilePath, cwd) {
193
+ const planName = path.basename(plan.filePath, '.md');
194
+ const backend = createProvider(this.config);
195
+ const pipeline = new ReviewPipeline({
196
+ config: this.config,
197
+ backend,
198
+ logger: this.logger,
199
+ plan,
200
+ planName,
201
+ defaultBranch,
202
+ progressFilePath,
203
+ cwd,
204
+ });
205
+ await pipeline.runPhase2();
206
+ await pipeline.runPhase3();
207
+ }
208
+ }
209
+ function formatHeaderTimestamp(date) {
210
+ const yyyy = date.getFullYear();
211
+ const mm = String(date.getMonth() + 1).padStart(2, '0');
212
+ const dd = String(date.getDate()).padStart(2, '0');
213
+ const hh = String(date.getHours()).padStart(2, '0');
214
+ const min = String(date.getMinutes()).padStart(2, '0');
215
+ const ss = String(date.getSeconds()).padStart(2, '0');
216
+ return `${yyyy}${mm}${dd}T${hh}${min}${ss}`;
217
+ }
218
+ //# sourceMappingURL=orchestrator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/orchestrator/orchestrator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import { Config } from '../config/types.js';
2
+ import { AIProvider } from '../backend/backend.js';
3
+ import { Logger } from '../progress/logger.js';
4
+ export declare class PlanCreator {
5
+ private readonly config;
6
+ private readonly backend;
7
+ private readonly logger;
8
+ constructor(config: Config, backend: AIProvider, logger: Logger);
9
+ create(description: string): Promise<{
10
+ filePath: string;
11
+ runNow: boolean;
12
+ }>;
13
+ private runMenu;
14
+ private printPlan;
15
+ private openEditor;
16
+ private promptChoice;
17
+ private promptYesNo;
18
+ private collectRevision;
19
+ private runExploration;
20
+ private collectAnswers;
21
+ private buildGenerationPrompt;
22
+ private runGeneration;
23
+ private runRevision;
24
+ private extractPlan;
25
+ private savePlan;
26
+ }
27
+ //# sourceMappingURL=creator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"creator.d.ts","sourceRoot":"","sources":["../../src/plan/creator.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAc,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AA8B/C,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAFN,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,EACnB,MAAM,EAAE,MAAM;IAG3B,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC;YAyBnE,OAAO;IAwDrB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,UAAU;YAMJ,YAAY;YAkBZ,WAAW;YAUX,eAAe;YAoBf,cAAc;YAed,cAAc;IAkB5B,OAAO,CAAC,qBAAqB;YAiBf,aAAa;YAab,WAAW;IA6BzB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,QAAQ;CASjB"}