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
25 changes: 25 additions & 0 deletions backend/__tests__/unit/routes/registry.catalog-model-names.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// D111 (2026-10-27): we have no GPT model access, and LiteLLM serves the internal
// openai-codex/* and gpt-* aliases with DeepSeek V4 Flash. A catalog entry that
// recommends one of those names tells a reader we run a model we do not.
const fs = require('fs');
const path = require('path');
const { PRESET_DEFINITIONS } = require('../../../routes/registry/presets');

const GPT_NAME = /(^|\/)(gpt-|codex-mini|o4-mini)|^openai-codex\//;

describe('catalog model names (D111)', () => {
it('no preset recommends a GPT or openai-codex model', () => {
const offenders = PRESET_DEFINITIONS
.filter((p) => typeof p.recommendedModel === 'string' && GPT_NAME.test(p.recommendedModel))
.map((p) => `${p.id}: ${p.recommendedModel}`);
expect(offenders).toEqual([]);
});

it('the published openclaw manifest lists no GPT or openai-codex model', () => {
const src = fs.readFileSync(path.join(__dirname, '../../../routes/registry/publish.ts'), 'utf8');
const models = src.match(/name: 'openclaw',[\s\S]*?models:\s*\{[\s\S]*?supported:\s*\[([^\]]*)\][\s\S]*?recommended:\s*'([^']*)'/);
expect(models).not.toBeNull();
const names = [...models[1].matchAll(/'([^']+)'/g)].map((m) => m[1]).concat(models[2]);
expect(names.filter((n) => GPT_NAME.test(n))).toEqual([]);
});
});
14 changes: 7 additions & 7 deletions backend/routes/registry/presets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ You are **Research Analyst** — a deep-research specialist who turns raw inform
agentName: 'openclaw',
description: 'Code-quality-focused collaborator. Reviews diffs, suggests refactors, drafts implementations on request. Reacts to @mentions; no heartbeat.',
targetUsage: 'Other agents (Pixel/Theo/Ops) DMing for code work; humans wanting a code-quality second opinion.',
recommendedModel: 'openai-codex/gpt-5.4-mini',
recommendedModel: 'deepseek-v4-flash',
requiredTools: [
{ id: 'pod-context', label: 'Commonly pod context + memory', type: 'core' },
],
Expand Down Expand Up @@ -1116,7 +1116,7 @@ You are **Community Hype Host** — an engagement catalyst. You turn notable pos
description:
'Project Manager. Breaks user requests into actionable tasks, assigns to the engineering team, and tracks progress.',
targetUsage: 'Coordinating backend, frontend, and devops work on Commonly.',
recommendedModel: 'openai-codex/gpt-5.4',
recommendedModel: 'deepseek-v4-flash',
installHints: {
scopes: [
'agent:context:read',
Expand Down Expand Up @@ -1224,7 +1224,7 @@ If tasks changed, blockers found, or a PR was reviewed → ONE status message us
description:
'Backend engineer. Implements Node.js/Express/MongoDB/PostgreSQL tasks on the Commonly codebase via codex.',
targetUsage: 'Bug fixes, new API endpoints, database migrations, backend tests.',
recommendedModel: 'openai-codex/gpt-5.4',
recommendedModel: 'deepseek-v4-flash',
installHints: {
scopes: [
'agent:context:read',
Expand Down Expand Up @@ -1316,7 +1316,7 @@ Use the arrays from call #3 (DevPodId) and call #4 (MyPodId) — do NOT re-fetch
description:
'Frontend engineer. Implements React/MUI/CSS tasks on the Commonly frontend in-session.',
targetUsage: 'UI components, styling fixes, React hooks, frontend tests.',
recommendedModel: 'openai-codex/gpt-5.4',
recommendedModel: 'deepseek-v4-flash',
installHints: {
scopes: [
'agent:context:read',
Expand Down Expand Up @@ -1405,7 +1405,7 @@ Use the arrays from calls #3/#4 — do NOT re-fetch. Skip messages where sender
description:
'DevOps engineer. Handles GKE, Docker, CI/CD, Helm, and infrastructure tasks in-session.',
targetUsage: 'Deployments, node pool fixes, Helm updates, Kubernetes configs, CI/CD pipelines.',
recommendedModel: 'openai-codex/gpt-5.4',
recommendedModel: 'deepseek-v4-flash',
installHints: {
scopes: [
'agent:context:read',
Expand Down Expand Up @@ -2281,7 +2281,7 @@ You are **Creative Director** — the quality gate. Your job is to make sure wha
agentName: 'openclaw',
description: 'Ground-truth source for Team-Commonly/commonly. Reads README, docs, recent PRs, open issues, and architecture to answer technical questions from the marketing/strategy team.',
targetUsage: 'Answer "what is Commonly?", "what features exist today?", "how does X work?", "what just shipped?"',
recommendedModel: 'openai-codex/gpt-5.4-nano',
recommendedModel: 'deepseek-v4-flash',
requiredTools: [
{ id: 'pod-context', label: 'Commonly pod context + memory', type: 'core' },
{ id: 'acpx', label: 'Coding agent for repo exploration', type: 'plugin', matchAny: ['acpx'] },
Expand Down Expand Up @@ -2375,7 +2375,7 @@ Save summary into \`## RepoSnapshot\`.
agentName: 'openclaw',
description: 'Scans GitHub for trending AI orchestration, agent-harness, and multi-agent projects. Surfaces patterns, novel mechanics, and ideas the team could absorb.',
targetUsage: 'Competitive/ecosystem intelligence across LangChain, LlamaIndex, CrewAI, AutoGen, OpenAgent-style projects. Surface adoption trends and novel architectures.',
recommendedModel: 'openai-codex/gpt-5.4-nano',
recommendedModel: 'deepseek-v4-flash',
requiredTools: [
{ id: 'pod-context', label: 'Commonly pod context + memory', type: 'core' },
{ id: 'acpx', label: 'Coding agent for repo exploration', type: 'plugin', matchAny: ['acpx'] },
Expand Down
9 changes: 5 additions & 4 deletions backend/routes/registry/publish.ts
Original file line number Diff line number Diff line change
Expand Up @@ -152,10 +152,11 @@ publishRouter.post('/seed', auth, async (req: any, res: any) => {
context: { required: ['context:read', 'summaries:read', 'messages:write'] },
models: {
// Listed here for the marketplace catalog only. Runtime model selection
// happens per-agent in agentProvisionerServiceK8s.ts (dev agents on
// openai-codex/gpt-5.4, community agents on OpenRouter free tier).
supported: ['openai-codex/gpt-5.4', 'openrouter/nvidia/nemotron-3-super-120b-a12b:free'],
recommended: 'openai-codex/gpt-5.4',
// happens per-agent in agentProvisionerServiceK8s.ts. Dev agents keep the
// internal openai-codex/* alias names, which LiteLLM serves with DeepSeek V4
// Flash since 2026-10-27; community agents are on the OpenRouter free tier.
supported: ['deepseek-v4-flash', 'openrouter/nvidia/nemotron-3-super-120b-a12b:free'],
recommended: 'deepseek-v4-flash',
},
runtime: {
type: 'standalone',
Expand Down
Loading