pantheon-opencode 1.4.1 → 1.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -33,12 +33,13 @@ export const EFFORT_RANK = { low: 0, medium: 1, high: 2 }
33
33
  /**
34
34
  * Capability table: reasoning-effort ceiling + image-input (vision) support.
35
35
  *
36
- * `vision` flags mark models that accept image input. Verified against
37
- * models.dev api.json on 2026-08-02 (council decision): qwen3.7-max,
38
- * minimax-m2.5 and minimax-m2.7 and glm-5.1/glm-5.2 are TEXT-ONLY (vision:
39
- * false); mimo-v2.5 / mimo-v2.5-free / qwen3.7-plus / minimax-m3 and the
40
- * o-series (o1/o3/o4) are multimodal (models.dev input: text+image).
41
- * claude-* and gpt-5.6-* carry native image support.
36
+ * `vision` flags mark models that accept image input. Verified 2026-08-27:
37
+ * deepseek-v4-pro high, deepseek-v4-flash medium text-only; mimo-v2.5 /
38
+ * mimo-v2.5-free multimodal low; qwen3.6-plus-free / qwen3.8-max text-only;
39
+ * glm-5.3-flash high text-only; kimi-k2.7-code high, kimi-k3 medium text-only;
40
+ * nemotron-3-super-free high text-only; big-pickle medium text-only;
41
+ * minimax-m3 multimodal high; gpt-5.6 family native image support.
42
+ * Removed: minimax-m2.5, kimi-k2.5, glm-5.1/5.2, ox-alpha (deprecated 2026).
42
43
  */
43
44
  export const CAPABILITY_TABLE = [
44
45
  { prefix: 'deepseek/deepseek-v4-pro', maxEffort: 'high', stripEffort: false, vision: false },
@@ -60,31 +61,18 @@ export const CAPABILITY_TABLE = [
60
61
  // entry above matches 'mimo/v2.5' (full-string) but NOT 'mimo-v2.5'
61
62
  // (segment 'mimo-v2.5' has no slash, so 'mimo/' prefix cannot match).
62
63
  { prefix: 'mimo-v2.5', maxEffort: 'low', stripEffort: false, vision: true },
63
- // mimo-v2.5-pro is text-only per models.dev api.json (2026-08-02).
64
- // Explicit entry needed: the 'mimo-v2.5' prefix substring-matches
65
- // 'mimo-v2.5-pro' (longest-prefix wins), which would wrongly report
66
- // vision: true for a text-only model.
64
+ // mimo-v2.5-pro is text-only per models.dev api.json (2026-08-27).
67
65
  { prefix: 'mimo-v2.5-pro', maxEffort: 'low', stripEffort: false, vision: false },
68
- // opencode-go (OpenCode Go subscription) — bare segment prefixes so
69
- // opencode-go/<model> IDs match; the provider-scoped deepseek/ entries
70
- // above still win by length for deepseek/ models. glm-5.1/glm-5.2 are
71
- // text-only per models.dev api.json (2026-08-02).
72
- { prefix: 'glm-5.2', maxEffort: 'medium', stripEffort: false, vision: false },
73
- { prefix: 'glm-5.1', maxEffort: 'medium', stripEffort: false, vision: false },
74
- { prefix: 'kimi-k2.6', maxEffort: 'high', stripEffort: false, vision: true },
75
- // qwen3.7-max is text-only per models.dev api.json (2026-08-02); the
76
- // multimodal variant is qwen3.7-plus.
66
+ // Go subscription specific — bare segment prefixes so opencode-go/<model> IDs match
67
+ { prefix: 'glm-5.3-flash', maxEffort: 'high', stripEffort: false, vision: false },
68
+ { prefix: 'kimi-k2.7-code', maxEffort: 'high', stripEffort: false, vision: false },
69
+ { prefix: 'kimi-k3', maxEffort: 'medium', stripEffort: false, vision: false },
70
+ { prefix: 'qwen3.8-max', maxEffort: 'high', stripEffort: false, vision: false },
71
+ { prefix: 'qwen3.6-plus-free', maxEffort: 'medium', stripEffort: false, vision: false },
72
+ // Legacy qwen3.7 retained for capability checks (not used in new presets)
77
73
  { prefix: 'qwen3.7-max', maxEffort: 'high', stripEffort: false, vision: false },
78
- // qwen3.7-plus IS multimodal (models.dev input: text+image) but image
79
- // turns through the OpenCode Go gateway return HTTP 500 (opencode#33942
80
- // + #29956). Flag stays true per models.dev; presets must NOT use it as a
81
- // vision fallback — minimax-m3 is the confirmed opencode-go fallback.
82
74
  { prefix: 'qwen3.7-plus', maxEffort: 'medium', stripEffort: false, vision: true },
83
- // minimax-m2.7 / minimax-m2.5 are text-only per models.dev api.json
84
- // (2026-08-02). minimax-m3 is the vision-capable MiniMax on opencode-go
85
- // (confirmed multimodal via the Go gateway, opencode#29956).
86
75
  { prefix: 'minimax-m2.7', maxEffort: 'medium', stripEffort: false, vision: false },
87
- { prefix: 'minimax-m2.5', maxEffort: 'medium', stripEffort: false, vision: false },
88
76
  { prefix: 'minimax-m3', maxEffort: 'high', stripEffort: false, vision: true },
89
77
  // BARE prefix — needed for opencode-go/deepseek-v4-flash (segment match);
90
78
  // provider-scoped deepseek/deepseek-v4-flash entry still wins by length
@@ -94,9 +82,10 @@ export const CAPABILITY_TABLE = [
94
82
  // provider-scoped deepseek/deepseek-v4-pro entry still wins by length.
95
83
  { prefix: 'deepseek-v4-pro', maxEffort: 'high', stripEffort: false, vision: false },
96
84
  // opencode (Zen free tier) — bare segment prefixes for opencode/<model>.
97
- // big-pickle / nemotron-3-ultra-free / north-mini-code-free verified
98
- // text-only via models.dev (2026-08-02).
85
+ // big-pickle / nemotron-3-super-free / north-mini-code-free verified
86
+ // text-only via models.dev (2026-08-27).
99
87
  { prefix: 'big-pickle', maxEffort: 'medium', stripEffort: false, vision: false },
88
+ { prefix: 'nemotron-3-super-free', maxEffort: 'high', stripEffort: false, vision: false },
100
89
  { prefix: 'nemotron-3-ultra-free', maxEffort: 'high', stripEffort: false, vision: false },
101
90
  { prefix: 'north-mini-code-free', maxEffort: 'high', stripEffort: false, vision: false },
102
91
  ]
@@ -513,8 +502,13 @@ function providerDefKeyConfigured(provider, env) {
513
502
  if (!provider || typeof provider !== 'object') return true
514
503
  const envVar = provider.apiKeyEnv
515
504
  if (typeof envVar !== 'string' || envVar === '') return true
516
- const key = env[envVar]
517
- return typeof key === 'string' && key.trim() !== ''
505
+ const candidates =
506
+ envVar === 'PANTHEON_OPENCODE_API_KEY' ? [envVar, 'OPENCODE_GO_API_KEY'] : [envVar]
507
+ for (const candidate of candidates) {
508
+ const key = env[candidate]
509
+ if (typeof key === 'string' && key.trim() !== '') return true
510
+ }
511
+ return false
518
512
  }
519
513
 
520
514
  /**
@@ -532,7 +526,6 @@ function providerDefKeyConfigured(provider, env) {
532
526
  * @returns {string|undefined} missing env var name, or undefined when usable
533
527
  */
534
528
  export function missingProviderKeyEnv(providerID, { env = process.env, routingPath } = {}) {
535
- if (providerID === 'opencode-go') return undefined
536
529
  const defs = loadPresetDefs(routingPath)
537
530
  for (const def of Object.values(defs)) {
538
531
  const provider = def?.providers?.[providerID]
@@ -583,7 +576,11 @@ export function applyPreset(config, resolved, { env = process.env } = {}) {
583
576
  config.provider[id] ??= {}
584
577
  config.provider[id].options ??= {}
585
578
  config.provider[id].options.baseURL = provider.baseURL
586
- config.provider[id].options.apiKey = env[provider.apiKeyEnv]
579
+ const apiKey =
580
+ provider.apiKeyEnv === 'PANTHEON_OPENCODE_API_KEY'
581
+ ? (env[provider.apiKeyEnv] ?? env.OPENCODE_GO_API_KEY)
582
+ : env[provider.apiKeyEnv]
583
+ config.provider[id].options.apiKey = apiKey
587
584
  }
588
585
 
589
586
  for (const [agent, spec] of Object.entries(resolved.agents ?? {})) {
@@ -272,9 +272,9 @@ export async function zeusDelegateWithRetry(
272
272
  report: string
273
273
  dispatchResult: DispatchResultLike
274
274
  }> {
275
- // 1. Create child session (parentID = caller). No model forwarding here —
276
- // delegation.ts resolves models via routing.yml; this helper uses the
277
- // bare SDK default unless opts.model is supplied (explicit caller intent).
275
+ // 1. Create child session (parentID = caller). When a model is resolved,
276
+ // the same model is forwarded to session.create and promptAsync; otherwise
277
+ // both requests omit it so the host keeps native model inheritance.
278
278
  let childID: string
279
279
  try {
280
280
  const created = await client.session.create({
@@ -310,10 +310,15 @@ export async function zeusDelegateWithRetry(
310
310
  // board.waitForTerminal, not via noReply — the spike refuted noReply.
311
311
  // A promptAsync failure is logged but does not abort the wait — the board
312
312
  // timeout will finalize the job.
313
+ const promptBody = {
314
+ agent: opts.agent,
315
+ ...(opts.model !== undefined ? { model: opts.model } : {}),
316
+ parts: [{ type: 'text' as const, text: opts.prompt }],
317
+ }
313
318
  void client.session
314
319
  .promptAsync({
315
320
  path: childPath.path,
316
- body: { agent: opts.agent, parts: [{ type: 'text', text: opts.prompt }] },
321
+ body: promptBody,
317
322
  })
318
323
  .catch((err: unknown) => {
319
324
  const reason = err instanceof Error ? err.message : String(err)
package/src/plugin.ts CHANGED
@@ -35,6 +35,7 @@ import { createReadEnhancer } from './pantheon/hashline/read-enhancer.ts'
35
35
  import { createHashlineEditTool } from './pantheon/hashline/tool.ts'
36
36
  import { createIdleDispatcher } from './pantheon/idle-continuation.ts'
37
37
  import { createPantheonLogger } from './pantheon/logger.ts'
38
+ import { createModelCommand } from './pantheon/model-command.ts'
38
39
  import { pantheonPluginOnce } from './pantheon/plugin-once.ts'
39
40
  import {
40
41
  applyActivePresetToConfig,
@@ -471,6 +472,7 @@ const plugin: Plugin = async (input: PluginInput) => {
471
472
  // Fully wired (unlike dispatch-guard, which is manual-orchestration-only
472
473
  // because opencode 1.18.x cannot intercept task completion via hooks).
473
474
  const costCommand = createCostCommand()
475
+ const modelCommand = createModelCommand()
474
476
 
475
477
  return {
476
478
  config: async (config: PluginConfig) => {
@@ -539,6 +541,8 @@ const plugin: Plugin = async (input: PluginInput) => {
539
541
  pantheon_goal_get: goalTools.pantheon_goal_get,
540
542
  // Wave 4 (PR #46): /cost — delegation cost report from opencode.db.
541
543
  pantheon_cost: costCommand.pantheon_cost,
544
+ // Deterministic /pantheon-model management of top-level model fields.
545
+ pantheon_model: modelCommand.pantheon_model,
542
546
  },
543
547
  'chat.message': async (hookInput, output) => {
544
548
  await vision.chatMessage(hookInput, output)
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","names":[],"sources":["../src/index.tsx"],"mappings":";;KAy6BY;;EAEV;;EAEA;;;;EAIA;;EAEA;EACA;;EASA;;EAEA;EACA;EACA;;EAEA;;;;EAIA;;;;;;;;;;;iBAsBc,wBACd,aACA,oBACA,qBACC;;;;;;iBAkHmB,sBAAsB,cAAc,QAAQ;;;;;;;;iBAwC5C,yBAAyB,eAAe,QAAQ;;;;;;;;iBAWtD,sBACd;EAAS;EAAoB;eAC7B;;;;;;iBAYc,YAAY;;;iBAMZ,WAAW;;;;iBAOX,yBAAyB,GAAG,iBAAiB,GAAG;;;;;iBAWhD,sBACd,cAAc,mBACd,sBACA,cACA,4BACC;;cASU;;;;cAKA;;;;;;;;;iBAUG,mBACd,OAAO,iBACP,aACA,uBACC;;;iBAWa,WAAW;;;iBAcX,kBAAkB,OAAO,iBAAiB;;;KAQ9C;iBAQI,mBAAmB,OAAO,kBAAkB;iBAc5C,wBAAwB,OAAO;;iBAoB/B,uBAAuB;;;;;;;iBAWvB,4BACd,mBAAmB,mBACnB,eAAe,wBACd;;KAmFS;EACV;EACA;EACA;EACA;EACA;EACA;IACE;IACA,QAAQ;IACR;IACA;IACA;MAAS;MAAgB;;;;;KAKjB;;EAEV;;EAEA;;EAEA;EACA;;EAEA;EACA;;EAEA;;EAEA;EACA;EACA;EACA;;EAEA;;;KAIU;EACV;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;;;;iBAac,wBACd,MAAM,oBACN,eACC;;;iBA+Ea,yBACd,KAAK,YAAY,sBACjB,MAAM,oBACN;;;iBA+Fc,sBACd,KAAK,YAAY,sBACjB;;;;;;iBAiBc,2BACd;EAAqB;EAAa;iBAClC,YAAY,uDACX;;;;;iBA2Ba,sBACd,KAAK,YAAY,sBACjB,gBAAgB,sBAChB;;;iBAWc,kBAAkB,MAAM,sBAAsB;;;;;;iBAqB9C,uBACd,eAAe,uBACf,aAAa,oBACZ;;;;;;;;;iBA8Da,iBAAiB,cAAc;;;;KAOnC;;EAEV;EACA;;IAEE;MAAU;;;IAEV;MAAU;QAAY;QAAe,SAAS;;;;;;;;;;iBASlC,wBAAwB,SAAS;;;;;;;;iBAmBjC,gBAAgB;EAAgB;IAAQ;;;;;;;iBASxC,kBAAkB;EAAkC;IAAQ;;;;KAKhE;;EAEV;;EAEA;;;EAGA;;;EAGA;EACA;IACE;IACA;;;;;;;iBAQY,mBAAmB;;;;;iBASnB,cAAc,OAAO;;;;;;;;;;;;;;iBAiBrB,4BACd,mBAAmB,mCACnB,aAAa,mBACb,eACC;;;;;;iBA0Ca,4BACd;EAAS,YAAY,cAAc,SAAS;eAC5C;;;;;KAiLU;EACV,KAAK,YAAY;;EAEjB;;EAEA;;cAucI,QAAQ;EAAoB"}
1
+ {"version":3,"file":"tui.d.ts","names":[],"sources":["../src/index.tsx"],"mappings":";;KAo7BY;;EAEV;;EAEA;;;;EAIA;;EAEA;EACA;;EASA;;EAEA;EACA;EACA;;EAEA;;;;EAIA;;;;;;;;;;;iBAsBc,wBACd,aACA,oBACA,qBACC;;;;;;iBAkHmB,sBAAsB,cAAc,QAAQ;;;;;;;;iBAwC5C,yBAAyB,eAAe,QAAQ;;;;;;;;iBAWtD,sBACd;EAAS;EAAoB;eAC7B;;;;;;iBAYc,YAAY;;;iBAMZ,WAAW;;;;iBAOX,yBAAyB,GAAG,iBAAiB,GAAG;;;;;iBAWhD,sBACd,cAAc,mBACd,sBACA,cACA,4BACC;;cASU;;;;cAKA;;;;;;;;;iBAUG,mBACd,OAAO,iBACP,aACA,uBACC;;;iBAWa,WAAW;;;iBAcX,kBAAkB,OAAO,iBAAiB;;;KAQ9C;iBAQI,mBAAmB,OAAO,kBAAkB;iBAc5C,wBAAwB,OAAO;;iBAoB/B,uBAAuB;;;;;;;iBAWvB,4BACd,mBAAmB,mBACnB,eAAe,wBACd;;KAmFS;EACV;EACA;EACA;EACA;EACA;EACA;IACE;IACA,QAAQ;IACR;IACA;IACA;MAAS;MAAgB;;;;;KAKjB;;EAEV;;EAEA;;EAEA;EACA;;EAEA;EACA;;EAEA;;EAEA;EACA;EACA;EACA;;EAEA;;;KAIU;EACV;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;;;;iBAac,wBACd,MAAM,oBACN,eACC;;;iBA+Ea,yBACd,KAAK,YAAY,sBACjB,MAAM,oBACN;;;iBA+Fc,sBACd,KAAK,YAAY,sBACjB;;;;;;iBAiBc,2BACd;EAAqB;EAAa;iBAClC,YAAY,uDACX;;;;;iBA2Ba,sBACd,KAAK,YAAY,sBACjB,gBAAgB,sBAChB;;;iBAWc,kBAAkB,MAAM,sBAAsB;;;;;;iBAqB9C,uBACd,eAAe,uBACf,aAAa,oBACZ;;;;;;;;;iBA8Da,iBAAiB,cAAc;;;;KAOnC;;EAEV;EACA;;IAEE;MAAU;;;IAEV;MAAU;QAAY;QAAe,SAAS;;;;;;;;;;iBASlC,wBAAwB,SAAS;;;;;;;;iBAmBjC,gBAAgB;EAAgB;IAAQ;;;;;;;iBASxC,kBAAkB;EAAkC;IAAQ;;;;KAKhE;;EAEV;;EAEA;;;EAGA;;;EAGA;EACA;IACE;IACA;;;;;;;iBAQY,mBAAmB;;;;;iBASnB,cAAc,OAAO;;;;;;;;;;;;;;iBAiBrB,4BACd,mBAAmB,mCACnB,aAAa,mBACb,eACC;;;;;;iBA0Ca,4BACd;EAAS,YAAY,cAAc,SAAS;eAC5C;;;;;KAiLU;EACV,KAAK,YAAY;;EAEjB;;EAEA;;cAucI,QAAQ;EAAoB"}
@@ -164,7 +164,7 @@ async function detectVersion(api) {
164
164
  if (ver) return ver;
165
165
  }
166
166
  } catch {}
167
- return null;
167
+ return "1.4.2";
168
168
  }
169
169
  /**
170
170
  * usage-bar — AI subscription usage gauge for the opencode TUI.
@@ -150,7 +150,7 @@ async function resolvePresetForTui(
150
150
  }
151
151
 
152
152
  /* ─── Version Detection ────────────────────────────────────
153
- * 100% dinâmico — zero fallback hardcoded.
153
+ * 100% dinâmico — fallback embutido em build (__PANTHEON_VERSION__).
154
154
  * Se falhar, retorna null e a View omite a versão.
155
155
  *
156
156
  * Try order:
@@ -159,7 +159,12 @@ async function resolvePresetForTui(
159
159
  * 1. api.client.file.read package.json
160
160
  * 2. git describe --tags
161
161
  * 3. opencode --version
162
- * 4. null */
162
+ * 4. __PANTHEON_VERSION__ (tsdown define — build-time embed)
163
+ * 5. null */
164
+
165
+ // Build-time embedded version (tsdown `define` in tsdown.config.ts). Injected
166
+ // only into the bundled dist/tui.js; the raw dist/tui.tsx copy falls through.
167
+ declare const __PANTHEON_VERSION__: string | undefined
163
168
 
164
169
  async function detectVersion(api: TuiPluginApi): Promise<string | null> {
165
170
  // Try 0a: installed location (2 levels: dist/tui.js → pantheon-tui/package.json)
@@ -223,6 +228,12 @@ async function detectVersion(api: TuiPluginApi): Promise<string | null> {
223
228
  /* fall through */
224
229
  }
225
230
 
231
+ // Try 4: build-time embedded version (tsdown define) — last-resort fallback
232
+ // so the sidebar ALWAYS shows a version even when every probe above fails.
233
+ if (typeof __PANTHEON_VERSION__ !== 'undefined' && __PANTHEON_VERSION__) {
234
+ return __PANTHEON_VERSION__
235
+ }
236
+
226
237
  return null // sem fallback — versão não aparece
227
238
  }
228
239
 
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pantheon-tui",
3
3
  "type": "module",
4
- "version": "1.4.1",
4
+ "version": "1.4.2",
5
5
  "description": "Pantheon TUI plugin — sidebar (version, preset, sessions, real-time delegations) + AI subscription usage gauges incl. OpenCode Go/Zen dollar limits (vendored, MIT)",
6
6
  "license": "MIT",
7
7
  "exports": {
@@ -150,7 +150,7 @@ async function resolvePresetForTui(
150
150
  }
151
151
 
152
152
  /* ─── Version Detection ────────────────────────────────────
153
- * 100% dinâmico — zero fallback hardcoded.
153
+ * 100% dinâmico — fallback embutido em build (__PANTHEON_VERSION__).
154
154
  * Se falhar, retorna null e a View omite a versão.
155
155
  *
156
156
  * Try order:
@@ -159,7 +159,12 @@ async function resolvePresetForTui(
159
159
  * 1. api.client.file.read package.json
160
160
  * 2. git describe --tags
161
161
  * 3. opencode --version
162
- * 4. null */
162
+ * 4. __PANTHEON_VERSION__ (tsdown define — build-time embed)
163
+ * 5. null */
164
+
165
+ // Build-time embedded version (tsdown `define` in tsdown.config.ts). Injected
166
+ // only into the bundled dist/tui.js; the raw dist/tui.tsx copy falls through.
167
+ declare const __PANTHEON_VERSION__: string | undefined
163
168
 
164
169
  async function detectVersion(api: TuiPluginApi): Promise<string | null> {
165
170
  // Try 0a: installed location (2 levels: dist/tui.js → pantheon-tui/package.json)
@@ -223,6 +228,12 @@ async function detectVersion(api: TuiPluginApi): Promise<string | null> {
223
228
  /* fall through */
224
229
  }
225
230
 
231
+ // Try 4: build-time embedded version (tsdown define) — last-resort fallback
232
+ // so the sidebar ALWAYS shows a version even when every probe above fails.
233
+ if (typeof __PANTHEON_VERSION__ !== 'undefined' && __PANTHEON_VERSION__) {
234
+ return __PANTHEON_VERSION__
235
+ }
236
+
226
237
  return null // sem fallback — versão não aparece
227
238
  }
228
239
 
@@ -1,6 +1,14 @@
1
+ import { readFileSync } from 'node:fs'
2
+ import { join } from 'node:path'
3
+ import { fileURLToPath } from 'node:url'
1
4
  import solid from 'rolldown-plugin-solid'
2
5
  import { defineConfig } from 'tsdown'
3
6
 
7
+ const __dirname = fileURLToPath(new URL('.', import.meta.url))
8
+ const pkg = JSON.parse(readFileSync(join(__dirname, 'package.json'), 'utf8')) as {
9
+ version: string
10
+ }
11
+
4
12
  export default defineConfig({
5
13
  entry: { tui: 'src/index.tsx', server: 'src/server.ts' },
6
14
  format: ['esm'],
@@ -8,6 +16,9 @@ export default defineConfig({
8
16
  outDir: 'dist',
9
17
  clean: true,
10
18
  outExtensions: () => ({ js: '.js' }),
19
+ define: {
20
+ __PANTHEON_VERSION__: JSON.stringify(pkg.version),
21
+ },
11
22
  plugins: [
12
23
  solid({
13
24
  solid: {
package/src/routing.yml CHANGED
@@ -1,35 +1,31 @@
1
1
  version: 1.0
2
2
  presets:
3
- go-deepseek:
4
- description: "DeepSeek tiering via OpenCode Zen: V4 Pro for planners/reviewers (free on Zen), V4 Flash for implementers, V4 Flash Free for scouts. Vision turns route to MiniMax M3 (opencode-go; Qwen3.7 Plus image input fails on the Go gateway — opencode#29956). Prices verified 2026-08."
3
+ go-free:
4
+ description: "Free-tier lineup via OpenCode Zen 2026: big-pickle orchestrator, nemotron-3-super-free planner, qwen3.6-plus-free reviewer, deepseek-v4-flash-free implementers, mimo-v2.5-free scouts. Only -free suffix models; quota, availability and pricing depend on Zen account. 2026 pricing verified."
5
5
  vision:
6
- model: opencode-go/minimax-m3
7
- reasoning_effort: medium
6
+ model: opencode/mimo-v2.5-free
7
+ reasoning_effort: low
8
8
  providers:
9
9
  opencode:
10
10
  baseURL: https://opencode.ai/zen/v1
11
11
  apiKeyEnv: PANTHEON_OPENCODE_API_KEY
12
- opencode-go:
13
- baseURL: https://opencode.ai/zen/go/v1
14
- apiKeyEnv: PANTHEON_OPENCODE_API_KEY
15
12
  agents:
16
- athena: { model: opencode/deepseek-v4-pro, reasoning_effort: high, fallback_models: [opencode/mimo-v2.5] }
17
- # themis (PR #46 W4): phase reviews run on v4-flash (cost/empty-signature fix); pro only for the FINAL gate (manual override).
18
- themis: { model: opencode/deepseek-v4-flash, reasoning_effort: high, fallback_models: [opencode/mimo-v2.5] }
19
- zeus: { model: opencode/deepseek-v4-flash, reasoning_effort: medium, fallback_models: [opencode/mimo-v2.5] }
20
- hermes: { model: opencode/deepseek-v4-flash, reasoning_effort: medium, fallback_models: [opencode/mimo-v2.5] }
21
- aphrodite: { model: opencode/deepseek-v4-flash, reasoning_effort: medium, fallback_models: [opencode/mimo-v2.5] }
22
- demeter: { model: opencode/deepseek-v4-flash, reasoning_effort: medium, fallback_models: [opencode/mimo-v2.5] }
23
- prometheus: { model: opencode/deepseek-v4-flash, reasoning_effort: medium, fallback_models: [opencode/mimo-v2.5] }
24
- hephaestus: { model: opencode/deepseek-v4-flash, reasoning_effort: medium, fallback_models: [opencode/mimo-v2.5] }
25
- apollo: { model: opencode/deepseek-v4-flash-free, reasoning_effort: low, fallback_models: [opencode/mimo-v2.5] }
26
- nyx: { model: opencode/deepseek-v4-flash-free, reasoning_effort: low, fallback_models: [opencode/mimo-v2.5] }
27
- gaia: { model: opencode/deepseek-v4-flash-free, reasoning_effort: low, fallback_models: [opencode/mimo-v2.5] }
28
- iris: { model: opencode/deepseek-v4-flash-free, reasoning_effort: low, fallback_models: [opencode/mimo-v2.5] }
29
- mnemosyne: { model: opencode/deepseek-v4-flash-free, reasoning_effort: low, fallback_models: [opencode/mimo-v2.5] }
30
- talos: { model: opencode/deepseek-v4-flash-free, reasoning_effort: low, fallback_models: [opencode/mimo-v2.5] }
13
+ zeus: { model: opencode/big-pickle, reasoning_effort: medium }
14
+ athena: { model: opencode/nemotron-3-super-free, reasoning_effort: high }
15
+ themis: { model: opencode/qwen3.6-plus-free, reasoning_effort: high }
16
+ hermes: { model: opencode/deepseek-v4-flash-free, reasoning_effort: medium }
17
+ aphrodite: { model: opencode/deepseek-v4-flash-free, reasoning_effort: medium }
18
+ demeter: { model: opencode/deepseek-v4-flash-free, reasoning_effort: medium }
19
+ prometheus: { model: opencode/deepseek-v4-flash-free, reasoning_effort: medium }
20
+ hephaestus: { model: opencode/deepseek-v4-flash-free, reasoning_effort: medium }
21
+ apollo: { model: opencode/mimo-v2.5-free, reasoning_effort: low }
22
+ nyx: { model: opencode/mimo-v2.5-free, reasoning_effort: low }
23
+ gaia: { model: opencode/mimo-v2.5-free, reasoning_effort: low }
24
+ iris: { model: opencode/mimo-v2.5-free, reasoning_effort: low }
25
+ mnemosyne: { model: opencode/mimo-v2.5-free, reasoning_effort: low }
26
+ talos: { model: opencode/mimo-v2.5-free, reasoning_effort: low }
31
27
  go-fast:
32
- description: "All 14 agents on DeepSeek V4 Flash via OpenCode Go with reasoning_effort low everywhere. Fastest tier. Vision turns route to MiniMax M2.5 (mimo-v2.5). Prices verified 2026-08."
28
+ description: "Low-latency OpenCode Go profile 2026: kimi-k2.7-code and glm-5.3-flash planners, gpt-5.6-luna / mimo-v2.5 / deepseek-v4-flash implementers, gpt-5.6-luna-fast scouts. All via Go gateway https://opencode.ai/zen/go/v1. Pricing 2026."
33
29
  vision:
34
30
  model: opencode-go/mimo-v2.5
35
31
  reasoning_effort: low
@@ -38,116 +34,68 @@ presets:
38
34
  baseURL: https://opencode.ai/zen/go/v1
39
35
  apiKeyEnv: PANTHEON_OPENCODE_API_KEY
40
36
  agents:
41
- athena: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
42
- themis: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
43
- zeus: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
44
- hermes: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
45
- aphrodite: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
46
- demeter: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
47
- prometheus: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
48
- hephaestus: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
49
- apollo: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
50
- nyx: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
51
- gaia: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
52
- iris: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
53
- mnemosyne: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
54
- talos: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
55
- go-claude:
56
- description: "Anthropic Claude tiering: Opus 4.8 for planners/reviewers, Sonnet 5 for implementers, Haiku 4.5 for scouts. Vision turns route to Sonnet 5 (native image support). Prices verified 2026-07."
57
- vision:
58
- model: anthropic/claude-sonnet-5
59
- reasoning_effort: medium
60
- providers:
61
- anthropic:
62
- baseURL: https://api.anthropic.com
63
- apiKeyEnv: PANTHEON_ANTHROPIC_API_KEY
64
- agents:
65
- athena: { model: anthropic/claude-opus-4-8, reasoning_effort: high }
66
- themis: { model: anthropic/claude-opus-4-8, reasoning_effort: high }
67
- zeus: { model: anthropic/claude-sonnet-5, reasoning_effort: medium }
68
- hermes: { model: anthropic/claude-sonnet-5, reasoning_effort: medium }
69
- aphrodite: { model: anthropic/claude-sonnet-5, reasoning_effort: medium }
70
- demeter: { model: anthropic/claude-sonnet-5, reasoning_effort: medium }
71
- prometheus: { model: anthropic/claude-sonnet-5, reasoning_effort: medium }
72
- hephaestus: { model: anthropic/claude-sonnet-5, reasoning_effort: medium }
73
- apollo: { model: anthropic/claude-haiku-4-5, reasoning_effort: low }
74
- nyx: { model: anthropic/claude-haiku-4-5, reasoning_effort: low }
75
- gaia: { model: anthropic/claude-haiku-4-5, reasoning_effort: low }
76
- iris: { model: anthropic/claude-haiku-4-5, reasoning_effort: low }
77
- mnemosyne: { model: anthropic/claude-haiku-4-5, reasoning_effort: low }
78
- talos: { model: anthropic/claude-haiku-4-5, reasoning_effort: low }
79
- go-openai:
80
- description: "OpenAI GPT-5.6 family tiering: Sol for planners/reviewers, Terra for implementers, Luna Fast for scouts. Vision turns route to GPT-5.6 Sol. Prices verified 2026-07."
81
- vision:
82
- model: openai/gpt-5.6-sol
83
- reasoning_effort: high
84
- providers:
85
- openai:
86
- baseURL: https://api.openai.com/v1
87
- apiKeyEnv: PANTHEON_OPENAI_API_KEY
88
- agents:
89
- athena: { model: openai/gpt-5.6-sol, reasoning_effort: high }
90
- themis: { model: openai/gpt-5.6-sol, reasoning_effort: high }
91
- zeus: { model: openai/gpt-5.6-terra, reasoning_effort: medium }
92
- hermes: { model: openai/gpt-5.6-terra, reasoning_effort: medium }
93
- aphrodite: { model: openai/gpt-5.6-terra, reasoning_effort: medium }
94
- demeter: { model: openai/gpt-5.6-terra, reasoning_effort: medium }
95
- prometheus: { model: openai/gpt-5.6-terra, reasoning_effort: medium }
96
- hephaestus: { model: openai/gpt-5.6-terra, reasoning_effort: medium }
97
- apollo: { model: openai/gpt-5.6-luna-fast, reasoning_effort: low }
98
- nyx: { model: openai/gpt-5.6-luna-fast, reasoning_effort: low }
99
- gaia: { model: openai/gpt-5.6-luna-fast, reasoning_effort: low }
100
- iris: { model: openai/gpt-5.6-luna-fast, reasoning_effort: low }
101
- mnemosyne: { model: openai/gpt-5.6-luna-fast, reasoning_effort: low }
102
- talos: { model: openai/gpt-5.6-luna-fast, reasoning_effort: low }
37
+ athena: { model: opencode-go/kimi-k2.7-code, reasoning_effort: high }
38
+ themis: { model: opencode-go/glm-5.3-flash, reasoning_effort: high }
39
+ zeus: { model: opencode-go/kimi-k2.7-code, reasoning_effort: medium }
40
+ hermes: { model: opencode-go/deepseek-v4-flash, reasoning_effort: medium }
41
+ aphrodite: { model: opencode-go/mimo-v2.5, reasoning_effort: low }
42
+ demeter: { model: opencode-go/gpt-5.6-luna, reasoning_effort: low }
43
+ prometheus: { model: opencode-go/deepseek-v4-flash, reasoning_effort: medium }
44
+ hephaestus: { model: opencode-go/mimo-v2.5, reasoning_effort: low }
45
+ apollo: { model: opencode-go/gpt-5.6-luna-fast, reasoning_effort: low }
46
+ nyx: { model: opencode-go/gpt-5.6-luna-fast, reasoning_effort: low }
47
+ gaia: { model: opencode-go/gpt-5.6-luna-fast, reasoning_effort: low }
48
+ iris: { model: opencode-go/gpt-5.6-luna-fast, reasoning_effort: low }
49
+ mnemosyne: { model: opencode-go/gpt-5.6-luna-fast, reasoning_effort: low }
50
+ talos: { model: opencode-go/gpt-5.6-luna-fast, reasoning_effort: low }
103
51
  go-premium:
104
- description: "Pantheon premium lineup on OpenCode Go (subscription): GLM-5.1 orchestrator, DeepSeek V4 Pro planner, Qwen3.7 Max reviewer, Kimi K2.6 designer, MiniMax M2.7 implementers, DeepSeek V4 Flash scouts. Vision turns route to MiniMax M3 (multimodal; Qwen3.7 Plus image input fails on the Go gateway — opencode#29956). Ported from Oh-My-OpenAgent 'opencode-go' preset. Requires OpenCode Go subscription. Prices verified 2026-08."
52
+ description: "Premium lineup on OpenCode Go 2026: gpt-5.6-sol / qwen3.8-max / deepseek-v4-pro planners, gpt-5.6-terra / kimi-k3 implementers, gpt-5.6-luna scouts. Vision via gpt-5.6-sol. Pricing 2026."
105
53
  vision:
106
- model: opencode-go/minimax-m3
107
- reasoning_effort: medium
54
+ model: opencode-go/gpt-5.6-sol
55
+ reasoning_effort: high
108
56
  providers:
109
57
  opencode-go:
110
58
  baseURL: https://opencode.ai/zen/go/v1
111
59
  apiKeyEnv: PANTHEON_OPENCODE_API_KEY
112
60
  agents:
113
- zeus: { model: opencode-go/glm-5.1, reasoning_effort: medium }
114
- athena: { model: opencode-go/deepseek-v4-pro, reasoning_effort: high }
115
- themis: { model: opencode-go/qwen3.7-max, reasoning_effort: high }
116
- hermes: { model: opencode-go/minimax-m2.7, reasoning_effort: medium }
117
- aphrodite: { model: opencode-go/kimi-k2.6, reasoning_effort: medium }
118
- demeter: { model: opencode-go/qwen3.7-plus, reasoning_effort: medium }
119
- prometheus: { model: opencode-go/glm-5.2, reasoning_effort: medium }
120
- hephaestus: { model: opencode-go/minimax-m2.7, reasoning_effort: medium }
121
- apollo: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
122
- nyx: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
123
- gaia: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
124
- iris: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
125
- mnemosyne: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
126
- talos: { model: opencode-go/deepseek-v4-flash, reasoning_effort: low }
127
- go-free:
128
- description: "Pantheon free lineup on OpenCode Zen free tier, $0: Big Pickle orchestrator, Nemotron 3 Ultra Free planner, North Mini Code scouts. Vision turns route to MiniMax M2.5 Free (mimo-v2.5-free, multimodal on Zen free). Ported from Oh-My-OpenAgent 'zen-free' preset. CAUTION: nemotron-3-ultra-free has known intermittent failures (opencode#38028) — switch to go-fast if flaky. Prices verified 2026-08."
61
+ zeus: { model: opencode-go/gpt-5.6-sol, reasoning_effort: medium }
62
+ athena: { model: opencode-go/deepseek-v4-pro, reasoning_effort: high }
63
+ themis: { model: opencode-go/qwen3.8-max, reasoning_effort: high }
64
+ hermes: { model: opencode-go/gpt-5.6-terra, reasoning_effort: medium }
65
+ aphrodite: { model: opencode-go/kimi-k3, reasoning_effort: medium }
66
+ demeter: { model: opencode-go/gpt-5.6-terra, reasoning_effort: medium }
67
+ prometheus: { model: opencode-go/kimi-k3, reasoning_effort: medium }
68
+ hephaestus: { model: opencode-go/gpt-5.6-terra, reasoning_effort: medium }
69
+ apollo: { model: opencode-go/gpt-5.6-luna, reasoning_effort: low }
70
+ nyx: { model: opencode-go/gpt-5.6-luna, reasoning_effort: low }
71
+ gaia: { model: opencode-go/gpt-5.6-luna, reasoning_effort: low }
72
+ iris: { model: opencode-go/gpt-5.6-luna, reasoning_effort: low }
73
+ mnemosyne: { model: opencode-go/gpt-5.6-luna, reasoning_effort: low }
74
+ talos: { model: opencode-go/gpt-5.6-luna, reasoning_effort: low }
75
+ openai:
76
+ description: "Pure OpenAI provider 2026: gpt-5.6-sol planners high, gpt-5.6-luna implementers high, gpt-5.6-luna-fast scouts low (fallback to luna low). Provider openai https://api.openai.com/v1 OPENAI_API_KEY. Pricing 2026."
129
77
  vision:
130
- model: opencode/mimo-v2.5-free
131
- reasoning_effort: low
78
+ model: openai/gpt-5.6-sol
79
+ reasoning_effort: high
132
80
  providers:
133
- opencode:
134
- baseURL: https://opencode.ai/zen/v1
135
- apiKeyEnv: PANTHEON_OPENCODE_API_KEY
81
+ openai:
82
+ baseURL: https://api.openai.com/v1
83
+ apiKeyEnv: OPENAI_API_KEY
136
84
  agents:
137
- zeus: { model: opencode/big-pickle, reasoning_effort: medium }
138
- athena: { model: opencode/nemotron-3-ultra-free, reasoning_effort: high }
139
- themis: { model: opencode/deepseek-v4-flash-free, reasoning_effort: high }
140
- hermes: { model: opencode/deepseek-v4-flash-free, reasoning_effort: medium }
141
- aphrodite: { model: opencode/deepseek-v4-flash-free, reasoning_effort: medium }
142
- demeter: { model: opencode/deepseek-v4-flash-free, reasoning_effort: medium }
143
- prometheus: { model: opencode/deepseek-v4-flash-free, reasoning_effort: medium }
144
- hephaestus: { model: opencode/deepseek-v4-flash-free, reasoning_effort: medium }
145
- apollo: { model: opencode/north-mini-code-free, reasoning_effort: low }
146
- nyx: { model: opencode/north-mini-code-free, reasoning_effort: low }
147
- gaia: { model: opencode/north-mini-code-free, reasoning_effort: low }
148
- iris: { model: opencode/north-mini-code-free, reasoning_effort: low }
149
- mnemosyne: { model: opencode/north-mini-code-free, reasoning_effort: low }
150
- talos: { model: opencode/north-mini-code-free, reasoning_effort: low }
85
+ athena: { model: openai/gpt-5.6-sol, reasoning_effort: high }
86
+ themis: { model: openai/gpt-5.6-sol, reasoning_effort: high }
87
+ zeus: { model: openai/gpt-5.6-sol, reasoning_effort: high }
88
+ hermes: { model: openai/gpt-5.6-luna, reasoning_effort: high }
89
+ aphrodite: { model: openai/gpt-5.6-luna, reasoning_effort: high }
90
+ demeter: { model: openai/gpt-5.6-luna, reasoning_effort: high }
91
+ prometheus: { model: openai/gpt-5.6-luna, reasoning_effort: high }
92
+ hephaestus: { model: openai/gpt-5.6-luna, reasoning_effort: high }
93
+ apollo: { model: openai/gpt-5.6-luna-fast, reasoning_effort: low }
94
+ nyx: { model: openai/gpt-5.6-luna-fast, reasoning_effort: low }
95
+ gaia: { model: openai/gpt-5.6-luna-fast, reasoning_effort: low }
96
+ iris: { model: openai/gpt-5.6-luna-fast, reasoning_effort: low }
97
+ mnemosyne: { model: openai/gpt-5.6-luna-fast, reasoning_effort: low }
98
+ talos: { model: openai/gpt-5.6-luna-fast, reasoning_effort: low }
151
99
  agents:
152
100
  zeus:
153
101
  role: Central orchestrator