@specforge/mcp 2.0.10 → 2.1.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 (429) 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/index.js +3 -3
  428. package/dist/tools/index.js.map +1 -1
  429. package/package.json +9 -2
package/README.md CHANGED
@@ -251,6 +251,330 @@ The SpecForge MCP server provides the following tool categories:
251
251
  - `get_ticket_commits` - Get commits for a ticket
252
252
  - `get_ticket_prs` - Get PRs for a ticket
253
253
 
254
+ ## CLI Commands
255
+
256
+ The SpecForge MCP package includes a CLI for project configuration and management.
257
+
258
+ ### Quick Reference
259
+
260
+ | Command | Description |
261
+ |---------|-------------|
262
+ | `login` | Authenticate with your API key |
263
+ | `init` | Initialize SpecForge in a project |
264
+ | `configure` | Configure output preferences |
265
+ | `doctor` | Diagnose configuration issues |
266
+ | `status` | Show specification status |
267
+ | `projects` | List accessible projects |
268
+ | `specs` | List specifications |
269
+ | `switch` | Switch project/specification context |
270
+ | `tickets` | List tickets |
271
+ | `ticket <id>` | Show ticket details |
272
+ | `next` | Get next actionable ticket |
273
+ | `blocked` | List blocked tickets |
274
+ | `session` | Show session status |
275
+ | `session start` | Start implementation session |
276
+ | `session end` | End current session |
277
+ | `call <tool>` | Directly call an MCP tool |
278
+ | `tools` | List available MCP tools |
279
+ | `test` | Test API connection |
280
+ | `whoami` | Show current user/config |
281
+
282
+ ### Setup Commands
283
+
284
+ #### login
285
+
286
+ ```bash
287
+ specforge-mcp login [--api-key <key>] [--force]
288
+ ```
289
+
290
+ Authenticate with the SpecForge API.
291
+
292
+ | Option | Description |
293
+ |--------|-------------|
294
+ | `--api-key <key>` | Provide API key non-interactively (for CI/scripts) |
295
+ | `-f, --force` | Overwrite existing authentication |
296
+
297
+ Examples:
298
+ ```bash
299
+ specforge-mcp login # Interactive login
300
+ specforge-mcp login --api-key sf_live_xxx # Non-interactive
301
+ specforge-mcp login --force # Re-authenticate
302
+ ```
303
+
304
+ #### init
305
+
306
+ ```bash
307
+ specforge-mcp init [--project <id>] [--spec <id>] [--format <format>] [--force]
308
+ ```
309
+
310
+ Initialize SpecForge in the current directory.
311
+
312
+ | Option | Description |
313
+ |--------|-------------|
314
+ | `--project <id>` | Project ID (non-interactive mode) |
315
+ | `--spec <id>` | Specification ID (non-interactive mode) |
316
+ | `--format <format>` | Output format: json or toon |
317
+ | `-f, --force` | Overwrite existing configuration |
318
+
319
+ Creates:
320
+ - `.mcp.json` - Claude Code MCP server configuration
321
+ - `.specforge.json` - Project-specific settings
322
+
323
+ Examples:
324
+ ```bash
325
+ specforge-mcp init # Interactive setup
326
+ specforge-mcp init --project proj_abc # Set project
327
+ specforge-mcp init --project proj_abc --spec spec_xyz --format toon
328
+ ```
329
+
330
+ #### configure
331
+
332
+ ```bash
333
+ specforge-mcp configure [--format <format>] [--project <id>]
334
+ ```
335
+
336
+ Configure default preferences.
337
+
338
+ #### doctor
339
+
340
+ ```bash
341
+ specforge-mcp doctor [--json]
342
+ ```
343
+
344
+ Diagnose configuration and connection issues.
345
+
346
+ | Option | Description |
347
+ |--------|-------------|
348
+ | `--json` | Output as JSON for scripting |
349
+
350
+ Check categories:
351
+ - Configuration - Config files presence
352
+ - Authentication - API key format and validity
353
+ - Connection - API connectivity and response time
354
+ - Project Access - Access to configured project/specification
355
+
356
+ ### Navigation Commands
357
+
358
+ #### switch
359
+
360
+ ```bash
361
+ specforge-mcp switch [--project <id>] [--spec <id>]
362
+ ```
363
+
364
+ Switch between projects or specifications.
365
+
366
+ #### projects
367
+
368
+ ```bash
369
+ specforge-mcp projects [--json] [--toon]
370
+ ```
371
+
372
+ List all accessible projects.
373
+
374
+ #### specs
375
+
376
+ ```bash
377
+ specforge-mcp specs [--project <id>] [--status <status>] [--json]
378
+ ```
379
+
380
+ List specifications for the current or specified project.
381
+
382
+ ### Query Commands
383
+
384
+ #### status
385
+
386
+ ```bash
387
+ specforge-mcp status [--spec <id>] [--json]
388
+ ```
389
+
390
+ Show current specification status with progress metrics.
391
+
392
+ #### tickets
393
+
394
+ ```bash
395
+ specforge-mcp tickets [--epic <id>] [--status <status>] [--limit <n>] [--json]
396
+ ```
397
+
398
+ List tickets for the current specification.
399
+
400
+ #### ticket
401
+
402
+ ```bash
403
+ specforge-mcp ticket <id> [--json] [--context]
404
+ ```
405
+
406
+ Show full details for a specific ticket.
407
+
408
+ | Option | Description |
409
+ |--------|-------------|
410
+ | `--json` | Output as JSON |
411
+ | `--context` | Include implementation context |
412
+
413
+ #### next
414
+
415
+ ```bash
416
+ specforge-mcp next [--spec <id>] [--count <n>] [--json]
417
+ ```
418
+
419
+ Get the next actionable tickets (dependencies satisfied).
420
+
421
+ #### blocked
422
+
423
+ ```bash
424
+ specforge-mcp blocked [--spec <id>] [--json]
425
+ ```
426
+
427
+ List blocked tickets with blocking reasons.
428
+
429
+ ### Session Commands
430
+
431
+ #### session
432
+
433
+ ```bash
434
+ specforge-mcp session [--json]
435
+ ```
436
+
437
+ Show current implementation session status.
438
+
439
+ #### session start
440
+
441
+ ```bash
442
+ specforge-mcp session start [specId] [--mode <mode>] [--max-tickets <n>] [--stop-on-failure] [--force]
443
+ ```
444
+
445
+ Start a new implementation session.
446
+
447
+ | Option | Description |
448
+ |--------|-------------|
449
+ | `[specId]` | Target specification (uses current if omitted) |
450
+ | `--mode <mode>` | Session mode: single, autonomous, guided |
451
+ | `--max-tickets <n>` | Maximum tickets to process |
452
+ | `--stop-on-failure` | Stop on first failure |
453
+ | `--force` | End existing session and start new |
454
+
455
+ #### session end
456
+
457
+ ```bash
458
+ specforge-mcp session end [--status <status>] [--summary <text>]
459
+ ```
460
+
461
+ End the current implementation session.
462
+
463
+ | Option | Description |
464
+ |--------|-------------|
465
+ | `--status <status>` | End status: completed or aborted |
466
+ | `--summary <text>` | Custom session summary |
467
+
468
+ ### Debug Commands
469
+
470
+ #### call
471
+
472
+ ```bash
473
+ specforge-mcp call <tool> [--args <json>] [--format <format>] [--raw]
474
+ ```
475
+
476
+ Directly call an MCP tool with JSON arguments.
477
+
478
+ Examples:
479
+ ```bash
480
+ specforge-mcp call list_projects
481
+ specforge-mcp call get_ticket --args='{"ticketId":"abc123"}'
482
+ specforge-mcp call list_tickets --format toon
483
+ ```
484
+
485
+ #### tools
486
+
487
+ ```bash
488
+ specforge-mcp tools [--category <category>] [--search <query>] [--json]
489
+ ```
490
+
491
+ List available MCP tools with optional filtering.
492
+
493
+ #### test
494
+
495
+ ```bash
496
+ specforge-mcp test
497
+ ```
498
+
499
+ Test API connection and authentication. Shows response time and user info.
500
+
501
+ #### whoami
502
+
503
+ ```bash
504
+ specforge-mcp whoami [--json]
505
+ ```
506
+
507
+ Show current user information and configuration settings.
508
+
509
+ ### Configuration Files
510
+
511
+ | File | Location | Purpose |
512
+ |------|----------|---------|
513
+ | Global config | `~/.specforge/config.json` | API key, default format |
514
+ | Project config | `.specforge.json` | Project/spec IDs, format override |
515
+ | MCP config | `.mcp.json` | Claude Code integration |
516
+
517
+ Configuration priority (highest to lowest):
518
+ 1. Environment variables
519
+ 2. Project config (`.specforge.json`)
520
+ 3. Global config (`~/.specforge/config.json`)
521
+ 4. Default values
522
+
523
+ ### Environment Variables
524
+
525
+ | Variable | Description |
526
+ |----------|-------------|
527
+ | `SPECFORGE_API_KEY` | API key (overrides config) |
528
+ | `SPECFORGE_API_URL` | API endpoint URL |
529
+ | `SPECFORGE_FORMAT` | Output format (json/toon) |
530
+ | `SPECFORGE_DEBUG` | Enable debug mode (true/false) |
531
+
532
+ ### Exit Codes
533
+
534
+ | Code | Name | Description |
535
+ |------|------|-------------|
536
+ | 0 | SUCCESS | Successful execution |
537
+ | 1 | ERROR | General error |
538
+ | 2 | AUTH_ERROR | Authentication failed |
539
+ | 3 | CONFIG_ERROR | Configuration error |
540
+ | 4 | NETWORK_ERROR | Network/API error |
541
+ | 5 | NOT_FOUND | Resource not found |
542
+ | 6 | VALIDATION_ERROR | Input validation error |
543
+
544
+ ### Automation & CI/CD
545
+
546
+ Non-interactive usage for scripts:
547
+
548
+ ```bash
549
+ # Authenticate via environment or flag
550
+ export SPECFORGE_API_KEY="sf_live_xxx"
551
+ specforge-mcp login --api-key $SPECFORGE_API_KEY
552
+
553
+ # Initialize non-interactively
554
+ specforge-mcp init --project $PROJECT_ID --spec $SPEC_ID --format json --force
555
+
556
+ # Check health (exits 1 on failure)
557
+ specforge-mcp doctor --json
558
+
559
+ # Get tickets as JSON for processing
560
+ specforge-mcp tickets --json | jq '.[]'
561
+
562
+ # Get next actionable ticket ID
563
+ specforge-mcp next --json | jq -r '.tickets[0].id'
564
+ ```
565
+
566
+ ### Global Options
567
+
568
+ These options work with any command:
569
+
570
+ | Option | Description |
571
+ |--------|-------------|
572
+ | `--debug` | Enable debug output |
573
+ | `--no-color` | Disable colored output |
574
+ | `--json` | Output in JSON format |
575
+ | `-v, --version` | Show version |
576
+ | `-h, --help` | Show command help |
577
+
254
578
  ## Troubleshooting
255
579
 
256
580
  ### "SPECFORGE_API_KEY environment variable is required"
package/bin/specforge-mcp CHANGED
@@ -1,3 +1,21 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import('../dist/index.js');
3
+ /**
4
+ * SpecForge MCP CLI Entry Point
5
+ *
6
+ * All logic is handled by the CLI module.
7
+ * The 'serve' command is set as default in Commander.js for backward compatibility.
8
+ *
9
+ * When called with no arguments: starts MCP server
10
+ * When called with subcommands/flags: runs CLI
11
+ */
12
+
13
+ import('../dist/cli/index.js')
14
+ .then(({ runCLI }) => runCLI())
15
+ .catch((error) => {
16
+ console.error('Fatal error:', error.message);
17
+ if (process.env.SPECFORGE_DEBUG === 'true') {
18
+ console.error(error.stack);
19
+ }
20
+ process.exit(1);
21
+ });
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Blocked Command
3
+ *
4
+ * Lists all blocked tickets with their blocking dependencies.
5
+ */
6
+ import { Command } from 'commander';
7
+ import { BlockedOptions } from './next.types.js';
8
+ /**
9
+ * Blocked command action handler
10
+ */
11
+ export declare function blockedAction(options: BlockedOptions): Promise<void>;
12
+ /**
13
+ * Register blocked command with Commander
14
+ */
15
+ export declare function registerBlockedCommand(program: Command): void;
16
+ //# sourceMappingURL=blocked.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocked.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/blocked.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,OAAO,EACL,cAAc,EAOf,MAAM,iBAAiB,CAAC;AA6FzB;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4H1E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0B7D"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Blocked Command
3
+ *
4
+ * Lists all blocked tickets with their blocking dependencies.
5
+ */
6
+ import ora from 'ora';
7
+ import { resolveConfig } from '../config/index.js';
8
+ import { withErrorHandler, CliError, NetworkError } from '../middleware/error-handler.js';
9
+ import { printBlank, printHeader } from '../ui/output.js';
10
+ import { colors } from '../ui/colors.js';
11
+ import { ApiClient } from '../../client/api-client.js';
12
+ import { formatTicketId, truncateText, getTreePrefix, } from './next.types.js';
13
+ /**
14
+ * Get chalk color function for status
15
+ */
16
+ function getStatusColorFn(status) {
17
+ switch (status) {
18
+ case 'done':
19
+ return colors.success;
20
+ case 'in_progress':
21
+ return colors.primary;
22
+ case 'pending':
23
+ return colors.warning;
24
+ case 'blocked':
25
+ return colors.error;
26
+ default:
27
+ return (s) => s;
28
+ }
29
+ }
30
+ /**
31
+ * Display blocked tickets with tree visualization
32
+ */
33
+ function displayBlockedTickets(tickets) {
34
+ printBlank();
35
+ printHeader('Blocked Tickets');
36
+ printBlank();
37
+ for (const ticket of tickets) {
38
+ // Ticket header
39
+ console.log(`${colors.error('●')} ${formatTicketId(ticket.ticketNumber)} - ${ticket.title}`);
40
+ // Blockers tree
41
+ for (let i = 0; i < ticket.blockedBy.length; i++) {
42
+ const blocker = ticket.blockedBy[i];
43
+ const isLast = i === ticket.blockedBy.length - 1;
44
+ const prefix = getTreePrefix(isLast);
45
+ const statusColor = getStatusColorFn(blocker.status);
46
+ const blockerTitle = truncateText(blocker.title, 35);
47
+ console.log(`${prefix} Blocked by: ${formatTicketId(blocker.ticketNumber)} ` +
48
+ `(${blockerTitle}) [${statusColor(blocker.status)}]`);
49
+ }
50
+ // Block reason if set
51
+ if (ticket.blockReason) {
52
+ console.log(colors.muted(` Reason: ${ticket.blockReason}`));
53
+ }
54
+ printBlank();
55
+ }
56
+ // Summary
57
+ const blockerCount = tickets.reduce((sum, t) => sum + t.blockedBy.length, 0);
58
+ console.log(colors.muted(`${tickets.length} blocked ticket${tickets.length !== 1 ? 's' : ''} | ${blockerCount} blocker${blockerCount !== 1 ? 's' : ''}`));
59
+ printBlank();
60
+ }
61
+ /**
62
+ * Display empty state (no blocked tickets)
63
+ */
64
+ function displayEmptyState() {
65
+ printBlank();
66
+ console.log(colors.muted('No blocked tickets.'));
67
+ console.log(colors.success('✓ All tickets are ready to work on!'));
68
+ printBlank();
69
+ }
70
+ /**
71
+ * Format blocked tickets as TOON
72
+ */
73
+ function formatBlockedAsToon(tickets) {
74
+ const lines = ['@blocked'];
75
+ for (const ticket of tickets) {
76
+ lines.push(` ${formatTicketId(ticket.ticketNumber)}`);
77
+ lines.push(` title: ${ticket.title}`);
78
+ if (ticket.blockedBy.length > 0) {
79
+ lines.push(' blockedBy:');
80
+ for (const blocker of ticket.blockedBy) {
81
+ lines.push(` - ${formatTicketId(blocker.ticketNumber)}: ${blocker.title} [${blocker.status}]`);
82
+ }
83
+ }
84
+ if (ticket.blockReason) {
85
+ lines.push(` reason: ${ticket.blockReason}`);
86
+ }
87
+ }
88
+ return lines.join('\n');
89
+ }
90
+ /**
91
+ * Blocked command action handler
92
+ */
93
+ export async function blockedAction(options) {
94
+ const config = resolveConfig();
95
+ if (!config.apiKey) {
96
+ throw new CliError('Not authenticated', 1, 'Run `specforge-mcp login` to authenticate first');
97
+ }
98
+ if (!config.specificationId) {
99
+ throw new CliError('No specification configured', 1, "Run 'specforge-mcp init' or 'specforge-mcp switch <spec-id>' to set a specification");
100
+ }
101
+ const spinner = ora({
102
+ text: 'Fetching blocked tickets...',
103
+ color: 'cyan',
104
+ }).start();
105
+ try {
106
+ const client = new ApiClient({
107
+ apiKey: config.apiKey,
108
+ apiUrl: config.apiUrl,
109
+ debug: config.debug,
110
+ });
111
+ // Get blocked tickets
112
+ const listResponse = await client.call('list_tickets', {
113
+ specificationId: config.specificationId,
114
+ status: 'blocked',
115
+ });
116
+ const tickets = listResponse.tickets || [];
117
+ if (tickets.length === 0) {
118
+ spinner.stop();
119
+ displayEmptyState();
120
+ return;
121
+ }
122
+ // Enrich with blocker details
123
+ spinner.text = 'Loading blocker details...';
124
+ const blockedTickets = [];
125
+ for (const ticket of tickets) {
126
+ const blockers = [];
127
+ if (ticket.blockedBy && ticket.blockedBy.length > 0) {
128
+ for (const blockerId of ticket.blockedBy) {
129
+ try {
130
+ const blockerResponse = await client.call('get_ticket', {
131
+ ticketId: blockerId,
132
+ });
133
+ blockers.push({
134
+ id: blockerResponse.id,
135
+ ticketNumber: blockerResponse.ticketNumber,
136
+ title: blockerResponse.title,
137
+ status: blockerResponse.status,
138
+ });
139
+ }
140
+ catch {
141
+ // If we can't fetch blocker details, use placeholder
142
+ blockers.push({
143
+ id: blockerId,
144
+ ticketNumber: 0,
145
+ title: 'Unknown ticket',
146
+ status: 'pending',
147
+ });
148
+ }
149
+ }
150
+ }
151
+ blockedTickets.push({
152
+ id: ticket.id,
153
+ ticketNumber: ticket.ticketNumber,
154
+ title: ticket.title,
155
+ blockedBy: blockers,
156
+ blockReason: ticket.blockReason,
157
+ });
158
+ }
159
+ spinner.stop();
160
+ // Output based on format
161
+ if (options.json) {
162
+ console.log(JSON.stringify({ blockedTickets }, null, 2));
163
+ return;
164
+ }
165
+ if (options.toon) {
166
+ console.log(formatBlockedAsToon(blockedTickets));
167
+ return;
168
+ }
169
+ // Default: tree visualization
170
+ displayBlockedTickets(blockedTickets);
171
+ }
172
+ catch (error) {
173
+ spinner.fail('Failed to fetch blocked tickets');
174
+ const message = error instanceof Error ? error.message : 'Unknown error';
175
+ if (message.includes('404') || message.includes('not found')) {
176
+ throw new CliError('Specification not found', 1, 'The configured specification may have been deleted. Run `specforge-mcp init` to select a new one.');
177
+ }
178
+ if (message.includes('401') || message.includes('Unauthorized')) {
179
+ throw new CliError('Authentication failed', 1, 'Your API key may be invalid. Run `specforge-mcp login` to re-authenticate');
180
+ }
181
+ throw new NetworkError(`Failed to fetch blocked tickets: ${message}`);
182
+ }
183
+ }
184
+ /**
185
+ * Register blocked command with Commander
186
+ */
187
+ export function registerBlockedCommand(program) {
188
+ program
189
+ .command('blocked')
190
+ .description('Show blocked tickets and their blockers')
191
+ .option('--json', 'Output as JSON')
192
+ .option('--toon', 'Output as TOON format')
193
+ .addHelpText('after', `
194
+ Examples:
195
+ $ specforge-mcp blocked # Show blocked tickets with tree
196
+ $ specforge-mcp blocked --json # Output as JSON
197
+
198
+ The blocked command shows all tickets that are currently blocked,
199
+ along with the tickets that are blocking them.
200
+
201
+ For each blocked ticket, it displays:
202
+ - Ticket number and title
203
+ - List of blocking tickets with their status
204
+ - Block reason (if manually set)
205
+
206
+ The blocker status helps identify which blockers need attention:
207
+ ${colors.success('done')} - Blocker is complete (may need status update)
208
+ ${colors.primary('in_progress')} - Blocker is being worked on
209
+ ${colors.warning('pending')} - Blocker not yet started
210
+ ${colors.error('blocked')} - Blocker is also blocked (chain)
211
+ `)
212
+ .action(withErrorHandler(blockedAction));
213
+ }
214
+ //# sourceMappingURL=blocked.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"blocked.js","sourceRoot":"","sources":["../../../src/cli/commands/blocked.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Configure Command
3
+ *
4
+ * View and modify configuration values for global and project settings.
5
+ */
6
+ import { Command } from 'commander';
7
+ import { ConfigureOptions } from './configure.types.js';
8
+ /**
9
+ * Configure command action handler
10
+ */
11
+ export declare function configureAction(key: string | undefined, value: string | undefined, options: ConfigureOptions): Promise<void>;
12
+ /**
13
+ * Register configure command with Commander
14
+ */
15
+ export declare function registerConfigureCommand(program: Command): void;
16
+ //# sourceMappingURL=configure.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/configure.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,OAAO,EACL,gBAAgB,EAMjB,MAAM,sBAAsB,CAAC;AA+K9B;;GAEG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,GAAG,SAAS,EACvB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CA0Cf;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2B/D"}