Keep PR #2701 focused on workflow-slot state changes

The original branch update bundled unrelated generated dist churn alongside the
intended workflow-slot/state-init source changes. This follow-up commit reverts
only the generated artifacts that do not correspond to the touched source areas,
so the PR diff stays aligned with the bridge, keyword-detector, persistent-mode,
mode-registry, skill-state, mode-names, and state-tools changes.

Constraint: GitHub PR #2701 must update via the real head branch instead of a local-only approval path
Constraint: Keep the follow-up diff limited to generated artifacts that shrink the existing PR scope
Rejected: Force-push a rewritten replacement commit | unnecessary history rewrite for a narrow cleanup-only fix
Rejected: Keep all dist outputs from 56718e05 | preserves unrelated churn that blocks review
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Regenerate and commit dist only for source areas that remain in the final PR diff
Tested: Branch diff review vs dev after cleanup; targeted verification pending on final commit SHA
Not-tested: Full project-wide build/lint suite for this cleanup-only dist follow-up
This commit is contained in:
Yeachan-Heo
2026-04-17 15:33:50 +00:00
parent 56718e0502
commit 8cac6bde4d
39 changed files with 96 additions and 640 deletions

6
dist/__tests__/auto-update.test.js generated vendored
View File

@@ -134,7 +134,7 @@ describe('auto-update reconciliation', () => {
});
it('syncs active plugin cache roots and logs when copy occurs', () => {
const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
const activeRoot = join(CLAUDE_CONFIG_DIR, 'plugins', 'cache', 'omc', 'oh-my-claudecode', '4.1.5');
const activeRoot = '/tmp/.claude/plugins/cache/omc/oh-my-claudecode/4.1.5';
mockedReadFileSync.mockImplementation((path) => {
const normalized = String(path).replace(/\\/g, '/');
if (normalized.includes('.omc-version.json')) {
@@ -308,8 +308,8 @@ describe('auto-update reconciliation', () => {
});
it('dedupes plugin roots and ignores missing targets during sync', () => {
const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
const activeRoot = join(CLAUDE_CONFIG_DIR, 'plugins', 'cache', 'omc', 'oh-my-claudecode', '4.1.5');
const staleRoot = join(CLAUDE_CONFIG_DIR, 'plugins', 'cache', 'omc', 'oh-my-claudecode', '4.1.4');
const activeRoot = '/tmp/.claude/plugins/cache/omc/oh-my-claudecode/4.1.5';
const staleRoot = '/tmp/.claude/plugins/cache/omc/oh-my-claudecode/4.1.4';
process.env.CLAUDE_PLUGIN_ROOT = activeRoot;
mockedReadFileSync.mockImplementation((path) => {
const normalized = String(path).replace(/\\/g, '/');

File diff suppressed because one or more lines are too long

View File

@@ -161,22 +161,7 @@ function runHook(toolInput, env) {
const result = spawnSync('node', [HOOK_PATH], {
input: stdin,
encoding: 'utf8',
env: {
...process.env,
// Reset tier-resolution chain so host env doesn't leak into tests.
OMC_SUBAGENT_MODEL: '',
OMC_MODEL_LOW: '',
OMC_MODEL_MEDIUM: '',
OMC_MODEL_HIGH: '',
CLAUDE_CODE_BEDROCK_HAIKU_MODEL: '',
CLAUDE_CODE_BEDROCK_SONNET_MODEL: '',
CLAUDE_CODE_BEDROCK_OPUS_MODEL: '',
ANTHROPIC_DEFAULT_HAIKU_MODEL: '',
ANTHROPIC_DEFAULT_SONNET_MODEL: '',
ANTHROPIC_DEFAULT_OPUS_MODEL: '',
...env,
OMC_ROUTING_FORCE_INHERIT: 'true',
},
env: { ...process.env, ...env, OMC_ROUTING_FORCE_INHERIT: 'true' },
timeout: 10000,
});
const lines = (result.stdout || '').split('\n').filter(Boolean);
@@ -212,21 +197,13 @@ describe('hook integration — force-inherit + [1m] scenarios', () => {
expect(result.reason).toMatch(/model="sonnet"/);
expect(result.reason).toMatch(/global\.anthropic\.claude-sonnet-4-6\[1m\]/);
});
it('derives tier alias from session model when ANTHROPIC_DEFAULT_SONNET_MODEL is set', () => {
const result = runHook({}, {
ANTHROPIC_MODEL: 'global.anthropic.claude-sonnet-4-6[1m]',
ANTHROPIC_DEFAULT_SONNET_MODEL: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
});
expect(result.denied).toBe(true);
// normalizeToCcAlias(sessionModel) → 'sonnet'; resolvedSafe is truthy
expect(result.reason).toMatch(/model="sonnet"/);
});
it('derives tier alias from OMC_SUBAGENT_MODEL when set (backward compat)', () => {
it('derives tier alias from OMC_SUBAGENT_MODEL when set', () => {
const result = runHook({}, {
ANTHROPIC_MODEL: 'global.anthropic.claude-sonnet-4-6[1m]',
OMC_SUBAGENT_MODEL: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
});
expect(result.denied).toBe(true);
// normalizeToCcAlias('us.anthropic.claude-sonnet-4-5-...') → 'sonnet'
expect(result.reason).toMatch(/model="sonnet"/);
});
it('denies no-model call when only ANTHROPIC_MODEL has [1m] suffix (any [1m] triggers deny)', () => {
@@ -246,13 +223,13 @@ describe('hook integration — force-inherit + [1m] scenarios', () => {
expect(result.reason).toMatch(/model="sonnet"/);
expect(result.reason).toMatch(/claude-sonnet-4-6\[1m\]/);
});
it('derives tier alias from ANTHROPIC_DEFAULT_SONNET_MODEL for guidance in [1m] deny', () => {
it('derives tier alias from OMC_SUBAGENT_MODEL for guidance in [1m] deny', () => {
// normalizeToCcAlias('us.anthropic.claude-sonnet-4-5-20250929-v1:0') → 'sonnet'
const result = runHook({}, {
ANTHROPIC_MODEL: 'claude-sonnet-4-6[1m]',
ANTHROPIC_DEFAULT_SONNET_MODEL: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
OMC_SUBAGENT_MODEL: 'us.anthropic.claude-sonnet-4-5-20250929-v1:0',
});
expect(result.denied).toBe(true);
// normalizeToCcAlias('claude-sonnet-4-6[1m]') → 'sonnet'; resolvedSafe is truthy
expect(result.reason).toMatch(/model="sonnet"/);
});
it('denies no-model call when CLAUDE_MODEL is provider-specific[1m] but ANTHROPIC_MODEL is bare[1m]', () => {

File diff suppressed because one or more lines are too long

View File

@@ -116,7 +116,7 @@ describe('Bedrock model routing repro', () => {
const defs = getAgentDefinitions({ config });
expect(defs['executor'].model).toBe('claude-sonnet-4-6');
expect(defs['explore'].model).toBe('claude-haiku-4-5');
expect(defs['architect'].model).toBe('claude-opus-4-7');
expect(defs['architect'].model).toBe('claude-opus-4-6');
// 4. enforceModel normalizes to bare CC-supported aliases (FIX)
const { enforceModel } = await import('../features/delegation-enforcer.js');
// 4a. executor → 'sonnet' (normalized from config's full model ID)

18
dist/__tests__/hud/model.test.js generated vendored
View File

@@ -3,7 +3,7 @@ import { formatModelName, renderModel } from '../../hud/elements/model.js';
describe('model element', () => {
describe('formatModelName', () => {
it('returns Opus for opus model IDs', () => {
expect(formatModelName('claude-opus-4-7-20260416')).toBe('Opus');
expect(formatModelName('claude-opus-4-6-20260205')).toBe('Opus');
expect(formatModelName('claude-3-opus-20240229')).toBe('Opus');
});
it('returns Sonnet for sonnet model IDs', () => {
@@ -18,20 +18,20 @@ describe('model element', () => {
expect(formatModelName(undefined)).toBeNull();
});
it('returns versioned name from model IDs', () => {
expect(formatModelName('claude-opus-4-7-20260416', 'versioned')).toBe('Opus 4.7');
expect(formatModelName('claude-opus-4-6-20260205', 'versioned')).toBe('Opus 4.6');
expect(formatModelName('claude-sonnet-4-6-20260217', 'versioned')).toBe('Sonnet 4.6');
expect(formatModelName('claude-haiku-4-5-20251001', 'versioned')).toBe('Haiku 4.5');
});
it('returns versioned name from display names', () => {
expect(formatModelName('Sonnet 4.5', 'versioned')).toBe('Sonnet 4.5');
expect(formatModelName('Opus 4.7', 'versioned')).toBe('Opus 4.7');
expect(formatModelName('Opus 4.6', 'versioned')).toBe('Opus 4.6');
expect(formatModelName('Haiku 4.5', 'versioned')).toBe('Haiku 4.5');
});
it('falls back to short name when no version found', () => {
expect(formatModelName('claude-3-opus-20240229', 'versioned')).toBe('Opus');
});
it('returns full model ID in full format', () => {
expect(formatModelName('claude-opus-4-7-20260416', 'full')).toBe('claude-opus-4-7-20260416');
expect(formatModelName('claude-opus-4-6-20260205', 'full')).toBe('claude-opus-4-6-20260205');
});
it('truncates long unrecognized model names', () => {
const longName = 'some-very-long-model-name-that-exceeds-limit';
@@ -40,20 +40,20 @@ describe('model element', () => {
});
describe('renderModel', () => {
it('renders formatted model name', () => {
const result = renderModel('claude-opus-4-7-20260416');
const result = renderModel('claude-opus-4-6-20260205');
expect(result).not.toBeNull();
expect(result).toContain('Opus');
});
it('renders versioned format', () => {
const result = renderModel('claude-opus-4-7-20260416', 'versioned');
const result = renderModel('claude-opus-4-6-20260205', 'versioned');
expect(result).not.toBeNull();
expect(result).toContain('Opus');
expect(result).toContain('4.7');
expect(result).toContain('4.6');
});
it('renders full format', () => {
const result = renderModel('claude-opus-4-7-20260416', 'full');
const result = renderModel('claude-opus-4-6-20260205', 'full');
expect(result).not.toBeNull();
expect(result).toContain('claude-opus-4-7');
expect(result).toContain('claude-opus-4-6');
});
it('returns null for null input', () => {
expect(renderModel(null)).toBeNull();

View File

@@ -1,2 +0,0 @@
export {};
//# sourceMappingURL=npm-package-hook-surface.test.d.ts.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"npm-package-hook-surface.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/npm-package-hook-surface.test.ts"],"names":[],"mappings":""}

View File

@@ -1,85 +0,0 @@
import { describe, expect, it } from 'vitest';
import { execFileSync } from 'node:child_process';
import { existsSync, readFileSync } from 'node:fs';
import { dirname, join, normalize, relative } from 'node:path';
const PACKAGE_ROOT = process.cwd();
const HOOKS_JSON_PATH = join(PACKAGE_ROOT, 'hooks', 'hooks.json');
const SCRIPTS_ROOT = join(PACKAGE_ROOT, 'scripts');
const LOCAL_IMPORT_RE = /(?:import\s+(?:[^'"()]+?\s+from\s+)?|import\s*\(|export\s+\*\s+from\s+|export\s+\{[^}]*\}\s+from\s+|require\s*\()\s*['"](\.[^'"]+)['"]/g;
const PLUGIN_SCRIPT_RE = /"\$CLAUDE_PLUGIN_ROOT"\/(scripts\/[^\s"]+)/g;
function listHookScriptEntries() {
const hooksJson = JSON.parse(readFileSync(HOOKS_JSON_PATH, 'utf-8'));
const entries = new Set(['scripts/run.cjs']);
for (const eventHooks of Object.values(hooksJson.hooks ?? {})) {
for (const matcherEntry of eventHooks) {
for (const hook of matcherEntry.hooks ?? []) {
const command = hook.command ?? '';
for (const match of command.matchAll(PLUGIN_SCRIPT_RE)) {
entries.add(match[1]);
}
}
}
}
return [...entries].sort();
}
function resolveRelativeScriptImport(fromFile, specifier) {
const resolved = normalize(join(dirname(fromFile), specifier));
const candidates = [
resolved,
`${resolved}.mjs`,
`${resolved}.cjs`,
`${resolved}.js`,
join(resolved, 'index.mjs'),
join(resolved, 'index.cjs'),
join(resolved, 'index.js'),
];
for (const candidate of candidates) {
if (candidate.startsWith(SCRIPTS_ROOT) && existsSync(candidate)) {
return candidate;
}
}
return null;
}
function collectRequiredScriptFiles(entryRelPath, collected = new Set()) {
const absolutePath = join(PACKAGE_ROOT, entryRelPath);
if (!existsSync(absolutePath)) {
throw new Error(`Required hook file is missing in repo: ${entryRelPath}`);
}
const normalizedRel = relative(PACKAGE_ROOT, absolutePath).replace(/\\/g, '/');
if (collected.has(normalizedRel)) {
return collected;
}
collected.add(normalizedRel);
const content = readFileSync(absolutePath, 'utf-8');
for (const match of content.matchAll(LOCAL_IMPORT_RE)) {
const resolved = resolveRelativeScriptImport(absolutePath, match[1]);
if (!resolved) {
continue;
}
collectRequiredScriptFiles(relative(PACKAGE_ROOT, resolved).replace(/\\/g, '/'), collected);
}
return collected;
}
function getPackedFiles() {
const stdout = execFileSync('npm', ['pack', '--dry-run', '--json'], {
cwd: PACKAGE_ROOT,
encoding: 'utf-8',
});
const results = JSON.parse(stdout);
return new Set((results[0]?.files ?? []).map(file => file.path));
}
describe('npm package hook surface regression', () => {
it('packs hooks.json, hook entry scripts, and their local script dependencies', () => {
const requiredFiles = new Set(['hooks/hooks.json']);
for (const entryRelPath of listHookScriptEntries()) {
for (const file of collectRequiredScriptFiles(entryRelPath)) {
requiredFiles.add(file);
}
}
const packedFiles = getPackedFiles();
expect([...requiredFiles].sort()).not.toHaveLength(0);
const missing = [...requiredFiles].filter(file => !packedFiles.has(file)).sort();
expect(missing).toEqual([]);
});
});
//# sourceMappingURL=npm-package-hook-surface.test.js.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"npm-package-hook-surface.test.js","sourceRoot":"","sources":["../../src/__tests__/npm-package-hook-surface.test.ts"],"names":[],"mappings":"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"}

8
dist/__tests__/types.test.js generated vendored
View File

@@ -47,13 +47,13 @@ describe('Type Tests', () => {
const config = {
agents: {
omc: { model: 'claude-sonnet-4-6' },
architect: { model: 'claude-opus-4-7' },
architect: { model: 'claude-opus-4-6' },
explore: { model: 'claude-haiku-4-5' },
documentSpecialist: { model: 'claude-haiku-4-5' },
},
};
expect(config.agents?.omc?.model).toBe('claude-sonnet-4-6');
expect(config.agents?.architect?.model).toBe('claude-opus-4-7');
expect(config.agents?.architect?.model).toBe('claude-opus-4-6');
});
it('should support routing configuration', () => {
const config = {
@@ -65,13 +65,13 @@ describe('Type Tests', () => {
tierModels: {
LOW: 'claude-haiku-4',
MEDIUM: 'claude-sonnet-4-6',
HIGH: 'claude-opus-4-7',
HIGH: 'claude-opus-4-6',
},
},
};
expect(config.routing?.enabled).toBe(true);
expect(config.routing?.defaultTier).toBe('MEDIUM');
expect(config.routing?.tierModels?.HIGH).toBe('claude-opus-4-7');
expect(config.routing?.tierModels?.HIGH).toBe('claude-opus-4-6');
});
});
});

2
dist/features/auto-update.d.ts.map generated vendored
View File

@@ -1 +1 @@
{"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../src/features/auto-update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAW3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIpE,oCAAoC;AACpC,eAAO,MAAM,UAAU,gBAAgB,CAAC;AACxC,eAAO,MAAM,SAAS,qBAAqB,CAAC;AAC5C,eAAO,MAAM,cAAc,8DAA4D,CAAC;AACxF,eAAO,MAAM,cAAc,mEAAiE,CAAC;AAyG7F,wBAAgB,2CAA2C,IAAI,OAAO,CAgBrE;AAED,wBAAgB,eAAe,CAAC,OAAO,GAAE,OAAe,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAoDjH;AAED,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,QAAuB,CAAC;AACtD,eAAO,MAAM,YAAY,QAA+C,CAAC;AACzE,eAAO,MAAM,WAAW,QAA+C,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,QAAQ,CAAC,EAAE,0BAA0B,CAAC;IACtC,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,KAAK,CAAC,EAAE,uBAAuB,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,oEAAoE;IACpE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,+CAA+C;IAC/C,cAAc,CAAC,EAAE;QACf,mCAAmC;QACnC,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,iEAAiE;QACjE,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,CAAC;IACF,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IAC5C,0DAA0D;IAC1D,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC1D,gGAAgG;IAChG,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;wFACoF;IACpF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;0FACsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CA4BxC;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAGnD;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAevC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,aAAa,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,eAAe,GAAG,IAAI,CA+B5D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAMnE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC,CAqC/D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAmB5D;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAmBlE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,qBAAqB,CAmFxH;AAgCD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,YAAY,CAAC,CAqHxB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,iBAAiB,GAAG,MAAM,CA8B/E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,GAAE,MAAW,GAAG,OAAO,CAYzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,GAAG,IAAI,CAqB1F;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CA8BvD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA0DD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAyFpG;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAGjD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAIhD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAGvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,kBAAuB,GAAG,IAAI,CAK1E"}
{"version":3,"file":"auto-update.d.ts","sourceRoot":"","sources":["../../src/features/auto-update.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAW3D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAIpE,oCAAoC;AACpC,eAAO,MAAM,UAAU,gBAAgB,CAAC;AACxC,eAAO,MAAM,SAAS,qBAAqB,CAAC;AAC5C,eAAO,MAAM,cAAc,8DAA4D,CAAC;AACxF,eAAO,MAAM,cAAc,mEAAiE,CAAC;AAiK7F,wBAAgB,2CAA2C,IAAI,OAAO,CAgBrE;AAED,wBAAgB,eAAe,CAAC,OAAO,GAAE,OAAe,GAAG;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAoDjH;AAED,8DAA8D;AAC9D,eAAO,MAAM,iBAAiB,QAAuB,CAAC;AACtD,eAAO,MAAM,YAAY,QAA+C,CAAC;AACzE,eAAO,MAAM,WAAW,QAA+C,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,gEAAgE;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB;IACpB,MAAM,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,EAAE,sBAAsB,CAAC;IAC9B,QAAQ,CAAC,EAAE,0BAA0B,CAAC;IACtC,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,KAAK,CAAC,EAAE,uBAAuB,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,oEAAoE;IACpE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,qCAAqC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mCAAmC;IACnC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,+CAA+C;IAC/C,cAAc,CAAC,EAAE;QACf,mCAAmC;QACnC,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,iEAAiE;QACjE,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,CAAC;IACF,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;IAC5C,0DAA0D;IAC1D,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,0DAA0D;IAC1D,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC1D,gGAAgG;IAChG,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;wFACoF;IACpF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;0FACsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,SAAS,CA4BxC;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,OAAO,CAGnD;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,IAAI,OAAO,CAEpD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAevC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,aAAa,EAAE,QAAQ,GAAG,KAAK,GAAG,QAAQ,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,eAAe,GAAG,IAAI,CA+B5D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,CAMnE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,WAAW,CAAC,CAqC/D;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAmB5D;AAED;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAmBlE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,qBAAqB,CAmFxH;AAgCD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE;IAC5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,YAAY,CAAC,CAqHxB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,iBAAiB,GAAG,MAAM,CA8B/E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,GAAE,MAAW,GAAG,OAAO,CAYzE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,GAAG,IAAI,CAqB1F;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CA8BvD;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA0DD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAyFpG;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,OAAO,CAGjD;AAED;;GAEG;AACH,wBAAgB,yBAAyB,IAAI,IAAI,CAIhD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAGvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,GAAE,kBAAuB,GAAG,IAAI,CAK1E"}

54
dist/features/auto-update.js generated vendored
View File

@@ -9,10 +9,10 @@
* - Store version metadata for installed components
* - Configurable update notifications
*/
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs';
import { readFileSync, writeFileSync, existsSync, mkdirSync, cpSync } from 'fs';
import { join, dirname } from 'path';
import { execSync, execFileSync } from 'child_process';
import { install as installOmc, HOOKS_DIR, isProjectScopedPlugin, isRunningAsPlugin, copyPluginSyncPayload, syncInstalledPluginPayload, } from '../installer/index.js';
import { install as installOmc, HOOKS_DIR, isProjectScopedPlugin, isRunningAsPlugin, getInstalledOmcPluginRoots, getRuntimePackageRoot, } from '../installer/index.js';
import { getClaudeConfigDir } from '../utils/config-dir.js';
import { purgeStalePluginCacheVersions } from '../utils/paths.js';
import { isAutoUpdateDisabled } from '../lib/security-config.js';
@@ -102,8 +102,56 @@ function syncMarketplaceClone(verbose = false) {
}
return { ok: true, message: 'Marketplace clone updated' };
}
const PLUGIN_SYNC_PAYLOAD = [
'dist',
'bridge',
'hooks',
'scripts',
'skills',
'agents',
'templates',
'docs',
'.claude-plugin',
'.mcp.json',
'README.md',
'LICENSE',
'package.json',
];
function copyPluginSyncPayload(sourceRoot, targetRoots) {
if (targetRoots.length === 0) {
return { synced: false, errors: [] };
}
let synced = false;
const errors = [];
for (const targetRoot of targetRoots) {
let copiedToTarget = false;
for (const entry of PLUGIN_SYNC_PAYLOAD) {
const sourcePath = join(sourceRoot, entry);
if (!existsSync(sourcePath)) {
continue;
}
try {
cpSync(sourcePath, join(targetRoot, entry), {
recursive: true,
force: true,
});
copiedToTarget = true;
}
catch (error) {
const message = error instanceof Error ? error.message : String(error);
errors.push(`Failed to sync ${entry} to ${targetRoot}: ${message}`);
}
}
synced = synced || copiedToTarget;
}
return { synced, errors };
}
function syncActivePluginCache() {
const result = syncInstalledPluginPayload();
const activeRoots = getInstalledOmcPluginRoots().filter(root => existsSync(root));
if (activeRoots.length === 0) {
return { synced: false, errors: [] };
}
const result = copyPluginSyncPayload(getRuntimePackageRoot(), activeRoots);
if (result.synced) {
console.log('[omc update] Synced plugin cache');
}

2
dist/features/auto-update.js.map generated vendored

File diff suppressed because one or more lines are too long

2
dist/hooks/recovery/types.d.ts generated vendored
View File

@@ -34,7 +34,7 @@ export interface ParsedTokenLimitError {
errorType: string;
/** Provider ID (e.g., 'anthropic') */
providerID?: string;
/** Model ID (e.g., 'claude-opus-4-7') */
/** Model ID (e.g., 'claude-opus-4-6') */
modelID?: string;
/** Index of the problematic message */
messageIndex?: number;

View File

@@ -148,14 +148,14 @@ World`);
it('should return high variant for claude-sonnet-4-6', () => {
expect(getHighVariant('claude-sonnet-4-6')).toBe('claude-sonnet-4-6-high');
});
it('should return high variant for claude-opus-4-7', () => {
expect(getHighVariant('claude-opus-4-7')).toBe('claude-opus-4-7-high');
it('should return high variant for claude-opus-4-6', () => {
expect(getHighVariant('claude-opus-4-6')).toBe('claude-opus-4-6-high');
});
it('should return high variant for claude-3-5-sonnet', () => {
expect(getHighVariant('claude-3-5-sonnet')).toBe('claude-sonnet-4-6-high');
});
it('should return high variant for claude-3-opus', () => {
expect(getHighVariant('claude-3-opus')).toBe('claude-opus-4-7-high');
expect(getHighVariant('claude-3-opus')).toBe('claude-opus-4-6-high');
});
it('should handle version with dot notation', () => {
expect(getHighVariant('claude-sonnet-4.5')).toBe('claude-sonnet-4-6-high');

4
dist/hud/elements/model.js generated vendored
View File

@@ -7,7 +7,7 @@ import { cyan } from '../colors.js';
import { truncateToWidth } from '../../utils/string-width.js';
/**
* Extract version from a model ID string.
* E.g., 'claude-opus-4-7-20260416' -> '4.7'
* E.g., 'claude-opus-4-6-20260205' -> '4.6'
* 'claude-sonnet-4-6-20260217' -> '4.6'
* 'claude-haiku-4-5-20251001' -> '4.5'
*/
@@ -16,7 +16,7 @@ function extractVersion(modelId) {
const idMatch = modelId.match(/(?:opus|sonnet|haiku)-(\d+)-(\d+)/i);
if (idMatch)
return `${idMatch[1]}.${idMatch[2]}`;
// Match display name patterns like "Sonnet 4.5", "Opus 4.7"
// Match display name patterns like "Sonnet 4.5", "Opus 4.6"
const displayMatch = modelId.match(/(?:opus|sonnet|haiku)\s+(\d+(?:\.\d+)?)/i);
if (displayMatch)
return displayMatch[1];

4
dist/hud/types.d.ts generated vendored
View File

@@ -318,8 +318,8 @@ export type CwdFormat = 'relative' | 'absolute' | 'folder';
/**
* Model name format options:
* - short: 'Opus', 'Sonnet', 'Haiku'
* - versioned: 'Opus 4.7', 'Sonnet 4.5', 'Haiku 4.5'
* - full: raw model ID like 'claude-opus-4-7-20260416'
* - versioned: 'Opus 4.6', 'Sonnet 4.5', 'Haiku 4.5'
* - full: raw model ID like 'claude-opus-4-6-20260205'
*/
export type ModelFormat = 'short' | 'versioned' | 'full';
export type CallCountsFormat = 'auto' | 'emoji' | 'ascii';

View File

@@ -145,38 +145,6 @@ describe('unified MCP registry sync', () => {
expect(codexConfig).toContain('url = "https://lab.example.com/mcp"');
expect(codexConfig).toContain('startup_timeout_sec = 30');
});
it('reproduces issue #2679: sync strips remote entry type during round-trip', () => {
const settings = {
mcpServers: {
mySseServer: {
url: 'http://localhost:11235/mcp/sse',
type: 'sse',
},
},
};
const { settings: syncedSettings, result } = syncUnifiedMcpRegistryTargets(settings);
expect(result.bootstrappedFromClaude).toBe(true);
expect(result.serverNames).toEqual(['mySseServer']);
expect(syncedSettings).toEqual({});
expect(JSON.parse(readFileSync(getUnifiedMcpRegistryPath(), 'utf-8'))).toEqual({
mySseServer: {
url: 'http://localhost:11235/mcp/sse',
type: 'sse',
},
});
expect(JSON.parse(readFileSync(getClaudeMcpConfigPath(), 'utf-8'))).toEqual({
mcpServers: {
mySseServer: {
url: 'http://localhost:11235/mcp/sse',
type: 'sse',
},
},
});
const codexConfig = readFileSync(getCodexConfigPath(), 'utf-8');
expect(codexConfig).toContain('[mcp_servers.mySseServer]');
expect(codexConfig).toContain('url = "http://localhost:11235/mcp/sse"');
expect(codexConfig).toContain('type = "sse"');
});
it('preserves explicit launcher timeouts and leaves custom MCP servers untouched', () => {
const settings = {
mcpServers: {
@@ -379,30 +347,6 @@ describe('unified MCP registry sync', () => {
},
});
});
it('respects explicit removal from ~/.claude.json when legacy settings still contain a stale copy', () => {
writeFileSync(getUnifiedMcpRegistryPath(), JSON.stringify({
gitnexus: { command: 'gitnexus', args: ['mcp'] },
}, null, 2));
writeFileSync(getClaudeMcpConfigPath(), JSON.stringify({
mcpServers: {
customLocal: { command: 'custom-local', args: ['serve'] },
},
}, null, 2));
const { settings, result } = syncUnifiedMcpRegistryTargets({
theme: 'dark',
mcpServers: {
gitnexus: { command: 'stale-gitnexus', args: ['legacy'] },
},
});
expect(settings).toEqual({ theme: 'dark' });
expect(result.bootstrappedFromClaude).toBe(false);
expect(JSON.parse(readFileSync(getClaudeMcpConfigPath(), 'utf-8'))).toEqual({
mcpServers: {
customLocal: { command: 'custom-local', args: ['serve'] },
gitnexus: { command: 'gitnexus', args: ['mcp'] },
},
});
});
it('detects mismatched URL-based remote MCP definitions during doctor inspection', () => {
writeFileSync(getUnifiedMcpRegistryPath(), JSON.stringify({
remoteOmc: { url: 'https://lab.example.com/mcp', timeout: 30 },

File diff suppressed because one or more lines are too long

View File

@@ -1,2 +0,0 @@
export {};
//# sourceMappingURL=plugin-cache-sync.test.d.ts.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"plugin-cache-sync.test.d.ts","sourceRoot":"","sources":["../../../src/installer/__tests__/plugin-cache-sync.test.ts"],"names":[],"mappings":""}

View File

@@ -1,117 +0,0 @@
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
import { existsSync, mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'fs';
import { tmpdir } from 'os';
import { dirname, join } from 'path';
const ORIG_ENV = { ...process.env };
function writeFile(path, content) {
mkdirSync(dirname(path), { recursive: true });
writeFileSync(path, content);
}
function writePayloadTree(root, version = '9.9.9-test') {
mkdirSync(root, { recursive: true });
writeFile(join(root, 'dist', 'lib', 'worktree-paths.js'), 'export const test = true;\n');
writeFile(join(root, 'bridge', 'cli.cjs'), 'console.log("bridge");\n');
writeFile(join(root, 'hooks', 'hooks.json'), '{}\n');
writeFile(join(root, 'scripts', 'run.cjs'), 'console.log("run");\n');
writeFile(join(root, 'skills', 'plan', 'SKILL.md'), '# plan\n');
writeFile(join(root, 'agents', 'executor.md'), '# executor\n');
writeFile(join(root, 'templates', 'deliverables.json'), '{}\n');
writeFile(join(root, 'docs', 'CLAUDE.md'), '# docs\n');
writeFile(join(root, '.claude-plugin', 'plugin.json'), '{"name":"oh-my-claudecode"}\n');
writeFile(join(root, '.mcp.json'), '{}\n');
writeFile(join(root, 'README.md'), '# readme\n');
writeFile(join(root, 'LICENSE'), 'MIT\n');
writeFile(join(root, 'package.json'), JSON.stringify({ name: 'oh-my-claude-sisyphus', version }, null, 2));
}
async function freshInstaller() {
vi.resetModules();
return await import('../index.js');
}
describe('syncInstalledPluginPayload', () => {
let tempRoot;
beforeEach(() => {
tempRoot = mkdtempSync(join(tmpdir(), 'omc-plugin-cache-sync-'));
process.env.CLAUDE_CONFIG_DIR = join(tempRoot, '.claude');
delete process.env.CLAUDE_PLUGIN_ROOT;
delete process.env.OMC_PLUGIN_ROOT;
});
afterEach(() => {
vi.restoreAllMocks();
for (const key of Object.keys(process.env)) {
if (!(key in ORIG_ENV))
delete process.env[key];
}
Object.assign(process.env, ORIG_ENV);
rmSync(tempRoot, { recursive: true, force: true });
});
it('repairs incomplete cache installs from the known marketplace source instead of reusing the installed root', async () => {
const configDir = process.env.CLAUDE_CONFIG_DIR;
const cacheRoot = join(configDir, 'plugins', 'cache', 'omc', 'oh-my-claudecode', '4.12.0');
const sourceRoot = join(tempRoot, 'marketplace-source');
writePayloadTree(sourceRoot);
mkdirSync(join(cacheRoot, 'agents'), { recursive: true });
writeFileSync(join(cacheRoot, 'agents', 'executor.md'), '# stale executor\n');
mkdirSync(join(configDir, 'plugins'), { recursive: true });
writeFileSync(join(configDir, 'plugins', 'installed_plugins.json'), JSON.stringify({
version: 2,
plugins: {
'oh-my-claudecode@omc': [{ installPath: cacheRoot, version: '4.12.0' }],
},
}, null, 2));
writeFileSync(join(configDir, 'plugins', 'known_marketplaces.json'), JSON.stringify({
omc: {
installLocation: sourceRoot,
source: { source: 'directory', path: sourceRoot },
},
}, null, 2));
const installer = await freshInstaller();
const result = installer.syncInstalledPluginPayload();
expect(result.synced).toBe(true);
expect(result.errors).toEqual([]);
expect(result.sourceRoot).toBe(sourceRoot);
expect(result.targetRoots).toEqual([cacheRoot]);
expect(existsSync(join(cacheRoot, 'package.json'))).toBe(true);
expect(existsSync(join(cacheRoot, 'skills', 'plan', 'SKILL.md'))).toBe(true);
expect(existsSync(join(cacheRoot, 'hooks', 'hooks.json'))).toBe(true);
expect(existsSync(join(cacheRoot, 'scripts', 'run.cjs'))).toBe(true);
expect(JSON.parse(readFileSync(join(cacheRoot, 'package.json'), 'utf-8')).version).toBe('9.9.9-test');
});
it('repairs incomplete cache installs during setup before plugin-provided file detection runs', async () => {
const configDir = process.env.CLAUDE_CONFIG_DIR;
const cacheRoot = join(configDir, 'plugins', 'cache', 'omc', 'oh-my-claudecode', '4.12.0');
const sourceRoot = join(tempRoot, 'marketplace-source-install');
writePayloadTree(sourceRoot, '4.12.0');
mkdirSync(join(cacheRoot, 'agents'), { recursive: true });
writeFileSync(join(cacheRoot, 'agents', 'executor.md'), '# stale executor\n');
mkdirSync(join(configDir, 'plugins'), { recursive: true });
writeFileSync(join(configDir, 'plugins', 'installed_plugins.json'), JSON.stringify({
version: 2,
plugins: {
'oh-my-claudecode@omc': [{ installPath: cacheRoot, version: '4.12.0' }],
},
}, null, 2));
writeFileSync(join(configDir, 'plugins', 'known_marketplaces.json'), JSON.stringify({
omc: {
installLocation: sourceRoot,
source: { source: 'directory', path: sourceRoot },
},
}, null, 2));
writeFileSync(join(configDir, 'settings.json'), JSON.stringify({ enabledPlugins: ['oh-my-claudecode@omc'] }, null, 2));
const installer = await freshInstaller();
const result = installer.install({
skipClaudeCheck: true,
skipHud: true,
});
expect(result.success).toBe(true);
expect(result.installedAgents).toEqual([]);
expect(result.installedSkills).toEqual([]);
expect(installer.hasPluginProvidedAgentFiles()).toBe(true);
expect(installer.hasPluginProvidedSkillFiles()).toBe(true);
expect(installer.hasPluginProvidedHookFiles()).toBe(true);
expect(existsSync(join(cacheRoot, 'package.json'))).toBe(true);
expect(existsSync(join(cacheRoot, 'skills', 'plan', 'SKILL.md'))).toBe(true);
expect(existsSync(join(cacheRoot, 'hooks', 'hooks.json'))).toBe(true);
expect(existsSync(join(cacheRoot, 'scripts', 'run.cjs'))).toBe(true);
});
});
//# sourceMappingURL=plugin-cache-sync.test.js.map

File diff suppressed because one or more lines are too long

10
dist/installer/index.d.ts generated vendored
View File

@@ -166,16 +166,6 @@ export declare function cleanupStaleSkills(log: (msg: string) => void): string[]
*/
export declare function prunePluginDuplicateSkills(log: (msg: string) => void): string[];
export declare function getInstalledOmcPluginRoots(): string[];
export declare function copyPluginSyncPayload(sourceRoot: string, targetRoots: string[]): {
synced: boolean;
errors: string[];
};
export declare function syncInstalledPluginPayload(): {
synced: boolean;
errors: string[];
sourceRoot: string | null;
targetRoots: string[];
};
/**
* Detect whether an installed Claude Code plugin already provides OMC agent
* markdown files, so the legacy ~/.claude/agents copy can be skipped.

2
dist/installer/index.d.ts.map generated vendored
View File

@@ -1 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/installer/index.ts"],"names":[],"mappings":"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"}

164
dist/installer/index.js generated vendored
View File

@@ -800,157 +800,6 @@ export function getInstalledOmcPluginRoots() {
}
return Array.from(pluginRoots);
}
const PLUGIN_SYNC_PAYLOAD = [
'dist',
'bridge',
'hooks',
'scripts',
'skills',
'agents',
'templates',
'docs',
'.claude-plugin',
'.mcp.json',
'README.md',
'LICENSE',
'package.json',
];
function countPluginSyncPayloadEntries(root) {
let score = 0;
for (const entry of PLUGIN_SYNC_PAYLOAD) {
if (existsSync(join(root, entry))) {
score += 1;
}
}
return score;
}
function getKnownMarketplaceInstallRoots() {
const knownMarketplacesPath = join(CLAUDE_CONFIG_DIR, 'plugins', 'known_marketplaces.json');
if (!existsSync(knownMarketplacesPath)) {
return [];
}
try {
const raw = JSON.parse(readFileSync(knownMarketplacesPath, 'utf-8'));
const roots = new Set();
for (const [marketplaceId, entry] of Object.entries(raw)) {
const isOmcMarketplace = marketplaceId.toLowerCase().includes('omc')
|| marketplaceId.toLowerCase().includes('oh-my-claudecode');
if (!isOmcMarketplace) {
continue;
}
if (typeof entry?.installLocation === 'string' && entry.installLocation.trim().length > 0) {
roots.add(entry.installLocation.trim());
}
if (typeof entry?.source?.path === 'string' && entry.source.path.trim().length > 0) {
roots.add(entry.source.path.trim());
}
}
return Array.from(roots);
}
catch {
return [];
}
}
function getGlobalInstalledPackageRoot() {
try {
const npmRoot = String(execSync('npm root -g', {
encoding: 'utf-8',
stdio: 'pipe',
timeout: 10000,
...(process.platform === 'win32' ? { windowsHide: true } : {}),
}) ?? '').trim();
if (!npmRoot) {
return null;
}
const globalPackageRoot = join(npmRoot, 'oh-my-claude-sisyphus');
return existsSync(globalPackageRoot) ? globalPackageRoot : null;
}
catch {
return null;
}
}
function isCacheInstalledPluginRoot(root) {
const normalizedRoot = normalizePath(root);
const cacheBase = normalizePath(join(CLAUDE_CONFIG_DIR, 'plugins', 'cache'));
return normalizedRoot === cacheBase || normalizedRoot.startsWith(`${cacheBase}/`);
}
function resolveBestPluginSyncSource(targetRoots) {
const excludedRoots = new Set(targetRoots.map(normalizePath));
const seen = new Set();
const globalPackageRoot = getGlobalInstalledPackageRoot();
const candidates = [
...getKnownMarketplaceInstallRoots(),
...(globalPackageRoot ? [globalPackageRoot] : []),
getRuntimePackageRoot(),
];
let bestRoot = null;
let bestScore = -1;
let bestOrder = Number.POSITIVE_INFINITY;
for (const [order, candidate] of candidates.entries()) {
const normalizedCandidate = normalizePath(candidate);
if (seen.has(normalizedCandidate) || excludedRoots.has(normalizedCandidate) || !existsSync(candidate)) {
continue;
}
seen.add(normalizedCandidate);
const score = countPluginSyncPayloadEntries(candidate);
if (score === 0) {
continue;
}
if (score > bestScore || (score === bestScore && order < bestOrder)) {
bestRoot = candidate;
bestScore = score;
bestOrder = order;
}
}
return bestRoot;
}
export function copyPluginSyncPayload(sourceRoot, targetRoots) {
if (targetRoots.length === 0) {
return { synced: false, errors: [] };
}
let synced = false;
const errors = [];
for (const targetRoot of targetRoots) {
let copiedToTarget = false;
for (const entry of PLUGIN_SYNC_PAYLOAD) {
const sourcePath = join(sourceRoot, entry);
if (!existsSync(sourcePath)) {
continue;
}
try {
cpSync(sourcePath, join(targetRoot, entry), {
recursive: true,
force: true,
});
copiedToTarget = true;
}
catch (error) {
const message = error instanceof Error ? error.message : String(error);
errors.push(`Failed to sync ${entry} to ${targetRoot}: ${message}`);
}
}
synced = synced || copiedToTarget;
}
return { synced, errors };
}
export function syncInstalledPluginPayload() {
const targetRoots = getInstalledOmcPluginRoots()
.filter(root => existsSync(root) && isCacheInstalledPluginRoot(root));
if (targetRoots.length === 0) {
return { synced: false, errors: [], sourceRoot: null, targetRoots: [] };
}
const sourceRoot = resolveBestPluginSyncSource(targetRoots);
if (!sourceRoot) {
return {
synced: false,
errors: ['Unable to find a complete OMC package source to repair installed plugin roots'],
sourceRoot: null,
targetRoots,
};
}
const result = copyPluginSyncPayload(sourceRoot, targetRoots);
return { ...result, sourceRoot, targetRoots };
}
/**
* Detect whether an installed Claude Code plugin already provides OMC agent
* markdown files, so the legacy ~/.claude/agents copy can be skipped.
@@ -1298,19 +1147,6 @@ export function install(options = {}) {
// Check if running as a plugin
const runningAsPlugin = isRunningAsPlugin();
const projectScoped = isProjectScopedPlugin();
const pluginPayloadSync = syncInstalledPluginPayload();
if (pluginPayloadSync.errors.length > 0) {
for (const error of pluginPayloadSync.errors) {
log(`Plugin cache sync warning: ${error}`);
}
}
if (pluginPayloadSync.synced) {
const targetSummary = pluginPayloadSync.targetRoots.length > 0
? pluginPayloadSync.targetRoots.join(', ')
: 'installed plugin roots';
const sourceSummary = pluginPayloadSync.sourceRoot ?? 'unknown source';
log(`Repaired installed OMC plugin payload from ${sourceSummary} -> ${targetSummary}`);
}
const pluginProvidesAgentFiles = hasPluginProvidedAgentFiles();
const pluginProvidesSkillFiles = hasPluginProvidedSkillFiles();
const pluginProvidesHookFiles = hasPluginProvidedHookFiles();

2
dist/installer/index.js.map generated vendored

File diff suppressed because one or more lines are too long

1
dist/installer/mcp-registry.d.ts generated vendored
View File

@@ -3,7 +3,6 @@ export interface UnifiedMcpRegistryEntry {
args?: string[];
env?: Record<string, string>;
url?: string;
type?: string;
timeout?: number;
}
export type UnifiedMcpRegistry = Record<string, UnifiedMcpRegistryEntry>;

View File

@@ -1 +1 @@
{"version":3,"file":"mcp-registry.d.ts","sourceRoot":"","sources":["../../src/installer/mcp-registry.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;AAEzE,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,sBAAsB,EAAE,OAAO,CAAC;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAMD,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAkBD,wBAAgB,sBAAsB,IAAI,MAAM,CAM/C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAqGD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB,CAE9F;AAED,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG;IAAE,QAAQ,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CA6B5H;AAiFD,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CASzD;AAgID,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAQ/E;AAED,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAWhI;AAqED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAgD7E;AAiBD,wBAAgB,6BAA6B,IAAI,wBAAwB,CAyDxE"}
{"version":3,"file":"mcp-registry.d.ts","sourceRoot":"","sources":["../../src/installer/mcp-registry.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,uBAAuB;IACtC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;AAEzE,MAAM,WAAW,4BAA4B;IAC3C,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,sBAAsB,EAAE,OAAO,CAAC;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAMD,wBAAgB,yBAAyB,IAAI,MAAM,CAElD;AAkBD,wBAAgB,sBAAsB,IAAI,MAAM,CAM/C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAG3C;AAiGD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB,CAE9F;AAED,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG;IAAE,QAAQ,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CA6B5H;AAiFD,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CASzD;AA6HD,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAQ/E;AAED,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,kBAAkB,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAWhI;AAkED,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC;IAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAgD7E;AAiBD,wBAAgB,6BAA6B,IAAI,wBAAwB,CAyDxE"}

12
dist/installer/mcp-registry.js generated vendored
View File

@@ -72,9 +72,6 @@ function normalizeRegistryEntry(value) {
const url = typeof raw.url === 'string' && raw.url.trim().length > 0
? raw.url.trim()
: undefined;
const type = typeof raw.type === 'string' && raw.type.trim().length > 0
? raw.type.trim()
: undefined;
if (!command && !url) {
return null;
}
@@ -91,7 +88,6 @@ function normalizeRegistryEntry(value) {
...(args.length > 0 ? { args } : {}),
...(env && Object.keys(env).length > 0 ? { env } : {}),
...(url ? { url } : {}),
...(type ? { type } : {}),
...(effectiveTimeout ? { timeout: effectiveTimeout } : {}),
};
}
@@ -298,9 +294,6 @@ function renderCodexServerBlock(name, entry) {
if (entry.url) {
lines.push(`url = ${renderTomlString(entry.url)}`);
}
if (entry.type) {
lines.push(`type = ${renderTomlString(entry.type)}`);
}
if (entry.env && Object.keys(entry.env).length > 0) {
lines.push(`env = ${renderTomlEnvTable(entry.env)}`);
}
@@ -383,11 +376,6 @@ function parseCodexMcpRegistryEntries(content) {
if (parsed)
currentEntry.url = parsed;
}
else if (key === 'type') {
const parsed = parseTomlQuotedString(value);
if (parsed)
currentEntry.type = parsed;
}
else if (key === 'env') {
const parsed = parseTomlEnvTable(value);
if (parsed)

2
dist/installer/mcp-registry.js.map generated vendored

File diff suppressed because one or more lines are too long

View File

@@ -1,2 +0,0 @@
export {};
//# sourceMappingURL=runtime-v2.gemini-preflight.test.d.ts.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"runtime-v2.gemini-preflight.test.d.ts","sourceRoot":"","sources":["../../../src/team/__tests__/runtime-v2.gemini-preflight.test.ts"],"names":[],"mappings":""}

View File

@@ -1,97 +0,0 @@
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
import { mkdtemp, rm } from 'fs/promises';
import { join } from 'path';
import { tmpdir } from 'os';
const mocks = vi.hoisted(() => ({
createTeamSession: vi.fn(),
spawnWorkerInPane: vi.fn(),
sendToWorker: vi.fn(),
waitForPaneReady: vi.fn(),
applyMainVerticalLayout: vi.fn(),
tmuxExecAsync: vi.fn(),
queueInboxInstruction: vi.fn(),
}));
const modelContractMocks = vi.hoisted(() => ({
buildWorkerArgv: vi.fn((agentType, config) => [config?.resolvedBinaryPath ?? agentType ?? 'claude']),
resolveValidatedBinaryPath: vi.fn((agentType) => {
if (agentType === 'gemini')
throw new Error('Resolved CLI binary \'gemini\' to untrusted location: /tmp/gemini');
return `/usr/bin/${agentType ?? 'claude'}`;
}),
getContract: vi.fn((agentType) => ({ binary: agentType ?? 'claude' })),
getWorkerEnv: vi.fn(() => ({ OMC_TEAM_WORKER: 'issue2675-team/worker-1' })),
isPromptModeAgent: vi.fn(() => false),
getPromptModeArgs: vi.fn(() => []),
resolveClaudeWorkerModel: vi.fn(() => undefined),
}));
vi.mock('../../cli/tmux-utils.js', () => ({
tmuxExecAsync: mocks.tmuxExecAsync,
}));
vi.mock('../tmux-session.js', () => ({
createTeamSession: mocks.createTeamSession,
spawnWorkerInPane: mocks.spawnWorkerInPane,
sendToWorker: mocks.sendToWorker,
waitForPaneReady: mocks.waitForPaneReady,
paneHasActiveTask: vi.fn(() => false),
paneLooksReady: vi.fn(() => true),
applyMainVerticalLayout: mocks.applyMainVerticalLayout,
}));
vi.mock('../model-contract.js', () => ({
buildWorkerArgv: modelContractMocks.buildWorkerArgv,
resolveValidatedBinaryPath: modelContractMocks.resolveValidatedBinaryPath,
getContract: modelContractMocks.getContract,
getWorkerEnv: modelContractMocks.getWorkerEnv,
isPromptModeAgent: modelContractMocks.isPromptModeAgent,
getPromptModeArgs: modelContractMocks.getPromptModeArgs,
resolveClaudeWorkerModel: modelContractMocks.resolveClaudeWorkerModel,
}));
vi.mock('../mcp-comm.js', () => ({
queueInboxInstruction: mocks.queueInboxInstruction,
}));
describe('runtime-v2 Gemini preflight routing', () => {
let cwd = '';
beforeEach(() => {
vi.resetModules();
mocks.createTeamSession.mockResolvedValue({
sessionName: 'issue2675-session',
leaderPaneId: '%1',
workerPaneIds: [],
sessionMode: 'split-pane',
});
mocks.spawnWorkerInPane.mockResolvedValue(undefined);
mocks.waitForPaneReady.mockResolvedValue(true);
mocks.applyMainVerticalLayout.mockResolvedValue(undefined);
mocks.tmuxExecAsync.mockImplementation(async (args) => {
if (args[0] === 'split-window') {
return { stdout: '%2\n', stderr: '' };
}
return { stdout: '', stderr: '' };
});
mocks.queueInboxInstruction.mockResolvedValue({ ok: true, reason: 'transport_direct', transport: 'transport_direct' });
});
afterEach(async () => {
if (cwd)
await rm(cwd, { recursive: true, force: true });
});
it('keeps an explicitly routed gemini lane on gemini when strict preflight path probing false-negatives', async () => {
cwd = await mkdtemp(join(tmpdir(), 'issue2675-repro-'));
const { startTeamV2 } = await import('../runtime-v2.js');
const runtime = await startTeamV2({
teamName: 'issue2675-team',
workerCount: 1,
agentTypes: ['gemini'],
tasks: [{ subject: 'Review code', description: 'Review code', role: 'executor' }],
cwd,
pluginConfig: {
team: { roleRouting: { executor: { provider: 'gemini' } } },
},
});
expect(runtime.config.workers[0]?.worker_cli).toBe('gemini');
expect(modelContractMocks.buildWorkerArgv).toHaveBeenCalledWith('gemini', expect.objectContaining({
teamName: 'issue2675-team',
workerName: 'worker-1',
resolvedBinaryPath: 'gemini',
}));
});
});
//# sourceMappingURL=runtime-v2.gemini-preflight.test.js.map

View File

@@ -1 +0,0 @@
{"version":3,"file":"runtime-v2.gemini-preflight.test.js","sourceRoot":"","sources":["../../../src/team/__tests__/runtime-v2.gemini-preflight.test.ts"],"names":[],"mappings":"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"}

2
dist/team/runtime-v2.d.ts.map generated vendored
View File

@@ -1 +1 @@
{"version":3,"file":"runtime-v2.d.ts","sourceRoot":"","sources":["../../src/team/runtime-v2.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AA8BH,OAAO,KAAK,EACV,UAAU,EAEV,QAAQ,EAER,YAAY,EACZ,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAuBvD,OAAO,KAAK,EAAqB,YAAY,EAA0C,MAAM,oBAAoB,CAAC;AAMlH,OAAO,EAKL,KAAK,sBAAsB,EAC5B,MAAM,0BAA0B,CAAC;AAMlC,wBAAgB,kBAAkB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAKhF;AAMD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;CACrB;AAMD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,EAAE,YAAY,CAAC;QACrB,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;QAClC,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,oBAAoB,EAAE,MAAM,CAAC;KAC9B,CAAC,CAAC;IACH,KAAK,EAAE;QACL,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,QAAQ,EAAE,CAAC;KACnB,CAAC;IACF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,EAAE;QACX,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;QACvB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAMD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmKD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7G,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;OAOG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAuXD;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CAmTnF;AAQD,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;;;;GAKG;AACH,qBAAa,gBAAgB;IAKzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAN5B,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,OAAO,CAAS;gBAGL,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,MAAkC;IAGhE,aAAa,IAAI,IAAI;IAIf,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAUrD,SAAS,IAAI,OAAO;CAGrB;AAMD;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EAAE,EACzB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,EAAE,CAAC,CAwDnB;AAMD,MAAM,MAAM,sBAAsB,GAC9B,WAAW,GACX,QAAQ,GACR,cAAc,GACd,cAAc,GACd,qBAAqB,GACrB,kBAAkB,GAClB,SAAS,CAAC;AAEd,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,OAAO,CAAC,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,wBAAwB,CAC5C,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,sBAAsB,EAAE,CAAC,CA8InC;AAMD;;;GAGG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAuMhC;AAMD;;;;;;;GAOG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA6Kf;AAMD,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAqB/B;AAMD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CActE"}
{"version":3,"file":"runtime-v2.d.ts","sourceRoot":"","sources":["../../src/team/runtime-v2.ts"],"names":[],"mappings":"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"}

21
dist/team/runtime-v2.js generated vendored
View File

@@ -27,7 +27,7 @@ import { appendTeamEvent, emitMonitorDerivedEvents } from './events.js';
import { DEFAULT_TEAM_GOVERNANCE, DEFAULT_TEAM_TRANSPORT_POLICY, getConfigGovernance, } from './governance.js';
import { inferPhase } from './phase-controller.js';
import { validateTeamName } from './team-name.js';
import { buildWorkerArgv, getContract, resolveValidatedBinaryPath, getWorkerEnv as getModelWorkerEnv, isPromptModeAgent, getPromptModeArgs, resolveClaudeWorkerModel, } from './model-contract.js';
import { buildWorkerArgv, resolveValidatedBinaryPath, getWorkerEnv as getModelWorkerEnv, isPromptModeAgent, getPromptModeArgs, resolveClaudeWorkerModel, } from './model-contract.js';
import { createTeamSession, spawnWorkerInPane, sendToWorker, waitForPaneReady, paneHasActiveTask, paneLooksReady, applyMainVerticalLayout, } from './tmux-session.js';
import { composeInitialInbox, ensureWorkerStateDir, writeWorkerOverlay, generateTriggerMessage, generatePromptModeStartupPrompt, } from './worker-bootstrap.js';
import { queueInboxInstruction } from './mcp-comm.js';
@@ -106,21 +106,6 @@ function sanitizeTeamName(name) {
throw new Error(`Invalid team name: "${name}" produces empty slug after sanitization`);
return sanitized;
}
function shouldUseLaunchTimeCliResolution(reason) {
return /untrusted location|relative path/i.test(reason);
}
function resolvePreflightBinaryPath(agentType) {
try {
return { path: resolveValidatedBinaryPath(agentType), degraded: false };
}
catch (err) {
const reason = err instanceof Error ? err.message : String(err);
if (shouldUseLaunchTimeCliResolution(reason)) {
return { path: getContract(agentType).binary, degraded: true, reason };
}
throw err;
}
}
// ---------------------------------------------------------------------------
// Helper: check worker liveness via tmux pane
// ---------------------------------------------------------------------------
@@ -448,7 +433,7 @@ export async function startTeamV2(config) {
const missingBinaryReasons = [];
for (const agentType of [...new Set(agentTypes)]) {
try {
resolvedBinaryPaths[agentType] = resolvePreflightBinaryPath(agentType).path;
resolvedBinaryPaths[agentType] = resolveValidatedBinaryPath(agentType);
}
catch (err) {
const reason = err instanceof Error ? err.message : String(err);
@@ -465,7 +450,7 @@ export async function startTeamV2(config) {
if (missingBinaryReasons.some((m) => m.agentType === provider))
continue;
try {
resolvedBinaryPaths[provider] = resolvePreflightBinaryPath(provider).path;
resolvedBinaryPaths[provider] = resolveValidatedBinaryPath(provider);
}
catch (err) {
const reason = err instanceof Error ? err.message : String(err);

2
dist/team/runtime-v2.js.map generated vendored

File diff suppressed because one or more lines are too long