pi-crew 0.9.50 → 0.9.52
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 +150 -0
- package/README.md +216 -20
- package/dist/build-meta.json +2222 -1761
- package/dist/index.mjs +18636 -17603
- package/docs/actions-reference.md +431 -1
- package/package.json +19 -9
- package/schema.json +41 -0
- package/scripts/check-bundle-size.mjs +38 -0
- package/scripts/test-runner.mjs +11 -1
- package/skills/distill-software/SKILL.md +24 -1
- package/dist/index.mjs.map +0 -7
- package/docs/FEATURE_INTAKE.md +0 -126
- package/docs/HARNESS.md +0 -87
- package/docs/HARNESS_BACKLOG.md +0 -89
- package/docs/PROJECT_REVIEW.md +0 -270
- package/docs/PROJECT_REVIEW_FIXES.md +0 -342
- package/docs/PROJECT_REVIEW_ROUND4.md +0 -156
- package/docs/PROJECT_REVIEW_ROUND5.md +0 -86
- package/docs/REVIEW-FINDINGS-2026-06 +0 -357
- package/docs/REVIEW-FINDINGS-2026-07-CORE.md +0 -139
- package/docs/REVIEW-FINDINGS-2026-07.md +0 -125
- package/docs/TEST_MATRIX.md +0 -51
- package/docs/archive/README.md +0 -91
- package/docs/archive/followup-review-round3-2026-05-12.md +0 -342
- package/docs/archive/followup-review-round4-2026-05-13.md +0 -107
- package/docs/archive/pi-crew-bugs.md +0 -961
- package/docs/archive/pi-crew-test-final.md +0 -120
- package/docs/archive/pi-crew-test-results.md +0 -260
- package/docs/archive/pi-crew-test-round2.md +0 -136
- package/docs/archive/pi-crew-test-round4.md +0 -100
- package/docs/archive/pi-crew-test-round5.md +0 -70
- package/docs/archive/pi-crew-test-round6.md +0 -110
- package/docs/archive/pi-crew-v0.5.10-audit-fix-plan.md +0 -60
- package/docs/archive/pi-crew-v0.5.11-audit-fix-plan.md +0 -92
- package/docs/archive/pi-crew-v0.5.12-audit-fix-plan.md +0 -76
- package/docs/archive/pi-crew-v0.5.13-audit-fix-plan.md +0 -75
- package/docs/archive/pi-crew-v0.5.14-audit-fix-plan.md +0 -75
- package/docs/archive/pi-crew-v0.5.16-audit-fix-plan.md +0 -35
- package/docs/archive/pi-crew-v0.5.17-audit-fix-plan.md +0 -80
- package/docs/archive/pi-crew-v0.5.5-audit-fix-plan.md +0 -133
- package/docs/archive/pi-crew-v0.5.9-audit-fix-plan.md +0 -88
- package/docs/archive/pi-mono-opportunities.md +0 -969
- package/docs/archive/pi-mono-review.md +0 -291
- package/docs/archive/pi-subagent4-comparison.md +0 -261
- package/docs/archive/pi-subagents3-deep-analysis.md +0 -508
- package/docs/bugs/bug-021-notification-badge-counter-misleading.md +0 -293
- package/docs/bugs/bug-023-chain-windows-path-resolution.md +0 -106
- package/docs/bugs/bug-quota-display-truncation.md +0 -223
- package/docs/bugs/cross-session-notification-leakage.md +0 -82
- package/docs/code-review-2026-05-11.md +0 -592
- package/docs/coding-agent-optimization.md +0 -268
- package/docs/comparison-pi-subagents-vs-pi-crew.md +0 -303
- package/docs/decisions/0001-durable-state.md +0 -41
- package/docs/decisions/0002-child-process-for-async.md +0 -42
- package/docs/decisions/0003-depth-guard.md +0 -36
- package/docs/decisions/0004-execfile-over-exec.md +0 -34
- package/docs/decisions/0005-no-parameter-properties.md +0 -49
- package/docs/decisions/0006-publish-bundled-esm.md +0 -63
- package/docs/decisions/0007-active-run-binary-index.md +0 -54
- package/docs/decisions/0008-child-pi-warm-pool.md +0 -61
- package/docs/decisions/2026-07-21-broker-phase4-default-on.md +0 -77
- package/docs/decisions/2026-07-21-broker-windows-perms.md +0 -91
- package/docs/decisions/2026-07-22-broker-phase4-gated-on.md +0 -99
- package/docs/decisions/2026-07-24-oidc-trusted-publishing.md +0 -112
- package/docs/decisions/README.md +0 -26
- package/docs/deep-review-report.md +0 -384
- package/docs/distillation/cybersecurity-patterns.md +0 -294
- package/docs/feature-analysis-subagent4.md +0 -305
- package/docs/fix-plan-disabletools-exit-null.md +0 -219
- package/docs/fixes/BATCH_A_H1_H2.md +0 -86
- package/docs/fixes/bug-006-foreground-cancel-concurrent.md +0 -78
- package/docs/fixes/bug-007-async-notifier-stale-ctx.md +0 -112
- package/docs/fixes/bug-008-child-process-silent-timeout.md +0 -100
- package/docs/fixes/bug-009-executor-yield-limit-needs-attention.md +0 -75
- package/docs/fixes/bug-010-child-process-api-key-filtered.md +0 -109
- package/docs/fixes/bug-011-spawn-pi-enoent.md +0 -92
- package/docs/fixes/bug-012-essential-env-stripped.md +0 -89
- package/docs/fixes/bug-013-background-runner-death.md +0 -84
- package/docs/fixes/bug-014-infinite-retry-loop-needs-attention.md +0 -82
- package/docs/fixes/bug-015-background-runner-sigterm.md +0 -65
- package/docs/fixes/bug-017-background-runner-session-shutdown.md +0 -66
- package/docs/fixes/bug-017-background-runner-sigkill-double-fork.md +0 -28
- package/docs/fixes/bug-018-child-pi-worker-stdin-hang.md +0 -61
- package/docs/fixes/bug-019-phantom-runs-temp-workspace.md +0 -52
- package/docs/fixes/bug-020-infinite-retry-loop-needs-attention.md +0 -47
- package/docs/fixes/v0.9.10/locks-fix-verify.md +0 -3
- package/docs/fixes/v0.9.10/smoke-test.md +0 -12
- package/docs/followup-plan-2026-05-12.md +0 -463
- package/docs/followup-review-2026-05-12.md +0 -297
- package/docs/goals.md +0 -59
- package/docs/implementation-plan-top3.md +0 -333
- package/docs/issue-29-analysis.md +0 -189
- package/docs/live-mailbox-runtime.md +0 -36
- package/docs/migration/atomic-write-v2-migration.md +0 -299
- package/docs/next-upgrade-roadmap.md +0 -808
- package/docs/oh-my-pi-research.md +0 -509
- package/docs/optimization-plan-2026-07.md +0 -366
- package/docs/optimization-plan.md +0 -644
- package/docs/patterns/command-agent-skill.md +0 -71
- package/docs/perf/baseline-2026-05.md +0 -113
- package/docs/perf/final-report-2026-05.md +0 -206
- package/docs/perf/optimization-plan-2026-07-verified.md +0 -396
- package/docs/perf/performance-audit-report-2026-07.md +0 -948
- package/docs/perf/performance-review-2026-07.md +0 -287
- package/docs/perf/sprint-1-report.md +0 -71
- package/docs/perf/sprint-2-report.md +0 -81
- package/docs/perf/sprint-2.5-report.md +0 -53
- package/docs/perf/sprint-3-report.md +0 -36
- package/docs/perf/sprint-4-report.md +0 -47
- package/docs/perf/sprint-5-report.md +0 -51
- package/docs/perf/sprint-6-report.md +0 -94
- package/docs/perf/sprint-7-report.md +0 -74
- package/docs/perf/upgrade-plan-2026-05.md +0 -147
- package/docs/performance-optimization-execution-plan.md +0 -520
- package/docs/phase4-triage.md +0 -58
- package/docs/pi-crew-investigation-report.md +0 -411
- package/docs/product/README.md +0 -31
- package/docs/product/platform.md +0 -27
- package/docs/product/runtime-safety.md +0 -37
- package/docs/product/team-run.md +0 -39
- package/docs/product/team-tool.md +0 -37
- package/docs/runtime-analysis-child-vs-live.md +0 -171
- package/docs/runtime-migration-in-process-analysis.md +0 -250
- package/docs/skills/REFERENCE.md +0 -138
- package/docs/stories/README.md +0 -32
- package/docs/stories/US-DEPS-major-upgrade.md +0 -62
- package/docs/stories/backlog.md +0 -36
- package/docs/superpowers/plans/2026-06-09-fallow-patterns-adoption.md +0 -1270
- package/docs/templates/decision.md +0 -27
- package/docs/templates/story.md +0 -44
- package/docs/templates/validation-report.md +0 -32
- package/docs/ui-optimization-plan.md +0 -447
- package/src/adapters/claude-adapter.ts +0 -23
- package/src/adapters/codex-adapter.ts +0 -21
- package/src/adapters/cursor-adapter.ts +0 -17
- package/src/adapters/export-util.ts +0 -143
- package/src/adapters/index.ts +0 -15
- package/src/adapters/registry.ts +0 -18
- package/src/adapters/types.ts +0 -23
- package/src/agents/agent-config.ts +0 -194
- package/src/agents/agent-search.ts +0 -98
- package/src/agents/agent-serializer.ts +0 -38
- package/src/agents/discover-agents.ts +0 -623
- package/src/benchmark/benchmark-runner.ts +0 -313
- package/src/benchmark/feedback-loop.ts +0 -73
- package/src/config/config.ts +0 -1269
- package/src/config/defaults.ts +0 -193
- package/src/config/drift-detector.ts +0 -290
- package/src/config/markers.ts +0 -330
- package/src/config/resilient-parser.ts +0 -117
- package/src/config/role-tools.ts +0 -118
- package/src/config/suggestions.ts +0 -75
- package/src/config/types.ts +0 -278
- package/src/errors.ts +0 -194
- package/src/extension/action-suggestions.ts +0 -117
- package/src/extension/async-notifier.ts +0 -179
- package/src/extension/autonomous-policy.ts +0 -209
- package/src/extension/command-completions.ts +0 -120
- package/src/extension/context-status-injection.ts +0 -185
- package/src/extension/crew-autocomplete.ts +0 -131
- package/src/extension/crew-cleanup.ts +0 -168
- package/src/extension/crew-input-router.ts +0 -93
- package/src/extension/crew-shortcuts.ts +0 -87
- package/src/extension/crew-vibes/cat-frames.ts +0 -18
- package/src/extension/crew-vibes/config.ts +0 -195
- package/src/extension/crew-vibes/figures.ts +0 -101
- package/src/extension/crew-vibes/font-detect.ts +0 -71
- package/src/extension/crew-vibes/footer.ts +0 -292
- package/src/extension/crew-vibes/index.ts +0 -432
- package/src/extension/crew-vibes/provider-usage.ts +0 -396
- package/src/extension/crew-vibes/render.ts +0 -206
- package/src/extension/crew-vibes/speed.ts +0 -286
- package/src/extension/cross-extension-rpc.ts +0 -350
- package/src/extension/help.ts +0 -62
- package/src/extension/import-index.ts +0 -74
- package/src/extension/knowledge-injection.ts +0 -402
- package/src/extension/management.ts +0 -571
- package/src/extension/message-renderers.ts +0 -108
- package/src/extension/notification-router.ts +0 -152
- package/src/extension/notification-sink.ts +0 -54
- package/src/extension/pi-api.ts +0 -56
- package/src/extension/plan-orchestrate.ts +0 -302
- package/src/extension/project-init.ts +0 -170
- package/src/extension/register.ts +0 -113
- package/src/extension/registration/artifact-cleanup.ts +0 -20
- package/src/extension/registration/command-registration.ts +0 -58
- package/src/extension/registration/command-utils.ts +0 -58
- package/src/extension/registration/commands.ts +0 -1228
- package/src/extension/registration/compaction-guard.ts +0 -333
- package/src/extension/registration/context-builder.ts +0 -135
- package/src/extension/registration/crash-recovery-cache.ts +0 -54
- package/src/extension/registration/foreground-run-controller.ts +0 -238
- package/src/extension/registration/hook-registration.ts +0 -119
- package/src/extension/registration/lazy-configurers.ts +0 -124
- package/src/extension/registration/lifecycle-handlers.ts +0 -923
- package/src/extension/registration/lifecycle.ts +0 -259
- package/src/extension/registration/observability.ts +0 -322
- package/src/extension/registration/registration-types.ts +0 -158
- package/src/extension/registration/runtime-cleanup.ts +0 -230
- package/src/extension/registration/subagent-helpers.ts +0 -125
- package/src/extension/registration/subagent-manager-setup.ts +0 -330
- package/src/extension/registration/subagent-tools.ts +0 -456
- package/src/extension/registration/team-tool.ts +0 -220
- package/src/extension/registration/tool-registration.ts +0 -50
- package/src/extension/registration/ui.ts +0 -172
- package/src/extension/registration/viewers.ts +0 -121
- package/src/extension/registration/wire-cross-extension.ts +0 -37
- package/src/extension/result-watcher.ts +0 -139
- package/src/extension/rpc-hmac.ts +0 -256
- package/src/extension/run-bundle-schema.ts +0 -104
- package/src/extension/run-export.ts +0 -97
- package/src/extension/run-import.ts +0 -168
- package/src/extension/run-index.ts +0 -131
- package/src/extension/run-maintenance.ts +0 -190
- package/src/extension/session-summary.ts +0 -18
- package/src/extension/team-manager-command.ts +0 -153
- package/src/extension/team-onboard.ts +0 -177
- package/src/extension/team-recommendation.ts +0 -288
- package/src/extension/team-tool/anchor.ts +0 -172
- package/src/extension/team-tool/api.ts +0 -1244
- package/src/extension/team-tool/auto-summarize.ts +0 -142
- package/src/extension/team-tool/cache-control.ts +0 -19
- package/src/extension/team-tool/cancel.ts +0 -337
- package/src/extension/team-tool/chain-dispatch.ts +0 -95
- package/src/extension/team-tool/chain-executor.ts +0 -379
- package/src/extension/team-tool/config-patch.ts +0 -50
- package/src/extension/team-tool/context.ts +0 -149
- package/src/extension/team-tool/destructive-gate.ts +0 -52
- package/src/extension/team-tool/doctor.ts +0 -431
- package/src/extension/team-tool/explain.ts +0 -282
- package/src/extension/team-tool/failure-patterns.ts +0 -118
- package/src/extension/team-tool/goal-wrap.ts +0 -330
- package/src/extension/team-tool/goal.ts +0 -556
- package/src/extension/team-tool/handle-schedule.ts +0 -332
- package/src/extension/team-tool/handle-settings.ts +0 -520
- package/src/extension/team-tool/health-monitor.ts +0 -481
- package/src/extension/team-tool/inspect.ts +0 -88
- package/src/extension/team-tool/intent-policy.ts +0 -45
- package/src/extension/team-tool/lifecycle-actions.ts +0 -615
- package/src/extension/team-tool/orchestrate.ts +0 -98
- package/src/extension/team-tool/parallel-dispatch.ts +0 -183
- package/src/extension/team-tool/plan.ts +0 -50
- package/src/extension/team-tool/respond.ts +0 -150
- package/src/extension/team-tool/run-not-found.ts +0 -49
- package/src/extension/team-tool/run.ts +0 -1035
- package/src/extension/team-tool/status.ts +0 -260
- package/src/extension/team-tool/workflow-manage.ts +0 -261
- package/src/extension/team-tool-types.ts +0 -26
- package/src/extension/team-tool.ts +0 -1116
- package/src/extension/tool-result.ts +0 -16
- package/src/extension/validate-resources.ts +0 -108
- package/src/hooks/registry.ts +0 -200
- package/src/hooks/types.ts +0 -69
- package/src/i18n.ts +0 -212
- package/src/observability/correlation.ts +0 -50
- package/src/observability/event-bus.ts +0 -86
- package/src/observability/event-to-metric.ts +0 -170
- package/src/observability/exporters/adapter.ts +0 -27
- package/src/observability/exporters/otlp-exporter.ts +0 -356
- package/src/observability/exporters/prometheus-exporter.ts +0 -54
- package/src/observability/metric-registry.ts +0 -100
- package/src/observability/metric-retention.ts +0 -64
- package/src/observability/metric-sink.ts +0 -99
- package/src/observability/metrics-primitives.ts +0 -219
- package/src/plugins/plugin-define.ts +0 -6
- package/src/plugins/plugin-registry.ts +0 -32
- package/src/plugins/plugins/index.ts +0 -3
- package/src/plugins/plugins/nextjs.ts +0 -19
- package/src/plugins/plugins/vite.ts +0 -10
- package/src/plugins/plugins/vitest.ts +0 -9
- package/src/prompt/prompt-runtime.ts +0 -380
- package/src/runtime/adaptive-plan.ts +0 -563
- package/src/runtime/agent-control.ts +0 -215
- package/src/runtime/agent-memory.ts +0 -81
- package/src/runtime/agent-observability.ts +0 -122
- package/src/runtime/anchor-manager.ts +0 -475
- package/src/runtime/async-marker.ts +0 -32
- package/src/runtime/async-runner.ts +0 -381
- package/src/runtime/attention-events.ts +0 -28
- package/src/runtime/auto-summarize.ts +0 -344
- package/src/runtime/background-runner.ts +0 -837
- package/src/runtime/batch-barrier.ts +0 -147
- package/src/runtime/broker-issuer.ts +0 -37
- package/src/runtime/cancellation-token.ts +0 -99
- package/src/runtime/cancellation.ts +0 -99
- package/src/runtime/capability-inventory.ts +0 -137
- package/src/runtime/chain-parser.ts +0 -237
- package/src/runtime/chain-runner.ts +0 -606
- package/src/runtime/checkpoint.ts +0 -291
- package/src/runtime/child-pi-constants.ts +0 -42
- package/src/runtime/child-pi-kill.ts +0 -180
- package/src/runtime/child-pi-pool.ts +0 -68
- package/src/runtime/child-pi-spawn.ts +0 -287
- package/src/runtime/child-pi-steering.ts +0 -128
- package/src/runtime/child-pi-streams.ts +0 -296
- package/src/runtime/child-pi-transcript.ts +0 -169
- package/src/runtime/child-pi.ts +0 -1105
- package/src/runtime/coalesce-tasks.ts +0 -268
- package/src/runtime/code-summary.ts +0 -292
- package/src/runtime/command-trace.ts +0 -105
- package/src/runtime/compact-pipeline.ts +0 -56
- package/src/runtime/compact-stages/ansi-strip-stage.ts +0 -25
- package/src/runtime/compact-stages/blank-collapse-stage.ts +0 -31
- package/src/runtime/compact-stages/deduplicate-stage.ts +0 -34
- package/src/runtime/compact-stages/head-snap-stage.ts +0 -57
- package/src/runtime/compact-stages/index.ts +0 -23
- package/src/runtime/compact-stages/tail-capture-stage.ts +0 -77
- package/src/runtime/compact-stages/truncation-stage.ts +0 -74
- package/src/runtime/compaction-summary.ts +0 -278
- package/src/runtime/completion-guard.ts +0 -207
- package/src/runtime/concurrency.ts +0 -58
- package/src/runtime/crash-classification.ts +0 -229
- package/src/runtime/crash-recovery.ts +0 -577
- package/src/runtime/crew-agent-records.ts +0 -593
- package/src/runtime/crew-agent-runtime.ts +0 -62
- package/src/runtime/crew-broker-child.ts +0 -88
- package/src/runtime/crew-broker-client.ts +0 -673
- package/src/runtime/crew-broker-tokens.ts +0 -84
- package/src/runtime/crew-broker.ts +0 -1276
- package/src/runtime/crew-hooks.ts +0 -227
- package/src/runtime/cross-extension-rpc.ts +0 -143
- package/src/runtime/custom-tools/irc-tool.ts +0 -282
- package/src/runtime/custom-tools/submit-result-tool.ts +0 -102
- package/src/runtime/deadletter.ts +0 -47
- package/src/runtime/delivery-coordinator.ts +0 -211
- package/src/runtime/delta-conflict.ts +0 -348
- package/src/runtime/deterministic-ast.ts +0 -161
- package/src/runtime/diagnostic-export.ts +0 -171
- package/src/runtime/direct-run.ts +0 -45
- package/src/runtime/dwf-state-store.ts +0 -102
- package/src/runtime/dynamic-workflow-context.ts +0 -1016
- package/src/runtime/dynamic-workflow-runner.ts +0 -310
- package/src/runtime/effectiveness.ts +0 -90
- package/src/runtime/errors/crew-errors.ts +0 -162
- package/src/runtime/event-stream-bridge.ts +0 -98
- package/src/runtime/foreground-control.ts +0 -193
- package/src/runtime/foreground-watchdog.ts +0 -132
- package/src/runtime/global-worker-cap.ts +0 -96
- package/src/runtime/goal-achievement.ts +0 -148
- package/src/runtime/goal-evaluator.ts +0 -361
- package/src/runtime/goal-loop-runner.ts +0 -828
- package/src/runtime/goal-state-store.ts +0 -219
- package/src/runtime/green-contract.ts +0 -55
- package/src/runtime/group-join.ts +0 -267
- package/src/runtime/handoff-manager.ts +0 -598
- package/src/runtime/heartbeat-gradient.ts +0 -36
- package/src/runtime/heartbeat-watcher.ts +0 -239
- package/src/runtime/hidden-handoff.ts +0 -407
- package/src/runtime/important-line-classifier.ts +0 -140
- package/src/runtime/intercom-bridge.ts +0 -187
- package/src/runtime/iteration-hooks.ts +0 -305
- package/src/runtime/live-agent-control.ts +0 -136
- package/src/runtime/live-agent-manager.ts +0 -704
- package/src/runtime/live-control-realtime.ts +0 -56
- package/src/runtime/live-extension-bridge.ts +0 -148
- package/src/runtime/live-irc.ts +0 -97
- package/src/runtime/live-session-health.ts +0 -108
- package/src/runtime/live-session-runtime.ts +0 -1139
- package/src/runtime/loop-gates.ts +0 -128
- package/src/runtime/manifest-cache.ts +0 -375
- package/src/runtime/mcp-proxy.ts +0 -105
- package/src/runtime/metric-parser.ts +0 -36
- package/src/runtime/model-fallback.ts +0 -409
- package/src/runtime/model-resolver.ts +0 -126
- package/src/runtime/model-scope.ts +0 -158
- package/src/runtime/orphan-worker-registry.ts +0 -465
- package/src/runtime/output-validator.ts +0 -202
- package/src/runtime/overflow-recovery.ts +0 -206
- package/src/runtime/parallel-research.ts +0 -68
- package/src/runtime/parallel-utils.ts +0 -160
- package/src/runtime/parent-guard.ts +0 -134
- package/src/runtime/path-overlap.ts +0 -150
- package/src/runtime/peer-dep.ts +0 -292
- package/src/runtime/per-write-validator.ts +0 -181
- package/src/runtime/phase-progress.ts +0 -217
- package/src/runtime/phase-tracker.ts +0 -385
- package/src/runtime/pi-args.ts +0 -655
- package/src/runtime/pi-json-output.ts +0 -170
- package/src/runtime/pi-spawn.ts +0 -273
- package/src/runtime/pipeline-runner.ts +0 -523
- package/src/runtime/plan-templates.ts +0 -201
- package/src/runtime/policy-engine.ts +0 -115
- package/src/runtime/post-checks.ts +0 -142
- package/src/runtime/post-exit-stdio-guard.ts +0 -104
- package/src/runtime/process-lifecycle.ts +0 -491
- package/src/runtime/process-status.ts +0 -154
- package/src/runtime/progress-event-coalescer.ts +0 -44
- package/src/runtime/progress-tracker.ts +0 -124
- package/src/runtime/prose-compressor.ts +0 -162
- package/src/runtime/recovery-recipes.ts +0 -203
- package/src/runtime/replace.ts +0 -570
- package/src/runtime/resilient-edit.ts +0 -153
- package/src/runtime/result-extractor.ts +0 -213
- package/src/runtime/retry-executor.ts +0 -100
- package/src/runtime/retry-runner.ts +0 -336
- package/src/runtime/role-permission.ts +0 -59
- package/src/runtime/run-coalesced-task-group.ts +0 -308
- package/src/runtime/run-drift.ts +0 -219
- package/src/runtime/run-tracker.ts +0 -116
- package/src/runtime/runtime-policy.ts +0 -29
- package/src/runtime/runtime-resolver.ts +0 -172
- package/src/runtime/runtime-warmup.ts +0 -160
- package/src/runtime/scheduler.ts +0 -353
- package/src/runtime/semaphore.ts +0 -141
- package/src/runtime/sensitive-paths.ts +0 -93
- package/src/runtime/session-resources.ts +0 -25
- package/src/runtime/session-snapshot.ts +0 -59
- package/src/runtime/session-usage.ts +0 -79
- package/src/runtime/settings-store.ts +0 -155
- package/src/runtime/sidechain-output.ts +0 -35
- package/src/runtime/single-agent-compose.ts +0 -84
- package/src/runtime/skill-effectiveness.ts +0 -524
- package/src/runtime/skill-instructions.ts +0 -391
- package/src/runtime/stale-reconciler.ts +0 -680
- package/src/runtime/stream-preview.ts +0 -184
- package/src/runtime/streaming-output.ts +0 -50
- package/src/runtime/subagent-manager.ts +0 -561
- package/src/runtime/subprocess-tool-registry.ts +0 -70
- package/src/runtime/supervisor-contact.ts +0 -64
- package/src/runtime/task-display.ts +0 -52
- package/src/runtime/task-graph-scheduler.ts +0 -227
- package/src/runtime/task-graph.ts +0 -290
- package/src/runtime/task-health.ts +0 -83
- package/src/runtime/task-id.ts +0 -161
- package/src/runtime/task-output-context.ts +0 -602
- package/src/runtime/task-packet.ts +0 -268
- package/src/runtime/task-quality.ts +0 -199
- package/src/runtime/task-runner/capabilities.ts +0 -78
- package/src/runtime/task-runner/context-retrieval.ts +0 -163
- package/src/runtime/task-runner/live-executor.ts +0 -227
- package/src/runtime/task-runner/output-splitter.ts +0 -152
- package/src/runtime/task-runner/progress.ts +0 -157
- package/src/runtime/task-runner/prompt-builder.ts +0 -278
- package/src/runtime/task-runner/prompt-pipeline.ts +0 -88
- package/src/runtime/task-runner/result-utils.ts +0 -16
- package/src/runtime/task-runner/retrieval-orchestrator.ts +0 -310
- package/src/runtime/task-runner/run-projection.ts +0 -125
- package/src/runtime/task-runner/state-helpers.ts +0 -176
- package/src/runtime/task-runner/tail-read.ts +0 -34
- package/src/runtime/task-runner.ts +0 -1420
- package/src/runtime/team-runner-artifacts.ts +0 -13
- package/src/runtime/team-runner.ts +0 -1993
- package/src/runtime/tool-output-pruner.ts +0 -333
- package/src/runtime/tool-progress.ts +0 -278
- package/src/runtime/usage-tracker.ts +0 -73
- package/src/runtime/verification-gates.ts +0 -571
- package/src/runtime/verification-integrity.ts +0 -105
- package/src/runtime/verification-worktree.ts +0 -186
- package/src/runtime/worker-heartbeat.ts +0 -25
- package/src/runtime/worker-startup.ts +0 -83
- package/src/runtime/workflow-state.ts +0 -195
- package/src/runtime/workspace-lock.ts +0 -443
- package/src/runtime/workspace-tree.ts +0 -312
- package/src/runtime/yield-handler.ts +0 -224
- package/src/runtime/zombie-scanner.ts +0 -298
- package/src/schema/config-schema.ts +0 -327
- package/src/schema/team-tool-schema.ts +0 -415
- package/src/schema/validation-types.ts +0 -159
- package/src/skills/discover-skills.ts +0 -197
- package/src/skills/skill-templates.ts +0 -456
- package/src/skills/validate.ts +0 -285
- package/src/state/active-run-registry.ts +0 -439
- package/src/state/artifact-store.ts +0 -176
- package/src/state/atomic-write.ts +0 -903
- package/src/state/blob-store.ts +0 -308
- package/src/state/contracts.ts +0 -158
- package/src/state/crew-init.ts +0 -269
- package/src/state/decision-ledger.ts +0 -345
- package/src/state/event-log-rotation.ts +0 -342
- package/src/state/event-log.ts +0 -1311
- package/src/state/event-reconstructor.ts +0 -229
- package/src/state/gitignore-manager.ts +0 -46
- package/src/state/health-store.ts +0 -79
- package/src/state/hook-instinct-bridge.ts +0 -94
- package/src/state/hook-integrations.ts +0 -51
- package/src/state/instinct-store.ts +0 -275
- package/src/state/jsonl-writer.ts +0 -107
- package/src/state/locks.ts +0 -562
- package/src/state/mailbox.ts +0 -916
- package/src/state/observation-store.ts +0 -176
- package/src/state/run-cache.ts +0 -193
- package/src/state/run-graph.ts +0 -183
- package/src/state/run-metrics.ts +0 -165
- package/src/state/schedule.ts +0 -166
- package/src/state/session-state-map.ts +0 -51
- package/src/state/state-store.ts +0 -958
- package/src/state/task-claims.ts +0 -61
- package/src/state/tiered-eval.ts +0 -480
- package/src/state/types-eval.ts +0 -58
- package/src/state/types.ts +0 -440
- package/src/state/usage.ts +0 -138
- package/src/state/worker-atomic-writer.ts +0 -194
- package/src/subagents/async-entry.ts +0 -1
- package/src/subagents/index.ts +0 -3
- package/src/subagents/live/control.ts +0 -1
- package/src/subagents/live/manager.ts +0 -1
- package/src/subagents/live/realtime.ts +0 -1
- package/src/subagents/live/session-runtime.ts +0 -1
- package/src/subagents/manager.ts +0 -1
- package/src/subagents/spawn.ts +0 -1
- package/src/teams/discover-teams.ts +0 -187
- package/src/teams/team-config.ts +0 -27
- package/src/teams/team-serializer.ts +0 -38
- package/src/tools/safe-bash-extension.ts +0 -54
- package/src/tools/safe-bash.ts +0 -505
- package/src/types/diff.d.ts +0 -18
- package/src/types/new-api-types.ts +0 -35
- package/src/ui/agent-management-overlay.ts +0 -160
- package/src/ui/card-colors.ts +0 -139
- package/src/ui/crew-footer.ts +0 -102
- package/src/ui/crew-select-list.ts +0 -111
- package/src/ui/dashboard-panes/agents-pane.ts +0 -164
- package/src/ui/dashboard-panes/cancellation-pane.ts +0 -66
- package/src/ui/dashboard-panes/capability-pane.ts +0 -77
- package/src/ui/dashboard-panes/health-pane.ts +0 -31
- package/src/ui/dashboard-panes/mailbox-pane.ts +0 -35
- package/src/ui/dashboard-panes/metrics-pane.ts +0 -37
- package/src/ui/dashboard-panes/progress-pane.ts +0 -38
- package/src/ui/dashboard-panes/transcript-pane.ts +0 -10
- package/src/ui/deploy-bundled-themes.ts +0 -71
- package/src/ui/dwf-phase-display.ts +0 -151
- package/src/ui/dynamic-border.ts +0 -35
- package/src/ui/heartbeat-aggregator.ts +0 -74
- package/src/ui/key-utils.ts +0 -42
- package/src/ui/keybinding-map.ts +0 -248
- package/src/ui/layout-primitives.ts +0 -106
- package/src/ui/live-conversation-overlay.ts +0 -183
- package/src/ui/live-duration.ts +0 -55
- package/src/ui/live-run-sidebar.ts +0 -301
- package/src/ui/loaders.ts +0 -176
- package/src/ui/mascot.ts +0 -436
- package/src/ui/overlays/agent-picker-overlay.ts +0 -65
- package/src/ui/overlays/confirm-overlay.ts +0 -60
- package/src/ui/overlays/help-overlay.ts +0 -177
- package/src/ui/overlays/mailbox-compose-overlay.ts +0 -181
- package/src/ui/overlays/mailbox-compose-preview.ts +0 -78
- package/src/ui/overlays/mailbox-detail-overlay.ts +0 -154
- package/src/ui/pi-ui-compat.ts +0 -68
- package/src/ui/powerbar-publisher.ts +0 -459
- package/src/ui/render-coalescer.ts +0 -101
- package/src/ui/render-diff.ts +0 -160
- package/src/ui/render-scheduler.ts +0 -224
- package/src/ui/run-action-dispatcher.ts +0 -182
- package/src/ui/run-dashboard.ts +0 -913
- package/src/ui/run-event-bus.ts +0 -381
- package/src/ui/run-snapshot-cache.ts +0 -1057
- package/src/ui/settings-overlay.ts +0 -1067
- package/src/ui/snapshot-types.ts +0 -90
- package/src/ui/spinner.ts +0 -17
- package/src/ui/status-colors.ts +0 -143
- package/src/ui/syntax-highlight.ts +0 -136
- package/src/ui/terminal-status.ts +0 -269
- package/src/ui/theme-adapter.ts +0 -271
- package/src/ui/theme-discovery.ts +0 -199
- package/src/ui/tool-progress-formatter.ts +0 -93
- package/src/ui/tool-render.ts +0 -453
- package/src/ui/tool-renderers/brief-mode.ts +0 -225
- package/src/ui/tool-renderers/index.ts +0 -726
- package/src/ui/transcript-cache.ts +0 -128
- package/src/ui/transcript-entries.ts +0 -256
- package/src/ui/transcript-viewer.ts +0 -424
- package/src/ui/widget/index.ts +0 -357
- package/src/ui/widget/widget-formatters.ts +0 -182
- package/src/ui/widget/widget-model.ts +0 -110
- package/src/ui/widget/widget-renderer.ts +0 -182
- package/src/ui/widget/widget-types.ts +0 -36
- package/src/utils/bm25-search.ts +0 -235
- package/src/utils/completion-dedupe.ts +0 -63
- package/src/utils/conflict-detect.ts +0 -668
- package/src/utils/env-allowlist.ts +0 -30
- package/src/utils/env-filter.ts +0 -155
- package/src/utils/file-coalescer.ts +0 -98
- package/src/utils/fingerprint.ts +0 -180
- package/src/utils/frontmatter.ts +0 -70
- package/src/utils/fs-watch.ts +0 -37
- package/src/utils/gh-protocol.ts +0 -556
- package/src/utils/git.ts +0 -260
- package/src/utils/guards.ts +0 -107
- package/src/utils/ids.ts +0 -24
- package/src/utils/incremental-reader.ts +0 -220
- package/src/utils/internal-error.ts +0 -10
- package/src/utils/names.ts +0 -36
- package/src/utils/ndjson.ts +0 -115
- package/src/utils/paths.ts +0 -227
- package/src/utils/project-detector.ts +0 -160
- package/src/utils/redaction.ts +0 -347
- package/src/utils/resolve-shell.ts +0 -36
- package/src/utils/run-watcher-registry.ts +0 -152
- package/src/utils/safe-paths.ts +0 -383
- package/src/utils/scan-cache.ts +0 -144
- package/src/utils/session-utils.ts +0 -110
- package/src/utils/sleep.ts +0 -54
- package/src/utils/socket-path.ts +0 -127
- package/src/utils/sse-parser.ts +0 -129
- package/src/utils/task-name-generator.ts +0 -337
- package/src/utils/timings.ts +0 -33
- package/src/utils/token-counter.ts +0 -200
- package/src/utils/visual.ts +0 -207
- package/src/workflows/cost-estimator.ts +0 -34
- package/src/workflows/discover-workflows.ts +0 -290
- package/src/workflows/intermediate-store.ts +0 -166
- package/src/workflows/preflight-validator.ts +0 -168
- package/src/workflows/topology-analyzer.ts +0 -203
- package/src/workflows/validate-workflow.ts +0 -50
- package/src/workflows/workflow-config.ts +0 -70
- package/src/workflows/workflow-serializer.ts +0 -32
- package/src/worktree/branch-freshness.ts +0 -112
- package/src/worktree/cleanup.ts +0 -341
- package/src/worktree/worktree-manager.ts +0 -1200
package/src/ui/snapshot-types.ts
DELETED
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import type { CrewAgentRecord } from "../runtime/crew-agent-runtime.ts";
|
|
2
|
-
import type { TeamEvent } from "../state/event-log.ts";
|
|
3
|
-
import type { TeamRunManifest, TeamTaskState } from "../state/types.ts";
|
|
4
|
-
import type { DwfPhaseState } from "./dwf-phase-display.ts";
|
|
5
|
-
|
|
6
|
-
export interface RunUiProgress {
|
|
7
|
-
total: number;
|
|
8
|
-
completed: number;
|
|
9
|
-
running: number;
|
|
10
|
-
failed: number;
|
|
11
|
-
queued: number;
|
|
12
|
-
waiting?: number;
|
|
13
|
-
cancelled?: number;
|
|
14
|
-
skipped?: number;
|
|
15
|
-
needsAttention?: number;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export interface RunUiUsage {
|
|
19
|
-
tokensIn: number;
|
|
20
|
-
tokensOut: number;
|
|
21
|
-
toolUses: number;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export interface RunUiMailbox {
|
|
25
|
-
inboxUnread: number;
|
|
26
|
-
outboxPending: number;
|
|
27
|
-
needsAttention: number;
|
|
28
|
-
/** Urgent steering messages count. Default 0. */
|
|
29
|
-
steerUnread?: number;
|
|
30
|
-
/** Follow-up / continuation messages count. Default 0. */
|
|
31
|
-
followUpUnread?: number;
|
|
32
|
-
/** Response / reply messages count. Default 0. */
|
|
33
|
-
responseUnread?: number;
|
|
34
|
-
/** Generic messages count. Default 0. */
|
|
35
|
-
messageUnread?: number;
|
|
36
|
-
/** True when counts come from bounded tail reads and older messages may be omitted. */
|
|
37
|
-
approximate?: boolean;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export interface RunUiGroupJoin {
|
|
41
|
-
requestId: string;
|
|
42
|
-
messageId: string;
|
|
43
|
-
partial: boolean;
|
|
44
|
-
ack: "pending" | "acknowledged";
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export interface RunUiSnapshot {
|
|
48
|
-
runId: string;
|
|
49
|
-
cwd: string;
|
|
50
|
-
fetchedAt: number;
|
|
51
|
-
signature: string;
|
|
52
|
-
/**
|
|
53
|
-
* 1.6 / 1.7 — per-slice signatures so dashboard panes can short-circuit
|
|
54
|
-
* their own render when the slice they care about hasn't changed:
|
|
55
|
-
*
|
|
56
|
-
* if (snapshot.sliceSignatures?.tasks === lastTaskSig) return cached;
|
|
57
|
-
*
|
|
58
|
-
* Optional for backwards-compat; consumers fall back to the full
|
|
59
|
-
* `signature` when the field is missing.
|
|
60
|
-
*/
|
|
61
|
-
sliceSignatures?: {
|
|
62
|
-
tasks: string;
|
|
63
|
-
agents: string;
|
|
64
|
-
mailbox: string;
|
|
65
|
-
progress: string;
|
|
66
|
-
events: string;
|
|
67
|
-
};
|
|
68
|
-
manifest: TeamRunManifest;
|
|
69
|
-
tasks: TeamTaskState[];
|
|
70
|
-
agents: CrewAgentRecord[];
|
|
71
|
-
progress: RunUiProgress;
|
|
72
|
-
usage: RunUiUsage;
|
|
73
|
-
mailbox: RunUiMailbox;
|
|
74
|
-
groupJoins?: RunUiGroupJoin[];
|
|
75
|
-
/** Structured cancellation reason from run.cancelled event data, when available. */
|
|
76
|
-
cancellationReason?: string;
|
|
77
|
-
/** DWF phase state derived from `recentEvents`. Null/absent for non-DWF runs. */
|
|
78
|
-
dwfPhaseState?: DwfPhaseState | null;
|
|
79
|
-
recentEvents: TeamEvent[];
|
|
80
|
-
recentOutputLines: string[];
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export interface RunSnapshotCache {
|
|
84
|
-
get(runId: string): RunUiSnapshot | undefined;
|
|
85
|
-
refresh(runId: string): RunUiSnapshot;
|
|
86
|
-
refreshIfStale(runId: string): RunUiSnapshot;
|
|
87
|
-
invalidate(runId?: string): void;
|
|
88
|
-
snapshotsByKey(): Map<string, RunUiSnapshot>;
|
|
89
|
-
dispose?(): void;
|
|
90
|
-
}
|
package/src/ui/spinner.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export const SUBAGENT_SPINNER_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"] as const;
|
|
2
|
-
export const SUBAGENT_SPINNER_FRAME_MS = 160;
|
|
3
|
-
|
|
4
|
-
export function spinnerBucket(now = Date.now(), frameMs = SUBAGENT_SPINNER_FRAME_MS): number {
|
|
5
|
-
return Math.floor(now / Math.max(1, frameMs));
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
function hashKey(key: string): number {
|
|
9
|
-
let hash = 0;
|
|
10
|
-
for (let index = 0; index < key.length; index += 1) hash = (hash * 31 + key.charCodeAt(index)) >>> 0;
|
|
11
|
-
return hash;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export function spinnerFrame(key = "", now = Date.now()): string {
|
|
15
|
-
const offset = key ? hashKey(key) % SUBAGENT_SPINNER_FRAMES.length : 0;
|
|
16
|
-
return SUBAGENT_SPINNER_FRAMES[(spinnerBucket(now) + offset) % SUBAGENT_SPINNER_FRAMES.length] ?? SUBAGENT_SPINNER_FRAMES[0];
|
|
17
|
-
}
|
package/src/ui/status-colors.ts
DELETED
|
@@ -1,143 +0,0 @@
|
|
|
1
|
-
import type { CrewTheme, CrewThemeColor } from "./theme-adapter.ts";
|
|
2
|
-
|
|
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 & {});
|
|
15
|
-
|
|
16
|
-
export function colorForStatus(status: RunStatus): CrewThemeColor {
|
|
17
|
-
switch (status) {
|
|
18
|
-
case "running":
|
|
19
|
-
return "accent";
|
|
20
|
-
case "waiting":
|
|
21
|
-
return "muted";
|
|
22
|
-
case "completed":
|
|
23
|
-
return "success";
|
|
24
|
-
case "failed":
|
|
25
|
-
case "stale":
|
|
26
|
-
return "error";
|
|
27
|
-
case "cancelled":
|
|
28
|
-
case "blocked":
|
|
29
|
-
case "stopped":
|
|
30
|
-
return "warning";
|
|
31
|
-
case "needs_attention":
|
|
32
|
-
return "warning";
|
|
33
|
-
case "queued":
|
|
34
|
-
default:
|
|
35
|
-
return "dim";
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export function iconForStatus(status: RunStatus, options?: { runningGlyph?: string }): string {
|
|
40
|
-
const glyph = options?.runningGlyph ?? "▶";
|
|
41
|
-
switch (status) {
|
|
42
|
-
case "completed":
|
|
43
|
-
return "✓";
|
|
44
|
-
case "failed":
|
|
45
|
-
case "stale":
|
|
46
|
-
return "✗";
|
|
47
|
-
case "cancelled":
|
|
48
|
-
case "stopped":
|
|
49
|
-
return "■";
|
|
50
|
-
case "running":
|
|
51
|
-
return glyph;
|
|
52
|
-
case "waiting":
|
|
53
|
-
return "⏳";
|
|
54
|
-
case "queued":
|
|
55
|
-
return "◦";
|
|
56
|
-
case "blocked":
|
|
57
|
-
return "⏸";
|
|
58
|
-
case "needs_attention":
|
|
59
|
-
return "⚠";
|
|
60
|
-
default:
|
|
61
|
-
return "·";
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/** @internal */
|
|
66
|
-
function colorForActivity(activityState: string | undefined): CrewThemeColor {
|
|
67
|
-
if (activityState === "needs_attention") return "warning";
|
|
68
|
-
if (activityState === "stale") return "error";
|
|
69
|
-
return "dim";
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export function applyStatusColor(theme: CrewTheme, status: RunStatus, text: string): string {
|
|
73
|
-
return theme.fg(colorForStatus(status), text);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Shared glyph→color map for status glyphs embedded in rendered lines.
|
|
78
|
-
* Consolidates the duplicated `statusGlyphColor` (widget-renderer.ts) and
|
|
79
|
-
* `iconColor` (live-run-sidebar.ts) maps into a single source of truth.
|
|
80
|
-
*
|
|
81
|
-
* Covers ALL status glyphs, including the two previously-missing ones:
|
|
82
|
-
* ⏳ (waiting) → muted, ⚠ (needs_attention) → warning
|
|
83
|
-
* and the braille spinner range U+2800–U+28FF (⠁–⣿) → accent (V-3).
|
|
84
|
-
*/
|
|
85
|
-
function glyphColor(glyph: string): CrewThemeColor {
|
|
86
|
-
// Braille Patterns block (U+2800–U+28FF) — running animation frames.
|
|
87
|
-
const code = glyph.codePointAt(0) ?? 0;
|
|
88
|
-
if (code >= 0x2800 && code <= 0x28ff) return "accent";
|
|
89
|
-
switch (glyph) {
|
|
90
|
-
case "✓":
|
|
91
|
-
return "success";
|
|
92
|
-
case "✗":
|
|
93
|
-
return "error";
|
|
94
|
-
case "■":
|
|
95
|
-
case "⏸":
|
|
96
|
-
case "⚠":
|
|
97
|
-
return "warning";
|
|
98
|
-
case "⏳":
|
|
99
|
-
return "muted";
|
|
100
|
-
case "◦":
|
|
101
|
-
case "·":
|
|
102
|
-
return "dim";
|
|
103
|
-
case "▶":
|
|
104
|
-
default:
|
|
105
|
-
return "accent";
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
/**
|
|
110
|
-
* Status glyph characters used in the fast-path check.
|
|
111
|
-
*/
|
|
112
|
-
const STATUS_GLYPH_CHARS = "\u2713\u2717\u25a0\u23f8\u25e6\u00b7\u25b6\u23f3\u26a0";
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Colorize status glyphs embedded in a rendered line. Wraps every status glyph
|
|
116
|
-
* (✓ ✗ ■ ⏸ ⏳ ⚠ ◦ · ▶ and braille spinner frames ⠁–⣿) in the appropriate theme
|
|
117
|
-
* color, leaving surrounding text untouched.
|
|
118
|
-
*
|
|
119
|
-
* Replaces the duplicated per-module glyph colorizers in widget-renderer.ts
|
|
120
|
-
* and live-run-sidebar.ts with a single shared helper (F-1, F-2, V-3).
|
|
121
|
-
*/
|
|
122
|
-
export function colorizeStatusGlyphs(line: string, theme: CrewTheme): string {
|
|
123
|
-
// Fast path: skip regex if line contains no status glyphs at all.
|
|
124
|
-
let hasGlyph = false;
|
|
125
|
-
for (let i = 0; i < STATUS_GLYPH_CHARS.length; i++) {
|
|
126
|
-
if (line.indexOf(STATUS_GLYPH_CHARS[i]) !== -1) {
|
|
127
|
-
hasGlyph = true;
|
|
128
|
-
break;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
if (!hasGlyph) {
|
|
132
|
-
// Check for braille range (U+2800–U+28FF)
|
|
133
|
-
for (let i = 0; i < line.length; i++) {
|
|
134
|
-
const cp = line.codePointAt(i)!;
|
|
135
|
-
if (cp >= 0x2800 && cp <= 0x28ff) {
|
|
136
|
-
hasGlyph = true;
|
|
137
|
-
break;
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
if (!hasGlyph) return line;
|
|
142
|
-
return line.replace(/[✓✗■⏸◦·▶⏳⚠]|[\u2800-\u28FF]/g, (glyph) => theme.fg(glyphColor(glyph), glyph));
|
|
143
|
-
}
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Syntax highlighting for pi-crew UI.
|
|
3
|
-
*
|
|
4
|
-
* Uses cli-highlight (sync) with the active Pi theme's syntax colors.
|
|
5
|
-
* Falls back to plain text (theme.fg on every line) if the language is
|
|
6
|
-
* unsupported or highlighting fails.
|
|
7
|
-
*/
|
|
8
|
-
import { highlight, supportsLanguage } from "cli-highlight";
|
|
9
|
-
import type { CrewTheme } from "./theme-adapter.ts";
|
|
10
|
-
import { asCrewTheme } from "./theme-adapter.ts";
|
|
11
|
-
|
|
12
|
-
// ── cli-highlight theme bridge ──────────────────────────────────────────
|
|
13
|
-
|
|
14
|
-
function buildCliTheme(theme: CrewTheme): Record<string, (text: string) => string> {
|
|
15
|
-
return {
|
|
16
|
-
keyword: (text) => theme.fg("syntaxKeyword", text),
|
|
17
|
-
built_in: (text) => theme.fg("syntaxType", text),
|
|
18
|
-
literal: (text) => theme.fg("syntaxNumber", text),
|
|
19
|
-
number: (text) => theme.fg("syntaxNumber", text),
|
|
20
|
-
string: (text) => theme.fg("syntaxString", text),
|
|
21
|
-
comment: (text) => theme.fg("syntaxComment", text),
|
|
22
|
-
function: (text) => theme.fg("syntaxFunction", text),
|
|
23
|
-
title: (text) => theme.fg("syntaxFunction", text),
|
|
24
|
-
class: (text) => theme.fg("syntaxType", text),
|
|
25
|
-
type: (text) => theme.fg("syntaxType", text),
|
|
26
|
-
attr: (text) => theme.fg("syntaxVariable", text),
|
|
27
|
-
variable: (text) => theme.fg("syntaxVariable", text),
|
|
28
|
-
params: (text) => theme.fg("syntaxVariable", text),
|
|
29
|
-
operator: (text) => theme.fg("syntaxOperator", text),
|
|
30
|
-
punctuation: (text) => theme.fg("syntaxPunctuation", text),
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function hlCliSync(code: string, language: string | undefined, theme: CrewTheme): string {
|
|
35
|
-
if (!language) {
|
|
36
|
-
return code
|
|
37
|
-
.split("\n")
|
|
38
|
-
.map((line) => theme.fg("mdCodeBlock", line))
|
|
39
|
-
.join("\n");
|
|
40
|
-
}
|
|
41
|
-
try {
|
|
42
|
-
return highlight(code, {
|
|
43
|
-
language,
|
|
44
|
-
ignoreIllegals: true,
|
|
45
|
-
theme: buildCliTheme(theme),
|
|
46
|
-
}).trimEnd();
|
|
47
|
-
} catch {
|
|
48
|
-
return code
|
|
49
|
-
.split("\n")
|
|
50
|
-
.map((line) => theme.fg("mdCodeBlock", line))
|
|
51
|
-
.join("\n");
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// ── Language detection ──────────────────────────────────────────────────
|
|
56
|
-
|
|
57
|
-
export const languageMap: Record<string, string> = {
|
|
58
|
-
ts: "typescript",
|
|
59
|
-
tsx: "typescript",
|
|
60
|
-
js: "javascript",
|
|
61
|
-
jsx: "javascript",
|
|
62
|
-
mjs: "javascript",
|
|
63
|
-
cjs: "javascript",
|
|
64
|
-
py: "python",
|
|
65
|
-
md: "markdown",
|
|
66
|
-
markdown: "markdown",
|
|
67
|
-
json: "json",
|
|
68
|
-
yml: "yaml",
|
|
69
|
-
yaml: "yaml",
|
|
70
|
-
toml: "yaml",
|
|
71
|
-
html: "html",
|
|
72
|
-
htm: "html",
|
|
73
|
-
css: "css",
|
|
74
|
-
scss: "scss",
|
|
75
|
-
sass: "sass",
|
|
76
|
-
bash: "bash",
|
|
77
|
-
sh: "bash",
|
|
78
|
-
zsh: "bash",
|
|
79
|
-
fish: "bash",
|
|
80
|
-
ps1: "powershell",
|
|
81
|
-
sql: "sql",
|
|
82
|
-
rust: "rust",
|
|
83
|
-
rb: "ruby",
|
|
84
|
-
go: "go",
|
|
85
|
-
java: "java",
|
|
86
|
-
kt: "kotlin",
|
|
87
|
-
cpp: "cpp",
|
|
88
|
-
cc: "cpp",
|
|
89
|
-
cxx: "cpp",
|
|
90
|
-
hpp: "cpp",
|
|
91
|
-
c: "c",
|
|
92
|
-
h: "c",
|
|
93
|
-
cs: "csharp",
|
|
94
|
-
php: "php",
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
/** @internal */
|
|
98
|
-
function detectLanguageFromPath(filePath: string): string | undefined {
|
|
99
|
-
const ext = filePath.split(".").pop()?.toLowerCase();
|
|
100
|
-
if (!ext) return undefined;
|
|
101
|
-
return languageMap[ext];
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
// ── Public API ──────────────────────────────────────────────────────────
|
|
105
|
-
|
|
106
|
-
export function highlightCode(code: string, language: string | undefined, themeLike: unknown = undefined): string {
|
|
107
|
-
const theme = asCrewTheme(themeLike);
|
|
108
|
-
const validLanguage = language && supportsLanguage(language) ? language : undefined;
|
|
109
|
-
return hlCliSync(code, validLanguage, theme);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
export function highlightJson(payload: string, themeLike: unknown = undefined): string {
|
|
113
|
-
const theme = asCrewTheme(themeLike);
|
|
114
|
-
try {
|
|
115
|
-
return highlight(payload, {
|
|
116
|
-
language: "json",
|
|
117
|
-
ignoreIllegals: true,
|
|
118
|
-
theme: buildCliTheme(theme),
|
|
119
|
-
}).trimEnd();
|
|
120
|
-
} catch {
|
|
121
|
-
try {
|
|
122
|
-
const parsed = JSON.parse(payload);
|
|
123
|
-
return JSON.stringify(parsed, null, 2)
|
|
124
|
-
.split("\n")
|
|
125
|
-
.map((line) => theme.fg("mdCodeBlock", line))
|
|
126
|
-
.join("\n");
|
|
127
|
-
} catch {
|
|
128
|
-
return payload
|
|
129
|
-
.split("\n")
|
|
130
|
-
.map((line) => theme.fg("mdCodeBlock", line))
|
|
131
|
-
.join("\n");
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
export { detectLanguageFromPath };
|
|
@@ -1,269 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Terminal tab title + Ghostty native progress bar.
|
|
3
|
-
*
|
|
4
|
-
* Distilled from pi-status (Thinkscape — `source/pi-status/src/index.ts`):
|
|
5
|
-
* two UI channels pi-crew didn't use before, both surviving subprocess and
|
|
6
|
-
* visible even when the TUI isn't in focus:
|
|
7
|
-
*
|
|
8
|
-
* 1. **Tab title** via `ctx.ui.setTitle()` — shows a one-line crew run summary
|
|
9
|
-
* (e.g. "π-crew · 2 active · explorer, executor"). Cheap, works in any
|
|
10
|
-
* terminal. pi-status restores the title on idle with an exponential
|
|
11
|
-
* back-off re-assert loop (pi itself re-sets the title on some events).
|
|
12
|
-
* 2. **Ghostty OSC 9;4** native progress bar — written to `/dev/tty` (a
|
|
13
|
-
* separate channel from pi's TUI, so it works even when pi runs in a
|
|
14
|
-
* subprocess). state 3 = indeterminate pulsing while runs are active;
|
|
15
|
-
* state 1 value 100 = green completion flash; state 0 = clear. Compatible
|
|
16
|
-
* with all libghostty-based terminals (Ghostty, cmux, muxy).
|
|
17
|
-
*
|
|
18
|
-
* All writes are BEST-EFFORT: `/dev/tty` may be absent (non-interactive /
|
|
19
|
-
* subagent / CI context) and `setTitle` may be unavailable — failures are
|
|
20
|
-
* swallowed and never surface to the user. This module is purely additive:
|
|
21
|
-
* it cannot regress existing behavior because nothing depends on it.
|
|
22
|
-
*
|
|
23
|
-
* Lifecycle (wired from register.ts via runEventBus + turn events):
|
|
24
|
-
* - run active (running/queued/planning) → title "π-crew · N active · <roles>",
|
|
25
|
-
* Ghostty state 3 (indeterminate).
|
|
26
|
-
* - run just completed → Ghostty state 1/100 (green flash), schedule clear.
|
|
27
|
-
* - idle (no active runs) → restore pi's natural title, Ghostty state 0.
|
|
28
|
-
*
|
|
29
|
-
* @module terminal-status
|
|
30
|
-
*/
|
|
31
|
-
|
|
32
|
-
import { writeFileSync } from "node:fs";
|
|
33
|
-
import { listLiveAgents } from "../runtime/live-agent-manager.ts";
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Minimal UI surface this module needs. Deliberately narrower than
|
|
37
|
-
* `ExtensionContext["ui"]` so it's trivial to mock in tests (dependency
|
|
38
|
-
* inversion: depend only on what you use).
|
|
39
|
-
*/
|
|
40
|
-
export interface TerminalStatusUi {
|
|
41
|
-
hasUI: boolean;
|
|
42
|
-
ui: { setTitle(title: string): void };
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
/** Ghostty OSC 9;4 progress states. */
|
|
46
|
-
export const GHOSTTY_PROGRESS = {
|
|
47
|
-
CLEAR: 0, // remove the progress indicator
|
|
48
|
-
SET: 1, // set explicit progress (0-100)
|
|
49
|
-
ERROR: 2, // error state
|
|
50
|
-
INDETERMINATE: 3, // pulsing/working animation
|
|
51
|
-
} as const;
|
|
52
|
-
|
|
53
|
-
/** Title prefix so the source is identifiable in the tab. */
|
|
54
|
-
const TITLE_PREFIX = "π-crew";
|
|
55
|
-
/** Separator between summary segments. */
|
|
56
|
-
const SEP = " · ";
|
|
57
|
-
/** Max roles listed in the title (keep it short for narrow tabs). */
|
|
58
|
-
const MAX_TITLE_ROLES = 3;
|
|
59
|
-
|
|
60
|
-
/** Idle-reassert backoff bounds (mirrors pi-status, clamped). */
|
|
61
|
-
const IDLE_REASSERT_START_MS = 200;
|
|
62
|
-
const IDLE_REASSERT_MAX_MS = 5000;
|
|
63
|
-
/** How long the green completion flash stays before clearing. */
|
|
64
|
-
const COMPLETE_FLASH_MS = 1500;
|
|
65
|
-
|
|
66
|
-
/** Injected for tests (defaults write to the real /dev/tty). */
|
|
67
|
-
export type GhosttyWriter = (seq: string) => void;
|
|
68
|
-
|
|
69
|
-
let ghosttyWriter: GhosttyWriter | undefined;
|
|
70
|
-
|
|
71
|
-
/**
|
|
72
|
-
* Set the raw-sequence writer (test seam). Pass `undefined` to restore the
|
|
73
|
-
* default `/dev/tty` writer. Tests inject a buffer-capturing fn.
|
|
74
|
-
*/
|
|
75
|
-
export function setGhosttyWriterForTest(writer: GhosttyWriter | undefined): void {
|
|
76
|
-
ghosttyWriter = writer;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
function defaultGhosttyWriter(seq: string): void {
|
|
80
|
-
try {
|
|
81
|
-
writeFileSync("/dev/tty", seq);
|
|
82
|
-
} catch {
|
|
83
|
-
// /dev/tty unavailable (non-interactive, subagent, CI, or Windows) — no-op.
|
|
84
|
-
// This is expected in most automated contexts; never surface it.
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
function writeGhostty(seq: string): void {
|
|
89
|
-
(ghosttyWriter ?? defaultGhosttyWriter)(seq);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Emit a Ghostty OSC 9;4 progress sequence.
|
|
94
|
-
* Format: `\x1b]9;4;<state>[;<value>]\x07`
|
|
95
|
-
*/
|
|
96
|
-
export function setGhosttyProgress(state: number, value?: number): void {
|
|
97
|
-
const args = value !== undefined ? `${state};${value}` : `${state}`;
|
|
98
|
-
writeGhostty(`\x1b]9;4;${args}\x07`);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/** Indeterminate pulsing — use while crew runs are active. */
|
|
102
|
-
export function ghosttyWorking(): void {
|
|
103
|
-
setGhosttyProgress(GHOSTTY_PROGRESS.INDETERMINATE);
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
/** Green completion flash at 100% — use when a run finishes successfully. */
|
|
107
|
-
export function ghosttyComplete(): void {
|
|
108
|
-
setGhosttyProgress(GHOSTTY_PROGRESS.SET, 100);
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/** Clear the progress indicator. */
|
|
112
|
-
export function ghosttyClear(): void {
|
|
113
|
-
setGhosttyProgress(GHOSTTY_PROGRESS.CLEAR);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Build the crew run-summary title segment from live agents.
|
|
118
|
-
* Returns "" when no agents are live (so the title can be restored).
|
|
119
|
-
*/
|
|
120
|
-
export function buildCrewTitleSegment(cwd?: string): string {
|
|
121
|
-
const live = listLiveAgents();
|
|
122
|
-
if (live.length === 0) return "";
|
|
123
|
-
// Distinct roles across active agents, in stable order.
|
|
124
|
-
const roles: string[] = [];
|
|
125
|
-
const seen = new Set<string>();
|
|
126
|
-
for (const handle of live) {
|
|
127
|
-
const role = handle.role || handle.agent || "agent";
|
|
128
|
-
if (!seen.has(role)) {
|
|
129
|
-
seen.add(role);
|
|
130
|
-
roles.push(role);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
const shown = roles.slice(0, MAX_TITLE_ROLES);
|
|
134
|
-
const more = roles.length > shown.length ? ` +${roles.length - shown.length}` : "";
|
|
135
|
-
return `${TITLE_PREFIX}${SEP}${live.length} active${SEP}${shown.join(", ")}${more}`;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/** Idle title — what we restore when no runs are active. */
|
|
139
|
-
export function buildIdleTitle(): string {
|
|
140
|
-
return TITLE_PREFIX;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
/**
|
|
144
|
-
* Set the terminal tab title if the UI supports it. Best-effort.
|
|
145
|
-
*/
|
|
146
|
-
export function setTerminalTitle(ctx: TerminalStatusUi, title: string): void {
|
|
147
|
-
if (!ctx.hasUI) return;
|
|
148
|
-
try {
|
|
149
|
-
ctx.ui.setTitle(title);
|
|
150
|
-
} catch {
|
|
151
|
-
// setTitle unavailable or failed — swallow (purely cosmetic).
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
interface TerminalStatusState {
|
|
156
|
-
/** Idle re-assert timer (mirrors pi-status backoff). */
|
|
157
|
-
idleTimer: ReturnType<typeof setTimeout> | undefined;
|
|
158
|
-
/** Whether we currently show an "active" title (so we know to restore). */
|
|
159
|
-
showingActive: boolean;
|
|
160
|
-
/** Completion-flash clear timer. */
|
|
161
|
-
flashTimer: ReturnType<typeof setTimeout> | undefined;
|
|
162
|
-
/** True after dispose() — stop all timers/writes. */
|
|
163
|
-
destroyed: boolean;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
/**
|
|
167
|
-
* Terminal status controller. Owns the title + Ghostty progress lifecycle.
|
|
168
|
-
*
|
|
169
|
-
* The controller is a small stateful object (no class hierarchy) so it can be
|
|
170
|
-
* constructed per-session in register.ts and disposed cleanly. It exposes
|
|
171
|
-
* `onRunsActive()`, `onRunCompleted()`, `onIdle()` entry points that the
|
|
172
|
-
* runEventBus + turn handlers call.
|
|
173
|
-
*/
|
|
174
|
-
export interface TerminalStatusController {
|
|
175
|
-
onRunsActive(): void;
|
|
176
|
-
onRunCompleted(): void;
|
|
177
|
-
onIdle(): void;
|
|
178
|
-
dispose(): void;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
export function createTerminalStatusController(ctx: TerminalStatusUi): TerminalStatusController {
|
|
182
|
-
const state: TerminalStatusState = {
|
|
183
|
-
idleTimer: undefined,
|
|
184
|
-
showingActive: false,
|
|
185
|
-
flashTimer: undefined,
|
|
186
|
-
destroyed: false,
|
|
187
|
-
};
|
|
188
|
-
|
|
189
|
-
const clearIdleTimer = (): void => {
|
|
190
|
-
if (state.idleTimer) {
|
|
191
|
-
clearTimeout(state.idleTimer);
|
|
192
|
-
state.idleTimer = undefined;
|
|
193
|
-
}
|
|
194
|
-
};
|
|
195
|
-
const clearFlashTimer = (): void => {
|
|
196
|
-
if (state.flashTimer) {
|
|
197
|
-
clearTimeout(state.flashTimer);
|
|
198
|
-
state.flashTimer = undefined;
|
|
199
|
-
}
|
|
200
|
-
};
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* Idle re-assert loop: pi itself re-sets the title on some events
|
|
204
|
-
* (session_info_changed, model_select, rebinds), so a single setTitle
|
|
205
|
-
* is not durable. Re-assert on an exponential backoff until the next
|
|
206
|
-
* activity. (Pattern from pi-status scheduleIdleReassert.)
|
|
207
|
-
*/
|
|
208
|
-
const scheduleIdleReassert = (delay: number): void => {
|
|
209
|
-
if (state.destroyed || state.showingActive) return;
|
|
210
|
-
clearIdleTimer();
|
|
211
|
-
state.idleTimer = setTimeout(() => {
|
|
212
|
-
if (state.destroyed || state.showingActive) return;
|
|
213
|
-
setTerminalTitle(ctx, buildIdleTitle());
|
|
214
|
-
scheduleIdleReassert(Math.min(delay * 2, IDLE_REASSERT_MAX_MS));
|
|
215
|
-
}, delay);
|
|
216
|
-
// Unref so this recursive backoff timer never keeps the event loop alive
|
|
217
|
-
// (critical on SIGTERM where dispose() is not reached → process hang).
|
|
218
|
-
state.idleTimer.unref?.();
|
|
219
|
-
};
|
|
220
|
-
|
|
221
|
-
return {
|
|
222
|
-
onRunsActive(): void {
|
|
223
|
-
if (state.destroyed) return;
|
|
224
|
-
clearIdleTimer();
|
|
225
|
-
clearFlashTimer();
|
|
226
|
-
state.showingActive = true;
|
|
227
|
-
const segment = buildCrewTitleSegment();
|
|
228
|
-
if (segment) setTerminalTitle(ctx, segment);
|
|
229
|
-
ghosttyWorking();
|
|
230
|
-
},
|
|
231
|
-
onRunCompleted(): void {
|
|
232
|
-
if (state.destroyed) return;
|
|
233
|
-
clearFlashTimer();
|
|
234
|
-
ghosttyComplete();
|
|
235
|
-
// Clear the green flash after a short beat, then re-evaluate.
|
|
236
|
-
state.flashTimer = setTimeout(() => {
|
|
237
|
-
if (state.destroyed) return;
|
|
238
|
-
state.flashTimer = undefined;
|
|
239
|
-
// If still active, resume indeterminate; else go idle.
|
|
240
|
-
if (listLiveAgents().length > 0) {
|
|
241
|
-
ghosttyWorking();
|
|
242
|
-
} else {
|
|
243
|
-
ghosttyClear();
|
|
244
|
-
}
|
|
245
|
-
}, COMPLETE_FLASH_MS);
|
|
246
|
-
// Unref so the one-shot flash clear never blocks process exit.
|
|
247
|
-
state.flashTimer.unref?.();
|
|
248
|
-
},
|
|
249
|
-
onIdle(): void {
|
|
250
|
-
if (state.destroyed) return;
|
|
251
|
-
state.showingActive = false;
|
|
252
|
-
clearFlashTimer();
|
|
253
|
-
ghosttyClear();
|
|
254
|
-
setTerminalTitle(ctx, buildIdleTitle());
|
|
255
|
-
scheduleIdleReassert(IDLE_REASSERT_START_MS);
|
|
256
|
-
},
|
|
257
|
-
dispose(): void {
|
|
258
|
-
state.destroyed = true;
|
|
259
|
-
clearIdleTimer();
|
|
260
|
-
clearFlashTimer();
|
|
261
|
-
// Best-effort: clear the Ghostty progress so we don't leave a stale bar.
|
|
262
|
-
try {
|
|
263
|
-
ghosttyClear();
|
|
264
|
-
} catch {
|
|
265
|
-
// swallow
|
|
266
|
-
}
|
|
267
|
-
},
|
|
268
|
-
};
|
|
269
|
-
}
|