ridgeline 0.4.4 → 0.5.7

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 (323) hide show
  1. package/README.md +1 -14
  2. package/dist/agents/core/builder.md +15 -15
  3. package/dist/agents/core/planner.md +12 -12
  4. package/dist/agents/core/reviewer.md +19 -19
  5. package/dist/agents/core/shaper.md +44 -45
  6. package/dist/agents/core/specifier.md +20 -23
  7. package/dist/agents/planners/context.md +10 -10
  8. package/dist/agents/planners/simplicity.md +1 -1
  9. package/dist/agents/planners/thoroughness.md +2 -2
  10. package/dist/agents/planners/velocity.md +2 -2
  11. package/dist/agents/specialists/auditor.md +34 -33
  12. package/dist/agents/specialists/explorer.md +74 -0
  13. package/dist/agents/specialists/tester.md +24 -24
  14. package/dist/agents/specialists/verifier.md +17 -20
  15. package/dist/agents/specifiers/clarity.md +1 -1
  16. package/dist/agents/specifiers/completeness.md +2 -2
  17. package/dist/agents/specifiers/pragmatism.md +2 -2
  18. package/dist/cli.js +15 -10
  19. package/dist/cli.js.map +1 -1
  20. package/dist/commands/build.js +42 -75
  21. package/dist/commands/build.js.map +1 -1
  22. package/dist/commands/clean.d.ts +1 -1
  23. package/dist/commands/clean.js +2 -5
  24. package/dist/commands/clean.js.map +1 -1
  25. package/dist/commands/create.d.ts +1 -0
  26. package/dist/commands/create.js +5 -1
  27. package/dist/commands/create.js.map +1 -1
  28. package/dist/commands/dry-run.js +1 -1
  29. package/dist/commands/dry-run.js.map +1 -1
  30. package/dist/commands/plan.js +3 -3
  31. package/dist/commands/plan.js.map +1 -1
  32. package/dist/commands/rewind.js +1 -6
  33. package/dist/commands/rewind.js.map +1 -1
  34. package/dist/commands/shape.d.ts +1 -0
  35. package/dist/commands/shape.js +9 -7
  36. package/dist/commands/shape.js.map +1 -1
  37. package/dist/commands/spec.d.ts +1 -0
  38. package/dist/commands/spec.js +2 -1
  39. package/dist/commands/spec.js.map +1 -1
  40. package/dist/config.js +3 -3
  41. package/dist/config.js.map +1 -1
  42. package/dist/engine/claude/claude.exec.js +2 -2
  43. package/dist/engine/claude/stream.display.d.ts +17 -0
  44. package/dist/engine/claude/stream.display.js +101 -0
  45. package/dist/engine/claude/stream.display.js.map +1 -0
  46. package/dist/engine/claude/stream.parse.d.ts +21 -0
  47. package/dist/engine/claude/stream.parse.js +119 -0
  48. package/dist/engine/claude/stream.parse.js.map +1 -0
  49. package/dist/engine/claude/stream.result.d.ts +6 -0
  50. package/dist/engine/claude/stream.result.js +61 -0
  51. package/dist/engine/claude/stream.result.js.map +1 -0
  52. package/dist/engine/discovery/agent.registry.d.ts +27 -0
  53. package/dist/engine/discovery/agent.registry.js +152 -0
  54. package/dist/engine/discovery/agent.registry.js.map +1 -0
  55. package/dist/engine/discovery/agent.scan.d.ts +0 -1
  56. package/dist/engine/discovery/agent.scan.js +1 -20
  57. package/dist/engine/discovery/agent.scan.js.map +1 -1
  58. package/dist/engine/discovery/flavour.resolve.d.ts +11 -0
  59. package/dist/engine/discovery/flavour.resolve.js +98 -0
  60. package/dist/engine/discovery/flavour.resolve.js.map +1 -0
  61. package/dist/engine/index.d.ts +6 -3
  62. package/dist/engine/index.js +12 -9
  63. package/dist/engine/index.js.map +1 -1
  64. package/dist/engine/pipeline/build.exec.js +7 -5
  65. package/dist/engine/pipeline/build.exec.js.map +1 -1
  66. package/dist/engine/pipeline/ensemble.exec.d.ts +3 -4
  67. package/dist/engine/pipeline/ensemble.exec.js +12 -104
  68. package/dist/engine/pipeline/ensemble.exec.js.map +1 -1
  69. package/dist/engine/pipeline/phase.sequence.js +69 -67
  70. package/dist/engine/pipeline/phase.sequence.js.map +1 -1
  71. package/dist/engine/pipeline/pipeline.shared.js +5 -4
  72. package/dist/engine/pipeline/pipeline.shared.js.map +1 -1
  73. package/dist/engine/pipeline/review.exec.js +9 -7
  74. package/dist/engine/pipeline/review.exec.js.map +1 -1
  75. package/dist/engine/pipeline/specify.exec.d.ts +1 -0
  76. package/dist/engine/pipeline/specify.exec.js +5 -3
  77. package/dist/engine/pipeline/specify.exec.js.map +1 -1
  78. package/dist/engine/worktree.d.ts +0 -8
  79. package/dist/engine/worktree.js +2 -163
  80. package/dist/engine/worktree.js.map +1 -1
  81. package/dist/flavours/data-analysis/core/builder.md +119 -0
  82. package/dist/flavours/data-analysis/core/planner.md +102 -0
  83. package/dist/flavours/data-analysis/core/reviewer.md +148 -0
  84. package/dist/flavours/data-analysis/core/shaper.md +139 -0
  85. package/dist/flavours/data-analysis/core/specifier.md +74 -0
  86. package/dist/flavours/data-analysis/planners/context.md +50 -0
  87. package/dist/flavours/data-analysis/planners/simplicity.md +7 -0
  88. package/dist/flavours/data-analysis/planners/thoroughness.md +7 -0
  89. package/dist/flavours/data-analysis/planners/velocity.md +7 -0
  90. package/dist/flavours/data-analysis/specialists/auditor.md +94 -0
  91. package/dist/flavours/data-analysis/specialists/explorer.md +93 -0
  92. package/dist/flavours/data-analysis/specialists/tester.md +107 -0
  93. package/dist/flavours/data-analysis/specialists/verifier.md +103 -0
  94. package/dist/flavours/data-analysis/specifiers/clarity.md +7 -0
  95. package/dist/flavours/data-analysis/specifiers/completeness.md +15 -0
  96. package/dist/flavours/data-analysis/specifiers/pragmatism.md +7 -0
  97. package/dist/flavours/game-dev/core/builder.md +104 -0
  98. package/dist/flavours/game-dev/core/planner.md +90 -0
  99. package/dist/flavours/game-dev/core/reviewer.md +151 -0
  100. package/dist/flavours/game-dev/core/shaper.md +139 -0
  101. package/dist/flavours/game-dev/core/specifier.md +73 -0
  102. package/dist/flavours/game-dev/planners/context.md +50 -0
  103. package/dist/flavours/game-dev/planners/simplicity.md +7 -0
  104. package/dist/flavours/game-dev/planners/thoroughness.md +7 -0
  105. package/dist/flavours/game-dev/planners/velocity.md +7 -0
  106. package/dist/flavours/game-dev/specialists/auditor.md +91 -0
  107. package/dist/flavours/game-dev/specialists/explorer.md +78 -0
  108. package/dist/flavours/game-dev/specialists/tester.md +73 -0
  109. package/dist/flavours/game-dev/specialists/verifier.md +104 -0
  110. package/dist/flavours/game-dev/specifiers/clarity.md +7 -0
  111. package/dist/flavours/game-dev/specifiers/completeness.md +7 -0
  112. package/dist/flavours/game-dev/specifiers/pragmatism.md +7 -0
  113. package/dist/flavours/legal-drafting/core/builder.md +118 -0
  114. package/dist/flavours/legal-drafting/core/planner.md +92 -0
  115. package/dist/flavours/legal-drafting/core/reviewer.md +150 -0
  116. package/dist/flavours/legal-drafting/core/shaper.md +137 -0
  117. package/dist/flavours/legal-drafting/core/specifier.md +68 -0
  118. package/dist/flavours/legal-drafting/planners/context.md +48 -0
  119. package/dist/flavours/legal-drafting/planners/simplicity.md +7 -0
  120. package/dist/flavours/legal-drafting/planners/thoroughness.md +7 -0
  121. package/dist/flavours/legal-drafting/planners/velocity.md +7 -0
  122. package/dist/flavours/legal-drafting/specialists/auditor.md +92 -0
  123. package/dist/flavours/legal-drafting/specialists/explorer.md +78 -0
  124. package/dist/flavours/legal-drafting/specialists/tester.md +76 -0
  125. package/dist/flavours/legal-drafting/specialists/verifier.md +111 -0
  126. package/dist/flavours/legal-drafting/specifiers/clarity.md +7 -0
  127. package/dist/flavours/legal-drafting/specifiers/completeness.md +7 -0
  128. package/dist/flavours/legal-drafting/specifiers/pragmatism.md +7 -0
  129. package/dist/flavours/machine-learning/core/builder.md +127 -0
  130. package/dist/flavours/machine-learning/core/planner.md +90 -0
  131. package/dist/flavours/machine-learning/core/reviewer.md +152 -0
  132. package/dist/flavours/machine-learning/core/shaper.md +141 -0
  133. package/dist/flavours/machine-learning/core/specifier.md +71 -0
  134. package/dist/flavours/machine-learning/planners/context.md +49 -0
  135. package/dist/flavours/machine-learning/planners/simplicity.md +7 -0
  136. package/dist/flavours/machine-learning/planners/thoroughness.md +7 -0
  137. package/dist/flavours/machine-learning/planners/velocity.md +7 -0
  138. package/dist/flavours/machine-learning/specialists/auditor.md +96 -0
  139. package/dist/flavours/machine-learning/specialists/explorer.md +81 -0
  140. package/dist/flavours/machine-learning/specialists/tester.md +82 -0
  141. package/dist/flavours/machine-learning/specialists/verifier.md +100 -0
  142. package/dist/flavours/machine-learning/specifiers/clarity.md +7 -0
  143. package/dist/flavours/machine-learning/specifiers/completeness.md +7 -0
  144. package/dist/flavours/machine-learning/specifiers/pragmatism.md +7 -0
  145. package/dist/flavours/mobile-app/core/builder.md +108 -0
  146. package/dist/flavours/mobile-app/core/planner.md +90 -0
  147. package/dist/flavours/mobile-app/core/reviewer.md +144 -0
  148. package/dist/flavours/mobile-app/core/shaper.md +146 -0
  149. package/dist/flavours/mobile-app/core/specifier.md +73 -0
  150. package/dist/flavours/mobile-app/planners/context.md +41 -0
  151. package/dist/flavours/mobile-app/planners/simplicity.md +7 -0
  152. package/dist/flavours/mobile-app/planners/thoroughness.md +7 -0
  153. package/dist/flavours/mobile-app/planners/velocity.md +7 -0
  154. package/dist/flavours/mobile-app/specialists/auditor.md +92 -0
  155. package/dist/flavours/mobile-app/specialists/explorer.md +84 -0
  156. package/dist/flavours/mobile-app/specialists/tester.md +75 -0
  157. package/dist/flavours/mobile-app/specialists/verifier.md +114 -0
  158. package/dist/flavours/mobile-app/specifiers/clarity.md +7 -0
  159. package/dist/flavours/mobile-app/specifiers/completeness.md +7 -0
  160. package/dist/flavours/mobile-app/specifiers/pragmatism.md +7 -0
  161. package/dist/flavours/music-composition/core/builder.md +112 -0
  162. package/dist/flavours/music-composition/core/planner.md +102 -0
  163. package/dist/flavours/music-composition/core/reviewer.md +139 -0
  164. package/dist/flavours/music-composition/core/shaper.md +139 -0
  165. package/dist/flavours/music-composition/core/specifier.md +72 -0
  166. package/dist/flavours/music-composition/planners/context.md +39 -0
  167. package/dist/flavours/music-composition/planners/simplicity.md +7 -0
  168. package/dist/flavours/music-composition/planners/thoroughness.md +7 -0
  169. package/dist/flavours/music-composition/planners/velocity.md +7 -0
  170. package/dist/flavours/music-composition/specialists/auditor.md +90 -0
  171. package/dist/flavours/music-composition/specialists/explorer.md +87 -0
  172. package/dist/flavours/music-composition/specialists/tester.md +74 -0
  173. package/dist/flavours/music-composition/specialists/verifier.md +89 -0
  174. package/dist/flavours/music-composition/specifiers/clarity.md +7 -0
  175. package/dist/flavours/music-composition/specifiers/completeness.md +7 -0
  176. package/dist/flavours/music-composition/specifiers/pragmatism.md +7 -0
  177. package/dist/flavours/novel-writing/core/builder.md +116 -0
  178. package/dist/flavours/novel-writing/core/planner.md +92 -0
  179. package/dist/flavours/novel-writing/core/reviewer.md +152 -0
  180. package/dist/flavours/novel-writing/core/shaper.md +143 -0
  181. package/dist/flavours/novel-writing/core/specifier.md +76 -0
  182. package/dist/flavours/novel-writing/planners/context.md +39 -0
  183. package/dist/flavours/novel-writing/planners/simplicity.md +7 -0
  184. package/dist/flavours/novel-writing/planners/thoroughness.md +7 -0
  185. package/dist/flavours/novel-writing/planners/velocity.md +7 -0
  186. package/dist/flavours/novel-writing/specialists/auditor.md +87 -0
  187. package/dist/flavours/novel-writing/specialists/explorer.md +83 -0
  188. package/dist/flavours/novel-writing/specialists/tester.md +89 -0
  189. package/dist/flavours/novel-writing/specialists/verifier.md +122 -0
  190. package/dist/flavours/novel-writing/specifiers/clarity.md +7 -0
  191. package/dist/flavours/novel-writing/specifiers/completeness.md +7 -0
  192. package/dist/flavours/novel-writing/specifiers/pragmatism.md +7 -0
  193. package/dist/flavours/screenwriting/core/builder.md +115 -0
  194. package/dist/flavours/screenwriting/core/planner.md +92 -0
  195. package/dist/flavours/screenwriting/core/reviewer.md +151 -0
  196. package/dist/flavours/screenwriting/core/shaper.md +143 -0
  197. package/dist/flavours/screenwriting/core/specifier.md +78 -0
  198. package/dist/flavours/screenwriting/planners/context.md +52 -0
  199. package/dist/flavours/screenwriting/planners/simplicity.md +7 -0
  200. package/dist/flavours/screenwriting/planners/thoroughness.md +7 -0
  201. package/dist/flavours/screenwriting/planners/velocity.md +7 -0
  202. package/dist/flavours/screenwriting/specialists/auditor.md +98 -0
  203. package/dist/flavours/screenwriting/specialists/explorer.md +87 -0
  204. package/dist/flavours/screenwriting/specialists/tester.md +90 -0
  205. package/dist/flavours/screenwriting/specialists/verifier.md +129 -0
  206. package/dist/flavours/screenwriting/specifiers/clarity.md +7 -0
  207. package/dist/flavours/screenwriting/specifiers/completeness.md +7 -0
  208. package/dist/flavours/screenwriting/specifiers/pragmatism.md +7 -0
  209. package/dist/flavours/security-audit/core/builder.md +123 -0
  210. package/dist/flavours/security-audit/core/planner.md +92 -0
  211. package/dist/flavours/security-audit/core/reviewer.md +150 -0
  212. package/dist/flavours/security-audit/core/shaper.md +145 -0
  213. package/dist/flavours/security-audit/core/specifier.md +69 -0
  214. package/dist/flavours/security-audit/planners/context.md +51 -0
  215. package/dist/flavours/security-audit/planners/simplicity.md +7 -0
  216. package/dist/flavours/security-audit/planners/thoroughness.md +7 -0
  217. package/dist/flavours/security-audit/planners/velocity.md +7 -0
  218. package/dist/flavours/security-audit/specialists/auditor.md +100 -0
  219. package/dist/flavours/security-audit/specialists/explorer.md +84 -0
  220. package/dist/flavours/security-audit/specialists/tester.md +80 -0
  221. package/dist/flavours/security-audit/specialists/verifier.md +101 -0
  222. package/dist/flavours/security-audit/specifiers/clarity.md +7 -0
  223. package/dist/flavours/security-audit/specifiers/completeness.md +7 -0
  224. package/dist/flavours/security-audit/specifiers/pragmatism.md +7 -0
  225. package/dist/flavours/software-engineering/core/builder.md +100 -0
  226. package/dist/flavours/software-engineering/core/planner.md +90 -0
  227. package/dist/flavours/software-engineering/core/reviewer.md +137 -0
  228. package/dist/flavours/software-engineering/core/shaper.md +137 -0
  229. package/dist/flavours/software-engineering/core/specifier.md +69 -0
  230. package/dist/flavours/software-engineering/planners/context.md +37 -0
  231. package/dist/flavours/software-engineering/planners/simplicity.md +7 -0
  232. package/dist/flavours/software-engineering/planners/thoroughness.md +7 -0
  233. package/dist/flavours/software-engineering/planners/velocity.md +7 -0
  234. package/dist/flavours/software-engineering/specialists/auditor.md +88 -0
  235. package/dist/{agents/specialists/scout.md → flavours/software-engineering/specialists/explorer.md} +2 -2
  236. package/dist/flavours/software-engineering/specialists/tester.md +72 -0
  237. package/dist/flavours/software-engineering/specialists/verifier.md +89 -0
  238. package/dist/flavours/software-engineering/specifiers/clarity.md +7 -0
  239. package/dist/flavours/software-engineering/specifiers/completeness.md +7 -0
  240. package/dist/flavours/software-engineering/specifiers/pragmatism.md +7 -0
  241. package/dist/flavours/technical-writing/core/builder.md +119 -0
  242. package/dist/flavours/technical-writing/core/planner.md +102 -0
  243. package/dist/flavours/technical-writing/core/reviewer.md +138 -0
  244. package/dist/flavours/technical-writing/core/shaper.md +137 -0
  245. package/dist/flavours/technical-writing/core/specifier.md +69 -0
  246. package/dist/flavours/technical-writing/planners/context.md +49 -0
  247. package/dist/flavours/technical-writing/planners/simplicity.md +7 -0
  248. package/dist/flavours/technical-writing/planners/thoroughness.md +7 -0
  249. package/dist/flavours/technical-writing/planners/velocity.md +7 -0
  250. package/dist/flavours/technical-writing/specialists/auditor.md +94 -0
  251. package/dist/flavours/technical-writing/specialists/explorer.md +85 -0
  252. package/dist/flavours/technical-writing/specialists/tester.md +93 -0
  253. package/dist/flavours/technical-writing/specialists/verifier.md +113 -0
  254. package/dist/flavours/technical-writing/specifiers/clarity.md +7 -0
  255. package/dist/flavours/technical-writing/specifiers/completeness.md +7 -0
  256. package/dist/flavours/technical-writing/specifiers/pragmatism.md +7 -0
  257. package/dist/flavours/test-suite/core/builder.md +114 -0
  258. package/dist/flavours/test-suite/core/planner.md +101 -0
  259. package/dist/flavours/test-suite/core/reviewer.md +161 -0
  260. package/dist/flavours/test-suite/core/shaper.md +144 -0
  261. package/dist/flavours/test-suite/core/specifier.md +71 -0
  262. package/dist/flavours/test-suite/planners/context.md +52 -0
  263. package/dist/flavours/test-suite/planners/simplicity.md +7 -0
  264. package/dist/flavours/test-suite/planners/thoroughness.md +7 -0
  265. package/dist/flavours/test-suite/planners/velocity.md +7 -0
  266. package/dist/flavours/test-suite/specialists/auditor.md +85 -0
  267. package/dist/flavours/test-suite/specialists/explorer.md +88 -0
  268. package/dist/flavours/test-suite/specialists/tester.md +88 -0
  269. package/dist/flavours/test-suite/specialists/verifier.md +100 -0
  270. package/dist/flavours/test-suite/specifiers/clarity.md +7 -0
  271. package/dist/flavours/test-suite/specifiers/completeness.md +7 -0
  272. package/dist/flavours/test-suite/specifiers/pragmatism.md +7 -0
  273. package/dist/flavours/translation/core/builder.md +120 -0
  274. package/dist/flavours/translation/core/planner.md +90 -0
  275. package/dist/flavours/translation/core/reviewer.md +151 -0
  276. package/dist/flavours/translation/core/shaper.md +137 -0
  277. package/dist/flavours/translation/core/specifier.md +71 -0
  278. package/dist/flavours/translation/planners/context.md +53 -0
  279. package/dist/flavours/translation/planners/simplicity.md +7 -0
  280. package/dist/flavours/translation/planners/thoroughness.md +7 -0
  281. package/dist/flavours/translation/planners/velocity.md +7 -0
  282. package/dist/flavours/translation/specialists/auditor.md +109 -0
  283. package/dist/flavours/translation/specialists/explorer.md +98 -0
  284. package/dist/flavours/translation/specialists/tester.md +82 -0
  285. package/dist/flavours/translation/specialists/verifier.md +121 -0
  286. package/dist/flavours/translation/specifiers/clarity.md +7 -0
  287. package/dist/flavours/translation/specifiers/completeness.md +7 -0
  288. package/dist/flavours/translation/specifiers/pragmatism.md +7 -0
  289. package/dist/stores/budget.d.ts +5 -0
  290. package/dist/stores/budget.js +74 -0
  291. package/dist/stores/budget.js.map +1 -0
  292. package/dist/stores/feedback.io.d.ts +6 -0
  293. package/dist/stores/feedback.io.js +64 -0
  294. package/dist/stores/feedback.io.js.map +1 -0
  295. package/dist/stores/feedback.verdict.d.ts +4 -0
  296. package/dist/stores/feedback.verdict.js +179 -0
  297. package/dist/stores/feedback.verdict.js.map +1 -0
  298. package/dist/stores/handoff.d.ts +2 -0
  299. package/dist/stores/handoff.js +54 -0
  300. package/dist/stores/handoff.js.map +1 -0
  301. package/dist/stores/index.d.ts +9 -0
  302. package/dist/stores/index.js +49 -0
  303. package/dist/stores/index.js.map +1 -0
  304. package/dist/stores/inputs.d.ts +2 -0
  305. package/dist/stores/inputs.js +64 -0
  306. package/dist/stores/inputs.js.map +1 -0
  307. package/dist/stores/phases.d.ts +15 -0
  308. package/dist/stores/phases.js +81 -0
  309. package/dist/stores/phases.js.map +1 -0
  310. package/dist/stores/settings.d.ts +12 -0
  311. package/dist/stores/settings.js +85 -0
  312. package/dist/stores/settings.js.map +1 -0
  313. package/dist/stores/state.d.ts +20 -0
  314. package/dist/stores/state.js +264 -0
  315. package/dist/stores/state.js.map +1 -0
  316. package/dist/stores/tags.d.ts +6 -0
  317. package/dist/stores/tags.js +34 -0
  318. package/dist/stores/tags.js.map +1 -0
  319. package/dist/stores/trajectory.d.ts +11 -0
  320. package/dist/stores/trajectory.js +66 -0
  321. package/dist/stores/trajectory.js.map +1 -0
  322. package/dist/types.d.ts +1 -2
  323. package/package.json +2 -2
@@ -0,0 +1,264 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.rewindTo = exports.getNextPipelineStage = exports.markBuildRunning = exports.advancePipeline = exports.getPipelineStatus = exports.getNextIncompletePhase = exports.resetRetries = exports.updatePhaseStatus = exports.initState = exports.saveState = exports.loadState = void 0;
37
+ const fs = __importStar(require("node:fs"));
38
+ const path = __importStar(require("node:path"));
39
+ const tags_1 = require("./tags");
40
+ const statePath = (buildDir) => path.join(buildDir, "state.json");
41
+ const DEFAULT_PIPELINE = {
42
+ shape: "pending",
43
+ spec: "pending",
44
+ plan: "pending",
45
+ build: "pending",
46
+ };
47
+ const loadState = (buildDir) => {
48
+ const fp = statePath(buildDir);
49
+ if (fs.existsSync(fp)) {
50
+ const state = JSON.parse(fs.readFileSync(fp, "utf-8"));
51
+ // Backfill pipeline for legacy state files
52
+ if (!state.pipeline) {
53
+ state.pipeline = derivePipelineFromArtifacts(buildDir);
54
+ }
55
+ return state;
56
+ }
57
+ return null;
58
+ };
59
+ exports.loadState = loadState;
60
+ const saveState = (buildDir, state) => {
61
+ fs.writeFileSync(statePath(buildDir), JSON.stringify(state, null, 2) + "\n");
62
+ };
63
+ exports.saveState = saveState;
64
+ const initState = (buildName, phases) => ({
65
+ buildName,
66
+ startedAt: new Date().toISOString(),
67
+ pipeline: { ...DEFAULT_PIPELINE },
68
+ phases: phases.map((p) => ({
69
+ id: p.id,
70
+ status: "pending",
71
+ checkpointTag: (0, tags_1.checkpointTagName)(buildName, p.id),
72
+ completionTag: null,
73
+ retries: 0,
74
+ duration: null,
75
+ completedAt: null,
76
+ failedAt: null,
77
+ })),
78
+ });
79
+ exports.initState = initState;
80
+ const updatePhaseStatus = (buildDir, state, phaseId, update) => {
81
+ const phase = state.phases.find((p) => p.id === phaseId);
82
+ if (phase) {
83
+ Object.assign(phase, update);
84
+ (0, exports.saveState)(buildDir, state);
85
+ }
86
+ };
87
+ exports.updatePhaseStatus = updatePhaseStatus;
88
+ const resetRetries = (buildDir, state) => {
89
+ for (const phase of state.phases) {
90
+ if (phase.status !== "complete") {
91
+ phase.retries = 0;
92
+ phase.status = "pending";
93
+ phase.failedAt = null;
94
+ }
95
+ }
96
+ (0, exports.saveState)(buildDir, state);
97
+ };
98
+ exports.resetRetries = resetRetries;
99
+ const getNextIncompletePhase = (state, cwd) => {
100
+ for (const phase of state.phases) {
101
+ if (phase.status === "complete") {
102
+ // Verify the completion tag still exists
103
+ if (!(0, tags_1.verifyCompletionTag)(state.buildName, phase.id, cwd)) {
104
+ // Tag was deleted — treat as incomplete
105
+ phase.status = "pending";
106
+ phase.completionTag = null;
107
+ return phase;
108
+ }
109
+ continue;
110
+ }
111
+ return phase;
112
+ }
113
+ return null;
114
+ };
115
+ exports.getNextIncompletePhase = getNextIncompletePhase;
116
+ // ---------------------------------------------------------------------------
117
+ // Pipeline state helpers
118
+ // ---------------------------------------------------------------------------
119
+ /** Derive pipeline state from existing artifacts on disk (for legacy state files). */
120
+ const derivePipelineFromArtifacts = (buildDir) => {
121
+ const hasShape = fs.existsSync(path.join(buildDir, "shape.md"));
122
+ const hasSpec = fs.existsSync(path.join(buildDir, "spec.md"));
123
+ const hasConstraints = fs.existsSync(path.join(buildDir, "constraints.md"));
124
+ const phasesDir = path.join(buildDir, "phases");
125
+ const hasPhases = fs.existsSync(phasesDir) &&
126
+ fs.readdirSync(phasesDir).some((f) => f.endsWith(".md") && /^\d+-.+\.md$/.test(f));
127
+ return {
128
+ shape: hasShape ? "complete" : "pending",
129
+ spec: hasSpec && hasConstraints ? "complete" : "pending",
130
+ plan: hasPhases ? "complete" : "pending",
131
+ build: "pending",
132
+ };
133
+ };
134
+ /** Get pipeline status, verifying against both state.json and file existence. */
135
+ const getPipelineStatus = (buildDir) => {
136
+ const state = (0, exports.loadState)(buildDir);
137
+ const fromState = state?.pipeline ?? { ...DEFAULT_PIPELINE };
138
+ const fromDisk = derivePipelineFromArtifacts(buildDir);
139
+ // Belt and suspenders: if state says complete but file is missing, trust disk
140
+ return {
141
+ shape: fromState.shape === "complete" && fromDisk.shape === "complete" ? "complete" : fromDisk.shape,
142
+ spec: fromState.spec === "complete" && fromDisk.spec === "complete" ? "complete" : fromDisk.spec,
143
+ plan: fromState.plan === "complete" && fromDisk.plan === "complete" ? "complete" : fromDisk.plan,
144
+ build: fromState.build === "pending" ? "pending" : fromState.build,
145
+ };
146
+ };
147
+ exports.getPipelineStatus = getPipelineStatus;
148
+ /** Mark a pipeline stage as complete and persist. */
149
+ const advancePipeline = (buildDir, buildName, stage) => {
150
+ let state = (0, exports.loadState)(buildDir);
151
+ if (!state) {
152
+ state = {
153
+ buildName,
154
+ startedAt: new Date().toISOString(),
155
+ pipeline: { ...DEFAULT_PIPELINE },
156
+ phases: [],
157
+ };
158
+ }
159
+ if (stage === "build") {
160
+ state.pipeline.build = "complete";
161
+ }
162
+ else {
163
+ state.pipeline[stage] = "complete";
164
+ }
165
+ (0, exports.saveState)(buildDir, state);
166
+ };
167
+ exports.advancePipeline = advancePipeline;
168
+ /** Set build pipeline stage to "running". */
169
+ const markBuildRunning = (buildDir, buildName) => {
170
+ let state = (0, exports.loadState)(buildDir);
171
+ if (!state) {
172
+ state = {
173
+ buildName,
174
+ startedAt: new Date().toISOString(),
175
+ pipeline: { ...DEFAULT_PIPELINE },
176
+ phases: [],
177
+ };
178
+ }
179
+ state.pipeline.build = "running";
180
+ (0, exports.saveState)(buildDir, state);
181
+ };
182
+ exports.markBuildRunning = markBuildRunning;
183
+ const PIPELINE_STAGES = ["shape", "spec", "plan", "build"];
184
+ /** Determine the next incomplete pipeline stage. */
185
+ const getNextPipelineStage = (buildDir) => {
186
+ const status = (0, exports.getPipelineStatus)(buildDir);
187
+ for (const stage of PIPELINE_STAGES) {
188
+ const s = status[stage];
189
+ if (s === "pending" || s === "running")
190
+ return stage;
191
+ }
192
+ return null;
193
+ };
194
+ exports.getNextPipelineStage = getNextPipelineStage;
195
+ /** Collect files to delete when resetting a single stage. */
196
+ const collectStageFiles = (buildDir, stage) => {
197
+ const files = [];
198
+ const phasesDir = path.join(buildDir, "phases");
199
+ switch (stage) {
200
+ case "spec":
201
+ for (const f of ["spec.md", "constraints.md", "taste.md"]) {
202
+ const fp = path.join(buildDir, f);
203
+ if (fs.existsSync(fp))
204
+ files.push(fp);
205
+ }
206
+ break;
207
+ case "plan":
208
+ if (fs.existsSync(phasesDir)) {
209
+ for (const f of fs.readdirSync(phasesDir))
210
+ files.push(path.join(phasesDir, f));
211
+ }
212
+ break;
213
+ case "build": {
214
+ const handoff = path.join(buildDir, "handoff.md");
215
+ if (fs.existsSync(handoff))
216
+ files.push(handoff);
217
+ if (fs.existsSync(phasesDir)) {
218
+ for (const f of fs.readdirSync(phasesDir)) {
219
+ if (f.includes("feedback"))
220
+ files.push(path.join(phasesDir, f));
221
+ }
222
+ }
223
+ break;
224
+ }
225
+ }
226
+ return files;
227
+ };
228
+ /** Reset pipeline state for stages downstream of targetStage. */
229
+ const resetPipelineState = (buildDir, buildName, targetStage, resetStages) => {
230
+ const state = (0, exports.loadState)(buildDir);
231
+ if (!state)
232
+ return;
233
+ const targetIndex = PIPELINE_STAGES.indexOf(targetStage);
234
+ for (const stage of PIPELINE_STAGES) {
235
+ if (PIPELINE_STAGES.indexOf(stage) > targetIndex) {
236
+ state.pipeline[stage] = "pending";
237
+ }
238
+ }
239
+ if (targetStage === "build") {
240
+ state.pipeline.build = "pending";
241
+ }
242
+ else {
243
+ state.pipeline[targetStage] = "complete";
244
+ }
245
+ if (resetStages.includes("plan") || resetStages.includes("build")) {
246
+ state.phases = [];
247
+ }
248
+ if (resetStages.includes("build")) {
249
+ (0, tags_1.cleanupBuildTags)(buildName);
250
+ }
251
+ (0, exports.saveState)(buildDir, state);
252
+ };
253
+ /**
254
+ * Rewind to a given stage: mark downstream stages as pending,
255
+ * return list of files/dirs to delete from disk.
256
+ */
257
+ const rewindTo = (buildDir, buildName, targetStage) => {
258
+ const resetStages = PIPELINE_STAGES.slice(PIPELINE_STAGES.indexOf(targetStage) + 1);
259
+ const toDelete = resetStages.flatMap((stage) => collectStageFiles(buildDir, stage));
260
+ resetPipelineState(buildDir, buildName, targetStage, resetStages);
261
+ return toDelete;
262
+ };
263
+ exports.rewindTo = rewindTo;
264
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/stores/state.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA6B;AAC7B,gDAAiC;AAEjC,iCAAiF;AAEjF,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAU,EAAE,CAC7C,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;AAEnC,MAAM,gBAAgB,GAAkB;IACtC,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;CACjB,CAAA;AAEM,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAqB,EAAE;IAC/D,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAA;IAC9B,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QACtB,MAAM,KAAK,GAAe,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAA;QAClE,2CAA2C;QAC3C,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,KAAK,CAAC,QAAQ,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAA;QACxD,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAXY,QAAA,SAAS,aAWrB;AAEM,MAAM,SAAS,GAAG,CAAC,QAAgB,EAAE,KAAiB,EAAQ,EAAE;IACrE,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;AAC9E,CAAC,CAAA;AAFY,QAAA,SAAS,aAErB;AAEM,MAAM,SAAS,GAAG,CAAC,SAAiB,EAAE,MAAmB,EAAc,EAAE,CAAC,CAAC;IAChF,SAAS;IACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IACnC,QAAQ,EAAE,EAAE,GAAG,gBAAgB,EAAE;IACjC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzB,EAAE,EAAE,CAAC,CAAC,EAAE;QACR,MAAM,EAAE,SAAS;QACjB,aAAa,EAAE,IAAA,wBAAiB,EAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC;QACjD,aAAa,EAAE,IAAI;QACnB,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,IAAI;QACjB,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;CACJ,CAAC,CAAA;AAdW,QAAA,SAAS,aAcpB;AAEK,MAAM,iBAAiB,GAAG,CAC/B,QAAgB,EAChB,KAAiB,EACjB,OAAe,EACf,MAA2B,EACrB,EAAE;IACR,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,CAAA;IACxD,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC5B,IAAA,iBAAS,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;IAC5B,CAAC;AACH,CAAC,CAAA;AAXY,QAAA,iBAAiB,qBAW7B;AAEM,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAE,KAAiB,EAAQ,EAAE;IACxE,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAChC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAA;YACjB,KAAK,CAAC,MAAM,GAAG,SAAS,CAAA;YACxB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;QACvB,CAAC;IACH,CAAC;IACD,IAAA,iBAAS,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC5B,CAAC,CAAA;AATY,QAAA,YAAY,gBASxB;AAEM,MAAM,sBAAsB,GAAG,CACpC,KAAiB,EACjB,GAAY,EACO,EAAE;IACrB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAChC,yCAAyC;YACzC,IAAI,CAAC,IAAA,0BAAmB,EAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;gBACzD,wCAAwC;gBACxC,KAAK,CAAC,MAAM,GAAG,SAAS,CAAA;gBACxB,KAAK,CAAC,aAAa,GAAG,IAAI,CAAA;gBAC1B,OAAO,KAAK,CAAA;YACd,CAAC;YACD,SAAQ;QACV,CAAC;QACD,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAlBY,QAAA,sBAAsB,0BAkBlC;AAED,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,sFAAsF;AACtF,MAAM,2BAA2B,GAAG,CAAC,QAAgB,EAAiB,EAAE;IACtE,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA;IAC/D,MAAM,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAA;IAC7D,MAAM,cAAc,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAA;IAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAC/C,MAAM,SAAS,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;QACxC,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAEpF,OAAO;QACL,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QACxC,IAAI,EAAE,OAAO,IAAI,cAAc,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QACxD,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS;QACxC,KAAK,EAAE,SAAS;KACjB,CAAA;AACH,CAAC,CAAA;AAED,iFAAiF;AAC1E,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAiB,EAAE;IACnE,MAAM,KAAK,GAAG,IAAA,iBAAS,EAAC,QAAQ,CAAC,CAAA;IACjC,MAAM,SAAS,GAAG,KAAK,EAAE,QAAQ,IAAI,EAAE,GAAG,gBAAgB,EAAE,CAAA;IAC5D,MAAM,QAAQ,GAAG,2BAA2B,CAAC,QAAQ,CAAC,CAAA;IAEtD,8EAA8E;IAC9E,OAAO;QACL,KAAK,EAAE,SAAS,CAAC,KAAK,KAAK,UAAU,IAAI,QAAQ,CAAC,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK;QACpG,IAAI,EAAE,SAAS,CAAC,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;QAChG,IAAI,EAAE,SAAS,CAAC,IAAI,KAAK,UAAU,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;QAChG,KAAK,EAAE,SAAS,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK;KACnE,CAAA;AACH,CAAC,CAAA;AAZY,QAAA,iBAAiB,qBAY7B;AAED,qDAAqD;AAC9C,MAAM,eAAe,GAAG,CAAC,QAAgB,EAAE,SAAiB,EAAE,KAAoB,EAAQ,EAAE;IACjG,IAAI,KAAK,GAAG,IAAA,iBAAS,EAAC,QAAQ,CAAC,CAAA;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG;YACN,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,QAAQ,EAAE,EAAE,GAAG,gBAAgB,EAAE;YACjC,MAAM,EAAE,EAAE;SACX,CAAA;IACH,CAAC;IACD,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,UAAU,CAAA;IACnC,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,UAAU,CAAA;IACpC,CAAC;IACD,IAAA,iBAAS,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC5B,CAAC,CAAA;AAhBY,QAAA,eAAe,mBAgB3B;AAED,6CAA6C;AACtC,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAE,SAAiB,EAAQ,EAAE;IAC5E,IAAI,KAAK,GAAG,IAAA,iBAAS,EAAC,QAAQ,CAAC,CAAA;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG;YACN,SAAS;YACT,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,QAAQ,EAAE,EAAE,GAAG,gBAAgB,EAAE;YACjC,MAAM,EAAE,EAAE;SACX,CAAA;IACH,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAA;IAChC,IAAA,iBAAS,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC5B,CAAC,CAAA;AAZY,QAAA,gBAAgB,oBAY5B;AAED,MAAM,eAAe,GAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;AAE3E,oDAAoD;AAC7C,MAAM,oBAAoB,GAAG,CAAC,QAAgB,EAAwB,EAAE;IAC7E,MAAM,MAAM,GAAG,IAAA,yBAAiB,EAAC,QAAQ,CAAC,CAAA;IAC1C,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QACvB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;YAAE,OAAO,KAAK,CAAA;IACtD,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAPY,QAAA,oBAAoB,wBAOhC;AAED,6DAA6D;AAC7D,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAE,KAAoB,EAAY,EAAE;IAC7E,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;IAE/C,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,MAAM;YACT,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,EAAE,UAAU,CAAC,EAAE,CAAC;gBAC1D,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;gBACjC,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACvC,CAAC;YACD,MAAK;QACP,KAAK,MAAM;YACT,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;YAChF,CAAC;YACD,MAAK;QACP,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAA;YACjD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC7B,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC1C,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC;wBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAA;gBACjE,CAAC;YACH,CAAC;YACD,MAAK;QACP,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,iEAAiE;AACjE,MAAM,kBAAkB,GAAG,CACzB,QAAgB,EAChB,SAAiB,EACjB,WAA0B,EAC1B,WAA4B,EACtB,EAAE;IACR,MAAM,KAAK,GAAG,IAAA,iBAAS,EAAC,QAAQ,CAAC,CAAA;IACjC,IAAI,CAAC,KAAK;QAAE,OAAM;IAElB,MAAM,WAAW,GAAG,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;IACxD,KAAK,MAAM,KAAK,IAAI,eAAe,EAAE,CAAC;QACpC,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,WAAW,EAAE,CAAC;YACjD,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,SAAgB,CAAA;QAC1C,CAAC;IACH,CAAC;IAED,IAAI,WAAW,KAAK,OAAO,EAAE,CAAC;QAC5B,KAAK,CAAC,QAAQ,CAAC,KAAK,GAAG,SAAS,CAAA;IAClC,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,UAAU,CAAA;IAC1C,CAAC;IAED,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAClE,KAAK,CAAC,MAAM,GAAG,EAAE,CAAA;IACnB,CAAC;IAED,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAClC,IAAA,uBAAgB,EAAC,SAAS,CAAC,CAAA;IAC7B,CAAC;IAED,IAAA,iBAAS,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC5B,CAAC,CAAA;AAED;;;GAGG;AACI,MAAM,QAAQ,GAAG,CAAC,QAAgB,EAAE,SAAiB,EAAE,WAA0B,EAAY,EAAE;IACpG,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAA;IACnF,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;IAEnF,kBAAkB,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,CAAC,CAAA;IAEjE,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAPY,QAAA,QAAQ,YAOpB"}
@@ -0,0 +1,6 @@
1
+ export declare const checkpointTagName: (buildName: string, phaseId: string) => string;
2
+ export declare const completionTagName: (buildName: string, phaseId: string) => string;
3
+ export declare const createCheckpoint: (checkpointTag: string, phaseId: string, cwd?: string) => void;
4
+ export declare const createCompletionTag: (buildName: string, phaseId: string, cwd?: string) => string;
5
+ export declare const verifyCompletionTag: (buildName: string, phaseId: string, cwd?: string) => boolean;
6
+ export declare const cleanupBuildTags: (buildName: string, cwd?: string) => void;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.cleanupBuildTags = exports.verifyCompletionTag = exports.createCompletionTag = exports.createCheckpoint = exports.completionTagName = exports.checkpointTagName = void 0;
4
+ const git_1 = require("../git");
5
+ const checkpointTagName = (buildName, phaseId) => `ridgeline/checkpoint/${buildName}/${phaseId}`;
6
+ exports.checkpointTagName = checkpointTagName;
7
+ const completionTagName = (buildName, phaseId) => `ridgeline/phase/${buildName}/${phaseId}`;
8
+ exports.completionTagName = completionTagName;
9
+ // Commit dirty working tree and create a checkpoint tag
10
+ const createCheckpoint = (checkpointTag, phaseId, cwd) => {
11
+ if ((0, git_1.isWorkingTreeDirty)(cwd)) {
12
+ (0, git_1.commitAll)(`chore: pre-phase checkpoint for ${phaseId}`, cwd);
13
+ }
14
+ (0, git_1.createTag)(checkpointTag, cwd, true);
15
+ };
16
+ exports.createCheckpoint = createCheckpoint;
17
+ // Create a completion tag for a phase and return the tag name
18
+ const createCompletionTag = (buildName, phaseId, cwd) => {
19
+ const tag = (0, exports.completionTagName)(buildName, phaseId);
20
+ (0, git_1.createTag)(tag, cwd, true);
21
+ return tag;
22
+ };
23
+ exports.createCompletionTag = createCompletionTag;
24
+ // Verify that a phase's completion tag exists in git
25
+ const verifyCompletionTag = (buildName, phaseId, cwd) => (0, git_1.tagExists)((0, exports.completionTagName)(buildName, phaseId), cwd);
26
+ exports.verifyCompletionTag = verifyCompletionTag;
27
+ // Delete all ridgeline tags for a build
28
+ const cleanupBuildTags = (buildName, cwd) => {
29
+ (0, git_1.deleteTagsByPrefix)(`ridgeline/${buildName}/`, cwd);
30
+ (0, git_1.deleteTagsByPrefix)(`ridgeline/checkpoint/${buildName}/`, cwd);
31
+ (0, git_1.deleteTagsByPrefix)(`ridgeline/phase/${buildName}/`, cwd);
32
+ };
33
+ exports.cleanupBuildTags = cleanupBuildTags;
34
+ //# sourceMappingURL=tags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/stores/tags.ts"],"names":[],"mappings":";;;AAAA,gCAAgG;AAEzF,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,OAAe,EAAU,EAAE,CAC9E,wBAAwB,SAAS,IAAI,OAAO,EAAE,CAAA;AADnC,QAAA,iBAAiB,qBACkB;AAEzC,MAAM,iBAAiB,GAAG,CAAC,SAAiB,EAAE,OAAe,EAAU,EAAE,CAC9E,mBAAmB,SAAS,IAAI,OAAO,EAAE,CAAA;AAD9B,QAAA,iBAAiB,qBACa;AAE3C,wDAAwD;AACjD,MAAM,gBAAgB,GAAG,CAAC,aAAqB,EAAE,OAAe,EAAE,GAAY,EAAQ,EAAE;IAC7F,IAAI,IAAA,wBAAkB,EAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,IAAA,eAAS,EAAC,mCAAmC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAA;IAC9D,CAAC;IACD,IAAA,eAAS,EAAC,aAAa,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;AACrC,CAAC,CAAA;AALY,QAAA,gBAAgB,oBAK5B;AAED,8DAA8D;AACvD,MAAM,mBAAmB,GAAG,CAAC,SAAiB,EAAE,OAAe,EAAE,GAAY,EAAU,EAAE;IAC9F,MAAM,GAAG,GAAG,IAAA,yBAAiB,EAAC,SAAS,EAAE,OAAO,CAAC,CAAA;IACjD,IAAA,eAAS,EAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IACzB,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAJY,QAAA,mBAAmB,uBAI/B;AAED,qDAAqD;AAC9C,MAAM,mBAAmB,GAAG,CAAC,SAAiB,EAAE,OAAe,EAAE,GAAY,EAAW,EAAE,CAC/F,IAAA,eAAS,EAAC,IAAA,yBAAiB,EAAC,SAAS,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,CAAA;AAD1C,QAAA,mBAAmB,uBACuB;AAEvD,wCAAwC;AACjC,MAAM,gBAAgB,GAAG,CAAC,SAAiB,EAAE,GAAY,EAAQ,EAAE;IACxE,IAAA,wBAAkB,EAAC,aAAa,SAAS,GAAG,EAAE,GAAG,CAAC,CAAA;IAClD,IAAA,wBAAkB,EAAC,wBAAwB,SAAS,GAAG,EAAE,GAAG,CAAC,CAAA;IAC7D,IAAA,wBAAkB,EAAC,mBAAmB,SAAS,GAAG,EAAE,GAAG,CAAC,CAAA;AAC1D,CAAC,CAAA;AAJY,QAAA,gBAAgB,oBAI5B"}
@@ -0,0 +1,11 @@
1
+ import { TrajectoryEntry } from "../types";
2
+ export declare const logTrajectory: (buildDir: string, entry: TrajectoryEntry) => void;
3
+ export declare const makeTrajectoryEntry: (type: TrajectoryEntry["type"], phaseId: string | null, summary: string, opts?: {
4
+ duration?: number;
5
+ tokens?: {
6
+ input: number;
7
+ output: number;
8
+ };
9
+ costUsd?: number;
10
+ }) => TrajectoryEntry;
11
+ export declare const readTrajectory: (buildDir: string) => TrajectoryEntry[];
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.readTrajectory = exports.makeTrajectoryEntry = exports.logTrajectory = void 0;
37
+ const fs = __importStar(require("node:fs"));
38
+ const path = __importStar(require("node:path"));
39
+ const trajectoryPath = (buildDir) => path.join(buildDir, "trajectory.jsonl");
40
+ const logTrajectory = (buildDir, entry) => {
41
+ fs.appendFileSync(trajectoryPath(buildDir), JSON.stringify(entry) + "\n");
42
+ };
43
+ exports.logTrajectory = logTrajectory;
44
+ const makeTrajectoryEntry = (type, phaseId, summary, opts) => ({
45
+ timestamp: new Date().toISOString(),
46
+ type,
47
+ phaseId,
48
+ duration: opts?.duration ?? null,
49
+ tokens: opts?.tokens ?? null,
50
+ costUsd: opts?.costUsd ?? null,
51
+ summary,
52
+ });
53
+ exports.makeTrajectoryEntry = makeTrajectoryEntry;
54
+ // Read all trajectory entries from the JSONL file
55
+ const readTrajectory = (buildDir) => {
56
+ const fp = trajectoryPath(buildDir);
57
+ if (!fs.existsSync(fp))
58
+ return [];
59
+ return fs.readFileSync(fp, "utf-8")
60
+ .trim()
61
+ .split("\n")
62
+ .filter((line) => line.length > 0)
63
+ .map((line) => JSON.parse(line));
64
+ };
65
+ exports.readTrajectory = readTrajectory;
66
+ //# sourceMappingURL=trajectory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trajectory.js","sourceRoot":"","sources":["../../src/stores/trajectory.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4CAA6B;AAC7B,gDAAiC;AAGjC,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAU,EAAE,CAClD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;AAElC,MAAM,aAAa,GAAG,CAAC,QAAgB,EAAE,KAAsB,EAAQ,EAAE;IAC9E,EAAE,CAAC,cAAc,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;AAC3E,CAAC,CAAA;AAFY,QAAA,aAAa,iBAEzB;AAEM,MAAM,mBAAmB,GAAG,CACjC,IAA6B,EAC7B,OAAsB,EACtB,OAAe,EACf,IAIC,EACgB,EAAE,CAAC,CAAC;IACrB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IACnC,IAAI;IACJ,OAAO;IACP,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI,IAAI;IAChC,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,IAAI;IAC5B,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,IAAI;IAC9B,OAAO;CACR,CAAC,CAAA;AAjBW,QAAA,mBAAmB,uBAiB9B;AAEF,kDAAkD;AAC3C,MAAM,cAAc,GAAG,CAAC,QAAgB,EAAqB,EAAE;IACpE,MAAM,EAAE,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;QAAE,OAAO,EAAE,CAAA;IACjC,OAAO,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC;SAChC,IAAI,EAAE;SACN,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;SACjC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAoB,CAAC,CAAA;AACvD,CAAC,CAAA;AARY,QAAA,cAAc,kBAQ1B"}
package/dist/types.d.ts CHANGED
@@ -15,8 +15,8 @@ export type RidgelineConfig = {
15
15
  unsafe: boolean;
16
16
  networkAllowlist: string[];
17
17
  sandboxProvider?: import("./engine/claude/sandbox").SandboxProvider | null;
18
- worktreePath: string | null;
19
18
  extraContext: string | null;
19
+ flavour: string | null;
20
20
  };
21
21
  export type PhaseInfo = {
22
22
  id: string;
@@ -30,7 +30,6 @@ export type PhaseState = {
30
30
  status: "pending" | "building" | "reviewing" | "complete" | "failed";
31
31
  checkpointTag: string;
32
32
  completionTag: string | null;
33
- isMerged: boolean;
34
33
  retries: number;
35
34
  duration: number | null;
36
35
  completedAt: string | null;
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "ridgeline",
3
- "version": "0.4.4",
3
+ "version": "0.5.7",
4
4
  "description": "Build harness for long-horizon software execution",
5
5
  "license": "MIT",
6
6
  "bin": {
7
7
  "ridgeline": "dist/cli.js"
8
8
  },
9
9
  "scripts": {
10
- "build": "tsc && rm -rf dist/agents && cp -r src/agents dist/agents",
10
+ "build": "tsc && rm -rf dist/agents && cp -r src/agents dist/agents && rm -rf dist/flavours && cp -r src/flavours dist/flavours",
11
11
  "dev": "tsc --watch",
12
12
  "lint": "npm run lint:code && npm run lint:markdown && npm run lint:agents && npm run lint:fallow",
13
13
  "lint:code": "oxlint --ignore-pattern examples",