pantheon-opencode 1.5.0-beta.8 → 1.5.0
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.
- package/AGENTS.md +14 -63
- package/CHANGELOG.md +320 -0
- package/README.md +14 -27
- package/README.pt-BR.md +5 -6
- package/commands/pantheon.md +1 -35
- package/package.json +1 -2
- package/plugin.json +1 -1
- package/pyproject.toml +2 -5
- package/scripts/doctor.mjs +32 -3
- package/scripts/install/plugin.mjs +9 -12
- package/scripts/mcp_persistence_server.py +1 -1
- package/scripts/sync-tui.mjs +8 -11
- package/src/agents/apollo.md +1 -0
- package/src/agents/gaia.md +1 -0
- package/src/agents/zeus.md +9 -52
- package/src/instructions/memory-protocol.instructions.md +6 -3
- package/src/instructions/zeus-anti-stall.instructions.md +2 -4
- package/src/instructions/zeus-council-synthesis.instructions.md +3 -28
- package/src/instructions/zeus-timeout-retry.instructions.md +3 -28
- package/src/mcp/mcp_persistence_server.py +1 -1
- package/src/mcp/toon_codec.py +2 -4
- package/src/pantheon/background-job-board.ts +4 -4
- package/src/pantheon/{delegation-compaction.ts → compaction-context.ts} +10 -100
- package/src/pantheon/cost-command.ts +1 -2
- package/src/pantheon/delegation-enforce.ts +59 -14
- package/src/pantheon/goal-loop.ts +1 -1
- package/src/pantheon/goal-store.ts +1 -1
- package/src/pantheon/idle-continuation.ts +4 -6
- package/src/pantheon/model-command.ts +1 -2
- package/src/pantheon/native-task-status.ts +2 -2
- package/src/pantheon/presets.d.mts +0 -20
- package/src/pantheon/presets.mjs +0 -64
- package/src/pantheon/session-guard.ts +2 -2
- package/src/pantheon/session-id.ts +30 -0
- package/src/pantheon/task-result-guard.ts +2 -3
- package/src/pantheon/todo-enforcer.ts +3 -3
- package/src/pantheon/tool-context.ts +23 -0
- package/src/pantheon/v2-bridge.ts +1 -4
- package/src/plugin-v2.ts +8 -21
- package/src/plugin.ts +61 -245
- package/src/plugins/pantheon-hooks.ts +1 -1
- package/src/plugins/tui/dist/tui.d.ts +229 -77
- package/src/plugins/tui/dist/tui.d.ts.map +1 -1
- package/src/plugins/tui/dist/tui.js +509 -259
- package/src/plugins/tui/package-lock.json +2 -2
- package/src/plugins/tui/package.json +2 -2
- package/src/plugins/tui/src/index.tsx +753 -279
- package/src/routing.yml +0 -16
- package/src/skills/context-compression/SKILL.md +1 -1
- package/scripts/generate-preset-docs.mjs +0 -300
- package/scripts/generate-prompts.sh +0 -222
- package/scripts/hash_verify.py +0 -192
- package/scripts/install/component.mjs +0 -24
- package/scripts/install/migrate-config.mjs +0 -302
- package/scripts/test-context-compression.sh +0 -169
- package/src/pantheon/auto-wake.ts +0 -85
- package/src/pantheon/chat-reminders.ts +0 -9
- package/src/pantheon/comment-checker.ts +0 -48
- package/src/pantheon/compaction-assert.ts +0 -160
- package/src/pantheon/compaction-handoff.ts +0 -304
- package/src/pantheon/cost-tracker.ts +0 -108
- package/src/pantheon/delegate-manager.ts +0 -766
- package/src/pantheon/delegation-classifier.ts +0 -307
- package/src/pantheon/delegation-finalize.ts +0 -406
- package/src/pantheon/delegation-notify.ts +0 -212
- package/src/pantheon/delegation-toast.ts +0 -73
- package/src/pantheon/delegation.ts +0 -1337
- package/src/pantheon/dispatch-guard.ts +0 -109
- package/src/pantheon/native-probe.ts +0 -234
- package/src/pantheon/permission-eval.ts +0 -284
- package/src/pantheon/preemptive-compact.ts +0 -76
- package/src/pantheon/provider-capabilities.ts +0 -221
- package/src/pantheon/provider-stream-tracker.ts +0 -182
- package/src/pantheon/retry-policy.ts +0 -212
- package/src/pantheon/step-cap.ts +0 -110
- package/src/pantheon/token-opt.ts +0 -689
- package/src/pantheon/toon-codec.ts +0 -481
- package/src/pantheon/v2-events.ts +0 -148
- package/src/pantheon/v2-hooks.ts +0 -287
- package/src/pantheon/v2-tool-definitions.ts +0 -331
- package/src/pantheon/zeus-delegate-with-retry.ts +0 -406
- package/src/plugins/tui/dist/tui.tsx +0 -2777
package/AGENTS.md
CHANGED
|
@@ -301,7 +301,9 @@ memory_store({
|
|
|
301
301
|
agreements: ["point1", "point2"],
|
|
302
302
|
divergences: [{"issue": "...", "resolution": "..."}],
|
|
303
303
|
response_rate: "X of Y",
|
|
304
|
-
themis_audit: "approved|issues"
|
|
304
|
+
themis_audit: "approved|issues",
|
|
305
|
+
precedent_used: false,
|
|
306
|
+
timestamp: "<ISO-8601>"
|
|
305
307
|
},
|
|
306
308
|
metadata: {
|
|
307
309
|
type: "council_decision",
|
|
@@ -310,6 +312,7 @@ memory_store({
|
|
|
310
312
|
}
|
|
311
313
|
})
|
|
312
314
|
```
|
|
315
|
+
`value` is JSON-serialized before storing (the MCP `memory_store.value` argument is a string).
|
|
313
316
|
|
|
314
317
|
### Read Path (Precedent Fast-Path)
|
|
315
318
|
Before dispatching a new council, Zeus runs:
|
|
@@ -320,8 +323,8 @@ memory_search(question, top_k=2, namespace="council_decisions")
|
|
|
320
323
|
Result interpretation:
|
|
321
324
|
| Score | Age | Action |
|
|
322
325
|
|-------|-----|--------|
|
|
323
|
-
| > 0.85 | < 30 days | Return precedent as fast-path answer. Skip council dispatch entirely. |
|
|
324
|
-
| > 0.85 | >= 30 days | Return with warning "Reavaliar se contexto mudou" + proceed with council |
|
|
326
|
+
| > 0.85 | < 30 days | Return precedent verbatim (note "⚠️ Decisão de [data] — reavaliar se contexto mudou") as fast-path answer. Skip council dispatch entirely. |
|
|
327
|
+
| > 0.85 | >= 30 days | Return with warning "Reavaliar se contexto mudou — decisão tem mais de 30 dias" + proceed with council |
|
|
325
328
|
| 0.5 - 0.85 | Any | Include as context for specialists but still dispatch council |
|
|
326
329
|
| < 0.5 | Any | Ignore, proceed with fresh council |
|
|
327
330
|
|
|
@@ -371,7 +374,7 @@ You MUST self-monitor for these stall conditions:
|
|
|
371
374
|
| Symptom | Detection Rule | Recovery Action |
|
|
372
375
|
|---------|---------------|-----------------|
|
|
373
376
|
| Silent loop | 3+ consecutive turns with no tool call AND no visible progress | Output `[STALL_DETECTED]` and re-read your task definition. If still stuck, escalate to user with: "I appear to be stuck on [task]. Options: (1) retry with different approach, (2) delegate to specialist, (3) simplify scope." |
|
|
374
|
-
| Delegation black hole | Agent dispatched but no response after 2x the timeout from routing.yml | Log the hang, cancel via `cancel_task`,
|
|
377
|
+
| Delegation black hole | Agent dispatched but no response after 2x the timeout from routing.yml | Log the hang, cancel via `cancel_task`, then follow the fallback chain in `## ⏱️ Timeout & Retry Enforcement` |
|
|
375
378
|
| Circular delegation | Same specialist re-dispatched for same task 2+ times without progress | Break cycle: dispatch to different specialist OR escalate to user |
|
|
376
379
|
| Idle after completion | All background tasks completed but no synthesis/next step for 2+ turns | Force synthesis: summarize all completed results and propose next action |
|
|
377
380
|
| Context thrash | Re-reading same files repeatedly without new action | Stop re-reading. State: "Already have context on [file]. Proceeding with [action]." |
|
|
@@ -397,9 +400,7 @@ When a delegation fails (timeout, empty response, error):
|
|
|
397
400
|
|
|
398
401
|
2. **Retry ONCE** with rephrased prompt — add: "Previous attempt failed with: [error]. Adjusted approach: [what changed]."
|
|
399
402
|
|
|
400
|
-
3. **If retry also fails** →
|
|
401
|
-
- Dispatch to fallback agent (from routing.yml)
|
|
402
|
-
- If no fallback, escalate to user with: "Task [X] failed after retry. Options: (a) simplify, (b) different agent, (c) manual intervention."
|
|
403
|
+
3. **If retry also fails** → do NOT retry blindly; follow the fallback chain and escalation protocol in `## ⏱️ Timeout & Retry Enforcement`.
|
|
403
404
|
|
|
404
405
|
## Progress Checkpoint
|
|
405
406
|
|
|
@@ -564,10 +565,7 @@ sequenceDiagram
|
|
|
564
565
|
## Dispatch Sequence (9-Step Protocol)
|
|
565
566
|
|
|
566
567
|
### Step 0 — Precedent Fast-Path (Fase 1)
|
|
567
|
-
|
|
568
|
-
- Score > 0.85 AND age < 30 days → return precedent verbatim with note "⚠️ Decisão de [data] — reavaliar se contexto mudou". SKIP entire dispatch.
|
|
569
|
-
- Score > 0.85 AND age > 30 days → return precedent with ⚠️ "Reavaliar se contexto mudou — decisão tem mais de 30 dias"
|
|
570
|
-
- Else → proceed to Step 0b
|
|
568
|
+
Run the precedent read path defined in `## Memory Protocol > Council Decisions Namespace` (`memory_search(query, top_k=2, namespace="council_decisions")`). If no precedent applies, proceed to Step 0b.
|
|
571
569
|
|
|
572
570
|
### Step 0b — Apollo Pre-Scan (Fase 2, --research flag)
|
|
573
571
|
If `/pantheon --research <question>`: dispatch @apollo with 30s timeout. Inject findings as `shared_context` into ALL specialist prompts. Skip if flag absent.
|
|
@@ -669,33 +667,11 @@ task(subagent_type: "themis", prompt: "Audit this council synthesis for fidelity
|
|
|
669
667
|
- If issues → fix each issue before delivering to user
|
|
670
668
|
|
|
671
669
|
### Step 9 — Persist & Reconcile (Fase 1)
|
|
672
|
-
|
|
673
|
-
memory_store({
|
|
674
|
-
namespace: "council_decisions",
|
|
675
|
-
key: "council:<yyyy-mm-dd>:<slug>",
|
|
676
|
-
value: JSON.stringify({
|
|
677
|
-
question, specialists, recommendation, confidence,
|
|
678
|
-
agreements, divergences, precedent_used, timestamp
|
|
679
|
-
}),
|
|
680
|
-
metadata: {type: "council_decision", specialist_count: N}
|
|
681
|
-
})
|
|
682
|
-
board.markReconciled("<task-id>")
|
|
683
|
-
```
|
|
670
|
+
Persist the decision using the write path in `## Memory Protocol > Council Decisions Namespace`, then `board.markReconciled("<task-id>")`.
|
|
684
671
|
|
|
685
672
|
## Specialist Output Format (Fase 1 — machine-parseable structured fields)
|
|
686
673
|
|
|
687
|
-
Specialists MUST return
|
|
688
|
-
|
|
689
|
-
```
|
|
690
|
-
## specialist_response
|
|
691
|
-
**position:** <clear one-sentence position>
|
|
692
|
-
**reasoning:** <2-4 sentences>
|
|
693
|
-
**trade_offs:** <what's gained vs lost>
|
|
694
|
-
**risks:** <what could go wrong>
|
|
695
|
-
**confidence:** High | Medium | Low
|
|
696
|
-
**agreement_signals:** agree: @agent1, @agent2 on [issue] | disagree: @agent3 on [issue]
|
|
697
|
-
**specific_claims:** <count of specific factual claims in response>
|
|
698
|
-
```
|
|
674
|
+
Specialists MUST return the structured `## specialist_response` format (position, reasoning, trade_offs, risks, confidence, agreement_signals, specific_claims) defined in `## Agent Return Format > Council Specialist Response Format`.
|
|
699
675
|
|
|
700
676
|
## Domain-to-Specialist Mapping
|
|
701
677
|
|
|
@@ -928,39 +904,14 @@ ANY NO → full task (IMPL artifact + Themis review mandatory)
|
|
|
928
904
|
3. **No Themis dependency** — output doesn't feed into a phase that requires review
|
|
929
905
|
|
|
930
906
|
## Subtask Return Format
|
|
931
|
-
|
|
932
|
-
```
|
|
933
|
-
## subtask_summary
|
|
934
|
-
**files_changed:** [paths]
|
|
935
|
-
**summary:** What was done
|
|
936
|
-
**tests:** ✅ or N/A
|
|
937
|
-
**status:** complete | partial | escalated
|
|
938
|
-
```
|
|
907
|
+
Return the standard `## subtask_summary` defined in `## Agent Return Format` (files_changed, summary, tests, coverage, tokens, status, blockers).
|
|
939
908
|
|
|
940
909
|
## Timeout Parcial (Partial Results)
|
|
941
910
|
|
|
942
|
-
Timeout
|
|
943
|
-
- ✅ @apollo — can return partial file list ("found 7 of 12 files before timeout")
|
|
944
|
-
- ✅ @gaia — can return partial literature findings
|
|
945
|
-
|
|
946
|
-
- ✅ @talos — can confirm progress if hotfix times out
|
|
947
|
-
- ❌ Never for implementers or reviewers — must complete or fail
|
|
948
|
-
|
|
949
|
-
When dispatching with partial-OK, set expectation:
|
|
950
|
-
```
|
|
951
|
-
@apollo Search for auth files. Timeout parcial OK — return whatever you have.
|
|
952
|
-
```
|
|
911
|
+
Only agents marked ✅ in the Timeout Behavior table above may return partial results: @apollo (partial file list, e.g. "found 7 of 12 files before timeout"), @gaia (partial literature findings) and @talos (confirm progress if a hotfix times out). Never for implementers or reviewers — they must complete or fail. When dispatching with partial-OK, set the expectation: `@apollo Search for auth files. Timeout parcial OK — return whatever you have.`
|
|
953
912
|
|
|
954
913
|
---
|
|
955
914
|
|
|
956
915
|
# 📊 TIMEOUT TRACKING
|
|
957
916
|
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
| Agent | Timeout | Status | Partial OK? |
|
|
961
|
-
|-------|---------|--------|-------------|
|
|
962
|
-
| @apollo | 60s | ✅ complete | ✅ |
|
|
963
|
-
| @hermes | 180s | ⏳ in progress | ❌ |
|
|
964
|
-
| @themis | 120s | ⏳ in progress | ❌ |
|
|
965
|
-
|
|
966
|
-
Log timeouts to `/memories/session/timeout-log.md` for later analysis.
|
|
917
|
+
Track in-flight delegations against the Timeout Behavior table above. Log timeouts to `/memories/session/timeout-log.md` for later analysis.
|
package/CHANGELOG.md
CHANGED
|
@@ -18,6 +18,326 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
18
18
|
|
|
19
19
|
## ✅ Closed Issues
|
|
20
20
|
|
|
21
|
+
## [v1.5.0] - 2026-09-16
|
|
22
|
+
|
|
23
|
+
### 🆕 What's New
|
|
24
|
+
|
|
25
|
+
- **Delegação nativa**: `task()` é agora o único canal de delegação — motor legado
|
|
26
|
+
de dispatch removido por completo, simplificando o fluxo de subagents.
|
|
27
|
+
- **Painel Delegations (TUI)**: painel funcional com status em tempo real, cores
|
|
28
|
+
por estado (running/completed/failed), janela de recência 24h, ordenação
|
|
29
|
+
newest-first e spinner fluido com timer independente (80ms/frame).
|
|
30
|
+
- **Read-only enforcement**: sessões read-only bloqueiam `write`, `edit`,
|
|
31
|
+
`pantheon_delegate` e qualquer mutação — garantindo sandboxing efetivo.
|
|
32
|
+
- **CI/CD**: Dependabot alerts, CodeQL analysis, SHA pins em actions, gitleaks
|
|
33
|
+
v3 para detecção de secrets, e workflow de release dispatch-only.
|
|
34
|
+
|
|
35
|
+
### 🐞 Fixed
|
|
36
|
+
|
|
37
|
+
- **Painel Delegations vazio (crítico)**: canal `session.children` da TUI
|
|
38
|
+
chamava API com shape v1 num cliente v2 — placeholder `{sessionID}` não era
|
|
39
|
+
substituído, causando ~181k erros/s e painel vazio. Corrigido
|
|
40
|
+
`safeSessionPath`/`buildChildrenPath`.
|
|
41
|
+
- **Stale busy**: children com status `busy` stale (>30min sem atualização)
|
|
42
|
+
agora são classificadas como `completed` (não `running`).
|
|
43
|
+
- **Board corruption**: testes que importam o plugin sem isolamento agora fazem
|
|
44
|
+
`chdir` para projeto temporário — sem mais entradas fantasma no board real.
|
|
45
|
+
- **Signal leak**: timer independente do spinner separado do poll de dados,
|
|
46
|
+
evitando bloqueio visual durante operações longas.
|
|
47
|
+
|
|
48
|
+
### ✅ Closed Issues
|
|
49
|
+
|
|
50
|
+
- 38% dos testes consolidados (de ~1200 para ~744) com cobertura mantida.
|
|
51
|
+
- 17 módulos mortos removidos, reduzindo superfície de manutenção.
|
|
52
|
+
- OWASP Top 10 audit e input validation em todos os endpoints.
|
|
53
|
+
|
|
54
|
+
## [v1.5.0-beta.20] - 2026-09-16
|
|
55
|
+
|
|
56
|
+
<!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
|
|
57
|
+
move this section to a versioned entry and reset the template below. -->
|
|
58
|
+
|
|
59
|
+
## 🐞 Fixed
|
|
60
|
+
|
|
61
|
+
- **Fixed — painel Delegations**: children com status `busy` stale (>30min sem
|
|
62
|
+
atualização) agora são classificadas como `completed` (não `running`). O
|
|
63
|
+
opencode mantém entradas `busy` no mapa de status para sessões já concluídas;
|
|
64
|
+
o TUI agora detecta e marca como done.
|
|
65
|
+
## [v1.5.0-beta.19] - 2026-09-16
|
|
66
|
+
|
|
67
|
+
<!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
|
|
68
|
+
move this section to a versioned entry and reset the template below. -->
|
|
69
|
+
|
|
70
|
+
## 🆕 What's New
|
|
71
|
+
|
|
72
|
+
- **Improved — painel Delegations**: status ausente de children antigas agora é
|
|
73
|
+
`done` (não `running`); grace 60s para sessões recém-criadas; janela de
|
|
74
|
+
recência 24h (filtra histórico); ordenação newest-first; ceiling esconde
|
|
75
|
+
antigos.
|
|
76
|
+
- **Improved — animação**: spinner ⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ agora tem timer
|
|
77
|
+
independente (80ms/frame), separado do poll de dados — fluido, não mais
|
|
78
|
+
"travado".
|
|
79
|
+
## [v1.5.0-beta.18] - 2026-09-16
|
|
80
|
+
|
|
81
|
+
<!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
|
|
82
|
+
move this section to a versioned entry and reset the template below. -->
|
|
83
|
+
|
|
84
|
+
## 🐞 Fixed
|
|
85
|
+
|
|
86
|
+
- **Painel Delegations voltou a funcionar (crítico):** o canal
|
|
87
|
+
`session.children` da TUI chamava a API com a shape v1 (`{ path: { id } }`)
|
|
88
|
+
num cliente **v2** que espera `{ sessionID }`; o placeholder não era
|
|
89
|
+
substituído (`/session/%7BsessionID%7D/children`), o host rejeitava cada
|
|
90
|
+
poll (~181k erros/s) e o painel ficava vazio ("No delegations"). Corrigido
|
|
91
|
+
`safeSessionPath`/`buildChildrenPath` para `{ sessionID }`, removidos os
|
|
92
|
+
`as any` que escondiam o mismatch, + teste de regressão exato. Auditoria
|
|
93
|
+
confirmou que só a TUI (v2) estava errada (o `plugin.ts` usa SDK v1 de
|
|
94
|
+
propósito).
|
|
95
|
+
- **Higiene de testes:** testes que importam o plugin sem isolamento agora
|
|
96
|
+
fazem `chdir` para um projeto temporário antes do import — não criam mais
|
|
97
|
+
entradas no board real (fim dos estados fantasma em desenvolvimento).
|
|
98
|
+
|
|
99
|
+
## [v1.5.0-beta.17] - 2026-09-15
|
|
100
|
+
|
|
101
|
+
<!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
|
|
102
|
+
move this section to a versioned entry and reset the template below. -->
|
|
103
|
+
|
|
104
|
+
## 🆕 What's New
|
|
105
|
+
|
|
106
|
+
- **Delegação nativa no host:** o motor `pantheon_delegate` foi removido
|
|
107
|
+
(~3,9k linhas) junto com as tools `pantheon_delegate`,
|
|
108
|
+
`pantheon_delegation_read` e `pantheon_delegation_list`; a delegação agora usa
|
|
109
|
+
o **`task()` nativo** do host (child sessions). 16 arquivos de teste obsoletos
|
|
110
|
+
removidos.
|
|
111
|
+
- **TUI — painel Delegations lê a sessão nativa:** o painel passa a derivar de
|
|
112
|
+
`session.children` + `session.status` + md (o arquivo de board deixou de ser
|
|
113
|
+
fonte). Mantidas as cores de status, retenção, ceiling, filtro de sessão e
|
|
114
|
+
guards.
|
|
115
|
+
- **Camada fina preservada:** `task-result-guard` (verified completion de child
|
|
116
|
+
vazio), `native-task-status` e guards de enforcement.
|
|
117
|
+
|
|
118
|
+
## 🐞 Fixed
|
|
119
|
+
|
|
120
|
+
- **Read-only enforcement re-apontado para sessões nativas:** aplicado no
|
|
121
|
+
público via hook `chat.params` e `hashline_edit` bloqueado para `apollo`/`gaia`,
|
|
122
|
+
fechando o bypass aberto após a remoção do motor de delegação.
|
|
123
|
+
- **Docs/comentários limpos:** referências aos módulos removidos atualizadas,
|
|
124
|
+
incluindo nits de comentário em `tests/pantheon/tui-delegations.test.ts` e
|
|
125
|
+
`src/pantheon/session-id.ts`.
|
|
126
|
+
|
|
127
|
+
## [v1.5.0-beta.16] - 2026-09-15
|
|
128
|
+
|
|
129
|
+
<!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
|
|
130
|
+
move this section to a versioned entry and reset the template below. -->
|
|
131
|
+
|
|
132
|
+
## 🆕 What's New
|
|
133
|
+
|
|
134
|
+
- **Modernização CI/supply-chain:** 22 actions SHA-pinadas; `gitleaks-action` v3
|
|
135
|
+
(fix crítico — a v2 morria com Node 20 em 2026-09-16) com CLI 8.30.1; cache
|
|
136
|
+
npm/pip; Dependabot; CodeQL `+python` e `codeql-config`; permissões reduzidas
|
|
137
|
+
no `docs.yml`; job `version-check` fundido no `validate`; `upload-artifact` v7
|
|
138
|
+
e `download-artifact` v8.
|
|
139
|
+
- **Lean:** ~17 módulos mortos removidos de `src/pantheon/`, docs/scripts
|
|
140
|
+
obsoletos, `teste/`/`testes/`, `Dockerfile`/`docker-compose` (de outro projeto)
|
|
141
|
+
e caches; ~38% dos arquivos de teste removidos/consolidados; testes mínimos
|
|
142
|
+
readicionados para os módulos vivos (tool-ceiling, native-probe).
|
|
143
|
+
- **Instructions:** deduplicação das instruções compartilhadas — contexto menor
|
|
144
|
+
sem perder nenhuma regra.
|
|
145
|
+
|
|
146
|
+
## 🐞 Fixed
|
|
147
|
+
|
|
148
|
+
- **2 flakes determinísticos eliminados:** TTL do MCP persistence
|
|
149
|
+
(`test_ttl_expiry_real_time`) e `logger.test.mjs` deixaram de depender de
|
|
150
|
+
timing/carga do host.
|
|
151
|
+
- **Refs stale corrigidas:** referências de versão/ambiente atualizadas para
|
|
152
|
+
Node 22+.
|
|
153
|
+
|
|
154
|
+
## [v1.5.0-beta.15] - 2026-09-15
|
|
155
|
+
|
|
156
|
+
<!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
|
|
157
|
+
move this section to a versioned entry and reset the template below. -->
|
|
158
|
+
|
|
159
|
+
## 🆕 What's New
|
|
160
|
+
|
|
161
|
+
- **Delegation `read` devolve o relatório completo:** o retorno de `read` passa a
|
|
162
|
+
ler o relatório integral do disco (com cap configurável e marker explícito de
|
|
163
|
+
truncamento) em vez do recibo resumido — o conteúdo é o mesmo tanto no caminho
|
|
164
|
+
nativo quanto no legado, com paridade garantida entre eles.
|
|
165
|
+
- **`sanitizeReceiptText` UTF-8-safe:** a sanitização de recibos deixou de corromper
|
|
166
|
+
caracteres multibyte; acentuação e demais codepoints UTF-8 são preservados no
|
|
167
|
+
caminho nativo e no legado.
|
|
168
|
+
- **TUI — cor de status na row inteira:** cada linha do painel Delegations passa a
|
|
169
|
+
ser pintada pelo estado — vermelho = falha, verde = concluído, amarelo = em
|
|
170
|
+
andamento — com o glyph mantido como canal redundante para acessibilidade.
|
|
171
|
+
|
|
172
|
+
## 🐞 Fixed
|
|
173
|
+
|
|
174
|
+
- **TUI — painel Delegations só da sessão ativa:** o painel deixa de renderizar
|
|
175
|
+
rows cross-session/órfãs que causavam "Session not found" ao clicar; a lista
|
|
176
|
+
agora cobre apenas a sessão ativa, mantendo a retenção de concluídas (2 min)
|
|
177
|
+
e falhas (10 min).
|
|
178
|
+
- **Guards de estado e navegação órfã:** transições prematuras para `done` são
|
|
179
|
+
bloqueadas e a navegação defensiva ignora alvos órfãos, evitando seleção
|
|
180
|
+
inválida no painel.
|
|
181
|
+
- **Isolamento do board nos testes:** testes que importam o plugin real agora
|
|
182
|
+
isolam o BackgroundJobBoard, eliminando o fantasma "preserve this running
|
|
183
|
+
delegation"; o board real foi limpo.
|
|
184
|
+
- **Lean no core:** 17 módulos mortos de `src/pantheon/` removidos, ~38% dos
|
|
185
|
+
arquivos de teste removidos/consolidados e docs/scripts órfãos limpos, com
|
|
186
|
+
testes mínimos readicionados para os módulos vivos (tool-ceiling, native-probe).
|
|
187
|
+
- **Flake de TTL determinístico:** `test_ttl_expiry_real_time` deixou de competir
|
|
188
|
+
com a truncagem de microssegundos do SQLite — o teste agora espera o início de
|
|
189
|
+
um segundo limpo antes do store e usa margem sobre o TTL, eliminando o flake
|
|
190
|
+
dependente de carga (test-only).
|
|
191
|
+
|
|
192
|
+
## [v1.5.0-beta.14] - 2026-09-14
|
|
193
|
+
|
|
194
|
+
<!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
|
|
195
|
+
move this section to a versioned entry and reset the template below. -->
|
|
196
|
+
|
|
197
|
+
## 🆕 What's New
|
|
198
|
+
|
|
199
|
+
- **Ordenação active-first:** delegações ativas aparecem antes das concluídas,
|
|
200
|
+
falhas e canceladas no painel TUI.
|
|
201
|
+
- **Overflow active:** quando há mais delegações ativas que o teto visível, o
|
|
202
|
+
excedente ativo permanece representado na linha de overflow.
|
|
203
|
+
|
|
204
|
+
## 🐞 Fixed
|
|
205
|
+
|
|
206
|
+
- **Retenção visual:** concluídas permanecem visíveis por 2 min e falhas por
|
|
207
|
+
10 min antes de saírem do painel; canceladas seguem a retenção configurada.
|
|
208
|
+
|
|
209
|
+
## ⚠️ Known Issues
|
|
210
|
+
|
|
211
|
+
- **Stale running warning:** jobs em estado `running` além do limite esperado
|
|
212
|
+
recebem um aviso visual de stale no painel.
|
|
213
|
+
## [v1.5.0-beta.13] - 2026-09-14
|
|
214
|
+
|
|
215
|
+
<!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
|
|
216
|
+
move this section to a versioned entry and reset the template below. -->
|
|
217
|
+
|
|
218
|
+
## 🆕 What's New
|
|
219
|
+
|
|
220
|
+
- **TUI status-only — rows simplificadas:** cada linha do painel Delegations passa
|
|
221
|
+
a ser `{glyph} {alias} {elapsed}` + `desc` muted — um glyph de status, uma única
|
|
222
|
+
identidade e o tempo decorrido, com a descrição em tom muted. São 4 glyphs
|
|
223
|
+
(running animado, completed, error, cancelled/retry), sem toggle
|
|
224
|
+
`[Sessão]`/`[Tudo]`, sem prefixos `nat:`/`pan:` e sem losango ◇/◆.
|
|
225
|
+
- **Header `active`/`done`/`failed`:** o cabeçalho do painel resume apenas esses
|
|
226
|
+
três contadores sobre a lista completa (todas as sessões), sem `nat:`/`pan:`.
|
|
227
|
+
- **Ceiling 8:** no máximo 8 linhas visíveis (live-first); o excedente colapsa em
|
|
228
|
+
uma única linha `… +N more`.
|
|
229
|
+
- **Board read (jobs de todas as sessões):** o painel lê o BackgroundJobBoard
|
|
230
|
+
(`.pantheon/board/state.json`), então jobs `pantheon_delegate` de qualquer
|
|
231
|
+
sessão aparecem — não só os filhos nativos da sessão focada.
|
|
232
|
+
- **118 testes TUI delegations:** `tests/pantheon/tui-delegations.test.ts` com
|
|
233
|
+
118/118 passando, cobrindo rows status-only, header active/done/failed, ceiling
|
|
234
|
+
e board read cross-session.
|
|
235
|
+
|
|
236
|
+
## 🐞 Fixed
|
|
237
|
+
|
|
238
|
+
- **Sanitização de dead code:** removidos helpers, tipos e estado órfãos do
|
|
239
|
+
painel Delegations (toggle de escopo `[Sessão]`/`[Tudo]`, prefixos curtos
|
|
240
|
+
`nat:`/`pan:`, glyphs por estado e paginação de arquivo morto) que sobraram do
|
|
241
|
+
refactor status-only.
|
|
242
|
+
- **Board merge preserva sessão conhecida:** um record do board com
|
|
243
|
+
`parentSessionID` vazio não sobrescreve mais a sessão já atribuída à linha.
|
|
244
|
+
## [v1.5.0-beta.12] - 2026-09-14
|
|
245
|
+
|
|
246
|
+
<!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
|
|
247
|
+
move this section to a versioned entry and reset the template below. -->
|
|
248
|
+
|
|
249
|
+
## 🆕 What's New
|
|
250
|
+
|
|
251
|
+
- **TUI lê o board (4º canal):** o painel Delegations passa a ler o
|
|
252
|
+
BackgroundJobBoard via `readBoardState()` — jobs `pantheon_delegate` de todas
|
|
253
|
+
as sessões aparecem, não só os filhos nativos da sessão focada.
|
|
254
|
+
- **Toggle [Sessão]/[Tudo] + chips:** `[Sessão]` (default) mostra só a sessão
|
|
255
|
+
focada, `[Tudo]` mostra jobs de todas as sessões; chips clicáveis no header.
|
|
256
|
+
- **Raw `dist/tui.tsx` removido (bundle-only):** o dist passa a carregar só o
|
|
257
|
+
bundle compilado (`tui.js`); o fonte raw sai do pacote publicado.
|
|
258
|
+
- **117 testes TUI delegations:** `tests/pantheon/tui-delegations.test.ts` com
|
|
259
|
+
117/117 passando, cobrindo board-read, split ativo/recente e toggle de escopo.
|
|
260
|
+
## [v1.5.0-beta.11] - 2026-09-14
|
|
261
|
+
|
|
262
|
+
<!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
|
|
263
|
+
move this section to a versioned entry and reset the template below. -->
|
|
264
|
+
|
|
265
|
+
## 🆕 What's New
|
|
266
|
+
|
|
267
|
+
- **Glyphs da FSM real no painel Delegations:** cada estado do BackgroundJobBoard
|
|
268
|
+
tem agora um glifo Unicode geométrico próprio — `⠋` running (spinner 1s),
|
|
269
|
+
`⟳` retry, `⚠` stale/startup, `✓` completed, `✕` error, `−` cancelled. Forma e
|
|
270
|
+
cor são canais independentes: as linhas seguem legíveis sem cor e sem Nerd Font.
|
|
271
|
+
- **Prefixo `nat:` / `pan:` documentado:** `docs/INSTALLATION.md` passa a
|
|
272
|
+
descrever os prefixos curtos das linhas nativas (`nat:<agent>`) e do board
|
|
273
|
+
(`pan:<alias>`) e o par de glyphs ◇/◆.
|
|
274
|
+
- **`scripts/dev-tui.sh` (dev local sem publish):** instala, builda e registra o
|
|
275
|
+
caminho absoluto do repo em `.opencode/tui.json` (gitignored) com hint de
|
|
276
|
+
restart — sem tocar `opencode.json` e sem publicar.
|
|
277
|
+
- **104 testes TUI delegations:** `tests/pantheon/tui-delegations.test.ts` com
|
|
278
|
+
104/104 passando, cobrindo glifos/marker/tone dos estados reais da FSM.
|
|
279
|
+
|
|
280
|
+
## 🐞 Fixed
|
|
281
|
+
|
|
282
|
+
- **Doctor F.2 (`hasUsableScripts`):** a resolução do diretório code-mode agora
|
|
283
|
+
exige um `.py`/`.sh` regular (paridade com `_has_usable_scripts` do MCP), então
|
|
284
|
+
um overlay de projeto vazio não mascara mais uma instalação que traz scripts.
|
|
285
|
+
- **`publish:next` órfão removido:** nenhum workflow usava o script (o release
|
|
286
|
+
publica via `--tag beta`); removido do `package.json` para eliminar o dist-tag
|
|
287
|
+
`next` obsoleto da linha de publicação.
|
|
288
|
+
## [v1.5.0-beta.10] - 2026-09-14
|
|
289
|
+
|
|
290
|
+
<!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
|
|
291
|
+
move this section to a versioned entry and reset the template below. -->
|
|
292
|
+
|
|
293
|
+
## 🆕 What's New
|
|
294
|
+
|
|
295
|
+
- **TUI delegations com prefixos curtos `nat:` / `pan:`:** cada linha do painel passa
|
|
296
|
+
a usar `nat:<agent>` para child nativo do `task()` (sem report no board) ou
|
|
297
|
+
`pan:<alias>` para linha `pantheon_delegate` (ex. `pan:apo-1`) — os prefixos curtos
|
|
298
|
+
liberam largura no sidebar estreito.
|
|
299
|
+
- **Glyph de 2 canais (◇/◆):** ◇ vazado (info/cyan) para child nativo e ◆ preenchido
|
|
300
|
+
(cor de estado) para linha do board — forma e cor são canais independentes, então o
|
|
301
|
+
split segue legível mesmo sem cor.
|
|
302
|
+
- **Header resumido:** `(N active · M done · nat:K pan:M)` calculado sobre a lista
|
|
303
|
+
completa (active + recent + archived), no lugar do antigo `(N native + M pantheon)`.
|
|
304
|
+
- **Elapsed em caixa fixa:** rótulo alinhado à direita em largura 8 e SEMPRE
|
|
305
|
+
renderizado, então um job ativo sem descrição nunca perde o timer.
|
|
306
|
+
- **100 testes TUI delegations:** `tests/pantheon/tui-delegations.test.ts` com 100/100
|
|
307
|
+
passando (tsc + biome OK), acima dos 93 da beta.9.
|
|
308
|
+
|
|
309
|
+
## 🐞 Fixed
|
|
310
|
+
|
|
311
|
+
- **`appendFile` sem import (log do painel volta a escrever):** o log em arquivo do
|
|
312
|
+
painel parou de escrever silenciosamente porque `appendFile` era chamado sem import
|
|
313
|
+
(ReferenceError engolido pelo `catch` vazio); o import foi restaurado e o `catch`
|
|
314
|
+
agora reporta a falha (gated por echo) em vez de sumir.
|
|
315
|
+
- **Truncamento grapheme-safe:** descrições truncam em fronteiras de grapheme
|
|
316
|
+
(`Intl.Segmenter` com fallback `Array.from`) em 44 graphemes, sem cortar emoji ou
|
|
317
|
+
sequências ZWJ ao meio (mojibake).
|
|
318
|
+
- **Linhas stale-running ficam em Active:** um job stale ainda é um job vivo (estado do
|
|
319
|
+
backend inalterado), então não é mais arquivado — o que escondia a linha lançada.
|
|
320
|
+
- **Spinner/animação de 140ms → 1000ms:** o tick rápido piscava sem adicionar informação.
|
|
321
|
+
- **Dead code removido:** conectores de árvore (`isNestedDelegation` /
|
|
322
|
+
`delegationTreePrefix`) e campos `parentTaskID`/`childCount` removidos —
|
|
323
|
+
`session.children` só devolve filhos diretos, então nenhuma linha nested era
|
|
324
|
+
produzida (BACKLOG).
|
|
325
|
+
## [v1.5.0-beta.9] - 2026-09-14
|
|
326
|
+
|
|
327
|
+
<!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
|
|
328
|
+
move this section to a versioned entry and reset the template below. -->
|
|
329
|
+
|
|
330
|
+
## 🆕 What's New
|
|
331
|
+
|
|
332
|
+
- **TUI delegations nativas (gated):** painel Delegations renderiza N delegações native + M pantheon com tag [native], live task em tempo real, click navega para sessão. Implementado em `src/plugins/tui/src/index.tsx` com dist rebuildado.
|
|
333
|
+
- **93 testes TUI delegations:** suite `tests/pantheon/tui-delegations.test.ts` com 93/93 passando (tsc + biome OK).
|
|
334
|
+
- **E2E beta.8 PASS (referência):** baseline E2E da beta.8 mantido como referência de estabilidade para beta.9.
|
|
335
|
+
|
|
336
|
+
## 🐞 Fixed
|
|
337
|
+
|
|
338
|
+
- Removido diretório `testyes/` (artefato de teste).
|
|
339
|
+
- Truncado `hooks.log` para baseline limpo de beta.9.
|
|
340
|
+
|
|
21
341
|
## [v1.5.0-beta.8] - 2026-09-13
|
|
22
342
|
|
|
23
343
|
<!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
|
package/README.md
CHANGED
|
@@ -76,25 +76,14 @@ availability and configuration of OpenCode and any optional services you choose
|
|
|
76
76
|
to use. Check the [releases](https://github.com/ils15/pantheon-opencode/releases)
|
|
77
77
|
and [changelog](CHANGELOG.md) for the latest published changes.
|
|
78
78
|
|
|
79
|
-
## Delegation
|
|
79
|
+
## Delegation (native `task()`)
|
|
80
80
|
|
|
81
|
-
Pantheon
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
-
|
|
86
|
-
|
|
87
|
-
does not use foreground fallback, model failover, or retry; it performs a
|
|
88
|
-
lazy capability probe on the first dispatch and includes the resulting
|
|
89
|
-
status in the delegation receipt.
|
|
90
|
-
|
|
91
|
-
Legacy stays the default for v1.5.x; native is not promoted to default until
|
|
92
|
-
v1.6. See [ADR-0011](.pantheon/memory-bank/adr/0011-delegation-engine-contract.md)
|
|
93
|
-
(Proposed) for the engine contract, rationale, and migration prerequisites.
|
|
94
|
-
|
|
95
|
-
**Kill-switch:** set `PANTHEON_DELEGATION=off` (case-insensitive) to disable
|
|
96
|
-
delegation entirely. The switch covers **both** engines — the legacy
|
|
97
|
-
`pantheon_delegate`/read/list tools throw, and the native manager throws too.
|
|
81
|
+
Pantheon delegates exclusively through OpenCode's native `task()` child-session
|
|
82
|
+
engine. The former custom `pantheon_delegate` tool and the V1 delegation engine
|
|
83
|
+
(`delegation.ts`, `delegate-manager.ts` and supporting modules) were removed;
|
|
84
|
+
there is no Pantheon-specific delegation tool surface to configure. See
|
|
85
|
+
[ADR-0011](.pantheon/memory-bank/adr/0011-delegation-engine-contract.md) for the
|
|
86
|
+
historical engine contract.
|
|
98
87
|
|
|
99
88
|
## Cost tool backend
|
|
100
89
|
|
|
@@ -172,8 +161,7 @@ script's SHA-256 without regenerating it.
|
|
|
172
161
|
covering OpenCode V1/V2 side by side — see
|
|
173
162
|
[Sandbox validation](#sandbox-validation-v1v2).
|
|
174
163
|
- Beta2 agent-economy policy: direct native delegation, bounded compaction
|
|
175
|
-
carry-forward, compact context encoding, and quality floors
|
|
176
|
-
[Beta2 agent economy policy](docs/ws3-token-opt-measurements.md#beta2-agent-economy-policy).
|
|
164
|
+
carry-forward, compact context encoding, and quality floors.
|
|
177
165
|
- A `--prompts` installer flag is planned for a future release.
|
|
178
166
|
|
|
179
167
|
## OpenCode V1/V2 — Dual Version (1.5.0-beta.2)
|
|
@@ -186,23 +174,22 @@ per installation; V1 and V2 Pantheon plugins must never be registered together.
|
|
|
186
174
|
|---|---|---|
|
|
187
175
|
| OpenCode config key | singular `plugin` | plural `plugins` |
|
|
188
176
|
| Pantheon registration | `src/plugin.ts` plus `src/plugins/pantheon-hooks.ts` | `<installed>/src/plugin-v2` directory (`index.ts` re-exports `src/plugin-v2.ts`) |
|
|
189
|
-
| Runtime contract |
|
|
177
|
+
| Runtime contract | Pantheon V1 plugin: 6 tools (`hashline_edit`, the 3 goal tools, `pantheon_cost`, `pantheon_model`), event/tool hooks and V1 compaction handling | Full V2 plugin: 6 orchestration tools, 4 event subscriptions, session hooks (`prompt`, `context`), tool hooks (`execute.before`/`after`), plus configuration transforms |
|
|
190
178
|
| V1 APIs | Registered | Own tool definitions via `ctx.tool.transform()` — not the V1 plugin path |
|
|
191
179
|
|
|
192
|
-
The V2 plugin provides
|
|
193
|
-
`pantheon_delegation_read`, `pantheon_delegation_list`, `hashline_edit`,
|
|
180
|
+
The V2 plugin provides 6 orchestration tools (`hashline_edit`,
|
|
194
181
|
`pantheon_goal_create`, `pantheon_goal_get`, `pantheon_goal_update`,
|
|
195
182
|
`pantheon_cost`, `pantheon_model`), 4 event subscriptions (`session.created`,
|
|
196
183
|
`session.idle`, `session.error`, `session.compacted`), session hooks (`prompt`,
|
|
197
184
|
`context`), and tool hooks (`execute.before`, `execute.after`). The only
|
|
198
|
-
unsupported V2 feature is `legacy-hooks` (the V1-specific
|
|
185
|
+
unsupported V2 feature is `legacy-hooks` (the V1-specific hook surface).
|
|
199
186
|
|
|
200
187
|
The package exposes both contracts as importable exports: `pantheon-opencode/plugin`
|
|
201
188
|
(V1), `pantheon-opencode/plugin-v2` (V2) and `pantheon-opencode/v2-bridge`
|
|
202
189
|
(optional interop), so a host can load either contract explicitly.
|
|
203
190
|
|
|
204
191
|
The V1→V2 bridge (`src/pantheon/v2-bridge.ts`) enables optional interop:
|
|
205
|
-
V1 infrastructure singletons (BackgroundJobBoard,
|
|
192
|
+
V1 infrastructure singletons (BackgroundJobBoard, GoalStore,
|
|
206
193
|
TodoEnforcer, VisionHandler) are passed through V2 `ctx.options`. The bridge is
|
|
207
194
|
optional — V2 works standalone with graceful degradation.
|
|
208
195
|
|
|
@@ -340,8 +327,8 @@ child session returns an empty or missing result. Instead of surfacing a silent
|
|
|
340
327
|
`completed` with no payload (which confuses the orchestrator), the guard now
|
|
341
328
|
raises an explicit error. This catches the common free-tier failure mode where a
|
|
342
329
|
child session exceeds the uncached-prefill token budget (`BackendAdmissionRejected`)
|
|
343
|
-
and returns nothing.
|
|
344
|
-
`
|
|
330
|
+
and returns nothing. Prefer `background=true` dispatches with an explicit
|
|
331
|
+
`task_status(wait=true)` fan-in so large payloads are collected deterministically.
|
|
345
332
|
|
|
346
333
|
|
|
347
334
|
## Documentation
|
package/README.pt-BR.md
CHANGED
|
@@ -31,7 +31,7 @@ de planejar o trabalho, avançar, conferir resultados e preservar o contexto
|
|
|
31
31
|
|
|
32
32
|
## Comece em 2 minutos
|
|
33
33
|
|
|
34
|
-
Requisitos: [OpenCode 1.18.4+](https://opencode.ai/docs/) e Node.js
|
|
34
|
+
Requisitos: [OpenCode 1.18.4+](https://opencode.ai/docs/) e Node.js 22+.
|
|
35
35
|
|
|
36
36
|
No projeto em que você quer usar o Pantheon:
|
|
37
37
|
|
|
@@ -130,16 +130,15 @@ registrados juntos.
|
|
|
130
130
|
|---|---|---|
|
|
131
131
|
| Chave de config do OpenCode | `plugin` singular | `plugins` plural |
|
|
132
132
|
| Registro Pantheon | `src/plugin.ts` mais `src/plugins/pantheon-hooks.ts` | `pantheon-opencode/plugin-v2` (`src/plugin-v2.ts`) |
|
|
133
|
-
| Contrato de runtime | Plugin Pantheon
|
|
133
|
+
| Contrato de runtime | Plugin Pantheon V1: 6 ferramentas (`hashline_edit`, as 3 ferramentas de goal, `pantheon_cost`, `pantheon_model`), hooks de evento/ferramenta e tratamento de compactação V1 | Plugin V2 completo: 6 ferramentas de orquestração, 4 assinaturas de eventos, session hooks (`prompt`, `context`), tool hooks (`execute.before`/`after`), além de transforms de configuração |
|
|
134
134
|
| APIs V1 | Registradas | Definições próprias de ferramentas via `ctx.tool.transform()` — não pelo caminho do plugin V1 |
|
|
135
135
|
|
|
136
|
-
O plugin V2 fornece
|
|
137
|
-
`pantheon_delegation_read`, `pantheon_delegation_list`, `hashline_edit`,
|
|
136
|
+
O plugin V2 fornece 6 ferramentas de orquestração (`hashline_edit`,
|
|
138
137
|
`pantheon_goal_create`, `pantheon_goal_get`, `pantheon_goal_update`,
|
|
139
138
|
`pantheon_cost`, `pantheon_model`), 4 assinaturas de eventos (`session.created`,
|
|
140
139
|
`session.idle`, `session.error`, `session.compacted`), session hooks (`prompt`,
|
|
141
140
|
`context`) e tool hooks (`execute.before`, `execute.after`). O único recurso V2
|
|
142
|
-
sem suporte é `legacy-hooks` (a superfície de
|
|
141
|
+
sem suporte é `legacy-hooks` (a superfície de hooks específica do V1).
|
|
143
142
|
|
|
144
143
|
O pacote expõe os dois contratos como exports importáveis:
|
|
145
144
|
`pantheon-opencode/plugin` (V1), `pantheon-opencode/plugin-v2` (V2) e
|
|
@@ -147,7 +146,7 @@ O pacote expõe os dois contratos como exports importáveis:
|
|
|
147
146
|
explicitamente o contrato desejado.
|
|
148
147
|
|
|
149
148
|
A ponte V1→V2 (`src/pantheon/v2-bridge.ts`) habilita interop opcional:
|
|
150
|
-
singletons de infraestrutura V1 (BackgroundJobBoard,
|
|
149
|
+
singletons de infraestrutura V1 (BackgroundJobBoard,
|
|
151
150
|
GoalStore, TodoEnforcer, VisionHandler) são repassados via `ctx.options` do V2.
|
|
152
151
|
A ponte é opcional — o V2 funciona standalone com degradação graciosa.
|
|
153
152
|
|
package/commands/pantheon.md
CHANGED
|
@@ -9,41 +9,7 @@ agent: zeus
|
|
|
9
9
|
**When:** Architecture trade-offs, technology selection, security assessments, multi-stakeholder concerns
|
|
10
10
|
**Returns:** Structured synthesis with recommendation, confidence level, resolved divergences
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
Choose 2-3 agents based on domain:
|
|
15
|
-
|
|
16
|
-
| Domain | Specialists |
|
|
17
|
-
|--------|-------------|
|
|
18
|
-
| Architecture | hermes, demeter, themis, athena |
|
|
19
|
-
| Security | themis, hermes, prometheus, nyx |
|
|
20
|
-
| Database | demeter, hermes, prometheus |
|
|
21
|
-
| AI/RAG | hephaestus, nyx |
|
|
22
|
-
| Infrastructure | prometheus, hermes, themis |
|
|
23
|
-
| Frontend/UX | aphrodite, themis, hermes |
|
|
24
|
-
| Observability | nyx, hermes |
|
|
25
|
-
| General | athena, themis, hermes |
|
|
26
|
-
|
|
27
|
-
Send ALL `task()` calls in a single message. Each must return: Recommendation · Reasoning · Trade-offs · Risks · Confidence.
|
|
28
|
-
|
|
29
|
-
## Synthesis Structure
|
|
30
|
-
|
|
31
|
-
After ALL responses arrive, produce EXACTLY this structure:
|
|
32
|
-
|
|
33
|
-
### 📋 Individual Assessments
|
|
34
|
-
For each specialist: Recommendation, Reasoning, Trade-offs, Risks, Confidence
|
|
35
|
-
|
|
36
|
-
### ✅ Agreements
|
|
37
|
-
Where 2+ specialists converge
|
|
38
|
-
|
|
39
|
-
### ⚡ Divergences
|
|
40
|
-
Where they disagree — resolve each one with reasoning
|
|
41
|
-
|
|
42
|
-
### 🔥 Total Divergence
|
|
43
|
-
If ALL specialists disagree on a point, call this out explicitly
|
|
44
|
-
|
|
45
|
-
### 🏆 Recommendation
|
|
46
|
-
Decisive conclusion with confidence level
|
|
12
|
+
Dispatch, specialist selection, and synthesis follow the canonical `## Zeus Council Synthesis` protocol (Steps 0–9: precedent fast-path, dispatch, confidence cross-validation, rebuttal, tie-break, Themis audit, persist). Send ALL `task()` calls in a single message; each specialist returns the `## specialist_response` structure from `## Agent Return Format`.
|
|
47
13
|
|
|
48
14
|
## Question:
|
|
49
15
|
$ARGUMENTS
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pantheon-opencode",
|
|
3
|
-
"version": "1.5.0
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"description": "Multi-agent orchestration for OpenCode — 14 specialized agents, TDD, Themis review gates.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -31,7 +31,6 @@
|
|
|
31
31
|
"release:dry-run": "node scripts/versioning.mjs status && node scripts/release-notes.mjs && node scripts/package-evidence.mjs",
|
|
32
32
|
"package:evidence": "node scripts/package-evidence.mjs",
|
|
33
33
|
"package:validate": "node scripts/validate-package.mjs",
|
|
34
|
-
"publish:next": "npm publish --tag next --access public",
|
|
35
34
|
"lint": "biome ci .",
|
|
36
35
|
"typecheck": "tsc --noEmit",
|
|
37
36
|
"audit": "npm audit --audit-level=high",
|
package/plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pantheon",
|
|
3
3
|
"publisher": "ils15",
|
|
4
|
-
"version": "1.5.0
|
|
4
|
+
"version": "1.5.0",
|
|
5
5
|
"displayName": "Pantheon",
|
|
6
6
|
"description": "Conductor-Delegate orchestration platform with 14 specialized agents, 21 skills, and OpenCode support.",
|
|
7
7
|
"agents": "./src/agents",
|