Hinweise zu pi und der Coder/Judge-Erweiterung (MCP-Server, Web-Tests, schneller entwickeln, Fehlerbilder) aus strata-betrieb übernommen. Kapitel 2/3 und README auf Strata als Standard gebracht. deploy-pi-config.sh verlinkt jetzt auch mcp.json. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
67 lines
3.3 KiB
JavaScript
67 lines
3.3 KiB
JavaScript
// Testet die Konfig-Invarianten der Single-Server-Architektur.
|
|
// Der ursprüngliche Bug war eine Konfig-Inkonsistenz (Default zeigte auf toten Port 8002).
|
|
|
|
import { test } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { readJson, readRepoFile } from "./helpers.mjs";
|
|
|
|
const models = readJson("models.json");
|
|
const settings = readJson("settings.json");
|
|
const mcp = readJson("mcp.json");
|
|
|
|
test("models.json: Provider llama-cpp-single hat genau ein Modell coding_model auf Port 8001", () => {
|
|
const p = models.providers["llama-cpp-single"];
|
|
assert.ok(p, "Provider llama-cpp-single fehlt");
|
|
assert.match(p.baseUrl, /:8001\//, "llama-cpp-single muss auf Port 8001 zeigen");
|
|
assert.deepEqual(p.models.map((m) => m.id), ["coding_model"]);
|
|
});
|
|
|
|
test("models.json: Provider strata zeigt auf den lokalen Strata-Server (:9090)", () => {
|
|
const p = models.providers["strata"];
|
|
assert.ok(p, "Provider strata fehlt");
|
|
assert.match(p.baseUrl, /^http:\/\/127\.0\.0\.1:9090\/v1$/);
|
|
assert.deepEqual(p.models.map((m) => m.id), ["qwen3.8-flash-next-iq3_s"]);
|
|
// Strata reads pictures with its vision encoder (setup --vision cpu); pi drops images for text-only models.
|
|
assert.deepEqual(p.models[0].input, ["text", "image"]);
|
|
});
|
|
|
|
test("models.json: tote Dual-/Alt-Provider sind entfernt", () => {
|
|
for (const dead of ["llama-cpp", "llama-cpp-coder", "llama-cpp-judge"]) {
|
|
assert.ok(!(dead in models.providers), `Toter Provider '${dead}' noch vorhanden`);
|
|
}
|
|
});
|
|
|
|
test("models.json: kein Verweis mehr auf den toten Port 8002", () => {
|
|
assert.doesNotMatch(JSON.stringify(models), /:8002/);
|
|
});
|
|
|
|
test("settings.json: enthält packages-Liste mit pi-llama-cpp", () => {
|
|
assert.ok(Array.isArray(settings.packages), "packages-Feld fehlt oder ist kein Array");
|
|
assert.ok(
|
|
settings.packages.some((p) => p.includes("pi-llama-cpp")),
|
|
"npm:pi-llama-cpp fehlt in packages"
|
|
);
|
|
});
|
|
|
|
test("settings.json ist valides JSON ohne überraschende Felder", () => {
|
|
// Reine Smoke-Prüfung, dass die Datei parsebar bleibt und den Kern-Key hat.
|
|
assert.ok("packages" in settings, "Schlüssel 'packages' fehlt in settings.json");
|
|
});
|
|
|
|
test("settings.json enthält keine Modell-Auswahl (Nutzer-Präferenz bleibt erhalten)", () => {
|
|
// defaultProvider/defaultModel/enabledModels sollen nicht im Repo stehen —
|
|
// sie überschreiben sonst das vom Nutzer gewählte Default-Modell (z. B. OpenRouter).
|
|
assert.ok(!("defaultProvider" in settings), "defaultProvider soll nicht im Repo-settings sein");
|
|
assert.ok(!("defaultModel" in settings), "defaultModel soll nicht im Repo-settings sein");
|
|
assert.ok(!("enabledModels" in settings), "enabledModels soll nicht im Repo-settings sein");
|
|
});
|
|
|
|
test("mcp.json: Playwright und Context7 mit fester Version, Key nur als Umgebungsverweis", () => {
|
|
const servers = mcp.mcpServers;
|
|
assert.deepEqual(Object.keys(servers).sort(), ["context7", "playwright"]);
|
|
assert.ok(servers.playwright.args.includes("@playwright/mcp@0.0.83"));
|
|
assert.ok(servers.playwright.args.includes("--headless"), "Browser-Tests nie auf dem Desktop");
|
|
assert.ok(servers.context7.args.includes("@upstash/context7-mcp@4.1.1"));
|
|
assert.deepEqual(servers.context7.env, { CONTEXT7_API_KEY: "${CONTEXT7_API_KEY}" });
|
|
assert.doesNotMatch(JSON.stringify(mcp), /ctx7sk|--api-key/, "kein API-Key im Klartext");
|
|
});
|