pi-crew 0.1.49 → 0.2.0

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 (249) hide show
  1. package/CHANGELOG.md +74 -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 +14 -1
  48. package/src/config/defaults.ts +5 -5
  49. package/src/config/drift-detector.ts +211 -0
  50. package/src/config/markers.ts +327 -0
  51. package/src/config/resilient-parser.ts +108 -0
  52. package/src/config/suggestions.ts +74 -0
  53. package/src/extension/cross-extension-rpc.ts +103 -82
  54. package/src/extension/project-init.ts +36 -4
  55. package/src/extension/register.ts +67 -22
  56. package/src/extension/registration/commands.ts +77 -8
  57. package/src/extension/registration/subagent-tools.ts +10 -1
  58. package/src/extension/registration/team-tool.ts +10 -1
  59. package/src/extension/registration/viewers.ts +48 -34
  60. package/src/extension/run-bundle-schema.ts +89 -89
  61. package/src/extension/run-export.ts +26 -12
  62. package/src/extension/run-import.ts +25 -1
  63. package/src/extension/run-index.ts +5 -1
  64. package/src/extension/run-maintenance.ts +142 -68
  65. package/src/extension/team-manager-command.ts +10 -1
  66. package/src/extension/team-tool/context.ts +1 -1
  67. package/src/extension/team-tool/doctor.ts +28 -3
  68. package/src/extension/team-tool/handle-settings.ts +195 -188
  69. package/src/extension/team-tool/inspect.ts +41 -41
  70. package/src/extension/team-tool/intent-policy.ts +42 -42
  71. package/src/extension/team-tool/lifecycle-actions.ts +27 -8
  72. package/src/extension/team-tool/plan.ts +19 -19
  73. package/src/extension/team-tool/run.ts +12 -1
  74. package/src/extension/team-tool.ts +14 -3
  75. package/src/i18n.ts +184 -184
  76. package/src/observability/exporters/otlp-exporter.ts +92 -77
  77. package/src/prompt/prompt-runtime.ts +72 -72
  78. package/src/runtime/agent-memory.ts +72 -72
  79. package/src/runtime/agent-observability.ts +114 -114
  80. package/src/runtime/async-marker.ts +26 -26
  81. package/src/runtime/attention-events.ts +28 -28
  82. package/src/runtime/auto-resume.ts +100 -0
  83. package/src/runtime/background-runner.ts +11 -1
  84. package/src/runtime/cancellation-token.ts +89 -89
  85. package/src/runtime/cancellation.ts +61 -61
  86. package/src/runtime/capability-inventory.ts +116 -116
  87. package/src/runtime/child-pi.ts +7 -2
  88. package/src/runtime/compaction-summary.ts +271 -0
  89. package/src/runtime/completion-guard.ts +190 -190
  90. package/src/runtime/concurrency.ts +3 -1
  91. package/src/runtime/crash-recovery.ts +33 -0
  92. package/src/runtime/delta-conflict.ts +360 -0
  93. package/src/runtime/diagnostic-export.ts +3 -1
  94. package/src/runtime/direct-run.ts +35 -35
  95. package/src/runtime/event-stream-bridge.ts +3 -1
  96. package/src/runtime/foreground-control.ts +82 -82
  97. package/src/runtime/green-contract.ts +46 -46
  98. package/src/runtime/group-join.ts +106 -106
  99. package/src/runtime/heartbeat-gradient.ts +28 -28
  100. package/src/runtime/heartbeat-watcher.ts +124 -124
  101. package/src/runtime/iteration-hooks.ts +262 -0
  102. package/src/runtime/live-agent-control.ts +88 -88
  103. package/src/runtime/live-control-realtime.ts +36 -36
  104. package/src/runtime/live-extension-bridge.ts +150 -150
  105. package/src/runtime/live-irc.ts +92 -92
  106. package/src/runtime/live-session-health.ts +100 -100
  107. package/src/runtime/loop-gates.ts +129 -0
  108. package/src/runtime/metric-parser.ts +40 -0
  109. package/src/runtime/notebook-helpers.ts +90 -90
  110. package/src/runtime/orphan-sentinel.ts +7 -7
  111. package/src/runtime/parallel-research.ts +44 -44
  112. package/src/runtime/phase-progress.ts +217 -0
  113. package/src/runtime/pi-args.ts +38 -2
  114. package/src/runtime/pi-json-output.ts +111 -111
  115. package/src/runtime/pi-spawn.ts +74 -6
  116. package/src/runtime/policy-engine.ts +79 -79
  117. package/src/runtime/post-checks.ts +122 -0
  118. package/src/runtime/process-status.ts +14 -1
  119. package/src/runtime/progress-event-coalescer.ts +43 -43
  120. package/src/runtime/prose-compressor.ts +164 -164
  121. package/src/runtime/recovery-recipes.ts +74 -74
  122. package/src/runtime/result-extractor.ts +121 -121
  123. package/src/runtime/role-permission.ts +39 -39
  124. package/src/runtime/sensitive-paths.ts +3 -3
  125. package/src/runtime/session-resources.ts +25 -25
  126. package/src/runtime/session-snapshot.ts +59 -59
  127. package/src/runtime/session-usage.ts +79 -79
  128. package/src/runtime/sidechain-output.ts +29 -29
  129. package/src/runtime/stream-preview.ts +177 -177
  130. package/src/runtime/supervisor-contact.ts +59 -59
  131. package/src/runtime/task-display.ts +38 -38
  132. package/src/runtime/task-graph.ts +207 -0
  133. package/src/runtime/task-quality.ts +207 -0
  134. package/src/runtime/task-runner/capabilities.ts +78 -78
  135. package/src/runtime/task-runner/live-executor.ts +7 -1
  136. package/src/runtime/task-runner/progress.ts +119 -119
  137. package/src/runtime/task-runner/prompt-builder.ts +1 -1
  138. package/src/runtime/task-runner/prompt-pipeline.ts +64 -64
  139. package/src/runtime/task-runner/result-utils.ts +14 -14
  140. package/src/runtime/task-runner/run-projection.ts +103 -103
  141. package/src/runtime/task-runner/state-helpers.ts +22 -22
  142. package/src/runtime/team-runner.ts +126 -7
  143. package/src/runtime/worker-heartbeat.ts +21 -21
  144. package/src/runtime/worker-startup.ts +57 -57
  145. package/src/runtime/workflow-state.ts +187 -0
  146. package/src/runtime/workspace-tree.ts +298 -298
  147. package/src/schema/config-schema.ts +12 -0
  148. package/src/schema/validation-types.ts +148 -0
  149. package/src/skills/skill-templates.ts +374 -0
  150. package/src/state/active-run-registry.ts +35 -11
  151. package/src/state/atomic-write.ts +33 -26
  152. package/src/state/contracts.ts +1 -0
  153. package/src/state/event-reconstructor.ts +217 -0
  154. package/src/state/locks.ts +2 -11
  155. package/src/state/mailbox.ts +4 -3
  156. package/src/state/state-store.ts +32 -14
  157. package/src/state/task-claims.ts +44 -44
  158. package/src/state/types.ts +9 -0
  159. package/src/state/usage.ts +29 -29
  160. package/src/subagents/async-entry.ts +1 -1
  161. package/src/subagents/index.ts +3 -3
  162. package/src/subagents/live/control.ts +1 -1
  163. package/src/subagents/live/manager.ts +1 -1
  164. package/src/subagents/live/realtime.ts +1 -1
  165. package/src/subagents/live/session-runtime.ts +1 -1
  166. package/src/subagents/manager.ts +1 -1
  167. package/src/subagents/spawn.ts +1 -1
  168. package/src/teams/team-serializer.ts +38 -38
  169. package/src/types/diff.d.ts +18 -18
  170. package/src/ui/crew-footer.ts +101 -101
  171. package/src/ui/crew-select-list.ts +111 -111
  172. package/src/ui/crew-widget.ts +9 -4
  173. package/src/ui/dashboard-panes/cancellation-pane.ts +42 -42
  174. package/src/ui/dashboard-panes/capability-pane.ts +59 -59
  175. package/src/ui/dashboard-panes/mailbox-pane.ts +35 -35
  176. package/src/ui/dashboard-panes/metrics-pane.ts +34 -34
  177. package/src/ui/dashboard-panes/progress-pane.ts +11 -0
  178. package/src/ui/dynamic-border.ts +25 -25
  179. package/src/ui/layout-primitives.ts +106 -106
  180. package/src/ui/loaders.ts +158 -158
  181. package/src/ui/powerbar-publisher.ts +6 -0
  182. package/src/ui/render-coalescer.ts +51 -51
  183. package/src/ui/render-diff.ts +119 -119
  184. package/src/ui/render-scheduler.ts +143 -143
  185. package/src/ui/run-action-dispatcher.ts +10 -1
  186. package/src/ui/spinner.ts +17 -17
  187. package/src/ui/status-colors.ts +58 -58
  188. package/src/ui/syntax-highlight.ts +116 -116
  189. package/src/ui/transcript-entries.ts +258 -258
  190. package/src/utils/completion-dedupe.ts +63 -63
  191. package/src/utils/frontmatter.ts +68 -68
  192. package/src/utils/git.ts +262 -262
  193. package/src/utils/ids.ts +17 -17
  194. package/src/utils/incremental-reader.ts +104 -104
  195. package/src/utils/names.ts +27 -27
  196. package/src/utils/redaction.ts +44 -44
  197. package/src/utils/safe-paths.ts +47 -47
  198. package/src/utils/scan-cache.ts +136 -136
  199. package/src/utils/sleep.ts +40 -26
  200. package/src/utils/task-name-generator.ts +337 -337
  201. package/src/workflows/validate-workflow.ts +40 -40
  202. package/src/worktree/branch-freshness.ts +45 -45
  203. package/src/worktree/worktree-manager.ts +11 -3
  204. package/teams/default.team.md +12 -12
  205. package/teams/fast-fix.team.md +11 -11
  206. package/teams/implementation.team.md +18 -18
  207. package/teams/parallel-research.team.md +14 -14
  208. package/teams/research.team.md +11 -11
  209. package/teams/review.team.md +12 -12
  210. package/workflows/default.workflow.md +30 -29
  211. package/workflows/fast-fix.workflow.md +23 -22
  212. package/workflows/implementation.workflow.md +43 -38
  213. package/workflows/parallel-research.workflow.md +46 -46
  214. package/workflows/research.workflow.md +22 -22
  215. package/workflows/review.workflow.md +30 -30
  216. package/docs/refactor-tasks-phase3.md +0 -394
  217. package/docs/refactor-tasks-phase4.md +0 -564
  218. package/docs/refactor-tasks-phase5.md +0 -402
  219. package/docs/refactor-tasks-phase6.md +0 -662
  220. package/docs/refactor-tasks.md +0 -1484
  221. package/docs/research/AGENT-EXECUTION-ARCHITECTURE.md +0 -261
  222. package/docs/research/AGENT-LIFECYCLE-COMPARISON.md +0 -111
  223. package/docs/research/AUDIT_OH_MY_PI.md +0 -261
  224. package/docs/research/AUDIT_PI_CREW.md +0 -457
  225. package/docs/research/CAVEMAN-DEEP-RESEARCH.md +0 -281
  226. package/docs/research/COMPARISON_OH_MY_PI_VS_PI_CREW.md +0 -264
  227. package/docs/research/DEEP-RESEARCH-PI-POWERBAR.md +0 -343
  228. package/docs/research/DEEP_RESEARCH_SUBAGENT_ARCHITECTURE.md +0 -480
  229. package/docs/research/GAP_CLOSURE_IMPLEMENTATION_PLAN.md +0 -354
  230. package/docs/research/IMPLEMENTATION_PLAN.md +0 -385
  231. package/docs/research/LIVE-SESSION-PRODUCTION-READY-PLAN.md +0 -502
  232. package/docs/research/OH-MY-PI-DEEP-RESEARCH-v14.7.6.md +0 -266
  233. package/docs/research/REMAINING-GAPS-PLAN.md +0 -363
  234. package/docs/research/SESSION-SUMMARY-2026-05-08.md +0 -146
  235. package/docs/research/UI-RESPONSIVENESS-AUDIT.md +0 -173
  236. package/docs/research-awesome-agent-skills-distillation.md +0 -100
  237. package/docs/research-extension-examples.md +0 -297
  238. package/docs/research-extension-system.md +0 -324
  239. package/docs/research-oh-my-pi-distillation.md +0 -369
  240. package/docs/research-optimization-plan.md +0 -548
  241. package/docs/research-phase10-distillation.md +0 -199
  242. package/docs/research-phase11-distillation.md +0 -201
  243. package/docs/research-phase8-operator-experience-plan.md +0 -819
  244. package/docs/research-phase9-observability-reliability-plan.md +0 -1190
  245. package/docs/research-pi-coding-agent.md +0 -357
  246. package/docs/research-source-pi-crew-reference.md +0 -174
  247. package/docs/research-ui-optimization-plan.md +0 -480
  248. package/docs/source-runtime-refactor-map.md +0 -107
  249. 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