@litmers/cursorflow-orchestrator 0.1.13 → 0.1.15
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/CHANGELOG.md +37 -0
- package/README.md +83 -2
- package/commands/cursorflow-clean.md +20 -6
- package/commands/cursorflow-prepare.md +1 -1
- package/commands/cursorflow-resume.md +127 -6
- package/commands/cursorflow-run.md +2 -2
- package/commands/cursorflow-signal.md +11 -4
- package/dist/cli/clean.js +164 -12
- package/dist/cli/clean.js.map +1 -1
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +6 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/logs.d.ts +8 -0
- package/dist/cli/logs.js +759 -0
- package/dist/cli/logs.js.map +1 -0
- package/dist/cli/monitor.js +113 -30
- package/dist/cli/monitor.js.map +1 -1
- package/dist/cli/prepare.js +1 -1
- package/dist/cli/resume.js +367 -18
- package/dist/cli/resume.js.map +1 -1
- package/dist/cli/run.js +9 -0
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/signal.js +34 -20
- package/dist/cli/signal.js.map +1 -1
- package/dist/core/orchestrator.d.ts +13 -1
- package/dist/core/orchestrator.js +396 -35
- package/dist/core/orchestrator.js.map +1 -1
- package/dist/core/reviewer.d.ts +2 -0
- package/dist/core/reviewer.js +24 -2
- package/dist/core/reviewer.js.map +1 -1
- package/dist/core/runner.d.ts +9 -3
- package/dist/core/runner.js +266 -61
- package/dist/core/runner.js.map +1 -1
- package/dist/utils/config.js +38 -1
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/enhanced-logger.d.ts +210 -0
- package/dist/utils/enhanced-logger.js +1030 -0
- package/dist/utils/enhanced-logger.js.map +1 -0
- package/dist/utils/events.d.ts +59 -0
- package/dist/utils/events.js +37 -0
- package/dist/utils/events.js.map +1 -0
- package/dist/utils/git.d.ts +11 -0
- package/dist/utils/git.js +40 -0
- package/dist/utils/git.js.map +1 -1
- package/dist/utils/logger.d.ts +2 -0
- package/dist/utils/logger.js +4 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/utils/types.d.ts +132 -1
- package/dist/utils/webhook.d.ts +5 -0
- package/dist/utils/webhook.js +109 -0
- package/dist/utils/webhook.js.map +1 -0
- package/examples/README.md +1 -1
- package/package.json +2 -1
- package/scripts/patches/test-cursor-agent.js +1 -1
- package/scripts/simple-logging-test.sh +97 -0
- package/scripts/test-real-cursor-lifecycle.sh +289 -0
- package/scripts/test-real-logging.sh +289 -0
- package/scripts/test-streaming-multi-task.sh +247 -0
- package/src/cli/clean.ts +170 -13
- package/src/cli/index.ts +4 -1
- package/src/cli/logs.ts +863 -0
- package/src/cli/monitor.ts +123 -30
- package/src/cli/prepare.ts +1 -1
- package/src/cli/resume.ts +463 -22
- package/src/cli/run.ts +10 -0
- package/src/cli/signal.ts +43 -27
- package/src/core/orchestrator.ts +458 -36
- package/src/core/reviewer.ts +40 -4
- package/src/core/runner.ts +293 -60
- package/src/utils/config.ts +41 -1
- package/src/utils/enhanced-logger.ts +1166 -0
- package/src/utils/events.ts +117 -0
- package/src/utils/git.ts +40 -0
- package/src/utils/logger.ts +4 -1
- package/src/utils/types.ts +160 -1
- package/src/utils/webhook.ts +85 -0
package/dist/utils/config.js
CHANGED
|
@@ -53,7 +53,8 @@ function findProjectRoot(cwd = process.cwd()) {
|
|
|
53
53
|
let current = cwd;
|
|
54
54
|
while (current !== path.parse(current).root) {
|
|
55
55
|
const packagePath = path.join(current, 'package.json');
|
|
56
|
-
|
|
56
|
+
const configPath = path.join(current, 'cursorflow.config.js');
|
|
57
|
+
if (fs.existsSync(packagePath) || fs.existsSync(configPath)) {
|
|
57
58
|
return current;
|
|
58
59
|
}
|
|
59
60
|
current = path.dirname(current);
|
|
@@ -97,6 +98,20 @@ function loadConfig(projectRoot = null) {
|
|
|
97
98
|
// Advanced
|
|
98
99
|
worktreePrefix: 'cursorflow-',
|
|
99
100
|
maxConcurrentLanes: 10,
|
|
101
|
+
agentOutputFormat: 'stream-json',
|
|
102
|
+
// Webhooks
|
|
103
|
+
webhooks: [],
|
|
104
|
+
// Enhanced logging
|
|
105
|
+
enhancedLogging: {
|
|
106
|
+
enabled: true,
|
|
107
|
+
stripAnsi: true,
|
|
108
|
+
addTimestamps: true,
|
|
109
|
+
maxFileSize: 50 * 1024 * 1024, // 50MB
|
|
110
|
+
maxFiles: 5,
|
|
111
|
+
keepRawLogs: true,
|
|
112
|
+
writeJsonLog: true,
|
|
113
|
+
timestampFormat: 'iso',
|
|
114
|
+
},
|
|
100
115
|
// Internal
|
|
101
116
|
projectRoot,
|
|
102
117
|
};
|
|
@@ -190,6 +205,28 @@ function createDefaultConfig(projectRoot, force = false) {
|
|
|
190
205
|
// Advanced
|
|
191
206
|
worktreePrefix: 'cursorflow-',
|
|
192
207
|
maxConcurrentLanes: 10,
|
|
208
|
+
agentOutputFormat: 'stream-json', // 'stream-json' | 'json' | 'plain'
|
|
209
|
+
|
|
210
|
+
// Webhook configuration
|
|
211
|
+
// webhooks: [
|
|
212
|
+
// {
|
|
213
|
+
// enabled: true,
|
|
214
|
+
// url: 'https://api.example.com/events',
|
|
215
|
+
// events: ['*'],
|
|
216
|
+
// }
|
|
217
|
+
// ],
|
|
218
|
+
|
|
219
|
+
// Enhanced logging configuration
|
|
220
|
+
enhancedLogging: {
|
|
221
|
+
enabled: true, // Enable enhanced logging features
|
|
222
|
+
stripAnsi: true, // Strip ANSI codes for clean logs
|
|
223
|
+
addTimestamps: true, // Add timestamps to each line
|
|
224
|
+
maxFileSize: 52428800, // 50MB max file size before rotation
|
|
225
|
+
maxFiles: 5, // Number of rotated files to keep
|
|
226
|
+
keepRawLogs: true, // Keep raw logs with ANSI codes
|
|
227
|
+
writeJsonLog: true, // Write structured JSON logs
|
|
228
|
+
timestampFormat: 'iso', // 'iso' | 'relative' | 'short'
|
|
229
|
+
},
|
|
193
230
|
};
|
|
194
231
|
`;
|
|
195
232
|
fs.writeFileSync(configPath, template, 'utf8');
|
package/dist/utils/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUH,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enhanced Logger - Comprehensive terminal output capture and management
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - ANSI escape sequence stripping for clean logs
|
|
6
|
+
* - Automatic timestamps on each line
|
|
7
|
+
* - Log rotation and size management
|
|
8
|
+
* - Session headers with context
|
|
9
|
+
* - Raw and clean log file options
|
|
10
|
+
* - Structured JSON logs for programmatic access
|
|
11
|
+
* - Streaming output support for real-time capture
|
|
12
|
+
*/
|
|
13
|
+
import { Transform, TransformCallback } from 'stream';
|
|
14
|
+
import { EnhancedLogConfig } from './types';
|
|
15
|
+
export { EnhancedLogConfig } from './types';
|
|
16
|
+
export declare const DEFAULT_LOG_CONFIG: EnhancedLogConfig;
|
|
17
|
+
/**
|
|
18
|
+
* Streaming JSON Parser - Parses cursor-agent stream-json output
|
|
19
|
+
* and combines tokens into readable messages
|
|
20
|
+
*/
|
|
21
|
+
export declare class StreamingMessageParser {
|
|
22
|
+
private currentMessage;
|
|
23
|
+
private currentRole;
|
|
24
|
+
private messageStartTime;
|
|
25
|
+
private onMessage;
|
|
26
|
+
constructor(onMessage: (msg: ParsedMessage) => void);
|
|
27
|
+
/**
|
|
28
|
+
* Parse a line of JSON output from cursor-agent
|
|
29
|
+
*/
|
|
30
|
+
parseLine(line: string): void;
|
|
31
|
+
private handleJsonMessage;
|
|
32
|
+
/**
|
|
33
|
+
* Flush accumulated message
|
|
34
|
+
*/
|
|
35
|
+
flush(): void;
|
|
36
|
+
private emitMessage;
|
|
37
|
+
}
|
|
38
|
+
export interface ParsedMessage {
|
|
39
|
+
type: 'system' | 'user' | 'assistant' | 'tool' | 'tool_result' | 'result';
|
|
40
|
+
role: string;
|
|
41
|
+
content: string;
|
|
42
|
+
timestamp: number;
|
|
43
|
+
metadata?: Record<string, any>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Strip ANSI escape sequences from text
|
|
47
|
+
*/
|
|
48
|
+
export declare function stripAnsi(text: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Format timestamp based on format preference
|
|
51
|
+
*/
|
|
52
|
+
export declare function formatTimestamp(format: 'iso' | 'relative' | 'short', startTime?: number): string;
|
|
53
|
+
/**
|
|
54
|
+
* JSON log entry structure
|
|
55
|
+
*/
|
|
56
|
+
export interface JsonLogEntry {
|
|
57
|
+
timestamp: string;
|
|
58
|
+
level: 'stdout' | 'stderr' | 'info' | 'error' | 'debug' | 'session';
|
|
59
|
+
source?: string;
|
|
60
|
+
task?: string;
|
|
61
|
+
lane?: string;
|
|
62
|
+
message: string;
|
|
63
|
+
raw?: string;
|
|
64
|
+
metadata?: Record<string, any>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Session context for logging
|
|
68
|
+
*/
|
|
69
|
+
export interface LogSession {
|
|
70
|
+
id: string;
|
|
71
|
+
laneName: string;
|
|
72
|
+
taskName?: string;
|
|
73
|
+
model?: string;
|
|
74
|
+
startTime: number;
|
|
75
|
+
metadata?: Record<string, any>;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Transform stream that strips ANSI and adds timestamps
|
|
79
|
+
*/
|
|
80
|
+
export declare class CleanLogTransform extends Transform {
|
|
81
|
+
private config;
|
|
82
|
+
private session;
|
|
83
|
+
private buffer;
|
|
84
|
+
constructor(config: EnhancedLogConfig, session: LogSession);
|
|
85
|
+
_transform(chunk: Buffer, encoding: BufferEncoding, callback: TransformCallback): void;
|
|
86
|
+
_flush(callback: TransformCallback): void;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Enhanced Log Manager - Manages log files with rotation and multiple outputs
|
|
90
|
+
*/
|
|
91
|
+
export declare class EnhancedLogManager {
|
|
92
|
+
private config;
|
|
93
|
+
private session;
|
|
94
|
+
private logDir;
|
|
95
|
+
private cleanLogPath;
|
|
96
|
+
private rawLogPath;
|
|
97
|
+
private jsonLogPath;
|
|
98
|
+
private readableLogPath;
|
|
99
|
+
private cleanLogFd;
|
|
100
|
+
private rawLogFd;
|
|
101
|
+
private jsonLogFd;
|
|
102
|
+
private readableLogFd;
|
|
103
|
+
private cleanLogSize;
|
|
104
|
+
private rawLogSize;
|
|
105
|
+
private cleanTransform;
|
|
106
|
+
private streamingParser;
|
|
107
|
+
private lineBuffer;
|
|
108
|
+
private onParsedMessage?;
|
|
109
|
+
constructor(logDir: string, session: LogSession, config?: Partial<EnhancedLogConfig>, onParsedMessage?: (msg: ParsedMessage) => void);
|
|
110
|
+
/**
|
|
111
|
+
* Initialize log files and write session headers
|
|
112
|
+
*/
|
|
113
|
+
private initLogFiles;
|
|
114
|
+
/**
|
|
115
|
+
* Write a parsed message to the readable log
|
|
116
|
+
*/
|
|
117
|
+
private writeReadableMessage;
|
|
118
|
+
/**
|
|
119
|
+
* Indent text with a prefix
|
|
120
|
+
*/
|
|
121
|
+
private indentText;
|
|
122
|
+
/**
|
|
123
|
+
* Write session header to logs
|
|
124
|
+
*/
|
|
125
|
+
private writeSessionHeader;
|
|
126
|
+
/**
|
|
127
|
+
* Rotate log file if it exceeds max size
|
|
128
|
+
*/
|
|
129
|
+
private rotateIfNeeded;
|
|
130
|
+
/**
|
|
131
|
+
* Rotate a log file
|
|
132
|
+
*/
|
|
133
|
+
private rotateLog;
|
|
134
|
+
/**
|
|
135
|
+
* Write to clean log with size tracking
|
|
136
|
+
*/
|
|
137
|
+
private writeToCleanLog;
|
|
138
|
+
/**
|
|
139
|
+
* Write to raw log with size tracking
|
|
140
|
+
*/
|
|
141
|
+
private writeToRawLog;
|
|
142
|
+
/**
|
|
143
|
+
* Write a JSON log entry
|
|
144
|
+
*/
|
|
145
|
+
private writeJsonEntry;
|
|
146
|
+
/**
|
|
147
|
+
* Write stdout data
|
|
148
|
+
*/
|
|
149
|
+
writeStdout(data: Buffer | string): void;
|
|
150
|
+
/**
|
|
151
|
+
* Parse streaming JSON data for readable log
|
|
152
|
+
*/
|
|
153
|
+
private parseStreamingData;
|
|
154
|
+
/**
|
|
155
|
+
* Write stderr data
|
|
156
|
+
*/
|
|
157
|
+
writeStderr(data: Buffer | string): void;
|
|
158
|
+
/**
|
|
159
|
+
* Write a custom log entry
|
|
160
|
+
*/
|
|
161
|
+
log(level: 'info' | 'error' | 'debug', message: string, metadata?: Record<string, any>): void;
|
|
162
|
+
/**
|
|
163
|
+
* Add a section marker
|
|
164
|
+
*/
|
|
165
|
+
section(title: string): void;
|
|
166
|
+
/**
|
|
167
|
+
* Update task context
|
|
168
|
+
*/
|
|
169
|
+
setTask(taskName: string, model?: string): void;
|
|
170
|
+
/**
|
|
171
|
+
* Check if a log line is noise (progress bars, spinners, etc.)
|
|
172
|
+
*/
|
|
173
|
+
private isNoiseLog;
|
|
174
|
+
/**
|
|
175
|
+
* Get paths to all log files
|
|
176
|
+
*/
|
|
177
|
+
getLogPaths(): {
|
|
178
|
+
clean: string;
|
|
179
|
+
raw?: string;
|
|
180
|
+
json?: string;
|
|
181
|
+
readable: string;
|
|
182
|
+
};
|
|
183
|
+
/**
|
|
184
|
+
* Create file descriptors for process stdio redirection
|
|
185
|
+
*/
|
|
186
|
+
getFileDescriptors(): {
|
|
187
|
+
stdout: number;
|
|
188
|
+
stderr: number;
|
|
189
|
+
};
|
|
190
|
+
/**
|
|
191
|
+
* Close all log files
|
|
192
|
+
*/
|
|
193
|
+
close(): void;
|
|
194
|
+
/**
|
|
195
|
+
* Format duration for display
|
|
196
|
+
*/
|
|
197
|
+
private formatDuration;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Create a log manager for a lane
|
|
201
|
+
*/
|
|
202
|
+
export declare function createLogManager(laneRunDir: string, laneName: string, config?: Partial<EnhancedLogConfig>, onParsedMessage?: (msg: ParsedMessage) => void): EnhancedLogManager;
|
|
203
|
+
/**
|
|
204
|
+
* Read and parse JSON log file
|
|
205
|
+
*/
|
|
206
|
+
export declare function readJsonLog(logPath: string): JsonLogEntry[];
|
|
207
|
+
/**
|
|
208
|
+
* Export logs to various formats
|
|
209
|
+
*/
|
|
210
|
+
export declare function exportLogs(laneRunDir: string, format: 'text' | 'json' | 'markdown' | 'html', outputPath?: string): string;
|