Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .zenodo.json
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
{
"title": "Pantheon",
"upload_type": "software",
"description": "Pantheon v1.5.0-beta.18 is an OpenCode plugin and installer for coordinating 14 specialized agents. The repository includes reusable skills, slash-command definitions, MCP server implementations, documentation, and tests. This release records version 1.5.0-beta.18 synchronized across package.json, package-lock.json, plugin.json, pyproject.toml, and src/plugins/tui/package.json.\n\nO Pantheon v1.5.0-beta.18 é um plugin e instalador para OpenCode que coordena 14 agentes especializados. O repositório inclui skills reutilizáveis, definições de comandos slash, implementações de servidores MCP, documentação e testes. Esta release registra a versão 1.5.0-beta.18 sincronizada em package.json, package-lock.json, plugin.json, pyproject.toml e src/plugins/tui/package.json.",
"description": "Pantheon v1.5.0-beta.19 is an OpenCode plugin and installer for coordinating 14 specialized agents. The repository includes reusable skills, slash-command definitions, MCP server implementations, documentation, and tests. This release records version 1.5.0-beta.19 synchronized across package.json, package-lock.json, plugin.json, pyproject.toml, and src/plugins/tui/package.json.\n\nO Pantheon v1.5.0-beta.19 é um plugin e instalador para OpenCode que coordena 14 agentes especializados. O repositório inclui skills reutilizáveis, definições de comandos slash, implementações de servidores MCP, documentação e testes. Esta release registra a versão 1.5.0-beta.19 sincronizada em package.json, package-lock.json, plugin.json, pyproject.toml e src/plugins/tui/package.json.",
"creators": [
{
"name": "Igor Leite da Silva"
}
],
"version": "1.5.0-beta.18",
"version": "1.5.0-beta.19",
"publication_date": "2026-09-16",
"license": "MIT",
"language": "eng",
"keywords": ["opencode", "ai-agents", "multi-agent", "orchestration", "developer-tools"],
"url": "https://github.com/ils15/pantheon-opencode/releases/tag/v1.5.0-beta.18",
"url": "https://github.com/ils15/pantheon-opencode/releases/tag/v1.5.0-beta.19",
"related_identifiers": [
{
"identifier": "https://github.com/ils15/pantheon-opencode",
Expand Down
14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,20 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).

## ✅ Closed Issues

## [v1.5.0-beta.19] - 2026-09-16

<!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
move this section to a versioned entry and reset the template below. -->

## 🆕 What's New

- **Improved — painel Delegations**: status ausente de children antigas agora é
`done` (não `running`); grace 60s para sessões recém-criadas; janela de
recência 24h (filtra histórico); ordenação newest-first; ceiling esconde
antigos.
- **Improved — animação**: spinner ⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ agora tem timer
independente (80ms/frame), separado do poll de dados — fluido, não mais
"travado".
## [v1.5.0-beta.18] - 2026-09-16

<!-- Add new changes here. Running `node scripts/versioning.mjs apply` will
Expand Down
8 changes: 4 additions & 4 deletions CITATION.cff
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ cff-version: 1.2.0
message: "If you use Pantheon, please cite this software."
title: "Pantheon"
abstract: >-
Pantheon v1.5.0-beta.18 is an OpenCode plugin and installer for coordinating
Pantheon v1.5.0-beta.19 is an OpenCode plugin and installer for coordinating
14 specialized agents. The repository includes reusable skills,
slash-command definitions, MCP server implementations, documentation, and
tests. O Pantheon v1.5.0-beta.18 é um plugin e instalador para OpenCode que
tests. O Pantheon v1.5.0-beta.19 é um plugin e instalador para OpenCode que
coordena 14 agentes especializados, com skills reutilizáveis, comandos
slash, servidores MCP, documentação e testes.
version: 1.5.0-beta.18
version: 1.5.0-beta.19
date-released: 2026-09-16
url: https://github.com/ils15/pantheon-opencode/releases/tag/v1.5.0-beta.18
url: https://github.com/ils15/pantheon-opencode/releases/tag/v1.5.0-beta.19
doi: 10.5281/zenodo.22306637
repository-code: https://github.com/ils15/pantheon-opencode
license: MIT
Expand Down
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "pantheon-opencode",
"version": "1.5.0-beta.18",
"version": "1.5.0-beta.19",
"description": "Multi-agent orchestration for OpenCode — 14 specialized agents, TDD, Themis review gates.",
"type": "module",
"publishConfig": {
Expand Down
2 changes: 1 addition & 1 deletion plugin.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "pantheon",
"publisher": "ils15",
"version": "1.5.0-beta.18",
"version": "1.5.0-beta.19",
"displayName": "Pantheon",
"description": "Conductor-Delegate orchestration platform with 14 specialized agents, 21 skills, and OpenCode support.",
"agents": "./src/agents",
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "setuptools.backends._legacy:_Backend"

[project]
name = "pantheon"
version = "1.5.0-beta.18"
version = "1.5.0-beta.19"
description = "Multi-agent orchestration framework"
requires-python = ">=3.11"
dependencies = []
Expand Down
59 changes: 47 additions & 12 deletions src/plugins/tui/dist/tui.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,24 @@ declare const IDLE_SILENCE_MS: number;
* constants only control which rows enter the TUI window. */
declare const DELEGATION_DONE_RETENTION_MS: number;
declare const DELEGATION_FAILED_RETENTION_MS: number;
/** Grace window for an ABSENT child status. `api.state.session.status()` only
* carries the sessions that are currently ALIVE; every finished child of a
* long-lived session is missing from that map. A child with no status is
* therefore treated as terminal (done) — treating it as running made every
* historical child of the session show up as "active" (the "197 children,
* all active" regression). The one exception is a freshly-spawned child that
* has not been registered by the status API yet: within this window of its
* last activity (`time.updated`, falling back to `time.created`) it still
* reads as running. */
declare const DELEGATION_CHILD_STATUS_GRACE_MS: number;
/** Recency window for the children channel. `session.children` returns EVERY
* child the focused session ever spawned, so a long session accumulates
* hundreds of historical rows that would inflate the panel. A child whose
* last activity (its own time, or its matched report's Finalized timestamp)
* is older than this window is dropped BEFORE it can enter the list. 24h
* keeps the sidebar scoped to current work while still covering long
* delegations. A child with no timestamp at all is kept (fail-open). */
declare const DELEGATION_CHILDREN_RECENCY_MS: number;
/** Alias-less NATIVE task() live entries never receive a report alias (the
* task tool output carries none), so the 30s alias-less prune in
* mergeChildDelegationSources must not apply to them — 5 minutes covers a
Expand All @@ -130,9 +148,10 @@ declare function delegationElapsed(entry: DelegationEntry, now: number): string;
type DelegationActivity = 'delegating' | 'working' | 'reading' | 'completed' | 'error' | 'cancelled';
declare function delegationActivity(entry: DelegationEntry): DelegationActivity;
declare function delegationActivityLabel(entry: DelegationEntry): string;
/** Return a deterministic spinner frame. The View ticks this every 1000ms
* (not 140ms — the fast tick flickered without adding information). */
declare function delegationSpinnerFrame(now: number): string;
/** Return the spinner glyph for the given frame counter. The frame counter
* is incremented every ~80ms by a dedicated animation timer, decoupled from
* the data poll cycle. Pure — no side effects. */
declare function delegationSpinnerFrame(frame: number): string;
/** Every state the row knows how to draw: the delegation lifecycle states
* derived from the children status + md reports (`completed`, `error`,
* `cancelled`, `startup_failed`, `startup_unknown`) plus the TUI-only
Expand Down Expand Up @@ -364,11 +383,27 @@ type ChildDelegationLike = {
updated?: number;
};
};
/** Map a child status type to a display state. busy/retry → running
* (the child is actively working), idle → completed, unknown → running
* (fail-open: a freshly-seen child is assumed active; the 1s poll + md
* correct it as soon as terminal data exists). */
declare function childStatusToState(status: string | undefined): 'running' | 'completed' | 'retry';
/** Map a child status type to a display state.
*
* Only `busy`/`retry` are EXPLICIT live states. `idle` is terminal and so is
* any other/unknown status — a status the panel does not recognise is not
* evidence of activity. An ABSENT status is the historical case: the status
* map (`api.state.session.status`) contains only currently-alive sessions, so
* every finished child of a long session is missing from it. Defaulting that
* to running made the whole session history render as "active" (the
* "197 children, all active" regression), so an absent status is terminal
* (done) UNLESS the child was active within `graceMs` — a just-spawned child
* that the status API has not registered yet must still render as running.
*
* @param status the `api.state.session.status(id)?.type`, or undefined
* @param time the child session time fields (`created`/`updated`)
* @param now current wall-clock ms (injectable for tests)
* @param graceMs recency window for the absent-status running assumption
* Pure — no I/O. */
declare function childStatusToState(status: string | undefined, time?: {
created?: number;
updated?: number;
}, now?: number, graceMs?: number): 'running' | 'completed' | 'retry';
/** Status-only row model: ONE glyph + ONE identity per row.
*
* A row is
Expand All @@ -386,9 +421,9 @@ declare function delegationRowStatus(state: DelegationDisplayState): DelegationR
declare const DELEGATION_ROW_GLYPHS: Readonly<Record<DelegationRowStatus, string>>;
declare function delegationRowGlyph(status: DelegationRowStatus): string;
/** Row marker (`<glyph> `) — the single state channel. `active` animates
* through the 1s spinner for the given tick; every other kind is static.
* Pure. */
declare function delegationRowMarker(state: DelegationDisplayState, now?: number): string;
* through the spinner for the given frame counter (incremented every ~80ms);
* every other kind is static. Pure. */
declare function delegationRowMarker(state: DelegationDisplayState, frame?: number): string;
/** ONE identity per row: the short report alias (`apo-1`); a row without a
* report alias (native task() child `native-task` / `native-<id>`, or an
* alias-less native live row `live-<callID>` kept as children-only) shows
Expand Down Expand Up @@ -473,5 +508,5 @@ declare const plugin: TuiPluginModule & {
setup: () => Promise<void>;
};
//#endregion
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 };
export { ChildDelegationLike, DELEGATION_ALIAS_WIDTH, DELEGATION_CHILDREN_RECENCY_MS, DELEGATION_CHILD_STATUS_GRACE_MS, 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 };
//# sourceMappingURL=tui.d.ts.map
2 changes: 1 addition & 1 deletion src/plugins/tui/dist/tui.d.ts.map

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading