pantheon-opencode 1.5.0-beta.1 → 1.5.0-beta.10

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/.pantheon/code-mode/manifest.json +21 -0
  2. package/CHANGELOG.md +1026 -0
  3. package/README.md +171 -16
  4. package/README.pt-BR.md +99 -13
  5. package/bin/pantheon-init.mjs +178 -21
  6. package/package.json +23 -14
  7. package/plugin.json +1 -1
  8. package/pyproject.toml +65 -0
  9. package/scripts/code_mode_server.py +431 -55
  10. package/scripts/cost.mjs +30 -14
  11. package/scripts/doctor.mjs +178 -9
  12. package/scripts/install/cli-ui.mjs +17 -11
  13. package/scripts/install/config-migration.mjs +4 -6
  14. package/scripts/install/opencode.mjs +137 -35
  15. package/scripts/install/plugin.mjs +3 -33
  16. package/scripts/install/shared.mjs +43 -2
  17. package/scripts/install/strings.mjs +129 -0
  18. package/scripts/install-mcp.mjs +1 -0
  19. package/scripts/manifest-inventory.mjs +410 -0
  20. package/scripts/mcp_persistence_server.py +537 -128
  21. package/scripts/package-evidence.mjs +242 -0
  22. package/scripts/probe-context-rehydrate.mjs +240 -0
  23. package/scripts/probe-pantheon-cost.mjs +313 -0
  24. package/scripts/release-beta-version.mjs +56 -60
  25. package/scripts/sync-artifacts.mjs +169 -0
  26. package/scripts/sync-tui.mjs +121 -53
  27. package/scripts/test-opencode-v1-v2-sandbox.sh +367 -96
  28. package/scripts/validation-policy.mjs +7 -7
  29. package/scripts/version-check.mjs +113 -108
  30. package/scripts/versioning.mjs +230 -86
  31. package/src/agents/mnemosyne.md +1 -1
  32. package/src/agents/zeus.md +2 -2
  33. package/src/mcp/code_mode_server.py +431 -55
  34. package/src/mcp/mcp_persistence_server.py +537 -128
  35. package/src/pantheon/auto-wake.ts +1 -5
  36. package/src/pantheon/background-job-board.ts +43 -1
  37. package/src/pantheon/compaction-handoff.ts +304 -0
  38. package/src/pantheon/cost-command.ts +345 -62
  39. package/src/pantheon/delegate-manager.ts +390 -8
  40. package/src/pantheon/delegation-finalize.ts +32 -0
  41. package/src/pantheon/delegation.ts +235 -18
  42. package/src/pantheon/file-persistence-salvage.ts +64 -0
  43. package/src/pantheon/file-persistence.ts +194 -45
  44. package/src/pantheon/native-probe.ts +234 -0
  45. package/src/pantheon/native-task-status.ts +139 -0
  46. package/src/pantheon/provider-capabilities.ts +221 -0
  47. package/src/pantheon/provider-stream-tracker.ts +182 -0
  48. package/src/pantheon/shared-board.ts +37 -0
  49. package/src/pantheon/task-result-guard.ts +107 -0
  50. package/src/pantheon/token-opt.ts +146 -12
  51. package/src/pantheon/tool-ceiling.ts +159 -0
  52. package/src/pantheon/v2-events.ts +18 -1
  53. package/src/plugin-v2.ts +2 -14
  54. package/src/plugin.ts +28 -17
  55. package/src/plugins/pantheon-hooks.ts +51 -0
  56. package/src/plugins/tui/dist/server.d.ts +1 -1
  57. package/src/plugins/tui/dist/server.d.ts.map +1 -1
  58. package/src/plugins/tui/dist/server.js +1 -1
  59. package/src/plugins/tui/dist/server.js.map +1 -1
  60. package/src/plugins/tui/dist/tui.d.ts +116 -27
  61. package/src/plugins/tui/dist/tui.d.ts.map +1 -1
  62. package/src/plugins/tui/dist/tui.js +414 -150
  63. package/src/plugins/tui/dist/tui.js.map +1 -1
  64. package/src/plugins/tui/dist/tui.tsx +447 -84
  65. package/src/plugins/tui/package-lock.json +2 -2
  66. package/src/plugins/tui/package.json +1 -1
  67. package/src/plugins/tui/src/index.tsx +447 -84
  68. package/.pantheon/code-mode/.gitkeep +0 -0
  69. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-1.json +0 -8
  70. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-10.json +0 -8
  71. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-11.json +0 -8
  72. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-2.json +0 -8
  73. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-3.json +0 -8
  74. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-4.json +0 -8
  75. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-5.json +0 -8
  76. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-6.json +0 -8
  77. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-7.json +0 -8
  78. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-8.json +0 -8
  79. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/checkpoint-9.json +0 -8
  80. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/heartbeat.json +0 -8
  81. package/.pantheon/code-mode/.pantheon/deepwork/initial-token-40k/session.json +0 -11
  82. package/src/pantheon/delegate-task-adapter.ts +0 -444
package/CHANGELOG.md ADDED
@@ -0,0 +1,1026 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
+
7
+
8
+ ## [Unreleased]
9
+
10
+ <!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
11
+ move this section to a versioned entry and reset the template below. -->
12
+
13
+ ## 🆕 What's New
14
+
15
+ ## 🐞 Fixed
16
+
17
+ ## ⚠️ Known Issues
18
+
19
+ ## ✅ Closed Issues
20
+
21
+ ## [v1.5.0-beta.10] - 2026-09-14
22
+
23
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
24
+ move this section to a versioned entry and reset the template below. --&gt;
25
+
26
+ ## 🆕 What's New
27
+
28
+ - **TUI delegations com prefixos curtos `nat:` / `pan:`:** cada linha do painel passa
29
+ a usar `nat:<agent>` para child nativo do `task()` (sem report no board) ou
30
+ `pan:<alias>` para linha `pantheon_delegate` (ex. `pan:apo-1`) — os prefixos curtos
31
+ liberam largura no sidebar estreito.
32
+ - **Glyph de 2 canais (◇/◆):** ◇ vazado (info/cyan) para child nativo e ◆ preenchido
33
+ (cor de estado) para linha do board — forma e cor são canais independentes, então o
34
+ split segue legível mesmo sem cor.
35
+ - **Header resumido:** `(N active · M done · nat:K pan:M)` calculado sobre a lista
36
+ completa (active + recent + archived), no lugar do antigo `(N native + M pantheon)`.
37
+ - **Elapsed em caixa fixa:** rótulo alinhado à direita em largura 8 e SEMPRE
38
+ renderizado, então um job ativo sem descrição nunca perde o timer.
39
+ - **100 testes TUI delegations:** `tests/pantheon/tui-delegations.test.ts` com 100/100
40
+ passando (tsc + biome OK), acima dos 93 da beta.9.
41
+
42
+ ## 🐞 Fixed
43
+
44
+ - **`appendFile` sem import (log do painel volta a escrever):** o log em arquivo do
45
+ painel parou de escrever silenciosamente porque `appendFile` era chamado sem import
46
+ (ReferenceError engolido pelo `catch` vazio); o import foi restaurado e o `catch`
47
+ agora reporta a falha (gated por echo) em vez de sumir.
48
+ - **Truncamento grapheme-safe:** descrições truncam em fronteiras de grapheme
49
+ (`Intl.Segmenter` com fallback `Array.from`) em 44 graphemes, sem cortar emoji ou
50
+ sequências ZWJ ao meio (mojibake).
51
+ - **Linhas stale-running ficam em Active:** um job stale ainda é um job vivo (estado do
52
+ backend inalterado), então não é mais arquivado — o que escondia a linha lançada.
53
+ - **Spinner/animação de 140ms → 1000ms:** o tick rápido piscava sem adicionar informação.
54
+ - **Dead code removido:** conectores de árvore (`isNestedDelegation` /
55
+ `delegationTreePrefix`) e campos `parentTaskID`/`childCount` removidos —
56
+ `session.children` só devolve filhos diretos, então nenhuma linha nested era
57
+ produzida (BACKLOG).
58
+ ## [v1.5.0-beta.9] - 2026-09-14
59
+
60
+ <!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
61
+ move this section to a versioned entry and reset the template below. -->
62
+
63
+ ## 🆕 What's New
64
+
65
+ - **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.
66
+ - **93 testes TUI delegations:** suite `tests/pantheon/tui-delegations.test.ts` com 93/93 passando (tsc + biome OK).
67
+ - **E2E beta.8 PASS (referência):** baseline E2E da beta.8 mantido como referência de estabilidade para beta.9.
68
+
69
+ ## 🐞 Fixed
70
+
71
+ - Removido diretório `testyes/` (artefato de teste).
72
+ - Truncado `hooks.log` para baseline limpo de beta.9.
73
+
74
+ ## [v1.5.0-beta.8] - 2026-09-13
75
+
76
+ <!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
77
+ move this section to a versioned entry and reset the template below. -->
78
+
79
+ ## 🐞 Fixed
80
+
81
+ - **Board persistence is corruption- and concurrency-safe:** state writes now go
82
+ through a UNIQUE temp file (per-process, per-write counter + random suffix), are
83
+ `fsync`ed, then renamed over the destination with bounded ENOENT retries, and
84
+ read-modify-write cycles on the same state path are serialized. This closes the
85
+ window where two writers could interleave and corrupt `state.json` or race the
86
+ rename.
87
+ - **Corrupt board state is quarantined and salvaged:** a malformed `state.json` is
88
+ moved aside to `<state>.corrupt-<ts>`, a clear error is logged, and every complete
89
+ record that can be parsed is salvaged and returned instead of throwing — so
90
+ delete/prune/recover callers cannot get stuck in a retry loop.
91
+ - **P1-1 — no orphan `.signal.json` on reconcile:** reconcile now deletes any
92
+ still-pending wake signal instead of re-writing it. Reconcile is an
93
+ acknowledgment, not a new terminal transition, so the finalize→reconcile cycle
94
+ no longer leaves a stale `<alias>.signal.json` with `state:"reconciled"` behind.
95
+ - **Unresolved `{sessionID}` template guard:** the TUI/runtime can hand the plugin
96
+ the unsubstituted literal `{sessionID}` (or `%7BsessionID%7D`) when no session is
97
+ focused; the plugin now refuses placeholder session ids at the delegation,
98
+ bootstrap-probe, and activity-sample boundaries instead of forwarding them to the
99
+ session API (which rejected every call).
100
+ - **Delegation lookup scoped to the calling session:** `pantheon_delegation_read`
101
+ resolves exact task IDs first (must belong to the caller's session), then alias
102
+ matches within that session (exactly one required). Cross-session and ambiguous
103
+ aliases now return explicit errors instead of the generic "Unknown delegation".
104
+
105
+
106
+ ## [v1.5.0-beta.7] - 2026-09-13
107
+
108
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
109
+ move this section to a versioned entry and reset the template below. --&gt;
110
+
111
+ ## 🆕 What's New
112
+
113
+ - **Cost CLI fallback + `PANTHEON_NODE`:** `pantheon_cost` falls back to a
114
+ read-only `node scripts/cost.mjs` subprocess when `node:sqlite` is
115
+ unavailable in the host runtime (for example under Bun). The fallback
116
+ resolves a real Node.js binary — `PANTHEON_NODE` first, then `node` on
117
+ `PATH` — probes it for `node:sqlite` support (Node.js >= 22.5), and runs it
118
+ with an argument array, never a shell. Previously the tool returned
119
+ `status: UNSUPPORTED` with no fallback.
120
+ - **Delegation engine contract (ADR-0011):** legacy `pantheon_delegate` remains
121
+ the default engine through v1.5.x; native delegation is opt-in and
122
+ experimental via `PANTHEON_DELEGATE_MODE=native` until v1.6. See
123
+ [ADR-0011](https://github.com/ils15/pantheon-opencode/pull/126) (Proposed).
124
+
125
+ ## 🐞 Fixed
126
+
127
+ - **Legacy read-only bypass on retry (P0):** a retried delegation now
128
+ re-applies read-only enforcement (the same rule as the initial child) and
129
+ registers the retry session, closing the bypass where a retried child could
130
+ write despite `read_only: true` or being a read-only agent.
131
+ - **Kill-switch scope (P0):** `PANTHEON_DELEGATION=off` now also disables the
132
+ legacy engine, not only the native manager — the legacy delegate/read/list
133
+ tools throw as documented.
134
+ - **Delegation signal leak (P1):** the legacy finalize path now deletes the
135
+ auto-wake signal file, so terminal delegations no longer leave stale
136
+ `.signal.json` artifacts behind.
137
+ - **Crash recovery is durable (P1):** `recoverRunningJobs` persists the
138
+ `error` state, marks the job `terminalUnreconciled`, and emits the terminal
139
+ signal plus notification for every reaped job instead of updating memory
140
+ only.
141
+ - **Atomic concurrency (P1):** `registerLaunch` validates
142
+ `maxConcurrentPerAgent` before any mutation, so concurrent dispatches cannot
143
+ both claim the last slot. A refused launch tears down the orphan child
144
+ session (read-only unregister plus `session.delete`) and the retry path
145
+ re-validates the same limit.
146
+ - **Legacy board hygiene (P1):** the legacy finalize path now runs
147
+ `pruneCompleted` and `enforceEntryCap`, matching the native manager and
148
+ preventing unbounded board growth.
149
+ - **Resilient V2 events:** a native child refused by the per-agent limit is
150
+ logged and skipped instead of aborting the rest of the event handler.
151
+ ## [v1.5.0-beta.6] - 2026-09-12
152
+
153
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
154
+ move this section to a versioned entry and reset the template below. --&gt;
155
+
156
+ ## 🆕 What's New
157
+
158
+ - **Delegation panel v2:** live tool activity per running delegation
159
+ (`↳ bash npm test` — what the child is doing right now), a paginated
160
+ `Archived (n)` section for terminal reports beyond the recent 8, and a
161
+ distinct `retry` state (⟳ marker, RETRYING label) instead of lumping
162
+ retries into running.
163
+
164
+ ## 🐞 Fixed
165
+
166
+ - **Stale plugin refs from old installs:** the installer now prunes
167
+ `pantheon-opencode` plugin references pointing at other installed copies of
168
+ the package (older nvm prefixes, npx cache hashes). Previously every init
169
+ accumulated refs from past installs and the oldest — without the newest
170
+ fixes — won the plugin load race, silently disabling native-task
171
+ mirroring. Third-party plugins sharing the same file names remain
172
+ protected.
173
+ - **Docs:** `@beta` dist-tag guidance on all npx commands — plain
174
+ `npx pantheon-opencode` resolves the stable release and silently downgrades
175
+ the installed TUI copy.
176
+ ## [v1.5.0-beta.5] - 2026-09-12
177
+
178
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
179
+ move this section to a versioned entry and reset the template below. --&gt;
180
+
181
+ ## 🆕 What's New
182
+
183
+ - **Native background tasks in the delegation panel:** tasks dispatched via
184
+ the native `task(background=true)` tool are now mirrored onto the shared
185
+ BackgroundJobBoard, so the TUI delegation panel tracks them while running
186
+ and the existing finalize path writes their terminal report.
187
+ - **`pantheon-opencode update`:** one command updates the global package
188
+ (beta or stable channel) and re-runs init to refresh config, venv and MCP
189
+ entries. The installer stamps the installed version and `doctor` warns when
190
+ the package is newer than the last sync.
191
+ - **Always-fresh artifacts:** the package postinstall now refreshes all
192
+ copy-only artifacts (agents, skills, AGENTS.md, commands, MCP scripts,
193
+ code-mode payload) into existing installations on every `npm install`; a CI
194
+ gate rebuilds the TUI bundle and fails if the committed `dist/` is stale.
195
+ - **More resilient installer:** preflight checks for python3/npm before any
196
+ file is written, atomic `opencode.json` writes with a `.bak` backup,
197
+ non-fatal Python runtime setup (a venv failure now omits MCP entries with a
198
+ warning instead of pointing at a broken interpreter), `--components` /
199
+ `--clean` / `--opencode-version auto` flags, unknown-flag warnings and
200
+ pt-BR/EN message auto-detection via `LANG`.
201
+ - **Roadmap zerado:** o plano ativo não tem mais itens pendentes. Sprints
202
+ nunca implementados dos planos v1.0/v1.0+ foram removidos; o contrato atual
203
+ passou a documentar o code-mode (manifest SHA-256, resolução project-first).
204
+
205
+ ## 🐞 Fixed
206
+
207
+ - **Code-mode project resolution (#112):** the MCP now resolves project code-mode
208
+ scripts before global scripts, honors `PANTHEON_PROJECT`, and fails closed on
209
+ project manifest errors; the installer sets `cwd: "."`.
210
+ - **Code-mode manifest doctor check (#113):** `doctor` validates manifest shape,
211
+ script membership, and SHA-256 hashes without regenerating the manifest.
212
+ ## [v1.5.0-beta.4] - 2026-09-11
213
+
214
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
215
+ move this section to a versioned entry and reset the template below. --&gt;
216
+
217
+ ## 🆕 What's New
218
+
219
+ - **Native delegation contract (B3-05):** adds the nine-code `NativeTaskStatus` contract, a session-lazy cached capability probe, atomic board registration for native children, strict `PANTHEON_DELEGATE_MODE=native` without fallback/failover/retry, and status in delegation receipts.
220
+
221
+ - **Cost backend (B3-06):** `pantheon_cost` now uses a single read-only `node:sqlite` backend; the CLI fallback was removed. The common contract reports `UNSUPPORTED` when `node:sqlite` is unavailable and `CORRUPT_DATA`/`UNAVAILABLE` with diagnostic details on stderr; includes a sandbox probe.
222
+
223
+ - **Tool ceiling (B3-07):** C9/tool ceiling is fed only by real host data from `message.updated` plus `config.providers()`; lexical fallback is removed. Hosts without the capability report `UNSUPPORTED`, malformed data reports `CORRUPT_DATA`, and malformed events are guarded defensively.
224
+
225
+ - **Code-mode explicit installation (B3-08):** `pantheon-code-mode` no longer executes scripts implicitly. A script runs only when listed in `.pantheon/code-mode/manifest.json` with a matching SHA-256; the installer seeds the manifest for bundled scripts and a new `approve_code_script` tool opts in or refreshes a script. Missing manifest reports `INVALID_STATE`, unlisted scripts `CONFLICT`, and hash mismatches `CORRUPT_DATA`.
226
+
227
+ ## 🐞 Fixed
228
+
229
+ - **ECIGLOBAL fix (sync-tui):** `npm install -g` no longer fails with ECIGLOBAL — `scripts/sync-tui.mjs` now sanitizes `npm_config_*` global-context vars (case-insensitive) from the nested `npm ci` environment.
230
+ - **npm tarball inclusion:** CHANGELOG.md is now included in the npm tarball
231
+ (added to the `files` allowlist in `package.json`).
232
+
233
+ - **Task Result Guard**: native `task()` empty results are now detected and
234
+ converted to explicit errors in the `tool.execute.after` hook. Previously,
235
+ when a provider rejected a child session (e.g. `BackendAdmissionRejected`
236
+ from free-tier admission control), the error was silently swallowed — the
237
+ child completed with empty output and the parent LLM proceeded as if the
238
+ task succeeded. The guard replaces empty `task()` output with an error
239
+ message so the parent sees a failure. (`task-result-guard.ts`)
240
+ ## [v1.5.0-beta.3] - 2026-09-10
241
+
242
+ &lt;!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
243
+ move this section to a versioned entry and reset the template below. --&gt;
244
+
245
+ ### Changed
246
+
247
+ - **CI fail-closed:** `ci.yml` no longer falls back from `npm ci` to
248
+ `npm install`, and pytest/audit failures are no longer swallowed. The
249
+ workflow now runs lint, typecheck, `test:ts`, Python tests, Node tests and
250
+ `npm audit`/`pip-audit` as blocking gates.
251
+ - **Release authorization is dispatch-only:** `release.yml` no longer triggers
252
+ on PR labels or any `pull_request` event. Publication is
253
+ authorized only by an explicit `workflow_dispatch`; the `release_channel`
254
+ input (`stable` default, `beta`) selects the channel. Beta versions are
255
+ committed sequential `X.Y.Z-beta.N` (bumped via
256
+ `node scripts/versioning.mjs apply --beta`); no runtime version computation.
257
+ - **Sandbox gate is PASS-only:** `test-opencode-v1-v2-sandbox.sh` no longer
258
+ classifies failures as `AMBIENTAL`/`NOT_TESTED`, has no prompt retry, and
259
+ treats missing binaries/projects/probes, timeouts and auth/network/provider
260
+ failures as blocking. Exit 0 now requires an explicit PASS on every check.
261
+ - **Validation policy is PASS-only:** `doctor` exit != 0 (including legacy
262
+ exit 1 warnings), unknown or non-numeric statuses block validation;
263
+ WARN/SKIP/AMBIENTAL/NOT_TESTED never produce exit 0.
264
+ - **No npm install fallback in TUI/install paths:** `sync-tui.mjs` and the
265
+ plugin installer propagate `npm ci` failures instead of falling back to
266
+ `npm install`; `PANTHEON_ALLOW_NPM_INSTALL_FALLBACK` is not supported.
267
+ - **Lockfile-backed installs:** the root (`package.json` + `package-lock.json`)
268
+ and TUI (`src/plugins/tui/package.json` + `src/plugins/tui/package-lock.json`)
269
+ are validated independently with `npm ci --ignore-scripts`. A failure blocks
270
+ the run; there is no `npm install` fallback.
271
+ - **Release artifact identity:** each release carries one `.tgz` tarball and
272
+ the SHA-256 of that same file from validation through publication. The
273
+ tarball and release metadata are bound to the full `TARGET_SHA`; repacking is
274
+ not an equivalent artifact.
275
+ - **Intentional MCP divergence:** `scripts/memory_mcp_server.py` keeps the
276
+ lightweight `memory_*` contract while `src/mcp/memory_mcp_server.py` also
277
+ exposes the optional codemap tools. The other shared MCP copies remain
278
+ identical; this pair is not to be overwritten by synchronization.
279
+ - **Sandbox scope:** a PASS from the prepared isolated sandbox is not proof of
280
+ support for every real host or untested host configuration.
281
+
282
+ ### Breaking Changes
283
+
284
+ - Release automation requires a manual `workflow_dispatch`; labeling a PR no
285
+ longer publishes anything.
286
+ - The sandbox validator exits non-zero when environmental checks cannot run
287
+ (missing binaries, provider auth, timeouts) instead of reporting them as
288
+ non-blocking.
289
+ - `PANTHEON_ALLOW_NPM_INSTALL_FALLBACK` has no effect; `npm ci` failures now
290
+ fail the install/sync step.
291
+ ## [1.5.0] - 2026-09-01 (candidate)
292
+
293
+ ### Changed
294
+
295
+ - **MCP flat map:** the installer and config migration keep MCP servers as the
296
+ named top-level map — the `mcp.servers` wrapper is rejected by OpenCode
297
+ 1.18.18 (`Missing key mcp.servers.enabled`). Legacy wrapped entries are
298
+ unwrapped and `disabled` flags are normalized back to `enabled`.
299
+ - **Deterministic plugin installs:** the TUI plugin ships its lockfile and
300
+ installs with `npm ci --omit=dev`; failures are propagated without an
301
+ `npm install` fallback.
302
+ - **Uninstall CLI:** new `node scripts/uninstall.mjs --project|--global` with
303
+ ownership checks, `--dry-run` and `--force`.
304
+ - **OpenCode-only:** platform guides consolidated into a single OpenCode
305
+ guide; Pantheon 1.5.0 targets OpenCode exclusively.
306
+ - **OpenCode V2 plugin:** the V2 contract registers 9 orchestration tools
307
+ (`pantheon_delegate`, `pantheon_delegation_read`, `pantheon_delegation_list`,
308
+ `hashline_edit`, `pantheon_goal_create`, `pantheon_goal_get`,
309
+ `pantheon_goal_update`, `pantheon_cost`, `pantheon_model`), 4 event
310
+ subscriptions, session hooks (`prompt`, `context`) and tool hooks
311
+ (`execute.before`, `execute.after`).
312
+
313
+ ## [v1.4.3] - 2026-09-03
314
+
315
+ ### Changed
316
+
317
+ - Synchronized the 1.4.3 release version across `package.json`,
318
+ `package-lock.json`, `plugin.json`, `pyproject.toml`, and the TUI package.
319
+
320
+ ## [v1.4.2] - 2026-08-27
321
+
322
+ ### Changed
323
+ - Synchronized release metadata across project manifests.
324
+ ## [1.4.1] - 2026-08-26 (candidate)
325
+
326
+ ### Changed
327
+
328
+ - **Delegation output:** removed the legacy delegate echo path. Terminal visibility now uses the board, list/read tools, file-only audit logs, and TUI toasts; chat transcript delivery remains disabled.
329
+ - **Model inheritance:** child sessions no longer receive a hardcoded `model` or `small_model`. Only an explicitly active routing profile (or an explicit delegate model) supplies an override; otherwise OpenCode inherits the parent model.
330
+ - **Compaction carry-forward:** context is written through `output.context` during `experimental.session.compacting`, before `session.compacted` runs, preserving the correct lifecycle order without chat injection.
331
+
332
+ ### Fixed
333
+
334
+ - **Empty child output:** a child marked completed without assistant or tool output now becomes an explicit error: `Child session produced no assistant or tool output`.
335
+ - **Terminal toast delivery:** toast delivery is resilient to missing or failing TUI clients, is gated by `PANTHEON_TOASTS`, and deduplicates repeated terminal events for the same delegation.
336
+ - **Chat noise:** removed the remaining transcript/reminder delivery paths for delegation completion and compaction state.
337
+
338
+ ### Tests
339
+
340
+ - Added regression coverage for delegate output validation, terminal-toast gating/deduplication, native model inheritance, and compaction context ordering.
341
+ - Updated the relevant Node/TypeScript tests and installation/model-routing checks; global-install behavior remains validated through the isolated sandbox when run.
342
+ - Release verification caveat: `npm test` reported 240 passing tests and 1 environmental failure (`fork: Resource temporarily unavailable`); rerun on a host with sufficient process resources before treating the candidate as fully verified.
343
+
344
+ ## [1.4.0] - 2026-08-25
345
+
346
+ ### Added
347
+
348
+ - **Codebase knowledge graph:** added the `pantheon-memory` codemap module with code entities, relations, file hashes, FTS5 search, and `code_index`, `code_query`, and `code_neighbors` tools for Python and TypeScript codebases.
349
+ - **Context-window optimization:** added `tool.execute.after` output sandboxing for `read`, `grep`, `glob`, and `webfetch`, with truncation markers and lower per-session output volume.
350
+
351
+ ### Fixed
352
+
353
+ - **Installed TUI version display:** version detection now checks the installed TUI package before the development-tree package, fixing null versions in global installs and the sandbox.
354
+ - **Bash command portability:** normalized `python` commands to `python3` where the host does not provide a `python` executable.
355
+
356
+ ### Tests
357
+
358
+ - The release entry records the implementation and coverage reported by the session; no additional release-level test result is asserted here.
359
+
360
+ ## [1.3.7] - 2026-08-24
361
+
362
+ ### Added
363
+
364
+ - **Stale-running detector:** the job board warns about entries running for more than 30 minutes without activity, and the Markdown parser rejects synthetic `running` states.
365
+ - **TUI auto-update:** postinstall synchronization and a runtime version check keep the installed TUI files current.
366
+
367
+ ### Fixed
368
+
369
+ - **Stale delegate display:** corrected stale-running entries in the TUI delegation view.
370
+ - **Orphan cleanup:** connected `finalizeIdleChildrenWithoutMd` to the periodic 30-second scan at plugin initialization.
371
+
372
+ ### Tests
373
+
374
+ - Closed issue #68 covering the TUI stale-state and auto-update fixes.
375
+
376
+ [v1.4.3]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.4.3
377
+ [1.4.0]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.4.0
378
+ [1.3.7]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.3.7
379
+ [1.3.6]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.3.6
380
+
381
+
382
+ ## [1.3.6] - 2026-08-22
383
+
384
+ ### Added
385
+
386
+ - **Recency decay in `memory_search` (src/mcp/memory_mcp_server.py)** — new `decay_days` param (default `None`, backward compatible) applies a freshness half-life `2^(-days_since_created/decay_days)` to RRF-fused scores, so older memories rank lower when enabled. `_rrf_fuse` accepts an optional `created_at_map`; tool description and docs updated (docs/MEMORY.md, docs/MCP.md, docs/mcp-tools.md).
387
+ - **Themis Comment Checker (src/agents/themis.md)** — Layer 1 review now flags generated code that is indistinguishable from human-written: excessive/obvious comments (`// increment i`, `# set x to 5`), commented-out dead code, and boilerplate headers.
388
+ - **Doc drift fixes** — MEMORY.md/MCP.md/mcp-tools.md now describe the real sqlite-vec + fastembed implementation (6 tools) instead of the stale ChromaDB 14-tool design; freshness decay documented as opt-in via `decay_days`.
389
+ - **scripts/ resynced with src/mcp/** — `mcp_resources_server.py` (routing project fallback), `code_mode_server.py` (comment drift), `memory_mcp_server.py`, `mcp_persistence_server.py`, `_pantheon_paths.py` regenerated from canonical source; tests now point at `src.mcp.*` so they exercise canonical code.
390
+ - **mcp-registry.yml synced** — real tool names (`memory_store/search/recall/forget/list/stats`, `kv_*`, `execute_code_script`, `vision_*`) + `pantheon-vision` server added.
391
+ - **Persistence MCP server test suite (tests/test_mcp_persistence_server.py)** — 32 tests covering kv_store/kv_get (incl. TTL expiry), kv_list, kv_search (FTS5), kv_delete, kv_delete_namespace, purge_expired (dry_run + deletelog), context_save/get/list/stats (latest pointer, session isolation) and namespace/scope isolation — the only previously untested MCP server now has full coverage.
392
+ - **CRITICAL TTL expiry fix (src/mcp/mcp_persistence_server.py)** — ISO `expires_at` timestamps (with `T` separator) compared lexicographically against SQLite's space-separated `datetime('now')` were ALWAYS greater on the same date, so TTL entries never expired (kv_get never returned None, purge_expired never purged, the 4h checkpoint TTL never fired). All 9 comparison sites now normalize via `datetime(expires_at)` — restoring the crash-recovery checkpoint path.
393
+ - **`_resolve_db_path` fix (src/mcp/mcp_persistence_server.py)** — with an explicit `--project-db`, deletelog writes and db_size stats pointed at the repo's real project.db instead of the actual DB path; the resolved path is now tracked at init.
394
+ - **Code-mode script metadata (src/mcp/code_mode_server.py)** — optional comment-style YAML frontmatter (`# ---` delimiters) on scripts: `description`, `timeout` (per-script override, seconds), `allowed_args` (arg allowlist). Exposed via `pantheon://code-mode/scripts/{name}` and the new `json_output=true` structured result (stdout/stderr/exit_code/duration_ms/timed_out/metadata). Malformed/missing frontmatter fails open. Documented in `.pantheon/code-mode/README.md`.
395
+ - **Per-script timeout override (src/mcp/code_mode_server.py)** — frontmatter `timeout` overrides the 30s default in the subprocess `wait_for`; kill-on-timeout preserved (tested: `timeout: 2` script killed at ~2s).
396
+ - **`_parse_iso_ts` UTC fix (src/mcp/memory_mcp_server.py)** — legacy naive timestamps from `DEFAULT (datetime('now'))` (`YYYY-MM-DD HH:MM:SS`, no TZ) are now assumed UTC instead of local timezone before `.timestamp()`, keeping freshness decay correct.
397
+ - **StepCapTracker permanent-per-process documented (src/pantheon/step-cap.ts)** — counters accumulate for the process lifetime and are intentionally not reset on success/session end; `reset()` remains a tested utility. Documented in routing.yml + README.
398
+ - **High-level R1 integration tests (tests/pantheon/zeus-delegate-with-retry.test.ts)** — `zeusDelegateWithRetry` with retryPolicy/cooldown: policy-driven retry-then-success (empty → 1 retry → recovered content), 0-retry escalate, and cooldown skip.
399
+ - **R4 per-agent step caps (src/pantheon/step-cap.ts + src/routing.yml)** — every routed agent gets a `max_steps` budget (explore 25, reviewer 25, oracle 15, hermes 40, zeus 60, …); at the cap the delegation is forced to summarize-and-stop via `buildStopInstruction`/`cappedSummary`; counters are permanent-per-process by design.
400
+ - **O5 permission.task globs (src/pantheon/permission-globs.ts)** — allow/deny glob rules controlling which subagents may be delegated; deny rules remove the target from Zeus's task tool entirely (`delegation-enforce`), with matching filtering in finalize and the agent-list description.
401
+ - **plugin-eval certification suite (.pantheon/code-mode/)** — `eval-static.py` (structural checks: frontmatter/secrets/file refs), `eval-llm-judge.py` (LLM quality layer), `eval-monte-carlo.py` (simulated-run reliability, exits 1 below 75%), `eval-run.py` (orchestrator emitting one report JSON; below-threshold layers still score), plus `eval_store` persistence and `pantheon://eval` resources exposing latest certification scores.
402
+
403
+ ### Fixed
404
+
405
+ - memory_search doc drift: freshness decay was documented but not implemented — now real via `decay_days`.
406
+ - scripts/ copies stale vs src/mcp/ canonical sources (missing routing project fallback, stale comments).
407
+ - .pantheon/mcp-registry.yml listed non-existent tools (memory_compress, memory_expand, list_agents) and missed pantheon-vision.
408
+
409
+
410
+ ### Tests
411
+
412
+ - The entry records the persistence, integration, and certification test coverage explicitly listed above; no aggregate release-level result was available in the source notes.
413
+
414
+
415
+ ## [1.3.6-beta] - 2026-08-21
416
+
417
+ ## 🆕 What's New
418
+
419
+ - **Recency decay in `memory_search` (src/mcp/memory_mcp_server.py)** — new `decay_days` param (default `None`, backward compatible) applies a freshness half-life `2^(-days_since_created/decay_days)` to RRF-fused scores, so older memories rank lower when enabled. `_rrf_fuse` accepts an optional `created_at_map`; tool description and docs updated (docs/MEMORY.md, docs/MCP.md, docs/mcp-tools.md).
420
+ - **Themis Comment Checker (src/agents/themis.md)** — Layer 1 review now flags generated code that is indistinguishable from human-written: excessive/obvious comments (`// increment i`, `# set x to 5`), commented-out dead code, and boilerplate headers.
421
+ - **Doc drift fixes** — MEMORY.md/MCP.md/mcp-tools.md now describe the real sqlite-vec + fastembed implementation (6 tools) instead of the stale ChromaDB 14-tool design; freshness decay documented as opt-in via `decay_days`.
422
+ - **scripts/ resynced with src/mcp/** — `mcp_resources_server.py` (routing project fallback), `code_mode_server.py` (comment drift), `memory_mcp_server.py`, `mcp_persistence_server.py`, `_pantheon_paths.py` regenerated from canonical source; tests now point at `src.mcp.*` so they exercise canonical code.
423
+ - **mcp-registry.yml synced** — real tool names (`memory_store/search/recall/forget/list/stats`, `kv_*`, `execute_code_script`, `vision_*`) + `pantheon-vision` server added.
424
+ - **Persistence MCP server test suite (tests/test_mcp_persistence_server.py)** — 32 tests covering kv_store/kv_get (incl. TTL expiry), kv_list, kv_search (FTS5), kv_delete, kv_delete_namespace, purge_expired (dry_run + deletelog), context_save/get/list/stats (latest pointer, session isolation) and namespace/scope isolation — the only previously untested MCP server now has full coverage.
425
+ - **CRITICAL TTL expiry fix (src/mcp/mcp_persistence_server.py)** — ISO `expires_at` timestamps (with `T` separator) compared lexicographically against SQLite's space-separated `datetime('now')` were ALWAYS greater on the same date, so TTL entries never expired (kv_get never returned None, purge_expired never purged, the 4h checkpoint TTL never fired). All 9 comparison sites now normalize via `datetime(expires_at)` — restoring the crash-recovery checkpoint path.
426
+ - **`_resolve_db_path` fix (src/mcp/mcp_persistence_server.py)** — with an explicit `--project-db`, deletelog writes and db_size stats pointed at the repo's real project.db instead of the actual DB path; the resolved path is now tracked at init.
427
+ - **Code-mode script metadata (src/mcp/code_mode_server.py)** — optional comment-style YAML frontmatter (`# ---` delimiters) on scripts: `description`, `timeout` (per-script override, seconds), `allowed_args` (arg allowlist). Exposed via `pantheon://code-mode/scripts/{name}` and the new `json_output=true` structured result (stdout/stderr/exit_code/duration_ms/timed_out/metadata). Malformed/missing frontmatter fails open. Documented in `.pantheon/code-mode/README.md`.
428
+ - **Per-script timeout override (src/mcp/code_mode_server.py)** — frontmatter `timeout` overrides the 30s default in the subprocess `wait_for`; kill-on-timeout preserved (tested: `timeout: 2` script killed at ~2s).
429
+ - **`_parse_iso_ts` UTC fix (src/mcp/memory_mcp_server.py)** — legacy naive timestamps from `DEFAULT (datetime('now'))` (`YYYY-MM-DD HH:MM:SS`, no TZ) are now assumed UTC instead of local timezone before `.timestamp()`, keeping freshness decay correct.
430
+ - **StepCapTracker permanent-per-process documented (src/pantheon/step-cap.ts)** — counters accumulate for the process lifetime and are intentionally not reset on success/session end; `reset()` remains a tested utility. Documented in routing.yml + README.
431
+ - **High-level R1 integration tests (tests/pantheon/zeus-delegate-with-retry.test.ts)** — `zeusDelegateWithRetry` with retryPolicy/cooldown: policy-driven retry-then-success (empty → 1 retry → recovered content), 0-retry escalate, and cooldown skip.
432
+ - **R4 per-agent step caps (src/pantheon/step-cap.ts + src/routing.yml)** — every routed agent gets a `max_steps` budget (explore 25, reviewer 25, oracle 15, hermes 40, zeus 60, …); at the cap the delegation is forced to summarize-and-stop via `buildStopInstruction`/`cappedSummary`; counters are permanent-per-process by design.
433
+ - **O5 permission.task globs (src/pantheon/permission-globs.ts)** — allow/deny glob rules controlling which subagents may be delegated; deny rules remove the target from Zeus's task tool entirely (`delegation-enforce`), with matching filtering in finalize and the agent-list description.
434
+ - **plugin-eval certification suite (.pantheon/code-mode/)** — `eval-static.py` (structural checks: frontmatter/secrets/file refs), `eval-llm-judge.py` (LLM quality layer), `eval-monte-carlo.py` (simulated-run reliability, exits 1 below 75%), `eval-run.py` (orchestrator emitting one report JSON; below-threshold layers still score), plus `eval_store` persistence and `pantheon://eval` resources exposing latest certification scores.
435
+
436
+ ## 🐞 Fixed
437
+
438
+ - memory_search doc drift: freshness decay was documented but not implemented — now real via `decay_days`.
439
+ - scripts/ copies stale vs src/mcp/ canonical sources (missing routing project fallback, stale comments).
440
+ - .pantheon/mcp-registry.yml listed non-existent tools (memory_compress, memory_expand, list_agents) and missed pantheon-vision.
441
+
442
+ ## [1.3.5] - 2026-08-21
443
+
444
+ ## 🆕 What's New
445
+
446
+ - **PT patterns para delegação (routing.yml)** — adiciona 5 padrões PT (`procure`/`busque`/`encontre`/`localize`/`pesquise`) ao `intent_gate` research → apollo, corrigindo detecção de intenção para prompts em português (PR #61).
447
+ - **Zeus read guard (delegation-enforce.ts + plugin.ts)** — `ZEUS_READ_DENY_PATTERNS` bloqueia `src`/`tests`/`scripts`/`glob`/`grep` por Zeus via `tool.execute.before` (primeiro guard da cadeia); `ALLOWED_PATHS` libera `.md` e `.pantheon/memories`; 10 casos de teste em `tests/pantheon/delegation-enforce.test.ts`; `apollo.md`/`gaia.md` com `visible:false` e `tools.task:false` para depth-1 (PR #61).
448
+
449
+ ## 🐞 Fixed
450
+
451
+ - **session-guard + retry helper (session-guard.ts + zeus-delegate-with-retry.ts)** — guard de `session_id` e helper `zeusDelegateWithRetry` com retry/backoff para delegações; `goal-loop.ts`/`todo-enforcer.ts`/`todo-preserve.ts`/`delegation.ts` ajustados (PR #61).
452
+ - **validate doctor filter (scripts/doctor.mjs)** — `isValidAgentFile` verifica frontmatter YAML (`name`/`description`/`mode`) para filtrar `README.md` e docs não-agente de `getCanonicalAgentNames`/`deriveInstalledAgentFiles`; evita contagem espúria no `doctor` (PR #61).
453
+ - **README move (src/agents → docs/agents)** — move `README.md` para fora de `src/agents` para evitar agente espúrio; `docs/agents/README.md` criado (PR #61).
454
+ - **TUI GC aliasless (src/plugins/tui)** — GC de delegações live sem alias para evitar estado `delegating` preso; `src/plugins/tui/src/index.tsx` + `dist/` atualizados (PR #61).
455
+ - **routing fallback opencode-go (src/pantheon/presets.mjs + routing.yml)** — fallback do preset default para `opencode-go` quando API key do provider ausente; `resolveChildModel` com fallback para `opencode/deepseek-v4-flash-free` (PR #61).
456
+ - **install README guard (scripts/install/*)** — `shared.mjs`/`opencode.mjs`/`agents-md.mjs` impedem cópia de `README.md` para diretório de agentes; `package.json` ajustado (PR #61).
457
+
458
+ ## [v1.3.4] - 2026-08-11
459
+
460
+ ## 🆕 What's New
461
+
462
+ - **Compaction summary V2** (preservation directive + mission/todo/delegation sections): `buildCompactionContext` is now async and accepts goal/todo sources — `PANTHEON_COMPACTION_DIRECTIVE` prefix section (emitted before any other section, skipped on totally-empty state), `<mission_context>` with active goals (id/objective/status), `<todo_context>` with pending (not completed/cancelled) todos; delegation blocks byte-for-byte unchanged; failing/disabled sources are skipped fail-open (logged to hooks.log)
463
+ - **Post-compaction todo preservation**: TodoPreserver captures the session's todo list on `experimental.session.compacting`, activates the snapshot on `session.compacted`, and rewrites the first post-compaction `todowrite` with the exact pre-compaction list — additive + fail-open (every step degrades to a logged warn, never throws in a hook)
464
+ - **Post-compaction state re-assertion**: re-asserts session state after compaction so the rebuilt context reflects the live board
465
+ - **Historical (superseded) agentModels wiring from routing.yml**: the old release wired `options.agentModels` from the first preset. Current behavior requires an explicitly active profile and omits child models otherwise.
466
+ - **Preemptive compaction threshold logic** (dormant/experimental): threshold-based preemptive compaction — not active by default
467
+ - **File-first logging**: `createPantheonLogger` — console echo opt-in via `PANTHEON_HOOKS_LOG=1`, everything routed to `.pantheon/logs/hooks.log` (silences TUI console pollution)
468
+ - **Historical (superseded by 1.5.0):** the 1.3.4 TUI delegation panel described every report-less child as native `task()` work with a `[task]` tag. Current behavior keeps child origin unclassified unless explicit provenance is available.
469
+ - **README docs**: 1.3.4 compaction + delegation features documented
470
+ - **Zero chat-notification policy**: removed the `chat.message` injection channel for delegation signals — completion visibility lives in the board `[unread]` marker, `pantheon_delegation_read`, TUI toasts and compaction carry-forward, never in the chat transcript
471
+
472
+ ## 🐞 Fixed
473
+
474
+ - **Delegate dispatch with missing provider API key** (P1): `resolveChildModel` never checked whether the resolved model's provider had a configured API key — a child dispatched to a keyless provider (e.g. gpt-5.6-luna/opencode-go) died instantly with `AI_LoadAPIKeyError`. Auto-resolved models (agentModels/preset) whose provider key is missing now fall back to `opencode/deepseek-v4-flash-free`; explicit caller models are respected (warned); when nothing is usable the tool returns a clear error TEXT and registers NO job on the board
475
+ - **delegations.log typing**: `task_id` was always `""` (now omitted when empty) and `duration_ms` was logged as a STRING (now parsed to a number, null when unset), breaking downstream aggregation
476
+ - **Idle-flush log duplication**: `flushIdleReminders` echoed the reminder body joined with `" | "` while chat.message delivery echoed the same body with `"\n"` — the identical line appeared twice; idle-flush is now an audit summary (count + aggregated line count), content logged exactly once at chat-reminder delivery
477
+ - **TUI console log pollution**: console output in the plugin/hooks rendered directly into the opencode TUI; now env-gated, log-file only by default
478
+
479
+ ### Tests
480
+
481
+ - No aggregate test result was recorded in the original 1.3.4 release notes; the factual test counts that were documented remain attached to their individual changes above.
482
+
483
+
484
+ ## [v1.3.3] - 2026-08-11
485
+
486
+ ## 🆕 What's New
487
+
488
+ - **Todo continuation enforcer**: auto-continues sessions with incomplete todos on `session.idle` (4 guards: board-running, in-flight, exponential cooldown, max-failures cap) + kill-switch `PANTHEON_TODO_ENFORCER=off`
489
+ - **Hashline hash-anchored edits**: `hashline_edit` tool with sha256-truncated line tags, additive read enhancer, validate-before-write with `>>>` mismatch hints + Did-you-mean suggestions; blocked in read-only sessions
490
+ - **Full-auto goal loop** (opt-in `full_auto.enabled: false`): `pantheon_goal_create/update/get` tools, atomic GoalStore, priority idle dispatcher (goal suppresses enforcer), max 25 continuations
491
+ - **Dispatch retry-on-empty**: classifies empty results (mode 1: 0 tokens; mode 2: reasoning without text) with cap-1 automatic retry
492
+ - **Cost tracking**: JSONL ledger + `pantheon_cost` command reading opencode.db (zero-dep, node:sqlite → scripts/cost.mjs fallback)
493
+ - **Themis phase reviews** route to deepseek-v4-flash (pro reserved for final release gate); Athena stays premium (council red-line)
494
+ - **Routing config**: `background_delegation`, `todo_enforcer`, `hashline`, `full_auto` sections
495
+
496
+ ## 🐞 Fixed
497
+
498
+ - **Delegation killer**: chat.message hook injected reminders with empty messageID on the subagent promptAsync path — opencode schema rejected it, killing every background delegation in ~20ms (found by live E2E smoke)
499
+ - **Delegation child model routing**: child sessions now inherit the routed model (explicit arg → routing.yml agent entry → active preset) instead of falling back to the key-gated default (E2E: AI_LoadAPIKeyError without an active preset)
500
+ - **Installer `resolveInstalledPlugin`** mapped only `src/plugins/*` — `src/plugin.ts` resolved to the dev path, breaking global installs on non-dev machines and leaking the dev path (release-blocking)
501
+ - **Todo enforcer invasiveness**: skips injection when native background children are active (`session.children`) and within 30s of user activity
502
+ - **Hashline**: atomic write (tmp+rename), path containment guard, documented seed separator
503
+
504
+ ## [v1.3.2] - 2026-08-09
505
+
506
+ ## 🆕 What's New
507
+
508
+ - **Sandbox validation**: added the `sandbox` doctor profile and regression coverage for npm tarball contents, installed hook resolution, doctor status handling, MCP runtime smoke checks, and related CLI/install contracts.
509
+ - **Package portability**: distributed configuration no longer retains checkout-specific machine paths; managed hooks are resolved from the installed package during install/sync.
510
+ - **Doctor contract**: exit statuses now distinguish success (`0`), advisory warnings (`1`), and blocking errors (`>=2`).
511
+
512
+ ## 🐞 Fixed
513
+
514
+ - **Global installation diagnostics**: clarified the distinction between advisory doctor warnings and blocking failures.
515
+
516
+ [v1.3.2]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.3.2
517
+
518
+ ## [v1.3.1] - 2026-08-08
519
+
520
+ ## 🆕 What's New
521
+
522
+ - **Release validation coverage**: hook-runner spawn/timeout/SIGKILL handling with process-group cleanup; scanner fixtures that avoid accidental false positives; doctor `global`, `lite`, and `sandbox` profiles with explicit PASS/WARN/ERROR/SKIP statuses; `run-test.sh` exit semantics; and sandbox validation coverage.
523
+ - Local validation logs are ignored via `logs/` because they are generated diagnostics, not release artifacts or source files.
524
+
525
+ ## [v1.3.0] - 2026-08-06
526
+
527
+ ## 🆕 What's New
528
+
529
+ - **Non-invasive TUI notifications**: hook failures no longer write to `console.error` (TUI pollution) — non-zero exits route to three non-TUI channels: deduped TUI toast (`client.tui.showToast`), structured `client.app.log` entry (service `pantheon-hooks`), and `.pantheon/logs/hooks.log` file append; `PANTHEON_HOOKS_LOG=1` opt-in preserved, routed to log channels only
530
+ - **Delegation lifecycle toasts**: 🚀 `<agent> em execução` / ✅ `<agent> concluiu` with anti-spam (2000ms rate limiter + 3-agents-in-6s aggregation into a single summary toast)
531
+ - **PANTHEON_TOASTS gate**: `off|errors|delegations|all` (default `delegations`), read once at plugin load; gates TUI display only, log channels always write; council toasts included in the default set
532
+ - **Olympians groups**: wave→Olympians naming, 10s detection window, group completion
533
+ - **Hybrid secret blocking**: high-confidence tokens blocked (throw), low-confidence advisory-only; `maskSecret()` redaction applied across hook outputs
534
+ - **Honest delegation telemetry**: `delegation_id`/`task_id`/`duration_ms` fields, `dispatched` status for background agents, JSON round-trip stop hook (no TSV corruption)
535
+ - **Bash exit-code monitoring**: `metadata.exit` → individual error notifications
536
+ - **Talos scope enforcement**: session→agent map, native permission denies, content guard
537
+ - `PANTHEON_HOOKS_LOG` opt-in with ISO timestamps per line
538
+ - Routing disambiguation (project vs system docs), refusal taxonomy, delegation cache telemetry
539
+ - Secret-scan hygiene: wildcard notation for credential references (no literal keys in versioned docs/comments)
540
+ - README: hooks testing docs + `PANTHEON_TOASTS` table with council; AGENTS.md adds "PRs always update the README" convention
541
+
542
+ ## 🐞 Fixed
543
+
544
+ - Council toast idle-flush race condition
545
+
546
+ ## [v1.2.2] - 2026-08-05
547
+
548
+ ## 🆕 What's New
549
+
550
+ - **`pantheon prune`** (#22): legacy cleanup command — XDG-aware config resolution, `--dry-run` default (list only), `--apply` removes stale `opencode.json.bak*` backups (age threshold), `--apply --remove-dirs` for legacy dirs with dead configs; old global `pantheon` installs are suggested for manual `npm uninstall -g pantheon`, never removed (npm-managed)
551
+ - **Release pipeline standardization** (PR #28): single source of truth for version in `scripts/versioning.mjs` (sem-tag aware); CHANGELOG repair (normalized broken `[5.0.0]` heading → `[1.0.0]`, stripped `[v` prefixes across 3.x history, added `[Unreleased]`); `release.yml` redesigned with idempotent gates (skips publish when version already exists); new `scripts/changelog-extract.mjs` and `scripts/version-check.mjs` (+ test suites) so release bodies use real changelog sections; commitlint extended to cover pushes; pre-commit gate added; `cliff.toml` (git-cliff) removed; `docs/RELEASING.md` added; ADR-0007
552
+ - **Test wiring + install docs** (PR #31): `test:security` extended with `test_doctor_layers`; Node test suite wired via `npm run test:node` (`node --test tests/*.mjs` — prune, hook-runner, plugin-log-policy, install/vision contracts, changelog/version checks) into CI; global-install sandbox documented in AGENTS.md / INSTALLATION.md
553
+ - Dead `src/mcp/requirements-mcp-core.txt` catalog duplicate (YAGNI — the installer uses `requirements-mcp.txt`)
554
+
555
+ ## 🐞 Fixed
556
+
557
+ - **Reliable global install** (PR #26): hooks plugin recreated (`pantheon-hooks.ts` + `hook-runner.ts` with stdin JSON protocol, version-proof); MCP install made hermetic (absolute paths); packaging fix (`files[]` += `src/plugins/**`, `scripts/hooks/**`, self-reference removed, pinned `@opencode-ai/plugin` 1.18.11); `import uuid` hotfix in `scripts/mcp_persistence_server.py`
558
+ - **Installer/plugin packaging paths** (PR #31): hooks plugin registered via `resolveInstalledPlugin` so the config points at the INSTALLED package path, never the developer's absolute path (#30); TUI registered with absolute dist path in `tui.json` (#32 — relative path caused NpmInstallFailedError); TUI reads its installed package version via `import.meta.url` (works from any cwd)
559
+ - **Idempotent init** (#19): `subagent_depth` merged into the always-run config merge — run #1 already produces the final config (previously only the SECOND init added it); honest re-run stats (`routing.yml` no longer counted as created every run)
560
+ - **Layered doctor** (#18): B.6 smoke JSON-RPC `initialize` + F venv/deps check with pinned requirements
561
+ - **Pinned MCP dependencies** (#21): exact pins in `src/mcp/requirements-*.txt` (`mcp==1.29.0`, `fastmcp==3.4.6`, `pyyaml==6.0.3`, `sqlite-vec==0.1.9`, `fastembed==0.8.0`, `httpx==0.28.1`) — reproducible venv installs
562
+ - **Silent hooks by default**: audit hooks no longer echo to the console on success (`PANTHEON_HOOKS_LOG=1` re-enables the debug echo; log FILES `sessions.log`/`delegations.log` continue to be written)
563
+
564
+ ## [v1.2.1] - 2026-08-03
565
+
566
+ ## 🆕 What's New
567
+
568
+ - **Model routing presets + interactive picker**: 4 presets (go-deepseek, go-premium, go-fast, go-free), zero-mutation default (injects only when `active-preset.json` exists), `set-tier` CLI in `bin/pantheon-init.mjs` with API-key fail-fast, interactive picker in `scripts/install/model-picker.mjs` (atomic write + .bak), `validate-routing.mjs` preset validation, packaging fix so `src/pantheon/**` ships in the tarball
569
+ - 4 new provider families — go-claude (Anthropic), go-openai, go-olympus, go-muses presets + `CAPABILITY_TABLE` (+11 entries: glm-5.1/5.2, kimi-k2.6, qwen3.7-max/plus, minimax-m2.7/m2.5, bare deepseek-v4-pro/flash, big-pickle, nemotron-3-ultra-free, north-mini-code-free)
570
+ - **Vision routing**: per-turn multimodal fallback for image turns (`vision:` key per preset, `chat.message` hook), later evolved to native gateway vision (mimo-v2.5) with MCP-tool fallback, image-history normalization, description cache (sha256, TTL 30min) + intent-calibrated prompts, temp-image dedup/LRU
571
+ - Canonical `pantheon-vision` MCP stdio server (`src/mcp/pantheon_vision_server.py`)
572
+ - TUI: vendored todo-progress + usage-bar (v1.1.0, MIT attribution), active model preset shown in sidebar (30s refresh), OpenCode Go/Zen usage quota tracking (5h/7d/1m dollar windows, `[opencodego]` toml config)
573
+ - **Unified `release.yml`**: single workflow handles beta (PR label) + stable (main push) with version-exists check
574
+ - Secret scanning: fail-closed CI gates (gitleaks + custom scan), pre-commit hooks, secret-scan regression tests
575
+ - docs: model routing presets documented (presets, commands, env vars)
576
+ - Preset lineup refactored 8 → 6: go-deepseek routed via OpenCode Zen, go-fast via OpenCode Go, olympus/muses renamed go-premium/go-free — all presets now via OpenCode/Anthropic/OpenAI providers, `PANTHEON_DEEPSEEK_API_KEY` removed
577
+ - Vision routing consolidated and legacy duplicates removed
578
+ - commitlint: CodeQL auto-fix ignore pattern, body-max-line-length disabled, `security` type allowed, plugin/vision/presets/hooks scopes added; tsconfig dropped path aliases (+ `opencode.d.ts` ambient types)
579
+ - install: pantheon-vision registered, `doctor.mjs` hardened
580
+ - PR template added in English; coverage artifacts gitignored
581
+ - CI workflow triggers synced with base develop; `release.yml` gained `workflow_dispatch` with `pr_number` input
582
+ - Stale release workflows (release-beta.yml / release-stable.yml leftovers) brought back by merge
583
+ - TUI todo-progress bar (redundant with native TODO + sidebar), v1.1.1
584
+ - Duplicate `scripts/scrub_secrets.py` (canonical is `scrub-secrets.py`)
585
+
586
+ ## 🐞 Fixed
587
+
588
+ - Plugin export as function for opencode 1.18.11 API (object export failed to load; hooks.config mutates config in place)
589
+ - Vision pipeline: plugin boot failure (legacy loader), MCP tool ID (`pantheon_vision_vision_describe`), gateway 401 (provider prefix stripped from model ID), temp-file race (age-guarded cleanup, dir never removed), image stripping at source (deepseek-v4-flash declared image-capable), gateway-aware qwen interception, MCP availability verified, refcounted shared temp images, file URLs decoded via `fileURLToPath`, temp image permissions restricted
590
+ - Default vision fallbacks: mimo-v2.5 (multimodal, cheaper) then minimax-m3 (qwen3.7-plus 500 on Go gateway); silent hook logs
591
+ - `import uuid` in `mcp_persistence_server.py` (context_save NameError)
592
+ - commitlint failures + typecheck narrowing; active preset applied in config hook
593
+ - CI: `workflow_dispatch` treated as stable release; empty env block removed; `NODE_AUTH_TOKEN` restored (OIDC Trusted Publisher not configured on npm); `github_pat_` self-match in secret scan; fast-uri upgraded to patched version
594
+ - Security: hardcoded provider credentials removed, preset error logging sanitized (CodeQL), dist artifacts untracked
595
+ - install: project MCP commands point at real venv
596
+
597
+ [v1.2.1]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.2.1
598
+
599
+ ## [v1.2.0] - 2026-07-30
600
+
601
+ ## 🆕 What's New
602
+
603
+ - **Fallback chains + auto CI retry**: per-agent fallback chains (hermes→talos→athena, apollo→athena→hermes, etc.), CI retry 1 → 2 with exponential backoff + fallback agent, token tracking in `subtask_summary`, `fallback_chains` section in routing.yml
604
+ - Zeus Fusion-style delegation enforced — `edit:deny`, `bash:deny`, never touches files
605
+ - Persistence performance: index on (namespace, expires_at) — O(n)→O(log n) TTL queries, `kv_stats` tool, opportunistic auto-purge (>500 entries), FTS soft-delete trigger (fixes phantom results), `re.escape()` query safety, `kv_delete_namespace` bulk cleanup
606
+ - **Context checkpoint tools**: `context_save`, `context_get`, `context_list`, `context_stats` — session-scoped state in `checkpoint:{slug}` namespace, auto-TTL 4h, replaces file-based `checkpoint_session.py`
607
+ - New release system: beta from PR label (release-beta.yml), stable from main push (release-stable.yml)
608
+ - docs: `RELEASE.md` — beta from PR label, stable from main push
609
+ - **Slash commands consolidated 16 → 5** — kept `/pantheon`, `/audit`, `/deepwork`, `/optimize`, `/consolidate`; deleted 11 (cancel, focus, forget, install, reflect, remember, search, sketch, status, update, verify) with Apollo audit verifying alternative coverage (ADR-006)
610
+ - Removed redundant model configs — agents inherit default deepseek-v4-flash
611
+ - Persistence docs updated for new tools and auto-purge behavior
612
+ - commitlint scopes completed; auto-release skipped when version already exists
613
+
614
+ ## 🐞 Fixed
615
+
616
+ - Council fixes: UUID session isolation in context checkpoints, pre-compaction state save trigger, flash summary quality floor (<10 chars → fallback to Zeus), agents recall `context_get(slug, 'latest')` on startup
617
+ - CI: push triggers removed — validation workflows (CI, commitlint, CodeQL, hotfix, docs) now run on `pull_request` only, eliminating perma-pending duplicate checks
618
+
619
+ [v1.2.0]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.2.0
620
+
621
+ ## [v1.0.0] - 2026-07-24
622
+
623
+ ## 🆕 What's New
624
+
625
+ - **OpenCode-only**: Removed all multi-platform support (Claude Code, Cursor, Windsurf, Cline, Continue.dev, VS Code Copilot). Pantheon v1.0 is exclusively for OpenCode.
626
+ - **Global installation**: `npx pantheon-opencode init` installs agents globally to `~/.config/opencode/agents/`. Optional `--project` flag for project-local install.
627
+ - **Background subagents**: Native OpenCode `task(background=true)` + `task_status()` delegation. Max 5 concurrent subagents. Requires `OPENCODE_EXPERIMENTAL_BACKGROUND_SUBAGENTS=true`.
628
+ - **Shared instructions**: Behavioral rules moved to `.instructions.md` files loaded via `instructions/*.instructions.md`. Eliminated duplicate rules between agents and instructions.
629
+ - **TUI sidebar plugin**: Custom sidebar showing Pantheon version, sessions, commands, agents, config, and memory stats.
630
+ - **Agent routing optimized**: Zeus routing decision tree prohibits `general`/`explore` subagent types. Each domain maps to a specialist.
631
+ - Instructions tokens reduced 10.3k → 7.5k (-18%)
632
+ - Zeus.md reduced 431 → 144 lines
633
+ - Skills reduced to 14 (from 40), with merged content
634
+ - `skills-lock.json` regenerated (40 → 14 entries)
635
+ - 6 platform-specific installers (claude, cline, continue, copilot, cursor, windsurf)
636
+ - 6 platform-specific docs files
637
+ - Legacy scripts: `pantheon-install.mjs`, `pantheon-update.mjs`
638
+ - `platform/opencode/agents/` (agents now in `src/agents/`)
639
+ - `auto-continue-template.md`
640
+ - `checkpoint-standards.instructions.md`
641
+ - Updated command list: 14 → 11 commands
642
+ - Added: `/pantheon-bg`, `/pantheon-doc`
643
+ - Removed: install, update, cancel, sketch, consolidate
644
+
645
+ [v1.0.0]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.0
646
+
647
+ ## [v1.1.1] - 2026-07-30
648
+
649
+ ## 🆕 What's New
650
+
651
+ - New release system — beta releases from PR labels, stable from main push (auto-release and beta-release workflows unified)
652
+ - Interactive TUI mode for installer (Fases 1+2) — redesigned sidebar with context progress bar, live session data via events + API
653
+ - Session-scoped context checkpoints in persistence (index, stats, auto-purge, `delete_namespace`); fallback chains, auto CI retry (2x), token tracking
654
+ - Slash commands consolidated from 16 to 5; redundant model configs removed (agents inherit the default model)
655
+
656
+ ## 🐞 Fixed
657
+
658
+ - Council: UUID session isolation in context checkpoints, pre-compaction state save, flash summary quality floor, agents recall `context_get(slug, 'latest')` on startup
659
+ - TUI plugin/CI: OpenCode crash from missing plugin deps, version detection with git fallback, commitlint scopes, workflow YAML/MCP path repairs; `datetime.UTC` → `timezone.utc` for Python < 3.11
660
+
661
+ [v1.1.1]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.1.1
662
+
663
+ ## [v1.1.0] - 2026-07-26
664
+
665
+ ## 🆕 What's New
666
+
667
+ - Council synthesis Fase 1+2 — Modo Desempate com Evidência + BackgroundJobBoard (#2)
668
+ - Beta release workflow added (from develop)
669
+
670
+ [v1.1.0]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.1.0
671
+
672
+ ## [v1.0.7] - 2026-07-26
673
+
674
+ ## 🐞 Fixed
675
+
676
+ - Installer: fixed `writeFileSync` not defined error
677
+
678
+ [v1.0.7]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.7
679
+
680
+ ## [v1.0.6] - 2026-07-26
681
+
682
+ ## 🆕 What's New
683
+
684
+ - 7 new skills (codemap, simplify, reflect, worktrees, verification-planning, loop-engineering, clonedeps) + 7 matching commands; `background_subagents` enabled by default in canonical config
685
+ - Release pipeline: quality gates, tag creation, pre-release, hotfix support
686
+ - CI simplified from 10 to 6 workflows; agent/skill restructuring — 12 redundant instructions removed, unused commands dropped, gaia archived then restored
687
+
688
+ ## 🐞 Fixed
689
+
690
+ - CI/commitlint config (YAML syntax, header-max-length, ignores function, scopes); 45 stale references cleaned across 18 files; invalid `opencode.json` fields removed; installer copies `routing.yml`; YAML frontmatter regenerated for 9 agents
691
+
692
+ [v1.0.6]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.6
693
+
694
+ ## [v1.0.5] - 2026-07-26
695
+
696
+ ## 🐞 Fixed
697
+
698
+ - CI auto-release with OIDC trusted publisher + npm v12 (Node 22 upgrade, clean publish)
699
+ - `doctor.mjs` paths + simplified `prepublishOnly`
700
+
701
+ [v1.0.5]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.5
702
+
703
+ ## [v1.0.2] - 2026-07-25
704
+
705
+ ## 🆕 What's New
706
+
707
+ - TUI plugin: copy logic, stale skill cleanup, `tui.json` dedup; advanced plugin with version detection and 14 commands
708
+ - Agents migrated from deprecated `tools:` to OpenCode `permission:` model; legacy multi-platform tests removed (OpenCode-only conformance); docs modernized (OpenCode-only, unified commands)
709
+
710
+ ## 🐞 Fixed
711
+
712
+ - Hardcoded version fallback replaced with package.json version; routing aligned with actual skills (vscode platform removed)
713
+
714
+ [v1.0.2]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.2
715
+
716
+ ## [v1.0.1] - 2026-07-24
717
+
718
+ ## 🆕 What's New
719
+
720
+ - Installer: unified setup flow, removed lifecycle install, fixed entry points
721
+
722
+ [v1.0.1]: https://github.com/ils15/pantheon-opencode/releases/tag/v1.0.1
723
+
724
+ ## [v3.19.2] - 2026-07-21
725
+
726
+ ## 🆕 What's New
727
+
728
+ - `_pantheon_paths.py` — shared path resolution (`PANTHEON_HOME`, `PANTHEON_PROJECT`)
729
+ - `pantheon-persistence` MCP — KV store with SQLite FTS5, TTL, namespaces, 6 tools
730
+ - `pantheon-memory` rewritten — sqlite-vec + fastembed (ONNX, ~50MB) replaces chromadb + torch (~1.4GB)
731
+ - Hybrid semantic search: vector cosine + FTS5 BM25 via RRF fusion
732
+ - `.pantheon/mcp-registry.yml` — canonical MCP registry + auto-propagation
733
+ - Simplified installer: `install:lite` (agents only), `install:full` (everything), `install:runtime` (MCP infra)
734
+ - `scripts/install/venv.mjs` — auto .venv creation + pip install of lightweight deps
735
+ - `scripts/install/health-check.mjs` — 6 post-install validations
736
+ - `scripts/install/migrate.mjs` — upgrade path v3.10 → v3.18 → v3.19.0 → v3.19.2
737
+ - MCP servers patched for global install (no more `__file__.parent.parent`)
738
+ - **Dependencies reduced from ~1.4GB to ~50MB** — removed chromadb, sentence-transformers, torch
739
+ - `memory_mcp_server.py`: 1,344→584 lines, 14→6 tools (memory_store, memory_search, memory_recall, memory_forget, memory_list, memory_stats)
740
+ - `routing.yml`: 1,102→482 lines (-56%), deleted 22 dead handoffs, routing_matrix
741
+ - `internet-search` skill: 519→130 lines, tool-agnostic (context7/websearch/webfetch)
742
+ - Memory Protocol: shared `instructions/memory-protocol.instructions.md`, 14 agents with 2-4 line overrides
743
+ - Agent YAML frontmatter fixed across all 14 agents (broken `...` separators, skills indent)
744
+ - All platform configs updated with persistence MCP entries
745
+ - `opencode.json` generated with correct deploy paths (cwd = deploy target)
746
+ - chromadb + sentence-transformers + torch (~1.4GB dependency chain)
747
+ - `scripts/requirements-mcp-memory.txt`
748
+ - 9 duplicate instructions (now skills on-demand)
749
+ - `multi-model-routing` from prometheus (deleted skill)
750
+
751
+ ## 🐞 Fixed
752
+
753
+ - 157 dangling instruction references across 6 platforms
754
+ - YAML frontmatter in all 14 agents (broken by previous sed edits)
755
+ - OpenCode platform detection (was missing `platform/opencode/opencode.json`)
756
+
757
+ ## [v3.19.0] - 2026-07-21
758
+
759
+ ## 🆕 What's New
760
+
761
+ - Memory Persistence Protocol (ADR-006) — agents now have mandatory `memory_recall()` pre-work (top_k=3, skip if score<0.3) and `memory_store()` post-work (2 lines max, importance 0.4-0.9)
762
+ - Session-end auto-save script (`.pantheon/code-mode/session-end-save.py`) — exports Vector DB entries with importance ≥0.4 at session close (ChromaDB direct read + client-side filtering)
763
+ - `session_end_save` handoff in routing.yml for Mnemosyne session close trigger
764
+ - `tools.agent: true` for Apollo, Talos, and Gaia canonical agent files
765
+ - Recall Conflict Protocol (ADR-006 v1.1) — 5 rules for when recalled memory conflicts with current action (log, prefer freshness, escalate ADRs, score threshold, audit trail)
766
+ - New skills synced: `file-prompts`, `plan-architecture`, `streaming-patterns`, `token-audit`, `wisdom-accumulation`
767
+ - All 14 agent files updated with `## 🧠 Memory Protocol` section (both canonical `/agents/` and OpenCode `.config/opencode/agents/`)
768
+ - Zeus now auto-stores `memory_store()` directly on agent return — no Mnemosyne middleman
769
+ - Steps optimization in opencode.json: zeus(25→35), aphrodite(25→30), hermes(20→25), themis(20→25), demeter(20→25), mnemosyne(10→8), iris(15→10), nyx(15→12), athena(15→12)
770
+ - README.md badges updated to v3.19.0, skills count 43→40
771
+ - 9 duplicate instructions deleted — now only skills on-demand (tdd-standards, code-quality-checks, code-review-standards, database-standards, artifact-protocol, mcp-security, memory-bank-standards, infra-standards, auto-continue-safety-gates)
772
+ - Always-loaded instructions: 19→10 files (~5.7K→~3K tokens/session, -47%)
773
+ - Agent platform copies updated across 6 platforms (Claude, Cursor, Windsurf, Continue, Cline — .clinerules)
774
+ - `routing.yml` artifact paths: `docs/memory-bank/`→`.pantheon/memory-bank/`
775
+ - 5 orphan skills linked to agents: wisdom-accumulation→zeus, plan-architecture→athena, file-prompts+streaming-patterns→hermes, token-audit→nyx
776
+ - `prompts/orchestrate-with-zeus`: fixed 3 instances of ATHENA→APHRODITE for frontend delegation
777
+ - `prompts/focus.prompt.md`: stale `/memories/session/` path → `.pantheon/memory-bank/.tmp/`
778
+ - `prompts/mirrords.prompt.md`: tool names updated to current API
779
+ - `commands/pantheon-install.md`: stale doc ref and platform count fixed
780
+ - `commands/pantheon-update.md`: example version bumped to 3.19.0
781
+ - `pyproject.toml`: removed all backend/fastapi/alembic dependencies (no longer maintained)
782
+ - `platform/forge.json`: version bumped to 3.19.0
783
+ - `alembic/` — stale DB scaffolding (never completed)
784
+ - `backend/` — stale FastAPI database engine (half-finished)
785
+ - `docs/memory-bank/` — stale duplicate (should have been purged in v3.17.0)
786
+ - `docs/TUTORIAL-PLUGIN-PT.md` — Portuguese tutorial for disabled plugin
787
+ - `plugins-disabled/` — stale pantheon-tui-plugin
788
+ - `release_notes.md` — lowercase, redundant with CHANGELOG
789
+ - 4 obsolete skills: `conversational-ai-design`, `multi-model-routing`, `prompt-improver`, `prompt-injection-security`
790
+ - `__pycache__` and `.mypy_cache` build artifacts
791
+ - Full documentation audit: 10+ doc files cleaned, versions reconciled, stale content purged
792
+ - Memory Persistence Protocol documented as ADR-006
793
+ - `.config/opencode/` fully synced from canonical Pantheon (14 agents + 10 instructions)
794
+
795
+ ## 🐞 Fixed
796
+
797
+ - 33 dangling `docs/memory-bank/` references fixed across platform configs (`.claude/`, `.cursor/`, `.windsurf/`, `.continue/`, `.clinerules/`, `.github/`, `memories/`, `platform/`, `template/`, `.opencode/skills/`, `.tests/`)
798
+ - `.pantheon/memory-bank/.tmp/` added to `.gitignore`
799
+ - `docs/RELEASING.md` version reference — v3.8.4 → v3.19.0
800
+ - `docs/UPGRADING.md` — removed obsolete Agora migration guide, added v3.19 Memory Protocol section
801
+ - `docs/mcp-recommendations.md` — removed Exa MCP references (removed in v3.15.0)
802
+ - `docs/platforms/opencode.md` — removed stale "agora" references
803
+ - `docs/AGENT-MCP.md` — removed Exa reference
804
+ - CHANGELOG duplicate v3.9.0 entries removed
805
+ - `template/CLAUDE.md` — `agora`→`zeus` for council dispatch
806
+ - `.github/instructions/auto-continue-safety-gates`: "Agora Council"→"Council"
807
+ - `.tests/test-all.sh`: removed stale chiron.agent.md test
808
+ - Skills count reconciled across all docs: 40
809
+ - `docs/INDEX.md` skills count: 45→40
810
+
811
+ ## [v3.18.0] - 2026-07-15
812
+
813
+ (no changes)
814
+
815
+ ## [v3.17.1] - 2026-07-14
816
+
817
+ ## 🆕 What's New
818
+
819
+ - Inline compression triggers (C8/C9/C11): implementation agents (Hermes, Aphrodite, Demeter, Hephaestus, Prometheus) now declare `context-compression` skill and have a concise `## Inline Compression` section covering CRITICAL/HIGH subtask summaries, pre-delegation large blocks, and phase boundaries/handoffs
820
+ - `tests/test_code_mode_args.py`: TDD coverage for the new `args` parameter forwarding
821
+ - `context-compression` SKILL.md: real C8–C11 trigger definitions added; redundant C10 noted as OpenCode-native cross-reference; L1/L3 contradiction resolved (L1 = inline compress via MCP, L2 = batch promotion at gates)
822
+ - Agent `.md` files: `context-compression` added to `skills:` frontmatter for all 5 implementation agents
823
+ - `instructions/artifact-protocol.instructions.md`: scrub documented as automatic via MCP layer
824
+
825
+ ## 🐞 Fixed
826
+
827
+ - `execute_code_script` now forwards CLI arguments to subprocess — `compress-inline.py` is reachable via MCP (fixes argparse code 2 error)
828
+ - Unified scrubber: 3 divergent implementations consolidated into single canonical `scripts/scrub-secrets.py`, imported by both `memory_mcp_server.py` and `compress-inline.py` via `importlib` (hyphenated filename cannot be statically imported)
829
+ - OpenAI key regex standardized across all consumers to `sk-[A-Za-z0-9\-_]{10,}`
830
+
831
+ ## [v3.17.0] - 2026-07-11
832
+
833
+ ## 🆕 What's New
834
+
835
+ - Pantheon TUI Plugin overhaul: sidebar modernization, clickable commands, dynamic Python version
836
+ - MCP Config section in TUI: list active plugins, MCP status, auto-compaction toggle
837
+ - Memory section in TUI: show memory entries count
838
+ - MCP templates for 6 platforms (Claude, Cline, Cursor, Windsurf, Continue, Copilot)
839
+ - `scripts/init-pantheon-mcp.sh` — automated MCP setup
840
+ - `docs/INSTALLATION.md` — MCP installation guide
841
+ - `docs/MIGRATION-MEMORY-BANK.md` — migration guide for memory bank to .pantheon/
842
+ - Memory bank moved from `docs/memory-bank/` → `.pantheon/memory-bank/` (fully local, gitignored)
843
+ - `.pantheon/` is now the standard for all local/generated artifacts
844
+ - OpenCode MCP format fixed: command as array + cwd
845
+ - All platform templates updated with pantheon-code-mode MCP
846
+ - `.mcp.json` moved from root to `platform/mcp/mcp-template.json`
847
+ - Version synchronization: `versioning.mjs` now handles all manifests (package.json, plugin.json, pyproject.toml, forge.json)
848
+ - Updated 65+ source files with new .pantheon/ paths
849
+ - `docs/memory-bank/` from git history (fully purged via filter-repo)
850
+
851
+ ## 🐞 Fixed
852
+
853
+ - TUI plugin path in tui.json (was pointing to non-existent file)
854
+ - OpenCode MCP config format (command must be array + cwd)
855
+ - Release pipeline: version mismatch between package.json and plugin.json
856
+ - `mcp_resources_server.py` memory-bank path resolution
857
+
858
+ ## [v3.16.0] - 2026-07-10
859
+
860
+ ## 🆕 What's New
861
+
862
+ - MCP Resources Support: pantheon://agents, skills, routing, deepwork, memory-bank
863
+ - Code Mode MCP Adapter: confined script execution from .pantheon/code-mode/
864
+ - YOLO Mode / Auto-Approve: permission tiers for trusted MCP servers
865
+ - Reasoning Effort per Agent: high / medium / low in routing.yml + 14 agent frontmatter
866
+ - Unified Memory MCP Server: 14 tools, ChromaDB + sentence-transformers, 79 tests
867
+ - Knowledge graph: memory_link + memory_traverse (BFS traversal)
868
+ - RTK-style output filters: dedup, group, truncate on memory_store
869
+ - Freshness decay (30-day half-life) + importance boost + claim verification
870
+ - Agent MCP Integration: all 14 agents with MCP Capabilities + routing.yml capabilities
871
+ - Documentation: MCP.md (238l), MEMORY.md (471l), AGENT-MCP.md (197l)
872
+ - Skills audit: 5 orphan skills deleted, quality-gate skill created
873
+ - Platform sync: pantheon-memory added as Tier 1 MCP in install-mcp.mjs
874
+ - docs/mcp-recommendations.md expanded to 422 lines (browser MCPs, infra MCPs, 3-7 rule)
875
+ - memory_cleanup: 3-char minimum prefix guard
876
+ - memory_export: restricted to ~/.pantheon/exports/ with path traversal check
877
+ - Content size limit: 100KB max, 500 char category
878
+
879
+ ## 🐞 Fixed
880
+
881
+ - memory_sessions dead code (always returned empty results)
882
+ - install-mcp.mjs filename: dash → underscore
883
+ - .github/plugin/plugin.json: removed deleted streaming-patterns reference
884
+ - memory_mcp_server.py: F821 undefined name, missing except block
885
+
886
+ ## [v3.15.0] - 2026-06-26
887
+
888
+ ## 🆕 What's New
889
+
890
+ - **Level 3 Vector Memory:** 5 scripts (`schema.py`, `index.py`, `query.py`, `rebuild.py`, `cli.py`) with dual indexing (FTS5 + optional sqlite-vec embeddings), 8/8 tests passing, 120 entries indexed from memory bank
891
+ - **Two-Tier Persistence Model:** Tier 1 auto-index (`quick_index()`) saves background agent results instantly into Vector Memory; Tier 2 full compression (ZZ artifact + memory bank update) only on Themis APPROVED
892
+ - **Inline quick_index():** New function in `index.py` indexes subtask_summary dicts directly (no file scanning), idempotent via content_hash, auto-tags from keywords
893
+ - **Context Compression Trigger:** Section in `zeus.agent.md` with test script `scripts/test-context-compression.sh` — validates all 5 checks (prerequisites, mocks, structure, secrets, output)
894
+ - **Background Agent Dispatch:** Pattern documented in `zeus.agent.md` and `orchestration-workflow/SKILL.md` — OpenCode v1.16.2+ background agents with auto-persist
895
+ - **Auto-Continue Canonical Name:** "relentless" → "auto-continue" across 43 files (skills, commands, agent files, platform copies)
896
+ - **Tools Format:** 14 agents converted from YAML array (`- tool`) to object format (`tool: true`)
897
+ - **quick_index path fix:** Scripts now add `scripts/` (parent of vector_memory package) to sys.path instead of their own directory
898
+ - **Platform Skill Directories:** 211 stale skill files removed from 6 platform dirs (`.clinerules/skills/`, `.claude/skills/`, `.cursor/skills/`, `.windsurf/skills/`, `.continue/skills/`, `platform/*/`) — OpenCode v1.16.0+ discovers skills natively from `~/.config/opencode/skills/`
899
+ - **Exa MCP Server:** `exa-mcp-server` removed from `opencode.json` (redundant with OpenCode native websearch)
900
+ - **`vector_memory` config key:** Removed from both project and global `opencode.json` (not recognized by OpenCode v1.17.x)
901
+ - **NOTE0010:** Pantheon v3 Roadmap — 5-phase vision from FTS5 to Plugin Architecture
902
+ - **TASK-016:** Level 3 Implementation Plan — 24 tasks across 5 phases
903
+ - **01-active-context.md:** Updated with deepwork v3.15 changes and Two-Tier model
904
+
905
+ ## 🐞 Fixed
906
+
907
+ - **Import Path in Vector Memory Scripts:** `sys.path` now correctly points to parent of `vector_memory/` package, enabling both direct execution and `python -m` usage
908
+
909
+ ## [v3.14.1] - 2026-06-21
910
+
911
+ ## 🆕 What's New
912
+
913
+ - **Pantheon-Context MCP Experiment:** Removed entire `scripts/pantheon-context-mcp/` directory (server.py, scoring.py, summarizer.py, tests — 12 files, ~1,200 lines)
914
+ - **Stale Agent References:** Stripped `pantheon-context` tool references from all 14 agent files, `.mcp.json`, `opencode.json`, `ROADMAP.md`
915
+ - **Auto-Release CI:** Removed `.github/workflows/auto-release.yml` (triggered broken v3.14.0 release on every push to main)
916
+ - **TUI Sidebar Plugin:** Rewrote from flat file to npm-style directory (`plugins/pantheon-tui/` with `index.tsx`, `package.json`, `dist/tui.tsx`). New features: real context usage bar (color thresholds 70%/90%), collapsible command guide (16 `/pantheon` commands), manual compress button, Python version display, collapsible agent registry
917
+
918
+ ## 🐞 Fixed
919
+
920
+ - **Install Script:** `scripts/install/opencode.mjs` now correctly copies npm-style plugin directory and registers in `tui.json` (not `opencode.json` — TUI plugins use separate registration)
921
+ - **CI Release Pipeline:** Added `dry_run` input to manual release workflow, removed auto-merge from release PRs, fixed duplicate steps
922
+
923
+ ## [v3.14.0] - 2026-06-20
924
+
925
+ ## 🆕 What's New
926
+
927
+ - **Codebase Audit:** Comprehensive 5-agent scan — 48 issues found, all resolved
928
+ - **Mermaid Diagrams:** 5 new diagrams — TDD Cycle (stateDiagram-v2), Artifact Lifecycle (flowchart), Council Synthesis (sequenceDiagram), Architecture (flowchart), Delegation Flow (flowchart)
929
+ - **Python Infrastructure:** Added `[build-system]`, project deps (FastAPI 0.110+, SQLAlchemy 2.0+, Alembic 1.13+, Pydantic 2.7+), ruff expanded to 11 rule groups, coverage (`fail_under=80`), mypy strict
930
+ - **Alembic Scaffolding:** `alembic.ini` with env var interpolation, async `env.py`, Mako template, models base with `AsyncAttrs` + `TimestampMixin`
931
+ - **SQLAlchemy 2.0 Mixins:** `UUIDPrimaryKeyMixin`, `IntegerPrimaryKeyMixin`, `SoftDeleteMixin`, `ActivatableMixin`
932
+ - **Frontend Scaffolding:** `biome.json` (1.9.4), `tsconfig.json` (strict mode, ES2022), npm scripts (test, lint, typecheck, build, dev)
933
+ - **Docker Infrastructure:** Multi-stage Dockerfile (build + runtime, non-root), docker-compose.yml (PostgreSQL 16 + API), `.env.example`
934
+ - **Database Standards:** Async SQLAlchemy 2.0 patterns, connection pooling, migration testing, disaster recovery + 2 Mermaid diagrams
935
+ - **Documentation Quality:** "When NOT to Use" sections on all 7 main agents, English-only throughout, ROADMAP.md updated
936
+
937
+ ## 🐞 Fixed
938
+
939
+ - **Dead Agent Purge:** Removed ~150+ references to Echo, Chiron, Argus, Agora across 67+ files (agents, platforms, instructions, skills)
940
+ - **Portuguese→English:** `docs/platforms/README.md` fully translated, `agents/prometheus.agent.md` mixed-language fixed
941
+ - **QUICKSTART.md:** Removed duplicate Nyx entry in agent table
942
+ - **`00-project.md`:** Fixed Argus in architecture diagram, corrected skill path, fixed Portuguese text
943
+ - **Prometheus Self-Contradiction:** Fixed "MUST NOT deploy (that's @prometheus)" — copy-paste bug from Chiron merge
944
+ - **Hephaestus Echo Dead Code:** Removed 25-line Echo section that was copy-pasted verbatim
945
+ - **`seo-config.ts`:** Renamed to `.md` (was Markdown disguised as TypeScript)
946
+ - **`agent-return-format.instructions.md`:** Fixed Agora reference in artifact table
947
+ - **`skills/README.md`:** Count corrected from 37→42, stale Chiron/Echo refs updated
948
+
949
+ ## [v3.13.0] - 2026-06-20
950
+
951
+ ## 🆕 What's New
952
+
953
+ - **Level 2 Context Compression** — priority scoring engine (5 deterministic dimensions: Impact, Risk, Novelty, Blockers, Downstream relevance), semantic summarization templates per agent-pair, budget allocation (100-line cap, priority-greedy), cross-reference mechanism (D/E/M/C IDs with auto-generated `_xref/index.md`), ZZ artifact format for phase-to-phase context injection, `context-compression` skill (Level 2)
954
+ - **New prompts**: `prompts/semantic-summarize.md` for agent-pair aware semantic summarization
955
+ - **New scripts**: `scripts/scrub-secrets.py` for security scrubbing of compressed content
956
+ - **Missing infra**: `docs/memory-bank/_xref/_next_id.json` with full key names (decisions/entities/milestones/tasks)
957
+ - **Safety preflight**: `can_compress()` guard prevents compression of in-progress/escalated/blocked/NEEDS_REVISION artifacts
958
+ - **Atomic write protocol**: .tmp + fsync + rename with validation for corruption prevention
959
+ - **14 agent `.agent.md` files** — stripped non-OpenCode frontmatter (`tools:`, `handoffs:`, `agents:`, `color:`, `hidden:`, `mcpServers:`). All agents now use only OpenCode-recognized fields
960
+ - **Agent count unified** — all files consistently say "14 agents" (removed chiron, echo, argus from counts)
961
+ - **`instructions/artifact-protocol.instructions.md`** — updated with ZZ artifact format, compression lifecycle, atomic write protocol, budget guardrails
962
+ - **`instructions/memory-bank-standards.instructions.md`** — updated with compression and recovery section, cross-reference docs
963
+ - **Context compression** — Level 1 replaced entirely by Level 2 (priority-scored summaries with downstream-aware field masks)
964
+ - **All 7 platforms regenerated** — commands (pantheon-status, ping) and agents synced across OpenCode, Claude Code, Cursor, Windsurf, Cline, Continue, Copilot
965
+ - **TUI Plugin** — moved to `plugins-disabled/`, removed from OpenCode config (temporary removal)
966
+ - **`packages/tui-plugin/`** — source files removed from active tree
967
+ - **`plugins/pantheon-tui-plugin/`** — secondary plugin source removed
968
+ - **`platform/opencode/.opencode/package.json`** — stale TUI config removed
969
+ - **Stale agent references** — chiron, echo, argus, agora references cleaned from 40+ files across platforms, docs, tests, commands
970
+ - **Missing skill references** — `code-discipline`, `architecture-diagrams` removed from agent references (never existed as skills)
971
+ - **Platform Conformance Matrix** — 6/6 plataformas passando com 0 falhas
972
+ - **CI validate** — passing
973
+ - **Sync Check** — passing
974
+ - **Auto Release** — published at v3.13.0
975
+
976
+ ## 🐞 Fixed
977
+
978
+ - **CHANGELOG.md** — removed 4 duplicate v3.12.1 entries and empty v3.12.2 section
979
+ - **Frontmatter consistency** — all 14 agents now parse cleanly with OpenCode YAML frontmatter
980
+ - **Cross-platform agent count** — 14 everywhere (was inconsistent: some files said 18, some said 14)
981
+ - **`.opencode/plugins/pantheon-hooks.ts`** — local OpenCode plugin que executa os 10 hooks de validação via tool.execute.before/after/event
982
+ - **`sync-platform.sh`** — step 3.6 não synca mais TUI plugin; step 3.7 synca o pantheon-hooks.ts globalmente
983
+ - **`.gitignore`** — `.opencode/plugins/` agora versionado; `platform/opencode/.opencode/{commands,skills}` ignorados
984
+ - **`opencode-hooks-plugin` npm** — removido do config (nunca foi publicado como pacote npm)
985
+ - **`@agora` redirects** — substituídos por `@zeus` em 5 platform files
986
+ - **Stale docs references** — Chiron, Echo removidos de README.md, QUICKSTART.md, platforms docs; TUI marcado como desativado; hooks docs atualizados de `.github/hooks/` para `scripts/hooks/`; skill count corrigido para 42
987
+ - **Canonical skills** — referências a Chiron em agent-coordination e database-optimization atualizadas para "Model Selection" e "model tier"
988
+ - **`tools:` field restored to all 14 canonical agents** — re-adicionado de v3.12.2 para o sync engine + conformance tests validarem toolMap keys
989
+ - **Stale skills removed** — `relentless-mode`, `review-work` (sem fonte canônica) removidos de .clinerules/skills, platform/claude, platform/cline, platform/continue, platform/cursor
990
+ - **Stale commands removed** — `cancel-relentless`, `token-audit` (sem fonte canônica em commands/) removidos de .clinerules/commands, .continue/commands, .cursor/commands e platform sources
991
+ - **wisdom-accumulation cleaned from platforms** — nenhum agente referenciava o skill; removido de platform dirs via sync --clean
992
+ - **All platforms sync:check** — 0 stale files across 7 platforms
993
+
994
+ ## [v3.12.0] - 2026-06
995
+
996
+ [compare changes](https://github.com/ils15/pantheon/compare/v3.11.0...v3.12.0)
997
+
998
+ ## 🆕 What's New
999
+
1000
+ - **agents:** Add anti-stall resilience and orchestration improvements ([7a61b69](https://github.com/ils15/pantheon/commit/7a61b69))
1001
+ - **agents:** Add /pantheon-status command with version badge + agent registry ([984ec65](https://github.com/ils15/pantheon/commit/984ec65))
1002
+ - **platform:** Add Pantheon TUI sidebar plugin for OpenCode ([09253c1](https://github.com/ils15/pantheon/commit/09253c1))
1003
+ - **release:** Sync version to v3.11.0 ([1a9fb64](https://github.com/ils15/pantheon/commit/1a9fb64))
1004
+
1005
+ ## 🐞 Fixed
1006
+
1007
+ - **ci:** Sync platform files and add mcp-security skill to pass CI ([a27a245](https://github.com/ils15/pantheon/commit/a27a245))
1008
+
1009
+ ## [v3.9.0] - 2026-05-28
1010
+
1011
+ [compare changes](https://github.com/ils15/pantheon/compare/v3.8.4...v3.9.0)
1012
+
1013
+ ## 🆕 What's New
1014
+
1015
+ - Setup changelogen + git-cliff for auto-releases ([ce4ee22](https://github.com/ils15/pantheon/commit/ce4ee22))
1016
+ - Cleanup commands, fix subtask agent, add Context7 tools, improve sync script ([da6ed7c](https://github.com/ils15/pantheon/commit/da6ed7c))
1017
+
1018
+ ## 🐞 Fixed
1019
+
1020
+ - Add missing closing brace for github configuration in opencode.json ([a63c522](https://github.com/ils15/pantheon/commit/a63c522))
1021
+ - Address PR review sync and mapping feedback ([c550049](https://github.com/ils15/pantheon/commit/c550049))
1022
+ - Sync version to 3.8.4, fix versioning.mjs apply bug, add version check script ([141a6b1](https://github.com/ils15/pantheon/commit/141a6b1))
1023
+ - Add CHANGELOG entry for v3.8.4 to fix CI validate failure ([58cc0f5](https://github.com/ils15/pantheon/commit/58cc0f5))
1024
+ - **ci:** Auto-release cria PR com auto-merge ao invés de push direto pra main ([e4f78c9](https://github.com/ils15/pantheon/commit/e4f78c9))
1025
+
1026
+ [v3.19.0]: https://github.com/ils15/pantheon/compare/v3.18.0...v3.19.0