@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,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QA failure detection and retry-with-test-fix logic
|
|
3
|
+
*/
|
|
4
|
+
import { runQa } from '@promptwheel/core/services';
|
|
5
|
+
import { buildTicketPrompt } from './solo-prompt-builder.js';
|
|
6
|
+
import { gitExecFile } from './solo-git.js';
|
|
7
|
+
/**
|
|
8
|
+
* Check if a QA failure is a test failure (vitest/jest/pytest etc.)
|
|
9
|
+
*/
|
|
10
|
+
export function isTestFailure(failedStepName) {
|
|
11
|
+
if (!failedStepName)
|
|
12
|
+
return false;
|
|
13
|
+
const lower = failedStepName.toLowerCase();
|
|
14
|
+
return /test|vitest|jest|pytest|mocha|karma/.test(lower);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Extract test file paths from QA error output
|
|
18
|
+
*/
|
|
19
|
+
export function extractTestFilesFromQaOutput(output) {
|
|
20
|
+
const files = new Set();
|
|
21
|
+
// Match common test file path patterns
|
|
22
|
+
const patterns = [
|
|
23
|
+
// vitest/jest: "FAIL src/foo.test.ts" or "❌ src/foo.test.ts"
|
|
24
|
+
/(?:FAIL|❌|✗)\s+([^\s]+\.(?:test|spec)\.[jt]sx?)/gi,
|
|
25
|
+
// General file paths ending in .test.* or .spec.*
|
|
26
|
+
/([a-zA-Z0-9_/.\\-]+\.(?:test|spec)\.[jt]sx?)/g,
|
|
27
|
+
// Python test files
|
|
28
|
+
/([a-zA-Z0-9_/.\\-]+test_[a-zA-Z0-9_]+\.py)/g,
|
|
29
|
+
// __tests__ directory files
|
|
30
|
+
/([a-zA-Z0-9_/.\\-]+\/__tests__\/[^\s]+\.[jt]sx?)/g,
|
|
31
|
+
];
|
|
32
|
+
for (const pattern of patterns) {
|
|
33
|
+
let match;
|
|
34
|
+
while ((match = pattern.exec(output)) !== null) {
|
|
35
|
+
files.add(match[1]);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return [...files];
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Attempt to retry a QA failure by expanding scope to include test files
|
|
42
|
+
* and asking the agent to fix them.
|
|
43
|
+
*/
|
|
44
|
+
export async function runQaRetryWithTestFix(ctx) {
|
|
45
|
+
const { ticket, worktreePath, execBackend, timeoutMs, verbose, onProgress, adapter, projectId, qaConfig, qaDetails, failedStepName } = ctx;
|
|
46
|
+
if (!isTestFailure(failedStepName)) {
|
|
47
|
+
return { retried: false, success: false };
|
|
48
|
+
}
|
|
49
|
+
onProgress('QA test failure — retrying with test files in scope...');
|
|
50
|
+
// Gather error output for test file extraction
|
|
51
|
+
let qaErrorOutput = '';
|
|
52
|
+
if (qaDetails) {
|
|
53
|
+
const failedStepInfo = qaDetails.steps.find(s => s.name === failedStepName && s.status === 'failed');
|
|
54
|
+
if (failedStepInfo) {
|
|
55
|
+
qaErrorOutput = (failedStepInfo.stderrTail || '') + '\n' + (failedStepInfo.stdoutTail || '');
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const testFiles = extractTestFilesFromQaOutput(qaErrorOutput);
|
|
59
|
+
if (testFiles.length === 0) {
|
|
60
|
+
return { retried: false, success: false };
|
|
61
|
+
}
|
|
62
|
+
// Expand allowed_paths to include the test files
|
|
63
|
+
const expandedPaths = [...new Set([...ticket.allowedPaths, ...testFiles])];
|
|
64
|
+
const retryPrompt = [
|
|
65
|
+
`Your changes broke these tests. Fix the tests to match the new behavior. Do NOT revert your changes.`,
|
|
66
|
+
'',
|
|
67
|
+
'Failed test files:',
|
|
68
|
+
...testFiles.map(f => `- ${f}`),
|
|
69
|
+
'',
|
|
70
|
+
'Error output:',
|
|
71
|
+
qaErrorOutput.slice(-2000),
|
|
72
|
+
].join('\n');
|
|
73
|
+
const fullRetryPrompt = buildTicketPrompt({ ...ticket, allowedPaths: expandedPaths }, ctx.guidelinesContext, ctx.learningsContext, ctx.metadataContext) + '\n\n' + retryPrompt;
|
|
74
|
+
try {
|
|
75
|
+
const retryResult = await execBackend.run({
|
|
76
|
+
worktreePath,
|
|
77
|
+
prompt: fullRetryPrompt,
|
|
78
|
+
timeoutMs,
|
|
79
|
+
verbose,
|
|
80
|
+
onProgress: verbose ? onProgress : () => { },
|
|
81
|
+
});
|
|
82
|
+
if (retryResult.success) {
|
|
83
|
+
// Re-commit
|
|
84
|
+
// Stage only files within ticket scope (allowed_paths + expanded test files)
|
|
85
|
+
const filesToStage = [...new Set([...expandedPaths])];
|
|
86
|
+
for (const filePattern of filesToStage) {
|
|
87
|
+
try {
|
|
88
|
+
await gitExecFile('git', ['add', filePattern], { cwd: worktreePath });
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// File may not exist or may not have changes — that's fine
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
await gitExecFile('git', ['commit', '-m', `fix: update tests for ${ticket.title}`], { cwd: worktreePath });
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// No new changes to commit — that's fine
|
|
99
|
+
}
|
|
100
|
+
// Re-run QA
|
|
101
|
+
const { createExecRunner } = await import('../lib/exec.js');
|
|
102
|
+
const { createLogger } = await import('../lib/logger.js');
|
|
103
|
+
const exec = createExecRunner({
|
|
104
|
+
defaultMaxLogBytes: qaConfig.artifacts.maxLogBytes,
|
|
105
|
+
defaultTailBytes: qaConfig.artifacts.tailBytes,
|
|
106
|
+
});
|
|
107
|
+
const logger = createLogger({ quiet: true });
|
|
108
|
+
const retryQaResult = await runQa({ db: adapter, exec, logger }, { projectId, repoRoot: worktreePath, config: qaConfig });
|
|
109
|
+
if (retryQaResult.status === 'success') {
|
|
110
|
+
onProgress('QA retry succeeded after fixing tests');
|
|
111
|
+
return { retried: true, success: true, qaRunId: retryQaResult.runId };
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
return { retried: true, success: false };
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
return { retried: true, success: false };
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return { retried: true, success: false };
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=solo-qa-retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solo-qa-retry.js","sourceRoot":"","sources":["../../src/lib/solo-qa-retry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Push safety — remote URL normalization and push-time assertion.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Normalize a git remote URL to a canonical form: `github.com/org/repo`
|
|
6
|
+
* Handles SSH (`git@github.com:org/repo.git`) and HTTPS (`https://github.com/org/repo.git`).
|
|
7
|
+
*/
|
|
8
|
+
export declare function normalizeRemoteUrl(url: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Assert that the current origin matches the allowed remote recorded at init time.
|
|
11
|
+
* Throws on mismatch. If `allowedRemote` is undefined, logs a warning but proceeds (backward compat).
|
|
12
|
+
*/
|
|
13
|
+
export declare function assertPushSafe(cwd: string, allowedRemote: string | undefined): Promise<void>;
|
|
14
|
+
//# sourceMappingURL=solo-remote.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solo-remote.d.ts","sourceRoot":"","sources":["../../src/lib/solo-remote.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAsBtD;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBlG"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Push safety — remote URL normalization and push-time assertion.
|
|
3
|
+
*/
|
|
4
|
+
import { execSync } from 'node:child_process';
|
|
5
|
+
/**
|
|
6
|
+
* Normalize a git remote URL to a canonical form: `github.com/org/repo`
|
|
7
|
+
* Handles SSH (`git@github.com:org/repo.git`) and HTTPS (`https://github.com/org/repo.git`).
|
|
8
|
+
*/
|
|
9
|
+
export function normalizeRemoteUrl(url) {
|
|
10
|
+
let u = url.trim();
|
|
11
|
+
// SSH: git@github.com:org/repo.git → github.com/org/repo
|
|
12
|
+
const sshMatch = u.match(/^[\w-]+@([^:]+):(.+)$/);
|
|
13
|
+
if (sshMatch) {
|
|
14
|
+
u = `${sshMatch[1]}/${sshMatch[2]}`;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
// HTTPS: https://github.com/org/repo.git → github.com/org/repo
|
|
18
|
+
// eslint-disable-next-line security/detect-unsafe-regex
|
|
19
|
+
const httpsMatch = u.match(/^https?:\/\/([^/]+)(\/.*)?$/i);
|
|
20
|
+
if (httpsMatch) {
|
|
21
|
+
u = `${httpsMatch[1]}${httpsMatch[2] ?? ''}`;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
// Strip trailing .git
|
|
25
|
+
u = u.replace(/\.git$/, '');
|
|
26
|
+
// Strip trailing slash
|
|
27
|
+
u = u.replace(/\/+$/, '');
|
|
28
|
+
return u.toLowerCase();
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Assert that the current origin matches the allowed remote recorded at init time.
|
|
32
|
+
* Throws on mismatch. If `allowedRemote` is undefined, logs a warning but proceeds (backward compat).
|
|
33
|
+
*/
|
|
34
|
+
export async function assertPushSafe(cwd, allowedRemote) {
|
|
35
|
+
if (allowedRemote === undefined) {
|
|
36
|
+
console.warn('[push-safety] No allowedRemote configured — skipping push guard. Run "promptwheel solo init --force" to set one.');
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const currentRemote = execSync('git remote get-url origin', { cwd, encoding: 'utf-8' }).trim();
|
|
40
|
+
const normalizedCurrent = normalizeRemoteUrl(currentRemote);
|
|
41
|
+
const normalizedAllowed = normalizeRemoteUrl(allowedRemote);
|
|
42
|
+
if (normalizedCurrent !== normalizedAllowed) {
|
|
43
|
+
throw new Error(`Push blocked: origin "${currentRemote}" (normalized: ${normalizedCurrent}) does not match ` +
|
|
44
|
+
`allowed remote "${allowedRemote}" (normalized: ${normalizedAllowed}). ` +
|
|
45
|
+
'Re-run "promptwheel solo init --force" if this is intentional.');
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=solo-remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solo-remote.js","sourceRoot":"","sources":["../../src/lib/solo-remote.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAEnB,yDAAyD;IACzD,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAClD,IAAI,QAAQ,EAAE,CAAC;QACb,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,+DAA+D;QAC/D,wDAAwD;QACxD,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC3D,IAAI,UAAU,EAAE,CAAC;YACf,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,sBAAsB;IACtB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC5B,uBAAuB;IACvB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAE1B,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW,EAAE,aAAiC;IACjF,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,IAAI,CAAC,kHAAkH,CAAC,CAAC;QACjI,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,QAAQ,CAAC,2BAA2B,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC/F,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAE5D,IAAI,iBAAiB,KAAK,iBAAiB,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,yBAAyB,aAAa,kBAAkB,iBAAiB,mBAAmB;YAC5F,mBAAmB,aAAa,kBAAkB,iBAAiB,KAAK;YACxE,gEAAgE,CACjE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session finalization: summary display, convergence metrics, and run history recording.
|
|
3
|
+
*/
|
|
4
|
+
import { type SectorState } from './sectors.js';
|
|
5
|
+
import type { Formula } from './formulas.js';
|
|
6
|
+
import type { TicketOutcome } from './run-history.js';
|
|
7
|
+
export interface SessionSummaryContext {
|
|
8
|
+
repoRoot: string;
|
|
9
|
+
startTime: number;
|
|
10
|
+
cycleCount: number;
|
|
11
|
+
allPrUrls: string[];
|
|
12
|
+
totalPrsCreated: number;
|
|
13
|
+
totalFailed: number;
|
|
14
|
+
totalMergedPrs: number;
|
|
15
|
+
totalClosedPrs: number;
|
|
16
|
+
totalMilestonePrs: number;
|
|
17
|
+
milestoneMode: boolean;
|
|
18
|
+
isContinuous: boolean;
|
|
19
|
+
shutdownRequested: boolean;
|
|
20
|
+
maxPrs: number;
|
|
21
|
+
endTime: number | null | undefined;
|
|
22
|
+
totalMinutes: number | undefined;
|
|
23
|
+
sectorState: SectorState | null;
|
|
24
|
+
allLearningsCount: number;
|
|
25
|
+
allTicketOutcomes: TicketOutcome[];
|
|
26
|
+
activeFormula: Formula | null;
|
|
27
|
+
userScope: string | undefined;
|
|
28
|
+
parallelExplicit: boolean;
|
|
29
|
+
parallelOption: string | undefined;
|
|
30
|
+
effectiveMinConfidence?: number;
|
|
31
|
+
originalMinConfidence?: number;
|
|
32
|
+
completedDirectTicketCount?: number;
|
|
33
|
+
reportPath?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Display convergence summary metrics.
|
|
37
|
+
*/
|
|
38
|
+
export declare function displayConvergenceSummary(ctx: SessionSummaryContext): void;
|
|
39
|
+
/**
|
|
40
|
+
* Display wheel health summary at end of session.
|
|
41
|
+
* Uses progressive disclosure: compact by default, shows details only when relevant.
|
|
42
|
+
*/
|
|
43
|
+
export declare function displayWheelHealth(ctx: SessionSummaryContext, verbose?: boolean): void;
|
|
44
|
+
/**
|
|
45
|
+
* Record run history for the session.
|
|
46
|
+
*/
|
|
47
|
+
export declare function recordSessionHistory(ctx: SessionSummaryContext): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Display final summary output.
|
|
50
|
+
*/
|
|
51
|
+
export declare function displayFinalSummary(ctx: SessionSummaryContext): void;
|
|
52
|
+
//# sourceMappingURL=solo-session-summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solo-session-summary.d.ts","sourceRoot":"","sources":["../../src/lib/solo-session-summary.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAGjE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACnC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,aAAa,EAAE,CAAC;IACnC,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAgB1E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,qBAAqB,EAAE,OAAO,UAAQ,GAAG,IAAI,CAoEpF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BpF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAuDpE"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session finalization: summary display, convergence metrics, and run history recording.
|
|
3
|
+
*/
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { readRunState, getQualityRate } from './run-state.js';
|
|
6
|
+
import { loadQaStats } from './qa-stats.js';
|
|
7
|
+
import { computeCoverage } from './sectors.js';
|
|
8
|
+
import { computeConvergenceMetrics } from './cycle-context.js';
|
|
9
|
+
import { formatElapsed } from './solo-auto-utils.js';
|
|
10
|
+
/**
|
|
11
|
+
* Display convergence summary metrics.
|
|
12
|
+
*/
|
|
13
|
+
export function displayConvergenceSummary(ctx) {
|
|
14
|
+
const { sectorState, cycleCount, repoRoot, startTime, allPrUrls, totalMergedPrs, totalClosedPrs, allLearningsCount } = ctx;
|
|
15
|
+
if (!sectorState || cycleCount < 3)
|
|
16
|
+
return;
|
|
17
|
+
const rs = readRunState(repoRoot);
|
|
18
|
+
const sessionCtx = { elapsedMs: Date.now() - startTime, prsCreated: allPrUrls.length, prsMerged: totalMergedPrs, prsClosed: totalClosedPrs };
|
|
19
|
+
const metrics = computeConvergenceMetrics(sectorState, allLearningsCount, rs.recentCycles ?? [], sessionCtx);
|
|
20
|
+
console.log();
|
|
21
|
+
console.log(chalk.bold('Convergence Summary'));
|
|
22
|
+
console.log(chalk.gray(` Polished sectors: ${metrics.polishedSectorPct}%`));
|
|
23
|
+
console.log(chalk.gray(` Avg proposal yield: ${metrics.avgProposalYield.toFixed(1)}/scan`));
|
|
24
|
+
console.log(chalk.gray(` Learnings density: ${metrics.learningsDensity.toFixed(2)}/file`));
|
|
25
|
+
console.log(chalk.gray(` Success trend: ${metrics.successRateTrend}`));
|
|
26
|
+
if (!isNaN(metrics.mergeRate))
|
|
27
|
+
console.log(chalk.gray(` Merge rate: ${Math.round(metrics.mergeRate * 100)}%`));
|
|
28
|
+
if (metrics.velocity.prsPerHour > 0)
|
|
29
|
+
console.log(chalk.gray(` Velocity: ${metrics.velocity.prsPerHour.toFixed(1)} PRs/h`));
|
|
30
|
+
console.log(chalk.gray(` Suggested action: ${metrics.suggestedAction}`));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Display wheel health summary at end of session.
|
|
34
|
+
* Uses progressive disclosure: compact by default, shows details only when relevant.
|
|
35
|
+
*/
|
|
36
|
+
export function displayWheelHealth(ctx, verbose = false) {
|
|
37
|
+
const { repoRoot } = ctx;
|
|
38
|
+
const qualityRate = getQualityRate(repoRoot);
|
|
39
|
+
const rs = readRunState(repoRoot);
|
|
40
|
+
const qs = rs.qualitySignals;
|
|
41
|
+
const qaStats = loadQaStats(repoRoot);
|
|
42
|
+
const qualityPct = Math.round(qualityRate * 100);
|
|
43
|
+
const qualityColor = qualityRate > 0.8 ? chalk.green
|
|
44
|
+
: qualityRate >= 0.5 ? chalk.yellow
|
|
45
|
+
: chalk.red;
|
|
46
|
+
console.log();
|
|
47
|
+
console.log(chalk.bold('Session Health'));
|
|
48
|
+
// Quality rate - always show
|
|
49
|
+
if (qs && qs.totalTickets > 0) {
|
|
50
|
+
const qaStr = (qs.qaPassed + qs.qaFailed) > 0
|
|
51
|
+
? `${qs.qaPassed}/${qs.qaPassed + qs.qaFailed} QA pass`
|
|
52
|
+
: '';
|
|
53
|
+
const parts = [`${qs.firstPassSuccess}/${qs.totalTickets} first-pass`];
|
|
54
|
+
if (qaStr)
|
|
55
|
+
parts.push(qaStr);
|
|
56
|
+
console.log(qualityColor(` Quality: ${qualityPct}% (${parts.join(', ')})`));
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.log(chalk.gray(` Quality: ${qualityPct}%`));
|
|
60
|
+
}
|
|
61
|
+
// Confidence - only show if calibrated
|
|
62
|
+
const effectiveConf = ctx.effectiveMinConfidence ?? ctx.originalMinConfidence ?? 20;
|
|
63
|
+
const originalConf = ctx.originalMinConfidence ?? 20;
|
|
64
|
+
const delta = effectiveConf - originalConf;
|
|
65
|
+
if (delta !== 0 || verbose) {
|
|
66
|
+
const deltaStr = delta !== 0 ? ` (${delta > 0 ? '+' : ''}${delta} from ${originalConf})` : '';
|
|
67
|
+
console.log(chalk.gray(` Confidence: ${effectiveConf}${deltaStr}`));
|
|
68
|
+
}
|
|
69
|
+
// Baseline failing commands — no longer disabled, surfaced for organic healing
|
|
70
|
+
const baselineFailNames = Object.values(qaStats.commands)
|
|
71
|
+
.filter(c => c.recentBaselineResults.length > 0 && c.recentBaselineResults.every(r => !r))
|
|
72
|
+
.map(c => c.name);
|
|
73
|
+
if (baselineFailNames.length > 0) {
|
|
74
|
+
console.log(chalk.yellow(` Baseline failing: ${baselineFailNames.join(', ')}`));
|
|
75
|
+
}
|
|
76
|
+
// QA stats - only show problematic ones or in verbose mode
|
|
77
|
+
const cmdEntries = Object.values(qaStats.commands);
|
|
78
|
+
const problematicCmds = cmdEntries.filter(s => {
|
|
79
|
+
if (s.totalRuns === 0)
|
|
80
|
+
return false;
|
|
81
|
+
const rate = s.successes / s.totalRuns;
|
|
82
|
+
return rate < 0.8; // Only show commands with <80% success
|
|
83
|
+
});
|
|
84
|
+
if (verbose && cmdEntries.length > 0) {
|
|
85
|
+
console.log(chalk.gray(' QA commands:'));
|
|
86
|
+
for (const s of cmdEntries) {
|
|
87
|
+
const rate = s.totalRuns > 0 ? Math.round(s.successes / s.totalRuns * 100) : null;
|
|
88
|
+
const rateStr = rate !== null ? `${rate}%` : '-';
|
|
89
|
+
const avgStr = s.totalRuns > 0 && s.avgDurationMs >= 1000
|
|
90
|
+
? ` (${(s.avgDurationMs / 1000).toFixed(1)}s)`
|
|
91
|
+
: '';
|
|
92
|
+
console.log(chalk.gray(` ${s.name}: ${rateStr}${avgStr}`));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
else if (problematicCmds.length > 0) {
|
|
96
|
+
for (const s of problematicCmds) {
|
|
97
|
+
const rate = Math.round(s.successes / s.totalRuns * 100);
|
|
98
|
+
console.log(chalk.yellow(` ⚠ ${s.name}: ${rate}% success (${s.totalRuns} runs)`));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Record run history for the session.
|
|
104
|
+
*/
|
|
105
|
+
export async function recordSessionHistory(ctx) {
|
|
106
|
+
try {
|
|
107
|
+
const { appendRunHistory } = await import('./run-history.js');
|
|
108
|
+
const elapsed = Date.now() - ctx.startTime;
|
|
109
|
+
const stoppedReason = ctx.shutdownRequested ? 'user_shutdown'
|
|
110
|
+
: ctx.totalPrsCreated >= ctx.maxPrs ? 'pr_limit'
|
|
111
|
+
: (ctx.endTime && Date.now() >= ctx.endTime) ? 'time_limit'
|
|
112
|
+
: 'completed';
|
|
113
|
+
appendRunHistory({
|
|
114
|
+
timestamp: new Date().toISOString(),
|
|
115
|
+
mode: 'auto',
|
|
116
|
+
scope: ctx.userScope || 'src',
|
|
117
|
+
formula: ctx.activeFormula?.name,
|
|
118
|
+
ticketsProposed: ctx.allTicketOutcomes.length,
|
|
119
|
+
ticketsApproved: ctx.totalPrsCreated + ctx.totalFailed,
|
|
120
|
+
ticketsCompleted: ctx.totalPrsCreated,
|
|
121
|
+
ticketsFailed: ctx.totalFailed,
|
|
122
|
+
prsCreated: ctx.allPrUrls.length,
|
|
123
|
+
prsMerged: ctx.totalMergedPrs,
|
|
124
|
+
durationMs: elapsed,
|
|
125
|
+
parallel: ctx.parallelExplicit ? parseInt(ctx.parallelOption, 10) : -1,
|
|
126
|
+
stoppedReason,
|
|
127
|
+
tickets: ctx.allTicketOutcomes,
|
|
128
|
+
}, ctx.repoRoot || undefined);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// Non-fatal
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Display final summary output.
|
|
136
|
+
*/
|
|
137
|
+
export function displayFinalSummary(ctx) {
|
|
138
|
+
const elapsed = Date.now() - ctx.startTime;
|
|
139
|
+
console.log();
|
|
140
|
+
console.log(chalk.bold('━'.repeat(50)));
|
|
141
|
+
console.log(chalk.bold('Final Summary'));
|
|
142
|
+
console.log();
|
|
143
|
+
console.log(chalk.gray(` Duration: ${formatElapsed(elapsed)}`));
|
|
144
|
+
console.log(chalk.gray(` Cycles: ${ctx.cycleCount}`));
|
|
145
|
+
if (ctx.sectorState) {
|
|
146
|
+
const cov = computeCoverage(ctx.sectorState);
|
|
147
|
+
const unclStr = cov.unclassifiedSectors > 0 ? `, ${cov.unclassifiedSectors} unclassified` : '';
|
|
148
|
+
console.log(chalk.gray(` Coverage: ${cov.scannedSectors}/${cov.totalSectors} sectors (${cov.scannedFiles}/${cov.totalFiles} files, ${cov.percent}%${unclStr})`));
|
|
149
|
+
}
|
|
150
|
+
if (ctx.milestoneMode) {
|
|
151
|
+
console.log(chalk.gray(` Milestone PRs: ${ctx.totalMilestonePrs}`));
|
|
152
|
+
console.log(chalk.gray(` Total tickets merged: ${ctx.totalPrsCreated}`));
|
|
153
|
+
}
|
|
154
|
+
if (ctx.allPrUrls.length > 0) {
|
|
155
|
+
console.log(chalk.green(`\n✓ ${ctx.allPrUrls.length} PR(s) created:`));
|
|
156
|
+
for (const url of ctx.allPrUrls) {
|
|
157
|
+
console.log(chalk.cyan(` ${url}`));
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
if (ctx.totalFailed > 0) {
|
|
161
|
+
console.log(chalk.red(`\n✗ ${ctx.totalFailed} failed`));
|
|
162
|
+
}
|
|
163
|
+
if (ctx.allPrUrls.length > 0) {
|
|
164
|
+
console.log();
|
|
165
|
+
console.log(chalk.bold('Next steps:'));
|
|
166
|
+
console.log(' • Review the draft PRs on GitHub');
|
|
167
|
+
console.log(' • Mark as ready for review when satisfied');
|
|
168
|
+
console.log(' • Merge after CI passes');
|
|
169
|
+
}
|
|
170
|
+
if (ctx.isContinuous) {
|
|
171
|
+
console.log();
|
|
172
|
+
if (ctx.shutdownRequested) {
|
|
173
|
+
console.log(chalk.gray('Stopped: User requested shutdown'));
|
|
174
|
+
}
|
|
175
|
+
else if (ctx.totalPrsCreated >= ctx.maxPrs) {
|
|
176
|
+
console.log(chalk.gray(`Stopped: Reached PR limit (${ctx.maxPrs})`));
|
|
177
|
+
}
|
|
178
|
+
else if (ctx.endTime && Date.now() >= ctx.endTime) {
|
|
179
|
+
const exhaustedLabel = ctx.totalMinutes < 60
|
|
180
|
+
? `${Math.round(ctx.totalMinutes)}m`
|
|
181
|
+
: ctx.totalMinutes % 60 === 0
|
|
182
|
+
? `${ctx.totalMinutes / 60}h`
|
|
183
|
+
: `${Math.floor(ctx.totalMinutes / 60)}h ${Math.round(ctx.totalMinutes % 60)}m`;
|
|
184
|
+
console.log(chalk.gray(`Stopped: Time budget exhausted (${exhaustedLabel})`));
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=solo-session-summary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solo-session-summary.js","sourceRoot":"","sources":["../../src/lib/solo-session-summary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive Console — Claude-like input bar at the bottom.
|
|
3
|
+
*
|
|
4
|
+
* Uses ANSI escape codes to maintain a persistent input line at the
|
|
5
|
+
* bottom of the terminal while output scrolls above it.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Input bar always visible at bottom
|
|
9
|
+
* - Output scrolls above without interrupting typing
|
|
10
|
+
* - Proper line editing (backspace, arrows)
|
|
11
|
+
* - Special commands (?, s, p, q)
|
|
12
|
+
*/
|
|
13
|
+
export interface ConsoleOptions {
|
|
14
|
+
repoRoot: string;
|
|
15
|
+
onQuit?: () => void;
|
|
16
|
+
onStatus?: () => void;
|
|
17
|
+
}
|
|
18
|
+
export interface InteractiveConsole {
|
|
19
|
+
stop: () => void;
|
|
20
|
+
pause: () => void;
|
|
21
|
+
resume: () => void;
|
|
22
|
+
log: (message: string) => void;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Start the interactive console with a persistent input bar.
|
|
26
|
+
*/
|
|
27
|
+
export declare function startInteractiveConsole(opts: ConsoleOptions): InteractiveConsole;
|
|
28
|
+
/**
|
|
29
|
+
* Legacy API — starts stdin listener and returns cleanup function.
|
|
30
|
+
* @deprecated Use startInteractiveConsole instead
|
|
31
|
+
*/
|
|
32
|
+
export declare function startStdinListener(repoRoot: string): () => void;
|
|
33
|
+
//# sourceMappingURL=solo-stdin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solo-stdin.d.ts","sourceRoot":"","sources":["../../src/lib/solo-stdin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AAUD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,cAAc,GAAG,kBAAkB,CAyPhF;AA2BD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,IAAI,CAG/D"}
|