mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-24 08:02:14 +03:00
Drain the unit-shard reds the 2026-08-23 merge wave left on release/v3.8.50, each discriminated as stale-test (contract moved intentionally, test aligned) vs real bug (fixed in code/messages): 1. check-deps 6A.8 allowlist — #11224 added @testing-library/dom and @testing-library/user-event to package.json without the gate allowlist. Both are legitimate: @testing-library/dom is a required peer of @testing-library/react v16, and user-event is the official companion for UI tests. Fix: allowlist entries with a justification note referencing #11224/#9985. 2. search-route 400-vs-fallback — #11097 intentionally changed the zero-credential /v1/search contract: instead of returning 400 it promotes the fallback-only duckduckgo-free provider so out-of-the-box search works. The test pinned the OLD 400 contract. Fix (contract alignment): the test now pins the new fallback contract — 200, provider duckduckgo-free, DuckDuckGo lite endpoint called, results parsed from lite HTML. 3. codex catalog token limits (4 named reds + 2 sibling sweeps) — #11179 raised GPT_5_6_CODEX_CAPABILITIES from the 272K pricing tier to the real usable 872K window (live evidence: 390K served past 272K with HTTP 200) and updated codex-gpt56-catalog.test.ts but missed the sibling pins. Stale tests aligned: models-catalog-combo- metadata (max_input_tokens now clamps to min(872000, 500000 override) = 500000), vscode-token-routes x3 (872000), and two more found in the sibling sweep: vscode-token-routes-gpt56 and provider-models-route- codex (conservative merge semantics unchanged: pinned 872000 < live 999999 still wins). 4. CLI catalog counts (3 reds) — #11166 added prime-agent (agent category) without the cardinality pins: EXPECTED_AGENT_COUNT 8->9, total 34->35, D15 agent list + prime-agent, cli-tools-schema id list. Also added the missing English/Vietnamese cliTools descriptions for prime-agent (cli-catalog-display-contract) and corrected the stale CLI-TOOLS.md agent count (8->9). 5. setup-qwen container guard — since #10057 the container guard exits 2 on ephemeral runtimes; the two tests exercising the merge/write path were environment-sensitive (red on container devboxes). Fix: pass allowContainerWrite so the tests are hermetic everywhere; the guard keeps its own dedicated coverage. 6. i18n health verdict namespace (real bug, fixed in messages) — #11224 added the verdict/diagnostics strings to the `sidebar` namespace but health/page.tsx reads them via useTranslations("health"), so the page rendered raw keys in every locale and the "direct translation calls have English messages" gate went red. Fix: keys moved sidebar->health in en.json + vi.json (the only locales that had them), plus health.healthSubtitle added. The sidebar never referenced them (verified: no usage), and sidebar.healthSubtitle (its real sidebar key) is untouched. 7. i18n pt-BR drift (22 keys) — the 08-23 wave (#11224/#11228/#11215/ #11204/#11195) added English keys never translated: common.batch*, endpoint.*, cliCommon.concept.acp.warning, resilienceConnections.*, plus the moved health.* keys and the prime-agent cliTools description. Fix: pt-BR translations added — 0 missing keys vs en; vi strict parity re-verified (0 missing, 0 extra). Validation: every touched test file RED->GREEN individually (node --import tsx/esm --test), typecheck:core clean, docs-counts-sync soft-pass, cli-i18n gate PASS, 8/8 unit shards re-run on the branch. Refs #9985
99 lines
3.5 KiB
TypeScript
99 lines
3.5 KiB
TypeScript
import test from "node:test";
|
|
import assert from "node:assert/strict";
|
|
|
|
test("CLI_TOOLS registry contains all expected tools including rebuilt Qwen Code", async () => {
|
|
const { CLI_TOOLS } = await import("../../src/shared/constants/cliTools.ts");
|
|
// windsurf and amp removed per plan 14 D17 (MITM backlog plan 11)
|
|
// New entries added: roo, jcode, deepseek-tui, smelt, pi, aider, forge,
|
|
// cursor-cli, goose, interpreter, warp, agent-deck (+ hermes-agent already existed)
|
|
// crush added — ported from upstream decolua/9router#1233
|
|
// codewhale added 2026-07-02 as a dual entry alongside deepseek-tui
|
|
// (CodeWhale is the actively-maintained successor to DeepSeek TUI).
|
|
// omp + letta added by #6318 (agent-category CLI integrations).
|
|
// grok-build added — xAI Grok Build TUI coding agent (ported from upstream decolua/9router#2571).
|
|
// prime-agent added by #11166 (PrimeIntellect-ai/prime-agent, agent category).
|
|
const expected = [
|
|
"claude",
|
|
"codex",
|
|
"droid",
|
|
"openclaw",
|
|
"cursor",
|
|
"cline",
|
|
"kilo",
|
|
"continue",
|
|
"antigravity",
|
|
"copilot",
|
|
"opencode",
|
|
"hermes",
|
|
"hermes-agent",
|
|
"kiro",
|
|
"custom",
|
|
"aider",
|
|
"forge",
|
|
"cursor-cli",
|
|
"roo",
|
|
"jcode",
|
|
"deepseek-tui",
|
|
"codewhale",
|
|
"smelt",
|
|
"pi",
|
|
"goose",
|
|
"interpreter",
|
|
"warp",
|
|
"omp",
|
|
"letta",
|
|
"agent-deck",
|
|
"crush",
|
|
"grok-build",
|
|
"qwen",
|
|
"zcode",
|
|
"prime-agent",
|
|
];
|
|
for (const id of expected) {
|
|
assert.ok(id in CLI_TOOLS, `Missing tool: ${id}`);
|
|
}
|
|
assert.equal(Object.keys(CLI_TOOLS).length, expected.length);
|
|
assert.equal(CLI_TOOLS.qwen.previewConfigMode, "qwen");
|
|
// Confirm removed entries are gone
|
|
assert.equal((CLI_TOOLS as Record<string, unknown>)["windsurf"], undefined);
|
|
assert.equal((CLI_TOOLS as Record<string, unknown>)["amp"], undefined);
|
|
});
|
|
|
|
test("Every tool has required fields: id, name, description, configType", async () => {
|
|
const { CLI_TOOLS } = await import("../../src/shared/constants/cliTools.ts");
|
|
for (const [key, tool] of Object.entries(CLI_TOOLS)) {
|
|
assert.equal(typeof tool.id, "string", `${key}.id must be string`);
|
|
assert.equal(tool.id, key, `${key}.id must match its registry key`);
|
|
assert.equal(typeof tool.name, "string", `${key}.name must be string`);
|
|
assert.ok(tool.name.length > 0, `${key}.name must be non-empty`);
|
|
assert.equal(typeof tool.description, "string", `${key}.description must be string`);
|
|
assert.equal(typeof tool.configType, "string", `${key}.configType must be string`);
|
|
}
|
|
});
|
|
|
|
test("listCliTools returns all tools as an array", async () => {
|
|
const { listCliTools, CLI_TOOLS } = await import("../../src/shared/constants/cliTools.ts");
|
|
const tools = listCliTools();
|
|
assert.ok(Array.isArray(tools));
|
|
assert.equal(tools.length, Object.keys(CLI_TOOLS).length);
|
|
for (const tool of tools) {
|
|
assert.equal(typeof tool.id, "string");
|
|
}
|
|
});
|
|
|
|
test("getCliTool returns correct tool by id", async () => {
|
|
const { getCliTool } = await import("../../src/shared/constants/cliTools.ts");
|
|
const claude = getCliTool("claude");
|
|
assert.ok(claude);
|
|
assert.equal(claude.id, "claude");
|
|
assert.equal(claude.name, "Claude Code");
|
|
|
|
const missing = getCliTool("nonexistent");
|
|
assert.equal(missing, undefined);
|
|
});
|
|
|
|
test("CLI tools registry does not export provider model mapping helper", async () => {
|
|
const registry = await import("../../src/shared/constants/cliTools.ts");
|
|
assert.equal("getProviderModelsForMapping" in registry, false);
|
|
});
|