@herbcaudill/ralph 0.8.5 → 1.0.1
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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +26 -5
- package/dist/cli.js.map +1 -1
- package/dist/components/App.d.ts +6 -1
- package/dist/components/App.d.ts.map +1 -1
- package/dist/components/App.js +7 -3
- package/dist/components/App.js.map +1 -1
- package/dist/components/EnhancedTextInput.d.ts +8 -8
- package/dist/components/EnhancedTextInput.d.ts.map +1 -1
- package/dist/components/EnhancedTextInput.js +2 -36
- package/dist/components/EnhancedTextInput.js.map +1 -1
- package/dist/components/EnhancedTextInput.test.js +2 -10
- package/dist/components/EnhancedTextInput.test.js.map +1 -1
- package/dist/components/EventDisplay.d.ts +1 -1
- package/dist/components/EventDisplay.d.ts.map +1 -1
- package/dist/components/EventDisplay.js +3 -94
- package/dist/components/EventDisplay.js.map +1 -1
- package/dist/components/EventDisplay.replay.test.js +34 -68
- package/dist/components/EventDisplay.replay.test.js.map +1 -1
- package/dist/components/EventDisplay.test.js +30 -0
- package/dist/components/EventDisplay.test.js.map +1 -1
- package/dist/components/FullScreenLayout.d.ts +5 -4
- package/dist/components/FullScreenLayout.d.ts.map +1 -1
- package/dist/components/FullScreenLayout.js +2 -12
- package/dist/components/FullScreenLayout.js.map +1 -1
- package/dist/components/Header.d.ts +2 -1
- package/dist/components/Header.d.ts.map +1 -1
- package/dist/components/Header.js +8 -1
- package/dist/components/Header.js.map +1 -1
- package/dist/components/InitRalph.d.ts +6 -1
- package/dist/components/InitRalph.d.ts.map +1 -1
- package/dist/components/InitRalph.js +71 -89
- package/dist/components/InitRalph.js.map +1 -1
- package/dist/components/IterationRunner.d.ts +6 -13
- package/dist/components/IterationRunner.d.ts.map +1 -1
- package/dist/components/IterationRunner.js +84 -168
- package/dist/components/IterationRunner.js.map +1 -1
- package/dist/components/IterationRunner.test.d.ts +44 -0
- package/dist/components/IterationRunner.test.d.ts.map +1 -1
- package/dist/components/IterationRunner.test.js +66 -126
- package/dist/components/IterationRunner.test.js.map +1 -1
- package/dist/components/IterationRunner.types.d.ts +30 -0
- package/dist/components/IterationRunner.types.d.ts.map +1 -0
- package/dist/components/IterationRunner.types.js +2 -0
- package/dist/components/IterationRunner.types.js.map +1 -0
- package/dist/components/JsonOutput.d.ts +5 -6
- package/dist/components/JsonOutput.d.ts.map +1 -1
- package/dist/components/JsonOutput.js +57 -34
- package/dist/components/JsonOutput.js.map +1 -1
- package/dist/components/JsonOutput.test.d.ts +2 -0
- package/dist/components/JsonOutput.test.d.ts.map +1 -0
- package/dist/components/JsonOutput.test.js +39 -0
- package/dist/components/JsonOutput.test.js.map +1 -0
- package/dist/components/ReplayLog.d.ts +1 -1
- package/dist/components/ReplayLog.d.ts.map +1 -1
- package/dist/components/ReplayLog.js +9 -2
- package/dist/components/ReplayLog.js.map +1 -1
- package/dist/components/StreamingText.d.ts +4 -0
- package/dist/components/StreamingText.d.ts.map +1 -1
- package/dist/components/StreamingText.js +4 -3
- package/dist/components/StreamingText.js.map +1 -1
- package/dist/components/StreamingText.test.js +39 -0
- package/dist/components/StreamingText.test.js.map +1 -1
- package/dist/components/ToolUse.d.ts +8 -0
- package/dist/components/ToolUse.d.ts.map +1 -1
- package/dist/components/ToolUse.js +1 -0
- package/dist/components/ToolUse.js.map +1 -1
- package/dist/components/blocksToLines.d.ts +6 -0
- package/dist/components/blocksToLines.d.ts.map +1 -0
- package/dist/components/blocksToLines.js +15 -0
- package/dist/components/blocksToLines.js.map +1 -0
- package/dist/components/eventToBlocks.d.ts +7 -1
- package/dist/components/eventToBlocks.d.ts.map +1 -1
- package/dist/components/eventToBlocks.js +7 -1
- package/dist/components/eventToBlocks.js.map +1 -1
- package/dist/components/findNextWordBoundary.d.ts +10 -0
- package/dist/components/findNextWordBoundary.d.ts.map +1 -0
- package/dist/components/findNextWordBoundary.js +23 -0
- package/dist/components/findNextWordBoundary.js.map +1 -0
- package/dist/components/findPreviousWordBoundary.d.ts +10 -0
- package/dist/components/findPreviousWordBoundary.d.ts.map +1 -0
- package/dist/components/findPreviousWordBoundary.js +23 -0
- package/dist/components/findPreviousWordBoundary.js.map +1 -0
- package/dist/components/processEvents.d.ts +11 -0
- package/dist/components/processEvents.d.ts.map +1 -0
- package/dist/components/processEvents.js +87 -0
- package/dist/components/processEvents.js.map +1 -0
- package/dist/components/renderStaticItem.d.ts +7 -0
- package/dist/components/renderStaticItem.d.ts.map +1 -0
- package/dist/components/renderStaticItem.js +23 -0
- package/dist/components/renderStaticItem.js.map +1 -0
- package/dist/components/replay.d.ts +5 -0
- package/dist/components/replay.d.ts.map +1 -0
- package/dist/components/replay.js +49 -0
- package/dist/components/replay.js.map +1 -0
- package/dist/components/test-helpers/ControlledInput.d.ts +14 -0
- package/dist/components/test-helpers/ControlledInput.d.ts.map +1 -0
- package/dist/components/test-helpers/ControlledInput.js +15 -0
- package/dist/components/test-helpers/ControlledInput.js.map +1 -0
- package/dist/components/useContentHeight.d.ts +9 -0
- package/dist/components/useContentHeight.d.ts.map +1 -0
- package/dist/components/useContentHeight.js +16 -0
- package/dist/components/useContentHeight.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/MessageQueue.d.ts +18 -5
- package/dist/lib/MessageQueue.d.ts.map +1 -1
- package/dist/lib/MessageQueue.js +21 -14
- package/dist/lib/MessageQueue.js.map +1 -1
- package/dist/lib/StdinCommandHandler.d.ts +26 -20
- package/dist/lib/StdinCommandHandler.js +78 -85
- package/dist/lib/StdinCommandHandler.test.d.ts +2 -2
- package/dist/lib/StdinCommandHandler.test.js +92 -92
- package/dist/lib/WorktreeManager.d.ts +114 -0
- package/dist/lib/WorktreeManager.d.ts.map +1 -0
- package/dist/lib/WorktreeManager.js +350 -0
- package/dist/lib/WorktreeManager.js.map +1 -0
- package/dist/lib/WorktreeManager.test.d.ts +2 -0
- package/dist/lib/WorktreeManager.test.d.ts.map +1 -0
- package/dist/lib/WorktreeManager.test.js +261 -0
- package/dist/lib/WorktreeManager.test.js.map +1 -0
- package/dist/lib/addTodo.d.ts +5 -5
- package/dist/lib/addTodo.d.ts.map +1 -1
- package/dist/lib/addTodo.js +6 -20
- package/dist/lib/addTodo.js.map +1 -1
- package/dist/lib/beadsClient.d.ts +6 -12
- package/dist/lib/beadsClient.d.ts.map +1 -1
- package/dist/lib/beadsClient.js +3 -2
- package/dist/lib/beadsClient.js.map +1 -1
- package/dist/lib/captureBeadsSnapshot.d.ts +4 -0
- package/dist/lib/captureBeadsSnapshot.d.ts.map +1 -0
- package/dist/lib/captureBeadsSnapshot.js +24 -0
- package/dist/lib/captureBeadsSnapshot.js.map +1 -0
- package/dist/lib/captureStartupSnapshot.d.ts +10 -0
- package/dist/lib/captureStartupSnapshot.d.ts.map +1 -0
- package/dist/lib/captureStartupSnapshot.js +29 -0
- package/dist/lib/captureStartupSnapshot.js.map +1 -0
- package/dist/lib/captureTodoSnapshot.d.ts +4 -0
- package/dist/lib/captureTodoSnapshot.d.ts.map +1 -0
- package/dist/lib/captureTodoSnapshot.js +24 -0
- package/dist/lib/captureTodoSnapshot.js.map +1 -0
- package/dist/lib/copyTemplates.d.ts +22 -0
- package/dist/lib/copyTemplates.d.ts.map +1 -0
- package/dist/lib/copyTemplates.js +32 -0
- package/dist/lib/copyTemplates.js.map +1 -0
- package/dist/lib/createStdinCommandHandler.d.ts +28 -0
- package/dist/lib/createStdinCommandHandler.d.ts.map +1 -0
- package/dist/lib/createStdinCommandHandler.js +67 -0
- package/dist/lib/createStdinCommandHandler.js.map +1 -0
- package/dist/lib/createUserMessage.d.ts +6 -0
- package/dist/lib/createUserMessage.d.ts.map +1 -0
- package/dist/lib/createUserMessage.js +13 -0
- package/dist/lib/createUserMessage.js.map +1 -0
- package/dist/lib/debug.d.ts +17 -16
- package/dist/lib/debug.d.ts.map +1 -1
- package/dist/lib/debug.js +25 -15
- package/dist/lib/debug.js.map +1 -1
- package/dist/lib/findMaxLogNumber.d.ts +6 -0
- package/dist/lib/findMaxLogNumber.d.ts.map +1 -0
- package/dist/lib/findMaxLogNumber.js +26 -0
- package/dist/lib/findMaxLogNumber.js.map +1 -0
- package/dist/lib/findMaxLogNumber.test.d.ts +2 -0
- package/dist/lib/findMaxLogNumber.test.d.ts.map +1 -0
- package/dist/lib/findMaxLogNumber.test.js +39 -0
- package/dist/lib/findMaxLogNumber.test.js.map +1 -0
- package/dist/lib/formatContentBlock.d.ts +4 -8
- package/dist/lib/formatContentBlock.d.ts.map +1 -1
- package/dist/lib/formatContentBlock.js +7 -58
- package/dist/lib/formatContentBlock.js.map +1 -1
- package/dist/lib/formatIterationHeader.d.ts +5 -0
- package/dist/lib/formatIterationHeader.d.ts.map +1 -0
- package/dist/lib/formatIterationHeader.js +8 -0
- package/dist/lib/formatIterationHeader.js.map +1 -0
- package/dist/lib/formatText.d.ts +5 -0
- package/dist/lib/formatText.d.ts.map +1 -0
- package/dist/lib/formatText.js +33 -0
- package/dist/lib/formatText.js.map +1 -0
- package/dist/lib/formatToolUse.d.ts +7 -0
- package/dist/lib/formatToolUse.d.ts.map +1 -0
- package/dist/lib/formatToolUse.js +14 -0
- package/dist/lib/formatToolUse.js.map +1 -0
- package/dist/lib/formatUserMessage.d.ts +5 -0
- package/dist/lib/formatUserMessage.d.ts.map +1 -0
- package/dist/lib/formatUserMessage.js +8 -0
- package/dist/lib/formatUserMessage.js.map +1 -0
- package/dist/lib/getBaseCwd.d.ts +6 -0
- package/dist/lib/getBaseCwd.d.ts.map +1 -0
- package/dist/lib/getBaseCwd.js +6 -0
- package/dist/lib/getBaseCwd.js.map +1 -0
- package/dist/lib/getBeadsProgress.d.ts +8 -0
- package/dist/lib/getBeadsProgress.d.ts.map +1 -0
- package/dist/lib/getBeadsProgress.js +35 -0
- package/dist/lib/getBeadsProgress.js.map +1 -0
- package/dist/lib/getClaudeVersion.d.ts +4 -0
- package/dist/lib/getClaudeVersion.d.ts.map +1 -1
- package/dist/lib/getClaudeVersion.js +4 -0
- package/dist/lib/getClaudeVersion.js.map +1 -1
- package/dist/lib/getDefaultIterations.d.ts +6 -0
- package/dist/lib/getDefaultIterations.d.ts.map +1 -0
- package/dist/lib/getDefaultIterations.js +14 -0
- package/dist/lib/getDefaultIterations.js.map +1 -0
- package/dist/lib/getDefaultIterations.test.d.ts +2 -0
- package/dist/lib/getDefaultIterations.test.d.ts.map +1 -0
- package/dist/lib/getDefaultIterations.test.js +39 -0
- package/dist/lib/getDefaultIterations.test.js.map +1 -0
- package/dist/lib/getLatestLogFile.d.ts +6 -0
- package/dist/lib/getLatestLogFile.d.ts.map +1 -0
- package/dist/lib/getLatestLogFile.js +15 -0
- package/dist/lib/getLatestLogFile.js.map +1 -0
- package/dist/lib/getNextLogFile.d.ts +0 -5
- package/dist/lib/getNextLogFile.d.ts.map +1 -1
- package/dist/lib/getNextLogFile.js +2 -36
- package/dist/lib/getNextLogFile.js.map +1 -1
- package/dist/lib/getNextLogFile.test.js +2 -1
- package/dist/lib/getNextLogFile.test.js.map +1 -1
- package/dist/lib/getOpenIssueCount.d.ts +0 -5
- package/dist/lib/getOpenIssueCount.d.ts.map +1 -1
- package/dist/lib/getOpenIssueCount.js +0 -12
- package/dist/lib/getOpenIssueCount.js.map +1 -1
- package/dist/lib/getOpenIssueCount.test.js +1 -35
- package/dist/lib/getOpenIssueCount.test.js.map +1 -1
- package/dist/lib/getProgress.d.ts +6 -26
- package/dist/lib/getProgress.d.ts.map +1 -1
- package/dist/lib/getProgress.js +8 -109
- package/dist/lib/getProgress.js.map +1 -1
- package/dist/lib/getProgress.test.js +2 -1
- package/dist/lib/getProgress.test.js.map +1 -1
- package/dist/lib/getPromptContent.d.ts +8 -0
- package/dist/lib/getPromptContent.d.ts.map +1 -0
- package/dist/lib/getPromptContent.js +31 -0
- package/dist/lib/getPromptContent.js.map +1 -0
- package/dist/lib/getTerminalSize.d.ts +8 -0
- package/dist/lib/getTerminalSize.d.ts.map +1 -0
- package/dist/lib/getTerminalSize.js +10 -0
- package/dist/lib/getTerminalSize.js.map +1 -0
- package/dist/lib/getTodoProgress.d.ts +4 -0
- package/dist/lib/getTodoProgress.d.ts.map +1 -0
- package/dist/lib/getTodoProgress.js +22 -0
- package/dist/lib/getTodoProgress.js.map +1 -0
- package/dist/lib/insertTodo.d.ts +7 -0
- package/dist/lib/insertTodo.d.ts.map +1 -0
- package/dist/lib/insertTodo.js +22 -0
- package/dist/lib/insertTodo.js.map +1 -0
- package/dist/lib/outputEvent.d.ts +5 -0
- package/dist/lib/outputEvent.d.ts.map +1 -0
- package/dist/lib/outputEvent.js +7 -0
- package/dist/lib/outputEvent.js.map +1 -0
- package/dist/lib/parseStdinCommand.d.ts +25 -0
- package/dist/lib/parseStdinCommand.d.ts.map +1 -0
- package/dist/lib/parseStdinCommand.js +43 -0
- package/dist/lib/parseStdinCommand.js.map +1 -0
- package/dist/lib/parseStdinCommand.test.d.ts +2 -0
- package/dist/lib/parseStdinCommand.test.d.ts.map +1 -0
- package/dist/lib/parseStdinCommand.test.js +93 -0
- package/dist/lib/parseStdinCommand.test.js.map +1 -0
- package/dist/lib/parseTaskLifecycle.d.ts +18 -0
- package/dist/lib/parseTaskLifecycle.d.ts.map +1 -0
- package/dist/lib/parseTaskLifecycle.js +30 -0
- package/dist/lib/parseTaskLifecycle.js.map +1 -0
- package/dist/lib/parseTaskLifecycle.test.d.ts +2 -0
- package/dist/lib/parseTaskLifecycle.test.d.ts.map +1 -0
- package/dist/lib/parseTaskLifecycle.test.js +122 -0
- package/dist/lib/parseTaskLifecycle.test.js.map +1 -0
- package/dist/lib/parseWorktreeFromBranch.d.ts +13 -0
- package/dist/lib/parseWorktreeFromBranch.d.ts.map +1 -0
- package/dist/lib/parseWorktreeFromBranch.js +19 -0
- package/dist/lib/parseWorktreeFromBranch.js.map +1 -0
- package/dist/lib/processEvents.d.ts +12 -0
- package/dist/lib/processEvents.d.ts.map +1 -0
- package/dist/lib/processEvents.js +113 -0
- package/dist/lib/processEvents.js.map +1 -0
- package/dist/lib/rel.d.ts +7 -1
- package/dist/lib/rel.d.ts.map +1 -1
- package/dist/lib/rel.js +13 -4
- package/dist/lib/rel.js.map +1 -1
- package/dist/lib/rel.test.js +16 -1
- package/dist/lib/rel.test.js.map +1 -1
- package/dist/lib/sdkMessageToEvent.d.ts +6 -0
- package/dist/lib/sdkMessageToEvent.d.ts.map +1 -0
- package/dist/lib/sdkMessageToEvent.js +12 -0
- package/dist/lib/sdkMessageToEvent.js.map +1 -0
- package/dist/lib/shortenTempPaths.d.ts +7 -1
- package/dist/lib/shortenTempPaths.d.ts.map +1 -1
- package/dist/lib/shortenTempPaths.js +7 -2
- package/dist/lib/shortenTempPaths.js.map +1 -1
- package/dist/lib/types.d.ts +19 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/useTerminalSize.d.ts +3 -2
- package/dist/lib/useTerminalSize.d.ts.map +1 -1
- package/dist/lib/useTerminalSize.js +4 -6
- package/dist/lib/useTerminalSize.js.map +1 -1
- package/package.json +4 -3
- package/templates/core-prompt.md +77 -0
- package/templates/skills/manage-tasks/SKILL.md +113 -0
- package/templates/workflow.md +46 -0
- package/templates/prompt-beads.md +0 -44
- package/templates/prompt-todos.md +0 -17
- package/templates/todo.md +0 -9
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, copyFileSync } from "fs";
|
|
2
|
+
import { join, dirname } from "path";
|
|
3
|
+
/** Copy files from templates to destination, creating directories as needed. */
|
|
4
|
+
export function copyTemplates(
|
|
5
|
+
/** Directory containing template files */
|
|
6
|
+
templatesDir,
|
|
7
|
+
/** Destination directory for copied files */
|
|
8
|
+
destDir,
|
|
9
|
+
/** Array of source and destination path pairs */
|
|
10
|
+
files) {
|
|
11
|
+
const result = { created: [], skipped: [], errors: [] };
|
|
12
|
+
for (const { src, dest } of files) {
|
|
13
|
+
const srcPath = join(templatesDir, src);
|
|
14
|
+
const destPath = join(destDir, dest);
|
|
15
|
+
const destDirPath = dirname(destPath);
|
|
16
|
+
if (!existsSync(destDirPath)) {
|
|
17
|
+
mkdirSync(destDirPath, { recursive: true });
|
|
18
|
+
}
|
|
19
|
+
if (existsSync(destPath)) {
|
|
20
|
+
result.skipped.push(dest);
|
|
21
|
+
}
|
|
22
|
+
else if (existsSync(srcPath)) {
|
|
23
|
+
copyFileSync(srcPath, destPath);
|
|
24
|
+
result.created.push(dest);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
result.errors.push(`Template not found: ${src}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=copyTemplates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copyTemplates.js","sourceRoot":"","sources":["../../src/lib/copyTemplates.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACxD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAEpC,iFAAiF;AACjF,MAAM,UAAU,aAAa;AAC3B,0CAA0C;AAC1C,YAAoB;AACpB,6CAA6C;AAC7C,OAAe;AACf,iDAAiD;AACjD,KAA2C;IAE3C,MAAM,MAAM,GAAe,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;IAEnE,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;QAEpC,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;QACrC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC7C,CAAC;QAED,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3B,CAAC;aAAM,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;YAC/B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAA;QAClD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { MessageQueue } from "./MessageQueue.js";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a stdin command handler that reads JSON commands from stdin.
|
|
4
|
+
* Returns a cleanup function to stop reading.
|
|
5
|
+
*
|
|
6
|
+
* Commands:
|
|
7
|
+
* - {"type": "message", "text": "..."} - Send a message to Claude
|
|
8
|
+
* - {"type": "stop"} - Request graceful stop after current iteration
|
|
9
|
+
* - {"type": "pause"} - Pause after current iteration completes
|
|
10
|
+
* - {"type": "resume"} - Resume from paused state
|
|
11
|
+
*/
|
|
12
|
+
export declare const createStdinCommandHandler: (
|
|
13
|
+
/** Getter for handler options; called when a command is received */
|
|
14
|
+
getOptions: () => StdinCommandHandlerOptions) => (() => void);
|
|
15
|
+
/** Options for the stdin command handler */
|
|
16
|
+
export type StdinCommandHandlerOptions = {
|
|
17
|
+
/** The message queue to push user messages to, or null if not active */
|
|
18
|
+
messageQueue: MessageQueue | null;
|
|
19
|
+
/** Callback invoked when a stop command is received */
|
|
20
|
+
onStop: () => void;
|
|
21
|
+
/** Optional callback invoked when a pause command is received */
|
|
22
|
+
onPause?: () => void;
|
|
23
|
+
/** Optional callback invoked when a resume command is received */
|
|
24
|
+
onResume?: () => void;
|
|
25
|
+
/** Optional callback invoked when a user message is processed */
|
|
26
|
+
onMessage?: (text: string) => void;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=createStdinCommandHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createStdinCommandHandler.d.ts","sourceRoot":"","sources":["../../src/lib/createStdinCommandHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAqB,MAAM,mBAAmB,CAAA;AAMnE;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB;AACpC,oEAAoE;AACpE,YAAY,MAAM,0BAA0B,KAC3C,CAAC,MAAM,IAAI,CAkDb,CAAA;AAED,6CAA6C;AAC7C,MAAM,MAAM,0BAA0B,GAAG;IACvC,wEAAwE;IACxE,YAAY,EAAE,YAAY,GAAG,IAAI,CAAA;IACjC,uDAAuD;IACvD,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,iEAAiE;IACjE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CACnC,CAAA"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { createDebugLogger } from "./debug.js";
|
|
2
|
+
import { createUserMessage } from "./MessageQueue.js";
|
|
3
|
+
import { parseStdinCommand } from "./parseStdinCommand.js";
|
|
4
|
+
import { createInterface } from "readline";
|
|
5
|
+
const log = createDebugLogger("stdin-command");
|
|
6
|
+
/**
|
|
7
|
+
* Creates a stdin command handler that reads JSON commands from stdin.
|
|
8
|
+
* Returns a cleanup function to stop reading.
|
|
9
|
+
*
|
|
10
|
+
* Commands:
|
|
11
|
+
* - {"type": "message", "text": "..."} - Send a message to Claude
|
|
12
|
+
* - {"type": "stop"} - Request graceful stop after current iteration
|
|
13
|
+
* - {"type": "pause"} - Pause after current iteration completes
|
|
14
|
+
* - {"type": "resume"} - Resume from paused state
|
|
15
|
+
*/
|
|
16
|
+
export const createStdinCommandHandler = (
|
|
17
|
+
/** Getter for handler options; called when a command is received */
|
|
18
|
+
getOptions) => {
|
|
19
|
+
// Don't set up stdin handler if stdin is a TTY (interactive mode handles input differently)
|
|
20
|
+
// This handler is for piped input in JSON mode
|
|
21
|
+
if (process.stdin.isTTY) {
|
|
22
|
+
log(`stdin is TTY - skipping stdin command handler`);
|
|
23
|
+
return () => { };
|
|
24
|
+
}
|
|
25
|
+
log(`Setting up stdin command handler`);
|
|
26
|
+
const rl = createInterface({
|
|
27
|
+
input: process.stdin,
|
|
28
|
+
terminal: false,
|
|
29
|
+
});
|
|
30
|
+
const lineHandler = (line) => {
|
|
31
|
+
const command = parseStdinCommand(line);
|
|
32
|
+
if (!command)
|
|
33
|
+
return;
|
|
34
|
+
const options = getOptions();
|
|
35
|
+
log(`Received command: ${command.type}`);
|
|
36
|
+
if (command.type === "message") {
|
|
37
|
+
if (options.messageQueue) {
|
|
38
|
+
const userMessage = createUserMessage(command.text);
|
|
39
|
+
options.messageQueue.push(userMessage);
|
|
40
|
+
log(`Pushed message to queue: ${command.text.slice(0, 50)}...`);
|
|
41
|
+
options.onMessage?.(command.text);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
log(`Cannot send message - no active message queue`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else if (command.type === "stop") {
|
|
48
|
+
log(`Stop command received`);
|
|
49
|
+
options.onStop();
|
|
50
|
+
}
|
|
51
|
+
else if (command.type === "pause") {
|
|
52
|
+
log(`Pause command received`);
|
|
53
|
+
options.onPause?.();
|
|
54
|
+
}
|
|
55
|
+
else if (command.type === "resume") {
|
|
56
|
+
log(`Resume command received`);
|
|
57
|
+
options.onResume?.();
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
rl.on("line", lineHandler);
|
|
61
|
+
return () => {
|
|
62
|
+
log(`Cleaning up stdin command handler`);
|
|
63
|
+
rl.off("line", lineHandler);
|
|
64
|
+
rl.close();
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=createStdinCommandHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createStdinCommandHandler.js","sourceRoot":"","sources":["../../src/lib/createStdinCommandHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAgB,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAE1C,MAAM,GAAG,GAAG,iBAAiB,CAAC,eAAe,CAAC,CAAA;AAE9C;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG;AACvC,oEAAoE;AACpE,UAA4C,EAC9B,EAAE;IAChB,4FAA4F;IAC5F,+CAA+C;IAC/C,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACxB,GAAG,CAAC,+CAA+C,CAAC,CAAA;QACpD,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;IACjB,CAAC;IAED,GAAG,CAAC,kCAAkC,CAAC,CAAA;IAEvC,MAAM,EAAE,GAAG,eAAe,CAAC;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAA;IAEF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,EAAE;QACnC,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;QACvC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEpB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;QAC5B,GAAG,CAAC,qBAAqB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;QAExC,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBACzB,MAAM,WAAW,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;gBACnD,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;gBACtC,GAAG,CAAC,4BAA4B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;gBAC/D,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACnC,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,+CAA+C,CAAC,CAAA;YACtD,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACnC,GAAG,CAAC,uBAAuB,CAAC,CAAA;YAC5B,OAAO,CAAC,MAAM,EAAE,CAAA;QAClB,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACpC,GAAG,CAAC,wBAAwB,CAAC,CAAA;YAC7B,OAAO,CAAC,OAAO,EAAE,EAAE,CAAA;QACrB,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrC,GAAG,CAAC,yBAAyB,CAAC,CAAA;YAC9B,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAA;QACtB,CAAC;IACH,CAAC,CAAA;IAED,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAE1B,OAAO,GAAG,EAAE;QACV,GAAG,CAAC,mCAAmC,CAAC,CAAA;QACxC,EAAE,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QAC3B,EAAE,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SDKUserMessage } from "@anthropic-ai/claude-agent-sdk";
|
|
2
|
+
/** Create an SDKUserMessage from text. */
|
|
3
|
+
export declare const createUserMessage: (
|
|
4
|
+
/** The text content of the message */
|
|
5
|
+
text: string) => SDKUserMessage;
|
|
6
|
+
//# sourceMappingURL=createUserMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createUserMessage.d.ts","sourceRoot":"","sources":["../../src/lib/createUserMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAA;AAEpE,2CAA2C;AAC3C,eAAO,MAAM,iBAAiB;AAC5B,sCAAsC;AACtC,MAAM,MAAM,KACX,cAQD,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** Create an SDKUserMessage from text. */
|
|
2
|
+
export const createUserMessage = (
|
|
3
|
+
/** The text content of the message */
|
|
4
|
+
text) => ({
|
|
5
|
+
type: "user",
|
|
6
|
+
session_id: "",
|
|
7
|
+
message: {
|
|
8
|
+
role: "user",
|
|
9
|
+
content: [{ type: "text", text }],
|
|
10
|
+
},
|
|
11
|
+
parent_tool_use_id: null,
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=createUserMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createUserMessage.js","sourceRoot":"","sources":["../../src/lib/createUserMessage.ts"],"names":[],"mappings":"AAEA,2CAA2C;AAC3C,MAAM,CAAC,MAAM,iBAAiB,GAAG;AAC/B,sCAAsC;AACtC,IAAY,EACI,EAAE,CAAC,CAAC;IACpB,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,EAAE;IACd,OAAO,EAAE;QACP,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KAClC;IACD,kBAAkB,EAAE,IAAI;CACzB,CAAC,CAAA"}
|
package/dist/lib/debug.d.ts
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
type DebugNamespace = "messagequeue" | "iteration" | "sdk" | "stdin-command" | "worktree";
|
|
2
|
+
/** Log a debug message if debugging is enabled for the given namespace. */
|
|
3
|
+
export declare const debug: (
|
|
4
|
+
/** The debug namespace for this message */
|
|
5
|
+
namespace: DebugNamespace,
|
|
6
|
+
/** The message to log */
|
|
7
|
+
message: string,
|
|
8
|
+
/** Additional arguments to log after the message */
|
|
9
|
+
...args: unknown[]) => void;
|
|
10
|
+
/** Create a namespaced debug logger that captures the namespace for all logs. */
|
|
11
|
+
export declare const createDebugLogger: (
|
|
12
|
+
/** The debug namespace to use for all logged messages */
|
|
13
|
+
namespace: DebugNamespace) => (
|
|
14
|
+
/** The message to log */
|
|
15
|
+
message: string,
|
|
16
|
+
/** Additional arguments to log after the message */
|
|
17
|
+
...args: unknown[]) => void;
|
|
17
18
|
export {};
|
|
18
19
|
//# sourceMappingURL=debug.d.ts.map
|
package/dist/lib/debug.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/lib/debug.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"debug.d.ts","sourceRoot":"","sources":["../../src/lib/debug.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,GAAG,cAAc,GAAG,WAAW,GAAG,KAAK,GAAG,eAAe,GAAG,UAAU,CAAA;AAqCzF,4EAA4E;AAC5E,eAAO,MAAM,KAAK;AAChB,2CAA2C;AAC3C,WAAW,cAAc;AACzB,yBAAyB;AACzB,SAAS,MAAM;AACf,oDAAoD;AACpD,GAAG,MAAM,OAAO,EAAE,KACjB,IAOF,CAAA;AAED,kFAAkF;AAClF,eAAO,MAAM,iBAAiB;AAC5B,yDAAyD;AACzD,WAAW,cAAc;AAGvB,yBAAyB;AACzB,SAAS,MAAM;AACf,oDAAoD;AACpD,GAAG,MAAM,OAAO,EAAE,SAErB,CAAA"}
|
package/dist/lib/debug.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
2
|
+
* Check if debug logging is enabled for the given namespace.
|
|
3
|
+
* Controlled by RALPH_DEBUG environment variable:
|
|
4
|
+
* - RALPH_DEBUG=1 or RALPH_DEBUG=true or RALPH_DEBUG=all - enable all logging
|
|
5
|
+
* - RALPH_DEBUG=messagequeue - enable only that namespace
|
|
6
|
+
* - RALPH_DEBUG=messagequeue,iteration - enable multiple namespaces
|
|
7
7
|
*/
|
|
8
|
-
const isDebugEnabled = (
|
|
8
|
+
const isDebugEnabled = (
|
|
9
|
+
/** The debug namespace to check, or undefined to check global debug setting */
|
|
10
|
+
namespace) => {
|
|
9
11
|
const debugEnv = process.env.RALPH_DEBUG;
|
|
10
12
|
if (!debugEnv)
|
|
11
13
|
return false;
|
|
@@ -24,10 +26,14 @@ const isDebugEnabled = (namespace) => {
|
|
|
24
26
|
}
|
|
25
27
|
return false;
|
|
26
28
|
};
|
|
27
|
-
/**
|
|
28
|
-
|
|
29
|
-
*/
|
|
30
|
-
|
|
29
|
+
/** Log a debug message if debugging is enabled for the given namespace. */
|
|
30
|
+
export const debug = (
|
|
31
|
+
/** The debug namespace for this message */
|
|
32
|
+
namespace,
|
|
33
|
+
/** The message to log */
|
|
34
|
+
message,
|
|
35
|
+
/** Additional arguments to log after the message */
|
|
36
|
+
...args) => {
|
|
31
37
|
if (isDebugEnabled(namespace)) {
|
|
32
38
|
const timestamp = new Date().toISOString();
|
|
33
39
|
const prefix = `[${timestamp}] [RALPH:${namespace.toUpperCase()}]`;
|
|
@@ -35,10 +41,14 @@ export const debug = (namespace, message, ...args) => {
|
|
|
35
41
|
console.error(prefix, message, ...args);
|
|
36
42
|
}
|
|
37
43
|
};
|
|
38
|
-
/**
|
|
39
|
-
|
|
40
|
-
*/
|
|
41
|
-
|
|
42
|
-
return (
|
|
44
|
+
/** Create a namespaced debug logger that captures the namespace for all logs. */
|
|
45
|
+
export const createDebugLogger = (
|
|
46
|
+
/** The debug namespace to use for all logged messages */
|
|
47
|
+
namespace) => {
|
|
48
|
+
return (
|
|
49
|
+
/** The message to log */
|
|
50
|
+
message,
|
|
51
|
+
/** Additional arguments to log after the message */
|
|
52
|
+
...args) => debug(namespace, message, ...args);
|
|
43
53
|
};
|
|
44
54
|
//# sourceMappingURL=debug.js.map
|
package/dist/lib/debug.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/lib/debug.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/lib/debug.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,cAAc,GAAG;AACrB,+EAA+E;AAC/E,SAA0B,EACjB,EAAE;IACX,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,4EAA4E;AAC5E,MAAM,CAAC,MAAM,KAAK,GAAG;AACnB,2CAA2C;AAC3C,SAAyB;AACzB,yBAAyB;AACzB,OAAe;AACf,oDAAoD;AACpD,GAAG,IAAe,EACZ,EAAE;IACR,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,kFAAkF;AAClF,MAAM,CAAC,MAAM,iBAAiB,GAAG;AAC/B,yDAAyD;AACzD,SAAyB,EACzB,EAAE;IACF,OAAO;IACL,yBAAyB;IACzB,OAAe;IACf,oDAAoD;IACpD,GAAG,IAAe,EAClB,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAA;AACzC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findMaxLogNumber.d.ts","sourceRoot":"","sources":["../../src/lib/findMaxLogNumber.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAO,MAqBnC,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { readdirSync, existsSync } 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
|
+
export 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
|
+
//# sourceMappingURL=findMaxLogNumber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findMaxLogNumber.js","sourceRoot":"","sources":["../../src/lib/findMaxLogNumber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAE3B,MAAM,iBAAiB,GAAG,uBAAuB,CAAA;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAW,EAAE;IAC3C,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findMaxLogNumber.test.d.ts","sourceRoot":"","sources":["../../src/lib/findMaxLogNumber.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, afterEach, vi } from "vitest";
|
|
2
|
+
import { findMaxLogNumber } from "./findMaxLogNumber.js";
|
|
3
|
+
import * as fs from "fs";
|
|
4
|
+
vi.mock("fs");
|
|
5
|
+
describe("findMaxLogNumber", () => {
|
|
6
|
+
const mockExistsSync = vi.mocked(fs.existsSync);
|
|
7
|
+
const mockReaddirSync = vi.mocked(fs.readdirSync);
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
vi.clearAllMocks();
|
|
10
|
+
});
|
|
11
|
+
afterEach(() => {
|
|
12
|
+
vi.restoreAllMocks();
|
|
13
|
+
});
|
|
14
|
+
it("returns 0 when .ralph directory does not exist", () => {
|
|
15
|
+
mockExistsSync.mockReturnValue(false);
|
|
16
|
+
expect(findMaxLogNumber()).toBe(0);
|
|
17
|
+
});
|
|
18
|
+
it("returns 0 when .ralph directory is empty", () => {
|
|
19
|
+
mockExistsSync.mockReturnValue(true);
|
|
20
|
+
mockReaddirSync.mockReturnValue([]);
|
|
21
|
+
expect(findMaxLogNumber()).toBe(0);
|
|
22
|
+
});
|
|
23
|
+
it("returns the highest event log number", () => {
|
|
24
|
+
mockExistsSync.mockReturnValue(true);
|
|
25
|
+
mockReaddirSync.mockReturnValue(["events-1.jsonl", "events-5.jsonl", "events-3.jsonl"]);
|
|
26
|
+
expect(findMaxLogNumber()).toBe(5);
|
|
27
|
+
});
|
|
28
|
+
it("ignores non-matching files", () => {
|
|
29
|
+
mockExistsSync.mockReturnValue(true);
|
|
30
|
+
mockReaddirSync.mockReturnValue([
|
|
31
|
+
"events-1.jsonl",
|
|
32
|
+
"other.txt",
|
|
33
|
+
"events.jsonl",
|
|
34
|
+
"events-2.jsonl",
|
|
35
|
+
]);
|
|
36
|
+
expect(findMaxLogNumber()).toBe(2);
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=findMaxLogNumber.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"findMaxLogNumber.test.js","sourceRoot":"","sources":["../../src/lib/findMaxLogNumber.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AAExB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAEb,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAA;IAC/C,MAAM,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,CAAA;IAEjD,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAA;IACpB,CAAC,CAAC,CAAA;IAEF,SAAS,CAAC,GAAG,EAAE;QACb,EAAE,CAAC,eAAe,EAAE,CAAA;IACtB,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,cAAc,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;QACrC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QACpC,eAAe,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;QACnC,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QACpC,eAAe,CAAC,eAAe,CAAC,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAQ,CAAC,CAAA;QAC9F,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,cAAc,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;QACpC,eAAe,CAAC,eAAe,CAAC;YAC9B,gBAAgB;YAChB,WAAW;YACX,cAAc;YACd,gBAAgB;SACV,CAAC,CAAA;QACT,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
import type { ContentBlock } from "../components/eventToBlocks.js";
|
|
2
|
-
/**
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Format a round header
|
|
8
|
-
*/
|
|
9
|
-
export declare const formatIterationHeader: (iteration: number) => string;
|
|
2
|
+
/** Convert a content block to formatted string lines */
|
|
3
|
+
export declare const formatContentBlock: (
|
|
4
|
+
/** Content block to format */
|
|
5
|
+
block: ContentBlock) => string[];
|
|
10
6
|
//# sourceMappingURL=formatContentBlock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatContentBlock.d.ts","sourceRoot":"","sources":["../../src/lib/formatContentBlock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"formatContentBlock.d.ts","sourceRoot":"","sources":["../../src/lib/formatContentBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAKlE,yDAAyD;AACzD,eAAO,MAAM,kBAAkB;AAC7B,8BAA8B;AAC9B,OAAO,YAAY,KAClB,MAAM,EAYR,CAAA"}
|
|
@@ -1,55 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
let inBold = false;
|
|
9
|
-
let inCode = false;
|
|
10
|
-
while (i < content.length) {
|
|
11
|
-
if (content[i] === "*" && content[i + 1] === "*") {
|
|
12
|
-
inBold = !inBold;
|
|
13
|
-
i += 2;
|
|
14
|
-
}
|
|
15
|
-
else if (content[i] === "`") {
|
|
16
|
-
inCode = !inCode;
|
|
17
|
-
i++;
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
let char = content[i];
|
|
21
|
-
if (inCode) {
|
|
22
|
-
char = chalk.yellow(char);
|
|
23
|
-
}
|
|
24
|
-
else if (inBold) {
|
|
25
|
-
char = chalk.bold(char);
|
|
26
|
-
}
|
|
27
|
-
result += char;
|
|
28
|
-
i++;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
return result;
|
|
32
|
-
};
|
|
33
|
-
/**
|
|
34
|
-
* Format a tool use block as a string
|
|
35
|
-
*/
|
|
36
|
-
const formatToolUse = (name, arg) => {
|
|
37
|
-
const formattedName = chalk.blue(name);
|
|
38
|
-
if (arg) {
|
|
39
|
-
return ` ${formattedName} ${chalk.dim(arg)}`;
|
|
40
|
-
}
|
|
41
|
-
return ` ${formattedName}`;
|
|
42
|
-
};
|
|
43
|
-
/**
|
|
44
|
-
* Format a user message
|
|
45
|
-
*/
|
|
46
|
-
const formatUserMessage = (content) => {
|
|
47
|
-
return chalk.green(content);
|
|
48
|
-
};
|
|
49
|
-
/**
|
|
50
|
-
* Convert a content block to formatted string lines
|
|
51
|
-
*/
|
|
52
|
-
export const formatContentBlock = (block) => {
|
|
1
|
+
import { formatText } from "./formatText.js";
|
|
2
|
+
import { formatToolUse } from "./formatToolUse.js";
|
|
3
|
+
import { formatUserMessage } from "./formatUserMessage.js";
|
|
4
|
+
/** Convert a content block to formatted string lines */
|
|
5
|
+
export const formatContentBlock = (
|
|
6
|
+
/** Content block to format */
|
|
7
|
+
block) => {
|
|
53
8
|
if (block.type === "text") {
|
|
54
9
|
const formatted = formatText(block.content);
|
|
55
10
|
// Split into lines, preserving empty lines for paragraph breaks
|
|
@@ -60,10 +15,4 @@ export const formatContentBlock = (block) => {
|
|
|
60
15
|
}
|
|
61
16
|
return [formatToolUse(block.name, block.arg)];
|
|
62
17
|
};
|
|
63
|
-
/**
|
|
64
|
-
* Format a round header
|
|
65
|
-
*/
|
|
66
|
-
export const formatIterationHeader = (iteration) => {
|
|
67
|
-
return chalk.cyan.bold(`─── Round ${iteration} ───`);
|
|
68
|
-
};
|
|
69
18
|
//# sourceMappingURL=formatContentBlock.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatContentBlock.js","sourceRoot":"","sources":["../../src/lib/formatContentBlock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"formatContentBlock.js","sourceRoot":"","sources":["../../src/lib/formatContentBlock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE1D,yDAAyD;AACzD,MAAM,CAAC,MAAM,kBAAkB,GAAG;AAChC,8BAA8B;AAC9B,KAAmB,EACT,EAAE;IACZ,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatIterationHeader.d.ts","sourceRoot":"","sources":["../../src/lib/formatIterationHeader.ts"],"names":[],"mappings":"AAEA,6BAA6B;AAC7B,eAAO,MAAM,qBAAqB;AAChC,kCAAkC;AAClC,WAAW,MAAM,KAChB,MAEF,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
/** Format a round header */
|
|
3
|
+
export const formatIterationHeader = (
|
|
4
|
+
/** Iteration number to display */
|
|
5
|
+
iteration) => {
|
|
6
|
+
return chalk.cyan.bold(`─── Round ${iteration} ───`);
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=formatIterationHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatIterationHeader.js","sourceRoot":"","sources":["../../src/lib/formatIterationHeader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,6BAA6B;AAC7B,MAAM,CAAC,MAAM,qBAAqB,GAAG;AACnC,kCAAkC;AAClC,SAAiB,EACT,EAAE;IACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,SAAS,MAAM,CAAC,CAAA;AACtD,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatText.d.ts","sourceRoot":"","sources":["../../src/lib/formatText.ts"],"names":[],"mappings":"AAEA,kFAAkF;AAClF,eAAO,MAAM,UAAU;AACrB,4BAA4B;AAC5B,SAAS,MAAM,KACd,MA4BF,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
/** Format a text string with markdown-style formatting (bold and inline code) */
|
|
3
|
+
export const formatText = (
|
|
4
|
+
/** The content to format */
|
|
5
|
+
content) => {
|
|
6
|
+
let result = "";
|
|
7
|
+
let i = 0;
|
|
8
|
+
let inBold = false;
|
|
9
|
+
let inCode = false;
|
|
10
|
+
while (i < content.length) {
|
|
11
|
+
if (content[i] === "*" && content[i + 1] === "*") {
|
|
12
|
+
inBold = !inBold;
|
|
13
|
+
i += 2;
|
|
14
|
+
}
|
|
15
|
+
else if (content[i] === "`") {
|
|
16
|
+
inCode = !inCode;
|
|
17
|
+
i++;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
let char = content[i];
|
|
21
|
+
if (inCode) {
|
|
22
|
+
char = chalk.yellow(char);
|
|
23
|
+
}
|
|
24
|
+
else if (inBold) {
|
|
25
|
+
char = chalk.bold(char);
|
|
26
|
+
}
|
|
27
|
+
result += char;
|
|
28
|
+
i++;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return result;
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=formatText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatText.js","sourceRoot":"","sources":["../../src/lib/formatText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,kFAAkF;AAClF,MAAM,CAAC,MAAM,UAAU,GAAG;AACxB,4BAA4B;AAC5B,OAAe,EACP,EAAE;IACV,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatToolUse.d.ts","sourceRoot":"","sources":["../../src/lib/formatToolUse.ts"],"names":[],"mappings":"AAEA,2CAA2C;AAC3C,eAAO,MAAM,aAAa;AACxB,2BAA2B;AAC3B,MAAM,MAAM;AACZ,qCAAqC;AACrC,MAAM,MAAM,KACX,MAMF,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
/** Format a tool use block as a string */
|
|
3
|
+
export const formatToolUse = (
|
|
4
|
+
/** The name of the tool */
|
|
5
|
+
name,
|
|
6
|
+
/** Optional argument for the tool */
|
|
7
|
+
arg) => {
|
|
8
|
+
const formattedName = chalk.blue(name);
|
|
9
|
+
if (arg) {
|
|
10
|
+
return ` ${formattedName} ${chalk.dim(arg)}`;
|
|
11
|
+
}
|
|
12
|
+
return ` ${formattedName}`;
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=formatToolUse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatToolUse.js","sourceRoot":"","sources":["../../src/lib/formatToolUse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,2CAA2C;AAC3C,MAAM,CAAC,MAAM,aAAa,GAAG;AAC3B,2BAA2B;AAC3B,IAAY;AACZ,qCAAqC;AACrC,GAAY,EACJ,EAAE;IACV,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatUserMessage.d.ts","sourceRoot":"","sources":["../../src/lib/formatUserMessage.ts"],"names":[],"mappings":"AAEA,6BAA6B;AAC7B,eAAO,MAAM,iBAAiB;AAC5B,oCAAoC;AACpC,SAAS,MAAM,KACd,MAEF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatUserMessage.js","sourceRoot":"","sources":["../../src/lib/formatUserMessage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,6BAA6B;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG;AAC/B,oCAAoC;AACpC,OAAe,EACP,EAAE;IACV,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAC7B,CAAC,CAAA"}
|