pantheon-opencode 1.5.0-beta.5 → 1.5.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -18,6 +18,31 @@ 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-beta.6] - 2026-09-12
22
+
23
+ <!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
24
+ move this section to a versioned entry and reset the template below. -->
25
+
26
+ ## 🆕 What's New
27
+
28
+ - **Delegation panel v2:** live tool activity per running delegation
29
+ (`↳ bash npm test` — what the child is doing right now), a paginated
30
+ `Archived (n)` section for terminal reports beyond the recent 8, and a
31
+ distinct `retry` state (⟳ marker, RETRYING label) instead of lumping
32
+ retries into running.
33
+
34
+ ## 🐞 Fixed
35
+
36
+ - **Stale plugin refs from old installs:** the installer now prunes
37
+ `pantheon-opencode` plugin references pointing at other installed copies of
38
+ the package (older nvm prefixes, npx cache hashes). Previously every init
39
+ accumulated refs from past installs and the oldest — without the newest
40
+ fixes — won the plugin load race, silently disabling native-task
41
+ mirroring. Third-party plugins sharing the same file names remain
42
+ protected.
43
+ - **Docs:** `@beta` dist-tag guidance on all npx commands — plain
44
+ `npx pantheon-opencode` resolves the stable release and silently downgrades
45
+ the installed TUI copy.
21
46
  ## [v1.5.0-beta.5] - 2026-09-12
22
47
 
23
48
  <!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
package/README.md CHANGED
@@ -218,8 +218,13 @@ V1 plugin into V2 or provide V2 with V1 hooks.
218
218
  One command keeps an existing installation current:
219
219
 
220
220
  ```bash
221
- npx pantheon-opencode update # npm beta channel + config refresh
222
- npx pantheon-opencode update --stable # stable channel instead
221
+ # Without a global install, ALWAYS pin the dist-tag — plain `npx
222
+ # pantheon-opencode` resolves `latest`, which is the stable release (1.4.3):
223
+ npx pantheon-opencode@beta update # npm beta channel + config refresh
224
+ npx pantheon-opencode@beta update --stable # stable channel instead
225
+
226
+ # With a global install, use the global bin (defaults to the beta channel):
227
+ pantheon-opencode update
223
228
  ```
224
229
 
225
230
  `update` compares your installed version with the npm dist-tag, runs
package/README.pt-BR.md CHANGED
@@ -184,8 +184,13 @@ converte um plugin V1 em V2 nem dá hooks V1 ao V2.
184
184
  Um comando mantém uma instalação existente em dia:
185
185
 
186
186
  ```bash
187
- npx pantheon-opencode update # canal beta do npm + refresh do config
188
- npx pantheon-opencode update --stable # canal estável
187
+ # Sem instalação global, SEMPRE fixe o dist-tag — `npx pantheon-opencode`
188
+ # puro resolve a tag `latest`, que é o release estável (1.4.3):
189
+ npx pantheon-opencode@beta update # canal beta do npm + refresh do config
190
+ npx pantheon-opencode@beta update --stable # canal estável
191
+
192
+ # Com instalação global, use o bin global (o padrão é o canal beta):
193
+ pantheon-opencode update
189
194
  ```
190
195
 
191
196
  O `update` compara a versão instalada com o dist-tag do npm, roda
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pantheon-opencode",
3
- "version": "1.5.0-beta.5",
3
+ "version": "1.5.0-beta.6",
4
4
  "description": "Multi-agent orchestration for OpenCode — 14 specialized agents, TDD, Themis review gates.",
5
5
  "type": "module",
6
6
  "publishConfig": {
package/plugin.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pantheon",
3
3
  "publisher": "ils15",
4
- "version": "1.5.0-beta.5",
4
+ "version": "1.5.0-beta.6",
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",
package/pyproject.toml CHANGED
@@ -4,7 +4,7 @@ build-backend = "setuptools.backends._legacy:_Backend"
4
4
 
5
5
  [project]
6
6
  name = "pantheon"
7
- version = "1.5.0-beta.5"
7
+ version = "1.5.0-beta.6"
8
8
  description = "Multi-agent orchestration framework"
9
9
  requires-python = ">=3.11"
10
10
  dependencies = []
@@ -217,6 +217,21 @@ function managedPluginIdentity(ref) {
217
217
  if (absolutePath === normalizePluginPath(resolve(ROOT, PANTHEON_V2_LEGACY_FILE))) {
218
218
  return PANTHEON_V2_PLUGIN
219
219
  }
220
+ // beta.5: stale refs from OTHER installed copies of this package (older
221
+ // nvm prefixes, npx cache hashes). Only paths inside
222
+ // `node_modules/pantheon-opencode/` count as installed copies — a dev
223
+ // checkout elsewhere (e.g. a vendor folder named pantheon-opencode) remains
224
+ // protected by the third-party rule above.
225
+ const installedMarker = '/node_modules/pantheon-opencode/'
226
+ const withSlashes = normalizePluginPath(normalized)
227
+ const markerIndex = withSlashes.lastIndexOf(installedMarker)
228
+ if (markerIndex !== -1) {
229
+ const suffix = withSlashes.slice(markerIndex + installedMarker.length)
230
+ if (suffix === PANTHEON_V1_PLUGIN) return PANTHEON_V1_PLUGIN
231
+ if (suffix === PANTHEON_V1_HOOKS) return PANTHEON_V1_HOOKS
232
+ if (suffix === PANTHEON_V2_PLUGIN) return PANTHEON_V2_PLUGIN
233
+ if (suffix === PANTHEON_V2_LEGACY_FILE) return PANTHEON_V2_PLUGIN
234
+ }
220
235
  }
221
236
 
222
237
  return null
@@ -11,7 +11,7 @@ type DelegationEntry = {
11
11
  taskID?: string;
12
12
  /** Agent name, e.g. "apollo". */
13
13
  agent: string;
14
- state: 'running' | 'completed' | 'error' | 'startup_failed' | 'startup_unknown' | 'cancelled' | 'stale-running';
14
+ state: 'running' | 'retry' | 'completed' | 'error' | 'startup_failed' | 'startup_unknown' | 'cancelled' | 'stale-running';
15
15
  /** Epoch ms of the `Started` header. */
16
16
  startedAt: number;
17
17
  /** Epoch ms of the `Finalized` header — null while still running. */
@@ -73,10 +73,18 @@ declare function tuiLogPath(projectRoot: string): string;
73
73
  * falling back to startedAt, descending). Shared by the md reader and
74
74
  * mergeDelegationSources. */
75
75
  declare function compareDelegationEntries(a: DelegationEntry, b: DelegationEntry): number;
76
- /** The list the panel actually renders: running jobs first, then the most
77
- * recent terminal reports (capped). Pure — so the history-only panel (no
78
- * sessionID) is testable without the TUI runtime. The header count uses the
79
- * same "running + recentes" list. */
76
+ /** Split the panel list: active jobs (running/retry, stale-marked) first,
77
+ * then the most recent terminal reports, then the archived tail (paginated
78
+ * in the View). Pure — so the history-only panel (no sessionID) is testable
79
+ * without the TUI runtime. */
80
+ declare function splitDelegationList(all: readonly DelegationEntry[], maxRecent?: number, now?: number, staleThresholdMs?: number): {
81
+ active: DelegationEntry[];
82
+ recent: DelegationEntry[];
83
+ archived: DelegationEntry[];
84
+ };
85
+ /** The list the panel actually renders (kept for the header count and
86
+ * existing tests): active jobs first, then the most recent terminal
87
+ * reports (capped) — the archived tail is rendered separately. Pure. */
80
88
  declare function visibleDelegationList(all: readonly DelegationEntry[], maxTerminal?: number, now?: number, staleThresholdMs?: number): DelegationEntry[];
81
89
  /** Default stale-running threshold: 30 minutes. */
82
90
  declare const STALE_RUNNING_THRESHOLD_MS: number;
@@ -106,6 +114,30 @@ declare function delegationActivity(entry: DelegationEntry): DelegationActivity;
106
114
  declare function delegationActivityLabel(entry: DelegationEntry): string;
107
115
  /** Return a deterministic spinner frame. The View ticks this every 140ms. */
108
116
  declare function delegationSpinnerFrame(now: number): string;
117
+ type ToolActivity = {
118
+ tool: string;
119
+ summary: string;
120
+ at: number;
121
+ };
122
+ /** Reduce one message.part.updated tool part to displayable activity.
123
+ * Returns null for non-tool parts, completed/error parts (no live activity)
124
+ * or parts without a session id. Pure. */
125
+ declare function extractToolActivity(part: {
126
+ type?: string;
127
+ tool?: string;
128
+ sessionID?: string;
129
+ state?: {
130
+ status?: string;
131
+ input?: Record<string, unknown>;
132
+ };
133
+ }, now?: number): {
134
+ sessionID: string;
135
+ activity: ToolActivity;
136
+ } | null;
137
+ /** Record an activity sample (bounded map, oldest dropped). */
138
+ declare function trackToolActivity(map: Map<string, ToolActivity>, sessionID: string, activity: ToolActivity): void;
139
+ /** Latest live activity for a child session, or null when absent/stale. */
140
+ declare function latestToolActivityFor(map: Map<string, ToolActivity>, sessionID: string | undefined, now?: number, ttlMs?: number): ToolActivity | null;
109
141
  /** Merge the immediate tool-event channel into the child-session channel.
110
142
  *
111
143
  * Children remain the durable source, while live entries make a delegation
@@ -278,7 +310,7 @@ type ChildDelegationLike = {
278
310
  * (the child is actively working), idle → completed, unknown → running
279
311
  * (fail-open: a freshly-seen child is assumed active; the 1s poll + md
280
312
  * correct it as soon as terminal data exists). */
281
- declare function childStatusToState(status: string | undefined): 'running' | 'completed';
313
+ declare function childStatusToState(status: string | undefined): 'running' | 'completed' | 'retry';
282
314
  /** Row tag for a delegation entry: `[native]` for native task() children
283
315
  * (source 'children-only' — no board report), `[pantheon:<alias>]` for board
284
316
  * rows ([pantheon:apo-1]) — the same tags the manager prints in
@@ -324,5 +356,5 @@ declare const plugin: TuiPluginModule & {
324
356
  setup: () => Promise<void>;
325
357
  };
326
358
  //#endregion
327
- export { ChildDelegationLike, DelegationActivity, DelegationEntry, DelegationToolPart, IDLE_SILENCE_MS, LiveDelegationEntry, LiveDelegationStore, ParsedDelegationToolPart, STALE_RUNNING_THRESHOLD_MS, TuiSessionSources, buildChildrenPath, childStatusToState, childrenToDelegationEntries, collectDelegationToolParts, compareDelegationEntries, plugin as default, delegationActivity, delegationActivityLabel, delegationElapsed, delegationSpinnerFrame, delegationTag, fmtElapsed, isValidSessionId, markStaleIfRunning, mergeChildDelegationSources, mergeDelegationSources, navigateToDelegationSession, panelLogDir, parseDelegationMarkdown, parseDelegationToolPart, readAllDelegationEntries, readDelegationEntries, reduceDelegationToolPart, removeDelegationEntry, resolveCurrentSessionID, resolveDelegationsDir, safeSessionPath, seedLiveDelegationMap, toDelegationEntry, tuiLogPath, visibleDelegationList };
359
+ export { ChildDelegationLike, DelegationActivity, DelegationEntry, DelegationToolPart, IDLE_SILENCE_MS, LiveDelegationEntry, LiveDelegationStore, ParsedDelegationToolPart, STALE_RUNNING_THRESHOLD_MS, ToolActivity, TuiSessionSources, buildChildrenPath, childStatusToState, childrenToDelegationEntries, collectDelegationToolParts, compareDelegationEntries, plugin as default, delegationActivity, delegationActivityLabel, delegationElapsed, delegationSpinnerFrame, delegationTag, extractToolActivity, fmtElapsed, isValidSessionId, latestToolActivityFor, markStaleIfRunning, mergeChildDelegationSources, mergeDelegationSources, navigateToDelegationSession, panelLogDir, parseDelegationMarkdown, parseDelegationToolPart, readAllDelegationEntries, readDelegationEntries, reduceDelegationToolPart, removeDelegationEntry, resolveCurrentSessionID, resolveDelegationsDir, safeSessionPath, seedLiveDelegationMap, splitDelegationList, toDelegationEntry, trackToolActivity, tuiLogPath, visibleDelegationList };
328
360
  //# sourceMappingURL=tui.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tui.d.ts","names":[],"sources":["../src/index.tsx"],"mappings":";;KAo7BY;;EAEV;;EAEA;;;;EAIA;;EAEA;EACA;;EASA;;EAEA;EACA;EACA;;EAEA;;;;EAIA;;;;;;;;;;;iBAsBc,wBACd,aACA,oBACA,qBACC;;;;;;iBAkHmB,sBAAsB,cAAc,QAAQ;;;;;;;;iBAwC5C,yBAAyB,eAAe,QAAQ;;;;;;;;iBAWtD,sBACd;EAAS;EAAoB;eAC7B;;;;;;iBAYc,YAAY;;;iBAMZ,WAAW;;;;iBAOX,yBAAyB,GAAG,iBAAiB,GAAG;;;;;iBAWhD,sBACd,cAAc,mBACd,sBACA,cACA,4BACC;;cASU;;;;cAKA;;;;;;;;;iBAUG,mBACd,OAAO,iBACP,aACA,uBACC;;;iBAWa,WAAW;;;iBAcX,kBAAkB,OAAO,iBAAiB;;;KAQ9C;iBAQI,mBAAmB,OAAO,kBAAkB;iBAc5C,wBAAwB,OAAO;;iBAoB/B,uBAAuB;;;;;;;iBAWvB,4BACd,mBAAmB,mBACnB,eAAe,wBACd;;KAmFS;EACV;EACA;EACA;EACA;EACA;EACA;IACE;IACA,QAAQ;IACR;IACA;IACA;MAAS;MAAgB;;;;;KAKjB;;EAEV;;EAEA;;EAEA;EACA;;EAEA;EACA;;EAEA;;EAEA;EACA;EACA;EACA;;EAEA;;;KAIU;EACV;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;;;;iBAac,wBACd,MAAM,oBACN,eACC;;;iBA+Ea,yBACd,KAAK,YAAY,sBACjB,MAAM,oBACN;;;iBA+Fc,sBACd,KAAK,YAAY,sBACjB;;;;;;iBAiBc,2BACd;EAAqB;EAAa;iBAClC,YAAY,uDACX;;;;;iBA2Ba,sBACd,KAAK,YAAY,sBACjB,gBAAgB,sBAChB;;;iBAWc,kBAAkB,MAAM,sBAAsB;;;;;;iBAqB9C,uBACd,eAAe,uBACf,aAAa,oBACZ;;;;;;;;;iBA8Da,iBAAiB,cAAc;;;;KAOnC;;EAEV;EACA;;IAEE;MAAU;;;IAEV;MAAU;QAAY;QAAe,SAAS;;;;;;;;;;iBASlC,wBAAwB,SAAS;;;;;;;;iBAmBjC,gBAAgB;EAAgB;IAAQ;;;;;;;iBASxC,kBAAkB;EAAkC;IAAQ;;;;KAKhE;;EAEV;;EAEA;;;EAGA;;;EAGA;EACA;IACE;IACA;;;;;;;iBAQY,mBAAmB;;;;;;;iBAWnB,cAAc,OAAO;;;;;;;;;;;;;;iBAiBrB,4BACd,mBAAmB,mCACnB,aAAa,mBACb,eACC;;;;;;iBA0Ca,4BACd;EAAS,YAAY,cAAc,SAAS;eAC5C;;;;;KAiLU;EACV,KAAK,YAAY;;EAEjB;;EAEA;;cAucI,QAAQ;EAAoB;EAAY,aAAa"}
1
+ {"version":3,"file":"tui.d.ts","names":[],"sources":["../src/index.tsx"],"mappings":";;KAo7BY;;EAEV;;EAEA;;;;EAIA;;EAEA;EACA;;EAUA;;EAEA;EACA;EACA;;EAEA;;;;EAIA;;;;;;;;;;;iBAsBc,wBACd,aACA,oBACA,qBACC;;;;;;iBAkHmB,sBAAsB,cAAc,QAAQ;;;;;;;;iBAwC5C,yBAAyB,eAAe,QAAQ;;;;;;;;iBAWtD,sBACd;EAAS;EAAoB;eAC7B;;;;;;iBAYc,YAAY;;;iBAMZ,WAAW;;;;iBAOX,yBAAyB,GAAG,iBAAiB,GAAG;;;;;iBAahD,oBACd,cAAc,mBACd,oBACA,cACA;EACG,QAAQ;EAAmB,QAAQ;EAAmB,UAAU;;;;;iBAerD,sBACd,cAAc,mBACd,sBACA,cACA,4BACC;;cAMU;;;;cAKA;;;;;;;;;iBAUG,mBACd,OAAO,iBACP,aACA,uBACC;;;iBAWa,WAAW;;;iBAcX,kBAAkB,OAAO,iBAAiB;;;KAQ9C;iBAQI,mBAAmB,OAAO,kBAAkB;iBAc5C,wBAAwB,OAAO;;iBAqB/B,uBAAuB;KAY3B;EACV;EACA;EACA;;;;;iBA0Bc,oBACd;EACE;EACA;EACA;EACA;IAAU;IAAiB,QAAQ;;GAErC;EACG;EAAmB,UAAU;;;iBAYlB,kBACd,KAAK,YAAY,eACjB,mBACA,UAAU;;iBAWI,sBACd,KAAK,YAAY,eACjB,+BACA,cACA,iBACC;;;;;;;iBAca,4BACd,mBAAmB,mBACnB,eAAe,wBACd;;KAmFS;EACV;EACA;EACA;EACA;EACA;EACA;IACE;IACA,QAAQ;IACR;IACA;IACA;MAAS;MAAgB;;;;;KAKjB;;EAEV;;EAEA;;EAEA;EACA;;EAEA;EACA;;EAEA;;EAEA;EACA;EACA;EACA;;EAEA;;;KAIU;EACV;EACA;EACA;EACA;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;;;;iBAac,wBACd,MAAM,oBACN,eACC;;;iBA+Ea,yBACd,KAAK,YAAY,sBACjB,MAAM,oBACN;;;iBA+Fc,sBACd,KAAK,YAAY,sBACjB;;;;;;iBAiBc,2BACd;EAAqB;EAAa;iBAClC,YAAY,uDACX;;;;;iBA2Ba,sBACd,KAAK,YAAY,sBACjB,gBAAgB,sBAChB;;;iBAWc,kBAAkB,MAAM,sBAAsB;;;;;;iBAqB9C,uBACd,eAAe,uBACf,aAAa,oBACZ;;;;;;;;;iBA8Da,iBAAiB,cAAc;;;;KAOnC;;EAEV;EACA;;IAEE;MAAU;;;IAEV;MAAU;QAAY;QAAe,SAAS;;;;;;;;;;iBASlC,wBAAwB,SAAS;;;;;;;;iBAmBjC,gBAAgB;EAAgB;IAAQ;;;;;;;iBASxC,kBAAkB;EAAkC;IAAQ;;;;KAKhE;;EAEV;;EAEA;;;EAGA;;;EAGA;EACA;IACE;IACA;;;;;;;iBAQY,mBAAmB;;;;;;;iBAYnB,cAAc,OAAO;;;;;;;;;;;;;;iBAiBrB,4BACd,mBAAmB,mCACnB,aAAa,mBACb,eACC;;;;;;iBA0Ca,4BACd;EAAS,YAAY,cAAc,SAAS;eAC5C;;;;;KAiMU;EACV,KAAK,YAAY;;EAEjB;;EAEA;;cA0fI,QAAQ;EAAoB;EAAY,aAAa"}