chore(release): bump version to v5.7.1

This commit is contained in:
gaebal-gajae committed 2026-10-13 01:09:54 +00:00
1 parent 0534f86b75
commit a1cc2560a4
277 files changed
+5820 -1142

No files matched your search

+2 -2
View File
@@ -10,7 +10,7 @@
{
"name": "oh-my-claudecode",
"description": "Claude Code native multi-agent orchestration with intelligent model routing across agents and skills. Zero learning curve. Maximum power.",
"version": "5.7.0",
"version": "5.7.1",
"author": {
"name": "Yeachan Heo",
"email": "hurrc04@gmail.com"
@@ -27,5 +27,5 @@
]
}
],
"version": "5.7.0"
"version": "5.7.1"
}
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "oh-my-claudecode",
"version": "5.7.0",
"version": "5.7.1",
"description": "Multi-agent orchestration system for Claude Code",
"author": {
"name": "oh-my-claudecode contributors"
+1 -1
View File
@@ -1,5 +1,5 @@
<!-- OMC:START -->
<!-- OMC:VERSION:5.7.0 -->
<!-- OMC:VERSION:5.7.1 -->
# oh-my-claudecode - Intelligent Multi-Agent Orchestration
+12 -89
View File
@@ -1,99 +1,28 @@
# oh-my-claudecode v5.7.0: show Claude Code, tighten skill prose, rename shipyard glossary
# oh-my-claudecode v5.7.1: Bug Fixes
## Release Notes
Release with **4 new features**, **45 bug fixes**, **9 other changes** across **59 merged PRs**.
Release with **3 bug fixes**, **1 other change** across **4 merged PRs**.
### Highlights
- **feat(hud): show Claude Code effort level** (#4249) — thanks @bengry
- **feat(skills): tighten skill prose and prompt guardrails** (#4271) — thanks @pangpang778
- **feat: rename shipyard glossary slot CONTEXT.md to GLOSSARY.md** (#4273) — thanks @pangpang778
- **feat(skills): add session flow map** (#4319)
### New Features
- **feat(hud): show Claude Code effort level** (#4249) — thanks @bengry
- **feat(skills): tighten skill prose and prompt guardrails** (#4271) — thanks @pangpang778
- **feat: rename shipyard glossary slot CONTEXT.md to GLOSSARY.md** (#4273) — thanks @pangpang778
- **feat(skills): add session flow map** (#4319)
- **fix(lsp_diagnostics_directory): resolve local tsc binary for Windows .cmd shim support** (#4332)
- **fix(team): remove committed artifact and add env file cleanup test (#4330 follow-up)** (#4334)
- **fix(team): clean up env file when guarded split execution fails (#4330)** (#4330)
### Bug Fixes
- **fix(hud): render todos from TaskCreate/TaskUpdate** (#4243)
- **fix(hooks): clear autopilot state armed from sanitized pasted-echo prompt** (#4251)
- **fix(worktree-paths): accept Windows session cwd in a repo subdirectory** (#4255)
- **fix(antigravity): allow Windows headless and pass prompt as single argv** (#4259)
- **fix(ci): drop generated build artifacts committed by #4259** (#4260)
- **fix(cache): prevent orphaned version directories from being selected** (#4265)
- **fix: remove /tmp/omc-jev-* temp directories after use** (#4268)
- **fix(team): stabilize Cursor lifecycle and centralized state resolution** (#4272) — thanks @iyoda
- **fix(permission-handler): validate git heredoc commands** (#4280)
- **fix(omc-doctor): preserve custom hooks in settings** (#4281)
- **fix: make user settings opt-in for AFK links** (#4282)
- **fix: avoid persisting tool failure secrets** (#4284)
- **fix: preserve JSONC comment token boundaries** (#4285) — thanks @rudycelekli
- **fix: reject payloads without a JSON representation** (#4286) — thanks @rudycelekli
- **fix: measure ANSI CSI controls with private and colon parameters** (#4287) — thanks @rudycelekli
- **fix: reject complete IPv6 local ranges in SSRF guard** (#4288) — thanks @rudycelekli
- **fix: preserve custom notes with colliding delimiter text** (#4289) — thanks @rudycelekli
- **fix: pass literal git tag arguments without shell expansion** (#4290) — thanks @rudycelekli
- **fix: match exact Azure DevOps host identities** (#4291) — thanks @rudycelekli
- **fix: keep transcript context usage within a complete frame** (#4292) — thanks @rudycelekli
- **fix: skip incomplete version-manager Node installations** (#4293) — thanks @rudycelekli
- **fix(notifications): escape values in JSON webhook templates** (#4295) — thanks @rudycelekli
- **fix(providers): resolve cwd before caching Git remotes** (#4296) — thanks @rudycelekli
- **fix(mcp): avoid false Codex registry mismatch for type fields** (#4297)
- **fix(cache): preserve versions when active redirect targets are unusable** (#4298) — thanks @rudycelekli
- **fix(cache): fail closed when occupancy records cannot be read** (#4299) — thanks @rudycelekli
- **fix(notifications): ignore inherited template variable properties** (#4300) — thanks @rudycelekli
- **fix(notifications): validate custom integration configuration shapes** (#4301) — thanks @rudycelekli
- **fix(hud): drain custom rate provider diagnostic stderr** (#4302) — thanks @rudycelekli
- **fix(hud): cap completed task history while preserving active tasks** (#4303) — thanks @rudycelekli
- **fix(hud): key custom provider cache by command and periods** (#4304) — thanks @rudycelekli
- **fix(hud): encode directory hyperlinks and escape filename controls** (#4305) — thanks @rudycelekli
- **fix(hud): use visible text for ANSI truncation and slicing** (#4306) — thanks @rudycelekli
- **fix(cli): escape transcript controls in session search terminal output** (#4307) — thanks @rudycelekli
- **fix(notifications): normalize carriage returns before reply injection** (#4308) — thanks @rudycelekli
- **fix: fail directory diagnostics on compiler invocation errors** (#4309) — thanks @rudycelekli
- **fix: count Unicode characters in team usage records** (#4310) — thanks @rudycelekli
- **fix(notifications): honor ports in Telegram proxy exclusions** (#4311) — thanks @rudycelekli
- **fix(notifications): preserve whitespace in tmux session names** (#4312) — thanks @rudycelekli
- **fix: resolve local LSP file URIs with native paths** (#4313) — thanks @rudycelekli
- **fix(notifications): atomically rewrite the reply registry** (#4314) — thanks @rudycelekli
- **fix: skip invalid team usage log records** (#4315) — thanks @rudycelekli
- **fix: resume panes only after confirmed quota recovery** (#4316) — thanks @rudycelekli
- **fix(jev): harden sweep ownership and hourly locking** (#4320)
- **fix: bound PostToolUseFailure lock work** (#4322)
### Refactoring
- **refactor(shipyard): slim chain artifacts to tracker issues and lazy surfaces** (#4274) — thanks @pangpang778
- **fix(lsp_diagnostics_directory): resolve local tsc binary for Windows .cmd shim support** (#4332)
- **fix(team): remove committed artifact and add env file cleanup test (#4330 follow-up)** (#4334)
- **fix(team): clean up env file when guarded split execution fails (#4330)** (#4330)
### Other Changes
- **Fix #4244: wiki-session-end imports a lean foreground bootstrap so the SessionEnd hook stays inside the 300 ms budget** (#4246) — thanks @RobinNorberg
- **Fix #4245: team shutdown keeps the active reservation when the start CLI has exited** (#4247) — thanks @RobinNorberg
- **Fix #4252: detached omc team session creation fails because the -F format is #-escaped** (#4253) — thanks @smpark00
- **Fix #4256: enforce ralph hardMaxIterations in the Stop hook scripts** (#4257) — thanks @smpark00
- **Fix #4261: cmux team ownership verification with tmux-compat and ref/UUID mismatch** (#4262)
- **Fix #4267: Generate shell-appropriate tmux guard conditions for native Windows** (#4269)
- **Fix #4276: restrict permission auto-approval** (#4283)
- **Fix keyword detection in attributed paste blocks** (#4318)
- **test: cover stale PostToolUseFailure fallback locks** (#4324)
- **ci: authorize generated artifacts for v5.7.0 back-merge (PR #4328)**
### Stats
- **59 PRs merged** | **4 new features** | **45 bug fixes** | **0 security/hardening improvements** | **9 other changes**
### External Contributors
- @bengry: #4249
- @iyoda: #4272
- @pangpang778: #4271, #4273, #4274
- @RobinNorberg: #4246, #4247
- @rudycelekli: #4285, #4286, #4287, #4288, #4289, #4290, #4291, #4292, #4293, #4295, #4296, #4298, #4299, #4300, #4301, #4302, #4303, #4304, #4305, #4306, #4307, #4308, #4309, #4310, #4311, #4312, #4313, #4314, #4315, #4316
- @smpark00: #4253, #4257
- **4 PRs merged** | **0 new features** | **3 bug fixes** | **0 security/hardening improvements** | **1 other change**
### Install / Update
@@ -102,7 +31,7 @@ The npm CLI and the Claude Code marketplace/plugin are separate install tracks,
**CLI / runtime:**
```bash
npm install -g oh-my-claude-sisyphus@5.7.0
npm install -g oh-my-claude-sisyphus@5.7.1
```
**Claude Code plugin:**
@@ -111,10 +40,4 @@ npm install -g oh-my-claude-sisyphus@5.7.0
/plugin marketplace update omc
```
**Full Changelog**: https://github.com/Yeachan-Heo/oh-my-claudecode/compare/v5.6.2...v5.7.0
## Contributors
Thank you to all contributors who made this release possible!
@bengry @iyoda @pangpang778 @RobinNorberg @rudycelekli @smpark00 @Yeachan-Heo
**Full Changelog**: https://github.com/Yeachan-Heo/oh-my-claudecode/compare/v5.7.0...v5.7.1
+12 -81
View File
@@ -1,96 +1,27 @@
# oh-my-claudecode v5.7.0: show Claude Code, tighten skill prose, rename shipyard glossary
# oh-my-claudecode v5.7.1: Bug Fixes
## Release Notes
Release with **4 new features**, **45 bug fixes**, **9 other changes** across **59 merged PRs**.
Release with **4 bug fixes**, **1 other change** across **5 merged PRs**.
### Highlights
- **feat(hud): show Claude Code effort level** (#4249) — thanks @bengry
- **feat(skills): tighten skill prose and prompt guardrails** (#4271) — thanks @pangpang778
- **feat: rename shipyard glossary slot CONTEXT.md to GLOSSARY.md** (#4273) — thanks @pangpang778
- **feat(skills): add session flow map** (#4319)
### New Features
- **feat(hud): show Claude Code effort level** (#4249) — thanks @bengry
- **feat(skills): tighten skill prose and prompt guardrails** (#4271) — thanks @pangpang778
- **feat: rename shipyard glossary slot CONTEXT.md to GLOSSARY.md** (#4273) — thanks @pangpang778
- **feat(skills): add session flow map** (#4319)
- **Fix #4331: directory diagnostics run the project's TypeScript instead of a bare `tsc`** (#4336)
- **fix(lsp_diagnostics_directory): resolve local tsc binary for Windows .cmd shim support** (#4332)
- **fix(team): remove committed artifact and add env file cleanup test (#4330 follow-up)** (#4334)
- **fix(team): clean up env file when guarded split execution fails (#4330)** (#4333)
### Bug Fixes
- **fix(hud): render todos from TaskCreate/TaskUpdate** (#4243)
- **fix(hooks): clear autopilot state armed from sanitized pasted-echo prompt** (#4251)
- **fix(worktree-paths): accept Windows session cwd in a repo subdirectory** (#4255)
- **fix(antigravity): allow Windows headless and pass prompt as single argv** (#4259)
- **fix(ci): drop generated build artifacts committed by #4259** (#4260)
- **fix(cache): prevent orphaned version directories from being selected** (#4265)
- **fix: remove /tmp/omc-jev-* temp directories after use** (#4268)
- **fix(team): stabilize Cursor lifecycle and centralized state resolution** (#4272) — thanks @iyoda
- **fix(permission-handler): validate git heredoc commands** (#4280)
- **fix(omc-doctor): preserve custom hooks in settings** (#4281)
- **fix: make user settings opt-in for AFK links** (#4282)
- **fix: avoid persisting tool failure secrets** (#4284)
- **fix: preserve JSONC comment token boundaries** (#4285) — thanks @rudycelekli
- **fix: reject payloads without a JSON representation** (#4286) — thanks @rudycelekli
- **fix: measure ANSI CSI controls with private and colon parameters** (#4287) — thanks @rudycelekli
- **fix: reject complete IPv6 local ranges in SSRF guard** (#4288) — thanks @rudycelekli
- **fix: preserve custom notes with colliding delimiter text** (#4289) — thanks @rudycelekli
- **fix: pass literal git tag arguments without shell expansion** (#4290) — thanks @rudycelekli
- **fix: match exact Azure DevOps host identities** (#4291) — thanks @rudycelekli
- **fix: keep transcript context usage within a complete frame** (#4292) — thanks @rudycelekli
- **fix: skip incomplete version-manager Node installations** (#4293) — thanks @rudycelekli
- **fix(notifications): escape values in JSON webhook templates** (#4295) — thanks @rudycelekli
- **fix(providers): resolve cwd before caching Git remotes** (#4296) — thanks @rudycelekli
- **fix(mcp): avoid false Codex registry mismatch for type fields** (#4297)
- **fix(cache): preserve versions when active redirect targets are unusable** (#4298) — thanks @rudycelekli
- **fix(cache): fail closed when occupancy records cannot be read** (#4299) — thanks @rudycelekli
- **fix(notifications): ignore inherited template variable properties** (#4300) — thanks @rudycelekli
- **fix(notifications): validate custom integration configuration shapes** (#4301) — thanks @rudycelekli
- **fix(hud): drain custom rate provider diagnostic stderr** (#4302) — thanks @rudycelekli
- **fix(hud): cap completed task history while preserving active tasks** (#4303) — thanks @rudycelekli
- **fix(hud): key custom provider cache by command and periods** (#4304) — thanks @rudycelekli
- **fix(hud): encode directory hyperlinks and escape filename controls** (#4305) — thanks @rudycelekli
- **fix(hud): use visible text for ANSI truncation and slicing** (#4306) — thanks @rudycelekli
- **fix(cli): escape transcript controls in session search terminal output** (#4307) — thanks @rudycelekli
- **fix(notifications): normalize carriage returns before reply injection** (#4308) — thanks @rudycelekli
- **fix: fail directory diagnostics on compiler invocation errors** (#4309) — thanks @rudycelekli
- **fix: count Unicode characters in team usage records** (#4310) — thanks @rudycelekli
- **fix(notifications): honor ports in Telegram proxy exclusions** (#4311) — thanks @rudycelekli
- **fix(notifications): preserve whitespace in tmux session names** (#4312) — thanks @rudycelekli
- **fix: resolve local LSP file URIs with native paths** (#4313) — thanks @rudycelekli
- **fix(notifications): atomically rewrite the reply registry** (#4314) — thanks @rudycelekli
- **fix: skip invalid team usage log records** (#4315) — thanks @rudycelekli
- **fix: resume panes only after confirmed quota recovery** (#4316) — thanks @rudycelekli
- **fix(jev): harden sweep ownership and hourly locking** (#4320)
- **fix: bound PostToolUseFailure lock work** (#4322)
### Refactoring
- **refactor(shipyard): slim chain artifacts to tracker issues and lazy surfaces** (#4274) — thanks @pangpang778
- **Fix #4331: directory diagnostics run the project's TypeScript instead of a bare `tsc`** (#4336)
- **fix(lsp_diagnostics_directory): resolve local tsc binary for Windows .cmd shim support** (#4332)
- **fix(team): remove committed artifact and add env file cleanup test (#4330 follow-up)** (#4334)
- **fix(team): clean up env file when guarded split execution fails (#4330)** (#4333)
### Other Changes
- **Fix #4244: wiki-session-end imports a lean foreground bootstrap so the SessionEnd hook stays inside the 300 ms budget** (#4246) — thanks @RobinNorberg
- **Fix #4245: team shutdown keeps the active reservation when the start CLI has exited** (#4247) — thanks @RobinNorberg
- **Fix #4252: detached omc team session creation fails because the -F format is #-escaped** (#4253) — thanks @smpark00
- **Fix #4256: enforce ralph hardMaxIterations in the Stop hook scripts** (#4257) — thanks @smpark00
- **Fix #4261: cmux team ownership verification with tmux-compat and ref/UUID mismatch** (#4262)
- **Fix #4267: Generate shell-appropriate tmux guard conditions for native Windows** (#4269)
- **Fix #4276: restrict permission auto-approval** (#4283)
- **Fix keyword detection in attributed paste blocks** (#4318)
- **test: cover stale PostToolUseFailure fallback locks** (#4324)
- **ci: authorize generated artifacts for v5.7.0 back-merge (PR #4328)**
### Stats
- **59 PRs merged** | **4 new features** | **45 bug fixes** | **0 security/hardening improvements** | **9 other changes**
### External Contributors
- @bengry: #4249
- @iyoda: #4272
- @pangpang778: #4271, #4273, #4274
- @RobinNorberg: #4246, #4247
- @rudycelekli: #4285, #4286, #4287, #4288, #4289, #4290, #4291, #4292, #4293, #4295, #4296, #4298, #4299, #4300, #4301, #4302, #4303, #4304, #4305, #4306, #4307, #4308, #4309, #4310, #4311, #4312, #4313, #4314, #4315, #4316
- @smpark00: #4253, #4257
- **5 PRs merged** | **0 new features** | **4 bug fixes** | **0 security/hardening improvements** | **1 other change**
+1 -1
View File
@@ -1,5 +1,5 @@
<!-- OMC:START -->
<!-- OMC:VERSION:5.7.0 -->
<!-- OMC:VERSION:5.7.1 -->
# oh-my-claudecode - Intelligent Multi-Agent Orchestration
+2 -2
View File
@@ -875,8 +875,8 @@ function executeClaudeMdTransaction(request) {
// src/cli/claude-md-coordinator.ts
var CLAUDE_MD_COORDINATOR_SCHEMA_VERSION = 1;
var COMPILED_ENGINE_VERSION = true ? "5.7.0" : "";
var COMPILED_SOURCE_SHA256 = true ? "7c860dae324845d0ae975d8e8dd733d41796d529fa20b14d9191e58f14fe510d" : "";
var COMPILED_ENGINE_VERSION = true ? "5.7.1" : "";
var COMPILED_SOURCE_SHA256 = true ? "fc34dfa01dec8d0ab99ea3f36810e8d1e41037a79b63827668570304e5c934ab" : "";
function runClaudeMdCoordinatorHandshake() {
if (!COMPILED_ENGINE_VERSION || !COMPILED_SOURCE_SHA256) {
return { exitCode: 2, response: coordinatorError(2, "Coordinator build handshake is unavailable") };
+34 -3
View File
@@ -72117,9 +72117,10 @@ async function splitTeamWorkerPaneWithEvidence(splitTarget, direction, cwd2, pro
cwd2,
...splitPaneShell.args
];
const splitResult = await runGuardedNativeTmuxCreationCommand(
const splitResult = await runPaneCreationCommand(
identity,
tmuxCommandString(splitArgs, ["#{pane_id} #{socket_path} #{pid}"]),
splitPaneShell,
3
);
const parsed = splitResult.outcome === "executed" ? parseTmuxCreationRecord(
@@ -104246,6 +104247,7 @@ var import_path18 = require("path");
var import_child_process5 = require("child_process");
var import_fs11 = require("fs");
var import_path16 = require("path");
var TSC_ARGS = ["--noEmit", "--pretty", "false"];
function runTscDiagnostics(directory) {
const tsconfigPath = (0, import_path16.join)(directory, "tsconfig.json");
if (!(0, import_fs11.existsSync)(tsconfigPath)) {
@@ -104256,11 +104258,20 @@ function runTscDiagnostics(directory) {
warningCount: 0
};
}
const typescriptRoot = findTypeScriptPackageRoot(directory);
const localTscPath = typescriptRoot ? (0, import_path16.join)(typescriptRoot, "bin", "tsc") : null;
const localTsc = localTscPath && (0, import_fs11.existsSync)(localTscPath) ? localTscPath : null;
const viaCmd = !localTsc && process.platform === "win32";
if (viaCmd && !isOnWindowsPath("tsc")) {
return tscNotFound(directory, "where.exe found no 'tsc'");
}
const [file, args] = localTsc ? [process.execPath, [localTsc, ...TSC_ARGS]] : viaCmd ? [process.env.COMSPEC || "cmd.exe", ["/d", "/s", "/c", ["tsc", ...TSC_ARGS].join(" ")]] : ["tsc", TSC_ARGS];
try {
(0, import_child_process5.execFileSync)("tsc", ["--noEmit", "--pretty", "false"], {
(0, import_child_process5.execFileSync)(file, args, {
cwd: directory,
encoding: "utf-8",
stdio: "pipe"
stdio: "pipe",
...viaCmd ? { windowsVerbatimArguments: true } : {}
});
return {
success: true,
@@ -104269,6 +104280,9 @@ function runTscDiagnostics(directory) {
warningCount: 0
};
} catch (error2) {
if (error2.code === "ENOENT") {
return tscNotFound(directory, error2.message);
}
const output = error2.stdout || error2.stderr || "";
const result = parseTscOutput(output);
return {
@@ -104279,6 +104293,23 @@ function runTscDiagnostics(directory) {
};
}
}
function isOnWindowsPath(command) {
try {
(0, import_child_process5.execFileSync)("where.exe", [command], { stdio: "ignore", windowsHide: true });
return true;
} catch {
return false;
}
}
function tscNotFound(directory, detail) {
return {
success: false,
diagnostics: [],
errorCount: 1,
warningCount: 0,
error: `tsc not found: no typescript package in ${directory} or its parent directories and no tsc on PATH (${detail}). Install typescript in the project to enable TypeScript directory diagnostics.`
};
}
function parseTscOutput(output) {
const diagnostics = [];
const regex = /^(.+)\((\d+),(\d+)\):\s+(error|warning)\s+(TS\d+):\s+(.+)$/gm;
+32 -2
View File
@@ -21481,6 +21481,7 @@ var import_path12 = require("path");
var import_child_process7 = require("child_process");
var import_fs10 = require("fs");
var import_path10 = require("path");
var TSC_ARGS = ["--noEmit", "--pretty", "false"];
function runTscDiagnostics(directory) {
const tsconfigPath = (0, import_path10.join)(directory, "tsconfig.json");
if (!(0, import_fs10.existsSync)(tsconfigPath)) {
@@ -21491,11 +21492,20 @@ function runTscDiagnostics(directory) {
warningCount: 0
};
}
const typescriptRoot = findTypeScriptPackageRoot(directory);
const localTscPath = typescriptRoot ? (0, import_path10.join)(typescriptRoot, "bin", "tsc") : null;
const localTsc = localTscPath && (0, import_fs10.existsSync)(localTscPath) ? localTscPath : null;
const viaCmd = !localTsc && process.platform === "win32";
if (viaCmd && !isOnWindowsPath("tsc")) {
return tscNotFound(directory, "where.exe found no 'tsc'");
}
const [file, args] = localTsc ? [process.execPath, [localTsc, ...TSC_ARGS]] : viaCmd ? [process.env.COMSPEC || "cmd.exe", ["/d", "/s", "/c", ["tsc", ...TSC_ARGS].join(" ")]] : ["tsc", TSC_ARGS];
try {
(0, import_child_process7.execFileSync)("tsc", ["--noEmit", "--pretty", "false"], {
(0, import_child_process7.execFileSync)(file, args, {
cwd: directory,
encoding: "utf-8",
stdio: "pipe"
stdio: "pipe",
...viaCmd ? { windowsVerbatimArguments: true } : {}
});
return {
success: true,
@@ -21504,6 +21514,9 @@ function runTscDiagnostics(directory) {
warningCount: 0
};
} catch (error2) {
if (error2.code === "ENOENT") {
return tscNotFound(directory, error2.message);
}
const output = error2.stdout || error2.stderr || "";
const result = parseTscOutput(output);
return {
@@ -21514,6 +21527,23 @@ function runTscDiagnostics(directory) {
};
}
}
function isOnWindowsPath(command) {
try {
(0, import_child_process7.execFileSync)("where.exe", [command], { stdio: "ignore", windowsHide: true });
return true;
} catch {
return false;
}
}
function tscNotFound(directory, detail) {
return {
success: false,
diagnostics: [],
errorCount: 1,
warningCount: 0,
error: `tsc not found: no typescript package in ${directory} or its parent directories and no tsc on PATH (${detail}). Install typescript in the project to enable TypeScript directory diagnostics.`
};
}
function parseTscOutput(output) {
const diagnostics = [];
const regex = /^(.+)\((\d+),(\d+)\):\s+(error|warning)\s+(TS\d+):\s+(.+)$/gm;
+2 -1
View File
@@ -14743,9 +14743,10 @@ async function splitTeamWorkerPaneWithEvidence(splitTarget, direction, cwd, prov
cwd,
...splitPaneShell.args
];
const splitResult = await runGuardedNativeTmuxCreationCommand(
const splitResult = await runPaneCreationCommand(
identity,
tmuxCommandString(splitArgs, ["#{pane_id} #{socket_path} #{pid}"]),
splitPaneShell,
3
);
const parsed = splitResult.outcome === "executed" ? parseTmuxCreationRecord(
+2 -1
View File
@@ -9966,9 +9966,10 @@ async function splitTeamWorkerPaneWithEvidence(splitTarget, direction, cwd, prov
cwd,
...splitPaneShell.args
];
const splitResult = await runGuardedNativeTmuxCreationCommand(
const splitResult = await runPaneCreationCommand(
identity,
tmuxCommandString(splitArgs, ["#{pane_id} #{socket_path} #{pid}"]),
splitPaneShell,
3
);
const parsed = splitResult.outcome === "executed" ? parseTmuxCreationRecord(
+41
View File
@@ -58,6 +58,47 @@ afterEach(() => {
rmSync(tempDir, { recursive: true, force: true });
});
describe('resolveTranscriptContextPercent', () => {
it.each(['x'.repeat(6000), '界'.repeat(2000) + 'x'])('reads a complete usage frame larger than the initial tail (%#)', content => {
const frame = { message: { content, usage: { input_tokens: 850 } }, context_window: 1000 };
if (content.startsWith('界')) {
const bytes = Buffer.from(JSON.stringify(frame) + '\n');
expect(bytes[bytes.length - 4096] & 0xc0).toBe(0x80);
}
const transcriptPath = writeTranscript(frame);
expect(resolveTranscriptContextPercent(transcriptPath)).toBe(85);
});
it('reads back past a large incomplete tail without mixing older cache usage', () => {
const transcriptPath = join(tempDir, 'large-partial-tail.jsonl');
writeFileSync(transcriptPath, [
JSON.stringify({ context_window: 1000, usage: { input_tokens: 10, cache_read_input_tokens: 800 } }),
JSON.stringify({ context_window: 1000, usage: { input_tokens: 20 } }),
'{"message":{"content":"' + '界'.repeat(2000),
].join('\n'));
expect(resolveTranscriptContextPercent(transcriptPath)).toBe(2);
});
it('returns no transcript usage when the complete frame exceeds the readback cap', () => {
const transcriptPath = writeTranscript({ content: 'x'.repeat(1024 * 1024), context_window: 1000, usage: { input_tokens: 850 } });
expect(resolveTranscriptContextPercent(transcriptPath)).toBeNull();
});
it('uses optional cache tokens from the latest complete usage frame only', () => {
const transcriptPath = join(tempDir, 'multiple-frames.jsonl');
writeFileSync(transcriptPath, [
{ context_window: 1000, usage: { input_tokens: 10, cache_read_input_tokens: 800 } },
{ context_window: 1000, usage: { input_tokens: 20 } },
].map(frame => JSON.stringify(frame)).join('\n') + '\n');
expect(resolveTranscriptContextPercent(transcriptPath)).toBe(2);
});
it('does not combine a context window and usage from separate frames', () => {
const transcriptPath = join(tempDir, 'incomplete-frames.jsonl');
writeFileSync(transcriptPath, '{"context_window":1000}\n{"usage":{"input_tokens":900}}\n');
expect(resolveTranscriptContextPercent(transcriptPath)).toBeNull();
});
it('ignores an incomplete trailing frame', () => {
const transcriptPath = join(tempDir, 'partial-frame.jsonl');
writeFileSync(transcriptPath, '{"context_window":1000,"usage":{"input_tokens":20}}\n' +
'{"context_window":1000,"usage":{"input_tokens":900');
expect(resolveTranscriptContextPercent(transcriptPath)).toBe(2);
});
it('returns null for production-shaped transcripts without context_window', () => {
const transcriptPath = writeTranscript({
message: {
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"context-usage.test.js","sourceRoot":"","sources":["../../src/__tests__/context-usage.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"context-usage.test.js","sourceRoot":"","sources":["../../src/__tests__/context-usage.test.ts"],"names":[],"mappings":"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 truncated
+5 -3
View File
@@ -3,6 +3,7 @@
*/
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { EventEmitter } from 'events';
import { createHash } from 'node:crypto';
import { executeCustomProvider } from '../../hud/custom-rate-provider.js';
import { existsSync, readFileSync } from 'fs';
import { spawn } from 'child_process';
@@ -62,6 +63,7 @@ const BASE_CONFIG = {
command: 'my-rate-cmd',
timeoutMs: 500,
};
const CACHE_IDENTITY = createHash('sha256').update(JSON.stringify({ command: BASE_CONFIG.command, periods: [] })).digest('hex');
describe('executeCustomProvider', () => {
beforeEach(() => {
vi.clearAllMocks();
@@ -152,7 +154,7 @@ describe('executeCustomProvider', () => {
{ id: 'cached', label: 'Cached', usage: { type: 'percent', value: 77 } },
];
vi.mocked(existsSync).mockReturnValue(true);
vi.mocked(readFileSync).mockReturnValue(JSON.stringify({ timestamp: Date.now(), buckets: cachedBuckets }));
vi.mocked(readFileSync).mockReturnValue(JSON.stringify({ timestamp: Date.now(), buckets: cachedBuckets, identity: CACHE_IDENTITY }));
const result = await executeCustomProvider(BASE_CONFIG);
expect(result.stale).toBe(false);
expect(result.buckets).toHaveLength(1);
@@ -166,7 +168,7 @@ describe('executeCustomProvider', () => {
];
// Cache expired (timestamp 60s ago)
vi.mocked(existsSync).mockReturnValue(true);
vi.mocked(readFileSync).mockReturnValue(JSON.stringify({ timestamp: Date.now() - 60_000, buckets: oldBuckets }));
vi.mocked(readFileSync).mockReturnValue(JSON.stringify({ timestamp: Date.now() - 60_000, buckets: oldBuckets, identity: CACHE_IDENTITY }));
mockSpawn(VALID_OUTPUT);
const result = await executeCustomProvider(BASE_CONFIG);
expect(result.stale).toBe(false);
@@ -178,7 +180,7 @@ describe('executeCustomProvider', () => {
];
// Expired cache exists
vi.mocked(existsSync).mockReturnValue(true);
vi.mocked(readFileSync).mockReturnValue(JSON.stringify({ timestamp: Date.now() - 60_000, buckets: staleBuckets }));
vi.mocked(readFileSync).mockReturnValue(JSON.stringify({ timestamp: Date.now() - 60_000, buckets: staleBuckets, identity: CACHE_IDENTITY }));
mockSpawn('', 1); // command fails
const result = await executeCustomProvider(BASE_CONFIG);
expect(result.stale).toBe(true);
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"custom-rate-provider.test.js","sourceRoot":"","sources":["../../../src/__tests__/hud/custom-rate-provider.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"custom-rate-provider.test.js","sourceRoot":"","sources":["../../../src/__tests__/hud/custom-rate-provider.test.ts"],"names":[],"mappings":"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 truncated
+10 -2
View File
@@ -112,7 +112,15 @@ describe('getUsage lock failure fallback', () => {
request: vi.fn(),
},
}));
const { getUsage } = await import('../../hud/usage-api.js');
const { getUsage, getUsageCredentialIdentity } = await import('../../hud/usage-api.js');
const credentialIdentity = getUsageCredentialIdentity();
if (!credentialIdentity)
throw new Error('expected z.ai test credentials');
const identityBoundCache = JSON.stringify({
...JSON.parse(files.get(CACHE_PATH)),
credentialIdentity,
});
files.set(CACHE_PATH, identityBoundCache);
const httpsModule = await import('https');
// Should NOT throw, should return stale data
const result = await getUsage();
@@ -123,7 +131,7 @@ describe('getUsage lock failure fallback', () => {
// Should not have made any API call
expect(httpsModule.default.request).not.toHaveBeenCalled();
// Should not have modified the cache file (no race with lock holder)
expect(files.get(CACHE_PATH)).toBe(expiredCache);
expect(files.get(CACHE_PATH)).toBe(identityBoundCache);
process.kill = originalKill;
});
it('returns error result when lock fails and no stale cache exists', async () => {
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"usage-api-lock.test.js","sourceRoot":"","sources":["../../../src/__tests__/hud/usage-api-lock.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"usage-api-lock.test.js","sourceRoot":"","sources":["../../../src/__tests__/hud/usage-api-lock.test.ts"],"names":[],"mappings":"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 truncated
+17 -8
View File
@@ -96,6 +96,15 @@ function setupMocks(fsModule, httpStatus, httpBody) {
},
}));
}
async function loadUsageApiWithCredentialBoundCache(fsModule) {
const usageApi = await import('../../hud/usage-api.js');
const credentialIdentity = usageApi.getUsageCredentialIdentity();
if (!credentialIdentity)
throw new Error('expected z.ai test credentials');
const cache = JSON.parse(fsModule.readFileSync(CACHE_PATH));
fsModule.writeFileSync(CACHE_PATH, JSON.stringify({ ...cache, credentialIdentity }));
return usageApi;
}
describe('usage API stale data handling', () => {
const originalEnv = { ...process.env };
beforeEach(() => {
@@ -124,7 +133,7 @@ describe('usage API stale data handling', () => {
});
const { fsModule } = createFsMock({ [CACHE_PATH]: expiredCache });
setupMocks(fsModule, 429, '');
const { getUsage } = await import('../../hud/usage-api.js');
const { getUsage } = await loadUsageApiWithCredentialBoundCache(fsModule);
const result = await getUsage();
expect(result.rateLimits).toBeDefined();
expect(result.rateLimits?.fiveHourPercent).toBe(11);
@@ -145,7 +154,7 @@ describe('usage API stale data handling', () => {
],
},
}));
const { getUsage } = await import('../../hud/usage-api.js');
const { getUsage } = await loadUsageApiWithCredentialBoundCache(fsModule);
const result = await getUsage();
expect(result.rateLimits).toBeDefined();
expect(result.rateLimits?.fiveHourPercent).toBe(25);
@@ -161,7 +170,7 @@ describe('usage API stale data handling', () => {
});
const { files, fsModule } = createFsMock({ [CACHE_PATH]: expiredCache });
setupMocks(fsModule, 429, '');
const { getUsage } = await import('../../hud/usage-api.js');
const { getUsage } = await loadUsageApiWithCredentialBoundCache(fsModule);
await getUsage();
// Cache should preserve the original lastSuccessAt
const written = JSON.parse(files.get(CACHE_PATH));
@@ -182,7 +191,7 @@ describe('usage API stale data handling', () => {
},
}));
const now = Date.now();
const { getUsage } = await import('../../hud/usage-api.js');
const { getUsage } = await loadUsageApiWithCredentialBoundCache(fsModule);
await getUsage();
const written = JSON.parse(files.get(CACHE_PATH));
expect(written.lastSuccessAt).toBeGreaterThanOrEqual(now);
@@ -210,7 +219,7 @@ describe('usage API stale data handling', () => {
execSync: vi.fn(),
}));
vi.doMock('fs', () => fsModule);
const { getUsage } = await import('../../hud/usage-api.js');
const { getUsage } = await loadUsageApiWithCredentialBoundCache(fsModule);
const result = await getUsage();
// Should discard the data and show error
expect(result.rateLimits).toBeNull();
@@ -229,7 +238,7 @@ describe('usage API stale data handling', () => {
});
const { files, fsModule } = createFsMock({ [CACHE_PATH]: expiredCache });
setupMocks(fsModule, 500, '');
const { getUsage } = await import('../../hud/usage-api.js');
const { getUsage } = await loadUsageApiWithCredentialBoundCache(fsModule);
const result = await getUsage();
expect(result).toEqual({
rateLimits: {
@@ -261,7 +270,7 @@ describe('usage API stale data handling', () => {
});
const { files, fsModule } = createFsMock({ [CACHE_PATH]: expiredCache });
setupMocks(fsModule, 500, '');
const { getUsage } = await import('../../hud/usage-api.js');
const { getUsage } = await loadUsageApiWithCredentialBoundCache(fsModule);
const result = await getUsage();
expect(result).toEqual({
rateLimits: null,
@@ -287,7 +296,7 @@ describe('usage API stale data handling', () => {
const { fsModule } = createFsMock({ [CACHE_PATH]: validTransientFailureCache });
setupMocks(fsModule, 500, '');
const httpsModule = await import('https');
const { getUsage } = await import('../../hud/usage-api.js');
const { getUsage } = await loadUsageApiWithCredentialBoundCache(fsModule);
const result = await getUsage();
expect(result.rateLimits?.fiveHourPercent).toBe(11);
expect(result.error).toBe('network');
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"usage-api-stale.test.js","sourceRoot":"","sources":["../../../src/__tests__/hud/usage-api-stale.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"usage-api-stale.test.js","sourceRoot":"","sources":["../../../src/__tests__/hud/usage-api-stale.test.ts"],"names":[],"mappings":"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 truncated
+612 -14
View File
@@ -7,7 +7,7 @@ import * as fs from 'fs';
import * as childProcess from 'child_process';
import * as os from 'os';
import { EventEmitter } from 'events';
import { isZaiHost, parseZaiResponse, isMinimaxHost, parseMinimaxResponse, isKimiHost, parseKimiResponse, getUsage, parseUsageResponse } from '../../hud/usage-api.js';
import { isZaiHost, parseZaiResponse, isMinimaxHost, parseMinimaxResponse, isKimiHost, parseKimiResponse, getUsage, getUsageCredentialIdentity, parseUsageResponse } from '../../hud/usage-api.js';
import { renderRateLimits, renderRateLimitsCompact, renderRateLimitsWithBar } from '../../hud/elements/limits.js';
function stripAnsi(value) {
return value.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '');
@@ -38,7 +38,9 @@ vi.mock('fs', async (importOriginal) => {
});
vi.mock('child_process', () => ({
execSync: vi.fn().mockImplementation(() => { throw new Error('mock: no keychain'); }),
execFileSync: vi.fn().mockImplementation(() => { throw new Error('mock: no keychain'); }),
execFileSync: vi.fn().mockImplementation(() => {
throw new Error('The specified item could not be found in the keychain.');
}),
}));
vi.mock('https', () => ({
default: {
@@ -357,7 +359,9 @@ describe('getUsage routing', () => {
vi.mocked(fs.existsSync).mockReturnValue(false);
vi.mocked(fs.readFileSync).mockReturnValue('{}');
vi.mocked(childProcess.execSync).mockImplementation(() => { throw new Error('mock: no keychain'); });
vi.mocked(childProcess.execFileSync).mockImplementation(() => { throw new Error('mock: no keychain'); });
vi.mocked(childProcess.execFileSync).mockImplementation(() => {
throw new Error('The specified item could not be found in the keychain.');
});
// Reset env
delete process.env.ANTHROPIC_BASE_URL;
delete process.env.ANTHROPIC_AUTH_TOKEN;
@@ -450,6 +454,572 @@ describe('getUsage routing', () => {
expect(cacheContent).not.toContain('env-token-one');
expect(cacheContent).not.toContain('env-token-two');
});
it('does not reuse Anthropic usage cache data across stored OAuth accounts', async () => {
const cachePath = '/tmp/test-claude/plugins/oh-my-claudecode/.usage-cache-anthropic.json';
const credentialsPath = '/tmp/test-claude/.credentials.json';
let cacheContent = '{}';
let credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'stored-access-a',
refreshToken: 'stored-refresh-a',
expiresAt: Date.now() + 60 * 60 * 1000,
oauthAccount: { uuid: 'account-a', emailAddress: 'a@example.test' },
},
});
const capturedAuth = [];
process.env.CLAUDE_CONFIG_DIR = '/tmp/test-claude';
vi.mocked(fs.existsSync).mockImplementation(path => String(path) === cachePath || String(path) === credentialsPath);
vi.mocked(fs.readFileSync).mockImplementation(path => {
if (String(path) === cachePath)
return cacheContent;
if (String(path) === credentialsPath)
return credentialsContent;
return '{}';
});
vi.mocked(fs.writeFileSync).mockImplementation((path, content) => {
if (String(path) === cachePath)
cacheContent = String(content);
});
const mockUsageResponse = (fiveHourPercent) => {
httpsModule.default.request.mockImplementationOnce((options, callback) => {
capturedAuth.push(options.headers?.Authorization ?? '');
const req = new EventEmitter();
req.destroy = vi.fn();
req.end = () => {
const res = new EventEmitter();
res.statusCode = 200;
callback(res);
res.emit('data', JSON.stringify({ five_hour: { utilization: fiveHourPercent } }));
res.emit('end');
};
return req;
});
};
mockUsageResponse(10);
const firstIdentity = getUsageCredentialIdentity(true, true);
const first = await getUsage();
credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'stored-access-b',
refreshToken: 'stored-refresh-b',
expiresAt: Date.now() + 60 * 60 * 1000,
oauthAccount: { uuid: 'account-b', emailAddress: 'b@example.test' },
},
});
mockUsageResponse(80);
const secondIdentity = getUsageCredentialIdentity(true, true);
const second = await getUsage();
expect(firstIdentity).not.toBe(secondIdentity);
expect(first.rateLimits?.fiveHourPercent).toBe(10);
expect(second.rateLimits?.fiveHourPercent).toBe(80);
expect(capturedAuth).toEqual(['Bearer stored-access-a', 'Bearer stored-access-b']);
expect(cacheContent).not.toContain('stored-access-a');
expect(cacheContent).not.toContain('stored-access-b');
expect(cacheContent).not.toContain('stored-refresh-a');
expect(cacheContent).not.toContain('stored-refresh-b');
});
it('keeps a legacy OAuth profile stable across token promotion via .claude.json', () => {
const credentialsPath = '/tmp/test-claude/.credentials.json';
const claudeJsonPath = '/tmp/.claude.json';
let credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'runtime-access-a',
refreshToken: 'runtime-refresh-a',
},
});
let claudeJsonContent = JSON.stringify({
oauthAccount: {
accountUuid: 'same-stable-account',
emailAddress: 'first@example.test',
},
});
process.env.CLAUDE_CONFIG_DIR = '/tmp/test-claude';
vi.mocked(fs.existsSync).mockImplementation(path => String(path) === credentialsPath || String(path) === claudeJsonPath);
vi.mocked(fs.readFileSync).mockImplementation(path => {
if (String(path) === credentialsPath)
return credentialsContent;
if (String(path) === claudeJsonPath)
return claudeJsonContent;
return '{}';
});
const originalIdentity = getUsageCredentialIdentity(false, true);
credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'runtime-access-b',
refreshToken: 'runtime-refresh-b',
},
});
expect(getUsageCredentialIdentity(false, true)).toBe(originalIdentity);
claudeJsonContent = JSON.stringify({
oauthAccount: {
accountUuid: 'same-stable-account',
emailAddress: 'updated@example.test',
},
});
expect(getUsageCredentialIdentity(false, true)).toBe(originalIdentity);
claudeJsonContent = JSON.stringify({
oauthAccount: { accountUuid: 'different-stable-account' },
});
expect(getUsageCredentialIdentity(false, true)).not.toBe(originalIdentity);
});
it('prefers account metadata in the active managed runtime directory', () => {
const configDir = '/tmp/test-base/.omc-launch';
const credentialsPath = `${configDir}/.credentials.json`;
const runtimeClaudeJsonPath = `${configDir}/.claude.json`;
const adjacentClaudeJsonPath = '/tmp/test-base/.claude.json';
let runtimeClaudeJsonContent = JSON.stringify({
oauthAccount: { accountUuid: 'runtime-account' },
});
let adjacentClaudeJsonContent = JSON.stringify({
oauthAccount: { accountUuid: 'base-account' },
});
const credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'managed-access-token',
refreshToken: 'managed-refresh-token',
},
});
process.env.CLAUDE_CONFIG_DIR = configDir;
vi.mocked(fs.existsSync).mockImplementation(path => [credentialsPath, runtimeClaudeJsonPath, adjacentClaudeJsonPath].includes(String(path)));
vi.mocked(fs.readFileSync).mockImplementation(path => {
if (String(path) === credentialsPath)
return credentialsContent;
if (String(path) === runtimeClaudeJsonPath)
return runtimeClaudeJsonContent;
if (String(path) === adjacentClaudeJsonPath)
return adjacentClaudeJsonContent;
return '{}';
});
const runtimeIdentity = getUsageCredentialIdentity(false, true);
adjacentClaudeJsonContent = JSON.stringify({
oauthAccount: { accountUuid: 'another-base-account' },
});
expect(getUsageCredentialIdentity(false, true)).toBe(runtimeIdentity);
runtimeClaudeJsonContent = JSON.stringify({
oauthAccount: { accountUuid: 'another-runtime-account' },
});
expect(getUsageCredentialIdentity(false, true)).not.toBe(runtimeIdentity);
});
function getIdentityForCredentialAndRuntimeAccount(embeddedAccount, runtimeAccount) {
const configDir = '/tmp/test-base/.omc-launch';
const credentialsPath = `${configDir}/.credentials.json`;
const runtimeClaudeJsonPath = `${configDir}/.claude.json`;
const credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'account-b-access',
refreshToken: 'account-b-refresh',
oauthAccount: embeddedAccount,
},
});
process.env.CLAUDE_CONFIG_DIR = configDir;
vi.mocked(fs.existsSync).mockImplementation(path => String(path) === credentialsPath || String(path) === runtimeClaudeJsonPath);
vi.mocked(fs.readFileSync).mockImplementation(path => {
if (String(path) === credentialsPath)
return credentialsContent;
if (String(path) === runtimeClaudeJsonPath) {
return JSON.stringify({ oauthAccount: runtimeAccount });
}
return '{}';
});
return getUsageCredentialIdentity(false, true);
}
it('rejects a config UUID when credentials instead identify an account ID', () => {
expect(getIdentityForCredentialAndRuntimeAccount({ accountId: 'account-b' }, { accountUuid: 'account-a' })).toBeNull();
});
it('rejects a config UUID when credentials instead identify an email', () => {
expect(getIdentityForCredentialAndRuntimeAccount({ emailAddress: 'account-b@example.test' }, { accountUuid: 'account-a' })).toBeNull();
});
it('rejects config UUID metadata when its email conflicts with credential email', () => {
expect(getIdentityForCredentialAndRuntimeAccount({ emailAddress: 'account-b@example.test' }, { accountUuid: 'account-a', emailAddress: 'account-a@example.test' })).toBeNull();
});
it('uses a config UUID when embedded credential email confirms the account', () => {
expect(getIdentityForCredentialAndRuntimeAccount({ emailAddress: 'account-a@example.test' }, { accountUuid: 'account-a', emailAddress: 'account-a@example.test' })).not.toBeNull();
});
it('treats unreadable active account metadata as an inconclusive profile', () => {
const configDir = '/tmp/test-base/.omc-launch';
const credentialsPath = `${configDir}/.credentials.json`;
const runtimeClaudeJsonPath = `${configDir}/.claude.json`;
const adjacentClaudeJsonPath = '/tmp/test-base/.claude.json';
const credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'managed-access-token',
refreshToken: 'managed-refresh-token',
omcUsageProfileId: 'previous-profile',
omcUsageProfileTokenHash: createHash('sha256')
.update('managed-refresh-token')
.digest('hex'),
},
});
process.env.CLAUDE_CONFIG_DIR = configDir;
vi.mocked(fs.existsSync).mockImplementation(path => [credentialsPath, runtimeClaudeJsonPath, adjacentClaudeJsonPath].includes(String(path)));
vi.mocked(fs.readFileSync).mockImplementation(path => {
if (String(path) === credentialsPath)
return credentialsContent;
if (String(path) === runtimeClaudeJsonPath)
throw new Error('mock: transient metadata read failure');
if (String(path) === adjacentClaudeJsonPath) {
return JSON.stringify({ oauthAccount: { accountUuid: 'different-account' } });
}
return '{}';
});
expect(getUsageCredentialIdentity(false, true)).toBeNull();
});
it('does not fall back to file credentials when Keychain lookup is unavailable', async () => {
const credentialsPath = '/tmp/test-claude/.credentials.json';
const claudeJsonPath = '/tmp/.claude.json';
const credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'account-b-access',
refreshToken: 'account-b-refresh',
},
});
process.env.CLAUDE_CONFIG_DIR = '/tmp/test-claude';
vi.mocked(fs.existsSync).mockImplementation(path => String(path) === credentialsPath || String(path) === claudeJsonPath);
vi.mocked(fs.readFileSync).mockImplementation(path => {
if (String(path) === credentialsPath)
return credentialsContent;
if (String(path) === claudeJsonPath) {
return JSON.stringify({ oauthAccount: { accountUuid: 'account-a' } });
}
return '{}';
});
vi.mocked(childProcess.execFileSync).mockImplementation(() => {
throw new Error('mock: transient Keychain failure');
});
expect(getUsageCredentialIdentity(false, true)).toBeNull();
expect(childProcess.execFileSync).toHaveBeenCalledTimes(1);
const result = await getUsage();
expect(result.error).toBe('no_credentials');
expect(httpsModule.default.request).not.toHaveBeenCalled();
});
it('normalizes the email fallback when no stable account UUID is available', () => {
const credentialsPath = '/tmp/test-claude/.credentials.json';
let credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'email-access-token',
refreshToken: 'email-refresh-token',
oauthAccount: { emailAddress: 'Owner@Example.test' },
},
});
process.env.CLAUDE_CONFIG_DIR = '/tmp/test-claude';
vi.mocked(fs.existsSync).mockImplementation(path => String(path) === credentialsPath);
vi.mocked(fs.readFileSync).mockImplementation(path => String(path) === credentialsPath ? credentialsContent : '{}');
const originalIdentity = getUsageCredentialIdentity(false, true);
credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'email-access-token',
refreshToken: 'email-refresh-token',
oauthAccount: { emailAddress: 'owner@example.test' },
},
});
expect(getUsageCredentialIdentity(false, true)).toBe(originalIdentity);
credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'email-access-token',
refreshToken: 'email-refresh-token',
oauthAccount: { emailAddress: 'other@example.test' },
},
});
expect(getUsageCredentialIdentity(false, true)).not.toBe(originalIdentity);
});
it('reuses a persisted legacy identity only while its token binding matches', () => {
const credentialsPath = '/tmp/test-claude/.credentials.json';
const oldTokenHash = createHash('sha256').update('old-refresh-token').digest('hex');
let credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'old-access-token',
refreshToken: 'old-refresh-token',
omcUsageProfileId: 'persisted-legacy-profile',
omcUsageProfileTokenHash: oldTokenHash,
},
});
process.env.CLAUDE_CONFIG_DIR = '/tmp/test-claude';
vi.mocked(fs.existsSync).mockImplementation(path => String(path) === credentialsPath);
vi.mocked(fs.readFileSync).mockImplementation(path => String(path) === credentialsPath ? credentialsContent : '{}');
const originalIdentity = getUsageCredentialIdentity(false, true);
credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'old-access-token',
refreshToken: 'old-refresh-token',
},
});
expect(getUsageCredentialIdentity(false, true)).not.toBe(originalIdentity);
credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'new-access-token',
refreshToken: 'new-refresh-token',
omcUsageProfileId: 'persisted-legacy-profile',
omcUsageProfileTokenHash: oldTokenHash,
},
});
expect(getUsageCredentialIdentity(false, true)).not.toBe(originalIdentity);
});
it('fingerprints the selected third-party provider and API key', () => {
process.env.ANTHROPIC_BASE_URL = 'https://api.minimax.io/anthropic';
process.env.MINIMAX_API_KEY = 'minimax-account-a';
const minimaxIdentity = getUsageCredentialIdentity(true, true);
process.env.ANTHROPIC_BASE_URL = 'https://api.kimi.com/coding/';
process.env.KIMI_API_KEY = 'kimi-account-a';
const kimiIdentity = getUsageCredentialIdentity(true, true);
process.env.KIMI_API_KEY = 'kimi-account-b';
const switchedKimiIdentity = getUsageCredentialIdentity(true, true);
expect(minimaxIdentity).not.toBe(kimiIdentity);
expect(kimiIdentity).not.toBe(switchedKimiIdentity);
expect(kimiIdentity).not.toContain('kimi-account-a');
});
it('uses the memoized stored credential identity for warm cache hits', async () => {
const cachePath = '/tmp/test-claude/plugins/oh-my-claudecode/.usage-cache-anthropic.json';
const credentialsPath = '/tmp/test-claude/.credentials.json';
const credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'warm-access-token',
refreshToken: 'warm-refresh-token',
expiresAt: Date.now() + 60 * 60 * 1000,
oauthAccount: { uuid: 'warm-account', emailAddress: 'warm@example.test' },
},
});
let cacheContent = '{}';
process.env.CLAUDE_CONFIG_DIR = '/tmp/test-claude';
vi.mocked(fs.existsSync).mockImplementation(path => String(path) === cachePath || String(path) === credentialsPath);
vi.mocked(fs.readFileSync).mockImplementation(path => {
if (String(path) === cachePath)
return cacheContent;
if (String(path) === credentialsPath)
return credentialsContent;
return '{}';
});
const credentialIdentity = getUsageCredentialIdentity(true, true);
cacheContent = JSON.stringify({
timestamp: Date.now(),
lastSuccessAt: Date.now(),
source: 'anthropic',
credentialIdentity,
data: { fiveHourPercent: 25, weeklyPercent: 50 },
});
vi.mocked(childProcess.execFileSync).mockClear();
const first = await getUsage();
const second = await getUsage();
expect(first.rateLimits?.fiveHourPercent).toBe(25);
expect(second.rateLimits?.weeklyPercent).toBe(50);
expect(vi.mocked(childProcess.execFileSync)).not.toHaveBeenCalled();
expect(httpsModule.default.request).not.toHaveBeenCalled();
});
it('does not serve a warm cache for stale config metadata after the stored account changes', async () => {
const configDir = '/tmp/test-claude';
const cachePath = `${configDir}/plugins/oh-my-claudecode/.usage-cache-anthropic.json`;
const claudeJsonPath = `${configDir}/.claude.json`;
const cacheAccountA = JSON.stringify({
claudeAiOauth: {
accessToken: 'account-a-access',
refreshToken: 'account-a-refresh',
expiresAt: Date.now() + 60 * 60 * 1000,
oauthAccount: { uuid: 'account-a' },
},
});
let storedCredentials = cacheAccountA;
let cacheContent = '{}';
process.env.CLAUDE_CONFIG_DIR = configDir;
vi.mocked(fs.existsSync).mockImplementation(path => String(path) === cachePath || String(path) === claudeJsonPath);
vi.mocked(fs.readFileSync).mockImplementation(path => {
if (String(path) === cachePath)
return cacheContent;
if (String(path) === claudeJsonPath) {
return JSON.stringify({ oauthAccount: { accountUuid: 'account-a' } });
}
return '{}';
});
vi.mocked(childProcess.execFileSync).mockImplementation(() => storedCredentials);
const accountAIdentity = getUsageCredentialIdentity(false, true);
cacheContent = JSON.stringify({
timestamp: Date.now(),
lastSuccessAt: Date.now(),
source: 'anthropic',
credentialIdentity: accountAIdentity,
data: { fiveHourPercent: 25, weeklyPercent: 50 },
});
storedCredentials = JSON.stringify({
claudeAiOauth: {
accessToken: 'account-b-access',
refreshToken: 'account-b-refresh',
expiresAt: Date.now() + 60 * 60 * 1000,
oauthAccount: { uuid: 'account-b' },
},
});
const accountBIdentity = getUsageCredentialIdentity(false, true);
expect(accountBIdentity).not.toBe(accountAIdentity);
let capturedAuth;
httpsModule.default.request.mockImplementationOnce((options, callback) => {
capturedAuth = options?.headers?.Authorization;
const req = new EventEmitter();
req.destroy = vi.fn();
req.end = () => {
const res = new EventEmitter();
res.statusCode = 200;
callback(res);
res.emit('data', JSON.stringify({ five_hour: { utilization: 80 }, seven_day: { utilization: 40 } }));
res.emit('end');
};
return req;
});
const result = await getUsage({ skipWarmCache: true });
expect(result.rateLimits?.fiveHourPercent).toBe(80);
expect(capturedAuth).toBe('Bearer account-b-access');
expect(httpsModule.default.request).toHaveBeenCalledOnce();
});
it('skips Keychain on a warm OAuth cache hit in a fresh process', async () => {
const configDir = '/tmp/test-claude';
const cachePath = `${configDir}/plugins/oh-my-claudecode/.usage-cache-anthropic.json`;
const claudeJsonPath = `${configDir}/.claude.json`;
const cachedCredentials = JSON.stringify({
claudeAiOauth: {
accessToken: 'warm-keychain-access',
refreshToken: 'warm-keychain-refresh',
expiresAt: Date.now() + 60 * 60 * 1000,
oauthAccount: { uuid: 'warm-keychain-account' },
},
});
let claudeJsonContent = JSON.stringify({
oauthAccount: { accountUuid: 'warm-keychain-account' },
});
process.env.CLAUDE_CONFIG_DIR = configDir;
vi.mocked(fs.existsSync).mockImplementation(path => String(path) === claudeJsonPath);
vi.mocked(fs.readFileSync).mockImplementation(path => String(path) === claudeJsonPath ? claudeJsonContent : '{}');
vi.mocked(childProcess.execFileSync).mockImplementation((_file, args) => {
const argsArray = args;
if (argsArray.includes('find-generic-password') && argsArray.includes('-a')) {
return cachedCredentials;
}
throw new Error('The specified item could not be found in the keychain.');
});
const credentialIdentity = getUsageCredentialIdentity(false, true);
const cacheContent = JSON.stringify({
timestamp: Date.now(),
lastSuccessAt: Date.now(),
source: 'anthropic',
credentialIdentity,
data: { fiveHourPercent: 25, weeklyPercent: 50 },
});
vi.mocked(fs.existsSync).mockImplementation(path => String(path) === cachePath || String(path) === claudeJsonPath);
vi.mocked(fs.readFileSync).mockImplementation(path => {
if (String(path) === cachePath)
return cacheContent;
if (String(path) === claudeJsonPath)
return claudeJsonContent;
return '{}';
});
vi.resetModules();
const freshFs = await import('fs');
const freshChildProcess = await import('child_process');
const freshHttps = await import('https');
vi.mocked(freshFs.existsSync).mockImplementation(path => String(path) === cachePath || String(path) === claudeJsonPath);
vi.mocked(freshFs.readFileSync).mockImplementation(path => {
if (String(path) === cachePath)
return cacheContent;
if (String(path) === claudeJsonPath)
return claudeJsonContent;
return '{}';
});
vi.mocked(freshChildProcess.execFileSync).mockClear();
vi.mocked(freshChildProcess.execFileSync).mockImplementation(() => {
throw new Error('warm cache hit should not read Keychain');
});
const { getUsage: freshGetUsage } = await import('../../hud/usage-api.js');
const result = await freshGetUsage();
expect(result.rateLimits?.fiveHourPercent).toBe(25);
expect(result.rateLimits?.weeklyPercent).toBe(50);
expect(vi.mocked(freshChildProcess.execFileSync)).not.toHaveBeenCalled();
expect(freshHttps.default.request).not.toHaveBeenCalled();
claudeJsonContent = JSON.stringify({
oauthAccount: { accountUuid: 'different-keychain-account' },
});
const switchedAccountResult = await freshGetUsage();
expect(switchedAccountResult.rateLimits?.fiveHourPercent).toBeUndefined();
expect(switchedAccountResult.error).toBe('no_credentials');
expect(vi.mocked(freshChildProcess.execFileSync)).toHaveBeenCalled();
});
it.each(['network failure', 'rate-limit backoff'])('skips Keychain on a no-data %s cache hit in a fresh process', async (outcome) => {
const configDir = '/tmp/test-claude';
const cachePath = `${configDir}/plugins/oh-my-claudecode/.usage-cache-anthropic.json`;
const claudeJsonPath = `${configDir}/.claude.json`;
const cachedCredentials = JSON.stringify({
claudeAiOauth: {
accessToken: 'warm-keychain-access',
refreshToken: 'warm-keychain-refresh',
expiresAt: Date.now() + 60 * 60 * 1000,
oauthAccount: { uuid: 'warm-keychain-account' },
},
});
process.env.CLAUDE_CONFIG_DIR = configDir;
vi.mocked(fs.existsSync).mockImplementation((path) => String(path) === claudeJsonPath);
vi.mocked(fs.readFileSync).mockImplementation((path) => String(path) === claudeJsonPath
? JSON.stringify({ oauthAccount: { accountUuid: 'warm-keychain-account' } })
: '{}');
vi.mocked(childProcess.execFileSync).mockImplementation((_file, args) => {
const argsArray = args;
if (argsArray.includes('find-generic-password') && argsArray.includes('-a')) {
return cachedCredentials;
}
throw new Error('The specified item could not be found in the keychain.');
});
const credentialIdentity = getUsageCredentialIdentity(false, true);
const timestamp = Date.now();
const rateLimitIdentity = 'anonymous';
const backoffUntil = timestamp + 60_000;
const cacheContent = JSON.stringify(outcome === 'network failure'
? {
timestamp,
source: 'anthropic',
credentialIdentity,
data: null,
error: true,
errorReason: 'network',
}
: {
timestamp,
source: 'anthropic',
credentialIdentity,
data: null,
error: false,
errorReason: 'rate_limited',
rateLimited: true,
rateLimitedCount: 1,
rateLimitedUntil: backoffUntil,
rateLimitIdentity,
rateLimitBackoffs: {
[rateLimitIdentity]: {
timestamp,
rateLimitedCount: 1,
rateLimitedUntil: backoffUntil,
},
},
});
vi.mocked(fs.existsSync).mockImplementation((path) => String(path) === cachePath || String(path) === claudeJsonPath);
vi.mocked(fs.readFileSync).mockImplementation((path) => String(path) === cachePath
? cacheContent
: String(path) === claudeJsonPath
? JSON.stringify({ oauthAccount: { accountUuid: 'warm-keychain-account' } })
: '{}');
vi.resetModules();
const freshFs = await import('fs');
const freshChildProcess = await import('child_process');
const freshHttps = (await import('https'));
vi.mocked(freshFs.existsSync).mockImplementation((path) => String(path) === cachePath || String(path) === claudeJsonPath);
vi.mocked(freshFs.readFileSync).mockImplementation((path) => String(path) === cachePath
? cacheContent
: String(path) === claudeJsonPath
? JSON.stringify({ oauthAccount: { accountUuid: 'warm-keychain-account' } })
: '{}');
vi.mocked(freshChildProcess.execFileSync).mockClear();
vi.mocked(freshChildProcess.execFileSync).mockImplementation(() => {
throw new Error('no-data cache hit should not read Keychain');
});
const { getUsage: freshGetUsage } = await import('../../hud/usage-api.js');
const result = await freshGetUsage();
expect(result.rateLimits).toBeNull();
expect(result.error).toBe(outcome === 'network failure' ? 'network' : 'rate_limited');
expect(vi.mocked(freshChildProcess.execFileSync)).not.toHaveBeenCalled();
expect(freshHttps.default.request).not.toHaveBeenCalled();
});
it('uses the raw ~-prefixed CLAUDE_CONFIG_DIR value for Keychain service lookup', async () => {
process.env.CLAUDE_CONFIG_DIR = '~/.claude-personal';
const oneHourFromNow = Date.now() + 60 * 60 * 1000;
@@ -1087,6 +1657,8 @@ describe('getUsage routing', () => {
it('reuses successful cached usage data for 90 seconds to avoid excessive polling', async () => {
vi.useFakeTimers();
vi.setSystemTime(new Date('2026-03-07T00:00:00Z'));
process.env.CLAUDE_CODE_OAUTH_TOKEN = 'cache-test-token';
const credentialIdentity = getUsageCredentialIdentity(true, true);
const mockedExistsSync = vi.mocked(fs.existsSync);
const mockedReadFileSync = vi.mocked(fs.readFileSync);
mockedExistsSync.mockImplementation((path) => String(path).endsWith('.usage-cache-anthropic.json'));
@@ -1095,6 +1667,7 @@ describe('getUsage routing', () => {
return JSON.stringify({
timestamp: Date.now() - 60_000,
source: 'anthropic',
credentialIdentity,
data: {
fiveHourPercent: 42,
weeklyPercent: 17,
@@ -1119,6 +1692,8 @@ describe('getUsage routing', () => {
vi.useRealTimers();
});
it('rehydrates scoped reset dates from serialized cache before rendering', async () => {
process.env.CLAUDE_CODE_OAUTH_TOKEN = 'cache-test-token';
const credentialIdentity = getUsageCredentialIdentity(true, true);
const mockedExistsSync = vi.mocked(fs.existsSync);
const mockedReadFileSync = vi.mocked(fs.readFileSync);
const resetsAt = new Date(Date.now() + 3_600_000).toISOString();
@@ -1128,6 +1703,7 @@ describe('getUsage routing', () => {
return JSON.stringify({
timestamp: Date.now() - 60_000,
source: 'anthropic',
credentialIdentity,
data: {
scopedWeeklyBuckets: [
{ id: 'fable', label: 'Fable', percent: 61, resetsAt, isActive: true },
@@ -1147,6 +1723,8 @@ describe('getUsage routing', () => {
it('respects configured usageApiPollIntervalMs for successful cache reuse', async () => {
vi.useFakeTimers();
vi.setSystemTime(new Date('2026-03-07T00:00:00Z'));
process.env.CLAUDE_CODE_OAUTH_TOKEN = 'cache-test-token';
const credentialIdentity = getUsageCredentialIdentity(true, true);
const mockedExistsSync = vi.mocked(fs.existsSync);
const mockedReadFileSync = vi.mocked(fs.readFileSync);
mockedExistsSync.mockImplementation((path) => {
@@ -1166,6 +1744,7 @@ describe('getUsage routing', () => {
return JSON.stringify({
timestamp: Date.now() - 120_000,
source: 'anthropic',
credentialIdentity,
data: {
fiveHourPercent: 42,
weeklyPercent: 17,
@@ -1239,6 +1818,7 @@ describe('getUsage routing', () => {
vi.setSystemTime(new Date('2026-03-07T00:00:00Z'));
process.env.ANTHROPIC_BASE_URL = 'https://api.z.ai/v1';
process.env.ANTHROPIC_AUTH_TOKEN = 'test-token';
const credentialIdentity = getUsageCredentialIdentity(true, true);
const mockedExistsSync = vi.mocked(fs.existsSync);
const mockedReadFileSync = vi.mocked(fs.readFileSync);
const mockedWriteFileSync = vi.mocked(fs.writeFileSync);
@@ -1262,6 +1842,7 @@ describe('getUsage routing', () => {
rateLimited: true,
rateLimitedCount: 4,
source: 'zai',
credentialIdentity,
data: null,
});
}
@@ -1290,6 +1871,7 @@ describe('getUsage routing', () => {
vi.setSystemTime(new Date('2026-03-07T00:00:00Z'));
process.env.ANTHROPIC_BASE_URL = 'https://api.z.ai/v1';
process.env.ANTHROPIC_AUTH_TOKEN = 'test-token';
const credentialIdentity = getUsageCredentialIdentity(true, true);
const mockedExistsSync = vi.mocked(fs.existsSync);
const mockedReadFileSync = vi.mocked(fs.readFileSync);
mockedExistsSync.mockImplementation((path) => {
@@ -1309,6 +1891,7 @@ describe('getUsage routing', () => {
return JSON.stringify({
timestamp: Date.now() - 90_000,
source: 'zai',
credentialIdentity,
data: null,
error: true,
errorReason: 'network',
@@ -1706,7 +2289,9 @@ describe('writeBackCredentials — Keychain vs file refresh', () => {
vi.clearAllMocks();
vi.mocked(fs.existsSync).mockReturnValue(false);
vi.mocked(fs.readFileSync).mockReturnValue('{}');
vi.mocked(childProcess.execFileSync).mockImplementation(() => { throw new Error('mock: no keychain'); });
vi.mocked(childProcess.execFileSync).mockImplementation(() => {
throw new Error('The specified item could not be found in the keychain.');
});
delete process.env.ANTHROPIC_BASE_URL;
delete process.env.ANTHROPIC_AUTH_TOKEN;
});
@@ -1747,7 +2332,7 @@ describe('writeBackCredentials — Keychain vs file refresh', () => {
return '';
}
// service-only fallback: no entry
throw new Error('mock: no service-only entry');
throw new Error('The specified item could not be found in the keychain.');
});
// Token refresh returns new tokens
httpsModule.default.request.mockImplementationOnce((_options, callback) => {
@@ -1797,6 +2382,8 @@ describe('writeBackCredentials — Keychain vs file refresh', () => {
const inner = written.claudeAiOauth ?? written;
expect(inner.accessToken).toBe('new-access-token');
expect(inner.refreshToken).toBe('new-refresh-token');
expect(inner.omcUsageProfileId).toBeDefined();
expect(inner.omcUsageProfileTokenHash).toBe(createHash('sha256').update('new-refresh-token').digest('hex'));
// File credential store should NOT have been written
const fileWriteCall = vi.mocked(fs.writeFileSync).mock.calls.find(c => String(c[0]).endsWith('.credentials.json'));
expect(fileWriteCall).toBeUndefined();
@@ -1807,21 +2394,28 @@ describe('writeBackCredentials — Keychain vs file refresh', () => {
const mockedExistsSync = vi.mocked(fs.existsSync);
const mockedReadFileSync = vi.mocked(fs.readFileSync);
const httpsModule = await import('https');
let credentialsContent = JSON.stringify({
claudeAiOauth: {
accessToken: 'expired-file-token',
refreshToken: 'file-refresh-token',
expiresAt: oneHourAgo,
},
});
// Keychain has no entry — only file credentials
execFileMock.mockImplementation(() => { throw new Error('mock: no keychain'); });
mockedExistsSync.mockImplementation((path) => String(path).endsWith('.credentials.json'));
execFileMock.mockImplementation(() => {
throw Object.assign(new Error('security command failed'), {
stderr: Buffer.from('The specified item could not be found in the keychain.'),
});
});
mockedExistsSync.mockImplementation(path => String(path).endsWith('.credentials.json'));
mockedReadFileSync.mockImplementation((path) => {
if (String(path).endsWith('.credentials.json')) {
return JSON.stringify({
claudeAiOauth: {
accessToken: 'expired-file-token',
refreshToken: 'file-refresh-token',
expiresAt: oneHourAgo,
},
});
return credentialsContent;
}
return '{}';
});
process.env.CLAUDE_CONFIG_DIR = '/tmp/test-claude';
const originalProfileIdentity = getUsageCredentialIdentity(false, true);
// Token refresh returns new tokens
httpsModule.default.request.mockImplementationOnce((_options, callback) => {
const req = new EventEmitter();
@@ -1864,6 +2458,10 @@ describe('writeBackCredentials — Keychain vs file refresh', () => {
const written = JSON.parse(String(fileWriteCall[1]));
expect(written.claudeAiOauth.accessToken).toBe('new-file-access-token');
expect(written.claudeAiOauth.refreshToken).toBe('new-file-refresh-token');
expect(written.claudeAiOauth.omcUsageProfileId).toBeDefined();
expect(written.claudeAiOauth.omcUsageProfileTokenHash).toBe(createHash('sha256').update('new-file-refresh-token').digest('hex'));
credentialsContent = JSON.stringify(written);
expect(getUsageCredentialIdentity(false, true)).toBe(originalProfileIdentity);
// Keychain write-back should NOT have been called with add-generic-password
const keychainWriteCall = execFileMock.mock.calls.find(c => Array.isArray(c[1]) && c[1].includes('add-generic-password'));
expect(keychainWriteCall).toBeUndefined();
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"usage-api.test.js","sourceRoot":"","sources":["../../../src/__tests__/hud/usage-api.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"usage-api.test.js","sourceRoot":"","sources":["../../../src/__tests__/hud/usage-api.test.ts"],"names":[],"mappings":"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 truncated
+1
View File
@@ -81,6 +81,7 @@ describe('HUD watch mode initialization', () => {
readStdinCache: vi.fn(() => stdin),
getContextPercent: vi.fn(() => 12),
getModelId: vi.fn(() => 'claude-test'),
getEffortLevel: vi.fn(() => null),
getModelName: vi.fn(() => 'claude-test'),
getRateLimitsFromStdin: vi.fn((value) => {
const fiveHour = value.rate_limits?.five_hour?.used_percentage;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"watch-mode-init.test.js","sourceRoot":"","sources":["../../../src/__tests__/hud/watch-mode-init.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"watch-mode-init.test.js","sourceRoot":"","sources":["../../../src/__tests__/hud/watch-mode-init.test.ts"],"names":[],"mappings":"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 truncated
+27
View File
@@ -4,6 +4,7 @@ import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { afterEach, describe, expect, it } from 'vitest';
import { clearWorktreeCache, resolveSessionStatePaths } from '../lib/worktree-paths.js';
import { PASTED_ECHO_PROMPT_SENTINEL } from '../hooks/autopilot/enforcement.js';
const SCRIPT_PATH = join(process.cwd(), 'scripts', 'keyword-detector.mjs');
const NODE = process.execPath;
const tempDirs = [];
@@ -239,6 +240,32 @@ describe('keyword-detector.mjs — pasted system-echo re-entry guard', () => {
expect(state.prompt).not.toBe('(prompt omitted: pasted system echo)');
});
});
describe('keyword-detector.mjs — sanitized pasted-echo prompt (#4250)', () => {
// An echo signature with no strippable block makes sanitizePromptForState()
// persist only the sentinel. Arming a mode from such a prompt leaves an
// orphan state that persistent-mode cannot attribute and blocks every Stop.
const prompt = 'use autopilot to fix the parser, then run /oh-my-claudecode:cancel';
it('does not arm autopilot when the prompt sanitizes to the pasted-echo sentinel', () => {
const cwd = makeCwd('kd-issue-4250-');
const sid = 'sess-issue-4250';
const output = runKeywordDetector(prompt, cwd, sid);
expect(output.continue).toBe(true);
expect(existsSync(stateFile(cwd, sid, 'autopilot'))).toBe(false);
});
});
describe('pasted-echo prompt sentinel parity (#4250)', () => {
it('keyword-detector writes the exact sentinel every persistent-mode implementation treats as orphaned', () => {
const declaration = /PASTED_ECHO_PROMPT_SENTINEL = (['"])(.*?)\1;/;
for (const file of [
'scripts/keyword-detector.mjs',
'scripts/persistent-mode.mjs',
'scripts/persistent-mode.cjs',
]) {
const match = readFileSync(join(process.cwd(), file), 'utf-8').match(declaration);
expect(match?.[2], file).toBe(PASTED_ECHO_PROMPT_SENTINEL);
}
});
});
describe('keyword-detector.mjs — state.prompt sanitization', () => {
it('truncates oversized prompts when writing ralph state', () => {
const cwd = makeCwd('kd-prompt-len-');
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"keyword-detector-echo-guard.test.js","sourceRoot":"","sources":["../../src/__tests__/keyword-detector-echo-guard.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"keyword-detector-echo-guard.test.js","sourceRoot":"","sources":["../../src/__tests__/keyword-detector-echo-guard.test.ts"],"names":[],"mappings":"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 truncated
+12 -2
View File
@@ -49,13 +49,23 @@ describe('scripts/permission-handler.mjs runtime entrypoint', () => {
afterEach(() => {
rmSync(tempDir, { recursive: true, force: true });
});
it('auto-allows repo-scoped inspection and single-file tests only inside a git worktree', () => {
it('auto-allows repo-scoped inspection but not tests inside a git worktree', () => {
const inspectionResult = runPermissionHandler('cat src/sample.ts', gitDir);
expect(inspectionResult.continue).toBe(true);
expect(inspectionResult.hookSpecificOutput?.decision?.behavior).toBe('allow');
const targetedTestResult = runPermissionHandler('vitest run src/__tests__/sample.test.ts', gitDir);
expect(targetedTestResult.continue).toBe(true);
expect(targetedTestResult.hookSpecificOutput?.decision?.behavior).toBe('allow');
expect(targetedTestResult.hookSpecificOutput?.decision?.behavior).not.toBe('allow');
});
it.each([
`git commit -m "$(cat <<'EOF'\nfeat: commit message\nEOF\n)"`,
`git tag -a v1.0.0 -m "$(cat <<'EOF'\nRelease v1.0.0\nEOF\n)"`,
`git commit -m "$(cat <<EOF\n$(touch /tmp/permission-bypass)\nEOF\n)"`,
`git commit; rm -rf / <<'EOF'\nmalicious payload\nEOF`,
])('does not auto-allow Git heredoc commands: %s', (command) => {
const result = runPermissionHandler(command, gitDir);
expect(result.continue).toBe(true);
expect(result.hookSpecificOutput?.decision?.behavior).not.toBe('allow');
});
it('does not auto-allow ripgrep directory or hidden sweeps inside a git worktree', () => {
writeFileSync(join(gitDir, '.env.local'), 'SECRET=1\n');
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"permission-handler-runtime-entrypoint.test.js","sourceRoot":"","sources":["../../src/__tests__/permission-handler-runtime-entrypoint.test.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"permission-handler-runtime-entrypoint.test.js","sourceRoot":"","sources":["../../src/__tests__/permission-handler-runtime-entrypoint.test.ts"],"names":[],"mappings":"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"}
+297 -7
View File
@@ -1,13 +1,31 @@
import { execFileSync } from 'node:child_process';
import { existsSync, mkdtempSync, mkdirSync, readFileSync, rmSync } from 'node:fs';
import { join, resolve } from 'node:path';
import { afterEach, describe, expect, it } from 'vitest';
import { execFileSync, spawn } from 'node:child_process';
import { chmodSync, cpSync, existsSync, mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
import { tmpdir } from 'node:os';
import { delimiter, join, resolve } from 'node:path';
import { afterAll, afterEach, describe, expect, it } from 'vitest';
import { provisionStandaloneStateLockBridge } from '../installer/index.js';
const NODE = process.execPath;
const REPO_ROOT = resolve(join(__dirname, '..', '..'));
const SCRIPT_PATH = join(REPO_ROOT, 'scripts', 'post-tool-use-failure.mjs');
const TEMPLATE_ROOT = mkdtempSync(join(tmpdir(), 'omc-post-tool-use-failure-template-'));
const TEMPLATE_HOOKS_ROOT = join(TEMPLATE_ROOT, 'hooks');
cpSync(join(REPO_ROOT, 'templates', 'hooks'), TEMPLATE_HOOKS_ROOT, { recursive: true });
provisionStandaloneStateLockBridge(REPO_ROOT, join(TEMPLATE_HOOKS_ROOT, 'lib', 'state-lock.mjs'));
const TEMPLATE_SCRIPT_PATH = join(TEMPLATE_HOOKS_ROOT, 'post-tool-use-failure.mjs');
const WINDOWS_SIMULATION = `
import { createRequire } from 'node:module';
import { pathToFileURL } from 'node:url';
const require = createRequire(process.argv[1]);
require('better-sqlite3');
Object.defineProperty(process, 'platform', { value: 'win32', configurable: true });
await import(pathToFileURL(process.argv[2]).href);
`;
const TEST_TMP_ROOT = join(REPO_ROOT, '.tmp-post-tool-use-failure-tests');
function runHook(input, extraEnv) {
const raw = execFileSync(NODE, [SCRIPT_PATH], {
afterAll(() => {
rmSync(TEMPLATE_ROOT, { recursive: true, force: true });
});
function runHook(input, extraEnv, scriptPath = SCRIPT_PATH) {
const raw = execFileSync(NODE, [scriptPath], {
input: JSON.stringify(input),
encoding: 'utf-8',
env: {
@@ -61,9 +79,281 @@ describe('post-tool-use-failure.mjs', () => {
expect(existsSync(errorPath)).toBe(true);
const errorState = JSON.parse(readFileSync(errorPath, 'utf-8'));
expect(errorState.tool_name).toBe('mcp__omx_state__state_read');
expect(errorState.error).toBe('Connection refused');
expect(errorState.error).toBe('Tool execution failed (details omitted for privacy).');
expect(errorState.retry_count).toBe(1);
});
it.each([
['plugin script', SCRIPT_PATH],
['installer template', TEMPLATE_SCRIPT_PATH],
])('does not persist tool input or error text that may contain secrets (%s)', (_surface, scriptPath) => {
const cwd = makeRepoLocalTempDir();
const inputSecret = 'issue-4278-input-password';
const errorSecret = 'issue-4278-error-bearer-token';
const errorPath = join(cwd, '.omc', 'state', 'last-tool-error.json');
const result = runHook({
tool_name: 'Bash',
tool_input: { command: `psql postgres://user:${inputSecret}@database.example/app` },
error: `Request failed: Authorization: Bearer ${errorSecret}`,
cwd,
}, undefined, scriptPath);
const serializedState = readFileSync(errorPath, 'utf-8');
const state = JSON.parse(serializedState);
expect(serializedState).not.toContain(inputSecret);
expect(serializedState).not.toContain(errorSecret);
expect(state).toEqual({
tool_name: 'Bash',
error: 'Tool execution failed (details omitted for privacy).',
timestamp: expect.any(String),
retry_count: 1,
});
expect(JSON.stringify(result)).not.toContain(inputSecret);
expect(JSON.stringify(result)).not.toContain(errorSecret);
});
it.each([
['plugin script', SCRIPT_PATH],
['installer template', TEMPLATE_SCRIPT_PATH],
])('continues retry tracking without retaining failure text (%s)', (_surface, scriptPath) => {
const cwd = makeRepoLocalTempDir();
const errorPath = join(cwd, '.omc', 'state', 'last-tool-error.json');
for (const error of ['first failure', 'second failure']) {
const result = runHook({
tool_name: 'Bash',
tool_input: { command: 'npm test' },
error,
cwd,
}, undefined, scriptPath);
expect(result.hookSpecificOutput?.additionalContext).toContain('Tool "Bash" failed.');
}
const state = JSON.parse(readFileSync(errorPath, 'utf-8'));
expect(state.tool_name).toBe('Bash');
expect(state.error).toBe('Tool execution failed (details omitted for privacy).');
expect(Number.isFinite(Date.parse(state.timestamp))).toBe(true);
expect(state.retry_count).toBe(2);
});
it.each([
['plugin script', SCRIPT_PATH],
['installer template', TEMPLATE_SCRIPT_PATH],
])('reclaims a stale fallback lock and advances retry guidance (%s)', (surface, scriptPath) => {
const cwd = makeRepoLocalTempDir();
const sessionId = `stale-fallback-${surface.replaceAll(' ', '-')}`;
const sessionStateDir = join(cwd, '.omc', 'state', 'sessions', sessionId);
const statePath = join(sessionStateDir, 'last-tool-error-state.json');
const lockPath = `${statePath}.lock`;
mkdirSync(sessionStateDir, { recursive: true });
writeFileSync(statePath, JSON.stringify({
tool_name: 'Bash',
error: 'Tool execution failed (details omitted for privacy).',
timestamp: new Date().toISOString(),
retry_count: 4,
}));
writeFileSync(lockPath, JSON.stringify({ pid: 999999999, timestamp: Date.now() }));
const result = runHook({
tool_name: 'Bash',
tool_input: { command: 'false' },
error: 'exit code 1',
cwd,
session_id: sessionId,
}, {
OMC_STATE_DIR: '',
OMC_TEST_BETTER_SQLITE3_LOAD_FAILURE: '1',
}, scriptPath);
const state = JSON.parse(readFileSync(statePath, 'utf8'));
expect(result.hookSpecificOutput?.additionalContext).toContain('Tool "Bash" has failed 5 times. Stop retrying');
expect(state).toEqual({
tool_name: 'Bash',
error: 'Tool execution failed (details omitted for privacy).',
timestamp: expect.any(String),
retry_count: 5,
});
expect(existsSync(lockPath)).toBe(false);
});
it.each([
['plugin script', SCRIPT_PATH],
['installer template', TEMPLATE_SCRIPT_PATH],
])('does not write failure state without the exclusive lock (%s)', (_surface, scriptPath) => {
const cwd = makeRepoLocalTempDir();
const stateDir = join(cwd, '.omc', 'state');
const errorPath = join(stateDir, 'last-tool-error.json');
mkdirSync(stateDir, { recursive: true });
writeFileSync(`${errorPath}.lock`, JSON.stringify({ pid: process.pid, timestamp: Date.now() }));
const result = runHook({
tool_name: 'Bash',
tool_input: { command: 'false' },
error: 'exit code 1',
cwd,
}, undefined, scriptPath);
expect(result.continue).toBe(true);
expect(existsSync(errorPath)).toBe(false);
expect(existsSync(`${errorPath}.lock`)).toBe(true);
});
it.skipIf(process.platform !== 'linux')('keeps failure guidance within budget for contended Windows locks', () => {
for (const [surface, scriptPath] of [['plugin script', SCRIPT_PATH], ['installer template', TEMPLATE_SCRIPT_PATH]]) {
const cwd = makeRepoLocalTempDir();
const sessionId = `windows-contention-${surface.replaceAll(' ', '-')}`;
const stateRoot = join(cwd, '.omc', 'state');
const sessionStateDir = join(stateRoot, 'sessions', sessionId);
mkdirSync(sessionStateDir, { recursive: true });
const statePath = join(sessionStateDir, 'last-tool-error-state.json');
const lockPath = `${statePath}.lock`;
const databasePath = join(stateRoot, '.state-mutation-locks.db');
const probeDirectory = join(cwd, 'fake-bin');
const probeCountPath = join(probeDirectory, 'calls');
const slowProbeMarkerPath = join(probeDirectory, 'slow-probe-started');
mkdirSync(probeDirectory);
const processStart = 'ticks:638933184000000001';
const nonce = '123e4567-e89b-12d3-a456-426614174000';
const setupScript = `
import Database from 'better-sqlite3';
import { writeFileSync } from 'node:fs';
import { resolve } from 'node:path';
const lockPath = process.argv[1];
const databasePath = process.argv[2];
const ownerPid = Number(process.argv[3]);
const processStart = process.argv[4];
const nonce = process.argv[5];
const createdAt = new Date().toISOString();
const database = new Database(databasePath);
database.pragma('journal_mode = WAL');
database.exec('CREATE TABLE IF NOT EXISTS state_mutation_locks (lock_key TEXT PRIMARY KEY, version INTEGER NOT NULL, pid INTEGER NOT NULL, process_start TEXT NOT NULL, created_at TEXT NOT NULL, nonce TEXT NOT NULL)');
database.prepare('INSERT OR REPLACE INTO state_mutation_locks (lock_key, version, pid, process_start, created_at, nonce) VALUES (?, 1, ?, ?, ?, ?)')
.run(resolve(lockPath), ownerPid, processStart, createdAt, nonce);
writeFileSync(lockPath, JSON.stringify({ version: 1, pid: ownerPid, processStart, createdAt, nonce }));
database.close();
`;
execFileSync(NODE, [
'--input-type=module', '-e', setupScript, lockPath, databasePath, String(process.pid), processStart, nonce,
], { encoding: 'utf8', timeout: 10000 });
const powershellPath = join(probeDirectory, 'powershell');
writeFileSync(powershellPath, `#!/bin/sh
printf x >> '${probeCountPath}'
if [ ! -f '${slowProbeMarkerPath}' ]; then
: > '${slowProbeMarkerPath}'
printf '638933184000000001\\n'
else
/usr/bin/sleep 3
printf '638933184000000001\\n'
fi
`);
chmodSync(powershellPath, 0o755);
const startedAt = Date.now();
const raw = execFileSync(NODE, [
'--input-type=module', '-e', WINDOWS_SIMULATION, join(REPO_ROOT, 'package.json'), scriptPath,
], {
cwd,
input: JSON.stringify({
tool_name: 'Bash',
tool_input: { command: 'false' },
error: 'exit code 1',
cwd,
session_id: sessionId,
}),
encoding: 'utf8',
env: {
...process.env,
CLAUDE_PLUGIN_ROOT: REPO_ROOT,
NODE_ENV: 'test',
OMC_STATE_DIR: '',
OMC_TEST_FLOCK_AVAILABLE: '',
OMC_TEST_BETTER_SQLITE3_LOAD_FAILURE: '',
PATH: `${probeDirectory}${delimiter}${process.env.PATH ?? ''}`,
},
timeout: 2500,
}).trim();
const elapsedMs = Date.now() - startedAt;
const result = JSON.parse(raw);
expect(result.continue).toBe(true);
expect(result.hookSpecificOutput?.hookEventName).toBe('PostToolUseFailure');
expect(result.hookSpecificOutput?.additionalContext).toContain('Tool "Bash" failed.');
expect(existsSync(statePath)).toBe(false);
expect(readFileSync(probeCountPath, 'utf8')).toHaveLength(2);
expect(elapsedMs).toBeLessThan(2200);
}
}, 15000);
it.skipIf(process.platform !== 'linux')('keeps failure guidance within budget during SQLite writer contention', async () => {
const cwd = makeRepoLocalTempDir();
const sessionId = 'windows-contention-sqlite';
const stateRoot = join(cwd, '.omc', 'state');
const sessionStateDir = join(stateRoot, 'sessions', sessionId);
mkdirSync(sessionStateDir, { recursive: true });
const statePath = join(sessionStateDir, 'last-tool-error-state.json');
const databasePath = join(stateRoot, '.state-mutation-locks.db');
const createDatabaseScript = `
import Database from 'better-sqlite3';
const database = new Database(process.argv[1]);
database.pragma('journal_mode = WAL');
database.exec('CREATE TABLE IF NOT EXISTS state_mutation_locks (lock_key TEXT PRIMARY KEY, version INTEGER NOT NULL, pid INTEGER NOT NULL, process_start TEXT NOT NULL, created_at TEXT NOT NULL, nonce TEXT NOT NULL)');
database.close();
`;
execFileSync(NODE, ['--input-type=module', '-e', createDatabaseScript, databasePath], {
encoding: 'utf8',
timeout: 10000,
});
const holderScript = `
import Database from 'better-sqlite3';
const database = new Database(process.argv[1]);
database.pragma('journal_mode = WAL');
database.exec('BEGIN IMMEDIATE');
process.stdout.write('lock-acquired\\n');
process.stdin.resume();
process.stdin.once('end', () => {
database.exec('ROLLBACK');
database.close();
});
`;
const holder = spawn(NODE, ['--input-type=module', '-e', holderScript, databasePath], {
stdio: ['pipe', 'pipe', 'pipe'],
});
const holderExit = new Promise((resolve) => holder.once('exit', () => resolve()));
try {
await new Promise((resolve, reject) => {
const timeout = setTimeout(() => reject(new Error('SQLite writer did not acquire its lock')), 5000);
holder.once('error', (error) => {
clearTimeout(timeout);
reject(error);
});
holder.stdout.on('data', (data) => {
if (String(data).includes('lock-acquired')) {
clearTimeout(timeout);
resolve();
}
});
});
const startedAt = Date.now();
const raw = execFileSync(NODE, [
'--input-type=module', '-e', WINDOWS_SIMULATION, join(REPO_ROOT, 'package.json'), SCRIPT_PATH,
], {
cwd,
input: JSON.stringify({
tool_name: 'Bash',
tool_input: { command: 'false' },
error: 'exit code 1',
cwd,
session_id: sessionId,
}),
encoding: 'utf8',
env: {
...process.env,
CLAUDE_PLUGIN_ROOT: REPO_ROOT,
NODE_ENV: 'test',
OMC_STATE_DIR: '',
OMC_TEST_FLOCK_AVAILABLE: '',
OMC_TEST_BETTER_SQLITE3_LOAD_FAILURE: '',
},
timeout: 2500,
}).trim();
const elapsedMs = Date.now() - startedAt;
const result = JSON.parse(raw);
expect(result.continue).toBe(true);
expect(result.hookSpecificOutput?.hookEventName).toBe('PostToolUseFailure');
expect(result.hookSpecificOutput?.additionalContext).toContain('Tool "Bash" failed.');
expect(existsSync(statePath)).toBe(false);
expect(elapsedMs).toBeLessThan(2200);
}
finally {
holder.stdin.end();
await holderExit;
}
}, 15000);
it('suppresses broad AGENTS scan permission-denied noise for Bash', () => {
const cwd = makeRepoLocalTempDir();
const errorPath = join(cwd, '.omc', 'state', 'last-tool-error.json');
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"post-tool-use-failure.test.js","sourceRoot":"","sources":["../../src/__tests__/post-tool-use-failure.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"post-tool-use-failure.test.js","sourceRoot":"","sources":["../../src/__tests__/post-tool-use-failure.test.ts"],"names":[],"mappings":"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 truncated
+8
View File
@@ -356,4 +356,12 @@ describe('mergeProjectMemory', () => {
expect(merged.build.scripts.build).toBe('tsc');
});
});
describe('custom note identity delimiters', () => {
it('preserves distinct category/content tuples with embedded delimiters', () => {
const first = { category: 'api', content: 'status::failure', timestamp: 1 };
const second = { category: 'api::status', content: 'failure', timestamp: 2 };
const result = deepMerge({ customNotes: [first] }, { customNotes: [second] });
expect(result.customNotes).toEqual([first, second]);
});
});
//# sourceMappingURL=project-memory-merge.test.js.map
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"project-memory-merge.test.js","sourceRoot":"","sources":["../../src/__tests__/project-memory-merge.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAG/E,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAE9E,SAAS,UAAU,CAAC,YAAoC,EAAE;IACxD,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,UAAU;QACvB,SAAS,EAAE;YACT,SAAS,EAAE,EAAE;YACb,UAAU,EAAE,EAAE;YACd,cAAc,EAAE,IAAI;YACpB,OAAO,EAAE,IAAI;SACd;QACD,KAAK,EAAE;YACL,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,EAAE;SACZ;QACD,WAAW,EAAE;YACX,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,IAAI;YACjB,WAAW,EAAE,IAAI;YACjB,gBAAgB,EAAE,IAAI;SACvB;QACD,SAAS,EAAE;YACT,UAAU,EAAE,KAAK;YACjB,UAAU,EAAE,EAAE;YACd,eAAe,EAAE,EAAE;YACnB,WAAW,EAAE,IAAI;SAClB;QACD,WAAW,EAAE,EAAE;QACf,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,EAAE;QAClB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,MAAM,GAAG,SAAS,CACtB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAA6B,EACzC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CACf,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACjD,MAAM,IAAI,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAA6B,CAAC;QACnE,MAAM,QAAQ,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAA6B,CAAC;QACpE,MAAM,QAAQ,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE1D,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAE1B,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,MAAM,GAAG,SAAS,CACtB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAA6B,EACzC,EAAE,CAAC,EAAE,IAAI,EAAE,CACZ,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,MAAM,GAAG,SAAS,CACtB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAA6B,EACzC,EAAE,CAAC,EAAE,SAAS,EAAE,CACjB,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG,SAAS,CACtB,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAA6B,EAClD,EAAE,CAAC,EAAE,QAAQ,EAAE,CAChB,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,MAAM,GAAG,SAAS,CACtB,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAA6B,EAC/C,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CACrB,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,EAA6B,CAAC;QACjD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC1E,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,2CAA2C;QAC3C,MAAM,CAAE,EAAU,CAAC,QAAQ,CAAC,CAAC,aAAa,EAAE,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QACpD,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,CAAC,EAA6B,CAAC;QACjD,MAAM,SAAS,GAAG,EAAE,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAA6B,CAAC;QAClH,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,4EAA4E;IAC5E,2BAA2B;IAC3B,4EAA4E;IAE5E,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;QAC7D,MAAM,QAAQ,GAAG,UAAU,CAAC;YAC1B,WAAW,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE;SACzG,CAAC,CAAC;QACH,MAAM,QAAQ,GAA2B;YACvC,WAAW,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE;SACzG,CAAC;QAEF,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACtD,oEAAoE;QACpE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,YAAY,CAALine truncated
{"version":3,"file":"project-memory-merge.test.js","sourceRoot":"","sources":["../../src/__tests__/project-memory-merge.test.ts"],"names":[],"mappings":"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 truncated
+24
View File
@@ -28,10 +28,26 @@ describe('AzureDevOpsProvider', () => {
expect(provider.getRequiredCLI()).toBe('az');
});
});
describe('hostname identity', () => {
it.each([
'https://dev.azure.com.evil.invalid/org/proj/_git/repo',
'https://notdev.azure.com/org/proj/_git/repo',
'git@notssh.dev.azure.com:v3/org/proj/repo',
'https://visualstudio.com.evil.invalid/project/_git/repo',
])('rejects lookalike host %s', (url) => {
expect(provider.detectFromRemote(url)).toBe(false);
});
it('accepts the official hostname case-insensitively', () => {
expect(provider.detectFromRemote('https://DEV.AZURE.COM/org/project/_git/repo')).toBe(true);
});
});
describe('detectFromRemote', () => {
it('returns true for dev.azure.com URLs', () => {
expect(provider.detectFromRemote('https://dev.azure.com/org/project/_git/repo')).toBe(true);
});
it('returns true for HTTPS URLs with userinfo', () => {
expect(provider.detectFromRemote('https://build-user:pat@dev.azure.com/org/project/_git/repo')).toBe(true);
});
it('returns true for ssh.dev.azure.com URLs', () => {
expect(provider.detectFromRemote('git@ssh.dev.azure.com:v3/org/project/repo')).toBe(true);
});
@@ -155,4 +171,12 @@ describe('AzureDevOpsProvider', () => {
});
});
});
describe('Azure authority boundaries', () => {
it.each(['https://evil.invalid?x@dev.azure.com/org/project/_git/repo', 'https://evil.invalid#x@dev.azure.com/org/project/_git/repo'])('rejects Azure-looking text outside the authority: %s', url => {
expect(new AzureDevOpsProvider().detectFromRemote(url)).toBe(false);
});
it.each(['https://dev.azure.com./Org/Project/_git/Repo', 'git@ssh.dev.azure.com.:v3/Org/Project/Repo', 'https://Org.visualstudio.com./Project/_git/Repo'])('recognizes a single terminal DNS root dot: %s', url => {
expect(new AzureDevOpsProvider().detectFromRemote(url)).toBe(true);
});
});
//# sourceMappingURL=azure-devops.test.js.map
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"azure-devops.test.js","sourceRoot":"","sources":["../../../src/__tests__/providers/azure-devops.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"azure-devops.test.js","sourceRoot":"","sources":["../../../src/__tests__/providers/azure-devops.test.ts"],"names":[],"mappings":"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 truncated
+78 -1
View File
@@ -1,5 +1,9 @@
import { describe, it, expect } from 'vitest';
import { detectProvider, parseRemoteUrl } from '../../providers/index.js';
import { execFileSync } from 'node:child_process';
import { mkdirSync, mkdtempSync, rmSync } from 'node:fs';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { detectProvider, parseRemoteUrl, parseRemoteFromCwd, resetProviderCache } from '../../providers/index.js';
describe('detectProvider', () => {
it('detects GitHub from HTTPS URL', () => {
expect(detectProvider('https://github.com/user/repo.git')).toBe('github');
@@ -84,6 +88,25 @@ describe('parseRemoteUrl', () => {
repo: 'repo',
});
});
it.each([
['HTTPS://DEV.AZURE.COM/Org/Project/_git/Repo.GIT', 'dev.azure.com'],
['git@SSH.DEV.AZURE.COM:v3/Org/Project/Repo.GIT', 'dev.azure.com'],
['HTTPS://Org.VISUALSTUDIO.COM/Project/_git/Repo.GIT', 'Org.visualstudio.com'],
])('parses Azure host and scheme case without changing path case: %s', (url, host) => {
expect(parseRemoteUrl(url)).toEqual({
provider: 'azure-devops', host, owner: 'Org/Project', repo: 'Repo.GIT',
});
});
it('detects and parses Azure DevOps HTTPS URLs with userinfo', () => {
const url = 'https://build-user:pat@dev.azure.com/org/project/_git/repo';
expect(detectProvider(url)).toBe('azure-devops');
expect(parseRemoteUrl(url)).toEqual({
provider: 'azure-devops',
host: 'dev.azure.com',
owner: 'org/project',
repo: 'repo',
});
});
it('parses Azure DevOps SSH URL', () => {
const result = parseRemoteUrl('git@ssh.dev.azure.com:v3/org/project/repo');
expect(result).toEqual({
@@ -178,4 +201,58 @@ describe('parseRemoteUrl', () => {
});
});
});
describe('Azure provider hostname identity', () => {
it.each([
'https://dev.azure.com.evil.invalid/org/proj/_git/repo',
'https://notdev.azure.com/org/proj/_git/repo',
'git@notssh.dev.azure.com:v3/org/proj/repo',
])('does not classify a lookalike host as Azure DevOps: %s', (url) => {
expect(detectProvider(url)).toBe('unknown');
expect(parseRemoteUrl(url)?.provider).toBe('unknown');
});
});
describe('HTTPS authority delimiters and Azure DNS root dots', () => {
it.each(['https://evil.invalid?x@github.com/org/repo', 'https://evil.invalid#x@dev.azure.com/org/project/_git/repo'])('does not consume query or fragment text as userinfo: %s', (url) => {
expect(detectProvider(url)).toBe('unknown');
expect(parseRemoteUrl(url)?.provider).not.toBe('github');
expect(parseRemoteUrl(url)?.provider).not.toBe('azure-devops');
});
it.each([
['https://dev.azure.com./Org/Project/_git/Repo', 'Org/Project'],
['git@ssh.dev.azure.com.:v3/Org/Project/Repo', 'Org/Project'],
['https://Org.visualstudio.com./Project/_git/Repo', 'Org/Project'],
])('recognizes Azure absolute DNS remote %s', (url, owner) => {
expect(detectProvider(url)).toBe('azure-devops');
expect(parseRemoteUrl(url)).toMatchObject({ provider: 'azure-devops', owner, repo: 'Repo' });
});
});
describe('remote URL cache cwd identity', () => {
it('resolves the same relative path against the current working directory', () => {
const originalCwd = process.cwd();
const tempRoot = mkdtempSync(join(tmpdir(), 'omc-provider-cache-'));
const firstParent = join(tempRoot, 'first');
const secondParent = join(tempRoot, 'second');
resetProviderCache();
try {
for (const [parent, remote] of [
[firstParent, 'https://github.com/one/first.git'],
[secondParent, 'https://gitlab.com/two/second.git'],
]) {
const repoDir = join(parent, 'project');
mkdirSync(repoDir, { recursive: true });
execFileSync('git', ['init', '--quiet'], { cwd: repoDir });
execFileSync('git', ['remote', 'add', 'origin', remote], { cwd: repoDir });
}
process.chdir(firstParent);
expect(parseRemoteFromCwd('project')).toMatchObject({ provider: 'github', owner: 'one', repo: 'first' });
process.chdir(secondParent);
expect(parseRemoteFromCwd('project')).toMatchObject({ provider: 'gitlab', owner: 'two', repo: 'second' });
}
finally {
process.chdir(originalCwd);
resetProviderCache();
rmSync(tempRoot, { recursive: true, force: true });
}
});
});
//# sourceMappingURL=detection.test.js.map
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"detection.test.js","sourceRoot":"","sources":["../../../src/__tests__/providers/detection.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"detection.test.js","sourceRoot":"","sources":["../../../src/__tests__/providers/detection.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAElH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,cAAc,CAAC,kCAAkC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,cAAc,CAAC,8BAA8B,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,cAAc,CAAC,sCAAsC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,CAAC,cAAc,CAAC,kCAAkC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC1C,MAAM,CAAC,cAAc,CAAC,0CAA0C,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,cAAc,CAAC,sCAAsC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC7C,MAAM,CAAC,cAAc,CAAC,6CAA6C,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,cAAc,CAAC,2CAA2C,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,cAAc,CAAC,sDAAsD,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACtG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,cAAc,CAAC,8CAA8C,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,cAAc,CAAC,sCAAsC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,cAAc,CAAC,wCAAwC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,cAAc,CAAC,yCAAyC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,CAAC,cAAc,CAAC,gCAAgC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,cAAc,CAAC,uCAAuC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,MAAM,GAAG,cAAc,CAAC,kCAAkC,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,MAAM,GAAG,cAAc,CAAC,8BAA8B,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,MAAM;YACb,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,MAAM,GAAG,cAAc,CAAC,sCAAsC,CAAC,CAAC;QACtE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,YAAY;YAClB,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,SAAS;SAChB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,MAAM,GAAG,cAAc,CAAC,6CAA6C,CAAC,CAAC;QAC7E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,IAAI,CAAC;QACN,CAAC,iDAAiD,EAAE,eAAe,CAAC;QACpE,CAAC,+CAA+C,EAAE,eAAe,CAAC;QAClE,CAAC,oDAAoD,EAAE,sBAAsB,CAAC;KAC/E,CAAC,CAAC,kEAAkE,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACnF,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAClC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,UAAU;SACvE,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,GAAG,GAAG,4DAA4D,CAAC;QACzE,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACjD,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC;YAClC,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,MAAM,GAAG,cAAc,CAAC,2CAA2C,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,eAAe;YACrB,KAAK,EAAE,aAAa;YACpB,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,MAAM,GAAG,cAAc,CAAC,sDAAsD,CAAC,CAAC;QACtF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE,cAAc;YACxB,IAAI,EAAE,wBAAwB;YAC9B,KAAK,EAAE,iBAAiB;YACxB,IAAI,EAAE,QAAQ;SACf,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG,cAAc,CAAC,kDAAkD,CAAC,CAAC;QAClF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,QAAQ,EAAE,QAAQ;YAClB,IAAI,EAAE,oBAAoB;YAC1B,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,MAAM;SACb,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,cAAc,CAAC,qCAAqC,CAAC,CAAC;QACrELine truncated
+189 -17
View File
@@ -37,10 +37,10 @@ function writeVersion(version) {
writeFileSync(join(dir, 'hooks', 'hooks.json'), '{}\n');
return dir;
}
function installedPlugins() {
function installedPlugins(installPath = join(pluginDir, ACTIVE)) {
writeFileSync(join(configDir, 'plugins', 'installed_plugins.json'), JSON.stringify({
version: 2,
plugins: { 'oh-my-claudecode@omc': [{ installPath: join(pluginDir, ACTIVE), version: ACTIVE }] },
plugins: { 'oh-my-claudecode@omc': [{ installPath, version: ACTIVE }] },
}));
}
/**
@@ -50,9 +50,9 @@ function installedPlugins() {
*/
function hookResolves(version) {
const root = join(pluginDir, version);
return existsSync(join(root, 'hooks', 'hooks.json'))
&& existsSync(join(root, 'scripts', 'run.cjs'))
&& existsSync(join(root, 'scripts'));
return (existsSync(join(root, 'hooks', 'hooks.json')) &&
existsSync(join(root, 'scripts', 'run.cjs')) &&
existsSync(join(root, 'scripts')));
}
/**
* Make process liveness deterministic: this process is alive, every other pid is
@@ -83,6 +83,162 @@ afterEach(() => {
rmSync(configDir, { recursive: true, force: true });
});
describe('purgeStalePluginCacheVersions on a real filesystem', () => {
it.each(['missing', 'incomplete'])('preserves pinned paths when the registered active target is %s', (state) => {
const stale = writeVersion(STALE);
for (const version of LEGACY)
symlinkSync(stale, join(pluginDir, version), 'dir');
makeStale(stale);
rmSync(join(pluginDir, ACTIVE), { recursive: true, force: true });
if (state === 'incomplete')
mkdirSync(join(pluginDir, ACTIVE));
const result = purgeStalePluginCacheVersions();
expect(result.symlinked).toBe(0);
expect(result.errors).toHaveLength(1);
expect(lstatSync(stale).isDirectory()).toBe(true);
for (const version of [STALE, ...LEGACY])
expect(hookResolves(version)).toBe(true);
expect(readdirSync(pluginDir).filter((name) => name.includes('.omc-stale-'))).toEqual([]);
});
it.each(['win32', 'darwin'])('recognizes a mixed-case OMC cache directory on %s', (platform) => {
const originalPlatform = process.platform;
Object.defineProperty(process, 'platform', {
value: platform,
configurable: true,
});
try {
rmSync(join(configDir, 'plugins', 'cache', 'omc'), {
recursive: true,
force: true,
});
pluginDir = join(configDir, 'plugins', 'cache', 'omc', 'Oh-My-ClaudeCode');
mkdirSync(pluginDir, { recursive: true });
const active = join(pluginDir, ACTIVE);
mkdirSync(active);
const stale = writeVersion(STALE);
makeStale(stale);
installedPlugins();
const result = purgeStalePluginCacheVersions();
expect(result.symlinked).toBe(0);
expect(result.errors).toHaveLength(1);
expect(lstatSync(stale).isDirectory()).toBe(true);
expect(hookResolves(STALE)).toBe(true);
expect(readdirSync(pluginDir).filter((name) => name.includes('.omc-stale-'))).toEqual([]);
}
finally {
Object.defineProperty(process, 'platform', {
value: originalPlatform,
configurable: true,
});
}
});
it('preserves case-aliased cache entries on case-insensitive macOS', ({ skip }) => {
if (process.platform !== 'darwin')
skip();
const stale = writeVersion('4.15.6-BETA');
const activeAlias = join(pluginDir, '4.15.6-beta');
if (!existsSync(activeAlias))
skip();
makeStale(stale);
installedPlugins(activeAlias);
const result = purgeStalePluginCacheVersions();
expect(result.symlinked).toBe(0);
expect(result.errors).toHaveLength(1);
expect(lstatSync(stale).isDirectory()).toBe(true);
expect(hookResolves('4.15.6-BETA')).toBe(true);
expect(readdirSync(pluginDir).filter((name) => name.includes('.omc-stale-'))).toEqual([]);
});
for (const shape of ['descendant', 'ancestor']) {
it(`preserves a stale root through a case-aliased ${shape} target`, ({ skip }) => {
if (process.platform !== 'darwin')
skip();
const stale = writeVersion('4.15.6-BETA');
const alias = join(pluginDir, '4.15.6-beta');
if (!existsSync(alias))
skip();
let target;
if (shape === 'descendant') {
writeVersion('4.15.6-BETA/nested');
target = join(alias, 'nested');
}
else {
mkdirSync(join(pluginDir, 'scripts'), { recursive: true });
writeFileSync(join(pluginDir, 'scripts', 'run.cjs'), '// namespace fixture');
mkdirSync(join(pluginDir, 'hooks'), { recursive: true });
writeFileSync(join(pluginDir, 'hooks', 'hooks.json'), '{}');
target = pluginDir.replace('oh-my-claudecode', 'OH-MY-CLAUDECODE');
}
const redirect = join(pluginDir, LEGACY[0]);
symlinkSync(target, redirect, 'dir');
makeStale(stale);
installedPlugins(redirect);
const result = purgeStalePluginCacheVersions();
expect(result.symlinked).toBe(0);
expect(result.errors.length).toBeGreaterThan(0);
expect(lstatSync(stale).isDirectory()).toBe(true);
expect(hookResolves('4.15.6-BETA')).toBe(true);
expect(readlinkSync(redirect)).toBe(target);
});
}
it('matches a case-aliased parent namespace on case-insensitive macOS', ({ skip }) => {
if (process.platform !== 'darwin')
skip();
const marketplaceDir = join(configDir, 'plugins', 'cache', 'omc');
rmSync(pluginDir, { recursive: true, force: true });
pluginDir = join(marketplaceDir, 'Oh-My-ClaudeCode');
mkdirSync(pluginDir, { recursive: true });
const stale = writeVersion(STALE);
mkdirSync(join(pluginDir, ACTIVE));
const aliasedActive = join(marketplaceDir, 'oh-my-claudecode', ACTIVE);
if (!existsSync(aliasedActive))
skip();
makeStale(stale);
installedPlugins(aliasedActive);
const result = purgeStalePluginCacheVersions();
expect(result.symlinked).toBe(0);
expect(result.removed).toBe(0);
expect(result.errors).toHaveLength(1);
expect(lstatSync(stale).isDirectory()).toBe(true);
expect(hookResolves(STALE)).toBe(true);
expect(readdirSync(pluginDir).filter((name) => name.includes('.omc-stale-'))).toEqual([]);
});
it('retains support for other plugins without OMC hook entry points', () => {
const genericDir = join(configDir, 'plugins', 'cache', 'official', 'hookify');
const active = join(genericDir, ACTIVE);
const stale = join(genericDir, STALE);
mkdirSync(active, { recursive: true });
writeFileSync(join(active, 'README.md'), 'generic plugin payload');
mkdirSync(stale);
writeFileSync(join(stale, 'README.md'), 'old plugin payload');
makeStale(stale);
writeFileSync(join(configDir, 'plugins', 'installed_plugins.json'), JSON.stringify({
version: 2,
plugins: { 'hookify@official': [{ installPath: active }] },
}));
const result = purgeStalePluginCacheVersions();
expect(result.errors).toEqual([]);
expect(result.symlinkPaths).toContain(stale);
expect(readlinkSync(stale)).toBe(active);
expect(existsSync(join(stale, 'README.md'))).toBe(true);
});
it('retains generic layout for an OMC-named plugin from another marketplace', () => {
const genericDir = join(configDir, 'plugins', 'cache', 'official', 'oh-my-claudecode');
const active = join(genericDir, ACTIVE);
const stale = join(genericDir, STALE);
mkdirSync(active, { recursive: true });
writeFileSync(join(active, 'README.md'), 'generic plugin payload');
mkdirSync(stale);
writeFileSync(join(stale, 'README.md'), 'old generic plugin payload');
makeStale(stale);
writeFileSync(join(configDir, 'plugins', 'installed_plugins.json'), JSON.stringify({
version: 2,
plugins: { 'oh-my-claudecode@official': [{ installPath: active }] },
}));
const result = purgeStalePluginCacheVersions();
expect(result.errors).toEqual([]);
expect(result.symlinkPaths).toContain(stale);
expect(readlinkSync(stale)).toBe(active);
expect(existsSync(join(stale, 'README.md'))).toBe(true);
});
it('demotes a stale version to a redirect and keeps every pinned path resolving', () => {
const stale = writeVersion(STALE);
for (const v of LEGACY)
@@ -97,7 +253,7 @@ describe('purgeStalePluginCacheVersions on a real filesystem', () => {
for (const v of [STALE, ...LEGACY])
expect(hookResolves(v)).toBe(true);
// No aside directory survives a clean run
expect(readdirSync(pluginDir).filter(n => n.includes('.omc-stale-'))).toEqual([]);
expect(readdirSync(pluginDir).filter((n) => n.includes('.omc-stale-'))).toEqual([]);
});
it('restores the backup when only a squatter holds the pinned path', () => {
// Exactly the damage observed in the wild: the real version was moved aside
@@ -281,7 +437,17 @@ describe('invariant across every cache shape', () => {
// skip. Invariant — if payload existed anywhere before the purge, then after
// it either the pinned path resolves, or an intact backup survives AND the
// result says so (as an error, or as a backup left to its running owner).
const OCCUPANTS = ['missing', 'empty-dir', 'dotfile-only', 'junk-only', 'partial-scripts', 'payload', 'live-symlink', 'dangling-link', 'file'];
const OCCUPANTS = [
'missing',
'empty-dir',
'dotfile-only',
'junk-only',
'partial-scripts',
'payload',
'live-symlink',
'dangling-link',
'file',
];
const BACKUPS = ['none', 'payload-dead', 'payload-live', 'empty-dead', 'dotfile-dead'];
const DEAD_PID = 999997;
function shape(occupant, backup) {
@@ -330,16 +496,19 @@ describe('invariant across every cache shape', () => {
try {
makeStale(p);
}
catch { /* symlinks and plain files cannot be aged */ }
catch {
/* symlinks and plain files cannot be aged */
}
}
return { V, aside };
}
/** A backup only counts as intact if it is a root the runner would load. */
const loadableRoot = (dir) => existsSync(join(dir, 'hooks', 'hooks.json'))
&& existsSync(join(dir, 'scripts', 'run.cjs'))
&& existsSync(join(dir, 'scripts'));
const intactBackupSurvives = () => readdirSync(pluginDir).filter(n => n.includes('.omc-stale-'))
.some(n => loadableRoot(join(pluginDir, n)));
const loadableRoot = (dir) => existsSync(join(dir, 'hooks', 'hooks.json')) &&
existsSync(join(dir, 'scripts', 'run.cjs')) &&
existsSync(join(dir, 'scripts'));
const intactBackupSurvives = () => readdirSync(pluginDir)
.filter((n) => n.includes('.omc-stale-'))
.some((n) => loadableRoot(join(pluginDir, n)));
it('never ends with a broken pinned path and nothing to show for it', () => {
const violations = [];
for (const occupant of OCCUPANTS) {
@@ -362,8 +531,7 @@ describe('invariant across every cache shape', () => {
threw = err;
}
const accounted = (result?.errors.length ?? 0) > 0 || (result?.skipped ?? 0) > 0;
const held = threw === null
&& (!hadPayload || hookResolves(STALE) || (intactBackupSurvives() && accounted));
const held = threw === null && (!hadPayload || hookResolves(STALE) || (intactBackupSurvives() && accounted));
if (!held) {
violations.push(`${occupant} + ${backup}: resolves=${hookResolves(STALE)} ` +
`backup=${intactBackupSurvives()} errors=${result?.errors.length ?? '-'} ` +
@@ -381,8 +549,12 @@ describe('invariant across every cache shape', () => {
// if it is ever added.
describe.skipIf(process.platform === 'win32')('syscall semantics this implementation relies on', () => {
let root;
beforeEach(() => { root = mkdtempSync(join(tmpdir(), 'omc-posix-')); });
afterEach(() => { rmSync(root, { recursive: true, force: true }); });
beforeEach(() => {
root = mkdtempSync(join(tmpdir(), 'omc-posix-'));
});
afterEach(() => {
rmSync(root, { recursive: true, force: true });
});
const code = (fn) => {
try {
fn();
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"purge-stale-cache.integration.test.js","sourceRoot":"","sources":["../../src/__tests__/purge-stale-cache.integration.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"purge-stale-cache.integration.test.js","sourceRoot":"","sources":["../../src/__tests__/purge-stale-cache.integration.test.ts"],"names":[],"mappings":"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 truncated
+48 -376
View File
@@ -9,6 +9,7 @@ vi.mock('fs', async () => {
readdirSync: vi.fn(),
statSync: vi.fn(),
lstatSync: vi.fn(),
realpathSync: vi.fn(),
rmSync: vi.fn(),
unlinkSync: vi.fn(),
renameSync: vi.fn(),
@@ -18,7 +19,7 @@ vi.mock('fs', async () => {
vi.mock('../utils/config-dir.js', () => ({
getClaudeConfigDir: vi.fn(() => '/mock/.claude'),
}));
import { existsSync, readFileSync, readdirSync, statSync, lstatSync, rmSync, renameSync, symlinkSync, unlinkSync } from 'fs';
import { existsSync, readFileSync, readdirSync, statSync, lstatSync, realpathSync, rmSync, renameSync, symlinkSync, unlinkSync, } from 'fs';
import { purgeStalePluginCacheVersions } from '../utils/paths.js';
const mockedExistsSync = vi.mocked(existsSync);
const mockedReadFileSync = vi.mocked(readFileSync);
@@ -27,15 +28,22 @@ const mockedStatSync = vi.mocked(statSync);
const mockedRmSync = vi.mocked(rmSync);
const mockedRenameSync = vi.mocked(renameSync);
const mockedLstatSync = vi.mocked(lstatSync);
const mockedRealpathSync = vi.mocked(realpathSync);
const mockedUnlinkSync = vi.mocked(unlinkSync);
const mockedSymlinkSync = vi.mocked(symlinkSync);
/** lstat result for a real directory. */
function dirStats() {
return { isSymbolicLink: () => false, isDirectory: () => true };
return {
isSymbolicLink: () => false,
isDirectory: () => true,
};
}
/** lstat result for a redirect symlink. */
function symlinkStats() {
return { isSymbolicLink: () => true, isDirectory: () => false };
return {
isSymbolicLink: () => true,
isDirectory: () => false,
};
}
/** Node error with a specific errno code, for simulating fs races. */
function fsError(code) {
@@ -60,12 +68,15 @@ function stubOwnerLiveness() {
}));
}
function dirent(name) {
return { name, isDirectory: () => true };
return { name, isDirectory: () => true, isSymbolicLink: () => false };
}
function fileDirent(name) {
return { name, isDirectory: () => false, isSymbolicLink: () => false, isFile: () => true };
}
/** Return a stat result with mtime N ms ago.
* Default must exceed STALE_THRESHOLD_MS (24 h) in src/utils/paths.ts. */
function staleStats(ageMs = 25 * 60 * 60 * 1000) {
return { mtimeMs: Date.now() - ageMs };
return { mtimeMs: Date.now() - ageMs, size: 1, isDirectory: () => true };
}
/** Return a stat result modified very recently */
function freshStats() {
@@ -84,6 +95,7 @@ describe('purgeStalePluginCacheVersions', () => {
mockedRmSync.mockImplementation(() => undefined);
mockedUnlinkSync.mockImplementation(() => undefined);
mockedLstatSync.mockImplementation(() => dirStats());
mockedRealpathSync.mockImplementation((path) => String(path));
stubOwnerLiveness();
});
afterEach(() => {
@@ -115,10 +127,12 @@ describe('purgeStalePluginCacheVersions', () => {
mockedReadFileSync.mockReturnValue(JSON.stringify({
version: 2,
plugins: {
'my-plugin@my-marketplace': [{
'my-plugin@my-marketplace': [
{
installPath: activeVersion,
version: '2.0.0',
}],
},
],
},
}));
mockedReaddirSync.mockImplementation((p, _opts) => {
@@ -129,6 +143,8 @@ describe('purgeStalePluginCacheVersions', () => {
return [dirent('my-plugin')];
if (ps.endsWith('my-plugin'))
return [dirent('1.0.0'), dirent('2.0.0')];
if (ps === activeVersion)
return [fileDirent('README.md')];
return [];
});
const result = purgeStalePluginCacheVersions();
@@ -140,86 +156,14 @@ describe('purgeStalePluginCacheVersions', () => {
// The real dir is moved aside — never deleted outright — before the
// symlink is created, so the path is never missing.
expect(mockedRenameSync).toHaveBeenCalledWith(staleVersion, expect.stringContaining(`${staleVersion}.omc-stale-`));
expect(mockedRmSync).not.toHaveBeenCalledWith(staleVersion, { recursive: true, force: true });
expect(mockedRmSync).not.toHaveBeenCalledWith(staleVersion, {
recursive: true,
force: true,
});
expect(mockedSymlinkSync).toHaveBeenCalledWith(activeVersion, staleVersion, 'dir');
// Active version should NOT be removed
expect(mockedRmSync).not.toHaveBeenCalledWith(activeVersion, expect.anything());
});
it('handles multiple marketplaces and plugins', () => {
const cacheDir = '/mock/.claude/plugins/cache';
const active1 = join(cacheDir, 'official/hookify/aa11');
const active2 = join(cacheDir, 'omc/oh-my-claudecode/4.3.0');
const stale1 = join(cacheDir, 'official/hookify/bb22');
const stale2 = join(cacheDir, 'official/hookify/cc33');
mockedExistsSync.mockImplementation((p) => {
const ps = String(p);
if (ps.includes('installed_plugins.json'))
return true;
if (ps === cacheDir)
return true;
if (ps === stale1 || ps === stale2)
return true;
return false;
});
mockedReadFileSync.mockReturnValue(JSON.stringify({
version: 2,
plugins: {
'hookify@official': [{ installPath: active1 }],
'oh-my-claudecode@omc': [{ installPath: active2 }],
},
}));
mockedReaddirSync.mockImplementation((p, _opts) => {
const ps = String(p);
if (ps === cacheDir)
return [dirent('official'), dirent('omc')];
if (ps.endsWith('official'))
return [dirent('hookify')];
if (ps.endsWith('hookify'))
return [dirent('aa11'), dirent('bb22'), dirent('cc33')];
if (ps.endsWith('omc'))
return [dirent('oh-my-claudecode')];
if (ps.endsWith('oh-my-claudecode'))
return [dirent('4.3.0')];
return [];
});
const result = purgeStalePluginCacheVersions();
// Both stale hookify versions share a namespace with active1 → symlinked.
expect(result.symlinked).toBe(2);
expect(result.removed).toBe(0);
expect(result.symlinkPaths).toContain(stale1);
expect(result.symlinkPaths).toContain(stale2);
});
it('does nothing when all cache versions are active', () => {
const cacheDir = '/mock/.claude/plugins/cache';
const active = join(cacheDir, 'omc/oh-my-claudecode/4.3.0');
mockedExistsSync.mockImplementation((p) => {
const ps = String(p);
if (ps.includes('installed_plugins.json'))
return true;
if (ps === cacheDir)
return true;
return false;
});
mockedReadFileSync.mockReturnValue(JSON.stringify({
version: 2,
plugins: {
'oh-my-claudecode@omc': [{ installPath: active }],
},
}));
mockedReaddirSync.mockImplementation((p, _opts) => {
const ps = String(p);
if (ps === cacheDir)
return [dirent('omc')];
if (ps.endsWith('omc'))
return [dirent('oh-my-claudecode')];
if (ps.endsWith('oh-my-claudecode'))
return [dirent('4.3.0')];
return [];
});
const result = purgeStalePluginCacheVersions();
expect(result.removed).toBe(0);
expect(mockedRmSync).not.toHaveBeenCalled();
});
it('reports error for malformed installed_plugins.json', () => {
mockedExistsSync.mockReturnValue(true);
mockedReadFileSync.mockReturnValue('{ invalid json');
@@ -236,10 +180,12 @@ describe('purgeStalePluginCacheVersions', () => {
mockedReadFileSync.mockReturnValue(JSON.stringify({
version: 2,
plugins: {
'plugin@omc': [{
'plugin@omc': [
{
// installPath has trailing slash
installPath: versionDir + '/',
}],
},
],
},
}));
mockedReaddirSync.mockImplementation((p, _opts) => {
@@ -265,10 +211,12 @@ describe('purgeStalePluginCacheVersions', () => {
mockedReadFileSync.mockReturnValue(JSON.stringify({
version: 2,
plugins: {
'plugin@omc': [{
'plugin@omc': [
{
// installPath points into a subdirectory
installPath: versionDir + '/dist',
}],
},
],
},
}));
mockedReaddirSync.mockImplementation((p, _opts) => {
@@ -337,179 +285,6 @@ describe('purgeStalePluginCacheVersions', () => {
expect(result.errors).toHaveLength(1);
expect(result.errors[0]).toContain('unexpected top-level structure');
});
// --- #2543 regression: symlink-instead-of-delete ---
it('replaces stale version dir with symlink to active version in same namespace', () => {
// Scenario: CLAUDE_PLUGIN_ROOT=4.14.4 in a running session; 4.14.5 installed;
// purge runs after grace period. 4.14.4 must become a symlink, not disappear.
const cacheDir = '/mock/.claude/plugins/cache';
const activeVersion = join(cacheDir, 'omc/oh-my-claudecode/4.14.5');
const staleVersion = join(cacheDir, 'omc/oh-my-claudecode/4.14.4');
mockedExistsSync.mockImplementation((p) => {
const ps = String(p);
if (ps.includes('installed_plugins.json'))
return true;
if (ps === cacheDir)
return true;
if (ps === staleVersion || ps === activeVersion)
return true;
return false;
});
mockedReadFileSync.mockReturnValue(JSON.stringify({
version: 2,
plugins: {
'oh-my-claudecode@omc': [{ installPath: activeVersion, version: '4.14.5' }],
},
}));
mockedReaddirSync.mockImplementation((p, _opts) => {
const ps = String(p);
if (ps === cacheDir)
return [dirent('omc')];
if (ps.endsWith('omc'))
return [dirent('oh-my-claudecode')];
if (ps.endsWith('oh-my-claudecode'))
return [dirent('4.14.4'), dirent('4.14.5')];
return [];
});
const result = purgeStalePluginCacheVersions();
expect(result.symlinked).toBe(1);
expect(result.removed).toBe(0);
expect(result.symlinkPaths).toEqual([staleVersion]);
// Real dir moved aside first, then symlink created in its place
expect(mockedRenameSync).toHaveBeenCalledWith(staleVersion, expect.stringContaining(`${staleVersion}.omc-stale-`));
expect(mockedSymlinkSync).toHaveBeenCalledWith(activeVersion, staleVersion, 'dir');
// Active version untouched
expect(mockedRmSync).not.toHaveBeenCalledWith(activeVersion, expect.anything());
expect(mockedSymlinkSync).not.toHaveBeenCalledWith(expect.anything(), activeVersion, expect.anything());
});
// --- regression: the relink must never leave the path missing ---
/** Single stale version alongside one active version in the same namespace. */
function setupRelinkScenario() {
const cacheDir = '/mock/.claude/plugins/cache';
const activeVersion = join(cacheDir, 'omc/oh-my-claudecode/4.15.10');
const staleVersion = join(cacheDir, 'omc/oh-my-claudecode/4.15.6');
mockedExistsSync.mockImplementation((p) => {
const ps = String(p);
if (ps.includes('installed_plugins.json'))
return true;
if (ps === cacheDir)
return true;
if (ps === staleVersion || ps === activeVersion)
return true;
// isUsableVersionPath probes plugin-root markers; both real versions have them
if (ps.startsWith(`${staleVersion}/`) || ps.startsWith(`${activeVersion}/`))
return true;
// A fresh relink starts with no aside path — if one appeared to exist and
// to carry markers, relinkStaleVersionDir would refuse to overwrite it.
return false;
});
// …and lstat must agree, or isUsableVersionPath would treat it as a directory
mockedLstatSync.mockImplementation((p) => {
if (String(p).includes('.omc-stale-'))
throw fsError('ENOENT');
return dirStats();
});
mockedReadFileSync.mockReturnValue(JSON.stringify({
version: 2,
plugins: {
'oh-my-claudecode@omc': [{ installPath: activeVersion, version: '4.15.10' }],
},
}));
mockedReaddirSync.mockImplementation((p, _opts) => {
const ps = String(p);
if (ps === cacheDir)
return [dirent('omc')];
if (ps.endsWith('omc'))
return [dirent('oh-my-claudecode')];
if (ps.endsWith('oh-my-claudecode'))
return [dirent('4.15.6'), dirent('4.15.10')];
return [];
});
return { activeVersion, staleVersion };
}
it('retries the symlink when the path is re-created inside the swap window', () => {
// A concurrent writer (Finder .DS_Store, Spotlight, another session's purge)
// re-creates the path after the stale dir is moved aside, making the first
// symlinkSync fail with EEXIST. The redirect must still end up in place.
const { activeVersion, staleVersion } = setupRelinkScenario();
mockedSymlinkSync
.mockImplementationOnce(() => { throw fsError('EEXIST'); })
.mockImplementationOnce(() => undefined);
const result = purgeStalePluginCacheVersions();
expect(result.symlinked).toBe(1);
expect(result.errors).toEqual([]);
expect(mockedSymlinkSync).toHaveBeenCalledTimes(2);
// The squatter is cleared before the retry
expect(mockedRmSync).toHaveBeenCalledWith(staleVersion, { recursive: true, force: true });
expect(mockedSymlinkSync).toHaveBeenLastCalledWith(activeVersion, staleVersion, 'dir');
});
it('restores the stale dir when the symlink can never be placed', () => {
// Worst case: every attempt loses the race. The original directory must be
// moved back so a session pinned to it via CLAUDE_PLUGIN_ROOT keeps working.
const { staleVersion } = setupRelinkScenario();
mockedSymlinkSync.mockImplementation(() => { throw fsError('EEXIST'); });
const result = purgeStalePluginCacheVersions();
expect(result.symlinked).toBe(0);
expect(result.removed).toBe(0);
expect(result.errors).toHaveLength(1);
expect(result.errors[0]).toContain(staleVersion);
// Moved aside, then moved back — the path is a real directory again
const asideDir = mockedRenameSync.mock.calls[0][1];
expect(String(asideDir)).toContain(`${staleVersion}.omc-stale-`);
expect(mockedRenameSync).toHaveBeenLastCalledWith(asideDir, staleVersion);
});
it('retries the rollback when the squatter also blocks the restore', () => {
// The race that produced EEXIST on the symlink can re-take the path between
// the final clear and the restore rename. If the rollback is not retried the
// original is stranded at the aside path while the squatter holds the pinned
// path — the failure this helper exists to prevent.
const { staleVersion } = setupRelinkScenario();
mockedSymlinkSync.mockImplementation(() => { throw fsError('EEXIST'); });
let restoreAttempts = 0;
mockedRenameSync.mockImplementation(((from, to) => {
if (String(to) === staleVersion) {
restoreAttempts++;
if (restoreAttempts === 1)
throw fsError('ENOTEMPTY');
}
return undefined;
}));
const result = purgeStalePluginCacheVersions();
expect(restoreAttempts).toBeGreaterThan(1);
// Restore eventually succeeded, so the original is back at the pinned path
const restores = mockedRenameSync.mock.calls.filter(c => String(c[1]) === staleVersion);
expect(String(restores[restores.length - 1][0])).toContain(`${staleVersion}.omc-stale-`);
// The reported error is the symlink failure, not a lost original
expect(result.errors).toHaveLength(1);
expect(result.errors[0]).not.toContain('could not restore');
});
it('reports the original as stranded when neither symlink nor restore can be placed', () => {
// Worst case: the squatter wins every attempt on both halves. The error must
// say where the original went instead of silently reporting a symlink failure.
const { staleVersion } = setupRelinkScenario();
mockedSymlinkSync.mockImplementation(() => { throw fsError('EEXIST'); });
mockedRenameSync.mockImplementation(((_from, to) => {
if (String(to) === staleVersion)
throw fsError('ENOTEMPTY');
return undefined;
}));
const result = purgeStalePluginCacheVersions();
expect(result.symlinked).toBe(0);
expect(result.errors).toHaveLength(1);
expect(result.errors[0]).toContain('could not restore the original');
expect(result.errors[0]).toContain('.omc-stale-');
});
it('restores the stale dir when symlink fails with a non-EEXIST error', () => {
// EPERM/EACCES must not be retried, but must still roll back.
const { staleVersion } = setupRelinkScenario();
mockedSymlinkSync.mockImplementation(() => { throw fsError('EPERM'); });
const result = purgeStalePluginCacheVersions();
expect(result.symlinked).toBe(0);
expect(result.errors).toHaveLength(1);
expect(mockedSymlinkSync).toHaveBeenCalledTimes(1);
const asideDir = mockedRenameSync.mock.calls[0][1];
expect(mockedRenameSync).toHaveBeenLastCalledWith(asideDir, staleVersion);
});
// --- regression: an interrupted relink is repaired, not mistaken for a version ---
/**
* Cache where a previous relink died after moving 4.15.6 aside.
* `occupant` describes what now sits at the original version path:
@@ -580,115 +355,6 @@ describe('purgeStalePluginCacheVersions', () => {
});
return { activeVersion, originalDir, asideDir };
}
it('restores the version path from an aside dir left by an interrupted relink', () => {
// The pinned path is gone and its aside copy survived — move it back so
// CLAUDE_PLUGIN_ROOT resolves again.
const { originalDir, asideDir } = setupInterruptedRelink('missing');
const result = purgeStalePluginCacheVersions();
expect(result.restored).toBe(1);
expect(result.restoredPaths).toEqual([originalDir]);
expect(mockedRenameSync).toHaveBeenCalledWith(asideDir, originalDir);
// The aside dir must never be demoted or deleted as if it were a version
expect(mockedSymlinkSync).not.toHaveBeenCalledWith(expect.anything(), asideDir, expect.anything());
expect(mockedRmSync).not.toHaveBeenCalledWith(asideDir, expect.anything());
});
it('keeps the aside copy when the version path holds only a squatter', () => {
// A dir containing nothing but .DS_Store is the squatter that caused the
// EEXIST, not a completed redirect. Deleting the aside here would throw
// away the only intact copy and leave pinned sessions broken.
const { originalDir, asideDir } = setupInterruptedRelink('squatter');
const result = purgeStalePluginCacheVersions();
expect(result.restored).toBe(1);
expect(result.restoredPaths).toEqual([originalDir]);
expect(mockedRenameSync).toHaveBeenCalledWith(asideDir, originalDir);
expect(mockedRmSync).not.toHaveBeenCalledWith(asideDir, expect.anything());
});
it('clears the squatter and retries when it blocks the restore rename', () => {
const { originalDir, asideDir } = setupInterruptedRelink('squatter');
let attempts = 0;
mockedRenameSync.mockImplementation(((_from, to) => {
if (String(to) === originalDir) {
attempts++;
if (attempts === 1)
throw fsError('ENOTEMPTY');
}
return undefined;
}));
const result = purgeStalePluginCacheVersions();
expect(attempts).toBe(2);
expect(mockedRmSync).toHaveBeenCalledWith(originalDir, { recursive: true, force: true });
expect(result.restored).toBe(1);
expect(mockedRenameSync).toHaveBeenCalledWith(asideDir, originalDir);
// The restored version is then demoted normally, which is the intended
// follow-up: it is stale and an active sibling exists.
expect(result.symlinked).toBe(1);
});
it('leaves an aside dir alone while its owning purge is still running', () => {
// A live owner means the swap is in flight. Restoring its backup here would
// make the owner's own EEXIST retry delete the real directory.
// The fixture's owner pid is the dead one, so force this case to look live.
const { originalDir, asideDir } = setupInterruptedRelink('missing');
const killSpy = vi.spyOn(process, 'kill').mockImplementation((() => true));
const result = purgeStalePluginCacheVersions();
expect(result.restored).toBe(0);
expect(result.errors).toEqual([]);
expect(mockedRenameSync).not.toHaveBeenCalledWith(asideDir, originalDir);
expect(mockedRmSync).not.toHaveBeenCalledWith(asideDir, expect.anything());
// Skipping must be visible: if that pid was recycled, nothing else would
// ever reclaim the backup and the pinned path would stay broken silently.
expect(result.skipped).toBe(1);
expect(result.skippedPaths[0]).toContain(asideDir);
expect(result.skippedPaths[0]).toContain('still running');
killSpy.mockRestore();
});
it('reconciles aside entries before relinking a squatter that shares their name', () => {
// Filesystem order can put the squatter first. Relinking it first would
// clear the aside backup before anyone knows the symlink can be placed.
const cacheDir = '/mock/.claude/plugins/cache';
const activeVersion = join(cacheDir, 'omc/oh-my-claudecode/4.15.10');
const originalDir = join(cacheDir, 'omc/oh-my-claudecode/4.15.6');
const asideDir = `${originalDir}.omc-stale-${DEAD_OWNER_PID}`;
mockedLstatSync.mockImplementation((p) => (String(p) === originalDir ? dirStats() : dirStats()));
mockedExistsSync.mockImplementation((p) => {
const ps = String(p);
if (ps.includes('installed_plugins.json'))
return true;
return ps === cacheDir || ps === originalDir || ps === activeVersion || ps === asideDir;
});
mockedReadFileSync.mockReturnValue(JSON.stringify({
version: 2,
plugins: { 'oh-my-claudecode@omc': [{ installPath: activeVersion, version: '4.15.10' }] },
}));
mockedReaddirSync.mockImplementation((p, opts) => {
const ps = String(p);
if (ps === cacheDir)
return [dirent('omc')];
if (ps.endsWith('omc'))
return [dirent('oh-my-claudecode')];
// squatter listed FIRST, aside second — the order that used to lose data
if (ps.endsWith('oh-my-claudecode')) {
return [dirent('4.15.6'), dirent(`4.15.6.omc-stale-${DEAD_OWNER_PID}`), dirent('4.15.10')];
}
if (ps === originalDir && !opts?.withFileTypes)
return ['.DS_Store'];
return [];
});
const order = [];
mockedRenameSync.mockImplementation(((from, to) => {
order.push(`rename ${String(from).split('/').pop()} -> ${String(to).split('/').pop()}`);
return undefined;
}));
mockedSymlinkSync.mockImplementation(((_t, at) => {
order.push(`symlink at ${String(at).split('/').pop()}`);
return undefined;
}));
const result = purgeStalePluginCacheVersions();
// The backup is restored before the squatter is ever relinked
expect(order[0]).toBe(`rename 4.15.6.omc-stale-${DEAD_OWNER_PID} -> 4.15.6`);
expect(result.restored).toBe(1);
// And the aside copy is never discarded
expect(mockedRmSync).not.toHaveBeenCalledWith(asideDir, expect.anything());
});
it('clears a dangling redirect symlink and restores the backup over it', () => {
// lstat reports a symlink but the target is gone, so the path is unusable.
// On a real filesystem renaming a directory over a symlink raises ENOTDIR
@@ -727,14 +393,20 @@ describe('purgeStalePluginCacheVersions', () => {
const { originalDir, asideDir } = setupInterruptedRelink('redirect');
const result = purgeStalePluginCacheVersions();
expect(result.restored).toBe(0);
expect(mockedRmSync).toHaveBeenCalledWith(asideDir, { recursive: true, force: true });
expect(mockedRmSync).toHaveBeenCalledWith(asideDir, {
recursive: true,
force: true,
});
expect(mockedRenameSync).not.toHaveBeenCalledWith(asideDir, originalDir);
});
it('discards the aside copy when the version was reinstalled with payload', () => {
const { originalDir, asideDir } = setupInterruptedRelink('payload');
const result = purgeStalePluginCacheVersions();
expect(result.restored).toBe(0);
expect(mockedRmSync).toHaveBeenCalledWith(asideDir, { recursive: true, force: true });
expect(mockedRmSync).toHaveBeenCalledWith(asideDir, {
recursive: true,
force: true,
});
expect(mockedRenameSync).not.toHaveBeenCalledWith(asideDir, originalDir);
});
it('never treats an aside dir as a plugin version when picking a symlink target', () => {
@@ -774,7 +446,10 @@ describe('purgeStalePluginCacheVersions', () => {
expect(result.removed).toBe(1);
expect(result.symlinked).toBe(0);
expect(result.removedPaths).toEqual([staleVersion]);
expect(mockedRmSync).toHaveBeenCalledWith(staleVersion, { recursive: true, force: true });
expect(mockedRmSync).toHaveBeenCalledWith(staleVersion, {
recursive: true,
force: true,
});
expect(mockedSymlinkSync).not.toHaveBeenCalled();
});
it('skips version directory entries where isDirectory() returns false (existing symlinks)', () => {
@@ -797,10 +472,7 @@ describe('purgeStalePluginCacheVersions', () => {
return [dirent('oh-my-claudecode')];
if (ps.endsWith('oh-my-claudecode')) {
// 4.14.4 is a symlink (isDirectory returns false), 4.14.5 is a real dir
return [
{ name: '4.14.4', isDirectory: () => false },
dirent('4.14.5'),
];
return [{ name: '4.14.4', isDirectory: () => false }, dirent('4.14.5')];
}
return [];
});
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"purge-stale-cache.test.js","sourceRoot":"","sources":["../../src/__tests__/purge-stale-cache.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"purge-stale-cache.test.js","sourceRoot":"","sources":["../../src/__tests__/purge-stale-cache.test.ts"],"names":[],"mappings":"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 truncated
+92
View File
@@ -2,11 +2,15 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'fs';
import { join } from 'path';
import { tmpdir } from 'os';
import { getUsageProfileHash } from '../../features/rate-limit-wait/daemon-state.js';
const { mockSpawn, mockResolveDaemonModulePath, mockIsTmuxAvailable } = vi.hoisted(() => ({
mockSpawn: vi.fn(),
mockResolveDaemonModulePath: vi.fn(),
mockIsTmuxAvailable: vi.fn(() => true),
}));
function currentUsageProfileHash() {
return getUsageProfileHash(false);
}
vi.mock('child_process', async () => {
const actual = await vi.importActual('child_process');
return {
@@ -108,6 +112,94 @@ describe('daemon bootstrap', () => {
expect(daemonScript).not.toContain("import('C:\\Users");
expect(daemonScript).not.toContain('\\features\\rate-limit-wait\\daemon.js');
});
it('preserves quota recovery only for the profile that recorded it', () => {
const unref = vi.fn();
mockSpawn.mockReturnValue({ pid: 4244, unref });
const config = {
stateFilePath: join(testDir, 'state.json'),
pidFilePath: join(testDir, 'daemon.pid'),
logFilePath: join(testDir, 'daemon.log'),
};
mkdirSync(testDir, { recursive: true });
const profileA = join(testDir, 'profile-a');
mkdirSync(profileA, { recursive: true });
process.env.CLAUDE_CONFIG_DIR = profileA;
writeFileSync(join(profileA, '.credentials.json'), JSON.stringify({
claudeAiOauth: {
accessToken: 'profile-a-access',
refreshToken: 'profile-a-refresh',
oauthAccount: { uuid: 'profile-a' },
},
}));
writeFileSync(config.stateFilePath, JSON.stringify({
isRunning: false,
pid: null,
startedAt: new Date('2026-01-01T00:00:00.000Z'),
lastPollAt: null,
rateLimitStatus: {
fiveHourLimited: true,
weeklyLimited: false,
monthlyLimited: false,
isLimited: true,
fiveHourResetsAt: null,
weeklyResetsAt: null,
monthlyResetsAt: null,
nextResetAt: null,
timeUntilResetMs: null,
lastCheckedAt: new Date('2026-01-01T00:00:00.000Z'),
},
lastConfirmedLimited: true,
usageProfileHash: currentUsageProfileHash(),
blockedPanes: [{
id: '%test',
session: 'test',
windowIndex: 0,
windowName: 'test',
paneIndex: 0,
isActive: false,
analysis: { hasClaudeCode: true, hasRateLimitMessage: true, isBlocked: true, confidence: 1 },
firstDetectedAt: new Date('2026-01-01T00:00:00.000Z'),
resumeAttempted: false,
}],
resumedPaneIds: [],
totalResumeAttempts: 0,
successfulResumes: 0,
errorCount: 0,
}));
const result = startDaemon(config);
expect(result.success).toBe(true);
expect(result.state).toMatchObject({
isRunning: true,
pid: 4244,
lastConfirmedLimited: true,
rateLimitStatus: { isLimited: true },
blockedPanes: [expect.objectContaining({ id: '%test' })],
});
const persistedState = JSON.parse(readFileSync(config.stateFilePath, 'utf-8'));
expect(persistedState.lastConfirmedLimited).toBe(true);
expect(persistedState.blockedPanes).toMatchObject([{ id: '%test' }]);
expect(unref).toHaveBeenCalledOnce();
rmSync(config.pidFilePath, { force: true });
const profileB = join(testDir, 'profile-b');
mkdirSync(profileB, { recursive: true });
process.env.CLAUDE_CONFIG_DIR = profileB;
writeFileSync(join(profileB, '.credentials.json'), JSON.stringify({
claudeAiOauth: {
accessToken: 'profile-b-access',
refreshToken: 'profile-b-refresh',
oauthAccount: { uuid: 'profile-b' },
},
}));
mockSpawn.mockReturnValue({ pid: 4245, unref: vi.fn() });
const switchedProfile = startDaemon(config);
expect(switchedProfile.state).toMatchObject({
lastConfirmedLimited: false,
usageProfileHash: currentUsageProfileHash(),
rateLimitStatus: null,
blockedPanes: [],
resumedPaneIds: [],
});
});
it('returns already running when config pid file points to a live process', () => {
const config = {
stateFilePath: join(testDir, 'state.json'),
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"daemon-bootstrap.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/daemon-bootstrap.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"daemon-bootstrap.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/daemon-bootstrap.test.ts"],"names":[],"mappings":"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 truncated
+4 -1
View File
@@ -60,7 +60,10 @@ describe('detached daemon HUD cache context', () => {
delete process.env.CLAUDECODE_SESSION_ID;
expect(readStdinCache()?.version).toBe('2.1.232');
await checkRateLimitStatus();
expect(getUsageMock).toHaveBeenCalledWith({ clientVersion: '2.1.232' });
expect(getUsageMock).toHaveBeenCalledWith({
clientVersion: '2.1.232',
skipWarmCache: true,
});
});
});
//# sourceMappingURL=daemon-cache-context.test.js.map
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"daemon-cache-context.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/daemon-cache-context.test.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"daemon-cache-context.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/daemon-cache-context.test.ts"],"names":[],"mappings":"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"}
+2 -1
View File
@@ -5,7 +5,8 @@ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { mkdirSync, writeFileSync, existsSync, rmSync } from 'fs';
import { join } from 'path';
import { tmpdir } from 'os';
import { readDaemonState, isDaemonRunning, getDaemonStatus, formatDaemonState, shouldResumeBlockedPanesOnStatusChange, } from '../../features/rate-limit-wait/daemon.js';
import { readDaemonState, isDaemonRunning, getDaemonStatus, formatDaemonState, } from '../../features/rate-limit-wait/daemon.js';
import { shouldResumeBlockedPanesOnStatusChange } from '../../features/rate-limit-wait/daemon-state.js';
describe('daemon', () => {
const testDir = join(tmpdir(), 'omc-daemon-test-' + Date.now());
const testConfig = {
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"daemon.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/daemon.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EACL,eAAe,EACf,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,sCAAsC,GACvC,MAAM,0CAA0C,CAAC;AAGlD,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,kBAAkB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAChE,MAAM,UAAU,GAAiB;QAC/B,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;QAC1C,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;QACxC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;QACxC,cAAc,EAAE,IAAI;KACrB,CAAC;IAEF,UAAU,CAAC,GAAG,EAAE;QACd,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC;YACH,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,KAAK,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,SAAS,GAAgB;gBAC7B,SAAS,EAAE,IAAI;gBACf,GAAG,EAAE,IAAI;gBACT,SAAS,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC;gBAC3C,UAAU,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC;gBAC5C,eAAe,EAAE;oBACf,eAAe,EAAE,KAAK;oBACtB,aAAa,EAAE,KAAK;oBACpB,SAAS,EAAE,KAAK;oBAChB,gBAAgB,EAAE,IAAI;oBACtB,cAAc,EAAE,IAAI;oBACpB,cAAc,EAAE,KAAK;oBACrB,eAAe,EAAE,IAAI;oBACrB,WAAW,EAAE,IAAI;oBACjB,gBAAgB,EAAE,IAAI;oBACtB,aAAa,EAAE,IAAI,IAAI,CAAC,sBAAsB,CAAC;iBAChD;gBACD,YAAY,EAAE,EAAE;gBAChB,cAAc,EAAE,EAAE;gBAClB,mBAAmB,EAAE,CAAC;gBACtB,iBAAiB,EAAE,CAAC;gBACpB,UAAU,EAAE,CAAC;aACd,CAAC;YAEF,aAAa,CAAC,UAAU,CAAC,aAAc,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;YAEpE,MAAM,KAAK,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAE1C,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;YAC7B,MAAM,CAAC,KAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,MAAM,CAAC,KAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,CAAC,KAAM,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAM,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,KAAM,CAAC,SAAS,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;YAC/C,aAAa,CAAC,UAAU,CAAC,aAAc,EAAE,eAAe,CAAC,CAAC;YAE1D,MAAM,KAAK,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAE1C,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;YAChD,4CAA4C;YAC5C,aAAa,CAAC,UAAU,CAAC,WAAY,EAAE,QAAQ,CAAC,CAAC;YAEjD,MAAM,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAE5C,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,gCAAgC;YAChC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,WAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,4BAA4B;YAC5B,aAAa,CAAC,UAAU,CAAC,WAAY,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAE5D,MAAM,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAE5C,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;QAC/B,EAAE,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAC1C,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAE3C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;YACvE,MAAM,SAAS,GAAgB;gBAC7B,SAAS,EAAE,KAAK;gBAChB,GAAG,EAAE,IAAI;gBACT,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,UAAU,EAAE,IAAI,IAAI,EAAE;gBACtB,eAAe,EAAE,IAAI;gBACrB,YAAY,EAAE,EAAE;gBAChB,cAAc,EAAE,EAAE;gBAClB,mBAAmB,EAAE,CAAC;gBACtB,iBAAiB,EAAE,CAAC;gBACpB,UAAU,EAAE,CAAC;aACd,CAAC;YAEF,aAAa,CAAC,UAAU,CAAC,aAAc,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;YAEpE,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAE3C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;YAC1E,MAAM,SAAS,GAAgB;gBAC7B,SAAS,EAAE,IAAI;gBACf,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,UAAU,EAAE,IAAI,IAAI,EAAE;gBACtB,eAAe,EAAE,IAAI;gBACrB,YAAY,EAAE,EAAE;gBAChB,cAAc,EAAE,EAAE;gBAClB,mBAAmB,EAAE,CAAC;gBACtB,iBAAiB,EAAE,CAAC;gBACpB,UAAU,EAAE,CAAC;aACd,CAAC;YAEF,aAAa,CAAC,UAAU,CAAC,aAAc,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;YACpE,aAAa,CAAC,UAAU,CAAC,WAAY,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAE5D,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;YAE3C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YACjD,MAAM,CAAC,MAAM,CAAC,KAAK,Line truncated
{"version":3,"file":"daemon.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/daemon.test.ts"],"names":[],"mappings":"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 truncated
+2
View File
@@ -115,6 +115,7 @@ describe('Rate Limit Wait Integration Tests', () => {
monthlyResetsAt: null,
},
error: 'rate_limited',
stale: true,
});
const status = await checkRateLimitStatus();
expect(status).not.toBeNull();
@@ -134,6 +135,7 @@ describe('Rate Limit Wait Integration Tests', () => {
monthlyResetsAt: null,
},
error: 'rate_limited',
stale: true,
});
const status = await checkRateLimitStatus();
expect(status).not.toBeNull();
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/integration.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/integration.test.ts"],"names":[],"mappings":"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 truncated
+9 -1
View File
@@ -13,7 +13,7 @@ vi.mock('../../cli/tmux-utils.js', async (importOriginal) => {
});
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
import { tmuxExec } from '../../cli/tmux-utils.js';
import { getNewPaneTail, getPaneHistorySize } from '../../features/rate-limit-wait/pane-fresh-capture.js';
import { getNewPaneTail, getPaneHistorySize, resetPaneTailPositions, } from '../../features/rate-limit-wait/pane-fresh-capture.js';
const STATE_DIR = '/project/.omc/state';
const PANE_ID = '%5';
/** Set up fs mock so state file does not exist. */
@@ -165,6 +165,14 @@ describe('pane-fresh-capture', () => {
expect(written[PANE_ID]).toBe(25);
});
});
it('resets saved cursors so unchanged blocked output is captured again', () => {
withStateFile({ [PANE_ID]: 100 });
resetPaneTailPositions(STATE_DIR);
expect(JSON.parse(vi.mocked(writeFileSync).mock.calls[0][1])).toEqual({});
vi.mocked(readFileSync).mockReturnValue('{}');
mockHistorySize(100, 'Rate limit reached\n');
expect(getNewPaneTail(PANE_ID, STATE_DIR, 15)).toBe('Rate limit reached\n');
});
describe('getPaneHistorySize', () => {
it('returns numeric history size on success', () => {
vi.mocked(tmuxExec).mockReturnValue(' 137 \n');
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"pane-fresh-capture.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/pane-fresh-capture.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9D,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,EAAE,CAAC,IAAI,CAAC,yBAAyB,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;IAC1D,MAAM,MAAM,GAAG,MAAM,cAAc,EAA4C,CAAC;IAChF,OAAO,EAAE,GAAG,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAC1C,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,sDAAsD,CAAC;AAE1G,MAAM,SAAS,GAAG,qBAAqB,CAAC;AACxC,MAAM,OAAO,GAAG,IAAI,CAAC;AAErB,mDAAmD;AACnD,SAAS,WAAW;IAClB,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC;AAED,sEAAsE;AACtE,SAAS,aAAa,CAAC,SAAiC;IACtD,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5C,EAAE,CAAC,MAAM,CAAC,YAAmB,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,8EAA8E;AAC9E,SAAS,eAAe,CAAC,IAAY,EAAE,aAAa,GAAG,EAAE;IACvD,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC;SAChB,mBAAmB,CAAC,GAAG,IAAI,IAAI,CAAC,CAAG,kCAAkC;SACrE,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,eAAe;AACxD,CAAC;AAED,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAChD,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAChD,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,UAAU,GAAG;gBACjB,EAAE;gBACF,KAAK;gBACL,GAAG;gBACH,YAAY;gBACZ,iBAAiB;gBACjB,WAAW;gBACX,QAAQ;gBACR,eAAe;aAChB,CAAC;YAEF,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;gBACjD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACxB,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;gBACxC,EAAE,CAAC,aAAa,EAAE,CAAC;YACrB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAC9D,EAAE,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC7D,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE;gBAC1C,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YACH,WAAW,EAAE,CAAC;YAEd,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;YACxC,WAAW,EAAE,CAAC;YAEd,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,8DAA8D;YAC9D,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAClC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE;gBAC1C,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACxB,oDAAoD;YACpD,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,8CAA8C,EAAE,GAAG,EAAE;QAC5D,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;YACpD,MAAM,IAAI,GAAG,0BAA0B,CAAC;YACxC,WAAW,EAAE,CAAC;YACd,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAE3B,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,WAAW,EAAE,CAAC;YACd,eAAe,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAEjC,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YAEvC,MAAM,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,WAAW,EAAE,CAAC;YACd,eAAe,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAE9B,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YAEvC,MAAM,CAAC,aAAa,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAW,CAC1B,CAAC;YAC5B,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;QAC9D,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAClC,gDAAgD;YAChD,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAEjD,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YAClC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAEjD,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;YAEvC,iDAAiD;YACjD,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,EALine truncated
{"version":3,"file":"pane-fresh-capture.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/pane-fresh-capture.test.ts"],"names":[],"mappings":"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 truncated
+43 -1
View File
@@ -22,7 +22,10 @@ describe('rate-limit-monitor', () => {
vi.mocked(readStdinCache).mockReturnValue({ version: '2.1.232' });
vi.mocked(getUsage).mockResolvedValue({ rateLimits: null, error: 'no_credentials' });
await checkRateLimitStatus();
expect(getUsage).toHaveBeenCalledWith({ clientVersion: '2.1.232' });
expect(getUsage).toHaveBeenCalledWith({
clientVersion: '2.1.232',
skipWarmCache: true,
});
});
it('should return null when getUsage returns null rateLimits', async () => {
vi.mocked(getUsage).mockResolvedValue({ rateLimits: null, error: 'no_credentials' });
@@ -117,6 +120,7 @@ describe('rate-limit-monitor', () => {
monthlyResetsAt: null,
},
error: 'rate_limited',
stale: true,
});
const result = await checkRateLimitStatus();
expect(result).not.toBeNull();
@@ -126,6 +130,26 @@ describe('rate-limit-monitor', () => {
expect(formatRateLimitStatus(result)).toContain('stale cached usage');
expect(formatRateLimitStatus(result)).not.toBe('Not rate limited');
});
it('surfaces stale cached usage after a network failure', async () => {
vi.mocked(getUsage).mockResolvedValue({
rateLimits: {
fiveHourPercent: 83,
weeklyPercent: 57,
fiveHourResetsAt: null,
weeklyResetsAt: null,
monthlyPercent: 0,
monthlyResetsAt: null,
},
error: 'network',
stale: true,
});
const result = await checkRateLimitStatus();
expect(result).not.toBeNull();
expect(result.apiErrorReason).toBe('network');
expect(result.usingStaleData).toBe(true);
expect(isRateLimitStatusDegraded(result)).toBe(true);
expect(formatRateLimitStatus(result)).toContain('Usage API network error; showing stale cached usage');
});
it('should handle API errors gracefully', async () => {
vi.mocked(getUsage).mockRejectedValue(new Error('API error'));
const result = await checkRateLimitStatus();
@@ -261,6 +285,24 @@ describe('rate-limit-monitor', () => {
expect(isRateLimitStatusDegraded(status)).toBe(true);
expect(shouldMonitorBlockedPanes(status)).toBe(false);
});
it('treats stale cached network results as degraded', () => {
const status = {
fiveHourLimited: false,
weeklyLimited: false,
monthlyLimited: false,
isLimited: false,
fiveHourResetsAt: null,
weeklyResetsAt: null,
monthlyResetsAt: null,
nextResetAt: null,
timeUntilResetMs: null,
apiErrorReason: 'network',
usingStaleData: true,
lastCheckedAt: new Date(),
};
expect(isRateLimitStatusDegraded(status)).toBe(true);
expect(shouldMonitorBlockedPanes(status)).toBe(false);
});
it('treats confirmed quota exhaustion as pane-blocking even if the usage API was rate limited', () => {
const status = {
fiveHourLimited: true,
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"rate-limit-monitor.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/rate-limit-monitor.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"rate-limit-monitor.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/rate-limit-monitor.test.ts"],"names":[],"mappings":"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 truncated
+267 -1
View File
@@ -2,7 +2,7 @@
* Tests for tmux-detector.ts
*/
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { analyzePaneContent, isTmuxAvailable, listTmuxPanes, capturePaneContent, formatBlockedPanesSummary, scanForBlockedPanes, } from '../../features/rate-limit-wait/tmux-detector.js';
import { analyzePaneContent, isTmuxAvailable, listTmuxPanes, capturePaneContent, formatBlockedPanesSummary, scanForBlockedPanes, revalidateBlockedPanes, } from '../../features/rate-limit-wait/tmux-detector.js';
// Mock tmux-utils wrappers
vi.mock('../../cli/tmux-utils.js', async (importOriginal) => {
const actual = await importOriginal();
@@ -383,6 +383,272 @@ describe('tmux-detector', () => {
expect(content).toBe('');
});
});
describe('revalidateBlockedPanes', () => {
const trackedPane = {
id: '%0',
session: 'main',
windowIndex: 0,
windowName: 'dev',
paneIndex: 0,
isActive: true,
analysis: { hasClaudeCode: true, hasRateLimitMessage: true, isBlocked: true, confidence: 1 },
firstDetectedAt: new Date('2026-01-01T00:00:00.000Z'),
resumeAttempted: false,
};
const paneList = 'main:0.0 %0 1 dev Claude\n';
const livePrompt = [
'Claude Code v1.2.3',
"You've reached your rate limit. Please wait for the limit to reset.",
'[1] Continue when ready',
'[2] Exit',
'Enter to confirm',
].join('\n');
const selectedResumePrompt = [
'Claude Code v1.2.3',
"You've reached your rate limit. Please wait for the limit to reset.",
'❯ 1. Continue when ready',
].join('\n');
const stopAndWaitPrompt = [
'Claude Code',
"You've hit your limit · resets Feb 17 at 2pm",
'❯ 1. Stop and wait',
'Enter to confirm',
].join('\n');
const weeklyLimitChoicePrompt = [
'Claude Code v1.0.0',
'Weekly usage limit reached',
"You've used your weekly allocation of tokens.",
'Limit resets on Monday at 12:00 AM UTC.',
'Options:',
'[1] Continue when limit resets',
'[2] Exit',
'Enter choice:',
].join('\n');
const waitAndContinuePrompt = [
'Claude Code',
"You've reached your usage limit for the 5-hour period.",
'Your limit will reset at 3:45 PM.',
'What would you like to do?',
'[1] Wait and continue automatically when limit resets',
'[2] Switch to a different conversation',
'[3] Exit',
'>',
].join('\n');
function makeTmuxAvailable() {
vi.mocked(tmuxSpawn).mockReturnValue({
status: 0,
stdout: '/usr/bin/tmux',
stderr: '',
signal: null,
pid: 1234,
output: [],
});
}
it('requires a live continuation option near the current pane prompt', () => {
makeTmuxAvailable();
vi.mocked(tmuxExec)
.mockReturnValueOnce(paneList)
.mockReturnValueOnce(livePrompt);
expect(revalidateBlockedPanes([trackedPane])).toMatchObject([
{ id: '%0', session: 'main', windowName: 'dev' },
]);
});
it('revalidates a live pane after its window is renamed', () => {
makeTmuxAvailable();
vi.mocked(tmuxExec)
.mockReturnValueOnce('main:0.0 %0 1 renamed Claude\n')
.mockReturnValueOnce(livePrompt);
expect(revalidateBlockedPanes([trackedPane])).toMatchObject([
{ id: '%0', session: 'main', windowName: 'renamed' },
]);
});
it('recognizes a cursor-selected continuation option', () => {
makeTmuxAvailable();
vi.mocked(tmuxExec)
.mockReturnValueOnce(paneList)
.mockReturnValueOnce(selectedResumePrompt);
expect(revalidateBlockedPanes([trackedPane])).toMatchObject([
{ id: '%0', session: 'main', windowName: 'dev' },
]);
});
it('recognizes the live stop-and-wait confirmation prompt', () => {
makeTmuxAvailable();
vi.mocked(tmuxExec)
.mockReturnValueOnce(paneList)
.mockReturnValueOnce(stopAndWaitPrompt);
expect(revalidateBlockedPanes([trackedPane])).toMatchObject([
{ id: '%0', session: 'main', windowName: 'dev' },
]);
});
it('recognizes the supported weekly-limit Enter choice prompt', () => {
makeTmuxAvailable();
vi.mocked(tmuxExec)
.mockReturnValueOnce(paneList)
.mockReturnValueOnce(weeklyLimitChoicePrompt);
expect(revalidateBlockedPanes([trackedPane])).toMatchObject([
{ id: '%0', session: 'main', windowName: 'dev' },
]);
});
it('recognizes the supported wait-and-continue prompt with a bare selector', () => {
makeTmuxAvailable();
vi.mocked(tmuxExec)
.mockReturnValueOnce(paneList)
.mockReturnValueOnce(waitAndContinuePrompt);
expect(revalidateBlockedPanes([trackedPane])).toMatchObject([
{ id: '%0', session: 'main', windowName: 'dev' },
]);
});
it('rejects a stale bare selector when a conversation line follows it', () => {
makeTmuxAvailable();
const resumedConversation = [
'Claude Code',
"You've reached your usage limit for the 5-hour period.",
'What would you like to do?',
'[1] Wait and continue automatically when limit resets',
'>',
'❯ Please explain the test failure',
'[OMC#4.15.1L] | Model: Opus 4.8 | 5h:100% wk:14% | thinking | session:80m | ctx:14%',
'⏵⏵ auto mode on (shift+tab to cycle) · ← for agents',
].join('\n');
vi.mocked(tmuxExec)
.mockReturnValueOnce(paneList)
.mockReturnValueOnce(resumedConversation);
expect(revalidateBlockedPanes([trackedPane])).toEqual([]);
});
it('rejects a new bare selector after a conversation following an old resume menu', () => {
makeTmuxAvailable();
const resumedConversation = [
'Claude Code',
"You've reached your usage limit for the 5-hour period.",
'What would you like to do?',
'[1] Wait and continue automatically when limit resets',
'>',
'I can help you run the tests.',
'>',
].join('\n');
vi.mocked(tmuxExec)
.mockReturnValueOnce(paneList)
.mockReturnValueOnce(resumedConversation);
expect(revalidateBlockedPanes([trackedPane])).toEqual([]);
});
it('rejects confirmation wording when it is part of a conversation line', () => {
makeTmuxAvailable();
const resumedConversation = [
'Claude Code',
"You've reached your usage limit for the 5-hour period.",
'What would you like to do?',
'[1] Wait and continue automatically when limit resets',
'>',
'Press Enter to confirm the migration',
'[OMC#4.15.1L] | Model: Opus 4.8 | 5h:100% wk:14% | thinking | session:80m | ctx:14%',
'⏵⏵ auto mode on (shift+tab to cycle) · ← for agents',
].join('\n');
vi.mocked(tmuxExec)
.mockReturnValueOnce(paneList)
.mockReturnValueOnce(resumedConversation);
expect(revalidateBlockedPanes([trackedPane])).toEqual([]);
});
it('rejects a stale rate-limit option before an unrelated confirmation menu', () => {
makeTmuxAvailable();
const unrelatedConfirmation = [
'Claude Code v1.2.3',
"You've reached your rate limit. Please wait for the limit to reset.",
'[1] Continue when ready',
'Run this command?',
'[1] Yes',
'[2] No',
'Enter to confirm',
].join('\n');
vi.mocked(tmuxExec)
.mockReturnValueOnce(paneList)
.mockReturnValueOnce(unrelatedConfirmation);
expect(revalidateBlockedPanes([trackedPane])).toEqual([]);
});
it('ignores live OMC HUD footer lines when checking the prompt', () => {
makeTmuxAvailable();
const livePromptWithHud = [
livePrompt,
'[OMC#4.15.1L] | Model: Opus 4.8 | 5h:100% wk:14% | thinking | session:80m | ctx:14%',
'⏵⏵ auto mode on (shift+tab to cycle) · ← for agents',
].join('\n');
vi.mocked(tmuxExec)
.mockReturnValueOnce(paneList)
.mockReturnValueOnce(livePromptWithHud);
expect(revalidateBlockedPanes([trackedPane])).toMatchObject([
{ id: '%0', session: 'main', windowName: 'dev' },
]);
});
it('ignores model-only OMC HUD rows when checking the prompt', () => {
makeTmuxAvailable();
const livePromptWithModelHud = [
livePrompt,
'[OMC#4.15.1L] | Model: Opus 4.8',
].join('\n');
vi.mocked(tmuxExec)
.mockReturnValueOnce(paneList)
.mockReturnValueOnce(livePromptWithModelHud);
expect(revalidateBlockedPanes([trackedPane])).toMatchObject([
{ id: '%0', session: 'main', windowName: 'dev' },
]);
});
it('ignores the OMC HUD marker when model metadata is unavailable', () => {
makeTmuxAvailable();
const livePromptWithoutModelHud = [
livePrompt,
'[OMC#4.15.1L]',
].join('\n');
vi.mocked(tmuxExec)
.mockReturnValueOnce(paneList)
.mockReturnValueOnce(livePromptWithoutModelHud);
expect(revalidateBlockedPanes([trackedPane])).toMatchObject([
{ id: '%0', session: 'main', windowName: 'dev' },
]);
});
it('rejects old rate-limit text after the pane has resumed into a conversation', () => {
makeTmuxAvailable();
const activeConversation = [
'Claude Code v1.2.3',
"You've reached your rate limit. Please wait for the limit to reset.",
'[1] Continue when ready',
'[2] Exit',
'1. Run the tests',
].join('\n');
vi.mocked(tmuxExec)
.mockReturnValueOnce(paneList)
.mockReturnValueOnce(activeConversation);
expect(revalidateBlockedPanes([trackedPane])).toEqual([]);
});
it('rejects a cursor-prefixed conversation line after an old menu', () => {
makeTmuxAvailable();
const activeConversation = [
'Claude Code v1.2.3',
"You've reached your rate limit. Please wait for the limit to reset.",
'[1] Continue when ready',
'[2] Exit',
'❯ 1. Run the tests',
].join('\n');
vi.mocked(tmuxExec)
.mockReturnValueOnce(paneList)
.mockReturnValueOnce(activeConversation);
expect(revalidateBlockedPanes([trackedPane])).toEqual([]);
});
it('returns inconclusive when pane listing fails', () => {
makeTmuxAvailable();
vi.mocked(tmuxExec).mockImplementationOnce(() => {
throw new Error('tmux server unavailable');
});
expect(revalidateBlockedPanes([trackedPane])).toBeNull();
});
it('returns inconclusive when a tracked pane capture fails', () => {
makeTmuxAvailable();
vi.mocked(tmuxExec)
.mockReturnValueOnce(paneList)
.mockImplementationOnce(() => {
throw new Error('pane capture failed');
});
expect(revalidateBlockedPanes([trackedPane])).toBeNull();
});
});
describe('security: input validation', () => {
it('should reject invalid pane IDs in capturePaneContent', () => {
vi.mocked(tmuxSpawn).mockReturnValue({
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"tmux-detector.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/tmux-detector.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"tmux-detector.test.js","sourceRoot":"","sources":["../../../src/__tests__/rate-limit-wait/tmux-detector.test.ts"],"names":[],"mappings":"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 truncated
+20 -1
View File
@@ -1,7 +1,7 @@
import { mkdtempSync, rmSync, writeFileSync } from 'fs';
import { join } from 'path';
import { describe, expect, it } from 'vitest';
import { execSync } from 'child_process';
import { execSync, execFileSync } from 'child_process';
import { tmpdir } from 'os';
import { extractPullRequestNumbers, isReleasePullRequest, deriveContributorLogins, buildReleaseNoteEntriesFromPullRequests, categorizeReleaseNoteEntries, generateChangelog, generateReleaseBody, getLatestTag, } from '../lib/release-generation.js';
describe('release generation', () => {
@@ -64,6 +64,25 @@ describe('release generation', () => {
expect(changelog).toContain('Fix team tmux pane geometry collapse and bundled agent path resolution');
expect(changelog).not.toContain('1+ PRs merged');
});
it('preserves literal shell substitution characters in refs and excluded tags', () => {
const repoDir = mkdtempSync(join(tmpdir(), 'release-literal-tag-'));
const git = (...args) => execFileSync('git', args, { cwd: repoDir, stdio: 'pipe' });
try {
git('init');
git('config', 'user.name', 'Test');
git('config', 'user.email', 'test@example.com');
git('commit', '--allow-empty', '-m', 'first');
git('tag', 'v1.0.0');
git('commit', '--allow-empty', '-m', 'second');
const tag = 'v$(echo)';
git('tag', tag);
expect(getLatestTag({ cwd: repoDir, ref: tag })).toBe(tag);
expect(getLatestTag({ cwd: repoDir, excludeTag: tag })).toBe('v1.0.0');
}
finally {
rmSync(repoDir, { recursive: true, force: true });
}
});
it('excludes the current release tag when resolving the previous tag', () => {
const repoDir = mkdtempSync(join(tmpdir(), 'release-tag-test-'));
try {
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"release-generation.test.js","sourceRoot":"","sources":["../../src/__tests__/release-generation.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EACpB,uBAAuB,EACvB,uCAAuC,EACvC,4BAA4B,EAC5B,iBAAiB,EACjB,mBAAmB,EACnB,YAAY,GACb,MAAM,8BAA8B,CAAC;AAEtC,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,SAAS,GAAG,yBAAyB,CAAC;YAC1C,4DAA4D;YAC5D,6EAA6E;YAC7E,0EAA0E;YAC1E,0DAA0D;YAC1D,4DAA4D;SAC7D,CAAC,CAAC;QAEH,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,oBAAoB,CAAC;YAC1B,KAAK,EAAE,iBAAiB;YACxB,WAAW,EAAE,gBAAgB;SAC9B,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEf,MAAM,CAAC,oBAAoB,CAAC;YAC1B,KAAK,EAAE,yCAAyC;YAChD,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEf,MAAM,CAAC,oBAAoB,CAAC;YAC1B,KAAK,EAAE,qEAAqE;YAC5E,WAAW,EAAE,wBAAwB;SACtC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,YAAY,GAAG,uBAAuB,CAC1C;YACE,EAAE,MAAM,EAAE,aAAa,EAAE;YACzB,EAAE,MAAM,EAAE,UAAU,EAAE;YACtB,EAAE,MAAM,EAAE,aAAa,EAAE;YACzB,EAAE,MAAM,EAAE,UAAU,EAAE;SACvB,EACD,CAAC,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,CAAC,CAChE,CAAC;QAEF,MAAM,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC;YAC3B,UAAU;YACV,UAAU;YACV,aAAa;YACb,aAAa;YACb,aAAa;SACd,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,YAAY,GAAG;YACnB,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,kHAAkH,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,qCAAqC,EAAE;YACxN,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,8DAA8D,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,4BAA4B,EAAE;YAC3J,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,+EAA+E,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,qCAAqC,EAAE;YACrL,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iEAAiE,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,uBAAuB,EAAE;YACtJ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,qEAAqE,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,wBAAwB,EAAE;YAC3J,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,wEAAwE,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,8BAA8B,EAAE;YACvK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,sDAAsD,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,8BAA8B,EAAE;YACrJ,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,0EAA0E,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,gCAAgC,EAAE;YAC3K,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,kEAAkE,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,+BAA+B,EAAE;YAClK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,wDAAwD,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,iCAAiC,EAAE;SAC3J,CAAC;QAEF,MAAM,UAAU,GAAG,4BAA4B,CAC7C,uCAAuC,CAAC,YAAY,CAAC,CACtD,CAAC;QACF,MAAM,SAAS,GAAG,iBAAiB,CAAC,QAAQ,EAAE,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;QAE/E,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;QACzD,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACjD,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,wEAAwE,CAAC,CAAC;QACtG,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAGH,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;QAEjE,IAAI,CAAC;YACH,QAAQ,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACxD,QAAQ,CAAC,kCAAkC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChF,QAAQ,CAAC,0CAA0C,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAExF,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,SAAS,CAAC,CAAC;YACrD,QAAQ,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACjE,QAAQ,CAAC,uBAAuB,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACrE,QAAQ,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE/D,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,CAAC;YACtD,QAAQ,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACjE,QAAQ,CAAC,wBAAwB,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YACtE,QAAQ,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE/D,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvD,MAAM,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChF,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;QACnF,MAAM,IAAI,GAAG,mBAAmB,CAC9B,QAAQ,EACR,uCAAuC,EACvC,CAAC,UAAU,EAAE,UAAU,EAAE,aAAa,CAAC,EACvC,SAAS,CACV,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gFAAgF,CAAC,CAAC;QACzG,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,yCAAyC,CAAC,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,qFAAqF,CAAC,CAAC;QAC9G,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,6CAA6C,CAAC,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,gCAAgC,CAAC,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,2EAA2E,CAAC,CAAC;QACpG,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kCAAkC,CAAC,CAAC;QAC3D,MAAM,CAAC,IAAI,CAAC,KAAK,CAACLine truncated
{"version":3,"file":"release-generation.test.js","sourceRoot":"","sources":["../../src/__tests__/release-generation.test.ts"],"names":[],"mappings":"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 truncated
+21
View File
@@ -114,6 +114,27 @@ describe('resolveNodeBinary', () => {
mockedReaddirSync.mockReturnValue(['v20.11.0', 'v22.3.0']);
expect(resolveNodeBinary()).toBe('/home/tester/.nvm/versions/node/v22.3.0/bin/node');
});
it.each([
['/home/tester/.nvm/versions/node', 'bin/node'],
['/home/tester/.fnm/node-versions', 'installation/bin/node'],
])('skips incomplete newer installations in %s', (baseDir, binarySuffix) => {
setExecPath('/opt/hostedtoolcache/node/24.0.0/bin/node');
const olderBinary = `${baseDir}/v22.3.0/${binarySuffix}`;
mockedExistsSync.mockImplementation(pathLike => String(pathLike) === baseDir || String(pathLike) === olderBinary);
mockedReaddirSync.mockReturnValue(['v20.11.0', 'v24.0.0', 'v22.3.0']);
expect(resolveNodeBinary()).toBe(olderBinary);
});
it('skips unsupported older installations and continues to system Node', () => {
setExecPath('/opt/hostedtoolcache/node/24.0.0/bin/node');
const baseDir = '/home/tester/.nvm/versions/node';
const unsupportedBinary = `${baseDir}/v18.20.8/bin/node`;
mockedExistsSync.mockImplementation(pathLike => {
const path = String(pathLike);
return path === baseDir || path === unsupportedBinary || path === '/usr/local/bin/node';
});
mockedReaddirSync.mockReturnValue(['v18.20.8', 'v24.0.0']);
expect(resolveNodeBinary()).toBe('/usr/local/bin/node');
});
it('returns bare node as a last resort', () => {
setExecPath('/opt/hostedtoolcache/node/20.20.2/x64/bin/node');
expect(resolveNodeBinary()).toBe('node');
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"resolve-node.test.js","sourceRoot":"","sources":["../../src/__tests__/resolve-node.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEzE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;IACvB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAAsB,IAAI,CAAC,CAAC;IAChE,OAAO;QACL,GAAG,MAAM;QACT,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;QACnB,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;KACrB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,IAAI,EAAE;IAClC,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAAiC,eAAe,CAAC,CAAC;IACtF,OAAO;QACL,GAAG,MAAM;QACT,QAAQ,EAAE,EAAE,CAAC,EAAE,EAAE;KAClB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;IACvB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,YAAY,CAAsB,IAAI,CAAC,CAAC;IAChE,OAAO;QACL,GAAG,MAAM;QACT,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC;KACrC,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,IAAI,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEhF,MAAM,gBAAgB,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAC/C,MAAM,iBAAiB,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACjD,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAE3C,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;AAE1C,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE;QACzC,KAAK;QACL,YAAY,EAAE,IAAI;QAClB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;AACL,CAAC;AAED,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,iBAAiB,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;QAC9C,MAAM,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC/E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,iBAAiB,CAAC,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,aAAa,EAAE,CAAC;QACnB,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAC9B,gBAAgB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACxC,iBAAiB,CAAC,eAAe,CAAC,EAAS,CAAC,CAAC;QAC7C,cAAc,CAAC,kBAAkB,CAAC,GAAG,EAAE;YACrC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iEAAiE,EAAE,GAAG,EAAE;QACzE,WAAW,CAAC,6CAA6C,CAAC,CAAC;QAE3D,cAAc,CAAC,eAAe,CAAC,0BAAiC,CAAC,CAAC;QAClE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9B,OAAO,IAAI,KAAK,6CAA6C,IAAI,IAAI,KAAK,wBAAwB,CAAC;QACrG,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QAEnC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,GAAG,EAAE;QAC7E,WAAW,CAAC,6CAA6C,CAAC,CAAC;QAE3D,cAAc,CAAC,eAAe,CAAC,0BAAiC,CAAC,CAAC;QAClE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9B,OAAO,IAAI,KAAK,6CAA6C,IAAI,IAAI,KAAK,wBAAwB,CAAC;QACrG,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC3D,MAAM,CAAC,cAAc,CAAC,CAAC,oBAAoB,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IACrH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,WAAW,CAAC,gDAAgD,CAAC,CAAC;QAE9D,cAAc,CAAC,eAAe,CAAC,uBAA8B,CAAC,CAAC;QAC/D,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9B,OAAO,IAAI,KAAK,gDAAgD,IAAI,IAAI,KAAK,qBAAqB,CAAC;QACrG,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qFAAqF,EAAE,GAAG,EAAE;QAC7F,WAAW,CAAC,mDAAmD,CAAC,CAAC;QAEjE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,mDAAmD,CAAC,CAAC;QAE5H,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE;QAC/F,WAAW,CAAC,gDAAgD,CAAC,CAAC;QAE9D,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9B,OAAO,IAAI,KAAK,iCAAiC,IAAI,IAAI,KAAK,kDAAkD,CAAC;QACnH,CAAC,CAAC,CAAC;QACH,iBAAiB,CAAC,eAAe,CAAC,CAAC,UAAU,EAAE,SAAS,CAAQ,CAAC,CAAC;QAElE,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,WAAW,CAAC,gDAAgD,CAAC,CAAC;QAE9D,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3Line truncated
{"version":3,"file":"resolve-node.test.js","sourceRoot":"","sources":["../../src/__tests__/resolve-node.test.ts"],"names":[],"mappings":"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 truncated
+20 -3
View File
@@ -9,12 +9,13 @@
* - Native git worktrees (git worktree add) — issue #1191
*/
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { mkdirSync, writeFileSync, rmSync, realpathSync } from 'fs';
import { mkdirSync, writeFileSync, rmSync, realpathSync, statSync, symlinkSync } from 'fs';
import { execSync } from 'child_process';
import { join } from 'path';
import { tmpdir } from 'os';
import { resolveTranscriptPath } from '../lib/worktree-paths.js';
import { encodeProjectPath } from '../utils/encode-project-path.js';
import { isUsableVersionPath } from '../utils/plugin-cache-validation.js';
describe('resolveTranscriptPath', () => {
let tempDir;
beforeEach(() => {
@@ -144,8 +145,10 @@ describe('resolveTranscriptPath', () => {
stdio: 'pipe',
env: {
...process.env,
GIT_AUTHOR_NAME: 'test', GIT_AUTHOR_EMAIL: 'test@test.com',
GIT_COMMITTER_NAME: 'test', GIT_COMMITTER_EMAIL: 'test@test.com',
GIT_AUTHOR_NAME: 'test',
GIT_AUTHOR_EMAIL: 'test@test.com',
GIT_COMMITTER_NAME: 'test',
GIT_COMMITTER_EMAIL: 'test@test.com',
},
});
worktreeDir = join(realpathSync(tempDir), 'linked-worktree');
@@ -204,5 +207,19 @@ describe('resolveTranscriptPath', () => {
expect(resolved).toBe(worktreePath);
});
});
it.skipIf(process.platform !== 'win32')('rejects an OMC payload junction into a stale cache version', () => {
const pluginDir = join(tempDir, 'plugin-cache', 'omc', 'oh-my-claudecode');
const active = join(pluginDir, '4.15.10');
const stale = join(pluginDir, '4.15.6');
for (const version of [active, stale]) {
mkdirSync(join(version, 'hooks'), { recursive: true });
mkdirSync(join(version, 'scripts'), { recursive: true });
writeFileSync(join(version, 'hooks', 'hooks.json'), '{}\n');
writeFileSync(join(version, 'scripts', 'run.cjs'), '// plugin root\n');
}
writeFileSync(join(stale, 'scripts', 'session-start.mjs'), '// stale hook payload\n');
symlinkSync(join(stale, 'scripts'), join(active, 'payload'), 'junction');
expect(isUsableVersionPath(active, statSync(stale))).toBe(false);
});
});
//# sourceMappingURL=resolve-transcript-path.test.js.map
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"resolve-transcript-path.test.js","sourceRoot":"","sources":["../../src/__tests__/resolve-transcript-path.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"resolve-transcript-path.test.js","sourceRoot":"","sources":["../../src/__tests__/resolve-transcript-path.test.ts"],"names":[],"mappings":"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 truncated
+64
View File
@@ -142,6 +142,8 @@ describe('SessionEnd run.cjs process exit regressions (#3477)', () => {
vi.stubEnv('HOME', cwd);
vi.stubEnv('USERPROFILE', cwd);
vi.stubEnv('OMC_STATE_DIR', '');
// Create a workspace marker so getOmcRoot uses this directory as the root
writeFileSync(join(cwd, '.omc-workspace'), '');
writeFileSync(join(cwd, 'transcript.jsonl'), '');
mkdirSync(getOmcRoot(cwd), { recursive: true });
return cwd;
@@ -242,6 +244,68 @@ describe('SessionEnd run.cjs process exit regressions (#3477)', () => {
const result = await runUntilClose(join(REPO_ROOT, 'scripts', 'wiki-session-end.mjs'), cwd, validSessionEndInput(cwd, 'wiki-live-lock'));
expectPromptExit(result);
});
it('wiki-session-end loads the lean wiki bootstrap, not the full SessionEnd index graph', () => {
const script = readFileSync(join(REPO_ROOT, 'scripts', 'wiki-session-end.mjs'), 'utf-8');
// The script may only load lean modules that already ship in the committed
// dist closure (a new dist file would need an owner-signed artifact commit).
const distImports = [...script.matchAll(/import\('(\.\.\/dist\/[^']+)'\)/g)].map((m) => m[1]).sort();
expect(distImports).toEqual([
'../dist/hooks/session-end/cleanup-manifest.js',
'../dist/hooks/session-end/worker.js',
'../dist/hooks/wiki/session-hooks.js',
'../dist/lib/worktree-paths.js',
]);
expect(script).not.toContain('session-end/index.js');
// Worker loads only after the intent is sealed.
expect(script.indexOf('sealWikiManifest(directory')).toBeLessThan(script.indexOf("import('../dist/hooks/session-end/worker.js')"));
const bootstrap = readFileSync(join(REPO_ROOT, 'src', 'hooks', 'session-end', 'wiki-foreground-bootstrap.ts'), 'utf-8');
expect(bootstrap).not.toMatch(/from '\.\/index\.js'|import\('\.\/index\.js'\)/);
});
// End-to-end through run.cjs and the shipped dist: the wiki hook seals its
// capture intent and the session-log page gets written. The foreground budget
// is widened via the test-only knob so this stays independent of host speed;
// the 300ms behaviour itself is pinned by the lean-import guard above and by
// the seal-before-worker-load ordering tests in wiki-foreground-bootstrap.test.ts.
// If the hook's own worker spawn is missed, the loop drives the recovery pass.
it.skipIf(!HAS_GENERATED_DIST)('wiki-session-end seals its capture intent and the session-log page is written', async () => {
const distWorker = pathToFileURL(join(REPO_ROOT, 'dist', 'hooks', 'session-end', 'worker.js')).href;
const { processSessionEndWorker } = await import(distWorker);
for (let run = 0; run < 3; run += 1) {
const cwd = createProject();
mkdirSync(join(getOmcRoot(cwd), 'wiki'), { recursive: true });
writeFileSync(join(getOmcRoot(cwd), '.omc-config.json'), JSON.stringify({ wiki: { autoCapture: true } }));
const sessionId = `wiki-budget-${run}`;
const result = await runUntilClose(join(REPO_ROOT, 'scripts', 'wiki-session-end.mjs'), cwd, validSessionEndInput(cwd, sessionId), DETACHED_WORKER_CEILING_MS, {
NODE_ENV: 'test',
OMC_SESSION_END_TEST_FOREGROUND_TIMEOUT_MS: String(DETACHED_WORKER_CEILING_MS - 500),
OMC_SESSION_END_TEST_PRODUCER_GRACE_MS: TEST_PRODUCER_GRACE_MS,
});
expectPromptExit(result, DETACHED_WORKER_CEILING_MS);
const manifestPath = join(getOmcRoot(cwd), 'state', 'session-end-jobs', `${sessionId}.json`);
const readJob = () => JSON.parse(readFileSync(manifestPath, 'utf-8'));
const sealed = readJob();
expect(sealed.producers.wiki).toMatchObject({ state: 'sealed', sealedBy: 'wiki-producer' });
const filename = sealed.actions['wiki-capture'].payload.filename;
expect(filename).toMatch(/^session-log-.*\.md$/);
// Same hard ceiling as waitForTerminalCallback.
const deadline = Date.now() + DETACHED_WORKER_CEILING_MS * 2;
let job = readJob();
while (!(job.phase === 'complete' && job.owner === null) && Date.now() < deadline) {
if (job.owner === null && Date.now() >= Date.parse(job.producerGraceExpiresAt)) {
await processSessionEndWorker({ directory: cwd, sessionId });
}
else {
await new Promise((resolve) => setTimeout(resolve, 25));
}
try {
job = readJob();
}
catch { /* concurrent atomic write; retry */ }
}
expect(job.actions['wiki-capture'], `phase=${job.phase} owner=${job.owner === null ? 'none' : 'held'}`).toMatchObject({ status: 'completed' });
expect(existsSync(join(getOmcRoot(cwd), 'wiki', filename))).toBe(true);
}
}, IS_CI ? 120_000 : 60_000);
it.skipIf(!HAS_GENERATED_DIST)('runs the SessionEnd pair sequentially within the combined foreground budget', async () => {
const cwd = createProject();
configureDeferredAdapters(cwd);
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"session-end-process-exit.test.js","sourceRoot":"","sources":["../../src/__tests__/session-end-process-exit.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"session-end-process-exit.test.js","sourceRoot":"","sources":["../../src/__tests__/session-end-process-exit.test.ts"],"names":[],"mappings":"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 truncated
+23
View File
@@ -166,6 +166,29 @@ describe('session-start.mjs — plugin cache cleanup uses symlinks', () => {
expect(lstatSync(join(fakeCacheBase, '4.4.0')).isSymbolicLink()).toBe(true);
expect(readlinkSync(join(fakeCacheBase, '4.4.0'))).toBe('4.4.3');
});
it('ignores orphaned *.tmp~* directories when choosing versions (issue #4263)', () => {
createFakeVersion('4.4.1');
createFakeVersion('4.4.2');
createFakeVersion('4.4.3');
// Interrupted updates leave orphans holding only package.json. With several
// of them, at most two could be kept by an unfiltered scan, so the rest
// would be replaced by symlinks: the regression is observable regardless
// of readdir order.
const orphans = Array.from({ length: 6 }, (_, i) => `4.4.3.tmp~orphan${i}`);
for (const orphan of orphans) {
mkdirSync(join(fakeCacheBase, orphan), { recursive: true });
writeFileSync(join(fakeCacheBase, orphan, 'package.json'), JSON.stringify({ version: '4.4.3' }));
}
runSessionStart();
for (const orphan of orphans) {
const stat = lstatSync(join(fakeCacheBase, orphan));
expect(stat.isSymbolicLink()).toBe(false);
expect(stat.isDirectory()).toBe(true);
}
expect(lstatSync(join(fakeCacheBase, '4.4.1')).isSymbolicLink()).toBe(true);
expect(readlinkSync(join(fakeCacheBase, '4.4.1'))).toBe('4.4.3');
expect(existsSync(join(fakeCacheBase, '4.4.1', 'scripts', 'run.cjs'))).toBe(true);
});
it('updates an existing symlink pointing to a non-latest target', () => {
createFakeVersion('4.4.2');
createFakeVersion('4.4.3');
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"session-start-cache-cleanup.test.js","sourceRoot":"","sources":["../../src/__tests__/session-start-cache-cleanup.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"session-start-cache-cleanup.test.js","sourceRoot":"","sources":["../../src/__tests__/session-start-cache-cleanup.test.ts"],"names":[],"mappings":"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 truncated
+661 -2
View File
@@ -1,10 +1,181 @@
import { describe, expect, it, beforeEach, afterEach } from 'vitest';
import { execFileSync, spawnSync } from 'node:child_process';
import { mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
import { execFileSync, spawn, spawnSync } from 'node:child_process';
import { chmodSync, mkdtempSync, mkdirSync, readFileSync, readdirSync, rmSync, writeFileSync, existsSync, symlinkSync } from 'node:fs';
import { randomUUID } from 'node:crypto';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
const SCRIPT_PATH = join(__dirname, '..', '..', 'scripts', 'session-start.mjs');
const NODE = process.execPath;
function startPostToolFailureLockHolder(statePath) {
const source = `import { openSync, writeSync, closeSync, unlinkSync, constants } from 'node:fs';
const lockPath = process.argv[1] + '.lock';
const fd = openSync(lockPath, constants.O_CREAT | constants.O_EXCL | constants.O_WRONLY, 0o600);
writeSync(fd, JSON.stringify({ pid: process.pid, timestamp: Date.now() }), null, 'utf-8');
process.stdout.write('LOCKED\\n');
process.stdin.once('data', () => {
try { closeSync(fd); unlinkSync(lockPath); process.exitCode = 0; }
catch { process.exitCode = 1; }
});`;
const child = spawn(NODE, ['--input-type=module', '-e', source, statePath], { stdio: ['pipe', 'pipe', 'pipe'] });
let readyOutput = '';
let exitResult = null;
const exited = new Promise((resolve) => {
child.once('exit', (code, signal) => {
exitResult = { code, signal };
resolve(exitResult);
});
});
const ready = new Promise((resolve, reject) => {
let settled = false;
const timeout = setTimeout(() => finish(new Error(`Timed out waiting for lock holder: ${readyOutput}`)), 5000);
const finish = (error) => {
if (settled)
return;
settled = true;
clearTimeout(timeout);
child.stdout.off('data', onStdout);
child.stderr.off('data', onStderr);
child.off('exit', onExit);
child.off('error', onError);
if (error)
reject(error);
else
resolve();
};
const onStdout = (chunk) => {
readyOutput += chunk.toString();
if (readyOutput.includes('LOCKED\n'))
finish();
};
const onStderr = (chunk) => { readyOutput += chunk.toString(); };
const onExit = (code, signal) => {
finish(new Error(`Lock holder exited before acquisition (${code ?? signal}): ${readyOutput}`));
};
const onError = (error) => finish(error);
child.stdout.on('data', onStdout);
child.stderr.on('data', onStderr);
child.once('exit', onExit);
child.once('error', onError);
});
const waitForExit = async (timeoutMs) => {
if (exitResult)
return exitResult;
let timeout;
const timedOut = new Promise((resolve) => {
timeout = setTimeout(() => resolve(null), timeoutMs);
});
const result = await Promise.race([exited, timedOut]);
if (timeout)
clearTimeout(timeout);
return result;
};
return {
ready,
async release() {
if (!exitResult && child.stdin.writable && !child.stdin.writableEnded)
child.stdin.end('release');
let result = await waitForExit(5000);
if (!result) {
child.kill();
result = await waitForExit(1000);
}
return result;
},
};
}
function startSqliteMutationLockHolder(databasePath) {
const source = `import Database from 'better-sqlite3';
const database = new Database(process.argv[1]);
database.pragma('journal_mode = WAL');
database.exec('CREATE TABLE IF NOT EXISTS state_mutation_locks (lock_key TEXT PRIMARY KEY, version INTEGER NOT NULL, pid INTEGER NOT NULL, process_start TEXT NOT NULL, created_at TEXT NOT NULL, nonce TEXT NOT NULL)');
database.exec('BEGIN IMMEDIATE');
process.stdout.write('LOCKED');
process.stdin.once('data', () => { database.exec('ROLLBACK'); database.close(); });
process.stdin.resume();`;
const child = spawn(NODE, ['--input-type=module', '-e', source, databasePath], { stdio: ['pipe', 'pipe', 'pipe'] });
let output = '';
const ready = new Promise((resolve, reject) => {
let settled = false;
const finish = (error) => {
if (settled)
return;
settled = true;
clearTimeout(timeout);
if (error)
reject(error);
else
resolve();
};
const timeout = setTimeout(() => finish(new Error(`Timed out acquiring SQLite mutation lock: ${output}`)), 5000);
child.stdout.on('data', chunk => {
output += chunk.toString();
if (output.includes('LOCKED'))
finish();
});
child.stderr.on('data', chunk => { output += chunk.toString(); });
child.once('error', error => finish(error));
child.once('exit', code => {
if (!output.includes('LOCKED'))
finish(new Error(`SQLite mutation lock holder exited (${code}): ${output}`));
});
});
return {
ready,
async release() {
child.stdin.end('release');
if (child.exitCode === null && child.signalCode === null) {
await new Promise(resolve => child.once('exit', () => resolve()));
}
},
};
}
function startSessionStartProcess(scriptPath, fakeHome, input, extraEnv = {}) {
const child = spawn(NODE, [scriptPath], {
stdio: ['pipe', 'pipe', 'pipe'],
env: { ...process.env, HOME: fakeHome, USERPROFILE: fakeHome, ...extraEnv },
});
let stdout = '';
let stderr = '';
const output = new Promise((resolve, reject) => {
const timeout = setTimeout(() => {
child.kill();
reject(new Error(`SessionStart timed out: ${stderr}`));
}, 15000);
child.stdout.on('data', chunk => { stdout += chunk.toString(); });
child.stderr.on('data', chunk => { stderr += chunk.toString(); });
child.once('error', error => {
clearTimeout(timeout);
reject(error);
});
child.once('exit', (code, signal) => {
clearTimeout(timeout);
if (code === 0)
resolve(stdout.trim());
else
reject(new Error(`SessionStart exited (${code ?? signal}): ${stderr}`));
});
});
child.stdin.end(JSON.stringify(input));
return { child, output };
}
async function waitForFilesToDisappear(paths, timeoutMs) {
const deadline = Date.now() + timeoutMs;
while (Date.now() < deadline) {
if (paths.every(path => !existsSync(path)))
return true;
await new Promise(resolve => setTimeout(resolve, 25));
}
return paths.every(path => !existsSync(path));
}
async function waitForFilesToAppear(paths, timeoutMs) {
const deadline = Date.now() + timeoutMs;
while (Date.now() < deadline) {
if (paths.every(path => existsSync(path)))
return true;
await new Promise(resolve => setTimeout(resolve, 25));
}
return paths.every(path => existsSync(path));
}
describe('session-start.mjs regression #1386', () => {
let tempDir;
let fakeHome;
@@ -47,6 +218,494 @@ describe('session-start.mjs regression #1386', () => {
expect(context).not.toContain('[ULTRAWORK MODE RESTORED]');
expect(context).not.toContain('Old task that should not override a new request');
});
it('purges legacy tool-failure state without disturbing unrelated inactive-session state', () => {
const stateDir = join(fakeProject, '.omc', 'state');
const oldSessionDir = join(stateDir, 'sessions', 'session-old-without-marker');
mkdirSync(oldSessionDir, { recursive: true });
const legacyRootError = join(stateDir, 'last-tool-error.json');
const legacySessionError = join(oldSessionDir, 'last-tool-error-state.json');
const unrelatedState = join(oldSessionDir, 'unrelated-state.json');
writeFileSync(legacyRootError, JSON.stringify({ tool_input_preview: 'legacy input secret', error: 'legacy raw error' }));
writeFileSync(legacySessionError, JSON.stringify({ tool_input_preview: 'legacy input secret', error: 'legacy raw error' }));
writeFileSync(unrelatedState, 'preserve this state');
const raw = execFileSync(NODE, [SCRIPT_PATH], {
input: JSON.stringify({
hook_event_name: 'SessionStart',
session_id: 'session-current',
cwd: fakeProject,
}),
encoding: 'utf-8',
env: {
...process.env,
HOME: fakeHome,
USERPROFILE: fakeHome,
CLAUDE_PLUGIN_ROOT: '',
OMC_STATE_DIR: '',
},
timeout: 15000,
}).trim();
expect(JSON.parse(raw).continue).toBe(true);
expect(existsSync(legacyRootError)).toBe(false);
expect(existsSync(legacySessionError)).toBe(false);
expect(existsSync(join(oldSessionDir, 'session-started.json'))).toBe(false);
expect(readFileSync(unrelatedState, 'utf-8')).toBe('preserve this state');
});
it('preserves sanitized canonical tool-failure records and their retry counts', () => {
const stateDir = join(fakeProject, '.omc', 'state');
const sessionDir = join(stateDir, 'sessions', 'session-retry-state');
mkdirSync(sessionDir, { recursive: true });
const rootPath = join(stateDir, 'last-tool-error.json');
const sessionPath = join(sessionDir, 'last-tool-error-state.json');
const rootState = {
tool_name: 'Bash',
error: 'Tool execution failed (details omitted for privacy).',
timestamp: new Date().toISOString(),
retry_count: 4,
};
const sessionState = { ...rootState, retry_count: 7 };
writeFileSync(rootPath, JSON.stringify(rootState));
writeFileSync(sessionPath, JSON.stringify(sessionState));
execFileSync(NODE, [SCRIPT_PATH], {
input: JSON.stringify({ hook_event_name: 'SessionStart', session_id: 'session-current', cwd: fakeProject }),
encoding: 'utf-8',
env: {
...process.env,
HOME: fakeHome,
USERPROFILE: fakeHome,
CLAUDE_PLUGIN_ROOT: '',
OMC_STATE_DIR: '',
},
timeout: 15000,
});
expect(JSON.parse(readFileSync(rootPath, 'utf-8'))).toEqual(rootState);
expect(JSON.parse(readFileSync(sessionPath, 'utf-8'))).toEqual(sessionState);
});
it('purges legacy atomic temp files but preserves a fresh sanitized temp', () => {
const stateDir = join(fakeProject, '.omc', 'state');
const sessionDir = join(stateDir, 'sessions', 'session-temp-files');
mkdirSync(sessionDir, { recursive: true });
const legacyPaths = [
join(stateDir, `.last-tool-error.json.tmp.${randomUUID()}`),
join(stateDir, `.last-tool-error-state.json.tmp.${randomUUID()}`),
join(sessionDir, `.last-tool-error.json.tmp.${randomUUID()}`),
join(sessionDir, `.last-tool-error-state.json.tmp.${randomUUID()}`),
];
for (const path of legacyPaths)
writeFileSync(path, JSON.stringify({ tool_input_preview: 'legacy temp secret', error: 'legacy raw error' }));
const freshPath = join(stateDir, `.last-tool-error.json.tmp.${randomUUID()}`);
const unrelatedTempPath = join(stateDir, '.last-tool-error.json.tmp.not-a-uuid');
writeFileSync(freshPath, JSON.stringify({
tool_name: 'Bash',
error: 'Tool execution failed (details omitted for privacy).',
timestamp: new Date().toISOString(),
retry_count: 4,
}));
writeFileSync(unrelatedTempPath, 'not an atomic temp name');
const output = JSON.parse(execFileSync(NODE, [SCRIPT_PATH], {
input: JSON.stringify({ hook_event_name: 'SessionStart', session_id: 'session-current', cwd: fakeProject }),
encoding: 'utf-8',
env: {
...process.env,
HOME: fakeHome,
USERPROFILE: fakeHome,
CLAUDE_PLUGIN_ROOT: '',
OMC_STATE_DIR: '',
},
timeout: 15000,
}));
expect(output.continue).toBe(true);
for (const path of legacyPaths)
expect(existsSync(path)).toBe(false);
expect(existsSync(freshPath)).toBe(true);
expect(existsSync(unrelatedTempPath)).toBe(true);
});
it('preserves an in-flight legacy temp until the PostToolUseFailure lock is released', async () => {
const stateDir = join(fakeProject, '.omc', 'state');
const canonicalPath = join(stateDir, 'last-tool-error.json');
const tempPath = join(stateDir, `.last-tool-error.json.tmp.${randomUUID()}`);
const holder = startPostToolFailureLockHolder(canonicalPath);
let sessionStart;
try {
await holder.ready;
sessionStart = startSessionStartProcess(SCRIPT_PATH, fakeHome, {
hook_event_name: 'SessionStart',
session_id: 'session-current',
cwd: fakeProject,
}, { CLAUDE_PLUGIN_ROOT: '', OMC_STATE_DIR: '' });
await new Promise(resolve => setTimeout(resolve, 250));
writeFileSync(tempPath, '{"tool_input_preview":"in-flight legacy payload"');
expect(existsSync(tempPath)).toBe(true);
expect(await holder.release()).toEqual({ code: 0, signal: null });
const output = JSON.parse(await sessionStart.output);
expect(output.continue).toBe(true);
expect(existsSync(tempPath)).toBe(false);
}
finally {
await holder.release();
if (sessionStart)
await sessionStart.output.catch(() => '');
}
});
it('defers cleanup for locked root and session state within the SessionStart timeout', async () => {
const stateDir = join(fakeProject, '.omc', 'state');
const sessionDir = join(stateDir, 'sessions', 'session-locked');
mkdirSync(sessionDir, { recursive: true });
const rootPath = join(stateDir, 'last-tool-error.json');
const sessionPath = join(sessionDir, 'last-tool-error-state.json');
const rootTemp = join(stateDir, `.last-tool-error.json.tmp.${randomUUID()}`);
const sessionTemp = join(sessionDir, `.last-tool-error-state.json.tmp.${randomUUID()}`);
const cleanupPaths = [rootPath, rootTemp, sessionPath, sessionTemp];
const rootHolder = startPostToolFailureLockHolder(rootPath);
const sessionHolder = startPostToolFailureLockHolder(sessionPath);
let sessionStart;
try {
await Promise.all([rootHolder.ready, sessionHolder.ready]);
const startedAt = Date.now();
sessionStart = startSessionStartProcess(SCRIPT_PATH, fakeHome, {
hook_event_name: 'SessionStart',
session_id: 'session-current',
cwd: fakeProject,
}, { CLAUDE_PLUGIN_ROOT: '', OMC_STATE_DIR: '', OMC_HOOK_BACKGROUND_CHILD: '0' });
await new Promise(resolve => setTimeout(resolve, 250));
writeFileSync(rootPath, JSON.stringify({ tool_input_preview: 'root legacy payload', error: 'legacy root error' }));
writeFileSync(rootTemp, '{"tool_input_preview":"root legacy temp"');
writeFileSync(sessionPath, JSON.stringify({ tool_input_preview: 'session legacy payload', error: 'legacy session error' }));
writeFileSync(sessionTemp, '{"tool_input_preview":"session legacy payload"');
const output = JSON.parse(await sessionStart.output);
expect(output.continue).toBe(true);
expect(Date.now() - startedAt).toBeLessThan(5000);
expect(cleanupPaths.every(path => existsSync(path))).toBe(true);
expect(await rootHolder.release()).toEqual({ code: 0, signal: null });
expect(await sessionHolder.release()).toEqual({ code: 0, signal: null });
expect(await waitForFilesToDisappear(cleanupPaths, 5000)).toBe(true);
}
finally {
await Promise.all([rootHolder.release(), sessionHolder.release()]);
if (sessionStart)
await sessionStart.output.catch(() => '');
}
});
it.skipIf(process.platform === 'win32' || process.getuid?.() === 0)('returns promptly when failure-state lock creation is denied', async () => {
const stateDir = join(fakeProject, '.omc', 'state');
const legacyPath = join(stateDir, 'last-tool-error.json');
writeFileSync(legacyPath, JSON.stringify({ tool_input_preview: 'read-only legacy secret' }));
chmodSync(stateDir, 0o555);
let sessionStart;
try {
const startedAt = Date.now();
sessionStart = startSessionStartProcess(SCRIPT_PATH, fakeHome, {
hook_event_name: 'SessionStart',
session_id: 'session-current',
cwd: fakeProject,
}, { CLAUDE_PLUGIN_ROOT: '', OMC_STATE_DIR: '', OMC_HOOK_BACKGROUND_CHILD: '0' });
const output = JSON.parse(await sessionStart.output);
expect(output.continue).toBe(true);
expect(Date.now() - startedAt).toBeLessThan(5000);
expect(existsSync(legacyPath)).toBe(true);
}
finally {
chmodSync(stateDir, 0o755);
if (sessionStart)
await sessionStart.output.catch(() => '');
}
});
it('does not classify unverifiable failure-state locks as retryable contention', async () => {
const stateDir = join(fakeProject, '.omc', 'state');
const legacyPath = join(stateDir, 'last-tool-error.json');
const workerLockPath = join(stateDir, '.legacy-tool-failure-cleanup-worker.lock');
writeFileSync(legacyPath, JSON.stringify({ tool_input_preview: 'unverifiable legacy secret' }));
writeFileSync(`${legacyPath}.lock`, 'malformed lock metadata');
const sessionStart = startSessionStartProcess(SCRIPT_PATH, fakeHome, {
hook_event_name: 'SessionStart',
session_id: 'session-current',
cwd: fakeProject,
}, {
CLAUDE_PLUGIN_ROOT: '',
OMC_STATE_DIR: '',
OMC_HOOK_BACKGROUND_CHILD: '0',
OMC_TEST_TOOL_FAILURE_STABILIZATION_MS: '1500',
});
const workerLockAppeared = waitForFilesToAppear([workerLockPath], 5000);
try {
const output = JSON.parse(await sessionStart.output);
expect(output.continue).toBe(true);
expect(existsSync(legacyPath)).toBe(true);
expect(readFileSync(`${legacyPath}.lock`, 'utf-8')).toBe('malformed lock metadata');
expect(await workerLockAppeared).toBe(true);
expect(await waitForFilesToDisappear([workerLockPath], 5000)).toBe(true);
}
finally {
await sessionStart.output.catch(() => '');
}
});
it('lets stabilization workers exit while sanitized failure records remain', async () => {
const stateDir = join(fakeProject, '.omc', 'state');
const legacyPath = join(stateDir, 'last-tool-error.json');
const workerLockPath = join(stateDir, '.legacy-tool-failure-cleanup-worker.lock');
const sanitizedState = {
tool_name: 'Bash',
error: 'Tool execution failed (details omitted for privacy).',
timestamp: new Date().toISOString(),
retry_count: 1,
};
writeFileSync(legacyPath, JSON.stringify(sanitizedState));
const sessionStart = startSessionStartProcess(SCRIPT_PATH, fakeHome, {
hook_event_name: 'SessionStart',
session_id: 'session-current',
cwd: fakeProject,
}, {
CLAUDE_PLUGIN_ROOT: '',
OMC_STATE_DIR: '',
OMC_HOOK_BACKGROUND_CHILD: '0',
OMC_TEST_TOOL_FAILURE_STABILIZATION_MS: '1500',
});
const workerLockAppeared = waitForFilesToAppear([workerLockPath], 5000);
try {
expect(JSON.parse(await sessionStart.output).continue).toBe(true);
expect(await workerLockAppeared).toBe(true);
expect(await waitForFilesToDisappear([workerLockPath], 5000)).toBe(true);
expect(JSON.parse(readFileSync(legacyPath, 'utf-8'))).toEqual(sanitizedState);
}
finally {
await sessionStart.output.catch(() => '');
}
});
it('rescans root and newly created session records after the startup snapshot', async () => {
const stateDir = join(fakeProject, '.omc', 'state');
const rootPath = join(stateDir, 'last-tool-error.json');
const lateSessionDir = join(stateDir, 'sessions', 'session-created-after-start');
const lateSessionPath = join(lateSessionDir, 'last-tool-error-state.json');
const workerLockPath = join(stateDir, '.legacy-tool-failure-cleanup-worker.lock');
const sessionStart = startSessionStartProcess(SCRIPT_PATH, fakeHome, {
hook_event_name: 'SessionStart',
session_id: 'session-current',
cwd: fakeProject,
}, {
CLAUDE_PLUGIN_ROOT: '',
OMC_STATE_DIR: '',
OMC_HOOK_BACKGROUND_CHILD: '0',
OMC_TEST_TOOL_FAILURE_STABILIZATION_MS: '1500',
});
try {
expect(JSON.parse(await sessionStart.output).continue).toBe(true);
await new Promise(resolve => setTimeout(resolve, 100));
mkdirSync(lateSessionDir, { recursive: true });
writeFileSync(rootPath, JSON.stringify({ tool_input_preview: 'late root legacy secret' }));
writeFileSync(lateSessionPath, JSON.stringify({ tool_input_preview: 'late session legacy secret' }));
expect(await waitForFilesToDisappear([rootPath, lateSessionPath], 5000)).toBe(true);
expect(await waitForFilesToDisappear([workerLockPath], 5000)).toBe(true);
}
finally {
await sessionStart.output.catch(() => '');
}
});
it('purges artifacts published after the last stabilization scan', async () => {
const stateDir = join(fakeProject, '.omc', 'state');
const legacyPath = join(stateDir, 'last-tool-error.json');
const workerLockPath = join(stateDir, '.legacy-tool-failure-cleanup-worker.lock');
const sessionStart = startSessionStartProcess(SCRIPT_PATH, fakeHome, {
hook_event_name: 'SessionStart',
session_id: 'session-current',
cwd: fakeProject,
}, {
CLAUDE_PLUGIN_ROOT: '',
OMC_STATE_DIR: '',
OMC_HOOK_BACKGROUND_CHILD: '0',
OMC_TEST_TOOL_FAILURE_STABILIZATION_MS: '1000',
});
try {
expect(JSON.parse(await sessionStart.output).continue).toBe(true);
expect(await waitForFilesToAppear([workerLockPath], 5000)).toBe(true);
const workerLock = JSON.parse(readFileSync(workerLockPath, 'utf8'));
const publishAt = Date.parse(workerLock.createdAt) + 850;
const delay = publishAt - Date.now();
if (delay > 0)
await new Promise(resolve => setTimeout(resolve, delay));
expect(existsSync(workerLockPath)).toBe(true);
writeFileSync(legacyPath, JSON.stringify({ tool_input_preview: 'last-window legacy secret' }));
expect(await waitForFilesToDisappear([legacyPath], 5000)).toBe(true);
expect(await waitForFilesToDisappear([workerLockPath], 5000)).toBe(true);
}
finally {
await sessionStart.output.catch(() => '');
}
});
it('skips sanitized session records before waiting for the shared SQLite lock', async () => {
const omcRoot = join(fakeProject, '.omc');
const stateDir = join(omcRoot, 'state');
const sessionsDir = join(stateDir, 'sessions');
const sanitizedState = {
tool_name: 'Bash',
error: 'Tool execution failed (details omitted for privacy).',
timestamp: new Date().toISOString(),
retry_count: 0,
};
for (let index = 0; index < 20; index += 1) {
const sessionDir = join(sessionsDir, `session-sanitized-${index}`);
mkdirSync(sessionDir, { recursive: true });
writeFileSync(join(sessionDir, 'last-tool-error-state.json'), JSON.stringify(sanitizedState));
}
const holder = startSqliteMutationLockHolder(join(stateDir, '.state-mutation-locks.db'));
try {
await holder.ready;
const startedAt = Date.now();
const cleanup = spawnSync(NODE, [SCRIPT_PATH, '--purge-legacy-tool-failure-state', omcRoot, '1500'], {
encoding: 'utf-8',
timeout: 5000,
env: {
...process.env,
OMC_HOOK_BACKGROUND_CHILD: '1',
OMC_TEST_TOOL_FAILURE_STABILIZATION_MS: '1',
},
});
expect(cleanup.error).toBeUndefined();
expect(cleanup.status).toBe(0);
expect(Date.now() - startedAt).toBeLessThan(800);
expect(readFileSync(join(sessionsDir, 'session-sanitized-0', 'last-tool-error-state.json'), 'utf8'))
.toBe(JSON.stringify(sanitizedState));
}
finally {
await holder.release();
}
});
it('retries deferred cleanup after its own lock wait expires', async () => {
const stateDir = join(fakeProject, '.omc', 'state');
const legacyPath = join(stateDir, 'last-tool-error.json');
const holder = startPostToolFailureLockHolder(legacyPath);
try {
await holder.ready;
writeFileSync(legacyPath, JSON.stringify({ tool_input_preview: 'deferred legacy secret' }));
const cleanup = spawnSync(NODE, [SCRIPT_PATH, '--purge-legacy-tool-failure-state', join(fakeProject, '.omc'), '100'], {
encoding: 'utf-8',
timeout: 5000,
});
expect(cleanup.error).toBeUndefined();
expect(cleanup.status).toBe(0);
expect(existsSync(legacyPath)).toBe(true);
expect(await holder.release()).toEqual({ code: 0, signal: null });
expect(await waitForFilesToDisappear([legacyPath], 5000)).toBe(true);
}
finally {
await holder.release();
}
});
it('purges legacy tool-failure state from the home root on no-workspace startup', () => {
const homeStateDir = join(fakeHome, '.omc', 'state');
const homeSessionDir = join(homeStateDir, 'sessions', 'session-old-home');
const otherWorkspaceRecord = join(fakeProject, '.omc', 'state', 'last-tool-error.json');
mkdirSync(homeSessionDir, { recursive: true });
const homeRootRecord = join(homeStateDir, 'last-tool-error.json');
const homeSessionRecord = join(homeSessionDir, 'last-tool-error-state.json');
writeFileSync(homeRootRecord, JSON.stringify({ tool_input_preview: 'legacy home secret' }));
writeFileSync(homeSessionRecord, JSON.stringify({ tool_input_preview: 'legacy home session secret' }));
writeFileSync(otherWorkspaceRecord, JSON.stringify({ tool_input_preview: 'unrelated workspace secret' }));
const output = JSON.parse(execFileSync(NODE, [SCRIPT_PATH], {
input: JSON.stringify({ hook_event_name: 'SessionStart', session_id: 'session-no-workspace', cwd: tempDir }),
encoding: 'utf-8',
env: {
...process.env,
HOME: fakeHome,
USERPROFILE: fakeHome,
CLAUDE_PLUGIN_ROOT: '',
OMC_STATE_DIR: '',
},
timeout: 15000,
}));
expect(output.continue).toBe(true);
expect(existsSync(homeRootRecord)).toBe(false);
expect(existsSync(homeSessionRecord)).toBe(false);
expect(existsSync(otherWorkspaceRecord)).toBe(true);
const customRoot = join(tempDir, 'custom-state');
const customStateDir = join(customRoot, 'non-git', 'state');
const customSessionDir = join(customStateDir, 'sessions', 'session-old-custom');
mkdirSync(customSessionDir, { recursive: true });
const customRootRecord = join(customStateDir, 'last-tool-error.json');
const customSessionRecord = join(customSessionDir, 'last-tool-error-state.json');
writeFileSync(customRootRecord, JSON.stringify({ tool_input_preview: 'legacy custom-root secret' }));
writeFileSync(customSessionRecord, JSON.stringify({ tool_input_preview: 'legacy custom-session secret' }));
const customOutput = JSON.parse(execFileSync(NODE, [SCRIPT_PATH], {
input: JSON.stringify({
hook_event_name: 'SessionStart',
session_id: 'session-no-workspace-custom',
cwd: tempDir,
}),
encoding: 'utf-8',
env: {
...process.env,
HOME: fakeHome,
USERPROFILE: fakeHome,
CLAUDE_PLUGIN_ROOT: '',
OMC_STATE_DIR: customRoot,
},
timeout: 15000,
}));
expect(customOutput.continue).toBe(true);
expect(existsSync(customRootRecord)).toBe(false);
expect(existsSync(customSessionRecord)).toBe(false);
expect(existsSync(otherWorkspaceRecord)).toBe(true);
});
it('publishes plugin occupancy before deferring no-workspace cleanup', () => {
const pluginRoot = join(tempDir, 'plugins', 'cache', 'omc', 'current');
const configDir = join(tempDir, 'claude-config');
const registryDir = join(configDir, '.omc', 'cache-occupancy');
mkdirSync(pluginRoot, { recursive: true });
const output = JSON.parse(execFileSync(NODE, [SCRIPT_PATH], {
input: JSON.stringify({ hook_event_name: 'SessionStart', session_id: 'session-no-workspace-plugin', cwd: tempDir }),
encoding: 'utf-8',
env: {
...process.env,
HOME: fakeHome,
USERPROFILE: fakeHome,
CLAUDE_CONFIG_DIR: configDir,
CLAUDE_PLUGIN_ROOT: pluginRoot,
OMC_SESSION_OWNER_PID: String(process.pid),
OMC_STATE_DIR: '',
OMC_TEST_TOOL_FAILURE_STABILIZATION_MS: '0',
NODE_ENV: 'test',
},
timeout: 15000,
}));
expect(output.continue).toBe(true);
const records = readdirSync(registryDir).map(name => JSON.parse(readFileSync(join(registryDir, name), 'utf-8')));
expect(records).toHaveLength(1);
expect(records[0]).toMatchObject({ pid: process.pid, pluginRoot });
expect(records[0].processStartIdentity).toEqual(expect.any(String));
});
it.skipIf(process.platform === 'win32')('does not follow symlinked session directories or state files', () => {
const sessionsDir = join(fakeProject, '.omc', 'state', 'sessions');
const externalSessionDir = join(tempDir, 'external-session');
mkdirSync(externalSessionDir, { recursive: true });
const externalDirectoryState = join(externalSessionDir, 'last-tool-error-state.json');
writeFileSync(externalDirectoryState, 'preserve through directory symlink');
const directoryLink = join(sessionsDir, 'session-directory-link');
symlinkSync(externalSessionDir, directoryLink, 'dir');
const fileSessionDir = join(sessionsDir, 'session-file-link');
mkdirSync(fileSessionDir, { recursive: true });
const externalFileState = join(tempDir, 'external-state.json');
writeFileSync(externalFileState, 'preserve through file symlink');
const fileLink = join(fileSessionDir, 'last-tool-error-state.json');
symlinkSync(externalFileState, fileLink, 'file');
execFileSync(NODE, [SCRIPT_PATH], {
input: JSON.stringify({
hook_event_name: 'SessionStart',
session_id: 'session-current',
cwd: fakeProject,
}),
encoding: 'utf-8',
env: {
...process.env,
HOME: fakeHome,
USERPROFILE: fakeHome,
CLAUDE_PLUGIN_ROOT: '',
OMC_STATE_DIR: '',
},
timeout: 15000,
});
expect(existsSync(directoryLink)).toBe(true);
expect(existsSync(externalDirectoryState)).toBe(true);
expect(existsSync(fileLink)).toBe(true);
expect(existsSync(externalFileState)).toBe(true);
});
it('injects persisted project memory into session-start additionalContext', () => {
mkdirSync(join(fakeProject, '.omc'), { recursive: true });
writeFileSync(join(fakeProject, '.omc', 'project-memory.json'), JSON.stringify({
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"session-start-script-context.test.js","sourceRoot":"","sources":["../../src/__tests__/session-start-script-context.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"session-start-script-context.test.js","sourceRoot":"","sources":["../../src/__tests__/session-start-script-context.test.ts"],"names":[],"mappings":"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 truncated
+2 -2
View File
@@ -113,7 +113,7 @@ describe('shipyard document-language behavior contract', () => {
});
it('infers only from unanimous high-confidence canonical sources', () => {
const contract = documentLanguageContract();
expect(contract.authority).toEqual({ path: 'CONTEXT.md', frontmatterKey: 'documentLanguage' });
expect(contract.authority).toEqual({ path: 'GLOSSARY.md', frontmatterKey: 'documentLanguage' });
expect(contract.canonicalSources).toEqual(['CLAUDE.md', 'README.md']);
expect(resolveDocumentLanguage({
sources: {
@@ -149,7 +149,7 @@ describe('shipyard document-language behavior contract', () => {
expect(output).toContain('# <Project> — Agent & Human Shipyard');
expect(output).toContain('/oh-my-claudecode:launch');
expect(output).toContain('plan → execute → review → verify');
expect(output).toContain('CONTEXT.md');
expect(output).toContain('GLOSSARY.md');
expect(renderSeed('b', tag)).toContain(`documentLanguage: ${tag}`);
expect(renderSeed('b', tag)).toContain('## <term>');
}
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"shipyard-seed-locale.test.js","sourceRoot":"","sources":["../../src/__tests__/shipyard-seed-locale.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"shipyard-seed-locale.test.js","sourceRoot":"","sources":["../../src/__tests__/shipyard-seed-locale.test.ts"],"names":[],"mappings":"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 truncated
+155 -14
View File
@@ -15,6 +15,7 @@ const NAVIGATOR = readFileSync(join(ROOT, 'skills', 'ask-navigator', 'SKILL.md')
const LOFT = readFileSync(join(ROOT, 'skills', 'loft', 'SKILL.md'), 'utf-8');
const HARBOR = readFileSync(join(ROOT, 'skills', 'harbor', 'SKILL.md'), 'utf-8');
const SHIPYARD_DOC = readFileSync(join(ROOT, 'docs', 'shipyard.md'), 'utf-8');
const GLOSSARY = readFileSync(join(ROOT, 'GLOSSARY.md'), 'utf-8');
const DISCIPLINE = readFileSync(join(ROOT, 'skills', 'agent-doc-discipline', 'SKILL.md'), 'utf-8');
const SURVEY = readFileSync(join(ROOT, 'skills', 'architecture-survey', 'SKILL.md'), 'utf-8');
const PLUGIN = JSON.parse(readFileSync(join(ROOT, '.claude-plugin', 'plugin.json'), 'utf-8'));
@@ -116,6 +117,39 @@ describe('shipyard skills — behavior & packaging contract', () => {
expect(NAVIGATOR).toContain('| `grilling` |');
expect(NAVIGATOR).toContain('| `task` |');
});
it('ask-navigator keeps the map ring in the tracker (map issue, resolution comments, brief in the map body)', () => {
// T67: map = tracker issue, decisions = resolution comments on closed tickets,
// handoff pointer folded into the map issue body. Legacy local maps are import-only.
expect(NAVIGATOR).toContain('One-time migration for existing local maps');
expect(NAVIGATOR).toContain('.omc/wayfinder/<slug>/map.md');
expect(NAVIGATOR).toContain('never start a second map');
expect(NAVIGATOR).toContain('Keep the local files unchanged as the audit source');
expect(NAVIGATOR).not.toContain('brief.md');
expect(NAVIGATOR).not.toContain('decisions/NN-');
expect(NAVIGATOR).not.toContain('Local markdown fallback');
expect(NAVIGATOR).toContain('navigator:map');
expect(NAVIGATOR).toContain('resolution comment');
expect(NAVIGATOR).toContain('**Mission brief**');
expect(NAVIGATOR).toContain('map issue body');
// launch's map check reads tracker state and routes legacy maps to migration
expect(LAUNCH).not.toContain('.omc/wayfinder');
expect(LAUNCH).toContain('legacy local map is present');
});
it('Scout findings are session-only and folded into tracker tickets', () => {
expect(GLOSSARY).toContain('findings stay in the session and are folded into the relevant tracker tickets at dispatch');
expect(GLOSSARY).not.toContain('.omc/specs/');
expect(LAUNCH).toContain('notes stay in the conversation, never written to disk');
expect(LAUNCH).toContain('the latest handoff comment');
expect(LAUNCH).toContain('Do not create a local handoff artifact');
});
it('ask-navigator research findings never become permanent repo files', () => {
// T67: research products live in the session, tracker comments, or a throwaway
// branch (never merged) — zero new permanent files.
expect(NAVIGATOR).not.toContain('docs/research');
expect(NAVIGATOR).toContain('tracker comment');
expect(NAVIGATOR).toContain('throwaway branch');
expect(NAVIGATOR).toContain('never merges');
});
it('ask-navigator defers un-laid-yard sediment instead of skipping it', () => {
expect(NAVIGATOR).toContain('report-only mode');
expect(NAVIGATOR).toContain('Deferred sediment');
@@ -147,12 +181,13 @@ describe('shipyard skills — behavior & packaging contract', () => {
});
it('launch carries the round-2 disciplines (comprehension reset, settled-consensus exit, planned handoff)', () => {
expect(LAUNCH).toContain('**Comprehension reset.**');
expect(LAUNCH).toContain('the terms as `CONTEXT.md` defines them');
expect(LAUNCH).toContain('the terms as `GLOSSARY.md` defines them');
expect(LAUNCH).toContain('**Settled-consensus exit.**');
expect(LAUNCH).toContain('consensus audit');
expect(LAUNCH).toContain('skipping the interview never skips a signature');
expect(LAUNCH).toContain('**Planned session handoff**');
expect(LAUNCH).toContain('No raw transcript, no chat history');
expect(LAUNCH).toContain('latest handoff comment');
expect(LAUNCH).toContain('Do not create a local handoff artifact');
});
it('harbor and navigator carry the round-3 disciplines (external extraction, ask-a-person, environment face, repair)', () => {
expect(HARBOR).toContain('**External knowledge extraction.**');
@@ -462,6 +497,21 @@ describe('shipyard skills — behavior & packaging contract', () => {
expect(LAUNCH).toContain('Never infer a human approval or replay an `in_progress` task');
expect(LAUNCH).toContain('Team remains authoritative for runtime state');
});
it('launch keeps spec and tickets tracker-only (parent spec issue + child ticket sub-issues, no local tree)', () => {
// the interview loop's spec and tickets live only in the tracker (harbor-aligned):
// spec = parent issue, tickets = native sub-issues; scout notes stay in the session
expect(LAUNCH).not.toContain('.omc/specs/');
expect(LAUNCH).not.toContain('decisions-pending');
expect(LAUNCH).not.toContain('notes/');
expect(LAUNCH).toContain('the spec is the parent issue, the tickets are its native sub-issues');
expect(LAUNCH).toContain('never creates or writes local spec or ticket files');
expect(LAUNCH).toContain('downstream readers take the spec and tickets from the tracker');
expect(LAUNCH).toContain('as a **parent tracker issue**');
expect(LAUNCH).toContain('**child tracker issues** (native sub-issues of the parent spec issue)');
expect(LAUNCH).toContain('notes stay in the conversation, never written to disk');
expect(LAUNCH).toContain('as a comment on the parent spec issue');
expect(LAUNCH).toContain('parent issue, native child issues and their status/dependency/evidence, plus the latest handoff comment');
});
it('launch keeps the canonical path canonical and itself opt-in (no seeded default override)', () => {
// drydock's generated CLAUDE.md must not mandate launch as the default delivery path
expect(DRYDOCK).not.toContain('交付走 /oh-my-claudecode:launch');
@@ -481,8 +531,12 @@ describe('shipyard skills — behavior & packaging contract', () => {
expect(LAUNCH).toContain('never silently swallow a high-confidence actionable finding');
expect(LAUNCH).toContain('No general bypass');
expect(LAUNCH).toContain('Current audit contract');
expect(LAUNCH).toContain('version 2');
expect(LAUNCH).toContain('`contractVersion: 2`');
expect(LAUNCH).toContain('`shipyard.yard.unlaid`');
expect(LAUNCH).toContain('`shipyard.surface.missing.*` IDs are retired');
expect(LAUNCH).toContain('node scripts/shipyard-audit.mjs');
expect(LAUNCH).toContain('exit 0 = clean, 1 = high-confidence actionable findings present');
expect(LAUNCH).toContain('Exit 0 = clean, 1 = high-confidence actionable findings present');
expect(LAUNCH).toContain('The rules entry is `CLAUDE.md` — the shipyard map recognizes no substitute');
expect(LAUNCH).not.toContain('No override flag, no confirm-to-continue path');
expect(LAUNCH).not.toContain('no exception for throwaway prototypes — laying the yard is one command away');
@@ -507,6 +561,22 @@ describe('shipyard skills — behavior & packaging contract', () => {
expect(SHIPYARD_DOC).toContain('blocks on high-confidence actionable drydock findings');
expect(SHIPYARD_DOC).toContain('narrowly, explicitly overridden low-confidence / false-positive / scratch-scope finding — no general bypass');
});
it('yard gate and paper-trail slots speak existence-as-declaration (absent surface is un-adopted, never a finding)', () => {
// spec #64: the audit checks only the surfaces the yard has adopted; an
// absent surface is un-adopted, not a finding — no "missing surfaces"
// wording anywhere in the gate, and the paper-trail slots follow lazy seeding.
expect(LAUNCH).not.toContain('missing surfaces');
expect(LAUNCH).not.toContain('缺失表面');
expect(NAVIGATOR).not.toContain('un-laid surfaces as findings');
// the existence-as-declaration gate wording is pinned
expect(LAUNCH).toContain('an absent optional surface is not a finding');
// the paper-trail slot wording is pinned: required faces day one, the rest on first use
expect(LAUNCH).toContain('day-one base faces `CLAUDE.md` and `GLOSSARY.md`');
expect(LAUNCH).toContain('`docs/adr/` and `docs/business/` appear on first use');
expect(LAUNCH).toContain('never creates a slot speculatively');
// the navigator defers without turning un-adopted surfaces into findings
expect(NAVIGATOR).toContain('an un-adopted optional surface never becomes a finding');
});
it('launch closeout re-runs the yard audit as yard drift instead of the retired gap list', () => {
expect(LAUNCH).toContain('yard drift');
expect(LAUNCH).toContain('re-run the drydock `--check` audit');
@@ -534,7 +604,7 @@ describe('shipyard skills — behavior & packaging contract', () => {
// strands lessons in no slot, so the rows are a text contract
for (const row of [
'| Lesson kind | Slot |',
'| terms and boundaries settled mid-run | `CONTEXT.md` glossary |',
'| terms and boundaries settled mid-run | `GLOSSARY.md` glossary |',
'| checkable behavior rules (carry a why) | `docs/standards/` matching volume (architecture / data / process) |',
'| most-violated conventions (thin-entry grade) | `CLAUDE.md` body — propose only |',
'| hard-to-reverse decisions | `docs/adr/` (C4 answers already land here) |',
@@ -557,7 +627,7 @@ describe('shipyard skills — behavior & packaging contract', () => {
});
it('launch C5 completion report states the run numbers (facts, not telemetry)', () => {
// the loop had no measurements; C5 records the run's numbers as plain facts
// in the report text — disk is the primary source, no telemetry machinery
// in the report text — canonical artifacts are the source, no telemetry machinery
expect(LAUNCH).toContain('**run numbers**');
expect(LAUNCH).toContain('tickets completed, C4 decisions surfaced, three-strike halts, and sediment lines proposed');
expect(LAUNCH).toContain('no telemetry system, no state files');
@@ -570,6 +640,47 @@ describe('shipyard skills — behavior & packaging contract', () => {
expect(DRYDOCK).toContain('launch C5 sediment');
expect(SHIPYARD_DOC).toContain('C5 closeout consumes a structured retro');
});
it('drydock seeds exactly two faces on day one and defers every other surface to first use', () => {
// T68 lazy seeding: drydock writes CLAUDE.md + GLOSSARY.md and nothing else;
// every other surface carries a first-use trigger instead of a scaffold
// instruction, so a freshly seeded yard contains only what has a real use.
const scaffold = DRYDOCK.match(/### 3\.[\s\S]*?```\n([\s\S]*?)\n```/)?.[1];
expect(scaffold).toBeDefined();
expect(scaffold).toContain('CLAUDE.md');
expect(scaffold).toContain('GLOSSARY.md');
for (const deferred of [
'docs/adr/',
'docs/standards/',
'docs/business/',
'design-system/',
'.omc/skills/',
'.mcp.json',
'.gitattributes',
'scripts/',
]) {
expect(scaffold).not.toContain(deferred);
}
// every deferred surface names the moment it first appears
expect(DRYDOCK).toContain('| Surface | Appears when |');
for (const row of [
'| `docs/adr/` |',
'| `docs/standards/` |',
'| `docs/business/` |',
'| `design-system/` |',
'| `.omc/skills/` |',
'| `scripts/` |',
'| `.mcp.json` |',
'| `.gitattributes` |',
]) {
expect(DRYDOCK).toContain(row);
}
expect(DRYDOCK).toContain('never speculatively');
// the thin entry must not name deferred surface paths: the audit's
// dead-path check reads CLAUDE.md, and a pointer at an absent surface is
// a high-confidence finding on a freshly seeded yard
const seedA = DRYDOCK.match(/<!-- shipyard-seed-a:en:start -->([\s\S]*?)<!-- shipyard-seed-a:en:end -->/)?.[1] ?? '';
expect(seedA).not.toMatch(/(?:docs|design-system|scripts|\.omc)\/[\w./-]+/);
});
it('drydock seed requires non-empty triggers so generated project skills are loadable', () => {
const example = DRYDOCK.match(/```markdown\n(---\nid: project-release-check\nname: project-release-check[\s\S]*?)\n```/)?.[1];
expect(example).toBeDefined();
@@ -678,8 +789,9 @@ describe('shipyard skills — behavior & packaging contract', () => {
expect(NAVIGATOR).toContain('ruled-out work never re-enters as a fresh ticket');
expect(HARBOR).toContain('Match rejections by concept, not by title');
});
it('launch and navigator state the primary-source-on-disk boundary cost model', () => {
expect(LAUNCH).toContain('Disk is the primary source; conversation memory is secondary');
it('launch and navigator state the canonical-artifact boundary cost model', () => {
expect(LAUNCH).toContain('Canonical artifacts are the primary source; conversation memory is secondary');
expect(LAUNCH).toContain('Re-read tracker issues and comments');
expect(LAUNCH).toContain('The four-way boundary choice');
expect(NAVIGATOR).toContain('every session re-orients from the map, never from the previous session');
});
@@ -715,6 +827,34 @@ describe('shipyard skills — behavior & packaging contract', () => {
expect(ref).toContain(`\`${name}\``);
}
});
it('drydock migrates a legacy CONTEXT.md glossary before language resolution and rewrites CLAUDE.md references', () => {
const migration = DRYDOCK.indexOf('Legacy glossary migration (');
const resolution = DRYDOCK.indexOf('Resolution order:');
expect(migration).toBeGreaterThan(-1);
expect(resolution).toBeGreaterThan(migration);
expect(DRYDOCK).toContain('If the yard has a legacy glossary `CONTEXT.md` but no `GLOSSARY.md`, rename it to `GLOSSARY.md`');
expect(DRYDOCK).toContain('any other `CONTEXT.md` is an unrelated agent-context document and is left alone');
// the migration contract uses the same first-visible-line signature as the audit
expect(DRYDOCK).toContain('its first visible non-blank line (after the frontmatter, ignoring a BOM and HTML comments) is a drydock glossary seed heading');
expect(DRYDOCK).toContain('preserving its content and frontmatter byte-for-byte');
expect(DRYDOCK).toContain('Never create a fresh `GLOSSARY.md` beside a legacy glossary `CONTEXT.md`');
expect(DRYDOCK).toContain('An unrelated `CONTEXT.md` does not block creating `GLOSSARY.md` and is never reported for removal');
expect(DRYDOCK).toContain('**CLAUDE.md rewrite during migration**');
expect(DRYDOCK).toContain('also when `GLOSSARY.md` and a legacy glossary `CONTEXT.md` both exist');
expect(DRYDOCK).not.toContain('launch writes CONTEXT/ADR');
expect(DRYDOCK).toContain('Legacy glossary migration (full runs only; `--check` never renames or rewrites anything');
});
it('launch and navigator never create GLOSSARY.md beside a legacy CONTEXT.md before writing the glossary', () => {
const launchGuard = LAUNCH.indexOf('migrated by the drydock legacy glossary migration');
expect(launchGuard).toBeGreaterThan(-1);
expect(LAUNCH).toContain('Never create a second glossary beside it');
expect(LAUNCH).toContain('only after the brief self-check, fog gate, and map check admit the run and before the first Launch-authored write');
expect(launchGuard).toBeLessThan(LAUNCH.indexOf('persist the resolved normalized tag back to `GLOSSARY.md`'));
const navGuard = NAVIGATOR.indexOf('**Legacy yards (CONTEXT.md only)**');
expect(navGuard).toBeGreaterThan(-1);
expect(NAVIGATOR).toContain('run drydock before writing sediment to migrate the glossary authority to `GLOSSARY.md`');
expect(NAVIGATOR).toContain('Do not create a fresh `GLOSSARY.md` beside the legacy file');
});
});
describe('shipyard audit script — mechanical check classes', () => {
const AUDIT = join(ROOT, 'scripts', 'shipyard-audit.mjs');
@@ -729,16 +869,15 @@ describe('shipyard audit script — mechanical check classes', () => {
}
}
function makeCleanRepo() {
// Two-face lazy-seeding form (T68): the audit must treat a yard holding
// only its two seeded faces as fully clean — every further surface is
// adopted by the individual test that creates it.
const root = mkdtempSync(join(tmpdir(), 'shipyard-audit-'));
writeFileSync(join(root, 'CLAUDE.md'), '# Project\n');
writeFileSync(join(root, 'CONTEXT.md'), '---\ndocumentLanguage: en\n---\n\n# Glossary\n');
for (const dir of ['docs/adr', 'docs/standards', 'docs/business', 'design-system', '.omc/skills', 'scripts']) {
mkdirSync(join(root, dir), { recursive: true });
}
writeFileSync(join(root, '.mcp.json'), '{"mcpServers": {}}');
writeFileSync(join(root, 'CLAUDE.md'), '# Project\n\n## Project conventions\n\n- conventions\n');
writeFileSync(join(root, 'GLOSSARY.md'), '---\ndocumentLanguage: en\n---\n\n# Glossary\n');
return root;
}
it('a fully seeded repo audits clean', () => {
it('a two-face lazy-seeded repo audits clean', () => {
const root = makeCleanRepo();
try {
const { status, stdout } = runAudit(root);
@@ -752,6 +891,7 @@ describe('shipyard audit script — mechanical check classes', () => {
it('a project skill without non-empty triggers is a high-confidence actionable finding', () => {
const root = makeCleanRepo();
try {
mkdirSync(join(root, '.omc', 'skills'), { recursive: true }); // adopting the skills face creates it
writeFileSync(join(root, '.omc/skills/no-triggers.md'), '---\nid: no-triggers\nname: no-triggers\ndescription: A skill that will never load\n---\n\nbody\n');
const { status, stdout } = runAudit(root);
expect(status).toBe(1);
@@ -765,6 +905,7 @@ describe('shipyard audit script — mechanical check classes', () => {
it('project skills with block or inline triggers are accepted', () => {
const root = makeCleanRepo();
try {
mkdirSync(join(root, '.omc', 'skills'), { recursive: true }); // adopting the skills face creates it
writeFileSync(join(root, '.omc/skills/block-triggers.md'), '---\nid: block-triggers\nname: block-triggers\ndescription: Block-list triggers\ntriggers:\n - "project release check"\n---\n\nbody\n');
writeFileSync(join(root, '.omc/skills/inline-triggers.md'), '---\nid: inline-triggers\nname: inline-triggers\ndescription: Inline triggers\ntriggers: ["project release check"]\n---\n\nbody\n');
const { status } = runAudit(root);
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"shipyard-skills.test.js","sourceRoot":"","sources":["../../src/__tests__/shipyard-skills.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"shipyard-skills.test.js","sourceRoot":"","sources":["../../src/__tests__/shipyard-skills.test.ts"],"names":[],"mappings":"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 truncated
+138 -6
View File
@@ -1,5 +1,5 @@
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'fs';
import { mkdirSync, mkdtempSync, readFileSync, readdirSync, rmSync, writeFileSync } from 'fs';
import { join } from 'path';
import { tmpdir } from 'os';
import { createBuiltinSkills, getBuiltinSkill, listBuiltinSkillNames, clearSkillsCache, renderBundledSkillBody } from '../features/builtin-skills/skills.js';
@@ -73,10 +73,10 @@ describe('Builtin Skills', () => {
clearSkillsCache();
});
describe('createBuiltinSkills()', () => {
it('should return correct number of skills (47 canonical + 2 aliases)', () => {
it('should return correct number of skills (48 canonical + 2 aliases)', () => {
const skills = createBuiltinSkills();
// 49 entries: 47 canonical skills + 2 aliases (cancel-ralph, psm)
expect(skills).toHaveLength(49);
// 50 entries: 48 canonical skills + 2 aliases (cancel-ralph, psm)
expect(skills).toHaveLength(50);
});
it('should return an array of BuiltinSkill objects', () => {
const skills = createBuiltinSkills();
@@ -161,6 +161,7 @@ describe('Builtin Skills', () => {
'remember',
'research',
'self-improve',
'session-flow',
'skill',
'skillify',
'team',
@@ -374,6 +375,136 @@ describe('Builtin Skills', () => {
expect(t).not.toContain('ambiguity ≤ 20%');
expect(t).not.toContain('"ambiguityThreshold": 0.2,');
});
it('preserves non-OMC hooks when fixing legacy settings hooks (issue #4277)', () => {
const raw = readFileSync(join(originalCwd, 'skills', 'omc-doctor', 'SKILL.md'), 'utf-8');
const fingerprintIndex = JSON.parse(readFileSync(join(originalCwd, 'skills', 'omc-doctor', 'node-hook-fingerprints.json'), 'utf-8'));
const collectNodeHookPaths = (directory, relativeDirectory = 'templates/hooks') => readdirSync(directory, { withFileTypes: true, encoding: 'utf8' }).flatMap((entry) => {
const relativePath = `${relativeDirectory}/${entry.name}`;
if (entry.isDirectory())
return collectNodeHookPaths(join(directory, entry.name), relativePath);
return entry.isFile() && entry.name.endsWith('.mjs') ? [relativePath] : [];
});
const expectedNodeHookPaths = collectNodeHookPaths(join(originalCwd, 'templates', 'hooks')).sort();
const indexedHashes = fingerprintIndex.payloads.flatMap(({ fingerprints, workingTree }) => [
...fingerprints.map(({ sha256 }) => sha256),
...(workingTree ? [workingTree.sha256] : []),
]).concat(fingerprintIndex.additionalCommits.map(({ sha256 }) => sha256));
expect(raw).toContain('ask for explicit confirmation of that scoped change');
expect(raw).toContain('verify the target is a regular non-symlink file');
expect(raw).toContain('Create a timestamped backup beside the original with exclusive, no-follow semantics');
expect(raw).toContain('Give the backup permissions no broader than the source');
expect(raw).toContain('Write the replacement through a same-directory exclusive/no-follow temporary file and atomic replacement');
expect(raw).toContain('On Windows, preserve the source ACLs using platform-appropriate operations');
expect(raw).toContain('If the backup or replacement cannot be kept no broader than the original, leave the settings file untouched and do not apply cleanup');
expect(raw).toContain('every project-local settings file Claude Code may read');
expect(raw).toContain('Do not match other scripts merely because they are under a `hooks/` directory');
expect(raw).toContain('keyword-detector.sh');
expect(raw).toContain('persistent-mode.sh');
expect(raw).toContain('session-start.sh');
expect(raw).toContain('stop-continuation.sh');
expect(raw).toContain('`bash ${CLAUDE_CONFIG_DIR:-$HOME/.claude}/hooks/silent-auto-update.sh`');
expect(raw).toContain('If a listed script exists, call it a duplicate only when the active plugin provides the payload\'s canonical or specifically verified equivalent handler under the registration\'s event');
expect(raw).toContain('standalone Node hook registrations under the active config directory');
expect(raw).toContain('`keyword-detector`, `persistent-mode`, `session-start`, `session-end`, `pre-tool-use`, `post-tool-use`, `post-tool-use-failure`, `code-simplifier`, or `stop-continuation`');
expect(raw).toContain('`.cjs` and `.js` variants are legacy too');
expect(raw).toContain('`node "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/hooks/keyword-detector.mjs"` is a legacy registration');
expect(raw).toContain('`node "%USERPROFILE%\\.claude\\hooks\\keyword-detector.mjs"`');
expect(raw).toContain('`%CLAUDE_CONFIG_DIR%\\hooks\\<filename>`');
expect(raw).toContain('with backslash separators as the same active config directory');
expect(raw).toContain('Before diagnosing a standalone registration as a duplicate, resolve plugin enablement with the runtime\'s precedence');
expect(raw).toContain('resolve plugin enablement with the runtime\'s precedence: managed and command-line settings first (read-only), then every applicable project-local settings file resolved above, then the primary working directory\'s `./.claude/settings.json`, then `${CLAUDE_CONFIG_DIR:-~/.claude}/settings.json`');
expect(raw).toContain('In a linked Git worktree, inspect the main checkout root\'s `.claude/settings.local.json`, not just the linked worktree\'s file');
expect(raw).toContain('identify the main checkout with `git worktree list --porcelain`');
expect(raw).toContain('On Windows, and whenever Claude Code keeps the local file beside the shared `.claude/settings.json`, inspect `.claude/settings.local.json` beside that shared settings file, including in a worktree');
expect(raw).toContain('Also inspect any starting-directory `.claude/settings.local.json` left by Claude Code versions before 2.1.211; Claude Code can still read it alongside the root file');
expect(raw).toContain('never ignore a `false` from the effective local file or fall through to a project/profile `true`');
expect(raw).toContain('If the main checkout root or any applicable local settings file cannot be resolved or read, treat settings and script references as inconclusive and do not remove hooks or scripts');
expect(raw).toContain('Include every applicable project-local file in the proposal, including main-checkout, Windows side-by-side, and legacy starting-directory files when present');
expect(raw).toContain('every applicable project-local `.claude/settings.local.json` path resolved above (main-checkout, Windows side-by-side, and legacy starting-directory paths where applicable)');
expect(raw).toContain('The first scope that explicitly mentions any supported OMC ID decides; unmentioned scopes are transparent');
expect(raw).toContain('The supported marketplace IDs are `oh-my-claudecode`, `oh-my-claudecode@omc`, and `oh-my-claudecode@oh-my-claudecode`');
expect(raw).toContain('also consider `oh-my-claudecode@inline` only after the active root\'s `.claude-plugin/plugin.json` has `"name": "oh-my-claudecode"`');
expect(raw).toContain('Treat that inline plugin as active for the session unless its manifest sets `"defaultEnabled": false` or an applicable settings source disables it; an explicit applicable `true` overrides the manifest default');
expect(raw).toContain('Within each scope, `enabledPlugins` is canonical, and legacy `plugins` is consulted only if `enabledPlugins` does not mention any supported OMC ID');
expect(raw).toContain('a canonical `false` overrides a stale legacy `true`, and a higher-precedence `false` overrides any lower-precedence `true`');
expect(raw).toContain('If applicable local sources conflict and the effective value cannot be determined, supported IDs in the winning field conflict, a relevant file is unreadable or malformed, or no effective enabled result can be established, treat plugin activity as inconclusive and do not auto-remove');
expect(raw).toContain('`CLAUDE_PLUGIN_ROOT` is only a locator, not proof that a plugin is enabled; an explicit effective `false` always blocks automatic removal');
expect(raw).toContain('| Legacy Hooks (settings.json) | OK/WARN/CRITICAL | ... |');
expect(raw).toContain('Inspect every hook source for the active root read-only');
expect(raw).toContain('the optional `.claude-plugin/plugin.json` `hooks` field accepts a path, an inline hooks object, or an array mixing paths and inline objects');
expect(raw).toContain('A malformed, unreadable, or unresolved declared source makes event ownership inconclusive');
expect(raw).toContain('A cached plugin version is insufficient');
expect(raw).toContain('compare its bytes or SHA-256 with the shipped OMC payload for that exact filename');
expect(raw).toContain('A matching name or path alone does not prove ownership');
expect(raw).toContain('| `session-start` | `SessionStart` |');
expect(raw).toContain('The active plugin must provide the canonical or specifically verified equivalent handler under the registration\'s event, and that handler must replace the payload\'s behavior');
expect(raw).toContain('a `session-start` script registered under `Stop` is not a duplicate even if the active plugin defines unrelated `Stop` handlers');
expect(raw).toContain('The tracked historical OMC Bash-hook payload fingerprints (SHA-256) are');
expect(raw).toContain('keyword-detector.sh`: `abe4dd5e4b16231060166264d271a51e781f08a31c6aa402b26976f9c40d424e`');
expect(raw).toContain('persistent-mode.sh`: `c131c6846573f0f69b6e39aed1e6db8f05279131a8976f604c1511a46f564ce5`');
expect(raw).toContain('session-start.sh`: `d87571c326c43cc43b6948aca661a9616faa6943cfe1d1131f482bd30f638134`');
expect(raw).toContain('stop-continuation.sh`: `f74deb67479c7861b0966bc959ffd3917152b8872ac83d9243a03c7cb707b51f`');
expect(raw).toContain('any validated retained package under `${CLAUDE_CONFIG_DIR:-~/.claude}/plugins/cache/omc/oh-my-claudecode/<version>/`');
expect(raw).toContain('the adjacent `node-hook-fingerprints.json` index');
expect(raw).toContain('exact stable release-tag provenance for every shipped Node module under `templates/hooks/**/*.mjs`, including hook helpers');
expect(raw).toContain('search by payload path and inspect only that block rather than loading the entire index');
expect(raw).toContain('Preserve these additional trusted historical `keyword-detector.mjs` fingerprints');
expect(raw).toContain('`22d612620f54f360797e42fe608bf7f98155b92a3b0bba187fd89e216395d65a` (`fb125b37`)');
expect(raw).toContain('`180fc09840baa8ada1661bcc5a13821c9ca802f43ac52cb4e517ca2cba75838a` (`387956a4`)');
expect(raw).toContain('`71a01806c1b0e29d8e553797de3900b7172654091980ae644d74e5e9291b8af2` (`0b46a595`)');
expect(fingerprintIndex.schemaVersion).toBe(1);
expect(fingerprintIndex.provenance.algorithm).toBe('SHA-256');
expect(fingerprintIndex.provenance.tagCount).toBeGreaterThan(0);
expect(fingerprintIndex.payloads.map(({ path }) => path)).toEqual(expectedNodeHookPaths);
expect(indexedHashes.length).toBeGreaterThan(0);
expect(indexedHashes.every((sha256) => /^[a-f0-9]{64}$/.test(sha256))).toBe(true);
expect(fingerprintIndex.payloads.every((payload) => payload.fingerprints.every(({ tags }) => tags.length > 0))).toBe(true);
expect(fingerprintIndex.additionalCommits.map(({ sha256 }) => sha256)).toEqual(expect.arrayContaining([
'9df91d943d348dbabaaf8f517448192d32648bf64fa78edcc43b8e6bf38e6dd1',
'ea1dc28c226f168127156bd0d7ffe9c4cb57dc24316f24f13503e9feb6da6b37',
]));
expect(raw).toContain('No tracked OMC payload fingerprint is available for `silent-auto-update.sh` or historical `.js`/`.cjs` variants');
expect(raw).toContain('If the plugin is inactive, does not provide that event, no payload or fingerprint exists');
expect(raw).toContain('Never run an unconditional `rm -f` based on basename');
expect(raw).toContain('plain direct invocation of exactly one listed file');
expect(raw).toContain('or the exact executable script path alone when the target has execute permission');
expect(raw).toContain('`$HOME/.claude/hooks/keyword-detector.sh`');
expect(raw).toContain('No form may include extra arguments, shell operators, or other commands');
expect(raw).toContain('`bash legacy.sh && run-my-check`');
expect(raw).toContain('report it for manual cleanup and leave the hook object unchanged');
expect(raw).toContain('If a composite or ambiguous command mentions a legacy path: WARN - manual cleanup required; never remove it automatically');
expect(raw).toContain('Match only exact listed filenames invoked with `node`');
expect(raw).toContain('do not match plugin-root commands or similarly named scripts in other directories');
expect(raw).toContain('Remove only those matching objects from their `hooks.<event>[].hooks[]` arrays');
expect(raw).toContain('Preserve every unmatched hook object and every matcher group that still has hooks, including user and third-party hooks');
expect(raw).toContain('If removing matched objects leaves a matcher group with no hooks, remove that now-empty group');
expect(raw).toContain('remove an event key when no groups remain and remove the top-level `"hooks"` key when no events remain');
expect(raw).toContain('For each affected profile-level, project-level, or project-local settings file');
expect(raw).toContain('Before deleting any script, inspect active session-scoped hook references in skill and subagent frontmatter, enabled plugin manifests, and settings sources');
expect(raw).toContain('Skill frontmatter hooks remain active for the rest of the session after invocation; subagent frontmatter hooks remain active while that subagent runs');
expect(raw).toContain('If active skill/subagent sources cannot be conclusively enumerated or read, leave the script in place');
expect(raw).toContain('If an active hook references the script, keep it until that skill or subagent is no longer active, then repeat the reference check');
expect(raw).toContain('Claude Code retains the current session\'s hook snapshot after a settings file is edited');
expect(raw).toContain('keep its script in place until the user restarts Claude Code; never delete a target in the same session that removed its settings hook');
expect(raw).toContain('In a later session, repeat the complete reference scan and final checks below before deleting the script');
expect(raw).toContain('Also enumerate every enabled or loaded plugin root, including marketplace plugins and local/inline plugins supplied through `--plugin-dir`, `--plugin-url`, or `CLAUDE_CODE_PLUGIN_DIRS`');
expect(raw).toContain('`${CLAUDE_CONFIG_DIR:-~/.claude}/plugins/installed_plugins.json` and its recorded install paths');
expect(raw).toContain('Read each plugin\'s `.claude-plugin/plugin.json` and `hooks/hooks.json` read-only');
expect(raw).toContain('Parse the manifest\'s optional `hooks` field as a `.json` path, an inline hooks object, or an array mixing paths and inline objects');
expect(raw).toContain('If any enabled/loaded plugin root, manifest, or declared hook source cannot be conclusively enumerated, resolved, or read, leave the script in place; if any source references it, leave the script in place');
expect(raw).toContain('The canonical event and equivalent-handler requirements from Step 2 also gate script deletion; an unrelated plugin handler under the same event cannot justify deleting a standalone payload');
expect(raw).toContain('The settings scan alone does not establish that no references remain; the active skill/subagent and enabled-plugin manifest scans above must also be complete and clean before deleting the target');
expect(raw).toContain('If any applicable project-local path, main checkout root, managed source, or command-line source cannot be resolved or inspected, if any source references the script, the user declined the relevant settings change, a file could not be updated, no shipped payload exists, or verification is inconclusive, leave the corresponding script in place');
expect(raw).toContain('re-check `${CLAUDE_CONFIG_DIR:-~/.claude}/settings.json`, the primary working directory\'s `.claude/settings.json`, every applicable project-local `.claude/settings.local.json` path resolved above (main-checkout, Windows side-by-side, and legacy starting-directory paths where applicable)');
expect(raw).toContain('Never edit managed settings or MDM/server policy');
expect(raw).toContain('inspect managed hook sources read-only');
expect(raw).toContain('/etc/claude-code/managed-settings.json');
expect(raw).toContain('C:\\Program Files\\ClaudeCode\\managed-settings.json');
expect(raw).toContain('any applicable MDM, server-managed, or command-line `--settings` sources');
expect(raw).toContain('no configured hook references remain in any source');
expect(raw).toContain('If any applicable project-local path, main checkout root, managed source, or command-line source cannot be resolved or inspected');
expect(raw).not.toContain('Remove the `"hooks"` section');
});
it('ships a config-aware deep-interview SKILL.md for native skill-loader paths (issues #2723, #3030)', () => {
const raw = readFileSync(join(originalCwd, 'skills', 'deep-interview', 'SKILL.md'), 'utf-8');
expect(raw).toContain('Native Plugin Invocation Guard (Issue #3030)');
@@ -598,7 +729,7 @@ describe('Builtin Skills', () => {
describe('listBuiltinSkillNames()', () => {
it('should return canonical skill names by default', () => {
const names = listBuiltinSkillNames();
expect(names).toHaveLength(47);
expect(names).toHaveLength(48);
expect(names).toContain('ai-slop-cleaner');
expect(names).toContain('minimal-code-discipline');
expect(names).toContain('launch');
@@ -613,6 +744,7 @@ describe('Builtin Skills', () => {
expect(names).toContain('configure-notifications');
expect(names).toContain('execute');
expect(names).toContain('self-improve');
expect(names).toContain('session-flow');
expect(names).toContain('ultragoal');
expect(names).toContain('omc-plan');
expect(names).toContain('deepinit');
@@ -636,7 +768,7 @@ describe('Builtin Skills', () => {
it('should include aliases when explicitly requested', () => {
const names = listBuiltinSkillNames({ includeAliases: true });
// swarm alias removed in #1131; learner retired in 5.0.0; cancel-ralph and psm remain
expect(names).toHaveLength(49);
expect(names).toHaveLength(50);
expect(names).toContain('ai-slop-cleaner');
expect(names).toContain('autoresearch');
expect(names).toContain('self-improve');
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"skills.test.js","sourceRoot":"","sources":["../../src/__tests__/skills.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"skills.test.js","sourceRoot":"","sources":["../../src/__tests__/skills.test.ts"],"names":[],"mappings":"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 truncated
+15
View File
@@ -105,4 +105,19 @@ describe('SSRF Guard', () => {
});
});
});
describe('IPv6 non-public range coverage', () => {
it.each([
'fc00::1', 'fc01::1', 'fd00::1', 'fdff:ffff::1',
'fe80::1', 'fe90::1', 'febf:ffff::1', '::', 'ff02::1',
'FC01:0000:0000:0000:0000:0000:0000:0001', 'FDFF::1', 'FEBF::1',
])('blocks literal %s', (host) => {
expect(validateUrlForSSRF(`https://[${host}]/api`).allowed).toBe(false);
});
it.each(['fbff::1', 'fe00::1', 'fec0::1'])('preserves an address outside the blocked prefixes: %s', (host) => {
expect(validateUrlForSSRF(`https://[${host}]/api`).allowed).toBe(true);
});
it('preserves a public IPv6 endpoint', () => {
expect(validateUrlForSSRF('https://[2001:4860:4860::8888]/api').allowed).toBe(true);
});
});
//# sourceMappingURL=ssrf-guard.test.js.map
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"ssrf-guard.test.js","sourceRoot":"","sources":["../../src/__tests__/ssrf-guard.test.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"ssrf-guard.test.js","sourceRoot":"","sources":["../../src/__tests__/ssrf-guard.test.ts"],"names":[],"mappings":"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 truncated
+48
View File
@@ -164,6 +164,26 @@ describe('Task System Support', () => {
const task = { id: '1', subject: 'Test', status: 'completed' };
expect(isTaskIncomplete(task)).toBe(false);
});
it('does not treat owned session-flow stages as unfinished work', () => {
for (const status of ['pending', 'in_progress']) {
const task = {
id: status,
subject: '[S1] Current stage',
description: 'session-flow: managed stage\nEvidence: user request',
status,
};
expect(isTaskIncomplete(task)).toBe(false);
}
});
it('keeps unowned stage-like Tasks in the incomplete set', () => {
const task = {
id: 'work',
subject: '[S1] User task',
description: 'Finish the actual work',
status: 'pending',
};
expect(isTaskIncomplete(task)).toBe(true);
});
});
describe('readTaskFiles', () => {
it('should return empty array when directory does not exist', () => {
@@ -273,6 +293,34 @@ describe('Task System Support', () => {
expect(result.total).toBe(3);
expect(result.tasks).toHaveLength(2);
});
it('ignores owned session-flow records in the continuation hook but preserves real work', async () => {
vi.mocked(fs.existsSync).mockReturnValue(true);
vi.mocked(fs.readdirSync).mockReturnValue(['flow.json', 'current.json', 'work.json']);
vi.mocked(fs.readFileSync).mockImplementation((filePath) => {
if (filePath.includes('flow.json')) {
return JSON.stringify({
id: 'flow',
subject: '[S1] Completed stage',
description: 'session-flow: managed stage\nEvidence: tool result',
status: 'pending',
});
}
if (filePath.includes('current.json')) {
return JSON.stringify({
id: 'current',
subject: '[S2] Current stage',
description: 'session-flow: managed stage\nEvidence: current turn',
status: 'in_progress',
});
}
return JSON.stringify({ id: 'work', subject: 'Write tests', status: 'pending' });
});
const result = await checkIncompleteTodos('session123');
expect(result.source).toBe('task');
expect(result.total).toBe(3);
expect(result.count).toBe(1);
expect(result.todos.map((task) => task.content)).toEqual(['Write tests']);
});
it('should return zero when all tasks complete', () => {
vi.mocked(fs.existsSync).mockReturnValue(true);
vi.mocked(fs.readdirSync).mockReturnValue(['1.json', '2.json']);
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"task-continuation.test.js","sourceRoot":"","sources":["../../src/__tests__/task-continuation.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"task-continuation.test.js","sourceRoot":"","sources":["../../src/__tests__/task-continuation.test.ts"],"names":[],"mappings":"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 truncated
+41
View File
@@ -931,6 +931,47 @@ describe('workflow profile activation hook fixtures (#3487)', () => {
rmSync(cwd, { recursive: true, force: true });
}
});
it.each([
[
'a block comment embedded in a number token',
'{"autopilot":{"workflows":{"release-flow":{"version":1e/*comment*/0,"stages":["ralplan","execution"]}}}}',
],
[
'an unterminated block comment',
'{"autopilot":{"workflows":{"release-flow":{"version":1,"stages":["ralplan","execution"]}}}}/*unterminated',
],
])('rejects workflow config containing %s without writing state', (_kind, config) => {
const { cwd, configHome } = createFixture();
try {
writeFileSync(join(cwd, '.claude', 'omc.jsonc'), config);
for (const script of HOOKS) {
const output = runHook(script, '/autopilot --workflow release-flow ship it', cwd, configHome);
const context = output.hookSpecificOutput?.additionalContext ?? '';
expect(context).toContain('[AUTOPILOT WORKFLOW ERROR] invalid JSONC');
expect(context).toContain('No autopilot state was activated.');
expect(stateBytes(cwd)).toBeNull();
}
}
finally {
rmSync(cwd, { recursive: true, force: true });
}
});
it('accepts trailing commas in workflow config in both packaged artifacts', () => {
for (const script of HOOKS) {
const { cwd, configHome } = createFixture();
try {
writeFileSync(join(cwd, '.claude', 'omc.jsonc'), '{"autopilot":{"workflows":{"release-flow":{"version":1,"stages":["ralplan","execution",],},}}}');
const output = runHook(script, '/autopilot --workflow release-flow ship it', cwd, configHome);
expect(output.hookSpecificOutput?.additionalContext).toContain('## PIPELINE STAGE: RALPLAN (Consensus Planning)');
expect(JSON.parse(stateBytes(cwd).toString())).toMatchObject({
workflow: { workflowName: 'release-flow', stages: ['ralplan', 'execution'] },
});
}
finally {
rmSync(cwd, { recursive: true, force: true });
}
}
});
it.each([
['comma-bearing stage', ['ralplan', 'execution,qa']],
['nested stage array', [['ralplan', 'execution']]],
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"workflow-profile-activation-script.test.js","sourceRoot":"","sources":["../../src/__tests__/workflow-profile-activation-script.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"workflow-profile-activation-script.test.js","sourceRoot":"","sources":["../../src/__tests__/workflow-profile-activation-script.test.ts"],"names":[],"mappings":"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 truncated
+5 -3
View File
@@ -56,7 +56,7 @@ describe('alias-retirement registry', () => {
expect(allAliases.has(rec.alias.toLowerCase())).toBe(true);
}
});
it('built-in loader exposes 49 entries (47 canonical + 2 aliases) after the 5.0.0 retirement', () => {
it('built-in loader exposes 50 entries (48 canonical + 2 aliases) after the 5.0.0 retirement', () => {
// This is the baseline that retirement must not silently change without an eligibility receipt.
// Raised 37 -> 40 canonical when execute/review/research shipped as real
// skill directories; this is an addition, not an alias retirement.
@@ -82,11 +82,13 @@ describe('alias-retirement registry', () => {
// this is an addition, not an alias retirement.
// Raised 45 -> 46 canonical when tdd shipped as a real skill directory;
// this is an addition, not an alias retirement.
// Raised 46 -> 47 canonical when session-flow shipped as a real skill
// directory; this is an addition, not an alias retirement.
const all = createBuiltinSkills();
expect(all).toHaveLength(49);
expect(all).toHaveLength(50);
const canonical = all.filter((s) => !s.aliasOf);
const aliases = all.filter((s) => !!s.aliasOf);
expect(canonical).toHaveLength(47);
expect(canonical).toHaveLength(48);
expect(aliases).toHaveLength(2);
expect(aliases.map((s) => s.name).sort()).toEqual(['cancel-ralph', 'psm'].sort());
});
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../../src/alias-retirement/__tests__/registry.test.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"registry.test.js","sourceRoot":"","sources":["../../../src/alias-retirement/__tests__/registry.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,4BAA4B,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAE/F,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,iFAAiF,EAAE,GAAG,EAAE;QACzF,yEAAyE;QACzE,sEAAsE;QACtE,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,4BAA4B,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzE,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;QAClD,mBAAmB;QACnB,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACjD,MAAM,CAAC,SAAS,EAAE,aAAa,GAAG,CAAC,SAAS,cAAc,GAAG,CAAC,KAAK,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC;YAChG,MAAM,CAAC,SAAU,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC;YAC3C,4CAA4C;YAC5C,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,CAAC,KAAK,yCAAyC,CAAC,CAAC,WAAW,EAAE,CAAC;YACzF,MAAM,CAAC,KAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,CAAC,KAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,GAAG,GAAG,cAAc,CAAC,KAAK,CAAE,CAAC;QACnC,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,WAAW,GAAG,cAAc,CAAC,cAAc,CAAE,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,GAAG,EAAE;QAC/F,0DAA0D;QAC1D,kEAAkE;QAClE,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC;gBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;gBACpC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,sBAAsB,CAAC,cAAc,GAAG,CAAC,KAAK,qEAAqE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3J,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC7E,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;YACjC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0FAA0F,EAAE,GAAG,EAAE;QAClG,gGAAgG;QAChG,yEAAyE;QACzE,mEAAmE;QACnE,2EAA2E;QAC3E,iEAAiE;QACjE,sEAAsE;QACtE,6DAA6D;QAC7D,uEAAuE;QACvE,2DAA2D;QAC3D,yEAAyE;QACzE,gDAAgD;QAChD,2EAA2E;QAC3E,gDAAgD;QAChD,wEAAwE;QACxE,iEAAiE;QACjE,uEAAuE;QACvE,iEAAiE;QACjE,4EAA4E;QAC5E,gDAAgD;QAChD,gEAAgE;QAChE,2DAA2D;QAC3D,6EAA6E;QAC7E,gDAAgD;QAChD,wEAAwE;QACxE,gDAAgD;QAChD,sEAAsE;QACtE,2DAA2D;QAC3D,MAAM,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC7B,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
+25 -15
View File
@@ -440,9 +440,7 @@ describe('run-provider-advisor script contract', () => {
['claude', ['claude', '--prompt', 'nested claude prompt']],
['codex', ['codex', '--prompt', 'nested codex prompt']],
['gemini', ['gemini', '--prompt', 'nested gemini prompt']],
// antigravity is intentionally omitted here: this matrix runs under the win32
// capture prelude, and antigravity is guarded (exits early) on Windows. Its
// env-stripping on supported platforms is covered by the non-Windows tests.
['antigravity', ['antigravity', '--prompt', 'nested antigravity prompt']],
['grok', ['grok', '--prompt', 'nested grok prompt']],
['cursor', ['cursor', '--prompt', 'nested cursor prompt']],
])('strips Claude session env vars for %s advisor spawns', (provider, args) => {
@@ -573,21 +571,33 @@ describe('run-provider-advisor script contract', () => {
rmSync(wd, { recursive: true, force: true });
}
});
it('guards antigravity on Windows with a clear error and never spawns agy', () => {
const wd = mkdtempSync(join(tmpdir(), 'omc-ask-antigravity-win32-guard-'));
it('spawns antigravity on Windows without shell to safely pass the prompt as argv', () => {
const wd = mkdtempSync(join(tmpdir(), 'omc-ask-antigravity-win32-noshell-'));
try {
const capturePath = join(wd, 'spawn-sync-calls.json');
const preludePath = writeSpawnSyncCapturePrelude(wd); // sets process.platform = win32
const result = runAdvisorScriptWithPrelude(preludePath, ['antigravity', '--prompt', 'windows headless attempt'], wd, { SPAWN_CAPTURE_PATH: capturePath });
// Guard exits non-zero before any spawnSync, so agy is never launched.
expect(result.status).toBe(1);
const stderr = `${result.stderr ?? ''}`;
expect(stderr).toContain('not supported on Windows');
// The capture prelude writes the (empty) call list on exit; assert no agy spawn.
if (existsSync(capturePath)) {
const calls = JSON.parse(readFileSync(capturePath, 'utf8'));
expect(calls.some((c) => c.command === 'agy')).toBe(false);
}
const result = runAdvisorScriptWithPrelude(preludePath, ['antigravity', '--prompt', 'windows headless prompt 你好'], wd, { SPAWN_CAPTURE_PATH: capturePath });
// Fixed: antigravity now works on Windows via shell: false spawn (agy 1.3.0+).
// The version probe uses shell:true; the launch uses shell:false to avoid cmd.exe parsing.
expect(result.error).toBeUndefined();
expect(result.status).toBe(0);
const calls = JSON.parse(readFileSync(capturePath, 'utf8'));
// Version probe (shell: true) + launch (shell: false).
expect(calls).toHaveLength(2);
expect(calls[0]).toMatchObject({
command: 'agy',
args: ['--version'],
options: { shell: true, encoding: 'utf8', stdio: 'ignore', input: null },
});
expect(calls[1]).toMatchObject({
command: 'agy',
args: ['--dangerously-skip-permissions', '-p', 'windows headless prompt 你好'],
// CRITICAL: shell: false prevents cmd.exe from splitting/parsing the prompt.
// stdio is ['ignore', 'pipe', 'pipe'] since agy does not pipe stdin.
options: { shell: false, encoding: 'utf8', input: null },
});
// Verify stdio is configured correctly (not stdin pipe, but stdout/stderr capture).
expect(calls[1].options.stdio).toEqual(['ignore', 'pipe', 'pipe']);
}
finally {
rmSync(wd, { recursive: true, force: true });
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"ask.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/ask.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"ask.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/ask.test.ts"],"names":[],"mappings":"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 truncated
+8 -1
View File
@@ -12,7 +12,7 @@ vi.mock('../../factory/map-ingest.js', async (importOriginal) => {
const actual = await importOriginal();
return { ...actual, loadMapRecords: ingestMock.loadMapRecords };
});
import { AFK_ALLOWED_TOOLS, AFK_SPAWN_FLAGS } from '../../hooks/session-end/spawn-next.js';
import { AFK_ALLOWED_TOOLS, AFK_INCLUDE_USER_SETTINGS_ENV, AFK_SPAWN_FLAGS } from '../../hooks/session-end/spawn-next.js';
import { materializeRalphSkill, ralphAfkArgv, ralphCommand, ralphVerify, resolveFeedbackCommands, RALPH_AFK_FEEDBACK_ENV, RALPH_AFK_SESSION_COMMANDS } from '../commands/ralph.js';
import { Command } from 'commander';
const tempRoots = [];
@@ -28,7 +28,9 @@ afterEach(() => {
// The afk action exports these for the spawned session; keep them out of later tests.
delete process.env.OMC_SESSION_ID;
delete process.env[RALPH_AFK_FEEDBACK_ENV];
vi.unstubAllEnvs();
});
beforeEach(() => vi.stubEnv(AFK_INCLUDE_USER_SETTINGS_ENV, '0'));
describe('ralphAfkArgv', () => {
it('invokes /ralph with --no-deslop, the task, and a fresh session id', () => {
const argv = ralphAfkArgv('raise coverage on the CLI helpers', [], 'aaaaaaaa-bbbb-4ccc-8ddd-eeeeeeeeeeee');
@@ -42,6 +44,11 @@ describe('ralphAfkArgv', () => {
expect(argv[argv.indexOf('--allowedTools') + 1]).toContain(AFK_ALLOWED_TOOLS);
expect(argv).toHaveLength(4 + AFK_SPAWN_FLAGS.length);
});
it('includes user-level settings for ralph AFK only when explicitly opted in', () => {
vi.stubEnv(AFK_INCLUDE_USER_SETTINGS_ENV, '1');
const argv = ralphAfkArgv('task', [], 'sess-opt-in');
expect(argv[argv.indexOf('--setting-sources') + 1]).toBe('user,project,local');
});
it('extends the AFK allowedTools with the read-only git set plus the declared verify commands', () => {
const argv = ralphAfkArgv('task', ['npm test'], 'sess-x');
const tools = argv[argv.indexOf('--allowedTools') + 1];
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"ralph-afk.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/ralph-afk.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"ralph-afk.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/ralph-afk.test.ts"],"names":[],"mappings":"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 truncated
+59
View File
@@ -1417,9 +1417,68 @@ describe('team cli', () => {
await cleanupStaleReservations(teamName, cwd);
// Live-owner reservation should remain
expect(existsSync(reservationPath)).toBe(true);
// Test 3: Active reservation should NOT be removed even when its owner (the exited start CLI) is dead
await writeFile(reservationPath, JSON.stringify({ ...deadOwnerRes, phase: 'active' }));
await cleanupStaleReservations(teamName, cwd);
expect(existsSync(reservationPath)).toBe(true);
process.exitCode = 0;
rmSync(cwd, { recursive: true, force: true });
});
it('team shutdown from a fresh shell keeps the active reservation after the start CLI exited', async () => {
const { teamCommand } = await import('../team.js');
const { assertTeamInstanceUnderLock, reserveTeamInstance, withTeamInstanceLifecycleLock, } = await import('../../team/team-instance.js');
const { teamStateRoot, TeamPaths, teamWorkspaceHash, canonicalTeamStatePath } = await import('../../team/state-paths.js');
const logSpy = vi.spyOn(console, 'log').mockImplementation(() => undefined);
const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => undefined);
const originalExitCode = process.exitCode;
process.exitCode = 0;
const cwd = makeProject('omc-team-cli-active-reservation-');
const teamName = 'active-team';
const reservationPath = canonicalTeamStatePath(cwd, TeamPaths.teamInstanceReservation(teamWorkspaceHash(cwd, teamName), teamName));
const teamRoot = teamStateRoot(cwd, teamName);
// `omc team start`: reserve, write the identity-bearing config, activate.
await reserveTeamInstance({ teamName, cwd, instanceId: INSTANCE_ID });
mkdirSync(teamRoot, { recursive: true });
writeFileSync(join(teamRoot, 'config.json'), JSON.stringify({
name: teamName,
instance_id: INSTANCE_ID,
task: 'demo',
agent_type: 'claude',
worker_launch_mode: 'interactive',
worker_count: 0,
max_workers: 20,
workers: [],
created_at: new Date().toISOString(),
tmux_session: `${teamName}:0`,
leader_pane_id: null,
hud_pane_id: null,
resize_hook_name: null,
resize_hook_target: null,
next_task_id: 1,
}));
// The start CLI owns the reservation and exits once the team is active,
// so a later shutdown sees an active reservation with a dead owner.
const reservation = JSON.parse(readFileSync(reservationPath, 'utf-8'));
writeFileSync(reservationPath, JSON.stringify({
...reservation,
phase: 'active',
owner: { ...reservation.owner, pid: 99999, process_started_at: DEAD_OWNER_START_IDENTITY },
}));
// shutdownTeamV2 first asserts the instance reservation under the
// lifecycle lock; run that authority step and stop before tmux effects.
mocks.shutdownTeamV2.mockImplementation(async (name, dir, options) => {
await withTeamInstanceLifecycleLock(dir, name, () => assertTeamInstanceUnderLock({ teamName: name, cwd: dir, instanceId: options.instanceId }));
return { outcome: 'cleaned' };
});
await teamCommand(['shutdown', teamName, '--cwd', cwd]);
expect(errorSpy).not.toHaveBeenCalled();
expect(process.exitCode).toBe(0);
expect(mocks.shutdownTeamV2).toHaveBeenCalledTimes(1);
expect(existsSync(reservationPath)).toBe(true);
process.exitCode = originalExitCode;
logSpy.mockRestore();
errorSpy.mockRestore();
});
it('legacy shorthand start alias supports optional ralph token', async () => {
const write = vi.fn();
const end = vi.fn();
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"team.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/team.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"team.test.js","sourceRoot":"","sources":["../../../src/cli/__tests__/team.test.ts"],"names":[],"mappings":"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 truncated
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"ralph.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ralph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,wCAAwC,CAAC;AAUhD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,0BAA0B,UAA+B,CAAC;AAEvE;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D,yFAAyF;AACzF,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAI/E;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,GAAE,SAAS,MAAM,EAAO,EAAE,SAAS,GAAE,MAAqB,GAAG,MAAM,EAAE,CAU7H;AAED,MAAM,MAAM,oBAAoB,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1H;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAYpF;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAiNtD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAuBvF;AAID,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAgBtF;AAED,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,SAAS,GAAE,MAAsB,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAkErK"}
{"version":3,"file":"ralph.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ralph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,wCAAwC,CAAC;AAUhD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,0BAA0B,UAA+B,CAAC;AAEvE;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAE/D,yFAAyF;AACzF,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAI/E;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,GAAE,SAAS,MAAM,EAAO,EAAE,SAAS,GAAE,MAAqB,GAAG,MAAM,EAAE,CAU7H;AAED,MAAM,MAAM,oBAAoB,GAAG;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,MAAM,EAAE,SAAS,GAAG,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1H;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAYpF;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAiNtD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAuBvF;AAID,iFAAiF;AACjF,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,CAgBtF;AAED,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,SAAS,GAAE,MAAsB,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM,CAkErK"}
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"ralph.js","sourceRoot":"","sources":["../../../src/cli/commands/ralph.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"ralph.js","sourceRoot":"","sources":["../../../src/cli/commands/ralph.ts"],"names":[],"mappings":"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 truncated
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"session-search.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/session-search.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,gDAAgD,CAAC;AAExD,MAAM,WAAW,2BAA2B;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,UAAU;IAClB,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC;AAQD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,0BAA0B,GAAG,MAAM,CA0BpF;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,2BAA2B,EACpC,MAAM,GAAE,UAAoB,GAC3B,OAAO,CAAC,0BAA0B,CAAC,CAcrC"}
{"version":3,"file":"session-search.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/session-search.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,gDAAgD,CAAC;AAExD,MAAM,WAAW,2BAA2B;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,UAAU;IAClB,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CAClC;AAaD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,0BAA0B,GAAG,MAAM,CA0BpF;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,2BAA2B,EACpC,MAAM,GAAE,UAAoB,GAC3B,OAAO,CAAC,0BAA0B,CAAC,CAoBrC"}
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"session-search.js","sourceRoot":"","sources":["../../../src/cli/commands/session-search.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"session-search.js","sourceRoot":"","sources":["../../../src/cli/commands/session-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EACL,oBAAoB,GAErB,MAAM,gDAAgD,CAAC;AAiBxD,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,KAAK,CAAC,OAAO,CAAC,uBAAuB,EAC1C,SAAS,CAAC,EAAE,CAAC,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,eAAe,CAAC,SAAkB;IACzC,IAAI,CAAC,SAAS;QAAE,OAAO,cAAc,CAAC;IACtC,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAAkC;IAC1E,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,wCAAwC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG;YACjG,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,aAAa,aAAa,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;SACpF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAa;QACtB,KAAK,CAAC,IAAI,CAAC,+BAA+B,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACvF,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,MAAM,OAAO,MAAM,CAAC,YAAY,mBAAmB,MAAM,CAAC,aAAa,WAAW,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC;QAClJ,EAAE;KACH,CAAC;IAEF,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACvC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9J,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChF,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACpF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAa,EACb,OAAoC,EACpC,SAAqB,OAAO;IAE5B,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC;QACxC,KAAK;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,OAAO;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,aAAa,EAAE,OAAO,CAAC,aAAa;QACpC,YAAY,EAAE,OAAO,CAAC,OAAO;QAC7B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;KAC3C,CAAC,CAAC;IAEH,2EAA2E;IAC3E,2EAA2E;IAC3E,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI;QAC7B,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EACtD,SAAS,CAAC,EAAE,CAAC,MAAM,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QAC7E,CAAC,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACvB,OAAO,MAAM,CAAC;AAChB,CAAC"}
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAkBH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmErE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyEjF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,OAAO,GAAG,MAAM,EACxB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCjF"}
{"version":3,"file":"wait.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/wait.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAkBH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAwErE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyEjF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,OAAO,GAAG,MAAM,EACxB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCjF"}
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/cli/commands/wait.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../../../src/cli/commands/wait.ts"],"names":[],"mappings":"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 truncated
+22
View File
@@ -6,13 +6,17 @@ import { join } from 'path';
import { buildIntentPrompt, MAX_BODY_BYTES, processEvent, routeTrackerEvent, startListener, stopListener, verifySignature, } from '../listener.js';
import { acquireFileLockSync, releaseFileLockSync } from '../../lib/file-lock.js';
import { getOmcRoot } from '../../lib/worktree-paths.js';
import { AFK_INCLUDE_USER_SETTINGS_ENV } from '../../hooks/session-end/spawn-next.js';
const SECRET = 'test-secret';
const WHITELIST = ['pangpang778/factory-demo'];
const tempCwds = [];
let previousOmcStateDir;
let previousAfkIncludeUserSettings;
let stateRoot;
beforeEach(() => {
previousOmcStateDir = process.env.OMC_STATE_DIR;
previousAfkIncludeUserSettings = process.env[AFK_INCLUDE_USER_SETTINGS_ENV];
delete process.env[AFK_INCLUDE_USER_SETTINGS_ENV];
stateRoot = mkdtempSync(join(tmpdir(), 'omc-factory-state-'));
tempCwds.push(stateRoot);
process.env.OMC_STATE_DIR = stateRoot;
@@ -30,6 +34,10 @@ afterEach(() => {
delete process.env.OMC_STATE_DIR;
else
process.env.OMC_STATE_DIR = previousOmcStateDir;
if (previousAfkIncludeUserSettings === undefined)
delete process.env[AFK_INCLUDE_USER_SETTINGS_ENV];
else
process.env[AFK_INCLUDE_USER_SETTINGS_ENV] = previousAfkIncludeUserSettings;
for (const dir of tempCwds)
rmSync(dir, { recursive: true, force: true });
tempCwds.length = 0;
@@ -108,9 +116,23 @@ describe('processEvent', () => {
const ledger = JSON.parse(fs.readFileSync(ledgerPath, 'utf8'));
expect(ledger.intentId).toBe('pangpang778-factory-demo-7');
expect(ledger.stage).toBe('intent');
expect(ledger.includeUserSettings).toBe(false);
expect(ledger.tracker).toEqual({ repo: 'pangpang778/factory-demo', issue: 7, nextLabel: 'needs-review', failedLabel: 'failed' });
expect(audits[0]).toMatchObject({ kind: 'routed', stage: 'intent', skill: 'intent', issue: 'https://github.com/pangpang778/factory-demo/issues/7', session: sessionId });
});
it('captures the user-settings choice in the initial factory ledger and link argv', () => {
process.env[AFK_INCLUDE_USER_SETTINGS_ENV] = '1';
const cfg = config();
const spawned = [];
const result = processEvent(event(), cfg, { spawner: (cmd, args) => spawned.push([cmd, args]) });
expect(result.kind).toBe('accepted');
const argv = spawned[0][1];
const sourcesIndex = argv.indexOf('--setting-sources');
expect(argv[sourcesIndex + 1]).toBe('user,project,local');
const sessionId = argv[argv.indexOf('--session-id') + 1];
const ledgerPath = join(getOmcRoot(cfg.cwd), 'state', 'factory', `chain-${sessionId}.json`);
expect(JSON.parse(fs.readFileSync(ledgerPath, 'utf8'))).toMatchObject({ includeUserSettings: true });
});
it('omits the tracker from the pre-written ledger when the event has no issue number', () => {
const cfg = config();
const spawned = [];
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"listener.test.js","sourceRoot":"","sources":["../../../src/factory/__tests__/listener.test.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"listener.test.js","sourceRoot":"","sources":["../../../src/factory/__tests__/listener.test.ts"],"names":[],"mappings":"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 truncated
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/factory/listener.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../src/factory/listener.ts"],"names":[],"mappings":"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"}
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../src/factory/listener.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"listener.js","sourceRoot":"","sources":["../../src/factory/listener.ts"],"names":[],"mappings":"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 truncated
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"map-run.d.ts","sourceRoot":"","sources":["../../src/factory/map-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,MAAM,EACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAiC,KAAK,GAAG,EAAkB,MAAM,uBAAuB,CAAC;AAChG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMtD,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAUpD;AAED,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CASjE;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,QAAQ,EAAE,CAgB3F;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,yEAAyE;IACzE,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAAE,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,UAAU,CAU3G;AAaD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GAC5C,aAAa,CAgCf;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ;4DACwD;IACxD,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAkBD,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAU5F;AAED,mDAAmD;AACnD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,CAQpF;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,QAAQ,EAAE,EAC5B,GAAG,EAAE,GAAG,EACR,OAAO,GAAE,eAAoB,GAC5B,aAAa,EAAE,CAsCjB"}
{"version":3,"file":"map-run.d.ts","sourceRoot":"","sources":["../../src/factory/map-run.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,EAGL,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,OAAO,EACZ,KAAK,MAAM,EACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAiC,KAAK,GAAG,EAAkB,MAAM,uBAAuB,CAAC;AAChG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAMtD,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAUpD;AAED,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CASjE;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,QAAQ,EAAE,CAgB3F;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,yEAAyE;IACzE,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,EAAE,OAAO,EAAE,SAAS,YAAY,EAAE,GAAG,UAAU,CAU3G;AAaD,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,QAAQ,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,oFAAoF;AACpF,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,SAAS,YAAY,EAAE,EAChC,OAAO,GAAE;IAAE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;CAAO,GAC5C,aAAa,CAgCf;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ;4DACwD;IACxD,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChD;AAkBD,oEAAoE;AACpE,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAU5F;AAED,mDAAmD;AACnD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,QAAQ,EAAE,GAAG,MAAM,CASpF;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,QAAQ,CAAC;IACd,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,QAAQ,EAAE,EAC5B,GAAG,EAAE,GAAG,EACR,OAAO,GAAE,eAAoB,GAC5B,aAAa,EAAE,CAsCjB"}
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"map-run.js","sourceRoot":"","sources":["../../src/factory/map-run.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"map-run.js","sourceRoot":"","sources":["../../src/factory/map-run.ts"],"names":[],"mappings":"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 truncated
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/features/rate-limit-wait/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAoBH,OAAO,KAAK,EACV,WAAW,EACX,YAAY,EACZ,cAAc,EACd,eAAe,EAChB,MAAM,YAAY,CAAC;AAwHpB;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,WAAW,GAAG,IAAI,CAmCzE;AA2CD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAe9D;AA6CD;;;;GAIG;AACH,wBAAgB,sCAAsC,CACpD,cAAc,EAAE,eAAe,GAAG,IAAI,EACtC,UAAU,EAAE,eAAe,GAAG,IAAI,GACjC,OAAO,CAIT;AA8BD;;GAEG;AACH,iBAAe,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAuGrE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAiFjE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC9E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CA2ChE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAyBrE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CA6BvF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAgD5D;AAGD,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpB;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ9E"}
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/features/rate-limit-wait/daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAqBH,OAAO,EACL,WAAW,EACX,YAAY,EACZ,cAAc,EACf,MAAM,YAAY,CAAC;AA8HpB;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,WAAW,GAAG,IAAI,CAmCzE;AA2CD;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAe9D;AAuDD;;GAEG;AACH,iBAAe,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAwKrE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAwFjE;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC9E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CA2ChE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAyBrE;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CA6BvF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAgD5D;AAGD,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpB;;;GAGG;AACH,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ9E"}
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/features/rate-limit-wait/daemon.ts"],"names":[],"mappings":"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 truncated
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/features/rate-limit-wait/daemon.ts"],"names":[],"mappings":"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 truncated
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"pane-fresh-capture.d.ts","sourceRoot":"","sources":["../../../src/features/rate-limit-wait/pane-fresh-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA0CH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuBhE;AAiBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAA0B,GACnC,MAAM,CAgCR"}
{"version":3,"file":"pane-fresh-capture.d.ts","sourceRoot":"","sources":["../../../src/features/rate-limit-wait/pane-fresh-capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA0CH,kFAAkF;AAClF,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAE7D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuBhE;AAiBD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,QAAQ,GAAE,MAA0B,GACnC,MAAM,CAgCR"}
Loaded 100 of 277 files, more files were not shown because too many files have changed in this diff. Show more