Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 37 additions & 14 deletions manifest.json
Original file line number Diff line number Diff line change
@@ -1,35 +1,58 @@
{
"schemaVersion": 1,
"generatedAt": "2026-09-20T12:00:52.504Z",
"generatedAt": "2026-09-20T16:38:04.091Z",
"pluginVersion": "0.7.72",
"commandCodeVersion": "1.58.1",
"commandCodeTarball": "https://registry.npmjs.org/command-code/-/command-code-1.58.1.tgz",
"modelCount": 78,
"reasoningModelCount": 67,
"modelCount": 71,
"reasoningModelCount": 61,
"extraction": {
"modelCatalog": "ok",
"costCatalog": "cli",
"costCatalogError": null
},
"costSources": {
"cli": 22,
"cli": 21,
"officialDocs": 50,
"thirdParty": 0,
"free": 6,
"free": 0,
"fallback": 0,
"unmatched": 0
},
"review": {
"thirdParty": [],
"free": [
"inclusionai/ling-3.0-flash-free",
"meituan/LongCat-2.0:free",
"minimax/minimax-m2.7-free",
"minimax/minimax-m3-free",
"MiniMaxAI/MiniMax-M3-Free",
"tencent/Hy3"
],
"unmatched": []
"free": [],
"unmatched": [],
"unavailable": [
{
"id": "MiniMaxAI/MiniMax-M3-Free",
"reason": "not-listed-by-provider-api"
},
{
"id": "gpt-6-astra",
"reason": "not-listed-by-provider-api"
},
{
"id": "inclusionai/ling-3.0-flash-free",
"reason": "not-listed-by-provider-api"
},
{
"id": "meituan/LongCat-2.0:free",
"reason": "not-listed-by-provider-api"
},
{
"id": "minimax/minimax-m2.7-free",
"reason": "not-listed-by-provider-api"
},
{
"id": "minimax/minimax-m3-free",
"reason": "not-listed-by-provider-api"
},
{
"id": "tencent/Hy3",
"reason": "not-listed-by-provider-api"
}
]
},
"status": "healthy"
}
193 changes: 0 additions & 193 deletions models.json
Original file line number Diff line number Diff line change
Expand Up @@ -401,41 +401,6 @@
]
}
},
{
"id": "gpt-6-astra",
"name": "GPT-6 Astra",
"tier": "premium",
"reasoning": true,
"reasoningEfforts": [
"low",
"medium",
"high",
"xhigh",
"max"
],
"tool_call": true,
"cost": {
"input": 10,
"output": 50,
"cache_read": 1,
"cache_write": 12.5
},
"limit": {
"context": 1050000,
"output": 65536
},
"attachment": true,
"modalities": {
"input": [
"text",
"image",
"pdf"
],
"output": [
"text"
]
}
},
{
"id": "deepseek/deepseek-v4-flash",
"name": "DeepSeek V4 Flash (latest)",
Expand Down Expand Up @@ -1400,30 +1365,6 @@
]
}
},
{
"id": "inclusionai/ling-3.0-flash-free",
"name": "Ling 3.0 Flash",
"tier": "open-source",
"reasoning": true,
"tool_call": true,
"cost": {
"input": 0,
"output": 0
},
"limit": {
"context": 256000,
"output": 32768
},
"attachment": false,
"modalities": {
"input": [
"text"
],
"output": [
"text"
]
}
},
{
"id": "inclusionai/ling-3.0-flash-sante:free",
"name": "Ling 3.0 Flash Sante",
Expand Down Expand Up @@ -1474,30 +1415,6 @@
]
}
},
{
"id": "meituan/LongCat-2.0:free",
"name": "LongCat 2.0 (Free)",
"tier": "open-source",
"reasoning": true,
"tool_call": true,
"cost": {
"input": 0,
"output": 0
},
"limit": {
"context": 1048576,
"output": 65536
},
"attachment": false,
"modalities": {
"input": [
"text"
],
"output": [
"text"
]
}
},
{
"id": "xiaomi/mimo-v2.5",
"name": "MiMo V2.5",
Expand Down Expand Up @@ -1600,30 +1517,6 @@
]
}
},
{
"id": "minimax/minimax-m2.7-free",
"name": "MiniMax M2.7 (Free)",
"tier": "open-source",
"reasoning": false,
"tool_call": true,
"cost": {
"input": 0,
"output": 0
},
"limit": {
"context": 197000,
"output": 65536
},
"attachment": false,
"modalities": {
"input": [
"text"
],
"output": [
"text"
]
}
},
{
"id": "MiniMaxAI/MiniMax-M3",
"name": "MiniMax M3",
Expand Down Expand Up @@ -1656,68 +1549,6 @@
]
}
},
{
"id": "minimax/minimax-m3-free",
"name": "MiniMax M3 (Free)",
"tier": "open-source",
"reasoning": true,
"reasoningEfforts": [
"low",
"medium",
"high"
],
"tool_call": true,
"cost": {
"input": 0,
"output": 0
},
"limit": {
"context": 1000000,
"output": 65536
},
"attachment": true,
"modalities": {
"input": [
"text",
"image",
"video"
],
"output": [
"text"
]
}
},
{
"id": "MiniMaxAI/MiniMax-M3-Free",
"name": "MiniMax M3 Free",
"tier": "open-source",
"reasoning": true,
"reasoningEfforts": [
"low",
"medium",
"high"
],
"tool_call": true,
"cost": {
"input": 0,
"output": 0
},
"limit": {
"context": 1000000,
"output": 65536
},
"attachment": true,
"modalities": {
"input": [
"text",
"image",
"video"
],
"output": [
"text"
]
}
},
{
"id": "meta/muse-spark-1.1",
"name": "Muse Spark 1.1",
Expand Down Expand Up @@ -2294,30 +2125,6 @@
]
}
},
{
"id": "tencent/Hy3",
"name": "Tencent Hy3 (Free)",
"tier": "open-source",
"reasoning": true,
"tool_call": true,
"cost": {
"input": 0,
"output": 0
},
"limit": {
"context": 262144,
"output": 65536
},
"attachment": false,
"modalities": {
"input": [
"text"
],
"output": [
"text"
]
}
},
{
"id": "tencent/hy4-preview",
"name": "Tencent Hy4 Preview",
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@
"test:integration": "bun test tests/integration/",
"test:all": "bun test",
"typecheck": "tsc --noEmit",
"prepack": "bun run scripts/verify-manifest-version.ts",
"verify:release-candidate": "bun run scripts/verify-release-candidate.ts",
"generate-readme": "bun run scripts/generate-readme.ts",
"sync": "bun run scripts/sync-models.ts",
Expand Down
4 changes: 4 additions & 0 deletions release.config.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ module.exports = {
"@semantic-release/exec",
{
analyzeCommitsCmd: "bun scripts/analyze-release-scope.ts",
// Stamp manifest.pluginVersion from nextRelease.version before
// the npm plugin packs, so the published tarball embeds the
// version it is published as.
prepareCmd: "bun scripts/prepare-release-manifest.ts ${nextRelease.version}",
},
],
"./scripts/semantic-release-catalog-notes.cjs",
Expand Down
31 changes: 3 additions & 28 deletions scripts/catalog-sync-ci.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,13 @@ import { existsSync, readFileSync } from "fs";
import { join } from "path";
import { execSync } from "child_process";
import { catalogBreakTitle, renderCatalogBreakBody } from "../src/catalog-break.js";
import {
lastSuccessfulModelCount,
meetsModelCountFloor,
type CatalogManifest,
} from "../src/manifest.js";
import { decideCatalogSync } from "../src/publish-policy.js";
import { npmLatestVersion, npmPackageVersions } from "./npm-registry.js";

const ROOT = join(import.meta.dir, "..");
const CATALOG_FILES = ["models.json", "_version.txt", "manifest.json"];
const CATALOG_BRANCH = "chore/catalog-sync";

function readJson<T>(path: string): T | null {
if (!existsSync(path)) return null;
try {
return JSON.parse(readFileSync(path, "utf-8")) as T;
} catch {
return null;
}
}

function bundledCommandCodeVersion(): string | null {
const path = join(ROOT, "_version.txt");
if (!existsSync(path)) return null;
Expand Down Expand Up @@ -123,7 +109,9 @@ async function main(): Promise<void> {
return;
}

const prior = readJson<CatalogManifest>(join(ROOT, "manifest.json"));
// sync-models.ts validates availability and the model-count floor before the
// first artifact write, so any failure there leaves the last-good catalog
// untouched and routes here through the catalog-break issue path.
const beforeModels = existsSync(join(ROOT, "models.json"))
? readFileSync(join(ROOT, "models.json"), "utf-8")
: "";
Expand All @@ -143,19 +131,6 @@ async function main(): Promise<void> {
}

const afterModels = readFileSync(join(ROOT, "models.json"), "utf-8");
const entries = JSON.parse(afterModels) as unknown[];
const lastCount = lastSuccessfulModelCount(prior);
if (!meetsModelCountFloor(entries.length, lastCount)) {
const message = `model count ${entries.length} below floor (lastSuccessful=${lastCount})`;
try {
openOrUpdateCatalogBreak({ commandCodeVersion: latestCc, error: message });
} catch (issueErr) {
console.error("failed to open catalog-break issue", issueErr);
}
execSync(`git checkout -- ${CATALOG_FILES.join(" ")}`, { cwd: ROOT, stdio: "inherit" });
process.exitCode = 1;
return;
}

const changed = afterModels !== beforeModels || bundledCommandCodeVersion() !== beforeVersion;
if (!changed) {
Expand Down
Loading
Loading