@specforge/mcp 2.0.9 → 2.1.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 (433) hide show
  1. package/README.md +324 -0
  2. package/bin/specforge-mcp +19 -1
  3. package/dist/cli/commands/blocked.d.ts +16 -0
  4. package/dist/cli/commands/blocked.d.ts.map +1 -0
  5. package/dist/cli/commands/blocked.js +214 -0
  6. package/dist/cli/commands/blocked.js.map +1 -0
  7. package/dist/cli/commands/configure.d.ts +16 -0
  8. package/dist/cli/commands/configure.d.ts.map +1 -0
  9. package/dist/cli/commands/configure.js +218 -0
  10. package/dist/cli/commands/configure.js.map +1 -0
  11. package/dist/cli/commands/configure.types.d.ts +110 -0
  12. package/dist/cli/commands/configure.types.d.ts.map +1 -0
  13. package/dist/cli/commands/configure.types.js +105 -0
  14. package/dist/cli/commands/configure.types.js.map +1 -0
  15. package/dist/cli/commands/debug/call.d.ts +14 -0
  16. package/dist/cli/commands/debug/call.d.ts.map +1 -0
  17. package/dist/cli/commands/debug/call.js +117 -0
  18. package/dist/cli/commands/debug/call.js.map +1 -0
  19. package/dist/cli/commands/debug/index.d.ts +12 -0
  20. package/dist/cli/commands/debug/index.d.ts.map +1 -0
  21. package/dist/cli/commands/debug/index.js +12 -0
  22. package/dist/cli/commands/debug/index.js.map +1 -0
  23. package/dist/cli/commands/debug/register.d.ts +11 -0
  24. package/dist/cli/commands/debug/register.d.ts.map +1 -0
  25. package/dist/cli/commands/debug/register.js +90 -0
  26. package/dist/cli/commands/debug/register.js.map +1 -0
  27. package/dist/cli/commands/debug/test.d.ts +13 -0
  28. package/dist/cli/commands/debug/test.d.ts.map +1 -0
  29. package/dist/cli/commands/debug/test.js +117 -0
  30. package/dist/cli/commands/debug/test.js.map +1 -0
  31. package/dist/cli/commands/debug/tools.d.ts +13 -0
  32. package/dist/cli/commands/debug/tools.d.ts.map +1 -0
  33. package/dist/cli/commands/debug/tools.js +117 -0
  34. package/dist/cli/commands/debug/tools.js.map +1 -0
  35. package/dist/cli/commands/debug/types.d.ts +117 -0
  36. package/dist/cli/commands/debug/types.d.ts.map +1 -0
  37. package/dist/cli/commands/debug/types.js +43 -0
  38. package/dist/cli/commands/debug/types.js.map +1 -0
  39. package/dist/cli/commands/debug/whoami.d.ts +13 -0
  40. package/dist/cli/commands/debug/whoami.d.ts.map +1 -0
  41. package/dist/cli/commands/debug/whoami.js +161 -0
  42. package/dist/cli/commands/debug/whoami.js.map +1 -0
  43. package/dist/cli/commands/docs/content/api.d.ts +7 -0
  44. package/dist/cli/commands/docs/content/api.d.ts.map +1 -0
  45. package/dist/cli/commands/docs/content/api.js +64 -0
  46. package/dist/cli/commands/docs/content/api.js.map +1 -0
  47. package/dist/cli/commands/docs/content/concepts.d.ts +7 -0
  48. package/dist/cli/commands/docs/content/concepts.d.ts.map +1 -0
  49. package/dist/cli/commands/docs/content/concepts.js +68 -0
  50. package/dist/cli/commands/docs/content/concepts.js.map +1 -0
  51. package/dist/cli/commands/docs/content/examples.d.ts +7 -0
  52. package/dist/cli/commands/docs/content/examples.d.ts.map +1 -0
  53. package/dist/cli/commands/docs/content/examples.js +84 -0
  54. package/dist/cli/commands/docs/content/examples.js.map +1 -0
  55. package/dist/cli/commands/docs/content/index.d.ts +10 -0
  56. package/dist/cli/commands/docs/content/index.d.ts.map +1 -0
  57. package/dist/cli/commands/docs/content/index.js +10 -0
  58. package/dist/cli/commands/docs/content/index.js.map +1 -0
  59. package/dist/cli/commands/docs/content/workflow.d.ts +7 -0
  60. package/dist/cli/commands/docs/content/workflow.d.ts.map +1 -0
  61. package/dist/cli/commands/docs/content/workflow.js +44 -0
  62. package/dist/cli/commands/docs/content/workflow.js.map +1 -0
  63. package/dist/cli/commands/docs/content.d.ts +23 -0
  64. package/dist/cli/commands/docs/content.d.ts.map +1 -0
  65. package/dist/cli/commands/docs/content.js +38 -0
  66. package/dist/cli/commands/docs/content.js.map +1 -0
  67. package/dist/cli/commands/docs/display.d.ts +26 -0
  68. package/dist/cli/commands/docs/display.d.ts.map +1 -0
  69. package/dist/cli/commands/docs/display.js +53 -0
  70. package/dist/cli/commands/docs/display.js.map +1 -0
  71. package/dist/cli/commands/docs/docs.d.ts +19 -0
  72. package/dist/cli/commands/docs/docs.d.ts.map +1 -0
  73. package/dist/cli/commands/docs/docs.js +124 -0
  74. package/dist/cli/commands/docs/docs.js.map +1 -0
  75. package/dist/cli/commands/docs/index.d.ts +13 -0
  76. package/dist/cli/commands/docs/index.d.ts.map +1 -0
  77. package/dist/cli/commands/docs/index.js +13 -0
  78. package/dist/cli/commands/docs/index.js.map +1 -0
  79. package/dist/cli/commands/docs/register.d.ts +23 -0
  80. package/dist/cli/commands/docs/register.d.ts.map +1 -0
  81. package/dist/cli/commands/docs/register.js +64 -0
  82. package/dist/cli/commands/docs/register.js.map +1 -0
  83. package/dist/cli/commands/docs/tool-docs.d.ts +44 -0
  84. package/dist/cli/commands/docs/tool-docs.d.ts.map +1 -0
  85. package/dist/cli/commands/docs/tool-docs.js +182 -0
  86. package/dist/cli/commands/docs/tool-docs.js.map +1 -0
  87. package/dist/cli/commands/docs/tool-examples.d.ts +14 -0
  88. package/dist/cli/commands/docs/tool-examples.d.ts.map +1 -0
  89. package/dist/cli/commands/docs/tool-examples.js +127 -0
  90. package/dist/cli/commands/docs/tool-examples.js.map +1 -0
  91. package/dist/cli/commands/docs/types.d.ts +108 -0
  92. package/dist/cli/commands/docs/types.d.ts.map +1 -0
  93. package/dist/cli/commands/docs/types.js +33 -0
  94. package/dist/cli/commands/docs/types.js.map +1 -0
  95. package/dist/cli/commands/doctor.d.ts +16 -0
  96. package/dist/cli/commands/doctor.d.ts.map +1 -0
  97. package/dist/cli/commands/doctor.js +322 -0
  98. package/dist/cli/commands/doctor.js.map +1 -0
  99. package/dist/cli/commands/doctor.types.d.ts +177 -0
  100. package/dist/cli/commands/doctor.types.d.ts.map +1 -0
  101. package/dist/cli/commands/doctor.types.js +172 -0
  102. package/dist/cli/commands/doctor.types.js.map +1 -0
  103. package/dist/cli/commands/index.d.ts +18 -0
  104. package/dist/cli/commands/index.d.ts.map +1 -0
  105. package/dist/cli/commands/index.js +18 -0
  106. package/dist/cli/commands/index.js.map +1 -0
  107. package/dist/cli/commands/init.d.ts +17 -0
  108. package/dist/cli/commands/init.d.ts.map +1 -0
  109. package/dist/cli/commands/init.js +326 -0
  110. package/dist/cli/commands/init.js.map +1 -0
  111. package/dist/cli/commands/init.types.d.ts +141 -0
  112. package/dist/cli/commands/init.types.d.ts.map +1 -0
  113. package/dist/cli/commands/init.types.js +24 -0
  114. package/dist/cli/commands/init.types.js.map +1 -0
  115. package/dist/cli/commands/login.d.ts +40 -0
  116. package/dist/cli/commands/login.d.ts.map +1 -0
  117. package/dist/cli/commands/login.js +174 -0
  118. package/dist/cli/commands/login.js.map +1 -0
  119. package/dist/cli/commands/next.d.ts +16 -0
  120. package/dist/cli/commands/next.d.ts.map +1 -0
  121. package/dist/cli/commands/next.js +279 -0
  122. package/dist/cli/commands/next.js.map +1 -0
  123. package/dist/cli/commands/next.types.d.ts +191 -0
  124. package/dist/cli/commands/next.types.d.ts.map +1 -0
  125. package/dist/cli/commands/next.types.js +129 -0
  126. package/dist/cli/commands/next.types.js.map +1 -0
  127. package/dist/cli/commands/projects.d.ts +16 -0
  128. package/dist/cli/commands/projects.d.ts.map +1 -0
  129. package/dist/cli/commands/projects.js +149 -0
  130. package/dist/cli/commands/projects.js.map +1 -0
  131. package/dist/cli/commands/projects.types.d.ts +81 -0
  132. package/dist/cli/commands/projects.types.d.ts.map +1 -0
  133. package/dist/cli/commands/projects.types.js +35 -0
  134. package/dist/cli/commands/projects.types.js.map +1 -0
  135. package/dist/cli/commands/review/display.d.ts +33 -0
  136. package/dist/cli/commands/review/display.d.ts.map +1 -0
  137. package/dist/cli/commands/review/display.js +159 -0
  138. package/dist/cli/commands/review/display.js.map +1 -0
  139. package/dist/cli/commands/review/epic-review.d.ts +13 -0
  140. package/dist/cli/commands/review/epic-review.d.ts.map +1 -0
  141. package/dist/cli/commands/review/epic-review.js +69 -0
  142. package/dist/cli/commands/review/epic-review.js.map +1 -0
  143. package/dist/cli/commands/review/index.d.ts +13 -0
  144. package/dist/cli/commands/review/index.d.ts.map +1 -0
  145. package/dist/cli/commands/review/index.js +17 -0
  146. package/dist/cli/commands/review/index.js.map +1 -0
  147. package/dist/cli/commands/review/report.d.ts +31 -0
  148. package/dist/cli/commands/review/report.d.ts.map +1 -0
  149. package/dist/cli/commands/review/report.js +146 -0
  150. package/dist/cli/commands/review/report.js.map +1 -0
  151. package/dist/cli/commands/review/review.d.ts +17 -0
  152. package/dist/cli/commands/review/review.d.ts.map +1 -0
  153. package/dist/cli/commands/review/review.js +129 -0
  154. package/dist/cli/commands/review/review.js.map +1 -0
  155. package/dist/cli/commands/review/spec-review.d.ts +13 -0
  156. package/dist/cli/commands/review/spec-review.d.ts.map +1 -0
  157. package/dist/cli/commands/review/spec-review.js +65 -0
  158. package/dist/cli/commands/review/spec-review.js.map +1 -0
  159. package/dist/cli/commands/review/ticket-review.d.ts +37 -0
  160. package/dist/cli/commands/review/ticket-review.d.ts.map +1 -0
  161. package/dist/cli/commands/review/ticket-review.js +194 -0
  162. package/dist/cli/commands/review/ticket-review.js.map +1 -0
  163. package/dist/cli/commands/review/types.d.ts +232 -0
  164. package/dist/cli/commands/review/types.d.ts.map +1 -0
  165. package/dist/cli/commands/review/types.js +85 -0
  166. package/dist/cli/commands/review/types.js.map +1 -0
  167. package/dist/cli/commands/scaffold/display.d.ts +27 -0
  168. package/dist/cli/commands/scaffold/display.d.ts.map +1 -0
  169. package/dist/cli/commands/scaffold/display.js +90 -0
  170. package/dist/cli/commands/scaffold/display.js.map +1 -0
  171. package/dist/cli/commands/scaffold/index.d.ts +12 -0
  172. package/dist/cli/commands/scaffold/index.d.ts.map +1 -0
  173. package/dist/cli/commands/scaffold/index.js +12 -0
  174. package/dist/cli/commands/scaffold/index.js.map +1 -0
  175. package/dist/cli/commands/scaffold/register.d.ts +11 -0
  176. package/dist/cli/commands/scaffold/register.d.ts.map +1 -0
  177. package/dist/cli/commands/scaffold/register.js +25 -0
  178. package/dist/cli/commands/scaffold/register.js.map +1 -0
  179. package/dist/cli/commands/scaffold/scaffold.d.ts +11 -0
  180. package/dist/cli/commands/scaffold/scaffold.d.ts.map +1 -0
  181. package/dist/cli/commands/scaffold/scaffold.js +111 -0
  182. package/dist/cli/commands/scaffold/scaffold.js.map +1 -0
  183. package/dist/cli/commands/scaffold/targets.d.ts +31 -0
  184. package/dist/cli/commands/scaffold/targets.d.ts.map +1 -0
  185. package/dist/cli/commands/scaffold/targets.js +84 -0
  186. package/dist/cli/commands/scaffold/targets.js.map +1 -0
  187. package/dist/cli/commands/scaffold/types.d.ts +88 -0
  188. package/dist/cli/commands/scaffold/types.d.ts.map +1 -0
  189. package/dist/cli/commands/scaffold/types.js +21 -0
  190. package/dist/cli/commands/scaffold/types.js.map +1 -0
  191. package/dist/cli/commands/scaffold/utils.d.ts +31 -0
  192. package/dist/cli/commands/scaffold/utils.d.ts.map +1 -0
  193. package/dist/cli/commands/scaffold/utils.js +71 -0
  194. package/dist/cli/commands/scaffold/utils.js.map +1 -0
  195. package/dist/cli/commands/session/display.d.ts +40 -0
  196. package/dist/cli/commands/session/display.d.ts.map +1 -0
  197. package/dist/cli/commands/session/display.js +114 -0
  198. package/dist/cli/commands/session/display.js.map +1 -0
  199. package/dist/cli/commands/session/end.d.ts +12 -0
  200. package/dist/cli/commands/session/end.d.ts.map +1 -0
  201. package/dist/cli/commands/session/end.js +165 -0
  202. package/dist/cli/commands/session/end.js.map +1 -0
  203. package/dist/cli/commands/session/index.d.ts +13 -0
  204. package/dist/cli/commands/session/index.d.ts.map +1 -0
  205. package/dist/cli/commands/session/index.js +13 -0
  206. package/dist/cli/commands/session/index.js.map +1 -0
  207. package/dist/cli/commands/session/register.d.ts +12 -0
  208. package/dist/cli/commands/session/register.d.ts.map +1 -0
  209. package/dist/cli/commands/session/register.js +87 -0
  210. package/dist/cli/commands/session/register.js.map +1 -0
  211. package/dist/cli/commands/session/start.d.ts +12 -0
  212. package/dist/cli/commands/session/start.d.ts.map +1 -0
  213. package/dist/cli/commands/session/start.js +189 -0
  214. package/dist/cli/commands/session/start.js.map +1 -0
  215. package/dist/cli/commands/session/status.d.ts +12 -0
  216. package/dist/cli/commands/session/status.d.ts.map +1 -0
  217. package/dist/cli/commands/session/status.js +93 -0
  218. package/dist/cli/commands/session/status.js.map +1 -0
  219. package/dist/cli/commands/session/types.d.ts +179 -0
  220. package/dist/cli/commands/session/types.d.ts.map +1 -0
  221. package/dist/cli/commands/session/types.js +8 -0
  222. package/dist/cli/commands/session/types.js.map +1 -0
  223. package/dist/cli/commands/session/utils.d.ts +24 -0
  224. package/dist/cli/commands/session/utils.d.ts.map +1 -0
  225. package/dist/cli/commands/session/utils.js +72 -0
  226. package/dist/cli/commands/session/utils.js.map +1 -0
  227. package/dist/cli/commands/specs.d.ts +16 -0
  228. package/dist/cli/commands/specs.d.ts.map +1 -0
  229. package/dist/cli/commands/specs.js +212 -0
  230. package/dist/cli/commands/specs.js.map +1 -0
  231. package/dist/cli/commands/specs.types.d.ts +120 -0
  232. package/dist/cli/commands/specs.types.d.ts.map +1 -0
  233. package/dist/cli/commands/specs.types.js +75 -0
  234. package/dist/cli/commands/specs.types.js.map +1 -0
  235. package/dist/cli/commands/status.d.ts +17 -0
  236. package/dist/cli/commands/status.d.ts.map +1 -0
  237. package/dist/cli/commands/status.js +271 -0
  238. package/dist/cli/commands/status.js.map +1 -0
  239. package/dist/cli/commands/status.types.d.ts +382 -0
  240. package/dist/cli/commands/status.types.d.ts.map +1 -0
  241. package/dist/cli/commands/status.types.js +166 -0
  242. package/dist/cli/commands/status.types.js.map +1 -0
  243. package/dist/cli/commands/switch.d.ts +18 -0
  244. package/dist/cli/commands/switch.d.ts.map +1 -0
  245. package/dist/cli/commands/switch.js +181 -0
  246. package/dist/cli/commands/switch.js.map +1 -0
  247. package/dist/cli/commands/switch.types.d.ts +123 -0
  248. package/dist/cli/commands/switch.types.d.ts.map +1 -0
  249. package/dist/cli/commands/switch.types.js +65 -0
  250. package/dist/cli/commands/switch.types.js.map +1 -0
  251. package/dist/cli/commands/ticket/command.d.ts +14 -0
  252. package/dist/cli/commands/ticket/command.d.ts.map +1 -0
  253. package/dist/cli/commands/ticket/command.js +141 -0
  254. package/dist/cli/commands/ticket/command.js.map +1 -0
  255. package/dist/cli/commands/ticket/display.d.ts +56 -0
  256. package/dist/cli/commands/ticket/display.d.ts.map +1 -0
  257. package/dist/cli/commands/ticket/display.js +205 -0
  258. package/dist/cli/commands/ticket/display.js.map +1 -0
  259. package/dist/cli/commands/ticket/index.d.ts +11 -0
  260. package/dist/cli/commands/ticket/index.d.ts.map +1 -0
  261. package/dist/cli/commands/ticket/index.js +11 -0
  262. package/dist/cli/commands/ticket/index.js.map +1 -0
  263. package/dist/cli/commands/ticket/register.d.ts +11 -0
  264. package/dist/cli/commands/ticket/register.d.ts.map +1 -0
  265. package/dist/cli/commands/ticket/register.js +39 -0
  266. package/dist/cli/commands/ticket/register.js.map +1 -0
  267. package/dist/cli/commands/ticket/resolver.d.ts +16 -0
  268. package/dist/cli/commands/ticket/resolver.d.ts.map +1 -0
  269. package/dist/cli/commands/ticket/resolver.js +35 -0
  270. package/dist/cli/commands/ticket/resolver.js.map +1 -0
  271. package/dist/cli/commands/ticket/types.d.ts +157 -0
  272. package/dist/cli/commands/ticket/types.d.ts.map +1 -0
  273. package/dist/cli/commands/ticket/types.js +8 -0
  274. package/dist/cli/commands/ticket/types.js.map +1 -0
  275. package/dist/cli/commands/tickets.d.ts +16 -0
  276. package/dist/cli/commands/tickets.d.ts.map +1 -0
  277. package/dist/cli/commands/tickets.js +271 -0
  278. package/dist/cli/commands/tickets.js.map +1 -0
  279. package/dist/cli/commands/tickets.types.d.ts +202 -0
  280. package/dist/cli/commands/tickets.types.d.ts.map +1 -0
  281. package/dist/cli/commands/tickets.types.js +138 -0
  282. package/dist/cli/commands/tickets.types.js.map +1 -0
  283. package/dist/cli/config/index.d.ts +11 -0
  284. package/dist/cli/config/index.d.ts.map +1 -0
  285. package/dist/cli/config/index.js +11 -0
  286. package/dist/cli/config/index.js.map +1 -0
  287. package/dist/cli/config/loader.d.ts +98 -0
  288. package/dist/cli/config/loader.d.ts.map +1 -0
  289. package/dist/cli/config/loader.js +237 -0
  290. package/dist/cli/config/loader.js.map +1 -0
  291. package/dist/cli/config/paths.d.ts +96 -0
  292. package/dist/cli/config/paths.d.ts.map +1 -0
  293. package/dist/cli/config/paths.js +140 -0
  294. package/dist/cli/config/paths.js.map +1 -0
  295. package/dist/cli/config/types.d.ts +148 -0
  296. package/dist/cli/config/types.d.ts.map +1 -0
  297. package/dist/cli/config/types.js +34 -0
  298. package/dist/cli/config/types.js.map +1 -0
  299. package/dist/cli/config/writer.d.ts +171 -0
  300. package/dist/cli/config/writer.d.ts.map +1 -0
  301. package/dist/cli/config/writer.js +312 -0
  302. package/dist/cli/config/writer.js.map +1 -0
  303. package/dist/cli/index.d.ts +30 -0
  304. package/dist/cli/index.d.ts.map +1 -0
  305. package/dist/cli/index.js +183 -0
  306. package/dist/cli/index.js.map +1 -0
  307. package/dist/cli/middleware/auth-guard.d.ts +107 -0
  308. package/dist/cli/middleware/auth-guard.d.ts.map +1 -0
  309. package/dist/cli/middleware/auth-guard.js +190 -0
  310. package/dist/cli/middleware/auth-guard.js.map +1 -0
  311. package/dist/cli/middleware/error-handler.d.ts +133 -0
  312. package/dist/cli/middleware/error-handler.d.ts.map +1 -0
  313. package/dist/cli/middleware/error-handler.js +209 -0
  314. package/dist/cli/middleware/error-handler.js.map +1 -0
  315. package/dist/cli/middleware/index.d.ts +6 -0
  316. package/dist/cli/middleware/index.d.ts.map +1 -0
  317. package/dist/cli/middleware/index.js +6 -0
  318. package/dist/cli/middleware/index.js.map +1 -0
  319. package/dist/cli/templates/commands.d.ts +20 -0
  320. package/dist/cli/templates/commands.d.ts.map +1 -0
  321. package/dist/cli/templates/commands.js +174 -0
  322. package/dist/cli/templates/commands.js.map +1 -0
  323. package/dist/cli/templates/content/sf-autonomous.d.ts +7 -0
  324. package/dist/cli/templates/content/sf-autonomous.d.ts.map +1 -0
  325. package/dist/cli/templates/content/sf-autonomous.js +78 -0
  326. package/dist/cli/templates/content/sf-autonomous.js.map +1 -0
  327. package/dist/cli/templates/content/sf-blockers.d.ts +7 -0
  328. package/dist/cli/templates/content/sf-blockers.d.ts.map +1 -0
  329. package/dist/cli/templates/content/sf-blockers.js +68 -0
  330. package/dist/cli/templates/content/sf-blockers.js.map +1 -0
  331. package/dist/cli/templates/content/sf-commit.d.ts +7 -0
  332. package/dist/cli/templates/content/sf-commit.d.ts.map +1 -0
  333. package/dist/cli/templates/content/sf-commit.js +78 -0
  334. package/dist/cli/templates/content/sf-commit.js.map +1 -0
  335. package/dist/cli/templates/content/sf-context.d.ts +7 -0
  336. package/dist/cli/templates/content/sf-context.d.ts.map +1 -0
  337. package/dist/cli/templates/content/sf-context.js +64 -0
  338. package/dist/cli/templates/content/sf-context.js.map +1 -0
  339. package/dist/cli/templates/content/sf-create-epics.d.ts +7 -0
  340. package/dist/cli/templates/content/sf-create-epics.d.ts.map +1 -0
  341. package/dist/cli/templates/content/sf-create-epics.js +70 -0
  342. package/dist/cli/templates/content/sf-create-epics.js.map +1 -0
  343. package/dist/cli/templates/content/sf-create-spec.d.ts +7 -0
  344. package/dist/cli/templates/content/sf-create-spec.d.ts.map +1 -0
  345. package/dist/cli/templates/content/sf-create-spec.js +67 -0
  346. package/dist/cli/templates/content/sf-create-spec.js.map +1 -0
  347. package/dist/cli/templates/content/sf-create-tickets.d.ts +7 -0
  348. package/dist/cli/templates/content/sf-create-tickets.d.ts.map +1 -0
  349. package/dist/cli/templates/content/sf-create-tickets.js +76 -0
  350. package/dist/cli/templates/content/sf-create-tickets.js.map +1 -0
  351. package/dist/cli/templates/content/sf-epic.d.ts +7 -0
  352. package/dist/cli/templates/content/sf-epic.d.ts.map +1 -0
  353. package/dist/cli/templates/content/sf-epic.js +69 -0
  354. package/dist/cli/templates/content/sf-epic.js.map +1 -0
  355. package/dist/cli/templates/content/sf-help.d.ts +7 -0
  356. package/dist/cli/templates/content/sf-help.d.ts.map +1 -0
  357. package/dist/cli/templates/content/sf-help.js +61 -0
  358. package/dist/cli/templates/content/sf-help.js.map +1 -0
  359. package/dist/cli/templates/content/sf-import.d.ts +7 -0
  360. package/dist/cli/templates/content/sf-import.d.ts.map +1 -0
  361. package/dist/cli/templates/content/sf-import.js +88 -0
  362. package/dist/cli/templates/content/sf-import.js.map +1 -0
  363. package/dist/cli/templates/content/sf-init.d.ts +7 -0
  364. package/dist/cli/templates/content/sf-init.d.ts.map +1 -0
  365. package/dist/cli/templates/content/sf-init.js +61 -0
  366. package/dist/cli/templates/content/sf-init.js.map +1 -0
  367. package/dist/cli/templates/content/sf-next.d.ts +7 -0
  368. package/dist/cli/templates/content/sf-next.d.ts.map +1 -0
  369. package/dist/cli/templates/content/sf-next.js +67 -0
  370. package/dist/cli/templates/content/sf-next.js.map +1 -0
  371. package/dist/cli/templates/content/sf-reset.d.ts +7 -0
  372. package/dist/cli/templates/content/sf-reset.d.ts.map +1 -0
  373. package/dist/cli/templates/content/sf-reset.js +78 -0
  374. package/dist/cli/templates/content/sf-reset.js.map +1 -0
  375. package/dist/cli/templates/content/sf-review.d.ts +7 -0
  376. package/dist/cli/templates/content/sf-review.d.ts.map +1 -0
  377. package/dist/cli/templates/content/sf-review.js +67 -0
  378. package/dist/cli/templates/content/sf-review.js.map +1 -0
  379. package/dist/cli/templates/content/sf-search.d.ts +7 -0
  380. package/dist/cli/templates/content/sf-search.d.ts.map +1 -0
  381. package/dist/cli/templates/content/sf-search.js +64 -0
  382. package/dist/cli/templates/content/sf-search.js.map +1 -0
  383. package/dist/cli/templates/content/sf-status.d.ts +7 -0
  384. package/dist/cli/templates/content/sf-status.d.ts.map +1 -0
  385. package/dist/cli/templates/content/sf-status.js +67 -0
  386. package/dist/cli/templates/content/sf-status.js.map +1 -0
  387. package/dist/cli/templates/content/sf-ticket.d.ts +7 -0
  388. package/dist/cli/templates/content/sf-ticket.d.ts.map +1 -0
  389. package/dist/cli/templates/content/sf-ticket.js +76 -0
  390. package/dist/cli/templates/content/sf-ticket.js.map +1 -0
  391. package/dist/cli/templates/content/sf-validate.d.ts +7 -0
  392. package/dist/cli/templates/content/sf-validate.d.ts.map +1 -0
  393. package/dist/cli/templates/content/sf-validate.js +78 -0
  394. package/dist/cli/templates/content/sf-validate.js.map +1 -0
  395. package/dist/cli/templates/index.d.ts +7 -0
  396. package/dist/cli/templates/index.d.ts.map +1 -0
  397. package/dist/cli/templates/index.js +7 -0
  398. package/dist/cli/templates/index.js.map +1 -0
  399. package/dist/cli/ui/colors.d.ts +76 -0
  400. package/dist/cli/ui/colors.d.ts.map +1 -0
  401. package/dist/cli/ui/colors.js +81 -0
  402. package/dist/cli/ui/colors.js.map +1 -0
  403. package/dist/cli/ui/dashboard.d.ts +54 -0
  404. package/dist/cli/ui/dashboard.d.ts.map +1 -0
  405. package/dist/cli/ui/dashboard.js +339 -0
  406. package/dist/cli/ui/dashboard.js.map +1 -0
  407. package/dist/cli/ui/index.d.ts +7 -0
  408. package/dist/cli/ui/index.d.ts.map +1 -0
  409. package/dist/cli/ui/index.js +7 -0
  410. package/dist/cli/ui/index.js.map +1 -0
  411. package/dist/cli/ui/output.d.ts +117 -0
  412. package/dist/cli/ui/output.d.ts.map +1 -0
  413. package/dist/cli/ui/output.js +172 -0
  414. package/dist/cli/ui/output.js.map +1 -0
  415. package/dist/cli/ui/spinner.d.ts +105 -0
  416. package/dist/cli/ui/spinner.d.ts.map +1 -0
  417. package/dist/cli/ui/spinner.js +148 -0
  418. package/dist/cli/ui/spinner.js.map +1 -0
  419. package/dist/cli/ui/time.d.ts +54 -0
  420. package/dist/cli/ui/time.d.ts.map +1 -0
  421. package/dist/cli/ui/time.js +173 -0
  422. package/dist/cli/ui/time.js.map +1 -0
  423. package/dist/lib/format.d.ts +4 -4
  424. package/dist/lib/format.js +5 -5
  425. package/dist/server.js +8 -8
  426. package/dist/server.js.map +1 -1
  427. package/dist/tools/core/session.js +6 -6
  428. package/dist/tools/core/session.js.map +1 -1
  429. package/dist/tools/index.js +9 -9
  430. package/dist/tools/index.js.map +1 -1
  431. package/dist/validation/index.js +1 -1
  432. package/dist/validation/index.js.map +1 -1
  433. package/package.json +9 -2
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Scaffold Utility Functions
3
+ *
4
+ * Utility functions for file operations and content generation.
5
+ */
6
+ import fs from 'fs';
7
+ import path from 'path';
8
+ import { TARGETS } from './targets.js';
9
+ import { SCAFFOLD_VERSION } from './types.js';
10
+ /**
11
+ * Detect which AI CLI tools are installed
12
+ */
13
+ export function detectInstalledTools() {
14
+ const installed = [];
15
+ for (const [target, config] of Object.entries(TARGETS)) {
16
+ const globalDir = path.dirname(config.globalPath());
17
+ if (fs.existsSync(globalDir)) {
18
+ installed.push(target);
19
+ }
20
+ }
21
+ return installed;
22
+ }
23
+ /**
24
+ * Generate command content for a target format
25
+ */
26
+ export function generateCommandContent(template, needsFrontmatter, target) {
27
+ let content = '';
28
+ // Add version comment
29
+ content += `<!-- SpecForge v${SCAFFOLD_VERSION} -->\n`;
30
+ // Add YAML frontmatter if needed (Claude Code)
31
+ if (needsFrontmatter) {
32
+ content += '---\n';
33
+ if (template.argumentHint) {
34
+ content += `argument-hint: ${template.argumentHint}\n`;
35
+ }
36
+ content += `description: ${template.description}\n`;
37
+ content += '---\n\n';
38
+ }
39
+ // Add main content
40
+ content += template.content;
41
+ // Replace any target-specific placeholders
42
+ content = content.replace(/\{TARGET\}/g, target);
43
+ return content;
44
+ }
45
+ /**
46
+ * Ensure directory exists
47
+ */
48
+ export function ensureDirectory(dirPath) {
49
+ if (!fs.existsSync(dirPath)) {
50
+ fs.mkdirSync(dirPath, { recursive: true });
51
+ }
52
+ }
53
+ /**
54
+ * Check if file exists
55
+ */
56
+ export function fileExists(filePath) {
57
+ return fs.existsSync(filePath);
58
+ }
59
+ /**
60
+ * Write content to file
61
+ */
62
+ export function writeFile(filePath, content) {
63
+ fs.writeFileSync(filePath, content, 'utf-8');
64
+ }
65
+ /**
66
+ * Get command filename
67
+ */
68
+ export function getCommandFilename(commandName, extension) {
69
+ return `${commandName}${extension}`;
70
+ }
71
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/cli/commands/scaffold/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,MAAM,SAAS,GAAqB,EAAE,CAAC;IAEvC,KAAK,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACpD,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7B,SAAS,CAAC,IAAI,CAAC,MAAwB,CAAC,CAAC;QAC3C,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,QAAyB,EACzB,gBAAyB,EACzB,MAAc;IAEd,IAAI,OAAO,GAAG,EAAE,CAAC;IAEjB,sBAAsB;IACtB,OAAO,IAAI,mBAAmB,gBAAgB,QAAQ,CAAC;IAEvD,+CAA+C;IAC/C,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,IAAI,OAAO,CAAC;QACnB,IAAI,QAAQ,CAAC,YAAY,EAAE,CAAC;YAC1B,OAAO,IAAI,kBAAkB,QAAQ,CAAC,YAAY,IAAI,CAAC;QACzD,CAAC;QACD,OAAO,IAAI,gBAAgB,QAAQ,CAAC,WAAW,IAAI,CAAC;QACpD,OAAO,IAAI,SAAS,CAAC;IACvB,CAAC;IAED,mBAAmB;IACnB,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC;IAE5B,2CAA2C;IAC3C,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAEjD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe;IAC7C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IACzD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,WAAmB,EACnB,SAAiB;IAEjB,OAAO,GAAG,WAAW,GAAG,SAAS,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Session Display Utilities
3
+ *
4
+ * Display formatting and rendering for session status information,
5
+ * including session headers, progress bars, and statistics.
6
+ */
7
+ import type { Session, SessionStatus, ColorFunction } from './types.js';
8
+ /**
9
+ * Get color for session status
10
+ */
11
+ export declare function getStatusColor(status: SessionStatus): ColorFunction;
12
+ /**
13
+ * Display section header
14
+ */
15
+ export declare function printSectionHeader(title: string): void;
16
+ /**
17
+ * Display progress bar
18
+ */
19
+ export declare function displayProgressBar(completed: number, failed: number, skipped: number, total: number, width?: number): void;
20
+ /**
21
+ * Display session header
22
+ */
23
+ export declare function displaySessionHeader(session: Session): void;
24
+ /**
25
+ * Display session progress
26
+ */
27
+ export declare function displaySessionProgress(session: Session): void;
28
+ /**
29
+ * Display current ticket
30
+ */
31
+ export declare function displayCurrentTicket(ticket: Session['currentTicket']): void;
32
+ /**
33
+ * Display full session details
34
+ */
35
+ export declare function displaySession(session: Session): void;
36
+ /**
37
+ * Display no session message
38
+ */
39
+ export declare function displayNoSession(): void;
40
+ //# sourceMappingURL=display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/session/display.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAgB,aAAa,EAAE,MAAM,YAAY,CAAC;AAGtF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,aAAa,CAanE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAGtD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,SAAK,GACT,IAAI,CAmBN;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqB3D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmB7D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,IAAI,CAM3E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CASrD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Session Display Utilities
3
+ *
4
+ * Display formatting and rendering for session status information,
5
+ * including session headers, progress bars, and statistics.
6
+ */
7
+ import chalk from 'chalk';
8
+ import { formatDuration, calculateSessionStats, formatTicketNumber } from './utils.js';
9
+ /**
10
+ * Get color for session status
11
+ */
12
+ export function getStatusColor(status) {
13
+ switch (status) {
14
+ case 'active':
15
+ return chalk.green;
16
+ case 'completed':
17
+ return chalk.blue;
18
+ case 'aborted':
19
+ return chalk.red;
20
+ case 'paused':
21
+ return chalk.yellow;
22
+ default:
23
+ return chalk.white;
24
+ }
25
+ }
26
+ /**
27
+ * Display section header
28
+ */
29
+ export function printSectionHeader(title) {
30
+ console.log(chalk.bold(`\n${title}`));
31
+ console.log('─'.repeat(title.length + 4));
32
+ }
33
+ /**
34
+ * Display progress bar
35
+ */
36
+ export function displayProgressBar(completed, failed, skipped, total, width = 30) {
37
+ if (total === 0) {
38
+ console.log(chalk.dim('[' + '░'.repeat(width) + '] 0%'));
39
+ return;
40
+ }
41
+ const completedWidth = Math.round((completed / total) * width);
42
+ const failedWidth = Math.round((failed / total) * width);
43
+ const skippedWidth = Math.round((skipped / total) * width);
44
+ const remainingWidth = width - completedWidth - failedWidth - skippedWidth;
45
+ const bar = chalk.green('█'.repeat(completedWidth)) +
46
+ chalk.red('█'.repeat(failedWidth)) +
47
+ chalk.yellow('█'.repeat(skippedWidth)) +
48
+ chalk.dim('░'.repeat(Math.max(0, remainingWidth)));
49
+ const percentage = Math.round((completed / total) * 100);
50
+ console.log(`[${bar}] ${percentage}%`);
51
+ }
52
+ /**
53
+ * Display session header
54
+ */
55
+ export function displaySessionHeader(session) {
56
+ const statusColor = getStatusColor(session.status);
57
+ console.log(chalk.bold('\nImplementation Session'));
58
+ console.log('═'.repeat(24));
59
+ console.log(`\n${chalk.dim('ID:')} ${session.id}`);
60
+ console.log(`${chalk.dim('Status:')} ${statusColor(session.status)}`);
61
+ console.log(`${chalk.dim('Started:')} ${new Date(session.startedAt).toLocaleString()} (${formatDuration(session.startedAt)} ago)`);
62
+ if (session.specificationTitle) {
63
+ console.log(`${chalk.dim('Spec:')} ${session.specificationTitle}`);
64
+ }
65
+ if (session.mode) {
66
+ console.log(`${chalk.dim('Mode:')} ${session.mode}`);
67
+ }
68
+ if (session.maxTickets) {
69
+ console.log(`${chalk.dim('Max:')} ${session.maxTickets} tickets`);
70
+ }
71
+ }
72
+ /**
73
+ * Display session progress
74
+ */
75
+ export function displaySessionProgress(session) {
76
+ const stats = calculateSessionStats(session);
77
+ printSectionHeader('Progress');
78
+ console.log(`${chalk.dim('Completed:')} ${chalk.green(stats.completedCount.toString())} tickets`);
79
+ console.log(`${chalk.dim('Failed:')} ${stats.failedCount > 0 ? chalk.red(stats.failedCount.toString()) : '0'} tickets`);
80
+ console.log(`${chalk.dim('Skipped:')} ${stats.skippedCount > 0 ? chalk.yellow(stats.skippedCount.toString()) : '0'} tickets`);
81
+ console.log(`${chalk.dim('Total:')} ${stats.totalProcessed} processed`);
82
+ if (stats.avgMinutesPerTicket) {
83
+ console.log(`${chalk.dim('Avg time:')} ${stats.avgMinutesPerTicket} min/ticket`);
84
+ }
85
+ }
86
+ /**
87
+ * Display current ticket
88
+ */
89
+ export function displayCurrentTicket(ticket) {
90
+ if (!ticket)
91
+ return;
92
+ printSectionHeader('Current Ticket');
93
+ console.log(`${formatTicketNumber(ticket.ticketNumber)}: ${ticket.title}`);
94
+ console.log(`${chalk.dim('Status:')} ${ticket.status}`);
95
+ }
96
+ /**
97
+ * Display full session details
98
+ */
99
+ export function displaySession(session) {
100
+ displaySessionHeader(session);
101
+ displaySessionProgress(session);
102
+ if (session.currentTicket) {
103
+ displayCurrentTicket(session.currentTicket);
104
+ }
105
+ console.log();
106
+ }
107
+ /**
108
+ * Display no session message
109
+ */
110
+ export function displayNoSession() {
111
+ console.log(chalk.dim('\nNo active implementation session.'));
112
+ console.log(chalk.dim("Run 'specforge-mcp session start' to begin a new session.\n"));
113
+ }
114
+ //# sourceMappingURL=display.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.js","sourceRoot":"","sources":["../../../../src/cli/commands/session/display.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Session End Command Implementation
3
+ *
4
+ * Terminates the current implementation session, displaying a summary of work
5
+ * completed and supporting different end statuses.
6
+ */
7
+ import type { SessionEndOptions } from './types.js';
8
+ /**
9
+ * Session end command implementation
10
+ */
11
+ export declare function sessionEndCommand(options: SessionEndOptions): Promise<void>;
12
+ //# sourceMappingURL=end.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"end.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/session/end.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EACV,iBAAiB,EAMlB,MAAM,YAAY,CAAC;AAoFpB;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGjF"}
@@ -0,0 +1,165 @@
1
+ /**
2
+ * Session End Command Implementation
3
+ *
4
+ * Terminates the current implementation session, displaying a summary of work
5
+ * completed and supporting different end statuses.
6
+ */
7
+ import chalk from 'chalk';
8
+ import ora from 'ora';
9
+ import { resolveConfig } from '../../config/index.js';
10
+ import { colors } from '../../ui/colors.js';
11
+ import { ApiClient } from '../../../client/api-client.js';
12
+ import { calculateSessionStats } from './utils.js';
13
+ /**
14
+ * Validate end status
15
+ */
16
+ function validateEndStatus(status) {
17
+ if (!status)
18
+ return 'completed';
19
+ const validStatuses = ['completed', 'aborted'];
20
+ if (!validStatuses.includes(status)) {
21
+ throw new Error(`Invalid status "${status}". Valid statuses: ${validStatuses.join(', ')}`);
22
+ }
23
+ return status;
24
+ }
25
+ /**
26
+ * Get status color
27
+ */
28
+ function getEndStatusColor(status) {
29
+ return status === 'completed' ? chalk.green : chalk.yellow;
30
+ }
31
+ /**
32
+ * Display session summary
33
+ */
34
+ function displaySessionSummary(session, stats) {
35
+ console.log(chalk.bold('\nSession Summary'));
36
+ console.log('───────────────');
37
+ console.log(`${chalk.dim('Duration:')} ${stats.durationFormatted}`);
38
+ console.log(`${chalk.dim('Completed:')} ${chalk.green(stats.completedCount.toString())} tickets`);
39
+ if (stats.failedCount > 0) {
40
+ console.log(`${chalk.dim('Failed:')} ${chalk.red(stats.failedCount.toString())} tickets`);
41
+ }
42
+ else {
43
+ console.log(`${chalk.dim('Failed:')} 0 tickets`);
44
+ }
45
+ if (stats.skippedCount > 0) {
46
+ console.log(`${chalk.dim('Skipped:')} ${chalk.yellow(stats.skippedCount.toString())} tickets`);
47
+ }
48
+ else {
49
+ console.log(`${chalk.dim('Skipped:')} 0 tickets`);
50
+ }
51
+ console.log(`${chalk.dim('Total:')} ${stats.totalProcessed} processed`);
52
+ if (stats.avgMinutesPerTicket && stats.completedCount > 0) {
53
+ console.log(`${chalk.dim('Avg time:')} ${stats.avgMinutesPerTicket} min/ticket`);
54
+ }
55
+ if (stats.successRate !== undefined && stats.totalProcessed > 0) {
56
+ const rateColor = stats.successRate >= 80 ? chalk.green : stats.successRate >= 50 ? chalk.yellow : chalk.red;
57
+ console.log(`${chalk.dim('Success rate:')} ${rateColor(stats.successRate + '%')}`);
58
+ }
59
+ }
60
+ /**
61
+ * Display completed tickets list
62
+ */
63
+ function displayCompletedTickets(ticketIds) {
64
+ if (ticketIds.length === 0)
65
+ return;
66
+ console.log(chalk.dim(`\nCompleted tickets: ${ticketIds.length}`));
67
+ // Note: We only have IDs, not full ticket info
68
+ // Could fetch details if needed, but keeping it simple
69
+ }
70
+ /**
71
+ * Display failed tickets list
72
+ */
73
+ function displayFailedTickets(ticketIds) {
74
+ if (ticketIds.length === 0)
75
+ return;
76
+ console.log(chalk.dim(`\nFailed tickets: ${ticketIds.length}`));
77
+ console.log(chalk.dim(' Run `specforge-mcp tickets --status failed` to review'));
78
+ }
79
+ /**
80
+ * Session end command implementation
81
+ */
82
+ export async function sessionEndCommand(options) {
83
+ const config = resolveConfig();
84
+ // Validate options
85
+ let endStatus;
86
+ try {
87
+ endStatus = validateEndStatus(options.status);
88
+ }
89
+ catch (error) {
90
+ const message = error instanceof Error ? error.message : 'Invalid option';
91
+ console.error(colors.error(`\nError: ${message}`));
92
+ process.exit(1);
93
+ }
94
+ const spinner = ora('Ending session...').start();
95
+ try {
96
+ if (!config.apiKey) {
97
+ spinner.fail('Not authenticated');
98
+ console.error(colors.error('\nError: Not authenticated.'));
99
+ console.error(colors.muted('Run `specforge-mcp login` to authenticate first.'));
100
+ process.exit(1);
101
+ }
102
+ const client = new ApiClient({
103
+ apiKey: config.apiKey,
104
+ apiUrl: config.apiUrl,
105
+ debug: config.debug,
106
+ });
107
+ // Get current session
108
+ const context = (await client.call('get_working_context', {}));
109
+ const session = context.implementationSession;
110
+ if (!session || session.status !== 'active') {
111
+ spinner.fail('No active session');
112
+ console.error(chalk.yellow('\nNo active implementation session to end.'));
113
+ console.error(chalk.dim("Run 'specforge-mcp session start' to begin a new session."));
114
+ process.exit(1);
115
+ }
116
+ // Build end parameters
117
+ const endParams = {
118
+ sessionId: session.id,
119
+ status: endStatus,
120
+ };
121
+ if (options.summary) {
122
+ endParams.summary = options.summary;
123
+ }
124
+ // End session
125
+ await client.call('end_session', endParams);
126
+ spinner.succeed('Session ended');
127
+ // Calculate stats before displaying
128
+ const stats = calculateSessionStats(session);
129
+ // Display header
130
+ const statusColor = getEndStatusColor(endStatus);
131
+ console.log(chalk.bold(`\nEnding session: ${session.id}`));
132
+ console.log(`${chalk.dim('Status:')} ${statusColor(endStatus)}`);
133
+ // Display summary
134
+ displaySessionSummary(session, stats);
135
+ // Display ticket lists if relevant
136
+ if (session.failedTickets.length > 0) {
137
+ displayFailedTickets(session.failedTickets);
138
+ }
139
+ // Display custom summary if provided
140
+ if (options.summary) {
141
+ console.log(`\n${chalk.dim('Summary:')} ${options.summary}`);
142
+ }
143
+ // Success message
144
+ console.log(chalk.green(`\n✓ Session ended (${endStatus})`));
145
+ // Provide next steps
146
+ if (endStatus === 'completed' && stats.successRate && stats.successRate < 100) {
147
+ console.log(chalk.dim('\nSome tickets were not completed. Review with:'));
148
+ console.log(chalk.dim(' specforge-mcp tickets --status pending'));
149
+ console.log(chalk.dim(' specforge-mcp tickets --status blocked'));
150
+ }
151
+ if (endStatus === 'aborted') {
152
+ console.log(chalk.dim('\nSession was aborted. Progress has been saved.'));
153
+ console.log(chalk.dim('Start a new session when ready:'));
154
+ console.log(chalk.dim(' specforge-mcp session start'));
155
+ }
156
+ console.log();
157
+ }
158
+ catch (error) {
159
+ spinner.fail('Failed to end session');
160
+ const message = error instanceof Error ? error.message : 'Unknown error';
161
+ console.error(colors.error(`\nError: ${message}`));
162
+ process.exit(1);
163
+ }
164
+ }
165
+ //# sourceMappingURL=end.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"end.js","sourceRoot":"","sources":["../../../../src/cli/commands/session/end.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Session Command Module
3
+ *
4
+ * Exports all session command types and utilities.
5
+ */
6
+ export * from './types.js';
7
+ export * from './utils.js';
8
+ export * from './display.js';
9
+ export { sessionStatusCommand } from './status.js';
10
+ export { sessionStartCommand } from './start.js';
11
+ export { sessionEndCommand } from './end.js';
12
+ export { registerSessionCommands } from './register.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/session/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Session Command Module
3
+ *
4
+ * Exports all session command types and utilities.
5
+ */
6
+ export * from './types.js';
7
+ export * from './utils.js';
8
+ export * from './display.js';
9
+ export { sessionStatusCommand } from './status.js';
10
+ export { sessionStartCommand } from './start.js';
11
+ export { sessionEndCommand } from './end.js';
12
+ export { registerSessionCommands } from './register.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/session/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Session Command Registration
3
+ *
4
+ * Registers all session commands with the CLI framework, including the parent
5
+ * session command and its subcommands.
6
+ */
7
+ import { Command } from 'commander';
8
+ /**
9
+ * Register all session commands with the CLI
10
+ */
11
+ export declare function registerSessionCommands(program: Command): void;
12
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/session/register.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0F9D"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Session Command Registration
3
+ *
4
+ * Registers all session commands with the CLI framework, including the parent
5
+ * session command and its subcommands.
6
+ */
7
+ import { withErrorHandler } from '../../middleware/error-handler.js';
8
+ import { sessionStatusCommand } from './status.js';
9
+ import { sessionStartCommand } from './start.js';
10
+ import { sessionEndCommand } from './end.js';
11
+ /**
12
+ * Register all session commands with the CLI
13
+ */
14
+ export function registerSessionCommands(program) {
15
+ // Create parent session command
16
+ const session = program
17
+ .command('session')
18
+ .description('Implementation session management');
19
+ // Default action (no subcommand) - show status
20
+ session
21
+ .option('--json', 'Output as JSON')
22
+ .option('--toon', 'Output as TOON format')
23
+ .addHelpText('after', `
24
+ Examples:
25
+ $ specforge-mcp session # Show session status
26
+ $ specforge-mcp session --json # Status as JSON
27
+ $ specforge-mcp session start # Start new session
28
+ $ specforge-mcp session end # End current session
29
+
30
+ The session command manages implementation sessions that track work on
31
+ a specification. Sessions record which tickets have been completed,
32
+ failed, or skipped, and provide progress tracking.
33
+ `)
34
+ .action(withErrorHandler(async (options) => {
35
+ await sessionStatusCommand(options);
36
+ }));
37
+ // Start subcommand
38
+ session
39
+ .command('start [specId]')
40
+ .description('Start a new implementation session')
41
+ .option('--mode <mode>', 'Session mode (single, autonomous, guided)')
42
+ .option('--max-tickets <n>', 'Maximum tickets to process')
43
+ .option('--stop-on-failure', 'Stop on first failure')
44
+ .option('--force', 'End existing session and start new')
45
+ .addHelpText('after', `
46
+ Examples:
47
+ $ specforge-mcp session start # Start with current spec
48
+ $ specforge-mcp session start spec-123 # Start with specific spec
49
+ $ specforge-mcp session start --mode single # Single ticket mode
50
+ $ specforge-mcp session start --max-tickets 10 # Limit to 10 tickets
51
+ $ specforge-mcp session start --force # Replace existing session
52
+
53
+ Session modes:
54
+ single - Work on one ticket at a time
55
+ autonomous - Autonomous implementation (default)
56
+ guided - Guided implementation with prompts
57
+
58
+ The start command creates a new implementation session. If a session is
59
+ already active, use --force to end it and start a new one.
60
+ `)
61
+ .action(withErrorHandler(async (specId, options) => {
62
+ await sessionStartCommand(specId, options);
63
+ }));
64
+ // End subcommand
65
+ session
66
+ .command('end')
67
+ .description('End the current implementation session')
68
+ .option('--status <status>', 'End status (completed, aborted)', 'completed')
69
+ .option('--summary <summary>', 'Custom session summary')
70
+ .addHelpText('after', `
71
+ Examples:
72
+ $ specforge-mcp session end # End as completed
73
+ $ specforge-mcp session end --status aborted # End as aborted
74
+ $ specforge-mcp session end --summary "..." # With custom summary
75
+
76
+ End statuses:
77
+ completed - Session finished successfully (default)
78
+ aborted - Session terminated early
79
+
80
+ The end command terminates the active session and displays a summary
81
+ of work completed including statistics and success rate.
82
+ `)
83
+ .action(withErrorHandler(async (options) => {
84
+ await sessionEndCommand(options);
85
+ }));
86
+ }
87
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../src/cli/commands/session/register.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAO7C;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACtD,gCAAgC;IAChC,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,mCAAmC,CAAC,CAAC;IAEpD,+CAA+C;IAC/C,OAAO;SACJ,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,WAAW,CACV,OAAO,EACP;;;;;;;;;;CAUL,CACI;SACA,MAAM,CACL,gBAAgB,CAAC,KAAK,EAAE,OAA6B,EAAE,EAAE;QACvD,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC,CAAC,CACH,CAAC;IAEJ,mBAAmB;IACnB,OAAO;SACJ,OAAO,CAAC,gBAAgB,CAAC;SACzB,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,eAAe,EAAE,2CAA2C,CAAC;SACpE,MAAM,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;SACzD,MAAM,CAAC,mBAAmB,EAAE,uBAAuB,CAAC;SACpD,MAAM,CAAC,SAAS,EAAE,oCAAoC,CAAC;SACvD,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;;;;CAeL,CACI;SACA,MAAM,CACL,gBAAgB,CAAC,KAAK,EAAE,MAA0B,EAAE,OAA4B,EAAE,EAAE;QAClF,MAAM,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC,CACH,CAAC;IAEJ,iBAAiB;IACjB,OAAO;SACJ,OAAO,CAAC,KAAK,CAAC;SACd,WAAW,CAAC,wCAAwC,CAAC;SACrD,MAAM,CAAC,mBAAmB,EAAE,iCAAiC,EAAE,WAAW,CAAC;SAC3E,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC;SACvD,WAAW,CACV,OAAO,EACP;;;;;;;;;;;;CAYL,CACI;SACA,MAAM,CACL,gBAAgB,CAAC,KAAK,EAAE,OAA0B,EAAE,EAAE;QACpD,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC,CACH,CAAC;AACN,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Session Start Command Implementation
3
+ *
4
+ * Initiates a new implementation session for a specification, supporting
5
+ * various configuration options like mode, ticket limits, and failure handling.
6
+ */
7
+ import type { SessionStartOptions } from './types.js';
8
+ /**
9
+ * Session start command implementation
10
+ */
11
+ export declare function sessionStartCommand(specId: string | undefined, options: SessionStartOptions): Promise<void>;
12
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/session/start.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EACV,mBAAmB,EAOpB,MAAM,YAAY,CAAC;AAqEpB;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAuJf"}