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
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
* Mirrors Pi's built-in /settings selector: tab bar, settings list with
|
|
4
4
|
* label/value alignment, inline toggle, select submenu, and text input.
|
|
5
5
|
*/
|
|
6
|
-
|
|
6
|
+
|
|
7
|
+
import { truncateToWidth, visibleWidth } from "../utils/visual.ts";
|
|
7
8
|
import { DynamicCrewBorder } from "./dynamic-border.ts";
|
|
9
|
+
import type { CrewTheme } from "./theme-adapter.ts";
|
|
8
10
|
import { discoverPiThemes, getActivePiTheme } from "./theme-discovery.ts";
|
|
9
|
-
import { visibleWidth, truncateToWidth } from "../utils/visual.ts";
|
|
10
11
|
|
|
11
12
|
// ---------------------------------------------------------------------------
|
|
12
13
|
// Types
|
|
@@ -57,47 +58,265 @@ const TABS: TabDef[] = [
|
|
|
57
58
|
|
|
58
59
|
const SETTINGS: SettingDef[] = [
|
|
59
60
|
// Runtime
|
|
60
|
-
{
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
61
|
+
{
|
|
62
|
+
id: "runtime.mode",
|
|
63
|
+
label: "Runtime Mode",
|
|
64
|
+
type: "enum",
|
|
65
|
+
values: ["auto", "scaffold", "child-process", "live-session"],
|
|
66
|
+
tab: "runtime",
|
|
67
|
+
description: "How workers execute. 'auto' picks best available. 'scaffold' = dry-run.",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
id: "runtime.maxTurns",
|
|
71
|
+
label: "Max Turns",
|
|
72
|
+
type: "number",
|
|
73
|
+
tab: "runtime",
|
|
74
|
+
description: "Maximum agent turns per task.",
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
id: "runtime.graceTurns",
|
|
78
|
+
label: "Grace Turns",
|
|
79
|
+
type: "number",
|
|
80
|
+
tab: "runtime",
|
|
81
|
+
description: "Extra turns allowed after completion.",
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: "runtime.inheritContext",
|
|
85
|
+
label: "Inherit Context",
|
|
86
|
+
type: "boolean",
|
|
87
|
+
tab: "runtime",
|
|
88
|
+
description: "Pass parent conversation context to workers.",
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
id: "runtime.promptMode",
|
|
92
|
+
label: "Prompt Mode",
|
|
93
|
+
type: "enum",
|
|
94
|
+
values: ["compact", "full", "minimal"],
|
|
95
|
+
tab: "runtime",
|
|
96
|
+
description: "How much prompt detail to send to workers.",
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
id: "runtime.completionMutationGuard",
|
|
100
|
+
label: "Mutation Guard",
|
|
101
|
+
type: "enum",
|
|
102
|
+
values: ["off", "warn", "block"],
|
|
103
|
+
tab: "runtime",
|
|
104
|
+
description: "Guard against tasks completing without file mutations.",
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: "runtime.isolationPolicy",
|
|
108
|
+
label: "Isolation Policy",
|
|
109
|
+
type: "enum",
|
|
110
|
+
values: ["workspace", "none"],
|
|
111
|
+
tab: "runtime",
|
|
112
|
+
description: "Workspace isolation between agents.",
|
|
113
|
+
},
|
|
67
114
|
// Limits
|
|
68
|
-
{
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
115
|
+
{
|
|
116
|
+
id: "limits.maxConcurrentWorkers",
|
|
117
|
+
label: "Max Concurrent",
|
|
118
|
+
type: "number",
|
|
119
|
+
tab: "limits",
|
|
120
|
+
description: "Max number of workers running simultaneously.",
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
id: "limits.maxTaskDepth",
|
|
124
|
+
label: "Max Task Depth",
|
|
125
|
+
type: "number",
|
|
126
|
+
tab: "limits",
|
|
127
|
+
description: "Maximum depth of nested task spawning.",
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
id: "limits.maxRunMinutes",
|
|
131
|
+
label: "Max Run Minutes",
|
|
132
|
+
type: "number",
|
|
133
|
+
tab: "limits",
|
|
134
|
+
description: "Maximum total run time in minutes.",
|
|
135
|
+
},
|
|
136
|
+
{
|
|
137
|
+
id: "limits.maxRetriesPerTask",
|
|
138
|
+
label: "Max Retries",
|
|
139
|
+
type: "number",
|
|
140
|
+
tab: "limits",
|
|
141
|
+
description: "Max retry attempts per failed task.",
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
id: "limits.maxTasksPerRun",
|
|
145
|
+
label: "Max Tasks",
|
|
146
|
+
type: "number",
|
|
147
|
+
tab: "limits",
|
|
148
|
+
description: "Maximum number of tasks per run.",
|
|
149
|
+
},
|
|
150
|
+
{
|
|
151
|
+
id: "limits.heartbeatStaleMs",
|
|
152
|
+
label: "Heartbeat Stale",
|
|
153
|
+
type: "number",
|
|
154
|
+
tab: "limits",
|
|
155
|
+
description: "Milliseconds before a worker is considered stale.",
|
|
156
|
+
},
|
|
74
157
|
// Agents
|
|
75
|
-
{
|
|
76
|
-
|
|
158
|
+
{
|
|
159
|
+
id: "agents.overrides",
|
|
160
|
+
label: "Agent Model Overrides",
|
|
161
|
+
type: "agent",
|
|
162
|
+
tab: "agents",
|
|
163
|
+
description: "Model and thinking overrides per agent role.",
|
|
164
|
+
},
|
|
165
|
+
{
|
|
166
|
+
id: "agents.disableBuiltins",
|
|
167
|
+
label: "Disable Builtins",
|
|
168
|
+
type: "boolean",
|
|
169
|
+
tab: "agents",
|
|
170
|
+
description: "Disable built-in agent definitions.",
|
|
171
|
+
},
|
|
77
172
|
// UI
|
|
78
|
-
{
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
173
|
+
{
|
|
174
|
+
id: "ui.showModel",
|
|
175
|
+
label: "Show Model",
|
|
176
|
+
type: "boolean",
|
|
177
|
+
tab: "ui",
|
|
178
|
+
description: "Show model name in widget/dashboard.",
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
id: "ui.showTokens",
|
|
182
|
+
label: "Show Tokens",
|
|
183
|
+
type: "boolean",
|
|
184
|
+
tab: "ui",
|
|
185
|
+
description: "Show token counts in dashboard.",
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
id: "ui.showTools",
|
|
189
|
+
label: "Show Tools",
|
|
190
|
+
type: "boolean",
|
|
191
|
+
tab: "ui",
|
|
192
|
+
description: "Show tool usage in dashboard.",
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
id: "ui.dashboardPlacement",
|
|
196
|
+
label: "Dashboard Placement",
|
|
197
|
+
type: "enum",
|
|
198
|
+
values: ["center", "right"],
|
|
199
|
+
tab: "ui",
|
|
200
|
+
description: "Where to place the dashboard overlay.",
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
id: "ui.dashboardWidth",
|
|
204
|
+
label: "Dashboard Width",
|
|
205
|
+
type: "number",
|
|
206
|
+
tab: "ui",
|
|
207
|
+
description: "Dashboard width as percentage or pixels.",
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
id: "ui.autoOpenDashboard",
|
|
211
|
+
label: "Auto Open Dashboard",
|
|
212
|
+
type: "boolean",
|
|
213
|
+
tab: "ui",
|
|
214
|
+
description: "Auto-open dashboard when a run starts.",
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
id: "ui.widgetPlacement",
|
|
218
|
+
label: "Widget Placement",
|
|
219
|
+
type: "enum",
|
|
220
|
+
values: ["bottom", "hidden"],
|
|
221
|
+
tab: "ui",
|
|
222
|
+
description: "Where to place the crew widget.",
|
|
223
|
+
},
|
|
85
224
|
// ── Themes tab ──
|
|
86
|
-
{
|
|
225
|
+
{
|
|
226
|
+
id: "__piTheme__",
|
|
227
|
+
label: "Pi UI Theme",
|
|
228
|
+
type: "action",
|
|
229
|
+
action: "piTheme",
|
|
230
|
+
values: discoverPiThemes().map((t) => t.name),
|
|
231
|
+
tab: "themes",
|
|
232
|
+
description: "Overall terminal theme. Switches live (no restart). Currently: " + (getActivePiTheme() ?? "dark (default)"),
|
|
233
|
+
},
|
|
87
234
|
// Autonomous
|
|
88
|
-
{
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
235
|
+
{
|
|
236
|
+
id: "autonomous.enabled",
|
|
237
|
+
label: "Enabled",
|
|
238
|
+
type: "boolean",
|
|
239
|
+
tab: "autonomous",
|
|
240
|
+
description: "Enable autonomous pi-crew delegation.",
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
id: "autonomous.injectPolicy",
|
|
244
|
+
label: "Inject Policy",
|
|
245
|
+
type: "boolean",
|
|
246
|
+
tab: "autonomous",
|
|
247
|
+
description: "Inject delegation policy into agent context.",
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
id: "autonomous.preferAsyncForLongTasks",
|
|
251
|
+
label: "Prefer Async",
|
|
252
|
+
type: "boolean",
|
|
253
|
+
tab: "autonomous",
|
|
254
|
+
description: "Prefer async execution for long tasks.",
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
id: "autonomous.allowWorktreeSuggestion",
|
|
258
|
+
label: "Allow Worktree",
|
|
259
|
+
type: "boolean",
|
|
260
|
+
tab: "autonomous",
|
|
261
|
+
description: "Allow suggesting worktree isolation.",
|
|
262
|
+
},
|
|
92
263
|
// Advanced
|
|
93
|
-
{
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
{
|
|
264
|
+
{
|
|
265
|
+
id: "executeWorkers",
|
|
266
|
+
label: "Execute Workers",
|
|
267
|
+
type: "boolean",
|
|
268
|
+
tab: "advanced",
|
|
269
|
+
description: "Allow real child Pi workers. false = scaffold only.",
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
id: "asyncByDefault",
|
|
273
|
+
label: "Async By Default",
|
|
274
|
+
type: "boolean",
|
|
275
|
+
tab: "advanced",
|
|
276
|
+
description: "Run teams asynchronously by default.",
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
id: "notifierIntervalMs",
|
|
280
|
+
label: "Notifier Interval",
|
|
281
|
+
type: "number",
|
|
282
|
+
tab: "advanced",
|
|
283
|
+
description: "Async run notifier check interval in ms.",
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
id: "reliability.autoRetry",
|
|
287
|
+
label: "Auto Retry",
|
|
288
|
+
type: "boolean",
|
|
289
|
+
tab: "advanced",
|
|
290
|
+
description: "Automatically retry failed tasks.",
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
id: "reliability.autoRecover",
|
|
294
|
+
label: "Auto Recover",
|
|
295
|
+
type: "boolean",
|
|
296
|
+
tab: "advanced",
|
|
297
|
+
description: "Automatically recover from crashes.",
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
id: "reliability.cleanupOrphanedTempDirs",
|
|
301
|
+
label: "Cleanup Orphaned Temp Dirs",
|
|
302
|
+
type: "boolean",
|
|
303
|
+
tab: "advanced",
|
|
304
|
+
description: "Remove /tmp/pi-crew-* directories after reconciliation (1h age threshold).",
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
id: "telemetry.enabled",
|
|
308
|
+
label: "Telemetry",
|
|
309
|
+
type: "boolean",
|
|
310
|
+
tab: "advanced",
|
|
311
|
+
description: "Enable telemetry collection.",
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
id: "notifications.enabled",
|
|
315
|
+
label: "Notifications",
|
|
316
|
+
type: "boolean",
|
|
317
|
+
tab: "advanced",
|
|
318
|
+
description: "Enable run notifications.",
|
|
319
|
+
},
|
|
101
320
|
];
|
|
102
321
|
|
|
103
322
|
// ---------------------------------------------------------------------------
|
|
@@ -130,9 +349,9 @@ const EFFECTIVE_DEFAULTS: Record<string, unknown> = {
|
|
|
130
349
|
"autonomous.injectPolicy": true,
|
|
131
350
|
"autonomous.preferAsyncForLongTasks": false,
|
|
132
351
|
"autonomous.allowWorktreeSuggestion": true,
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
352
|
+
executeWorkers: true,
|
|
353
|
+
asyncByDefault: false,
|
|
354
|
+
notifierIntervalMs: 5000,
|
|
136
355
|
"reliability.autoRetry": false,
|
|
137
356
|
"reliability.autoRecover": false,
|
|
138
357
|
"reliability.cleanupOrphanedTempDirs": true,
|
|
@@ -201,7 +420,15 @@ class SelectSubmenu {
|
|
|
201
420
|
private readonly title: string;
|
|
202
421
|
private readonly description: string;
|
|
203
422
|
|
|
204
|
-
constructor(
|
|
423
|
+
constructor(
|
|
424
|
+
title: string,
|
|
425
|
+
description: string,
|
|
426
|
+
options: string[],
|
|
427
|
+
current: string,
|
|
428
|
+
theme: CrewTheme,
|
|
429
|
+
onSelect: (value: string) => void,
|
|
430
|
+
onCancel: () => void,
|
|
431
|
+
) {
|
|
205
432
|
this.title = title;
|
|
206
433
|
this.description = description;
|
|
207
434
|
this.items = options;
|
|
@@ -285,7 +512,14 @@ class TextinputSubmenu {
|
|
|
285
512
|
private readonly onSubmit: (value: string) => void;
|
|
286
513
|
private readonly onCancel: () => void;
|
|
287
514
|
|
|
288
|
-
constructor(
|
|
515
|
+
constructor(
|
|
516
|
+
title: string,
|
|
517
|
+
description: string,
|
|
518
|
+
initialValue: string,
|
|
519
|
+
theme: CrewTheme,
|
|
520
|
+
onSubmit: (value: string) => void,
|
|
521
|
+
onCancel: () => void,
|
|
522
|
+
) {
|
|
289
523
|
this.title = title;
|
|
290
524
|
this.description = description;
|
|
291
525
|
this.buffer = initialValue;
|
|
@@ -345,13 +579,32 @@ class AgentOverridesSubmenu {
|
|
|
345
579
|
private readonly onApply: (overrides: Record<string, unknown>) => void;
|
|
346
580
|
private readonly onCancel: () => void;
|
|
347
581
|
|
|
348
|
-
constructor(
|
|
582
|
+
constructor(
|
|
583
|
+
config: Record<string, unknown>,
|
|
584
|
+
theme: CrewTheme,
|
|
585
|
+
onApply: (overrides: Record<string, unknown>) => void,
|
|
586
|
+
onCancel: () => void,
|
|
587
|
+
) {
|
|
349
588
|
this.theme = theme;
|
|
350
589
|
this.onApply = onApply;
|
|
351
590
|
this.onCancel = onCancel;
|
|
352
|
-
const existing = (config.agents as Record<string, unknown>)?.overrides as
|
|
591
|
+
const existing = (config.agents as Record<string, unknown>)?.overrides as
|
|
592
|
+
| Record<string, { model?: string; thinking?: string }>
|
|
593
|
+
| undefined;
|
|
353
594
|
this.overrides = existing ? structuredClone(existing) : {};
|
|
354
|
-
this.agents = [
|
|
595
|
+
this.agents = [
|
|
596
|
+
"explorer",
|
|
597
|
+
"planner",
|
|
598
|
+
"analyst",
|
|
599
|
+
"critic",
|
|
600
|
+
"executor",
|
|
601
|
+
"reviewer",
|
|
602
|
+
"security-reviewer",
|
|
603
|
+
"test-engineer",
|
|
604
|
+
"verifier",
|
|
605
|
+
"cold-verifier",
|
|
606
|
+
"writer",
|
|
607
|
+
];
|
|
355
608
|
}
|
|
356
609
|
|
|
357
610
|
invalidate(): void {}
|
|
@@ -375,7 +628,11 @@ class AgentOverridesSubmenu {
|
|
|
375
628
|
const valueText = valueParts || this.theme.fg("dim", "(default)");
|
|
376
629
|
const prefix = isSelected ? " → " : " ";
|
|
377
630
|
const line = `${prefix}${label} ${valueText}`;
|
|
378
|
-
lines.push(
|
|
631
|
+
lines.push(
|
|
632
|
+
isSelected
|
|
633
|
+
? (this.theme.inverse?.(truncateToWidth(line, width - 2)) ?? truncateToWidth(line, width - 2))
|
|
634
|
+
: truncateToWidth(line, width - 2),
|
|
635
|
+
);
|
|
379
636
|
}
|
|
380
637
|
lines.push("");
|
|
381
638
|
lines.push(this.theme.fg("dim", "Enter to edit model · e to edit thinking · Esc to go back"));
|
|
@@ -397,8 +654,14 @@ class AgentOverridesSubmenu {
|
|
|
397
654
|
handleInput(data: string): void {
|
|
398
655
|
if (this.editField) return this.handleEditInput(data);
|
|
399
656
|
|
|
400
|
-
if (data === "\x1b[A" || data === "k") {
|
|
401
|
-
|
|
657
|
+
if (data === "\x1b[A" || data === "k") {
|
|
658
|
+
this.selectedIndex = (this.selectedIndex - 1 + this.agents.length) % this.agents.length;
|
|
659
|
+
return;
|
|
660
|
+
}
|
|
661
|
+
if (data === "\x1b[B" || data === "j") {
|
|
662
|
+
this.selectedIndex = (this.selectedIndex + 1) % this.agents.length;
|
|
663
|
+
return;
|
|
664
|
+
}
|
|
402
665
|
if (data === "\r" || data === "\n") {
|
|
403
666
|
const agent = this.agents[this.selectedIndex]!;
|
|
404
667
|
this.editField = "model";
|
|
@@ -411,7 +674,10 @@ class AgentOverridesSubmenu {
|
|
|
411
674
|
this.editBuffer = this.overrides[agent]?.thinking ?? "";
|
|
412
675
|
return;
|
|
413
676
|
}
|
|
414
|
-
if (data === "\x1b") {
|
|
677
|
+
if (data === "\x1b") {
|
|
678
|
+
this.onCancel();
|
|
679
|
+
return;
|
|
680
|
+
}
|
|
415
681
|
}
|
|
416
682
|
|
|
417
683
|
private handleEditInput(data: string): void {
|
|
@@ -430,9 +696,17 @@ class AgentOverridesSubmenu {
|
|
|
430
696
|
this.editField = null;
|
|
431
697
|
return;
|
|
432
698
|
}
|
|
433
|
-
if (data === "\x1b") {
|
|
434
|
-
|
|
435
|
-
|
|
699
|
+
if (data === "\x1b") {
|
|
700
|
+
this.editField = null;
|
|
701
|
+
return;
|
|
702
|
+
}
|
|
703
|
+
if (data === "\x7f" || data === "\b") {
|
|
704
|
+
this.editBuffer = this.editBuffer.slice(0, -1);
|
|
705
|
+
return;
|
|
706
|
+
}
|
|
707
|
+
if (data.length === 1 && data >= " " && data <= "~") {
|
|
708
|
+
this.editBuffer += data;
|
|
709
|
+
}
|
|
436
710
|
}
|
|
437
711
|
}
|
|
438
712
|
|
|
@@ -483,9 +757,7 @@ class SettingsOverlay {
|
|
|
483
757
|
lines.push(border("├", "┤"));
|
|
484
758
|
|
|
485
759
|
// ── Content ──
|
|
486
|
-
const content = this.submenu
|
|
487
|
-
? this.renderSubmenuContent(innerWidth - 4)
|
|
488
|
-
: this.renderSettingsContent(innerWidth - 4);
|
|
760
|
+
const content = this.submenu ? this.renderSubmenuContent(innerWidth - 4) : this.renderSettingsContent(innerWidth - 4);
|
|
489
761
|
for (const line of content) {
|
|
490
762
|
lines.push(row(` ${truncateToWidth(line, innerWidth - 2)}`));
|
|
491
763
|
}
|
|
@@ -501,21 +773,18 @@ class SettingsOverlay {
|
|
|
501
773
|
for (const [i, tab] of TABS.entries()) {
|
|
502
774
|
const isActive = i === this.currentTabIndex;
|
|
503
775
|
const text = `${tab.icon} ${tab.label}`;
|
|
504
|
-
parts.push(isActive
|
|
505
|
-
? this.theme.bold(this.theme.fg("accent", text))
|
|
506
|
-
: this.theme.fg("dim", text),
|
|
507
|
-
);
|
|
776
|
+
parts.push(isActive ? this.theme.bold(this.theme.fg("accent", text)) : this.theme.fg("dim", text));
|
|
508
777
|
}
|
|
509
778
|
return parts.join(" " + this.theme.fg("border", "│") + " ");
|
|
510
779
|
}
|
|
511
780
|
|
|
512
781
|
private renderSettingsContent(innerWidth: number): string[] {
|
|
513
782
|
const tabId = TABS[this.currentTabIndex]?.id ?? "runtime";
|
|
514
|
-
const settings = SETTINGS.filter(s => s.tab === tabId);
|
|
783
|
+
const settings = SETTINGS.filter((s) => s.tab === tabId);
|
|
515
784
|
const lines: string[] = [];
|
|
516
785
|
|
|
517
786
|
// Calculate max label width for alignment
|
|
518
|
-
const maxLabelWidth = Math.min(28, Math.max(...settings.map(s => visibleWidth(s.label))));
|
|
787
|
+
const maxLabelWidth = Math.min(28, Math.max(...settings.map((s) => visibleWidth(s.label))));
|
|
519
788
|
|
|
520
789
|
// Render visible items
|
|
521
790
|
const startIdx = this.scrollOffset;
|
|
@@ -526,9 +795,7 @@ class SettingsOverlay {
|
|
|
526
795
|
if (!def) continue;
|
|
527
796
|
const isSelected = i === this.selectedIndex;
|
|
528
797
|
|
|
529
|
-
const effective = this.changedValues.has(def.id)
|
|
530
|
-
? this.changedValues.get(def.id)
|
|
531
|
-
: currentValueFor(this.config, def.id);
|
|
798
|
+
const effective = this.changedValues.has(def.id) ? this.changedValues.get(def.id) : currentValueFor(this.config, def.id);
|
|
532
799
|
const isDefault = !this.changedValues.has(def.id) && !isExplicitlySet(this.config, def.id) && def.id !== "__piTheme__";
|
|
533
800
|
const valueStr = formatValue(effective, def.id);
|
|
534
801
|
const suffix = isDefault && (effective !== undefined || EFFECTIVE_DEFAULTS[def.id] !== undefined) ? " (default)" : "";
|
|
@@ -605,7 +872,7 @@ class SettingsOverlay {
|
|
|
605
872
|
|
|
606
873
|
// Item navigation
|
|
607
874
|
const tabId = TABS[this.currentTabIndex]?.id ?? "runtime";
|
|
608
|
-
const settings = SETTINGS.filter(s => s.tab === tabId);
|
|
875
|
+
const settings = SETTINGS.filter((s) => s.tab === tabId);
|
|
609
876
|
|
|
610
877
|
if (data === "\x1b[A" || data === "k") {
|
|
611
878
|
this.selectedIndex = Math.max(0, this.selectedIndex - 1);
|
|
@@ -652,7 +919,10 @@ class SettingsOverlay {
|
|
|
652
919
|
this.submenu = null;
|
|
653
920
|
this.submenuSettingId = null;
|
|
654
921
|
},
|
|
655
|
-
() => {
|
|
922
|
+
() => {
|
|
923
|
+
this.submenu = null;
|
|
924
|
+
this.submenuSettingId = null;
|
|
925
|
+
},
|
|
656
926
|
);
|
|
657
927
|
break;
|
|
658
928
|
}
|
|
@@ -675,7 +945,10 @@ class SettingsOverlay {
|
|
|
675
945
|
this.submenu = null;
|
|
676
946
|
this.submenuSettingId = null;
|
|
677
947
|
},
|
|
678
|
-
() => {
|
|
948
|
+
() => {
|
|
949
|
+
this.submenu = null;
|
|
950
|
+
this.submenuSettingId = null;
|
|
951
|
+
},
|
|
679
952
|
);
|
|
680
953
|
break;
|
|
681
954
|
}
|
|
@@ -692,7 +965,10 @@ class SettingsOverlay {
|
|
|
692
965
|
this.submenu = null;
|
|
693
966
|
this.submenuSettingId = null;
|
|
694
967
|
},
|
|
695
|
-
() => {
|
|
968
|
+
() => {
|
|
969
|
+
this.submenu = null;
|
|
970
|
+
this.submenuSettingId = null;
|
|
971
|
+
},
|
|
696
972
|
);
|
|
697
973
|
break;
|
|
698
974
|
}
|
|
@@ -706,15 +982,19 @@ class SettingsOverlay {
|
|
|
706
982
|
this.submenu = null;
|
|
707
983
|
this.submenuSettingId = null;
|
|
708
984
|
},
|
|
709
|
-
() => {
|
|
985
|
+
() => {
|
|
986
|
+
this.submenu = null;
|
|
987
|
+
this.submenuSettingId = null;
|
|
988
|
+
},
|
|
710
989
|
);
|
|
711
990
|
break;
|
|
712
991
|
}
|
|
713
992
|
case "action": {
|
|
714
993
|
if (!def.values?.length || !def.action) break;
|
|
715
|
-
const actionCurrent =
|
|
716
|
-
|
|
717
|
-
|
|
994
|
+
const actionCurrent =
|
|
995
|
+
typeof this.changedValues.get(def.id) === "string"
|
|
996
|
+
? (this.changedValues.get(def.id) as string)
|
|
997
|
+
: ((currentValueFor(this.config, def.id) as string | undefined) ?? "");
|
|
718
998
|
this.submenuSettingId = def.id;
|
|
719
999
|
this.submenu = new SelectSubmenu(
|
|
720
1000
|
def.label,
|
|
@@ -728,7 +1008,10 @@ class SettingsOverlay {
|
|
|
728
1008
|
this.submenu = null;
|
|
729
1009
|
this.submenuSettingId = null;
|
|
730
1010
|
},
|
|
731
|
-
() => {
|
|
1011
|
+
() => {
|
|
1012
|
+
this.submenu = null;
|
|
1013
|
+
this.submenuSettingId = null;
|
|
1014
|
+
},
|
|
732
1015
|
);
|
|
733
1016
|
break;
|
|
734
1017
|
}
|
|
@@ -755,6 +1038,10 @@ export function createSettingsOverlay(
|
|
|
755
1038
|
done: () => void,
|
|
756
1039
|
onAction?: (action: string, value: unknown) => void,
|
|
757
1040
|
) {
|
|
758
|
-
const overlay = new SettingsOverlay(config, theme, {
|
|
1041
|
+
const overlay = new SettingsOverlay(config, theme, {
|
|
1042
|
+
onChange,
|
|
1043
|
+
onClose: done,
|
|
1044
|
+
onAction,
|
|
1045
|
+
});
|
|
759
1046
|
return { overlay, component: overlay };
|
|
760
1047
|
}
|
package/src/ui/status-colors.ts
CHANGED
|
@@ -1,6 +1,17 @@
|
|
|
1
1
|
import type { CrewTheme, CrewThemeColor } from "./theme-adapter.ts";
|
|
2
2
|
|
|
3
|
-
export type RunStatus =
|
|
3
|
+
export type RunStatus =
|
|
4
|
+
| "queued"
|
|
5
|
+
| "running"
|
|
6
|
+
| "waiting"
|
|
7
|
+
| "completed"
|
|
8
|
+
| "failed"
|
|
9
|
+
| "cancelled"
|
|
10
|
+
| "stopped"
|
|
11
|
+
| "blocked"
|
|
12
|
+
| "stale"
|
|
13
|
+
| "needs_attention"
|
|
14
|
+
| (string & {});
|
|
4
15
|
|
|
5
16
|
export function colorForStatus(status: RunStatus): CrewThemeColor {
|
|
6
17
|
switch (status) {
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* Falls back to plain text (theme.fg on every line) if the language is
|
|
6
6
|
* unsupported or highlighting fails.
|
|
7
7
|
*/
|
|
8
|
-
import {
|
|
8
|
+
import { highlight, supportsLanguage } from "cli-highlight";
|
|
9
9
|
import type { CrewTheme } from "./theme-adapter.ts";
|
|
10
10
|
import { asCrewTheme } from "./theme-adapter.ts";
|
|
11
11
|
|