@esso0428/pi-subagents 0.15.5 → 0.15.7
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 +10 -19
- package/README.md +5 -5
- package/dist/agent-history-list.d.ts +19 -0
- package/dist/agent-history-list.d.ts.map +1 -0
- package/dist/agent-history-list.js +69 -0
- package/dist/agent-history-list.js.map +1 -0
- package/dist/agent-history.d.ts +2 -1
- package/dist/agent-history.d.ts.map +1 -0
- package/dist/agent-history.js +32 -34
- package/dist/agent-history.js.map +1 -0
- package/dist/agent-manager.d.ts +24 -8
- package/dist/agent-manager.d.ts.map +1 -0
- package/dist/agent-manager.js +171 -93
- package/dist/agent-manager.js.map +1 -0
- package/dist/agent-runner.d.ts +1 -0
- package/dist/agent-runner.d.ts.map +1 -0
- package/dist/agent-runner.js +75 -86
- package/dist/agent-runner.js.map +1 -0
- package/dist/agent-types.d.ts +1 -0
- package/dist/agent-types.d.ts.map +1 -0
- package/dist/agent-types.js +28 -45
- package/dist/agent-types.js.map +1 -0
- package/dist/context.d.ts +1 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +3 -6
- package/dist/context.js.map +1 -0
- package/dist/cross-extension-rpc.d.ts +1 -0
- package/dist/cross-extension-rpc.d.ts.map +1 -0
- package/dist/cross-extension-rpc.js +6 -9
- package/dist/cross-extension-rpc.js.map +1 -0
- package/dist/custom-agents.d.ts +1 -0
- package/dist/custom-agents.d.ts.map +1 -0
- package/dist/custom-agents.js +16 -18
- package/dist/custom-agents.js.map +1 -0
- package/dist/default-agents.d.ts +1 -0
- package/dist/default-agents.d.ts.map +1 -0
- package/dist/default-agents.js +2 -4
- package/dist/default-agents.js.map +1 -0
- package/dist/enabled-models.d.ts +1 -0
- package/dist/enabled-models.d.ts.map +1 -0
- package/dist/enabled-models.js +12 -16
- package/dist/enabled-models.js.map +1 -0
- package/dist/env.d.ts +1 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +2 -4
- package/dist/env.js.map +1 -0
- package/dist/group-join.d.ts +1 -0
- package/dist/group-join.d.ts.map +1 -0
- package/dist/group-join.js +2 -5
- package/dist/group-join.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +306 -292
- package/dist/index.js.map +1 -0
- package/dist/invocation-config.d.ts +1 -0
- package/dist/invocation-config.d.ts.map +1 -0
- package/dist/invocation-config.js +3 -6
- package/dist/invocation-config.js.map +1 -0
- package/dist/memory.d.ts +1 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +25 -34
- package/dist/memory.js.map +1 -0
- package/dist/model-resolver.d.ts +1 -0
- package/dist/model-resolver.d.ts.map +1 -0
- package/dist/model-resolver.js +2 -4
- package/dist/model-resolver.js.map +1 -0
- package/dist/nico-overrides.d.ts +1 -0
- package/dist/nico-overrides.d.ts.map +1 -0
- package/dist/nico-overrides.js +15 -20
- package/dist/nico-overrides.js.map +1 -0
- package/dist/output-file.d.ts +1 -0
- package/dist/output-file.d.ts.map +1 -0
- package/dist/output-file.js +17 -22
- package/dist/output-file.js.map +1 -0
- package/dist/prompts.d.ts +1 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +2 -4
- package/dist/prompts.js.map +1 -0
- package/dist/schedule-store.d.ts +1 -0
- package/dist/schedule-store.d.ts.map +1 -0
- package/dist/schedule-store.js +17 -21
- package/dist/schedule-store.js.map +1 -0
- package/dist/schedule.d.ts +1 -0
- package/dist/schedule.d.ts.map +1 -0
- package/dist/schedule.js +9 -12
- package/dist/schedule.js.map +1 -0
- package/dist/settings.d.ts +1 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +16 -23
- package/dist/settings.js.map +1 -0
- package/dist/skill-loader.d.ts +1 -0
- package/dist/skill-loader.d.ts.map +1 -0
- package/dist/skill-loader.js +21 -23
- package/dist/skill-loader.js.map +1 -0
- package/dist/status-note.d.ts +1 -0
- package/dist/status-note.d.ts.map +1 -0
- package/dist/status-note.js +2 -4
- package/dist/status-note.js.map +1 -0
- package/dist/types.d.ts +5 -1
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -4
- package/dist/types.js.map +1 -0
- package/dist/ui/agent-widget.d.ts +2 -5
- package/dist/ui/agent-widget.d.ts.map +1 -0
- package/dist/ui/agent-widget.js +29 -51
- package/dist/ui/agent-widget.js.map +1 -0
- package/dist/ui/ccstyle/diff/ansi-utils.d.ts +11 -0
- package/dist/ui/ccstyle/diff/ansi-utils.d.ts.map +1 -0
- package/dist/ui/ccstyle/diff/ansi-utils.js +145 -0
- package/dist/ui/ccstyle/diff/ansi-utils.js.map +1 -0
- package/dist/ui/ccstyle/diff/diff-presentation.d.ts +12 -0
- package/dist/ui/ccstyle/diff/diff-presentation.d.ts.map +1 -0
- package/dist/ui/ccstyle/diff/diff-presentation.js +49 -0
- package/dist/ui/ccstyle/diff/diff-presentation.js.map +1 -0
- package/dist/ui/ccstyle/diff/diff-renderer.d.ts +46 -0
- package/dist/ui/ccstyle/diff/diff-renderer.d.ts.map +1 -0
- package/dist/ui/ccstyle/diff/diff-renderer.js +2044 -0
- package/dist/ui/ccstyle/diff/diff-renderer.js.map +1 -0
- package/dist/ui/ccstyle/diff/line-width-safety.d.ts +12 -0
- package/dist/ui/ccstyle/diff/line-width-safety.d.ts.map +1 -0
- package/dist/ui/ccstyle/diff/line-width-safety.js +59 -0
- package/dist/ui/ccstyle/diff/line-width-safety.js.map +1 -0
- package/dist/ui/ccstyle/diff/render-utils.d.ts +6 -0
- package/dist/ui/ccstyle/diff/render-utils.d.ts.map +1 -0
- package/dist/ui/ccstyle/diff/render-utils.js +25 -0
- package/dist/ui/ccstyle/diff/render-utils.js.map +1 -0
- package/dist/ui/ccstyle/diff/types.d.ts +22 -0
- package/dist/ui/ccstyle/diff/types.d.ts.map +1 -0
- package/dist/ui/ccstyle/diff/types.js +10 -0
- package/dist/ui/ccstyle/diff/types.js.map +1 -0
- package/dist/ui/ccstyle/diff/write-display-utils.d.ts +2 -0
- package/dist/ui/ccstyle/diff/write-display-utils.d.ts.map +1 -0
- package/dist/ui/ccstyle/diff/write-display-utils.js +12 -0
- package/dist/ui/ccstyle/diff/write-display-utils.js.map +1 -0
- package/dist/ui/ccstyle/tool-renderer.d.ts +17 -0
- package/dist/ui/ccstyle/tool-renderer.d.ts.map +1 -0
- package/dist/ui/ccstyle/tool-renderer.js +58 -0
- package/dist/ui/ccstyle/tool-renderer.js.map +1 -0
- package/dist/ui/ccstyle/tool-result.d.ts +24 -0
- package/dist/ui/ccstyle/tool-result.d.ts.map +1 -0
- package/dist/ui/ccstyle/tool-result.js +193 -0
- package/dist/ui/ccstyle/tool-result.js.map +1 -0
- package/dist/ui/conversation-blocks.d.ts +46 -0
- package/dist/ui/conversation-blocks.d.ts.map +1 -0
- package/dist/ui/conversation-blocks.js +306 -0
- package/dist/ui/conversation-blocks.js.map +1 -0
- package/dist/ui/conversation-nvim.d.ts +8 -0
- package/dist/ui/conversation-nvim.d.ts.map +1 -0
- package/dist/ui/conversation-nvim.js +117 -0
- package/dist/ui/conversation-nvim.js.map +1 -0
- package/dist/ui/conversation-role.d.ts +13 -0
- package/dist/ui/conversation-role.d.ts.map +1 -0
- package/dist/ui/conversation-role.js +39 -0
- package/dist/ui/conversation-role.js.map +1 -0
- package/dist/ui/conversation-search.d.ts +39 -0
- package/dist/ui/conversation-search.d.ts.map +1 -0
- package/dist/ui/conversation-search.js +124 -0
- package/dist/ui/conversation-search.js.map +1 -0
- package/dist/ui/conversation-timeline.d.ts +62 -0
- package/dist/ui/conversation-timeline.d.ts.map +1 -0
- package/dist/ui/conversation-timeline.js +263 -0
- package/dist/ui/conversation-timeline.js.map +1 -0
- package/dist/ui/conversation-viewer.d.ts +62 -20
- package/dist/ui/conversation-viewer.d.ts.map +1 -0
- package/dist/ui/conversation-viewer.js +449 -224
- package/dist/ui/conversation-viewer.js.map +1 -0
- package/dist/ui/fleet-list.d.ts +24 -11
- package/dist/ui/fleet-list.d.ts.map +1 -0
- package/dist/ui/fleet-list.js +86 -78
- package/dist/ui/fleet-list.js.map +1 -0
- package/dist/ui/schedule-menu.d.ts +1 -0
- package/dist/ui/schedule-menu.d.ts.map +1 -0
- package/dist/ui/schedule-menu.js +2 -4
- package/dist/ui/schedule-menu.js.map +1 -0
- package/dist/ui/viewer-keys.d.ts +1 -0
- package/dist/ui/viewer-keys.d.ts.map +1 -0
- package/dist/ui/viewer-keys.js +8 -10
- package/dist/ui/viewer-keys.js.map +1 -0
- package/dist/usage.d.ts +1 -0
- package/dist/usage.d.ts.map +1 -0
- package/dist/usage.js +5 -10
- package/dist/usage.js.map +1 -0
- package/dist/worktree.d.ts +1 -0
- package/dist/worktree.d.ts.map +1 -0
- package/dist/worktree.js +27 -31
- package/dist/worktree.js.map +1 -0
- package/dist/write-execution.d.ts +42 -0
- package/dist/write-execution.d.ts.map +1 -0
- package/dist/write-execution.js +138 -0
- package/dist/write-execution.js.map +1 -0
- package/package.json +1 -1
- package/src/agent-history-list.ts +91 -0
- package/src/agent-history.ts +12 -17
- package/src/agent-manager.ts +169 -81
- package/src/agent-runner.ts +12 -13
- package/src/index.ts +117 -98
- package/src/output-file.ts +1 -1
- package/src/types.ts +4 -1
- package/src/ui/agent-widget.ts +3 -9
- package/src/ui/ccstyle/ATTRIBUTION.md +37 -0
- package/src/ui/ccstyle/diff/ansi-utils.ts +168 -0
- package/src/ui/ccstyle/diff/diff-presentation.ts +70 -0
- package/src/ui/ccstyle/diff/diff-renderer.ts +3148 -0
- package/src/ui/ccstyle/diff/line-width-safety.ts +92 -0
- package/src/ui/ccstyle/diff/render-utils.ts +32 -0
- package/src/ui/ccstyle/diff/types.ts +33 -0
- package/src/ui/ccstyle/diff/write-display-utils.ts +12 -0
- package/src/ui/ccstyle/tool-renderer.ts +71 -0
- package/src/ui/ccstyle/tool-result.ts +238 -0
- package/src/ui/conversation-blocks.ts +404 -0
- package/src/ui/conversation-nvim.ts +127 -0
- package/src/ui/conversation-role.ts +45 -0
- package/src/ui/conversation-search.ts +161 -0
- package/src/ui/conversation-timeline.ts +315 -0
- package/src/ui/conversation-viewer.ts +418 -210
- package/src/ui/fleet-list.ts +73 -52
- package/src/write-execution.ts +180 -0
- package/test/agent-history-list.test.ts +121 -0
- package/test/agent-manager-history.test.ts +59 -58
- package/test/agent-menu-history-navigation.test.ts +86 -0
- package/test/output-file-history.test.ts +50 -0
- package/test/ui/conversation-blocks.test.ts +103 -0
- package/test/ui/conversation-diff.test.ts +91 -0
- package/test/ui/conversation-search.test.ts +55 -0
- package/test/ui/conversation-viewer.test.ts +182 -0
- package/test/ui/fleet-list.test.ts +131 -0
- package/test/write-execution.test.ts +83 -0
- package/tsconfig.json +16 -0
- package/vitest.temp.config.mts +6 -0
- package/dist/ui/markdown-result.d.ts +0 -3
- package/dist/ui/markdown-result.js +0 -53
- package/src/ui/markdown-result.ts +0 -56
- package/test/agent-history.test.ts +0 -63
- package/test/ui/markdown-result.test.ts +0 -45
package/CHANGELOG.md
CHANGED
|
@@ -7,30 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
## [0.15.
|
|
11
|
-
|
|
12
|
-
### Fixed
|
|
13
|
-
- **The Running agents menu no longer advertises dead-end metadata.** Its summary count now uses the same live-session or existing-transcript filter as the detail list, so Enter does not open an empty list for stale restored records.
|
|
14
|
-
|
|
15
|
-
## [0.15.4] - 2026-09-11
|
|
16
|
-
|
|
17
|
-
### Fixed
|
|
18
|
-
- **Unavailable history records no longer load the subagent panels.** Reload-restored metadata is shown in AgentWidget, FleetView, and `/agents` only when its project-local transcript still exists; stale records remain available through the normal session result/history data without creating a dead-end Enter target.
|
|
19
|
-
|
|
20
|
-
## [0.15.3] - 2026-09-11
|
|
10
|
+
## [0.15.7] - 2026-09-12
|
|
21
11
|
|
|
22
12
|
### Added
|
|
23
|
-
- **
|
|
13
|
+
- **Conversation history now uses a viewer-local component timeline** with semantic USER/ASSISTANT/tool headers, visible search input, model/thinking metadata, keyboard and normalized mouse tool expansion, and ccstyle-compatible bounded tool/diff cards.
|
|
14
|
+
- **Durable edit/write result metadata is rendered after history reload** without rereading the current file; older Pi hosts use a safe local fallback.
|
|
24
15
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
### Added
|
|
28
|
-
- **Completed subagent records survive session reloads.** On `session_start`, the extension now reconstructs validated terminal records persisted as `subagents:record` entries. Restored records retain their result and status for `get_subagent_result`, but never pretend to have a live child session; running and queued records are ignored, and duplicate IDs use the newest branch entry.
|
|
16
|
+
### Fixed
|
|
17
|
+
- **Terminal agent records retain durable history stubs after TTL cleanup**, while live session handles are released; duplicate history/menu labels now resolve to the exact selected record.
|
|
29
18
|
|
|
30
|
-
## [0.15.
|
|
19
|
+
## [0.15.6] - 2026-09-11
|
|
31
20
|
|
|
32
|
-
###
|
|
33
|
-
- **
|
|
21
|
+
### Fixed
|
|
22
|
+
- **FleetView stays within a six-row budget** while preserving full-roster keyboard navigation, selected-row visibility, overflow indicators, and prompt-area separation.
|
|
23
|
+
- **Agent history and live FleetView are routed separately**, keeping terminal records in the read-only history viewer instead of treating them as active sessions.
|
|
24
|
+
- **Pi 0.85.1 model-runtime type compatibility** is restored without changing the legacy fallback path.
|
|
34
25
|
|
|
35
26
|
## [0.14.3] - 2026-07-23
|
|
36
27
|
|
package/README.md
CHANGED
|
@@ -28,7 +28,7 @@ https://github.com/user-attachments/assets/8685261b-9338-4fea-8dfe-1c590d5df543
|
|
|
28
28
|
- **Git worktree isolation** — run agents in isolated repo copies; changes auto-committed to branches on completion
|
|
29
29
|
- **Skill preloading** — inject named skills into agent system prompts, discovered from `.pi/skills/`, `.agents/skills/`, and global locations (Pi-standard `<name>/SKILL.md` directory layout supported)
|
|
30
30
|
- **Tool denylist** — block specific tools via `disallowed_tools` frontmatter
|
|
31
|
-
- **Styled completion notifications** — background agent results render as themed, compact notification boxes (icon, stats, result preview) instead of raw XML.
|
|
31
|
+
- **Styled completion notifications** — background agent results render as themed, compact notification boxes (icon, stats, result preview) instead of raw XML. Expandable to show full output. Group completions render each agent individually
|
|
32
32
|
- **Event bus** — lifecycle events (`subagents:created`, `started`, `completed`, `failed`, `steered`, `compacted`) emitted via `pi.events`, enabling other extensions to react to sub-agent activity
|
|
33
33
|
- **Cross-extension RPC** — other pi extensions can spawn and stop subagents via the `pi.events` event bus (`subagents:rpc:ping`, `subagents:rpc:spawn`, `subagents:rpc:stop`). Standardized reply envelopes with protocol versioning. Emits `subagents:ready` on session start
|
|
34
34
|
- **Schedule subagents** — pass `schedule` to the `Agent` tool to fire on cron / interval / one-shot. Session-scoped jobs with PID-locked persistence; results land via the same `subagent-notification` followUp path as manual background completions; manage via `/agents → Scheduled jobs`
|
|
@@ -138,9 +138,9 @@ Individual agent results render Claude Code-style in the conversation:
|
|
|
138
138
|
| **Error** | `✗ ↻3 · 3 tool uses · 12.4k token (8%)` / `⎿ Error: timeout` |
|
|
139
139
|
| **Aborted** | `✗ ↻55≤50 · 55 tool uses · 102.3k token (95% · ⇊3)` / `⎿ Aborted (max turns exceeded)` |
|
|
140
140
|
|
|
141
|
-
Completed results can be expanded (ctrl+o in pi) to show the agent output inline
|
|
141
|
+
Completed results can be expanded (ctrl+o in pi) to show the full agent output inline.
|
|
142
142
|
|
|
143
|
-
By default, foreground and background agents stream their full conversation to
|
|
143
|
+
By default, foreground and background agents each stream their full conversation to a per-subagent transcript — a JSON-lines file at `<os-tmpdir>/pi-subagents-<uid>/<cwd>/<session>/tasks/<agent-id>.output` (owner-only `0700`, cleared on reboot). Set `output_transcript: false` on a custom agent to write no transcript path or file for it, or set `outputTranscript: false` in `subagents.json` to make transcripts opt-in for the whole project (frontmatter overrides the project default). This governs **only** the transcript: it is independent of `persist_session` (the pi session on disk), and it does not affect `isolation: worktree` (which commits the agent's work to a git branch) or `memory:` (durable files) — set those accordingly if the goal is to keep a run off disk entirely. Background agent completion notifications render as styled boxes:
|
|
144
144
|
|
|
145
145
|
```
|
|
146
146
|
✓ Find auth files completed
|
|
@@ -222,7 +222,7 @@ All fields are optional — sensible defaults for everything.
|
|
|
222
222
|
| `thinking` | inherit | off, minimal, low, medium, high, xhigh, max — actual availability depends on your pi version and model; pi clamps unsupported levels down |
|
|
223
223
|
| `max_turns` | unlimited | Max agentic turns before graceful shutdown. `0` or omit for unlimited |
|
|
224
224
|
| `persist_session` | `false` | Persist this subagent as a normal pi session instead of keeping the session in memory only. The subagent's `.output` transcript is still written either way unless `output_transcript: false` |
|
|
225
|
-
| `output_transcript` | `true` (or `subagents.json` `outputTranscript`) | Write
|
|
225
|
+
| `output_transcript` | `true` (or `subagents.json` `outputTranscript`) | Write this subagent's `.output` transcript; when set, overrides the `subagents.json` `outputTranscript` default. Set `false` to write no transcript file or path. Governs only the transcript — independent of `persist_session`, `isolation: worktree`, and `memory:` |
|
|
226
226
|
| `session_dir` | pi default | Optional session directory when `persist_session: true`; omitted uses pi's normal session location, and relative paths resolve from the agent cwd |
|
|
227
227
|
| `prompt_mode` | `replace` | `replace`: body is the full system prompt (no AGENTS.md / CLAUDE.md inheritance). `append`: body appended to parent's prompt (agent acts as a "parent twin" — inherits parent's AGENTS.md / CLAUDE.md) |
|
|
228
228
|
| `inherit_context` | `false` | Fork parent conversation into agent |
|
|
@@ -508,7 +508,7 @@ Runtime tuning values set via `/agents` → Settings (max concurrency, default m
|
|
|
508
508
|
|
|
509
509
|
**Disable defaults** (`disableDefaultAgents`, default `false`): when on, the three built-in agents (general-purpose, Explore, Plan) are not registered — only your project/global custom agents are advertised and spawnable. User-defined agents are unaffected, including ones that override a default by name. The Agent tool's type list updates on the next pi session (the tool schema is registered at startup).
|
|
510
510
|
|
|
511
|
-
**Output transcript** (`outputTranscript`, default `true`): the project/global default for writing each subagent's
|
|
511
|
+
**Output transcript** (`outputTranscript`, default `true`): the project/global default for writing each subagent's `.output` transcript. Toggle via `/agents → Settings → Output transcript`, or set `false` in `subagents.json` to make transcripts opt-in project-wide — useful when run transcripts shouldn't sit on disk for backup or DLP tooling to pick up. A custom agent's `output_transcript` frontmatter overrides this per agent. Applied live at spawn time. Governs only the transcript, not `persist_session`, worktree commits, or memory files.
|
|
512
512
|
|
|
513
513
|
**Tool description** (`toolDescriptionMode`, default `"full"`): which Agent tool description the LLM sees. `"full"` is the rich Claude Code-style prompt (~1,400 tokens with the default agents); `"compact"` is ~75% smaller — one-line agent type list, terse usage notes — for small/local models where tool-spec tokens are expensive. Per-option details stay in the parameter descriptions in every mode (the parameter schema is never customizable). Applies on the next pi session.
|
|
514
514
|
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Helpers for separating openable active agents from terminal history. */
|
|
2
|
+
import type { AgentRecord } from "./types.js";
|
|
3
|
+
export type AgentHistoryStatus = "completed" | "steered" | "stopped" | "aborted" | "error";
|
|
4
|
+
/** Return whether a record status represents a terminal agent run. */
|
|
5
|
+
export declare function isTerminalAgentStatus(status: string): status is AgentHistoryStatus;
|
|
6
|
+
/** Return whether an active record has a live session that can be opened. */
|
|
7
|
+
export declare function canOpenActiveAgent(record: AgentRecord): boolean;
|
|
8
|
+
/** Return whether a terminal record has an in-memory or durable conversation. */
|
|
9
|
+
export declare function canOpenAgentHistory(record: AgentRecord, cwd: string | undefined): boolean;
|
|
10
|
+
/** Split records into openable active and terminal-history buckets. */
|
|
11
|
+
export declare function splitAgentRecords(records: readonly AgentRecord[], cwd: string | undefined): {
|
|
12
|
+
active: AgentRecord[];
|
|
13
|
+
history: AgentRecord[];
|
|
14
|
+
};
|
|
15
|
+
/** Format a bounded, single-line history menu option. */
|
|
16
|
+
export declare function formatAgentHistoryOption(record: AgentRecord, now: number): string;
|
|
17
|
+
/** Build the visible status-section labels for the agents menu. */
|
|
18
|
+
export declare function buildAgentStatusMenuEntries(records: readonly AgentRecord[], cwd: string | undefined): string[];
|
|
19
|
+
//# sourceMappingURL=agent-history-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-history-list.d.ts","sourceRoot":"","sources":["../src/agent-history-list.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAG3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C,MAAM,MAAM,kBAAkB,GAC1B,WAAW,GACX,SAAS,GACT,SAAS,GACT,SAAS,GACT,OAAO,CAAC;AAUZ,sEAAsE;AACtE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,kBAAkB,CAElF;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAG/D;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAIzF;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB;IAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,CAanD;AAWD,yDAAyD;AACzD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CASjF;AAED,mEAAmE;AACnE,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,GAAG,EAAE,MAAM,GAAG,SAAS,GACtB,MAAM,EAAE,CAMV"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/** Helpers for separating openable active agents from terminal history. */
|
|
2
|
+
import { hasAgentHistory } from "./agent-history.js";
|
|
3
|
+
import { getAgentConfig } from "./agent-types.js";
|
|
4
|
+
import { formatDuration, getDisplayName } from "./ui/agent-widget.js";
|
|
5
|
+
const TERMINAL_STATUSES = new Set([
|
|
6
|
+
"completed",
|
|
7
|
+
"steered",
|
|
8
|
+
"stopped",
|
|
9
|
+
"aborted",
|
|
10
|
+
"error",
|
|
11
|
+
]);
|
|
12
|
+
/** Return whether a record status represents a terminal agent run. */
|
|
13
|
+
export function isTerminalAgentStatus(status) {
|
|
14
|
+
return TERMINAL_STATUSES.has(status);
|
|
15
|
+
}
|
|
16
|
+
/** Return whether an active record has a live session that can be opened. */
|
|
17
|
+
export function canOpenActiveAgent(record) {
|
|
18
|
+
return (record.status === "running" || record.status === "queued")
|
|
19
|
+
&& record.session !== undefined;
|
|
20
|
+
}
|
|
21
|
+
/** Return whether a terminal record has an in-memory or durable conversation. */
|
|
22
|
+
export function canOpenAgentHistory(record, cwd) {
|
|
23
|
+
if (!isTerminalAgentStatus(record.status))
|
|
24
|
+
return false;
|
|
25
|
+
return record.session !== undefined
|
|
26
|
+
|| (cwd !== undefined && hasAgentHistory(cwd, record.transcriptPath));
|
|
27
|
+
}
|
|
28
|
+
/** Split records into openable active and terminal-history buckets. */
|
|
29
|
+
export function splitAgentRecords(records, cwd) {
|
|
30
|
+
const active = [];
|
|
31
|
+
const history = [];
|
|
32
|
+
for (const record of records) {
|
|
33
|
+
if (canOpenActiveAgent(record)) {
|
|
34
|
+
active.push(record);
|
|
35
|
+
}
|
|
36
|
+
else if (canOpenAgentHistory(record, cwd)) {
|
|
37
|
+
history.push(record);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return { active, history };
|
|
41
|
+
}
|
|
42
|
+
const DESCRIPTION_LIMIT = 72;
|
|
43
|
+
const LABEL_LIMIT = 140;
|
|
44
|
+
function boundedDescription(description) {
|
|
45
|
+
const line = description.split("\n").find((part) => part.trim())?.trim() ?? "";
|
|
46
|
+
if (line.length <= DESCRIPTION_LIMIT)
|
|
47
|
+
return line;
|
|
48
|
+
return `${line.slice(0, DESCRIPTION_LIMIT - 1)}…`;
|
|
49
|
+
}
|
|
50
|
+
/** Format a bounded, single-line history menu option. */
|
|
51
|
+
export function formatAgentHistoryOption(record, now) {
|
|
52
|
+
const duration = formatDuration(record.startedAt, record.completedAt ?? now);
|
|
53
|
+
// Unit consumers may format persisted records before the registry has been
|
|
54
|
+
// initialized; preserve the persisted type instead of falling back to
|
|
55
|
+
// general-purpose's generic display name in that case.
|
|
56
|
+
const displayName = getAgentConfig(record.type)?.displayName
|
|
57
|
+
?? (record.type === "general-purpose" ? getDisplayName(record.type) : record.type);
|
|
58
|
+
const option = `[${record.status}] ${displayName} · ${boundedDescription(record.description)} · ${duration}`;
|
|
59
|
+
return option.length <= LABEL_LIMIT ? option : `${option.slice(0, LABEL_LIMIT - 1)}…`;
|
|
60
|
+
}
|
|
61
|
+
/** Build the visible status-section labels for the agents menu. */
|
|
62
|
+
export function buildAgentStatusMenuEntries(records, cwd) {
|
|
63
|
+
const { active, history } = splitAgentRecords(records, cwd);
|
|
64
|
+
return [
|
|
65
|
+
...(active.length > 0 ? [`Running agents (${active.length})`] : []),
|
|
66
|
+
...(history.length > 0 ? [`Agent history (${history.length})`] : []),
|
|
67
|
+
];
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=agent-history-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-history-list.js","sourceRoot":"","sources":["../src/agent-history-list.ts"],"names":[],"mappings":"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"}
|
package/dist/agent-history.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ import type { AgentSession } from "@earendil-works/pi-coding-agent";
|
|
|
9
9
|
*/
|
|
10
10
|
export declare function ensureSubagentsGitignore(cwd: string): string;
|
|
11
11
|
/** Return the durable transcript path for an agent. */
|
|
12
|
-
export declare function createAgentHistoryPath(cwd: string, agentId: string
|
|
12
|
+
export declare function createAgentHistoryPath(cwd: string, agentId: string): string;
|
|
13
13
|
/** Return the project-relative path stored in the parent session record. */
|
|
14
14
|
export declare function agentHistoryLocator(cwd: string, historyPath: string): string;
|
|
15
15
|
/** Resolve only paths in this package's project-local transcript namespace. */
|
|
@@ -22,3 +22,4 @@ export declare function hasAgentHistory(cwd: string, locator: string | undefined
|
|
|
22
22
|
* damaged entry cannot hide the rest of a history.
|
|
23
23
|
*/
|
|
24
24
|
export declare function readAgentHistory(cwd: string, locator: string): AgentSession["messages"] | undefined;
|
|
25
|
+
//# sourceMappingURL=agent-history.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-history.d.ts","sourceRoot":"","sources":["../src/agent-history.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAI/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAMpE;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAe5D;AAED,uDAAuD;AACvD,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAM3E;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAE5E;AAED,+EAA+E;AAC/E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAWxF;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAIjF;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,SAAS,CA2BnG"}
|
package/dist/agent-history.js
CHANGED
|
@@ -1,14 +1,6 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/** Durable, project-local transcript storage for subagents. */
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
exports.createAgentHistoryPath = createAgentHistoryPath;
|
|
6
|
-
exports.agentHistoryLocator = agentHistoryLocator;
|
|
7
|
-
exports.resolveAgentHistoryPath = resolveAgentHistoryPath;
|
|
8
|
-
exports.hasAgentHistory = hasAgentHistory;
|
|
9
|
-
exports.readAgentHistory = readAgentHistory;
|
|
10
|
-
const node_fs_1 = require("node:fs");
|
|
11
|
-
const node_path_1 = require("node:path");
|
|
2
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync } from "node:fs";
|
|
3
|
+
import { isAbsolute, join, relative, resolve, sep } from "node:path";
|
|
12
4
|
const SUBAGENTS_DIR = ".pi-subagents";
|
|
13
5
|
const TRANSCRIPTS_DIR = "agent-transcripts";
|
|
14
6
|
const MAX_HISTORY_BYTES = 20 * 1024 * 1024;
|
|
@@ -19,65 +11,70 @@ const MAX_HISTORY_BYTES = 20 * 1024 * 1024;
|
|
|
19
11
|
* existing user-owned rules and makes concurrent callers harmless (duplicate
|
|
20
12
|
* `*` rules are semantically equivalent).
|
|
21
13
|
*/
|
|
22
|
-
function ensureSubagentsGitignore(cwd) {
|
|
23
|
-
const directory =
|
|
24
|
-
|
|
25
|
-
const path =
|
|
14
|
+
export function ensureSubagentsGitignore(cwd) {
|
|
15
|
+
const directory = join(cwd, SUBAGENTS_DIR);
|
|
16
|
+
mkdirSync(directory, { recursive: true });
|
|
17
|
+
const path = join(directory, ".gitignore");
|
|
26
18
|
let content = "";
|
|
27
19
|
try {
|
|
28
|
-
content =
|
|
20
|
+
content = readFileSync(path, "utf8");
|
|
29
21
|
}
|
|
30
22
|
catch {
|
|
31
23
|
// The append below also creates a missing file.
|
|
32
24
|
}
|
|
33
25
|
if (!content.split(/\r?\n/).some((line) => line.trim() === "*")) {
|
|
34
26
|
const separator = content.length > 0 && !/[\r\n]$/.test(content) ? "\n" : "";
|
|
35
|
-
|
|
27
|
+
appendFileSync(path, `${separator}*\n`, "utf8");
|
|
36
28
|
}
|
|
37
29
|
return path;
|
|
38
30
|
}
|
|
39
31
|
/** Return the durable transcript path for an agent. */
|
|
40
|
-
function createAgentHistoryPath(cwd, agentId
|
|
32
|
+
export function createAgentHistoryPath(cwd, agentId) {
|
|
41
33
|
ensureSubagentsGitignore(cwd);
|
|
42
|
-
const directory =
|
|
43
|
-
|
|
34
|
+
const directory = join(cwd, SUBAGENTS_DIR, TRANSCRIPTS_DIR);
|
|
35
|
+
mkdirSync(directory, { recursive: true });
|
|
44
36
|
const safeId = agentId.replace(/[^A-Za-z0-9._-]+/g, "-") || "agent";
|
|
45
|
-
|
|
46
|
-
return (0, node_path_1.join)(directory, `${safeId}_${safeType}_transcript.jsonl`);
|
|
37
|
+
return join(directory, `${safeId}.jsonl`);
|
|
47
38
|
}
|
|
48
39
|
/** Return the project-relative path stored in the parent session record. */
|
|
49
|
-
function agentHistoryLocator(cwd, historyPath) {
|
|
50
|
-
return
|
|
40
|
+
export function agentHistoryLocator(cwd, historyPath) {
|
|
41
|
+
return relative(cwd, historyPath).split(sep).join("/");
|
|
51
42
|
}
|
|
52
43
|
/** Resolve only paths in this package's project-local transcript namespace. */
|
|
53
|
-
function resolveAgentHistoryPath(cwd, locator) {
|
|
54
|
-
|
|
44
|
+
export function resolveAgentHistoryPath(cwd, locator) {
|
|
45
|
+
// Locators are persisted data, not arbitrary paths. Reject traversal syntax
|
|
46
|
+
// before resolving so a path which normalizes back inside the namespace is
|
|
47
|
+
// still not accepted as an unsafe locator.
|
|
48
|
+
if (!locator || isAbsolute(locator) || locator.includes("\0") || locator.includes("\\"))
|
|
55
49
|
return undefined;
|
|
56
|
-
const
|
|
57
|
-
|
|
58
|
-
|
|
50
|
+
const segments = locator.split("/");
|
|
51
|
+
if (segments.some((segment) => segment === ".." || segment === ""))
|
|
52
|
+
return undefined;
|
|
53
|
+
const root = resolve(cwd, SUBAGENTS_DIR, TRANSCRIPTS_DIR);
|
|
54
|
+
const candidate = resolve(cwd, locator);
|
|
55
|
+
if (candidate !== root && !candidate.startsWith(`${root}${sep}`))
|
|
59
56
|
return undefined;
|
|
60
57
|
return candidate;
|
|
61
58
|
}
|
|
62
59
|
/** Return true only when a valid project-local transcript file exists. */
|
|
63
|
-
function hasAgentHistory(cwd, locator) {
|
|
60
|
+
export function hasAgentHistory(cwd, locator) {
|
|
64
61
|
if (!locator)
|
|
65
62
|
return false;
|
|
66
63
|
const path = resolveAgentHistoryPath(cwd, locator);
|
|
67
|
-
return path !== undefined &&
|
|
64
|
+
return path !== undefined && existsSync(path);
|
|
68
65
|
}
|
|
69
66
|
/**
|
|
70
67
|
* Read persisted transcript entries into the message shape used by the live
|
|
71
68
|
* conversation viewer. Malformed lines and unknown records are skipped so one
|
|
72
69
|
* damaged entry cannot hide the rest of a history.
|
|
73
70
|
*/
|
|
74
|
-
function readAgentHistory(cwd, locator) {
|
|
71
|
+
export function readAgentHistory(cwd, locator) {
|
|
75
72
|
const path = resolveAgentHistoryPath(cwd, locator);
|
|
76
|
-
if (!path)
|
|
73
|
+
if (!path || !existsSync(path))
|
|
77
74
|
return undefined;
|
|
78
75
|
let raw;
|
|
79
76
|
try {
|
|
80
|
-
raw =
|
|
77
|
+
raw = readFileSync(path, "utf8");
|
|
81
78
|
}
|
|
82
79
|
catch {
|
|
83
80
|
return undefined;
|
|
@@ -90,7 +87,7 @@ function readAgentHistory(cwd, locator) {
|
|
|
90
87
|
continue;
|
|
91
88
|
try {
|
|
92
89
|
const entry = JSON.parse(line);
|
|
93
|
-
const message = entry
|
|
90
|
+
const message = entry?.message;
|
|
94
91
|
if (!message || typeof message !== "object")
|
|
95
92
|
continue;
|
|
96
93
|
const role = message.role;
|
|
@@ -104,3 +101,4 @@ function readAgentHistory(cwd, locator) {
|
|
|
104
101
|
}
|
|
105
102
|
return messages.length > 0 ? messages : undefined;
|
|
106
103
|
}
|
|
104
|
+
//# sourceMappingURL=agent-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-history.js","sourceRoot":"","sources":["../src/agent-history.ts"],"names":[],"mappings":"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"}
|
package/dist/agent-manager.d.ts
CHANGED
|
@@ -16,6 +16,26 @@ export type CompactionInfo = {
|
|
|
16
16
|
reason: "manual" | "threshold" | "overflow";
|
|
17
17
|
tokensBefore: number;
|
|
18
18
|
};
|
|
19
|
+
type RestorableAgentStatus = "completed" | "steered" | "stopped" | "aborted" | "error";
|
|
20
|
+
/** Validate one persisted terminal record without constructing runtime handles. */
|
|
21
|
+
export declare function isRestorableAgentRecord(value: unknown): value is {
|
|
22
|
+
id: string;
|
|
23
|
+
type: string;
|
|
24
|
+
description: string;
|
|
25
|
+
status: RestorableAgentStatus;
|
|
26
|
+
startedAt: number;
|
|
27
|
+
completedAt: number;
|
|
28
|
+
result?: string;
|
|
29
|
+
error?: string;
|
|
30
|
+
toolUses?: number;
|
|
31
|
+
lifetimeUsage?: {
|
|
32
|
+
input: number;
|
|
33
|
+
output: number;
|
|
34
|
+
cacheWrite: number;
|
|
35
|
+
};
|
|
36
|
+
transcriptPath?: string;
|
|
37
|
+
invocation?: AgentInvocation;
|
|
38
|
+
};
|
|
19
39
|
interface SpawnOptions {
|
|
20
40
|
description: string;
|
|
21
41
|
model?: Model<any>;
|
|
@@ -121,15 +141,10 @@ export declare class AgentManager {
|
|
|
121
141
|
*/
|
|
122
142
|
steer(id: string, message: string): boolean;
|
|
123
143
|
getRecord(id: string): AgentRecord | undefined;
|
|
124
|
-
/**
|
|
125
|
-
* Restore terminal records persisted in a parent session.
|
|
126
|
-
*
|
|
127
|
-
* Restored records deliberately have no live session, promise, or abort
|
|
128
|
-
* controller. Invalid data is ignored because session entries are persisted
|
|
129
|
-
* extension data and may have been written by an older version.
|
|
130
|
-
*/
|
|
131
|
-
restoreCompleted(records: readonly unknown[]): void;
|
|
132
144
|
listAgents(): AgentRecord[];
|
|
145
|
+
/** Restore terminal records persisted by a parent branch without runtime handles. */
|
|
146
|
+
restoreCompleted(records: readonly unknown[]): void;
|
|
147
|
+
private createRestoredRecord;
|
|
133
148
|
abort(id: string): boolean;
|
|
134
149
|
/** Dispose a record's session and remove it from the map. */
|
|
135
150
|
private removeRecord;
|
|
@@ -150,3 +165,4 @@ export declare class AgentManager {
|
|
|
150
165
|
dispose(): void;
|
|
151
166
|
}
|
|
152
167
|
export {};
|
|
168
|
+
//# sourceMappingURL=agent-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-manager.d.ts","sourceRoot":"","sources":["../src/agent-manager.ts"],"names":[],"mappings":"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"}
|