pm-orchestrator-runner 1.0.8 → 1.0.9
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/README.md +55 -12
- package/dist/cli/index.d.ts +7 -5
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +166 -59
- package/dist/cli/index.js.map +1 -1
- package/dist/executor/stepwise-mock-executor.d.ts +76 -0
- package/dist/executor/stepwise-mock-executor.d.ts.map +1 -0
- package/dist/executor/stepwise-mock-executor.js +369 -0
- package/dist/executor/stepwise-mock-executor.js.map +1 -0
- package/dist/repl/two-pane-renderer.d.ts +13 -1
- package/dist/repl/two-pane-renderer.d.ts.map +1 -1
- package/dist/repl/two-pane-renderer.js +47 -10
- package/dist/repl/two-pane-renderer.js.map +1 -1
- package/dist/trace/trace-pack.d.ts +182 -0
- package/dist/trace/trace-pack.d.ts.map +1 -0
- package/dist/trace/trace-pack.js +407 -0
- package/dist/trace/trace-pack.js.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* StepwiseMockExecutor
|
|
4
|
+
*
|
|
5
|
+
* A mock executor that returns different results based on call count.
|
|
6
|
+
* Used for testing the self-heal mediation loop.
|
|
7
|
+
*
|
|
8
|
+
* Per spec:
|
|
9
|
+
* - Step 1: Returns buggy implementation -> INCOMPLETE
|
|
10
|
+
* - Step 2: Returns fixed implementation -> COMPLETE
|
|
11
|
+
*/
|
|
12
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
13
|
+
if (k2 === undefined) k2 = k;
|
|
14
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
15
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
16
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
17
|
+
}
|
|
18
|
+
Object.defineProperty(o, k2, desc);
|
|
19
|
+
}) : (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
o[k2] = m[k];
|
|
22
|
+
}));
|
|
23
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
24
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
25
|
+
}) : function(o, v) {
|
|
26
|
+
o["default"] = v;
|
|
27
|
+
});
|
|
28
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
29
|
+
var ownKeys = function(o) {
|
|
30
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
31
|
+
var ar = [];
|
|
32
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
33
|
+
return ar;
|
|
34
|
+
};
|
|
35
|
+
return ownKeys(o);
|
|
36
|
+
};
|
|
37
|
+
return function (mod) {
|
|
38
|
+
if (mod && mod.__esModule) return mod;
|
|
39
|
+
var result = {};
|
|
40
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
41
|
+
__setModuleDefault(result, mod);
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
})();
|
|
45
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
|
+
exports.StepwiseMockExecutor = void 0;
|
|
47
|
+
exports.createTinyCliMockExecutor = createTinyCliMockExecutor;
|
|
48
|
+
const fs = __importStar(require("fs"));
|
|
49
|
+
const path = __importStar(require("path"));
|
|
50
|
+
/**
|
|
51
|
+
* StepwiseMockExecutor
|
|
52
|
+
*
|
|
53
|
+
* Varies results based on call count to simulate:
|
|
54
|
+
* 1. Initial buggy implementation (INCOMPLETE)
|
|
55
|
+
* 2. Correction/fix (COMPLETE)
|
|
56
|
+
*/
|
|
57
|
+
class StepwiseMockExecutor {
|
|
58
|
+
callCount = 0;
|
|
59
|
+
config;
|
|
60
|
+
executionLog = [];
|
|
61
|
+
constructor(config) {
|
|
62
|
+
this.config = config;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get current call count
|
|
66
|
+
*/
|
|
67
|
+
getCallCount() {
|
|
68
|
+
return this.callCount;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get execution log for verification
|
|
72
|
+
*/
|
|
73
|
+
getExecutionLog() {
|
|
74
|
+
return [...this.executionLog];
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Reset executor state
|
|
78
|
+
*/
|
|
79
|
+
reset() {
|
|
80
|
+
this.callCount = 0;
|
|
81
|
+
this.executionLog = [];
|
|
82
|
+
}
|
|
83
|
+
async isClaudeCodeAvailable() {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
async checkAuthStatus() {
|
|
87
|
+
return { available: true, loggedIn: true };
|
|
88
|
+
}
|
|
89
|
+
async execute(task) {
|
|
90
|
+
const startTime = Date.now();
|
|
91
|
+
this.callCount++;
|
|
92
|
+
const currentStep = this.callCount - 1;
|
|
93
|
+
// Get step config or use default
|
|
94
|
+
const stepConfig = this.config.steps[currentStep] || {
|
|
95
|
+
status: this.config.defaultStatus || 'COMPLETE',
|
|
96
|
+
output: 'No more steps configured',
|
|
97
|
+
};
|
|
98
|
+
const filesCreated = [];
|
|
99
|
+
const verifiedFiles = [];
|
|
100
|
+
// Create files if specified
|
|
101
|
+
if (stepConfig.filesToCreate) {
|
|
102
|
+
for (const file of stepConfig.filesToCreate) {
|
|
103
|
+
const fullPath = path.join(this.config.projectPath, file.path);
|
|
104
|
+
const dir = path.dirname(fullPath);
|
|
105
|
+
// Ensure directory exists
|
|
106
|
+
if (!fs.existsSync(dir)) {
|
|
107
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
108
|
+
}
|
|
109
|
+
// Write file
|
|
110
|
+
fs.writeFileSync(fullPath, file.content, 'utf-8');
|
|
111
|
+
filesCreated.push(file.path);
|
|
112
|
+
// Verify file
|
|
113
|
+
const stat = fs.statSync(fullPath);
|
|
114
|
+
verifiedFiles.push({
|
|
115
|
+
path: file.path,
|
|
116
|
+
exists: true,
|
|
117
|
+
size: stat.size,
|
|
118
|
+
content_preview: file.content.substring(0, 100),
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
// Execute custom handler if provided
|
|
123
|
+
let customResult = {};
|
|
124
|
+
if (stepConfig.customHandler) {
|
|
125
|
+
customResult = await stepConfig.customHandler(task, this.config.projectPath);
|
|
126
|
+
}
|
|
127
|
+
// Determine final status
|
|
128
|
+
let finalStatus = stepConfig.status;
|
|
129
|
+
// If testShouldPass is specified, run npm test to verify
|
|
130
|
+
if (stepConfig.testShouldPass !== undefined && filesCreated.length > 0) {
|
|
131
|
+
// Rebuild if TypeScript files were modified
|
|
132
|
+
const tsFilesModified = filesCreated.some(f => f.endsWith('.ts'));
|
|
133
|
+
if (tsFilesModified) {
|
|
134
|
+
try {
|
|
135
|
+
const { execSync } = await Promise.resolve().then(() => __importStar(require('child_process')));
|
|
136
|
+
execSync('npm run build', {
|
|
137
|
+
cwd: this.config.projectPath,
|
|
138
|
+
stdio: 'pipe',
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// Build failed
|
|
143
|
+
finalStatus = 'ERROR';
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Log execution
|
|
148
|
+
this.executionLog.push({
|
|
149
|
+
callNumber: this.callCount,
|
|
150
|
+
timestamp: new Date().toISOString(),
|
|
151
|
+
taskId: task.id,
|
|
152
|
+
prompt: task.prompt.substring(0, 200),
|
|
153
|
+
status: finalStatus,
|
|
154
|
+
filesCreated,
|
|
155
|
+
});
|
|
156
|
+
const duration_ms = Date.now() - startTime;
|
|
157
|
+
return {
|
|
158
|
+
executed: true,
|
|
159
|
+
output: stepConfig.output,
|
|
160
|
+
files_modified: filesCreated,
|
|
161
|
+
duration_ms,
|
|
162
|
+
status: finalStatus,
|
|
163
|
+
cwd: this.config.projectPath,
|
|
164
|
+
verified_files: verifiedFiles,
|
|
165
|
+
unverified_files: [],
|
|
166
|
+
...customResult,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
exports.StepwiseMockExecutor = StepwiseMockExecutor;
|
|
171
|
+
/**
|
|
172
|
+
* Create a StepwiseMockExecutor configured for the tiny-cli self-heal test
|
|
173
|
+
*
|
|
174
|
+
* Step 1: Creates buggy implementation (tests fail) -> INCOMPLETE
|
|
175
|
+
* Step 2: Creates fixed implementation (tests pass) -> COMPLETE
|
|
176
|
+
*/
|
|
177
|
+
function createTinyCliMockExecutor(projectPath) {
|
|
178
|
+
return new StepwiseMockExecutor({
|
|
179
|
+
projectPath,
|
|
180
|
+
steps: [
|
|
181
|
+
// Step 1: Initial implementation (buggy)
|
|
182
|
+
{
|
|
183
|
+
status: 'INCOMPLETE',
|
|
184
|
+
output: 'Implemented sum and fib functions. Running tests... Tests failed: 6 failing. Need to fix bugs.',
|
|
185
|
+
filesToCreate: [
|
|
186
|
+
{
|
|
187
|
+
path: 'src/tiny-cli.ts',
|
|
188
|
+
content: `#!/usr/bin/env node
|
|
189
|
+
/**
|
|
190
|
+
* Tiny CLI - A minimal CLI for testing
|
|
191
|
+
*
|
|
192
|
+
* BUGGY IMPLEMENTATION (Step 1)
|
|
193
|
+
*/
|
|
194
|
+
|
|
195
|
+
function sum(a: number, b: number): number {
|
|
196
|
+
// BUG: String concatenation instead of numeric addition
|
|
197
|
+
return Number(String(a) + String(b));
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
function fib(n: number): number {
|
|
201
|
+
if (n <= 0) return 0;
|
|
202
|
+
if (n === 1) return 1;
|
|
203
|
+
|
|
204
|
+
let prev = 0;
|
|
205
|
+
let curr = 1;
|
|
206
|
+
|
|
207
|
+
// BUG: Off-by-one error
|
|
208
|
+
for (let i = 0; i <= n; i++) {
|
|
209
|
+
const next = prev + curr;
|
|
210
|
+
prev = curr;
|
|
211
|
+
curr = next;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return curr;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
function main(): void {
|
|
218
|
+
const args = process.argv.slice(2);
|
|
219
|
+
|
|
220
|
+
if (args.length === 0) {
|
|
221
|
+
console.error('Usage: tiny-cli <command> [args]');
|
|
222
|
+
console.error('Commands:');
|
|
223
|
+
console.error(' sum <a> <b> - Returns the sum of two numbers');
|
|
224
|
+
console.error(' fib <n> - Returns the nth Fibonacci number');
|
|
225
|
+
process.exit(2);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
const command = args[0];
|
|
229
|
+
|
|
230
|
+
switch (command) {
|
|
231
|
+
case 'sum': {
|
|
232
|
+
if (args.length !== 3) {
|
|
233
|
+
console.error('Usage: tiny-cli sum <a> <b>');
|
|
234
|
+
process.exit(2);
|
|
235
|
+
}
|
|
236
|
+
const a = parseInt(args[1], 10);
|
|
237
|
+
const b = parseInt(args[2], 10);
|
|
238
|
+
if (isNaN(a) || isNaN(b)) {
|
|
239
|
+
console.error('Error: Arguments must be numbers');
|
|
240
|
+
process.exit(2);
|
|
241
|
+
}
|
|
242
|
+
console.log(sum(a, b));
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
case 'fib': {
|
|
247
|
+
if (args.length !== 2) {
|
|
248
|
+
console.error('Usage: tiny-cli fib <n>');
|
|
249
|
+
process.exit(2);
|
|
250
|
+
}
|
|
251
|
+
const n = parseInt(args[1], 10);
|
|
252
|
+
if (isNaN(n) || n < 0) {
|
|
253
|
+
console.error('Error: Argument must be a non-negative integer');
|
|
254
|
+
process.exit(2);
|
|
255
|
+
}
|
|
256
|
+
console.log(fib(n));
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
default:
|
|
261
|
+
console.error(\`Unknown command: \${command}\`);
|
|
262
|
+
console.error('Available commands: sum, fib');
|
|
263
|
+
process.exit(2);
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
main();
|
|
268
|
+
`,
|
|
269
|
+
},
|
|
270
|
+
],
|
|
271
|
+
testShouldPass: false,
|
|
272
|
+
},
|
|
273
|
+
// Step 2: Fixed implementation
|
|
274
|
+
{
|
|
275
|
+
status: 'COMPLETE',
|
|
276
|
+
output: 'Fixed both sum and fib functions. Running tests... All 15 tests passing.',
|
|
277
|
+
filesToCreate: [
|
|
278
|
+
{
|
|
279
|
+
path: 'src/tiny-cli.ts',
|
|
280
|
+
content: `#!/usr/bin/env node
|
|
281
|
+
/**
|
|
282
|
+
* Tiny CLI - A minimal CLI for testing
|
|
283
|
+
*
|
|
284
|
+
* FIXED IMPLEMENTATION (Step 2)
|
|
285
|
+
*/
|
|
286
|
+
|
|
287
|
+
function sum(a: number, b: number): number {
|
|
288
|
+
// FIXED: Proper numeric addition
|
|
289
|
+
return a + b;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
function fib(n: number): number {
|
|
293
|
+
if (n <= 0) return 0;
|
|
294
|
+
if (n === 1) return 1;
|
|
295
|
+
|
|
296
|
+
let prev = 0;
|
|
297
|
+
let curr = 1;
|
|
298
|
+
|
|
299
|
+
// FIXED: Correct loop bounds (n-1 iterations)
|
|
300
|
+
for (let i = 2; i <= n; i++) {
|
|
301
|
+
const next = prev + curr;
|
|
302
|
+
prev = curr;
|
|
303
|
+
curr = next;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
return curr;
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
function main(): void {
|
|
310
|
+
const args = process.argv.slice(2);
|
|
311
|
+
|
|
312
|
+
if (args.length === 0) {
|
|
313
|
+
console.error('Usage: tiny-cli <command> [args]');
|
|
314
|
+
console.error('Commands:');
|
|
315
|
+
console.error(' sum <a> <b> - Returns the sum of two numbers');
|
|
316
|
+
console.error(' fib <n> - Returns the nth Fibonacci number');
|
|
317
|
+
process.exit(2);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
const command = args[0];
|
|
321
|
+
|
|
322
|
+
switch (command) {
|
|
323
|
+
case 'sum': {
|
|
324
|
+
if (args.length !== 3) {
|
|
325
|
+
console.error('Usage: tiny-cli sum <a> <b>');
|
|
326
|
+
process.exit(2);
|
|
327
|
+
}
|
|
328
|
+
const a = parseInt(args[1], 10);
|
|
329
|
+
const b = parseInt(args[2], 10);
|
|
330
|
+
if (isNaN(a) || isNaN(b)) {
|
|
331
|
+
console.error('Error: Arguments must be numbers');
|
|
332
|
+
process.exit(2);
|
|
333
|
+
}
|
|
334
|
+
console.log(sum(a, b));
|
|
335
|
+
break;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
case 'fib': {
|
|
339
|
+
if (args.length !== 2) {
|
|
340
|
+
console.error('Usage: tiny-cli fib <n>');
|
|
341
|
+
process.exit(2);
|
|
342
|
+
}
|
|
343
|
+
const n = parseInt(args[1], 10);
|
|
344
|
+
if (isNaN(n) || n < 0) {
|
|
345
|
+
console.error('Error: Argument must be a non-negative integer');
|
|
346
|
+
process.exit(2);
|
|
347
|
+
}
|
|
348
|
+
console.log(fib(n));
|
|
349
|
+
break;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
default:
|
|
353
|
+
console.error(\`Unknown command: \${command}\`);
|
|
354
|
+
console.error('Available commands: sum, fib');
|
|
355
|
+
process.exit(2);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
main();
|
|
360
|
+
`,
|
|
361
|
+
},
|
|
362
|
+
],
|
|
363
|
+
testShouldPass: true,
|
|
364
|
+
},
|
|
365
|
+
],
|
|
366
|
+
defaultStatus: 'COMPLETE',
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
//# sourceMappingURL=stepwise-mock-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepwise-mock-executor.js","sourceRoot":"","sources":["../../src/executor/stepwise-mock-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,6 +68,16 @@ export declare class TwoPaneRenderer {
|
|
|
68
68
|
* @param message - Log message to write
|
|
69
69
|
*/
|
|
70
70
|
writeLog(message: string): void;
|
|
71
|
+
/**
|
|
72
|
+
* Generate visual separator line
|
|
73
|
+
* Per spec: Visual separation between log pane and input pane
|
|
74
|
+
*/
|
|
75
|
+
private getSeparator;
|
|
76
|
+
/**
|
|
77
|
+
* Format a log line with visual prefix
|
|
78
|
+
* Adds dim pipe character to distinguish log output from input
|
|
79
|
+
*/
|
|
80
|
+
private formatLogLine;
|
|
71
81
|
/**
|
|
72
82
|
* Flush pending logs to output
|
|
73
83
|
* Preserves input line state
|
|
@@ -76,6 +86,7 @@ export declare class TwoPaneRenderer {
|
|
|
76
86
|
/**
|
|
77
87
|
* Render the input line (prompt + buffer)
|
|
78
88
|
* Called after log output to restore input state
|
|
89
|
+
* Includes visual separator for 2-pane distinction
|
|
79
90
|
*/
|
|
80
91
|
private renderInputLine;
|
|
81
92
|
/**
|
|
@@ -101,6 +112,7 @@ export declare class TwoPaneRenderer {
|
|
|
101
112
|
/**
|
|
102
113
|
* Format RUNNING display
|
|
103
114
|
* Per spec/18: RUNNING task-1234 | 12.3s | processing
|
|
115
|
+
* Yellow color for visibility
|
|
104
116
|
*
|
|
105
117
|
* @param info - Running task info
|
|
106
118
|
* @returns Formatted string
|
|
@@ -116,7 +128,7 @@ export declare class TwoPaneRenderer {
|
|
|
116
128
|
/**
|
|
117
129
|
* Format COMPLETE display
|
|
118
130
|
* Per spec/18:
|
|
119
|
-
* - Result summary
|
|
131
|
+
* - Result summary (green for success)
|
|
120
132
|
* - Files modified list
|
|
121
133
|
* - Next operations
|
|
122
134
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"two-pane-renderer.d.ts","sourceRoot":"","sources":["../../src/repl/two-pane-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"two-pane-renderer.d.ts","sourceRoot":"","sources":["../../src/repl/two-pane-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAsCH;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,sCAAsC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC;IAC5B,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAGlC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAa;IAGnC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,YAAY,CAA8C;IAClE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAM;gBAEzB,MAAM,GAAE,qBAA0B;IAY9C;;OAEG;IACH,SAAS,IAAI,OAAO;IAIpB;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAoB/B;;;OAGG;IACH,OAAO,CAAC,YAAY;IAMpB;;;OAGG;IACH,OAAO,CAAC,aAAa;IAKrB;;;OAGG;IACH,OAAO,CAAC,SAAS;IA8BjB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IASvB;;;;;;OAMG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAKpD;;OAEG;IACH,UAAU,IAAI,IAAI;IAKlB;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,SAAS,IAAI,MAAM;IAInB;;;;;;;OAOG;IACH,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM;IAKxC;;;;;OAKG;IACH,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI;IAIpC;;;;;;;;;OASG;IACH,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE;IAoB5C;;;;;OAKG;IACH,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IAOtC;;;OAGG;IACH,KAAK,IAAI,IAAI;IAUb;;OAEG;IACH,cAAc,IAAI,MAAM;IAIxB;;OAEG;IACH,iBAAiB,IAAI,MAAM;CAG5B"}
|
|
@@ -30,7 +30,21 @@ const ANSI = {
|
|
|
30
30
|
CLEAR_TO_END: '\x1b[K',
|
|
31
31
|
// Screen control
|
|
32
32
|
SCROLL_UP: '\x1b[S',
|
|
33
|
+
// Colors and styles
|
|
34
|
+
RESET: '\x1b[0m',
|
|
35
|
+
DIM: '\x1b[2m',
|
|
36
|
+
BOLD: '\x1b[1m',
|
|
37
|
+
CYAN: '\x1b[36m',
|
|
38
|
+
GREEN: '\x1b[32m',
|
|
39
|
+
YELLOW: '\x1b[33m',
|
|
40
|
+
BLUE: '\x1b[34m',
|
|
33
41
|
};
|
|
42
|
+
/**
|
|
43
|
+
* Visual separator between log pane and input pane
|
|
44
|
+
* Default width: 60 characters
|
|
45
|
+
*/
|
|
46
|
+
const SEPARATOR_CHAR = '\u2500'; // Box drawing character: ─
|
|
47
|
+
const SEPARATOR_WIDTH = 60;
|
|
34
48
|
/**
|
|
35
49
|
* Two-Pane Renderer
|
|
36
50
|
*
|
|
@@ -88,6 +102,23 @@ class TwoPaneRenderer {
|
|
|
88
102
|
}, this.FLUSH_DELAY_MS);
|
|
89
103
|
}
|
|
90
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Generate visual separator line
|
|
107
|
+
* Per spec: Visual separation between log pane and input pane
|
|
108
|
+
*/
|
|
109
|
+
getSeparator() {
|
|
110
|
+
// Use terminal width if available, otherwise default
|
|
111
|
+
const width = this.output.columns || SEPARATOR_WIDTH;
|
|
112
|
+
return ANSI.DIM + SEPARATOR_CHAR.repeat(Math.min(width, 120)) + ANSI.RESET;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Format a log line with visual prefix
|
|
116
|
+
* Adds dim pipe character to distinguish log output from input
|
|
117
|
+
*/
|
|
118
|
+
formatLogLine(message) {
|
|
119
|
+
// Add dim gray prefix to log lines for visual distinction
|
|
120
|
+
return `${ANSI.DIM}|${ANSI.RESET} ${message}`;
|
|
121
|
+
}
|
|
91
122
|
/**
|
|
92
123
|
* Flush pending logs to output
|
|
93
124
|
* Preserves input line state
|
|
@@ -105,11 +136,11 @@ class TwoPaneRenderer {
|
|
|
105
136
|
this.output.write(ANSI.CLEAR_LINE);
|
|
106
137
|
// 2. Move cursor up to log area (if input is on screen)
|
|
107
138
|
// We write logs, then move back down and redraw input
|
|
108
|
-
// 3. Output all logs
|
|
139
|
+
// 3. Output all logs with visual prefix
|
|
109
140
|
for (const log of logs) {
|
|
110
|
-
this.output.write(log + '\n');
|
|
141
|
+
this.output.write(this.formatLogLine(log) + '\n');
|
|
111
142
|
}
|
|
112
|
-
// 4. Redraw input line at current position
|
|
143
|
+
// 4. Redraw input line at current position (with separator)
|
|
113
144
|
this.renderInputLine();
|
|
114
145
|
// 5. Restore cursor to correct position in input
|
|
115
146
|
this.output.write(ANSI.MOVE_TO_COL(this.prompt.length + this.inputCursorPos + 1));
|
|
@@ -117,9 +148,14 @@ class TwoPaneRenderer {
|
|
|
117
148
|
/**
|
|
118
149
|
* Render the input line (prompt + buffer)
|
|
119
150
|
* Called after log output to restore input state
|
|
151
|
+
* Includes visual separator for 2-pane distinction
|
|
120
152
|
*/
|
|
121
153
|
renderInputLine() {
|
|
122
|
-
|
|
154
|
+
// Show separator line above input
|
|
155
|
+
this.output.write(this.getSeparator() + '\n');
|
|
156
|
+
// Colorized prompt for visual distinction
|
|
157
|
+
const coloredPrompt = `${ANSI.BOLD}${ANSI.CYAN}${this.prompt}${ANSI.RESET}`;
|
|
158
|
+
this.output.write(coloredPrompt + this.inputBuffer);
|
|
123
159
|
this.output.write(ANSI.CLEAR_TO_END);
|
|
124
160
|
}
|
|
125
161
|
/**
|
|
@@ -155,13 +191,14 @@ class TwoPaneRenderer {
|
|
|
155
191
|
/**
|
|
156
192
|
* Format RUNNING display
|
|
157
193
|
* Per spec/18: RUNNING task-1234 | 12.3s | processing
|
|
194
|
+
* Yellow color for visibility
|
|
158
195
|
*
|
|
159
196
|
* @param info - Running task info
|
|
160
197
|
* @returns Formatted string
|
|
161
198
|
*/
|
|
162
199
|
formatRunning(info) {
|
|
163
200
|
const elapsed = (info.elapsedMs / 1000).toFixed(1);
|
|
164
|
-
return
|
|
201
|
+
return `${ANSI.YELLOW}RUNNING${ANSI.RESET} ${info.taskId} | ${elapsed}s | ${info.status}`;
|
|
165
202
|
}
|
|
166
203
|
/**
|
|
167
204
|
* Show RUNNING status
|
|
@@ -175,7 +212,7 @@ class TwoPaneRenderer {
|
|
|
175
212
|
/**
|
|
176
213
|
* Format COMPLETE display
|
|
177
214
|
* Per spec/18:
|
|
178
|
-
* - Result summary
|
|
215
|
+
* - Result summary (green for success)
|
|
179
216
|
* - Files modified list
|
|
180
217
|
* - Next operations
|
|
181
218
|
*
|
|
@@ -185,16 +222,16 @@ class TwoPaneRenderer {
|
|
|
185
222
|
formatComplete(info) {
|
|
186
223
|
const elapsed = (info.elapsedMs / 1000).toFixed(1);
|
|
187
224
|
const lines = [];
|
|
188
|
-
lines.push(
|
|
225
|
+
lines.push(`${ANSI.GREEN}COMPLETE${ANSI.RESET} ${info.taskId} | ${elapsed}s`);
|
|
189
226
|
lines.push('');
|
|
190
227
|
if (info.filesModified.length > 0) {
|
|
191
|
-
lines.push(
|
|
228
|
+
lines.push(`${ANSI.BOLD}Files modified:${ANSI.RESET}`);
|
|
192
229
|
for (const file of info.filesModified) {
|
|
193
|
-
lines.push(`
|
|
230
|
+
lines.push(` ${ANSI.DIM}-${ANSI.RESET} ${file}`);
|
|
194
231
|
}
|
|
195
232
|
lines.push('');
|
|
196
233
|
}
|
|
197
|
-
lines.push(
|
|
234
|
+
lines.push(`${ANSI.BLUE}Next:${ANSI.RESET} ${info.nextOperations}`);
|
|
198
235
|
return lines;
|
|
199
236
|
}
|
|
200
237
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"two-pane-renderer.js","sourceRoot":"","sources":["../../src/repl/two-pane-renderer.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAEH;;GAEG;AACH,MAAM,IAAI,GAAG;IACX,iBAAiB;IACjB,WAAW,EAAE,QAAQ;IACrB,cAAc,EAAE,QAAQ;IACxB,WAAW,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,QAAQ,GAAG,GAAG;IAC5C,OAAO,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG;IACpC,SAAS,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG;IACtC,OAAO,EAAE,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE,CAAC,QAAQ,GAAG,IAAI,GAAG,GAAG;IAE5D,eAAe;IACf,UAAU,EAAE,SAAS;IACrB,YAAY,EAAE,QAAQ;IAEtB,iBAAiB;IACjB,SAAS,EAAE,QAAQ;
|
|
1
|
+
{"version":3,"file":"two-pane-renderer.js","sourceRoot":"","sources":["../../src/repl/two-pane-renderer.ts"],"names":[],"mappings":"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"}
|