Spaces:
Runtime error
Runtime error
| /** | |
| * TDD regression β auto combos must never advertise `limit.context: 0`. | |
| * | |
| * opencode's overflow guard (packages/opencode/src/session/overflow.ts) | |
| * short-circuits when `model.limit.context === 0`: | |
| * | |
| * if (input.model.limit.context === 0) return false // never overflow | |
| * | |
| * so a zero context silently DISABLES opencode's smart auto-compaction for | |
| * auto combos. The session then grows unbounded until OmniRoute's | |
| * server-side purifyHistory() destructively drops old messages β the | |
| * "coding agent keeps forgetting things" bug. | |
| * | |
| * Fix under test: mapAutoComboToStaticEntry consumes the context_length / | |
| * max_output_tokens now served by GET /api/combos/auto, and falls back to a | |
| * safe positive default (128000 / 8192) for older servers that do not send | |
| * the fields yet. | |
| */ | |
| import test from "node:test"; | |
| import assert from "node:assert/strict"; | |
| import { mapAutoComboToStaticEntry } from "../src/index.ts"; | |
| import type { OmniRouteRawAutoCombo } from "../src/index.ts"; | |
| test("uses server-provided context_length and max_output_tokens", () => { | |
| const raw = { | |
| id: "auto/coding", | |
| name: "Auto Coding", | |
| variant: "coding", | |
| candidateCount: 5, | |
| context_length: 1048576, | |
| max_output_tokens: 65536, | |
| } as OmniRouteRawAutoCombo; | |
| const entry = mapAutoComboToStaticEntry(raw); | |
| assert.equal(entry.limit?.context, 1048576); | |
| assert.equal(entry.limit?.output, 65536); | |
| }); | |
| test("falls back to a safe positive default when the server omits limits (old servers)", () => { | |
| const raw = { | |
| id: "auto", | |
| name: "Auto", | |
| candidateCount: 3, | |
| } as OmniRouteRawAutoCombo; | |
| const entry = mapAutoComboToStaticEntry(raw); | |
| assert.ok( | |
| typeof entry.limit?.context === "number" && entry.limit.context > 0, | |
| `context must be a positive number (never 0 β zero disables opencode auto-compaction), got ${entry.limit?.context}` | |
| ); | |
| assert.ok( | |
| typeof entry.limit?.output === "number" && entry.limit.output > 0, | |
| `output must be a positive number, got ${entry.limit?.output}` | |
| ); | |
| }); | |
| test("ignores non-positive server values and keeps the safe fallback", () => { | |
| const raw = { | |
| id: "auto/fast", | |
| name: "Auto Fast", | |
| variant: "fast", | |
| candidateCount: 2, | |
| context_length: 0, | |
| max_output_tokens: -1, | |
| } as OmniRouteRawAutoCombo; | |
| const entry = mapAutoComboToStaticEntry(raw); | |
| assert.ok( | |
| typeof entry.limit?.context === "number" && entry.limit.context > 0, | |
| "zero/negative server values must not propagate" | |
| ); | |
| assert.ok(typeof entry.limit?.output === "number" && entry.limit.output > 0); | |
| }); | |