pantheon-opencode 1.6.0-beta.10 → 1.6.0-beta.11

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.
Files changed (46) hide show
  1. package/AGENTS.global.md +42 -18
  2. package/AGENTS.md +1 -1
  3. package/CHANGELOG.md +24 -0
  4. package/README.md +66 -21
  5. package/bin/pantheon-init.mjs +44 -1
  6. package/package.json +4 -4
  7. package/plugin.json +1 -1
  8. package/pyproject.toml +1 -1
  9. package/scripts/build-agents-md.mjs +60 -6
  10. package/scripts/install/backup.mjs +475 -0
  11. package/scripts/install/cli-ui.mjs +6 -1
  12. package/scripts/install/exit-codes.mjs +26 -0
  13. package/scripts/install/interactive.mjs +15 -1
  14. package/scripts/install/migrate.mjs +41 -22
  15. package/scripts/install/opencode.mjs +562 -50
  16. package/scripts/install/plan.mjs +287 -0
  17. package/scripts/install/plugin.mjs +22 -8
  18. package/scripts/install/shared.mjs +89 -55
  19. package/scripts/install/strings.mjs +20 -0
  20. package/scripts/install/venv.mjs +13 -3
  21. package/scripts/install/vision-prompt.mjs +11 -1
  22. package/scripts/mcp_persistence.py +50 -15
  23. package/scripts/prune.mjs +9 -3
  24. package/scripts/restore.mjs +222 -0
  25. package/skills-lock.json +1 -1
  26. package/src/agents/iris.md +6 -0
  27. package/src/agents/zeus.md +19 -62
  28. package/src/instructions/agent-return-format.instructions.md +17 -15
  29. package/src/instructions/memory-protocol.instructions.md +3 -2
  30. package/src/instructions/test-economy.instructions.md +21 -0
  31. package/src/instructions/zeus-anti-stall.instructions.md +6 -6
  32. package/src/instructions/zeus-council-synthesis.instructions.md +10 -11
  33. package/src/instructions/zeus-memory-operations.instructions.md +10 -6
  34. package/src/instructions/zeus-timeout-retry.instructions.md +28 -9
  35. package/src/mcp/mcp_persistence.py +50 -15
  36. package/src/pantheon/cost-command.ts +5 -2
  37. package/src/pantheon/model-agents.ts +19 -0
  38. package/src/pantheon/model-command.ts +218 -56
  39. package/src/pantheon/v2-model-overrides.ts +275 -0
  40. package/src/pantheon/v2-tools.ts +18 -29
  41. package/src/plugin-v2.ts +13 -0
  42. package/src/plugins/tui/dist/tui-v2.js +2 -2
  43. package/src/plugins/tui/dist/tui.js +1 -1
  44. package/src/plugins/tui/package-lock.json +2 -2
  45. package/src/plugins/tui/package.json +1 -1
  46. package/src/skills/auto-continue/SKILL.md +14 -6
@@ -311,7 +311,7 @@ async function executeCost(
311
311
 
312
312
  // ─── pantheon_model ─────────────────────────────────────────────────────
313
313
 
314
- /** JSON Schema for `pantheon_model`, mirroring the V1 zod args. */
314
+ /** JSON Schema for V2 `pantheon_model`; global scope is intentionally absent. */
315
315
  const MODEL_INPUT: Record<string, unknown> = {
316
316
  type: 'object',
317
317
  additionalProperties: false,
@@ -330,39 +330,27 @@ const MODEL_INPUT: Record<string, unknown> = {
330
330
  },
331
331
  scope: {
332
332
  type: 'string',
333
- enum: ['project', 'global'],
334
- description: 'Scope for active-preset.json (default project).',
335
- },
336
- confirm: {
337
- type: 'boolean',
338
- description: 'Explicit confirmation for a mutating operation; required for global changes.',
339
- },
340
- authorize_global: {
341
- type: 'boolean',
342
- description: 'Separate authorization for global configuration; not implied by confirm.',
333
+ enum: ['project'],
334
+ description: 'Project scope only; global overrides are not supported in V2.',
343
335
  },
344
336
  },
345
337
  }
346
338
 
347
- const WIZARD_UNAVAILABLE =
348
- 'the interactive wizard has no user in the V2 tool surface — pass action="status" to read ' +
349
- 'the current overrides, or pass agent and model explicitly for action="set"'
350
-
351
- /**
352
- * The V1 command falls back to an interactive readline prompt when invoked
353
- * with no arguments. A tool call has no user at the terminal, so that fallback
354
- * would block the call until it timed out. `ask` is injected to refuse
355
- * deterministically instead, which routes through the command's own
356
- * `wizard canceled` error path rather than forking its logic.
357
- */
358
- const modelCommand = createModelCommand({
359
- ask: () => Promise.reject(new Error(WIZARD_UNAVAILABLE)),
360
- })
339
+ const modelCommand = createModelCommand({ v2Mode: true })
361
340
 
362
341
  async function executeModel(
363
342
  input: Record<string, unknown>,
364
343
  context: unknown,
365
344
  ): Promise<V2ToolResult> {
345
+ if (input.scope !== undefined && input.scope !== 'project') {
346
+ return { output: 'Error: V2 pantheon_model is project-only; global scope is not supported.' }
347
+ }
348
+ if (Object.hasOwn(input, 'confirm') || Object.hasOwn(input, 'authorize_global')) {
349
+ return {
350
+ output:
351
+ 'Error: V2 pantheon_model does not accept authorization flags; global authorization is not supported by this tool.',
352
+ }
353
+ }
366
354
  // The V1 tool validates its own args (zod) and reports failures as text.
367
355
  const output = await modelCommand.pantheon_model.execute(
368
356
  input as Parameters<typeof modelCommand.pantheon_model.execute>[0],
@@ -415,10 +403,11 @@ export function createV2ToolDefinitions(visionRuntime?: V2VisionRuntime): V2Tool
415
403
  {
416
404
  name: 'pantheon_model',
417
405
  description:
418
- 'Show, set, or reset per-agent model overrides in active-preset.json (project or global). ' +
419
- 'Overrides win over preset; env preset wins over file. Never writes .env or top-level ' +
420
- 'model/small_model. Pass action="status" to read the current overrides; unlike the V1 ' +
421
- 'command there is no interactive wizard on this surface.',
406
+ 'Show, set, or reset explicit per-agent project-scoped model overrides in active-preset.json. ' +
407
+ 'V2 ignores static preset names and PANTHEON_MODEL_PRESET; no wizard or implicit model ' +
408
+ 'selection. Global overrides are not read or written in V2; future global support requires ' +
409
+ 'separate explicit authorization. Pass action="status" to read project-scoped overrides. ' +
410
+ 'Never writes .env or top-level model/small_model.',
422
411
  input: MODEL_INPUT,
423
412
  output: {},
424
413
  execute: executeModel,
package/src/plugin-v2.ts CHANGED
@@ -110,6 +110,7 @@ import {
110
110
  v2ResourceTarget,
111
111
  } from './pantheon/v2-delegation-enforce.ts'
112
112
  import { createV2ExecuteAfter, resolveV2SandboxConfig } from './pantheon/v2-execute-after.ts'
113
+ import { applyV2ModelOverrides, readV2ModelConfiguration } from './pantheon/v2-model-overrides.ts'
113
114
  import { createV2ToolDefinitions, type V2ToolResult } from './pantheon/v2-tools.ts'
114
115
  import { V2_UNSUPPORTED_FEATURE_SEED } from './pantheon/v2-unsupported.mjs'
115
116
  import { buildV2VisionPromptContext, type V2VisionRuntime } from './pantheon/v2-vision.ts'
@@ -351,6 +352,18 @@ function transformAgents(draft: AgentDraft): void {
351
352
  markUnsupported('agent-transform-list')
352
353
  return
353
354
  }
355
+ try {
356
+ const modelConfiguration = readV2ModelConfiguration()
357
+ if (modelConfiguration.warnings.length > 0) {
358
+ // The V2 server PluginContext has no documented user-visible notification
359
+ // or logging channel; preserve the degradation for status diagnostics.
360
+ markUnsupported('agent-model-overrides')
361
+ }
362
+ applyV2ModelOverrides(draft, modelConfiguration.overrides)
363
+ } catch {
364
+ // Model configuration is optional. Preserve host models if it cannot be read.
365
+ markUnsupported('agent-model-overrides')
366
+ }
354
367
  try {
355
368
  for (const agent of agents) {
356
369
  draft.update(agent.id, (current) => {
@@ -477,7 +477,7 @@ function Sidebar(props) {
477
477
  setProp(_el$, "width", "100%");
478
478
  setProp(_el$, "padding", 1);
479
479
  setProp(_el$2, "attributes", 1);
480
- insert(_el$2, `Pantheon v1.6.0-beta.10`);
480
+ insert(_el$2, `Pantheon v1.6.0-beta.11`);
481
481
  insertNode(_el$3, createTextNode(`OpenCode V2 · plugin TUI ativo`));
482
482
  insert(_el$, createComponent(Show, {
483
483
  get when() {
@@ -623,7 +623,7 @@ function HomeStatus(props) {
623
623
  const muted = () => props.context.theme?.text?.muted ?? props.context.theme?.text?.base;
624
624
  return (() => {
625
625
  var _el$20 = createElement("text");
626
- insert(_el$20, () => `Pantheon v1.6.0-beta.10${preset().name ? ` ⚡ ${preset().name}` : ""}`);
626
+ insert(_el$20, () => `Pantheon v1.6.0-beta.11${preset().name ? ` ⚡ ${preset().name}` : ""}`);
627
627
  effect((_$p) => setProp(_el$20, "fg", muted(), _$p));
628
628
  return _el$20;
629
629
  })();
@@ -167,7 +167,7 @@ async function detectVersion(api) {
167
167
  if (ver) return ver;
168
168
  }
169
169
  } catch {}
170
- return "1.6.0-beta.10";
170
+ return "1.6.0-beta.11";
171
171
  }
172
172
  /**
173
173
  * usage-bar — AI subscription usage gauge for the opencode TUI.
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pantheon-tui",
3
- "version": "1.6.0-beta.10",
3
+ "version": "1.6.0-beta.11",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pantheon-tui",
9
- "version": "1.6.0-beta.10",
9
+ "version": "1.6.0-beta.11",
10
10
  "license": "MIT",
11
11
  "dependencies": {
12
12
  "@opencode-ai/plugin": "1.18.33",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pantheon-tui",
3
3
  "type": "module",
4
- "version": "1.6.0-beta.10",
4
+ "version": "1.6.0-beta.11",
5
5
  "description": "Pantheon TUI plugin — V1 rich sidebar and usage gauges; native V2 status, session and delegation sidebar",
6
6
  "license": "MIT",
7
7
  "engines": {
@@ -55,16 +55,16 @@ Full-auto may continue only within a task and scope the user explicitly authoriz
55
55
  ## Implementation Pattern
56
56
 
57
57
  ```
58
- 1. Create todos only for multi-step work; a one-step fix needs no todo ceremony
59
- 2. Mark first todo in_progress
60
- 3. Complete work → mark completed immediately
61
- 4. Mark next todo in_progress → repeat
58
+ 1. Create a checklist only for multi-step work; a one-step fix needs no todo ceremony
59
+ 2. Use native todo operations only when a todo-write tool is visible in the active session; otherwise keep the checklist explicit in the conversation
60
+ 3. Mark work complete in the available checklist as soon as it is done
61
+ 4. Do not claim that the native todo list was updated when no todo-write tool is exposed
62
62
  5. Do NOT ask "should I continue?" between clear steps
63
63
  6. Stop at any applicable risk gate; do not require a plan/review gate for a low-risk edit
64
64
  7. After gate approval, resume with next todo
65
65
  ```
66
66
 
67
- **Never batch-complete todos.** Mark each completed as soon as done.
67
+ **Never batch-complete checklist items.** Mark each completed as soon as done; do not imply a tool call occurred unless it did.
68
68
 
69
69
  ---
70
70
 
@@ -107,6 +107,14 @@ Only expand to full cooldown when hitting a mandatory gate.
107
107
 
108
108
  ## Timeout & Retry Enforcement
109
109
 
110
+ Delegate through the root `subagent` tool observed in the Beta 10 runtime. `task()` is
111
+ host/API terminology, not an assumed root tool; call shape and background support are
112
+ runtime-dependent. Prefer synchronous dispatch unless the active schema exposes background
113
+ and the host provides an observable completion notification. Do not assume `task_status`,
114
+ `cancel_task`, or board-based tracking/recovery tools are available. When no completion
115
+ mechanism is observable, use synchronous dispatch or state the limitation; do not claim
116
+ that jobs are being tracked or recovered.
117
+
110
118
  When a delegated agent does not respond in time, enforce the timeout policy defined in
111
119
  `src/instructions/zeus-timeout-retry.instructions.md`.
112
120
 
@@ -128,7 +136,7 @@ When dispatching, set the expectation explicitly:
128
136
 
129
137
  ### Timeout Tracking Table
130
138
 
131
- Maintain a mental table of in-flight delegations:
139
+ Maintain an in-context (not persistent/native) checklist of delegations when needed:
132
140
 
133
141
  | Agent | Started | Timeout | Status | Partial OK? |
134
142
  |-------|---------|---------|--------|-------------|