refactor: drop 12 runtimes, keep Claude, Codex, OpenCode, Cursor, ZCode, Antigravity

Removes kilo, kimi, kimi-code, copilot, windsurf, augment, trae, qwen, hermes,
cline, codebuddy and pi end to end: capability descriptors, installer branches
and converters (bin/install.js 14.9k -> 11.2k lines), TypeScript converters,
hook surfaces and runtime homes, review lanes qwen/kimi-code, the two pi
migrations, Kimi payload normalization in the hook guards, dead hostBehaviors
vocabulary, launcher home probes, fixtures, runtime-specific tests and the
prose that presented them as supported.

Installer output for the six kept runtimes is byte-identical to before the
prune. The Kimi tool-vocabulary tests in workflow-guard, read-guard and
read-injection-scanner are left in place pending a decision.
This commit is contained in:
Jakub Zych
2026-10-06 20:02:40 +02:00
parent 12ee75a509
commit 6cfa0c55d2
509 changed files with 1869 additions and 47737 deletions

View File

@@ -5759,34 +5759,6 @@ describe('issue #2517: RUNTIME_PROFILE_MAP single source of truth (finding #16)'
// Antigravity (which runs on the Gemini backend and carries its own
// runtimeTierDefaults); Antigravity's tier resolution is covered elsewhere.
// ─── Issue #2612: qwen runtime tier resolution ───────────────────────────────
describe('issue #2612: runtime "qwen" — Qwen tier resolution', () => {
let tmpDir;
beforeEach(() => { isolateHome(); tmpDir = createTempProject(); resetRuntimeWarningCaches(); });
afterEach(() => { cleanup(tmpDir); restoreHome(); });
test('opus tier -> qwen3-max-2026-01-23', () => {
writeConfig(tmpDir, { runtime: 'qwen', model_profile: 'quality' });
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-planner'), 'qwen3-max-2026-01-23');
});
test('sonnet tier -> qwen3-coder-plus', () => {
writeConfig(tmpDir, { runtime: 'qwen', model_profile: 'balanced' });
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-roadmapper'), 'qwen3-coder-plus');
});
test('haiku tier -> qwen3-coder-next', () => {
writeConfig(tmpDir, { runtime: 'qwen', model_profile: 'budget' });
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-codebase-mapper'), 'qwen3-coder-next');
});
test('qwen: effort resolves universally but render param is null (no wire param)', () => {
writeConfig(tmpDir, { runtime: 'qwen', model_profile: 'quality' });
const eff = resolveEffortInternal(tmpDir, 'msd-planner');
assert.strictEqual(renderEffortForRuntime('qwen', eff).param, null);
});
});
// ─── Issue #2612: opencode runtime tier resolution ───────────────────────────
describe('issue #2612: runtime "opencode" — OpenCode tier resolution', () => {
let tmpDir;
@@ -5815,64 +5787,6 @@ describe('issue #2612: runtime "opencode" — OpenCode tier resolution', () => {
});
});
// ─── Issue #2093: kilo runtime tier resolution ───────────────────────────────
// Kilo is an OpenCode fork and shares the IDENTICAL built-in tier IDs (UPGRADE 2
// / ADR-1239). Kilo moved from Group B (no built-in defaults) to Group A here.
describe('issue #2093: runtime "kilo" — Kilo tier resolution', () => {
let tmpDir;
beforeEach(() => { isolateHome(); tmpDir = createTempProject(); resetRuntimeWarningCaches(); });
afterEach(() => { cleanup(tmpDir); restoreHome(); });
test('opus tier -> anthropic/claude-opus-4-8', () => {
writeConfig(tmpDir, { runtime: 'kilo', model_profile: 'quality' });
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-planner'), 'anthropic/claude-opus-4-8');
});
test('sonnet tier -> anthropic/claude-sonnet-5', () => {
writeConfig(tmpDir, { runtime: 'kilo', model_profile: 'balanced' });
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-roadmapper'), 'anthropic/claude-sonnet-5');
});
test('haiku tier -> anthropic/claude-haiku-4-5', () => {
writeConfig(tmpDir, { runtime: 'kilo', model_profile: 'budget' });
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-codebase-mapper'), 'anthropic/claude-haiku-4-5');
});
test('kilo: effort resolves universally but render param is null (no wire param)', () => {
writeConfig(tmpDir, { runtime: 'kilo', model_profile: 'quality' });
const eff = resolveEffortInternal(tmpDir, 'msd-planner');
assert.strictEqual(renderEffortForRuntime('kilo', eff).param, null);
});
});
// ─── Issue #2612: copilot runtime tier resolution ────────────────────────────
describe('issue #2612: runtime "copilot" — Copilot tier resolution', () => {
let tmpDir;
beforeEach(() => { isolateHome(); tmpDir = createTempProject(); resetRuntimeWarningCaches(); });
afterEach(() => { cleanup(tmpDir); restoreHome(); });
test('opus tier -> claude-opus-4-8', () => {
writeConfig(tmpDir, { runtime: 'copilot', model_profile: 'quality' });
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-planner'), 'claude-opus-4-8');
});
test('sonnet tier -> claude-sonnet-5', () => {
writeConfig(tmpDir, { runtime: 'copilot', model_profile: 'balanced' });
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-roadmapper'), 'claude-sonnet-5');
});
test('haiku tier -> claude-haiku-4-5', () => {
writeConfig(tmpDir, { runtime: 'copilot', model_profile: 'budget' });
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-codebase-mapper'), 'claude-haiku-4-5');
});
test('copilot: effort resolves universally but render param is null (no wire param)', () => {
writeConfig(tmpDir, { runtime: 'copilot', model_profile: 'quality' });
const eff = resolveEffortInternal(tmpDir, 'msd-planner');
assert.strictEqual(renderEffortForRuntime('copilot', eff).param, null);
});
});
// ─── Issue #2612: Group B runtimes fall through (no built-in map) ────────────
describe('issue #2612: Group B runtimes — no built-in map, use unknown-runtime fallback', () => {
test('cursor is not in RUNTIME_PROFILE_MAP (uses unknown-runtime fallback)', () => {
@@ -5921,25 +5835,11 @@ describe('issue #2612: Group B runtimes — no built-in map, use unknown-runtime
});
// ─── Issue #2612: Partial override merge for new runtimes ────────────────────
describe('issue #2612: partial override merge for new Group A runtimes', () => {
describe('issue #2612: partial override merge for Group A runtimes', () => {
let tmpDir;
beforeEach(() => { isolateHome(); tmpDir = createTempProject(); resetRuntimeWarningCaches(); });
afterEach(() => { cleanup(tmpDir); restoreHome(); });
test('qwen.opus override wins; sonnet and haiku use built-in defaults', () => {
writeConfig(tmpDir, {
runtime: 'qwen',
model_profile: 'quality',
model_profile_overrides: {
qwen: { opus: 'qwen3-max-custom' },
},
});
// opus is overridden
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-planner'), 'qwen3-max-custom');
// sonnet not overridden — quality -> sonnet for msd-codebase-mapper
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-codebase-mapper'), 'qwen3-coder-plus');
});
test('opencode.sonnet override wins; opus and haiku still use built-in defaults', () => {
writeConfig(tmpDir, {
runtime: 'opencode',
@@ -5956,36 +5856,6 @@ describe('issue #2612: partial override merge for new Group A runtimes', () => {
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-codebase-mapper'), 'anthropic/claude-haiku-4-5');
});
test('copilot.haiku override wins; opus and sonnet still use built-in defaults', () => {
writeConfig(tmpDir, {
runtime: 'copilot',
model_profile: 'budget',
model_profile_overrides: {
copilot: { haiku: 'claude-haiku-4-6' },
},
});
// msd-codebase-mapper budget -> haiku -> overridden
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-codebase-mapper'), 'claude-haiku-4-6');
// msd-planner budget -> sonnet -> built-in default
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-planner'), 'claude-sonnet-5');
});
// #2093: kilo just moved into Group A — same partial-merge coverage as opencode.
test('kilo.sonnet override wins; opus and haiku still use built-in defaults', () => {
writeConfig(tmpDir, {
runtime: 'kilo',
model_profile: 'balanced',
model_profile_overrides: {
kilo: { sonnet: 'anthropic/claude-sonnet-4-7' },
},
});
// msd-planner balanced -> opus -> built-in default
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-planner'), 'anthropic/claude-opus-4-8');
// msd-roadmapper balanced -> sonnet -> overridden
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-roadmapper'), 'anthropic/claude-sonnet-4-7');
// msd-codebase-mapper balanced -> haiku -> built-in default (haiku not overridden)
assert.strictEqual(resolveModelInternal(tmpDir, 'msd-codebase-mapper'), 'anthropic/claude-haiku-4-5');
});
});
});
}