@herbcaudill/ralph 0.6.4 → 0.7.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/README.md +13 -100
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +21 -7
- package/dist/cli.js.map +1 -1
- package/dist/components/App.d.ts +2 -1
- package/dist/components/App.d.ts.map +1 -1
- package/dist/components/App.js +5 -1
- package/dist/components/App.js.map +1 -1
- package/dist/components/InitRalph.js +5 -5
- package/dist/components/InitRalph.js.map +1 -1
- package/dist/components/IterationRunner.d.ts +1 -1
- package/dist/components/IterationRunner.d.ts.map +1 -1
- package/dist/components/IterationRunner.js +212 -56
- package/dist/components/IterationRunner.js.map +1 -1
- package/dist/components/IterationRunner.test.js +2 -2
- package/dist/components/IterationRunner.test.js.map +1 -1
- package/dist/components/JsonOutput.d.ts +14 -0
- package/dist/components/JsonOutput.d.ts.map +1 -0
- package/dist/components/JsonOutput.js +246 -0
- package/dist/components/JsonOutput.js.map +1 -0
- package/dist/components/ProgressBar.d.ts +7 -5
- package/dist/components/ProgressBar.d.ts.map +1 -1
- package/dist/components/ProgressBar.js +7 -5
- package/dist/components/ProgressBar.js.map +1 -1
- package/dist/components/ProgressBar.test.js +24 -11
- package/dist/components/ProgressBar.test.js.map +1 -1
- package/dist/lib/MessageQueue.d.ts +2 -0
- package/dist/lib/MessageQueue.d.ts.map +1 -1
- package/dist/lib/MessageQueue.js +35 -2
- package/dist/lib/MessageQueue.js.map +1 -1
- package/dist/lib/MessageQueue.test.js +146 -0
- package/dist/lib/MessageQueue.test.js.map +1 -1
- package/dist/lib/StdinCommandHandler.d.ts +42 -0
- package/dist/lib/StdinCommandHandler.d.ts.map +1 -0
- package/dist/lib/StdinCommandHandler.js +102 -0
- package/dist/lib/StdinCommandHandler.js.map +1 -0
- package/dist/lib/StdinCommandHandler.test.d.ts +2 -0
- package/dist/lib/StdinCommandHandler.test.d.ts.map +1 -0
- package/dist/lib/StdinCommandHandler.test.js +93 -0
- package/dist/lib/StdinCommandHandler.test.js.map +1 -0
- package/dist/lib/debug.d.ts +18 -0
- package/dist/lib/debug.d.ts.map +1 -0
- package/dist/lib/debug.js +44 -0
- package/dist/lib/debug.js.map +1 -0
- package/dist/lib/formatContentBlock.js +1 -1
- package/dist/lib/formatContentBlock.js.map +1 -1
- package/dist/lib/getNextLogFile.d.ts +12 -0
- package/dist/lib/getNextLogFile.d.ts.map +1 -0
- package/dist/lib/getNextLogFile.js +52 -0
- package/dist/lib/getNextLogFile.js.map +1 -0
- package/dist/lib/getNextLogFile.test.d.ts +2 -0
- package/dist/lib/getNextLogFile.test.d.ts.map +1 -0
- package/dist/lib/getNextLogFile.test.js +65 -0
- package/dist/lib/getNextLogFile.test.js.map +1 -0
- package/dist/lib/getOpenIssueCount.d.ts +11 -0
- package/dist/lib/getOpenIssueCount.d.ts.map +1 -0
- package/dist/lib/getOpenIssueCount.js +31 -0
- package/dist/lib/getOpenIssueCount.js.map +1 -0
- package/dist/lib/getOpenIssueCount.test.d.ts +2 -0
- package/dist/lib/getOpenIssueCount.test.d.ts.map +1 -0
- package/dist/lib/getOpenIssueCount.test.js +65 -0
- package/dist/lib/getOpenIssueCount.test.js.map +1 -0
- package/dist/lib/getProgress.d.ts +22 -6
- package/dist/lib/getProgress.d.ts.map +1 -1
- package/dist/lib/getProgress.js +69 -23
- package/dist/lib/getProgress.js.map +1 -1
- package/dist/lib/getProgress.test.js +68 -34
- package/dist/lib/getProgress.test.js.map +1 -1
- package/package.json +1 -1
- package/templates/prompt-beads.md +27 -25
- package/dist/lib/cleanupAllWorktrees.d.ts +0 -5
- package/dist/lib/cleanupAllWorktrees.d.ts.map +0 -1
- package/dist/lib/cleanupAllWorktrees.js +0 -23
- package/dist/lib/cleanupAllWorktrees.js.map +0 -1
- package/dist/lib/cleanupWorktree.d.ts +0 -6
- package/dist/lib/cleanupWorktree.d.ts.map +0 -1
- package/dist/lib/cleanupWorktree.js +0 -33
- package/dist/lib/cleanupWorktree.js.map +0 -1
- package/dist/lib/copyRalphFilesFromWorktree.d.ts +0 -5
- package/dist/lib/copyRalphFilesFromWorktree.d.ts.map +0 -1
- package/dist/lib/copyRalphFilesFromWorktree.js +0 -19
- package/dist/lib/copyRalphFilesFromWorktree.js.map +0 -1
- package/dist/lib/copyRalphFilesToWorktree.d.ts +0 -5
- package/dist/lib/copyRalphFilesToWorktree.d.ts.map +0 -1
- package/dist/lib/copyRalphFilesToWorktree.js +0 -21
- package/dist/lib/copyRalphFilesToWorktree.js.map +0 -1
- package/dist/lib/createWorktree.d.ts +0 -6
- package/dist/lib/createWorktree.d.ts.map +0 -1
- package/dist/lib/createWorktree.js +0 -33
- package/dist/lib/createWorktree.js.map +0 -1
- package/dist/lib/getGitRoot.d.ts +0 -5
- package/dist/lib/getGitRoot.d.ts.map +0 -1
- package/dist/lib/getGitRoot.js +0 -18
- package/dist/lib/getGitRoot.js.map +0 -1
- package/dist/lib/installDependencies.d.ts +0 -5
- package/dist/lib/installDependencies.d.ts.map +0 -1
- package/dist/lib/installDependencies.js +0 -23
- package/dist/lib/installDependencies.js.map +0 -1
- package/dist/lib/installDependencies.test.d.ts +0 -2
- package/dist/lib/installDependencies.test.d.ts.map +0 -1
- package/dist/lib/installDependencies.test.js +0 -37
- package/dist/lib/installDependencies.test.js.map +0 -1
- package/dist/lib/mergeWorktreeToMain.d.ts +0 -6
- package/dist/lib/mergeWorktreeToMain.d.ts.map +0 -1
- package/dist/lib/mergeWorktreeToMain.js +0 -54
- package/dist/lib/mergeWorktreeToMain.js.map +0 -1
- package/dist/lib/outputState.d.ts +0 -5
- package/dist/lib/outputState.d.ts.map +0 -1
- package/dist/lib/outputState.js +0 -6
- package/dist/lib/outputState.js.map +0 -1
- package/dist/lib/popStash.d.ts +0 -5
- package/dist/lib/popStash.d.ts.map +0 -1
- package/dist/lib/popStash.js +0 -17
- package/dist/lib/popStash.js.map +0 -1
- package/dist/lib/processEvent.d.ts +0 -2
- package/dist/lib/processEvent.d.ts.map +0 -1
- package/dist/lib/processEvent.js +0 -100
- package/dist/lib/processEvent.js.map +0 -1
- package/dist/lib/replayLog.d.ts +0 -2
- package/dist/lib/replayLog.d.ts.map +0 -1
- package/dist/lib/replayLog.js +0 -35
- package/dist/lib/replayLog.js.map +0 -1
- package/dist/lib/resolveConflicts.d.ts +0 -6
- package/dist/lib/resolveConflicts.d.ts.map +0 -1
- package/dist/lib/resolveConflicts.js +0 -76
- package/dist/lib/resolveConflicts.js.map +0 -1
- package/dist/lib/runIteration.d.ts +0 -2
- package/dist/lib/runIteration.d.ts.map +0 -1
- package/dist/lib/runIteration.js +0 -91
- package/dist/lib/runIteration.js.map +0 -1
- package/dist/lib/showToolUse.d.ts +0 -2
- package/dist/lib/showToolUse.d.ts.map +0 -1
- package/dist/lib/showToolUse.js +0 -17
- package/dist/lib/showToolUse.js.map +0 -1
- package/dist/lib/signalHandler.d.ts +0 -3
- package/dist/lib/signalHandler.d.ts.map +0 -1
- package/dist/lib/signalHandler.js +0 -23
- package/dist/lib/signalHandler.js.map +0 -1
- package/dist/lib/stashChanges.d.ts +0 -6
- package/dist/lib/stashChanges.d.ts.map +0 -1
- package/dist/lib/stashChanges.js +0 -27
- package/dist/lib/stashChanges.js.map +0 -1
- package/dist/lib/textFormatting.d.ts +0 -4
- package/dist/lib/textFormatting.d.ts.map +0 -1
- package/dist/lib/textFormatting.js +0 -94
- package/dist/lib/textFormatting.js.map +0 -1
- package/dist/lib/types.d.ts +0 -13
- package/dist/lib/types.d.ts.map +0 -1
- package/dist/lib/types.js +0 -15
- package/dist/lib/types.js.map +0 -1
- package/dist/lib/worktree.d.ts +0 -43
- package/dist/lib/worktree.d.ts.map +0 -1
- package/dist/lib/worktree.js +0 -210
- package/dist/lib/worktree.js.map +0 -1
- package/dist/ui/EventProcessor.d.ts +0 -11
- package/dist/ui/EventProcessor.d.ts.map +0 -1
- package/dist/ui/EventProcessor.js +0 -95
- package/dist/ui/EventProcessor.js.map +0 -1
- package/dist/ui/IterationApp.d.ts +0 -10
- package/dist/ui/IterationApp.d.ts.map +0 -1
- package/dist/ui/IterationApp.js +0 -21
- package/dist/ui/IterationApp.js.map +0 -1
- package/dist/ui/IterationUI.d.ts +0 -13
- package/dist/ui/IterationUI.d.ts.map +0 -1
- package/dist/ui/IterationUI.js +0 -19
- package/dist/ui/IterationUI.js.map +0 -1
- package/dist/ui/TextDisplay.d.ts +0 -7
- package/dist/ui/TextDisplay.d.ts.map +0 -1
- package/dist/ui/TextDisplay.js +0 -41
- package/dist/ui/TextDisplay.js.map +0 -1
- package/dist/ui/ToolUseDisplay.d.ts +0 -10
- package/dist/ui/ToolUseDisplay.d.ts.map +0 -1
- package/dist/ui/ToolUseDisplay.js +0 -10
- package/dist/ui/ToolUseDisplay.js.map +0 -1
- /package/templates/{prompt.md → prompt-todos.md} +0 -0
|
@@ -60,6 +60,21 @@ describe("MessageQueue", () => {
|
|
|
60
60
|
const result = await promise;
|
|
61
61
|
expect(result.done).toBe(true);
|
|
62
62
|
});
|
|
63
|
+
it("should be idempotent when close() is called multiple times", async () => {
|
|
64
|
+
const queue = new MessageQueue();
|
|
65
|
+
const msg = createUserMessage("test");
|
|
66
|
+
queue.push(msg);
|
|
67
|
+
const iterator = queue[Symbol.asyncIterator]();
|
|
68
|
+
const result1 = await iterator.next();
|
|
69
|
+
expect(result1.value).toEqual(msg);
|
|
70
|
+
// Close multiple times - should not throw or cause issues
|
|
71
|
+
queue.close();
|
|
72
|
+
queue.close();
|
|
73
|
+
queue.close();
|
|
74
|
+
// Iterator should still work correctly
|
|
75
|
+
const result2 = await iterator.next();
|
|
76
|
+
expect(result2.done).toBe(true);
|
|
77
|
+
});
|
|
63
78
|
});
|
|
64
79
|
describe("createUserMessage", () => {
|
|
65
80
|
it("should create a valid SDK user message", () => {
|
|
@@ -75,4 +90,135 @@ describe("createUserMessage", () => {
|
|
|
75
90
|
});
|
|
76
91
|
});
|
|
77
92
|
});
|
|
93
|
+
describe("MessageQueue hang scenarios", () => {
|
|
94
|
+
/**
|
|
95
|
+
* This test documents the hang behavior that can occur when:
|
|
96
|
+
* 1. The SDK iterates the MessageQueue via streamInput()
|
|
97
|
+
* 2. The MessageQueue is empty and not closed
|
|
98
|
+
* 3. The SDK calls next() expecting more messages
|
|
99
|
+
*
|
|
100
|
+
* In this case, next() returns a Promise that never resolves
|
|
101
|
+
* until close() is called. If close() is only called after the
|
|
102
|
+
* SDK iteration completes, we have a deadlock.
|
|
103
|
+
*/
|
|
104
|
+
it("should hang if next() is called on empty unclosed queue", async () => {
|
|
105
|
+
const queue = new MessageQueue();
|
|
106
|
+
const msg = createUserMessage("test");
|
|
107
|
+
queue.push(msg);
|
|
108
|
+
const iterator = queue[Symbol.asyncIterator]();
|
|
109
|
+
// First next() returns the queued message
|
|
110
|
+
const result1 = await iterator.next();
|
|
111
|
+
expect(result1.done).toBe(false);
|
|
112
|
+
expect(result1.value).toEqual(msg);
|
|
113
|
+
// Second next() on empty queue - this will hang until close() is called
|
|
114
|
+
// Use a timeout to demonstrate the hang behavior
|
|
115
|
+
const nextPromise = iterator.next();
|
|
116
|
+
let resolved = false;
|
|
117
|
+
nextPromise.then(() => {
|
|
118
|
+
resolved = true;
|
|
119
|
+
});
|
|
120
|
+
// Wait a bit - the promise should NOT resolve
|
|
121
|
+
await new Promise(resolve => setTimeout(resolve, 50));
|
|
122
|
+
expect(resolved).toBe(false);
|
|
123
|
+
// Now close the queue - this should resolve the pending promise
|
|
124
|
+
queue.close();
|
|
125
|
+
// Wait for the promise to resolve
|
|
126
|
+
const result2 = await nextPromise;
|
|
127
|
+
expect(result2.done).toBe(true);
|
|
128
|
+
expect(resolved).toBe(true);
|
|
129
|
+
});
|
|
130
|
+
it("should allow timeout-based iteration completion", async () => {
|
|
131
|
+
const queue = new MessageQueue();
|
|
132
|
+
const msg = createUserMessage("test");
|
|
133
|
+
queue.push(msg);
|
|
134
|
+
// Use Promise.race to implement timeout behavior
|
|
135
|
+
const iterator = queue[Symbol.asyncIterator]();
|
|
136
|
+
const result1 = await iterator.next();
|
|
137
|
+
expect(result1.value).toEqual(msg);
|
|
138
|
+
// Create a "timeout" mechanism
|
|
139
|
+
const timeoutPromise = new Promise(resolve => setTimeout(() => resolve({ done: true, value: undefined }), 100));
|
|
140
|
+
// Race between next message and timeout
|
|
141
|
+
const result = await Promise.race([iterator.next(), timeoutPromise]);
|
|
142
|
+
expect(result.done).toBe(true);
|
|
143
|
+
// Clean up
|
|
144
|
+
queue.close();
|
|
145
|
+
});
|
|
146
|
+
it("should close queue when abort signal is triggered", async () => {
|
|
147
|
+
const queue = new MessageQueue();
|
|
148
|
+
const msg = createUserMessage("test");
|
|
149
|
+
queue.push(msg);
|
|
150
|
+
const abortController = new AbortController();
|
|
151
|
+
// Set up abort listener to close queue
|
|
152
|
+
abortController.signal.addEventListener("abort", () => {
|
|
153
|
+
queue.close();
|
|
154
|
+
});
|
|
155
|
+
const iterator = queue[Symbol.asyncIterator]();
|
|
156
|
+
// Get the first message
|
|
157
|
+
const result1 = await iterator.next();
|
|
158
|
+
expect(result1.value).toEqual(msg);
|
|
159
|
+
// Start waiting for next (which would hang)
|
|
160
|
+
const nextPromise = iterator.next();
|
|
161
|
+
let resolved = false;
|
|
162
|
+
nextPromise.then(() => {
|
|
163
|
+
resolved = true;
|
|
164
|
+
});
|
|
165
|
+
// Abort should close the queue and resolve pending iterators
|
|
166
|
+
abortController.abort();
|
|
167
|
+
const result2 = await nextPromise;
|
|
168
|
+
expect(result2.done).toBe(true);
|
|
169
|
+
expect(resolved).toBe(true);
|
|
170
|
+
});
|
|
171
|
+
it("should work with AbortSignal.timeout pattern", async () => {
|
|
172
|
+
const queue = new MessageQueue();
|
|
173
|
+
const msg = createUserMessage("test");
|
|
174
|
+
queue.push(msg);
|
|
175
|
+
// Create an abort signal that times out after 50ms
|
|
176
|
+
const signal = AbortSignal.timeout(50);
|
|
177
|
+
// Set up abort listener to close queue
|
|
178
|
+
signal.addEventListener("abort", () => {
|
|
179
|
+
queue.close();
|
|
180
|
+
});
|
|
181
|
+
const iterator = queue[Symbol.asyncIterator]();
|
|
182
|
+
// Get the first message
|
|
183
|
+
const result1 = await iterator.next();
|
|
184
|
+
expect(result1.value).toEqual(msg);
|
|
185
|
+
// Start waiting for next (which would hang without timeout)
|
|
186
|
+
const result2 = await iterator.next();
|
|
187
|
+
// The timeout should have triggered, closing the queue
|
|
188
|
+
expect(result2.done).toBe(true);
|
|
189
|
+
});
|
|
190
|
+
it("should handle multiple pending resolvers with abort", async () => {
|
|
191
|
+
const queue = new MessageQueue();
|
|
192
|
+
const abortController = new AbortController();
|
|
193
|
+
abortController.signal.addEventListener("abort", () => {
|
|
194
|
+
queue.close();
|
|
195
|
+
});
|
|
196
|
+
const iterator = queue[Symbol.asyncIterator]();
|
|
197
|
+
// Start multiple pending next() calls
|
|
198
|
+
const promise1 = iterator.next();
|
|
199
|
+
const promise2 = iterator.next();
|
|
200
|
+
const promise3 = iterator.next();
|
|
201
|
+
// All should be pending
|
|
202
|
+
let resolved1 = false, resolved2 = false, resolved3 = false;
|
|
203
|
+
promise1.then(() => {
|
|
204
|
+
resolved1 = true;
|
|
205
|
+
});
|
|
206
|
+
promise2.then(() => {
|
|
207
|
+
resolved2 = true;
|
|
208
|
+
});
|
|
209
|
+
promise3.then(() => {
|
|
210
|
+
resolved3 = true;
|
|
211
|
+
});
|
|
212
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
213
|
+
expect(resolved1).toBe(false);
|
|
214
|
+
expect(resolved2).toBe(false);
|
|
215
|
+
expect(resolved3).toBe(false);
|
|
216
|
+
// Abort should resolve all pending promises
|
|
217
|
+
abortController.abort();
|
|
218
|
+
const [result1, result2, result3] = await Promise.all([promise1, promise2, promise3]);
|
|
219
|
+
expect(result1.done).toBe(true);
|
|
220
|
+
expect(result2.done).toBe(true);
|
|
221
|
+
expect(result3.done).toBe(true);
|
|
222
|
+
});
|
|
223
|
+
});
|
|
78
224
|
//# sourceMappingURL=MessageQueue.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageQueue.test.js","sourceRoot":"","sources":["../../src/lib/MessageQueue.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"MessageQueue.test.js","sourceRoot":"","sources":["../../src/lib/MessageQueue.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { MessageQueue } from "./MessageQueue.js";
|
|
2
|
+
/**
|
|
3
|
+
* Stdin command types:
|
|
4
|
+
* - {"type": "message", "text": "..."} - Send a message to Claude
|
|
5
|
+
* - {"type": "stop"} - Request graceful stop after current iteration
|
|
6
|
+
* - {"type": "pause"} - Pause after current iteration completes
|
|
7
|
+
* - {"type": "resume"} - Resume from paused state
|
|
8
|
+
*/
|
|
9
|
+
export type StdinCommand = {
|
|
10
|
+
type: "message";
|
|
11
|
+
text: string;
|
|
12
|
+
} | {
|
|
13
|
+
type: "stop";
|
|
14
|
+
} | {
|
|
15
|
+
type: "pause";
|
|
16
|
+
} | {
|
|
17
|
+
type: "resume";
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Parse a JSON string into a StdinCommand.
|
|
21
|
+
* Returns null if parsing fails or the command is invalid.
|
|
22
|
+
*/
|
|
23
|
+
export declare const parseStdinCommand: (line: string) => StdinCommand | null;
|
|
24
|
+
export type StdinCommandHandlerOptions = {
|
|
25
|
+
messageQueue: MessageQueue | null;
|
|
26
|
+
onStop: () => void;
|
|
27
|
+
onPause?: () => void;
|
|
28
|
+
onResume?: () => void;
|
|
29
|
+
onMessage?: (text: string) => void;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Creates a stdin command handler that reads JSON commands from stdin.
|
|
33
|
+
* Returns a cleanup function to stop reading.
|
|
34
|
+
*
|
|
35
|
+
* Commands:
|
|
36
|
+
* - {"type": "message", "text": "..."} - Send a message to Claude
|
|
37
|
+
* - {"type": "stop"} - Request graceful stop after current iteration
|
|
38
|
+
* - {"type": "pause"} - Pause after current iteration completes
|
|
39
|
+
* - {"type": "resume"} - Resume from paused state
|
|
40
|
+
*/
|
|
41
|
+
export declare const createStdinCommandHandler: (getOptions: () => StdinCommandHandlerOptions) => (() => void);
|
|
42
|
+
//# sourceMappingURL=StdinCommandHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StdinCommandHandler.d.ts","sourceRoot":"","sources":["../../src/lib/StdinCommandHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAqB,MAAM,mBAAmB,CAAA;AAKnE;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GACpB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAA;AAEtB;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,KAAG,YAAY,GAAG,IAsC/D,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAA;IACjC,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,GACpC,YAAY,MAAM,0BAA0B,KAC3C,CAAC,MAAM,IAAI,CAkDb,CAAA"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { createDebugLogger } from "./debug.js";
|
|
2
|
+
import { createUserMessage } from "./MessageQueue.js";
|
|
3
|
+
import { createInterface } from "readline";
|
|
4
|
+
const log = createDebugLogger("stdin-command");
|
|
5
|
+
/**
|
|
6
|
+
* Parse a JSON string into a StdinCommand.
|
|
7
|
+
* Returns null if parsing fails or the command is invalid.
|
|
8
|
+
*/
|
|
9
|
+
export const parseStdinCommand = (line) => {
|
|
10
|
+
const trimmed = line.trim();
|
|
11
|
+
if (!trimmed)
|
|
12
|
+
return null;
|
|
13
|
+
try {
|
|
14
|
+
const parsed = JSON.parse(trimmed);
|
|
15
|
+
if (typeof parsed !== "object" || parsed === null) {
|
|
16
|
+
log(`Invalid command - not an object: ${trimmed}`);
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
if (parsed.type === "message") {
|
|
20
|
+
if (typeof parsed.text !== "string") {
|
|
21
|
+
log(`Invalid message command - missing or invalid text: ${trimmed}`);
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
return { type: "message", text: parsed.text };
|
|
25
|
+
}
|
|
26
|
+
if (parsed.type === "stop") {
|
|
27
|
+
return { type: "stop" };
|
|
28
|
+
}
|
|
29
|
+
if (parsed.type === "pause") {
|
|
30
|
+
return { type: "pause" };
|
|
31
|
+
}
|
|
32
|
+
if (parsed.type === "resume") {
|
|
33
|
+
return { type: "resume" };
|
|
34
|
+
}
|
|
35
|
+
log(`Unknown command type: ${parsed.type}`);
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
log(`Failed to parse command: ${err instanceof Error ? err.message : String(err)}`);
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Creates a stdin command handler that reads JSON commands from stdin.
|
|
45
|
+
* Returns a cleanup function to stop reading.
|
|
46
|
+
*
|
|
47
|
+
* Commands:
|
|
48
|
+
* - {"type": "message", "text": "..."} - Send a message to Claude
|
|
49
|
+
* - {"type": "stop"} - Request graceful stop after current iteration
|
|
50
|
+
* - {"type": "pause"} - Pause after current iteration completes
|
|
51
|
+
* - {"type": "resume"} - Resume from paused state
|
|
52
|
+
*/
|
|
53
|
+
export const createStdinCommandHandler = (getOptions) => {
|
|
54
|
+
// Don't set up stdin handler if stdin is a TTY (interactive mode handles input differently)
|
|
55
|
+
// This handler is for piped input in JSON mode
|
|
56
|
+
if (process.stdin.isTTY) {
|
|
57
|
+
log(`stdin is TTY - skipping stdin command handler`);
|
|
58
|
+
return () => { };
|
|
59
|
+
}
|
|
60
|
+
log(`Setting up stdin command handler`);
|
|
61
|
+
const rl = createInterface({
|
|
62
|
+
input: process.stdin,
|
|
63
|
+
terminal: false,
|
|
64
|
+
});
|
|
65
|
+
const lineHandler = (line) => {
|
|
66
|
+
const command = parseStdinCommand(line);
|
|
67
|
+
if (!command)
|
|
68
|
+
return;
|
|
69
|
+
const options = getOptions();
|
|
70
|
+
log(`Received command: ${command.type}`);
|
|
71
|
+
if (command.type === "message") {
|
|
72
|
+
if (options.messageQueue) {
|
|
73
|
+
const userMessage = createUserMessage(command.text);
|
|
74
|
+
options.messageQueue.push(userMessage);
|
|
75
|
+
log(`Pushed message to queue: ${command.text.slice(0, 50)}...`);
|
|
76
|
+
options.onMessage?.(command.text);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
log(`Cannot send message - no active message queue`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else if (command.type === "stop") {
|
|
83
|
+
log(`Stop command received`);
|
|
84
|
+
options.onStop();
|
|
85
|
+
}
|
|
86
|
+
else if (command.type === "pause") {
|
|
87
|
+
log(`Pause command received`);
|
|
88
|
+
options.onPause?.();
|
|
89
|
+
}
|
|
90
|
+
else if (command.type === "resume") {
|
|
91
|
+
log(`Resume command received`);
|
|
92
|
+
options.onResume?.();
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
rl.on("line", lineHandler);
|
|
96
|
+
return () => {
|
|
97
|
+
log(`Cleaning up stdin command handler`);
|
|
98
|
+
rl.off("line", lineHandler);
|
|
99
|
+
rl.close();
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=StdinCommandHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StdinCommandHandler.js","sourceRoot":"","sources":["../../src/lib/StdinCommandHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StdinCommandHandler.test.d.ts","sourceRoot":"","sources":["../../src/lib/StdinCommandHandler.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { parseStdinCommand } from "./StdinCommandHandler.js";
|
|
3
|
+
describe("parseStdinCommand", () => {
|
|
4
|
+
describe("message command", () => {
|
|
5
|
+
it("parses valid message command", () => {
|
|
6
|
+
const result = parseStdinCommand('{"type": "message", "text": "hello world"}');
|
|
7
|
+
expect(result).toEqual({ type: "message", text: "hello world" });
|
|
8
|
+
});
|
|
9
|
+
it("handles message with special characters", () => {
|
|
10
|
+
const result = parseStdinCommand('{"type": "message", "text": "line1\\nline2"}');
|
|
11
|
+
expect(result).toEqual({ type: "message", text: "line1\nline2" });
|
|
12
|
+
});
|
|
13
|
+
it("handles empty message text", () => {
|
|
14
|
+
const result = parseStdinCommand('{"type": "message", "text": ""}');
|
|
15
|
+
expect(result).toEqual({ type: "message", text: "" });
|
|
16
|
+
});
|
|
17
|
+
it("returns null for message without text field", () => {
|
|
18
|
+
const result = parseStdinCommand('{"type": "message"}');
|
|
19
|
+
expect(result).toBeNull();
|
|
20
|
+
});
|
|
21
|
+
it("returns null for message with non-string text", () => {
|
|
22
|
+
const result = parseStdinCommand('{"type": "message", "text": 123}');
|
|
23
|
+
expect(result).toBeNull();
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
describe("stop command", () => {
|
|
27
|
+
it("parses valid stop command", () => {
|
|
28
|
+
const result = parseStdinCommand('{"type": "stop"}');
|
|
29
|
+
expect(result).toEqual({ type: "stop" });
|
|
30
|
+
});
|
|
31
|
+
it("ignores extra fields on stop command", () => {
|
|
32
|
+
const result = parseStdinCommand('{"type": "stop", "extra": "ignored"}');
|
|
33
|
+
expect(result).toEqual({ type: "stop" });
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe("pause command", () => {
|
|
37
|
+
it("parses valid pause command", () => {
|
|
38
|
+
const result = parseStdinCommand('{"type": "pause"}');
|
|
39
|
+
expect(result).toEqual({ type: "pause" });
|
|
40
|
+
});
|
|
41
|
+
it("ignores extra fields on pause command", () => {
|
|
42
|
+
const result = parseStdinCommand('{"type": "pause", "extra": "ignored"}');
|
|
43
|
+
expect(result).toEqual({ type: "pause" });
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
describe("resume command", () => {
|
|
47
|
+
it("parses valid resume command", () => {
|
|
48
|
+
const result = parseStdinCommand('{"type": "resume"}');
|
|
49
|
+
expect(result).toEqual({ type: "resume" });
|
|
50
|
+
});
|
|
51
|
+
it("ignores extra fields on resume command", () => {
|
|
52
|
+
const result = parseStdinCommand('{"type": "resume", "extra": "ignored"}');
|
|
53
|
+
expect(result).toEqual({ type: "resume" });
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe("invalid input", () => {
|
|
57
|
+
it("returns null for empty string", () => {
|
|
58
|
+
const result = parseStdinCommand("");
|
|
59
|
+
expect(result).toBeNull();
|
|
60
|
+
});
|
|
61
|
+
it("returns null for whitespace only", () => {
|
|
62
|
+
const result = parseStdinCommand(" \n\t ");
|
|
63
|
+
expect(result).toBeNull();
|
|
64
|
+
});
|
|
65
|
+
it("returns null for invalid JSON", () => {
|
|
66
|
+
const result = parseStdinCommand("not json");
|
|
67
|
+
expect(result).toBeNull();
|
|
68
|
+
});
|
|
69
|
+
it("returns null for array instead of object", () => {
|
|
70
|
+
const result = parseStdinCommand('["type", "message"]');
|
|
71
|
+
expect(result).toBeNull();
|
|
72
|
+
});
|
|
73
|
+
it("returns null for null", () => {
|
|
74
|
+
const result = parseStdinCommand("null");
|
|
75
|
+
expect(result).toBeNull();
|
|
76
|
+
});
|
|
77
|
+
it("returns null for primitive value", () => {
|
|
78
|
+
const result = parseStdinCommand("123");
|
|
79
|
+
expect(result).toBeNull();
|
|
80
|
+
});
|
|
81
|
+
it("returns null for unknown command type", () => {
|
|
82
|
+
const result = parseStdinCommand('{"type": "unknown"}');
|
|
83
|
+
expect(result).toBeNull();
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
describe("whitespace handling", () => {
|
|
87
|
+
it("trims leading/trailing whitespace", () => {
|
|
88
|
+
const result = parseStdinCommand(' {"type": "stop"} ');
|
|
89
|
+
expect(result).toEqual({ type: "stop" });
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
//# sourceMappingURL=StdinCommandHandler.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StdinCommandHandler.test.js","sourceRoot":"","sources":["../../src/lib/StdinCommandHandler.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAE5D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,MAAM,GAAG,iBAAiB,CAAC,4CAA4C,CAAC,CAAA;YAC9E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAA;QAClE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,MAAM,GAAG,iBAAiB,CAAC,8CAA8C,CAAC,CAAA;YAChF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAA;QACnE,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,iCAAiC,CAAC,CAAA;YACnE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;QACvD,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,MAAM,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,CAAA;YACvD,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,MAAM,GAAG,iBAAiB,CAAC,kCAAkC,CAAC,CAAA;YACpE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,MAAM,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,CAAA;YACpD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,MAAM,GAAG,iBAAiB,CAAC,sCAAsC,CAAC,CAAA;YACxE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACpC,MAAM,MAAM,GAAG,iBAAiB,CAAC,mBAAmB,CAAC,CAAA;YACrD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,MAAM,GAAG,iBAAiB,CAAC,uCAAuC,CAAC,CAAA;YACzE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,MAAM,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,CAAA;YACtD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,MAAM,MAAM,GAAG,iBAAiB,CAAC,wCAAwC,CAAC,CAAA;YAC1E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAA;YACpC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,MAAM,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAA;YAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;YACvC,MAAM,MAAM,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAA;YAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;YAClD,MAAM,MAAM,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,CAAA;YACvD,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;YAC/B,MAAM,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAA;YACxC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,MAAM,MAAM,GAAG,iBAAiB,CAAC,qBAAqB,CAAC,CAAA;YACvD,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;QAC3B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,MAAM,MAAM,GAAG,iBAAiB,CAAC,sBAAsB,CAAC,CAAA;YACxD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAC1C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug logging utility controlled by RALPH_DEBUG environment variable.
|
|
3
|
+
*
|
|
4
|
+
* Set RALPH_DEBUG=1 or RALPH_DEBUG=true to enable debug logging.
|
|
5
|
+
* Set RALPH_DEBUG=messagequeue to enable only MessageQueue logging.
|
|
6
|
+
* Set RALPH_DEBUG=all or RALPH_DEBUG=* to enable all debug logging.
|
|
7
|
+
*/
|
|
8
|
+
type DebugNamespace = "messagequeue" | "iteration" | "sdk" | "stdin-command";
|
|
9
|
+
/**
|
|
10
|
+
* Log a debug message if debugging is enabled for the given namespace.
|
|
11
|
+
*/
|
|
12
|
+
export declare const debug: (namespace: DebugNamespace, message: string, ...args: unknown[]) => void;
|
|
13
|
+
/**
|
|
14
|
+
* Create a namespaced debug logger.
|
|
15
|
+
*/
|
|
16
|
+
export declare const createDebugLogger: (namespace: DebugNamespace) => (message: string, ...args: unknown[]) => void;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=debug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/lib/debug.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,KAAK,cAAc,GAAG,cAAc,GAAG,WAAW,GAAG,KAAK,GAAG,eAAe,CAAA;AA2B5E;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,WAAW,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,OAAO,EAAE,KAAG,IAOtF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB,GAAI,WAAW,cAAc,MACjD,SAAS,MAAM,EAAE,GAAG,MAAM,OAAO,EAAE,SAC5C,CAAA"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Debug logging utility controlled by RALPH_DEBUG environment variable.
|
|
3
|
+
*
|
|
4
|
+
* Set RALPH_DEBUG=1 or RALPH_DEBUG=true to enable debug logging.
|
|
5
|
+
* Set RALPH_DEBUG=messagequeue to enable only MessageQueue logging.
|
|
6
|
+
* Set RALPH_DEBUG=all or RALPH_DEBUG=* to enable all debug logging.
|
|
7
|
+
*/
|
|
8
|
+
const isDebugEnabled = (namespace) => {
|
|
9
|
+
const debugEnv = process.env.RALPH_DEBUG;
|
|
10
|
+
if (!debugEnv)
|
|
11
|
+
return false;
|
|
12
|
+
const value = debugEnv.toLowerCase();
|
|
13
|
+
// Enable all debugging
|
|
14
|
+
if (value === "1" || value === "true" || value === "all" || value === "*") {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
// Enable specific namespace
|
|
18
|
+
if (namespace && value === namespace.toLowerCase()) {
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
// Comma-separated list of namespaces
|
|
22
|
+
if (namespace && value.includes(",")) {
|
|
23
|
+
return value.split(",").some(ns => ns.trim().toLowerCase() === namespace.toLowerCase());
|
|
24
|
+
}
|
|
25
|
+
return false;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Log a debug message if debugging is enabled for the given namespace.
|
|
29
|
+
*/
|
|
30
|
+
export const debug = (namespace, message, ...args) => {
|
|
31
|
+
if (isDebugEnabled(namespace)) {
|
|
32
|
+
const timestamp = new Date().toISOString();
|
|
33
|
+
const prefix = `[${timestamp}] [RALPH:${namespace.toUpperCase()}]`;
|
|
34
|
+
// eslint-disable-next-line no-console
|
|
35
|
+
console.error(prefix, message, ...args);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Create a namespaced debug logger.
|
|
40
|
+
*/
|
|
41
|
+
export const createDebugLogger = (namespace) => {
|
|
42
|
+
return (message, ...args) => debug(namespace, message, ...args);
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=debug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/lib/debug.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,cAAc,GAAG,CAAC,SAA0B,EAAW,EAAE;IAC7D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;IAExC,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAA;IAE3B,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAA;IAEpC,uBAAuB;IACvB,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QAC1E,OAAO,IAAI,CAAA;IACb,CAAC;IAED,4BAA4B;IAC5B,IAAI,SAAS,IAAI,KAAK,KAAK,SAAS,CAAC,WAAW,EAAE,EAAE,CAAC;QACnD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,qCAAqC;IACrC,IAAI,SAAS,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC,CAAA;IACzF,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,SAAyB,EAAE,OAAe,EAAE,GAAG,IAAe,EAAQ,EAAE;IAC5F,IAAI,cAAc,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAC1C,MAAM,MAAM,GAAG,IAAI,SAAS,YAAY,SAAS,CAAC,WAAW,EAAE,GAAG,CAAA;QAClE,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;IACzC,CAAC;AACH,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAyB,EAAE,EAAE;IAC7D,OAAO,CAAC,OAAe,EAAE,GAAG,IAAe,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;AACpF,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatContentBlock.js","sourceRoot":"","sources":["../../src/lib/formatContentBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB;;GAEG;AACH,MAAM,UAAU,GAAG,CAAC,OAAe,EAAU,EAAE;IAC7C,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,IAAI,MAAM,GAAG,KAAK,CAAA;IAElB,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACjD,MAAM,GAAG,CAAC,MAAM,CAAA;YAChB,CAAC,IAAI,CAAC,CAAA;QACR,CAAC;aAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9B,MAAM,GAAG,CAAC,MAAM,CAAA;YAChB,CAAC,EAAE,CAAA;QACL,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YAErB,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC3B,CAAC;iBAAM,IAAI,MAAM,EAAE,CAAC;gBAClB,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACzB,CAAC;YAED,MAAM,IAAI,IAAI,CAAA;YACd,CAAC,EAAE,CAAA;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,GAAY,EAAU,EAAE;IAC3D,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,KAAK,aAAa,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAA;IAC/C,CAAC;IACD,OAAO,KAAK,aAAa,EAAE,CAAA;AAC7B,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAU,EAAE;IACpD,OAAO,KAAK,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"formatContentBlock.js","sourceRoot":"","sources":["../../src/lib/formatContentBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB;;GAEG;AACH,MAAM,UAAU,GAAG,CAAC,OAAe,EAAU,EAAE;IAC7C,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,MAAM,GAAG,KAAK,CAAA;IAClB,IAAI,MAAM,GAAG,KAAK,CAAA;IAElB,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACjD,MAAM,GAAG,CAAC,MAAM,CAAA;YAChB,CAAC,IAAI,CAAC,CAAA;QACR,CAAC;aAAM,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YAC9B,MAAM,GAAG,CAAC,MAAM,CAAA;YAChB,CAAC,EAAE,CAAA;QACL,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YAErB,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YAC3B,CAAC;iBAAM,IAAI,MAAM,EAAE,CAAC;gBAClB,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACzB,CAAC;YAED,MAAM,IAAI,IAAI,CAAA;YACd,CAAC,EAAE,CAAA;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,aAAa,GAAG,CAAC,IAAY,EAAE,GAAY,EAAU,EAAE;IAC3D,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtC,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,KAAK,aAAa,IAAI,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAA;IAC/C,CAAC;IACD,OAAO,KAAK,aAAa,EAAE,CAAA;AAC7B,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,iBAAiB,GAAG,CAAC,OAAe,EAAU,EAAE;IACpD,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAC7B,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAmB,EAAY,EAAE;IAClE,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAC3C,gEAAgE;QAChE,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAA;IAC3C,CAAC;IAED,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;AAC/C,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,SAAiB,EAAU,EAAE;IACjE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,SAAS,MAAM,CAAC,CAAA;AACtD,CAAC,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get the path to the next sequential log file in the .ralph directory.
|
|
3
|
+
* Files are named events-1.jsonl, events-2.jsonl, etc.
|
|
4
|
+
* Returns the path for the next available number (highest existing + 1).
|
|
5
|
+
*/
|
|
6
|
+
export declare const getNextLogFile: () => string;
|
|
7
|
+
/**
|
|
8
|
+
* Get the path to the most recent (highest numbered) log file in the .ralph directory.
|
|
9
|
+
* Returns undefined if no event logs exist.
|
|
10
|
+
*/
|
|
11
|
+
export declare const getLatestLogFile: () => string | undefined;
|
|
12
|
+
//# sourceMappingURL=getNextLogFile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getNextLogFile.d.ts","sourceRoot":"","sources":["../../src/lib/getNextLogFile.ts"],"names":[],"mappings":"AAgCA;;;;GAIG;AACH,eAAO,MAAM,cAAc,QAAO,MAUjC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAO,MAAM,GAAG,SAQ5C,CAAA"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { readdirSync, existsSync, mkdirSync } from "fs";
|
|
2
|
+
import { join } from "path";
|
|
3
|
+
const EVENT_LOG_PATTERN = /^events-(\d+)\.jsonl$/;
|
|
4
|
+
/**
|
|
5
|
+
* Find the highest numbered event log file that exists in the .ralph directory.
|
|
6
|
+
* Returns 0 if no event logs exist.
|
|
7
|
+
*/
|
|
8
|
+
const findMaxLogNumber = () => {
|
|
9
|
+
const ralphDir = join(process.cwd(), ".ralph");
|
|
10
|
+
if (!existsSync(ralphDir)) {
|
|
11
|
+
return 0;
|
|
12
|
+
}
|
|
13
|
+
const files = readdirSync(ralphDir);
|
|
14
|
+
let maxNumber = 0;
|
|
15
|
+
for (const file of files) {
|
|
16
|
+
const match = file.match(EVENT_LOG_PATTERN);
|
|
17
|
+
if (match) {
|
|
18
|
+
const num = parseInt(match[1], 10);
|
|
19
|
+
if (num > maxNumber) {
|
|
20
|
+
maxNumber = num;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return maxNumber;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Get the path to the next sequential log file in the .ralph directory.
|
|
28
|
+
* Files are named events-1.jsonl, events-2.jsonl, etc.
|
|
29
|
+
* Returns the path for the next available number (highest existing + 1).
|
|
30
|
+
*/
|
|
31
|
+
export const getNextLogFile = () => {
|
|
32
|
+
const ralphDir = join(process.cwd(), ".ralph");
|
|
33
|
+
// Ensure .ralph directory exists
|
|
34
|
+
if (!existsSync(ralphDir)) {
|
|
35
|
+
mkdirSync(ralphDir, { recursive: true });
|
|
36
|
+
}
|
|
37
|
+
const maxNumber = findMaxLogNumber();
|
|
38
|
+
return join(ralphDir, `events-${maxNumber + 1}.jsonl`);
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Get the path to the most recent (highest numbered) log file in the .ralph directory.
|
|
42
|
+
* Returns undefined if no event logs exist.
|
|
43
|
+
*/
|
|
44
|
+
export const getLatestLogFile = () => {
|
|
45
|
+
const maxNumber = findMaxLogNumber();
|
|
46
|
+
if (maxNumber === 0) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
const ralphDir = join(process.cwd(), ".ralph");
|
|
50
|
+
return join(ralphDir, `events-${maxNumber}.jsonl`);
|
|
51
|
+
};
|
|
52
|
+
//# sourceMappingURL=getNextLogFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getNextLogFile.js","sourceRoot":"","sources":["../../src/lib/getNextLogFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,MAAM,iBAAiB,GAAG,uBAAuB,CAAA;AAEjD;;;GAGG;AACH,MAAM,gBAAgB,GAAG,GAAW,EAAE;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;IAE9C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAA;IACnC,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA;QAC3C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;YAClC,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC;gBACpB,SAAS,GAAG,GAAG,CAAA;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAA;AAClB,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAW,EAAE;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;IAE9C,iCAAiC;IACjC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1C,CAAC;IAED,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAA;IACpC,OAAO,IAAI,CAAC,QAAQ,EAAE,UAAU,SAAS,GAAG,CAAC,QAAQ,CAAC,CAAA;AACxD,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAuB,EAAE;IACvD,MAAM,SAAS,GAAG,gBAAgB,EAAE,CAAA;IACpC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;IAC9C,OAAO,IAAI,CAAC,QAAQ,EAAE,UAAU,SAAS,QAAQ,CAAC,CAAA;AACpD,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getNextLogFile.test.d.ts","sourceRoot":"","sources":["../../src/lib/getNextLogFile.test.ts"],"names":[],"mappings":""}
|