@promptwheel/cli 0.6.0
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/README.md +215 -0
- package/dist/bin/promptwheel.d.ts +17 -0
- package/dist/bin/promptwheel.d.ts.map +1 -0
- package/dist/bin/promptwheel.js +90 -0
- package/dist/bin/promptwheel.js.map +1 -0
- package/dist/commands/auto-auth.d.ts +26 -0
- package/dist/commands/auto-auth.d.ts.map +1 -0
- package/dist/commands/auto-auth.js +216 -0
- package/dist/commands/auto-auth.js.map +1 -0
- package/dist/commands/auto-ci-mode.d.ts +9 -0
- package/dist/commands/auto-ci-mode.d.ts.map +1 -0
- package/dist/commands/auto-ci-mode.js +176 -0
- package/dist/commands/auto-ci-mode.js.map +1 -0
- package/dist/commands/solo-analytics.d.ts +6 -0
- package/dist/commands/solo-analytics.d.ts.map +1 -0
- package/dist/commands/solo-analytics.js +267 -0
- package/dist/commands/solo-analytics.js.map +1 -0
- package/dist/commands/solo-auto.d.ts +6 -0
- package/dist/commands/solo-auto.d.ts.map +1 -0
- package/dist/commands/solo-auto.js +135 -0
- package/dist/commands/solo-auto.js.map +1 -0
- package/dist/commands/solo-daemon.d.ts +12 -0
- package/dist/commands/solo-daemon.d.ts.map +1 -0
- package/dist/commands/solo-daemon.js +177 -0
- package/dist/commands/solo-daemon.js.map +1 -0
- package/dist/commands/solo-exec.d.ts +6 -0
- package/dist/commands/solo-exec.d.ts.map +1 -0
- package/dist/commands/solo-exec.js +656 -0
- package/dist/commands/solo-exec.js.map +1 -0
- package/dist/commands/solo-inspect.d.ts +6 -0
- package/dist/commands/solo-inspect.d.ts.map +1 -0
- package/dist/commands/solo-inspect.js +765 -0
- package/dist/commands/solo-inspect.js.map +1 -0
- package/dist/commands/solo-lifecycle.d.ts +6 -0
- package/dist/commands/solo-lifecycle.d.ts.map +1 -0
- package/dist/commands/solo-lifecycle.js +226 -0
- package/dist/commands/solo-lifecycle.js.map +1 -0
- package/dist/commands/solo-nudge.d.ts +6 -0
- package/dist/commands/solo-nudge.d.ts.map +1 -0
- package/dist/commands/solo-nudge.js +49 -0
- package/dist/commands/solo-nudge.js.map +1 -0
- package/dist/commands/solo-qa.d.ts +6 -0
- package/dist/commands/solo-qa.d.ts.map +1 -0
- package/dist/commands/solo-qa.js +253 -0
- package/dist/commands/solo-qa.js.map +1 -0
- package/dist/commands/solo-trajectory.d.ts +6 -0
- package/dist/commands/solo-trajectory.d.ts.map +1 -0
- package/dist/commands/solo-trajectory.js +268 -0
- package/dist/commands/solo-trajectory.js.map +1 -0
- package/dist/commands/solo.d.ts +11 -0
- package/dist/commands/solo.d.ts.map +1 -0
- package/dist/commands/solo.js +52 -0
- package/dist/commands/solo.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/artifacts.d.ts +136 -0
- package/dist/lib/artifacts.d.ts.map +1 -0
- package/dist/lib/artifacts.js +147 -0
- package/dist/lib/artifacts.js.map +1 -0
- package/dist/lib/codebase-index.d.ts +5 -0
- package/dist/lib/codebase-index.d.ts.map +1 -0
- package/dist/lib/codebase-index.js +5 -0
- package/dist/lib/codebase-index.js.map +1 -0
- package/dist/lib/cycle-context.d.ts +62 -0
- package/dist/lib/cycle-context.d.ts.map +1 -0
- package/dist/lib/cycle-context.js +141 -0
- package/dist/lib/cycle-context.js.map +1 -0
- package/dist/lib/daemon-fork.d.ts +39 -0
- package/dist/lib/daemon-fork.d.ts.map +1 -0
- package/dist/lib/daemon-fork.js +164 -0
- package/dist/lib/daemon-fork.js.map +1 -0
- package/dist/lib/daemon-notifier.d.ts +29 -0
- package/dist/lib/daemon-notifier.d.ts.map +1 -0
- package/dist/lib/daemon-notifier.js +147 -0
- package/dist/lib/daemon-notifier.js.map +1 -0
- package/dist/lib/daemon.d.ts +75 -0
- package/dist/lib/daemon.d.ts.map +1 -0
- package/dist/lib/daemon.js +265 -0
- package/dist/lib/daemon.js.map +1 -0
- package/dist/lib/dedup-memory.d.ts +46 -0
- package/dist/lib/dedup-memory.d.ts.map +1 -0
- package/dist/lib/dedup-memory.js +190 -0
- package/dist/lib/dedup-memory.js.map +1 -0
- package/dist/lib/dedup.d.ts +37 -0
- package/dist/lib/dedup.d.ts.map +1 -0
- package/dist/lib/dedup.js +85 -0
- package/dist/lib/dedup.js.map +1 -0
- package/dist/lib/display-adapter-log.d.ts +26 -0
- package/dist/lib/display-adapter-log.d.ts.map +1 -0
- package/dist/lib/display-adapter-log.js +63 -0
- package/dist/lib/display-adapter-log.js.map +1 -0
- package/dist/lib/display-adapter-spinner.d.ts +28 -0
- package/dist/lib/display-adapter-spinner.d.ts.map +1 -0
- package/dist/lib/display-adapter-spinner.js +93 -0
- package/dist/lib/display-adapter-spinner.js.map +1 -0
- package/dist/lib/display-adapter-tui.d.ts +32 -0
- package/dist/lib/display-adapter-tui.d.ts.map +1 -0
- package/dist/lib/display-adapter-tui.js +77 -0
- package/dist/lib/display-adapter-tui.js.map +1 -0
- package/dist/lib/display-adapter.d.ts +40 -0
- package/dist/lib/display-adapter.d.ts.map +1 -0
- package/dist/lib/display-adapter.js +9 -0
- package/dist/lib/display-adapter.js.map +1 -0
- package/dist/lib/doctor.d.ts +45 -0
- package/dist/lib/doctor.d.ts.map +1 -0
- package/dist/lib/doctor.js +382 -0
- package/dist/lib/doctor.js.map +1 -0
- package/dist/lib/exclusion-index.d.ts +50 -0
- package/dist/lib/exclusion-index.d.ts.map +1 -0
- package/dist/lib/exclusion-index.js +249 -0
- package/dist/lib/exclusion-index.js.map +1 -0
- package/dist/lib/exec.d.ts +24 -0
- package/dist/lib/exec.d.ts.map +1 -0
- package/dist/lib/exec.js +295 -0
- package/dist/lib/exec.js.map +1 -0
- package/dist/lib/execution-backends/claude.d.ts +27 -0
- package/dist/lib/execution-backends/claude.d.ts.map +1 -0
- package/dist/lib/execution-backends/claude.js +161 -0
- package/dist/lib/execution-backends/claude.js.map +1 -0
- package/dist/lib/execution-backends/codex.d.ts +28 -0
- package/dist/lib/execution-backends/codex.d.ts.map +1 -0
- package/dist/lib/execution-backends/codex.js +216 -0
- package/dist/lib/execution-backends/codex.js.map +1 -0
- package/dist/lib/execution-backends/index.d.ts +10 -0
- package/dist/lib/execution-backends/index.d.ts.map +1 -0
- package/dist/lib/execution-backends/index.js +9 -0
- package/dist/lib/execution-backends/index.js.map +1 -0
- package/dist/lib/execution-backends/kimi.d.ts +25 -0
- package/dist/lib/execution-backends/kimi.d.ts.map +1 -0
- package/dist/lib/execution-backends/kimi.js +76 -0
- package/dist/lib/execution-backends/kimi.js.map +1 -0
- package/dist/lib/execution-backends/types.d.ts +38 -0
- package/dist/lib/execution-backends/types.d.ts.map +1 -0
- package/dist/lib/execution-backends/types.js +5 -0
- package/dist/lib/execution-backends/types.js.map +1 -0
- package/dist/lib/failure-classifier.d.ts +11 -0
- package/dist/lib/failure-classifier.d.ts.map +1 -0
- package/dist/lib/failure-classifier.js +24 -0
- package/dist/lib/failure-classifier.js.map +1 -0
- package/dist/lib/file-cooldown.d.ts +9 -0
- package/dist/lib/file-cooldown.d.ts.map +1 -0
- package/dist/lib/file-cooldown.js +75 -0
- package/dist/lib/file-cooldown.js.map +1 -0
- package/dist/lib/formulas.d.ts +52 -0
- package/dist/lib/formulas.d.ts.map +1 -0
- package/dist/lib/formulas.js +123 -0
- package/dist/lib/formulas.js.map +1 -0
- package/dist/lib/git.d.ts +9 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +60 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/goals.d.ts +59 -0
- package/dist/lib/goals.d.ts.map +1 -0
- package/dist/lib/goals.js +216 -0
- package/dist/lib/goals.js.map +1 -0
- package/dist/lib/guidelines.d.ts +32 -0
- package/dist/lib/guidelines.d.ts.map +1 -0
- package/dist/lib/guidelines.js +102 -0
- package/dist/lib/guidelines.js.map +1 -0
- package/dist/lib/learnings.d.ts +65 -0
- package/dist/lib/learnings.d.ts.map +1 -0
- package/dist/lib/learnings.js +193 -0
- package/dist/lib/learnings.js.map +1 -0
- package/dist/lib/logger.d.ts +17 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +42 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/meta-learnings.d.ts +27 -0
- package/dist/lib/meta-learnings.d.ts.map +1 -0
- package/dist/lib/meta-learnings.js +270 -0
- package/dist/lib/meta-learnings.js.map +1 -0
- package/dist/lib/metrics.d.ts +48 -0
- package/dist/lib/metrics.d.ts.map +1 -0
- package/dist/lib/metrics.js +107 -0
- package/dist/lib/metrics.js.map +1 -0
- package/dist/lib/openai-local-execution.d.ts +29 -0
- package/dist/lib/openai-local-execution.d.ts.map +1 -0
- package/dist/lib/openai-local-execution.js +282 -0
- package/dist/lib/openai-local-execution.js.map +1 -0
- package/dist/lib/project-metadata/csharp.d.ts +6 -0
- package/dist/lib/project-metadata/csharp.d.ts.map +1 -0
- package/dist/lib/project-metadata/csharp.js +19 -0
- package/dist/lib/project-metadata/csharp.js.map +1 -0
- package/dist/lib/project-metadata/elixir.d.ts +6 -0
- package/dist/lib/project-metadata/elixir.d.ts.map +1 -0
- package/dist/lib/project-metadata/elixir.js +23 -0
- package/dist/lib/project-metadata/elixir.js.map +1 -0
- package/dist/lib/project-metadata/go.d.ts +6 -0
- package/dist/lib/project-metadata/go.d.ts.map +1 -0
- package/dist/lib/project-metadata/go.js +30 -0
- package/dist/lib/project-metadata/go.js.map +1 -0
- package/dist/lib/project-metadata/index.d.ts +13 -0
- package/dist/lib/project-metadata/index.d.ts.map +1 -0
- package/dist/lib/project-metadata/index.js +111 -0
- package/dist/lib/project-metadata/index.js.map +1 -0
- package/dist/lib/project-metadata/java.d.ts +6 -0
- package/dist/lib/project-metadata/java.d.ts.map +1 -0
- package/dist/lib/project-metadata/java.js +37 -0
- package/dist/lib/project-metadata/java.js.map +1 -0
- package/dist/lib/project-metadata/node.d.ts +6 -0
- package/dist/lib/project-metadata/node.d.ts.map +1 -0
- package/dist/lib/project-metadata/node.js +135 -0
- package/dist/lib/project-metadata/node.js.map +1 -0
- package/dist/lib/project-metadata/php.d.ts +6 -0
- package/dist/lib/project-metadata/php.d.ts.map +1 -0
- package/dist/lib/project-metadata/php.js +29 -0
- package/dist/lib/project-metadata/php.js.map +1 -0
- package/dist/lib/project-metadata/python.d.ts +6 -0
- package/dist/lib/project-metadata/python.d.ts.map +1 -0
- package/dist/lib/project-metadata/python.js +79 -0
- package/dist/lib/project-metadata/python.js.map +1 -0
- package/dist/lib/project-metadata/ruby.d.ts +6 -0
- package/dist/lib/project-metadata/ruby.d.ts.map +1 -0
- package/dist/lib/project-metadata/ruby.js +38 -0
- package/dist/lib/project-metadata/ruby.js.map +1 -0
- package/dist/lib/project-metadata/rust.d.ts +6 -0
- package/dist/lib/project-metadata/rust.d.ts.map +1 -0
- package/dist/lib/project-metadata/rust.js +33 -0
- package/dist/lib/project-metadata/rust.js.map +1 -0
- package/dist/lib/project-metadata/swift.d.ts +6 -0
- package/dist/lib/project-metadata/swift.d.ts.map +1 -0
- package/dist/lib/project-metadata/swift.js +19 -0
- package/dist/lib/project-metadata/swift.js.map +1 -0
- package/dist/lib/project-metadata/types.d.ts +37 -0
- package/dist/lib/project-metadata/types.d.ts.map +1 -0
- package/dist/lib/project-metadata/types.js +5 -0
- package/dist/lib/project-metadata/types.js.map +1 -0
- package/dist/lib/proposal-review.d.ts +9 -0
- package/dist/lib/proposal-review.d.ts.map +1 -0
- package/dist/lib/proposal-review.js +9 -0
- package/dist/lib/proposal-review.js.map +1 -0
- package/dist/lib/providers/claude.d.ts +6 -0
- package/dist/lib/providers/claude.d.ts.map +1 -0
- package/dist/lib/providers/claude.js +21 -0
- package/dist/lib/providers/claude.js.map +1 -0
- package/dist/lib/providers/codex.d.ts +6 -0
- package/dist/lib/providers/codex.d.ts.map +1 -0
- package/dist/lib/providers/codex.js +26 -0
- package/dist/lib/providers/codex.js.map +1 -0
- package/dist/lib/providers/index.d.ts +22 -0
- package/dist/lib/providers/index.d.ts.map +1 -0
- package/dist/lib/providers/index.js +39 -0
- package/dist/lib/providers/index.js.map +1 -0
- package/dist/lib/providers/kimi.d.ts +6 -0
- package/dist/lib/providers/kimi.d.ts.map +1 -0
- package/dist/lib/providers/kimi.js +22 -0
- package/dist/lib/providers/kimi.js.map +1 -0
- package/dist/lib/providers/openai-local.d.ts +8 -0
- package/dist/lib/providers/openai-local.d.ts.map +1 -0
- package/dist/lib/providers/openai-local.js +30 -0
- package/dist/lib/providers/openai-local.js.map +1 -0
- package/dist/lib/providers/types.d.ts +37 -0
- package/dist/lib/providers/types.d.ts.map +1 -0
- package/dist/lib/providers/types.js +5 -0
- package/dist/lib/providers/types.js.map +1 -0
- package/dist/lib/qa-stats.d.ts +113 -0
- package/dist/lib/qa-stats.d.ts.map +1 -0
- package/dist/lib/qa-stats.js +311 -0
- package/dist/lib/qa-stats.js.map +1 -0
- package/dist/lib/retention.d.ts +125 -0
- package/dist/lib/retention.d.ts.map +1 -0
- package/dist/lib/retention.js +767 -0
- package/dist/lib/retention.js.map +1 -0
- package/dist/lib/run-history.d.ts +52 -0
- package/dist/lib/run-history.d.ts.map +1 -0
- package/dist/lib/run-history.js +116 -0
- package/dist/lib/run-history.js.map +1 -0
- package/dist/lib/run-state.d.ts +129 -0
- package/dist/lib/run-state.d.ts.map +1 -0
- package/dist/lib/run-state.js +312 -0
- package/dist/lib/run-state.js.map +1 -0
- package/dist/lib/scope.d.ts +8 -0
- package/dist/lib/scope.d.ts.map +1 -0
- package/dist/lib/scope.js +8 -0
- package/dist/lib/scope.js.map +1 -0
- package/dist/lib/scout-prompt-builder.d.ts +22 -0
- package/dist/lib/scout-prompt-builder.d.ts.map +1 -0
- package/dist/lib/scout-prompt-builder.js +97 -0
- package/dist/lib/scout-prompt-builder.js.map +1 -0
- package/dist/lib/sectors.d.ts +21 -0
- package/dist/lib/sectors.d.ts.map +1 -0
- package/dist/lib/sectors.js +96 -0
- package/dist/lib/sectors.js.map +1 -0
- package/dist/lib/selection.d.ts +35 -0
- package/dist/lib/selection.d.ts.map +1 -0
- package/dist/lib/selection.js +110 -0
- package/dist/lib/selection.js.map +1 -0
- package/dist/lib/session-report.d.ts +26 -0
- package/dist/lib/session-report.d.ts.map +1 -0
- package/dist/lib/session-report.js +143 -0
- package/dist/lib/session-report.js.map +1 -0
- package/dist/lib/solo-auto-between-cycles.d.ts +10 -0
- package/dist/lib/solo-auto-between-cycles.d.ts.map +1 -0
- package/dist/lib/solo-auto-between-cycles.js +577 -0
- package/dist/lib/solo-auto-between-cycles.js.map +1 -0
- package/dist/lib/solo-auto-execute.d.ts +22 -0
- package/dist/lib/solo-auto-execute.d.ts.map +1 -0
- package/dist/lib/solo-auto-execute.js +530 -0
- package/dist/lib/solo-auto-execute.js.map +1 -0
- package/dist/lib/solo-auto-filter.d.ts +14 -0
- package/dist/lib/solo-auto-filter.d.ts.map +1 -0
- package/dist/lib/solo-auto-filter.js +311 -0
- package/dist/lib/solo-auto-filter.js.map +1 -0
- package/dist/lib/solo-auto-finalize.d.ts +6 -0
- package/dist/lib/solo-auto-finalize.d.ts.map +1 -0
- package/dist/lib/solo-auto-finalize.js +242 -0
- package/dist/lib/solo-auto-finalize.js.map +1 -0
- package/dist/lib/solo-auto-init-qa.d.ts +23 -0
- package/dist/lib/solo-auto-init-qa.d.ts.map +1 -0
- package/dist/lib/solo-auto-init-qa.js +183 -0
- package/dist/lib/solo-auto-init-qa.js.map +1 -0
- package/dist/lib/solo-auto-planning.d.ts +40 -0
- package/dist/lib/solo-auto-planning.d.ts.map +1 -0
- package/dist/lib/solo-auto-planning.js +171 -0
- package/dist/lib/solo-auto-planning.js.map +1 -0
- package/dist/lib/solo-auto-scout.d.ts +18 -0
- package/dist/lib/solo-auto-scout.d.ts.map +1 -0
- package/dist/lib/solo-auto-scout.js +269 -0
- package/dist/lib/solo-auto-scout.js.map +1 -0
- package/dist/lib/solo-auto-state.d.ts +20 -0
- package/dist/lib/solo-auto-state.d.ts.map +1 -0
- package/dist/lib/solo-auto-state.js +859 -0
- package/dist/lib/solo-auto-state.js.map +1 -0
- package/dist/lib/solo-auto-types.d.ts +197 -0
- package/dist/lib/solo-auto-types.d.ts.map +1 -0
- package/dist/lib/solo-auto-types.js +11 -0
- package/dist/lib/solo-auto-types.js.map +1 -0
- package/dist/lib/solo-auto-utils.d.ts +23 -0
- package/dist/lib/solo-auto-utils.d.ts.map +1 -0
- package/dist/lib/solo-auto-utils.js +53 -0
- package/dist/lib/solo-auto-utils.js.map +1 -0
- package/dist/lib/solo-auto.d.ts +25 -0
- package/dist/lib/solo-auto.d.ts.map +1 -0
- package/dist/lib/solo-auto.js +345 -0
- package/dist/lib/solo-auto.js.map +1 -0
- package/dist/lib/solo-ci.d.ts +84 -0
- package/dist/lib/solo-ci.d.ts.map +1 -0
- package/dist/lib/solo-ci.js +306 -0
- package/dist/lib/solo-ci.js.map +1 -0
- package/dist/lib/solo-config.d.ts +242 -0
- package/dist/lib/solo-config.d.ts.map +1 -0
- package/dist/lib/solo-config.js +354 -0
- package/dist/lib/solo-config.js.map +1 -0
- package/dist/lib/solo-cycle-formula.d.ts +36 -0
- package/dist/lib/solo-cycle-formula.d.ts.map +1 -0
- package/dist/lib/solo-cycle-formula.js +90 -0
- package/dist/lib/solo-cycle-formula.js.map +1 -0
- package/dist/lib/solo-git.d.ts +87 -0
- package/dist/lib/solo-git.d.ts.map +1 -0
- package/dist/lib/solo-git.js +365 -0
- package/dist/lib/solo-git.js.map +1 -0
- package/dist/lib/solo-hints.d.ts +32 -0
- package/dist/lib/solo-hints.d.ts.map +1 -0
- package/dist/lib/solo-hints.js +98 -0
- package/dist/lib/solo-hints.js.map +1 -0
- package/dist/lib/solo-prompt-builder.d.ts +12 -0
- package/dist/lib/solo-prompt-builder.d.ts.map +1 -0
- package/dist/lib/solo-prompt-builder.js +53 -0
- package/dist/lib/solo-prompt-builder.js.map +1 -0
- package/dist/lib/solo-qa-retry.d.ts +43 -0
- package/dist/lib/solo-qa-retry.d.ts.map +1 -0
- package/dist/lib/solo-qa-retry.js +125 -0
- package/dist/lib/solo-qa-retry.js.map +1 -0
- package/dist/lib/solo-remote.d.ts +14 -0
- package/dist/lib/solo-remote.d.ts.map +1 -0
- package/dist/lib/solo-remote.js +48 -0
- package/dist/lib/solo-remote.js.map +1 -0
- package/dist/lib/solo-session-summary.d.ts +52 -0
- package/dist/lib/solo-session-summary.d.ts.map +1 -0
- package/dist/lib/solo-session-summary.js +188 -0
- package/dist/lib/solo-session-summary.js.map +1 -0
- package/dist/lib/solo-stdin.d.ts +33 -0
- package/dist/lib/solo-stdin.d.ts.map +1 -0
- package/dist/lib/solo-stdin.js +299 -0
- package/dist/lib/solo-stdin.js.map +1 -0
- package/dist/lib/solo-ticket-qa.d.ts +19 -0
- package/dist/lib/solo-ticket-qa.d.ts.map +1 -0
- package/dist/lib/solo-ticket-qa.js +68 -0
- package/dist/lib/solo-ticket-qa.js.map +1 -0
- package/dist/lib/solo-ticket-types.d.ts +146 -0
- package/dist/lib/solo-ticket-types.d.ts.map +1 -0
- package/dist/lib/solo-ticket-types.js +26 -0
- package/dist/lib/solo-ticket-types.js.map +1 -0
- package/dist/lib/solo-ticket.d.ts +12 -0
- package/dist/lib/solo-ticket.d.ts.map +1 -0
- package/dist/lib/solo-ticket.js +192 -0
- package/dist/lib/solo-ticket.js.map +1 -0
- package/dist/lib/solo-utils.d.ts +130 -0
- package/dist/lib/solo-utils.d.ts.map +1 -0
- package/dist/lib/solo-utils.js +277 -0
- package/dist/lib/solo-utils.js.map +1 -0
- package/dist/lib/spindle/failure-patterns.d.ts +15 -0
- package/dist/lib/spindle/failure-patterns.d.ts.map +1 -0
- package/dist/lib/spindle/failure-patterns.js +22 -0
- package/dist/lib/spindle/failure-patterns.js.map +1 -0
- package/dist/lib/spindle/format.d.ts +9 -0
- package/dist/lib/spindle/format.d.ts.map +1 -0
- package/dist/lib/spindle/format.js +37 -0
- package/dist/lib/spindle/format.js.map +1 -0
- package/dist/lib/spindle/index.d.ts +33 -0
- package/dist/lib/spindle/index.d.ts.map +1 -0
- package/dist/lib/spindle/index.js +231 -0
- package/dist/lib/spindle/index.js.map +1 -0
- package/dist/lib/spindle/oscillation.d.ts +17 -0
- package/dist/lib/spindle/oscillation.d.ts.map +1 -0
- package/dist/lib/spindle/oscillation.js +96 -0
- package/dist/lib/spindle/oscillation.js.map +1 -0
- package/dist/lib/spindle/repetition.d.ts +16 -0
- package/dist/lib/spindle/repetition.d.ts.map +1 -0
- package/dist/lib/spindle/repetition.js +52 -0
- package/dist/lib/spindle/repetition.js.map +1 -0
- package/dist/lib/spindle/similarity.d.ts +14 -0
- package/dist/lib/spindle/similarity.d.ts.map +1 -0
- package/dist/lib/spindle/similarity.js +58 -0
- package/dist/lib/spindle/similarity.js.map +1 -0
- package/dist/lib/spindle/types.d.ts +97 -0
- package/dist/lib/spindle/types.d.ts.map +1 -0
- package/dist/lib/spindle/types.js +46 -0
- package/dist/lib/spindle/types.js.map +1 -0
- package/dist/lib/spinner.d.ts +41 -0
- package/dist/lib/spinner.d.ts.map +1 -0
- package/dist/lib/spinner.js +186 -0
- package/dist/lib/spinner.js.map +1 -0
- package/dist/lib/taste-profile.d.ts +26 -0
- package/dist/lib/taste-profile.d.ts.map +1 -0
- package/dist/lib/taste-profile.js +121 -0
- package/dist/lib/taste-profile.js.map +1 -0
- package/dist/lib/ticket-steps/index.d.ts +14 -0
- package/dist/lib/ticket-steps/index.d.ts.map +1 -0
- package/dist/lib/ticket-steps/index.js +13 -0
- package/dist/lib/ticket-steps/index.js.map +1 -0
- package/dist/lib/ticket-steps/step-agent.d.ts +6 -0
- package/dist/lib/ticket-steps/step-agent.d.ts.map +1 -0
- package/dist/lib/ticket-steps/step-agent.js +122 -0
- package/dist/lib/ticket-steps/step-agent.js.map +1 -0
- package/dist/lib/ticket-steps/step-cleanup.d.ts +6 -0
- package/dist/lib/ticket-steps/step-cleanup.d.ts.map +1 -0
- package/dist/lib/ticket-steps/step-cleanup.js +11 -0
- package/dist/lib/ticket-steps/step-cleanup.js.map +1 -0
- package/dist/lib/ticket-steps/step-commit.d.ts +6 -0
- package/dist/lib/ticket-steps/step-commit.d.ts.map +1 -0
- package/dist/lib/ticket-steps/step-commit.js +31 -0
- package/dist/lib/ticket-steps/step-commit.js.map +1 -0
- package/dist/lib/ticket-steps/step-pr.d.ts +6 -0
- package/dist/lib/ticket-steps/step-pr.d.ts.map +1 -0
- package/dist/lib/ticket-steps/step-pr.js +38 -0
- package/dist/lib/ticket-steps/step-pr.js.map +1 -0
- package/dist/lib/ticket-steps/step-push.d.ts +6 -0
- package/dist/lib/ticket-steps/step-push.d.ts.map +1 -0
- package/dist/lib/ticket-steps/step-push.js +35 -0
- package/dist/lib/ticket-steps/step-push.js.map +1 -0
- package/dist/lib/ticket-steps/step-qa.d.ts +6 -0
- package/dist/lib/ticket-steps/step-qa.d.ts.map +1 -0
- package/dist/lib/ticket-steps/step-qa.js +300 -0
- package/dist/lib/ticket-steps/step-qa.js.map +1 -0
- package/dist/lib/ticket-steps/step-scope.d.ts +6 -0
- package/dist/lib/ticket-steps/step-scope.d.ts.map +1 -0
- package/dist/lib/ticket-steps/step-scope.js +121 -0
- package/dist/lib/ticket-steps/step-scope.js.map +1 -0
- package/dist/lib/ticket-steps/step-spindle.d.ts +9 -0
- package/dist/lib/ticket-steps/step-spindle.d.ts.map +1 -0
- package/dist/lib/ticket-steps/step-spindle.js +160 -0
- package/dist/lib/ticket-steps/step-spindle.js.map +1 -0
- package/dist/lib/ticket-steps/step-worktree.d.ts +6 -0
- package/dist/lib/ticket-steps/step-worktree.d.ts.map +1 -0
- package/dist/lib/ticket-steps/step-worktree.js +157 -0
- package/dist/lib/ticket-steps/step-worktree.js.map +1 -0
- package/dist/lib/ticket-steps/types.d.ts +70 -0
- package/dist/lib/ticket-steps/types.d.ts.map +1 -0
- package/dist/lib/ticket-steps/types.js +8 -0
- package/dist/lib/ticket-steps/types.js.map +1 -0
- package/dist/lib/tool-command-map.d.ts +11 -0
- package/dist/lib/tool-command-map.d.ts.map +1 -0
- package/dist/lib/tool-command-map.js +24 -0
- package/dist/lib/tool-command-map.js.map +1 -0
- package/dist/lib/trajectory-generate.d.ts +24 -0
- package/dist/lib/trajectory-generate.d.ts.map +1 -0
- package/dist/lib/trajectory-generate.js +163 -0
- package/dist/lib/trajectory-generate.js.map +1 -0
- package/dist/lib/trajectory.d.ts +20 -0
- package/dist/lib/trajectory.d.ts.map +1 -0
- package/dist/lib/trajectory.js +104 -0
- package/dist/lib/trajectory.js.map +1 -0
- package/dist/lib/trigger-config.d.ts +12 -0
- package/dist/lib/trigger-config.d.ts.map +1 -0
- package/dist/lib/trigger-config.js +37 -0
- package/dist/lib/trigger-config.js.map +1 -0
- package/dist/lib/update-check.d.ts +28 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +178 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/lib/wave-scheduling.d.ts +18 -0
- package/dist/lib/wave-scheduling.d.ts.map +1 -0
- package/dist/lib/wave-scheduling.js +29 -0
- package/dist/lib/wave-scheduling.js.map +1 -0
- package/dist/tui/app.d.ts +17 -0
- package/dist/tui/app.d.ts.map +1 -0
- package/dist/tui/app.js +139 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/index.d.ts +10 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +9 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/poller.d.ts +42 -0
- package/dist/tui/poller.d.ts.map +1 -0
- package/dist/tui/poller.js +62 -0
- package/dist/tui/poller.js.map +1 -0
- package/dist/tui/screens/auto.d.ts +85 -0
- package/dist/tui/screens/auto.d.ts.map +1 -0
- package/dist/tui/screens/auto.js +440 -0
- package/dist/tui/screens/auto.js.map +1 -0
- package/dist/tui/screens/overview.d.ts +9 -0
- package/dist/tui/screens/overview.d.ts.map +1 -0
- package/dist/tui/screens/overview.js +189 -0
- package/dist/tui/screens/overview.js.map +1 -0
- package/dist/tui/state.d.ts +93 -0
- package/dist/tui/state.d.ts.map +1 -0
- package/dist/tui/state.js +169 -0
- package/dist/tui/state.js.map +1 -0
- package/dist/tui/ticket-output-buffer.d.ts +23 -0
- package/dist/tui/ticket-output-buffer.d.ts.map +1 -0
- package/dist/tui/ticket-output-buffer.js +60 -0
- package/dist/tui/ticket-output-buffer.js.map +1 -0
- package/dist/tui/types.d.ts +18 -0
- package/dist/tui/types.d.ts.map +1 -0
- package/dist/tui/types.js +5 -0
- package/dist/tui/types.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Doctor checks for PromptWheel prerequisites
|
|
3
|
+
*
|
|
4
|
+
* Detects missing tools, auth issues, and configuration problems
|
|
5
|
+
* before users hit cryptic errors mid-workflow.
|
|
6
|
+
*/
|
|
7
|
+
import { spawnSync } from 'node:child_process';
|
|
8
|
+
import * as fs from 'node:fs';
|
|
9
|
+
import * as path from 'node:path';
|
|
10
|
+
/**
|
|
11
|
+
* Helper to create CheckResult objects consistently
|
|
12
|
+
*/
|
|
13
|
+
function createCheckResult(name, status, message, options) {
|
|
14
|
+
const result = { name, status, message };
|
|
15
|
+
if (options?.fix)
|
|
16
|
+
result.fix = options.fix;
|
|
17
|
+
if (options?.details)
|
|
18
|
+
result.details = options.details;
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Run all doctor checks
|
|
23
|
+
*/
|
|
24
|
+
export async function runDoctorChecks(options) {
|
|
25
|
+
const checks = [];
|
|
26
|
+
// 1. Git installed
|
|
27
|
+
checks.push(checkGitInstalled());
|
|
28
|
+
// 2. In a git repo
|
|
29
|
+
checks.push(checkIsGitRepo(options.repoRoot));
|
|
30
|
+
// 3. Node version
|
|
31
|
+
checks.push(checkNodeVersion());
|
|
32
|
+
// 4. Claude CLI installed
|
|
33
|
+
checks.push(checkClaudeInstalled());
|
|
34
|
+
// 5. Claude CLI authenticated
|
|
35
|
+
checks.push(await checkClaudeAuthenticated());
|
|
36
|
+
// 6. gh CLI installed (for --pr)
|
|
37
|
+
checks.push(checkGhInstalled());
|
|
38
|
+
// 7. gh CLI authenticated (for --pr)
|
|
39
|
+
checks.push(await checkGhAuthenticated());
|
|
40
|
+
// 8. .promptwheel/ writable
|
|
41
|
+
checks.push(checkPromptwheelWritable(options.repoRoot));
|
|
42
|
+
// 9. Optional: ripgrep for faster scanning
|
|
43
|
+
checks.push(checkRipgrepInstalled());
|
|
44
|
+
// 10. SQLite native module
|
|
45
|
+
checks.push(await checkSqliteModule());
|
|
46
|
+
// Determine capabilities
|
|
47
|
+
const hasGit = checks.find(c => c.name === 'git')?.status === 'pass';
|
|
48
|
+
const isRepo = checks.find(c => c.name === 'git-repo')?.status === 'pass';
|
|
49
|
+
const hasClaude = checks.find(c => c.name === 'claude')?.status === 'pass';
|
|
50
|
+
const claudeAuth = checks.find(c => c.name === 'claude-auth')?.status === 'pass';
|
|
51
|
+
const hasGh = checks.find(c => c.name === 'gh')?.status === 'pass';
|
|
52
|
+
const ghAuth = checks.find(c => c.name === 'gh-auth')?.status === 'pass';
|
|
53
|
+
const writable = checks.find(c => c.name === 'promptwheel-dir')?.status !== 'fail';
|
|
54
|
+
const hasSqlite = checks.find(c => c.name === 'sqlite')?.status === 'pass';
|
|
55
|
+
return {
|
|
56
|
+
checks,
|
|
57
|
+
canScout: hasGit && isRepo && writable && hasSqlite,
|
|
58
|
+
canRun: hasGit && isRepo && hasClaude && claudeAuth && writable && hasSqlite,
|
|
59
|
+
canPr: hasGit && isRepo && hasClaude && claudeAuth && hasGh && ghAuth && writable && hasSqlite,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Check: git installed
|
|
64
|
+
*/
|
|
65
|
+
function checkGitInstalled() {
|
|
66
|
+
try {
|
|
67
|
+
const result = spawnSync('git', ['--version'], { encoding: 'utf-8' });
|
|
68
|
+
if (result.status === 0) {
|
|
69
|
+
const version = result.stdout.trim().replace('git version ', '');
|
|
70
|
+
return createCheckResult('git', 'pass', `git found (${version})`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Fall through to fail
|
|
75
|
+
}
|
|
76
|
+
return createCheckResult('git', 'fail', 'git not found', {
|
|
77
|
+
fix: 'Install git: https://git-scm.com/downloads',
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Check: current directory is a git repo
|
|
82
|
+
*/
|
|
83
|
+
function checkIsGitRepo(repoRoot) {
|
|
84
|
+
const cwd = repoRoot ?? process.cwd();
|
|
85
|
+
try {
|
|
86
|
+
const result = spawnSync('git', ['rev-parse', '--git-dir'], {
|
|
87
|
+
cwd,
|
|
88
|
+
encoding: 'utf-8',
|
|
89
|
+
});
|
|
90
|
+
if (result.status === 0) {
|
|
91
|
+
return createCheckResult('git-repo', 'pass', 'Inside a git repository');
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Fall through to fail
|
|
96
|
+
}
|
|
97
|
+
return createCheckResult('git-repo', 'fail', 'Not a git repository', {
|
|
98
|
+
fix: 'Run `git init` or cd into an existing repo',
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Check: Node version is supported
|
|
103
|
+
*/
|
|
104
|
+
function checkNodeVersion() {
|
|
105
|
+
const version = process.version;
|
|
106
|
+
const major = parseInt(version.slice(1).split('.')[0], 10);
|
|
107
|
+
// Require Node 18+ for ESM and modern features
|
|
108
|
+
if (major >= 18) {
|
|
109
|
+
return createCheckResult('node', 'pass', `Node ${version} (supported)`);
|
|
110
|
+
}
|
|
111
|
+
if (major >= 16) {
|
|
112
|
+
return createCheckResult('node', 'warn', `Node ${version} (may work, but 18+ recommended)`, {
|
|
113
|
+
fix: 'Upgrade to Node 18+: https://nodejs.org/',
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
return createCheckResult('node', 'fail', `Node ${version} (too old)`, {
|
|
117
|
+
fix: 'Upgrade to Node 18+: https://nodejs.org/',
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Check: Claude CLI installed
|
|
122
|
+
*/
|
|
123
|
+
function checkClaudeInstalled() {
|
|
124
|
+
try {
|
|
125
|
+
const result = spawnSync('claude', ['--version'], {
|
|
126
|
+
encoding: 'utf-8',
|
|
127
|
+
timeout: 5000,
|
|
128
|
+
});
|
|
129
|
+
if (result.status === 0) {
|
|
130
|
+
const version = result.stdout.trim();
|
|
131
|
+
return createCheckResult('claude', 'pass', `Claude CLI found (${version})`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch {
|
|
135
|
+
// Fall through to fail
|
|
136
|
+
}
|
|
137
|
+
return createCheckResult('claude', 'fail', 'Claude CLI not found', {
|
|
138
|
+
fix: 'Install Claude Code: https://claude.ai/code',
|
|
139
|
+
details: 'Required for `solo run` to execute tickets',
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Check: Claude CLI authenticated
|
|
144
|
+
*/
|
|
145
|
+
async function checkClaudeAuthenticated() {
|
|
146
|
+
try {
|
|
147
|
+
// Try a simple command that requires auth
|
|
148
|
+
const result = spawnSync('claude', ['--help'], {
|
|
149
|
+
encoding: 'utf-8',
|
|
150
|
+
timeout: 10000,
|
|
151
|
+
});
|
|
152
|
+
// If claude is installed, assume it handles its own auth
|
|
153
|
+
// We can't easily test auth without making an API call
|
|
154
|
+
if (result.status === 0) {
|
|
155
|
+
return createCheckResult('claude-auth', 'pass', 'Claude CLI accessible', {
|
|
156
|
+
details: 'Auth will be checked on first run',
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Fall through
|
|
162
|
+
}
|
|
163
|
+
// If Claude isn't installed, skip this check
|
|
164
|
+
return createCheckResult('claude-auth', 'warn', 'Could not verify Claude authentication', {
|
|
165
|
+
fix: 'Run `claude` and complete authentication',
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Check: gh CLI installed
|
|
170
|
+
*/
|
|
171
|
+
function checkGhInstalled() {
|
|
172
|
+
try {
|
|
173
|
+
const result = spawnSync('gh', ['--version'], {
|
|
174
|
+
encoding: 'utf-8',
|
|
175
|
+
timeout: 5000,
|
|
176
|
+
});
|
|
177
|
+
if (result.status === 0) {
|
|
178
|
+
const firstLine = result.stdout.split('\n')[0];
|
|
179
|
+
const version = firstLine.replace('gh version ', '').split(' ')[0];
|
|
180
|
+
return createCheckResult('gh', 'pass', `GitHub CLI found (${version})`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
// Fall through
|
|
185
|
+
}
|
|
186
|
+
return createCheckResult('gh', 'warn', 'GitHub CLI not found', {
|
|
187
|
+
fix: 'Install gh: https://cli.github.com/',
|
|
188
|
+
details: 'Only needed for `solo run --pr` to create PRs',
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Check: gh CLI authenticated
|
|
193
|
+
*/
|
|
194
|
+
async function checkGhAuthenticated() {
|
|
195
|
+
try {
|
|
196
|
+
const result = spawnSync('gh', ['auth', 'status'], {
|
|
197
|
+
encoding: 'utf-8',
|
|
198
|
+
timeout: 10000,
|
|
199
|
+
});
|
|
200
|
+
if (result.status === 0) {
|
|
201
|
+
// Parse the output to get the account
|
|
202
|
+
const match = result.stdout.match(/Logged in to .* as (\S+)/);
|
|
203
|
+
const account = match ? match[1] : 'authenticated';
|
|
204
|
+
return createCheckResult('gh-auth', 'pass', `GitHub CLI authenticated (${account})`);
|
|
205
|
+
}
|
|
206
|
+
// Check stderr for more info
|
|
207
|
+
if (result.stderr?.includes('not logged in')) {
|
|
208
|
+
return createCheckResult('gh-auth', 'warn', 'GitHub CLI not authenticated', {
|
|
209
|
+
fix: 'Run `gh auth login`',
|
|
210
|
+
details: 'Only needed for `solo run --pr` to create PRs',
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// Fall through
|
|
216
|
+
}
|
|
217
|
+
return createCheckResult('gh-auth', 'warn', 'Could not verify GitHub authentication', {
|
|
218
|
+
fix: 'Run `gh auth login`',
|
|
219
|
+
details: 'Only needed for `solo run --pr` to create PRs',
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Check: .promptwheel/ directory is writable
|
|
224
|
+
*/
|
|
225
|
+
function checkPromptwheelWritable(repoRoot) {
|
|
226
|
+
const cwd = repoRoot ?? process.cwd();
|
|
227
|
+
const promptwheelDir = path.join(cwd, '.promptwheel');
|
|
228
|
+
try {
|
|
229
|
+
// Check if directory exists
|
|
230
|
+
if (fs.existsSync(promptwheelDir)) {
|
|
231
|
+
// Check if writable
|
|
232
|
+
fs.accessSync(promptwheelDir, fs.constants.W_OK);
|
|
233
|
+
return createCheckResult('promptwheel-dir', 'pass', '.promptwheel/ exists and is writable');
|
|
234
|
+
}
|
|
235
|
+
// Directory doesn't exist - check if we can create it
|
|
236
|
+
fs.accessSync(cwd, fs.constants.W_OK);
|
|
237
|
+
return createCheckResult('promptwheel-dir', 'pass', '.promptwheel/ can be created');
|
|
238
|
+
}
|
|
239
|
+
catch {
|
|
240
|
+
return createCheckResult('promptwheel-dir', 'fail', 'Cannot write to .promptwheel/', {
|
|
241
|
+
fix: 'Check directory permissions or run with appropriate access',
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Check: ripgrep installed (optional, for faster scanning)
|
|
247
|
+
*/
|
|
248
|
+
function checkRipgrepInstalled() {
|
|
249
|
+
try {
|
|
250
|
+
const result = spawnSync('rg', ['--version'], {
|
|
251
|
+
encoding: 'utf-8',
|
|
252
|
+
timeout: 5000,
|
|
253
|
+
});
|
|
254
|
+
if (result.status === 0) {
|
|
255
|
+
const version = result.stdout.split('\n')[0].replace('ripgrep ', '');
|
|
256
|
+
return createCheckResult('ripgrep', 'pass', `ripgrep found (${version})`, {
|
|
257
|
+
details: 'Enables faster code scanning',
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
catch {
|
|
262
|
+
// Fall through
|
|
263
|
+
}
|
|
264
|
+
return createCheckResult('ripgrep', 'warn', 'ripgrep not found (optional)', {
|
|
265
|
+
fix: 'Install rg: https://github.com/BurntSushi/ripgrep#installation',
|
|
266
|
+
details: 'Scanning will work but may be slower on large repos',
|
|
267
|
+
});
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Check: SQLite native module
|
|
271
|
+
*
|
|
272
|
+
* better-sqlite3 is a native module that requires either:
|
|
273
|
+
* 1. Prebuild binary for the platform (automatic via prebuild-install)
|
|
274
|
+
* 2. Node-gyp build tools (python, c++ compiler)
|
|
275
|
+
*/
|
|
276
|
+
async function checkSqliteModule() {
|
|
277
|
+
try {
|
|
278
|
+
// Try to import better-sqlite3 - this will fail if native module isn't built
|
|
279
|
+
const { default: Database } = await import('better-sqlite3');
|
|
280
|
+
// Try to create a temporary in-memory database
|
|
281
|
+
const db = new Database(':memory:');
|
|
282
|
+
db.exec('SELECT 1');
|
|
283
|
+
db.close();
|
|
284
|
+
return createCheckResult('sqlite', 'pass', 'SQLite native module loaded', {
|
|
285
|
+
details: 'better-sqlite3 working correctly',
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
catch (err) {
|
|
289
|
+
const error = err;
|
|
290
|
+
const message = error.message || String(err);
|
|
291
|
+
// Check for common native module errors
|
|
292
|
+
if (message.includes('Could not locate the bindings file') ||
|
|
293
|
+
message.includes('was compiled against a different Node.js version') ||
|
|
294
|
+
message.includes('NODE_MODULE_VERSION')) {
|
|
295
|
+
return createCheckResult('sqlite', 'fail', 'SQLite native module needs rebuild', {
|
|
296
|
+
fix: 'Run: npm rebuild better-sqlite3',
|
|
297
|
+
details: message,
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
if (message.includes('Cannot find module')) {
|
|
301
|
+
return createCheckResult('sqlite', 'fail', 'SQLite native module not installed', {
|
|
302
|
+
fix: 'Run: npm install better-sqlite3',
|
|
303
|
+
details: message,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
// Generic failure
|
|
307
|
+
return createCheckResult('sqlite', 'fail', 'SQLite native module failed to load', {
|
|
308
|
+
fix: 'Try: npm rebuild better-sqlite3. If that fails, ensure you have build tools (python, c++ compiler)',
|
|
309
|
+
details: message,
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Format doctor report for human-readable output
|
|
315
|
+
*/
|
|
316
|
+
export function formatDoctorReport(report) {
|
|
317
|
+
const lines = [];
|
|
318
|
+
// Status icons
|
|
319
|
+
const icons = {
|
|
320
|
+
pass: '✅',
|
|
321
|
+
warn: '⚠️',
|
|
322
|
+
fail: '❌',
|
|
323
|
+
};
|
|
324
|
+
lines.push('PromptWheel Doctor\n');
|
|
325
|
+
// Group checks by status
|
|
326
|
+
const failed = report.checks.filter(c => c.status === 'fail');
|
|
327
|
+
const warned = report.checks.filter(c => c.status === 'warn');
|
|
328
|
+
// Show all checks
|
|
329
|
+
for (const check of report.checks) {
|
|
330
|
+
lines.push(`${icons[check.status]} ${check.message}`);
|
|
331
|
+
if (check.fix && check.status !== 'pass') {
|
|
332
|
+
lines.push(` fix: ${check.fix}`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
lines.push('');
|
|
336
|
+
// Summary
|
|
337
|
+
lines.push('Capabilities:');
|
|
338
|
+
lines.push(` ${report.canScout ? '✅' : '❌'} solo scout — Find improvement opportunities`);
|
|
339
|
+
lines.push(` ${report.canRun ? '✅' : '❌'} solo run — Execute tickets with Claude`);
|
|
340
|
+
lines.push(` ${report.canPr ? '✅' : '❌'} solo run --pr — Create PRs on GitHub`);
|
|
341
|
+
// Action items if there are failures
|
|
342
|
+
if (failed.length > 0) {
|
|
343
|
+
lines.push('');
|
|
344
|
+
lines.push('Action required:');
|
|
345
|
+
for (const check of failed) {
|
|
346
|
+
if (check.fix) {
|
|
347
|
+
lines.push(` • ${check.fix}`);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
// Warnings that might affect workflow
|
|
352
|
+
if (warned.length > 0 && failed.length === 0) {
|
|
353
|
+
lines.push('');
|
|
354
|
+
lines.push('Optional improvements:');
|
|
355
|
+
for (const check of warned) {
|
|
356
|
+
if (check.fix) {
|
|
357
|
+
lines.push(` • ${check.fix}`);
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
return lines.join('\n');
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Format doctor report as JSON
|
|
365
|
+
*/
|
|
366
|
+
export function formatDoctorReportJson(report) {
|
|
367
|
+
return JSON.stringify({
|
|
368
|
+
checks: report.checks.map(c => ({
|
|
369
|
+
name: c.name,
|
|
370
|
+
status: c.status,
|
|
371
|
+
message: c.message,
|
|
372
|
+
fix: c.fix,
|
|
373
|
+
details: c.details,
|
|
374
|
+
})),
|
|
375
|
+
capabilities: {
|
|
376
|
+
scout: report.canScout,
|
|
377
|
+
run: report.canRun,
|
|
378
|
+
pr: report.canPr,
|
|
379
|
+
},
|
|
380
|
+
}, null, 2);
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/lib/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exclusion index — discovers what artifact patterns a project generates
|
|
3
|
+
* by scanning for indicator files (lockfiles, configs, build manifests)
|
|
4
|
+
* and writes any patterns missing from .gitignore to the worktree's
|
|
5
|
+
* .git/info/exclude so `git status` filters them natively.
|
|
6
|
+
*
|
|
7
|
+
* Detection is organic: the project's own files tell us what frameworks
|
|
8
|
+
* and languages are in use, and therefore what artifact directories will
|
|
9
|
+
* exist. The INDICATOR_MAP below is a knowledge base that drives
|
|
10
|
+
* detection — it only fires when we actually find the indicator file in
|
|
11
|
+
* the worktree, not unconditionally.
|
|
12
|
+
*
|
|
13
|
+
* As a second layer, solo-ticket.ts captures a baseline `git status`
|
|
14
|
+
* snapshot after dep install (before the agent runs). Anything present
|
|
15
|
+
* in the baseline is subtracted from the post-agent status, so even
|
|
16
|
+
* artifacts the indicator map doesn't know about are filtered out.
|
|
17
|
+
*
|
|
18
|
+
* Note: the enterprise worker path (src/worker/) uses `git diff --name-only`
|
|
19
|
+
* which only shows tracked changes and is not affected by untracked
|
|
20
|
+
* artifacts. This module is only used by the CLI solo path.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Resolve the git common directory for a worktree.
|
|
24
|
+
*
|
|
25
|
+
* Git reads `info/exclude` from the *common* dir — not the per-worktree
|
|
26
|
+
* dir. For a normal repo `.git/` IS the common dir. For a linked
|
|
27
|
+
* worktree `.git` is a file pointing to `.git/worktrees/<name>/`; the
|
|
28
|
+
* common dir is its grandparent (`.git/`).
|
|
29
|
+
*
|
|
30
|
+
* Exported for testing.
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveGitDir(worktreePath: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Build an exclusion index for a worktree by scanning the project tree
|
|
35
|
+
* for indicator files and writing any inferred artifact patterns to
|
|
36
|
+
* `.git/info/exclude`.
|
|
37
|
+
*
|
|
38
|
+
* Call this after worktree creation but before installing dependencies
|
|
39
|
+
* or running the agent. After this, `git status --porcelain` natively
|
|
40
|
+
* filters out all discovered artifact directories.
|
|
41
|
+
*
|
|
42
|
+
* Idempotent — safe to call multiple times on the same worktree
|
|
43
|
+
* (e.g. on ticket retry). Subsequent calls are no-ops.
|
|
44
|
+
*
|
|
45
|
+
* @param worktreePath - Absolute path to the worktree root
|
|
46
|
+
* @param maxDepth - How deep to scan for indicators (default 4, sufficient for monorepos)
|
|
47
|
+
* @returns List of patterns written to the exclude file (empty on no-op)
|
|
48
|
+
*/
|
|
49
|
+
export declare function buildExclusionIndex(worktreePath: string, maxDepth?: number): string[];
|
|
50
|
+
//# sourceMappingURL=exclusion-index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exclusion-index.d.ts","sourceRoot":"","sources":["../../src/lib/exclusion-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AA+JH;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAkC1D;AAID;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,SAAI,GAAG,MAAM,EAAE,CA2ChF"}
|