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.
- package/CHANGELOG.md +81 -0
- package/README.md +19 -0
- package/dist/build-meta.json +21790 -0
- package/dist/index.mjs +83070 -0
- package/dist/index.mjs.map +7 -0
- package/docs/A +358 -0
- package/docs/M-A +357 -0
- package/docs/REVIEW-FINDINGS-2026-06 +357 -0
- package/docs/Y +357 -0
- package/docs/a +357 -0
- package/docs/aA +358 -0
- package/docs/archive/README.md +91 -0
- package/docs/patterns/command-agent-skill.md +1 -1
- package/docs/skills/REFERENCE.md +0 -17
- package/docs//303/242mmaAAA/303/242 +357 -0
- package/index.bundle.ts +25 -0
- package/index.ts +95 -4
- package/package.json +15 -4
- package/skills/iterative-audit/SKILL.md +0 -1
- package/skills/widget-rendering/SKILL.md +17 -0
- package/src/adapters/claude-adapter.ts +1 -3
- package/src/adapters/export-util.ts +16 -16
- package/src/adapters/index.ts +5 -5
- package/src/agents/agent-config.ts +20 -14
- package/src/agents/agent-serializer.ts +1 -1
- package/src/agents/discover-agents.ts +83 -39
- package/src/benchmark/benchmark-runner.ts +51 -51
- package/src/benchmark/feedback-loop.ts +1 -1
- package/src/config/config.ts +166 -590
- package/src/config/defaults.ts +28 -2
- package/src/config/drift-detector.ts +11 -14
- package/src/config/markers.ts +201 -203
- package/src/config/resilient-parser.ts +14 -6
- package/src/config/role-tools.ts +3 -3
- package/src/config/suggestions.ts +5 -12
- package/src/config/types.ts +9 -25
- package/src/errors.ts +151 -157
- package/src/extension/action-suggestions.ts +54 -9
- package/src/extension/async-notifier.ts +43 -13
- package/src/extension/autonomous-policy.ts +77 -37
- package/src/extension/command-completions.ts +9 -8
- package/src/extension/context-status-injection.ts +14 -12
- package/src/extension/crew-autocomplete.ts +8 -16
- package/src/extension/crew-cleanup.ts +2 -1
- package/src/extension/crew-shortcuts.ts +9 -6
- package/src/extension/cross-extension-rpc.ts +136 -42
- package/src/extension/help.ts +1 -1
- package/src/extension/import-index.ts +10 -5
- package/src/extension/knowledge-injection.ts +88 -15
- package/src/extension/management.ts +89 -349
- package/src/extension/message-renderers.ts +3 -4
- package/src/extension/notification-router.ts +22 -5
- package/src/extension/notification-sink.ts +6 -3
- package/src/extension/pi-api.ts +17 -8
- package/src/extension/plan-orchestrate.ts +8 -27
- package/src/extension/project-init.ts +21 -6
- package/src/extension/register.ts +329 -975
- package/src/extension/registration/artifact-cleanup.ts +9 -4
- package/src/extension/registration/command-utils.ts +5 -1
- package/src/extension/registration/commands.ts +806 -314
- package/src/extension/registration/compaction-guard.ts +15 -15
- package/src/extension/registration/lifecycle.ts +259 -0
- package/src/extension/registration/observability.ts +293 -0
- package/src/extension/registration/subagent-helpers.ts +29 -7
- package/src/extension/registration/subagent-tools.ts +253 -44
- package/src/extension/registration/team-tool.ts +19 -84
- package/src/extension/registration/ui.ts +168 -0
- package/src/extension/registration/viewers.ts +64 -24
- package/src/extension/result-watcher.ts +18 -7
- package/src/extension/run-bundle-schema.ts +21 -6
- package/src/extension/run-export.ts +15 -6
- package/src/extension/run-import.ts +64 -29
- package/src/extension/run-index.ts +28 -9
- package/src/extension/run-maintenance.ts +32 -12
- package/src/extension/session-summary.ts +1 -1
- package/src/extension/team-manager-command.ts +64 -7
- package/src/extension/team-onboard.ts +151 -150
- package/src/extension/team-recommendation.ts +121 -21
- package/src/extension/team-tool/anchor.ts +31 -64
- package/src/extension/team-tool/api.ts +929 -141
- package/src/extension/team-tool/auto-summarize.ts +14 -26
- package/src/extension/team-tool/cache-control.ts +1 -5
- package/src/extension/team-tool/cancel.ts +138 -38
- package/src/extension/team-tool/chain-dispatch.ts +5 -13
- package/src/extension/team-tool/chain-executor.ts +29 -51
- package/src/extension/team-tool/config-patch.ts +1 -1
- package/src/extension/team-tool/context.ts +40 -20
- package/src/extension/team-tool/destructive-gate.ts +10 -5
- package/src/extension/team-tool/doctor.ts +170 -51
- package/src/extension/team-tool/explain.ts +228 -214
- package/src/extension/team-tool/failure-patterns.ts +3 -9
- package/src/extension/team-tool/goal-wrap.ts +71 -29
- package/src/extension/team-tool/goal.ts +185 -35
- package/src/extension/team-tool/handle-schedule.ts +34 -15
- package/src/extension/team-tool/handle-settings.ts +94 -56
- package/src/extension/team-tool/health-monitor.ts +27 -108
- package/src/extension/team-tool/inspect.ts +42 -9
- package/src/extension/team-tool/intent-policy.ts +4 -1
- package/src/extension/team-tool/lifecycle-actions.ts +244 -48
- package/src/extension/team-tool/orchestrate.ts +7 -18
- package/src/extension/team-tool/parallel-dispatch.ts +51 -29
- package/src/extension/team-tool/plan.ts +29 -5
- package/src/extension/team-tool/respond.ts +49 -16
- package/src/extension/team-tool/run-not-found.ts +3 -8
- package/src/extension/team-tool/run.ts +80 -317
- package/src/extension/team-tool/status.ts +135 -43
- package/src/extension/team-tool/workflow-manage.ts +92 -25
- package/src/extension/team-tool-types.ts +8 -1
- package/src/extension/team-tool.ts +142 -551
- package/src/extension/validate-resources.ts +39 -8
- package/src/hooks/registry.ts +66 -17
- package/src/hooks/types.ts +1 -1
- package/src/i18n.ts +25 -11
- package/src/observability/correlation.ts +17 -3
- package/src/observability/event-bus.ts +51 -56
- package/src/observability/event-to-metric.ts +117 -15
- package/src/observability/exporters/otlp-exporter.ts +56 -17
- package/src/observability/exporters/prometheus-exporter.ts +1 -1
- package/src/observability/metric-registry.ts +16 -4
- package/src/observability/metric-retention.ts +8 -2
- package/src/observability/metric-sink.ts +11 -3
- package/src/observability/metrics-primitives.ts +42 -9
- package/src/plugins/plugin-define.ts +2 -2
- package/src/plugins/plugin-registry.ts +25 -25
- package/src/plugins/plugins/index.ts +1 -1
- package/src/plugins/plugins/nextjs.ts +16 -16
- package/src/plugins/plugins/vite.ts +7 -11
- package/src/plugins/plugins/vitest.ts +6 -11
- package/src/runtime/adaptive-plan.ts +225 -40
- package/src/runtime/agent-control.ts +58 -15
- package/src/runtime/agent-memory.ts +15 -9
- package/src/runtime/agent-observability.ts +10 -2
- package/src/runtime/anchor-manager.ts +27 -25
- package/src/runtime/async-marker.ts +7 -1
- package/src/runtime/async-runner.ts +27 -23
- package/src/runtime/auto-summarize.ts +7 -13
- package/src/runtime/background-runner.ts +189 -251
- package/src/runtime/batch-barrier.ts +18 -16
- package/src/runtime/cancellation-token.ts +16 -6
- package/src/runtime/cancellation.ts +46 -8
- package/src/runtime/capability-inventory.ts +6 -4
- package/src/runtime/chain-parser.ts +44 -11
- package/src/runtime/chain-runner.ts +63 -69
- package/src/runtime/checkpoint.ts +12 -56
- package/src/runtime/child-pi.ts +343 -78
- package/src/runtime/coalesce-tasks.ts +268 -0
- package/src/runtime/code-summary.ts +71 -26
- package/src/runtime/compact-stages/index.ts +15 -5
- package/src/runtime/compact-stages/tail-capture-stage.ts +7 -2
- package/src/runtime/compact-stages/truncation-stage.ts +4 -1
- package/src/runtime/compaction-summary.ts +17 -10
- package/src/runtime/completion-guard.ts +33 -16
- package/src/runtime/crash-classification.ts +28 -7
- package/src/runtime/crash-recovery.ts +177 -37
- package/src/runtime/crew-agent-records.ts +145 -47
- package/src/runtime/crew-hooks.ts +9 -24
- package/src/runtime/cross-extension-rpc.ts +25 -23
- package/src/runtime/custom-tools/irc-tool.ts +43 -15
- package/src/runtime/custom-tools/submit-result-tool.ts +16 -5
- package/src/runtime/delivery-coordinator.ts +34 -7
- package/src/runtime/delta-conflict.ts +9 -21
- package/src/runtime/deterministic-ast.ts +1 -1
- package/src/runtime/diagnostic-export.ts +53 -20
- package/src/runtime/direct-run.ts +12 -2
- package/src/runtime/dwf-state-store.ts +1 -1
- package/src/runtime/dynamic-workflow-context.ts +186 -58
- package/src/runtime/dynamic-workflow-runner.ts +42 -20
- package/src/runtime/effectiveness.ts +16 -8
- package/src/runtime/errors/crew-errors.ts +7 -11
- package/src/runtime/event-stream-bridge.ts +9 -3
- package/src/runtime/foreground-control.ts +54 -14
- package/src/runtime/foreground-watchdog.ts +9 -6
- package/src/runtime/goal-achievement.ts +27 -10
- package/src/runtime/goal-evaluator.ts +54 -19
- package/src/runtime/goal-loop-runner.ts +280 -99
- package/src/runtime/goal-state-store.ts +27 -17
- package/src/runtime/green-contract.ts +11 -2
- package/src/runtime/group-join.ts +64 -31
- package/src/runtime/handoff-manager.ts +37 -42
- package/src/runtime/heartbeat-gradient.ts +10 -2
- package/src/runtime/heartbeat-watcher.ts +32 -6
- package/src/runtime/hidden-handoff.ts +12 -30
- package/src/runtime/important-line-classifier.ts +12 -2
- package/src/runtime/iteration-hooks.ts +25 -15
- package/src/runtime/live-agent-control.ts +55 -7
- package/src/runtime/live-agent-manager.ts +130 -27
- package/src/runtime/live-control-realtime.ts +23 -3
- package/src/runtime/live-irc.ts +4 -1
- package/src/runtime/live-session-health.ts +12 -4
- package/src/runtime/live-session-runtime.ts +379 -117
- package/src/runtime/manifest-cache.ts +28 -12
- package/src/runtime/mcp-proxy.ts +8 -16
- package/src/runtime/metric-parser.ts +1 -5
- package/src/runtime/model-fallback.ts +55 -18
- package/src/runtime/model-resolver.ts +2 -6
- package/src/runtime/model-scope.ts +19 -3
- package/src/runtime/notebook-helpers.ts +60 -62
- package/src/runtime/orphan-worker-registry.ts +37 -26
- package/src/runtime/output-validator.ts +18 -3
- package/src/runtime/overflow-recovery.ts +5 -4
- package/src/runtime/parallel-research.ts +29 -5
- package/src/runtime/parallel-utils.ts +9 -11
- package/src/runtime/path-overlap.ts +150 -0
- package/src/runtime/peer-dep.ts +12 -17
- package/src/runtime/per-write-validator.ts +1 -3
- package/src/runtime/phase-tracker.ts +342 -330
- package/src/runtime/pi-args.ts +26 -8
- package/src/runtime/pi-json-output.ts +1 -1
- package/src/runtime/pi-spawn.ts +30 -19
- package/src/runtime/pipeline-runner.ts +56 -55
- package/src/runtime/plan-templates.ts +5 -6
- package/src/runtime/policy-engine.ts +43 -7
- package/src/runtime/post-checks.ts +12 -4
- package/src/runtime/post-exit-stdio-guard.ts +2 -2
- package/src/runtime/process-lifecycle.ts +20 -10
- package/src/runtime/process-status.ts +16 -5
- package/src/runtime/progress-event-coalescer.ts +2 -1
- package/src/runtime/progress-tracker.ts +103 -103
- package/src/runtime/prose-compressor.ts +9 -11
- package/src/runtime/recovery-recipes.ts +118 -24
- package/src/runtime/replace.ts +25 -10
- package/src/runtime/resilient-edit.ts +10 -25
- package/src/runtime/result-extractor.ts +1 -2
- package/src/runtime/retry-executor.ts +20 -4
- package/src/runtime/retry-runner.ts +26 -50
- package/src/runtime/role-permission.ts +6 -1
- package/src/runtime/run-coalesced-task-group.ts +256 -0
- package/src/runtime/run-drift.ts +14 -15
- package/src/runtime/run-tracker.ts +6 -28
- package/src/runtime/runtime-policy.ts +1 -6
- package/src/runtime/runtime-resolver.ts +80 -15
- package/src/runtime/scheduler.ts +47 -18
- package/src/runtime/semaphore.ts +5 -7
- package/src/runtime/sensitive-paths.ts +2 -1
- package/src/runtime/session-usage.ts +1 -1
- package/src/runtime/settings-store.ts +16 -12
- package/src/runtime/sidechain-output.ts +6 -2
- package/src/runtime/single-agent-compose.ts +1 -4
- package/src/runtime/skill-effectiveness.ts +29 -97
- package/src/runtime/skill-instructions.ts +40 -83
- package/src/runtime/stale-reconciler.ts +73 -197
- package/src/runtime/stream-preview.ts +1 -1
- package/src/runtime/streaming-output.ts +1 -1
- package/src/runtime/subagent-manager.ts +44 -169
- package/src/runtime/subprocess-tool-registry.ts +4 -1
- package/src/runtime/supervisor-contact.ts +10 -5
- package/src/runtime/task-display.ts +19 -5
- package/src/runtime/task-graph-scheduler.ts +95 -21
- package/src/runtime/task-graph.ts +5 -11
- package/src/runtime/task-health.ts +54 -47
- package/src/runtime/task-id.ts +11 -18
- package/src/runtime/task-output-context.ts +265 -81
- package/src/runtime/task-packet.ts +12 -20
- package/src/runtime/task-quality.ts +6 -14
- package/src/runtime/task-runner/context-retrieval.ts +4 -13
- package/src/runtime/task-runner/live-executor.ts +114 -36
- package/src/runtime/task-runner/output-splitter.ts +152 -0
- package/src/runtime/task-runner/progress.ts +50 -12
- package/src/runtime/task-runner/prompt-builder.ts +31 -7
- package/src/runtime/task-runner/prompt-pipeline.ts +31 -7
- package/src/runtime/task-runner/result-utils.ts +3 -1
- package/src/runtime/task-runner/retrieval-orchestrator.ts +310 -0
- package/src/runtime/task-runner/run-projection.ts +27 -8
- package/src/runtime/task-runner/state-helpers.ts +29 -8
- package/src/runtime/task-runner/tail-read.ts +2 -6
- package/src/runtime/task-runner.ts +180 -326
- package/src/runtime/team-runner-artifacts.ts +13 -0
- package/src/runtime/team-runner.ts +456 -974
- package/src/runtime/tool-output-pruner.ts +6 -9
- package/src/runtime/tool-progress.ts +11 -21
- package/src/runtime/verification-gates.ts +33 -24
- package/src/runtime/verification-integrity.ts +1 -4
- package/src/runtime/verification-worktree.ts +62 -12
- package/src/runtime/worker-heartbeat.ts +5 -1
- package/src/runtime/worker-startup.ts +29 -5
- package/src/runtime/workflow-state.ts +17 -9
- package/src/runtime/workspace-lock.ts +30 -35
- package/src/runtime/workspace-tree.ts +20 -32
- package/src/runtime/yield-handler.ts +43 -9
- package/src/runtime/zombie-scanner.ts +5 -4
- package/src/schema/config-schema.ts +266 -172
- package/src/schema/team-tool-schema.ts +29 -74
- package/src/schema/validation-types.ts +25 -17
- package/src/skills/discover-skills.ts +35 -10
- package/src/skills/skill-templates.ts +109 -27
- package/src/skills/validate.ts +26 -8
- package/src/state/active-run-registry.ts +87 -28
- package/src/state/artifact-store.ts +9 -5
- package/src/state/atomic-write-v2.ts +85 -63
- package/src/state/atomic-write.ts +105 -26
- package/src/state/blob-store.ts +47 -20
- package/src/state/contracts.ts +20 -5
- package/src/state/crew-init.ts +5 -22
- package/src/state/decision-ledger.ts +19 -73
- package/src/state/event-log-rotation.ts +41 -15
- package/src/state/event-log.ts +168 -53
- package/src/state/event-reconstructor.ts +11 -1
- package/src/state/gitignore-manager.ts +2 -8
- package/src/state/health-store.ts +57 -57
- package/src/state/hook-instinct-bridge.ts +1 -1
- package/src/state/hook-integrations.ts +1 -1
- package/src/state/instinct-store.ts +17 -5
- package/src/state/jsonl-writer.ts +1 -1
- package/src/state/locks.ts +23 -9
- package/src/state/mailbox.ts +151 -28
- package/src/state/observation-store.ts +20 -14
- package/src/state/run-cache.ts +142 -135
- package/src/state/run-graph.ts +6 -15
- package/src/state/run-metrics.ts +5 -18
- package/src/state/schedule.ts +15 -9
- package/src/state/state-store.ts +129 -45
- package/src/state/task-claims.ts +12 -2
- package/src/state/tiered-eval.ts +52 -43
- package/src/state/types-eval.ts +2 -2
- package/src/state/types.ts +24 -20
- package/src/state/usage.ts +20 -4
- package/src/state/worker-atomic-writer.ts +6 -3
- package/src/subagents/index.ts +2 -2
- package/src/teams/discover-teams.ts +21 -6
- package/src/tools/safe-bash-extension.ts +5 -6
- package/src/tools/safe-bash.ts +10 -11
- package/src/types/new-api-types.ts +6 -10
- package/src/ui/agent-management-overlay.ts +52 -40
- package/src/ui/card-colors.ts +13 -4
- package/src/ui/crew-footer.ts +8 -7
- package/src/ui/crew-select-list.ts +1 -1
- package/src/ui/dashboard-panes/agents-pane.ts +41 -25
- package/src/ui/dashboard-panes/cancellation-pane.ts +1 -1
- package/src/ui/dashboard-panes/capability-pane.ts +32 -15
- package/src/ui/dashboard-panes/health-pane.ts +2 -1
- package/src/ui/dashboard-panes/metrics-pane.ts +4 -1
- package/src/ui/dashboard-panes/progress-pane.ts +12 -9
- package/src/ui/heartbeat-aggregator.ts +15 -4
- package/src/ui/keybinding-map.ts +40 -7
- package/src/ui/live-conversation-overlay.ts +36 -20
- package/src/ui/live-duration.ts +1 -4
- package/src/ui/live-run-sidebar.ts +88 -25
- package/src/ui/loaders.ts +2 -8
- package/src/ui/mascot.ts +20 -36
- package/src/ui/overlays/agent-picker-overlay.ts +11 -3
- package/src/ui/overlays/confirm-overlay.ts +4 -2
- package/src/ui/overlays/help-overlay.ts +25 -14
- package/src/ui/overlays/mailbox-compose-overlay.ts +48 -11
- package/src/ui/overlays/mailbox-compose-preview.ts +20 -5
- package/src/ui/overlays/mailbox-detail-overlay.ts +27 -6
- package/src/ui/pi-ui-compat.ts +7 -7
- package/src/ui/powerbar-publisher.ts +120 -42
- package/src/ui/render-diff.ts +10 -3
- package/src/ui/render-scheduler.ts +12 -4
- package/src/ui/run-action-dispatcher.ts +81 -18
- package/src/ui/run-dashboard.ts +172 -76
- package/src/ui/run-event-bus.ts +59 -37
- package/src/ui/run-snapshot-cache.ts +276 -86
- package/src/ui/settings-overlay.ts +361 -74
- package/src/ui/status-colors.ts +12 -1
- package/src/ui/syntax-highlight.ts +1 -1
- package/src/ui/theme-adapter.ts +16 -14
- package/src/ui/theme-discovery.ts +13 -2
- package/src/ui/tool-progress-formatter.ts +7 -7
- package/src/ui/tool-render.ts +128 -56
- package/src/ui/tool-renderers/brief-mode.ts +45 -27
- package/src/ui/tool-renderers/index.ts +109 -43
- package/src/ui/transcript-cache.ts +32 -6
- package/src/ui/transcript-entries.ts +25 -23
- package/src/ui/transcript-viewer.ts +78 -29
- package/src/ui/widget/index.ts +99 -40
- package/src/ui/widget/widget-formatters.ts +13 -6
- package/src/ui/widget/widget-model.ts +19 -8
- package/src/ui/widget/widget-renderer.ts +23 -13
- package/src/ui/widget/widget-types.ts +1 -1
- package/src/utils/bm25-search.ts +199 -199
- package/src/utils/conflict-detect.ts +22 -21
- package/src/utils/env-filter.ts +14 -7
- package/src/utils/file-coalescer.ts +5 -1
- package/src/utils/fingerprint.ts +3 -6
- package/src/utils/frontmatter.ts +3 -1
- package/src/utils/fs-watch.ts +2 -6
- package/src/utils/gh-protocol.ts +119 -44
- package/src/utils/git.ts +13 -15
- package/src/utils/guards.ts +2 -5
- package/src/utils/ids.ts +9 -2
- package/src/utils/incremental-reader.ts +14 -3
- package/src/utils/internal-error.ts +2 -1
- package/src/utils/names.ts +12 -3
- package/src/utils/paths.ts +49 -5
- package/src/utils/project-detector.ts +2 -2
- package/src/utils/redaction.ts +29 -19
- package/src/utils/resolve-shell.ts +9 -7
- package/src/utils/run-watcher-registry.ts +19 -31
- package/src/utils/safe-paths.ts +45 -24
- package/src/utils/scan-cache.ts +9 -2
- package/src/utils/session-utils.ts +2 -4
- package/src/utils/sleep.ts +12 -5
- package/src/utils/sse-parser.ts +5 -17
- package/src/utils/visual.ts +52 -32
- package/src/workflows/discover-workflows.ts +41 -109
- package/src/workflows/intermediate-store.ts +5 -21
- package/src/workflows/preflight-validator.ts +6 -33
- package/src/workflows/topology-analyzer.ts +5 -21
- package/src/workflows/workflow-config.ts +7 -6
- package/src/worktree/branch-freshness.ts +66 -8
- package/src/worktree/cleanup.ts +130 -20
- package/src/worktree/worktree-manager.ts +212 -69
- package/skills/artifact-analysis-loop/SKILL.md +0 -303
- package/skills/detection-pipeline-design/SKILL.md +0 -286
- package/skills/hunting-investigation-loop/SKILL.md +0 -402
- package/skills/incident-playbook-construction/SKILL.md +0 -384
- package/skills/security-review/SKILL.md +0 -561
- package/skills/threat-hypothesis-framework/SKILL.md +0 -176
- package/skills/ui-render-performance/SKILL.md +0 -58
- /package/docs/{followup-review-round3-2026-05-12.md → archive/followup-review-round3-2026-05-12.md} +0 -0
- /package/docs/{followup-review-round4-2026-05-13.md → archive/followup-review-round4-2026-05-13.md} +0 -0
- /package/docs/{pi-crew-bugs.md → archive/pi-crew-bugs.md} +0 -0
- /package/docs/{pi-crew-test-final.md → archive/pi-crew-test-final.md} +0 -0
- /package/docs/{pi-crew-test-results.md → archive/pi-crew-test-results.md} +0 -0
- /package/docs/{pi-crew-test-round2.md → archive/pi-crew-test-round2.md} +0 -0
- /package/docs/{pi-crew-test-round4.md → archive/pi-crew-test-round4.md} +0 -0
- /package/docs/{pi-crew-test-round5.md → archive/pi-crew-test-round5.md} +0 -0
- /package/docs/{pi-crew-test-round6.md → archive/pi-crew-test-round6.md} +0 -0
- /package/docs/{pi-crew-v0.5.10-audit-fix-plan.md → archive/pi-crew-v0.5.10-audit-fix-plan.md} +0 -0
- /package/docs/{pi-crew-v0.5.11-audit-fix-plan.md → archive/pi-crew-v0.5.11-audit-fix-plan.md} +0 -0
- /package/docs/{pi-crew-v0.5.12-audit-fix-plan.md → archive/pi-crew-v0.5.12-audit-fix-plan.md} +0 -0
- /package/docs/{pi-crew-v0.5.13-audit-fix-plan.md → archive/pi-crew-v0.5.13-audit-fix-plan.md} +0 -0
- /package/docs/{pi-crew-v0.5.14-audit-fix-plan.md → archive/pi-crew-v0.5.14-audit-fix-plan.md} +0 -0
- /package/docs/{pi-crew-v0.5.16-audit-fix-plan.md → archive/pi-crew-v0.5.16-audit-fix-plan.md} +0 -0
- /package/docs/{pi-crew-v0.5.17-audit-fix-plan.md → archive/pi-crew-v0.5.17-audit-fix-plan.md} +0 -0
- /package/docs/{pi-crew-v0.5.5-audit-fix-plan.md → archive/pi-crew-v0.5.5-audit-fix-plan.md} +0 -0
- /package/docs/{pi-crew-v0.5.9-audit-fix-plan.md → archive/pi-crew-v0.5.9-audit-fix-plan.md} +0 -0
- /package/docs/{pi-mono-opportunities.md → archive/pi-mono-opportunities.md} +0 -0
- /package/docs/{pi-mono-review.md → archive/pi-mono-review.md} +0 -0
- /package/docs/{pi-subagent4-comparison.md → archive/pi-subagent4-comparison.md} +0 -0
- /package/docs/{pi-subagents3-deep-analysis.md → archive/pi-subagents3-deep-analysis.md} +0 -0
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* raw JSON in the conversation. These renderers give them a clean,
|
|
8
8
|
* crew-branded look using the active theme.
|
|
9
9
|
*/
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
import type { ExtensionAPI, MessageRenderOptions, Theme } from "@earendil-works/pi-coding-agent";
|
|
12
|
+
import { Text } from "@earendil-works/pi-tui";
|
|
12
13
|
|
|
13
14
|
interface CrewMessageDetails {
|
|
14
15
|
runId?: string;
|
|
@@ -96,9 +97,7 @@ export function renderResumeDirective(message: MessageLike, _options: MessageRen
|
|
|
96
97
|
}
|
|
97
98
|
|
|
98
99
|
/** Register all crew message renderers. Safe to call once at extension load. */
|
|
99
|
-
export function registerCrewMessageRenderers(
|
|
100
|
-
pi: { registerMessageRenderer?: ExtensionAPI["registerMessageRenderer"] },
|
|
101
|
-
): void {
|
|
100
|
+
export function registerCrewMessageRenderers(pi: { registerMessageRenderer?: ExtensionAPI["registerMessageRenderer"] }): void {
|
|
102
101
|
// Optional chaining guards against older Pi versions (and test stubs)
|
|
103
102
|
// without registerMessageRenderer.
|
|
104
103
|
// The renderers return Text (a Component) — cast through never to match
|
|
@@ -22,9 +22,17 @@ export interface NotificationRouterOptions {
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
const DEFAULT_SEVERITY_FILTER: Severity[] = ["warning", "error", "critical"];
|
|
25
|
-
const SEVERITY_RANK: Record<Severity, number> = {
|
|
25
|
+
const SEVERITY_RANK: Record<Severity, number> = {
|
|
26
|
+
info: 0,
|
|
27
|
+
warning: 1,
|
|
28
|
+
error: 2,
|
|
29
|
+
critical: 3,
|
|
30
|
+
};
|
|
26
31
|
|
|
27
|
-
export function parseHHMMRange(range: string): {
|
|
32
|
+
export function parseHHMMRange(range: string): {
|
|
33
|
+
startMin: number;
|
|
34
|
+
endMin: number;
|
|
35
|
+
} {
|
|
28
36
|
const match = /^(\d{2}):(\d{2})-(\d{2}):(\d{2})$/.exec(range);
|
|
29
37
|
if (!match) throw new Error(`Invalid quiet-hours range '${range}'. Expected HH:MM-HH:MM.`);
|
|
30
38
|
const [, sh, sm, eh, em] = match;
|
|
@@ -33,7 +41,10 @@ export function parseHHMMRange(range: string): { startMin: number; endMin: numbe
|
|
|
33
41
|
const endHour = Number(eh);
|
|
34
42
|
const endMinute = Number(em);
|
|
35
43
|
if (startHour > 23 || endHour > 23 || startMinute > 59 || endMinute > 59) throw new Error(`Invalid quiet-hours range '${range}'.`);
|
|
36
|
-
return {
|
|
44
|
+
return {
|
|
45
|
+
startMin: startHour * 60 + startMinute,
|
|
46
|
+
endMin: endHour * 60 + endMinute,
|
|
47
|
+
};
|
|
37
48
|
}
|
|
38
49
|
|
|
39
50
|
export function isInQuietHours(range: string, now = new Date()): boolean {
|
|
@@ -48,7 +59,10 @@ function notificationKey(notification: NotificationDescriptor): string {
|
|
|
48
59
|
}
|
|
49
60
|
|
|
50
61
|
function batchSeverity(items: NotificationDescriptor[]): Severity {
|
|
51
|
-
return items.reduce(
|
|
62
|
+
return items.reduce(
|
|
63
|
+
(highest, item) => (SEVERITY_RANK[item.severity] > SEVERITY_RANK[highest] ? item.severity : highest),
|
|
64
|
+
"info" as Severity,
|
|
65
|
+
);
|
|
52
66
|
}
|
|
53
67
|
|
|
54
68
|
export class NotificationRouter {
|
|
@@ -81,7 +95,10 @@ export class NotificationRouter {
|
|
|
81
95
|
|
|
82
96
|
enqueue(notification: NotificationDescriptor): boolean {
|
|
83
97
|
const now = this.opts.now?.() ?? Date.now();
|
|
84
|
-
const withTime = {
|
|
98
|
+
const withTime = {
|
|
99
|
+
...notification,
|
|
100
|
+
timestamp: notification.timestamp ?? now,
|
|
101
|
+
};
|
|
85
102
|
try {
|
|
86
103
|
this.opts.sink?.(withTime);
|
|
87
104
|
} catch (sinkError) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as fs from "node:fs";
|
|
2
2
|
import * as path from "node:path";
|
|
3
|
-
import type { NotificationDescriptor } from "./notification-router.ts";
|
|
4
|
-
import { redactSecrets } from "../utils/redaction.ts";
|
|
5
3
|
import { logInternalError } from "../utils/internal-error.ts";
|
|
4
|
+
import { redactSecrets } from "../utils/redaction.ts";
|
|
5
|
+
import type { NotificationDescriptor } from "./notification-router.ts";
|
|
6
6
|
|
|
7
7
|
export interface NotificationSink {
|
|
8
8
|
write(notification: NotificationDescriptor): void;
|
|
@@ -36,7 +36,10 @@ export function createJsonlSink(crewRoot: string, retentionDays = 7): Notificati
|
|
|
36
36
|
lastRotateDate = date;
|
|
37
37
|
}
|
|
38
38
|
fs.mkdirSync(dir, { recursive: true });
|
|
39
|
-
const payload = redactSecrets({
|
|
39
|
+
const payload = redactSecrets({
|
|
40
|
+
...notification,
|
|
41
|
+
timestamp,
|
|
42
|
+
}) as NotificationDescriptor;
|
|
40
43
|
fs.appendFileSync(path.join(dir, `${date}.jsonl`), `${JSON.stringify(payload)}\n`, "utf-8");
|
|
41
44
|
} catch (error) {
|
|
42
45
|
logInternalError("notification-sink.write", error);
|
package/src/extension/pi-api.ts
CHANGED
|
@@ -29,19 +29,28 @@
|
|
|
29
29
|
* and centralizes the type-level surface.
|
|
30
30
|
*/
|
|
31
31
|
export type {
|
|
32
|
+
AgentSessionEvent,
|
|
33
|
+
BeforeAgentStartEvent,
|
|
32
34
|
ExtensionAPI,
|
|
33
|
-
ExtensionContext,
|
|
34
35
|
ExtensionCommandContext,
|
|
36
|
+
ExtensionContext,
|
|
35
37
|
ToolDefinition,
|
|
36
|
-
AgentSessionEvent,
|
|
37
|
-
BeforeAgentStartEvent,
|
|
38
38
|
} from "@earendil-works/pi-coding-agent";
|
|
39
39
|
|
|
40
|
-
export {
|
|
40
|
+
export { createBashTool, defineTool } from "@earendil-works/pi-coding-agent";
|
|
41
41
|
|
|
42
42
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
43
|
+
* @deprecated Drift detector removed in Phase 5 follow-up to H1.
|
|
44
|
+
*
|
|
45
|
+
* History: this constant was meant to surface version-drift between
|
|
46
|
+
* dev-time type-check and runtime peer-dep version. pi-crew declares
|
|
47
|
+
* peer deps as `*` so the runtime version is set by whatever host pi
|
|
48
|
+
* install the user has — pinning this constant to a specific devDep
|
|
49
|
+
* range was a false invariant that did not reflect how extensions
|
|
50
|
+
* actually consume peer packages.
|
|
51
|
+
*
|
|
52
|
+
* Kept exported (now `"0.0.0-unset"`) only for any downstream consumers
|
|
53
|
+
* that may import it via re-exports. No diagnostic uses it anymore.
|
|
54
|
+
* Will be removed in a future major version.
|
|
46
55
|
*/
|
|
47
|
-
export const BUILT_AGAINST_PI_VERSION = "0.
|
|
56
|
+
export const BUILT_AGAINST_PI_VERSION = "0.0.0-unset";
|
|
@@ -102,10 +102,7 @@ function parsePlanDocumentContent(content: string): OrchestratedStep[] {
|
|
|
102
102
|
// Find the heading by looking back from the tag position.
|
|
103
103
|
// Use global regex to find ALL headings in the window, then take the LAST
|
|
104
104
|
// (nearest to the tag) — simple `.match()` only finds the FIRST heading.
|
|
105
|
-
const textBeforeTag = content.slice(
|
|
106
|
-
Math.max(0, current.start - 500),
|
|
107
|
-
current.start,
|
|
108
|
-
);
|
|
105
|
+
const textBeforeTag = content.slice(Math.max(0, current.start - 500), current.start);
|
|
109
106
|
const headingRegex = /(^|\n)(#{1,6})\s+(.+?)(\n|$)/g;
|
|
110
107
|
let lastHeadingMatch: RegExpExecArray | null = null;
|
|
111
108
|
let hm: RegExpExecArray | null;
|
|
@@ -120,10 +117,7 @@ function parsePlanDocumentContent(content: string): OrchestratedStep[] {
|
|
|
120
117
|
|
|
121
118
|
// Find the section content: capture until next heading (##) or next tag
|
|
122
119
|
const sectionEndMatch = afterTagContent.search(/(^|\n)(#{1,6}\s|\n<!--\s*tag:)/m);
|
|
123
|
-
const sectionContent =
|
|
124
|
-
sectionEndMatch >= 0
|
|
125
|
-
? afterTagContent.slice(0, sectionEndMatch)
|
|
126
|
-
: afterTagContent;
|
|
120
|
+
const sectionContent = sectionEndMatch >= 0 ? afterTagContent.slice(0, sectionEndMatch) : afterTagContent;
|
|
127
121
|
|
|
128
122
|
// Extract prompt text - remove the tag comment lines and empty lines
|
|
129
123
|
const promptLines: string[] = [];
|
|
@@ -191,8 +185,7 @@ function detectImplicitTag(content: string): string | undefined {
|
|
|
191
185
|
const lowerContent = content.toLowerCase();
|
|
192
186
|
// Use word-boundary regex to avoid substring false matches.
|
|
193
187
|
// E.g., "implementation" must NOT trigger "impl" — only the word "implement" should.
|
|
194
|
-
const hasWord = (word: string): boolean =>
|
|
195
|
-
new RegExp(`\\b${word}\\b`).test(lowerContent);
|
|
188
|
+
const hasWord = (word: string): boolean => new RegExp(`\\b${word}\\b`).test(lowerContent);
|
|
196
189
|
|
|
197
190
|
if (hasWord("design") || hasWord("architecture")) return "design";
|
|
198
191
|
if (hasWord("implement") || hasWord("coding")) return "impl";
|
|
@@ -224,9 +217,7 @@ export function buildAgentChain(steps: OrchestratedStep[]): string[] {
|
|
|
224
217
|
* @param steps - Array of OrchestratedStep to convert.
|
|
225
218
|
* @returns Array of chain objects with step data and commands.
|
|
226
219
|
*/
|
|
227
|
-
export function buildChainData(
|
|
228
|
-
steps: OrchestratedStep[],
|
|
229
|
-
): Array<{
|
|
220
|
+
export function buildChainData(steps: OrchestratedStep[]): Array<{
|
|
230
221
|
step: OrchestratedStep;
|
|
231
222
|
commands: string[];
|
|
232
223
|
}> {
|
|
@@ -258,10 +249,7 @@ export function formatPlanOverview(planPath: string): string {
|
|
|
258
249
|
}
|
|
259
250
|
|
|
260
251
|
function formatStepsOverview(steps: OrchestratedStep[]): string {
|
|
261
|
-
const lines: string[] = [
|
|
262
|
-
`Plan Orchestration: ${steps.length} step(s)`,
|
|
263
|
-
"",
|
|
264
|
-
];
|
|
252
|
+
const lines: string[] = [`Plan Orchestration: ${steps.length} step(s)`, ""];
|
|
265
253
|
|
|
266
254
|
const tagCounts: Record<string, number> = {};
|
|
267
255
|
for (const step of steps) {
|
|
@@ -276,15 +264,10 @@ function formatStepsOverview(steps: OrchestratedStep[]): string {
|
|
|
276
264
|
|
|
277
265
|
lines.push("", "Steps:");
|
|
278
266
|
for (const step of steps) {
|
|
279
|
-
const preview =
|
|
280
|
-
step.prompt.length > 60
|
|
281
|
-
? step.prompt.slice(0, 60) + "..."
|
|
282
|
-
: step.prompt;
|
|
267
|
+
const preview = step.prompt.length > 60 ? step.prompt.slice(0, 60) + "..." : step.prompt;
|
|
283
268
|
// Include heading if available (e.g., "Security Review" from the plan's heading)
|
|
284
269
|
const headingPrefix = step.heading ? `${step.heading}: ` : "";
|
|
285
|
-
lines.push(
|
|
286
|
-
` ${step.stepId} [${step.tag}] ${step.chain.join(",")}: ${headingPrefix}${preview}`,
|
|
287
|
-
);
|
|
270
|
+
lines.push(` ${step.stepId} [${step.tag}] ${step.chain.join(",")}: ${headingPrefix}${preview}`);
|
|
288
271
|
}
|
|
289
272
|
|
|
290
273
|
return lines.join("\n");
|
|
@@ -293,9 +276,7 @@ function formatStepsOverview(steps: OrchestratedStep[]): string {
|
|
|
293
276
|
/**
|
|
294
277
|
* Main orchestration function that parses a plan and returns pre-formatted output.
|
|
295
278
|
*/
|
|
296
|
-
export async function orchestratePlan(
|
|
297
|
-
options: OrchestrateOptions,
|
|
298
|
-
): Promise<{
|
|
279
|
+
export async function orchestratePlan(options: OrchestrateOptions): Promise<{
|
|
299
280
|
steps: OrchestratedStep[];
|
|
300
281
|
chain: string[];
|
|
301
282
|
overview: string;
|
|
@@ -70,7 +70,13 @@ const DEFAULT_PI_CREW_CONFIG = {
|
|
|
70
70
|
},
|
|
71
71
|
};
|
|
72
72
|
|
|
73
|
-
function copyBuiltinDir(
|
|
73
|
+
function copyBuiltinDir(
|
|
74
|
+
kind: "agents" | "teams" | "workflows",
|
|
75
|
+
targetDir: string,
|
|
76
|
+
overwrite: boolean,
|
|
77
|
+
copiedFiles: string[],
|
|
78
|
+
skippedFiles: string[],
|
|
79
|
+
): void {
|
|
74
80
|
const sourceDir = path.join(packageRoot(), kind);
|
|
75
81
|
if (!fs.existsSync(sourceDir)) return;
|
|
76
82
|
for (const entry of fs.readdirSync(sourceDir)) {
|
|
@@ -97,7 +103,8 @@ export function initializeProject(cwd: string, options: ProjectInitOptions = {})
|
|
|
97
103
|
const teamsDir = path.join(crewRoot, "teams");
|
|
98
104
|
const workflowsDir = path.join(crewRoot, "workflows");
|
|
99
105
|
const configScope = options.configScope ?? "global";
|
|
100
|
-
const configPath =
|
|
106
|
+
const configPath =
|
|
107
|
+
configScope === "project" ? path.join(projectPiRoot(cwd), "pi-crew.json") : configScope === "global" ? globalConfigPath() : "";
|
|
101
108
|
ensureDir(agentsDir, createdDirs);
|
|
102
109
|
ensureDir(teamsDir, createdDirs);
|
|
103
110
|
ensureDir(workflowsDir, createdDirs);
|
|
@@ -124,9 +131,7 @@ export function initializeProject(cwd: string, options: ProjectInitOptions = {})
|
|
|
124
131
|
|
|
125
132
|
const ignoreMethod = options.ignoreMethod ?? "gitignore";
|
|
126
133
|
const desired = [`${ignorePrefix}/state/`, `${ignorePrefix}/artifacts/`, `${ignorePrefix}/worktrees/`, `${ignorePrefix}/imports/`];
|
|
127
|
-
const gitignorePath = ignoreMethod === "exclude"
|
|
128
|
-
? path.join(cwd, ".git", "info", "exclude")
|
|
129
|
-
: path.join(cwd, ".gitignore");
|
|
134
|
+
const gitignorePath = ignoreMethod === "exclude" ? path.join(cwd, ".git", "info", "exclude") : path.join(cwd, ".gitignore");
|
|
130
135
|
let gitignoreUpdated = false;
|
|
131
136
|
if (ignoreMethod === "exclude") {
|
|
132
137
|
// Ensure .git/info/ directory exists
|
|
@@ -151,5 +156,15 @@ export function initializeProject(cwd: string, options: ProjectInitOptions = {})
|
|
|
151
156
|
// learns pi-crew's commands from tool registration, not AGENTS.md.
|
|
152
157
|
// `team action=cleanup` still removes any block injected by older versions.
|
|
153
158
|
|
|
154
|
-
return {
|
|
159
|
+
return {
|
|
160
|
+
createdDirs,
|
|
161
|
+
copiedFiles,
|
|
162
|
+
skippedFiles,
|
|
163
|
+
gitignorePath,
|
|
164
|
+
gitignoreUpdated,
|
|
165
|
+
configPath,
|
|
166
|
+
configScope,
|
|
167
|
+
configCreated,
|
|
168
|
+
configSkipped,
|
|
169
|
+
};
|
|
155
170
|
}
|