@herbcaudill/ralph 0.8.5 → 1.0.2

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.
Files changed (187) hide show
  1. package/dist/index.js +2401 -5
  2. package/dist/index.js.map +1 -1
  3. package/package.json +9 -7
  4. package/templates/core-prompt.md +77 -0
  5. package/templates/skills/manage-tasks/SKILL.md +113 -0
  6. package/templates/workflow.md +46 -0
  7. package/dist/cli.d.ts +0 -3
  8. package/dist/cli.d.ts.map +0 -1
  9. package/dist/cli.js +0 -81
  10. package/dist/cli.js.map +0 -1
  11. package/dist/components/App.d.ts +0 -12
  12. package/dist/components/App.d.ts.map +0 -1
  13. package/dist/components/App.js +0 -14
  14. package/dist/components/App.js.map +0 -1
  15. package/dist/components/EnhancedTextInput.d.ts +0 -22
  16. package/dist/components/EnhancedTextInput.d.ts.map +0 -1
  17. package/dist/components/EnhancedTextInput.js +0 -164
  18. package/dist/components/EnhancedTextInput.js.map +0 -1
  19. package/dist/components/EnhancedTextInput.test.d.ts +0 -2
  20. package/dist/components/EnhancedTextInput.test.d.ts.map +0 -1
  21. package/dist/components/EnhancedTextInput.test.js +0 -107
  22. package/dist/components/EnhancedTextInput.test.js.map +0 -1
  23. package/dist/components/EventDisplay.d.ts +0 -14
  24. package/dist/components/EventDisplay.d.ts.map +0 -1
  25. package/dist/components/EventDisplay.js +0 -182
  26. package/dist/components/EventDisplay.js.map +0 -1
  27. package/dist/components/EventDisplay.replay.test.d.ts +0 -2
  28. package/dist/components/EventDisplay.replay.test.d.ts.map +0 -1
  29. package/dist/components/EventDisplay.replay.test.js +0 -413
  30. package/dist/components/EventDisplay.replay.test.js.map +0 -1
  31. package/dist/components/EventDisplay.test.d.ts +0 -2
  32. package/dist/components/EventDisplay.test.d.ts.map +0 -1
  33. package/dist/components/EventDisplay.test.js +0 -319
  34. package/dist/components/EventDisplay.test.js.map +0 -1
  35. package/dist/components/FullScreenLayout.d.ts +0 -14
  36. package/dist/components/FullScreenLayout.d.ts.map +0 -1
  37. package/dist/components/FullScreenLayout.js +0 -30
  38. package/dist/components/FullScreenLayout.js.map +0 -1
  39. package/dist/components/Header.d.ts +0 -9
  40. package/dist/components/Header.d.ts.map +0 -1
  41. package/dist/components/Header.js +0 -15
  42. package/dist/components/Header.js.map +0 -1
  43. package/dist/components/Header.test.d.ts +0 -2
  44. package/dist/components/Header.test.d.ts.map +0 -1
  45. package/dist/components/Header.test.js +0 -27
  46. package/dist/components/Header.test.js.map +0 -1
  47. package/dist/components/InitRalph.d.ts +0 -3
  48. package/dist/components/InitRalph.d.ts.map +0 -1
  49. package/dist/components/InitRalph.js +0 -154
  50. package/dist/components/InitRalph.js.map +0 -1
  51. package/dist/components/IterationRunner.d.ts +0 -17
  52. package/dist/components/IterationRunner.d.ts.map +0 -1
  53. package/dist/components/IterationRunner.js +0 -620
  54. package/dist/components/IterationRunner.js.map +0 -1
  55. package/dist/components/IterationRunner.test.d.ts +0 -2
  56. package/dist/components/IterationRunner.test.d.ts.map +0 -1
  57. package/dist/components/IterationRunner.test.js +0 -129
  58. package/dist/components/IterationRunner.test.js.map +0 -1
  59. package/dist/components/JsonOutput.d.ts +0 -14
  60. package/dist/components/JsonOutput.d.ts.map +0 -1
  61. package/dist/components/JsonOutput.js +0 -246
  62. package/dist/components/JsonOutput.js.map +0 -1
  63. package/dist/components/ProgressBar.d.ts +0 -18
  64. package/dist/components/ProgressBar.d.ts.map +0 -1
  65. package/dist/components/ProgressBar.js +0 -30
  66. package/dist/components/ProgressBar.js.map +0 -1
  67. package/dist/components/ProgressBar.test.d.ts +0 -2
  68. package/dist/components/ProgressBar.test.d.ts.map +0 -1
  69. package/dist/components/ProgressBar.test.js +0 -55
  70. package/dist/components/ProgressBar.test.js.map +0 -1
  71. package/dist/components/ReplayLog.d.ts +0 -7
  72. package/dist/components/ReplayLog.d.ts.map +0 -1
  73. package/dist/components/ReplayLog.js +0 -50
  74. package/dist/components/ReplayLog.js.map +0 -1
  75. package/dist/components/StreamingText.d.ts +0 -7
  76. package/dist/components/StreamingText.d.ts.map +0 -1
  77. package/dist/components/StreamingText.js +0 -36
  78. package/dist/components/StreamingText.js.map +0 -1
  79. package/dist/components/StreamingText.test.d.ts +0 -2
  80. package/dist/components/StreamingText.test.d.ts.map +0 -1
  81. package/dist/components/StreamingText.test.js +0 -86
  82. package/dist/components/StreamingText.test.js.map +0 -1
  83. package/dist/components/ToolUse.d.ts +0 -8
  84. package/dist/components/ToolUse.d.ts.map +0 -1
  85. package/dist/components/ToolUse.js +0 -10
  86. package/dist/components/ToolUse.js.map +0 -1
  87. package/dist/components/ToolUse.test.d.ts +0 -2
  88. package/dist/components/ToolUse.test.d.ts.map +0 -1
  89. package/dist/components/ToolUse.test.js +0 -43
  90. package/dist/components/ToolUse.test.js.map +0 -1
  91. package/dist/components/eventToBlocks.d.ts +0 -16
  92. package/dist/components/eventToBlocks.d.ts.map +0 -1
  93. package/dist/components/eventToBlocks.js +0 -160
  94. package/dist/components/eventToBlocks.js.map +0 -1
  95. package/dist/components/eventToBlocks.test.d.ts +0 -2
  96. package/dist/components/eventToBlocks.test.d.ts.map +0 -1
  97. package/dist/components/eventToBlocks.test.js +0 -466
  98. package/dist/components/eventToBlocks.test.js.map +0 -1
  99. package/dist/index.d.ts +0 -2
  100. package/dist/index.d.ts.map +0 -1
  101. package/dist/lib/MessageQueue.d.ts +0 -20
  102. package/dist/lib/MessageQueue.d.ts.map +0 -1
  103. package/dist/lib/MessageQueue.js +0 -89
  104. package/dist/lib/MessageQueue.js.map +0 -1
  105. package/dist/lib/MessageQueue.test.d.ts +0 -2
  106. package/dist/lib/MessageQueue.test.d.ts.map +0 -1
  107. package/dist/lib/MessageQueue.test.js +0 -224
  108. package/dist/lib/MessageQueue.test.js.map +0 -1
  109. package/dist/lib/StdinCommandHandler.d.ts +0 -42
  110. package/dist/lib/StdinCommandHandler.d.ts.map +0 -1
  111. package/dist/lib/StdinCommandHandler.js +0 -102
  112. package/dist/lib/StdinCommandHandler.js.map +0 -1
  113. package/dist/lib/StdinCommandHandler.test.d.ts +0 -2
  114. package/dist/lib/StdinCommandHandler.test.d.ts.map +0 -1
  115. package/dist/lib/StdinCommandHandler.test.js +0 -93
  116. package/dist/lib/StdinCommandHandler.test.js.map +0 -1
  117. package/dist/lib/addTodo.d.ts +0 -11
  118. package/dist/lib/addTodo.d.ts.map +0 -1
  119. package/dist/lib/addTodo.js +0 -65
  120. package/dist/lib/addTodo.js.map +0 -1
  121. package/dist/lib/beadsClient.d.ts +0 -52
  122. package/dist/lib/beadsClient.d.ts.map +0 -1
  123. package/dist/lib/beadsClient.js +0 -171
  124. package/dist/lib/beadsClient.js.map +0 -1
  125. package/dist/lib/debug.d.ts +0 -18
  126. package/dist/lib/debug.d.ts.map +0 -1
  127. package/dist/lib/debug.js +0 -44
  128. package/dist/lib/debug.js.map +0 -1
  129. package/dist/lib/formatContentBlock.d.ts +0 -10
  130. package/dist/lib/formatContentBlock.d.ts.map +0 -1
  131. package/dist/lib/formatContentBlock.js +0 -69
  132. package/dist/lib/formatContentBlock.js.map +0 -1
  133. package/dist/lib/getClaudeVersion.d.ts +0 -2
  134. package/dist/lib/getClaudeVersion.d.ts.map +0 -1
  135. package/dist/lib/getClaudeVersion.js +0 -17
  136. package/dist/lib/getClaudeVersion.js.map +0 -1
  137. package/dist/lib/getClaudeVersion.test.d.ts +0 -2
  138. package/dist/lib/getClaudeVersion.test.d.ts.map +0 -1
  139. package/dist/lib/getClaudeVersion.test.js +0 -39
  140. package/dist/lib/getClaudeVersion.test.js.map +0 -1
  141. package/dist/lib/getNextLogFile.d.ts +0 -12
  142. package/dist/lib/getNextLogFile.d.ts.map +0 -1
  143. package/dist/lib/getNextLogFile.js +0 -52
  144. package/dist/lib/getNextLogFile.js.map +0 -1
  145. package/dist/lib/getNextLogFile.test.d.ts +0 -2
  146. package/dist/lib/getNextLogFile.test.d.ts.map +0 -1
  147. package/dist/lib/getNextLogFile.test.js +0 -65
  148. package/dist/lib/getNextLogFile.test.js.map +0 -1
  149. package/dist/lib/getOpenIssueCount.d.ts +0 -11
  150. package/dist/lib/getOpenIssueCount.d.ts.map +0 -1
  151. package/dist/lib/getOpenIssueCount.js +0 -31
  152. package/dist/lib/getOpenIssueCount.js.map +0 -1
  153. package/dist/lib/getOpenIssueCount.test.d.ts +0 -2
  154. package/dist/lib/getOpenIssueCount.test.d.ts.map +0 -1
  155. package/dist/lib/getOpenIssueCount.test.js +0 -65
  156. package/dist/lib/getOpenIssueCount.test.js.map +0 -1
  157. package/dist/lib/getProgress.d.ts +0 -34
  158. package/dist/lib/getProgress.d.ts.map +0 -1
  159. package/dist/lib/getProgress.js +0 -131
  160. package/dist/lib/getProgress.js.map +0 -1
  161. package/dist/lib/getProgress.test.d.ts +0 -2
  162. package/dist/lib/getProgress.test.d.ts.map +0 -1
  163. package/dist/lib/getProgress.test.js +0 -217
  164. package/dist/lib/getProgress.test.js.map +0 -1
  165. package/dist/lib/rel.d.ts +0 -2
  166. package/dist/lib/rel.d.ts.map +0 -1
  167. package/dist/lib/rel.js +0 -10
  168. package/dist/lib/rel.js.map +0 -1
  169. package/dist/lib/rel.test.d.ts +0 -2
  170. package/dist/lib/rel.test.d.ts.map +0 -1
  171. package/dist/lib/rel.test.js +0 -36
  172. package/dist/lib/rel.test.js.map +0 -1
  173. package/dist/lib/shortenTempPaths.d.ts +0 -2
  174. package/dist/lib/shortenTempPaths.d.ts.map +0 -1
  175. package/dist/lib/shortenTempPaths.js +0 -7
  176. package/dist/lib/shortenTempPaths.js.map +0 -1
  177. package/dist/lib/shortenTempPaths.test.d.ts +0 -2
  178. package/dist/lib/shortenTempPaths.test.d.ts.map +0 -1
  179. package/dist/lib/shortenTempPaths.test.js +0 -46
  180. package/dist/lib/shortenTempPaths.test.js.map +0 -1
  181. package/dist/lib/useTerminalSize.d.ts +0 -5
  182. package/dist/lib/useTerminalSize.d.ts.map +0 -1
  183. package/dist/lib/useTerminalSize.js +0 -21
  184. package/dist/lib/useTerminalSize.js.map +0 -1
  185. package/templates/prompt-beads.md +0 -44
  186. package/templates/prompt-todos.md +0 -17
  187. package/templates/todo.md +0 -9
@@ -1,65 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
- import { getOpenIssueCount, getDefaultIterations } 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
- describe("getDefaultIterations", () => {
32
- beforeEach(() => {
33
- vi.resetAllMocks();
34
- });
35
- afterEach(() => {
36
- vi.restoreAllMocks();
37
- });
38
- it("returns 120% of open issues (rounded up)", () => {
39
- vi.mocked(childProcess.execSync).mockReturnValue(JSON.stringify(Array(10).fill({ id: "x" })));
40
- expect(getDefaultIterations()).toBe(12); // 10 * 1.2 = 12
41
- });
42
- it("returns minimum of 10 when calculated value is lower", () => {
43
- vi.mocked(childProcess.execSync).mockReturnValue(JSON.stringify(Array(5).fill({ id: "x" })));
44
- expect(getDefaultIterations()).toBe(10); // 5 * 1.2 = 6, but min is 10
45
- });
46
- it("returns maximum of 100 when calculated value is higher", () => {
47
- vi.mocked(childProcess.execSync).mockReturnValue(JSON.stringify(Array(100).fill({ id: "x" })));
48
- expect(getDefaultIterations()).toBe(100); // 100 * 1.2 = 120, but max is 100
49
- });
50
- it("returns 10 when no open issues", () => {
51
- vi.mocked(childProcess.execSync).mockReturnValue("[]");
52
- expect(getDefaultIterations()).toBe(10);
53
- });
54
- it("returns 10 when bd command fails", () => {
55
- vi.mocked(childProcess.execSync).mockImplementation(() => {
56
- throw new Error("bd not found");
57
- });
58
- expect(getDefaultIterations()).toBe(10);
59
- });
60
- it("handles fractional calculations correctly", () => {
61
- vi.mocked(childProcess.execSync).mockReturnValue(JSON.stringify(Array(15).fill({ id: "x" })));
62
- expect(getDefaultIterations()).toBe(18); // 15 * 1.2 = 18
63
- });
64
- });
65
- //# sourceMappingURL=getOpenIssueCount.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getOpenIssueCount.test.js","sourceRoot":"","sources":["../../src/lib/getOpenIssueCount.test.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- export type ProgressData = {
2
- type: "beads" | "todo" | "none";
3
- /** Number of issues/tasks completed since startup */
4
- completed: number;
5
- /** Total issues/tasks seen since startup (initial + created since) */
6
- total: number;
7
- };
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 declare const getProgress: (initialCount: number, startupTimestamp: string) => ProgressData;
16
- export type StartupSnapshot = {
17
- /** Initial count of open + in_progress issues */
18
- initialCount: number;
19
- /** RFC3339 timestamp of when the snapshot was taken */
20
- timestamp: string;
21
- /** Type of workspace (beads or todo) */
22
- type: "beads" | "todo";
23
- };
24
- /**
25
- * Capture a startup snapshot for beads workspaces.
26
- * Call this once at startup to capture the baseline count and timestamp.
27
- * Returns undefined if not a beads workspace.
28
- */
29
- export declare const captureStartupSnapshot: () => StartupSnapshot | undefined;
30
- /**
31
- * @deprecated Use captureStartupSnapshot instead
32
- */
33
- export declare const getInitialBeadsCount: () => number | undefined;
34
- //# sourceMappingURL=getProgress.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getProgress.d.ts","sourceRoot":"","sources":["../../src/lib/getProgress.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;IAC/B,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAA;IACjB,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAMD;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,GAAI,cAAc,MAAM,EAAE,kBAAkB,MAAM,KAAG,YAY5E,CAAA;AA8DD,MAAM,MAAM,eAAe,GAAG;IAC5B,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAA;IACpB,uDAAuD;IACvD,SAAS,EAAE,MAAM,CAAA;IACjB,wCAAwC;IACxC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAA;CACvB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAAO,eAAe,GAAG,SAY3D,CAAA;AAoDD;;GAEG;AACH,eAAO,MAAM,oBAAoB,QAAO,MAAM,GAAG,SAGhD,CAAA"}
@@ -1,131 +0,0 @@
1
- import { existsSync, readFileSync } from "fs";
2
- import { join } from "path";
3
- import { execSync } from "child_process";
4
- const beadsDir = join(process.cwd(), ".beads");
5
- const ralphDir = join(process.cwd(), ".ralph");
6
- const todoFile = join(ralphDir, "todo.md");
7
- /**
8
- * Get progress data from the workspace.
9
- *
10
- * For beads workspaces: Uses timestamp-based counting to accurately track
11
- * issues closed and created since startup.
12
- * For todo.md workspaces: completed = checked items, total = all items
13
- */
14
- export const getProgress = (initialCount, startupTimestamp) => {
15
- // Check for beads workspace first
16
- if (existsSync(beadsDir)) {
17
- return getBeadsProgress(initialCount, startupTimestamp);
18
- }
19
- // Check for todo.md
20
- if (existsSync(todoFile)) {
21
- return getTodoProgress();
22
- }
23
- return { type: "none", completed: 0, total: 0 };
24
- };
25
- const getBeadsProgress = (initialCount, startupTimestamp) => {
26
- try {
27
- // Count issues created since startup
28
- const createdSinceStartup = parseInt(execSync(`bd count --created-after="${startupTimestamp}"`, {
29
- encoding: "utf-8",
30
- stdio: ["pipe", "pipe", "pipe"],
31
- }).trim(), 10);
32
- // Count current open + in_progress issues
33
- const currentOpen = parseInt(execSync("bd count --status=open", {
34
- encoding: "utf-8",
35
- stdio: ["pipe", "pipe", "pipe"],
36
- }).trim(), 10);
37
- const currentInProgress = parseInt(execSync("bd count --status=in_progress", {
38
- encoding: "utf-8",
39
- stdio: ["pipe", "pipe", "pipe"],
40
- }).trim(), 10);
41
- const currentRemaining = currentOpen + currentInProgress;
42
- // Total = initial open+in_progress + any new issues created
43
- const total = initialCount + createdSinceStartup;
44
- // Completed = total - remaining (accounts for issues closed by any means)
45
- const completed = total - currentRemaining;
46
- return { type: "beads", completed, total };
47
- }
48
- catch {
49
- // If bd command fails, return no progress
50
- return { type: "none", completed: 0, total: 0 };
51
- }
52
- };
53
- const getTodoProgress = () => {
54
- try {
55
- const content = readFileSync(todoFile, "utf-8");
56
- // Count unchecked items: - [ ]
57
- const uncheckedMatches = content.match(/- \[ \]/g);
58
- const unchecked = uncheckedMatches ? uncheckedMatches.length : 0;
59
- // Count checked items: - [x] or - [X]
60
- const checkedMatches = content.match(/- \[[xX]\]/g);
61
- const checked = checkedMatches ? checkedMatches.length : 0;
62
- const total = unchecked + checked;
63
- return { type: "todo", completed: checked, total };
64
- }
65
- catch {
66
- return { type: "none", completed: 0, total: 0 };
67
- }
68
- };
69
- /**
70
- * Capture a startup snapshot for beads workspaces.
71
- * Call this once at startup to capture the baseline count and timestamp.
72
- * Returns undefined if not a beads workspace.
73
- */
74
- export const captureStartupSnapshot = () => {
75
- // Check for beads workspace
76
- if (existsSync(beadsDir)) {
77
- return captureBeadsSnapshot();
78
- }
79
- // Check for todo.md workspace
80
- if (existsSync(todoFile)) {
81
- return captureTodoSnapshot();
82
- }
83
- return undefined;
84
- };
85
- const captureBeadsSnapshot = () => {
86
- try {
87
- const timestamp = new Date().toISOString();
88
- const openCount = parseInt(execSync("bd count --status=open", {
89
- encoding: "utf-8",
90
- stdio: ["pipe", "pipe", "pipe"],
91
- }).trim(), 10);
92
- const inProgressCount = parseInt(execSync("bd count --status=in_progress", {
93
- encoding: "utf-8",
94
- stdio: ["pipe", "pipe", "pipe"],
95
- }).trim(), 10);
96
- return {
97
- initialCount: openCount + inProgressCount,
98
- timestamp,
99
- type: "beads",
100
- };
101
- }
102
- catch {
103
- return undefined;
104
- }
105
- };
106
- const captureTodoSnapshot = () => {
107
- try {
108
- const content = readFileSync(todoFile, "utf-8");
109
- // Count all items (checked + unchecked)
110
- const uncheckedMatches = content.match(/- \[ \]/g);
111
- const unchecked = uncheckedMatches ? uncheckedMatches.length : 0;
112
- const checkedMatches = content.match(/- \[[xX]\]/g);
113
- const checked = checkedMatches ? checkedMatches.length : 0;
114
- return {
115
- initialCount: unchecked + checked,
116
- timestamp: new Date().toISOString(),
117
- type: "todo",
118
- };
119
- }
120
- catch {
121
- return undefined;
122
- }
123
- };
124
- /**
125
- * @deprecated Use captureStartupSnapshot instead
126
- */
127
- export const getInitialBeadsCount = () => {
128
- const snapshot = captureStartupSnapshot();
129
- return snapshot?.initialCount;
130
- };
131
- //# sourceMappingURL=getProgress.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getProgress.js","sourceRoot":"","sources":["../../src/lib/getProgress.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=getProgress.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getProgress.test.d.ts","sourceRoot":"","sources":["../../src/lib/getProgress.test.ts"],"names":[],"mappings":""}
@@ -1,217 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
- import { getProgress, captureStartupSnapshot } from "./getProgress.js";
3
- import * as fs from "fs";
4
- import * as child_process from "child_process";
5
- vi.mock("fs");
6
- vi.mock("child_process");
7
- const mockExistsSync = vi.mocked(fs.existsSync);
8
- const mockReadFileSync = vi.mocked(fs.readFileSync);
9
- const mockExecSync = vi.mocked(child_process.execSync);
10
- describe("getProgress", () => {
11
- beforeEach(() => {
12
- vi.clearAllMocks();
13
- });
14
- afterEach(() => {
15
- vi.restoreAllMocks();
16
- });
17
- describe("with beads workspace", () => {
18
- it("returns beads progress with timestamp-based counting", () => {
19
- mockExistsSync.mockImplementation(path => {
20
- if (typeof path === "string" && path.endsWith(".beads"))
21
- return true;
22
- return false;
23
- });
24
- // Calls: created-after, status=open, status=in_progress
25
- // 1 created, 3 open, 1 in_progress → completed = (5+1) - (3+1) = 2
26
- mockExecSync.mockReturnValueOnce("1").mockReturnValueOnce("3").mockReturnValueOnce("1");
27
- const result = getProgress(5, "2024-01-01T00:00:00.000Z");
28
- expect(result.type).toBe("beads");
29
- expect(result.completed).toBe(2); // total(6) - remaining(4) = 2
30
- expect(result.total).toBe(6); // 5 initial + 1 created
31
- });
32
- it("handles no progress (0 closed, 0 created)", () => {
33
- mockExistsSync.mockImplementation(path => {
34
- if (typeof path === "string" && path.endsWith(".beads"))
35
- return true;
36
- return false;
37
- });
38
- // Calls: created-after, status=open, status=in_progress
39
- // 0 created, 3 open, 2 in_progress → completed = 5 - 5 = 0
40
- mockExecSync.mockReturnValueOnce("0").mockReturnValueOnce("3").mockReturnValueOnce("2");
41
- const result = getProgress(5, "2024-01-01T00:00:00.000Z");
42
- expect(result.type).toBe("beads");
43
- expect(result.completed).toBe(0);
44
- expect(result.total).toBe(5);
45
- });
46
- it("handles all closed", () => {
47
- mockExistsSync.mockImplementation(path => {
48
- if (typeof path === "string" && path.endsWith(".beads"))
49
- return true;
50
- return false;
51
- });
52
- // Calls: created-after, status=open, status=in_progress
53
- // 0 created, 0 open, 0 in_progress → completed = 5 - 0 = 5
54
- mockExecSync.mockReturnValueOnce("0").mockReturnValueOnce("0").mockReturnValueOnce("0");
55
- const result = getProgress(5, "2024-01-01T00:00:00.000Z");
56
- expect(result.type).toBe("beads");
57
- expect(result.completed).toBe(5);
58
- expect(result.total).toBe(5);
59
- });
60
- it("returns none when bd command fails", () => {
61
- mockExistsSync.mockImplementation(path => {
62
- if (typeof path === "string" && path.endsWith(".beads"))
63
- return true;
64
- return false;
65
- });
66
- mockExecSync.mockImplementation(() => {
67
- throw new Error("Command failed");
68
- });
69
- const result = getProgress(5, "2024-01-01T00:00:00.000Z");
70
- expect(result.type).toBe("none");
71
- });
72
- });
73
- describe("with todo.md workspace", () => {
74
- it("returns todo progress when todo.md exists", () => {
75
- mockExistsSync.mockImplementation(path => {
76
- if (typeof path === "string" && path.endsWith(".beads"))
77
- return false;
78
- if (typeof path === "string" && path.endsWith("todo.md"))
79
- return true;
80
- return false;
81
- });
82
- mockReadFileSync.mockReturnValue(`
83
- ### To do
84
- - [ ] Task 1
85
- - [ ] Task 2
86
- - [x] Task 3
87
- - [X] Task 4
88
-
89
- ### Done
90
- `);
91
- const result = getProgress(4, "2024-01-01T00:00:00.000Z");
92
- expect(result.type).toBe("todo");
93
- expect(result.completed).toBe(2); // 2 checked
94
- expect(result.total).toBe(4);
95
- });
96
- it("handles all unchecked items", () => {
97
- mockExistsSync.mockImplementation(path => {
98
- if (typeof path === "string" && path.endsWith(".beads"))
99
- return false;
100
- if (typeof path === "string" && path.endsWith("todo.md"))
101
- return true;
102
- return false;
103
- });
104
- mockReadFileSync.mockReturnValue(`
105
- - [ ] Task 1
106
- - [ ] Task 2
107
- - [ ] Task 3
108
- `);
109
- const result = getProgress(3, "2024-01-01T00:00:00.000Z");
110
- expect(result.type).toBe("todo");
111
- expect(result.completed).toBe(0);
112
- expect(result.total).toBe(3);
113
- });
114
- it("handles all checked items", () => {
115
- mockExistsSync.mockImplementation(path => {
116
- if (typeof path === "string" && path.endsWith(".beads"))
117
- return false;
118
- if (typeof path === "string" && path.endsWith("todo.md"))
119
- return true;
120
- return false;
121
- });
122
- mockReadFileSync.mockReturnValue(`
123
- - [x] Task 1
124
- - [X] Task 2
125
- `);
126
- const result = getProgress(2, "2024-01-01T00:00:00.000Z");
127
- expect(result.type).toBe("todo");
128
- expect(result.completed).toBe(2);
129
- expect(result.total).toBe(2);
130
- });
131
- it("handles empty todo file", () => {
132
- mockExistsSync.mockImplementation(path => {
133
- if (typeof path === "string" && path.endsWith(".beads"))
134
- return false;
135
- if (typeof path === "string" && path.endsWith("todo.md"))
136
- return true;
137
- return false;
138
- });
139
- mockReadFileSync.mockReturnValue("");
140
- const result = getProgress(0, "2024-01-01T00:00:00.000Z");
141
- expect(result.type).toBe("todo");
142
- expect(result.completed).toBe(0);
143
- expect(result.total).toBe(0);
144
- });
145
- });
146
- describe("with no workspace", () => {
147
- it("returns none when neither .beads nor todo.md exists", () => {
148
- mockExistsSync.mockReturnValue(false);
149
- const result = getProgress(0, "2024-01-01T00:00:00.000Z");
150
- expect(result.type).toBe("none");
151
- expect(result.completed).toBe(0);
152
- expect(result.total).toBe(0);
153
- });
154
- });
155
- });
156
- describe("captureStartupSnapshot", () => {
157
- beforeEach(() => {
158
- vi.clearAllMocks();
159
- vi.useFakeTimers();
160
- vi.setSystemTime(new Date("2024-06-15T10:30:00.000Z"));
161
- });
162
- afterEach(() => {
163
- vi.restoreAllMocks();
164
- vi.useRealTimers();
165
- });
166
- it("returns snapshot when .beads exists", () => {
167
- mockExistsSync.mockImplementation(path => {
168
- if (typeof path === "string" && path.endsWith(".beads"))
169
- return true;
170
- return false;
171
- });
172
- mockExecSync.mockReturnValueOnce("2").mockReturnValueOnce("1");
173
- const result = captureStartupSnapshot();
174
- expect(result).toEqual({
175
- initialCount: 3,
176
- timestamp: "2024-06-15T10:30:00.000Z",
177
- type: "beads",
178
- });
179
- });
180
- it("returns snapshot for todo.md workspace", () => {
181
- mockExistsSync.mockImplementation(path => {
182
- if (typeof path === "string" && path.endsWith(".beads"))
183
- return false;
184
- if (typeof path === "string" && path.endsWith("todo.md"))
185
- return true;
186
- return false;
187
- });
188
- mockReadFileSync.mockReturnValue(`
189
- - [ ] Task 1
190
- - [x] Task 2
191
- `);
192
- const result = captureStartupSnapshot();
193
- expect(result).toEqual({
194
- initialCount: 2,
195
- timestamp: "2024-06-15T10:30:00.000Z",
196
- type: "todo",
197
- });
198
- });
199
- it("returns undefined when neither .beads nor todo.md exists", () => {
200
- mockExistsSync.mockReturnValue(false);
201
- const result = captureStartupSnapshot();
202
- expect(result).toBeUndefined();
203
- });
204
- it("returns undefined when bd command fails", () => {
205
- mockExistsSync.mockImplementation(path => {
206
- if (typeof path === "string" && path.endsWith(".beads"))
207
- return true;
208
- return false;
209
- });
210
- mockExecSync.mockImplementation(() => {
211
- throw new Error("Command failed");
212
- });
213
- const result = captureStartupSnapshot();
214
- expect(result).toBeUndefined();
215
- });
216
- });
217
- //# 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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"}
package/dist/lib/rel.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export declare const rel: (path: string) => string;
2
- //# sourceMappingURL=rel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rel.d.ts","sourceRoot":"","sources":["../../src/lib/rel.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,GAAG,GAAI,MAAM,MAAM,WAM/B,CAAA"}
package/dist/lib/rel.js DELETED
@@ -1,10 +0,0 @@
1
- import { relative } from "path";
2
- const cwd = process.cwd();
3
- export const rel = (path) => {
4
- // For temp files, just show the filename
5
- if (path.includes("/var/folders/") || path.includes("/tmp/")) {
6
- return path.split("/").pop() || path;
7
- }
8
- return relative(cwd, path) || path;
9
- };
10
- //# sourceMappingURL=rel.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rel.js","sourceRoot":"","sources":["../../src/lib/rel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;AAE/B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;AAEzB,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE;IAClC,yCAAyC;IACzC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAA;IACtC,CAAC;IACD,OAAO,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,IAAI,CAAA;AACpC,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=rel.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rel.test.d.ts","sourceRoot":"","sources":["../../src/lib/rel.test.ts"],"names":[],"mappings":""}
@@ -1,36 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { rel } from "./rel.js";
3
- describe("rel", () => {
4
- it("converts absolute path to relative path", () => {
5
- const absolutePath = `${process.cwd()}/src/lib/rel.ts`;
6
- const result = rel(absolutePath);
7
- expect(result).toBe("src/lib/rel.ts");
8
- });
9
- it("returns just filename for /var/folders/ temp paths", () => {
10
- const tempPath = "/var/folders/xy/abc123/T/temp-file.txt";
11
- const result = rel(tempPath);
12
- expect(result).toBe("temp-file.txt");
13
- });
14
- it("returns just filename for /tmp/ paths", () => {
15
- const tmpPath = "/tmp/some-temp-file.json";
16
- const result = rel(tmpPath);
17
- expect(result).toBe("some-temp-file.json");
18
- });
19
- it("returns original path if already relative", () => {
20
- const relativePath = "src/lib/rel.ts";
21
- const result = rel(relativePath);
22
- expect(result).toBe(relativePath);
23
- });
24
- it("handles path outside current directory", () => {
25
- const outsidePath = "/completely/different/path/file.ts";
26
- const result = rel(outsidePath);
27
- // Should return relative path from cwd (will have ../.. etc)
28
- expect(result).toContain("file.ts");
29
- });
30
- it("handles root directory path", () => {
31
- const rootPath = "/";
32
- const result = rel(rootPath);
33
- expect(result).toBeTruthy();
34
- });
35
- });
36
- //# sourceMappingURL=rel.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rel.test.js","sourceRoot":"","sources":["../../src/lib/rel.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAE9B,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACnB,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,YAAY,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,iBAAiB,CAAA;QACtD,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,CAAA;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,QAAQ,GAAG,wCAAwC,CAAA;QACzD,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,OAAO,GAAG,0BAA0B,CAAA;QAC1C,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAA;QAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,YAAY,GAAG,gBAAgB,CAAA;QACrC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,CAAA;QAChC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,WAAW,GAAG,oCAAoC,CAAA;QACxD,MAAM,MAAM,GAAG,GAAG,CAAC,WAAW,CAAC,CAAA;QAC/B,6DAA6D;QAC7D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,QAAQ,GAAG,GAAG,CAAA;QACpB,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC5B,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,CAAA;IAC7B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export declare const shortenTempPaths: (text: string) => string;
2
- //# sourceMappingURL=shortenTempPaths.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shortenTempPaths.d.ts","sourceRoot":"","sources":["../../src/lib/shortenTempPaths.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,WAK5C,CAAA"}
@@ -1,7 +0,0 @@
1
- export const shortenTempPaths = (text) => {
2
- // Replace temp file paths with just the filename
3
- return text
4
- .replace(/\/var\/folders\/[^\s]+/g, match => match.split("/").pop() || match)
5
- .replace(/\/tmp\/[^\s]+/g, match => match.split("/").pop() || match);
6
- };
7
- //# sourceMappingURL=shortenTempPaths.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shortenTempPaths.js","sourceRoot":"","sources":["../../src/lib/shortenTempPaths.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,IAAY,EAAE,EAAE;IAC/C,iDAAiD;IACjD,OAAO,IAAI;SACR,OAAO,CAAC,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC;SAC5E,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,CAAA;AACxE,CAAC,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=shortenTempPaths.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shortenTempPaths.test.d.ts","sourceRoot":"","sources":["../../src/lib/shortenTempPaths.test.ts"],"names":[],"mappings":""}
@@ -1,46 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { shortenTempPaths } from "./shortenTempPaths.js";
3
- describe("shortenTempPaths", () => {
4
- it("shortens /var/folders/ paths to just filename", () => {
5
- const text = "Reading file /var/folders/xy/abc123/T/temp-file.txt";
6
- const result = shortenTempPaths(text);
7
- expect(result).toBe("Reading file temp-file.txt");
8
- });
9
- it("shortens /tmp/ paths to just filename", () => {
10
- const text = "Writing to /tmp/output.json";
11
- const result = shortenTempPaths(text);
12
- expect(result).toBe("Writing to output.json");
13
- });
14
- it("handles multiple temp paths in one string", () => {
15
- const text = "Copying /var/folders/xy/abc123/T/input.txt to /tmp/output.txt";
16
- const result = shortenTempPaths(text);
17
- expect(result).toBe("Copying input.txt to output.txt");
18
- });
19
- it("preserves non-temp paths", () => {
20
- const text = "Reading /home/user/project/file.ts";
21
- const result = shortenTempPaths(text);
22
- expect(result).toBe("Reading /home/user/project/file.ts");
23
- });
24
- it("handles text with no temp paths", () => {
25
- const text = "This is just a regular string";
26
- const result = shortenTempPaths(text);
27
- expect(result).toBe("This is just a regular string");
28
- });
29
- it("handles empty string", () => {
30
- const result = shortenTempPaths("");
31
- expect(result).toBe("");
32
- });
33
- it("handles path with spaces in filename", () => {
34
- const text = "File at /var/folders/xy/abc/T/my file.txt exists";
35
- const result = shortenTempPaths(text);
36
- // The regex matches until whitespace, so 'my file.txt' becomes just 'my'
37
- expect(result).toBe("File at my file.txt exists");
38
- });
39
- it("handles path with trailing slash", () => {
40
- const text = "Directory /var/folders/xy/abc123/T/";
41
- const result = shortenTempPaths(text);
42
- // Path ends with /, so split('/').pop() returns empty string, regex leaves it unchanged
43
- expect(result).toBe("Directory /var/folders/xy/abc123/T/");
44
- });
45
- });
46
- //# sourceMappingURL=shortenTempPaths.test.js.map