fix(usage): declare the Paseo requirement on internal usage-source plugins

A manifest without requirements.paseo targets Paseo before 0.8, so the daemon
refused to start eight of the nine usage sources.
This commit is contained in:
Mohamed Boudra
2026-09-26 20:53:05 +02:00
parent 9d7286ce0c
commit 539097debc
9 changed files with 22 additions and 8 deletions
@@ -1 +1 @@
{ "id": "claude-usage-source" }
{ "id": "claude-usage-source", "requirements": { "paseo": ">=0.9.2" } }
@@ -1 +1 @@
{ "id": "codex-usage-source" }
{ "id": "codex-usage-source", "requirements": { "paseo": ">=0.9.2" } }
@@ -1 +1 @@
{ "id": "copilot-usage-source" }
{ "id": "copilot-usage-source", "requirements": { "paseo": ">=0.9.2" } }
@@ -1 +1 @@
{ "id": "cursor-usage-source" }
{ "id": "cursor-usage-source", "requirements": { "paseo": ">=0.9.2" } }
@@ -1 +1 @@
{ "id": "grok-usage-source" }
{ "id": "grok-usage-source", "requirements": { "paseo": ">=0.9.2" } }
@@ -1 +1 @@
{ "id": "kimi-usage-source" }
{ "id": "kimi-usage-source", "requirements": { "paseo": ">=0.9.2" } }
@@ -1 +1 @@
{ "id": "minimax-usage-source" }
{ "id": "minimax-usage-source", "requirements": { "paseo": ">=0.9.2" } }
@@ -1 +1 @@
{ "id": "zai-usage-source" }
{ "id": "zai-usage-source", "requirements": { "paseo": ">=0.9.2" } }
@@ -4,8 +4,12 @@ import { tmpdir } from "node:os";
import path from "node:path";
import { fileURLToPath } from "node:url";
import { expect, test } from "vitest";
import { assertPluginCompatibility } from "@getpaseo/protocol/plugin-requirements";
import { INTERNAL_PLUGINS } from "../../plugins/index.js";
import { resolveDaemonVersion } from "../daemon-version.js";
import { createPluginImportReader } from "./compiler-imports.js";
import { compilePlugin, SERVER_HOST_MODULES } from "./compiler.js";
import { readPluginManifest } from "./manifest.js";
const root = fileURLToPath(new URL("../../plugins/", import.meta.url));
const fixture = fileURLToPath(new URL("./test-fixtures/internal-seam/", import.meta.url));
@@ -60,3 +64,13 @@ test("internal plugin boundary rejects daemon imports with the file and specifie
await rm(directory, { recursive: true, force: true });
}
});
test("every internal plugin manifest is compatible with the daemon that ships it", async () => {
const version = resolveDaemonVersion(import.meta.url);
for (const plugin of INTERNAL_PLUGINS) {
const manifest = await readPluginManifest(plugin.directory);
expect(() =>
assertPluginCompatibility({ ...manifest, version, runtime: "daemon" }),
).not.toThrow();
}
});