pi-crew 0.1.51 → 0.2.1

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 (240) hide show
  1. package/CHANGELOG.md +56 -1
  2. package/README.md +176 -781
  3. package/agents/analyst.md +11 -11
  4. package/agents/critic.md +11 -11
  5. package/agents/executor.md +11 -11
  6. package/agents/explorer.md +11 -11
  7. package/agents/planner.md +11 -11
  8. package/agents/reviewer.md +11 -11
  9. package/agents/security-reviewer.md +11 -11
  10. package/agents/test-engineer.md +11 -11
  11. package/agents/verifier.md +70 -11
  12. package/agents/writer.md +11 -11
  13. package/docs/actions-reference.md +595 -0
  14. package/docs/commands-reference.md +347 -0
  15. package/docs/runtime-flow.md +148 -148
  16. package/index.ts +6 -6
  17. package/package.json +99 -99
  18. package/skills/async-worker-recovery/SKILL.md +42 -42
  19. package/skills/context-artifact-hygiene/SKILL.md +52 -52
  20. package/skills/delegation-patterns/SKILL.md +54 -54
  21. package/skills/mailbox-interactive/SKILL.md +40 -40
  22. package/skills/model-routing-context/SKILL.md +39 -39
  23. package/skills/multi-perspective-review/SKILL.md +58 -58
  24. package/skills/observability-reliability/SKILL.md +41 -41
  25. package/skills/orchestration/SKILL.md +157 -157
  26. package/skills/ownership-session-security/SKILL.md +41 -41
  27. package/skills/pi-extension-lifecycle/SKILL.md +39 -39
  28. package/skills/requirements-to-task-packet/SKILL.md +63 -63
  29. package/skills/resource-discovery-config/SKILL.md +41 -41
  30. package/skills/runtime-state-reader/SKILL.md +44 -44
  31. package/skills/secure-agent-orchestration-review/SKILL.md +45 -45
  32. package/skills/state-mutation-locking/SKILL.md +42 -42
  33. package/skills/systematic-debugging/SKILL.md +67 -67
  34. package/skills/ui-render-performance/SKILL.md +39 -39
  35. package/skills/verification-before-done/SKILL.md +57 -57
  36. package/skills/worktree-isolation/SKILL.md +39 -39
  37. package/src/adapters/claude-adapter.ts +25 -0
  38. package/src/adapters/codex-adapter.ts +21 -0
  39. package/src/adapters/cursor-adapter.ts +17 -0
  40. package/src/adapters/export-util.ts +137 -0
  41. package/src/adapters/index.ts +15 -0
  42. package/src/adapters/registry.ts +18 -0
  43. package/src/adapters/types.ts +23 -0
  44. package/src/agents/agent-config.ts +2 -0
  45. package/src/agents/agent-search.ts +98 -98
  46. package/src/agents/discover-agents.ts +2 -1
  47. package/src/config/config.ts +13 -1
  48. package/src/config/drift-detector.ts +211 -0
  49. package/src/config/markers.ts +327 -0
  50. package/src/config/resilient-parser.ts +108 -0
  51. package/src/config/suggestions.ts +74 -0
  52. package/src/extension/cross-extension-rpc.ts +103 -94
  53. package/src/extension/project-init.ts +21 -1
  54. package/src/extension/register.ts +45 -14
  55. package/src/extension/registration/commands.ts +77 -8
  56. package/src/extension/registration/subagent-tools.ts +10 -1
  57. package/src/extension/registration/team-tool.ts +10 -1
  58. package/src/extension/registration/viewers.ts +48 -34
  59. package/src/extension/run-bundle-schema.ts +89 -89
  60. package/src/extension/run-import.ts +25 -1
  61. package/src/extension/run-index.ts +5 -1
  62. package/src/extension/run-maintenance.ts +142 -68
  63. package/src/extension/team-manager-command.ts +10 -1
  64. package/src/extension/team-tool/api.ts +441 -441
  65. package/src/extension/team-tool/doctor.ts +28 -3
  66. package/src/extension/team-tool/handle-settings.ts +195 -188
  67. package/src/extension/team-tool/inspect.ts +41 -41
  68. package/src/extension/team-tool/intent-policy.ts +42 -42
  69. package/src/extension/team-tool/lifecycle-actions.ts +27 -8
  70. package/src/extension/team-tool/plan.ts +19 -19
  71. package/src/extension/team-tool/run.ts +12 -1
  72. package/src/extension/team-tool.ts +332 -322
  73. package/src/i18n.ts +184 -184
  74. package/src/observability/exporters/otlp-exporter.ts +92 -77
  75. package/src/prompt/prompt-runtime.ts +72 -72
  76. package/src/runtime/agent-memory.ts +72 -72
  77. package/src/runtime/agent-observability.ts +114 -114
  78. package/src/runtime/async-marker.ts +26 -26
  79. package/src/runtime/attention-events.ts +28 -28
  80. package/src/runtime/auto-resume.ts +100 -0
  81. package/src/runtime/background-runner.ts +11 -1
  82. package/src/runtime/cancellation-token.ts +89 -89
  83. package/src/runtime/cancellation.ts +61 -61
  84. package/src/runtime/capability-inventory.ts +116 -116
  85. package/src/runtime/child-pi.ts +7 -2
  86. package/src/runtime/compaction-summary.ts +271 -0
  87. package/src/runtime/completion-guard.ts +190 -190
  88. package/src/runtime/crash-recovery.ts +33 -1
  89. package/src/runtime/delta-conflict.ts +360 -0
  90. package/src/runtime/direct-run.ts +35 -35
  91. package/src/runtime/foreground-control.ts +82 -82
  92. package/src/runtime/green-contract.ts +46 -46
  93. package/src/runtime/group-join.ts +106 -106
  94. package/src/runtime/heartbeat-gradient.ts +28 -28
  95. package/src/runtime/heartbeat-watcher.ts +124 -124
  96. package/src/runtime/iteration-hooks.ts +264 -0
  97. package/src/runtime/live-agent-control.ts +88 -88
  98. package/src/runtime/live-control-realtime.ts +36 -36
  99. package/src/runtime/live-extension-bridge.ts +150 -150
  100. package/src/runtime/live-irc.ts +92 -92
  101. package/src/runtime/live-session-health.ts +100 -100
  102. package/src/runtime/loop-gates.ts +129 -0
  103. package/src/runtime/metric-parser.ts +40 -0
  104. package/src/runtime/notebook-helpers.ts +90 -90
  105. package/src/runtime/orphan-sentinel.ts +7 -7
  106. package/src/runtime/parallel-research.ts +44 -44
  107. package/src/runtime/phase-progress.ts +217 -0
  108. package/src/runtime/pi-args.ts +38 -11
  109. package/src/runtime/pi-json-output.ts +111 -111
  110. package/src/runtime/pi-spawn.ts +57 -7
  111. package/src/runtime/policy-engine.ts +79 -79
  112. package/src/runtime/post-checks.ts +122 -0
  113. package/src/runtime/progress-event-coalescer.ts +43 -43
  114. package/src/runtime/prose-compressor.ts +164 -164
  115. package/src/runtime/recovery-recipes.ts +74 -74
  116. package/src/runtime/result-extractor.ts +121 -121
  117. package/src/runtime/role-permission.ts +39 -39
  118. package/src/runtime/sensitive-paths.ts +2 -2
  119. package/src/runtime/session-resources.ts +25 -25
  120. package/src/runtime/session-snapshot.ts +59 -59
  121. package/src/runtime/session-usage.ts +79 -79
  122. package/src/runtime/sidechain-output.ts +29 -29
  123. package/src/runtime/stream-preview.ts +177 -177
  124. package/src/runtime/supervisor-contact.ts +59 -59
  125. package/src/runtime/task-display.ts +38 -38
  126. package/src/runtime/task-graph.ts +207 -0
  127. package/src/runtime/task-quality.ts +207 -0
  128. package/src/runtime/task-runner/capabilities.ts +78 -78
  129. package/src/runtime/task-runner/live-executor.ts +7 -1
  130. package/src/runtime/task-runner/progress.ts +119 -119
  131. package/src/runtime/task-runner/prompt-pipeline.ts +64 -64
  132. package/src/runtime/task-runner/result-utils.ts +14 -14
  133. package/src/runtime/task-runner/run-projection.ts +103 -103
  134. package/src/runtime/task-runner/state-helpers.ts +22 -22
  135. package/src/runtime/team-runner.ts +117 -7
  136. package/src/runtime/worker-heartbeat.ts +21 -21
  137. package/src/runtime/worker-startup.ts +57 -57
  138. package/src/runtime/workflow-state.ts +187 -0
  139. package/src/runtime/workspace-tree.ts +298 -298
  140. package/src/schema/config-schema.ts +11 -0
  141. package/src/schema/validation-types.ts +148 -0
  142. package/src/skills/skill-templates.ts +374 -0
  143. package/src/state/active-run-registry.ts +35 -11
  144. package/src/state/atomic-write.ts +33 -26
  145. package/src/state/contracts.ts +1 -0
  146. package/src/state/event-reconstructor.ts +217 -0
  147. package/src/state/locks.ts +2 -13
  148. package/src/state/mailbox.ts +4 -3
  149. package/src/state/state-store.ts +16 -6
  150. package/src/state/task-claims.ts +44 -44
  151. package/src/state/types.ts +9 -0
  152. package/src/state/usage.ts +29 -29
  153. package/src/subagents/async-entry.ts +1 -1
  154. package/src/subagents/index.ts +3 -3
  155. package/src/subagents/live/control.ts +1 -1
  156. package/src/subagents/live/manager.ts +1 -1
  157. package/src/subagents/live/realtime.ts +1 -1
  158. package/src/subagents/live/session-runtime.ts +1 -1
  159. package/src/subagents/manager.ts +1 -1
  160. package/src/subagents/spawn.ts +1 -1
  161. package/src/teams/team-serializer.ts +38 -38
  162. package/src/types/diff.d.ts +18 -18
  163. package/src/ui/crew-footer.ts +101 -101
  164. package/src/ui/crew-select-list.ts +111 -111
  165. package/src/ui/crew-widget.ts +5 -2
  166. package/src/ui/dashboard-panes/cancellation-pane.ts +42 -42
  167. package/src/ui/dashboard-panes/capability-pane.ts +59 -59
  168. package/src/ui/dashboard-panes/mailbox-pane.ts +35 -35
  169. package/src/ui/dashboard-panes/metrics-pane.ts +34 -34
  170. package/src/ui/dashboard-panes/progress-pane.ts +11 -0
  171. package/src/ui/dynamic-border.ts +25 -25
  172. package/src/ui/layout-primitives.ts +106 -106
  173. package/src/ui/loaders.ts +158 -158
  174. package/src/ui/render-coalescer.ts +51 -51
  175. package/src/ui/render-diff.ts +119 -119
  176. package/src/ui/render-scheduler.ts +143 -143
  177. package/src/ui/run-action-dispatcher.ts +10 -1
  178. package/src/ui/spinner.ts +17 -17
  179. package/src/ui/status-colors.ts +58 -58
  180. package/src/ui/syntax-highlight.ts +116 -116
  181. package/src/ui/transcript-entries.ts +258 -258
  182. package/src/utils/completion-dedupe.ts +63 -63
  183. package/src/utils/frontmatter.ts +68 -68
  184. package/src/utils/git.ts +262 -262
  185. package/src/utils/ids.ts +17 -17
  186. package/src/utils/incremental-reader.ts +104 -104
  187. package/src/utils/names.ts +27 -27
  188. package/src/utils/redaction.ts +44 -44
  189. package/src/utils/safe-paths.ts +47 -47
  190. package/src/utils/scan-cache.ts +136 -136
  191. package/src/utils/sleep.ts +40 -26
  192. package/src/utils/task-name-generator.ts +337 -337
  193. package/src/workflows/validate-workflow.ts +40 -40
  194. package/src/worktree/branch-freshness.ts +45 -45
  195. package/teams/default.team.md +12 -12
  196. package/teams/fast-fix.team.md +11 -11
  197. package/teams/implementation.team.md +18 -18
  198. package/teams/parallel-research.team.md +14 -14
  199. package/teams/research.team.md +11 -11
  200. package/teams/review.team.md +12 -12
  201. package/workflows/default.workflow.md +30 -29
  202. package/workflows/fast-fix.workflow.md +23 -22
  203. package/workflows/implementation.workflow.md +43 -43
  204. package/workflows/parallel-research.workflow.md +46 -46
  205. package/workflows/research.workflow.md +22 -22
  206. package/workflows/review.workflow.md +30 -30
  207. package/docs/refactor-tasks-phase3.md +0 -394
  208. package/docs/refactor-tasks-phase4.md +0 -564
  209. package/docs/refactor-tasks-phase5.md +0 -402
  210. package/docs/refactor-tasks-phase6.md +0 -662
  211. package/docs/refactor-tasks.md +0 -1484
  212. package/docs/research/AGENT-EXECUTION-ARCHITECTURE.md +0 -261
  213. package/docs/research/AGENT-LIFECYCLE-COMPARISON.md +0 -111
  214. package/docs/research/AUDIT_OH_MY_PI.md +0 -261
  215. package/docs/research/AUDIT_PI_CREW.md +0 -457
  216. package/docs/research/CAVEMAN-DEEP-RESEARCH.md +0 -281
  217. package/docs/research/COMPARISON_OH_MY_PI_VS_PI_CREW.md +0 -264
  218. package/docs/research/DEEP-RESEARCH-PI-POWERBAR.md +0 -343
  219. package/docs/research/DEEP_RESEARCH_SUBAGENT_ARCHITECTURE.md +0 -480
  220. package/docs/research/GAP_CLOSURE_IMPLEMENTATION_PLAN.md +0 -354
  221. package/docs/research/IMPLEMENTATION_PLAN.md +0 -385
  222. package/docs/research/LIVE-SESSION-PRODUCTION-READY-PLAN.md +0 -502
  223. package/docs/research/OH-MY-PI-DEEP-RESEARCH-v14.7.6.md +0 -266
  224. package/docs/research/REMAINING-GAPS-PLAN.md +0 -363
  225. package/docs/research/SESSION-SUMMARY-2026-05-08.md +0 -146
  226. package/docs/research/UI-RESPONSIVENESS-AUDIT.md +0 -173
  227. package/docs/research-awesome-agent-skills-distillation.md +0 -100
  228. package/docs/research-extension-examples.md +0 -297
  229. package/docs/research-extension-system.md +0 -324
  230. package/docs/research-oh-my-pi-distillation.md +0 -369
  231. package/docs/research-optimization-plan.md +0 -548
  232. package/docs/research-phase10-distillation.md +0 -199
  233. package/docs/research-phase11-distillation.md +0 -201
  234. package/docs/research-phase8-operator-experience-plan.md +0 -819
  235. package/docs/research-phase9-observability-reliability-plan.md +0 -1190
  236. package/docs/research-pi-coding-agent.md +0 -357
  237. package/docs/research-source-pi-crew-reference.md +0 -174
  238. package/docs/research-ui-optimization-plan.md +0 -480
  239. package/docs/source-runtime-refactor-map.md +0 -107
  240. package/src/utils/atomic-write.ts +0 -33
@@ -1,354 +0,0 @@
1
- # 📋 Implementation Plan: Thu hẹp Gap với oh-my-pi
2
-
3
- > Dựa trên `COMPARISON_OH_MY_PI_VS_PI_CREW.md`
4
- > Mục tiêu: Giảm UI flicker, tăng real-time responsiveness, structured output, inter-worker communication
5
-
6
- ---
7
-
8
- ## Phased Approach
9
-
10
- ```
11
- Phase 1 (2 tasks) ─── Real-time Event Bridge ──────────── HIGH impact
12
- Phase 2 (2 tasks) ─── Structured Output & Yield ────────── MEDIUM impact
13
- Phase 3 (2 tasks) ─── Inter-Worker Communication ───────── MEDIUM impact
14
- Phase 4 (2 tasks) ─── Agent Config UI & Polish ─────────── LOW impact
15
- ```
16
-
17
- ---
18
-
19
- ## Phase 1: Real-time Event Bridge
20
-
21
- > **Problem**: UI đọc từ files (manifest, tasks.json) mỗi 500-1000ms → flicker, chậm
22
- > **Solution**: Bridge child Pi JSON events trực tiếp đến UI qua RunEventBus
23
-
24
- ### Task 1.1: Event Stream Bridge
25
-
26
- **File mới**: `src/runtime/event-stream-bridge.ts`
27
-
28
- **Ý tưởng**: Kết nối `onJsonEvent` callback trong `task-runner.ts` trực tiếp đến `runEventBus` (đã tồn tại), thay vì chỉ ghi file rồi poll.
29
-
30
- ```
31
- Current flow (chậm):
32
- child Pi → stdout JSON → onJsonEvent → appendCrewAgentEvent (file)
33
-
34
- UI poll (500ms) → read files → render
35
-
36
- New flow (nhanh):
37
- child Pi → stdout JSON → onJsonEvent → appendCrewAgentEvent (file)
38
- └→ runEventBus.emit() → UI callback → render
39
- ```
40
-
41
- **Implementation**:
42
- ```typescript
43
- // event-stream-bridge.ts
44
- import { runEventBus, type RunEventPayload } from "../ui/run-event-bus.ts";
45
-
46
- export interface StreamBridgeEvent {
47
- runId: string;
48
- taskId: string;
49
- eventType: string;
50
- toolName?: string;
51
- toolArgs?: string;
52
- intent?: string;
53
- tokens?: number;
54
- timestamp: number;
55
- }
56
-
57
- const bridge = new Map<string, (event: StreamBridgeEvent) => void>();
58
-
59
- export function registerStreamBridge(runId: string): (event: StreamBridgeEvent) => void {
60
- const handler = (event: StreamBridgeEvent) => {
61
- runEventBus.emit({
62
- type: "worker_status",
63
- runId: event.runId,
64
- taskId: event.taskId,
65
- data: event,
66
- });
67
- };
68
- bridge.set(runId, handler);
69
- return handler;
70
- }
71
-
72
- export function unregisterStreamBridge(runId: string): void {
73
- bridge.delete(runId);
74
- }
75
- ```
76
-
77
- **Thay đổi trong `task-runner.ts`**:
78
- - Import `registerStreamBridge` / `unregisterStreamBridge`
79
- - Trong `onJsonEvent` callback: gọi thêm bridge handler
80
- - Trong task cleanup: unregister bridge
81
-
82
- **Thay đổi trong `run-snapshot-cache.ts`**:
83
- - Subscribe `runEventBus.on(runId, ...)` cho active run
84
- - On event: invalidate cache cho task đó (thay vì TTL-based refresh)
85
- - Giảm TTL từ 500ms → 200ms cho polled data, nhưng event-driven cho real-time
86
-
87
- **Risk**: LOW — chỉ thêm event emission, không thay đổi flow hiện tại
88
-
89
- ---
90
-
91
- ### Task 1.2: Render Coalescing & Debounce
92
-
93
- **File mới**: `src/ui/render-coalescer.ts`
94
-
95
- **Ý tưởng**: Gom nhiều render requests thành 1 render duy nhất trong 1 frame (16ms). Tránh render nhiều lần khi nhiều events đến cùng lúc.
96
-
97
- ```typescript
98
- // render-coalescer.ts
99
- export class RenderCoalescer {
100
- #pending = false;
101
- #rafId: ReturnType<typeof setTimeout> | null = null;
102
- #callback: () => void;
103
- #intervalMs: number;
104
-
105
- constructor(callback: () => void, intervalMs = 32) { // ~30fps
106
- this.#callback = callback;
107
- this.#intervalMs = intervalMs;
108
- }
109
-
110
- request(): void {
111
- if (this.#pending) return;
112
- this.#pending = true;
113
- this.#rafId = setTimeout(() => {
114
- this.#pending = false;
115
- this.#rafId = null;
116
- this.#callback();
117
- }, this.#intervalMs);
118
- }
119
-
120
- flush(): void {
121
- if (this.#rafId) clearTimeout(this.#rafId);
122
- this.#pending = false;
123
- this.#rafId = null;
124
- this.#callback();
125
- }
126
-
127
- dispose(): void {
128
- if (this.#rafId) clearTimeout(this.#rafId);
129
- this.#pending = false;
130
- }
131
- }
132
- ```
133
-
134
- **Thay đổi trong `run-dashboard.ts`**:
135
- - Wrap `invalidate()` calls trong `RenderCoalescer`
136
- - Khi event đến → `coalescer.request()` thay vì `invalidate()` trực tiếp
137
- - Khi user input → `coalescer.flush()` (responsive input)
138
-
139
- **Thay đổi trong `powerbar-publisher.ts`**:
140
- - Wrap `safeEmit()` trong coalescer
141
- - Giảm powerbar update frequency xuống ~200ms
142
-
143
- **Risk**: LOW — chỉ thêm debounce layer
144
-
145
- ---
146
-
147
- ## Phase 2: Structured Output & Yield
148
-
149
- ### Task 2.1: Output Schema in Task Packets
150
-
151
- **File sửa**: `src/runtime/task-packet.ts`
152
-
153
- **Ý tưởng**: Thêm optional `outputSchema` field vào task packet, worker prompt hướng dẫn subagent output theo schema.
154
-
155
- ```typescript
156
- // task-packet.ts — thêm field
157
- export interface TaskPacket {
158
- // ... existing fields
159
- outputSchema?: {
160
- type: "json" | "markdown" | "text";
161
- schema?: unknown; // JTD/JSON Schema for JSON output
162
- description?: string; // human-readable expected output
163
- };
164
- }
165
- ```
166
-
167
- **Thay đổi trong `prompt-builder.ts`**:
168
- - Nếu `taskPacket.outputSchema` được set → thêm output format instruction vào prompt
169
- - Pattern từ oh-my-pi: "Your result MUST match this TypeScript interface: ..."
170
-
171
- **Risk**: LOW — additive, không ảnh hưởng existing tasks
172
-
173
- ---
174
-
175
- ### Task 2.2: Structured Result Extraction
176
-
177
- **File mới**: `src/runtime/result-extractor.ts`
178
-
179
- **Ý tưởng**: Parse worker output cố gắng extract structured JSON trước khi fallback sang raw text.
180
-
181
- ```typescript
182
- // result-extractor.ts
183
- export interface ExtractedResult {
184
- structured: boolean;
185
- data: unknown;
186
- rawText: string;
187
- error?: string;
188
- }
189
-
190
- export function extractStructuredResult(raw: string, schema?: unknown): ExtractedResult {
191
- // 1. Try JSON parse
192
- // 2. Try extract from ```json``` fence
193
- // 3. Try extract from ADAPTIVE_PLAN_JSON markers (existing)
194
- // 4. Fallback to raw text
195
- }
196
- ```
197
-
198
- **Thay đổi trong `task-runner.ts`**:
199
- - Sau khi có `parsedOutput.finalText` → chạy qua `extractStructuredResult`
200
- - Lưu structured result vào artifact riêng (metadata/{taskId}.result.json)
201
-
202
- **Risk**: LOW — chỉ thêm extraction layer, không thay đổi existing flow
203
-
204
- ---
205
-
206
- ## Phase 3: Inter-Worker Communication
207
-
208
- ### Task 3.1: Mailbox Reply Support
209
-
210
- **File sửa**: `src/state/mailbox.ts`
211
-
212
- **Ý tưởng**: Mailbox hiện tại là fire-and-forget. Thêm `replyTo` field cho phép worker trả lời message.
213
-
214
- ```typescript
215
- // mailbox.ts — thêm fields
216
- export interface MailboxMessage {
217
- // ... existing fields
218
- replyTo?: string; // ID của message gốc (nếu là reply)
219
- replyFrom?: string; // Task ID gửi reply
220
- replyDeadline?: number; // Ms deadline cho reply
221
- }
222
-
223
- export interface MailboxMessageStatus {
224
- // ... existing fields
225
- repliedAt?: string; // Khi reply được nhận
226
- replyContent?: string; // Nội dung reply
227
- }
228
- ```
229
-
230
- **Thay đổi trong prompt-builder.ts**:
231
- - Nếu task có unread mailbox messages với `replyTo` → thêm instruction "Reply to this message using the respond command"
232
-
233
- **Risk**: MEDIUM — thay đổi mailbox schema, cần migration
234
-
235
- ---
236
-
237
- ### Task 3.2: Dependency Context Enhancement
238
-
239
- **File sửa**: `src/runtime/task-output-context.ts`
240
-
241
- **Ý tưởng**: Hiện tại chỉ collect output text. Thêm collect structured data (JSON results, artifacts produced).
242
-
243
- ```typescript
244
- // task-output-context.ts — thêm
245
- export interface DependencyContext {
246
- taskId: string;
247
- role: string;
248
- status: string;
249
- resultSummary: string; // existing text output
250
- structuredResults?: Map<string, unknown>; // NEW: parsed JSON results
251
- artifactsProduced?: string[]; // NEW: artifact paths
252
- usage?: { tokens: number; durationMs: number }; // NEW: usage stats
253
- }
254
- ```
255
-
256
- **Risk**: LOW — additive extension
257
-
258
- ---
259
-
260
- ## Phase 4: Agent Config UI & Polish
261
-
262
- ### Task 4.1: Agent Management Dashboard
263
-
264
- **File mới**: `src/ui/overlays/agent-management-overlay.ts`
265
-
266
- **Ý tưởng**: UI overlay cho phép enable/disable agents, xem model resolution, edit model override — tương tự oh-my-pi's `AgentDashboard`.
267
-
268
- **Features**:
269
- - List agents from discovery (agents/ dir)
270
- - Show source (project/user/package), description, model
271
- - Toggle enable/disable → writes to config
272
- - Edit model override → inline input
273
- - Keyboard navigation (j/k, Tab, Enter, Esc)
274
-
275
- **Risk**: MEDIUM — requires Pi TUI component support, may need pi-mono API
276
-
277
- ---
278
-
279
- ### Task 4.2: Transcript Entry Viewer Enhancement
280
-
281
- **File sửa**: `src/ui/transcript-viewer.ts`
282
-
283
- **Ý tưởng**: Thêm expand/collapse per entry (như oh-my-pi's SessionObserverOverlay).
284
-
285
- **Features**:
286
- - Entry-based navigation (each tool call/message = 1 entry)
287
- - `Enter` toggle expand/collapse
288
- - `j/k` move between entries
289
- - Auto-scroll to bottom unless user scrolled up
290
- - Breadcrumb for nested subagent transcripts (if available)
291
-
292
- **Risk**: LOW — extending existing transcript viewer
293
-
294
- ---
295
-
296
- ## Dependency Graph
297
-
298
- ```
299
- Phase 1:
300
- 1.1 Event Stream Bridge ─────┐
301
- 1.2 Render Coalescing ────────┤ (independent, can parallel)
302
- └→ UI responsiveness improved
303
- Phase 2:
304
- 2.1 Output Schema ───────────┐
305
- 2.2 Result Extractor ─────────┤ (2.1 before 2.2)
306
- └→ Structured output capability
307
- Phase 3:
308
- 3.1 Mailbox Reply ───────────┐
309
- 3.2 Dependency Context ──────┤ (independent, can parallel)
310
- └→ Inter-worker communication
311
- Phase 4:
312
- 4.1 Agent Dashboard ─────────┐
313
- 4.2 Transcript Enhancement ──┤ (independent, can parallel)
314
- └→ Polish & UX
315
- ```
316
-
317
- ---
318
-
319
- ## Effort Estimates
320
-
321
- | Task | Lines | Files | Tests | Phase |
322
- |------|-------|-------|-------|-------|
323
- | 1.1 Event Stream Bridge | ~80 new, ~30 modified | 3 | 5 | 1 |
324
- | 1.2 Render Coalescing | ~60 new, ~20 modified | 3 | 4 | 1 |
325
- | 2.1 Output Schema | ~40 modified | 2 | 3 | 2 |
326
- | 2.2 Result Extractor | ~100 new, ~20 modified | 3 | 8 | 2 |
327
- | 3.1 Mailbox Reply | ~80 modified | 3 | 6 | 3 |
328
- | 3.2 Dependency Context | ~50 modified | 2 | 4 | 3 |
329
- | 4.1 Agent Dashboard | ~300 new | 2 | 8 | 4 |
330
- | 4.2 Transcript Enhancement | ~120 modified | 1 | 6 | 4 |
331
- | **Total** | **~850** | **~19** | **~44** | |
332
-
333
- ---
334
-
335
- ## Risk Mitigation
336
-
337
- | Risk | Probability | Impact | Mitigation |
338
- |------|-------------|--------|------------|
339
- | Event bridge causes memory leak | Low | Medium | Unregister on task complete, WeakRef for handlers |
340
- | Render coalescer misses last event | Low | Low | `flush()` on task complete + user input |
341
- | Output schema breaks existing tasks | Low | Medium | Optional — only enforce when schema is set |
342
- | Mailbox reply schema migration | Medium | Low | Additive fields only, no breaking change |
343
- | Agent dashboard needs pi-mono API | Medium | Medium | Fallback to file-based config if API unavailable |
344
- | Child Pi event format changes | Low | High | Defensive parsing with fallback |
345
-
346
- ---
347
-
348
- ## Testing Strategy
349
-
350
- - **Phase 1**: Unit test bridge registration/emission, coalescer debounce timing
351
- - **Phase 2**: Unit test result extraction with various output formats
352
- - **Phase 3**: Unit test mailbox reply flow, integration test with real workers
353
- - **Phase 4**: Manual UI testing + screenshot comparison
354
- - **All phases**: `npm test` (868 tests baseline) must stay green