pi-crew 0.9.16 → 0.9.17

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 (432) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/README.md +19 -0
  3. package/dist/build-meta.json +21790 -0
  4. package/dist/index.mjs +83070 -0
  5. package/dist/index.mjs.map +7 -0
  6. package/docs/A +358 -0
  7. package/docs/M-A +357 -0
  8. package/docs/REVIEW-FINDINGS-2026-06 +357 -0
  9. package/docs/Y +357 -0
  10. package/docs/a +357 -0
  11. package/docs/aA +358 -0
  12. package/docs/archive/README.md +91 -0
  13. package/docs/patterns/command-agent-skill.md +1 -1
  14. package/docs/skills/REFERENCE.md +0 -17
  15. package/docs//303/242mmaAAA/303/242 +357 -0
  16. package/index.bundle.ts +25 -0
  17. package/index.ts +95 -4
  18. package/package.json +15 -4
  19. package/skills/iterative-audit/SKILL.md +0 -1
  20. package/skills/widget-rendering/SKILL.md +17 -0
  21. package/src/adapters/claude-adapter.ts +1 -3
  22. package/src/adapters/export-util.ts +16 -16
  23. package/src/adapters/index.ts +5 -5
  24. package/src/agents/agent-config.ts +20 -14
  25. package/src/agents/agent-serializer.ts +1 -1
  26. package/src/agents/discover-agents.ts +83 -39
  27. package/src/benchmark/benchmark-runner.ts +51 -51
  28. package/src/benchmark/feedback-loop.ts +1 -1
  29. package/src/config/config.ts +166 -590
  30. package/src/config/defaults.ts +28 -2
  31. package/src/config/drift-detector.ts +11 -14
  32. package/src/config/markers.ts +201 -203
  33. package/src/config/resilient-parser.ts +14 -6
  34. package/src/config/role-tools.ts +3 -3
  35. package/src/config/suggestions.ts +5 -12
  36. package/src/config/types.ts +9 -25
  37. package/src/errors.ts +151 -157
  38. package/src/extension/action-suggestions.ts +54 -9
  39. package/src/extension/async-notifier.ts +43 -13
  40. package/src/extension/autonomous-policy.ts +77 -37
  41. package/src/extension/command-completions.ts +9 -8
  42. package/src/extension/context-status-injection.ts +14 -12
  43. package/src/extension/crew-autocomplete.ts +8 -16
  44. package/src/extension/crew-cleanup.ts +2 -1
  45. package/src/extension/crew-shortcuts.ts +9 -6
  46. package/src/extension/cross-extension-rpc.ts +136 -42
  47. package/src/extension/help.ts +1 -1
  48. package/src/extension/import-index.ts +10 -5
  49. package/src/extension/knowledge-injection.ts +88 -15
  50. package/src/extension/management.ts +89 -349
  51. package/src/extension/message-renderers.ts +3 -4
  52. package/src/extension/notification-router.ts +22 -5
  53. package/src/extension/notification-sink.ts +6 -3
  54. package/src/extension/pi-api.ts +17 -8
  55. package/src/extension/plan-orchestrate.ts +8 -27
  56. package/src/extension/project-init.ts +21 -6
  57. package/src/extension/register.ts +329 -975
  58. package/src/extension/registration/artifact-cleanup.ts +9 -4
  59. package/src/extension/registration/command-utils.ts +5 -1
  60. package/src/extension/registration/commands.ts +806 -314
  61. package/src/extension/registration/compaction-guard.ts +15 -15
  62. package/src/extension/registration/lifecycle.ts +259 -0
  63. package/src/extension/registration/observability.ts +293 -0
  64. package/src/extension/registration/subagent-helpers.ts +29 -7
  65. package/src/extension/registration/subagent-tools.ts +253 -44
  66. package/src/extension/registration/team-tool.ts +19 -84
  67. package/src/extension/registration/ui.ts +168 -0
  68. package/src/extension/registration/viewers.ts +64 -24
  69. package/src/extension/result-watcher.ts +18 -7
  70. package/src/extension/run-bundle-schema.ts +21 -6
  71. package/src/extension/run-export.ts +15 -6
  72. package/src/extension/run-import.ts +64 -29
  73. package/src/extension/run-index.ts +28 -9
  74. package/src/extension/run-maintenance.ts +32 -12
  75. package/src/extension/session-summary.ts +1 -1
  76. package/src/extension/team-manager-command.ts +64 -7
  77. package/src/extension/team-onboard.ts +151 -150
  78. package/src/extension/team-recommendation.ts +121 -21
  79. package/src/extension/team-tool/anchor.ts +31 -64
  80. package/src/extension/team-tool/api.ts +929 -141
  81. package/src/extension/team-tool/auto-summarize.ts +14 -26
  82. package/src/extension/team-tool/cache-control.ts +1 -5
  83. package/src/extension/team-tool/cancel.ts +138 -38
  84. package/src/extension/team-tool/chain-dispatch.ts +5 -13
  85. package/src/extension/team-tool/chain-executor.ts +29 -51
  86. package/src/extension/team-tool/config-patch.ts +1 -1
  87. package/src/extension/team-tool/context.ts +40 -20
  88. package/src/extension/team-tool/destructive-gate.ts +10 -5
  89. package/src/extension/team-tool/doctor.ts +170 -51
  90. package/src/extension/team-tool/explain.ts +228 -214
  91. package/src/extension/team-tool/failure-patterns.ts +3 -9
  92. package/src/extension/team-tool/goal-wrap.ts +71 -29
  93. package/src/extension/team-tool/goal.ts +185 -35
  94. package/src/extension/team-tool/handle-schedule.ts +34 -15
  95. package/src/extension/team-tool/handle-settings.ts +94 -56
  96. package/src/extension/team-tool/health-monitor.ts +27 -108
  97. package/src/extension/team-tool/inspect.ts +42 -9
  98. package/src/extension/team-tool/intent-policy.ts +4 -1
  99. package/src/extension/team-tool/lifecycle-actions.ts +244 -48
  100. package/src/extension/team-tool/orchestrate.ts +7 -18
  101. package/src/extension/team-tool/parallel-dispatch.ts +51 -29
  102. package/src/extension/team-tool/plan.ts +29 -5
  103. package/src/extension/team-tool/respond.ts +49 -16
  104. package/src/extension/team-tool/run-not-found.ts +3 -8
  105. package/src/extension/team-tool/run.ts +80 -317
  106. package/src/extension/team-tool/status.ts +135 -43
  107. package/src/extension/team-tool/workflow-manage.ts +92 -25
  108. package/src/extension/team-tool-types.ts +8 -1
  109. package/src/extension/team-tool.ts +142 -551
  110. package/src/extension/validate-resources.ts +39 -8
  111. package/src/hooks/registry.ts +66 -17
  112. package/src/hooks/types.ts +1 -1
  113. package/src/i18n.ts +25 -11
  114. package/src/observability/correlation.ts +17 -3
  115. package/src/observability/event-bus.ts +51 -56
  116. package/src/observability/event-to-metric.ts +117 -15
  117. package/src/observability/exporters/otlp-exporter.ts +56 -17
  118. package/src/observability/exporters/prometheus-exporter.ts +1 -1
  119. package/src/observability/metric-registry.ts +16 -4
  120. package/src/observability/metric-retention.ts +8 -2
  121. package/src/observability/metric-sink.ts +11 -3
  122. package/src/observability/metrics-primitives.ts +42 -9
  123. package/src/plugins/plugin-define.ts +2 -2
  124. package/src/plugins/plugin-registry.ts +25 -25
  125. package/src/plugins/plugins/index.ts +1 -1
  126. package/src/plugins/plugins/nextjs.ts +16 -16
  127. package/src/plugins/plugins/vite.ts +7 -11
  128. package/src/plugins/plugins/vitest.ts +6 -11
  129. package/src/runtime/adaptive-plan.ts +225 -40
  130. package/src/runtime/agent-control.ts +58 -15
  131. package/src/runtime/agent-memory.ts +15 -9
  132. package/src/runtime/agent-observability.ts +10 -2
  133. package/src/runtime/anchor-manager.ts +27 -25
  134. package/src/runtime/async-marker.ts +7 -1
  135. package/src/runtime/async-runner.ts +27 -23
  136. package/src/runtime/auto-summarize.ts +7 -13
  137. package/src/runtime/background-runner.ts +189 -251
  138. package/src/runtime/batch-barrier.ts +18 -16
  139. package/src/runtime/cancellation-token.ts +16 -6
  140. package/src/runtime/cancellation.ts +46 -8
  141. package/src/runtime/capability-inventory.ts +6 -4
  142. package/src/runtime/chain-parser.ts +44 -11
  143. package/src/runtime/chain-runner.ts +63 -69
  144. package/src/runtime/checkpoint.ts +12 -56
  145. package/src/runtime/child-pi.ts +343 -78
  146. package/src/runtime/coalesce-tasks.ts +268 -0
  147. package/src/runtime/code-summary.ts +71 -26
  148. package/src/runtime/compact-stages/index.ts +15 -5
  149. package/src/runtime/compact-stages/tail-capture-stage.ts +7 -2
  150. package/src/runtime/compact-stages/truncation-stage.ts +4 -1
  151. package/src/runtime/compaction-summary.ts +17 -10
  152. package/src/runtime/completion-guard.ts +33 -16
  153. package/src/runtime/crash-classification.ts +28 -7
  154. package/src/runtime/crash-recovery.ts +177 -37
  155. package/src/runtime/crew-agent-records.ts +145 -47
  156. package/src/runtime/crew-hooks.ts +9 -24
  157. package/src/runtime/cross-extension-rpc.ts +25 -23
  158. package/src/runtime/custom-tools/irc-tool.ts +43 -15
  159. package/src/runtime/custom-tools/submit-result-tool.ts +16 -5
  160. package/src/runtime/delivery-coordinator.ts +34 -7
  161. package/src/runtime/delta-conflict.ts +9 -21
  162. package/src/runtime/deterministic-ast.ts +1 -1
  163. package/src/runtime/diagnostic-export.ts +53 -20
  164. package/src/runtime/direct-run.ts +12 -2
  165. package/src/runtime/dwf-state-store.ts +1 -1
  166. package/src/runtime/dynamic-workflow-context.ts +186 -58
  167. package/src/runtime/dynamic-workflow-runner.ts +42 -20
  168. package/src/runtime/effectiveness.ts +16 -8
  169. package/src/runtime/errors/crew-errors.ts +7 -11
  170. package/src/runtime/event-stream-bridge.ts +9 -3
  171. package/src/runtime/foreground-control.ts +54 -14
  172. package/src/runtime/foreground-watchdog.ts +9 -6
  173. package/src/runtime/goal-achievement.ts +27 -10
  174. package/src/runtime/goal-evaluator.ts +54 -19
  175. package/src/runtime/goal-loop-runner.ts +280 -99
  176. package/src/runtime/goal-state-store.ts +27 -17
  177. package/src/runtime/green-contract.ts +11 -2
  178. package/src/runtime/group-join.ts +64 -31
  179. package/src/runtime/handoff-manager.ts +37 -42
  180. package/src/runtime/heartbeat-gradient.ts +10 -2
  181. package/src/runtime/heartbeat-watcher.ts +32 -6
  182. package/src/runtime/hidden-handoff.ts +12 -30
  183. package/src/runtime/important-line-classifier.ts +12 -2
  184. package/src/runtime/iteration-hooks.ts +25 -15
  185. package/src/runtime/live-agent-control.ts +55 -7
  186. package/src/runtime/live-agent-manager.ts +130 -27
  187. package/src/runtime/live-control-realtime.ts +23 -3
  188. package/src/runtime/live-irc.ts +4 -1
  189. package/src/runtime/live-session-health.ts +12 -4
  190. package/src/runtime/live-session-runtime.ts +379 -117
  191. package/src/runtime/manifest-cache.ts +28 -12
  192. package/src/runtime/mcp-proxy.ts +8 -16
  193. package/src/runtime/metric-parser.ts +1 -5
  194. package/src/runtime/model-fallback.ts +55 -18
  195. package/src/runtime/model-resolver.ts +2 -6
  196. package/src/runtime/model-scope.ts +19 -3
  197. package/src/runtime/notebook-helpers.ts +60 -62
  198. package/src/runtime/orphan-worker-registry.ts +37 -26
  199. package/src/runtime/output-validator.ts +18 -3
  200. package/src/runtime/overflow-recovery.ts +5 -4
  201. package/src/runtime/parallel-research.ts +29 -5
  202. package/src/runtime/parallel-utils.ts +9 -11
  203. package/src/runtime/path-overlap.ts +150 -0
  204. package/src/runtime/peer-dep.ts +12 -17
  205. package/src/runtime/per-write-validator.ts +1 -3
  206. package/src/runtime/phase-tracker.ts +342 -330
  207. package/src/runtime/pi-args.ts +26 -8
  208. package/src/runtime/pi-json-output.ts +1 -1
  209. package/src/runtime/pi-spawn.ts +30 -19
  210. package/src/runtime/pipeline-runner.ts +56 -55
  211. package/src/runtime/plan-templates.ts +5 -6
  212. package/src/runtime/policy-engine.ts +43 -7
  213. package/src/runtime/post-checks.ts +12 -4
  214. package/src/runtime/post-exit-stdio-guard.ts +2 -2
  215. package/src/runtime/process-lifecycle.ts +20 -10
  216. package/src/runtime/process-status.ts +16 -5
  217. package/src/runtime/progress-event-coalescer.ts +2 -1
  218. package/src/runtime/progress-tracker.ts +103 -103
  219. package/src/runtime/prose-compressor.ts +9 -11
  220. package/src/runtime/recovery-recipes.ts +118 -24
  221. package/src/runtime/replace.ts +25 -10
  222. package/src/runtime/resilient-edit.ts +10 -25
  223. package/src/runtime/result-extractor.ts +1 -2
  224. package/src/runtime/retry-executor.ts +20 -4
  225. package/src/runtime/retry-runner.ts +26 -50
  226. package/src/runtime/role-permission.ts +6 -1
  227. package/src/runtime/run-coalesced-task-group.ts +256 -0
  228. package/src/runtime/run-drift.ts +14 -15
  229. package/src/runtime/run-tracker.ts +6 -28
  230. package/src/runtime/runtime-policy.ts +1 -6
  231. package/src/runtime/runtime-resolver.ts +80 -15
  232. package/src/runtime/scheduler.ts +47 -18
  233. package/src/runtime/semaphore.ts +5 -7
  234. package/src/runtime/sensitive-paths.ts +2 -1
  235. package/src/runtime/session-usage.ts +1 -1
  236. package/src/runtime/settings-store.ts +16 -12
  237. package/src/runtime/sidechain-output.ts +6 -2
  238. package/src/runtime/single-agent-compose.ts +1 -4
  239. package/src/runtime/skill-effectiveness.ts +29 -97
  240. package/src/runtime/skill-instructions.ts +40 -83
  241. package/src/runtime/stale-reconciler.ts +73 -197
  242. package/src/runtime/stream-preview.ts +1 -1
  243. package/src/runtime/streaming-output.ts +1 -1
  244. package/src/runtime/subagent-manager.ts +44 -169
  245. package/src/runtime/subprocess-tool-registry.ts +4 -1
  246. package/src/runtime/supervisor-contact.ts +10 -5
  247. package/src/runtime/task-display.ts +19 -5
  248. package/src/runtime/task-graph-scheduler.ts +95 -21
  249. package/src/runtime/task-graph.ts +5 -11
  250. package/src/runtime/task-health.ts +54 -47
  251. package/src/runtime/task-id.ts +11 -18
  252. package/src/runtime/task-output-context.ts +265 -81
  253. package/src/runtime/task-packet.ts +12 -20
  254. package/src/runtime/task-quality.ts +6 -14
  255. package/src/runtime/task-runner/context-retrieval.ts +4 -13
  256. package/src/runtime/task-runner/live-executor.ts +114 -36
  257. package/src/runtime/task-runner/output-splitter.ts +152 -0
  258. package/src/runtime/task-runner/progress.ts +50 -12
  259. package/src/runtime/task-runner/prompt-builder.ts +31 -7
  260. package/src/runtime/task-runner/prompt-pipeline.ts +31 -7
  261. package/src/runtime/task-runner/result-utils.ts +3 -1
  262. package/src/runtime/task-runner/retrieval-orchestrator.ts +310 -0
  263. package/src/runtime/task-runner/run-projection.ts +27 -8
  264. package/src/runtime/task-runner/state-helpers.ts +29 -8
  265. package/src/runtime/task-runner/tail-read.ts +2 -6
  266. package/src/runtime/task-runner.ts +180 -326
  267. package/src/runtime/team-runner-artifacts.ts +13 -0
  268. package/src/runtime/team-runner.ts +456 -974
  269. package/src/runtime/tool-output-pruner.ts +6 -9
  270. package/src/runtime/tool-progress.ts +11 -21
  271. package/src/runtime/verification-gates.ts +33 -24
  272. package/src/runtime/verification-integrity.ts +1 -4
  273. package/src/runtime/verification-worktree.ts +62 -12
  274. package/src/runtime/worker-heartbeat.ts +5 -1
  275. package/src/runtime/worker-startup.ts +29 -5
  276. package/src/runtime/workflow-state.ts +17 -9
  277. package/src/runtime/workspace-lock.ts +30 -35
  278. package/src/runtime/workspace-tree.ts +20 -32
  279. package/src/runtime/yield-handler.ts +43 -9
  280. package/src/runtime/zombie-scanner.ts +5 -4
  281. package/src/schema/config-schema.ts +266 -172
  282. package/src/schema/team-tool-schema.ts +29 -74
  283. package/src/schema/validation-types.ts +25 -17
  284. package/src/skills/discover-skills.ts +35 -10
  285. package/src/skills/skill-templates.ts +109 -27
  286. package/src/skills/validate.ts +26 -8
  287. package/src/state/active-run-registry.ts +87 -28
  288. package/src/state/artifact-store.ts +9 -5
  289. package/src/state/atomic-write-v2.ts +85 -63
  290. package/src/state/atomic-write.ts +105 -26
  291. package/src/state/blob-store.ts +47 -20
  292. package/src/state/contracts.ts +20 -5
  293. package/src/state/crew-init.ts +5 -22
  294. package/src/state/decision-ledger.ts +19 -73
  295. package/src/state/event-log-rotation.ts +41 -15
  296. package/src/state/event-log.ts +168 -53
  297. package/src/state/event-reconstructor.ts +11 -1
  298. package/src/state/gitignore-manager.ts +2 -8
  299. package/src/state/health-store.ts +57 -57
  300. package/src/state/hook-instinct-bridge.ts +1 -1
  301. package/src/state/hook-integrations.ts +1 -1
  302. package/src/state/instinct-store.ts +17 -5
  303. package/src/state/jsonl-writer.ts +1 -1
  304. package/src/state/locks.ts +23 -9
  305. package/src/state/mailbox.ts +151 -28
  306. package/src/state/observation-store.ts +20 -14
  307. package/src/state/run-cache.ts +142 -135
  308. package/src/state/run-graph.ts +6 -15
  309. package/src/state/run-metrics.ts +5 -18
  310. package/src/state/schedule.ts +15 -9
  311. package/src/state/state-store.ts +129 -45
  312. package/src/state/task-claims.ts +12 -2
  313. package/src/state/tiered-eval.ts +52 -43
  314. package/src/state/types-eval.ts +2 -2
  315. package/src/state/types.ts +24 -20
  316. package/src/state/usage.ts +20 -4
  317. package/src/state/worker-atomic-writer.ts +6 -3
  318. package/src/subagents/index.ts +2 -2
  319. package/src/teams/discover-teams.ts +21 -6
  320. package/src/tools/safe-bash-extension.ts +5 -6
  321. package/src/tools/safe-bash.ts +10 -11
  322. package/src/types/new-api-types.ts +6 -10
  323. package/src/ui/agent-management-overlay.ts +52 -40
  324. package/src/ui/card-colors.ts +13 -4
  325. package/src/ui/crew-footer.ts +8 -7
  326. package/src/ui/crew-select-list.ts +1 -1
  327. package/src/ui/dashboard-panes/agents-pane.ts +41 -25
  328. package/src/ui/dashboard-panes/cancellation-pane.ts +1 -1
  329. package/src/ui/dashboard-panes/capability-pane.ts +32 -15
  330. package/src/ui/dashboard-panes/health-pane.ts +2 -1
  331. package/src/ui/dashboard-panes/metrics-pane.ts +4 -1
  332. package/src/ui/dashboard-panes/progress-pane.ts +12 -9
  333. package/src/ui/heartbeat-aggregator.ts +15 -4
  334. package/src/ui/keybinding-map.ts +40 -7
  335. package/src/ui/live-conversation-overlay.ts +36 -20
  336. package/src/ui/live-duration.ts +1 -4
  337. package/src/ui/live-run-sidebar.ts +88 -25
  338. package/src/ui/loaders.ts +2 -8
  339. package/src/ui/mascot.ts +20 -36
  340. package/src/ui/overlays/agent-picker-overlay.ts +11 -3
  341. package/src/ui/overlays/confirm-overlay.ts +4 -2
  342. package/src/ui/overlays/help-overlay.ts +25 -14
  343. package/src/ui/overlays/mailbox-compose-overlay.ts +48 -11
  344. package/src/ui/overlays/mailbox-compose-preview.ts +20 -5
  345. package/src/ui/overlays/mailbox-detail-overlay.ts +27 -6
  346. package/src/ui/pi-ui-compat.ts +7 -7
  347. package/src/ui/powerbar-publisher.ts +120 -42
  348. package/src/ui/render-diff.ts +10 -3
  349. package/src/ui/render-scheduler.ts +12 -4
  350. package/src/ui/run-action-dispatcher.ts +81 -18
  351. package/src/ui/run-dashboard.ts +172 -76
  352. package/src/ui/run-event-bus.ts +59 -37
  353. package/src/ui/run-snapshot-cache.ts +276 -86
  354. package/src/ui/settings-overlay.ts +361 -74
  355. package/src/ui/status-colors.ts +12 -1
  356. package/src/ui/syntax-highlight.ts +1 -1
  357. package/src/ui/theme-adapter.ts +16 -14
  358. package/src/ui/theme-discovery.ts +13 -2
  359. package/src/ui/tool-progress-formatter.ts +7 -7
  360. package/src/ui/tool-render.ts +128 -56
  361. package/src/ui/tool-renderers/brief-mode.ts +45 -27
  362. package/src/ui/tool-renderers/index.ts +109 -43
  363. package/src/ui/transcript-cache.ts +32 -6
  364. package/src/ui/transcript-entries.ts +25 -23
  365. package/src/ui/transcript-viewer.ts +78 -29
  366. package/src/ui/widget/index.ts +99 -40
  367. package/src/ui/widget/widget-formatters.ts +13 -6
  368. package/src/ui/widget/widget-model.ts +19 -8
  369. package/src/ui/widget/widget-renderer.ts +23 -13
  370. package/src/ui/widget/widget-types.ts +1 -1
  371. package/src/utils/bm25-search.ts +199 -199
  372. package/src/utils/conflict-detect.ts +22 -21
  373. package/src/utils/env-filter.ts +14 -7
  374. package/src/utils/file-coalescer.ts +5 -1
  375. package/src/utils/fingerprint.ts +3 -6
  376. package/src/utils/frontmatter.ts +3 -1
  377. package/src/utils/fs-watch.ts +2 -6
  378. package/src/utils/gh-protocol.ts +119 -44
  379. package/src/utils/git.ts +13 -15
  380. package/src/utils/guards.ts +2 -5
  381. package/src/utils/ids.ts +9 -2
  382. package/src/utils/incremental-reader.ts +14 -3
  383. package/src/utils/internal-error.ts +2 -1
  384. package/src/utils/names.ts +12 -3
  385. package/src/utils/paths.ts +49 -5
  386. package/src/utils/project-detector.ts +2 -2
  387. package/src/utils/redaction.ts +29 -19
  388. package/src/utils/resolve-shell.ts +9 -7
  389. package/src/utils/run-watcher-registry.ts +19 -31
  390. package/src/utils/safe-paths.ts +45 -24
  391. package/src/utils/scan-cache.ts +9 -2
  392. package/src/utils/session-utils.ts +2 -4
  393. package/src/utils/sleep.ts +12 -5
  394. package/src/utils/sse-parser.ts +5 -17
  395. package/src/utils/visual.ts +52 -32
  396. package/src/workflows/discover-workflows.ts +41 -109
  397. package/src/workflows/intermediate-store.ts +5 -21
  398. package/src/workflows/preflight-validator.ts +6 -33
  399. package/src/workflows/topology-analyzer.ts +5 -21
  400. package/src/workflows/workflow-config.ts +7 -6
  401. package/src/worktree/branch-freshness.ts +66 -8
  402. package/src/worktree/cleanup.ts +130 -20
  403. package/src/worktree/worktree-manager.ts +212 -69
  404. package/skills/artifact-analysis-loop/SKILL.md +0 -303
  405. package/skills/detection-pipeline-design/SKILL.md +0 -286
  406. package/skills/hunting-investigation-loop/SKILL.md +0 -402
  407. package/skills/incident-playbook-construction/SKILL.md +0 -384
  408. package/skills/security-review/SKILL.md +0 -561
  409. package/skills/threat-hypothesis-framework/SKILL.md +0 -176
  410. package/skills/ui-render-performance/SKILL.md +0 -58
  411. /package/docs/{followup-review-round3-2026-05-12.md → archive/followup-review-round3-2026-05-12.md} +0 -0
  412. /package/docs/{followup-review-round4-2026-05-13.md → archive/followup-review-round4-2026-05-13.md} +0 -0
  413. /package/docs/{pi-crew-bugs.md → archive/pi-crew-bugs.md} +0 -0
  414. /package/docs/{pi-crew-test-final.md → archive/pi-crew-test-final.md} +0 -0
  415. /package/docs/{pi-crew-test-results.md → archive/pi-crew-test-results.md} +0 -0
  416. /package/docs/{pi-crew-test-round2.md → archive/pi-crew-test-round2.md} +0 -0
  417. /package/docs/{pi-crew-test-round4.md → archive/pi-crew-test-round4.md} +0 -0
  418. /package/docs/{pi-crew-test-round5.md → archive/pi-crew-test-round5.md} +0 -0
  419. /package/docs/{pi-crew-test-round6.md → archive/pi-crew-test-round6.md} +0 -0
  420. /package/docs/{pi-crew-v0.5.10-audit-fix-plan.md → archive/pi-crew-v0.5.10-audit-fix-plan.md} +0 -0
  421. /package/docs/{pi-crew-v0.5.11-audit-fix-plan.md → archive/pi-crew-v0.5.11-audit-fix-plan.md} +0 -0
  422. /package/docs/{pi-crew-v0.5.12-audit-fix-plan.md → archive/pi-crew-v0.5.12-audit-fix-plan.md} +0 -0
  423. /package/docs/{pi-crew-v0.5.13-audit-fix-plan.md → archive/pi-crew-v0.5.13-audit-fix-plan.md} +0 -0
  424. /package/docs/{pi-crew-v0.5.14-audit-fix-plan.md → archive/pi-crew-v0.5.14-audit-fix-plan.md} +0 -0
  425. /package/docs/{pi-crew-v0.5.16-audit-fix-plan.md → archive/pi-crew-v0.5.16-audit-fix-plan.md} +0 -0
  426. /package/docs/{pi-crew-v0.5.17-audit-fix-plan.md → archive/pi-crew-v0.5.17-audit-fix-plan.md} +0 -0
  427. /package/docs/{pi-crew-v0.5.5-audit-fix-plan.md → archive/pi-crew-v0.5.5-audit-fix-plan.md} +0 -0
  428. /package/docs/{pi-crew-v0.5.9-audit-fix-plan.md → archive/pi-crew-v0.5.9-audit-fix-plan.md} +0 -0
  429. /package/docs/{pi-mono-opportunities.md → archive/pi-mono-opportunities.md} +0 -0
  430. /package/docs/{pi-mono-review.md → archive/pi-mono-review.md} +0 -0
  431. /package/docs/{pi-subagent4-comparison.md → archive/pi-subagent4-comparison.md} +0 -0
  432. /package/docs/{pi-subagents3-deep-analysis.md → archive/pi-subagents3-deep-analysis.md} +0 -0
@@ -1,5 +1,5 @@
1
- import { gzip } from "node:zlib";
2
1
  import { promisify } from "node:util";
2
+ import { gzip } from "node:zlib";
3
3
  import { logInternalError } from "../../utils/internal-error.ts";
4
4
  import { redactSecrets } from "../../utils/redaction.ts";
5
5
  import type { MetricRegistry } from "../metric-registry.ts";
@@ -25,9 +25,7 @@ export function validateEndpoint(endpoint: string): void {
25
25
 
26
26
  // Only allow http and https protocols
27
27
  if (url.protocol !== "http:" && url.protocol !== "https:") {
28
- throw new Error(
29
- `OTLP endpoint must use http:// or https:// protocol, got: ${url.protocol}`,
30
- );
28
+ throw new Error(`OTLP endpoint must use http:// or https:// protocol, got: ${url.protocol}`);
31
29
  }
32
30
 
33
31
  const hostname = url.hostname.toLowerCase();
@@ -101,7 +99,12 @@ function pointValues(snapshot: MetricSnapshot): unknown[] {
101
99
  attributes: Object.entries(value.labels).map(([key, item]) => {
102
100
  const redacted = redactSecrets({ [key]: item }) as Record<string, string>;
103
101
  const val = String(redacted[key] ?? item);
104
- return { key, value: { stringValue: val.length > MAX_LABEL_LENGTH ? val.slice(0, MAX_LABEL_LENGTH) : val } };
102
+ return {
103
+ key,
104
+ value: {
105
+ stringValue: val.length > MAX_LABEL_LENGTH ? val.slice(0, MAX_LABEL_LENGTH) : val,
106
+ },
107
+ };
105
108
  }),
106
109
  count: "count" in value ? value.count : undefined,
107
110
  sum: "sum" in value ? value.sum : undefined,
@@ -113,7 +116,12 @@ function pointValues(snapshot: MetricSnapshot): unknown[] {
113
116
  attributes: Object.entries(value.labels).map(([key, item]) => {
114
117
  const redacted = redactSecrets({ [key]: item }) as Record<string, string>;
115
118
  const val = String(redacted[key] ?? item);
116
- return { key, value: { stringValue: val.length > MAX_LABEL_LENGTH ? val.slice(0, MAX_LABEL_LENGTH) : val } };
119
+ return {
120
+ key,
121
+ value: {
122
+ stringValue: val.length > MAX_LABEL_LENGTH ? val.slice(0, MAX_LABEL_LENGTH) : val,
123
+ },
124
+ };
117
125
  }),
118
126
  asDouble: "value" in value ? value.value : undefined,
119
127
  count: "count" in value ? value.count : undefined,
@@ -123,13 +131,30 @@ function pointValues(snapshot: MetricSnapshot): unknown[] {
123
131
 
124
132
  export function convertToOTLP(snapshots: MetricSnapshot[]): unknown {
125
133
  return {
126
- resourceMetrics: [{
127
- resource: { attributes: [{ key: "service.name", value: { stringValue: "pi-crew" } }] },
128
- scopeMetrics: [{
129
- scope: { name: "pi-crew" },
130
- metrics: snapshots.map((snapshot) => ({ name: snapshot.name, description: snapshot.description, [snapshot.type === "histogram" ? "histogram" : snapshot.type === "gauge" ? "gauge" : "sum"]: { dataPoints: pointValues(snapshot) } })),
131
- }],
132
- }],
134
+ resourceMetrics: [
135
+ {
136
+ resource: {
137
+ attributes: [
138
+ {
139
+ key: "service.name",
140
+ value: { stringValue: "pi-crew" },
141
+ },
142
+ ],
143
+ },
144
+ scopeMetrics: [
145
+ {
146
+ scope: { name: "pi-crew" },
147
+ metrics: snapshots.map((snapshot) => ({
148
+ name: snapshot.name,
149
+ description: snapshot.description,
150
+ [snapshot.type === "histogram" ? "histogram" : snapshot.type === "gauge" ? "gauge" : "sum"]: {
151
+ dataPoints: pointValues(snapshot),
152
+ },
153
+ })),
154
+ },
155
+ ],
156
+ },
157
+ ],
133
158
  };
134
159
  }
135
160
 
@@ -154,7 +179,9 @@ export class OTLPExporter implements MetricExporter {
154
179
  // Skip if a previous push is still running; the next tick will retry.
155
180
  if (this.inFlight) return;
156
181
  const snap = this.registry.snapshot();
157
- this.inFlight = this.push(snap).finally(() => { this.inFlight = null; });
182
+ this.inFlight = this.push(snap).finally(() => {
183
+ this.inFlight = null;
184
+ });
158
185
  }, this.opts.intervalMs ?? 60_000);
159
186
  this.timer.unref();
160
187
  }
@@ -182,12 +209,20 @@ export class OTLPExporter implements MetricExporter {
182
209
  const body = await gzipAsync(Buffer.from(json));
183
210
  const response = await fetch(this.opts.endpoint, {
184
211
  method: "POST",
185
- headers: { "content-type": "application/json", "content-encoding": "gzip", ...(this.opts.headers ?? {}) },
212
+ headers: {
213
+ "content-type": "application/json",
214
+ "content-encoding": "gzip",
215
+ ...(this.opts.headers ?? {}),
216
+ },
186
217
  body,
187
218
  signal: controller.signal,
188
219
  });
189
220
  if (!response.ok) {
190
- logInternalError("otlp-export-http", new Error(`HTTP ${response.status}: ${response.statusText}`), `endpoint=${this.opts.endpoint}`);
221
+ logInternalError(
222
+ "otlp-export-http",
223
+ new Error(`HTTP ${response.status}: ${response.statusText}`),
224
+ `endpoint=${this.opts.endpoint}`,
225
+ );
191
226
  }
192
227
  } finally {
193
228
  clearTimeout(timer);
@@ -208,7 +243,11 @@ export class OTLPExporter implements MetricExporter {
208
243
  if (this.timer) clearInterval(this.timer);
209
244
  this.timer = undefined;
210
245
  if (this.inFlight) {
211
- try { await this.inFlight; } catch { /* swallow — push() already logs errors */ }
246
+ try {
247
+ await this.inFlight;
248
+ } catch {
249
+ /* swallow — push() already logs errors */
250
+ }
212
251
  }
213
252
  }
214
253
  }
@@ -5,7 +5,7 @@ function prometheusName(name: string): string {
5
5
  }
6
6
 
7
7
  function escapeLabel(value: string): string {
8
- return value.replace(/\\/g, "\\\\").replace(/\n/g, "\\n").replace(/"/g, "\\\"");
8
+ return value.replace(/\\/g, "\\\\").replace(/\n/g, "\\n").replace(/"/g, '\\"');
9
9
  }
10
10
 
11
11
  function labelsText(labels: MetricLabels): string {
@@ -1,5 +1,5 @@
1
- import { Counter, Gauge, Histogram, type Metric, type MetricSnapshot } from "./metrics-primitives.ts";
2
1
  import { logInternalError } from "../utils/internal-error.ts";
2
+ import { Counter, Gauge, Histogram, type Metric, type MetricSnapshot } from "./metrics-primitives.ts";
3
3
 
4
4
  const METRIC_NAME_PATTERN = /^crew\.[a-z]+\.[a-z][a-z_]*$/;
5
5
 
@@ -38,7 +38,11 @@ export class MetricRegistry {
38
38
  const existing = this.metrics.get(name);
39
39
  if (existing instanceof Counter) {
40
40
  if (existing.description !== description) {
41
- logInternalError("metric-registry.counter", new Error("description mismatch"), `name='${name}' original='${existing.description}'`);
41
+ logInternalError(
42
+ "metric-registry.counter",
43
+ new Error("description mismatch"),
44
+ `name='${name}' original='${existing.description}'`,
45
+ );
42
46
  }
43
47
  return existing;
44
48
  }
@@ -50,7 +54,11 @@ export class MetricRegistry {
50
54
  const existing = this.metrics.get(name);
51
55
  if (existing instanceof Gauge) {
52
56
  if (existing.description !== description) {
53
- logInternalError("metric-registry.gauge", new Error("description mismatch"), `name='${name}' original='${existing.description}'`);
57
+ logInternalError(
58
+ "metric-registry.gauge",
59
+ new Error("description mismatch"),
60
+ `name='${name}' original='${existing.description}'`,
61
+ );
54
62
  }
55
63
  return existing;
56
64
  }
@@ -62,7 +70,11 @@ export class MetricRegistry {
62
70
  const existing = this.metrics.get(name);
63
71
  if (existing instanceof Histogram) {
64
72
  if (existing.description !== description) {
65
- logInternalError("metric-registry.histogram", new Error("description mismatch"), `name='${name}' original='${existing.description}'`);
73
+ logInternalError(
74
+ "metric-registry.histogram",
75
+ new Error("description mismatch"),
76
+ `name='${name}' original='${existing.description}'`,
77
+ );
66
78
  }
67
79
  return existing;
68
80
  }
@@ -21,7 +21,11 @@ export class TimeWindowedCounter {
21
21
  if (!Number.isFinite(delta)) return;
22
22
  // Cap the event array to prevent unbounded memory growth.
23
23
  if (this.events.length >= TimeWindowedCounter.MAX_EVENTS) this.prune();
24
- this.events.push({ timestamp: this.now(), labels: { ...labels }, delta });
24
+ this.events.push({
25
+ timestamp: this.now(),
26
+ labels: { ...labels },
27
+ delta,
28
+ });
25
29
  this.prune();
26
30
  }
27
31
 
@@ -30,7 +34,9 @@ export class TimeWindowedCounter {
30
34
  this.pruneAt(now);
31
35
  const key = labelKey(labels);
32
36
  const cutoff = now - durationMs;
33
- return this.events.filter((event) => event.timestamp >= cutoff && labelKey(event.labels) === key).reduce((sum, event) => sum + event.delta, 0);
37
+ return this.events
38
+ .filter((event) => event.timestamp >= cutoff && labelKey(event.labels) === key)
39
+ .reduce((sum, event) => sum + event.delta, 0);
34
40
  }
35
41
 
36
42
  rate(labels: MetricLabels = {}, durationMs = this.windowMs): number {
@@ -1,7 +1,7 @@
1
1
  import * as fs from "node:fs";
2
2
  import * as path from "node:path";
3
- import { redactSecrets } from "../utils/redaction.ts";
4
3
  import { logInternalError } from "../utils/internal-error.ts";
4
+ import { redactSecrets } from "../utils/redaction.ts";
5
5
  import type { MetricRegistry } from "./metric-registry.ts";
6
6
  import type { MetricSnapshot } from "./metrics-primitives.ts";
7
7
 
@@ -42,7 +42,11 @@ export function createMetricFileSink(opts: MetricFileSinkOptions): MetricSink {
42
42
  const ensureFd = (date: string): number => {
43
43
  if (fd !== undefined && fdDate === date) return fd;
44
44
  if (fd !== undefined) {
45
- try { fs.closeSync(fd); } catch (error) { logInternalError("metric-sink.closeFd", error); }
45
+ try {
46
+ fs.closeSync(fd);
47
+ } catch (error) {
48
+ logInternalError("metric-sink.closeFd", error);
49
+ }
46
50
  }
47
51
  fs.mkdirSync(dir, { recursive: true });
48
52
  rotateOldFiles(dir, retentionDays);
@@ -72,7 +76,11 @@ export function createMetricFileSink(opts: MetricFileSinkOptions): MetricSink {
72
76
  dispose: () => {
73
77
  clearInterval(timer);
74
78
  if (fd !== undefined) {
75
- try { fs.closeSync(fd); } catch (error) { logInternalError("metric-sink.dispose", error); }
79
+ try {
80
+ fs.closeSync(fd);
81
+ } catch (error) {
82
+ logInternalError("metric-sink.dispose", error);
83
+ }
76
84
  fd = undefined;
77
85
  fdDate = undefined;
78
86
  }
@@ -78,11 +78,17 @@ export class Counter extends Metric {
78
78
  inc(labels: MetricLabels = {}, delta = 1): void {
79
79
  if (!Number.isFinite(delta) || delta < 0) return;
80
80
  const key = labelKey(labels);
81
- const current = this.values.get(key) ?? { labels: normalizeLabels(labels), value: 0 };
81
+ const current = this.values.get(key) ?? {
82
+ labels: normalizeLabels(labels),
83
+ value: 0,
84
+ };
82
85
  // Delete before set to move key to end of insertion order (MRU).
83
86
  // Without this, enforceLabelCap could evict an actively-used entry.
84
87
  this.values.delete(key);
85
- this.values.set(key, { labels: current.labels, value: current.value + delta });
88
+ this.values.set(key, {
89
+ labels: current.labels,
90
+ value: current.value + delta,
91
+ });
86
92
  enforceLabelCap(this.values, this.name);
87
93
  }
88
94
 
@@ -91,7 +97,15 @@ export class Counter extends Metric {
91
97
  }
92
98
 
93
99
  snapshot(): MetricSnapshot {
94
- return { type: "counter", name: this.name, description: this.description, values: [...this.values.values()].map((entry) => ({ labels: cloneLabels(entry.labels), value: entry.value })) };
100
+ return {
101
+ type: "counter",
102
+ name: this.name,
103
+ description: this.description,
104
+ values: [...this.values.values()].map((entry) => ({
105
+ labels: cloneLabels(entry.labels),
106
+ value: entry.value,
107
+ })),
108
+ };
95
109
  }
96
110
  }
97
111
 
@@ -117,7 +131,15 @@ export class Gauge extends Metric {
117
131
  }
118
132
 
119
133
  snapshot(): MetricSnapshot {
120
- return { type: "gauge", name: this.name, description: this.description, values: [...this.values.values()].map((entry) => ({ labels: cloneLabels(entry.labels), value: entry.value })) };
134
+ return {
135
+ type: "gauge",
136
+ name: this.name,
137
+ description: this.description,
138
+ values: [...this.values.values()].map((entry) => ({
139
+ labels: cloneLabels(entry.labels),
140
+ value: entry.value,
141
+ })),
142
+ };
121
143
  }
122
144
  }
123
145
 
@@ -135,9 +157,15 @@ export class Histogram extends Metric {
135
157
  if (!Number.isFinite(value)) return;
136
158
  const key = labelKey(labels);
137
159
  const existing = this.observations.get(key);
138
- const current = existing ?? { labels: normalizeLabels(labels), counts: new Array(this.buckets.length + 1).fill(0) as number[], sum: 0, count: 0 };
160
+ const current = existing ?? {
161
+ labels: normalizeLabels(labels),
162
+ counts: new Array(this.buckets.length + 1).fill(0) as number[],
163
+ sum: 0,
164
+ count: 0,
165
+ };
139
166
  const bucketIndex = this.buckets.findIndex((bucket) => value <= bucket);
140
- current.counts[bucketIndex === -1 ? this.buckets.length : bucketIndex] = (current.counts[bucketIndex === -1 ? this.buckets.length : bucketIndex] ?? 0) + 1;
167
+ current.counts[bucketIndex === -1 ? this.buckets.length : bucketIndex] =
168
+ (current.counts[bucketIndex === -1 ? this.buckets.length : bucketIndex] ?? 0) + 1;
141
169
  current.sum += value;
142
170
  current.count += 1;
143
171
  if (!existing) this.observations.set(key, current);
@@ -155,8 +183,9 @@ export class Histogram extends Metric {
155
183
  cumulative += count;
156
184
  if (cumulative >= target) {
157
185
  const previous = cumulative - count;
158
- const lower = index === 0 ? 0 : this.buckets[index - 1] ?? this.buckets.at(-1) ?? 0;
159
- const upper = index < this.buckets.length ? this.buckets[index] ?? lower : Math.max(lower, obs.sum / Math.max(1, obs.count));
186
+ const lower = index === 0 ? 0 : (this.buckets[index - 1] ?? this.buckets.at(-1) ?? 0);
187
+ const upper =
188
+ index < this.buckets.length ? (this.buckets[index] ?? lower) : Math.max(lower, obs.sum / Math.max(1, obs.count));
160
189
  const fraction = count === 0 ? 0 : (target - previous) / Math.max(1, count);
161
190
  return lower + fraction * (upper - lower);
162
191
  }
@@ -179,7 +208,11 @@ export class Histogram extends Metric {
179
208
  counts: [...entry.counts],
180
209
  sum: entry.sum,
181
210
  count: entry.count,
182
- quantiles: { p50: this.quantile(entry.labels, 0.5), p95: this.quantile(entry.labels, 0.95), p99: this.quantile(entry.labels, 0.99) },
211
+ quantiles: {
212
+ p50: this.quantile(entry.labels, 0.5),
213
+ p95: this.quantile(entry.labels, 0.95),
214
+ p99: this.quantile(entry.labels, 0.99),
215
+ },
183
216
  })),
184
217
  };
185
218
  }
@@ -2,5 +2,5 @@
2
2
  * Simplifies plugin struct definition.
3
3
  */
4
4
  export function definePlugin<T extends { name: string; enablers: readonly string[] }>(spec: T): T {
5
- return spec;
6
- }
5
+ return spec;
6
+ }
@@ -1,32 +1,32 @@
1
1
  export interface Plugin {
2
- readonly name: string;
3
- readonly enablers: readonly string[];
4
- readonly entryPatterns?: readonly string[];
5
- readonly configPatterns?: readonly string[];
6
- readonly toolingDependencies?: readonly string[];
7
- readonly pathAliases?: readonly string[][];
8
- readonly virtualModulePrefixes?: readonly string[];
2
+ readonly name: string;
3
+ readonly enablers: readonly string[];
4
+ readonly entryPatterns?: readonly string[];
5
+ readonly configPatterns?: readonly string[];
6
+ readonly toolingDependencies?: readonly string[];
7
+ readonly pathAliases?: readonly string[][];
8
+ readonly virtualModulePrefixes?: readonly string[];
9
9
  }
10
10
 
11
11
  export class PluginRegistry {
12
- private plugins: Plugin[] = [];
12
+ private plugins: Plugin[] = [];
13
13
 
14
- register(plugin: Plugin): void {
15
- this.plugins.push(plugin);
16
- }
14
+ register(plugin: Plugin): void {
15
+ this.plugins.push(plugin);
16
+ }
17
17
 
18
- activePlugins(allDeps: string[]): Plugin[] {
19
- return this.plugins.filter((p) =>
20
- p.enablers.some((enabler) => {
21
- if (enabler.endsWith("/")) {
22
- return allDeps.some((d) => d.startsWith(enabler));
23
- }
24
- return allDeps.includes(enabler);
25
- }),
26
- );
27
- }
18
+ activePlugins(allDeps: string[]): Plugin[] {
19
+ return this.plugins.filter((p) =>
20
+ p.enablers.some((enabler) => {
21
+ if (enabler.endsWith("/")) {
22
+ return allDeps.some((d) => d.startsWith(enabler));
23
+ }
24
+ return allDeps.includes(enabler);
25
+ }),
26
+ );
27
+ }
28
28
 
29
- allPlugins(): Plugin[] {
30
- return [...this.plugins];
31
- }
32
- }
29
+ allPlugins(): Plugin[] {
30
+ return [...this.plugins];
31
+ }
32
+ }
@@ -1,3 +1,3 @@
1
1
  export { NextJsPlugin } from "./nextjs.ts";
2
+ export { VitePlugin } from "./vite.ts";
2
3
  export { VitestPlugin } from "./vitest.ts";
3
- export { VitePlugin } from "./vite.ts";
@@ -1,19 +1,19 @@
1
1
  import { definePlugin } from "../plugin-define.ts";
2
2
 
3
3
  export const NextJsPlugin = definePlugin({
4
- name: "nextjs",
5
- enablers: ["next"],
6
- entryPatterns: [
7
- "src/app/**/*.{ts,tsx}",
8
- "src/pages/**/*.{ts,tsx}",
9
- "src/app/**/page.{ts,tsx}",
10
- "src/app/**/layout.{ts,tsx}",
11
- "src/app/**/route.{ts,tsx}",
12
- "middleware.{ts,js}",
13
- "next.config.{ts,js,mjs}",
14
- ],
15
- configPatterns: ["next.config.{ts,js,mjs}"],
16
- toolingDependencies: ["next", "@next/font", "@next/mdx"],
17
- pathAliases: [["~", "src"]],
18
- virtualModulePrefixes: ["next:"],
19
- });
4
+ name: "nextjs",
5
+ enablers: ["next"],
6
+ entryPatterns: [
7
+ "src/app/**/*.{ts,tsx}",
8
+ "src/pages/**/*.{ts,tsx}",
9
+ "src/app/**/page.{ts,tsx}",
10
+ "src/app/**/layout.{ts,tsx}",
11
+ "src/app/**/route.{ts,tsx}",
12
+ "middleware.{ts,js}",
13
+ "next.config.{ts,js,mjs}",
14
+ ],
15
+ configPatterns: ["next.config.{ts,js,mjs}"],
16
+ toolingDependencies: ["next", "@next/font", "@next/mdx"],
17
+ pathAliases: [["~", "src"]],
18
+ virtualModulePrefixes: ["next:"],
19
+ });
@@ -1,14 +1,10 @@
1
1
  import { definePlugin } from "../plugin-define.ts";
2
2
 
3
3
  export const VitePlugin = definePlugin({
4
- name: "vite",
5
- enablers: ["vite", "rolldown-vite"],
6
- entryPatterns: [
7
- "src/main.{ts,tsx,js,jsx}",
8
- "src/index.{ts,tsx,js,jsx}",
9
- "index.html",
10
- ],
11
- configPatterns: ["vite.config.{ts,js,mts,mjs}"],
12
- toolingDependencies: ["vite"],
13
- virtualModulePrefixes: ["virtual:"],
14
- });
4
+ name: "vite",
5
+ enablers: ["vite", "rolldown-vite"],
6
+ entryPatterns: ["src/main.{ts,tsx,js,jsx}", "src/index.{ts,tsx,js,jsx}", "index.html"],
7
+ configPatterns: ["vite.config.{ts,js,mts,mjs}"],
8
+ toolingDependencies: ["vite"],
9
+ virtualModulePrefixes: ["virtual:"],
10
+ });
@@ -1,14 +1,9 @@
1
1
  import { definePlugin } from "../plugin-define.ts";
2
2
 
3
3
  export const VitestPlugin = definePlugin({
4
- name: "vitest",
5
- enablers: ["vitest"],
6
- entryPatterns: [
7
- "**/*.test.{ts,tsx}",
8
- "**/*.spec.{ts,tsx}",
9
- "src/**/*.test.{ts,tsx}",
10
- "src/**/*.spec.{ts,tsx}",
11
- ],
12
- configPatterns: ["vitest.config.{ts,js,mjs}", "vite.config.ts"],
13
- toolingDependencies: ["vitest"],
14
- });
4
+ name: "vitest",
5
+ enablers: ["vitest"],
6
+ entryPatterns: ["**/*.test.{ts,tsx}", "**/*.spec.{ts,tsx}", "src/**/*.test.{ts,tsx}", "src/**/*.spec.{ts,tsx}"],
7
+ configPatterns: ["vitest.config.{ts,js,mjs}", "vite.config.ts"],
8
+ toolingDependencies: ["vitest"],
9
+ });