@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 @@
|
|
|
1
|
+
{"version":3,"file":"similarity.js","sourceRoot":"","sources":["../../../src/lib/spindle/similarity.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,CAAS,EAAE,CAAS;IACpD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IACvB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAEvB,oDAAoD;IACpD,MAAM,QAAQ,GAAG,CAAC,CAAS,EAAe,EAAE;QAC1C,MAAM,MAAM,GAAG,CAAC;aACb,WAAW,EAAE;aACb,KAAK,CAAC,wBAAwB,CAAC;aAC/B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7B,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE5B,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACvD,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEvD,0CAA0C;IAC1C,IAAI,gBAAgB,GAAG,CAAC,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACvB,gBAAgB,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,gBAAgB,CAAC;IACjE,OAAO,gBAAgB,GAAG,SAAS,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAS,EAAE,CAAS,EAAE,aAAqB,CAAC;IAC9E,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,iCAAiC;IACjC,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAEzE,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAC5C,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;gBAChD,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU;oBAAE,OAAO,OAAO,CAAC;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spindle Loop Detection — Types and defaults
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Configuration for Spindle loop detection
|
|
6
|
+
*/
|
|
7
|
+
export interface SpindleConfig {
|
|
8
|
+
/** Enable Spindle detection (default: true) */
|
|
9
|
+
enabled: boolean;
|
|
10
|
+
/** Similarity threshold for duplicate detection (0-1, default: 0.8) */
|
|
11
|
+
similarityThreshold: number;
|
|
12
|
+
/** Max consecutive similar outputs before abort (default: 3) */
|
|
13
|
+
maxSimilarOutputs: number;
|
|
14
|
+
/** Max iterations without file changes (default: 5) */
|
|
15
|
+
maxStallIterations: number;
|
|
16
|
+
/** Output/action ratio threshold (default: 10) - high = verbose without action */
|
|
17
|
+
verbosityThreshold: number;
|
|
18
|
+
/** Estimated token budget before warning (default: 100000) */
|
|
19
|
+
tokenBudgetWarning: number;
|
|
20
|
+
/** Estimated token budget before abort (default: 140000) */
|
|
21
|
+
tokenBudgetAbort: number;
|
|
22
|
+
/** Max times the same command signature can fail before blocking (default: 3) */
|
|
23
|
+
maxCommandFailures: number;
|
|
24
|
+
/** Max QA ping-pong cycles (A↔B alternating failures) before abort (default: 3) */
|
|
25
|
+
maxQaPingPong: number;
|
|
26
|
+
/** Max edits to the same file before warning (default: 3) */
|
|
27
|
+
maxFileEdits: number;
|
|
28
|
+
/** Max wall-clock minutes with no file changes or command successes before abort (default: 30, 0 = disabled) */
|
|
29
|
+
maxStallMinutes: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Default Spindle configuration
|
|
33
|
+
*/
|
|
34
|
+
export declare const DEFAULT_SPINDLE_CONFIG: SpindleConfig;
|
|
35
|
+
/**
|
|
36
|
+
* Tracked state for Spindle detection across iterations
|
|
37
|
+
*/
|
|
38
|
+
export interface SpindleState {
|
|
39
|
+
/** Recent agent outputs for similarity comparison */
|
|
40
|
+
outputs: string[];
|
|
41
|
+
/** Recent diffs for oscillation detection */
|
|
42
|
+
diffs: string[];
|
|
43
|
+
/** Count of iterations without meaningful file changes */
|
|
44
|
+
iterationsSinceChange: number;
|
|
45
|
+
/** Estimated total tokens consumed */
|
|
46
|
+
estimatedTokens: number;
|
|
47
|
+
/** Accumulated warnings */
|
|
48
|
+
warnings: string[];
|
|
49
|
+
/** Total characters of output (for verbosity ratio) */
|
|
50
|
+
totalOutputChars: number;
|
|
51
|
+
/** Total characters of actual changes (for verbosity ratio) */
|
|
52
|
+
totalChangeChars: number;
|
|
53
|
+
/** Rolling history of failing command signatures (hashed command+error) */
|
|
54
|
+
failingCommandSignatures: string[];
|
|
55
|
+
/** Per-file edit counts extracted from diffs */
|
|
56
|
+
fileEditCounts: Record<string, number>;
|
|
57
|
+
/** Timestamp (ms) of last meaningful progress (file change or command success) */
|
|
58
|
+
lastProgressAt: number;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create initial Spindle state
|
|
62
|
+
*/
|
|
63
|
+
export declare function createSpindleState(): SpindleState;
|
|
64
|
+
/**
|
|
65
|
+
* Result of Spindle loop check
|
|
66
|
+
*/
|
|
67
|
+
export interface SpindleResult {
|
|
68
|
+
/** Whether the agent should be aborted */
|
|
69
|
+
shouldAbort: boolean;
|
|
70
|
+
/** Whether the ticket should be blocked (needs human intervention) instead of failed */
|
|
71
|
+
shouldBlock: boolean;
|
|
72
|
+
/** Reason for abort if shouldAbort is true */
|
|
73
|
+
reason?: 'oscillation' | 'spinning' | 'stalling' | 'repetition' | 'token_budget' | 'qa_ping_pong' | 'command_failure' | 'time_stall';
|
|
74
|
+
/** Confidence in the detection (0-1) */
|
|
75
|
+
confidence: number;
|
|
76
|
+
/** Diagnostic information for artifact */
|
|
77
|
+
diagnostics: {
|
|
78
|
+
similarityScore?: number;
|
|
79
|
+
iterationsWithoutChange?: number;
|
|
80
|
+
estimatedTokens?: number;
|
|
81
|
+
repeatedPatterns?: string[];
|
|
82
|
+
verbosityRatio?: number;
|
|
83
|
+
oscillationPattern?: string;
|
|
84
|
+
pingPongPattern?: string;
|
|
85
|
+
commandSignature?: string;
|
|
86
|
+
commandFailureThreshold?: number;
|
|
87
|
+
fileEditWarnings?: string[];
|
|
88
|
+
minutesSinceProgress?: number;
|
|
89
|
+
maxStallMinutes?: number;
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Estimate token count from text
|
|
94
|
+
* Rough approximation: ~4 characters per token for English text
|
|
95
|
+
*/
|
|
96
|
+
export declare function estimateTokens(text: string): number;
|
|
97
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/spindle/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,+CAA+C;IAC/C,OAAO,EAAE,OAAO,CAAC;IAEjB,uEAAuE;IACvE,mBAAmB,EAAE,MAAM,CAAC;IAE5B,gEAAgE;IAChE,iBAAiB,EAAE,MAAM,CAAC;IAE1B,uDAAuD;IACvD,kBAAkB,EAAE,MAAM,CAAC;IAE3B,kFAAkF;IAClF,kBAAkB,EAAE,MAAM,CAAC;IAE3B,8DAA8D;IAC9D,kBAAkB,EAAE,MAAM,CAAC;IAE3B,4DAA4D;IAC5D,gBAAgB,EAAE,MAAM,CAAC;IAEzB,iFAAiF;IACjF,kBAAkB,EAAE,MAAM,CAAC;IAE3B,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;IAEtB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAC;IAErB,gHAAgH;IAChH,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,aAYpC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,6CAA6C;IAC7C,KAAK,EAAE,MAAM,EAAE,CAAC;IAEhB,0DAA0D;IAC1D,qBAAqB,EAAE,MAAM,CAAC;IAE9B,sCAAsC;IACtC,eAAe,EAAE,MAAM,CAAC;IAExB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEnB,uDAAuD;IACvD,gBAAgB,EAAE,MAAM,CAAC;IAEzB,+DAA+D;IAC/D,gBAAgB,EAAE,MAAM,CAAC;IAEzB,2EAA2E;IAC3E,wBAAwB,EAAE,MAAM,EAAE,CAAC;IAEnC,gDAAgD;IAChD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEvC,kFAAkF;IAClF,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAajD;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,WAAW,EAAE,OAAO,CAAC;IAErB,wFAAwF;IACxF,WAAW,EAAE,OAAO,CAAC;IAErB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,cAAc,GAAG,cAAc,GAAG,iBAAiB,GAAG,YAAY,CAAC;IAErI,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IAEnB,0CAA0C;IAC1C,WAAW,EAAE;QACX,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,uBAAuB,CAAC,EAAE,MAAM,CAAC;QACjC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC5B,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spindle Loop Detection — Types and defaults
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Default Spindle configuration
|
|
6
|
+
*/
|
|
7
|
+
export const DEFAULT_SPINDLE_CONFIG = {
|
|
8
|
+
enabled: true,
|
|
9
|
+
similarityThreshold: 0.8,
|
|
10
|
+
maxSimilarOutputs: 3,
|
|
11
|
+
maxStallIterations: 5,
|
|
12
|
+
verbosityThreshold: 10,
|
|
13
|
+
tokenBudgetWarning: 100000,
|
|
14
|
+
tokenBudgetAbort: 140000,
|
|
15
|
+
maxCommandFailures: 3,
|
|
16
|
+
maxQaPingPong: 3,
|
|
17
|
+
maxFileEdits: 3,
|
|
18
|
+
maxStallMinutes: 30,
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Create initial Spindle state
|
|
22
|
+
*/
|
|
23
|
+
export function createSpindleState() {
|
|
24
|
+
return {
|
|
25
|
+
outputs: [],
|
|
26
|
+
diffs: [],
|
|
27
|
+
iterationsSinceChange: 0,
|
|
28
|
+
estimatedTokens: 0,
|
|
29
|
+
warnings: [],
|
|
30
|
+
totalOutputChars: 0,
|
|
31
|
+
totalChangeChars: 0,
|
|
32
|
+
failingCommandSignatures: [],
|
|
33
|
+
fileEditCounts: {},
|
|
34
|
+
lastProgressAt: Date.now(),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Estimate token count from text
|
|
39
|
+
* Rough approximation: ~4 characters per token for English text
|
|
40
|
+
*/
|
|
41
|
+
export function estimateTokens(text) {
|
|
42
|
+
if (!text)
|
|
43
|
+
return 0;
|
|
44
|
+
return Math.ceil(text.length / 4);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/spindle/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwCH;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAkB;IACnD,OAAO,EAAE,IAAI;IACb,mBAAmB,EAAE,GAAG;IACxB,iBAAiB,EAAE,CAAC;IACpB,kBAAkB,EAAE,CAAC;IACrB,kBAAkB,EAAE,EAAE;IACtB,kBAAkB,EAAE,MAAM;IAC1B,gBAAgB,EAAE,MAAM;IACxB,kBAAkB,EAAE,CAAC;IACrB,aAAa,EAAE,CAAC;IAChB,YAAY,EAAE,CAAC;IACf,eAAe,EAAE,EAAE;CACpB,CAAC;AAqCF;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;QACT,qBAAqB,EAAE,CAAC;QACxB,eAAe,EAAE,CAAC;QAClB,QAAQ,EAAE,EAAE;QACZ,gBAAgB,EAAE,CAAC;QACnB,gBAAgB,EAAE,CAAC;QACnB,wBAAwB,EAAE,EAAE;QAC5B,cAAc,EAAE,EAAE;QAClB,cAAc,EAAE,IAAI,CAAC,GAAG,EAAE;KAC3B,CAAC;AACJ,CAAC;AAmCD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACpB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Block Spinner — zero-dependency animated spinner for the terminal
|
|
3
|
+
*
|
|
4
|
+
* Uses a sun symbol (☀) that alternates between blue and green.
|
|
5
|
+
* Shows elapsed time automatically so you always know it's alive.
|
|
6
|
+
*/
|
|
7
|
+
export type SpinnerStyle = 'block' | 'spool' | 'cube' | 'stack' | 'sun';
|
|
8
|
+
export interface BlockSpinner {
|
|
9
|
+
/** Update the message text */
|
|
10
|
+
update(message: string): void;
|
|
11
|
+
/** Stop and clear the spinner line */
|
|
12
|
+
stop(finalMessage?: string): void;
|
|
13
|
+
/** Stop and show a success message */
|
|
14
|
+
succeed(message: string): void;
|
|
15
|
+
/** Stop and show a failure message */
|
|
16
|
+
fail(message: string): void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create and start a block spinner
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Multi-line batch progress display — shows each batch on its own line
|
|
23
|
+
*/
|
|
24
|
+
export interface BatchProgressDisplay {
|
|
25
|
+
/** Update batch statuses */
|
|
26
|
+
update(statuses: Array<{
|
|
27
|
+
index: number;
|
|
28
|
+
status: 'waiting' | 'running' | 'done' | 'failed';
|
|
29
|
+
proposals?: number;
|
|
30
|
+
durationMs?: number;
|
|
31
|
+
error?: string;
|
|
32
|
+
}>, totalProposals: number): void;
|
|
33
|
+
/** Stop and clear all lines */
|
|
34
|
+
stop(finalMessage?: string): void;
|
|
35
|
+
}
|
|
36
|
+
export declare function createBatchProgress(totalBatches: number): BatchProgressDisplay;
|
|
37
|
+
/**
|
|
38
|
+
* Create and start a spinner with sun symbol cycling blue/green
|
|
39
|
+
*/
|
|
40
|
+
export declare function createSpinner(message: string, _style?: SpinnerStyle): BlockSpinner;
|
|
41
|
+
//# sourceMappingURL=spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;AAExE,MAAM,WAAW,YAAY;IAC3B,8BAA8B;IAC9B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,sCAAsC;IACtC,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,sCAAsC;IACtC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,sCAAsC;IACtC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAaD;;GAEG;AACH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,4BAA4B;IAC5B,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACrL,+BAA+B;IAC/B,IAAI,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,oBAAoB,CAkG9E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,YAAoB,GAAG,YAAY,CA+DzF"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Block Spinner — zero-dependency animated spinner for the terminal
|
|
3
|
+
*
|
|
4
|
+
* Uses a sun symbol (☀) that alternates between blue and green.
|
|
5
|
+
* Shows elapsed time automatically so you always know it's alive.
|
|
6
|
+
*/
|
|
7
|
+
import chalk from 'chalk';
|
|
8
|
+
// Sun symbol - the PromptWheel signature
|
|
9
|
+
const SUN = '☀';
|
|
10
|
+
// Color cycle: blue → green → blue → green
|
|
11
|
+
const SUN_COLORS = [
|
|
12
|
+
(s) => chalk.blue(s),
|
|
13
|
+
(s) => chalk.cyan(s),
|
|
14
|
+
(s) => chalk.green(s),
|
|
15
|
+
(s) => chalk.cyan(s),
|
|
16
|
+
];
|
|
17
|
+
function formatElapsedCompact(ms) {
|
|
18
|
+
const totalSec = Math.floor(ms / 1000);
|
|
19
|
+
if (totalSec < 60)
|
|
20
|
+
return `${totalSec}s`;
|
|
21
|
+
const min = Math.floor(totalSec / 60);
|
|
22
|
+
const sec = totalSec % 60;
|
|
23
|
+
if (min < 60)
|
|
24
|
+
return `${min}m${sec > 0 ? ` ${sec}s` : ''}`;
|
|
25
|
+
const hr = Math.floor(min / 60);
|
|
26
|
+
const remMin = min % 60;
|
|
27
|
+
return `${hr}h ${remMin}m`;
|
|
28
|
+
}
|
|
29
|
+
export function createBatchProgress(totalBatches) {
|
|
30
|
+
const isInteractive = process.stderr.isTTY;
|
|
31
|
+
let frameIndex = 0;
|
|
32
|
+
let interval = null;
|
|
33
|
+
let linesRendered = 0;
|
|
34
|
+
let currentStatuses = [];
|
|
35
|
+
let currentTotalProposals = 0;
|
|
36
|
+
const startedAt = Date.now();
|
|
37
|
+
const loggedBatches = new Set();
|
|
38
|
+
const render = () => {
|
|
39
|
+
if (!isInteractive)
|
|
40
|
+
return;
|
|
41
|
+
// Move cursor up to overwrite previous lines
|
|
42
|
+
if (linesRendered > 0) {
|
|
43
|
+
process.stderr.write(`\x1b[${linesRendered}A`);
|
|
44
|
+
}
|
|
45
|
+
// Sun with color cycling
|
|
46
|
+
const colorFn = SUN_COLORS[frameIndex % SUN_COLORS.length];
|
|
47
|
+
const frame = colorFn(SUN);
|
|
48
|
+
frameIndex++;
|
|
49
|
+
const lines = [];
|
|
50
|
+
// Header line
|
|
51
|
+
const elapsed = formatElapsedCompact(Date.now() - startedAt);
|
|
52
|
+
lines.push(` ${frame} Scouting ${totalBatches} batches ${chalk.gray(`(${currentTotalProposals} proposals, ${elapsed})`)}`);
|
|
53
|
+
// Per-batch lines
|
|
54
|
+
for (let i = 0; i < totalBatches; i++) {
|
|
55
|
+
const s = currentStatuses.find(b => b.index === i);
|
|
56
|
+
const dur = s?.durationMs ? formatElapsedCompact(s.durationMs) : (s?.status === 'running' ? formatElapsedCompact(Date.now() - startedAt) : '');
|
|
57
|
+
const durStr = dur ? chalk.gray(` (${dur})`) : '';
|
|
58
|
+
if (!s || s.status === 'waiting') {
|
|
59
|
+
lines.push(chalk.gray(` ○ Batch ${i + 1} waiting`));
|
|
60
|
+
}
|
|
61
|
+
else if (s.status === 'running') {
|
|
62
|
+
lines.push(` ${frame} Batch ${i + 1} ${chalk.cyan('analyzing...')}${durStr}`);
|
|
63
|
+
}
|
|
64
|
+
else if (s.status === 'done') {
|
|
65
|
+
const pStr = s.proposals ? `${s.proposals} proposal${s.proposals !== 1 ? 's' : ''}` : 'no proposals';
|
|
66
|
+
lines.push(` ${chalk.green(SUN)} Batch ${i + 1} ${chalk.green(pStr)}${durStr}`);
|
|
67
|
+
}
|
|
68
|
+
else if (s.status === 'failed') {
|
|
69
|
+
lines.push(` ${chalk.red(SUN)} Batch ${i + 1} ${chalk.red('failed')}${durStr}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Write all lines, clear to end of each line
|
|
73
|
+
for (const line of lines) {
|
|
74
|
+
process.stderr.write(`${line}\x1b[K\n`);
|
|
75
|
+
}
|
|
76
|
+
linesRendered = lines.length;
|
|
77
|
+
};
|
|
78
|
+
// Initial render
|
|
79
|
+
if (isInteractive) {
|
|
80
|
+
currentStatuses = Array.from({ length: totalBatches }, (_, i) => ({ index: i, status: 'waiting' }));
|
|
81
|
+
render();
|
|
82
|
+
interval = setInterval(render, 120);
|
|
83
|
+
}
|
|
84
|
+
const clear = () => {
|
|
85
|
+
if (interval) {
|
|
86
|
+
clearInterval(interval);
|
|
87
|
+
interval = null;
|
|
88
|
+
}
|
|
89
|
+
if (isInteractive && linesRendered > 0) {
|
|
90
|
+
process.stderr.write(`\x1b[${linesRendered}A`);
|
|
91
|
+
for (let i = 0; i < linesRendered; i++) {
|
|
92
|
+
process.stderr.write(`\x1b[K\n`);
|
|
93
|
+
}
|
|
94
|
+
process.stderr.write(`\x1b[${linesRendered}A`);
|
|
95
|
+
linesRendered = 0;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
return {
|
|
99
|
+
update(statuses, totalProposals) {
|
|
100
|
+
currentStatuses = statuses;
|
|
101
|
+
currentTotalProposals = totalProposals;
|
|
102
|
+
if (!isInteractive) {
|
|
103
|
+
// Non-interactive: log completed batches once
|
|
104
|
+
for (const s of statuses) {
|
|
105
|
+
if ((s.status === 'done' || s.status === 'failed') && !loggedBatches.has(s.index)) {
|
|
106
|
+
loggedBatches.add(s.index);
|
|
107
|
+
const dur = s.durationMs ? ` (${formatElapsedCompact(s.durationMs)})` : '';
|
|
108
|
+
process.stderr.write(` Batch ${s.index + 1}: ${s.status}${s.proposals ? ` — ${s.proposals} proposals` : ''}${dur}\n`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
stop(finalMessage) {
|
|
114
|
+
clear();
|
|
115
|
+
if (finalMessage) {
|
|
116
|
+
process.stderr.write(` ${finalMessage}\n`);
|
|
117
|
+
}
|
|
118
|
+
},
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Create and start a spinner with sun symbol cycling blue/green
|
|
123
|
+
*/
|
|
124
|
+
export function createSpinner(message, _style = 'sun') {
|
|
125
|
+
let frameIndex = 0;
|
|
126
|
+
let currentMessage = message;
|
|
127
|
+
let interval = null;
|
|
128
|
+
const isInteractive = process.stderr.isTTY;
|
|
129
|
+
const startedAt = Date.now();
|
|
130
|
+
const render = () => {
|
|
131
|
+
if (!isInteractive)
|
|
132
|
+
return;
|
|
133
|
+
// Sun with color cycling
|
|
134
|
+
const colorFn = SUN_COLORS[frameIndex % SUN_COLORS.length];
|
|
135
|
+
const frame = colorFn(SUN);
|
|
136
|
+
const elapsed = chalk.gray(`(${formatElapsedCompact(Date.now() - startedAt)})`);
|
|
137
|
+
const line = ` ${frame} ${currentMessage} ${elapsed}`;
|
|
138
|
+
// Use wider padding for longer messages
|
|
139
|
+
const padWidth = Math.max(100, line.length + 5);
|
|
140
|
+
process.stderr.write(`\r${line.padEnd(padWidth)}`);
|
|
141
|
+
frameIndex++;
|
|
142
|
+
};
|
|
143
|
+
// Start spinning
|
|
144
|
+
if (isInteractive) {
|
|
145
|
+
render();
|
|
146
|
+
interval = setInterval(render, 120);
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
// Non-interactive: just print the message once
|
|
150
|
+
process.stderr.write(` ${currentMessage}\n`);
|
|
151
|
+
}
|
|
152
|
+
const clear = () => {
|
|
153
|
+
if (interval) {
|
|
154
|
+
clearInterval(interval);
|
|
155
|
+
interval = null;
|
|
156
|
+
}
|
|
157
|
+
if (isInteractive) {
|
|
158
|
+
process.stderr.write('\r' + ' '.repeat(120) + '\r');
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
return {
|
|
162
|
+
update(msg) {
|
|
163
|
+
currentMessage = msg;
|
|
164
|
+
if (!isInteractive) {
|
|
165
|
+
process.stderr.write(` ${msg}\n`);
|
|
166
|
+
}
|
|
167
|
+
},
|
|
168
|
+
stop(finalMessage) {
|
|
169
|
+
clear();
|
|
170
|
+
if (finalMessage) {
|
|
171
|
+
process.stderr.write(` ${finalMessage}\n`);
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
succeed(msg) {
|
|
175
|
+
const elapsed = chalk.gray(`(${formatElapsedCompact(Date.now() - startedAt)})`);
|
|
176
|
+
clear();
|
|
177
|
+
process.stderr.write(` ${chalk.green(SUN)} ${msg} ${elapsed}\n`);
|
|
178
|
+
},
|
|
179
|
+
fail(msg) {
|
|
180
|
+
const elapsed = chalk.gray(`(${formatElapsedCompact(Date.now() - startedAt)})`);
|
|
181
|
+
clear();
|
|
182
|
+
process.stderr.write(` ${chalk.red(SUN)} ${msg} ${elapsed}\n`);
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,yCAAyC;AACzC,MAAM,GAAG,GAAG,GAAG,CAAC;AAEhB,2CAA2C;AAC3C,MAAM,UAAU,GAAG;IACjB,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7B,CAAC,CAAS,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;CAC7B,CAAC;AAgBF,SAAS,oBAAoB,CAAC,EAAU;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IACvC,IAAI,QAAQ,GAAG,EAAE;QAAE,OAAO,GAAG,QAAQ,GAAG,CAAC;IACzC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,QAAQ,GAAG,EAAE,CAAC;IAC1B,IAAI,GAAG,GAAG,EAAE;QAAE,OAAO,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC;IACxB,OAAO,GAAG,EAAE,KAAK,MAAM,GAAG,CAAC;AAC7B,CAAC;AAeD,MAAM,UAAU,mBAAmB,CAAC,YAAoB;IACtD,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3C,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,QAAQ,GAA0C,IAAI,CAAC;IAC3D,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,eAAe,GAAsG,EAAE,CAAC;IAC5H,IAAI,qBAAqB,GAAG,CAAC,CAAC;IAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;IAExC,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,IAAI,CAAC,aAAa;YAAE,OAAO;QAE3B,6CAA6C;QAC7C,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,aAAa,GAAG,CAAC,CAAC;QACjD,CAAC;QAED,yBAAyB;QACzB,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,UAAU,EAAE,CAAC;QAEb,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,cAAc;QACd,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,aAAa,YAAY,YAAY,KAAK,CAAC,IAAI,CAAC,IAAI,qBAAqB,eAAe,OAAO,GAAG,CAAC,EAAE,CAAC,CAAC;QAE5H,kBAAkB;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;YACnD,MAAM,GAAG,GAAG,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC/I,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAElD,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBACjC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;YAC1D,CAAC;iBAAM,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAClC,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,UAAU,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;YACpF,CAAC;iBAAM,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;gBACrG,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC;iBAAM,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBACjC,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;QAED,6CAA6C;QAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC;QAC1C,CAAC;QACD,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC;IAC/B,CAAC,CAAC;IAEF,iBAAiB;IACjB,IAAI,aAAa,EAAE,CAAC;QAClB,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QACpG,MAAM,EAAE,CAAC;QACT,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,QAAQ,EAAE,CAAC;YACb,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,IAAI,aAAa,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,aAAa,GAAG,CAAC,CAAC;YAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC,EAAE,EAAE,CAAC;gBACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACnC,CAAC;YACD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,aAAa,GAAG,CAAC,CAAC;YAC/C,aAAa,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,MAAM,CAAC,QAAQ,EAAE,cAAc;YAC7B,eAAe,GAAG,QAAQ,CAAC;YAC3B,qBAAqB,GAAG,cAAc,CAAC;YACvC,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,8CAA8C;gBAC9C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;oBACzB,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;wBAClF,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;wBAC3B,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,oBAAoB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC3E,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,CAAC;oBACzH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,YAAqB;YACxB,KAAK,EAAE,CAAC;YACR,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe,EAAE,SAAuB,KAAK;IACzE,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,cAAc,GAAG,OAAO,CAAC;IAC7B,IAAI,QAAQ,GAA0C,IAAI,CAAC;IAC3D,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,IAAI,CAAC,aAAa;YAAE,OAAO;QAC3B,yBAAyB;QACzB,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;QAChF,MAAM,IAAI,GAAG,KAAK,KAAK,IAAI,cAAc,IAAI,OAAO,EAAE,CAAC;QACvD,wCAAwC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnD,UAAU,EAAE,CAAC;IACf,CAAC,CAAC;IAEF,iBAAiB;IACjB,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,EAAE,CAAC;QACT,QAAQ,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtC,CAAC;SAAM,CAAC;QACN,+CAA+C;QAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,cAAc,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,IAAI,QAAQ,EAAE,CAAC;YACb,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC;IAEF,OAAO;QACL,MAAM,CAAC,GAAW;YAChB,cAAc,GAAG,GAAG,CAAC;YACrB,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,YAAqB;YACxB,KAAK,EAAE,CAAC;YACR,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAW;YACjB,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAChF,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,OAAO,IAAI,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,GAAW;YACd,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAChF,KAAK,EAAE,CAAC;YACR,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,OAAO,IAAI,CAAC,CAAC;QAClE,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Taste Profile — learns what the codebase responds to.
|
|
3
|
+
*
|
|
4
|
+
* Persisted in `.promptwheel/taste-profile.json`, rebuilt every 10 cycles.
|
|
5
|
+
*/
|
|
6
|
+
import type { SectorState } from './sectors.js';
|
|
7
|
+
import type { Learning } from './learnings.js';
|
|
8
|
+
import type { FormulaStats } from './run-state.js';
|
|
9
|
+
export interface TasteProfile {
|
|
10
|
+
preferredCategories: string[];
|
|
11
|
+
avoidCategories: string[];
|
|
12
|
+
preferredComplexity: 'trivial' | 'simple' | 'moderate';
|
|
13
|
+
styleNotes: string[];
|
|
14
|
+
updatedAt: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Build a taste profile from sector data, learnings, and formula stats.
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildTasteProfile(sectorState: SectorState, learnings: Learning[], _formulaStats: Record<string, FormulaStats>): TasteProfile;
|
|
20
|
+
export declare function loadTasteProfile(projectRoot: string): TasteProfile | null;
|
|
21
|
+
export declare function saveTasteProfile(projectRoot: string, profile: TasteProfile): void;
|
|
22
|
+
/**
|
|
23
|
+
* Format the taste profile as an XML block for scout prompt injection.
|
|
24
|
+
*/
|
|
25
|
+
export declare function formatTasteForPrompt(profile: TasteProfile): string;
|
|
26
|
+
//# sourceMappingURL=taste-profile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taste-profile.d.ts","sourceRoot":"","sources":["../../src/lib/taste-profile.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAMnD,MAAM,WAAW,YAAY;IAC3B,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,mBAAmB,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;IACvD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;CACnB;AAYD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,QAAQ,EAAE,EACrB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAC1C,YAAY,CAwDd;AAMD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAQzE;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,CAKjF;AAMD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAiBlE"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Taste Profile — learns what the codebase responds to.
|
|
3
|
+
*
|
|
4
|
+
* Persisted in `.promptwheel/taste-profile.json`, rebuilt every 10 cycles.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'node:fs';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
const TASTE_FILE = 'taste-profile.json';
|
|
9
|
+
function tastePath(projectRoot) {
|
|
10
|
+
return path.join(projectRoot, '.promptwheel', TASTE_FILE);
|
|
11
|
+
}
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
// Build
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
/**
|
|
16
|
+
* Build a taste profile from sector data, learnings, and formula stats.
|
|
17
|
+
*/
|
|
18
|
+
export function buildTasteProfile(sectorState, learnings, _formulaStats) {
|
|
19
|
+
// Aggregate category success/failure across all sectors
|
|
20
|
+
const catTotals = {};
|
|
21
|
+
for (const s of sectorState.sectors) {
|
|
22
|
+
if (!s.categoryStats)
|
|
23
|
+
continue;
|
|
24
|
+
for (const [cat, stats] of Object.entries(s.categoryStats)) {
|
|
25
|
+
const t = catTotals[cat] ??= { success: 0, failure: 0 };
|
|
26
|
+
t.success += stats.success;
|
|
27
|
+
t.failure += stats.failure;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const preferred = [];
|
|
31
|
+
const avoid = [];
|
|
32
|
+
for (const [cat, totals] of Object.entries(catTotals)) {
|
|
33
|
+
const total = totals.success + totals.failure;
|
|
34
|
+
if (total < 3)
|
|
35
|
+
continue;
|
|
36
|
+
const rate = totals.success / total;
|
|
37
|
+
// Boost categories with strong success volume (not just rate)
|
|
38
|
+
const volumeBoost = total >= 8 && rate > 0.5 ? 0.1 : 0;
|
|
39
|
+
if (rate + volumeBoost > 0.6)
|
|
40
|
+
preferred.push(cat);
|
|
41
|
+
else if (rate < 0.3)
|
|
42
|
+
avoid.push(cat);
|
|
43
|
+
}
|
|
44
|
+
// Determine preferred complexity from successful tickets
|
|
45
|
+
const complexityCounts = { trivial: 0, simple: 0, moderate: 0 };
|
|
46
|
+
// Use learnings from ticket_success to infer complexity preference
|
|
47
|
+
const successLearnings = learnings.filter(l => l.source.type === 'ticket_success');
|
|
48
|
+
for (const l of successLearnings) {
|
|
49
|
+
// Simple heuristic: short titles tend to be trivial/simple
|
|
50
|
+
if (l.text.length < 40)
|
|
51
|
+
complexityCounts['trivial']++;
|
|
52
|
+
else if (l.text.length < 80)
|
|
53
|
+
complexityCounts['simple']++;
|
|
54
|
+
else
|
|
55
|
+
complexityCounts['moderate']++;
|
|
56
|
+
}
|
|
57
|
+
const preferredComplexity = (complexityCounts['simple'] >= complexityCounts['trivial'] &&
|
|
58
|
+
complexityCounts['simple'] >= complexityCounts['moderate']) ? 'simple'
|
|
59
|
+
: (complexityCounts['trivial'] >= complexityCounts['moderate'])
|
|
60
|
+
? 'trivial'
|
|
61
|
+
: 'moderate';
|
|
62
|
+
// Extract style notes from reviewer feedback learnings
|
|
63
|
+
const styleNotes = learnings
|
|
64
|
+
.filter(l => l.source.type === 'reviewer_feedback' && l.weight > 20)
|
|
65
|
+
.sort((a, b) => b.weight - a.weight)
|
|
66
|
+
.slice(0, 5)
|
|
67
|
+
.map(l => l.text);
|
|
68
|
+
return {
|
|
69
|
+
preferredCategories: preferred,
|
|
70
|
+
avoidCategories: avoid,
|
|
71
|
+
preferredComplexity,
|
|
72
|
+
styleNotes,
|
|
73
|
+
updatedAt: Date.now(),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
// Persistence
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
export function loadTasteProfile(projectRoot) {
|
|
80
|
+
const fp = tastePath(projectRoot);
|
|
81
|
+
if (!fs.existsSync(fp))
|
|
82
|
+
return null;
|
|
83
|
+
try {
|
|
84
|
+
return JSON.parse(fs.readFileSync(fp, 'utf8'));
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
export function saveTasteProfile(projectRoot, profile) {
|
|
91
|
+
const fp = tastePath(projectRoot);
|
|
92
|
+
const dir = path.dirname(fp);
|
|
93
|
+
if (!fs.existsSync(dir))
|
|
94
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
95
|
+
fs.writeFileSync(fp, JSON.stringify(profile, null, 2) + '\n', 'utf8');
|
|
96
|
+
}
|
|
97
|
+
// ---------------------------------------------------------------------------
|
|
98
|
+
// Prompt formatting
|
|
99
|
+
// ---------------------------------------------------------------------------
|
|
100
|
+
/**
|
|
101
|
+
* Format the taste profile as an XML block for scout prompt injection.
|
|
102
|
+
*/
|
|
103
|
+
export function formatTasteForPrompt(profile) {
|
|
104
|
+
const lines = ['<project-taste>'];
|
|
105
|
+
if (profile.preferredCategories.length > 0) {
|
|
106
|
+
lines.push(`This project responds well to: ${profile.preferredCategories.join(', ')}.`);
|
|
107
|
+
}
|
|
108
|
+
if (profile.avoidCategories.length > 0) {
|
|
109
|
+
lines.push(`Avoid: ${profile.avoidCategories.join(', ')}.`);
|
|
110
|
+
}
|
|
111
|
+
lines.push(`Preferred complexity: ${profile.preferredComplexity}.`);
|
|
112
|
+
if (profile.styleNotes.length > 0) {
|
|
113
|
+
lines.push('Style notes from reviewers:');
|
|
114
|
+
for (const note of profile.styleNotes) {
|
|
115
|
+
lines.push(`- ${note}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
lines.push('</project-taste>');
|
|
119
|
+
return lines.join('\n');
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=taste-profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taste-profile.js","sourceRoot":"","sources":["../../src/lib/taste-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ticket execution pipeline — re-exports step functions.
|
|
3
|
+
*/
|
|
4
|
+
export { run as stepWorktree } from './step-worktree.js';
|
|
5
|
+
export { run as stepAgent } from './step-agent.js';
|
|
6
|
+
export { run as stepSpindle } from './step-spindle.js';
|
|
7
|
+
export { run as stepScope } from './step-scope.js';
|
|
8
|
+
export { run as stepCommit } from './step-commit.js';
|
|
9
|
+
export { run as stepPush } from './step-push.js';
|
|
10
|
+
export { run as stepQa } from './step-qa.js';
|
|
11
|
+
export { run as stepPr } from './step-pr.js';
|
|
12
|
+
export { run as stepCleanup } from './step-cleanup.js';
|
|
13
|
+
export type { TicketContext, StepResult } from './types.js';
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/ticket-steps/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,GAAG,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,GAAG,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,GAAG,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ticket execution pipeline — re-exports step functions.
|
|
3
|
+
*/
|
|
4
|
+
export { run as stepWorktree } from './step-worktree.js';
|
|
5
|
+
export { run as stepAgent } from './step-agent.js';
|
|
6
|
+
export { run as stepSpindle } from './step-spindle.js';
|
|
7
|
+
export { run as stepScope } from './step-scope.js';
|
|
8
|
+
export { run as stepCommit } from './step-commit.js';
|
|
9
|
+
export { run as stepPush } from './step-push.js';
|
|
10
|
+
export { run as stepQa } from './step-qa.js';
|
|
11
|
+
export { run as stepPr } from './step-pr.js';
|
|
12
|
+
export { run as stepCleanup } from './step-cleanup.js';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/ticket-steps/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,IAAI,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,GAAG,IAAI,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,GAAG,IAAI,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,GAAG,IAAI,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,GAAG,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,GAAG,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,GAAG,IAAI,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"step-agent.d.ts","sourceRoot":"","sources":["../../../src/lib/ticket-steps/step-agent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE5D,wBAAsB,GAAG,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAqIjE"}
|