@herbcaudill/ralph 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +93 -0
- package/dist/index.js +2480 -6
- package/dist/index.js.map +1 -1
- package/package.json +10 -9
- package/templates/core-prompt.md +3 -19
- package/templates/skills/manage-tasks/SKILL.md +0 -3
- package/templates/workflow.md +5 -19
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -102
- package/dist/cli.js.map +0 -1
- package/dist/components/App.d.ts +0 -17
- package/dist/components/App.d.ts.map +0 -1
- package/dist/components/App.js +0 -18
- package/dist/components/App.js.map +0 -1
- package/dist/components/EnhancedTextInput.d.ts +0 -22
- package/dist/components/EnhancedTextInput.d.ts.map +0 -1
- package/dist/components/EnhancedTextInput.js +0 -130
- package/dist/components/EnhancedTextInput.js.map +0 -1
- package/dist/components/EnhancedTextInput.test.d.ts +0 -2
- package/dist/components/EnhancedTextInput.test.d.ts.map +0 -1
- package/dist/components/EnhancedTextInput.test.js +0 -99
- package/dist/components/EnhancedTextInput.test.js.map +0 -1
- package/dist/components/EventDisplay.d.ts +0 -14
- package/dist/components/EventDisplay.d.ts.map +0 -1
- package/dist/components/EventDisplay.js +0 -91
- package/dist/components/EventDisplay.js.map +0 -1
- package/dist/components/EventDisplay.replay.test.d.ts +0 -2
- package/dist/components/EventDisplay.replay.test.d.ts.map +0 -1
- package/dist/components/EventDisplay.replay.test.js +0 -379
- package/dist/components/EventDisplay.replay.test.js.map +0 -1
- package/dist/components/EventDisplay.test.d.ts +0 -2
- package/dist/components/EventDisplay.test.d.ts.map +0 -1
- package/dist/components/EventDisplay.test.js +0 -349
- package/dist/components/EventDisplay.test.js.map +0 -1
- package/dist/components/FullScreenLayout.d.ts +0 -15
- package/dist/components/FullScreenLayout.d.ts.map +0 -1
- package/dist/components/FullScreenLayout.js +0 -20
- package/dist/components/FullScreenLayout.js.map +0 -1
- package/dist/components/Header.d.ts +0 -10
- package/dist/components/Header.d.ts.map +0 -1
- package/dist/components/Header.js +0 -22
- package/dist/components/Header.js.map +0 -1
- package/dist/components/Header.test.d.ts +0 -2
- package/dist/components/Header.test.d.ts.map +0 -1
- package/dist/components/Header.test.js +0 -27
- package/dist/components/Header.test.js.map +0 -1
- package/dist/components/InitRalph.d.ts +0 -8
- package/dist/components/InitRalph.d.ts.map +0 -1
- package/dist/components/InitRalph.js +0 -136
- package/dist/components/InitRalph.js.map +0 -1
- package/dist/components/IterationRunner.d.ts +0 -10
- package/dist/components/IterationRunner.d.ts.map +0 -1
- package/dist/components/IterationRunner.js +0 -536
- package/dist/components/IterationRunner.js.map +0 -1
- package/dist/components/IterationRunner.test.d.ts +0 -46
- package/dist/components/IterationRunner.test.d.ts.map +0 -1
- package/dist/components/IterationRunner.test.js +0 -69
- package/dist/components/IterationRunner.test.js.map +0 -1
- package/dist/components/IterationRunner.types.d.ts +0 -30
- package/dist/components/IterationRunner.types.d.ts.map +0 -1
- package/dist/components/IterationRunner.types.js +0 -2
- package/dist/components/IterationRunner.types.js.map +0 -1
- package/dist/components/JsonOutput.d.ts +0 -13
- package/dist/components/JsonOutput.d.ts.map +0 -1
- package/dist/components/JsonOutput.js +0 -269
- package/dist/components/JsonOutput.js.map +0 -1
- package/dist/components/JsonOutput.test.d.ts +0 -2
- package/dist/components/JsonOutput.test.d.ts.map +0 -1
- package/dist/components/JsonOutput.test.js +0 -39
- package/dist/components/JsonOutput.test.js.map +0 -1
- package/dist/components/ProgressBar.d.ts +0 -18
- package/dist/components/ProgressBar.d.ts.map +0 -1
- package/dist/components/ProgressBar.js +0 -30
- package/dist/components/ProgressBar.js.map +0 -1
- package/dist/components/ProgressBar.test.d.ts +0 -2
- package/dist/components/ProgressBar.test.d.ts.map +0 -1
- package/dist/components/ProgressBar.test.js +0 -55
- package/dist/components/ProgressBar.test.js.map +0 -1
- package/dist/components/ReplayLog.d.ts +0 -7
- package/dist/components/ReplayLog.d.ts.map +0 -1
- package/dist/components/ReplayLog.js +0 -57
- package/dist/components/ReplayLog.js.map +0 -1
- package/dist/components/StreamingText.d.ts +0 -11
- package/dist/components/StreamingText.d.ts.map +0 -1
- package/dist/components/StreamingText.js +0 -37
- package/dist/components/StreamingText.js.map +0 -1
- package/dist/components/StreamingText.test.d.ts +0 -2
- package/dist/components/StreamingText.test.d.ts.map +0 -1
- package/dist/components/StreamingText.test.js +0 -125
- package/dist/components/StreamingText.test.js.map +0 -1
- package/dist/components/ToolUse.d.ts +0 -16
- package/dist/components/ToolUse.d.ts.map +0 -1
- package/dist/components/ToolUse.js +0 -11
- package/dist/components/ToolUse.js.map +0 -1
- package/dist/components/ToolUse.test.d.ts +0 -2
- package/dist/components/ToolUse.test.d.ts.map +0 -1
- package/dist/components/ToolUse.test.js +0 -43
- package/dist/components/ToolUse.test.js.map +0 -1
- package/dist/components/blocksToLines.d.ts +0 -6
- package/dist/components/blocksToLines.d.ts.map +0 -1
- package/dist/components/blocksToLines.js +0 -15
- package/dist/components/blocksToLines.js.map +0 -1
- package/dist/components/eventToBlocks.d.ts +0 -22
- package/dist/components/eventToBlocks.d.ts.map +0 -1
- package/dist/components/eventToBlocks.js +0 -166
- package/dist/components/eventToBlocks.js.map +0 -1
- package/dist/components/eventToBlocks.test.d.ts +0 -2
- package/dist/components/eventToBlocks.test.d.ts.map +0 -1
- package/dist/components/eventToBlocks.test.js +0 -466
- package/dist/components/eventToBlocks.test.js.map +0 -1
- package/dist/components/findNextWordBoundary.d.ts +0 -10
- package/dist/components/findNextWordBoundary.d.ts.map +0 -1
- package/dist/components/findNextWordBoundary.js +0 -23
- package/dist/components/findNextWordBoundary.js.map +0 -1
- package/dist/components/findPreviousWordBoundary.d.ts +0 -10
- package/dist/components/findPreviousWordBoundary.d.ts.map +0 -1
- package/dist/components/findPreviousWordBoundary.js +0 -23
- package/dist/components/findPreviousWordBoundary.js.map +0 -1
- package/dist/components/processEvents.d.ts +0 -11
- package/dist/components/processEvents.d.ts.map +0 -1
- package/dist/components/processEvents.js +0 -87
- package/dist/components/processEvents.js.map +0 -1
- package/dist/components/renderStaticItem.d.ts +0 -7
- package/dist/components/renderStaticItem.d.ts.map +0 -1
- package/dist/components/renderStaticItem.js +0 -23
- package/dist/components/renderStaticItem.js.map +0 -1
- package/dist/components/replay.d.ts +0 -5
- package/dist/components/replay.d.ts.map +0 -1
- package/dist/components/replay.js +0 -49
- package/dist/components/replay.js.map +0 -1
- package/dist/components/test-helpers/ControlledInput.d.ts +0 -14
- package/dist/components/test-helpers/ControlledInput.d.ts.map +0 -1
- package/dist/components/test-helpers/ControlledInput.js +0 -15
- package/dist/components/test-helpers/ControlledInput.js.map +0 -1
- package/dist/components/useContentHeight.d.ts +0 -9
- package/dist/components/useContentHeight.d.ts.map +0 -1
- package/dist/components/useContentHeight.js +0 -16
- package/dist/components/useContentHeight.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/lib/MessageQueue.d.ts +0 -33
- package/dist/lib/MessageQueue.d.ts.map +0 -1
- package/dist/lib/MessageQueue.js +0 -96
- package/dist/lib/MessageQueue.js.map +0 -1
- package/dist/lib/MessageQueue.test.d.ts +0 -2
- package/dist/lib/MessageQueue.test.d.ts.map +0 -1
- package/dist/lib/MessageQueue.test.js +0 -224
- package/dist/lib/MessageQueue.test.js.map +0 -1
- package/dist/lib/StdinCommandHandler.d.ts +0 -48
- package/dist/lib/StdinCommandHandler.d.ts.map +0 -1
- package/dist/lib/StdinCommandHandler.js +0 -95
- package/dist/lib/StdinCommandHandler.js.map +0 -1
- package/dist/lib/StdinCommandHandler.test.d.ts +0 -2
- package/dist/lib/StdinCommandHandler.test.d.ts.map +0 -1
- package/dist/lib/StdinCommandHandler.test.js +0 -93
- package/dist/lib/StdinCommandHandler.test.js.map +0 -1
- package/dist/lib/WorktreeManager.d.ts +0 -114
- package/dist/lib/WorktreeManager.d.ts.map +0 -1
- package/dist/lib/WorktreeManager.js +0 -350
- package/dist/lib/WorktreeManager.js.map +0 -1
- package/dist/lib/WorktreeManager.test.d.ts +0 -2
- package/dist/lib/WorktreeManager.test.d.ts.map +0 -1
- package/dist/lib/WorktreeManager.test.js +0 -261
- package/dist/lib/WorktreeManager.test.js.map +0 -1
- package/dist/lib/addTodo.d.ts +0 -11
- package/dist/lib/addTodo.d.ts.map +0 -1
- package/dist/lib/addTodo.js +0 -51
- package/dist/lib/addTodo.js.map +0 -1
- package/dist/lib/beadsClient.d.ts +0 -46
- package/dist/lib/beadsClient.d.ts.map +0 -1
- package/dist/lib/beadsClient.js +0 -172
- package/dist/lib/beadsClient.js.map +0 -1
- package/dist/lib/captureBeadsSnapshot.d.ts +0 -4
- package/dist/lib/captureBeadsSnapshot.d.ts.map +0 -1
- package/dist/lib/captureBeadsSnapshot.js +0 -24
- package/dist/lib/captureBeadsSnapshot.js.map +0 -1
- package/dist/lib/captureStartupSnapshot.d.ts +0 -10
- package/dist/lib/captureStartupSnapshot.d.ts.map +0 -1
- package/dist/lib/captureStartupSnapshot.js +0 -29
- package/dist/lib/captureStartupSnapshot.js.map +0 -1
- package/dist/lib/captureTodoSnapshot.d.ts +0 -4
- package/dist/lib/captureTodoSnapshot.d.ts.map +0 -1
- package/dist/lib/captureTodoSnapshot.js +0 -24
- package/dist/lib/captureTodoSnapshot.js.map +0 -1
- package/dist/lib/copyTemplates.d.ts +0 -22
- package/dist/lib/copyTemplates.d.ts.map +0 -1
- package/dist/lib/copyTemplates.js +0 -32
- package/dist/lib/copyTemplates.js.map +0 -1
- package/dist/lib/createStdinCommandHandler.d.ts +0 -28
- package/dist/lib/createStdinCommandHandler.d.ts.map +0 -1
- package/dist/lib/createStdinCommandHandler.js +0 -67
- package/dist/lib/createStdinCommandHandler.js.map +0 -1
- package/dist/lib/createUserMessage.d.ts +0 -6
- package/dist/lib/createUserMessage.d.ts.map +0 -1
- package/dist/lib/createUserMessage.js +0 -13
- package/dist/lib/createUserMessage.js.map +0 -1
- package/dist/lib/debug.d.ts +0 -19
- package/dist/lib/debug.d.ts.map +0 -1
- package/dist/lib/debug.js +0 -54
- package/dist/lib/debug.js.map +0 -1
- package/dist/lib/findMaxLogNumber.d.ts +0 -6
- package/dist/lib/findMaxLogNumber.d.ts.map +0 -1
- package/dist/lib/findMaxLogNumber.js +0 -26
- package/dist/lib/findMaxLogNumber.js.map +0 -1
- package/dist/lib/findMaxLogNumber.test.d.ts +0 -2
- package/dist/lib/findMaxLogNumber.test.d.ts.map +0 -1
- package/dist/lib/findMaxLogNumber.test.js +0 -39
- package/dist/lib/findMaxLogNumber.test.js.map +0 -1
- package/dist/lib/formatContentBlock.d.ts +0 -6
- package/dist/lib/formatContentBlock.d.ts.map +0 -1
- package/dist/lib/formatContentBlock.js +0 -18
- package/dist/lib/formatContentBlock.js.map +0 -1
- package/dist/lib/formatIterationHeader.d.ts +0 -5
- package/dist/lib/formatIterationHeader.d.ts.map +0 -1
- package/dist/lib/formatIterationHeader.js +0 -8
- package/dist/lib/formatIterationHeader.js.map +0 -1
- package/dist/lib/formatText.d.ts +0 -5
- package/dist/lib/formatText.d.ts.map +0 -1
- package/dist/lib/formatText.js +0 -33
- package/dist/lib/formatText.js.map +0 -1
- package/dist/lib/formatToolUse.d.ts +0 -7
- package/dist/lib/formatToolUse.d.ts.map +0 -1
- package/dist/lib/formatToolUse.js +0 -14
- package/dist/lib/formatToolUse.js.map +0 -1
- package/dist/lib/formatUserMessage.d.ts +0 -5
- package/dist/lib/formatUserMessage.d.ts.map +0 -1
- package/dist/lib/formatUserMessage.js +0 -8
- package/dist/lib/formatUserMessage.js.map +0 -1
- package/dist/lib/getBaseCwd.d.ts +0 -6
- package/dist/lib/getBaseCwd.d.ts.map +0 -1
- package/dist/lib/getBaseCwd.js +0 -6
- package/dist/lib/getBaseCwd.js.map +0 -1
- package/dist/lib/getBeadsProgress.d.ts +0 -8
- package/dist/lib/getBeadsProgress.d.ts.map +0 -1
- package/dist/lib/getBeadsProgress.js +0 -35
- package/dist/lib/getBeadsProgress.js.map +0 -1
- package/dist/lib/getClaudeVersion.d.ts +0 -6
- package/dist/lib/getClaudeVersion.d.ts.map +0 -1
- package/dist/lib/getClaudeVersion.js +0 -21
- package/dist/lib/getClaudeVersion.js.map +0 -1
- package/dist/lib/getClaudeVersion.test.d.ts +0 -2
- package/dist/lib/getClaudeVersion.test.d.ts.map +0 -1
- package/dist/lib/getClaudeVersion.test.js +0 -39
- package/dist/lib/getClaudeVersion.test.js.map +0 -1
- package/dist/lib/getDefaultIterations.d.ts +0 -6
- package/dist/lib/getDefaultIterations.d.ts.map +0 -1
- package/dist/lib/getDefaultIterations.js +0 -14
- package/dist/lib/getDefaultIterations.js.map +0 -1
- package/dist/lib/getDefaultIterations.test.d.ts +0 -2
- package/dist/lib/getDefaultIterations.test.d.ts.map +0 -1
- package/dist/lib/getDefaultIterations.test.js +0 -39
- package/dist/lib/getDefaultIterations.test.js.map +0 -1
- package/dist/lib/getLatestLogFile.d.ts +0 -6
- package/dist/lib/getLatestLogFile.d.ts.map +0 -1
- package/dist/lib/getLatestLogFile.js +0 -15
- package/dist/lib/getLatestLogFile.js.map +0 -1
- package/dist/lib/getNextLogFile.d.ts +0 -7
- package/dist/lib/getNextLogFile.d.ts.map +0 -1
- package/dist/lib/getNextLogFile.js +0 -18
- package/dist/lib/getNextLogFile.js.map +0 -1
- package/dist/lib/getNextLogFile.test.d.ts +0 -2
- package/dist/lib/getNextLogFile.test.d.ts.map +0 -1
- package/dist/lib/getNextLogFile.test.js +0 -66
- package/dist/lib/getNextLogFile.test.js.map +0 -1
- package/dist/lib/getOpenIssueCount.d.ts +0 -6
- package/dist/lib/getOpenIssueCount.d.ts.map +0 -1
- package/dist/lib/getOpenIssueCount.js +0 -19
- package/dist/lib/getOpenIssueCount.js.map +0 -1
- package/dist/lib/getOpenIssueCount.test.d.ts +0 -2
- package/dist/lib/getOpenIssueCount.test.d.ts.map +0 -1
- package/dist/lib/getOpenIssueCount.test.js +0 -31
- package/dist/lib/getOpenIssueCount.test.js.map +0 -1
- package/dist/lib/getProgress.d.ts +0 -14
- package/dist/lib/getProgress.d.ts.map +0 -1
- package/dist/lib/getProgress.js +0 -30
- package/dist/lib/getProgress.js.map +0 -1
- package/dist/lib/getProgress.test.d.ts +0 -2
- package/dist/lib/getProgress.test.d.ts.map +0 -1
- package/dist/lib/getProgress.test.js +0 -218
- package/dist/lib/getProgress.test.js.map +0 -1
- package/dist/lib/getPromptContent.d.ts +0 -8
- package/dist/lib/getPromptContent.d.ts.map +0 -1
- package/dist/lib/getPromptContent.js +0 -31
- package/dist/lib/getPromptContent.js.map +0 -1
- package/dist/lib/getTerminalSize.d.ts +0 -8
- package/dist/lib/getTerminalSize.d.ts.map +0 -1
- package/dist/lib/getTerminalSize.js +0 -10
- package/dist/lib/getTerminalSize.js.map +0 -1
- package/dist/lib/getTodoProgress.d.ts +0 -4
- package/dist/lib/getTodoProgress.d.ts.map +0 -1
- package/dist/lib/getTodoProgress.js +0 -22
- package/dist/lib/getTodoProgress.js.map +0 -1
- package/dist/lib/insertTodo.d.ts +0 -7
- package/dist/lib/insertTodo.d.ts.map +0 -1
- package/dist/lib/insertTodo.js +0 -22
- package/dist/lib/insertTodo.js.map +0 -1
- package/dist/lib/outputEvent.d.ts +0 -5
- package/dist/lib/outputEvent.d.ts.map +0 -1
- package/dist/lib/outputEvent.js +0 -7
- package/dist/lib/outputEvent.js.map +0 -1
- package/dist/lib/parseStdinCommand.d.ts +0 -25
- package/dist/lib/parseStdinCommand.d.ts.map +0 -1
- package/dist/lib/parseStdinCommand.js +0 -43
- package/dist/lib/parseStdinCommand.js.map +0 -1
- package/dist/lib/parseStdinCommand.test.d.ts +0 -2
- package/dist/lib/parseStdinCommand.test.d.ts.map +0 -1
- package/dist/lib/parseStdinCommand.test.js +0 -93
- package/dist/lib/parseStdinCommand.test.js.map +0 -1
- package/dist/lib/parseTaskLifecycle.d.ts +0 -18
- package/dist/lib/parseTaskLifecycle.d.ts.map +0 -1
- package/dist/lib/parseTaskLifecycle.js +0 -30
- package/dist/lib/parseTaskLifecycle.js.map +0 -1
- package/dist/lib/parseTaskLifecycle.test.d.ts +0 -2
- package/dist/lib/parseTaskLifecycle.test.d.ts.map +0 -1
- package/dist/lib/parseTaskLifecycle.test.js +0 -122
- package/dist/lib/parseTaskLifecycle.test.js.map +0 -1
- package/dist/lib/parseWorktreeFromBranch.d.ts +0 -13
- package/dist/lib/parseWorktreeFromBranch.d.ts.map +0 -1
- package/dist/lib/parseWorktreeFromBranch.js +0 -19
- package/dist/lib/parseWorktreeFromBranch.js.map +0 -1
- package/dist/lib/processEvents.d.ts +0 -12
- package/dist/lib/processEvents.d.ts.map +0 -1
- package/dist/lib/processEvents.js +0 -113
- package/dist/lib/processEvents.js.map +0 -1
- package/dist/lib/rel.d.ts +0 -8
- package/dist/lib/rel.d.ts.map +0 -1
- package/dist/lib/rel.js +0 -19
- package/dist/lib/rel.js.map +0 -1
- package/dist/lib/rel.test.d.ts +0 -2
- package/dist/lib/rel.test.d.ts.map +0 -1
- package/dist/lib/rel.test.js +0 -51
- package/dist/lib/rel.test.js.map +0 -1
- package/dist/lib/sdkMessageToEvent.d.ts +0 -6
- package/dist/lib/sdkMessageToEvent.d.ts.map +0 -1
- package/dist/lib/sdkMessageToEvent.js +0 -12
- package/dist/lib/sdkMessageToEvent.js.map +0 -1
- package/dist/lib/shortenTempPaths.d.ts +0 -8
- package/dist/lib/shortenTempPaths.d.ts.map +0 -1
- package/dist/lib/shortenTempPaths.js +0 -12
- package/dist/lib/shortenTempPaths.js.map +0 -1
- package/dist/lib/shortenTempPaths.test.d.ts +0 -2
- package/dist/lib/shortenTempPaths.test.d.ts.map +0 -1
- package/dist/lib/shortenTempPaths.test.js +0 -46
- package/dist/lib/shortenTempPaths.test.js.map +0 -1
- package/dist/lib/types.d.ts +0 -19
- package/dist/lib/types.d.ts.map +0 -1
- package/dist/lib/types.js +0 -2
- package/dist/lib/types.js.map +0 -1
- package/dist/lib/useTerminalSize.d.ts +0 -6
- package/dist/lib/useTerminalSize.d.ts.map +0 -1
- package/dist/lib/useTerminalSize.js +0 -19
- package/dist/lib/useTerminalSize.js.map +0 -1
|
@@ -1,7 +0,0 @@
|
|
|
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
|
-
//# sourceMappingURL=getNextLogFile.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getNextLogFile.d.ts","sourceRoot":"","sources":["../../src/lib/getNextLogFile.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,eAAO,MAAM,cAAc,QAAO,MAUjC,CAAA"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { existsSync, mkdirSync } from "fs";
|
|
2
|
-
import { join } from "path";
|
|
3
|
-
import { findMaxLogNumber } from "./findMaxLogNumber.js";
|
|
4
|
-
/**
|
|
5
|
-
* Get the path to the next sequential log file in the .ralph directory.
|
|
6
|
-
* Files are named events-1.jsonl, events-2.jsonl, etc.
|
|
7
|
-
* Returns the path for the next available number (highest existing + 1).
|
|
8
|
-
*/
|
|
9
|
-
export const getNextLogFile = () => {
|
|
10
|
-
const ralphDir = join(process.cwd(), ".ralph");
|
|
11
|
-
// Ensure .ralph directory exists
|
|
12
|
-
if (!existsSync(ralphDir)) {
|
|
13
|
-
mkdirSync(ralphDir, { recursive: true });
|
|
14
|
-
}
|
|
15
|
-
const maxNumber = findMaxLogNumber();
|
|
16
|
-
return join(ralphDir, `events-${maxNumber + 1}.jsonl`);
|
|
17
|
-
};
|
|
18
|
-
//# sourceMappingURL=getNextLogFile.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getNextLogFile.js","sourceRoot":"","sources":["../../src/lib/getNextLogFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,IAAI,CAAA;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAExD;;;;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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getNextLogFile.test.d.ts","sourceRoot":"","sources":["../../src/lib/getNextLogFile.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import { getNextLogFile } from "./getNextLogFile.js";
|
|
3
|
-
import { getLatestLogFile } from "./getLatestLogFile.js";
|
|
4
|
-
import { rmSync, existsSync } from "fs";
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
describe("getNextLogFile", () => {
|
|
7
|
-
const testDir = join(process.cwd(), ".ralph-test");
|
|
8
|
-
beforeEach(() => {
|
|
9
|
-
// Clean up any existing test directory
|
|
10
|
-
if (existsSync(testDir)) {
|
|
11
|
-
rmSync(testDir, { recursive: true });
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
afterEach(() => {
|
|
15
|
-
// Clean up test directory
|
|
16
|
-
if (existsSync(testDir)) {
|
|
17
|
-
rmSync(testDir, { recursive: true });
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
describe("getNextLogFile", () => {
|
|
21
|
-
it("returns events-1.jsonl when no logs exist", () => {
|
|
22
|
-
// Mock the current working directory by creating a test context
|
|
23
|
-
// Note: This test uses the actual cwd, so we need to ensure .ralph doesn't exist
|
|
24
|
-
// or has no event logs. For unit testing, we'd typically mock the file system.
|
|
25
|
-
const result = getNextLogFile();
|
|
26
|
-
expect(result).toMatch(/events-\d+\.jsonl$/);
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
describe("getLatestLogFile", () => {
|
|
30
|
-
it("returns undefined when no logs exist in empty directory", () => {
|
|
31
|
-
// Create .ralph directory but with no log files
|
|
32
|
-
const ralphDir = join(process.cwd(), ".ralph");
|
|
33
|
-
// This test would need to mock the file system to be fully isolated
|
|
34
|
-
// For now, we test the function returns the expected pattern
|
|
35
|
-
const result = getLatestLogFile();
|
|
36
|
-
// Either undefined (no logs) or a valid path (existing logs)
|
|
37
|
-
if (result !== undefined) {
|
|
38
|
-
expect(result).toMatch(/events-\d+\.jsonl$/);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
// Integration tests that verify the sequential numbering behavior
|
|
44
|
-
describe("sequential log file naming", () => {
|
|
45
|
-
it("getNextLogFile returns one higher than getLatestLogFile", () => {
|
|
46
|
-
const latest = getLatestLogFile();
|
|
47
|
-
const next = getNextLogFile();
|
|
48
|
-
if (latest === undefined) {
|
|
49
|
-
// No existing logs, next should be events-1.jsonl
|
|
50
|
-
expect(next).toContain("events-1.jsonl");
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
// Extract numbers and verify next is latest + 1
|
|
54
|
-
const latestMatch = latest.match(/events-(\d+)\.jsonl$/);
|
|
55
|
-
const nextMatch = next.match(/events-(\d+)\.jsonl$/);
|
|
56
|
-
expect(latestMatch).not.toBeNull();
|
|
57
|
-
expect(nextMatch).not.toBeNull();
|
|
58
|
-
if (latestMatch && nextMatch) {
|
|
59
|
-
const latestNum = parseInt(latestMatch[1], 10);
|
|
60
|
-
const nextNum = parseInt(nextMatch[1], 10);
|
|
61
|
-
expect(nextNum).toBe(latestNum + 1);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
});
|
|
66
|
-
//# sourceMappingURL=getNextLogFile.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getNextLogFile.test.js","sourceRoot":"","sources":["../../src/lib/getNextLogFile.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getOpenIssueCount.d.ts","sourceRoot":"","sources":["../../src/lib/getOpenIssueCount.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAYpC,CAAA"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { execSync } from "child_process";
|
|
2
|
-
/**
|
|
3
|
-
* Get the number of open issues from beads.
|
|
4
|
-
* Returns 0 if beads is not available or there are no issues.
|
|
5
|
-
*/
|
|
6
|
-
export const getOpenIssueCount = () => {
|
|
7
|
-
try {
|
|
8
|
-
const output = execSync("bd list --status=open --json", {
|
|
9
|
-
encoding: "utf-8",
|
|
10
|
-
stdio: ["pipe", "pipe", "pipe"],
|
|
11
|
-
}).trim();
|
|
12
|
-
const issues = JSON.parse(output);
|
|
13
|
-
return Array.isArray(issues) ? issues.length : 0;
|
|
14
|
-
}
|
|
15
|
-
catch {
|
|
16
|
-
return 0;
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=getOpenIssueCount.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getOpenIssueCount.js","sourceRoot":"","sources":["../../src/lib/getOpenIssueCount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAW,EAAE;IAC5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,8BAA8B,EAAE;YACtD,QAAQ,EAAE,OAAO;YACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;SAChC,CAAC,CAAC,IAAI,EAAE,CAAA;QAET,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACjC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAA;IACV,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getOpenIssueCount.test.d.ts","sourceRoot":"","sources":["../../src/lib/getOpenIssueCount.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import { getOpenIssueCount } from "./getOpenIssueCount.js";
|
|
3
|
-
import * as childProcess from "child_process";
|
|
4
|
-
vi.mock("child_process");
|
|
5
|
-
describe("getOpenIssueCount", () => {
|
|
6
|
-
beforeEach(() => {
|
|
7
|
-
vi.resetAllMocks();
|
|
8
|
-
});
|
|
9
|
-
afterEach(() => {
|
|
10
|
-
vi.restoreAllMocks();
|
|
11
|
-
});
|
|
12
|
-
it("returns the count of open issues", () => {
|
|
13
|
-
vi.mocked(childProcess.execSync).mockReturnValue(JSON.stringify([{ id: "1" }, { id: "2" }, { id: "3" }]));
|
|
14
|
-
expect(getOpenIssueCount()).toBe(3);
|
|
15
|
-
});
|
|
16
|
-
it("returns 0 when bd command fails", () => {
|
|
17
|
-
vi.mocked(childProcess.execSync).mockImplementation(() => {
|
|
18
|
-
throw new Error("bd not found");
|
|
19
|
-
});
|
|
20
|
-
expect(getOpenIssueCount()).toBe(0);
|
|
21
|
-
});
|
|
22
|
-
it("returns 0 when output is invalid JSON", () => {
|
|
23
|
-
vi.mocked(childProcess.execSync).mockReturnValue("not json");
|
|
24
|
-
expect(getOpenIssueCount()).toBe(0);
|
|
25
|
-
});
|
|
26
|
-
it("returns 0 when output is not an array", () => {
|
|
27
|
-
vi.mocked(childProcess.execSync).mockReturnValue('{"error": "something"}');
|
|
28
|
-
expect(getOpenIssueCount()).toBe(0);
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
//# sourceMappingURL=getOpenIssueCount.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getOpenIssueCount.test.js","sourceRoot":"","sources":["../../src/lib/getOpenIssueCount.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAC1D,OAAO,KAAK,YAAY,MAAM,eAAe,CAAA;AAE7C,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;AAExB,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,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,kCAAkC,EAAE,GAAG,EAAE;QAC1C,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,eAAe,CAC9C,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CACxD,CAAA;QACD,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE;YACvD,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA;QACjC,CAAC,CAAC,CAAA;QACF,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;QAC5D,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAA;QAC1E,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { ProgressData } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* Get progress data from the workspace.
|
|
4
|
-
*
|
|
5
|
-
* For beads workspaces: Uses timestamp-based counting to accurately track
|
|
6
|
-
* issues closed and created since startup.
|
|
7
|
-
* For todo.md workspaces: completed = checked items, total = all items
|
|
8
|
-
*/
|
|
9
|
-
export declare const getProgress: (
|
|
10
|
-
/** Initial count of open + in_progress issues at startup */
|
|
11
|
-
initialCount: number,
|
|
12
|
-
/** RFC3339 timestamp for counting issues created after this time */
|
|
13
|
-
startupTimestamp: string) => ProgressData;
|
|
14
|
-
//# sourceMappingURL=getProgress.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getProgress.d.ts","sourceRoot":"","sources":["../../src/lib/getProgress.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAM9C;;;;;;GAMG;AACH,eAAO,MAAM,WAAW;AACtB,4DAA4D;AAC5D,cAAc,MAAM;AACpB,oEAAoE;AACpE,kBAAkB,MAAM,KACvB,YAYF,CAAA"}
|
package/dist/lib/getProgress.js
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { existsSync } from "fs";
|
|
2
|
-
import { join } from "path";
|
|
3
|
-
import { getBeadsProgress } from "./getBeadsProgress.js";
|
|
4
|
-
import { getTodoProgress } from "./getTodoProgress.js";
|
|
5
|
-
const beadsDir = join(process.cwd(), ".beads");
|
|
6
|
-
const ralphDir = join(process.cwd(), ".ralph");
|
|
7
|
-
const todoFile = join(ralphDir, "todo.md");
|
|
8
|
-
/**
|
|
9
|
-
* Get progress data from the workspace.
|
|
10
|
-
*
|
|
11
|
-
* For beads workspaces: Uses timestamp-based counting to accurately track
|
|
12
|
-
* issues closed and created since startup.
|
|
13
|
-
* For todo.md workspaces: completed = checked items, total = all items
|
|
14
|
-
*/
|
|
15
|
-
export const getProgress = (
|
|
16
|
-
/** Initial count of open + in_progress issues at startup */
|
|
17
|
-
initialCount,
|
|
18
|
-
/** RFC3339 timestamp for counting issues created after this time */
|
|
19
|
-
startupTimestamp) => {
|
|
20
|
-
// Check for beads workspace first
|
|
21
|
-
if (existsSync(beadsDir)) {
|
|
22
|
-
return getBeadsProgress(initialCount, startupTimestamp);
|
|
23
|
-
}
|
|
24
|
-
// Check for todo.md
|
|
25
|
-
if (existsSync(todoFile)) {
|
|
26
|
-
return getTodoProgress();
|
|
27
|
-
}
|
|
28
|
-
return { type: "none", completed: 0, total: 0 };
|
|
29
|
-
};
|
|
30
|
-
//# sourceMappingURL=getProgress.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getProgress.js","sourceRoot":"","sources":["../../src/lib/getProgress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAC3B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAGtD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;AAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;AAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;AAE1C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;AACzB,4DAA4D;AAC5D,YAAoB;AACpB,oEAAoE;AACpE,gBAAwB,EACV,EAAE;IAChB,kCAAkC;IAClC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO,gBAAgB,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAA;IACzD,CAAC;IAED,oBAAoB;IACpB,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,OAAO,eAAe,EAAE,CAAA;IAC1B,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;AACjD,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getProgress.test.d.ts","sourceRoot":"","sources":["../../src/lib/getProgress.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
|
|
2
|
-
import { getProgress } from "./getProgress.js";
|
|
3
|
-
import { captureStartupSnapshot } from "./captureStartupSnapshot.js";
|
|
4
|
-
import * as fs from "fs";
|
|
5
|
-
import * as child_process from "child_process";
|
|
6
|
-
vi.mock("fs");
|
|
7
|
-
vi.mock("child_process");
|
|
8
|
-
const mockExistsSync = vi.mocked(fs.existsSync);
|
|
9
|
-
const mockReadFileSync = vi.mocked(fs.readFileSync);
|
|
10
|
-
const mockExecSync = vi.mocked(child_process.execSync);
|
|
11
|
-
describe("getProgress", () => {
|
|
12
|
-
beforeEach(() => {
|
|
13
|
-
vi.clearAllMocks();
|
|
14
|
-
});
|
|
15
|
-
afterEach(() => {
|
|
16
|
-
vi.restoreAllMocks();
|
|
17
|
-
});
|
|
18
|
-
describe("with beads workspace", () => {
|
|
19
|
-
it("returns beads progress with timestamp-based counting", () => {
|
|
20
|
-
mockExistsSync.mockImplementation(path => {
|
|
21
|
-
if (typeof path === "string" && path.endsWith(".beads"))
|
|
22
|
-
return true;
|
|
23
|
-
return false;
|
|
24
|
-
});
|
|
25
|
-
// Calls: created-after, status=open, status=in_progress
|
|
26
|
-
// 1 created, 3 open, 1 in_progress → completed = (5+1) - (3+1) = 2
|
|
27
|
-
mockExecSync.mockReturnValueOnce("1").mockReturnValueOnce("3").mockReturnValueOnce("1");
|
|
28
|
-
const result = getProgress(5, "2024-01-01T00:00:00.000Z");
|
|
29
|
-
expect(result.type).toBe("beads");
|
|
30
|
-
expect(result.completed).toBe(2); // total(6) - remaining(4) = 2
|
|
31
|
-
expect(result.total).toBe(6); // 5 initial + 1 created
|
|
32
|
-
});
|
|
33
|
-
it("handles no progress (0 closed, 0 created)", () => {
|
|
34
|
-
mockExistsSync.mockImplementation(path => {
|
|
35
|
-
if (typeof path === "string" && path.endsWith(".beads"))
|
|
36
|
-
return true;
|
|
37
|
-
return false;
|
|
38
|
-
});
|
|
39
|
-
// Calls: created-after, status=open, status=in_progress
|
|
40
|
-
// 0 created, 3 open, 2 in_progress → completed = 5 - 5 = 0
|
|
41
|
-
mockExecSync.mockReturnValueOnce("0").mockReturnValueOnce("3").mockReturnValueOnce("2");
|
|
42
|
-
const result = getProgress(5, "2024-01-01T00:00:00.000Z");
|
|
43
|
-
expect(result.type).toBe("beads");
|
|
44
|
-
expect(result.completed).toBe(0);
|
|
45
|
-
expect(result.total).toBe(5);
|
|
46
|
-
});
|
|
47
|
-
it("handles all closed", () => {
|
|
48
|
-
mockExistsSync.mockImplementation(path => {
|
|
49
|
-
if (typeof path === "string" && path.endsWith(".beads"))
|
|
50
|
-
return true;
|
|
51
|
-
return false;
|
|
52
|
-
});
|
|
53
|
-
// Calls: created-after, status=open, status=in_progress
|
|
54
|
-
// 0 created, 0 open, 0 in_progress → completed = 5 - 0 = 5
|
|
55
|
-
mockExecSync.mockReturnValueOnce("0").mockReturnValueOnce("0").mockReturnValueOnce("0");
|
|
56
|
-
const result = getProgress(5, "2024-01-01T00:00:00.000Z");
|
|
57
|
-
expect(result.type).toBe("beads");
|
|
58
|
-
expect(result.completed).toBe(5);
|
|
59
|
-
expect(result.total).toBe(5);
|
|
60
|
-
});
|
|
61
|
-
it("returns none when bd command fails", () => {
|
|
62
|
-
mockExistsSync.mockImplementation(path => {
|
|
63
|
-
if (typeof path === "string" && path.endsWith(".beads"))
|
|
64
|
-
return true;
|
|
65
|
-
return false;
|
|
66
|
-
});
|
|
67
|
-
mockExecSync.mockImplementation(() => {
|
|
68
|
-
throw new Error("Command failed");
|
|
69
|
-
});
|
|
70
|
-
const result = getProgress(5, "2024-01-01T00:00:00.000Z");
|
|
71
|
-
expect(result.type).toBe("none");
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
describe("with todo.md workspace", () => {
|
|
75
|
-
it("returns todo progress when todo.md exists", () => {
|
|
76
|
-
mockExistsSync.mockImplementation(path => {
|
|
77
|
-
if (typeof path === "string" && path.endsWith(".beads"))
|
|
78
|
-
return false;
|
|
79
|
-
if (typeof path === "string" && path.endsWith("todo.md"))
|
|
80
|
-
return true;
|
|
81
|
-
return false;
|
|
82
|
-
});
|
|
83
|
-
mockReadFileSync.mockReturnValue(`
|
|
84
|
-
### To do
|
|
85
|
-
- [ ] Task 1
|
|
86
|
-
- [ ] Task 2
|
|
87
|
-
- [x] Task 3
|
|
88
|
-
- [X] Task 4
|
|
89
|
-
|
|
90
|
-
### Done
|
|
91
|
-
`);
|
|
92
|
-
const result = getProgress(4, "2024-01-01T00:00:00.000Z");
|
|
93
|
-
expect(result.type).toBe("todo");
|
|
94
|
-
expect(result.completed).toBe(2); // 2 checked
|
|
95
|
-
expect(result.total).toBe(4);
|
|
96
|
-
});
|
|
97
|
-
it("handles all unchecked items", () => {
|
|
98
|
-
mockExistsSync.mockImplementation(path => {
|
|
99
|
-
if (typeof path === "string" && path.endsWith(".beads"))
|
|
100
|
-
return false;
|
|
101
|
-
if (typeof path === "string" && path.endsWith("todo.md"))
|
|
102
|
-
return true;
|
|
103
|
-
return false;
|
|
104
|
-
});
|
|
105
|
-
mockReadFileSync.mockReturnValue(`
|
|
106
|
-
- [ ] Task 1
|
|
107
|
-
- [ ] Task 2
|
|
108
|
-
- [ ] Task 3
|
|
109
|
-
`);
|
|
110
|
-
const result = getProgress(3, "2024-01-01T00:00:00.000Z");
|
|
111
|
-
expect(result.type).toBe("todo");
|
|
112
|
-
expect(result.completed).toBe(0);
|
|
113
|
-
expect(result.total).toBe(3);
|
|
114
|
-
});
|
|
115
|
-
it("handles all checked items", () => {
|
|
116
|
-
mockExistsSync.mockImplementation(path => {
|
|
117
|
-
if (typeof path === "string" && path.endsWith(".beads"))
|
|
118
|
-
return false;
|
|
119
|
-
if (typeof path === "string" && path.endsWith("todo.md"))
|
|
120
|
-
return true;
|
|
121
|
-
return false;
|
|
122
|
-
});
|
|
123
|
-
mockReadFileSync.mockReturnValue(`
|
|
124
|
-
- [x] Task 1
|
|
125
|
-
- [X] Task 2
|
|
126
|
-
`);
|
|
127
|
-
const result = getProgress(2, "2024-01-01T00:00:00.000Z");
|
|
128
|
-
expect(result.type).toBe("todo");
|
|
129
|
-
expect(result.completed).toBe(2);
|
|
130
|
-
expect(result.total).toBe(2);
|
|
131
|
-
});
|
|
132
|
-
it("handles empty todo file", () => {
|
|
133
|
-
mockExistsSync.mockImplementation(path => {
|
|
134
|
-
if (typeof path === "string" && path.endsWith(".beads"))
|
|
135
|
-
return false;
|
|
136
|
-
if (typeof path === "string" && path.endsWith("todo.md"))
|
|
137
|
-
return true;
|
|
138
|
-
return false;
|
|
139
|
-
});
|
|
140
|
-
mockReadFileSync.mockReturnValue("");
|
|
141
|
-
const result = getProgress(0, "2024-01-01T00:00:00.000Z");
|
|
142
|
-
expect(result.type).toBe("todo");
|
|
143
|
-
expect(result.completed).toBe(0);
|
|
144
|
-
expect(result.total).toBe(0);
|
|
145
|
-
});
|
|
146
|
-
});
|
|
147
|
-
describe("with no workspace", () => {
|
|
148
|
-
it("returns none when neither .beads nor todo.md exists", () => {
|
|
149
|
-
mockExistsSync.mockReturnValue(false);
|
|
150
|
-
const result = getProgress(0, "2024-01-01T00:00:00.000Z");
|
|
151
|
-
expect(result.type).toBe("none");
|
|
152
|
-
expect(result.completed).toBe(0);
|
|
153
|
-
expect(result.total).toBe(0);
|
|
154
|
-
});
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
describe("captureStartupSnapshot", () => {
|
|
158
|
-
beforeEach(() => {
|
|
159
|
-
vi.clearAllMocks();
|
|
160
|
-
vi.useFakeTimers();
|
|
161
|
-
vi.setSystemTime(new Date("2024-06-15T10:30:00.000Z"));
|
|
162
|
-
});
|
|
163
|
-
afterEach(() => {
|
|
164
|
-
vi.restoreAllMocks();
|
|
165
|
-
vi.useRealTimers();
|
|
166
|
-
});
|
|
167
|
-
it("returns snapshot when .beads exists", () => {
|
|
168
|
-
mockExistsSync.mockImplementation(path => {
|
|
169
|
-
if (typeof path === "string" && path.endsWith(".beads"))
|
|
170
|
-
return true;
|
|
171
|
-
return false;
|
|
172
|
-
});
|
|
173
|
-
mockExecSync.mockReturnValueOnce("2").mockReturnValueOnce("1");
|
|
174
|
-
const result = captureStartupSnapshot();
|
|
175
|
-
expect(result).toEqual({
|
|
176
|
-
initialCount: 3,
|
|
177
|
-
timestamp: "2024-06-15T10:30:00.000Z",
|
|
178
|
-
type: "beads",
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
it("returns snapshot for todo.md workspace", () => {
|
|
182
|
-
mockExistsSync.mockImplementation(path => {
|
|
183
|
-
if (typeof path === "string" && path.endsWith(".beads"))
|
|
184
|
-
return false;
|
|
185
|
-
if (typeof path === "string" && path.endsWith("todo.md"))
|
|
186
|
-
return true;
|
|
187
|
-
return false;
|
|
188
|
-
});
|
|
189
|
-
mockReadFileSync.mockReturnValue(`
|
|
190
|
-
- [ ] Task 1
|
|
191
|
-
- [x] Task 2
|
|
192
|
-
`);
|
|
193
|
-
const result = captureStartupSnapshot();
|
|
194
|
-
expect(result).toEqual({
|
|
195
|
-
initialCount: 2,
|
|
196
|
-
timestamp: "2024-06-15T10:30:00.000Z",
|
|
197
|
-
type: "todo",
|
|
198
|
-
});
|
|
199
|
-
});
|
|
200
|
-
it("returns undefined when neither .beads nor todo.md exists", () => {
|
|
201
|
-
mockExistsSync.mockReturnValue(false);
|
|
202
|
-
const result = captureStartupSnapshot();
|
|
203
|
-
expect(result).toBeUndefined();
|
|
204
|
-
});
|
|
205
|
-
it("returns undefined when bd command fails", () => {
|
|
206
|
-
mockExistsSync.mockImplementation(path => {
|
|
207
|
-
if (typeof path === "string" && path.endsWith(".beads"))
|
|
208
|
-
return true;
|
|
209
|
-
return false;
|
|
210
|
-
});
|
|
211
|
-
mockExecSync.mockImplementation(() => {
|
|
212
|
-
throw new Error("Command failed");
|
|
213
|
-
});
|
|
214
|
-
const result = captureStartupSnapshot();
|
|
215
|
-
expect(result).toBeUndefined();
|
|
216
|
-
});
|
|
217
|
-
});
|
|
218
|
-
//# sourceMappingURL=getProgress.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getProgress.test.js","sourceRoot":"","sources":["../../src/lib/getProgress.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Get the prompt content, falling back to templates if .ralph/prompt.md doesn't exist.
|
|
3
|
-
* Uses the appropriate template based on the project setup:
|
|
4
|
-
* - If .beads directory exists OR no .ralph/todo.md: use prompt-beads.md
|
|
5
|
-
* - If .ralph/todo.md exists: use prompt-todos.md (todo-based workflow)
|
|
6
|
-
*/
|
|
7
|
-
export declare const getPromptContent: () => string;
|
|
8
|
-
//# sourceMappingURL=getPromptContent.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getPromptContent.d.ts","sourceRoot":"","sources":["../../src/lib/getPromptContent.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,QAAO,MAwBnC,CAAA"}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { readFileSync, existsSync } from "fs";
|
|
2
|
-
import { join, dirname } from "path";
|
|
3
|
-
import { fileURLToPath } from "url";
|
|
4
|
-
/**
|
|
5
|
-
* Get the prompt content, falling back to templates if .ralph/prompt.md doesn't exist.
|
|
6
|
-
* Uses the appropriate template based on the project setup:
|
|
7
|
-
* - If .beads directory exists OR no .ralph/todo.md: use prompt-beads.md
|
|
8
|
-
* - If .ralph/todo.md exists: use prompt-todos.md (todo-based workflow)
|
|
9
|
-
*/
|
|
10
|
-
export const getPromptContent = () => {
|
|
11
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
12
|
-
const ralphDir = join(process.cwd(), ".ralph");
|
|
13
|
-
const promptFile = join(ralphDir, "prompt.md");
|
|
14
|
-
const todoFile = join(ralphDir, "todo.md");
|
|
15
|
-
const beadsDir = join(process.cwd(), ".beads");
|
|
16
|
-
const templatesDir = join(__dirname, "..", "..", "templates");
|
|
17
|
-
// First, try to read from .ralph/prompt.md
|
|
18
|
-
if (existsSync(promptFile)) {
|
|
19
|
-
return readFileSync(promptFile, "utf-8");
|
|
20
|
-
}
|
|
21
|
-
// Fall back to templates based on project setup
|
|
22
|
-
const useBeadsTemplate = existsSync(beadsDir) || !existsSync(todoFile);
|
|
23
|
-
const templateFile = useBeadsTemplate ? "prompt-beads.md" : "prompt-todos.md";
|
|
24
|
-
const templatePath = join(templatesDir, templateFile);
|
|
25
|
-
if (existsSync(templatePath)) {
|
|
26
|
-
return readFileSync(templatePath, "utf-8");
|
|
27
|
-
}
|
|
28
|
-
// Last resort: return a minimal prompt
|
|
29
|
-
return "Work on the highest-priority task.";
|
|
30
|
-
};
|
|
31
|
-
//# sourceMappingURL=getPromptContent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getPromptContent.js","sourceRoot":"","sources":["../../src/lib/getPromptContent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC7C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AAEnC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAW,EAAE;IAC3C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAA;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;IAE7D,2CAA2C;IAC3C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAC1C,CAAC;IAED,gDAAgD;IAChD,MAAM,gBAAgB,GAAG,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;IACtE,MAAM,YAAY,GAAG,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,iBAAiB,CAAA;IAC7E,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;IAErD,IAAI,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,OAAO,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAC5C,CAAC;IAED,uCAAuC;IACvC,OAAO,oCAAoC,CAAA;AAC7C,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getTerminalSize.d.ts","sourceRoot":"","sources":["../../src/lib/getTerminalSize.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,wBAAgB,eAAe;AAC7B,kDAAkD;AAClD,MAAM,EAAE,GAAG;;;EAMZ"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/** Get the current terminal size with sensible defaults. */
|
|
2
|
-
export function getTerminalSize(
|
|
3
|
-
/** The stdout object from Ink's useStdout hook */
|
|
4
|
-
stdout) {
|
|
5
|
-
return {
|
|
6
|
-
columns: stdout?.columns ?? 80,
|
|
7
|
-
rows: stdout?.rows ?? 24,
|
|
8
|
-
};
|
|
9
|
-
}
|
|
10
|
-
//# sourceMappingURL=getTerminalSize.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getTerminalSize.js","sourceRoot":"","sources":["../../src/lib/getTerminalSize.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,MAAM,UAAU,eAAe;AAC7B,kDAAkD;AAClD,MAAW;IAEX,OAAO;QACL,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE;QAC9B,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE;KACzB,CAAA;AACH,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getTodoProgress.d.ts","sourceRoot":"","sources":["../../src/lib/getTodoProgress.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAK9C,qFAAqF;AACrF,eAAO,MAAM,eAAe,QAAO,YAkBlC,CAAA"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from "fs";
|
|
2
|
-
import { join } from "path";
|
|
3
|
-
const ralphDir = join(process.cwd(), ".ralph");
|
|
4
|
-
const todoFile = join(ralphDir, "todo.md");
|
|
5
|
-
/** Get progress for a todo.md workspace by counting checked and unchecked items. */
|
|
6
|
-
export const getTodoProgress = () => {
|
|
7
|
-
try {
|
|
8
|
-
const content = readFileSync(todoFile, "utf-8");
|
|
9
|
-
// Count unchecked items: - [ ]
|
|
10
|
-
const uncheckedMatches = content.match(/- \[ \]/g);
|
|
11
|
-
const unchecked = uncheckedMatches ? uncheckedMatches.length : 0;
|
|
12
|
-
// Count checked items: - [x] or - [X]
|
|
13
|
-
const checkedMatches = content.match(/- \[[xX]\]/g);
|
|
14
|
-
const checked = checkedMatches ? checkedMatches.length : 0;
|
|
15
|
-
const total = unchecked + checked;
|
|
16
|
-
return { type: "todo", completed: checked, total };
|
|
17
|
-
}
|
|
18
|
-
catch {
|
|
19
|
-
return { type: "none", completed: 0, total: 0 };
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
//# sourceMappingURL=getTodoProgress.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"getTodoProgress.js","sourceRoot":"","sources":["../../src/lib/getTodoProgress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAG3B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAA;AAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;AAE1C,qFAAqF;AACrF,MAAM,CAAC,MAAM,eAAe,GAAG,GAAiB,EAAE;IAChD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;QAE/C,+BAA+B;QAC/B,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAClD,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAEhE,sCAAsC;QACtC,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QACnD,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAE1D,MAAM,KAAK,GAAG,SAAS,GAAG,OAAO,CAAA;QAEjC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;IACjD,CAAC;AACH,CAAC,CAAA"}
|
package/dist/lib/insertTodo.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/** Inserts a todo item into the content, right after the "To do" header. */
|
|
2
|
-
export declare const insertTodo: (
|
|
3
|
-
/** The current content of the todo file */
|
|
4
|
-
content: string,
|
|
5
|
-
/** The description of the todo item to insert */
|
|
6
|
-
description: string) => string;
|
|
7
|
-
//# sourceMappingURL=insertTodo.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"insertTodo.d.ts","sourceRoot":"","sources":["../../src/lib/insertTodo.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,eAAO,MAAM,UAAU;AACrB,2CAA2C;AAC3C,SAAS,MAAM;AACf,iDAAiD;AACjD,aAAa,MAAM,KAClB,MAmBF,CAAA"}
|