@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":"tool-command-map.d.ts","sourceRoot":"","sources":["../../src/lib/tool-command-map.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mCAAmC;AACnC,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CASlD,CAAC;AAEF,yCAAyC;AACzC,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIxD,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Static maps from detected tool names → runnable CLI commands.
|
|
3
|
+
*
|
|
4
|
+
* Used by detectQaCommands() to generate QA commands for non-Node projects
|
|
5
|
+
* based on project metadata detection.
|
|
6
|
+
*/
|
|
7
|
+
/** Linter name → command to run */
|
|
8
|
+
export const LINTER_COMMANDS = {
|
|
9
|
+
eslint: 'npx eslint .',
|
|
10
|
+
biome: 'npx biome check .',
|
|
11
|
+
ruff: 'ruff check .',
|
|
12
|
+
flake8: 'flake8 .',
|
|
13
|
+
clippy: 'cargo clippy -- -D warnings',
|
|
14
|
+
'golangci-lint': 'golangci-lint run',
|
|
15
|
+
rubocop: 'bundle exec rubocop',
|
|
16
|
+
credo: 'mix credo --strict',
|
|
17
|
+
};
|
|
18
|
+
/** Type checker name → command to run */
|
|
19
|
+
export const TYPE_CHECKER_COMMANDS = {
|
|
20
|
+
tsc: 'npx tsc --noEmit',
|
|
21
|
+
mypy: 'mypy .',
|
|
22
|
+
pyright: 'pyright',
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=tool-command-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-command-map.js","sourceRoot":"","sources":["../../src/lib/tool-command-map.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mCAAmC;AACnC,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,MAAM,EAAE,cAAc;IACtB,KAAK,EAAE,mBAAmB;IAC1B,IAAI,EAAE,cAAc;IACpB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,6BAA6B;IACrC,eAAe,EAAE,mBAAmB;IACpC,OAAO,EAAE,qBAAqB;IAC9B,KAAK,EAAE,oBAAoB;CAC5B,CAAC;AAEF,yCAAyC;AACzC,MAAM,CAAC,MAAM,qBAAqB,GAA2B;IAC3D,GAAG,EAAE,kBAAkB;IACvB,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,SAAS;CACnB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trajectory auto-generation — uses an LLM to decompose a high-level goal
|
|
3
|
+
* into an ordered, multi-step trajectory YAML.
|
|
4
|
+
*/
|
|
5
|
+
import { type Trajectory } from '@promptwheel/core/trajectory/shared';
|
|
6
|
+
export interface GenerateOptions {
|
|
7
|
+
goal: string;
|
|
8
|
+
repoRoot: string;
|
|
9
|
+
model?: string;
|
|
10
|
+
timeoutMs?: number;
|
|
11
|
+
}
|
|
12
|
+
export interface GenerateResult {
|
|
13
|
+
trajectory: Trajectory;
|
|
14
|
+
yaml: string;
|
|
15
|
+
filePath: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function generateTrajectory(opts: GenerateOptions): Promise<GenerateResult>;
|
|
18
|
+
export declare function validateAndBuild(raw: {
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
steps: unknown[];
|
|
22
|
+
}): Trajectory;
|
|
23
|
+
export declare function slugify(text: string): string;
|
|
24
|
+
//# sourceMappingURL=trajectory-generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trajectory-generate.d.ts","sourceRoot":"","sources":["../../src/lib/trajectory-generate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAGL,KAAK,UAAU,EAEhB,MAAM,qCAAqC,CAAC;AAM7C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAkDvF;AAiFD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,EAAE,CAAA;CAAE,GAAG,UAAU,CAuCzG;AAMD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM5C"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trajectory auto-generation — uses an LLM to decompose a high-level goal
|
|
3
|
+
* into an ordered, multi-step trajectory YAML.
|
|
4
|
+
*/
|
|
5
|
+
import * as fs from 'node:fs';
|
|
6
|
+
import * as path from 'node:path';
|
|
7
|
+
import { runClaude, parseClaudeOutput } from '@promptwheel/core/scout';
|
|
8
|
+
import { buildCodebaseIndex, formatIndexForPrompt } from './codebase-index.js';
|
|
9
|
+
import { detectProjectMetadata, formatMetadataForPrompt } from './project-metadata/index.js';
|
|
10
|
+
import { serializeTrajectoryToYaml, parseTrajectoryYaml, } from '@promptwheel/core/trajectory/shared';
|
|
11
|
+
export async function generateTrajectory(opts) {
|
|
12
|
+
// 1. Build codebase context
|
|
13
|
+
const excludeDirs = ['node_modules', 'dist', 'build', '.git', '.promptwheel', 'coverage', '__pycache__'];
|
|
14
|
+
const codebaseIndex = buildCodebaseIndex(opts.repoRoot, excludeDirs, true);
|
|
15
|
+
const projectMeta = detectProjectMetadata(opts.repoRoot);
|
|
16
|
+
const indexBlock = formatIndexForPrompt(codebaseIndex, 0);
|
|
17
|
+
const metaBlock = formatMetadataForPrompt(projectMeta);
|
|
18
|
+
// 2. Build prompt
|
|
19
|
+
const prompt = buildGeneratePrompt(opts.goal, indexBlock, metaBlock);
|
|
20
|
+
// 3. Call LLM
|
|
21
|
+
const result = await runClaude({
|
|
22
|
+
prompt,
|
|
23
|
+
cwd: opts.repoRoot,
|
|
24
|
+
timeoutMs: opts.timeoutMs ?? 120_000,
|
|
25
|
+
model: opts.model ?? 'sonnet',
|
|
26
|
+
});
|
|
27
|
+
if (!result.success) {
|
|
28
|
+
throw new Error(`LLM call failed: ${result.error}`);
|
|
29
|
+
}
|
|
30
|
+
// 4. Parse JSON response
|
|
31
|
+
const parsed = parseClaudeOutput(result.output);
|
|
32
|
+
if (!parsed || !parsed.name || !parsed.steps?.length) {
|
|
33
|
+
throw new Error('Failed to parse trajectory from LLM output');
|
|
34
|
+
}
|
|
35
|
+
// 5. Validate and build Trajectory
|
|
36
|
+
const trajectory = validateAndBuild(parsed);
|
|
37
|
+
// 6. Serialize to YAML
|
|
38
|
+
const yaml = serializeTrajectoryToYaml(trajectory);
|
|
39
|
+
// 7. Verify round-trip
|
|
40
|
+
const roundTripped = parseTrajectoryYaml(yaml);
|
|
41
|
+
if (roundTripped.steps.length !== trajectory.steps.length) {
|
|
42
|
+
throw new Error('YAML round-trip validation failed');
|
|
43
|
+
}
|
|
44
|
+
// 8. Write to disk
|
|
45
|
+
const slug = slugify(trajectory.name);
|
|
46
|
+
const dir = path.join(opts.repoRoot, '.promptwheel', 'trajectories');
|
|
47
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
48
|
+
const filePath = path.join(dir, `${slug}.yaml`);
|
|
49
|
+
fs.writeFileSync(filePath, yaml, 'utf-8');
|
|
50
|
+
return { trajectory, yaml, filePath };
|
|
51
|
+
}
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
// Prompt
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
function buildGeneratePrompt(goal, indexBlock, metaBlock) {
|
|
56
|
+
return `You are a principal engineer planning a multi-step implementation trajectory.
|
|
57
|
+
|
|
58
|
+
Given a high-level goal, decompose it into ordered steps that can each be completed in 1-3 scout cycles by an AI coding agent.
|
|
59
|
+
|
|
60
|
+
## Goal
|
|
61
|
+
|
|
62
|
+
${goal}
|
|
63
|
+
|
|
64
|
+
## Codebase Context
|
|
65
|
+
|
|
66
|
+
${metaBlock}
|
|
67
|
+
|
|
68
|
+
${indexBlock}
|
|
69
|
+
|
|
70
|
+
## Requirements
|
|
71
|
+
|
|
72
|
+
1. Each step should be:
|
|
73
|
+
- Self-contained and completable independently (after its dependencies)
|
|
74
|
+
- Scoped to specific files/directories (use glob patterns)
|
|
75
|
+
- Have clear acceptance criteria that an AI can verify
|
|
76
|
+
- Have at least one verification command that exits 0 on success
|
|
77
|
+
|
|
78
|
+
2. Steps should be ordered logically:
|
|
79
|
+
- Infrastructure/setup first
|
|
80
|
+
- Core implementation next
|
|
81
|
+
- Integration and testing last
|
|
82
|
+
- Use depends_on to express ordering constraints
|
|
83
|
+
|
|
84
|
+
3. Step IDs should be short kebab-case identifiers (e.g., "install-deps", "add-config", "impl-core")
|
|
85
|
+
|
|
86
|
+
4. Scope globs should be specific enough to guide the scout but not so narrow they miss related files. Use patterns like "src/auth/**" or "packages/core/src/*.ts".
|
|
87
|
+
|
|
88
|
+
5. Categories should be from: security, fix, perf, refactor, test, types, cleanup, docs
|
|
89
|
+
|
|
90
|
+
6. Keep it to 3-8 steps. Fewer is better if the goal is simple.
|
|
91
|
+
|
|
92
|
+
## Output Format
|
|
93
|
+
|
|
94
|
+
Respond with ONLY a JSON object (no markdown, no explanation):
|
|
95
|
+
|
|
96
|
+
{
|
|
97
|
+
"name": "kebab-case-trajectory-name",
|
|
98
|
+
"description": "One-line description of the trajectory",
|
|
99
|
+
"steps": [
|
|
100
|
+
{
|
|
101
|
+
"id": "step-id",
|
|
102
|
+
"title": "Short imperative title",
|
|
103
|
+
"description": "What this step accomplishes and how",
|
|
104
|
+
"scope": "glob/pattern/**",
|
|
105
|
+
"categories": ["refactor"],
|
|
106
|
+
"acceptance_criteria": ["Criterion that can be checked"],
|
|
107
|
+
"verification_commands": ["command that exits 0 on success"],
|
|
108
|
+
"depends_on": []
|
|
109
|
+
}
|
|
110
|
+
]
|
|
111
|
+
}`;
|
|
112
|
+
}
|
|
113
|
+
export function validateAndBuild(raw) {
|
|
114
|
+
const steps = raw.steps.map((s) => ({
|
|
115
|
+
id: String(s.id || '').replace(/[^a-z0-9-]/gi, '-').toLowerCase(),
|
|
116
|
+
title: String(s.title || ''),
|
|
117
|
+
description: String(s.description || ''),
|
|
118
|
+
scope: s.scope ? String(s.scope) : undefined,
|
|
119
|
+
categories: Array.isArray(s.categories) ? s.categories.map(String) : undefined,
|
|
120
|
+
acceptance_criteria: Array.isArray(s.acceptance_criteria) ? s.acceptance_criteria.map(String) : [],
|
|
121
|
+
verification_commands: Array.isArray(s.verification_commands) ? s.verification_commands.map(String) : [],
|
|
122
|
+
depends_on: Array.isArray(s.depends_on) ? s.depends_on.map(String) : [],
|
|
123
|
+
measure: s.measure?.cmd !== undefined && s.measure?.target !== undefined && s.measure?.direction
|
|
124
|
+
? {
|
|
125
|
+
cmd: String(s.measure.cmd),
|
|
126
|
+
target: Number(s.measure.target),
|
|
127
|
+
direction: s.measure.direction === 'down' ? 'down' : 'up',
|
|
128
|
+
}
|
|
129
|
+
: undefined,
|
|
130
|
+
}));
|
|
131
|
+
// Validate: no duplicate IDs
|
|
132
|
+
const ids = new Set();
|
|
133
|
+
for (const step of steps) {
|
|
134
|
+
if (!step.id)
|
|
135
|
+
throw new Error('Step missing ID');
|
|
136
|
+
if (ids.has(step.id))
|
|
137
|
+
throw new Error(`Duplicate step ID: ${step.id}`);
|
|
138
|
+
ids.add(step.id);
|
|
139
|
+
}
|
|
140
|
+
// Validate: depends_on references exist
|
|
141
|
+
for (const step of steps) {
|
|
142
|
+
for (const dep of step.depends_on) {
|
|
143
|
+
if (!ids.has(dep))
|
|
144
|
+
throw new Error(`Step "${step.id}" depends on unknown step "${dep}"`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
name: String(raw.name || ''),
|
|
149
|
+
description: String(raw.description || ''),
|
|
150
|
+
steps,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// ---------------------------------------------------------------------------
|
|
154
|
+
// Helpers
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
export function slugify(text) {
|
|
157
|
+
return text
|
|
158
|
+
.toLowerCase()
|
|
159
|
+
.replace(/[^a-z0-9]+/g, '-')
|
|
160
|
+
.replace(/^-+|-+$/g, '')
|
|
161
|
+
.slice(0, 60);
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=trajectory-generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trajectory-generate.js","sourceRoot":"","sources":["../../src/lib/trajectory-generate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAC7F,OAAO,EACL,yBAAyB,EACzB,mBAAmB,GAGpB,MAAM,qCAAqC,CAAC;AAmB7C,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAqB;IAC5D,4BAA4B;IAC5B,MAAM,WAAW,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;IACzG,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEzD,MAAM,UAAU,GAAG,oBAAoB,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC1D,MAAM,SAAS,GAAG,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAEvD,kBAAkB;IAClB,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAErE,cAAc;IACd,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;QAC7B,MAAM;QACN,GAAG,EAAE,IAAI,CAAC,QAAQ;QAClB,SAAS,EAAE,IAAI,CAAC,SAAS,IAAI,OAAO;QACpC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ;KAC9B,CAAC,CAAC;IAEH,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,oBAAoB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,yBAAyB;IACzB,MAAM,MAAM,GAAG,iBAAiB,CAA0D,MAAM,CAAC,MAAM,CAAC,CAAC;IACzG,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAChE,CAAC;IAED,mCAAmC;IACnC,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAE5C,uBAAuB;IACvB,MAAM,IAAI,GAAG,yBAAyB,CAAC,UAAU,CAAC,CAAC;IAEnD,uBAAuB;IACvB,MAAM,YAAY,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IAC/C,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IAED,mBAAmB;IACnB,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;IACrE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,CAAC;IAChD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAE1C,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACxC,CAAC;AAED,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,SAAS,mBAAmB,CAAC,IAAY,EAAE,UAAkB,EAAE,SAAiB;IAC9E,OAAO;;;;;;EAMP,IAAI;;;;EAIJ,SAAS;;EAET,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CV,CAAC;AACH,CAAC;AAkBD,MAAM,UAAU,gBAAgB,CAAC,GAA4D;IAC3F,MAAM,KAAK,GAAsB,GAAG,CAAC,KAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE;QACjE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;QACxC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5C,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QAC9E,mBAAmB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QAClG,qBAAqB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QACxG,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;QACvE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,SAAS;YAC9F,CAAC,CAAC;gBACE,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;gBAC1B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;gBAChC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAe,CAAC,CAAC,CAAC,IAAa;aAC5E;YACH,CAAC,CAAC,SAAS;KACd,CAAC,CAAC,CAAC;IAEJ,6BAA6B;IAC7B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACjD,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACvE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,wCAAwC;IACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,EAAE,8BAA8B,GAAG,GAAG,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;QAC1C,KAAK;KACN,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,IAAI;SACR,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trajectory I/O — load YAML definitions, persist state.
|
|
3
|
+
*
|
|
4
|
+
* Trajectories live in `.promptwheel/trajectories/<name>.yaml`.
|
|
5
|
+
* State is persisted to `.promptwheel/trajectory-state.json`.
|
|
6
|
+
*/
|
|
7
|
+
import type { Trajectory, TrajectoryState } from '@promptwheel/core/trajectory/shared';
|
|
8
|
+
/** Load all trajectory definitions from `.promptwheel/trajectories/`. */
|
|
9
|
+
export declare function loadTrajectories(repoRoot: string): Trajectory[];
|
|
10
|
+
/** Load a single trajectory by name. */
|
|
11
|
+
export declare function loadTrajectory(repoRoot: string, name: string): Trajectory | null;
|
|
12
|
+
/** Load the active trajectory state, or null if none. */
|
|
13
|
+
export declare function loadTrajectoryState(repoRoot: string): TrajectoryState | null;
|
|
14
|
+
/** Save trajectory state to disk. */
|
|
15
|
+
export declare function saveTrajectoryState(repoRoot: string, state: TrajectoryState): void;
|
|
16
|
+
/** Clear trajectory state (deactivate). */
|
|
17
|
+
export declare function clearTrajectoryState(repoRoot: string): void;
|
|
18
|
+
/** Activate a trajectory: create initial step states and save. */
|
|
19
|
+
export declare function activateTrajectory(repoRoot: string, name: string): TrajectoryState | null;
|
|
20
|
+
//# sourceMappingURL=trajectory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trajectory.d.ts","sourceRoot":"","sources":["../../src/lib/trajectory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAuBvF,yEAAyE;AACzE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAqB/D;AAED,wCAAwC;AACxC,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAGhF;AAMD,yDAAyD;AACzD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAU5E;AAED,qCAAqC;AACrC,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAOlF;AAED,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAK3D;AAMD,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAqBzF"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trajectory I/O — load YAML definitions, persist state.
|
|
3
|
+
*
|
|
4
|
+
* Trajectories live in `.promptwheel/trajectories/<name>.yaml`.
|
|
5
|
+
* State is persisted to `.promptwheel/trajectory-state.json`.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'node:fs';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
import { parseTrajectoryYaml, createInitialStepStates, getNextStep, } from '@promptwheel/core/trajectory/shared';
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Paths
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
function trajectoriesDir(repoRoot) {
|
|
14
|
+
return path.join(repoRoot, '.promptwheel', 'trajectories');
|
|
15
|
+
}
|
|
16
|
+
function trajectoryStatePath(repoRoot) {
|
|
17
|
+
return path.join(repoRoot, '.promptwheel', 'trajectory-state.json');
|
|
18
|
+
}
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
// Loading
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
/** Load all trajectory definitions from `.promptwheel/trajectories/`. */
|
|
23
|
+
export function loadTrajectories(repoRoot) {
|
|
24
|
+
const dir = trajectoriesDir(repoRoot);
|
|
25
|
+
if (!fs.existsSync(dir))
|
|
26
|
+
return [];
|
|
27
|
+
const files = fs.readdirSync(dir).filter(f => f.endsWith('.yaml') || f.endsWith('.yml'));
|
|
28
|
+
const trajectories = [];
|
|
29
|
+
for (const file of files) {
|
|
30
|
+
try {
|
|
31
|
+
const filePath = path.join(dir, file);
|
|
32
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
33
|
+
const trajectory = parseTrajectoryYaml(content);
|
|
34
|
+
if (trajectory.name && trajectory.steps.length > 0) {
|
|
35
|
+
trajectories.push(trajectory);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// Skip malformed trajectory files
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return trajectories;
|
|
43
|
+
}
|
|
44
|
+
/** Load a single trajectory by name. */
|
|
45
|
+
export function loadTrajectory(repoRoot, name) {
|
|
46
|
+
const trajectories = loadTrajectories(repoRoot);
|
|
47
|
+
return trajectories.find(t => t.name === name) ?? null;
|
|
48
|
+
}
|
|
49
|
+
// ---------------------------------------------------------------------------
|
|
50
|
+
// State persistence
|
|
51
|
+
// ---------------------------------------------------------------------------
|
|
52
|
+
/** Load the active trajectory state, or null if none. */
|
|
53
|
+
export function loadTrajectoryState(repoRoot) {
|
|
54
|
+
const p = trajectoryStatePath(repoRoot);
|
|
55
|
+
try {
|
|
56
|
+
if (fs.existsSync(p)) {
|
|
57
|
+
return JSON.parse(fs.readFileSync(p, 'utf-8'));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Corrupted file — return null
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
/** Save trajectory state to disk. */
|
|
66
|
+
export function saveTrajectoryState(repoRoot, state) {
|
|
67
|
+
const p = trajectoryStatePath(repoRoot);
|
|
68
|
+
const dir = path.dirname(p);
|
|
69
|
+
if (!fs.existsSync(dir)) {
|
|
70
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
71
|
+
}
|
|
72
|
+
fs.writeFileSync(p, JSON.stringify(state, null, 2));
|
|
73
|
+
}
|
|
74
|
+
/** Clear trajectory state (deactivate). */
|
|
75
|
+
export function clearTrajectoryState(repoRoot) {
|
|
76
|
+
const p = trajectoryStatePath(repoRoot);
|
|
77
|
+
if (fs.existsSync(p)) {
|
|
78
|
+
fs.unlinkSync(p);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
// Activation
|
|
83
|
+
// ---------------------------------------------------------------------------
|
|
84
|
+
/** Activate a trajectory: create initial step states and save. */
|
|
85
|
+
export function activateTrajectory(repoRoot, name) {
|
|
86
|
+
const trajectory = loadTrajectory(repoRoot, name);
|
|
87
|
+
if (!trajectory)
|
|
88
|
+
return null;
|
|
89
|
+
const stepStates = createInitialStepStates(trajectory);
|
|
90
|
+
const firstStep = getNextStep(trajectory, stepStates);
|
|
91
|
+
if (firstStep) {
|
|
92
|
+
stepStates[firstStep.id].status = 'active';
|
|
93
|
+
}
|
|
94
|
+
const state = {
|
|
95
|
+
trajectoryName: name,
|
|
96
|
+
startedAt: Date.now(),
|
|
97
|
+
stepStates,
|
|
98
|
+
currentStepId: firstStep?.id ?? null,
|
|
99
|
+
paused: false,
|
|
100
|
+
};
|
|
101
|
+
saveTrajectoryState(repoRoot, state);
|
|
102
|
+
return state;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=trajectory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trajectory.js","sourceRoot":"","sources":["../../src/lib/trajectory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trigger configuration loader.
|
|
3
|
+
*
|
|
4
|
+
* Loads user-defined trigger rules from .promptwheel/triggers.json.
|
|
5
|
+
*/
|
|
6
|
+
import type { TriggerRule } from '@promptwheel/core/trace/shared';
|
|
7
|
+
/**
|
|
8
|
+
* Load trigger rules from .promptwheel/triggers.json if it exists.
|
|
9
|
+
* Returns empty array if file doesn't exist or is invalid.
|
|
10
|
+
*/
|
|
11
|
+
export declare function loadTriggerRules(repoRoot: string): TriggerRule[];
|
|
12
|
+
//# sourceMappingURL=trigger-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger-config.d.ts","sourceRoot":"","sources":["../../src/lib/trigger-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAElE;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAwBhE"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trigger configuration loader.
|
|
3
|
+
*
|
|
4
|
+
* Loads user-defined trigger rules from .promptwheel/triggers.json.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'node:fs';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
/**
|
|
9
|
+
* Load trigger rules from .promptwheel/triggers.json if it exists.
|
|
10
|
+
* Returns empty array if file doesn't exist or is invalid.
|
|
11
|
+
*/
|
|
12
|
+
export function loadTriggerRules(repoRoot) {
|
|
13
|
+
try {
|
|
14
|
+
const filePath = path.join(repoRoot, '.promptwheel', 'triggers.json');
|
|
15
|
+
if (!fs.existsSync(filePath))
|
|
16
|
+
return [];
|
|
17
|
+
const data = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
18
|
+
if (!data || !Array.isArray(data.rules))
|
|
19
|
+
return [];
|
|
20
|
+
// Basic validation: each rule needs id, name, condition, action
|
|
21
|
+
return data.rules.filter((r) => {
|
|
22
|
+
if (typeof r !== 'object' || r === null)
|
|
23
|
+
return false;
|
|
24
|
+
const rule = r;
|
|
25
|
+
return (typeof rule.id === 'string' &&
|
|
26
|
+
typeof rule.name === 'string' &&
|
|
27
|
+
typeof rule.condition === 'object' &&
|
|
28
|
+
rule.condition !== null &&
|
|
29
|
+
typeof rule.action === 'string' &&
|
|
30
|
+
['warn', 'abort', 'log'].includes(rule.action));
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=trigger-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trigger-config.js","sourceRoot":"","sources":["../../src/lib/trigger-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAgB;IAC/C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;QACtE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,CAAC;QAExC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEnD,gEAAgE;QAChE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAU,EAAE,EAAE;YACtC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI;gBAAE,OAAO,KAAK,CAAC;YACtD,MAAM,IAAI,GAAG,CAA4B,CAAC;YAC1C,OAAO,CACL,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ;gBAC3B,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;gBAC7B,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;gBAClC,IAAI,CAAC,SAAS,KAAK,IAAI;gBACvB,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ;gBAC/B,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAgB,CAAC,CACzD,CAAC;QACJ,CAAC,CAAkB,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update checker — prompts user when a new version is available.
|
|
3
|
+
*
|
|
4
|
+
* Similar to Claude Code and Codex CLI update notifications.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Check if an update is available. Returns the latest version if update needed.
|
|
8
|
+
* Uses caching to avoid hitting npm on every invocation.
|
|
9
|
+
*/
|
|
10
|
+
export declare function checkForUpdate(currentVersion: string): Promise<string | null>;
|
|
11
|
+
/**
|
|
12
|
+
* Dismiss update notification for a specific version.
|
|
13
|
+
*/
|
|
14
|
+
export declare function dismissUpdate(version: string): void;
|
|
15
|
+
/**
|
|
16
|
+
* Print update notification banner.
|
|
17
|
+
*/
|
|
18
|
+
export declare function printUpdateNotification(currentVersion: string, latestVersion: string): void;
|
|
19
|
+
/**
|
|
20
|
+
* Run the self-update command.
|
|
21
|
+
*/
|
|
22
|
+
export declare function runSelfUpdate(): Promise<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Check for updates in the background (non-blocking).
|
|
25
|
+
* Returns a promise that resolves to the latest version if available.
|
|
26
|
+
*/
|
|
27
|
+
export declare function checkForUpdateInBackground(currentVersion: string): Promise<string | null>;
|
|
28
|
+
//# sourceMappingURL=update-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.d.ts","sourceRoot":"","sources":["../../src/lib/update-check.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA8FH;;;GAGG;AACH,wBAAsB,cAAc,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiCnF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAInD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAQ3F;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CA6BtD;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGzF"}
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Update checker — prompts user when a new version is available.
|
|
3
|
+
*
|
|
4
|
+
* Similar to Claude Code and Codex CLI update notifications.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'node:fs';
|
|
7
|
+
import * as path from 'node:path';
|
|
8
|
+
import * as os from 'node:os';
|
|
9
|
+
import { spawn } from 'node:child_process';
|
|
10
|
+
import chalk from 'chalk';
|
|
11
|
+
const PACKAGE_NAME = '@promptwheel/cli';
|
|
12
|
+
const CHECK_INTERVAL_MS = 4 * 60 * 60 * 1000; // 4 hours
|
|
13
|
+
const CACHE_FILE = path.join(os.homedir(), '.promptwheel', 'update-check.json');
|
|
14
|
+
function loadCache() {
|
|
15
|
+
try {
|
|
16
|
+
if (fs.existsSync(CACHE_FILE)) {
|
|
17
|
+
return JSON.parse(fs.readFileSync(CACHE_FILE, 'utf8'));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// Ignore
|
|
22
|
+
}
|
|
23
|
+
return { lastCheck: 0, latestVersion: null, dismissed: null };
|
|
24
|
+
}
|
|
25
|
+
function saveCache(cache) {
|
|
26
|
+
try {
|
|
27
|
+
const dir = path.dirname(CACHE_FILE);
|
|
28
|
+
if (!fs.existsSync(dir)) {
|
|
29
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
30
|
+
}
|
|
31
|
+
fs.writeFileSync(CACHE_FILE, JSON.stringify(cache, null, 2));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
// Non-fatal
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Fetch the latest version from npm registry.
|
|
39
|
+
*/
|
|
40
|
+
async function fetchLatestVersion() {
|
|
41
|
+
return new Promise((resolve) => {
|
|
42
|
+
const timeout = setTimeout(() => resolve(null), 5000);
|
|
43
|
+
// Use npm view to get the latest version
|
|
44
|
+
const proc = spawn('npm', ['view', PACKAGE_NAME, 'version'], {
|
|
45
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
46
|
+
timeout: 5000,
|
|
47
|
+
});
|
|
48
|
+
let output = '';
|
|
49
|
+
proc.stdout?.on('data', (data) => {
|
|
50
|
+
output += data.toString();
|
|
51
|
+
});
|
|
52
|
+
proc.on('close', (code) => {
|
|
53
|
+
clearTimeout(timeout);
|
|
54
|
+
if (code === 0 && output.trim()) {
|
|
55
|
+
resolve(output.trim());
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
resolve(null);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
proc.on('error', () => {
|
|
62
|
+
clearTimeout(timeout);
|
|
63
|
+
resolve(null);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Compare semver versions. Returns:
|
|
69
|
+
* -1 if a < b
|
|
70
|
+
* 0 if a == b
|
|
71
|
+
* 1 if a > b
|
|
72
|
+
*/
|
|
73
|
+
function compareVersions(a, b) {
|
|
74
|
+
const partsA = a.replace(/^v/, '').split('.').map(Number);
|
|
75
|
+
const partsB = b.replace(/^v/, '').split('.').map(Number);
|
|
76
|
+
for (let i = 0; i < Math.max(partsA.length, partsB.length); i++) {
|
|
77
|
+
const numA = partsA[i] ?? 0;
|
|
78
|
+
const numB = partsB[i] ?? 0;
|
|
79
|
+
if (numA < numB)
|
|
80
|
+
return -1;
|
|
81
|
+
if (numA > numB)
|
|
82
|
+
return 1;
|
|
83
|
+
}
|
|
84
|
+
return 0;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Check if an update is available. Returns the latest version if update needed.
|
|
88
|
+
* Uses caching to avoid hitting npm on every invocation.
|
|
89
|
+
*/
|
|
90
|
+
export async function checkForUpdate(currentVersion) {
|
|
91
|
+
const cache = loadCache();
|
|
92
|
+
const now = Date.now();
|
|
93
|
+
// Use cached value if recent enough
|
|
94
|
+
if (now - cache.lastCheck < CHECK_INTERVAL_MS && cache.latestVersion) {
|
|
95
|
+
if (compareVersions(cache.latestVersion, currentVersion) > 0) {
|
|
96
|
+
// Don't notify if user dismissed this version
|
|
97
|
+
if (cache.dismissed === cache.latestVersion) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
return cache.latestVersion;
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
// Fetch from npm
|
|
105
|
+
const latestVersion = await fetchLatestVersion();
|
|
106
|
+
// Update cache
|
|
107
|
+
cache.lastCheck = now;
|
|
108
|
+
cache.latestVersion = latestVersion;
|
|
109
|
+
saveCache(cache);
|
|
110
|
+
if (latestVersion && compareVersions(latestVersion, currentVersion) > 0) {
|
|
111
|
+
// Don't notify if user dismissed this version
|
|
112
|
+
if (cache.dismissed === latestVersion) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
return latestVersion;
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Dismiss update notification for a specific version.
|
|
121
|
+
*/
|
|
122
|
+
export function dismissUpdate(version) {
|
|
123
|
+
const cache = loadCache();
|
|
124
|
+
cache.dismissed = version;
|
|
125
|
+
saveCache(cache);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Print update notification banner.
|
|
129
|
+
*/
|
|
130
|
+
export function printUpdateNotification(currentVersion, latestVersion) {
|
|
131
|
+
console.log();
|
|
132
|
+
console.log(chalk.yellow('┌─────────────────────────────────────────────────────┐'));
|
|
133
|
+
console.log(chalk.yellow('│') + chalk.bold(' Update available! ') + chalk.gray(`${currentVersion} → `) + chalk.green(latestVersion) + chalk.yellow(' │'));
|
|
134
|
+
console.log(chalk.yellow('│') + chalk.gray(' Run ') + chalk.cyan('npm install -g @promptwheel/cli') + chalk.gray(' to update') + chalk.yellow(' │'));
|
|
135
|
+
console.log(chalk.yellow('│') + chalk.gray(' Or: ') + chalk.cyan('promptwheel update') + chalk.yellow(' │'));
|
|
136
|
+
console.log(chalk.yellow('└─────────────────────────────────────────────────────┘'));
|
|
137
|
+
console.log();
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Run the self-update command.
|
|
141
|
+
*/
|
|
142
|
+
export async function runSelfUpdate() {
|
|
143
|
+
console.log(chalk.cyan('Updating @promptwheel/cli...'));
|
|
144
|
+
console.log();
|
|
145
|
+
return new Promise((resolve) => {
|
|
146
|
+
const proc = spawn('npm', ['install', '-g', PACKAGE_NAME], {
|
|
147
|
+
stdio: 'inherit',
|
|
148
|
+
});
|
|
149
|
+
proc.on('close', (code) => {
|
|
150
|
+
if (code === 0) {
|
|
151
|
+
console.log();
|
|
152
|
+
console.log(chalk.green('✓ Update complete!'));
|
|
153
|
+
resolve(true);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
console.log();
|
|
157
|
+
console.log(chalk.red('✗ Update failed. Try running manually:'));
|
|
158
|
+
console.log(chalk.gray(` npm install -g ${PACKAGE_NAME}`));
|
|
159
|
+
resolve(false);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
proc.on('error', (err) => {
|
|
163
|
+
console.log();
|
|
164
|
+
console.log(chalk.red(`✗ Update failed: ${err.message}`));
|
|
165
|
+
console.log(chalk.gray(` Try running manually: npm install -g ${PACKAGE_NAME}`));
|
|
166
|
+
resolve(false);
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Check for updates in the background (non-blocking).
|
|
172
|
+
* Returns a promise that resolves to the latest version if available.
|
|
173
|
+
*/
|
|
174
|
+
export function checkForUpdateInBackground(currentVersion) {
|
|
175
|
+
// Run check in background, don't block CLI startup
|
|
176
|
+
return checkForUpdate(currentVersion).catch(() => null);
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=update-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-check.js","sourceRoot":"","sources":["../../src/lib/update-check.ts"],"names":[],"mappings":"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"}
|