ralph-starter 0.0.1 → 0.1.1-beta.1

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 (382) hide show
  1. package/README.md +707 -17
  2. package/dist/auth/browser.d.ts +10 -0
  3. package/dist/auth/browser.d.ts.map +1 -0
  4. package/dist/auth/browser.js +56 -0
  5. package/dist/auth/browser.js.map +1 -0
  6. package/dist/auth/index.d.ts +5 -0
  7. package/dist/auth/index.d.ts.map +1 -0
  8. package/dist/auth/index.js +5 -0
  9. package/dist/auth/index.js.map +1 -0
  10. package/dist/auth/oauth-server.d.ts +20 -0
  11. package/dist/auth/oauth-server.d.ts.map +1 -0
  12. package/dist/auth/oauth-server.js +168 -0
  13. package/dist/auth/oauth-server.js.map +1 -0
  14. package/dist/auth/pkce.d.ts +46 -0
  15. package/dist/auth/pkce.d.ts.map +1 -0
  16. package/dist/auth/pkce.js +57 -0
  17. package/dist/auth/pkce.js.map +1 -0
  18. package/dist/auth/providers/base.d.ts +52 -0
  19. package/dist/auth/providers/base.d.ts.map +1 -0
  20. package/dist/auth/providers/base.js +70 -0
  21. package/dist/auth/providers/base.js.map +1 -0
  22. package/dist/auth/providers/index.d.ts +23 -0
  23. package/dist/auth/providers/index.d.ts.map +1 -0
  24. package/dist/auth/providers/index.js +39 -0
  25. package/dist/auth/providers/index.js.map +1 -0
  26. package/dist/auth/providers/linear.d.ts +37 -0
  27. package/dist/auth/providers/linear.d.ts.map +1 -0
  28. package/dist/auth/providers/linear.js +46 -0
  29. package/dist/auth/providers/linear.js.map +1 -0
  30. package/dist/auth/providers/notion.d.ts +36 -0
  31. package/dist/auth/providers/notion.d.ts.map +1 -0
  32. package/dist/auth/providers/notion.js +75 -0
  33. package/dist/auth/providers/notion.js.map +1 -0
  34. package/dist/auth/providers/todoist.d.ts +29 -0
  35. package/dist/auth/providers/todoist.d.ts.map +1 -0
  36. package/dist/auth/providers/todoist.js +40 -0
  37. package/dist/auth/providers/todoist.js.map +1 -0
  38. package/dist/automation/git.d.ts +15 -0
  39. package/dist/automation/git.d.ts.map +1 -0
  40. package/dist/automation/git.js +73 -0
  41. package/dist/automation/git.js.map +1 -0
  42. package/dist/cli.d.ts +3 -0
  43. package/dist/cli.d.ts.map +1 -0
  44. package/dist/cli.js +192 -19
  45. package/dist/cli.js.map +1 -0
  46. package/dist/commands/auth.d.ts +14 -0
  47. package/dist/commands/auth.d.ts.map +1 -0
  48. package/dist/commands/auth.js +243 -0
  49. package/dist/commands/auth.js.map +1 -0
  50. package/dist/commands/check.d.ts +12 -0
  51. package/dist/commands/check.d.ts.map +1 -0
  52. package/dist/commands/check.js +124 -0
  53. package/dist/commands/check.js.map +1 -0
  54. package/dist/commands/config.d.ts +13 -0
  55. package/dist/commands/config.d.ts.map +1 -0
  56. package/dist/commands/config.js +374 -0
  57. package/dist/commands/config.js.map +1 -0
  58. package/dist/commands/init.d.ts +31 -0
  59. package/dist/commands/init.d.ts.map +1 -0
  60. package/dist/commands/init.js +353 -0
  61. package/dist/commands/init.js.map +1 -0
  62. package/dist/commands/integrations.d.ts +17 -0
  63. package/dist/commands/integrations.d.ts.map +1 -0
  64. package/dist/commands/integrations.js +193 -0
  65. package/dist/commands/integrations.js.map +1 -0
  66. package/dist/commands/plan.d.ts +5 -0
  67. package/dist/commands/plan.d.ts.map +1 -0
  68. package/dist/commands/plan.js +80 -0
  69. package/dist/commands/plan.js.map +1 -0
  70. package/dist/commands/run.d.ts +26 -0
  71. package/dist/commands/run.d.ts.map +1 -0
  72. package/dist/commands/run.js +351 -0
  73. package/dist/commands/run.js.map +1 -0
  74. package/dist/commands/scaffold.d.ts +9 -0
  75. package/dist/commands/scaffold.d.ts.map +1 -0
  76. package/dist/commands/scaffold.js +128 -0
  77. package/dist/commands/scaffold.js.map +1 -0
  78. package/dist/commands/setup.d.ts +12 -0
  79. package/dist/commands/setup.d.ts.map +1 -0
  80. package/dist/commands/setup.js +27 -0
  81. package/dist/commands/setup.js.map +1 -0
  82. package/dist/commands/skill.d.ts +6 -0
  83. package/dist/commands/skill.d.ts.map +1 -0
  84. package/dist/commands/skill.js +151 -0
  85. package/dist/commands/skill.js.map +1 -0
  86. package/dist/commands/source.d.ts +17 -0
  87. package/dist/commands/source.d.ts.map +1 -0
  88. package/dist/commands/source.js +173 -0
  89. package/dist/commands/source.js.map +1 -0
  90. package/dist/config/manager.d.ts +70 -0
  91. package/dist/config/manager.d.ts.map +1 -0
  92. package/dist/config/manager.js +227 -0
  93. package/dist/config/manager.js.map +1 -0
  94. package/dist/index.d.ts +26 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +27 -2
  97. package/dist/index.js.map +1 -0
  98. package/dist/integrations/_template/auth.d.ts +29 -0
  99. package/dist/integrations/_template/auth.d.ts.map +1 -0
  100. package/dist/integrations/_template/auth.js +42 -0
  101. package/dist/integrations/_template/auth.js.map +1 -0
  102. package/dist/integrations/_template/index.d.ts +8 -0
  103. package/dist/integrations/_template/index.d.ts.map +1 -0
  104. package/dist/integrations/_template/index.js +8 -0
  105. package/dist/integrations/_template/index.js.map +1 -0
  106. package/dist/integrations/_template/source.d.ts +34 -0
  107. package/dist/integrations/_template/source.d.ts.map +1 -0
  108. package/dist/integrations/_template/source.js +124 -0
  109. package/dist/integrations/_template/source.js.map +1 -0
  110. package/dist/integrations/base.d.ts +158 -0
  111. package/dist/integrations/base.d.ts.map +1 -0
  112. package/dist/integrations/base.js +109 -0
  113. package/dist/integrations/base.js.map +1 -0
  114. package/dist/integrations/github/index.d.ts +8 -0
  115. package/dist/integrations/github/index.d.ts.map +1 -0
  116. package/dist/integrations/github/index.js +8 -0
  117. package/dist/integrations/github/index.js.map +1 -0
  118. package/dist/integrations/github/source.d.ts +26 -0
  119. package/dist/integrations/github/source.d.ts.map +1 -0
  120. package/dist/integrations/github/source.js +190 -0
  121. package/dist/integrations/github/source.js.map +1 -0
  122. package/dist/integrations/index.d.ts +37 -0
  123. package/dist/integrations/index.d.ts.map +1 -0
  124. package/dist/integrations/index.js +71 -0
  125. package/dist/integrations/index.js.map +1 -0
  126. package/dist/integrations/linear/auth.d.ts +37 -0
  127. package/dist/integrations/linear/auth.d.ts.map +1 -0
  128. package/dist/integrations/linear/auth.js +45 -0
  129. package/dist/integrations/linear/auth.js.map +1 -0
  130. package/dist/integrations/linear/index.d.ts +9 -0
  131. package/dist/integrations/linear/index.d.ts.map +1 -0
  132. package/dist/integrations/linear/index.js +9 -0
  133. package/dist/integrations/linear/index.js.map +1 -0
  134. package/dist/integrations/linear/source.d.ts +26 -0
  135. package/dist/integrations/linear/source.d.ts.map +1 -0
  136. package/dist/integrations/linear/source.js +248 -0
  137. package/dist/integrations/linear/source.js.map +1 -0
  138. package/dist/integrations/notion/index.d.ts +8 -0
  139. package/dist/integrations/notion/index.d.ts.map +1 -0
  140. package/dist/integrations/notion/index.js +8 -0
  141. package/dist/integrations/notion/index.js.map +1 -0
  142. package/dist/integrations/notion/source.d.ts +53 -0
  143. package/dist/integrations/notion/source.d.ts.map +1 -0
  144. package/dist/integrations/notion/source.js +463 -0
  145. package/dist/integrations/notion/source.js.map +1 -0
  146. package/dist/llm/api.d.ts +29 -0
  147. package/dist/llm/api.d.ts.map +1 -0
  148. package/dist/llm/api.js +152 -0
  149. package/dist/llm/api.js.map +1 -0
  150. package/dist/llm/index.d.ts +7 -0
  151. package/dist/llm/index.d.ts.map +1 -0
  152. package/dist/llm/index.js +7 -0
  153. package/dist/llm/index.js.map +1 -0
  154. package/dist/llm/providers.d.ts +24 -0
  155. package/dist/llm/providers.d.ts.map +1 -0
  156. package/dist/llm/providers.js +51 -0
  157. package/dist/llm/providers.js.map +1 -0
  158. package/dist/loop/__tests__/agents.test.d.ts +2 -0
  159. package/dist/loop/__tests__/agents.test.d.ts.map +1 -0
  160. package/dist/loop/__tests__/agents.test.js +183 -0
  161. package/dist/loop/__tests__/agents.test.js.map +1 -0
  162. package/dist/loop/__tests__/circuit-breaker.test.d.ts +2 -0
  163. package/dist/loop/__tests__/circuit-breaker.test.d.ts.map +1 -0
  164. package/dist/loop/__tests__/circuit-breaker.test.js +161 -0
  165. package/dist/loop/__tests__/circuit-breaker.test.js.map +1 -0
  166. package/dist/loop/__tests__/cost-tracker.test.d.ts +2 -0
  167. package/dist/loop/__tests__/cost-tracker.test.d.ts.map +1 -0
  168. package/dist/loop/__tests__/cost-tracker.test.js +200 -0
  169. package/dist/loop/__tests__/cost-tracker.test.js.map +1 -0
  170. package/dist/loop/__tests__/rate-limiter.test.d.ts +2 -0
  171. package/dist/loop/__tests__/rate-limiter.test.d.ts.map +1 -0
  172. package/dist/loop/__tests__/rate-limiter.test.js +198 -0
  173. package/dist/loop/__tests__/rate-limiter.test.js.map +1 -0
  174. package/dist/loop/__tests__/validation.test.d.ts +2 -0
  175. package/dist/loop/__tests__/validation.test.d.ts.map +1 -0
  176. package/dist/loop/__tests__/validation.test.js +234 -0
  177. package/dist/loop/__tests__/validation.test.js.map +1 -0
  178. package/dist/loop/agents.d.ts +26 -0
  179. package/dist/loop/agents.d.ts.map +1 -0
  180. package/dist/loop/agents.js +188 -0
  181. package/dist/loop/agents.js.map +1 -0
  182. package/dist/loop/circuit-breaker.d.ts +61 -0
  183. package/dist/loop/circuit-breaker.d.ts.map +1 -0
  184. package/dist/loop/circuit-breaker.js +143 -0
  185. package/dist/loop/circuit-breaker.js.map +1 -0
  186. package/dist/loop/cost-tracker.d.ts +90 -0
  187. package/dist/loop/cost-tracker.d.ts.map +1 -0
  188. package/dist/loop/cost-tracker.js +229 -0
  189. package/dist/loop/cost-tracker.js.map +1 -0
  190. package/dist/loop/estimator.d.ts +20 -0
  191. package/dist/loop/estimator.d.ts.map +1 -0
  192. package/dist/loop/estimator.js +123 -0
  193. package/dist/loop/estimator.js.map +1 -0
  194. package/dist/loop/executor.d.ts +44 -0
  195. package/dist/loop/executor.d.ts.map +1 -0
  196. package/dist/loop/executor.js +646 -0
  197. package/dist/loop/executor.js.map +1 -0
  198. package/dist/loop/progress.d.ts +34 -0
  199. package/dist/loop/progress.d.ts.map +1 -0
  200. package/dist/loop/progress.js +186 -0
  201. package/dist/loop/progress.js.map +1 -0
  202. package/dist/loop/rate-limiter.d.ts +71 -0
  203. package/dist/loop/rate-limiter.d.ts.map +1 -0
  204. package/dist/loop/rate-limiter.js +151 -0
  205. package/dist/loop/rate-limiter.js.map +1 -0
  206. package/dist/loop/semantic-analyzer.d.ts +33 -0
  207. package/dist/loop/semantic-analyzer.d.ts.map +1 -0
  208. package/dist/loop/semantic-analyzer.js +153 -0
  209. package/dist/loop/semantic-analyzer.js.map +1 -0
  210. package/dist/loop/skills.d.ts +29 -0
  211. package/dist/loop/skills.d.ts.map +1 -0
  212. package/dist/loop/skills.js +174 -0
  213. package/dist/loop/skills.js.map +1 -0
  214. package/dist/loop/step-detector.d.ts +17 -0
  215. package/dist/loop/step-detector.d.ts.map +1 -0
  216. package/dist/loop/step-detector.js +280 -0
  217. package/dist/loop/step-detector.js.map +1 -0
  218. package/dist/loop/task-counter.d.ts +41 -0
  219. package/dist/loop/task-counter.d.ts.map +1 -0
  220. package/dist/loop/task-counter.js +99 -0
  221. package/dist/loop/task-counter.js.map +1 -0
  222. package/dist/loop/validation.d.ts +28 -0
  223. package/dist/loop/validation.d.ts.map +1 -0
  224. package/dist/loop/validation.js +138 -0
  225. package/dist/loop/validation.js.map +1 -0
  226. package/dist/mcp/core/init.d.ts +15 -0
  227. package/dist/mcp/core/init.d.ts.map +1 -0
  228. package/dist/mcp/core/init.js +272 -0
  229. package/dist/mcp/core/init.js.map +1 -0
  230. package/dist/mcp/core/plan.d.ts +15 -0
  231. package/dist/mcp/core/plan.d.ts.map +1 -0
  232. package/dist/mcp/core/plan.js +90 -0
  233. package/dist/mcp/core/plan.js.map +1 -0
  234. package/dist/mcp/core/run.d.ts +26 -0
  235. package/dist/mcp/core/run.d.ts.map +1 -0
  236. package/dist/mcp/core/run.js +114 -0
  237. package/dist/mcp/core/run.js.map +1 -0
  238. package/dist/mcp/prompts.d.ts +10 -0
  239. package/dist/mcp/prompts.d.ts.map +1 -0
  240. package/dist/mcp/prompts.js +163 -0
  241. package/dist/mcp/prompts.js.map +1 -0
  242. package/dist/mcp/resources.d.ts +16 -0
  243. package/dist/mcp/resources.d.ts.map +1 -0
  244. package/dist/mcp/resources.js +114 -0
  245. package/dist/mcp/resources.js.map +1 -0
  246. package/dist/mcp/server.d.ts +10 -0
  247. package/dist/mcp/server.d.ts.map +1 -0
  248. package/dist/mcp/server.js +73 -0
  249. package/dist/mcp/server.js.map +1 -0
  250. package/dist/mcp/tools.d.ts +15 -0
  251. package/dist/mcp/tools.d.ts.map +1 -0
  252. package/dist/mcp/tools.js +316 -0
  253. package/dist/mcp/tools.js.map +1 -0
  254. package/dist/presets/index.d.ts +36 -0
  255. package/dist/presets/index.d.ts.map +1 -0
  256. package/dist/presets/index.js +236 -0
  257. package/dist/presets/index.js.map +1 -0
  258. package/dist/setup/agent-detector.d.ts +57 -0
  259. package/dist/setup/agent-detector.d.ts.map +1 -0
  260. package/dist/setup/agent-detector.js +170 -0
  261. package/dist/setup/agent-detector.js.map +1 -0
  262. package/dist/setup/index.d.ts +7 -0
  263. package/dist/setup/index.d.ts.map +1 -0
  264. package/dist/setup/index.js +7 -0
  265. package/dist/setup/index.js.map +1 -0
  266. package/dist/setup/llm-tester.d.ts +33 -0
  267. package/dist/setup/llm-tester.d.ts.map +1 -0
  268. package/dist/setup/llm-tester.js +105 -0
  269. package/dist/setup/llm-tester.js.map +1 -0
  270. package/dist/setup/wizard.d.ts +19 -0
  271. package/dist/setup/wizard.d.ts.map +1 -0
  272. package/dist/setup/wizard.js +313 -0
  273. package/dist/setup/wizard.js.map +1 -0
  274. package/dist/sources/__tests__/file.test.d.ts +2 -0
  275. package/dist/sources/__tests__/file.test.d.ts.map +1 -0
  276. package/dist/sources/__tests__/file.test.js +126 -0
  277. package/dist/sources/__tests__/file.test.js.map +1 -0
  278. package/dist/sources/__tests__/github.test.d.ts +2 -0
  279. package/dist/sources/__tests__/github.test.d.ts.map +1 -0
  280. package/dist/sources/__tests__/github.test.js +157 -0
  281. package/dist/sources/__tests__/github.test.js.map +1 -0
  282. package/dist/sources/base.d.ts +72 -0
  283. package/dist/sources/base.d.ts.map +1 -0
  284. package/dist/sources/base.js +127 -0
  285. package/dist/sources/base.js.map +1 -0
  286. package/dist/sources/builtin/file.d.ts +21 -0
  287. package/dist/sources/builtin/file.d.ts.map +1 -0
  288. package/dist/sources/builtin/file.js +129 -0
  289. package/dist/sources/builtin/file.js.map +1 -0
  290. package/dist/sources/builtin/github-scraper.d.ts +65 -0
  291. package/dist/sources/builtin/github-scraper.d.ts.map +1 -0
  292. package/dist/sources/builtin/github-scraper.js +324 -0
  293. package/dist/sources/builtin/github-scraper.js.map +1 -0
  294. package/dist/sources/builtin/pdf.d.ts +24 -0
  295. package/dist/sources/builtin/pdf.d.ts.map +1 -0
  296. package/dist/sources/builtin/pdf.js +174 -0
  297. package/dist/sources/builtin/pdf.js.map +1 -0
  298. package/dist/sources/builtin/url.d.ts +47 -0
  299. package/dist/sources/builtin/url.d.ts.map +1 -0
  300. package/dist/sources/builtin/url.js +429 -0
  301. package/dist/sources/builtin/url.js.map +1 -0
  302. package/dist/sources/config.d.ts +72 -0
  303. package/dist/sources/config.d.ts.map +1 -0
  304. package/dist/sources/config.js +215 -0
  305. package/dist/sources/config.js.map +1 -0
  306. package/dist/sources/index.d.ts +47 -0
  307. package/dist/sources/index.d.ts.map +1 -0
  308. package/dist/sources/index.js +210 -0
  309. package/dist/sources/index.js.map +1 -0
  310. package/dist/sources/integrations/github.d.ts +24 -0
  311. package/dist/sources/integrations/github.d.ts.map +1 -0
  312. package/dist/sources/integrations/github.js +193 -0
  313. package/dist/sources/integrations/github.js.map +1 -0
  314. package/dist/sources/integrations/linear.d.ts +18 -0
  315. package/dist/sources/integrations/linear.d.ts.map +1 -0
  316. package/dist/sources/integrations/linear.js +197 -0
  317. package/dist/sources/integrations/linear.js.map +1 -0
  318. package/dist/sources/integrations/notion.d.ts +39 -0
  319. package/dist/sources/integrations/notion.d.ts.map +1 -0
  320. package/dist/sources/integrations/notion.js +343 -0
  321. package/dist/sources/integrations/notion.js.map +1 -0
  322. package/dist/sources/integrations/todoist.d.ts +18 -0
  323. package/dist/sources/integrations/todoist.d.ts.map +1 -0
  324. package/dist/sources/integrations/todoist.js +154 -0
  325. package/dist/sources/integrations/todoist.js.map +1 -0
  326. package/dist/sources/types.d.ts +106 -0
  327. package/dist/sources/types.d.ts.map +1 -0
  328. package/dist/sources/types.js +9 -0
  329. package/dist/sources/types.js.map +1 -0
  330. package/dist/ui/index.d.ts +3 -0
  331. package/dist/ui/index.d.ts.map +1 -0
  332. package/dist/ui/index.js +3 -0
  333. package/dist/ui/index.js.map +1 -0
  334. package/dist/ui/progress-renderer.d.ts +54 -0
  335. package/dist/ui/progress-renderer.d.ts.map +1 -0
  336. package/dist/ui/progress-renderer.js +118 -0
  337. package/dist/ui/progress-renderer.js.map +1 -0
  338. package/dist/ui/shimmer.d.ts +16 -0
  339. package/dist/ui/shimmer.d.ts.map +1 -0
  340. package/dist/ui/shimmer.js +31 -0
  341. package/dist/ui/shimmer.js.map +1 -0
  342. package/dist/wizard/ascii-art.d.ts +93 -0
  343. package/dist/wizard/ascii-art.d.ts.map +1 -0
  344. package/dist/wizard/ascii-art.js +378 -0
  345. package/dist/wizard/ascii-art.js.map +1 -0
  346. package/dist/wizard/idea-prompts.d.ts +18 -0
  347. package/dist/wizard/idea-prompts.d.ts.map +1 -0
  348. package/dist/wizard/idea-prompts.js +154 -0
  349. package/dist/wizard/idea-prompts.js.map +1 -0
  350. package/dist/wizard/idea-ui.d.ts +34 -0
  351. package/dist/wizard/idea-ui.d.ts.map +1 -0
  352. package/dist/wizard/idea-ui.js +225 -0
  353. package/dist/wizard/idea-ui.js.map +1 -0
  354. package/dist/wizard/ideas.d.ts +27 -0
  355. package/dist/wizard/ideas.d.ts.map +1 -0
  356. package/dist/wizard/ideas.js +511 -0
  357. package/dist/wizard/ideas.js.map +1 -0
  358. package/dist/wizard/index.d.ts +11 -0
  359. package/dist/wizard/index.d.ts.map +1 -0
  360. package/dist/wizard/index.js +472 -0
  361. package/dist/wizard/index.js.map +1 -0
  362. package/dist/wizard/llm.d.ts +14 -0
  363. package/dist/wizard/llm.d.ts.map +1 -0
  364. package/dist/wizard/llm.js +420 -0
  365. package/dist/wizard/llm.js.map +1 -0
  366. package/dist/wizard/prompts.d.ts +75 -0
  367. package/dist/wizard/prompts.d.ts.map +1 -0
  368. package/dist/wizard/prompts.js +455 -0
  369. package/dist/wizard/prompts.js.map +1 -0
  370. package/dist/wizard/spec-generator.d.ts +14 -0
  371. package/dist/wizard/spec-generator.d.ts.map +1 -0
  372. package/dist/wizard/spec-generator.js +200 -0
  373. package/dist/wizard/spec-generator.js.map +1 -0
  374. package/dist/wizard/types.d.ts +53 -0
  375. package/dist/wizard/types.d.ts.map +1 -0
  376. package/dist/wizard/types.js +10 -0
  377. package/dist/wizard/types.js.map +1 -0
  378. package/dist/wizard/ui.d.ts +57 -0
  379. package/dist/wizard/ui.d.ts.map +1 -0
  380. package/dist/wizard/ui.js +211 -0
  381. package/dist/wizard/ui.js.map +1 -0
  382. package/package.json +67 -8
@@ -0,0 +1,280 @@
1
+ /**
2
+ * Step detector for Claude Code JSONL output
3
+ *
4
+ * Parses the stream-json output from Claude Code CLI and detects
5
+ * what step the agent is currently performing.
6
+ */
7
+ /**
8
+ * Check if a file path looks like a test file
9
+ */
10
+ function isTestFile(filePath) {
11
+ const lower = filePath.toLowerCase();
12
+ return (lower.includes('.test.') ||
13
+ lower.includes('.spec.') ||
14
+ lower.includes('__tests__') ||
15
+ lower.includes('_test.go'));
16
+ }
17
+ /**
18
+ * Extract filename from path
19
+ */
20
+ function getFilename(filePath) {
21
+ return filePath.split('/').pop() || filePath.split('\\').pop() || 'file';
22
+ }
23
+ /**
24
+ * Detect the current step from a JSON output line
25
+ * Returns human-readable step description or null if not detectable
26
+ */
27
+ export function detectStepFromOutput(line) {
28
+ const trimmed = line.trim();
29
+ // Fast path: skip non-JSON lines
30
+ if (!trimmed.startsWith('{')) {
31
+ return null;
32
+ }
33
+ try {
34
+ const parsed = JSON.parse(trimmed);
35
+ // Extract fields for pattern matching
36
+ const toolName = parsed.tool?.toLowerCase() ||
37
+ parsed.name?.toLowerCase() ||
38
+ parsed.tool_name?.toLowerCase() ||
39
+ '';
40
+ const command = parsed.command?.toLowerCase() || '';
41
+ const filePath = (parsed.file_path || parsed.filePath || parsed.path || '').toLowerCase();
42
+ const description = (parsed.description || '').toLowerCase();
43
+ // Check tool name to determine operation type
44
+ const isReadOperation = ['read', 'glob', 'grep'].includes(toolName);
45
+ const isWriteOperation = ['write', 'edit'].includes(toolName);
46
+ // Reading code - check this early
47
+ if (isReadOperation) {
48
+ return 'Reading code...';
49
+ }
50
+ // Git commit
51
+ if (command.includes('git commit') || description.includes('git commit')) {
52
+ return 'Committing changes...';
53
+ }
54
+ // Git add/staging
55
+ if (command.includes('git add') || description.includes('git add')) {
56
+ return 'Staging files...';
57
+ }
58
+ // Package management
59
+ if (command.includes('npm install') ||
60
+ command.includes('bun install') ||
61
+ command.includes('pnpm install')) {
62
+ return 'Installing dependencies...';
63
+ }
64
+ if (command.includes('npm init') ||
65
+ command.includes('bun init') ||
66
+ command.includes('pnpm init')) {
67
+ return 'Initializing project...';
68
+ }
69
+ // Build commands
70
+ if (command.includes('npm run build') ||
71
+ command.includes('bun run build') ||
72
+ command.includes('build')) {
73
+ return 'Building project...';
74
+ }
75
+ // Linting
76
+ if (command.includes('lint') ||
77
+ command.includes('eslint') ||
78
+ command.includes('biome') ||
79
+ command.includes('prettier')) {
80
+ return 'Linting code...';
81
+ }
82
+ // Testing
83
+ if (command.includes('vitest') ||
84
+ command.includes('jest') ||
85
+ command.includes('bun test') ||
86
+ command.includes('npm test') ||
87
+ command.includes('pytest') ||
88
+ command.includes('go test')) {
89
+ return 'Running tests...';
90
+ }
91
+ // Writing tests - only for write operations to test files
92
+ if (isWriteOperation && isTestFile(filePath)) {
93
+ return 'Writing tests...';
94
+ }
95
+ // Writing/Editing code
96
+ if (isWriteOperation) {
97
+ const filename = getFilename(filePath);
98
+ return `Writing ${filename}...`;
99
+ }
100
+ // Bash commands (generic)
101
+ if (toolName === 'bash' && command) {
102
+ // Try to extract meaningful description from command
103
+ if (command.includes('mkdir'))
104
+ return 'Creating directories...';
105
+ if (command.includes('rm '))
106
+ return 'Removing files...';
107
+ if (command.includes('cp '))
108
+ return 'Copying files...';
109
+ if (command.includes('mv '))
110
+ return 'Moving files...';
111
+ return 'Running command...';
112
+ }
113
+ // Assistant message with tool_use - this is the main format from Claude Code
114
+ if (parsed.type === 'assistant' && parsed.message?.content) {
115
+ const content = parsed.message.content;
116
+ if (Array.isArray(content)) {
117
+ for (const block of content) {
118
+ if (block.type === 'tool_use') {
119
+ const blockToolName = block.name?.toLowerCase() || '';
120
+ const input = block.input || {};
121
+ // Extract file path from tool input
122
+ const blockFilePath = (input.file_path ||
123
+ input.filePath ||
124
+ input.path ||
125
+ '').toLowerCase();
126
+ const blockCommand = (input.command || '').toLowerCase();
127
+ // Read operations
128
+ if (blockToolName === 'read') {
129
+ const filename = getFilename(blockFilePath || 'file');
130
+ return `Reading ${filename}...`;
131
+ }
132
+ if (blockToolName === 'glob') {
133
+ return 'Searching files...';
134
+ }
135
+ if (blockToolName === 'grep') {
136
+ return 'Searching code...';
137
+ }
138
+ // Write/Edit operations - show specific filename
139
+ if (blockToolName === 'write' || blockToolName === 'edit') {
140
+ if (blockFilePath) {
141
+ const filename = getFilename(blockFilePath);
142
+ if (isTestFile(blockFilePath)) {
143
+ return `Writing tests (${filename})...`;
144
+ }
145
+ return `Writing ${filename}...`;
146
+ }
147
+ return 'Writing code...';
148
+ }
149
+ // Bash commands - parse the command for specifics
150
+ if (blockToolName === 'bash') {
151
+ if (blockCommand.includes('npm install') ||
152
+ blockCommand.includes('bun install') ||
153
+ blockCommand.includes('pnpm install')) {
154
+ return 'Installing dependencies...';
155
+ }
156
+ if (blockCommand.includes('npm init') ||
157
+ blockCommand.includes('bun init') ||
158
+ blockCommand.includes('npm create')) {
159
+ return 'Initializing project...';
160
+ }
161
+ if (blockCommand.includes('npm run build') ||
162
+ blockCommand.includes('bun run build') ||
163
+ blockCommand.includes('tsc')) {
164
+ return 'Building project...';
165
+ }
166
+ if (blockCommand.includes('npm test') ||
167
+ blockCommand.includes('vitest') ||
168
+ blockCommand.includes('jest')) {
169
+ return 'Running tests...';
170
+ }
171
+ if (blockCommand.includes('git commit')) {
172
+ return 'Committing changes...';
173
+ }
174
+ if (blockCommand.includes('git add')) {
175
+ return 'Staging files...';
176
+ }
177
+ if (blockCommand.includes('mkdir')) {
178
+ return 'Creating directories...';
179
+ }
180
+ if (blockCommand.includes('npm run dev') || blockCommand.includes('bun run dev')) {
181
+ return 'Starting dev server...';
182
+ }
183
+ // Show description if available
184
+ const desc = (input.description || '').toLowerCase();
185
+ if (desc) {
186
+ return desc.slice(0, 30) + (desc.length > 30 ? '...' : '');
187
+ }
188
+ return 'Running command...';
189
+ }
190
+ // Task tool (subagent)
191
+ if (blockToolName === 'task') {
192
+ return 'Running subagent...';
193
+ }
194
+ // WebFetch
195
+ if (blockToolName === 'webfetch' || blockToolName === 'websearch') {
196
+ return 'Fetching from web...';
197
+ }
198
+ // Generic tool
199
+ return `Using ${block.name}...`;
200
+ }
201
+ // Text content = thinking
202
+ if (block.type === 'text') {
203
+ return 'Thinking...';
204
+ }
205
+ }
206
+ }
207
+ return 'Thinking...';
208
+ }
209
+ // System messages
210
+ if (parsed.type === 'system') {
211
+ if (parsed.subtype === 'init') {
212
+ return 'Starting up...';
213
+ }
214
+ }
215
+ // User message (usually tool result) - Claude is processing a result
216
+ if (parsed.type === 'user') {
217
+ return 'Processing...';
218
+ }
219
+ // Result message - task complete
220
+ if (parsed.type === 'result') {
221
+ return 'Finishing up...';
222
+ }
223
+ // Content block start - indicates tool is starting
224
+ if (parsed.type === 'content_block_start' && parsed.content_block) {
225
+ const block = parsed.content_block;
226
+ if (block.type === 'tool_use') {
227
+ const blockToolName = block.name?.toLowerCase() || '';
228
+ if (blockToolName === 'read')
229
+ return 'Reading...';
230
+ if (blockToolName === 'write' || blockToolName === 'edit')
231
+ return 'Writing...';
232
+ if (blockToolName === 'bash')
233
+ return 'Running command...';
234
+ if (blockToolName === 'glob')
235
+ return 'Searching files...';
236
+ if (blockToolName === 'grep')
237
+ return 'Searching code...';
238
+ return `Using ${block.name}...`;
239
+ }
240
+ }
241
+ return null;
242
+ }
243
+ catch {
244
+ // Not valid JSON, ignore
245
+ return null;
246
+ }
247
+ }
248
+ /**
249
+ * Extract text content from JSONL output
250
+ * Returns the human-readable text that should be shown to user
251
+ */
252
+ export function extractTextFromOutput(line) {
253
+ const trimmed = line.trim();
254
+ if (!trimmed.startsWith('{')) {
255
+ return null;
256
+ }
257
+ try {
258
+ const parsed = JSON.parse(trimmed);
259
+ // Result message contains final summary
260
+ if (parsed.type === 'result' && parsed.result) {
261
+ return parsed.result;
262
+ }
263
+ // Assistant text content
264
+ if (parsed.type === 'assistant' && parsed.message?.content) {
265
+ const content = parsed.message.content;
266
+ if (Array.isArray(content)) {
267
+ for (const block of content) {
268
+ if (block.type === 'text' && block.text) {
269
+ return block.text;
270
+ }
271
+ }
272
+ }
273
+ }
274
+ return null;
275
+ }
276
+ catch {
277
+ return null;
278
+ }
279
+ }
280
+ //# sourceMappingURL=step-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"step-detector.js","sourceRoot":"","sources":["../../src/loop/step-detector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ export interface PlanTask {
2
+ name: string;
3
+ completed: boolean;
4
+ index: number;
5
+ }
6
+ export interface TaskCount {
7
+ total: number;
8
+ completed: number;
9
+ pending: number;
10
+ tasks: PlanTask[];
11
+ }
12
+ /**
13
+ * Parse tasks from IMPLEMENTATION_PLAN.md
14
+ * Tasks are identified by markdown checkboxes: - [ ] or - [x]
15
+ */
16
+ export declare function parsePlanTasks(cwd: string): TaskCount;
17
+ /**
18
+ * Get the current task (first uncompleted task)
19
+ */
20
+ export declare function getCurrentTask(cwd: string): PlanTask | null;
21
+ /**
22
+ * Get task by index (0-based)
23
+ */
24
+ export declare function getTaskByIndex(cwd: string, index: number): PlanTask | null;
25
+ /**
26
+ * Calculate optimal number of loop iterations based on task count
27
+ *
28
+ * Formula:
29
+ * - If tasks exist: pendingTasks + buffer (for retries/validation fixes)
30
+ * - Buffer = max(2, pendingTasks * 0.3) - at least 2, or 30% extra for retries
31
+ * - Minimum: 3 (even for small tasks)
32
+ * - Maximum: 25 (prevent runaway loops)
33
+ * - If no plan: 10 (sensible default)
34
+ */
35
+ export declare function calculateOptimalIterations(cwd: string): {
36
+ iterations: number;
37
+ taskCount: TaskCount;
38
+ reason: string;
39
+ };
40
+ export declare const countPlanTasks: typeof parsePlanTasks;
41
+ //# sourceMappingURL=task-counter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-counter.d.ts","sourceRoot":"","sources":["../../src/loop/task-counter.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAwCrD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAG3D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAG1E;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CAoCA;AAGD,eAAO,MAAM,cAAc,uBAAiB,CAAC"}
@@ -0,0 +1,99 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ /**
4
+ * Parse tasks from IMPLEMENTATION_PLAN.md
5
+ * Tasks are identified by markdown checkboxes: - [ ] or - [x]
6
+ */
7
+ export function parsePlanTasks(cwd) {
8
+ const planPath = join(cwd, 'IMPLEMENTATION_PLAN.md');
9
+ if (!existsSync(planPath)) {
10
+ return { total: 0, completed: 0, pending: 0, tasks: [] };
11
+ }
12
+ try {
13
+ const content = readFileSync(planPath, 'utf-8');
14
+ const tasks = [];
15
+ // Match checkbox items with their text
16
+ // Pattern: - [ ] Task name or - [x] Task name
17
+ const taskRegex = /- \[([xX ])\] (.+)/g;
18
+ let match;
19
+ let index = 0;
20
+ while ((match = taskRegex.exec(content)) !== null) {
21
+ const completed = match[1].toLowerCase() === 'x';
22
+ const name = match[2].trim();
23
+ tasks.push({
24
+ name,
25
+ completed,
26
+ index: index++,
27
+ });
28
+ }
29
+ const completed = tasks.filter((t) => t.completed).length;
30
+ const pending = tasks.filter((t) => !t.completed).length;
31
+ return {
32
+ total: tasks.length,
33
+ completed,
34
+ pending,
35
+ tasks,
36
+ };
37
+ }
38
+ catch {
39
+ return { total: 0, completed: 0, pending: 0, tasks: [] };
40
+ }
41
+ }
42
+ /**
43
+ * Get the current task (first uncompleted task)
44
+ */
45
+ export function getCurrentTask(cwd) {
46
+ const { tasks } = parsePlanTasks(cwd);
47
+ return tasks.find((t) => !t.completed) || null;
48
+ }
49
+ /**
50
+ * Get task by index (0-based)
51
+ */
52
+ export function getTaskByIndex(cwd, index) {
53
+ const { tasks } = parsePlanTasks(cwd);
54
+ return tasks[index] || null;
55
+ }
56
+ /**
57
+ * Calculate optimal number of loop iterations based on task count
58
+ *
59
+ * Formula:
60
+ * - If tasks exist: pendingTasks + buffer (for retries/validation fixes)
61
+ * - Buffer = max(2, pendingTasks * 0.3) - at least 2, or 30% extra for retries
62
+ * - Minimum: 3 (even for small tasks)
63
+ * - Maximum: 25 (prevent runaway loops)
64
+ * - If no plan: 10 (sensible default)
65
+ */
66
+ export function calculateOptimalIterations(cwd) {
67
+ const taskCount = parsePlanTasks(cwd);
68
+ // No implementation plan - use default
69
+ if (taskCount.total === 0) {
70
+ return {
71
+ iterations: 10,
72
+ taskCount,
73
+ reason: 'No implementation plan found, using default',
74
+ };
75
+ }
76
+ // All tasks already completed
77
+ if (taskCount.pending === 0) {
78
+ return {
79
+ iterations: 3,
80
+ taskCount,
81
+ reason: 'All tasks completed, minimal iterations for verification',
82
+ };
83
+ }
84
+ // Calculate buffer (at least 2, or 30% of pending tasks for retries)
85
+ const buffer = Math.max(2, Math.ceil(taskCount.pending * 0.3));
86
+ // Calculate iterations: pending tasks + buffer
87
+ let iterations = taskCount.pending + buffer;
88
+ // Apply bounds
89
+ iterations = Math.max(3, iterations); // Minimum 3
90
+ iterations = Math.min(25, iterations); // Maximum 25
91
+ return {
92
+ iterations,
93
+ taskCount,
94
+ reason: `${taskCount.pending} pending tasks + ${buffer} buffer`,
95
+ };
96
+ }
97
+ // Keep backward compatibility
98
+ export const countPlanTasks = parsePlanTasks;
99
+ //# sourceMappingURL=task-counter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-counter.js","sourceRoot":"","sources":["../../src/loop/task-counter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface ValidationCommand {
2
+ name: string;
3
+ command: string;
4
+ args: string[];
5
+ }
6
+ export interface ValidationResult {
7
+ success: boolean;
8
+ command: string;
9
+ output: string;
10
+ error?: string;
11
+ }
12
+ /**
13
+ * Detect validation commands from AGENTS.md or package.json
14
+ */
15
+ export declare function detectValidationCommands(cwd: string): ValidationCommand[];
16
+ /**
17
+ * Run a single validation command
18
+ */
19
+ export declare function runValidation(cwd: string, command: ValidationCommand): Promise<ValidationResult>;
20
+ /**
21
+ * Run all validation commands
22
+ */
23
+ export declare function runAllValidations(cwd: string, commands: ValidationCommand[]): Promise<ValidationResult[]>;
24
+ /**
25
+ * Format validation errors for feedback to the agent
26
+ */
27
+ export declare function formatValidationFeedback(results: ValidationResult[]): string;
28
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/loop/validation.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAsEzE;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CA8B3B;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,iBAAiB,EAAE,GAC5B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAc7B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAmB5E"}
@@ -0,0 +1,138 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { execa } from 'execa';
4
+ /**
5
+ * Detect validation commands from AGENTS.md or package.json
6
+ */
7
+ export function detectValidationCommands(cwd) {
8
+ const commands = [];
9
+ // Check AGENTS.md for validation commands
10
+ const agentsPath = join(cwd, 'AGENTS.md');
11
+ if (existsSync(agentsPath)) {
12
+ const content = readFileSync(agentsPath, 'utf-8');
13
+ // Look for test command (must be in backticks after bullet or colon)
14
+ // Matches: "- **Test**: `npm test`" or "- Test: `bun test`" or "* test: `vitest`"
15
+ const testMatch = content.match(/[-*]\s*\*?\*?test\*?\*?[:\s]+`([^`]+)`/i);
16
+ if (testMatch) {
17
+ const parts = testMatch[1].trim().split(/\s+/);
18
+ commands.push({
19
+ name: 'test',
20
+ command: parts[0],
21
+ args: parts.slice(1),
22
+ });
23
+ }
24
+ // Look for lint command (must be in backticks after bullet or colon)
25
+ const lintMatch = content.match(/[-*]\s*\*?\*?lint\*?\*?[:\s]+`([^`]+)`/i);
26
+ if (lintMatch) {
27
+ const parts = lintMatch[1].trim().split(/\s+/);
28
+ commands.push({
29
+ name: 'lint',
30
+ command: parts[0],
31
+ args: parts.slice(1),
32
+ });
33
+ }
34
+ // Look for build command (must be in backticks after bullet or colon)
35
+ const buildMatch = content.match(/[-*]\s*\*?\*?build\*?\*?[:\s]+`([^`]+)`/i);
36
+ if (buildMatch) {
37
+ const parts = buildMatch[1].trim().split(/\s+/);
38
+ commands.push({
39
+ name: 'build',
40
+ command: parts[0],
41
+ args: parts.slice(1),
42
+ });
43
+ }
44
+ }
45
+ // Fallback to package.json scripts
46
+ if (commands.length === 0) {
47
+ const packagePath = join(cwd, 'package.json');
48
+ if (existsSync(packagePath)) {
49
+ try {
50
+ const pkg = JSON.parse(readFileSync(packagePath, 'utf-8'));
51
+ const scripts = pkg.scripts || {};
52
+ if (scripts.test && scripts.test !== 'echo "Error: no test specified" && exit 1') {
53
+ commands.push({ name: 'test', command: 'npm', args: ['run', 'test'] });
54
+ }
55
+ if (scripts.lint) {
56
+ commands.push({ name: 'lint', command: 'npm', args: ['run', 'lint'] });
57
+ }
58
+ if (scripts.build) {
59
+ commands.push({ name: 'build', command: 'npm', args: ['run', 'build'] });
60
+ }
61
+ if (scripts.typecheck) {
62
+ commands.push({ name: 'typecheck', command: 'npm', args: ['run', 'typecheck'] });
63
+ }
64
+ }
65
+ catch {
66
+ // Invalid package.json
67
+ }
68
+ }
69
+ }
70
+ return commands;
71
+ }
72
+ /**
73
+ * Run a single validation command
74
+ */
75
+ export async function runValidation(cwd, command) {
76
+ try {
77
+ const result = await execa(command.command, command.args, {
78
+ cwd,
79
+ timeout: 300000, // 5 minute timeout
80
+ reject: false,
81
+ });
82
+ if (result.exitCode === 0) {
83
+ return {
84
+ success: true,
85
+ command: `${command.command} ${command.args.join(' ')}`,
86
+ output: result.stdout,
87
+ };
88
+ }
89
+ return {
90
+ success: false,
91
+ command: `${command.command} ${command.args.join(' ')}`,
92
+ output: result.stdout,
93
+ error: result.stderr || result.stdout,
94
+ };
95
+ }
96
+ catch (error) {
97
+ return {
98
+ success: false,
99
+ command: `${command.command} ${command.args.join(' ')}`,
100
+ output: '',
101
+ error: error instanceof Error ? error.message : 'Unknown error',
102
+ };
103
+ }
104
+ }
105
+ /**
106
+ * Run all validation commands
107
+ */
108
+ export async function runAllValidations(cwd, commands) {
109
+ const results = [];
110
+ for (const command of commands) {
111
+ const result = await runValidation(cwd, command);
112
+ results.push(result);
113
+ // Stop on first failure
114
+ if (!result.success) {
115
+ break;
116
+ }
117
+ }
118
+ return results;
119
+ }
120
+ /**
121
+ * Format validation errors for feedback to the agent
122
+ */
123
+ export function formatValidationFeedback(results) {
124
+ const failedResults = results.filter((r) => !r.success);
125
+ if (failedResults.length === 0) {
126
+ return '';
127
+ }
128
+ const feedback = ['## Validation Failed\n'];
129
+ for (const result of failedResults) {
130
+ feedback.push(`### ${result.command}`);
131
+ feedback.push('```');
132
+ feedback.push(result.error || result.output);
133
+ feedback.push('```\n');
134
+ }
135
+ feedback.push('Please fix the above issues before continuing.');
136
+ return feedback.join('\n');
137
+ }
138
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/loop/validation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface InitCoreOptions {
2
+ path: string;
3
+ name?: string;
4
+ }
5
+ export interface InitCoreResult {
6
+ success: boolean;
7
+ path: string;
8
+ filesCreated: string[];
9
+ error?: string;
10
+ }
11
+ /**
12
+ * Core initialization logic without CLI dependencies
13
+ */
14
+ export declare function initCore(options: InitCoreOptions): Promise<InitCoreResult>;
15
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/mcp/core/init.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAmND;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAoFhF"}