millhouse 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.
- package/LICENSE +8 -0
- package/README.md +248 -0
- package/commands/millhouse.md +223 -0
- package/dist/analysis/graph-builder.d.ts +42 -0
- package/dist/analysis/graph-builder.d.ts.map +1 -0
- package/dist/analysis/graph-builder.js +98 -0
- package/dist/analysis/graph-builder.js.map +1 -0
- package/dist/analysis/issue-analyzer.d.ts +20 -0
- package/dist/analysis/issue-analyzer.d.ts.map +1 -0
- package/dist/analysis/issue-analyzer.js +167 -0
- package/dist/analysis/issue-analyzer.js.map +1 -0
- package/dist/analysis/plan-parser.d.ts +8 -0
- package/dist/analysis/plan-parser.d.ts.map +1 -0
- package/dist/analysis/plan-parser.js +112 -0
- package/dist/analysis/plan-parser.js.map +1 -0
- package/dist/cli/cleanup.d.ts +20 -0
- package/dist/cli/cleanup.d.ts.map +1 -0
- package/dist/cli/cleanup.js +186 -0
- package/dist/cli/cleanup.js.map +1 -0
- package/dist/cli/commands/clean.d.ts +2 -0
- package/dist/cli/commands/clean.d.ts.map +1 -0
- package/dist/cli/commands/clean.js +16 -0
- package/dist/cli/commands/clean.js.map +1 -0
- package/dist/cli/commands/resume.d.ts +2 -0
- package/dist/cli/commands/resume.d.ts.map +1 -0
- package/dist/cli/commands/resume.js +82 -0
- package/dist/cli/commands/resume.js.map +1 -0
- package/dist/cli/commands/run.d.ts +10 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +352 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +6 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +74 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/status.d.ts +7 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +83 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/progress-display.d.ts +93 -0
- package/dist/cli/progress-display.d.ts.map +1 -0
- package/dist/cli/progress-display.js +318 -0
- package/dist/cli/progress-display.js.map +1 -0
- package/dist/core/orchestrator.d.ts +79 -0
- package/dist/core/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestrator.js +389 -0
- package/dist/core/orchestrator.js.map +1 -0
- package/dist/core/scheduler.d.ts +72 -0
- package/dist/core/scheduler.d.ts.map +1 -0
- package/dist/core/scheduler.js +234 -0
- package/dist/core/scheduler.js.map +1 -0
- package/dist/execution/claude-runner.d.ts +41 -0
- package/dist/execution/claude-runner.d.ts.map +1 -0
- package/dist/execution/claude-runner.js +241 -0
- package/dist/execution/claude-runner.js.map +1 -0
- package/dist/execution/worktree-manager.d.ts +52 -0
- package/dist/execution/worktree-manager.d.ts.map +1 -0
- package/dist/execution/worktree-manager.js +208 -0
- package/dist/execution/worktree-manager.js.map +1 -0
- package/dist/github/client.d.ts +27 -0
- package/dist/github/client.d.ts.map +1 -0
- package/dist/github/client.js +178 -0
- package/dist/github/client.js.map +1 -0
- package/dist/github/issue-discoverer.d.ts +20 -0
- package/dist/github/issue-discoverer.d.ts.map +1 -0
- package/dist/github/issue-discoverer.js +83 -0
- package/dist/github/issue-discoverer.js.map +1 -0
- package/dist/github/label-manager.d.ts +44 -0
- package/dist/github/label-manager.d.ts.map +1 -0
- package/dist/github/label-manager.js +93 -0
- package/dist/github/label-manager.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +54 -0
- package/dist/index.js.map +1 -0
- package/dist/storage/config.d.ts +4 -0
- package/dist/storage/config.d.ts.map +1 -0
- package/dist/storage/config.js +25 -0
- package/dist/storage/config.js.map +1 -0
- package/dist/storage/json-store.d.ts +20 -0
- package/dist/storage/json-store.d.ts.map +1 -0
- package/dist/storage/json-store.js +92 -0
- package/dist/storage/json-store.js.map +1 -0
- package/dist/types.d.ts +142 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +36 -0
- package/dist/types.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import type { AnalyzedIssue } from '../types.js';
|
|
2
|
+
export type IssueState = 'queued' | 'blocked' | 'running' | 'completed' | 'failed';
|
|
3
|
+
export type ProgressEvent = {
|
|
4
|
+
type: 'issue-started';
|
|
5
|
+
issueNumber: number;
|
|
6
|
+
} | {
|
|
7
|
+
type: 'issue-message';
|
|
8
|
+
issueNumber: number;
|
|
9
|
+
message: string;
|
|
10
|
+
} | {
|
|
11
|
+
type: 'issue-completed';
|
|
12
|
+
issueNumber: number;
|
|
13
|
+
} | {
|
|
14
|
+
type: 'issue-failed';
|
|
15
|
+
issueNumber: number;
|
|
16
|
+
error: string;
|
|
17
|
+
} | {
|
|
18
|
+
type: 'issue-blocked';
|
|
19
|
+
issueNumber: number;
|
|
20
|
+
blockedBy: number[];
|
|
21
|
+
} | {
|
|
22
|
+
type: 'issue-unblocked';
|
|
23
|
+
issueNumber: number;
|
|
24
|
+
};
|
|
25
|
+
export declare class ProgressDisplay {
|
|
26
|
+
private issues;
|
|
27
|
+
private issueOrder;
|
|
28
|
+
private compactMode;
|
|
29
|
+
private lastRenderLines;
|
|
30
|
+
private keyHandler;
|
|
31
|
+
private isRunning;
|
|
32
|
+
private logHistory;
|
|
33
|
+
constructor(options?: {
|
|
34
|
+
displayMode?: 'compact' | 'detailed';
|
|
35
|
+
});
|
|
36
|
+
/**
|
|
37
|
+
* Initialize with the list of issues.
|
|
38
|
+
*/
|
|
39
|
+
initialize(issues: AnalyzedIssue[]): void;
|
|
40
|
+
/**
|
|
41
|
+
* Start listening for keyboard input to toggle views.
|
|
42
|
+
*/
|
|
43
|
+
start(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Stop the display.
|
|
46
|
+
*/
|
|
47
|
+
stop(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Toggle between compact and detailed view.
|
|
50
|
+
*/
|
|
51
|
+
private toggleView;
|
|
52
|
+
/**
|
|
53
|
+
* Switch to detailed mode when an error occurs, showing full error details.
|
|
54
|
+
*/
|
|
55
|
+
private switchToDetailedOnError;
|
|
56
|
+
/**
|
|
57
|
+
* Handle a progress event.
|
|
58
|
+
*/
|
|
59
|
+
handleEvent(event: ProgressEvent): void;
|
|
60
|
+
/**
|
|
61
|
+
* Log a message in detailed mode (no-op in compact mode).
|
|
62
|
+
*/
|
|
63
|
+
logDetailed(issueNumber: number, message: string): void;
|
|
64
|
+
/**
|
|
65
|
+
* Truncate a message to fit on one line.
|
|
66
|
+
*/
|
|
67
|
+
private truncateMessage;
|
|
68
|
+
/**
|
|
69
|
+
* Clear previously rendered lines.
|
|
70
|
+
*/
|
|
71
|
+
private clearLines;
|
|
72
|
+
/**
|
|
73
|
+
* Render the compact view.
|
|
74
|
+
*/
|
|
75
|
+
private render;
|
|
76
|
+
/**
|
|
77
|
+
* Render final summary after stopping.
|
|
78
|
+
*/
|
|
79
|
+
private renderFinal;
|
|
80
|
+
/**
|
|
81
|
+
* Render a single event in detailed mode.
|
|
82
|
+
*/
|
|
83
|
+
private renderDetailedEvent;
|
|
84
|
+
/**
|
|
85
|
+
* Get the icon for a state.
|
|
86
|
+
*/
|
|
87
|
+
private getStateIcon;
|
|
88
|
+
/**
|
|
89
|
+
* Get the color function for a state.
|
|
90
|
+
*/
|
|
91
|
+
private getStateColor;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=progress-display.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-display.d.ts","sourceRoot":"","sources":["../../src/cli/progress-display.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;AAUnF,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAC5D;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,iBAAiB,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAErD,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,UAAU,CAAwC;IAC1D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAuD;gBAE7D,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;KAAE;IAM9D;;OAEG;IACH,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI;IA+CzC;;OAEG;IACH,KAAK,IAAI,IAAI;IAkCb;;OAEG;IACH,IAAI,IAAI,IAAI;IAmBZ;;OAEG;IACH,OAAO,CAAC,UAAU;IAsBlB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAuDvC;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAkBvD;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAWlB;;OAEG;IACH,OAAO,CAAC,MAAM;IAwBd;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAiB3B;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,aAAa;CAStB"}
|
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export class ProgressDisplay {
|
|
3
|
+
issues = new Map();
|
|
4
|
+
issueOrder = [];
|
|
5
|
+
compactMode = true;
|
|
6
|
+
lastRenderLines = 0;
|
|
7
|
+
keyHandler = null;
|
|
8
|
+
isRunning = false;
|
|
9
|
+
logHistory = [];
|
|
10
|
+
constructor(options) {
|
|
11
|
+
if (options?.displayMode === 'detailed') {
|
|
12
|
+
this.compactMode = false;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Initialize with the list of issues.
|
|
17
|
+
*/
|
|
18
|
+
initialize(issues) {
|
|
19
|
+
this.issues.clear();
|
|
20
|
+
this.issueOrder = [];
|
|
21
|
+
// Build issue map first
|
|
22
|
+
for (const issue of issues) {
|
|
23
|
+
const blockedBy = issue.dependencies.filter(dep => issues.some(i => i.number === dep));
|
|
24
|
+
this.issues.set(issue.number, {
|
|
25
|
+
number: issue.number,
|
|
26
|
+
title: issue.title,
|
|
27
|
+
state: blockedBy.length > 0 ? 'blocked' : 'queued',
|
|
28
|
+
latestMessage: blockedBy.length > 0
|
|
29
|
+
? `Waiting for ${blockedBy.map(n => `#${n}`).join(', ')}`
|
|
30
|
+
: 'Queued',
|
|
31
|
+
blockedBy,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
// Sort issues topologically: issues with no deps first, then their dependents
|
|
35
|
+
const issueNumbers = issues.map(i => i.number);
|
|
36
|
+
const visited = new Set();
|
|
37
|
+
const sorted = [];
|
|
38
|
+
const visit = (num) => {
|
|
39
|
+
if (visited.has(num))
|
|
40
|
+
return;
|
|
41
|
+
visited.add(num);
|
|
42
|
+
const issue = this.issues.get(num);
|
|
43
|
+
if (issue) {
|
|
44
|
+
for (const dep of issue.blockedBy) {
|
|
45
|
+
if (issueNumbers.includes(dep)) {
|
|
46
|
+
visit(dep);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
sorted.push(num);
|
|
51
|
+
};
|
|
52
|
+
for (const num of issueNumbers) {
|
|
53
|
+
visit(num);
|
|
54
|
+
}
|
|
55
|
+
this.issueOrder = sorted;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Start listening for keyboard input to toggle views.
|
|
59
|
+
*/
|
|
60
|
+
start() {
|
|
61
|
+
this.isRunning = true;
|
|
62
|
+
// Enable raw mode for keyboard input
|
|
63
|
+
if (process.stdin.isTTY) {
|
|
64
|
+
process.stdin.setRawMode(true);
|
|
65
|
+
process.stdin.resume();
|
|
66
|
+
this.keyHandler = (key) => {
|
|
67
|
+
const char = key.toString();
|
|
68
|
+
// Ctrl+C - exit
|
|
69
|
+
if (char === '\u0003') {
|
|
70
|
+
this.stop();
|
|
71
|
+
process.kill(process.pid, 'SIGINT');
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// 'v' or 'V' - toggle view
|
|
75
|
+
if (char === 'v' || char === 'V') {
|
|
76
|
+
this.toggleView();
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
process.stdin.on('data', this.keyHandler);
|
|
80
|
+
}
|
|
81
|
+
// Initial render
|
|
82
|
+
if (this.compactMode) {
|
|
83
|
+
console.log(chalk.gray('Press [v] to toggle detailed view\n'));
|
|
84
|
+
this.render();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Stop the display.
|
|
89
|
+
*/
|
|
90
|
+
stop() {
|
|
91
|
+
this.isRunning = false;
|
|
92
|
+
if (process.stdin.isTTY) {
|
|
93
|
+
if (this.keyHandler) {
|
|
94
|
+
process.stdin.removeListener('data', this.keyHandler);
|
|
95
|
+
this.keyHandler = null;
|
|
96
|
+
}
|
|
97
|
+
process.stdin.setRawMode(false);
|
|
98
|
+
process.stdin.pause();
|
|
99
|
+
}
|
|
100
|
+
// Clear and render final state
|
|
101
|
+
if (this.compactMode) {
|
|
102
|
+
this.clearLines();
|
|
103
|
+
this.renderFinal();
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Toggle between compact and detailed view.
|
|
108
|
+
*/
|
|
109
|
+
toggleView() {
|
|
110
|
+
if (this.compactMode) {
|
|
111
|
+
// Switching to detailed - clear compact view and show history
|
|
112
|
+
this.clearLines();
|
|
113
|
+
console.log(chalk.gray('Switched to detailed view. Press [v] to switch back.\n'));
|
|
114
|
+
// Replay log history
|
|
115
|
+
for (const entry of this.logHistory) {
|
|
116
|
+
console.log(` [#${entry.issueNumber}] ${entry.message}`);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
// Switching to compact - start fresh
|
|
121
|
+
console.log(chalk.gray('\nSwitched to compact view. Press [v] to switch back.\n'));
|
|
122
|
+
}
|
|
123
|
+
this.compactMode = !this.compactMode;
|
|
124
|
+
if (this.compactMode) {
|
|
125
|
+
this.render();
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Switch to detailed mode when an error occurs, showing full error details.
|
|
130
|
+
*/
|
|
131
|
+
switchToDetailedOnError(issueNumber, error) {
|
|
132
|
+
this.clearLines();
|
|
133
|
+
console.log(chalk.red(`\n❌ Issue #${issueNumber} failed - switching to detailed view\n`));
|
|
134
|
+
// Replay log history
|
|
135
|
+
for (const entry of this.logHistory) {
|
|
136
|
+
console.log(` [#${entry.issueNumber}] ${entry.message}`);
|
|
137
|
+
}
|
|
138
|
+
// Show full error
|
|
139
|
+
console.log(chalk.red(`\n Full error for #${issueNumber}:`));
|
|
140
|
+
console.log(chalk.red(` ${error}\n`));
|
|
141
|
+
this.compactMode = false;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Handle a progress event.
|
|
145
|
+
*/
|
|
146
|
+
handleEvent(event) {
|
|
147
|
+
const issue = this.issues.get(event.issueNumber);
|
|
148
|
+
if (!issue)
|
|
149
|
+
return;
|
|
150
|
+
switch (event.type) {
|
|
151
|
+
case 'issue-started':
|
|
152
|
+
issue.state = 'running';
|
|
153
|
+
issue.latestMessage = 'Starting...';
|
|
154
|
+
this.logHistory.push({ issueNumber: event.issueNumber, message: '▶ Started' });
|
|
155
|
+
break;
|
|
156
|
+
case 'issue-message':
|
|
157
|
+
issue.latestMessage = this.truncateMessage(event.message);
|
|
158
|
+
break;
|
|
159
|
+
case 'issue-completed':
|
|
160
|
+
issue.state = 'completed';
|
|
161
|
+
issue.latestMessage = 'Finished!';
|
|
162
|
+
this.logHistory.push({ issueNumber: event.issueNumber, message: '✓ Completed' });
|
|
163
|
+
break;
|
|
164
|
+
case 'issue-failed':
|
|
165
|
+
issue.state = 'failed';
|
|
166
|
+
issue.latestMessage = `Failed: ${this.truncateMessage(event.error)}`;
|
|
167
|
+
this.logHistory.push({ issueNumber: event.issueNumber, message: `✗ Failed: ${event.error}` });
|
|
168
|
+
// Auto-switch to detailed mode on failure to show full error
|
|
169
|
+
if (this.compactMode && this.isRunning) {
|
|
170
|
+
this.switchToDetailedOnError(event.issueNumber, event.error);
|
|
171
|
+
return; // Already rendered
|
|
172
|
+
}
|
|
173
|
+
break;
|
|
174
|
+
case 'issue-blocked':
|
|
175
|
+
issue.state = 'blocked';
|
|
176
|
+
issue.blockedBy = event.blockedBy;
|
|
177
|
+
issue.latestMessage = `Waiting for ${event.blockedBy.map(n => `#${n}`).join(', ')}`;
|
|
178
|
+
break;
|
|
179
|
+
case 'issue-unblocked':
|
|
180
|
+
if (issue.state === 'blocked') {
|
|
181
|
+
issue.state = 'queued';
|
|
182
|
+
issue.blockedBy = [];
|
|
183
|
+
issue.latestMessage = 'Ready';
|
|
184
|
+
this.logHistory.push({ issueNumber: event.issueNumber, message: '⏳ Unblocked' });
|
|
185
|
+
}
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
if (this.compactMode && this.isRunning) {
|
|
189
|
+
this.render();
|
|
190
|
+
}
|
|
191
|
+
else if (!this.compactMode && this.isRunning) {
|
|
192
|
+
this.renderDetailedEvent(event);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Log a message in detailed mode (no-op in compact mode).
|
|
197
|
+
*/
|
|
198
|
+
logDetailed(issueNumber, message) {
|
|
199
|
+
// Always store in history
|
|
200
|
+
this.logHistory.push({ issueNumber, message });
|
|
201
|
+
if (!this.compactMode && this.isRunning) {
|
|
202
|
+
console.log(` [#${issueNumber}] ${message}`);
|
|
203
|
+
}
|
|
204
|
+
// Also update the latest message for compact mode
|
|
205
|
+
const issue = this.issues.get(issueNumber);
|
|
206
|
+
if (issue) {
|
|
207
|
+
issue.latestMessage = this.truncateMessage(message);
|
|
208
|
+
if (this.compactMode && this.isRunning) {
|
|
209
|
+
this.render();
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Truncate a message to fit on one line.
|
|
215
|
+
*/
|
|
216
|
+
truncateMessage(message) {
|
|
217
|
+
// Remove newlines and trim
|
|
218
|
+
const clean = message.replace(/\n/g, ' ').trim();
|
|
219
|
+
const maxLen = 60;
|
|
220
|
+
if (clean.length <= maxLen)
|
|
221
|
+
return clean;
|
|
222
|
+
return clean.slice(0, maxLen - 3) + '...';
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Clear previously rendered lines.
|
|
226
|
+
*/
|
|
227
|
+
clearLines() {
|
|
228
|
+
if (this.lastRenderLines > 0) {
|
|
229
|
+
// Move cursor up and clear each line
|
|
230
|
+
process.stdout.write(`\x1B[${this.lastRenderLines}A`);
|
|
231
|
+
for (let i = 0; i < this.lastRenderLines; i++) {
|
|
232
|
+
process.stdout.write('\x1B[2K\n');
|
|
233
|
+
}
|
|
234
|
+
process.stdout.write(`\x1B[${this.lastRenderLines}A`);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Render the compact view.
|
|
239
|
+
*/
|
|
240
|
+
render() {
|
|
241
|
+
this.clearLines();
|
|
242
|
+
const lines = [];
|
|
243
|
+
for (const issueNumber of this.issueOrder) {
|
|
244
|
+
const issue = this.issues.get(issueNumber);
|
|
245
|
+
if (!issue)
|
|
246
|
+
continue;
|
|
247
|
+
const stateIcon = this.getStateIcon(issue.state);
|
|
248
|
+
const stateColor = this.getStateColor(issue.state);
|
|
249
|
+
const titleShort = issue.title.length > 30
|
|
250
|
+
? issue.title.slice(0, 27) + '...'
|
|
251
|
+
: issue.title;
|
|
252
|
+
const line = `${stateIcon} ${stateColor(`#${issue.number}`)} ${chalk.gray(titleShort)} ${chalk.dim('│')} ${issue.latestMessage}`;
|
|
253
|
+
lines.push(line);
|
|
254
|
+
}
|
|
255
|
+
const output = lines.join('\n') + '\n';
|
|
256
|
+
process.stdout.write(output);
|
|
257
|
+
this.lastRenderLines = lines.length;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Render final summary after stopping.
|
|
261
|
+
*/
|
|
262
|
+
renderFinal() {
|
|
263
|
+
console.log('');
|
|
264
|
+
for (const issueNumber of this.issueOrder) {
|
|
265
|
+
const issue = this.issues.get(issueNumber);
|
|
266
|
+
if (!issue)
|
|
267
|
+
continue;
|
|
268
|
+
const stateIcon = this.getStateIcon(issue.state);
|
|
269
|
+
const stateColor = this.getStateColor(issue.state);
|
|
270
|
+
console.log(`${stateIcon} ${stateColor(`#${issue.number}`)} ${issue.title}`);
|
|
271
|
+
}
|
|
272
|
+
console.log('');
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Render a single event in detailed mode.
|
|
276
|
+
*/
|
|
277
|
+
renderDetailedEvent(event) {
|
|
278
|
+
switch (event.type) {
|
|
279
|
+
case 'issue-started':
|
|
280
|
+
console.log(chalk.cyan(` ▶ Started: #${event.issueNumber}`));
|
|
281
|
+
break;
|
|
282
|
+
case 'issue-completed':
|
|
283
|
+
console.log(chalk.green(` ✓ Completed: #${event.issueNumber}`));
|
|
284
|
+
break;
|
|
285
|
+
case 'issue-failed':
|
|
286
|
+
console.log(chalk.red(` ✗ Failed: #${event.issueNumber} - ${event.error}`));
|
|
287
|
+
break;
|
|
288
|
+
case 'issue-unblocked':
|
|
289
|
+
console.log(chalk.cyan(` ⏳ Unblocked: #${event.issueNumber}`));
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Get the icon for a state.
|
|
295
|
+
*/
|
|
296
|
+
getStateIcon(state) {
|
|
297
|
+
switch (state) {
|
|
298
|
+
case 'queued': return chalk.gray('○');
|
|
299
|
+
case 'blocked': return chalk.yellow('◷');
|
|
300
|
+
case 'running': return chalk.blue('●');
|
|
301
|
+
case 'completed': return chalk.green('✓');
|
|
302
|
+
case 'failed': return chalk.red('✗');
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Get the color function for a state.
|
|
307
|
+
*/
|
|
308
|
+
getStateColor(state) {
|
|
309
|
+
switch (state) {
|
|
310
|
+
case 'queued': return chalk.gray;
|
|
311
|
+
case 'blocked': return chalk.yellow;
|
|
312
|
+
case 'running': return chalk.blue;
|
|
313
|
+
case 'completed': return chalk.green;
|
|
314
|
+
case 'failed': return chalk.red;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
//# sourceMappingURL=progress-display.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"progress-display.js","sourceRoot":"","sources":["../../src/cli/progress-display.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { Config, GitHubIssue, AnalyzedIssue, RunState } from '../types.js';
|
|
2
|
+
import type { JsonStore } from '../storage/json-store.js';
|
|
3
|
+
import type { GitHubClient } from '../github/client.js';
|
|
4
|
+
import type { LabelManager } from '../github/label-manager.js';
|
|
5
|
+
import type { IssueDiscoverer } from '../github/issue-discoverer.js';
|
|
6
|
+
import type { IssueAnalyzer } from '../analysis/issue-analyzer.js';
|
|
7
|
+
import type { GraphBuilder } from '../analysis/graph-builder.js';
|
|
8
|
+
import type { WorktreeManager } from '../execution/worktree-manager.js';
|
|
9
|
+
import type { ClaudeRunner } from '../execution/claude-runner.js';
|
|
10
|
+
import type { Scheduler } from './scheduler.js';
|
|
11
|
+
import type { ProgressDisplay } from '../cli/progress-display.js';
|
|
12
|
+
interface OrchestratorOptions {
|
|
13
|
+
config: Config;
|
|
14
|
+
store: JsonStore;
|
|
15
|
+
graphBuilder: GraphBuilder;
|
|
16
|
+
worktreeManager: WorktreeManager;
|
|
17
|
+
claudeRunner: ClaudeRunner;
|
|
18
|
+
scheduler: Scheduler;
|
|
19
|
+
githubClient?: GitHubClient;
|
|
20
|
+
labelManager?: LabelManager;
|
|
21
|
+
issueDiscoverer?: IssueDiscoverer;
|
|
22
|
+
issueAnalyzer?: IssueAnalyzer;
|
|
23
|
+
progressDisplay?: ProgressDisplay;
|
|
24
|
+
}
|
|
25
|
+
export declare class Orchestrator {
|
|
26
|
+
private config;
|
|
27
|
+
private store;
|
|
28
|
+
private graphBuilder;
|
|
29
|
+
private worktreeManager;
|
|
30
|
+
private claudeRunner;
|
|
31
|
+
private scheduler;
|
|
32
|
+
private githubClient?;
|
|
33
|
+
private labelManager?;
|
|
34
|
+
private issueDiscoverer?;
|
|
35
|
+
private issueAnalyzer?;
|
|
36
|
+
private progressDisplay?;
|
|
37
|
+
private runState;
|
|
38
|
+
private graph;
|
|
39
|
+
private isShuttingDown;
|
|
40
|
+
private originalBranch;
|
|
41
|
+
constructor(options: OrchestratorOptions);
|
|
42
|
+
private setupShutdownHandlers;
|
|
43
|
+
/**
|
|
44
|
+
* Discover all issues starting from the given issue numbers.
|
|
45
|
+
* Only available in GitHub mode.
|
|
46
|
+
*/
|
|
47
|
+
discoverIssues(issueNumbers: number[], recursive: boolean): Promise<GitHubIssue[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Analyze issues for dependencies.
|
|
50
|
+
* Only available in GitHub mode.
|
|
51
|
+
*/
|
|
52
|
+
analyzeIssues(issues: GitHubIssue[]): Promise<AnalyzedIssue[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Run the full orchestration pipeline.
|
|
55
|
+
*/
|
|
56
|
+
run(analyzedIssues: AnalyzedIssue[]): Promise<RunState>;
|
|
57
|
+
/**
|
|
58
|
+
* Resume an interrupted run.
|
|
59
|
+
*/
|
|
60
|
+
resume(runState: RunState): Promise<RunState>;
|
|
61
|
+
/**
|
|
62
|
+
* Execute the scheduler loop.
|
|
63
|
+
*/
|
|
64
|
+
private executeScheduler;
|
|
65
|
+
/**
|
|
66
|
+
* Handle scheduler events.
|
|
67
|
+
*/
|
|
68
|
+
private handleSchedulerEvent;
|
|
69
|
+
/**
|
|
70
|
+
* Update a task's status in the run state.
|
|
71
|
+
*/
|
|
72
|
+
private updateTaskStatus;
|
|
73
|
+
/**
|
|
74
|
+
* Create the final pull request.
|
|
75
|
+
*/
|
|
76
|
+
private createFinalPR;
|
|
77
|
+
}
|
|
78
|
+
export {};
|
|
79
|
+
//# sourceMappingURL=orchestrator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/core/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAQ,MAAM,aAAa,CAAC;AACtF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,KAAK,EAAE,YAAY,EAAmB,MAAM,8BAA8B,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAElE,UAAU,mBAAmB;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;IACjB,YAAY,EAAE,YAAY,CAAC;IAC3B,eAAe,EAAE,eAAe,CAAC;IACjC,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC;IAErB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,SAAS,CAAY;IAE7B,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,eAAe,CAAC,CAAkB;IAC1C,OAAO,CAAC,aAAa,CAAC,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAC,CAAkB;IAE1C,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,KAAK,CAAgC;IAC7C,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,cAAc,CAAuB;gBAEjC,OAAO,EAAE,mBAAmB;IAkBxC,OAAO,CAAC,qBAAqB;IA2B7B;;;OAGG;IACG,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAOxF;;;OAGG;IACG,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAOpE;;OAEG;IACG,GAAG,CAAC,cAAc,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IAuE7D;;OAEG;IACG,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IA6BnD;;OAEG;YACW,gBAAgB;IA+H9B;;OAEG;YACW,oBAAoB;IAqElC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0BxB;;OAEG;YACW,aAAa;CAuC5B"}
|