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.
Files changed (82) hide show
  1. package/AGENTS.md +14 -63
  2. package/CHANGELOG.md +320 -0
  3. package/README.md +14 -27
  4. package/README.pt-BR.md +5 -6
  5. package/commands/pantheon.md +1 -35
  6. package/package.json +1 -2
  7. package/plugin.json +1 -1
  8. package/pyproject.toml +2 -5
  9. package/scripts/doctor.mjs +32 -3
  10. package/scripts/install/plugin.mjs +9 -12
  11. package/scripts/mcp_persistence_server.py +1 -1
  12. package/scripts/sync-tui.mjs +8 -11
  13. package/src/agents/apollo.md +1 -0
  14. package/src/agents/gaia.md +1 -0
  15. package/src/agents/zeus.md +9 -52
  16. package/src/instructions/memory-protocol.instructions.md +6 -3
  17. package/src/instructions/zeus-anti-stall.instructions.md +2 -4
  18. package/src/instructions/zeus-council-synthesis.instructions.md +3 -28
  19. package/src/instructions/zeus-timeout-retry.instructions.md +3 -28
  20. package/src/mcp/mcp_persistence_server.py +1 -1
  21. package/src/mcp/toon_codec.py +2 -4
  22. package/src/pantheon/background-job-board.ts +4 -4
  23. package/src/pantheon/{delegation-compaction.ts → compaction-context.ts} +10 -100
  24. package/src/pantheon/cost-command.ts +1 -2
  25. package/src/pantheon/delegation-enforce.ts +59 -14
  26. package/src/pantheon/goal-loop.ts +1 -1
  27. package/src/pantheon/goal-store.ts +1 -1
  28. package/src/pantheon/idle-continuation.ts +4 -6
  29. package/src/pantheon/model-command.ts +1 -2
  30. package/src/pantheon/native-task-status.ts +2 -2
  31. package/src/pantheon/presets.d.mts +0 -20
  32. package/src/pantheon/presets.mjs +0 -64
  33. package/src/pantheon/session-guard.ts +2 -2
  34. package/src/pantheon/session-id.ts +30 -0
  35. package/src/pantheon/task-result-guard.ts +2 -3
  36. package/src/pantheon/todo-enforcer.ts +3 -3
  37. package/src/pantheon/tool-context.ts +23 -0
  38. package/src/pantheon/v2-bridge.ts +1 -4
  39. package/src/plugin-v2.ts +8 -21
  40. package/src/plugin.ts +61 -245
  41. package/src/plugins/pantheon-hooks.ts +1 -1
  42. package/src/plugins/tui/dist/tui.d.ts +229 -77
  43. package/src/plugins/tui/dist/tui.d.ts.map +1 -1
  44. package/src/plugins/tui/dist/tui.js +509 -259
  45. package/src/plugins/tui/package-lock.json +2 -2
  46. package/src/plugins/tui/package.json +2 -2
  47. package/src/plugins/tui/src/index.tsx +753 -279
  48. package/src/routing.yml +0 -16
  49. package/src/skills/context-compression/SKILL.md +1 -1
  50. package/scripts/generate-preset-docs.mjs +0 -300
  51. package/scripts/generate-prompts.sh +0 -222
  52. package/scripts/hash_verify.py +0 -192
  53. package/scripts/install/component.mjs +0 -24
  54. package/scripts/install/migrate-config.mjs +0 -302
  55. package/scripts/test-context-compression.sh +0 -169
  56. package/src/pantheon/auto-wake.ts +0 -85
  57. package/src/pantheon/chat-reminders.ts +0 -9
  58. package/src/pantheon/comment-checker.ts +0 -48
  59. package/src/pantheon/compaction-assert.ts +0 -160
  60. package/src/pantheon/compaction-handoff.ts +0 -304
  61. package/src/pantheon/cost-tracker.ts +0 -108
  62. package/src/pantheon/delegate-manager.ts +0 -766
  63. package/src/pantheon/delegation-classifier.ts +0 -307
  64. package/src/pantheon/delegation-finalize.ts +0 -406
  65. package/src/pantheon/delegation-notify.ts +0 -212
  66. package/src/pantheon/delegation-toast.ts +0 -73
  67. package/src/pantheon/delegation.ts +0 -1337
  68. package/src/pantheon/dispatch-guard.ts +0 -109
  69. package/src/pantheon/native-probe.ts +0 -234
  70. package/src/pantheon/permission-eval.ts +0 -284
  71. package/src/pantheon/preemptive-compact.ts +0 -76
  72. package/src/pantheon/provider-capabilities.ts +0 -221
  73. package/src/pantheon/provider-stream-tracker.ts +0 -182
  74. package/src/pantheon/retry-policy.ts +0 -212
  75. package/src/pantheon/step-cap.ts +0 -110
  76. package/src/pantheon/token-opt.ts +0 -689
  77. package/src/pantheon/toon-codec.ts +0 -481
  78. package/src/pantheon/v2-events.ts +0 -148
  79. package/src/pantheon/v2-hooks.ts +0 -287
  80. package/src/pantheon/v2-tool-definitions.ts +0 -331
  81. package/src/pantheon/zeus-delegate-with-retry.ts +0 -406
  82. 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`, dispatch to fallback agent, report to user |
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** → DO NOT retry a third time blindly. Instead:
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
- Before any dispatch: `memory_search(query, top_k=2, namespace="council_decisions")`
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 these structured fields in their response:
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
- Expect a `subtask_summary` response with:
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 parcial is ONLY for read-only, independent agents:
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
- Maintain awareness of in-flight delegations:
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
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
57
+ move this section to a versioned entry and reset the template below. --&gt;
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
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
68
+ move this section to a versioned entry and reset the template below. --&gt;
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
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
82
+ move this section to a versioned entry and reset the template below. --&gt;
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
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
102
+ move this section to a versioned entry and reset the template below. --&gt;
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
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
130
+ move this section to a versioned entry and reset the template below. --&gt;
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
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
157
+ move this section to a versioned entry and reset the template below. --&gt;
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
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
195
+ move this section to a versioned entry and reset the template below. --&gt;
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
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
216
+ move this section to a versioned entry and reset the template below. --&gt;
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
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
247
+ move this section to a versioned entry and reset the template below. --&gt;
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
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
263
+ move this section to a versioned entry and reset the template below. --&gt;
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
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
291
+ move this section to a versioned entry and reset the template below. --&gt;
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 engines (legacy default, native opt-in)
79
+ ## Delegation (native `task()`)
80
80
 
81
- Pantheon exposes two delegation engines behind one tool surface:
82
-
83
- - **Legacy (default)** — `pantheon_delegate`, the original engine registered by
84
- the V1 plugin. No configuration is required.
85
- - **Native (opt-in, experimental)** — OpenCode's native `task()` child-session
86
- engine, selected with `PANTHEON_DELEGATE_MODE=native`. Native is strict: it
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 — see
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 | Legacy Pantheon plugin, including `pantheon_delegate`, read/list tools, event/tool hooks and V1 compaction handling | Full V2 plugin: 9 orchestration tools, 4 event subscriptions, session hooks (`prompt`, `context`), tool hooks (`execute.before`/`after`), plus configuration transforms |
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 9 orchestration tools (`pantheon_delegate`,
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 delegate API surface).
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, DelegationClient, GoalStore,
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. For large payloads, prefer `pantheon_delegate` over native
344
- `task()` — the delegation layer has better timeout and error handling.
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 18+.
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 legado, incluindo `pantheon_delegate`, ferramentas read/list, hooks de evento/ferramenta e tratamento de compactação V1 | Plugin V2 completo: 9 ferramentas de orquestração, 4 assinaturas de eventos, session hooks (`prompt`, `context`), tool hooks (`execute.before`/`after`), além de transforms de configuração |
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 9 ferramentas de orquestração (`pantheon_delegate`,
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 API de delegate específica do V1).
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, DelegationClient,
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
 
@@ -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
- ## Dispatch Selection
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-beta.8",
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-beta.8",
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",