@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,18 @@
1
+ export {};
2
+ /**
3
+ * @promptwheel/cli
4
+ *
5
+ * PromptWheel command-line interface.
6
+ *
7
+ * This package is a CLI tool only - it has no public API exports.
8
+ * Use it via the command line:
9
+ *
10
+ * npx @promptwheel/cli solo scout .
11
+ *
12
+ * Or installed globally:
13
+ * npm install -g @promptwheel/cli
14
+ * promptwheel solo scout .
15
+ *
16
+ * The CLI entry point is src/bin/promptwheel.ts
17
+ */
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG"}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ export {};
2
+ /**
3
+ * @promptwheel/cli
4
+ *
5
+ * PromptWheel command-line interface.
6
+ *
7
+ * This package is a CLI tool only - it has no public API exports.
8
+ * Use it via the command line:
9
+ *
10
+ * npx @promptwheel/cli solo scout .
11
+ *
12
+ * Or installed globally:
13
+ * npm install -g @promptwheel/cli
14
+ * promptwheel solo scout .
15
+ *
16
+ * The CLI entry point is src/bin/promptwheel.ts
17
+ */
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Artifact persistence helpers
3
+ *
4
+ * Writes structured data as JSON files in .promptwheel/artifacts/
5
+ * Used for proposals, run outputs, and other debugging data.
6
+ *
7
+ * Artifact Types:
8
+ * - proposals: Scout proposals before approval
9
+ * - executions: Agent execution logs (stdout, stderr, prompt)
10
+ * - diffs: Git diff snapshots
11
+ * - runs: Complete run summaries with all steps
12
+ * - violations: Scope violation details
13
+ */
14
+ /**
15
+ * Known artifact types - single source of truth
16
+ */
17
+ export declare const ARTIFACT_TYPES: readonly ["proposals", "executions", "diffs", "runs", "violations", "spindle", "traces"];
18
+ /**
19
+ * Known artifact types for type safety
20
+ */
21
+ export type ArtifactType = (typeof ARTIFACT_TYPES)[number];
22
+ /**
23
+ * Run summary artifact structure
24
+ */
25
+ export interface RunSummaryArtifact {
26
+ runId: string;
27
+ ticketId: string;
28
+ ticketTitle: string;
29
+ projectId: string;
30
+ success: boolean;
31
+ startedAt: string;
32
+ completedAt: string;
33
+ durationMs: number;
34
+ branchName?: string;
35
+ prUrl?: string;
36
+ error?: string;
37
+ steps: Array<{
38
+ name: string;
39
+ status: 'success' | 'failed' | 'skipped';
40
+ durationMs?: number;
41
+ errorMessage?: string;
42
+ artifactPath?: string;
43
+ }>;
44
+ artifacts: {
45
+ execution?: string;
46
+ diff?: string;
47
+ violations?: string;
48
+ };
49
+ }
50
+ /**
51
+ * Scope violations artifact structure
52
+ */
53
+ export interface ViolationsArtifact {
54
+ runId: string;
55
+ ticketId: string;
56
+ changedFiles: string[];
57
+ allowedPaths: string[];
58
+ forbiddenPaths: string[];
59
+ violations: Array<{
60
+ file: string;
61
+ violation: 'not_in_allowed' | 'in_forbidden';
62
+ pattern?: string;
63
+ }>;
64
+ }
65
+ /**
66
+ * Options for writing an artifact
67
+ */
68
+ interface WriteArtifactOptions {
69
+ /** Base directory (usually .promptwheel) */
70
+ baseDir: string;
71
+ /** Artifact type (creates subfolder) */
72
+ type: string;
73
+ /** Unique identifier (used in filename) */
74
+ id: string;
75
+ /** Data to serialize */
76
+ data: unknown;
77
+ /** Optional timestamp suffix (default: true) */
78
+ timestamp?: boolean;
79
+ }
80
+ /**
81
+ * Write a JSON artifact file
82
+ *
83
+ * Creates: {baseDir}/artifacts/{type}/{id}[-timestamp].json
84
+ *
85
+ * @returns The full path to the written file
86
+ */
87
+ export declare function writeJsonArtifact(opts: WriteArtifactOptions): string;
88
+ /**
89
+ * Read a JSON artifact file
90
+ *
91
+ * @returns Parsed data or null if file doesn't exist
92
+ */
93
+ export declare function readJsonArtifact<T = unknown>(filePath: string): T | null;
94
+ /**
95
+ * List artifacts of a given type
96
+ *
97
+ * @returns Array of { path, id, timestamp } sorted by timestamp desc
98
+ */
99
+ export declare function listArtifacts(baseDir: string, type: string): Array<{
100
+ path: string;
101
+ id: string;
102
+ timestamp: number;
103
+ }>;
104
+ /**
105
+ * Get the most recent artifact of a given type
106
+ */
107
+ export declare function getLatestArtifact<T = unknown>(baseDir: string, type: string): {
108
+ path: string;
109
+ data: T;
110
+ } | null;
111
+ /**
112
+ * Get all artifacts for a specific run ID
113
+ *
114
+ * Searches across all artifact types for files matching the run ID.
115
+ */
116
+ export declare function getArtifactsForRun(baseDir: string, runId: string): Record<ArtifactType, {
117
+ path: string;
118
+ data: unknown;
119
+ } | null>;
120
+ /**
121
+ * Get artifact by run ID and type
122
+ */
123
+ export declare function getArtifactByRunId<T = unknown>(baseDir: string, runId: string, type: ArtifactType): {
124
+ path: string;
125
+ data: T;
126
+ } | null;
127
+ /**
128
+ * Get all artifacts in the base directory, grouped by type
129
+ */
130
+ export declare function getAllArtifacts(baseDir: string): Record<ArtifactType, Array<{
131
+ path: string;
132
+ id: string;
133
+ timestamp: number;
134
+ }>>;
135
+ export {};
136
+ //# sourceMappingURL=artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/lib/artifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Artifact persistence helpers
3
+ *
4
+ * Writes structured data as JSON files in .promptwheel/artifacts/
5
+ * Used for proposals, run outputs, and other debugging data.
6
+ *
7
+ * Artifact Types:
8
+ * - proposals: Scout proposals before approval
9
+ * - executions: Agent execution logs (stdout, stderr, prompt)
10
+ * - diffs: Git diff snapshots
11
+ * - runs: Complete run summaries with all steps
12
+ * - violations: Scope violation details
13
+ */
14
+ import * as fs from 'node:fs';
15
+ import * as path from 'node:path';
16
+ /**
17
+ * Known artifact types - single source of truth
18
+ */
19
+ export const ARTIFACT_TYPES = [
20
+ 'proposals',
21
+ 'executions',
22
+ 'diffs',
23
+ 'runs',
24
+ 'violations',
25
+ 'spindle',
26
+ 'traces',
27
+ ];
28
+ /**
29
+ * Write a JSON artifact file
30
+ *
31
+ * Creates: {baseDir}/artifacts/{type}/{id}[-timestamp].json
32
+ *
33
+ * @returns The full path to the written file
34
+ */
35
+ export function writeJsonArtifact(opts) {
36
+ const { baseDir, type, id, data, timestamp = true } = opts;
37
+ const artifactsDir = path.join(baseDir, 'artifacts', type);
38
+ // Ensure directory exists
39
+ if (!fs.existsSync(artifactsDir)) {
40
+ fs.mkdirSync(artifactsDir, { recursive: true });
41
+ }
42
+ // Build filename
43
+ const ts = timestamp ? `-${Date.now()}` : '';
44
+ const filename = `${id}${ts}.json`;
45
+ const filePath = path.join(artifactsDir, filename);
46
+ // Write atomically (write to temp, then rename)
47
+ const tempPath = `${filePath}.tmp`;
48
+ fs.writeFileSync(tempPath, JSON.stringify(data, null, 2));
49
+ fs.renameSync(tempPath, filePath);
50
+ return filePath;
51
+ }
52
+ /**
53
+ * Read a JSON artifact file
54
+ *
55
+ * @returns Parsed data or null if file doesn't exist
56
+ */
57
+ export function readJsonArtifact(filePath) {
58
+ if (!fs.existsSync(filePath)) {
59
+ return null;
60
+ }
61
+ const content = fs.readFileSync(filePath, 'utf-8');
62
+ return JSON.parse(content);
63
+ }
64
+ /**
65
+ * List artifacts of a given type
66
+ *
67
+ * @returns Array of { path, id, timestamp } sorted by timestamp desc
68
+ */
69
+ export function listArtifacts(baseDir, type) {
70
+ const artifactsDir = path.join(baseDir, 'artifacts', type);
71
+ if (!fs.existsSync(artifactsDir)) {
72
+ return [];
73
+ }
74
+ const files = fs.readdirSync(artifactsDir)
75
+ .filter(f => f.endsWith('.json'))
76
+ .map(f => {
77
+ // eslint-disable-next-line security/detect-unsafe-regex
78
+ const match = f.match(/^(.+?)(?:-(\d+))?\.json$/);
79
+ if (!match)
80
+ return null;
81
+ const filePath = path.join(artifactsDir, f);
82
+ const stat = fs.statSync(filePath);
83
+ return {
84
+ path: filePath,
85
+ id: match[1],
86
+ timestamp: match[2] ? parseInt(match[2], 10) : stat.mtimeMs,
87
+ };
88
+ })
89
+ .filter((x) => x !== null);
90
+ // Sort by timestamp descending (most recent first)
91
+ return files.sort((a, b) => b.timestamp - a.timestamp);
92
+ }
93
+ /**
94
+ * Get the most recent artifact of a given type
95
+ */
96
+ export function getLatestArtifact(baseDir, type) {
97
+ const artifacts = listArtifacts(baseDir, type);
98
+ if (artifacts.length === 0)
99
+ return null;
100
+ const latest = artifacts[0];
101
+ const data = readJsonArtifact(latest.path);
102
+ if (data === null)
103
+ return null;
104
+ return { path: latest.path, data };
105
+ }
106
+ /**
107
+ * Get all artifacts for a specific run ID
108
+ *
109
+ * Searches across all artifact types for files matching the run ID.
110
+ */
111
+ export function getArtifactsForRun(baseDir, runId) {
112
+ const result = {};
113
+ for (const type of ARTIFACT_TYPES) {
114
+ const artifacts = listArtifacts(baseDir, type);
115
+ const match = artifacts.find(a => a.id === runId || a.id.startsWith(runId));
116
+ if (match) {
117
+ const data = readJsonArtifact(match.path);
118
+ result[type] = data ? { path: match.path, data } : null;
119
+ }
120
+ else {
121
+ result[type] = null;
122
+ }
123
+ }
124
+ return result;
125
+ }
126
+ /**
127
+ * Get artifact by run ID and type
128
+ */
129
+ export function getArtifactByRunId(baseDir, runId, type) {
130
+ const artifacts = listArtifacts(baseDir, type);
131
+ const match = artifacts.find(a => a.id === runId || a.id.startsWith(runId));
132
+ if (!match)
133
+ return null;
134
+ const data = readJsonArtifact(match.path);
135
+ return data ? { path: match.path, data } : null;
136
+ }
137
+ /**
138
+ * Get all artifacts in the base directory, grouped by type
139
+ */
140
+ export function getAllArtifacts(baseDir) {
141
+ const result = {};
142
+ for (const type of ARTIFACT_TYPES) {
143
+ result[type] = listArtifacts(baseDir, type);
144
+ }
145
+ return result;
146
+ }
147
+ //# sourceMappingURL=artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/lib/artifacts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Re-exports from @promptwheel/core — single source of truth for codebase indexing.
3
+ */
4
+ export { buildCodebaseIndex, refreshCodebaseIndex, hasStructuralChanges, formatIndexForPrompt, getTrackedDirectories, SOURCE_EXTENSIONS, type CodebaseIndex, type ModuleEntry, type LargeFileEntry, type ClassificationConfidence, } from '@promptwheel/core/codebase-index';
5
+ //# sourceMappingURL=codebase-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codebase-index.d.ts","sourceRoot":"","sources":["../../src/lib/codebase-index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,wBAAwB,GAC9B,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Re-exports from @promptwheel/core — single source of truth for codebase indexing.
3
+ */
4
+ export { buildCodebaseIndex, refreshCodebaseIndex, hasStructuralChanges, formatIndexForPrompt, getTrackedDirectories, SOURCE_EXTENSIONS, } from '@promptwheel/core/codebase-index';
5
+ //# sourceMappingURL=codebase-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codebase-index.js","sourceRoot":"","sources":["../../src/lib/codebase-index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAKlB,MAAM,kCAAkC,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Cycle context for convergence-aware scout prompting.
3
+ *
4
+ * Tracks recent cycle outcomes so the scout can propose follow-up work
5
+ * instead of random scattershot. Also computes convergence metrics
6
+ * to guide session-level decisions.
7
+ */
8
+ import type { SectorState } from './sectors.js';
9
+ export interface CycleSummary {
10
+ cycle: number;
11
+ scope: string;
12
+ formula: string;
13
+ succeeded: Array<{
14
+ title: string;
15
+ category: string;
16
+ }>;
17
+ failed: Array<{
18
+ title: string;
19
+ reason: string;
20
+ }>;
21
+ noChanges: string[];
22
+ }
23
+ /**
24
+ * Build an XML block summarizing recent cycle outcomes for the scout prompt.
25
+ * Optionally includes recent diff summaries for follow-up awareness.
26
+ */
27
+ export declare function buildCycleContextBlock(recentCycles: CycleSummary[], recentDiffs?: Array<{
28
+ title: string;
29
+ summary: string;
30
+ files: string[];
31
+ cycle: number;
32
+ }>): string;
33
+ /**
34
+ * Ring buffer push — keeps at most `max` entries.
35
+ */
36
+ export declare function pushCycleSummary(buf: CycleSummary[], summary: CycleSummary, max?: number): CycleSummary[];
37
+ export interface ConvergenceMetrics {
38
+ polishedSectorPct: number;
39
+ avgProposalYield: number;
40
+ learningsDensity: number;
41
+ successRateTrend: 'improving' | 'stable' | 'declining';
42
+ suggestedAction: 'continue' | 'widen_scope' | 'deepen' | 'stop';
43
+ mergeRate: number;
44
+ velocity: {
45
+ prsPerHour: number;
46
+ mergeRatePercent: number;
47
+ };
48
+ }
49
+ /**
50
+ * Compute convergence metrics from sectors, learnings count, and recent cycles.
51
+ */
52
+ export declare function computeConvergenceMetrics(sectorState: SectorState, learningsCount: number, recentCycles: CycleSummary[], sessionContext?: {
53
+ elapsedMs: number;
54
+ prsCreated: number;
55
+ prsMerged: number;
56
+ prsClosed: number;
57
+ }): ConvergenceMetrics;
58
+ /**
59
+ * Format a one-liner convergence summary for console output.
60
+ */
61
+ export declare function formatConvergenceOneLiner(m: ConvergenceMetrics): string;
62
+ //# sourceMappingURL=cycle-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cycle-context.d.ts","sourceRoot":"","sources":["../../src/lib/cycle-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACtD,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,YAAY,EAAE,EAC5B,WAAW,CAAC,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GACtF,MAAM,CA4CR;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,YAAY,EAAE,EACnB,OAAO,EAAE,YAAY,EACrB,GAAG,GAAE,MAAU,GACd,YAAY,EAAE,CAMhB;AAMD,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACvD,eAAe,EAAE,UAAU,GAAG,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,YAAY,EAAE,EAC5B,cAAc,CAAC,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC/F,kBAAkB,CA+DpB;AAQD;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,kBAAkB,GAAG,MAAM,CAKvE"}
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Cycle context for convergence-aware scout prompting.
3
+ *
4
+ * Tracks recent cycle outcomes so the scout can propose follow-up work
5
+ * instead of random scattershot. Also computes convergence metrics
6
+ * to guide session-level decisions.
7
+ */
8
+ /**
9
+ * Build an XML block summarizing recent cycle outcomes for the scout prompt.
10
+ * Optionally includes recent diff summaries for follow-up awareness.
11
+ */
12
+ export function buildCycleContextBlock(recentCycles, recentDiffs) {
13
+ if ((!recentCycles || recentCycles.length === 0) && (!recentDiffs || recentDiffs.length === 0))
14
+ return '';
15
+ const lines = ['<recent-cycles>', '## Recent Cycle Outcomes', ''];
16
+ for (const c of (recentCycles ?? [])) {
17
+ lines.push(`### Cycle ${c.cycle} — scope: ${c.scope}, formula: ${c.formula}`);
18
+ if (c.succeeded.length > 0) {
19
+ lines.push('Succeeded:');
20
+ for (const s of c.succeeded) {
21
+ lines.push(`- [${s.category}] ${s.title}`);
22
+ }
23
+ }
24
+ if (c.failed.length > 0) {
25
+ lines.push('Failed:');
26
+ for (const f of c.failed) {
27
+ lines.push(`- ${f.title} (${f.reason})`);
28
+ }
29
+ }
30
+ if (c.noChanges.length > 0) {
31
+ lines.push('No changes produced:');
32
+ for (const nc of c.noChanges) {
33
+ lines.push(`- ${nc}`);
34
+ }
35
+ }
36
+ lines.push('');
37
+ }
38
+ // Append recent diffs for follow-up awareness
39
+ if (recentDiffs && recentDiffs.length > 0) {
40
+ lines.push('<recent-diffs>');
41
+ for (const d of recentDiffs.slice(-5)) {
42
+ lines.push(`Title: "${d.title}", Files: [${d.files.join(', ')}], Changes: ${d.summary}`);
43
+ }
44
+ lines.push('Consider proposing follow-up work based on these recent changes.');
45
+ lines.push('</recent-diffs>');
46
+ lines.push('');
47
+ }
48
+ lines.push('Use these outcomes to propose FOLLOW-UP work.');
49
+ lines.push('Fix what failed. Build on what succeeded. Avoid repeating no-change proposals.');
50
+ lines.push('</recent-cycles>');
51
+ return lines.join('\n');
52
+ }
53
+ /**
54
+ * Ring buffer push — keeps at most `max` entries.
55
+ */
56
+ export function pushCycleSummary(buf, summary, max = 5) {
57
+ const result = [...buf, summary];
58
+ if (result.length > max) {
59
+ return result.slice(result.length - max);
60
+ }
61
+ return result;
62
+ }
63
+ /**
64
+ * Compute convergence metrics from sectors, learnings count, and recent cycles.
65
+ */
66
+ export function computeConvergenceMetrics(sectorState, learningsCount, recentCycles, sessionContext) {
67
+ const prodSectors = sectorState.sectors.filter(s => s.production && s.fileCount > 0);
68
+ const polishedCount = prodSectors.filter(s => s.polishedAt > 0).length;
69
+ const polishedSectorPct = prodSectors.length > 0
70
+ ? Math.round((polishedCount / prodSectors.length) * 100)
71
+ : 0;
72
+ const scannedSectors = prodSectors.filter(s => s.scanCount > 0);
73
+ const avgProposalYield = scannedSectors.length > 0
74
+ ? scannedSectors.reduce((sum, s) => sum + s.proposalYield, 0) / scannedSectors.length
75
+ : 0;
76
+ const totalFiles = prodSectors.reduce((sum, s) => sum + s.fileCount, 0);
77
+ const learningsDensity = totalFiles > 0 ? learningsCount / totalFiles : 0;
78
+ // Compute success rate trend from last 3 cycles
79
+ let successRateTrend = 'stable';
80
+ if (recentCycles.length >= 3) {
81
+ const rates = recentCycles.slice(-3).map(c => {
82
+ const total = c.succeeded.length + c.failed.length + c.noChanges.length;
83
+ return total > 0 ? c.succeeded.length / total : 0;
84
+ });
85
+ const first = rates[0];
86
+ const last = rates[rates.length - 1];
87
+ if (last - first > 0.1)
88
+ successRateTrend = 'improving';
89
+ else if (first - last > 0.1)
90
+ successRateTrend = 'declining';
91
+ }
92
+ // Determine suggested action
93
+ let suggestedAction = 'continue';
94
+ if (polishedSectorPct > 80 && avgProposalYield < 0.5) {
95
+ suggestedAction = 'stop';
96
+ }
97
+ else if (polishedSectorPct > 60 && successRateTrend === 'declining') {
98
+ suggestedAction = 'widen_scope';
99
+ }
100
+ else if (avgProposalYield > 1.5 && successRateTrend === 'improving') {
101
+ suggestedAction = 'deepen';
102
+ }
103
+ // Merge rate from sector-level data
104
+ let totalMerged = 0;
105
+ let totalClosed = 0;
106
+ for (const s of prodSectors) {
107
+ totalMerged += s.mergeCount ?? 0;
108
+ totalClosed += s.closedCount ?? 0;
109
+ }
110
+ const mergeRate = (totalMerged + totalClosed) > 0
111
+ ? totalMerged / (totalMerged + totalClosed)
112
+ : NaN;
113
+ // Velocity from session context
114
+ const elapsedHours = sessionContext ? sessionContext.elapsedMs / 3_600_000 : 0;
115
+ const prsPerHour = elapsedHours > 0 ? (sessionContext?.prsCreated ?? 0) / elapsedHours : 0;
116
+ const mergedTotal = sessionContext?.prsMerged ?? 0;
117
+ const closedTotal = sessionContext?.prsClosed ?? 0;
118
+ const mergeRatePercent = (mergedTotal + closedTotal) > 0
119
+ ? Math.round((mergedTotal / (mergedTotal + closedTotal)) * 100)
120
+ : 0;
121
+ return {
122
+ polishedSectorPct, avgProposalYield, learningsDensity, successRateTrend, suggestedAction,
123
+ mergeRate,
124
+ velocity: { prsPerHour, mergeRatePercent },
125
+ };
126
+ }
127
+ const TREND_ARROWS = {
128
+ improving: '\u2191',
129
+ stable: '\u2192',
130
+ declining: '\u2193',
131
+ };
132
+ /**
133
+ * Format a one-liner convergence summary for console output.
134
+ */
135
+ export function formatConvergenceOneLiner(m) {
136
+ const arrow = TREND_ARROWS[m.successRateTrend] ?? '→';
137
+ const velStr = m.velocity.prsPerHour > 0 ? `, ${m.velocity.prsPerHour.toFixed(1)} PRs/h` : '';
138
+ const mergeStr = !isNaN(m.mergeRate) ? `, merge ${Math.round(m.mergeRate * 100)}%` : '';
139
+ return `Convergence: ${m.polishedSectorPct}% polished, yield ${m.avgProposalYield.toFixed(1)}/scan, success ${arrow}${velStr}${mergeStr} — ${m.suggestedAction}`;
140
+ }
141
+ //# sourceMappingURL=cycle-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cycle-context.js","sourceRoot":"","sources":["../../src/lib/cycle-context.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAiBH;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,YAA4B,EAC5B,WAAuF;IAEvF,IAAI,CAAC,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IAE1G,MAAM,KAAK,GAAa,CAAC,iBAAiB,EAAE,0BAA0B,EAAE,EAAE,CAAC,CAAC;IAE5E,KAAK,MAAM,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,aAAa,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACzB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;QACD,IAAI,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACnC,KAAK,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,8CAA8C;IAC9C,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3F,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QAC/E,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IAC5D,KAAK,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAC;IAC7F,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAE/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAAmB,EACnB,OAAqB,EACrB,MAAc,CAAC;IAEf,MAAM,MAAM,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAgBD;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,WAAwB,EACxB,cAAsB,EACtB,YAA4B,EAC5B,cAAgG;IAEhG,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IACrF,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAE,CAAS,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IAChF,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC;QAC9C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;QACxD,CAAC,CAAC,CAAC,CAAC;IAEN,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAChE,MAAM,gBAAgB,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC;QAChD,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM;QACrF,CAAC,CAAC,CAAC,CAAC;IAEN,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACxE,MAAM,gBAAgB,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1E,gDAAgD;IAChD,IAAI,gBAAgB,GAA2C,QAAQ,CAAC;IACxE,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC;YACxE,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACvB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,IAAI,GAAG,KAAK,GAAG,GAAG;YAAE,gBAAgB,GAAG,WAAW,CAAC;aAClD,IAAI,KAAK,GAAG,IAAI,GAAG,GAAG;YAAE,gBAAgB,GAAG,WAAW,CAAC;IAC9D,CAAC;IAED,6BAA6B;IAC7B,IAAI,eAAe,GAA0C,UAAU,CAAC;IACxE,IAAI,iBAAiB,GAAG,EAAE,IAAI,gBAAgB,GAAG,GAAG,EAAE,CAAC;QACrD,eAAe,GAAG,MAAM,CAAC;IAC3B,CAAC;SAAM,IAAI,iBAAiB,GAAG,EAAE,IAAI,gBAAgB,KAAK,WAAW,EAAE,CAAC;QACtE,eAAe,GAAG,aAAa,CAAC;IAClC,CAAC;SAAM,IAAI,gBAAgB,GAAG,GAAG,IAAI,gBAAgB,KAAK,WAAW,EAAE,CAAC;QACtE,eAAe,GAAG,QAAQ,CAAC;IAC7B,CAAC;IAED,oCAAoC;IACpC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,WAAW,IAAK,CAAS,CAAC,UAAU,IAAI,CAAC,CAAC;QAC1C,WAAW,IAAK,CAAS,CAAC,WAAW,IAAI,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,SAAS,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC;QAC/C,CAAC,CAAC,WAAW,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;QAC3C,CAAC,CAAC,GAAG,CAAC;IAER,gCAAgC;IAChC,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAM,UAAU,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,UAAU,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,WAAW,GAAG,cAAc,EAAE,SAAS,IAAI,CAAC,CAAC;IACnD,MAAM,WAAW,GAAG,cAAc,EAAE,SAAS,IAAI,CAAC,CAAC;IACnD,MAAM,gBAAgB,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC;QACtD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC,CAAC,GAAG,GAAG,CAAC;QAC/D,CAAC,CAAC,CAAC,CAAC;IAEN,OAAO;QACL,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe;QACxF,SAAS;QACT,QAAQ,EAAE,EAAE,UAAU,EAAE,gBAAgB,EAAE;KAC3C,CAAC;AACJ,CAAC;AAED,MAAM,YAAY,GAA2B;IAC3C,SAAS,EAAE,QAAQ;IACnB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,QAAQ;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,CAAqB;IAC7D,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC;IACtD,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9F,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,OAAO,gBAAgB,CAAC,CAAC,iBAAiB,qBAAqB,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,KAAK,GAAG,MAAM,GAAG,QAAQ,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;AACnK,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Daemon forking and PID management.
3
+ *
4
+ * Handles spawning a detached child process, PID file management,
5
+ * and log rotation.
6
+ */
7
+ export declare function readDaemonPid(repoRoot: string): number | null;
8
+ export declare function writeDaemonPid(repoRoot: string, pid: number): void;
9
+ export declare function removeDaemonPid(repoRoot: string): void;
10
+ /**
11
+ * Check if a daemon process is alive via signal 0.
12
+ */
13
+ export declare function isDaemonRunning(repoRoot: string): boolean;
14
+ export interface ForkOptions {
15
+ interval?: number;
16
+ formula?: string;
17
+ scope?: string;
18
+ }
19
+ /**
20
+ * Fork a detached daemon child process.
21
+ * The child runs `promptwheel solo daemon __run` with the same env.
22
+ * Returns the child PID.
23
+ */
24
+ export declare function forkDaemon(repoRoot: string, options: ForkOptions): number;
25
+ /**
26
+ * Stop the daemon process gracefully.
27
+ * Sends SIGTERM, waits up to 10s, then SIGKILL as last resort.
28
+ */
29
+ export declare function stopDaemon(repoRoot: string): Promise<boolean>;
30
+ /**
31
+ * Rotate daemon.log when it exceeds maxSizeMB.
32
+ * Renames current log to daemon.log.1, starts fresh.
33
+ */
34
+ export declare function rotateDaemonLog(repoRoot: string, maxSizeMB: number): void;
35
+ /**
36
+ * Get the daemon log file path.
37
+ */
38
+ export declare function getDaemonLogPath(repoRoot: string): string;
39
+ //# sourceMappingURL=daemon-fork.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon-fork.d.ts","sourceRoot":"","sources":["../../src/lib/daemon-fork.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS7D;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAIlE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAKtD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAWzD;AAID,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CA6BzE;AAID;;;GAGG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsCnE;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAczE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEzD"}