@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.
- package/dist/index.js +2401 -5
- package/dist/index.js.map +1 -1
- package/package.json +9 -7
- package/templates/core-prompt.md +77 -0
- package/templates/skills/manage-tasks/SKILL.md +113 -0
- package/templates/workflow.md +46 -0
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -81
- package/dist/cli.js.map +0 -1
- package/dist/components/App.d.ts +0 -12
- package/dist/components/App.d.ts.map +0 -1
- package/dist/components/App.js +0 -14
- 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 -164
- 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 -107
- 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 -182
- 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 -413
- 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 -319
- package/dist/components/EventDisplay.test.js.map +0 -1
- package/dist/components/FullScreenLayout.d.ts +0 -14
- package/dist/components/FullScreenLayout.d.ts.map +0 -1
- package/dist/components/FullScreenLayout.js +0 -30
- package/dist/components/FullScreenLayout.js.map +0 -1
- package/dist/components/Header.d.ts +0 -9
- package/dist/components/Header.d.ts.map +0 -1
- package/dist/components/Header.js +0 -15
- 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 -3
- package/dist/components/InitRalph.d.ts.map +0 -1
- package/dist/components/InitRalph.js +0 -154
- package/dist/components/InitRalph.js.map +0 -1
- package/dist/components/IterationRunner.d.ts +0 -17
- package/dist/components/IterationRunner.d.ts.map +0 -1
- package/dist/components/IterationRunner.js +0 -620
- package/dist/components/IterationRunner.js.map +0 -1
- package/dist/components/IterationRunner.test.d.ts +0 -2
- package/dist/components/IterationRunner.test.d.ts.map +0 -1
- package/dist/components/IterationRunner.test.js +0 -129
- package/dist/components/IterationRunner.test.js.map +0 -1
- package/dist/components/JsonOutput.d.ts +0 -14
- package/dist/components/JsonOutput.d.ts.map +0 -1
- package/dist/components/JsonOutput.js +0 -246
- package/dist/components/JsonOutput.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 -50
- package/dist/components/ReplayLog.js.map +0 -1
- package/dist/components/StreamingText.d.ts +0 -7
- package/dist/components/StreamingText.d.ts.map +0 -1
- package/dist/components/StreamingText.js +0 -36
- 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 -86
- package/dist/components/StreamingText.test.js.map +0 -1
- package/dist/components/ToolUse.d.ts +0 -8
- package/dist/components/ToolUse.d.ts.map +0 -1
- package/dist/components/ToolUse.js +0 -10
- 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/eventToBlocks.d.ts +0 -16
- package/dist/components/eventToBlocks.d.ts.map +0 -1
- package/dist/components/eventToBlocks.js +0 -160
- 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/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/lib/MessageQueue.d.ts +0 -20
- package/dist/lib/MessageQueue.d.ts.map +0 -1
- package/dist/lib/MessageQueue.js +0 -89
- 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 -42
- package/dist/lib/StdinCommandHandler.d.ts.map +0 -1
- package/dist/lib/StdinCommandHandler.js +0 -102
- 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/addTodo.d.ts +0 -11
- package/dist/lib/addTodo.d.ts.map +0 -1
- package/dist/lib/addTodo.js +0 -65
- package/dist/lib/addTodo.js.map +0 -1
- package/dist/lib/beadsClient.d.ts +0 -52
- package/dist/lib/beadsClient.d.ts.map +0 -1
- package/dist/lib/beadsClient.js +0 -171
- package/dist/lib/beadsClient.js.map +0 -1
- package/dist/lib/debug.d.ts +0 -18
- package/dist/lib/debug.d.ts.map +0 -1
- package/dist/lib/debug.js +0 -44
- package/dist/lib/debug.js.map +0 -1
- package/dist/lib/formatContentBlock.d.ts +0 -10
- package/dist/lib/formatContentBlock.d.ts.map +0 -1
- package/dist/lib/formatContentBlock.js +0 -69
- package/dist/lib/formatContentBlock.js.map +0 -1
- package/dist/lib/getClaudeVersion.d.ts +0 -2
- package/dist/lib/getClaudeVersion.d.ts.map +0 -1
- package/dist/lib/getClaudeVersion.js +0 -17
- 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/getNextLogFile.d.ts +0 -12
- package/dist/lib/getNextLogFile.d.ts.map +0 -1
- package/dist/lib/getNextLogFile.js +0 -52
- 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 -65
- package/dist/lib/getNextLogFile.test.js.map +0 -1
- package/dist/lib/getOpenIssueCount.d.ts +0 -11
- package/dist/lib/getOpenIssueCount.d.ts.map +0 -1
- package/dist/lib/getOpenIssueCount.js +0 -31
- 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 -65
- package/dist/lib/getOpenIssueCount.test.js.map +0 -1
- package/dist/lib/getProgress.d.ts +0 -34
- package/dist/lib/getProgress.d.ts.map +0 -1
- package/dist/lib/getProgress.js +0 -131
- 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 -217
- package/dist/lib/getProgress.test.js.map +0 -1
- package/dist/lib/rel.d.ts +0 -2
- package/dist/lib/rel.d.ts.map +0 -1
- package/dist/lib/rel.js +0 -10
- 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 -36
- package/dist/lib/rel.test.js.map +0 -1
- package/dist/lib/shortenTempPaths.d.ts +0 -2
- package/dist/lib/shortenTempPaths.d.ts.map +0 -1
- package/dist/lib/shortenTempPaths.js +0 -7
- 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/useTerminalSize.d.ts +0 -5
- package/dist/lib/useTerminalSize.d.ts.map +0 -1
- package/dist/lib/useTerminalSize.js +0 -21
- package/dist/lib/useTerminalSize.js.map +0 -1
- package/templates/prompt-beads.md +0 -44
- package/templates/prompt-todos.md +0 -17
- 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"}
|
package/dist/lib/getProgress.js
DELETED
|
@@ -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 +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
package/dist/lib/rel.d.ts.map
DELETED
|
@@ -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
|
package/dist/lib/rel.js.map
DELETED
|
@@ -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"}
|
package/dist/lib/rel.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rel.test.d.ts","sourceRoot":"","sources":["../../src/lib/rel.test.ts"],"names":[],"mappings":""}
|
package/dist/lib/rel.test.js
DELETED
|
@@ -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
|
package/dist/lib/rel.test.js.map
DELETED
|
@@ -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 +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 +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
|