@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.
Files changed (530) hide show
  1. package/README.md +215 -0
  2. package/dist/bin/promptwheel.d.ts +17 -0
  3. package/dist/bin/promptwheel.d.ts.map +1 -0
  4. package/dist/bin/promptwheel.js +90 -0
  5. package/dist/bin/promptwheel.js.map +1 -0
  6. package/dist/commands/auto-auth.d.ts +26 -0
  7. package/dist/commands/auto-auth.d.ts.map +1 -0
  8. package/dist/commands/auto-auth.js +216 -0
  9. package/dist/commands/auto-auth.js.map +1 -0
  10. package/dist/commands/auto-ci-mode.d.ts +9 -0
  11. package/dist/commands/auto-ci-mode.d.ts.map +1 -0
  12. package/dist/commands/auto-ci-mode.js +176 -0
  13. package/dist/commands/auto-ci-mode.js.map +1 -0
  14. package/dist/commands/solo-analytics.d.ts +6 -0
  15. package/dist/commands/solo-analytics.d.ts.map +1 -0
  16. package/dist/commands/solo-analytics.js +267 -0
  17. package/dist/commands/solo-analytics.js.map +1 -0
  18. package/dist/commands/solo-auto.d.ts +6 -0
  19. package/dist/commands/solo-auto.d.ts.map +1 -0
  20. package/dist/commands/solo-auto.js +135 -0
  21. package/dist/commands/solo-auto.js.map +1 -0
  22. package/dist/commands/solo-daemon.d.ts +12 -0
  23. package/dist/commands/solo-daemon.d.ts.map +1 -0
  24. package/dist/commands/solo-daemon.js +177 -0
  25. package/dist/commands/solo-daemon.js.map +1 -0
  26. package/dist/commands/solo-exec.d.ts +6 -0
  27. package/dist/commands/solo-exec.d.ts.map +1 -0
  28. package/dist/commands/solo-exec.js +656 -0
  29. package/dist/commands/solo-exec.js.map +1 -0
  30. package/dist/commands/solo-inspect.d.ts +6 -0
  31. package/dist/commands/solo-inspect.d.ts.map +1 -0
  32. package/dist/commands/solo-inspect.js +765 -0
  33. package/dist/commands/solo-inspect.js.map +1 -0
  34. package/dist/commands/solo-lifecycle.d.ts +6 -0
  35. package/dist/commands/solo-lifecycle.d.ts.map +1 -0
  36. package/dist/commands/solo-lifecycle.js +226 -0
  37. package/dist/commands/solo-lifecycle.js.map +1 -0
  38. package/dist/commands/solo-nudge.d.ts +6 -0
  39. package/dist/commands/solo-nudge.d.ts.map +1 -0
  40. package/dist/commands/solo-nudge.js +49 -0
  41. package/dist/commands/solo-nudge.js.map +1 -0
  42. package/dist/commands/solo-qa.d.ts +6 -0
  43. package/dist/commands/solo-qa.d.ts.map +1 -0
  44. package/dist/commands/solo-qa.js +253 -0
  45. package/dist/commands/solo-qa.js.map +1 -0
  46. package/dist/commands/solo-trajectory.d.ts +6 -0
  47. package/dist/commands/solo-trajectory.d.ts.map +1 -0
  48. package/dist/commands/solo-trajectory.js +268 -0
  49. package/dist/commands/solo-trajectory.js.map +1 -0
  50. package/dist/commands/solo.d.ts +11 -0
  51. package/dist/commands/solo.d.ts.map +1 -0
  52. package/dist/commands/solo.js +52 -0
  53. package/dist/commands/solo.js.map +1 -0
  54. package/dist/index.d.ts +18 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +18 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/lib/artifacts.d.ts +136 -0
  59. package/dist/lib/artifacts.d.ts.map +1 -0
  60. package/dist/lib/artifacts.js +147 -0
  61. package/dist/lib/artifacts.js.map +1 -0
  62. package/dist/lib/codebase-index.d.ts +5 -0
  63. package/dist/lib/codebase-index.d.ts.map +1 -0
  64. package/dist/lib/codebase-index.js +5 -0
  65. package/dist/lib/codebase-index.js.map +1 -0
  66. package/dist/lib/cycle-context.d.ts +62 -0
  67. package/dist/lib/cycle-context.d.ts.map +1 -0
  68. package/dist/lib/cycle-context.js +141 -0
  69. package/dist/lib/cycle-context.js.map +1 -0
  70. package/dist/lib/daemon-fork.d.ts +39 -0
  71. package/dist/lib/daemon-fork.d.ts.map +1 -0
  72. package/dist/lib/daemon-fork.js +164 -0
  73. package/dist/lib/daemon-fork.js.map +1 -0
  74. package/dist/lib/daemon-notifier.d.ts +29 -0
  75. package/dist/lib/daemon-notifier.d.ts.map +1 -0
  76. package/dist/lib/daemon-notifier.js +147 -0
  77. package/dist/lib/daemon-notifier.js.map +1 -0
  78. package/dist/lib/daemon.d.ts +75 -0
  79. package/dist/lib/daemon.d.ts.map +1 -0
  80. package/dist/lib/daemon.js +265 -0
  81. package/dist/lib/daemon.js.map +1 -0
  82. package/dist/lib/dedup-memory.d.ts +46 -0
  83. package/dist/lib/dedup-memory.d.ts.map +1 -0
  84. package/dist/lib/dedup-memory.js +190 -0
  85. package/dist/lib/dedup-memory.js.map +1 -0
  86. package/dist/lib/dedup.d.ts +37 -0
  87. package/dist/lib/dedup.d.ts.map +1 -0
  88. package/dist/lib/dedup.js +85 -0
  89. package/dist/lib/dedup.js.map +1 -0
  90. package/dist/lib/display-adapter-log.d.ts +26 -0
  91. package/dist/lib/display-adapter-log.d.ts.map +1 -0
  92. package/dist/lib/display-adapter-log.js +63 -0
  93. package/dist/lib/display-adapter-log.js.map +1 -0
  94. package/dist/lib/display-adapter-spinner.d.ts +28 -0
  95. package/dist/lib/display-adapter-spinner.d.ts.map +1 -0
  96. package/dist/lib/display-adapter-spinner.js +93 -0
  97. package/dist/lib/display-adapter-spinner.js.map +1 -0
  98. package/dist/lib/display-adapter-tui.d.ts +32 -0
  99. package/dist/lib/display-adapter-tui.d.ts.map +1 -0
  100. package/dist/lib/display-adapter-tui.js +77 -0
  101. package/dist/lib/display-adapter-tui.js.map +1 -0
  102. package/dist/lib/display-adapter.d.ts +40 -0
  103. package/dist/lib/display-adapter.d.ts.map +1 -0
  104. package/dist/lib/display-adapter.js +9 -0
  105. package/dist/lib/display-adapter.js.map +1 -0
  106. package/dist/lib/doctor.d.ts +45 -0
  107. package/dist/lib/doctor.d.ts.map +1 -0
  108. package/dist/lib/doctor.js +382 -0
  109. package/dist/lib/doctor.js.map +1 -0
  110. package/dist/lib/exclusion-index.d.ts +50 -0
  111. package/dist/lib/exclusion-index.d.ts.map +1 -0
  112. package/dist/lib/exclusion-index.js +249 -0
  113. package/dist/lib/exclusion-index.js.map +1 -0
  114. package/dist/lib/exec.d.ts +24 -0
  115. package/dist/lib/exec.d.ts.map +1 -0
  116. package/dist/lib/exec.js +295 -0
  117. package/dist/lib/exec.js.map +1 -0
  118. package/dist/lib/execution-backends/claude.d.ts +27 -0
  119. package/dist/lib/execution-backends/claude.d.ts.map +1 -0
  120. package/dist/lib/execution-backends/claude.js +161 -0
  121. package/dist/lib/execution-backends/claude.js.map +1 -0
  122. package/dist/lib/execution-backends/codex.d.ts +28 -0
  123. package/dist/lib/execution-backends/codex.d.ts.map +1 -0
  124. package/dist/lib/execution-backends/codex.js +216 -0
  125. package/dist/lib/execution-backends/codex.js.map +1 -0
  126. package/dist/lib/execution-backends/index.d.ts +10 -0
  127. package/dist/lib/execution-backends/index.d.ts.map +1 -0
  128. package/dist/lib/execution-backends/index.js +9 -0
  129. package/dist/lib/execution-backends/index.js.map +1 -0
  130. package/dist/lib/execution-backends/kimi.d.ts +25 -0
  131. package/dist/lib/execution-backends/kimi.d.ts.map +1 -0
  132. package/dist/lib/execution-backends/kimi.js +76 -0
  133. package/dist/lib/execution-backends/kimi.js.map +1 -0
  134. package/dist/lib/execution-backends/types.d.ts +38 -0
  135. package/dist/lib/execution-backends/types.d.ts.map +1 -0
  136. package/dist/lib/execution-backends/types.js +5 -0
  137. package/dist/lib/execution-backends/types.js.map +1 -0
  138. package/dist/lib/failure-classifier.d.ts +11 -0
  139. package/dist/lib/failure-classifier.d.ts.map +1 -0
  140. package/dist/lib/failure-classifier.js +24 -0
  141. package/dist/lib/failure-classifier.js.map +1 -0
  142. package/dist/lib/file-cooldown.d.ts +9 -0
  143. package/dist/lib/file-cooldown.d.ts.map +1 -0
  144. package/dist/lib/file-cooldown.js +75 -0
  145. package/dist/lib/file-cooldown.js.map +1 -0
  146. package/dist/lib/formulas.d.ts +52 -0
  147. package/dist/lib/formulas.d.ts.map +1 -0
  148. package/dist/lib/formulas.js +123 -0
  149. package/dist/lib/formulas.js.map +1 -0
  150. package/dist/lib/git.d.ts +9 -0
  151. package/dist/lib/git.d.ts.map +1 -0
  152. package/dist/lib/git.js +60 -0
  153. package/dist/lib/git.js.map +1 -0
  154. package/dist/lib/goals.d.ts +59 -0
  155. package/dist/lib/goals.d.ts.map +1 -0
  156. package/dist/lib/goals.js +216 -0
  157. package/dist/lib/goals.js.map +1 -0
  158. package/dist/lib/guidelines.d.ts +32 -0
  159. package/dist/lib/guidelines.d.ts.map +1 -0
  160. package/dist/lib/guidelines.js +102 -0
  161. package/dist/lib/guidelines.js.map +1 -0
  162. package/dist/lib/learnings.d.ts +65 -0
  163. package/dist/lib/learnings.d.ts.map +1 -0
  164. package/dist/lib/learnings.js +193 -0
  165. package/dist/lib/learnings.js.map +1 -0
  166. package/dist/lib/logger.d.ts +17 -0
  167. package/dist/lib/logger.d.ts.map +1 -0
  168. package/dist/lib/logger.js +42 -0
  169. package/dist/lib/logger.js.map +1 -0
  170. package/dist/lib/meta-learnings.d.ts +27 -0
  171. package/dist/lib/meta-learnings.d.ts.map +1 -0
  172. package/dist/lib/meta-learnings.js +270 -0
  173. package/dist/lib/meta-learnings.js.map +1 -0
  174. package/dist/lib/metrics.d.ts +48 -0
  175. package/dist/lib/metrics.d.ts.map +1 -0
  176. package/dist/lib/metrics.js +107 -0
  177. package/dist/lib/metrics.js.map +1 -0
  178. package/dist/lib/openai-local-execution.d.ts +29 -0
  179. package/dist/lib/openai-local-execution.d.ts.map +1 -0
  180. package/dist/lib/openai-local-execution.js +282 -0
  181. package/dist/lib/openai-local-execution.js.map +1 -0
  182. package/dist/lib/project-metadata/csharp.d.ts +6 -0
  183. package/dist/lib/project-metadata/csharp.d.ts.map +1 -0
  184. package/dist/lib/project-metadata/csharp.js +19 -0
  185. package/dist/lib/project-metadata/csharp.js.map +1 -0
  186. package/dist/lib/project-metadata/elixir.d.ts +6 -0
  187. package/dist/lib/project-metadata/elixir.d.ts.map +1 -0
  188. package/dist/lib/project-metadata/elixir.js +23 -0
  189. package/dist/lib/project-metadata/elixir.js.map +1 -0
  190. package/dist/lib/project-metadata/go.d.ts +6 -0
  191. package/dist/lib/project-metadata/go.d.ts.map +1 -0
  192. package/dist/lib/project-metadata/go.js +30 -0
  193. package/dist/lib/project-metadata/go.js.map +1 -0
  194. package/dist/lib/project-metadata/index.d.ts +13 -0
  195. package/dist/lib/project-metadata/index.d.ts.map +1 -0
  196. package/dist/lib/project-metadata/index.js +111 -0
  197. package/dist/lib/project-metadata/index.js.map +1 -0
  198. package/dist/lib/project-metadata/java.d.ts +6 -0
  199. package/dist/lib/project-metadata/java.d.ts.map +1 -0
  200. package/dist/lib/project-metadata/java.js +37 -0
  201. package/dist/lib/project-metadata/java.js.map +1 -0
  202. package/dist/lib/project-metadata/node.d.ts +6 -0
  203. package/dist/lib/project-metadata/node.d.ts.map +1 -0
  204. package/dist/lib/project-metadata/node.js +135 -0
  205. package/dist/lib/project-metadata/node.js.map +1 -0
  206. package/dist/lib/project-metadata/php.d.ts +6 -0
  207. package/dist/lib/project-metadata/php.d.ts.map +1 -0
  208. package/dist/lib/project-metadata/php.js +29 -0
  209. package/dist/lib/project-metadata/php.js.map +1 -0
  210. package/dist/lib/project-metadata/python.d.ts +6 -0
  211. package/dist/lib/project-metadata/python.d.ts.map +1 -0
  212. package/dist/lib/project-metadata/python.js +79 -0
  213. package/dist/lib/project-metadata/python.js.map +1 -0
  214. package/dist/lib/project-metadata/ruby.d.ts +6 -0
  215. package/dist/lib/project-metadata/ruby.d.ts.map +1 -0
  216. package/dist/lib/project-metadata/ruby.js +38 -0
  217. package/dist/lib/project-metadata/ruby.js.map +1 -0
  218. package/dist/lib/project-metadata/rust.d.ts +6 -0
  219. package/dist/lib/project-metadata/rust.d.ts.map +1 -0
  220. package/dist/lib/project-metadata/rust.js +33 -0
  221. package/dist/lib/project-metadata/rust.js.map +1 -0
  222. package/dist/lib/project-metadata/swift.d.ts +6 -0
  223. package/dist/lib/project-metadata/swift.d.ts.map +1 -0
  224. package/dist/lib/project-metadata/swift.js +19 -0
  225. package/dist/lib/project-metadata/swift.js.map +1 -0
  226. package/dist/lib/project-metadata/types.d.ts +37 -0
  227. package/dist/lib/project-metadata/types.d.ts.map +1 -0
  228. package/dist/lib/project-metadata/types.js +5 -0
  229. package/dist/lib/project-metadata/types.js.map +1 -0
  230. package/dist/lib/proposal-review.d.ts +9 -0
  231. package/dist/lib/proposal-review.d.ts.map +1 -0
  232. package/dist/lib/proposal-review.js +9 -0
  233. package/dist/lib/proposal-review.js.map +1 -0
  234. package/dist/lib/providers/claude.d.ts +6 -0
  235. package/dist/lib/providers/claude.d.ts.map +1 -0
  236. package/dist/lib/providers/claude.js +21 -0
  237. package/dist/lib/providers/claude.js.map +1 -0
  238. package/dist/lib/providers/codex.d.ts +6 -0
  239. package/dist/lib/providers/codex.d.ts.map +1 -0
  240. package/dist/lib/providers/codex.js +26 -0
  241. package/dist/lib/providers/codex.js.map +1 -0
  242. package/dist/lib/providers/index.d.ts +22 -0
  243. package/dist/lib/providers/index.d.ts.map +1 -0
  244. package/dist/lib/providers/index.js +39 -0
  245. package/dist/lib/providers/index.js.map +1 -0
  246. package/dist/lib/providers/kimi.d.ts +6 -0
  247. package/dist/lib/providers/kimi.d.ts.map +1 -0
  248. package/dist/lib/providers/kimi.js +22 -0
  249. package/dist/lib/providers/kimi.js.map +1 -0
  250. package/dist/lib/providers/openai-local.d.ts +8 -0
  251. package/dist/lib/providers/openai-local.d.ts.map +1 -0
  252. package/dist/lib/providers/openai-local.js +30 -0
  253. package/dist/lib/providers/openai-local.js.map +1 -0
  254. package/dist/lib/providers/types.d.ts +37 -0
  255. package/dist/lib/providers/types.d.ts.map +1 -0
  256. package/dist/lib/providers/types.js +5 -0
  257. package/dist/lib/providers/types.js.map +1 -0
  258. package/dist/lib/qa-stats.d.ts +113 -0
  259. package/dist/lib/qa-stats.d.ts.map +1 -0
  260. package/dist/lib/qa-stats.js +311 -0
  261. package/dist/lib/qa-stats.js.map +1 -0
  262. package/dist/lib/retention.d.ts +125 -0
  263. package/dist/lib/retention.d.ts.map +1 -0
  264. package/dist/lib/retention.js +767 -0
  265. package/dist/lib/retention.js.map +1 -0
  266. package/dist/lib/run-history.d.ts +52 -0
  267. package/dist/lib/run-history.d.ts.map +1 -0
  268. package/dist/lib/run-history.js +116 -0
  269. package/dist/lib/run-history.js.map +1 -0
  270. package/dist/lib/run-state.d.ts +129 -0
  271. package/dist/lib/run-state.d.ts.map +1 -0
  272. package/dist/lib/run-state.js +312 -0
  273. package/dist/lib/run-state.js.map +1 -0
  274. package/dist/lib/scope.d.ts +8 -0
  275. package/dist/lib/scope.d.ts.map +1 -0
  276. package/dist/lib/scope.js +8 -0
  277. package/dist/lib/scope.js.map +1 -0
  278. package/dist/lib/scout-prompt-builder.d.ts +22 -0
  279. package/dist/lib/scout-prompt-builder.d.ts.map +1 -0
  280. package/dist/lib/scout-prompt-builder.js +97 -0
  281. package/dist/lib/scout-prompt-builder.js.map +1 -0
  282. package/dist/lib/sectors.d.ts +21 -0
  283. package/dist/lib/sectors.d.ts.map +1 -0
  284. package/dist/lib/sectors.js +96 -0
  285. package/dist/lib/sectors.js.map +1 -0
  286. package/dist/lib/selection.d.ts +35 -0
  287. package/dist/lib/selection.d.ts.map +1 -0
  288. package/dist/lib/selection.js +110 -0
  289. package/dist/lib/selection.js.map +1 -0
  290. package/dist/lib/session-report.d.ts +26 -0
  291. package/dist/lib/session-report.d.ts.map +1 -0
  292. package/dist/lib/session-report.js +143 -0
  293. package/dist/lib/session-report.js.map +1 -0
  294. package/dist/lib/solo-auto-between-cycles.d.ts +10 -0
  295. package/dist/lib/solo-auto-between-cycles.d.ts.map +1 -0
  296. package/dist/lib/solo-auto-between-cycles.js +577 -0
  297. package/dist/lib/solo-auto-between-cycles.js.map +1 -0
  298. package/dist/lib/solo-auto-execute.d.ts +22 -0
  299. package/dist/lib/solo-auto-execute.d.ts.map +1 -0
  300. package/dist/lib/solo-auto-execute.js +530 -0
  301. package/dist/lib/solo-auto-execute.js.map +1 -0
  302. package/dist/lib/solo-auto-filter.d.ts +14 -0
  303. package/dist/lib/solo-auto-filter.d.ts.map +1 -0
  304. package/dist/lib/solo-auto-filter.js +311 -0
  305. package/dist/lib/solo-auto-filter.js.map +1 -0
  306. package/dist/lib/solo-auto-finalize.d.ts +6 -0
  307. package/dist/lib/solo-auto-finalize.d.ts.map +1 -0
  308. package/dist/lib/solo-auto-finalize.js +242 -0
  309. package/dist/lib/solo-auto-finalize.js.map +1 -0
  310. package/dist/lib/solo-auto-init-qa.d.ts +23 -0
  311. package/dist/lib/solo-auto-init-qa.d.ts.map +1 -0
  312. package/dist/lib/solo-auto-init-qa.js +183 -0
  313. package/dist/lib/solo-auto-init-qa.js.map +1 -0
  314. package/dist/lib/solo-auto-planning.d.ts +40 -0
  315. package/dist/lib/solo-auto-planning.d.ts.map +1 -0
  316. package/dist/lib/solo-auto-planning.js +171 -0
  317. package/dist/lib/solo-auto-planning.js.map +1 -0
  318. package/dist/lib/solo-auto-scout.d.ts +18 -0
  319. package/dist/lib/solo-auto-scout.d.ts.map +1 -0
  320. package/dist/lib/solo-auto-scout.js +269 -0
  321. package/dist/lib/solo-auto-scout.js.map +1 -0
  322. package/dist/lib/solo-auto-state.d.ts +20 -0
  323. package/dist/lib/solo-auto-state.d.ts.map +1 -0
  324. package/dist/lib/solo-auto-state.js +859 -0
  325. package/dist/lib/solo-auto-state.js.map +1 -0
  326. package/dist/lib/solo-auto-types.d.ts +197 -0
  327. package/dist/lib/solo-auto-types.d.ts.map +1 -0
  328. package/dist/lib/solo-auto-types.js +11 -0
  329. package/dist/lib/solo-auto-types.js.map +1 -0
  330. package/dist/lib/solo-auto-utils.d.ts +23 -0
  331. package/dist/lib/solo-auto-utils.d.ts.map +1 -0
  332. package/dist/lib/solo-auto-utils.js +53 -0
  333. package/dist/lib/solo-auto-utils.js.map +1 -0
  334. package/dist/lib/solo-auto.d.ts +25 -0
  335. package/dist/lib/solo-auto.d.ts.map +1 -0
  336. package/dist/lib/solo-auto.js +345 -0
  337. package/dist/lib/solo-auto.js.map +1 -0
  338. package/dist/lib/solo-ci.d.ts +84 -0
  339. package/dist/lib/solo-ci.d.ts.map +1 -0
  340. package/dist/lib/solo-ci.js +306 -0
  341. package/dist/lib/solo-ci.js.map +1 -0
  342. package/dist/lib/solo-config.d.ts +242 -0
  343. package/dist/lib/solo-config.d.ts.map +1 -0
  344. package/dist/lib/solo-config.js +354 -0
  345. package/dist/lib/solo-config.js.map +1 -0
  346. package/dist/lib/solo-cycle-formula.d.ts +36 -0
  347. package/dist/lib/solo-cycle-formula.d.ts.map +1 -0
  348. package/dist/lib/solo-cycle-formula.js +90 -0
  349. package/dist/lib/solo-cycle-formula.js.map +1 -0
  350. package/dist/lib/solo-git.d.ts +87 -0
  351. package/dist/lib/solo-git.d.ts.map +1 -0
  352. package/dist/lib/solo-git.js +365 -0
  353. package/dist/lib/solo-git.js.map +1 -0
  354. package/dist/lib/solo-hints.d.ts +32 -0
  355. package/dist/lib/solo-hints.d.ts.map +1 -0
  356. package/dist/lib/solo-hints.js +98 -0
  357. package/dist/lib/solo-hints.js.map +1 -0
  358. package/dist/lib/solo-prompt-builder.d.ts +12 -0
  359. package/dist/lib/solo-prompt-builder.d.ts.map +1 -0
  360. package/dist/lib/solo-prompt-builder.js +53 -0
  361. package/dist/lib/solo-prompt-builder.js.map +1 -0
  362. package/dist/lib/solo-qa-retry.d.ts +43 -0
  363. package/dist/lib/solo-qa-retry.d.ts.map +1 -0
  364. package/dist/lib/solo-qa-retry.js +125 -0
  365. package/dist/lib/solo-qa-retry.js.map +1 -0
  366. package/dist/lib/solo-remote.d.ts +14 -0
  367. package/dist/lib/solo-remote.d.ts.map +1 -0
  368. package/dist/lib/solo-remote.js +48 -0
  369. package/dist/lib/solo-remote.js.map +1 -0
  370. package/dist/lib/solo-session-summary.d.ts +52 -0
  371. package/dist/lib/solo-session-summary.d.ts.map +1 -0
  372. package/dist/lib/solo-session-summary.js +188 -0
  373. package/dist/lib/solo-session-summary.js.map +1 -0
  374. package/dist/lib/solo-stdin.d.ts +33 -0
  375. package/dist/lib/solo-stdin.d.ts.map +1 -0
  376. package/dist/lib/solo-stdin.js +299 -0
  377. package/dist/lib/solo-stdin.js.map +1 -0
  378. package/dist/lib/solo-ticket-qa.d.ts +19 -0
  379. package/dist/lib/solo-ticket-qa.d.ts.map +1 -0
  380. package/dist/lib/solo-ticket-qa.js +68 -0
  381. package/dist/lib/solo-ticket-qa.js.map +1 -0
  382. package/dist/lib/solo-ticket-types.d.ts +146 -0
  383. package/dist/lib/solo-ticket-types.d.ts.map +1 -0
  384. package/dist/lib/solo-ticket-types.js +26 -0
  385. package/dist/lib/solo-ticket-types.js.map +1 -0
  386. package/dist/lib/solo-ticket.d.ts +12 -0
  387. package/dist/lib/solo-ticket.d.ts.map +1 -0
  388. package/dist/lib/solo-ticket.js +192 -0
  389. package/dist/lib/solo-ticket.js.map +1 -0
  390. package/dist/lib/solo-utils.d.ts +130 -0
  391. package/dist/lib/solo-utils.d.ts.map +1 -0
  392. package/dist/lib/solo-utils.js +277 -0
  393. package/dist/lib/solo-utils.js.map +1 -0
  394. package/dist/lib/spindle/failure-patterns.d.ts +15 -0
  395. package/dist/lib/spindle/failure-patterns.d.ts.map +1 -0
  396. package/dist/lib/spindle/failure-patterns.js +22 -0
  397. package/dist/lib/spindle/failure-patterns.js.map +1 -0
  398. package/dist/lib/spindle/format.d.ts +9 -0
  399. package/dist/lib/spindle/format.d.ts.map +1 -0
  400. package/dist/lib/spindle/format.js +37 -0
  401. package/dist/lib/spindle/format.js.map +1 -0
  402. package/dist/lib/spindle/index.d.ts +33 -0
  403. package/dist/lib/spindle/index.d.ts.map +1 -0
  404. package/dist/lib/spindle/index.js +231 -0
  405. package/dist/lib/spindle/index.js.map +1 -0
  406. package/dist/lib/spindle/oscillation.d.ts +17 -0
  407. package/dist/lib/spindle/oscillation.d.ts.map +1 -0
  408. package/dist/lib/spindle/oscillation.js +96 -0
  409. package/dist/lib/spindle/oscillation.js.map +1 -0
  410. package/dist/lib/spindle/repetition.d.ts +16 -0
  411. package/dist/lib/spindle/repetition.d.ts.map +1 -0
  412. package/dist/lib/spindle/repetition.js +52 -0
  413. package/dist/lib/spindle/repetition.js.map +1 -0
  414. package/dist/lib/spindle/similarity.d.ts +14 -0
  415. package/dist/lib/spindle/similarity.d.ts.map +1 -0
  416. package/dist/lib/spindle/similarity.js +58 -0
  417. package/dist/lib/spindle/similarity.js.map +1 -0
  418. package/dist/lib/spindle/types.d.ts +97 -0
  419. package/dist/lib/spindle/types.d.ts.map +1 -0
  420. package/dist/lib/spindle/types.js +46 -0
  421. package/dist/lib/spindle/types.js.map +1 -0
  422. package/dist/lib/spinner.d.ts +41 -0
  423. package/dist/lib/spinner.d.ts.map +1 -0
  424. package/dist/lib/spinner.js +186 -0
  425. package/dist/lib/spinner.js.map +1 -0
  426. package/dist/lib/taste-profile.d.ts +26 -0
  427. package/dist/lib/taste-profile.d.ts.map +1 -0
  428. package/dist/lib/taste-profile.js +121 -0
  429. package/dist/lib/taste-profile.js.map +1 -0
  430. package/dist/lib/ticket-steps/index.d.ts +14 -0
  431. package/dist/lib/ticket-steps/index.d.ts.map +1 -0
  432. package/dist/lib/ticket-steps/index.js +13 -0
  433. package/dist/lib/ticket-steps/index.js.map +1 -0
  434. package/dist/lib/ticket-steps/step-agent.d.ts +6 -0
  435. package/dist/lib/ticket-steps/step-agent.d.ts.map +1 -0
  436. package/dist/lib/ticket-steps/step-agent.js +122 -0
  437. package/dist/lib/ticket-steps/step-agent.js.map +1 -0
  438. package/dist/lib/ticket-steps/step-cleanup.d.ts +6 -0
  439. package/dist/lib/ticket-steps/step-cleanup.d.ts.map +1 -0
  440. package/dist/lib/ticket-steps/step-cleanup.js +11 -0
  441. package/dist/lib/ticket-steps/step-cleanup.js.map +1 -0
  442. package/dist/lib/ticket-steps/step-commit.d.ts +6 -0
  443. package/dist/lib/ticket-steps/step-commit.d.ts.map +1 -0
  444. package/dist/lib/ticket-steps/step-commit.js +31 -0
  445. package/dist/lib/ticket-steps/step-commit.js.map +1 -0
  446. package/dist/lib/ticket-steps/step-pr.d.ts +6 -0
  447. package/dist/lib/ticket-steps/step-pr.d.ts.map +1 -0
  448. package/dist/lib/ticket-steps/step-pr.js +38 -0
  449. package/dist/lib/ticket-steps/step-pr.js.map +1 -0
  450. package/dist/lib/ticket-steps/step-push.d.ts +6 -0
  451. package/dist/lib/ticket-steps/step-push.d.ts.map +1 -0
  452. package/dist/lib/ticket-steps/step-push.js +35 -0
  453. package/dist/lib/ticket-steps/step-push.js.map +1 -0
  454. package/dist/lib/ticket-steps/step-qa.d.ts +6 -0
  455. package/dist/lib/ticket-steps/step-qa.d.ts.map +1 -0
  456. package/dist/lib/ticket-steps/step-qa.js +300 -0
  457. package/dist/lib/ticket-steps/step-qa.js.map +1 -0
  458. package/dist/lib/ticket-steps/step-scope.d.ts +6 -0
  459. package/dist/lib/ticket-steps/step-scope.d.ts.map +1 -0
  460. package/dist/lib/ticket-steps/step-scope.js +121 -0
  461. package/dist/lib/ticket-steps/step-scope.js.map +1 -0
  462. package/dist/lib/ticket-steps/step-spindle.d.ts +9 -0
  463. package/dist/lib/ticket-steps/step-spindle.d.ts.map +1 -0
  464. package/dist/lib/ticket-steps/step-spindle.js +160 -0
  465. package/dist/lib/ticket-steps/step-spindle.js.map +1 -0
  466. package/dist/lib/ticket-steps/step-worktree.d.ts +6 -0
  467. package/dist/lib/ticket-steps/step-worktree.d.ts.map +1 -0
  468. package/dist/lib/ticket-steps/step-worktree.js +157 -0
  469. package/dist/lib/ticket-steps/step-worktree.js.map +1 -0
  470. package/dist/lib/ticket-steps/types.d.ts +70 -0
  471. package/dist/lib/ticket-steps/types.d.ts.map +1 -0
  472. package/dist/lib/ticket-steps/types.js +8 -0
  473. package/dist/lib/ticket-steps/types.js.map +1 -0
  474. package/dist/lib/tool-command-map.d.ts +11 -0
  475. package/dist/lib/tool-command-map.d.ts.map +1 -0
  476. package/dist/lib/tool-command-map.js +24 -0
  477. package/dist/lib/tool-command-map.js.map +1 -0
  478. package/dist/lib/trajectory-generate.d.ts +24 -0
  479. package/dist/lib/trajectory-generate.d.ts.map +1 -0
  480. package/dist/lib/trajectory-generate.js +163 -0
  481. package/dist/lib/trajectory-generate.js.map +1 -0
  482. package/dist/lib/trajectory.d.ts +20 -0
  483. package/dist/lib/trajectory.d.ts.map +1 -0
  484. package/dist/lib/trajectory.js +104 -0
  485. package/dist/lib/trajectory.js.map +1 -0
  486. package/dist/lib/trigger-config.d.ts +12 -0
  487. package/dist/lib/trigger-config.d.ts.map +1 -0
  488. package/dist/lib/trigger-config.js +37 -0
  489. package/dist/lib/trigger-config.js.map +1 -0
  490. package/dist/lib/update-check.d.ts +28 -0
  491. package/dist/lib/update-check.d.ts.map +1 -0
  492. package/dist/lib/update-check.js +178 -0
  493. package/dist/lib/update-check.js.map +1 -0
  494. package/dist/lib/wave-scheduling.d.ts +18 -0
  495. package/dist/lib/wave-scheduling.d.ts.map +1 -0
  496. package/dist/lib/wave-scheduling.js +29 -0
  497. package/dist/lib/wave-scheduling.js.map +1 -0
  498. package/dist/tui/app.d.ts +17 -0
  499. package/dist/tui/app.d.ts.map +1 -0
  500. package/dist/tui/app.js +139 -0
  501. package/dist/tui/app.js.map +1 -0
  502. package/dist/tui/index.d.ts +10 -0
  503. package/dist/tui/index.d.ts.map +1 -0
  504. package/dist/tui/index.js +9 -0
  505. package/dist/tui/index.js.map +1 -0
  506. package/dist/tui/poller.d.ts +42 -0
  507. package/dist/tui/poller.d.ts.map +1 -0
  508. package/dist/tui/poller.js +62 -0
  509. package/dist/tui/poller.js.map +1 -0
  510. package/dist/tui/screens/auto.d.ts +85 -0
  511. package/dist/tui/screens/auto.d.ts.map +1 -0
  512. package/dist/tui/screens/auto.js +440 -0
  513. package/dist/tui/screens/auto.js.map +1 -0
  514. package/dist/tui/screens/overview.d.ts +9 -0
  515. package/dist/tui/screens/overview.d.ts.map +1 -0
  516. package/dist/tui/screens/overview.js +189 -0
  517. package/dist/tui/screens/overview.js.map +1 -0
  518. package/dist/tui/state.d.ts +93 -0
  519. package/dist/tui/state.d.ts.map +1 -0
  520. package/dist/tui/state.js +169 -0
  521. package/dist/tui/state.js.map +1 -0
  522. package/dist/tui/ticket-output-buffer.d.ts +23 -0
  523. package/dist/tui/ticket-output-buffer.d.ts.map +1 -0
  524. package/dist/tui/ticket-output-buffer.js +60 -0
  525. package/dist/tui/ticket-output-buffer.js.map +1 -0
  526. package/dist/tui/types.d.ts +18 -0
  527. package/dist/tui/types.d.ts.map +1 -0
  528. package/dist/tui/types.js +5 -0
  529. package/dist/tui/types.js.map +1 -0
  530. 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