pantheon-opencode 1.5.0-beta.16 → 1.5.0-beta.18
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 +48 -0
- package/README.md +13 -25
- package/README.pt-BR.md +4 -5
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/pyproject.toml +1 -1
- package/scripts/mcp_persistence_server.py +1 -1
- package/src/agents/apollo.md +1 -0
- package/src/agents/gaia.md +1 -0
- package/src/agents/zeus.md +8 -29
- package/src/mcp/mcp_persistence_server.py +1 -1
- package/src/pantheon/{delegation-compaction.ts → compaction-context.ts} +10 -100
- package/src/pantheon/cost-command.ts +1 -2
- package/src/pantheon/delegation-enforce.ts +59 -14
- package/src/pantheon/goal-loop.ts +1 -1
- package/src/pantheon/goal-store.ts +1 -1
- package/src/pantheon/idle-continuation.ts +4 -6
- package/src/pantheon/model-command.ts +1 -2
- package/src/pantheon/native-task-status.ts +2 -2
- package/src/pantheon/session-id.ts +30 -0
- package/src/pantheon/task-result-guard.ts +2 -3
- package/src/pantheon/todo-enforcer.ts +3 -3
- package/src/pantheon/tool-context.ts +23 -0
- package/src/pantheon/v2-bridge.ts +1 -4
- package/src/plugin-v2.ts +4 -15
- package/src/plugin.ts +61 -245
- package/src/plugins/tui/dist/tui.d.ts +49 -79
- package/src/plugins/tui/dist/tui.d.ts.map +1 -1
- package/src/plugins/tui/dist/tui.js +48 -189
- package/src/plugins/tui/package-lock.json +2 -2
- package/src/plugins/tui/package.json +1 -1
- package/src/plugins/tui/src/index.tsx +97 -295
- package/src/skills/context-compression/SKILL.md +1 -1
- package/src/pantheon/delegate-manager.ts +0 -851
- package/src/pantheon/delegation-classifier.ts +0 -306
- package/src/pantheon/delegation-finalize.ts +0 -468
- package/src/pantheon/delegation-notify.ts +0 -212
- package/src/pantheon/delegation-toast.ts +0 -73
- package/src/pantheon/delegation.ts +0 -1349
- package/src/pantheon/native-probe.ts +0 -234
- package/src/pantheon/step-cap.ts +0 -110
|
@@ -5,7 +5,7 @@ type DelegationEntry = {
|
|
|
5
5
|
alias: string;
|
|
6
6
|
/** Parent session the job was launched from (dir name under .pantheon/delegations). */
|
|
7
7
|
sessionID: string;
|
|
8
|
-
/** Child session id (=
|
|
8
|
+
/** Child session id (= task id, from the `Task ID` header). The
|
|
9
9
|
* children channel always sets it from the child session itself; the md
|
|
10
10
|
* channel parses it so child↔md matching works by taskID. */
|
|
11
11
|
taskID?: string;
|
|
@@ -21,10 +21,11 @@ type DelegationEntry = {
|
|
|
21
21
|
/** True while the panel is waiting for pantheon_delegation_read. */
|
|
22
22
|
read?: boolean;
|
|
23
23
|
/** Internal provenance used to keep a finalized md report authoritative.
|
|
24
|
-
* 'children-only' = a native task() child session with NO
|
|
25
|
-
* (a native child row); 'md' =
|
|
26
|
-
* '
|
|
27
|
-
|
|
24
|
+
* 'children-only' = a native task() child session with NO delegate report
|
|
25
|
+
* (a native child row); 'md' = the child has a matching report;
|
|
26
|
+
* 'child' = the plain children channel; 'live' = the optimistic tool-event
|
|
27
|
+
* channel. */
|
|
28
|
+
source?: 'child' | 'live' | 'md' | 'children-only';
|
|
28
29
|
};
|
|
29
30
|
/** Parse one delegation report md header into a structured entry.
|
|
30
31
|
* Returns null (skip) when the file is not a recognizable report:
|
|
@@ -51,38 +52,18 @@ declare function readDelegationEntries(dir: string): Promise<DelegationEntry[]>;
|
|
|
51
52
|
* running first, Finalized desc (the sort applied by readDelegationEntries).
|
|
52
53
|
* Fail-open: a missing/unreadable directory yields []. */
|
|
53
54
|
declare function readAllDelegationEntries(root: string): Promise<DelegationEntry[]>;
|
|
54
|
-
/** The persisted subset of BackgroundJobRecord the panel consumes. Duck-typed
|
|
55
|
-
* so a corrupt/older record never breaks parsing. */
|
|
56
|
-
type BoardJobRecord = {
|
|
57
|
-
taskID: string;
|
|
58
|
-
parentSessionID: string;
|
|
59
|
-
agent: string;
|
|
60
|
-
description?: string;
|
|
61
|
-
state: string;
|
|
62
|
-
alias: string;
|
|
63
|
-
launchedAt?: number;
|
|
64
|
-
completedAt?: number;
|
|
65
|
-
updatedAt?: number;
|
|
66
|
-
timedOut?: boolean;
|
|
67
|
-
};
|
|
68
|
-
/** The FilePersistence state path: `<root>/.pantheon/board/state.json`. */
|
|
69
|
-
declare function boardStatePath(root: string): string;
|
|
70
|
-
/** Read `.pantheon/board/state.json` (the cross-session job board snapshot).
|
|
71
|
-
* Fail-open: missing file, corrupt JSON, non-array payload or an unreadable
|
|
72
|
-
* path all yield [] — the panel keeps rendering from the other channels. */
|
|
73
|
-
declare function readBoardState(root: string): Promise<BoardJobRecord[]>;
|
|
74
55
|
/** Resolve the PROJECT ROOT used by every pantheon file channel. `directory`
|
|
75
56
|
* wins over `worktree` (the old `resolveDelegationsDir` already did this);
|
|
76
57
|
* an absent/empty root or `/` (no git — e.g. the sandbox test project) falls
|
|
77
|
-
* back to cwd. Standardised here so the delegations md
|
|
78
|
-
*
|
|
58
|
+
* back to cwd. Standardised here so the delegations md and the panel logger
|
|
59
|
+
* all read the SAME root (audit finding: the channels
|
|
79
60
|
* resolved the root independently). Pure — no I/O. */
|
|
80
61
|
declare function resolvePantheonRoot(state: {
|
|
81
62
|
directory?: string;
|
|
82
63
|
worktree?: string;
|
|
83
64
|
} | undefined, cwd?: string): string;
|
|
84
|
-
/** Resolve the directory where
|
|
85
|
-
* The
|
|
65
|
+
/** Resolve the directory where delegation md reports are written.
|
|
66
|
+
* The finalizer writes `.pantheon/delegations` RELATIVE to the server cwd,
|
|
86
67
|
* which the TUI exposes as `TuiState.path.directory`. */
|
|
87
68
|
declare function resolveDelegationsDir(state: {
|
|
88
69
|
directory?: string;
|
|
@@ -119,11 +100,11 @@ declare const STALE_RUNNING_THRESHOLD_MS: number;
|
|
|
119
100
|
* considered stale. Combined with the stale-running threshold to produce the
|
|
120
101
|
* display-only `stale-running` state. */
|
|
121
102
|
declare const IDLE_SILENCE_MS: number;
|
|
122
|
-
/** Visual-only terminal retention windows. Reports remain on disk
|
|
123
|
-
*
|
|
103
|
+
/** Visual-only terminal retention windows. Reports remain on disk; these
|
|
104
|
+
* constants only control which rows enter the TUI window. */
|
|
124
105
|
declare const DELEGATION_DONE_RETENTION_MS: number;
|
|
125
106
|
declare const DELEGATION_FAILED_RETENTION_MS: number;
|
|
126
|
-
/** Alias-less NATIVE task() live entries never receive a
|
|
107
|
+
/** Alias-less NATIVE task() live entries never receive a report alias (the
|
|
127
108
|
* task tool output carries none), so the 30s alias-less prune in
|
|
128
109
|
* mergeChildDelegationSources must not apply to them — 5 minutes covers a
|
|
129
110
|
* slow child listing while still bounding the live map. */
|
|
@@ -131,7 +112,7 @@ declare const NATIVE_LIVE_ALIASLESS_TTL_MS: number;
|
|
|
131
112
|
/**
|
|
132
113
|
* Mark a running entry as `stale-running` if it has been running longer than
|
|
133
114
|
* the threshold AND has no recent activity (no `updatedAt` change in the last
|
|
134
|
-
* `IDLE_SILENCE_MS`). This is DISPLAY-ONLY — the
|
|
115
|
+
* `IDLE_SILENCE_MS`). This is DISPLAY-ONLY — the persisted state is unchanged.
|
|
135
116
|
*
|
|
136
117
|
* A `stale-running` entry renders with a warning indicator but the underlying
|
|
137
118
|
* delegation is still treated as running by the backend.
|
|
@@ -152,9 +133,10 @@ declare function delegationActivityLabel(entry: DelegationEntry): string;
|
|
|
152
133
|
/** Return a deterministic spinner frame. The View ticks this every 1000ms
|
|
153
134
|
* (not 140ms — the fast tick flickered without adding information). */
|
|
154
135
|
declare function delegationSpinnerFrame(now: number): string;
|
|
155
|
-
/** Every state the row knows how to draw: the
|
|
156
|
-
*
|
|
157
|
-
*
|
|
136
|
+
/** Every state the row knows how to draw: the delegation lifecycle states
|
|
137
|
+
* derived from the children status + md reports (`completed`, `error`,
|
|
138
|
+
* `cancelled`, `startup_failed`, `startup_unknown`) plus the TUI-only
|
|
139
|
+
* states (`retry`, `stale-running`). Fase 1 deliberately omits speculative
|
|
158
140
|
* blocked/paused/scheduled/skipped. There is no `pending` display state: a
|
|
159
141
|
* pre-dispatch tool part maps to `running` in {@link reduceDelegationToolPart}. */
|
|
160
142
|
type DelegationDisplayState = DelegationEntry['state'];
|
|
@@ -291,31 +273,18 @@ declare function toDelegationEntry(live: LiveDelegationEntry): DelegationEntry;
|
|
|
291
273
|
* terminal md entry is authoritative over a live running entry for the
|
|
292
274
|
* same job (it carries Finalized/timedOut/cancelled from finalize). */
|
|
293
275
|
declare function mergeDelegationSources(live: readonly LiveDelegationEntry[], md: readonly DelegationEntry[]): DelegationEntry[];
|
|
294
|
-
/** Map one persisted board record into the display shape. Returns null for
|
|
295
|
-
* states the panel does not render (reconciled / unknown). Pure. */
|
|
296
|
-
declare function boardRecordToDelegationEntry(record: BoardJobRecord): DelegationEntry | null;
|
|
297
|
-
/** Map a whole board snapshot, dropping unrenderable states. Sorted like every
|
|
298
|
-
* other channel (running first, then most recent). Pure. */
|
|
299
|
-
declare function boardRecordsToDelegationEntries(records: readonly BoardJobRecord[]): DelegationEntry[];
|
|
300
|
-
/** Merge the board over any other channel. The board is AUTHORITATIVE for
|
|
301
|
-
* state/alias/agent (it is the persisted FSM). This merge is intentionally
|
|
302
|
-
* UNSCOPED so the board can enrich an active-session row (dedup by taskID);
|
|
303
|
-
* the caller scopes the merged list with {@link filterDelegationsToSession},
|
|
304
|
-
* which is what keeps other-session board jobs out of the panel. Dedup by
|
|
305
|
-
* taskID first, then by (sessionID, alias) — aliases are per parent session. Pure. */
|
|
306
|
-
declare function mergeBoardDelegationSources(base: readonly DelegationEntry[], board: readonly DelegationEntry[]): DelegationEntry[];
|
|
307
276
|
/** Scope a fully-merged display list to the ACTIVE session only.
|
|
308
277
|
*
|
|
309
|
-
* The panel is session-scoped: rows from other sessions (
|
|
310
|
-
*
|
|
278
|
+
* The panel is session-scoped: rows from other sessions (md history under
|
|
279
|
+
* `.pantheon/delegations/<other-session>/`) and rows with no
|
|
311
280
|
* attributable session (empty sessionID) are DROPPED. The previous
|
|
312
281
|
* cross-session behavior rendered those rows and clicking them led to
|
|
313
282
|
* "Session not found" — there is no cross-session channel anymore.
|
|
314
283
|
*
|
|
315
|
-
* The
|
|
316
|
-
*
|
|
317
|
-
*
|
|
318
|
-
* ONCE, after every merge (children + live + md
|
|
284
|
+
* The md channel still feeds the merge UNFILTERED so it can ENRICH an
|
|
285
|
+
* active-session row with state/alias/agent (dedup by taskID), but it can
|
|
286
|
+
* never introduce a row for another session: this filter is applied
|
|
287
|
+
* ONCE, after every merge (children + live + md).
|
|
319
288
|
*
|
|
320
289
|
* Returns [] when no active session resolves (null/placeholder) — there is no
|
|
321
290
|
* scope to show. Native children always carry the active session id (stamped
|
|
@@ -357,34 +326,35 @@ type TuiSessionSources = {
|
|
|
357
326
|
* fetch (empty panel, zero errors). Pure — no I/O, no runtime required. */
|
|
358
327
|
declare function resolveCurrentSessionID(sources: TuiSessionSources): string | null;
|
|
359
328
|
/** THE single choke point for every `session.children` / session-API path.
|
|
360
|
-
* Returns
|
|
361
|
-
* null for anything else (placeholder,
|
|
362
|
-
* skips the call entirely instead of
|
|
363
|
-
* (the "%7BsessionID%7D" regression).
|
|
364
|
-
*
|
|
365
|
-
*
|
|
329
|
+
* Returns the v2 SDK parameter shape `{ sessionID }` ONLY for a
|
|
330
|
+
* server-valid session id; returns null for anything else (placeholder,
|
|
331
|
+
* empty, foreign id) so the caller skips the call entirely instead of
|
|
332
|
+
* sending an unsubstituted placeholder (the "%7BsessionID%7D" regression).
|
|
333
|
+
* The TUI client is `@opencode-ai/sdk/v2`, whose session methods take a
|
|
334
|
+
* FLAT parameter object (`{ sessionID }`), NOT the v1 `{ path: { id } }`
|
|
335
|
+
* envelope — passing the v1 shape left the v2 `{sessionID}` URL template
|
|
336
|
+
* unsubstituted (`/session/%7BsessionID%7D/children`). Every session-API
|
|
337
|
+
* call site MUST go through this function (enforced by the source-scan
|
|
338
|
+
* test in tests/pantheon/tui-delegations.test.ts). */
|
|
366
339
|
declare function safeSessionPath(id: unknown): {
|
|
367
|
-
|
|
368
|
-
id: string;
|
|
369
|
-
};
|
|
340
|
+
sessionID: string;
|
|
370
341
|
} | null;
|
|
371
|
-
/** Build the `session.children`
|
|
342
|
+
/** Build the `session.children` parameters ONLY from a validated session id.
|
|
372
343
|
* Delegates to {@link safeSessionPath} — the single choke point. Returns
|
|
373
|
-
* null for null/invalid ids so the caller
|
|
374
|
-
* sending an unsubstituted placeholder (the
|
|
344
|
+
* the v2 SDK shape `{ sessionID }`; null for null/invalid ids so the caller
|
|
345
|
+
* skips the fetch instead of sending an unsubstituted placeholder (the
|
|
346
|
+
* "%7BsessionID%7D" regression). */
|
|
375
347
|
declare function buildChildrenPath(id: string | null | undefined): {
|
|
376
|
-
|
|
377
|
-
id: string;
|
|
378
|
-
};
|
|
348
|
+
sessionID: string;
|
|
379
349
|
} | null;
|
|
380
350
|
/** Duck-typed subset of a child Session (+ its live status type). */
|
|
381
351
|
type ChildDelegationLike = {
|
|
382
|
-
/** Child session id (=
|
|
352
|
+
/** Child session id (= task id). */
|
|
383
353
|
id: string;
|
|
384
354
|
/** Session title — the delegate's description or prompt prefix. */
|
|
385
355
|
title?: string;
|
|
386
356
|
/** Agent name when the child session carries one (duck-typed; native
|
|
387
|
-
* task() children may expose it,
|
|
357
|
+
* task() children may expose it, md reports always do). */
|
|
388
358
|
agent?: string;
|
|
389
359
|
/** Status type from api.state.session.status: 'busy' | 'retry' | 'idle',
|
|
390
360
|
* or undefined when the status API is unavailable. */
|
|
@@ -403,11 +373,11 @@ declare function childStatusToState(status: string | undefined): 'running' | 'co
|
|
|
403
373
|
*
|
|
404
374
|
* A row is
|
|
405
375
|
* `{glyph} {alias:7} {elapsed:>5}` plus a muted description line. The short
|
|
406
|
-
* alias (`apo-1`) is the single identity; rows without a
|
|
376
|
+
* alias (`apo-1`) is the single identity; rows without a report alias show
|
|
407
377
|
* the agent instead (never both). */
|
|
408
378
|
type DelegationRowStatus = 'active' | 'done' | 'failed' | 'retry';
|
|
409
379
|
/** Map every FSM/display state to one of the 4 row kinds. reconciled never
|
|
410
|
-
* reaches the panel (the
|
|
380
|
+
* reaches the panel (the md parser drops it) but reads as done;
|
|
411
381
|
* cancelled reads as done; startup_failed reads as failed while
|
|
412
382
|
* startup_unknown (no error known) reads as retry. Pure. */
|
|
413
383
|
declare function delegationRowStatus(state: DelegationDisplayState): DelegationRowStatus;
|
|
@@ -419,8 +389,8 @@ declare function delegationRowGlyph(status: DelegationRowStatus): string;
|
|
|
419
389
|
* through the 1s spinner for the given tick; every other kind is static.
|
|
420
390
|
* Pure. */
|
|
421
391
|
declare function delegationRowMarker(state: DelegationDisplayState, now?: number): string;
|
|
422
|
-
/** ONE identity per row: the short
|
|
423
|
-
*
|
|
392
|
+
/** ONE identity per row: the short report alias (`apo-1`); a row without a
|
|
393
|
+
* report alias (native task() child `native-task` / `native-<id>`, or an
|
|
424
394
|
* alias-less native live row `live-<callID>` kept as children-only) shows
|
|
425
395
|
* the agent instead — never alias + agent stacked. Pure. */
|
|
426
396
|
declare function delegationRowIdentity(entry: DelegationEntry): string;
|
|
@@ -463,7 +433,7 @@ declare function ceilingDelegationList(all: readonly DelegationEntry[], maxVisib
|
|
|
463
433
|
hiddenTerminal: number;
|
|
464
434
|
};
|
|
465
435
|
/** Split a display list into native task() rows vs pantheon_delegate rows.
|
|
466
|
-
* Native = source 'children-only' (no
|
|
436
|
+
* Native = source 'children-only' (no delegate report); everything else counts
|
|
467
437
|
* as pantheon. Pure — powers the hooks.log line. */
|
|
468
438
|
declare function countDelegationSources(entries: readonly DelegationEntry[]): {
|
|
469
439
|
native: number;
|
|
@@ -471,7 +441,7 @@ declare function countDelegationSources(entries: readonly DelegationEntry[]): {
|
|
|
471
441
|
total: number;
|
|
472
442
|
};
|
|
473
443
|
/** Diagnostic hooks.log line for a panel re-fetch, with the children
|
|
474
|
-
* breakdown (pantheon = children WITH a
|
|
444
|
+
* breakdown (pantheon = children WITH a delegate report, native = children
|
|
475
445
|
* WITHOUT one). Pure — the View logs the returned string verbatim. */
|
|
476
446
|
declare function formatPanelLogLine(children: number, pantheon: number, native: number, md: number, events: number): string;
|
|
477
447
|
declare function childrenToDelegationEntries(children: readonly ChildDelegationLike[] | undefined, md: readonly DelegationEntry[], now?: number, parentSessionID?: string): DelegationEntry[];
|
|
@@ -503,5 +473,5 @@ declare const plugin: TuiPluginModule & {
|
|
|
503
473
|
setup: () => Promise<void>;
|
|
504
474
|
};
|
|
505
475
|
//#endregion
|
|
506
|
-
export {
|
|
476
|
+
export { ChildDelegationLike, DELEGATION_ALIAS_WIDTH, DELEGATION_DESCRIPTION_MAX, DELEGATION_DONE_RETENTION_MS, DELEGATION_ELAPSED_WIDTH, DELEGATION_FAILED_RETENTION_MS, DELEGATION_ROW_GLYPHS, DELEGATION_VISIBLE_CEILING, DelegationActivity, DelegationDisplayState, DelegationEntry, DelegationRowStatus, DelegationStateTone, DelegationToolPart, IDLE_SILENCE_MS, LiveDelegationEntry, LiveDelegationStore, NATIVE_LIVE_ALIASLESS_TTL_MS, ParsedDelegationToolPart, STALE_RUNNING_THRESHOLD_MS, ToolActivity, TuiSessionSources, buildChildrenPath, ceilingDelegationList, childStatusToState, childrenToDelegationEntries, collectDelegationToolParts, compareDelegationEntries, countDelegationSources, createDelegationRowOpenHandler, plugin as default, delegationActivity, delegationActivityLabel, delegationElapsed, delegationRowGlyph, delegationRowIdentity, delegationRowMarker, delegationRowStatus, delegationSpinnerFrame, delegationStateTone, extractToolActivity, filterDelegationsToSession, fmtElapsed, formatDelegationAlias, formatDelegationElapsed, formatDelegationHeader, formatDelegationRowLead, formatPanelLogLine, isValidSessionId, latestToolActivityFor, markStaleIfRunning, mergeChildDelegationSources, mergeDelegationSources, navigateToDelegationSession, panelLogDir, parseDelegationMarkdown, parseDelegationToolPart, readAllDelegationEntries, readDelegationEntries, reduceDelegationToolPart, removeDelegationEntry, resolveCurrentSessionID, resolveDelegationsDir, resolvePantheonRoot, safeSessionPath, seedLiveDelegationMap, splitDelegationList, toDelegationEntry, trackToolActivity, truncateDelegationDescription, tuiLogPath, visibleDelegationList };
|
|
507
477
|
//# sourceMappingURL=tui.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tui.d.ts","names":[],"sources":["../src/index.tsx"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"tui.d.ts","names":[],"sources":["../src/index.tsx"],"mappings":"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"}
|