pi-crew 0.5.2 → 0.5.5

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 (80) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/docs/bugs/cross-session-notification-leakage.md +82 -0
  3. package/docs/coding-agent-optimization.md +268 -0
  4. package/docs/deep-review-report.md +384 -0
  5. package/docs/distillation/cybersecurity-patterns.md +294 -0
  6. package/docs/migration-v0.4-v0.5.md +191 -0
  7. package/docs/optimization-plan.md +642 -0
  8. package/docs/pi-mono-opportunities.md +969 -0
  9. package/docs/pi-mono-review.md +291 -0
  10. package/docs/skills/REFERENCE.md +144 -0
  11. package/package.json +7 -6
  12. package/skills/artifact-analysis-loop/SKILL.md +302 -0
  13. package/skills/async-worker-recovery/SKILL.md +19 -1
  14. package/skills/child-pi-spawning/SKILL.md +19 -6
  15. package/skills/context-artifact-hygiene/SKILL.md +19 -2
  16. package/skills/delegation-patterns/SKILL.md +68 -3
  17. package/skills/detection-pipeline-design/SKILL.md +285 -0
  18. package/skills/event-log-tracing/SKILL.md +20 -6
  19. package/skills/git-master/SKILL.md +20 -6
  20. package/skills/hunting-investigation-loop/SKILL.md +401 -0
  21. package/skills/incident-playbook-construction/SKILL.md +383 -0
  22. package/skills/live-agent-lifecycle/SKILL.md +20 -6
  23. package/skills/mailbox-interactive/SKILL.md +19 -6
  24. package/skills/model-routing-context/SKILL.md +19 -1
  25. package/skills/multi-perspective-review/SKILL.md +19 -4
  26. package/skills/observability-reliability/SKILL.md +19 -2
  27. package/skills/orchestration/SKILL.md +20 -2
  28. package/skills/ownership-session-security/SKILL.md +20 -2
  29. package/skills/pi-extension-lifecycle/SKILL.md +20 -2
  30. package/skills/post-mortem/SKILL.md +7 -2
  31. package/skills/read-only-explorer/SKILL.md +20 -6
  32. package/skills/requirements-to-task-packet/SKILL.md +23 -3
  33. package/skills/resource-discovery-config/SKILL.md +20 -2
  34. package/skills/runtime-state-reader/SKILL.md +20 -2
  35. package/skills/safe-bash/SKILL.md +21 -6
  36. package/skills/scrutinize/SKILL.md +20 -2
  37. package/skills/secure-agent-orchestration-review/SKILL.md +29 -2
  38. package/skills/security-review/SKILL.md +560 -0
  39. package/skills/state-mutation-locking/SKILL.md +22 -2
  40. package/skills/systematic-debugging/SKILL.md +8 -6
  41. package/skills/threat-hypothesis-framework/SKILL.md +175 -0
  42. package/skills/ui-render-performance/SKILL.md +20 -2
  43. package/skills/verification-before-done/SKILL.md +17 -2
  44. package/skills/widget-rendering/SKILL.md +21 -6
  45. package/skills/workspace-isolation/SKILL.md +20 -6
  46. package/skills/worktree-isolation/SKILL.md +20 -6
  47. package/src/agents/agent-config.ts +40 -1
  48. package/src/config/config.ts +22 -5
  49. package/src/config/role-tools.ts +82 -0
  50. package/src/config/types.ts +4 -0
  51. package/src/extension/crew-cleanup.ts +114 -0
  52. package/src/extension/register.ts +15 -3
  53. package/src/extension/team-tool/run.ts +7 -7
  54. package/src/observability/event-bus.ts +60 -0
  55. package/src/runtime/background-runner.ts +8 -2
  56. package/src/runtime/child-pi.ts +122 -34
  57. package/src/runtime/crew-agent-runtime.ts +1 -0
  58. package/src/runtime/foreground-control.ts +87 -17
  59. package/src/runtime/pi-args.ts +11 -1
  60. package/src/runtime/pi-json-output.ts +31 -0
  61. package/src/runtime/progress-tracker.ts +124 -0
  62. package/src/runtime/skill-effectiveness.ts +473 -0
  63. package/src/runtime/skill-instructions.ts +37 -3
  64. package/src/runtime/task-runner.ts +91 -17
  65. package/src/runtime/team-runner.ts +11 -11
  66. package/src/runtime/tool-progress.ts +10 -3
  67. package/src/runtime/verification-gates.ts +367 -0
  68. package/src/schema/team-tool-schema.ts +7 -0
  69. package/src/state/decision-ledger.ts +92 -43
  70. package/src/state/event-log.ts +136 -10
  71. package/src/state/hook-instinct-bridge.ts +5 -5
  72. package/src/state/state-store.ts +3 -1
  73. package/src/state/types.ts +4 -0
  74. package/src/types/new-api-types.ts +34 -0
  75. package/src/ui/agent-management-overlay.ts +5 -1
  76. package/src/ui/crew-widget.ts +29 -15
  77. package/src/ui/powerbar-publisher.ts +100 -7
  78. package/src/ui/tool-render.ts +15 -15
  79. package/src/utils/session-utils.ts +52 -0
  80. package/src/worktree/worktree-manager.ts +32 -13
@@ -0,0 +1,291 @@
1
+ # pi-mono Review: Full May 2026 Analysis
2
+
3
+ **Date:** 2026-05-28
4
+ **Reviewed:** Direct source reading of `packages/agent/`, `packages/ai/`, `packages/coding-agent/`
5
+ **Source:** `origin/main` (up to date)
6
+
7
+ > **Focused coding-agent analysis:** See [`docs/coding-agent-optimization.md`](./coding-agent-optimization.md) for actionable optimization opportunities for pi-crew.
8
+
9
+ ---
10
+
11
+ ## Executive Summary
12
+
13
+ **No breaking changes found.** The entire May refactor is additive or internal. Both `Agent` (legacy harness) and `AgentHarness` (new harness) coexist. pi-crew's usage of the `Agent` class via `child-pi.ts` spawning is **fully compatible**.
14
+
15
+ ---
16
+
17
+ ## 1. Architecture: Two Harnesses Coexist
18
+
19
+ ### Legacy Harness: `Agent` class (`packages/agent/src/agent.ts`)
20
+
21
+ ```typescript
22
+ // Still the primary harness used by coding-agent
23
+ export class Agent {
24
+ async prompt(input: string | AgentMessage | AgentMessage[], images?: ImageContent[]): Promise<void>
25
+ async abort(): void
26
+ subscribe(listener: (event: AgentEvent, signal: AbortSignal) => void): () => void
27
+ // ... existing API unchanged
28
+ }
29
+ ```
30
+
31
+ This is what pi-crew's `child-pi.ts` spawns — **no breaking changes**.
32
+
33
+ ### New Harness: `AgentHarness` class (`packages/agent/src/harness/agent-harness.ts`)
34
+
35
+ ```typescript
36
+ // New harness, built on top of runAgentLoop, with richer APIs
37
+ export class AgentHarness {
38
+ async prompt(text: string, options?: AgentHarnessPromptOptions): Promise<AssistantMessage>
39
+ async steer(text: string): Promise<void>
40
+ async setModel(model: Model<any>): Promise<void>
41
+ async setThinkingLevel(level: ThinkingLevel): Promise<void>
42
+ async setResources(resources: AgentHarnessResources): Promise<void>
43
+ async navigateTree(options: NavigateTreeOptions): Promise<NavigateTreeResult>
44
+ async abort(): Promise<AbortResult>
45
+ }
46
+ ```
47
+
48
+ **Both use the same `runAgentLoop`** internally. `AgentHarness` wraps it with richer state management, resource loading, and session persistence.
49
+
50
+ ### Session System (`packages/agent/src/harness/session/`)
51
+
52
+ New formal session infrastructure (1,008 lines across 7 files):
53
+
54
+ ```typescript
55
+ // Session storage with JSONL backend
56
+ SessionStorage<TMetadata> {
57
+ getMetadata(), setLeafId(), createEntryId(), appendEntry(),
58
+ getEntry(), findEntries(), getLabel(), getPathToRoot(), getEntries()
59
+ }
60
+
61
+ // Session repo with fork/list/delete
62
+ SessionRepo<TMetadata, TCreateOptions, TListOptions> {
63
+ create(), open(), list(), delete(), fork()
64
+ }
65
+ ```
66
+
67
+ **pi-crew's event log** (`src/state/event-log.ts`) uses its own JSONL format — no conflict.
68
+
69
+ ---
70
+
71
+ ## 2. New Hooks (AgentHarness)
72
+
73
+ ### `context` hook
74
+
75
+ Fires before each LLM call to allow context transformation:
76
+
77
+ ```typescript
78
+ // agent-harness.ts line ~413
79
+ const result = await this.emitHook({ type: "context", messages: [...messages] });
80
+ ```
81
+
82
+ **pi-crew relevance:** Currently pi-crew uses `before_agent_start` only. The `context` hook would allow per-turn context injection (e.g., pruning, external context injection).
83
+
84
+ ### `resources_update` hook
85
+
86
+ Fires when resources (skills/prompt templates) change mid-run:
87
+
88
+ ```typescript
89
+ type: "resources_update";
90
+ resources: AgentHarnessResources;
91
+ previousResources: AgentHarnessResources;
92
+ ```
93
+
94
+ **pi-crew relevance:** Useful for dynamic skill loading during task execution.
95
+
96
+ ### `model_select` / `thinking_level_select` hooks
97
+
98
+ Fire when the model or thinking level changes mid-run.
99
+
100
+ **pi-crew relevance:** Supports the `prepareNextTurn` dynamic model switching pattern.
101
+
102
+ ---
103
+
104
+ ## 3. New `prepareNextTurn` API
105
+
106
+ ```typescript
107
+ // packages/agent/src/types.ts
108
+ prepareNextTurn?: (
109
+ context: PrepareNextTurnContext,
110
+ ) => AgentLoopTurnUpdate | undefined | Promise<AgentLoopTurnUpdate | undefined>;
111
+
112
+ interface AgentLoopTurnUpdate {
113
+ context?: AgentContext; // replacement context
114
+ model?: Model<any>; // new model for next turn
115
+ thinkingLevel?: ThinkingLevel; // new thinking level
116
+ }
117
+ ```
118
+
119
+ Called after each `turn_end` and before deciding whether to start another LLM call. Enables **dynamic model routing** mid-run without restarting.
120
+
121
+ **pi-crew relevance:** Process-per-task model means each task is already isolated. No use for `prepareNextTurn`. However, this could enable a future single-process execution mode.
122
+
123
+ ---
124
+
125
+ ## 4. New `shouldStopAfterTurn` API
126
+
127
+ ```typescript
128
+ shouldStopAfterTurn?: (context: ShouldStopAfterTurnContext) => boolean | Promise<boolean>;
129
+ ```
130
+
131
+ Called after each turn completes. Return `true` to gracefully stop after the current turn (without starting another LLM call).
132
+
133
+ **pi-crew relevance:** Could be used to implement turn-count-based task completion (instead of relying on `maxTurns` in child-pi).
134
+
135
+ ---
136
+
137
+ ## 5. New `transformContext` API
138
+
139
+ ```typescript
140
+ transformContext?: (messages: AgentMessage[], signal?: AbortSignal) => Promise<AgentMessage[]>;
141
+ ```
142
+
143
+ Applied to context before `convertToLlm` at each turn. For context window management or external context injection.
144
+
145
+ **pi-crew relevance:** Could replace the current approach of rewriting prompts in `before_agent_start` — instead, transform the full context between turns.
146
+
147
+ ---
148
+
149
+ ## 6. Result Type System
150
+
151
+ ```typescript
152
+ // packages/agent/src/harness/types.ts
153
+ export type Result<TValue, TError> =
154
+ | { ok: true; value: TValue }
155
+ | { ok: false; error: TError };
156
+
157
+ export function ok<TValue, TError>(value: TValue): Result<TValue, TError>
158
+ export function err<TValue, TError>(error: TError): Result<TValue, TError>
159
+ export function getOrThrow<TValue, TError>(result: Result<TValue, TError>): TValue
160
+ ```
161
+
162
+ Formal result type for all harness filesystem and execution operations. Prevents thrown exceptions for expected failures.
163
+
164
+ **pi-crew relevance:** No current use. If pi-crew ever uses `AgentHarness` directly, this would be the expected error-handling pattern.
165
+
166
+ ---
167
+
168
+ ## 7. Image Generation API (`@earendil-works/pi-ai`)
169
+
170
+ ```typescript
171
+ // packages/ai/src/images.ts
172
+ export async function generateImages<TApi extends ImagesApi>(
173
+ model: ImagesModel<TApi>,
174
+ context: ImagesGenerationContext,
175
+ options?: ImagesGenerationOptions
176
+ ): Promise<ImageResult[]>
177
+ ```
178
+
179
+ New image generation capability. Providers: OpenRouter images, Flux, DALL-E, etc.
180
+
181
+ **pi-crew relevance:** Tasks can now use image generation. No API change needed — pi handles it.
182
+
183
+ ---
184
+
185
+ ## 8. Explicit Session ID Naming
186
+
187
+ ```typescript
188
+ // packages/coding-agent/src/core/session-manager.ts
189
+ this.sessionId = options?.id ?? createSessionId();
190
+ ```
191
+
192
+ Users can now specify a custom session ID on startup.
193
+
194
+ **pi-crew relevance:** Could enhance `inheritContext` feature — pass a named session instead of raw JSON.
195
+
196
+ ---
197
+
198
+ ## 9. Stream Options Patch System
199
+
200
+ ```typescript
201
+ // AgentHarnessStreamOptionsPatch — returned by before_provider_request hooks
202
+ export interface AgentHarnessStreamOptionsPatch {
203
+ transport?: Transport;
204
+ timeoutMs?: number;
205
+ maxRetries?: number;
206
+ headers?: Record<string, string | undefined>; // undefined = delete
207
+ metadata?: Record<string, unknown | undefined>;
208
+ }
209
+ ```
210
+
211
+ Hooks can now **modify stream options** before each LLM call (per-turn patching).
212
+
213
+ **pi-crew relevance:** Could enable per-task timeout/retries via hooks instead of process-level limits.
214
+
215
+ ---
216
+
217
+ ## 10. Bug Fixes Affecting pi-crew
218
+
219
+ ### Tool Preflight Abort (`b9448276`)
220
+
221
+ **Before:** When a run was aborted, sibling tool calls kept preparing in parallel.
222
+
223
+ **After:** `signal?.aborted` check breaks the tool execution loop immediately.
224
+
225
+ ```typescript
226
+ // agent-loop.ts
227
+ if (signal?.aborted) {
228
+ break; // Stop preparing sibling tool calls
229
+ }
230
+ ```
231
+
232
+ **pi-crew relevance:** When pi-crew calls `cancel` on a running task, pi now correctly stops tool preflight immediately. Previously, pending tool calls could continue executing even after cancellation.
233
+
234
+ ### RPC Child Process Exit (`e007fcd0`)
235
+
236
+ RPC now rejects pending requests when child process exits. Affects `child-pi.ts` communication.
237
+
238
+ ---
239
+
240
+ ## 11. AgentHarness Key Source Files
241
+
242
+ | File | Lines | Purpose |
243
+ |------|-------|---------|
244
+ | `harness/agent-harness.ts` | ~950 | Main orchestrator |
245
+ | `harness/types.ts` | ~817 | All types, hooks, error codes |
246
+ | `harness/session/session.ts` | 252 | Session abstraction |
247
+ | `harness/session/jsonl-storage.ts` | 293 | JSONL persistence |
248
+ | `harness/session/session-repo.ts` | 231 | Session CRUD |
249
+ | `harness/skills.ts` | 375 | Skill loading + formatting |
250
+ | `harness/prompt-templates.ts` | 267 | Prompt template processing |
251
+ | `harness/compaction/compaction.ts` | 842 | Transcript compaction |
252
+ | `harness/compaction/branch-summarization.ts` | 355 | Branch summarization |
253
+ | `harness/env/nodejs.ts` | 370+ | Node.js execution environment |
254
+ | `harness/execution-env.ts` | Abstract | FS + shell abstraction |
255
+
256
+ ---
257
+
258
+ ## 12. Opportunities for pi-crew Enhancement
259
+
260
+ > **Full plans:** [`docs/pi-mono-opportunities.md`](./pi-mono-opportunities.md)
261
+
262
+ ### High Priority
263
+
264
+ **BM25 Semantic Reranking** — Fix `recommendTeam()` keyword failures by integrating existing BM25 search.
265
+
266
+ ### Medium Priority
267
+
268
+ **Extended Hook Phases** — `before_turn`/`after_turn` hooks using existing `turn_end` tracking in `child-pi.ts`.
269
+
270
+ **Hook Lifecycle Tests** — Cover untested hooks: `task_result`, `before_retry`, `before_publish`, `session_before_switch`, `run_recovery`.
271
+
272
+ ### Future (6+ months)
273
+
274
+ **AgentHarness Migration** — When `AgentHarness` stabilizes (removes `Agent` dependency), pi-crew could replace `child-pi.ts` spawning with harness-based in-process execution. **Not a current concern.**
275
+
276
+ ---
277
+
278
+ ## 13. Summary
279
+
280
+ | Check | Result |
281
+ |-------|--------|
282
+ | Breaking API changes | **None** |
283
+ | `Agent` class API | **Unchanged** — pi-crew compatible |
284
+ | `AgentHarness` class | **New** — additive, not used by pi-crew |
285
+ | New hooks | `context`, `resources_update`, `model_select`, `thinking_level_select` |
286
+ | New lifecycle APIs | `prepareNextTurn`, `shouldStopAfterTurn`, `transformContext` |
287
+ | New providers/features | Together AI, Xiaomi MiMo, Image generation, Codex websocket |
288
+ | Bug fixes affecting pi-crew | Tool preflight abort, RPC child exit |
289
+ | Migration path | AgentHarness (6+ months out, not urgent) |
290
+
291
+ **Conclusion:** pi-crew is fully compatible with the latest pi source. The `AgentHarness` refactor is substantial but additive — it coexists with the legacy `Agent` class that pi-crew uses. Focus on pi-crew-specific enhancements. Monitor `AgentHarness` stabilization for future migration.
@@ -0,0 +1,144 @@
1
+ # pi-crew Skills Reference
2
+
3
+ ## Skill Chains
4
+
5
+ ### Bug Investigation
6
+
7
+ ```
8
+ systematic-debugging (4 phases with refuse gate)
9
+
10
+ verification-before-done (evidence before claim)
11
+
12
+ post-mortem (RCA documentation)
13
+ ```
14
+
15
+ ### Multi-phase Work
16
+
17
+ ```
18
+ orchestration (phase coordination)
19
+
20
+ delegation-patterns (task splitting)
21
+
22
+ verification-before-done (after each phase)
23
+ ```
24
+
25
+ ### Code Review (Quick)
26
+
27
+ ```
28
+ scrutinize (outsider perspective + simpler alternative)
29
+ ```
30
+
31
+ ### Code Review (Deep)
32
+
33
+ ```
34
+ scrutinize (outsider perspective)
35
+
36
+ multi-perspective-review (8-pass deep review)
37
+
38
+ secure-agent-orchestration-review (security focus)
39
+ ```
40
+
41
+ ---
42
+
43
+ ## When to Invoke
44
+
45
+ | Situation | Skill |
46
+ |-----------|-------|
47
+ | Bug / test failure / crash | `systematic-debugging` |
48
+ | Before claiming done | `verification-before-done` |
49
+ | Code review (quick) | `scrutinize` |
50
+ | Code review (deep) | `multi-perspective-review` |
51
+ | Task delegation | `delegation-patterns` |
52
+ | Complex multi-phase work | `orchestration` |
53
+ | After bug is fixed | `post-mortem` |
54
+ | Security review | `security-review` |
55
+ | Workspace safety | `workspace-isolation` |
56
+ | Bash safety | `safe-bash` |
57
+ | Hypothesis-driven investigation | `threat-hypothesis-framework` |
58
+ | Active threat hunting | `hunting-investigation-loop` |
59
+ | Artifact examination | `artifact-analysis-loop` |
60
+ | Building response procedures | `incident-playbook-construction` |
61
+ | Designing detection pipelines | `detection-pipeline-design` |
62
+
63
+ ---
64
+
65
+ ## Skills Inventory
66
+
67
+ ### Core Discipline
68
+
69
+ | Skill | Description |
70
+ |-------|-------------|
71
+ | `systematic-debugging` | Four-phase debugging with refuse gates, falsify-first discipline |
72
+ | `verification-before-done` | Evidence before claims |
73
+ | `orchestration` | Multi-phase coordination, 8 rules including "respawn not absorb" |
74
+
75
+ ### Security
76
+
77
+ | Skill | Description |
78
+ |-------|-------------|
79
+ | `security-review` | Security review with audit and detection authoring |
80
+ | `threat-hypothesis-framework` | Hypothesis-driven investigation |
81
+ | `hunting-investigation-loop` | Active threat hunting with validation |
82
+ | `artifact-analysis-loop` | Artifact analysis with IOC extraction |
83
+ | `incident-playbook-construction` | Playbook building with steps, decisions, SLAs |
84
+ | `detection-pipeline-design` | Data pipeline design for security monitoring |
85
+
86
+ ### Documentation
87
+
88
+ | Skill | Description |
89
+ |-------|-------------|
90
+ | `post-mortem` | Engineering RCA record |
91
+
92
+ ### Delegation
93
+
94
+ | Skill | Description |
95
+ |-------|-------------|
96
+ | `delegation-patterns` | Task splitting patterns |
97
+ | `requirements-to-task-packet` | Task packet creation |
98
+
99
+ ### Runtime/Safety
100
+
101
+ | Skill | Description |
102
+ |-------|-------------|
103
+ | `workspace-isolation` | Security boundary enforcement |
104
+ | `worktree-isolation` | Git worktree safety |
105
+ | `safe-bash` | Bash command safety |
106
+ | `state-mutation-locking` | State mutation protection |
107
+
108
+ ### Observability
109
+
110
+ | Skill | Description |
111
+ |-------|-------------|
112
+ | `event-log-tracing` | JSONL event log analysis |
113
+ | `runtime-state-reader` | Runtime state inspection |
114
+ | `observability-reliability` | Reliability patterns |
115
+
116
+ ---
117
+
118
+ ## Anti-patterns
119
+
120
+ | Anti-pattern | Skill | Rule |
121
+ |--------------|-------|------|
122
+ | Proposing fix before reproducing | `systematic-debugging` | Refuse Gate |
123
+ | Running proof before disproof | `systematic-debugging` | Phase 3 |
124
+ | Claiming "tests pass" without fresh run | `verification-before-done` | Gate Function |
125
+ | Reviewing diff-local without tracing path | `scrutinize` | Trace step |
126
+ | Skipping simpler-alternative pass | `multi-perspective-review` | Pre-review |
127
+ | Editing files yourself as orchestrator | `orchestration` | Rule 1 |
128
+ | Dispatching serially when parallel possible | `orchestration` | Rule 3 |
129
+ | Committing a red tree | `orchestration` | Rule 6 |
130
+ | Absorbing subagent's broken work | `orchestration` | Rule 7 |
131
+ | Rubber-stamp review | `multi-perspective-review` | Rules |
132
+
133
+ ---
134
+
135
+ ## Key Enforcement Patterns (from 9arm)
136
+
137
+ | Pattern | Implemented In |
138
+ |---------|---------------|
139
+ | **Refuse Gate** | `systematic-debugging` |
140
+ | **Recite Ritual** | `systematic-debugging` (Invocation) |
141
+ | **Falsify Before Proof** | `systematic-debugging` (Phase 3) |
142
+ | **Simpler Alternative Pass** | `scrutinize`, `multi-perspective-review` |
143
+ | **Required Inputs Gate** | `post-mortem` |
144
+ | **Respawn Not Absorb** | `orchestration` (Rule 7) |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-crew",
3
- "version": "0.5.2",
3
+ "version": "0.5.5",
4
4
  "description": "Pi extension for coordinated AI teams, workflows, worktrees, and async task orchestration",
5
5
  "author": "baphuongna",
6
6
  "license": "MIT",
@@ -48,7 +48,7 @@
48
48
  "check:lazy-imports": "node scripts/check-lazy-imports.mjs",
49
49
  "typecheck": "tsc --noEmit && node --experimental-strip-types -e \"await import('./index.ts'); console.log('strip-types import ok')\"",
50
50
  "test": "npm run test:unit && npm run test:integration",
51
- "test:unit": "node --experimental-strip-types --test --test-concurrency=4 --test-timeout=30000 --test-force-exit test/unit/*.test.ts",
51
+ "test:unit": "node --experimental-strip-types --test --test-concurrency=4 --test-timeout=180000 --test-force-exit test/unit/*.test.ts",
52
52
  "test:watch": "node --experimental-strip-types --watch --test --test-concurrency=4 --test-timeout=30000 --test-force-exit test/unit/*.test.ts",
53
53
  "test:integration": "node --experimental-strip-types --test --test-concurrency=1 --test-timeout=120000 test/integration/*.test.ts",
54
54
  "build:bundle": "node scripts/build-bundle.mjs",
@@ -80,6 +80,7 @@
80
80
  },
81
81
  "dependencies": {
82
82
  "@sinclair/typebox": "^0.34.49",
83
+ "ajv": "^8.20.0",
83
84
  "cli-highlight": "^2.1.11",
84
85
  "diff": "^5.2.0",
85
86
  "jiti": "^2.6.1",
@@ -87,10 +88,10 @@
87
88
  },
88
89
  "devDependencies": {
89
90
  "@biomejs/biome": "^2.4.15",
90
- "@earendil-works/pi-agent-core": "^0.75.5",
91
- "@earendil-works/pi-ai": "^0.75.5",
92
- "@earendil-works/pi-coding-agent": "^0.75.5",
93
- "@earendil-works/pi-tui": "^0.75.5",
91
+ "@earendil-works/pi-agent-core": "^0.77.0",
92
+ "@earendil-works/pi-ai": "^0.77.0",
93
+ "@earendil-works/pi-coding-agent": "^0.77.0",
94
+ "@earendil-works/pi-tui": "^0.77.0",
94
95
  "esbuild": "^0.28.0",
95
96
  "typescript": "^5.9.3"
96
97
  },