pi-crew 0.9.16 → 0.9.18
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 +130 -0
- package/README.md +19 -0
- package/dist/build-meta.json +21784 -0
- package/dist/index.mjs +83169 -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/migration/atomic-write-v2-migration.md +297 -0
- package/docs/patterns/command-agent-skill.md +1 -1
- package/docs/perf/performance-review-2026-07.md +287 -0
- 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 +303 -591
- 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 +149 -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 +39 -24
- 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 +344 -79
- 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 +187 -59
- 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 +13 -31
- 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 +10 -18
- 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 +2 -6
- package/src/runtime/retry-executor.ts +20 -4
- package/src/runtime/retry-runner.ts +27 -51
- 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 +12 -19
- 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 +50 -14
- 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 +2 -7
- 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 +106 -27
- 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 +137 -47
- 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/terminal-status.ts +1 -3
- 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 +46 -29
- 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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { BeforeAgentStartEvent, ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
-
import { effectiveAutonomousConfig, loadConfig, type PiTeamsAutonomousConfig } from "../config/config.ts";
|
|
3
2
|
import { allAgents, discoverAgents } from "../agents/discover-agents.ts";
|
|
3
|
+
import { effectiveAutonomousConfig, loadConfig, type PiTeamsAutonomousConfig } from "../config/config.ts";
|
|
4
4
|
import { allTeams, discoverTeams } from "../teams/discover-teams.ts";
|
|
5
5
|
import { allWorkflows, discoverWorkflows } from "../workflows/discover-workflows.ts";
|
|
6
6
|
|
|
@@ -12,27 +12,29 @@ const DEFAULT_MAGIC_KEYWORDS: Record<string, string[]> = {
|
|
|
12
12
|
};
|
|
13
13
|
|
|
14
14
|
const BULLET_OR_NUMBERED_TASK_RE = /^\s*(?:[-*•]|\d+[.)])\s+\S+/;
|
|
15
|
-
const ACTIONABLE_TASK_TERMS: readonly string[] = Array.from(
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
15
|
+
const ACTIONABLE_TASK_TERMS: readonly string[] = Array.from(
|
|
16
|
+
new Set([
|
|
17
|
+
"implement",
|
|
18
|
+
"refactor",
|
|
19
|
+
"migrate",
|
|
20
|
+
"fix",
|
|
21
|
+
"add",
|
|
22
|
+
"update",
|
|
23
|
+
"test",
|
|
24
|
+
"review",
|
|
25
|
+
"research",
|
|
26
|
+
"analyze",
|
|
27
|
+
"document",
|
|
28
|
+
"docs",
|
|
29
|
+
"sửa",
|
|
30
|
+
"thêm",
|
|
31
|
+
"cập nhật",
|
|
32
|
+
"kiểm thử",
|
|
33
|
+
"nghiên cứu",
|
|
34
|
+
"phân tích",
|
|
35
|
+
"viết docs",
|
|
36
|
+
]),
|
|
37
|
+
);
|
|
36
38
|
|
|
37
39
|
function mergeMagicKeywords(configured: Record<string, string[]> | undefined): Record<string, string[]> {
|
|
38
40
|
return { ...DEFAULT_MAGIC_KEYWORDS, ...(configured ?? {}) };
|
|
@@ -49,7 +51,9 @@ function actionableLineCount(prompt: string): number {
|
|
|
49
51
|
function hasTaskListSignal(prompt: string): boolean {
|
|
50
52
|
const lower = prompt.toLowerCase();
|
|
51
53
|
const bulletCount = prompt.split(/\r?\n/).filter((line) => BULLET_OR_NUMBERED_TASK_RE.test(line)).length;
|
|
52
|
-
const explicitList = ["các task", "danh sách task", "todo", "tasks sau", "task list", "làm lần lượt"].some((term) =>
|
|
54
|
+
const explicitList = ["các task", "danh sách task", "todo", "tasks sau", "task list", "làm lần lượt"].some((term) =>
|
|
55
|
+
lower.includes(term),
|
|
56
|
+
);
|
|
53
57
|
return bulletCount >= 3 || actionableLineCount(prompt) >= 2 || (explicitList && bulletCount >= 2);
|
|
54
58
|
}
|
|
55
59
|
|
|
@@ -69,9 +73,10 @@ export function buildAutonomousPolicy(prompt: string, config: PiTeamsAutonomousC
|
|
|
69
73
|
const asyncGuidance = effective.preferAsyncForLongTasks
|
|
70
74
|
? "For long-running team runs, prefer async: true unless the user needs immediate foreground progress."
|
|
71
75
|
: "Use async: true only when the task is clearly long-running or the user asks for background execution.";
|
|
72
|
-
const worktreeGuidance =
|
|
73
|
-
|
|
74
|
-
|
|
76
|
+
const worktreeGuidance =
|
|
77
|
+
effective.allowWorktreeSuggestion === false
|
|
78
|
+
? "Do not suggest worktree mode unless the user explicitly asks for it."
|
|
79
|
+
: "Consider workspaceMode: 'worktree' for parallel or risky code-changing work in clean git repositories.";
|
|
75
80
|
return [
|
|
76
81
|
"# pi-crew Delegation Policy (MANDATORY)",
|
|
77
82
|
"",
|
|
@@ -83,7 +88,7 @@ export function buildAutonomousPolicy(prompt: string, config: PiTeamsAutonomousC
|
|
|
83
88
|
"| Task characteristic | Delegate? | Method |",
|
|
84
89
|
"|---|---|---|",
|
|
85
90
|
"| Read/edit 1-2 files, simple question | NO | Do it directly |",
|
|
86
|
-
|
|
91
|
+
'| User explicitly says "do it yourself" / "no team" | NO | Do it directly |',
|
|
87
92
|
"| Destructive action (delete/prune/forget) | NO | Ask for confirmation first |",
|
|
88
93
|
"| Research / deep-read / source audit / \"nghiên cứu\" | YES | `team action='research'` |",
|
|
89
94
|
"| Multi-file implementation / feature / refactor | YES | `team action='run', team='implementation'` |",
|
|
@@ -109,7 +114,9 @@ export function buildAutonomousPolicy(prompt: string, config: PiTeamsAutonomousC
|
|
|
109
114
|
"",
|
|
110
115
|
asyncGuidance,
|
|
111
116
|
worktreeGuidance,
|
|
112
|
-
intents.length > 0
|
|
117
|
+
intents.length > 0
|
|
118
|
+
? `Detected pi-crew routing signals/intents in the user prompt: ${intents.join(", ")}. Consider the matching team workflow if appropriate.`
|
|
119
|
+
: "No explicit pi-crew routing signal was detected; decide based on complexity, risk, task-list structure, and conflict potential.",
|
|
113
120
|
].join("\n");
|
|
114
121
|
}
|
|
115
122
|
|
|
@@ -135,35 +142,68 @@ function capLines(lines: string[], maxChars: number): string[] {
|
|
|
135
142
|
}
|
|
136
143
|
|
|
137
144
|
export function buildResourceRoutingGuidance(cwd: string, maxChars = 5000): string {
|
|
138
|
-
const teams = allTeams(discoverTeams(cwd))
|
|
139
|
-
|
|
140
|
-
|
|
145
|
+
const teams = allTeams(discoverTeams(cwd))
|
|
146
|
+
.sort((a, b) => sourcePriority(a.source) - sourcePriority(b.source))
|
|
147
|
+
.slice(0, 12);
|
|
148
|
+
const workflows = allWorkflows(discoverWorkflows(cwd))
|
|
149
|
+
.sort((a, b) => sourcePriority(a.source) - sourcePriority(b.source))
|
|
150
|
+
.slice(0, 12);
|
|
151
|
+
const agents = allAgents(discoverAgents(cwd))
|
|
152
|
+
.sort((a, b) => sourcePriority(a.source) - sourcePriority(b.source))
|
|
153
|
+
.slice(0, 16);
|
|
141
154
|
const lines = [
|
|
142
155
|
"# pi-crew Available Resources",
|
|
143
156
|
"Use project-scoped resources over user/builtin resources when names overlap.",
|
|
144
157
|
"Teams:",
|
|
145
|
-
...(teams.length
|
|
158
|
+
...(teams.length
|
|
159
|
+
? teams.map(
|
|
160
|
+
(team) =>
|
|
161
|
+
`- ${team.name} (${team.source}): ${team.description}; defaultWorkflow=${team.defaultWorkflow ?? "default"}; roles=${team.roles.map((role) => `${role.name}->${role.agent}`).join(", ") || "none"}${team.routing?.triggers?.length ? `; triggers=${team.routing.triggers.join(",")}` : ""}${team.routing?.useWhen?.length ? `; useWhen=${team.routing.useWhen.join(";")}` : ""}`,
|
|
162
|
+
)
|
|
163
|
+
: ["- (none)"]),
|
|
146
164
|
"Workflows:",
|
|
147
|
-
...(workflows.length
|
|
165
|
+
...(workflows.length
|
|
166
|
+
? workflows.map(
|
|
167
|
+
(workflow) =>
|
|
168
|
+
`- ${workflow.name} (${workflow.source}): ${workflow.description}; steps=${workflow.steps.map((step) => `${step.id}:${step.role}`).join(", ") || "none"}`,
|
|
169
|
+
)
|
|
170
|
+
: ["- (none)"]),
|
|
148
171
|
"Agents:",
|
|
149
|
-
...(agents.length
|
|
172
|
+
...(agents.length
|
|
173
|
+
? agents.map(
|
|
174
|
+
(agent) =>
|
|
175
|
+
`- ${agent.name} (${agent.source}): ${agent.description}${agent.routing?.triggers?.length ? `; triggers=${agent.routing.triggers.join(",")}` : ""}${agent.routing?.useWhen?.length ? `; useWhen=${agent.routing.useWhen.join(";")}` : ""}${agent.routing?.avoidWhen?.length ? `; avoidWhen=${agent.routing.avoidWhen.join(";")}` : ""}${agent.routing?.cost ? `; cost=${agent.routing.cost}` : ""}${agent.routing?.category ? `; category=${agent.routing.category}` : ""}`,
|
|
176
|
+
)
|
|
177
|
+
: ["- (none)"]),
|
|
150
178
|
];
|
|
151
179
|
return capLines(lines, maxChars).join("\n");
|
|
152
180
|
}
|
|
153
181
|
|
|
154
|
-
export function appendAutonomousPolicy(
|
|
182
|
+
export function appendAutonomousPolicy(
|
|
183
|
+
systemPrompt: string,
|
|
184
|
+
userPrompt: string,
|
|
185
|
+
config: PiTeamsAutonomousConfig = {},
|
|
186
|
+
cwd?: string,
|
|
187
|
+
): string {
|
|
155
188
|
const resourceGuidance = cwd ? `\n\n${buildResourceRoutingGuidance(cwd)}` : "";
|
|
156
189
|
return `${systemPrompt}\n\n${buildAutonomousPolicy(userPrompt, config)}${resourceGuidance}`;
|
|
157
190
|
}
|
|
158
191
|
|
|
159
192
|
export function registerAutonomousPolicy(pi: ExtensionAPI): void {
|
|
160
193
|
pi.on("before_agent_start", (event: BeforeAgentStartEvent) => {
|
|
161
|
-
const options =
|
|
194
|
+
const options =
|
|
195
|
+
(
|
|
196
|
+
event as BeforeAgentStartEvent & {
|
|
197
|
+
systemPromptOptions?: { cwd?: unknown };
|
|
198
|
+
}
|
|
199
|
+
).systemPromptOptions ?? {};
|
|
162
200
|
const cwd = typeof options.cwd === "string" ? options.cwd : undefined;
|
|
163
201
|
const loaded = loadConfig(cwd);
|
|
164
202
|
const autonomous = effectiveAutonomousConfig(loaded.config.autonomous);
|
|
165
203
|
if (!autonomous.enabled) return undefined;
|
|
166
204
|
if (!autonomous.injectPolicy) return undefined;
|
|
167
|
-
return {
|
|
205
|
+
return {
|
|
206
|
+
systemPrompt: appendAutonomousPolicy(event.systemPrompt, event.prompt, autonomous, cwd),
|
|
207
|
+
};
|
|
168
208
|
});
|
|
169
209
|
}
|
|
@@ -10,19 +10,20 @@
|
|
|
10
10
|
* requiring the user to memorize long generated IDs.
|
|
11
11
|
*/
|
|
12
12
|
import type { AutocompleteItem } from "@earendil-works/pi-tui";
|
|
13
|
-
import {
|
|
14
|
-
import { discoverTeams, allTeams } from "../teams/discover-teams.ts";
|
|
15
|
-
import { discoverWorkflows, allWorkflows } from "../workflows/discover-workflows.ts";
|
|
16
|
-
import { discoverAgents, allAgents } from "../agents/discover-agents.ts";
|
|
13
|
+
import { allAgents, discoverAgents } from "../agents/discover-agents.ts";
|
|
17
14
|
import type { TeamRunManifest } from "../state/types.ts";
|
|
15
|
+
import { allTeams, discoverTeams } from "../teams/discover-teams.ts";
|
|
16
|
+
import { allWorkflows, discoverWorkflows } from "../workflows/discover-workflows.ts";
|
|
17
|
+
import { listRecentRuns } from "./run-index.ts";
|
|
18
18
|
|
|
19
19
|
const MAX_RUN_SUGGESTIONS = 15;
|
|
20
20
|
|
|
21
21
|
function filterByPrefix(items: AutocompleteItem[], prefix: string): AutocompleteItem[] | null {
|
|
22
22
|
const trimmed = prefix.trim();
|
|
23
|
-
const filtered =
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
const filtered =
|
|
24
|
+
trimmed === ""
|
|
25
|
+
? items
|
|
26
|
+
: items.filter((item) => item.value.startsWith(trimmed) || item.label.toLowerCase().includes(trimmed.toLowerCase()));
|
|
26
27
|
return filtered.length > 0 ? filtered.slice(0, MAX_RUN_SUGGESTIONS) : null;
|
|
27
28
|
}
|
|
28
29
|
|
|
@@ -67,7 +68,7 @@ export function suggestRunIds(_prefix: string, cwd?: string): AutocompleteItem[]
|
|
|
67
68
|
export async function suggestTaskIds(runId: string, prefix: string, cwd?: string): Promise<AutocompleteItem[] | null> {
|
|
68
69
|
const resolvedCwd = cwd ?? process.cwd();
|
|
69
70
|
// Dynamic import to avoid pulling state-store into the hot command-registration path.
|
|
70
|
-
|
|
71
|
+
// LAZY: defer dynamic import of ../state/state-store.ts to its call site.
|
|
71
72
|
const { loadRunManifestById } = await import("../state/state-store.ts");
|
|
72
73
|
const loaded = loadRunManifestById(resolvedCwd, runId);
|
|
73
74
|
if (!loaded) return null;
|
|
@@ -33,10 +33,10 @@
|
|
|
33
33
|
|
|
34
34
|
import type { AgentMessage } from "@earendil-works/pi-agent-core";
|
|
35
35
|
import type { Message } from "@earendil-works/pi-ai";
|
|
36
|
-
import type {
|
|
37
|
-
import { collectInFlightRuns } from "./registration/compaction-guard.ts";
|
|
38
|
-
import { extractSessionId } from "../utils/session-utils.ts";
|
|
36
|
+
import type { ContextEvent, ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
39
37
|
import type { TeamRunManifest } from "../state/types.ts";
|
|
38
|
+
import { extractSessionId } from "../utils/session-utils.ts";
|
|
39
|
+
import { collectInFlightRuns } from "./registration/compaction-guard.ts";
|
|
40
40
|
|
|
41
41
|
/** Sentinel that marks an injected ambient-status user message. */
|
|
42
42
|
export const AMBIENT_STATUS_SENTINEL = "[pi-crew ambient status";
|
|
@@ -64,7 +64,9 @@ function runAge(createdAt?: string, updatedAt?: string): string {
|
|
|
64
64
|
if (Number.isFinite(created)) {
|
|
65
65
|
return `, running ${humanizeMs(Date.now() - created)}`;
|
|
66
66
|
}
|
|
67
|
-
} catch {
|
|
67
|
+
} catch {
|
|
68
|
+
/* ignore malformed timestamps */
|
|
69
|
+
}
|
|
68
70
|
return "";
|
|
69
71
|
}
|
|
70
72
|
|
|
@@ -84,8 +86,7 @@ function humanizeMs(ms: number): string {
|
|
|
84
86
|
*/
|
|
85
87
|
export function formatAmbientStatus(runs: TeamRunManifest[]): string {
|
|
86
88
|
if (runs.length === 0) return "";
|
|
87
|
-
const truncate = (s: string, n: number): string =>
|
|
88
|
-
s.length > n ? `${s.slice(0, n - 1)}…` : s;
|
|
89
|
+
const truncate = (s: string, n: number): string => (s.length > n ? `${s.slice(0, n - 1)}…` : s);
|
|
89
90
|
const lines: string[] = [
|
|
90
91
|
`${AMBIENT_STATUS_SENTINEL} — environmental context, not a user request]`,
|
|
91
92
|
`${runs.length} pi-crew run${runs.length === 1 ? "" : "s"} in flight:`,
|
|
@@ -99,7 +100,9 @@ export function formatAmbientStatus(runs: TeamRunManifest[]): string {
|
|
|
99
100
|
if (runs.length > MAX_INLINE_RUNS) {
|
|
100
101
|
lines.push(`• …and ${runs.length - MAX_INLINE_RUNS} more`);
|
|
101
102
|
}
|
|
102
|
-
lines.push(
|
|
103
|
+
lines.push(
|
|
104
|
+
'Inspect/join via the `team` tool: action="status" (list), action="wait" (join running), action="summary"/action="get" (results).',
|
|
105
|
+
);
|
|
103
106
|
return lines.join("\n");
|
|
104
107
|
}
|
|
105
108
|
|
|
@@ -163,10 +166,7 @@ export function handleContextEvent(event: ContextEvent, cwd: string, sessionId?:
|
|
|
163
166
|
* Pass `enabled: false` (from `runtime.reliability.ambientStatusInjection`) to
|
|
164
167
|
* disable the feature without unwiring the handler.
|
|
165
168
|
*/
|
|
166
|
-
export function registerContextStatusInjection(
|
|
167
|
-
pi: ExtensionAPI,
|
|
168
|
-
opts: { enabled?: boolean } = {},
|
|
169
|
-
): void {
|
|
169
|
+
export function registerContextStatusInjection(pi: ExtensionAPI, opts: { enabled?: boolean } = {}): void {
|
|
170
170
|
if (opts.enabled === false) return;
|
|
171
171
|
pi.on("context", (event: ContextEvent, ctx: unknown): AmbientContextResult | undefined => {
|
|
172
172
|
// crew state is per-project; use the session ctx cwd when available,
|
|
@@ -176,7 +176,9 @@ export function registerContextStatusInjection(
|
|
|
176
176
|
const cwd =
|
|
177
177
|
typeof ctx === "object" && ctx !== null && typeof (ctx as { cwd?: unknown }).cwd === "string"
|
|
178
178
|
? (ctx as { cwd: string }).cwd
|
|
179
|
-
: typeof process.cwd === "function"
|
|
179
|
+
: typeof process.cwd === "function"
|
|
180
|
+
? process.cwd()
|
|
181
|
+
: ".";
|
|
180
182
|
const sessionId = extractSessionId(ctx);
|
|
181
183
|
return handleContextEvent(event, cwd, sessionId);
|
|
182
184
|
});
|
|
@@ -12,11 +12,7 @@
|
|
|
12
12
|
* slash-command, file (`@`), and command-argument completion all keep working
|
|
13
13
|
* unchanged.
|
|
14
14
|
*/
|
|
15
|
-
import type {
|
|
16
|
-
AutocompleteItem,
|
|
17
|
-
AutocompleteProvider,
|
|
18
|
-
AutocompleteSuggestions,
|
|
19
|
-
} from "@earendil-works/pi-tui";
|
|
15
|
+
import type { AutocompleteItem, AutocompleteProvider, AutocompleteSuggestions } from "@earendil-works/pi-tui";
|
|
20
16
|
import { CREW_PHRASES } from "./crew-input-router.ts";
|
|
21
17
|
|
|
22
18
|
/** Max phrases to suggest. */
|
|
@@ -68,9 +64,7 @@ export function suggestCrewPhrases(query: string): AutocompleteItem[] {
|
|
|
68
64
|
* a crew natural-language trigger, returns phrase suggestions; otherwise
|
|
69
65
|
* delegates to `current`.
|
|
70
66
|
*/
|
|
71
|
-
export function createCrewAutocompleteProvider(
|
|
72
|
-
current: AutocompleteProvider,
|
|
73
|
-
): AutocompleteProvider {
|
|
67
|
+
export function createCrewAutocompleteProvider(current: AutocompleteProvider): AutocompleteProvider {
|
|
74
68
|
return {
|
|
75
69
|
async getSuggestions(
|
|
76
70
|
lines: string[],
|
|
@@ -115,11 +109,7 @@ export function createCrewAutocompleteProvider(
|
|
|
115
109
|
return current.applyCompletion(lines, cursorLine, cursorCol, item, prefix);
|
|
116
110
|
},
|
|
117
111
|
|
|
118
|
-
shouldTriggerFileCompletion(
|
|
119
|
-
lines: string[],
|
|
120
|
-
cursorLine: number,
|
|
121
|
-
cursorCol: number,
|
|
122
|
-
): boolean {
|
|
112
|
+
shouldTriggerFileCompletion(lines: string[], cursorLine: number, cursorCol: number): boolean {
|
|
123
113
|
// Suppress file-completion trigger inside a crew phrase so the
|
|
124
114
|
// editor doesn't pop a file list over our phrase suggestions.
|
|
125
115
|
if (cursorLine === 0) {
|
|
@@ -132,8 +122,10 @@ export function createCrewAutocompleteProvider(
|
|
|
132
122
|
}
|
|
133
123
|
|
|
134
124
|
/** Register the crew autocomplete provider on a Pi UI context. Safe to call once. */
|
|
135
|
-
export function registerCrewAutocomplete(
|
|
136
|
-
|
|
137
|
-
|
|
125
|
+
export function registerCrewAutocomplete(ctx: {
|
|
126
|
+
ui?: {
|
|
127
|
+
addAutocompleteProvider?: (factory: (current: AutocompleteProvider) => AutocompleteProvider) => void;
|
|
128
|
+
};
|
|
129
|
+
}): void {
|
|
138
130
|
ctx.ui?.addAutocompleteProvider?.((current) => createCrewAutocompleteProvider(current));
|
|
139
131
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
-
import { logInternalError } from "../utils/internal-error.ts";
|
|
3
2
|
import { cleanupAllTrackedTempDirs } from "../runtime/pi-args.ts";
|
|
3
|
+
import { logInternalError } from "../utils/internal-error.ts";
|
|
4
|
+
|
|
4
5
|
// NOTE: globalProgressTracker import kept for documentation but not directly used
|
|
5
6
|
// since we don't have agent IDs to untrack. Actual progress clearing should be
|
|
6
7
|
// handled by the progress tracker itself on shutdown.
|
|
@@ -50,7 +50,7 @@ const CREW_SHORTCUTS: ReadonlyArray<ShortcutRegistration> = [
|
|
|
50
50
|
// (avoids pulling the full commands.ts dependency tree into every
|
|
51
51
|
// process that imports this module, e.g. the unit test).
|
|
52
52
|
handler: async (ctx) => {
|
|
53
|
-
|
|
53
|
+
// LAZY: defer dynamic import of ./registration/commands.ts to its call site.
|
|
54
54
|
const { openTeamSettingsOverlay } = await import("./registration/commands.ts");
|
|
55
55
|
await openTeamSettingsOverlay(ctx);
|
|
56
56
|
},
|
|
@@ -61,7 +61,7 @@ const CREW_SHORTCUTS: ReadonlyArray<ShortcutRegistration> = [
|
|
|
61
61
|
// Lazy-import so the heavy UI module chain (RunDashboard etc.) is only
|
|
62
62
|
// loaded on first use, not at extension load.
|
|
63
63
|
handler: async (ctx) => {
|
|
64
|
-
|
|
64
|
+
// LAZY: defer dynamic import of ./registration/commands.ts to its call site.
|
|
65
65
|
const { openTeamDashboard } = await import("./registration/commands.ts");
|
|
66
66
|
await openTeamDashboard(ctx);
|
|
67
67
|
},
|
|
@@ -72,11 +72,14 @@ const CREW_SHORTCUTS: ReadonlyArray<ShortcutRegistration> = [
|
|
|
72
72
|
* Register all crew keyboard shortcuts on a Pi instance. Safe to call once at
|
|
73
73
|
* extension load. No-ops when `registerShortcut` is unavailable (older Pi).
|
|
74
74
|
*/
|
|
75
|
-
export function registerCrewShortcuts(
|
|
76
|
-
|
|
77
|
-
): void {
|
|
75
|
+
export function registerCrewShortcuts(pi: {
|
|
76
|
+
registerShortcut?: (shortcut: KeyId, options: { description?: string; handler: ShortcutHandler }) => void;
|
|
77
|
+
}): void {
|
|
78
78
|
for (const sc of CREW_SHORTCUTS) {
|
|
79
|
-
pi.registerShortcut?.(sc.key, {
|
|
79
|
+
pi.registerShortcut?.(sc.key, {
|
|
80
|
+
description: sc.description,
|
|
81
|
+
handler: sc.handler,
|
|
82
|
+
});
|
|
80
83
|
}
|
|
81
84
|
}
|
|
82
85
|
|