@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,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Goals — measurable targets that drive wheel formula selection.
|
|
3
|
+
*
|
|
4
|
+
* A goal is a formula with a `measure` field. The system measures current
|
|
5
|
+
* state, picks the goal with the biggest gap from target, and works toward it.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'node:fs';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
import { execFileSync } from 'node:child_process';
|
|
10
|
+
import { parseSimpleYaml, parseStringList, } from '@promptwheel/core/formulas/shared';
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Loading
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
/**
|
|
15
|
+
* Load goal files from `.promptwheel/goals/*.yaml`, return formulas with measure fields.
|
|
16
|
+
*/
|
|
17
|
+
export function loadGoals(repoRoot) {
|
|
18
|
+
const goalsDir = path.join(repoRoot, '.promptwheel', 'goals');
|
|
19
|
+
if (!fs.existsSync(goalsDir))
|
|
20
|
+
return [];
|
|
21
|
+
const files = fs.readdirSync(goalsDir).filter(f => f.endsWith('.yaml') || f.endsWith('.yml'));
|
|
22
|
+
const goals = [];
|
|
23
|
+
for (const file of files) {
|
|
24
|
+
try {
|
|
25
|
+
const filePath = path.join(goalsDir, file);
|
|
26
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
27
|
+
const parsed = parseSimpleYaml(content);
|
|
28
|
+
const name = parsed.name || path.basename(file, path.extname(file));
|
|
29
|
+
const measureCmd = parsed.measure_cmd;
|
|
30
|
+
const measureTarget = parsed.measure_target ? parseFloat(parsed.measure_target) : undefined;
|
|
31
|
+
const measureDirection = parsed.measure_direction;
|
|
32
|
+
if (!measureCmd || measureTarget === undefined || !measureDirection) {
|
|
33
|
+
continue; // skip goals missing required measure fields
|
|
34
|
+
}
|
|
35
|
+
const formula = {
|
|
36
|
+
name,
|
|
37
|
+
description: parsed.description || `Goal: ${name}`,
|
|
38
|
+
categories: parsed.categories ? parseStringList(parsed.categories) : undefined,
|
|
39
|
+
prompt: parsed.prompt,
|
|
40
|
+
minConfidence: parsed.min_confidence ? parseInt(parsed.min_confidence, 10) : undefined,
|
|
41
|
+
min_confidence: parsed.min_confidence ? parseInt(parsed.min_confidence, 10) : undefined,
|
|
42
|
+
measure: {
|
|
43
|
+
cmd: measureCmd,
|
|
44
|
+
target: measureTarget,
|
|
45
|
+
direction: measureDirection,
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
goals.push(formula);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Skip malformed goal files
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return goals;
|
|
55
|
+
}
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
// Measurement
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
/**
|
|
60
|
+
* Run a measurement command and parse the last number from its output.
|
|
61
|
+
* Returns null if the command fails or produces no parseable number.
|
|
62
|
+
*/
|
|
63
|
+
export function runMeasurement(cmd, repoRoot) {
|
|
64
|
+
try {
|
|
65
|
+
const output = execFileSync('sh', ['-c', cmd], {
|
|
66
|
+
cwd: repoRoot,
|
|
67
|
+
timeout: 30_000,
|
|
68
|
+
encoding: 'utf-8',
|
|
69
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
70
|
+
});
|
|
71
|
+
// Find the last number in the output
|
|
72
|
+
const matches = output.match(/-?\d+\.?\d*/g);
|
|
73
|
+
if (!matches || matches.length === 0) {
|
|
74
|
+
return { value: null, error: 'No numeric output' };
|
|
75
|
+
}
|
|
76
|
+
const value = parseFloat(matches[matches.length - 1]);
|
|
77
|
+
if (isNaN(value)) {
|
|
78
|
+
return { value: null, error: 'Could not parse number' };
|
|
79
|
+
}
|
|
80
|
+
return { value };
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
84
|
+
// Truncate long error messages
|
|
85
|
+
const shortMsg = message.length > 100 ? message.slice(0, 100) + '...' : message;
|
|
86
|
+
return { value: null, error: shortMsg };
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Measure all goals, compute gaps.
|
|
91
|
+
*/
|
|
92
|
+
export function measureGoals(goals, repoRoot) {
|
|
93
|
+
const measurements = [];
|
|
94
|
+
for (const goal of goals) {
|
|
95
|
+
if (!goal.measure)
|
|
96
|
+
continue;
|
|
97
|
+
const { value, error } = runMeasurement(goal.measure.cmd, repoRoot);
|
|
98
|
+
const { target, direction } = goal.measure;
|
|
99
|
+
let gapPercent = 100;
|
|
100
|
+
let met = false;
|
|
101
|
+
if (value !== null) {
|
|
102
|
+
if (direction === 'up') {
|
|
103
|
+
// Higher is better: gap = how far below target
|
|
104
|
+
if (value >= target) {
|
|
105
|
+
gapPercent = 0;
|
|
106
|
+
met = true;
|
|
107
|
+
}
|
|
108
|
+
else if (target !== 0) {
|
|
109
|
+
gapPercent = ((target - value) / target) * 100;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
// Lower is better: gap = how far above target
|
|
114
|
+
if (value <= target) {
|
|
115
|
+
gapPercent = 0;
|
|
116
|
+
met = true;
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
// For "down" direction, express gap relative to current value
|
|
120
|
+
gapPercent = target === 0
|
|
121
|
+
? (value > 0 ? 100 : 0)
|
|
122
|
+
: ((value - target) / value) * 100;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
measurements.push({
|
|
127
|
+
goalName: goal.name,
|
|
128
|
+
current: value,
|
|
129
|
+
target,
|
|
130
|
+
direction,
|
|
131
|
+
gapPercent: Math.round(gapPercent * 10) / 10,
|
|
132
|
+
met,
|
|
133
|
+
error,
|
|
134
|
+
measuredAt: Date.now(),
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
return measurements;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Pick the goal with the biggest gap from target.
|
|
141
|
+
* Skips met goals and errored goals.
|
|
142
|
+
*/
|
|
143
|
+
export function pickGoalByGap(measurements) {
|
|
144
|
+
const candidates = measurements
|
|
145
|
+
.filter(m => !m.met && m.current !== null)
|
|
146
|
+
.sort((a, b) => b.gapPercent - a.gapPercent);
|
|
147
|
+
return candidates[0] ?? null;
|
|
148
|
+
}
|
|
149
|
+
// ---------------------------------------------------------------------------
|
|
150
|
+
// Prompt formatting
|
|
151
|
+
// ---------------------------------------------------------------------------
|
|
152
|
+
/**
|
|
153
|
+
* Format goal context for injection into the scout prompt.
|
|
154
|
+
*/
|
|
155
|
+
export function formatGoalContext(goal, measurement) {
|
|
156
|
+
const arrow = measurement.direction === 'up' ? '↑' : '↓';
|
|
157
|
+
const unit = measurement.direction === 'up' ? 'higher is better' : 'lower is better';
|
|
158
|
+
return [
|
|
159
|
+
`<goal>`,
|
|
160
|
+
`Active goal: ${goal.name}`,
|
|
161
|
+
`${goal.description}`,
|
|
162
|
+
`Current: ${measurement.current} | Target: ${measurement.target} (${arrow} ${unit})`,
|
|
163
|
+
`Gap: ${measurement.gapPercent}%`,
|
|
164
|
+
`</goal>`,
|
|
165
|
+
'',
|
|
166
|
+
].join('\n');
|
|
167
|
+
}
|
|
168
|
+
// ---------------------------------------------------------------------------
|
|
169
|
+
// State persistence
|
|
170
|
+
// ---------------------------------------------------------------------------
|
|
171
|
+
function goalStatePath(repoRoot) {
|
|
172
|
+
return path.join(repoRoot, '.promptwheel', 'goal-state.json');
|
|
173
|
+
}
|
|
174
|
+
export function readGoalState(repoRoot) {
|
|
175
|
+
const p = goalStatePath(repoRoot);
|
|
176
|
+
try {
|
|
177
|
+
if (fs.existsSync(p)) {
|
|
178
|
+
return JSON.parse(fs.readFileSync(p, 'utf-8'));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// Corrupted file — start fresh
|
|
183
|
+
}
|
|
184
|
+
return { measurements: {}, lastUpdated: 0 };
|
|
185
|
+
}
|
|
186
|
+
export function writeGoalState(repoRoot, state) {
|
|
187
|
+
const p = goalStatePath(repoRoot);
|
|
188
|
+
const dir = path.dirname(p);
|
|
189
|
+
if (!fs.existsSync(dir)) {
|
|
190
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
191
|
+
}
|
|
192
|
+
state.lastUpdated = Date.now();
|
|
193
|
+
fs.writeFileSync(p, JSON.stringify(state, null, 2));
|
|
194
|
+
}
|
|
195
|
+
const MAX_MEASUREMENTS_PER_GOAL = 50;
|
|
196
|
+
/**
|
|
197
|
+
* Append a measurement to the ring buffer for a goal.
|
|
198
|
+
*/
|
|
199
|
+
export function recordGoalMeasurement(repoRoot, measurement) {
|
|
200
|
+
const state = readGoalState(repoRoot);
|
|
201
|
+
if (!state.measurements[measurement.goalName]) {
|
|
202
|
+
state.measurements[measurement.goalName] = [];
|
|
203
|
+
}
|
|
204
|
+
const entries = state.measurements[measurement.goalName];
|
|
205
|
+
entries.push({
|
|
206
|
+
value: measurement.current,
|
|
207
|
+
timestamp: measurement.measuredAt,
|
|
208
|
+
error: measurement.error,
|
|
209
|
+
});
|
|
210
|
+
// Ring buffer: keep only the last N entries
|
|
211
|
+
if (entries.length > MAX_MEASUREMENTS_PER_GOAL) {
|
|
212
|
+
state.measurements[measurement.goalName] = entries.slice(-MAX_MEASUREMENTS_PER_GOAL);
|
|
213
|
+
}
|
|
214
|
+
writeGoalState(repoRoot, state);
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=goals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"goals.js","sourceRoot":"","sources":["../../src/lib/goals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project guidelines loader — loads CLAUDE.md or AGENTS.md for prompt injection.
|
|
3
|
+
*
|
|
4
|
+
* Pure resolution logic and formatting live in @promptwheel/core/guidelines/shared.
|
|
5
|
+
* This file wraps them with filesystem I/O.
|
|
6
|
+
*/
|
|
7
|
+
import { type ProjectGuidelines, type GuidelinesBackend } from '@promptwheel/core/guidelines/shared';
|
|
8
|
+
export type { ProjectGuidelines, GuidelinesBackend } from '@promptwheel/core/guidelines/shared';
|
|
9
|
+
export { formatGuidelinesForPrompt } from '@promptwheel/core/guidelines/shared';
|
|
10
|
+
export interface GuidelinesOptions {
|
|
11
|
+
/** Which backend is running. Determines default file search order. */
|
|
12
|
+
backend?: GuidelinesBackend;
|
|
13
|
+
/** Auto-create baseline file if none found. */
|
|
14
|
+
autoCreate?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Custom path (relative to repoRoot) to the guidelines file.
|
|
17
|
+
* Overrides the default CLAUDE.md / AGENTS.md search.
|
|
18
|
+
* Set to false to disable guidelines entirely.
|
|
19
|
+
*/
|
|
20
|
+
customPath?: string | false | null;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Load project guidelines.
|
|
24
|
+
*
|
|
25
|
+
* Resolution order:
|
|
26
|
+
* 1. If customPath is false → disabled, return null
|
|
27
|
+
* 2. If customPath is a string → use that exact file
|
|
28
|
+
* 3. Otherwise → search default paths by backend (primary then fallback)
|
|
29
|
+
* 4. If nothing found and autoCreate → generate baseline
|
|
30
|
+
*/
|
|
31
|
+
export declare function loadGuidelines(repoRoot: string, opts?: GuidelinesOptions): ProjectGuidelines | null;
|
|
32
|
+
//# sourceMappingURL=guidelines.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guidelines.d.ts","sourceRoot":"","sources":["../../src/lib/guidelines.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EAKvB,MAAM,qCAAqC,CAAC;AAG7C,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAChG,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAEhF,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,+CAA+C;IAC/C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC;CACpC;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,iBAAsB,GAC3B,iBAAiB,GAAG,IAAI,CAuB1B"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project guidelines loader — loads CLAUDE.md or AGENTS.md for prompt injection.
|
|
3
|
+
*
|
|
4
|
+
* Pure resolution logic and formatting live in @promptwheel/core/guidelines/shared.
|
|
5
|
+
* This file wraps them with filesystem I/O.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'node:fs';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
import { resolveGuidelinesPaths, getBaselineFilename, generateBaselineGuidelines, } from '@promptwheel/core/guidelines/shared';
|
|
10
|
+
export { formatGuidelinesForPrompt } from '@promptwheel/core/guidelines/shared';
|
|
11
|
+
/**
|
|
12
|
+
* Load project guidelines.
|
|
13
|
+
*
|
|
14
|
+
* Resolution order:
|
|
15
|
+
* 1. If customPath is false → disabled, return null
|
|
16
|
+
* 2. If customPath is a string → use that exact file
|
|
17
|
+
* 3. Otherwise → search default paths by backend (primary then fallback)
|
|
18
|
+
* 4. If nothing found and autoCreate → generate baseline
|
|
19
|
+
*/
|
|
20
|
+
export function loadGuidelines(repoRoot, opts = {}) {
|
|
21
|
+
const { backend = 'claude', autoCreate = false, customPath } = opts;
|
|
22
|
+
// Explicitly disabled
|
|
23
|
+
if (customPath === false)
|
|
24
|
+
return null;
|
|
25
|
+
// Custom path — single file, no fallback
|
|
26
|
+
if (typeof customPath === 'string') {
|
|
27
|
+
return readGuidelinesFile(repoRoot, customPath);
|
|
28
|
+
}
|
|
29
|
+
// Default search: primary paths by backend, then fallback
|
|
30
|
+
const [primaryPaths, fallbackPaths] = resolveGuidelinesPaths(backend);
|
|
31
|
+
const result = searchPaths(repoRoot, primaryPaths) ?? searchPaths(repoRoot, fallbackPaths);
|
|
32
|
+
if (result)
|
|
33
|
+
return result;
|
|
34
|
+
// Nothing found — auto-create if enabled
|
|
35
|
+
if (autoCreate) {
|
|
36
|
+
return createBaselineGuidelines(repoRoot, backend);
|
|
37
|
+
}
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
function readGuidelinesFile(repoRoot, rel) {
|
|
41
|
+
const full = path.join(repoRoot, rel);
|
|
42
|
+
if (!fs.existsSync(full))
|
|
43
|
+
return null;
|
|
44
|
+
try {
|
|
45
|
+
const content = fs.readFileSync(full, 'utf-8');
|
|
46
|
+
return { content, source: rel, loadedAt: Date.now() };
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function searchPaths(repoRoot, paths) {
|
|
53
|
+
for (const rel of paths) {
|
|
54
|
+
const result = readGuidelinesFile(repoRoot, rel);
|
|
55
|
+
if (result)
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Generate a baseline guidelines file from project metadata.
|
|
62
|
+
*/
|
|
63
|
+
function createBaselineGuidelines(repoRoot, backend) {
|
|
64
|
+
const filename = getBaselineFilename(backend);
|
|
65
|
+
const fullPath = path.join(repoRoot, filename);
|
|
66
|
+
// Don't overwrite existing files
|
|
67
|
+
if (fs.existsSync(fullPath))
|
|
68
|
+
return null;
|
|
69
|
+
// Build input from package.json
|
|
70
|
+
const input = buildBaselineInput(repoRoot);
|
|
71
|
+
const content = generateBaselineGuidelines(input, backend);
|
|
72
|
+
try {
|
|
73
|
+
fs.writeFileSync(fullPath, content, 'utf-8');
|
|
74
|
+
return { content, source: filename, loadedAt: Date.now() };
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Build baseline input from project metadata (package.json, monorepo detection).
|
|
82
|
+
*/
|
|
83
|
+
function buildBaselineInput(repoRoot) {
|
|
84
|
+
const projectName = path.basename(repoRoot);
|
|
85
|
+
const input = { projectName };
|
|
86
|
+
try {
|
|
87
|
+
const pkg = JSON.parse(fs.readFileSync(path.join(repoRoot, 'package.json'), 'utf-8'));
|
|
88
|
+
input.description = pkg.description || undefined;
|
|
89
|
+
input.scripts = pkg.scripts || {};
|
|
90
|
+
input.hasTypeScript = !!(pkg.devDependencies?.typescript ||
|
|
91
|
+
pkg.dependencies?.typescript);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// No package.json
|
|
95
|
+
}
|
|
96
|
+
// Detect monorepo
|
|
97
|
+
const hasWorkspaces = fs.existsSync(path.join(repoRoot, 'pnpm-workspace.yaml')) ||
|
|
98
|
+
fs.existsSync(path.join(repoRoot, 'lerna.json'));
|
|
99
|
+
input.isMonorepo = hasWorkspaces || fs.existsSync(path.join(repoRoot, 'packages'));
|
|
100
|
+
return input;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=guidelines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guidelines.js","sourceRoot":"","sources":["../../src/lib/guidelines.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-run learning mechanism.
|
|
3
|
+
*
|
|
4
|
+
* Persists learnings to `.promptwheel/learnings.json` and provides
|
|
5
|
+
* decay, consolidation, relevance scoring, and prompt formatting.
|
|
6
|
+
*
|
|
7
|
+
* Pure algorithms (decay, consolidation, formatting, keyword extraction,
|
|
8
|
+
* relevance scoring) live in @promptwheel/core/learnings/shared.
|
|
9
|
+
* This file wraps them with filesystem I/O and adds CLI-specific
|
|
10
|
+
* extensions (metrics instrumentation, effectiveness tracking).
|
|
11
|
+
*/
|
|
12
|
+
import { type Learning as CoreLearning, type StructuredKnowledge } from '@promptwheel/core/learnings/shared';
|
|
13
|
+
export type { Learning, StructuredKnowledge } from '@promptwheel/core/learnings/shared';
|
|
14
|
+
export { formatLearningsForPrompt, extractKeywords, selectRelevant, extractTags, LEARNINGS_DEFAULTS, } from '@promptwheel/core/learnings/shared';
|
|
15
|
+
type Learning = CoreLearning;
|
|
16
|
+
/**
|
|
17
|
+
* Load learnings, apply decay, prune dead entries, write back.
|
|
18
|
+
* Called once per session start.
|
|
19
|
+
*/
|
|
20
|
+
export declare function loadLearnings(projectRoot: string, decayRate?: number): Learning[];
|
|
21
|
+
/**
|
|
22
|
+
* Add a new learning with sensible defaults.
|
|
23
|
+
*/
|
|
24
|
+
export declare function addLearning(projectRoot: string, input: {
|
|
25
|
+
text: string;
|
|
26
|
+
category: Learning['category'];
|
|
27
|
+
source: Learning['source'];
|
|
28
|
+
tags?: string[];
|
|
29
|
+
structured?: StructuredKnowledge;
|
|
30
|
+
}): Learning;
|
|
31
|
+
/**
|
|
32
|
+
* Confirm a learning: bump weight +10 and update last_confirmed_at.
|
|
33
|
+
*/
|
|
34
|
+
export declare function confirmLearning(projectRoot: string, id: string): void;
|
|
35
|
+
/**
|
|
36
|
+
* Record access: increment access_count for each id.
|
|
37
|
+
*/
|
|
38
|
+
export declare function recordAccess(projectRoot: string, ids: string[]): void;
|
|
39
|
+
/**
|
|
40
|
+
* Record learning application: track when learnings were used in a ticket context.
|
|
41
|
+
*/
|
|
42
|
+
export declare function recordApplication(projectRoot: string, ids: string[]): void;
|
|
43
|
+
/**
|
|
44
|
+
* Record learning outcome: track success/failure after a ticket completes.
|
|
45
|
+
*/
|
|
46
|
+
export declare function recordOutcome(projectRoot: string, ids: string[], success: boolean): void;
|
|
47
|
+
/**
|
|
48
|
+
* Get learning effectiveness stats.
|
|
49
|
+
*/
|
|
50
|
+
export declare function getLearningEffectiveness(projectRoot: string): {
|
|
51
|
+
total: number;
|
|
52
|
+
applied: number;
|
|
53
|
+
successRate: number;
|
|
54
|
+
topPerformers: Array<{
|
|
55
|
+
id: string;
|
|
56
|
+
text: string;
|
|
57
|
+
effectiveness: number;
|
|
58
|
+
}>;
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Consolidate near-duplicate learnings (>70% text similarity).
|
|
62
|
+
* Keeps the higher weight entry, sums access counts.
|
|
63
|
+
*/
|
|
64
|
+
export declare function consolidateLearnings(projectRoot: string): void;
|
|
65
|
+
//# sourceMappingURL=learnings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learnings.d.ts","sourceRoot":"","sources":["../../src/lib/learnings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,EACL,KAAK,QAAQ,IAAI,YAAY,EAC7B,KAAK,mBAAmB,EAIzB,MAAM,oCAAoC,CAAC;AAG5C,YAAY,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACxF,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,WAAW,EACX,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAG5C,KAAK,QAAQ,GAAG,YAAY,CAAC;AAqC7B;;;GAGG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,GAAE,MAAsC,GAAG,QAAQ,EAAE,CAShH;AAED;;GAEG;AACH,wBAAgB,WAAW,CACzB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE;IACL,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC/B,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,mBAAmB,CAAC;CAClC,GACA,QAAQ,CAkBV;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,CAOrE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAUrE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAa1E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAoBxF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,WAAW,EAAE,MAAM,GAAG;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3E,CA+BA;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAM9D"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-run learning mechanism.
|
|
3
|
+
*
|
|
4
|
+
* Persists learnings to `.promptwheel/learnings.json` and provides
|
|
5
|
+
* decay, consolidation, relevance scoring, and prompt formatting.
|
|
6
|
+
*
|
|
7
|
+
* Pure algorithms (decay, consolidation, formatting, keyword extraction,
|
|
8
|
+
* relevance scoring) live in @promptwheel/core/learnings/shared.
|
|
9
|
+
* This file wraps them with filesystem I/O and adds CLI-specific
|
|
10
|
+
* extensions (metrics instrumentation, effectiveness tracking).
|
|
11
|
+
*/
|
|
12
|
+
import * as fs from 'node:fs';
|
|
13
|
+
import * as path from 'node:path';
|
|
14
|
+
import * as crypto from 'node:crypto';
|
|
15
|
+
import { metric } from './metrics.js';
|
|
16
|
+
import { applyLearningsDecay, consolidateLearnings as coreConsolidate, LEARNINGS_DEFAULTS, } from '@promptwheel/core/learnings/shared';
|
|
17
|
+
export { formatLearningsForPrompt, extractKeywords, selectRelevant, extractTags, LEARNINGS_DEFAULTS, } from '@promptwheel/core/learnings/shared';
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// File I/O
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
const LEARNINGS_FILE = 'learnings.json';
|
|
22
|
+
function learningsPath(projectRoot) {
|
|
23
|
+
return path.join(projectRoot, '.promptwheel', LEARNINGS_FILE);
|
|
24
|
+
}
|
|
25
|
+
function readLearnings(projectRoot) {
|
|
26
|
+
const fp = learningsPath(projectRoot);
|
|
27
|
+
if (!fs.existsSync(fp))
|
|
28
|
+
return [];
|
|
29
|
+
try {
|
|
30
|
+
const raw = fs.readFileSync(fp, 'utf8');
|
|
31
|
+
const parsed = JSON.parse(raw);
|
|
32
|
+
return Array.isArray(parsed) ? parsed : [];
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function writeLearnings(projectRoot, learnings) {
|
|
39
|
+
const fp = learningsPath(projectRoot);
|
|
40
|
+
const dir = path.dirname(fp);
|
|
41
|
+
if (!fs.existsSync(dir)) {
|
|
42
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
43
|
+
}
|
|
44
|
+
fs.writeFileSync(fp, JSON.stringify(learnings, null, 2) + '\n', 'utf8');
|
|
45
|
+
}
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// Core API (wraps core algorithms with I/O + metrics)
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
/**
|
|
50
|
+
* Load learnings, apply decay, prune dead entries, write back.
|
|
51
|
+
* Called once per session start.
|
|
52
|
+
*/
|
|
53
|
+
export function loadLearnings(projectRoot, decayRate = LEARNINGS_DEFAULTS.DECAY_RATE) {
|
|
54
|
+
const learnings = readLearnings(projectRoot);
|
|
55
|
+
const surviving = applyLearningsDecay(learnings, decayRate);
|
|
56
|
+
writeLearnings(projectRoot, surviving);
|
|
57
|
+
// Instrument: track how many learnings loaded
|
|
58
|
+
metric('learnings', 'loaded', { count: surviving.length, decayed: learnings.length - surviving.length });
|
|
59
|
+
return surviving;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Add a new learning with sensible defaults.
|
|
63
|
+
*/
|
|
64
|
+
export function addLearning(projectRoot, input) {
|
|
65
|
+
const learnings = readLearnings(projectRoot);
|
|
66
|
+
const now = new Date().toISOString();
|
|
67
|
+
const learning = {
|
|
68
|
+
id: crypto.randomBytes(4).toString('hex'),
|
|
69
|
+
text: input.text.slice(0, 200),
|
|
70
|
+
category: input.category,
|
|
71
|
+
source: input.source,
|
|
72
|
+
tags: input.tags ?? [],
|
|
73
|
+
weight: LEARNINGS_DEFAULTS.DEFAULT_WEIGHT,
|
|
74
|
+
created_at: now,
|
|
75
|
+
last_confirmed_at: now,
|
|
76
|
+
access_count: 0,
|
|
77
|
+
structured: input.structured,
|
|
78
|
+
};
|
|
79
|
+
learnings.push(learning);
|
|
80
|
+
writeLearnings(projectRoot, learnings);
|
|
81
|
+
return learning;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Confirm a learning: bump weight +10 and update last_confirmed_at.
|
|
85
|
+
*/
|
|
86
|
+
export function confirmLearning(projectRoot, id) {
|
|
87
|
+
const learnings = readLearnings(projectRoot);
|
|
88
|
+
const l = learnings.find(x => x.id === id);
|
|
89
|
+
if (!l)
|
|
90
|
+
return;
|
|
91
|
+
l.weight = Math.min(LEARNINGS_DEFAULTS.MAX_WEIGHT, l.weight + 10);
|
|
92
|
+
l.last_confirmed_at = new Date().toISOString();
|
|
93
|
+
writeLearnings(projectRoot, learnings);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Record access: increment access_count for each id.
|
|
97
|
+
*/
|
|
98
|
+
export function recordAccess(projectRoot, ids) {
|
|
99
|
+
if (ids.length === 0)
|
|
100
|
+
return;
|
|
101
|
+
const learnings = readLearnings(projectRoot);
|
|
102
|
+
const idSet = new Set(ids);
|
|
103
|
+
for (const l of learnings) {
|
|
104
|
+
if (idSet.has(l.id)) {
|
|
105
|
+
l.access_count++;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
writeLearnings(projectRoot, learnings);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Record learning application: track when learnings were used in a ticket context.
|
|
112
|
+
*/
|
|
113
|
+
export function recordApplication(projectRoot, ids) {
|
|
114
|
+
if (ids.length === 0)
|
|
115
|
+
return;
|
|
116
|
+
const learnings = readLearnings(projectRoot);
|
|
117
|
+
const idSet = new Set(ids);
|
|
118
|
+
for (const l of learnings) {
|
|
119
|
+
if (idSet.has(l.id)) {
|
|
120
|
+
l.applied_count = (l.applied_count ?? 0) + 1;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
writeLearnings(projectRoot, learnings);
|
|
124
|
+
// Instrument: track application
|
|
125
|
+
metric('learnings', 'applied', { count: ids.length });
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Record learning outcome: track success/failure after a ticket completes.
|
|
129
|
+
*/
|
|
130
|
+
export function recordOutcome(projectRoot, ids, success) {
|
|
131
|
+
if (ids.length === 0)
|
|
132
|
+
return;
|
|
133
|
+
const learnings = readLearnings(projectRoot);
|
|
134
|
+
const idSet = new Set(ids);
|
|
135
|
+
for (const l of learnings) {
|
|
136
|
+
if (idSet.has(l.id)) {
|
|
137
|
+
if (success) {
|
|
138
|
+
l.success_count = (l.success_count ?? 0) + 1;
|
|
139
|
+
// Boost weight on success
|
|
140
|
+
l.weight = Math.min(LEARNINGS_DEFAULTS.MAX_WEIGHT, l.weight + 2);
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
// Slight penalty on failure (learning didn't help)
|
|
144
|
+
l.weight = Math.max(1, l.weight - 1);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
writeLearnings(projectRoot, learnings);
|
|
149
|
+
// Instrument: track outcome
|
|
150
|
+
metric('learnings', 'outcome', { count: ids.length, success });
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get learning effectiveness stats.
|
|
154
|
+
*/
|
|
155
|
+
export function getLearningEffectiveness(projectRoot) {
|
|
156
|
+
const learnings = readLearnings(projectRoot);
|
|
157
|
+
const withApplication = learnings.filter(l => (l.applied_count ?? 0) > 0);
|
|
158
|
+
let totalApplied = 0;
|
|
159
|
+
let totalSuccess = 0;
|
|
160
|
+
const performers = [];
|
|
161
|
+
for (const l of withApplication) {
|
|
162
|
+
const applied = l.applied_count ?? 0;
|
|
163
|
+
const success = l.success_count ?? 0;
|
|
164
|
+
totalApplied += applied;
|
|
165
|
+
totalSuccess += success;
|
|
166
|
+
if (applied >= 2) { // Only include learnings with enough data
|
|
167
|
+
performers.push({
|
|
168
|
+
id: l.id,
|
|
169
|
+
text: l.text,
|
|
170
|
+
effectiveness: applied > 0 ? success / applied : 0,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
performers.sort((a, b) => b.effectiveness - a.effectiveness);
|
|
175
|
+
return {
|
|
176
|
+
total: learnings.length,
|
|
177
|
+
applied: totalApplied,
|
|
178
|
+
successRate: totalApplied > 0 ? totalSuccess / totalApplied : 0,
|
|
179
|
+
topPerformers: performers.slice(0, 5),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Consolidate near-duplicate learnings (>70% text similarity).
|
|
184
|
+
* Keeps the higher weight entry, sums access counts.
|
|
185
|
+
*/
|
|
186
|
+
export function consolidateLearnings(projectRoot) {
|
|
187
|
+
const learnings = readLearnings(projectRoot);
|
|
188
|
+
const result = coreConsolidate(learnings);
|
|
189
|
+
if (result !== null) {
|
|
190
|
+
writeLearnings(projectRoot, result);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=learnings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learnings.js","sourceRoot":"","sources":["../../src/lib/learnings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger implementation for CLI
|
|
3
|
+
*/
|
|
4
|
+
import type { Logger } from '@promptwheel/core/services';
|
|
5
|
+
export interface LoggerOptions {
|
|
6
|
+
verbose?: boolean;
|
|
7
|
+
quiet?: boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Create a logger instance
|
|
11
|
+
*/
|
|
12
|
+
export declare function createLogger(opts?: LoggerOptions): Logger;
|
|
13
|
+
/**
|
|
14
|
+
* Silent logger (for tests or quiet mode)
|
|
15
|
+
*/
|
|
16
|
+
export declare const silentLogger: Logger;
|
|
17
|
+
//# sourceMappingURL=logger.d.ts.map
|