pi-crew 0.2.3 → 0.2.4
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/AGENTS.md +57 -32
- package/CHANGELOG.md +466 -448
- package/LICENSE +21 -21
- package/NOTICE.md +16 -16
- package/README.md +323 -323
- package/docs/FEATURE_INTAKE.md +126 -0
- package/docs/HARNESS.md +86 -0
- package/docs/HARNESS_BACKLOG.md +41 -0
- package/docs/TEST_MATRIX.md +49 -0
- package/docs/actions-reference.md +595 -595
- package/docs/architecture.md +180 -180
- package/docs/code-review-2026-05-11.md +592 -592
- package/docs/commands-reference.md +347 -347
- package/docs/comparison-pi-subagents-vs-pi-crew.md +303 -0
- package/docs/decisions/0001-durable-state.md +41 -0
- package/docs/decisions/0002-child-process-for-async.md +42 -0
- package/docs/decisions/0003-depth-guard.md +36 -0
- package/docs/decisions/0004-execfile-over-exec.md +34 -0
- package/docs/decisions/0005-no-parameter-properties.md +49 -0
- package/docs/decisions/0006-publish-bundled-esm.md +63 -0
- package/docs/decisions/0007-active-run-binary-index.md +54 -0
- package/docs/decisions/0008-child-pi-warm-pool.md +61 -0
- package/docs/decisions/README.md +23 -0
- package/docs/followup-review-round4-2026-05-13.md +107 -0
- package/docs/implementation-plan-top3.md +333 -0
- package/docs/live-mailbox-runtime.md +36 -36
- package/docs/next-upgrade-roadmap.md +808 -808
- package/docs/oh-my-pi-research.md +509 -0
- package/docs/perf/baseline-2026-05.md +113 -0
- package/docs/perf/final-report-2026-05.md +206 -0
- package/docs/perf/sprint-1-report.md +71 -0
- package/docs/perf/sprint-2-report.md +81 -0
- package/docs/perf/sprint-2.5-report.md +53 -0
- package/docs/perf/sprint-3-report.md +36 -0
- package/docs/perf/sprint-4-report.md +47 -0
- package/docs/perf/sprint-5-report.md +51 -0
- package/docs/perf/sprint-6-report.md +94 -0
- package/docs/perf/sprint-7-report.md +74 -0
- package/docs/perf/upgrade-plan-2026-05.md +147 -0
- package/docs/pi-subagents3-deep-analysis.md +508 -0
- package/docs/product/README.md +31 -0
- package/docs/product/platform.md +27 -0
- package/docs/product/runtime-safety.md +37 -0
- package/docs/product/team-run.md +39 -0
- package/docs/product/team-tool.md +37 -0
- package/docs/publishing.md +65 -65
- package/docs/resource-formats.md +134 -134
- package/docs/runtime-analysis-child-vs-live.md +171 -0
- package/docs/runtime-flow.md +148 -148
- package/docs/runtime-migration-in-process-analysis.md +250 -0
- package/docs/stories/README.md +30 -0
- package/docs/stories/backlog.md +36 -0
- package/docs/templates/decision.md +27 -0
- package/docs/templates/story.md +44 -0
- package/docs/templates/validation-report.md +32 -0
- package/docs/usage.md +238 -238
- package/index.ts +7 -6
- package/install.mjs +65 -65
- package/package.json +107 -100
- package/schema.json +222 -222
- package/skills/child-pi-spawning/SKILL.md +213 -0
- package/skills/context-artifact-hygiene/SKILL.md +32 -0
- package/skills/event-log-tracing/SKILL.md +299 -0
- package/skills/git-master/SKILL.md +225 -24
- package/skills/live-agent-lifecycle/SKILL.md +192 -0
- package/skills/mailbox-interactive/SKILL.md +300 -19
- package/skills/model-routing-context/SKILL.md +94 -0
- package/skills/multi-perspective-review/SKILL.md +88 -0
- package/skills/read-only-explorer/SKILL.md +250 -26
- package/skills/safe-bash/SKILL.md +307 -21
- package/skills/verification-before-done/SKILL.md +11 -2
- package/skills/widget-rendering/SKILL.md +258 -0
- package/skills/workspace-isolation/SKILL.md +202 -0
- package/skills/worktree-isolation/SKILL.md +202 -18
- package/src/adapters/claude-adapter.ts +25 -25
- package/src/adapters/codex-adapter.ts +21 -21
- package/src/adapters/cursor-adapter.ts +17 -17
- package/src/adapters/export-util.ts +137 -137
- package/src/adapters/index.ts +15 -15
- package/src/adapters/registry.ts +18 -18
- package/src/adapters/types.ts +23 -23
- package/src/agents/agent-config.ts +38 -38
- package/src/agents/agent-serializer.ts +38 -38
- package/src/agents/discover-agents.ts +121 -118
- package/src/config/config.ts +740 -858
- package/src/config/defaults.ts +96 -96
- package/src/config/drift-detector.ts +211 -211
- package/src/config/markers.ts +327 -327
- package/src/config/resilient-parser.ts +109 -108
- package/src/config/suggestions.ts +74 -74
- package/src/config/types.ts +199 -0
- package/src/extension/async-notifier.ts +123 -89
- package/src/extension/autonomous-policy.ts +169 -169
- package/src/extension/cross-extension-rpc.ts +104 -104
- package/src/extension/help.ts +47 -47
- package/src/extension/import-index.ts +69 -69
- package/src/extension/management.ts +395 -382
- package/src/extension/notification-router.ts +116 -116
- package/src/extension/notification-sink.ts +51 -51
- package/src/extension/project-init.ts +168 -168
- package/src/extension/register.ts +859 -668
- package/src/extension/registration/artifact-cleanup.ts +15 -15
- package/src/extension/registration/command-utils.ts +54 -54
- package/src/extension/registration/commands.ts +559 -452
- package/src/extension/registration/compaction-guard.ts +125 -125
- package/src/extension/registration/subagent-helpers.ts +102 -102
- package/src/extension/registration/subagent-tools.ts +220 -159
- package/src/extension/registration/team-tool.ts +159 -99
- package/src/extension/registration/viewers.ts +29 -0
- package/src/extension/result-watcher.ts +128 -128
- package/src/extension/run-bundle-schema.ts +89 -89
- package/src/extension/run-export.ts +73 -73
- package/src/extension/run-import.ts +84 -84
- package/src/extension/run-index.ts +94 -94
- package/src/extension/run-maintenance.ts +142 -142
- package/src/extension/session-summary.ts +8 -8
- package/src/extension/team-manager-command.ts +96 -96
- package/src/extension/team-recommendation.ts +188 -188
- package/src/extension/team-tool/api.ts +5 -2
- package/src/extension/team-tool/cancel.ts +224 -209
- package/src/extension/team-tool/config-patch.ts +36 -36
- package/src/extension/team-tool/context.ts +60 -60
- package/src/extension/team-tool/doctor.ts +242 -242
- package/src/extension/team-tool/handle-settings.ts +421 -195
- package/src/extension/team-tool/inspect.ts +41 -41
- package/src/extension/team-tool/lifecycle-actions.ts +139 -139
- package/src/extension/team-tool/parallel-dispatch.ts +156 -156
- package/src/extension/team-tool/plan.ts +19 -19
- package/src/extension/team-tool/respond.ts +112 -111
- package/src/extension/team-tool/run.ts +246 -229
- package/src/extension/team-tool/status.ts +110 -110
- package/src/extension/team-tool-types.ts +13 -13
- package/src/extension/team-tool.ts +344 -344
- package/src/extension/tool-result.ts +16 -16
- package/src/extension/validate-resources.ts +77 -77
- package/src/hooks/registry.ts +61 -61
- package/src/hooks/types.ts +40 -40
- package/src/i18n.ts +184 -184
- package/src/observability/correlation.ts +35 -35
- package/src/observability/event-to-metric.ts +68 -68
- package/src/observability/exporters/adapter.ts +30 -30
- package/src/observability/exporters/otlp-exporter.ts +106 -92
- package/src/observability/exporters/prometheus-exporter.ts +54 -54
- package/src/observability/metric-registry.ts +87 -87
- package/src/observability/metric-retention.ts +54 -54
- package/src/observability/metric-sink.ts +81 -56
- package/src/observability/metrics-primitives.ts +167 -167
- package/src/prompt/prompt-runtime.ts +72 -72
- package/src/runtime/adaptive-plan.ts +338 -0
- package/src/runtime/agent-control.ts +169 -169
- package/src/runtime/agent-memory.ts +72 -72
- package/src/runtime/agent-observability.ts +114 -114
- package/src/runtime/async-marker.ts +26 -26
- package/src/runtime/async-runner.ts +153 -153
- package/src/runtime/attention-events.ts +28 -28
- package/src/runtime/auto-resume.ts +100 -100
- package/src/runtime/background-runner.ts +122 -89
- package/src/runtime/cancellation.ts +61 -61
- package/src/runtime/capability-inventory.ts +116 -116
- package/src/runtime/child-pi-pool.ts +68 -0
- package/src/runtime/child-pi.ts +541 -461
- package/src/runtime/code-summary.ts +247 -247
- package/src/runtime/compaction-summary.ts +271 -271
- package/src/runtime/concurrency.ts +58 -58
- package/src/runtime/crash-recovery.ts +317 -301
- package/src/runtime/crew-agent-records.ts +379 -281
- package/src/runtime/crew-agent-runtime.ts +60 -60
- package/src/runtime/cross-extension-rpc.ts +72 -0
- package/src/runtime/custom-tools/irc-tool.ts +201 -201
- package/src/runtime/custom-tools/submit-result-tool.ts +90 -90
- package/src/runtime/deadletter.ts +47 -47
- package/src/runtime/delivery-coordinator.ts +176 -176
- package/src/runtime/delta-conflict.ts +360 -360
- package/src/runtime/diagnostic-export.ts +102 -102
- package/src/runtime/direct-run.ts +35 -35
- package/src/runtime/effectiveness.ts +82 -81
- package/src/runtime/errors/crew-errors.ts +166 -0
- package/src/runtime/event-stream-bridge.ts +92 -92
- package/src/runtime/foreground-control.ts +82 -82
- package/src/runtime/green-contract.ts +46 -46
- package/src/runtime/group-join.ts +234 -106
- package/src/runtime/heartbeat-watcher.ts +145 -124
- package/src/runtime/iteration-hooks.ts +267 -267
- package/src/runtime/live-agent-control.ts +88 -88
- package/src/runtime/live-agent-manager.ts +377 -179
- package/src/runtime/live-control-realtime.ts +36 -36
- package/src/runtime/live-session-runtime.ts +676 -600
- package/src/runtime/loop-gates.ts +129 -129
- package/src/runtime/manifest-cache.ts +263 -263
- package/src/runtime/mcp-proxy.ts +113 -113
- package/src/runtime/metric-parser.ts +40 -40
- package/src/runtime/model-fallback.ts +282 -274
- package/src/runtime/model-resolver.ts +118 -0
- package/src/runtime/output-validator.ts +187 -187
- package/src/runtime/overflow-recovery.ts +175 -175
- package/src/runtime/parallel-research.ts +44 -44
- package/src/runtime/parallel-utils.ts +156 -156
- package/src/runtime/parent-guard.ts +80 -80
- package/src/runtime/phase-progress.ts +217 -217
- package/src/runtime/pi-args.ts +165 -165
- package/src/runtime/pi-json-output.ts +111 -111
- package/src/runtime/pi-spawn.ts +167 -167
- package/src/runtime/policy-engine.ts +79 -79
- package/src/runtime/post-checks.ts +125 -125
- package/src/runtime/post-exit-stdio-guard.ts +86 -86
- package/src/runtime/process-status.ts +97 -73
- package/src/runtime/progress-event-coalescer.ts +43 -43
- package/src/runtime/recovery-recipes.ts +74 -74
- package/src/runtime/retry-executor.ts +81 -81
- package/src/runtime/role-permission.ts +39 -39
- package/src/runtime/run-tracker.ts +99 -0
- package/src/runtime/runtime-policy.ts +21 -0
- package/src/runtime/runtime-resolver.ts +94 -91
- package/src/runtime/scheduler.ts +294 -0
- package/src/runtime/semaphore.ts +131 -131
- package/src/runtime/sensitive-paths.ts +92 -92
- package/src/runtime/session-usage.ts +79 -79
- package/src/runtime/settings-store.ts +103 -0
- package/src/runtime/sidechain-output.ts +29 -29
- package/src/runtime/skill-instructions.ts +222 -222
- package/src/runtime/stale-reconciler.ts +198 -189
- package/src/runtime/streaming-output.ts +47 -0
- package/src/runtime/subagent-manager.ts +404 -400
- package/src/runtime/subprocess-tool-registry.ts +67 -67
- package/src/runtime/task-display.ts +38 -38
- package/src/runtime/task-graph-scheduler.ts +122 -122
- package/src/runtime/task-graph.ts +207 -207
- package/src/runtime/task-output-context.ts +177 -177
- package/src/runtime/task-packet.ts +93 -93
- package/src/runtime/task-quality.ts +207 -207
- package/src/runtime/task-runner/capabilities.ts +78 -78
- package/src/runtime/task-runner/live-executor.ts +131 -113
- package/src/runtime/task-runner/progress.ts +119 -119
- package/src/runtime/task-runner/prompt-builder.ts +139 -139
- package/src/runtime/task-runner/prompt-pipeline.ts +64 -64
- package/src/runtime/task-runner/result-utils.ts +14 -14
- package/src/runtime/task-runner/run-projection.ts +103 -103
- package/src/runtime/task-runner/state-helpers.ts +22 -22
- package/src/runtime/task-runner.ts +469 -459
- package/src/runtime/team-runner.ts +693 -945
- package/src/runtime/usage-tracker.ts +71 -0
- package/src/runtime/worker-heartbeat.ts +21 -21
- package/src/runtime/worker-startup.ts +57 -57
- package/src/runtime/workflow-state.ts +187 -187
- package/src/runtime/yield-handler.ts +190 -190
- package/src/schema/config-schema.ts +172 -168
- package/src/schema/team-tool-schema.ts +126 -126
- package/src/schema/validation-types.ts +151 -148
- package/src/skills/discover-skills.ts +67 -67
- package/src/skills/skill-templates.ts +374 -374
- package/src/state/active-run-registry.ts +227 -191
- package/src/state/artifact-store.ts +130 -129
- package/src/state/atomic-write.ts +262 -195
- package/src/state/blob-store.ts +116 -116
- package/src/state/contracts.ts +111 -111
- package/src/state/event-log-rotation.ts +161 -158
- package/src/state/event-log.ts +383 -303
- package/src/state/event-reconstructor.ts +217 -217
- package/src/state/jsonl-writer.ts +82 -82
- package/src/state/locks.ts +146 -146
- package/src/state/mailbox.ts +446 -405
- package/src/state/state-store.ts +364 -351
- package/src/state/task-claims.ts +44 -44
- package/src/state/types.ts +285 -285
- package/src/state/usage.ts +29 -29
- package/src/subagents/async-entry.ts +1 -1
- package/src/subagents/index.ts +3 -3
- package/src/subagents/live/control.ts +1 -1
- package/src/subagents/live/manager.ts +1 -1
- package/src/subagents/live/realtime.ts +1 -1
- package/src/subagents/live/session-runtime.ts +1 -1
- package/src/subagents/manager.ts +1 -1
- package/src/subagents/spawn.ts +1 -1
- package/src/teams/discover-teams.ts +116 -116
- package/src/teams/team-config.ts +27 -27
- package/src/teams/team-serializer.ts +38 -38
- package/src/types/diff.d.ts +18 -18
- package/src/ui/agent-management-overlay.ts +144 -144
- package/src/ui/crew-widget.ts +487 -370
- package/src/ui/dashboard-panes/agents-pane.ts +109 -28
- package/src/ui/dashboard-panes/cancellation-pane.ts +42 -42
- package/src/ui/dashboard-panes/capability-pane.ts +59 -59
- package/src/ui/dashboard-panes/health-pane.ts +30 -30
- package/src/ui/dashboard-panes/mailbox-pane.ts +35 -35
- package/src/ui/dashboard-panes/progress-pane.ts +30 -30
- package/src/ui/dashboard-panes/transcript-pane.ts +10 -10
- package/src/ui/heartbeat-aggregator.ts +63 -63
- package/src/ui/keybinding-map.ts +97 -94
- package/src/ui/live-conversation-overlay.ts +152 -0
- package/src/ui/live-run-sidebar.ts +180 -180
- package/src/ui/mascot.ts +442 -442
- package/src/ui/overlays/agent-picker-overlay.ts +57 -57
- package/src/ui/overlays/confirm-overlay.ts +58 -58
- package/src/ui/overlays/mailbox-compose-overlay.ts +144 -144
- package/src/ui/overlays/mailbox-compose-preview.ts +63 -63
- package/src/ui/overlays/mailbox-detail-overlay.ts +122 -122
- package/src/ui/pi-ui-compat.ts +57 -57
- package/src/ui/powerbar-publisher.ts +221 -197
- package/src/ui/render-scheduler.ts +216 -143
- package/src/ui/run-action-dispatcher.ts +118 -118
- package/src/ui/run-dashboard.ts +526 -464
- package/src/ui/run-event-bus.ts +208 -208
- package/src/ui/run-snapshot-cache.ts +826 -777
- package/src/ui/settings-overlay.ts +721 -0
- package/src/ui/snapshot-types.ts +86 -70
- package/src/ui/theme-adapter.ts +190 -190
- package/src/ui/tool-progress-formatter.ts +89 -0
- package/src/ui/transcript-cache.ts +94 -94
- package/src/ui/transcript-viewer.ts +335 -335
- package/src/utils/conflict-detect.ts +662 -0
- package/src/utils/file-coalescer.ts +86 -86
- package/src/utils/frontmatter.ts +68 -68
- package/src/utils/fs-watch.ts +88 -31
- package/src/utils/gh-protocol.ts +479 -0
- package/src/utils/ids.ts +17 -17
- package/src/utils/incremental-reader.ts +104 -104
- package/src/utils/internal-error.ts +6 -6
- package/src/utils/names.ts +27 -27
- package/src/utils/paths.ts +102 -63
- package/src/utils/redaction.ts +44 -44
- package/src/utils/safe-paths.ts +47 -47
- package/src/utils/scan-cache.ts +136 -136
- package/src/utils/sse-parser.ts +134 -134
- package/src/utils/task-name-generator.ts +337 -337
- package/src/utils/timings.ts +33 -33
- package/src/utils/visual.ts +243 -198
- package/src/workflows/discover-workflows.ts +139 -139
- package/src/workflows/validate-workflow.ts +40 -40
- package/src/workflows/workflow-config.ts +26 -26
- package/src/workflows/workflow-serializer.ts +32 -32
- package/src/worktree/branch-freshness.ts +45 -45
- package/src/worktree/cleanup.ts +75 -75
- package/src/worktree/worktree-manager.ts +188 -188
- package/teams/default.team.md +12 -12
- package/teams/fast-fix.team.md +11 -11
- package/teams/implementation.team.md +18 -18
- package/teams/parallel-research.team.md +14 -14
- package/teams/research.team.md +11 -11
- package/teams/review.team.md +12 -12
- package/tsconfig.json +19 -19
- package/workflows/default.workflow.md +30 -30
- package/workflows/fast-fix.workflow.md +23 -23
- package/workflows/implementation.workflow.md +43 -43
- package/workflows/parallel-research.workflow.md +46 -46
- package/workflows/research.workflow.md +22 -22
- package/workflows/review.workflow.md +30 -30
- package/skills/task-packet/SKILL.md +0 -28
- package/skills/verify-evidence/SKILL.md +0 -27
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
# Research: oh-my-pi v15.0.0 — Tính năng có thể áp dụng vào pi-crew
|
|
2
|
+
|
|
3
|
+
> Date: 2026-05-13
|
|
4
|
+
> Source: `D:/my/my_project/source/oh-my-pi` (v15.0.0)
|
|
5
|
+
> Purpose: Tìm features có thể port vào pi-crew
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Feature: Hashline Engine (`hashline/`)
|
|
10
|
+
|
|
11
|
+
### Mục đích
|
|
12
|
+
Thay thế hoàn toàn hashline cũ bằng engine mới hỗ trợ:
|
|
13
|
+
- Line-level content addressing (hash mỗi dòng)
|
|
14
|
+
- Semantic anchors (không chỉ line number mà hash content)
|
|
15
|
+
- Recovery mode (phục hồi từ crash)
|
|
16
|
+
- Conflict resolution (3-way merge)
|
|
17
|
+
- Streaming diff output
|
|
18
|
+
|
|
19
|
+
### Cách hoạt động
|
|
20
|
+
|
|
21
|
+
**Core types** (`hashline/types.ts`):
|
|
22
|
+
```typescript
|
|
23
|
+
export type Anchor = { line: number; hash: string; contentHint?: string };
|
|
24
|
+
export type HashlineCursor =
|
|
25
|
+
| { kind: "bof" }
|
|
26
|
+
| { kind: "eof" }
|
|
27
|
+
| { kind: "before_anchor"; anchor: Anchor }
|
|
28
|
+
| { kind: "after_anchor"; anchor: Anchor };
|
|
29
|
+
export type HashlineEdit =
|
|
30
|
+
| { kind: "insert"; cursor: HashlineCursor; text: string; lineNum: number; index: number }
|
|
31
|
+
| { kind: "delete"; anchor: Anchor; lineNum: number; index: number; oldAssertion?: string };
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
**Key modules:**
|
|
35
|
+
- `hash.ts` (694→) — Line hashing với bigram index
|
|
36
|
+
- `parser.ts` (192 lines) — Parse hashline input
|
|
37
|
+
- `apply.ts` (716 lines) — Apply edits với validation
|
|
38
|
+
- `recovery.ts` (72 lines) — Recovery từ crash state
|
|
39
|
+
- `execute.ts` (267 lines) — Execute hashline commands
|
|
40
|
+
- `diff.ts` / `diff-preview.ts` — Streaming diff
|
|
41
|
+
|
|
42
|
+
### Potential apply cho pi-crew
|
|
43
|
+
|
|
44
|
+
**Option A — Dùng trực tiếp (nếu oh-my-pi tách hashline thành package riêng):**
|
|
45
|
+
- Pi-crew cần edit files trong worktree
|
|
46
|
+
- Hashline engine có thể giúp detect conflicts khi nhiều agents edit cùng file
|
|
47
|
+
|
|
48
|
+
**Option B — Conflict detection (đã có `conflict-detect.ts` rồi):**
|
|
49
|
+
- Xem feature tiếp theo
|
|
50
|
+
|
|
51
|
+
**Effort: HIGH** — hashline strongly coupled với oh-my-pi internals (ToolSession, LSP batch request, etc.)
|
|
52
|
+
|
|
53
|
+
### Risk/Dependency
|
|
54
|
+
- Requires oh-my-pi package hoặc fork lại
|
|
55
|
+
- Strong dependency on oh-my-pi tool execution model
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## 2. Feature: Conflict Detection & Resolution (`conflict-detect.ts`)
|
|
60
|
+
|
|
61
|
+
### Mục đích
|
|
62
|
+
Detect git merge conflicts (<<<<<<, =======, >>>>>>>) trong file content mà không cần extra I/O. Mỗi conflict block được assign stable id, agent có thể resolve bằng cách write vào `conflict://<id>`.
|
|
63
|
+
|
|
64
|
+
### Cách hoạt động
|
|
65
|
+
|
|
66
|
+
```typescript
|
|
67
|
+
export interface ConflictBlock {
|
|
68
|
+
startLine: number; // 1-indexed line of <<<<<<<
|
|
69
|
+
separatorLine: number; // 1-indexed line of =======
|
|
70
|
+
endLine: number; // 1-indexed line of >>>>>>>
|
|
71
|
+
baseLine?: number; // 1-indexed line of ||||||| (diff3 only)
|
|
72
|
+
oursLabel?: string;
|
|
73
|
+
baseLabel?: string;
|
|
74
|
+
theirsLabel?: string;
|
|
75
|
+
oursLines: string[];
|
|
76
|
+
baseLines?: string[];
|
|
77
|
+
theirsLines: string[];
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// scanConflictLines: scan array of lines (no extra I/O)
|
|
81
|
+
// registerConflict: assign stable id via ConflictHistory
|
|
82
|
+
// resolveConflict: write chosen content via conflict://<id>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Workflow:**
|
|
86
|
+
1. `read` collects lines từ disk
|
|
87
|
+
2. `scanConflictLines` inspects cho `<<<<<<<` / `=======` / `>>>>>>>` markers
|
|
88
|
+
3. Each completed block → `ConflictHistory` (stable id)
|
|
89
|
+
4. Read output trả về kèm footer với conflict ids
|
|
90
|
+
5. Agent gọi `write({ path: "conflict://<id>", content })` để resolve
|
|
91
|
+
|
|
92
|
+
**Key insight:** Marker shape phải strict — column-0, exact prefix length, followed by EOL or single space + label.
|
|
93
|
+
|
|
94
|
+
### Potential apply cho pi-crew
|
|
95
|
+
|
|
96
|
+
**HIGH VALUE cho pi-crew:**
|
|
97
|
+
- Khi nhiều agents edit cùng file trong worktree, có thể xảy ra conflicts
|
|
98
|
+
- Conflict detection giúp agent nhận biết và resolve tự động
|
|
99
|
+
|
|
100
|
+
**Implementation approach:**
|
|
101
|
+
1. Fork `conflict-detect.ts` (license OK — MIT)
|
|
102
|
+
2. Integrate vào pi-crew's file read path
|
|
103
|
+
3. Register conflicts vào `LiveAgentHandle.activity` hoặc artifact store
|
|
104
|
+
4. Provide `conflict://` protocol trong write tool
|
|
105
|
+
5. Add `detect-conflicts` tool cho agents
|
|
106
|
+
|
|
107
|
+
**Effort: MEDIUM** — standalone module, có thể copy + adapt
|
|
108
|
+
|
|
109
|
+
### Risk/Dependency
|
|
110
|
+
- Cần xử lý `conflict://` protocol trong write tool
|
|
111
|
+
- Cần update read tool để detect và report conflicts
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## 3. Feature: ACP Client Bridge (`acp-client-bridge.ts`)
|
|
116
|
+
|
|
117
|
+
### Mục đích
|
|
118
|
+
Bridge giữa oh-my-pi internal ClientBridge interface và ACP (Agent Client Protocol) SDK. Cho phép tools (read/write/bash/edit) route qua client khi client có capabilities.
|
|
119
|
+
|
|
120
|
+
### Cách hoạt động
|
|
121
|
+
|
|
122
|
+
```typescript
|
|
123
|
+
export interface ClientBridgeCapabilities {
|
|
124
|
+
readTextFile: boolean;
|
|
125
|
+
writeTextFile: boolean;
|
|
126
|
+
terminal: boolean;
|
|
127
|
+
requestPermission: boolean;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export interface ClientBridge {
|
|
131
|
+
capabilities: ClientBridgeCapabilities;
|
|
132
|
+
readTextFile?: (params: { path: string; line?: number; limit?: number }) => Promise<string>;
|
|
133
|
+
writeTextFile?: (params: { path: string; content: string }) => Promise<void>;
|
|
134
|
+
terminal?: (params: ClientBridgeCreateTerminalParams) => Promise<ClientBridgeTerminalHandle>;
|
|
135
|
+
requestPermission?: (params: ClientBridgePermissionToolCall) => Promise<ClientBridgePermissionOutcome>;
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**Pattern:** Feature detection → conditional implementation. Nếu client không có capability thì fallback sang default implementation.
|
|
140
|
+
|
|
141
|
+
### Potential apply cho pi-crew
|
|
142
|
+
|
|
143
|
+
**LOW-MEDIUM VALUE:**
|
|
144
|
+
|
|
145
|
+
pi-crew đã có `LiveExtensionBridge` và `LiveAgentControl` — không cần ACP bridge. Tuy nhiên, pattern này hữu ích cho:
|
|
146
|
+
|
|
147
|
+
1. **pi-crew tool permission system** — Có thể dùng pattern này để check permission trước khi cho phép tool execution
|
|
148
|
+
2. **Cross-extension communication** — `ClientBridge` pattern có thể adapt cho `CrossExtensionRPC`
|
|
149
|
+
|
|
150
|
+
**Effort: LOW** — chỉ cần học pattern, không cần port code
|
|
151
|
+
|
|
152
|
+
### Risk/Dependency
|
|
153
|
+
- ACP SDK là proprietary (`@agentclientprotocol/sdk`)
|
|
154
|
+
- Pattern có thể apply không cần SDK
|
|
155
|
+
|
|
156
|
+
---
|
|
157
|
+
|
|
158
|
+
## 4. Feature: Todo Helper (`todo.ts`)
|
|
159
|
+
|
|
160
|
+
### Mục đích
|
|
161
|
+
Slash command helper cho phép agents quản lý todo list trong project. Hỗ trợ subcommands: `done`, `drop`, `rm`, và parsing markdown todo format.
|
|
162
|
+
|
|
163
|
+
### Cách hoạt động
|
|
164
|
+
|
|
165
|
+
**Tokenize approach:**
|
|
166
|
+
```typescript
|
|
167
|
+
// Handle escape sequences, quoted strings, whitespace
|
|
168
|
+
function tokenize(input: string): string[] {
|
|
169
|
+
let current = "";
|
|
170
|
+
let inQuote = false;
|
|
171
|
+
// ... parsing logic
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// Subcommands:
|
|
175
|
+
// /todo done <phase> <task> — mark task done
|
|
176
|
+
// /todo drop <phase> <task> — remove task
|
|
177
|
+
// /todo rm <phase> <task> — alias for drop
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Markdown ↔ Phases conversion:**
|
|
181
|
+
- `markdownToPhases` — Parse markdown todo format
|
|
182
|
+
- `phasesToMarkdown` — Convert back to markdown
|
|
183
|
+
- `getLatestTodoPhasesFromEntries` — Get latest version
|
|
184
|
+
|
|
185
|
+
**Tokenize features:**
|
|
186
|
+
- Quoted strings: `"task with spaces"`
|
|
187
|
+
- Escape sequences: `\<char>`
|
|
188
|
+
- Whitespace splitting
|
|
189
|
+
|
|
190
|
+
### Potential apply cho pi-crew
|
|
191
|
+
|
|
192
|
+
**HIGH VALUE cho pi-crew:**
|
|
193
|
+
|
|
194
|
+
pi-crew có `YieldReminder` và `TaskRunner` — có thể tích hợp todo management:
|
|
195
|
+
|
|
196
|
+
1. **Team task tracking** — Workflow tasks có thể represented as todos
|
|
197
|
+
2. **Yield + Todo integration** — Khi agent yields với todo request, có thể parse và update todo list
|
|
198
|
+
3. **Slash command `/crew todo`** — Management interface cho team tasks
|
|
199
|
+
|
|
200
|
+
**Implementation approach:**
|
|
201
|
+
1. Fork `todo.ts` helper (279 lines)
|
|
202
|
+
2. Integrate vào `CrewTaskRunner` hoặc `YieldHandler`
|
|
203
|
+
3. Add `/crew todo` slash command
|
|
204
|
+
4. Wire vào `TaskDisplay` component
|
|
205
|
+
|
|
206
|
+
**Effort: MEDIUM** — có thể copy module, cần integrate với existing task system
|
|
207
|
+
|
|
208
|
+
### Risk/Dependency
|
|
209
|
+
- Dependency on `todo-write.ts` tool
|
|
210
|
+
- Cần sync với actual task state trong manifest
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## 5. Feature: Compaction Error Types (`compaction/errors.ts`)
|
|
215
|
+
|
|
216
|
+
### Mục đích
|
|
217
|
+
Typed error sentinels cho compaction operations. Dùng `instanceof` discrimination thay vì string matching.
|
|
218
|
+
|
|
219
|
+
### Cách hoạt động
|
|
220
|
+
|
|
221
|
+
```typescript
|
|
222
|
+
export class CompactionCancelledError extends Error {
|
|
223
|
+
readonly name = "CompactionCancelledError" as const;
|
|
224
|
+
constructor(message = "Compaction cancelled") { super(message); }
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export type CompactionOutcome = "ok" | "cancelled" | "failed";
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
**Pattern:**
|
|
231
|
+
- Sentinel class với `name` property readonly
|
|
232
|
+
- Downstream callers dùng `instanceof CompactionCancelledError`
|
|
233
|
+
- Source-agnostic: Esc, extension hook, programmatic abort đều cùng type
|
|
234
|
+
|
|
235
|
+
### Potential apply cho pi-crew
|
|
236
|
+
|
|
237
|
+
**MEDIUM VALUE cho pi-crew:**
|
|
238
|
+
|
|
239
|
+
pi-crew có `YieldResult` và compaction tracking — có thể dùng pattern này:
|
|
240
|
+
|
|
241
|
+
1. **Typed cancellation errors** — `CrewCancelledError`, `CrewTimeoutError`, `CrewDeadletterError`
|
|
242
|
+
2. **Better error discrimination** — Thay vì string matching, dùng `instanceof`
|
|
243
|
+
3. **Error outcome tracking** — `CrewRunOutcome = "ok" | "cancelled" | "failed" | "deadletter"`
|
|
244
|
+
|
|
245
|
+
**Implementation approach:**
|
|
246
|
+
```typescript
|
|
247
|
+
// src/errors/crew-errors.ts
|
|
248
|
+
export class CrewCancelledError extends Error {
|
|
249
|
+
readonly name = "CrewCancelledError" as const;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
export class CrewTimeoutError extends Error {
|
|
253
|
+
readonly name = "CrewTimeoutError" as const;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
export class CrewDeadletterError extends Error {
|
|
257
|
+
readonly name = "CrewDeadletterError" as const;
|
|
258
|
+
constructor(public readonly agentId: string, public readonly reason: string) {
|
|
259
|
+
super(`Agent ${agentId} deadlettered: ${reason}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
**Effort: LOW** — chỉ cần create error classes và replace `instanceof Error` checks
|
|
265
|
+
|
|
266
|
+
### Risk/Dependency
|
|
267
|
+
- None — pure TypeScript, có thể copy pattern
|
|
268
|
+
- Cần audit existing error handling để update
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## 6. Feature: ACP Agent Session (`acp-agent.ts`)
|
|
273
|
+
|
|
274
|
+
### Mục đích
|
|
275
|
+
ACP protocol handler trong oh-my-pi. Mở rộng từ `agent-session.ts` với:
|
|
276
|
+
- Fork sessions (clone session state)
|
|
277
|
+
- Session list/load/resume
|
|
278
|
+
- Model state management
|
|
279
|
+
- MCP server discovery
|
|
280
|
+
|
|
281
|
+
### Cách hoạt động
|
|
282
|
+
|
|
283
|
+
**ACP Protocol types:**
|
|
284
|
+
```typescript
|
|
285
|
+
type NewSessionRequest, ForkSessionRequest, LoadSessionRequest, ResumeSessionRequest
|
|
286
|
+
type SetSessionModelRequest, SetSessionModeRequest
|
|
287
|
+
type SessionInfo, SessionModelState, SessionModeState
|
|
288
|
+
type ClientCapabilities (fs, terminal, permission)
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
**Key capabilities:**
|
|
292
|
+
- `forkSession` — Clone session với same conversation history
|
|
293
|
+
- `listSessions` — Enumerate active sessions
|
|
294
|
+
- `loadSession` / `resumeSession` — Restore previous session
|
|
295
|
+
- `setSessionModel` — Change model mid-session
|
|
296
|
+
|
|
297
|
+
### Potential apply cho pi-crew
|
|
298
|
+
|
|
299
|
+
**HIGH VALUE cho pi-crew:**
|
|
300
|
+
|
|
301
|
+
1. **Fork session** — Trong workflow orchestration, có thể fork một agent session để chạy parallel experiments
|
|
302
|
+
2. **Session resume** — Resume a previous run từ manifest/events
|
|
303
|
+
3. **Model switching** — Change model for specific tasks (e.g., cheap model for exploration, expensive model for final generation)
|
|
304
|
+
|
|
305
|
+
**Current pi-crew state:**
|
|
306
|
+
- pi-crew đã có `ResumeSession` cho team runs (re-spawn child Pi)
|
|
307
|
+
- Nhưng không có in-process session fork
|
|
308
|
+
|
|
309
|
+
**Implementation approach:**
|
|
310
|
+
- `forkLiveAgentSession()` — Clone `LiveAgentHandle` với same conversation
|
|
311
|
+
- Store forked sessions trong `live-agent-manager.ts`
|
|
312
|
+
- Add `fork-session` operation vào `team-tool api`
|
|
313
|
+
|
|
314
|
+
**Effort: HIGH** — cần deep understanding của `LiveSessionHandle` và session state
|
|
315
|
+
|
|
316
|
+
### Risk/Dependency
|
|
317
|
+
- Requires oh-my-pi internals (AgentSession, ToolSession)
|
|
318
|
+
- pi-crew dùng child Pi process — fork có thể không tương thích
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
## 7. Feature: User Metrics (`stats/src/user-metrics.ts`)
|
|
323
|
+
|
|
324
|
+
### Mục đích
|
|
325
|
+
Tracking và aggregation của user behavior metrics: edits, tools usage, model selection, cost, session quality.
|
|
326
|
+
|
|
327
|
+
### Cách hoạt động
|
|
328
|
+
|
|
329
|
+
**Database schema:**
|
|
330
|
+
- Sessions table: session_id, start_time, end_time, model, cost
|
|
331
|
+
- Tool usage: session_id, tool_name, count, duration
|
|
332
|
+
- Edit patterns: session_id, lines_added, lines_removed, files_changed
|
|
333
|
+
- Behavior models: quality score, efficiency score
|
|
334
|
+
|
|
335
|
+
**Analytics:**
|
|
336
|
+
- Behavior chart: edits over time, tool usage distribution
|
|
337
|
+
- Model comparison: cost vs quality per model
|
|
338
|
+
- Session summary: duration, token usage, task completion rate
|
|
339
|
+
|
|
340
|
+
### Potential apply cho pi-crew
|
|
341
|
+
|
|
342
|
+
**MEDIUM VALUE:**
|
|
343
|
+
|
|
344
|
+
pi-crew đã có `UsageTracker` và `MetricsRegistry` — có thể học:
|
|
345
|
+
|
|
346
|
+
1. **Team metrics** — Track team run performance (workflow duration, agent utilization, cost)
|
|
347
|
+
2. **Agent quality scoring** — Rate agent output quality
|
|
348
|
+
3. **Cost tracking** — Per-agent, per-task, per-team cost
|
|
349
|
+
|
|
350
|
+
**Effort: MEDIUM** — Cần design database schema và API
|
|
351
|
+
|
|
352
|
+
### Risk/Dependency
|
|
353
|
+
- SQLite hoặc separate database
|
|
354
|
+
- Privacy implications (storing user behavior data)
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
## 8. Feature: Shell Minimizer (`crates/pi-shell/src/minimizer/`)
|
|
359
|
+
|
|
360
|
+
### Mục đích
|
|
361
|
+
Tự động minimize command output (loại bỏ noise như progress bars, ANSI codes) để LLM đọc được kết quả clean hơn.
|
|
362
|
+
|
|
363
|
+
### Cách hoạt động
|
|
364
|
+
|
|
365
|
+
**100+ TOML config files:**
|
|
366
|
+
- `cargo.toml` — Filter cargo progress output
|
|
367
|
+
- `npm-install.toml` — Filter npm package output
|
|
368
|
+
- `terraform-plan.toml` — Simplify terraform plans
|
|
369
|
+
- etc.
|
|
370
|
+
|
|
371
|
+
**Engine:**
|
|
372
|
+
```rust
|
|
373
|
+
// minimizer/engine.rs
|
|
374
|
+
pub struct Minimizer {
|
|
375
|
+
filters: Vec<Box<dyn Filter>>,
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
// Filter types: line removal, replacement, truncation
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
### Potential apply cho pi-crew
|
|
382
|
+
|
|
383
|
+
**HIGH VALUE cho pi-crew:**
|
|
384
|
+
|
|
385
|
+
pi-crew agents chạy bash commands — output có thể rất noisy. Minimizer giúp:
|
|
386
|
+
- Agent đọc được clean output
|
|
387
|
+
- Giảm context usage
|
|
388
|
+
- Tập trung vào important information
|
|
389
|
+
|
|
390
|
+
**Implementation approach:**
|
|
391
|
+
1. Fork minimizer engine (Rust) hoặc port sang TypeScript
|
|
392
|
+
2. Integrate vào `TaskRunner` bash execution
|
|
393
|
+
3. Auto-detect command type và apply appropriate filter
|
|
394
|
+
|
|
395
|
+
**Effort: HIGH** — Rust code cần rewrite hoặc integration via FFI
|
|
396
|
+
|
|
397
|
+
### Risk/Dependency
|
|
398
|
+
- Rust dependency
|
|
399
|
+
- May not be necessary nếu oh-my-pi tách thành standalone tool
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
## 9. Feature: MCP Helper (`slash-commands/helpers/mcp.ts`)
|
|
404
|
+
|
|
405
|
+
### Mục đích
|
|
406
|
+
Helper cho MCP (Model Context Protocol) slash commands. Quản lý MCP server configuration và tool invocation.
|
|
407
|
+
|
|
408
|
+
### Cách hoạt động
|
|
409
|
+
|
|
410
|
+
532 lines TypeScript. **Key functions:**
|
|
411
|
+
- `resolveMcpServer` — Resolve MCP server config
|
|
412
|
+
- `invokeMcpTool` — Call MCP tool
|
|
413
|
+
- `listMcpResources` — List available resources
|
|
414
|
+
- `mcpServerStatus` — Check server health
|
|
415
|
+
|
|
416
|
+
### Potential apply cho pi-crew
|
|
417
|
+
|
|
418
|
+
**MEDIUM VALUE:**
|
|
419
|
+
|
|
420
|
+
pi-crew đã có `McpProxy` trong `live-extension-bridge.ts` — có thể học thêm:
|
|
421
|
+
1. **MCP server lifecycle** — Start/stop MCP servers per team
|
|
422
|
+
2. **MCP tool routing** — Route MCP calls qua team session
|
|
423
|
+
|
|
424
|
+
**Effort: LOW** — chỉ cần học pattern, không cần port code
|
|
425
|
+
|
|
426
|
+
### Risk/Dependency
|
|
427
|
+
- MCP protocol knowledge required
|
|
428
|
+
- Có thể reuse existing `buildMcpProxyFromSession`
|
|
429
|
+
|
|
430
|
+
---
|
|
431
|
+
|
|
432
|
+
## 10. Feature: Issue-PR Protocol (`internal-urls/issue-pr-protocol.ts`)
|
|
433
|
+
|
|
434
|
+
### Mục đích
|
|
435
|
+
Protocol handler cho `issue://` và `pr://` internal URLs. Cho phép agents interact với GitHub/GitLab issues và PRs qua unified interface.
|
|
436
|
+
|
|
437
|
+
### Cách hoạt động
|
|
438
|
+
|
|
439
|
+
```typescript
|
|
440
|
+
// Handle URLs like:
|
|
441
|
+
// issue://github.com/owner/repo/123
|
|
442
|
+
// pr://github.com/owner/repo/456
|
|
443
|
+
// issue://gitlab.com/owner/repo/789
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
**Operations:**
|
|
447
|
+
- `read` — Get issue/PR content
|
|
448
|
+
- `search` — Search issues/PRs
|
|
449
|
+
- `comment` — Add comment
|
|
450
|
+
- `close` / `reopen` — State transitions
|
|
451
|
+
|
|
452
|
+
### Potential apply cho pi-crew
|
|
453
|
+
|
|
454
|
+
**HIGH VALUE cho pi-crew:**
|
|
455
|
+
|
|
456
|
+
pi-crew workflow agents có thể benefit từ issue/PR integration:
|
|
457
|
+
1. **Task creation** — Create issue từ failed task
|
|
458
|
+
2. **PR review** — Use `pr://` protocol trong review workflow
|
|
459
|
+
3. **Task linking** — Link workflow tasks to issues
|
|
460
|
+
|
|
461
|
+
**Effort: MEDIUM** — Cần port `issue-pr-protocol.ts` (577 lines)
|
|
462
|
+
|
|
463
|
+
### Risk/Dependency
|
|
464
|
+
- GitHub API authentication
|
|
465
|
+
- Complex state machine (open/close/reopen/merge)
|
|
466
|
+
|
|
467
|
+
---
|
|
468
|
+
|
|
469
|
+
## Summary: Recommendations
|
|
470
|
+
|
|
471
|
+
### Tier 1 — High Value, Medium Effort (Ưu tiên cao)
|
|
472
|
+
|
|
473
|
+
| Feature | Why | Effort | Notes |
|
|
474
|
+
|---|---|---|---|
|
|
475
|
+
| **Conflict Detection** | Prevents data loss khi multiple agents edit same file | MEDIUM | Fork `conflict-detect.ts`, add `conflict://` protocol |
|
|
476
|
+
| **Typed Crew Errors** | Better error handling, cleaner code | LOW | Create `CrewCancelledError`, `CrewTimeoutError`, `CrewDeadletterError` |
|
|
477
|
+
| **Todo Integration** | Task tracking cho team workflows | MEDIUM | Fork `todo.ts`, integrate với `TaskRunner` |
|
|
478
|
+
| **Issue-PR Protocol** | Link team tasks với GitHub issues | MEDIUM | Port `issue-pr-protocol.ts` |
|
|
479
|
+
|
|
480
|
+
### Tier 2 — High Value, High Effort (Ưu tiên thấp hơn)
|
|
481
|
+
|
|
482
|
+
| Feature | Why | Effort | Notes |
|
|
483
|
+
|---|---|---|---|
|
|
484
|
+
| **Shell Minimizer** | Clean command output cho agents | HIGH | Rust → TypeScript port hoặc FFI |
|
|
485
|
+
| **ACP Fork Session** | Parallel agent experiments | HIGH | Cần deep `LiveSessionHandle` understanding |
|
|
486
|
+
| **User Metrics** | Team performance analytics | MEDIUM | Design DB schema, build API |
|
|
487
|
+
|
|
488
|
+
### Tier 3 — Low Value (Không ưu tiên)
|
|
489
|
+
|
|
490
|
+
| Feature | Why | Effort |
|
|
491
|
+
|---|---|---|
|
|
492
|
+
| Hashline Engine | Strongly coupled với oh-my-pi | HIGH |
|
|
493
|
+
| ACP Client Bridge | pi-crew đã có `LiveExtensionBridge` | LOW |
|
|
494
|
+
| MCP Helper | pi-crew đã có `McpProxy` | LOW |
|
|
495
|
+
|
|
496
|
+
---
|
|
497
|
+
|
|
498
|
+
## Next Steps
|
|
499
|
+
|
|
500
|
+
1. **Conflict Detection** — Start với porting `conflict-detect.ts` vì nó standalone và high-value
|
|
501
|
+
2. **Typed Errors** — Quick win, chỉ cần create error classes
|
|
502
|
+
3. **Todo Integration** — Long-term, cần integrate với workflow engine
|
|
503
|
+
|
|
504
|
+
## Files cần đọc thêm
|
|
505
|
+
|
|
506
|
+
- `packages/coding-agent/src/tools/conflict-detect.ts` (toàn bộ)
|
|
507
|
+
- `packages/coding-agent/src/tools/todo-write.ts` (dependency của todo.ts)
|
|
508
|
+
- `packages/coding-agent/src/session/agent-session.ts` (phần fork/resume session)
|
|
509
|
+
- `crates/pi-shell/src/minimizer/engine.rs` (nếu muốn port shell minimizer)
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# pi-crew Performance Baseline — 2026-05
|
|
2
|
+
|
|
3
|
+
Date captured: 2026-05-14
|
|
4
|
+
Branch: `perf/baseline-bench`
|
|
5
|
+
Environment:
|
|
6
|
+
- OS: Windows (`win32`)
|
|
7
|
+
- Node: v24.10.0
|
|
8
|
+
- npm: 11.6.1
|
|
9
|
+
- Pi: installed at `C:\Users\baphu\AppData\Roaming\npm\pi.ps1`
|
|
10
|
+
|
|
11
|
+
## How to capture
|
|
12
|
+
|
|
13
|
+
```powershell
|
|
14
|
+
cd pi-crew
|
|
15
|
+
npm install # if node_modules missing
|
|
16
|
+
npm run typecheck
|
|
17
|
+
npm run bench:capture # writes test/bench/baseline.json
|
|
18
|
+
npm run profile:startup # writes .profile/summary.json
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## How to verify against baseline (CI gate)
|
|
22
|
+
|
|
23
|
+
```powershell
|
|
24
|
+
npm run bench
|
|
25
|
+
npm run bench:check # fails if any p95 regresses > 15%
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Override threshold or baseline path:
|
|
29
|
+
|
|
30
|
+
```powershell
|
|
31
|
+
$env:THRESHOLD_PCT = 10 # tighter
|
|
32
|
+
$env:BASELINE = "test/bench/baseline-2026-05.json"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## Bench results (commit 2026-05-14, end of Sprint 1)
|
|
36
|
+
|
|
37
|
+
> Sprint 0 captured the original baseline; Sprint 1 re-captured at the
|
|
38
|
+
> end of the sprint. Subsequent sprint:check gates compare against this
|
|
39
|
+
> table (the JSON in `test/bench/baseline.json`).
|
|
40
|
+
|
|
41
|
+
### register-startup (cold load via child process, 20 iters)
|
|
42
|
+
|
|
43
|
+
| Metric | min | p50 | p95 | p99 | max |
|
|
44
|
+
|---|---|---|---|---|---|
|
|
45
|
+
| import (ms) | 513.76 | 528.15 | 542.49 | 542.49 | 566.58 |
|
|
46
|
+
| register (ms) | 23.32 | 24.27 | 25.49 | 25.49 | 26.45 |
|
|
47
|
+
|
|
48
|
+
### render-flush (200 events / iter, 100 iters)
|
|
49
|
+
|
|
50
|
+
| Metric | min | p50 | p95 | p99 | max |
|
|
51
|
+
|---|---|---|---|---|---|
|
|
52
|
+
| ms | 0.07 | 0.10 | 0.25 | 1.02 | 1.12 |
|
|
53
|
+
|
|
54
|
+
### snapshot-cache (10 tasks, 200 events, 50 iters)
|
|
55
|
+
|
|
56
|
+
| Metric | min | p50 | p95 | p99 | max |
|
|
57
|
+
|---|---|---|---|---|---|
|
|
58
|
+
| cold (ms) | 2.14 | 2.42 | 2.82 | 2.92 | 3.01 |
|
|
59
|
+
| warm (ms) | 2.16 | 2.41 | 2.70 | 2.75 | 3.99 |
|
|
60
|
+
|
|
61
|
+
### Delta vs Sprint-0 baseline
|
|
62
|
+
|
|
63
|
+
| Metric | Sprint 0 | Sprint 1 | Delta |
|
|
64
|
+
|---|---|---|---|
|
|
65
|
+
| register-startup.import.p95 | 655.39 | 542.49 | **−17.2 %** |
|
|
66
|
+
| register-startup.register.p95 | 27.51 | 25.49 | **−7.3 %** |
|
|
67
|
+
| render-flush.p95 | 0.36 | 0.25 | **−30.6 %** |
|
|
68
|
+
| snapshot-cache.cold.p95 | 3.06 | 2.82 | **−7.8 %** |
|
|
69
|
+
| snapshot-cache.warm.p95 | 3.06 | 2.70 | **−11.8 %** |
|
|
70
|
+
|
|
71
|
+
## Profile-startup (5 iters)
|
|
72
|
+
|
|
73
|
+
| Metric | Value |
|
|
74
|
+
|---|---|
|
|
75
|
+
| importMs | 609.48 |
|
|
76
|
+
| registerMs.p50 | 6.40 |
|
|
77
|
+
| registerMs.p95 | 9.02 |
|
|
78
|
+
| registerMs.max | 30.98 |
|
|
79
|
+
|
|
80
|
+
CPU profile: `.profile/startup-2026-05-14T14-38-20-180Z.cpuprofile` (open in Chrome DevTools → Performance → Load profile).
|
|
81
|
+
|
|
82
|
+
> `registerMs` thấp hơn bench register-startup vì profile chạy 5 iter trong cùng một process (module cache nóng sau iter 1). Bench `register-startup` mới phản ánh cold-start thực.
|
|
83
|
+
|
|
84
|
+
## Sprint targets (so với baseline trên)
|
|
85
|
+
|
|
86
|
+
| Metric | Baseline | Target sau khi xong toàn bộ kế hoạch | Sprint kỳ vọng |
|
|
87
|
+
|---|---|---|---|
|
|
88
|
+
| register-startup.import.p95 | 655 ms | ≤ 400 ms (lazy) / ≤ 200 ms (bundled) | 2 / 5 |
|
|
89
|
+
| register-startup.register.p95 | 27.5 ms | ≤ 25 ms (giữ nguyên) | — |
|
|
90
|
+
| render-flush.p95 | 0.36 ms | ≤ 0.5 ms (giữ nguyên) | — |
|
|
91
|
+
| snapshot-cache.cold.p95 | 3.06 ms | ≤ 2.1 ms (-30%) | 1, 2 |
|
|
92
|
+
| snapshot-cache.warm.p95 | 3.06 ms | ≤ 1.5 ms (-50%) | 1, 2 |
|
|
93
|
+
| dashboard FPS khi run đang chạy | n/a | +50% | 3 |
|
|
94
|
+
| events.jsonl tail 32 KB parse p95 | n/a | < 5 ms | 2 |
|
|
95
|
+
| cancel round-trip | n/a | < 200 ms | 4 |
|
|
96
|
+
|
|
97
|
+
## Files committed for the gate
|
|
98
|
+
|
|
99
|
+
- `scripts/profile-startup.mjs` — CPU profile harness.
|
|
100
|
+
- `scripts/run-bench.mjs` — run all benches, collect to `results.json`.
|
|
101
|
+
- `scripts/bench-check.mjs` — gate; fails on > 15 % regression.
|
|
102
|
+
- `test/bench/register-startup.bench.ts`
|
|
103
|
+
- `test/bench/render-flush.bench.ts`
|
|
104
|
+
- `test/bench/snapshot-cache.bench.ts`
|
|
105
|
+
- `test/bench/baseline.json` — committed.
|
|
106
|
+
- `package.json` scripts: `bench`, `bench:check`, `bench:capture`, `profile:startup`.
|
|
107
|
+
- `.gitignore`: `.profile/`, `test/bench/results.json`, `*.cpuprofile`.
|
|
108
|
+
|
|
109
|
+
## Caveats
|
|
110
|
+
|
|
111
|
+
- Baseline được ghi trên 1 máy Windows duy nhất. Các máy khác có CPU/disk khác nhau sẽ ra số khác. Khi cần re-baseline (Node major bump, OS upgrade, máy CI khác), copy `results.json → baseline.json` và viết file mới `baseline-<date>.md`.
|
|
112
|
+
- `register-startup` bench tốn ~13 s (20 iter × 600 ms); CI nên giữ. Local có thể `BENCH_ITERS=5` để debug nhanh.
|
|
113
|
+
- Bench không chạy trong `npm test` để giữ test suite nhanh; trigger riêng qua `npm run bench` hoặc CI step riêng.
|