@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,218 @@
1
+ /**
2
+ * Configure Command
3
+ *
4
+ * View and modify configuration values for global and project settings.
5
+ */
6
+ import { resolveConfig, loadGlobalConfig, loadProjectConfig, saveGlobalConfig, saveProjectConfig, getConfigPaths, } from '../config/index.js';
7
+ import { withErrorHandler, CliError, ValidationError } from '../middleware/error-handler.js';
8
+ import { printSuccess, printBlank, printHeader, } from '../ui/output.js';
9
+ import { colors } from '../ui/colors.js';
10
+ import { VALID_KEYS, CONFIG_KEY_META, isValidKeyForScope, parseConfigValue, } from './configure.types.js';
11
+ /**
12
+ * Mask a sensitive value (show only last N characters)
13
+ */
14
+ function maskValue(value, visibleChars = 8) {
15
+ if (value.length <= visibleChars) {
16
+ return '***';
17
+ }
18
+ return '***' + value.slice(-visibleChars);
19
+ }
20
+ /**
21
+ * Format a value for display
22
+ */
23
+ function formatDisplayValue(key, value) {
24
+ if (value === undefined || value === null || value === '') {
25
+ return colors.muted('(not set)');
26
+ }
27
+ // Mask API key
28
+ if (key === 'apiKey' && typeof value === 'string') {
29
+ return colors.muted(maskValue(value));
30
+ }
31
+ // Boolean values
32
+ if (typeof value === 'boolean') {
33
+ return value ? colors.success('true') : colors.muted('false');
34
+ }
35
+ return String(value);
36
+ }
37
+ /**
38
+ * Display all configuration values with sources
39
+ */
40
+ function displayAllConfig() {
41
+ const config = resolveConfig();
42
+ const paths = getConfigPaths();
43
+ printBlank();
44
+ printHeader('Configuration');
45
+ printBlank();
46
+ console.log(colors.muted('# Resolved values (from all sources)'));
47
+ printBlank();
48
+ // API Key (always masked)
49
+ const apiKeyDisplay = config.apiKey
50
+ ? colors.muted(maskValue(config.apiKey))
51
+ : colors.error('(not set)');
52
+ const apiKeySource = config.sources.apiKey
53
+ ? colors.muted(` (from ${config.sources.apiKey})`)
54
+ : '';
55
+ console.log(` apiKey: ${apiKeyDisplay}${apiKeySource}`);
56
+ // Format
57
+ const formatSource = config.sources.format
58
+ ? colors.muted(` (from ${config.sources.format})`)
59
+ : '';
60
+ console.log(` format: ${config.format}${formatSource}`);
61
+ // Project ID
62
+ const projectIdDisplay = formatDisplayValue('projectId', config.projectId);
63
+ const projectIdSource = config.sources.projectId
64
+ ? colors.muted(` (from ${config.sources.projectId})`)
65
+ : '';
66
+ console.log(` projectId: ${projectIdDisplay}${projectIdSource}`);
67
+ // Specification ID
68
+ const specIdDisplay = formatDisplayValue('specificationId', config.specificationId);
69
+ const specIdSource = config.sources.specificationId
70
+ ? colors.muted(` (from ${config.sources.specificationId})`)
71
+ : '';
72
+ console.log(` specificationId: ${specIdDisplay}${specIdSource}`);
73
+ // Auto Set Context
74
+ const autoSetDisplay = formatDisplayValue('autoSetContext', config.autoSetContext);
75
+ // Note: autoSetContext source tracking not yet implemented in ConfigSources
76
+ console.log(` autoSetContext: ${autoSetDisplay}`);
77
+ printBlank();
78
+ console.log(colors.muted('# File locations'));
79
+ console.log(` global: ${paths.globalConfig}`);
80
+ console.log(` project: ${paths.projectConfig}`);
81
+ printBlank();
82
+ }
83
+ /**
84
+ * Display a specific configuration key value
85
+ */
86
+ function displayKey(key) {
87
+ const config = resolveConfig();
88
+ const value = config[key];
89
+ if (key === 'apiKey' && typeof value === 'string') {
90
+ console.log(maskValue(value));
91
+ }
92
+ else if (value === undefined || value === null || value === '') {
93
+ console.log(colors.muted('(not set)'));
94
+ }
95
+ else {
96
+ console.log(String(value));
97
+ }
98
+ }
99
+ /**
100
+ * Set a configuration value
101
+ */
102
+ function setConfigValue(key, value, global) {
103
+ const scope = global ? 'global' : 'project';
104
+ // Validate key for scope
105
+ if (!isValidKeyForScope(key, scope)) {
106
+ const validKeys = VALID_KEYS[scope];
107
+ throw new ValidationError(`Invalid key "${key}" for ${scope} config`, `Valid keys: ${validKeys.join(', ')}`);
108
+ }
109
+ // Parse and validate value
110
+ const parseResult = parseConfigValue(key, value);
111
+ if (!parseResult.valid) {
112
+ const meta = CONFIG_KEY_META[key];
113
+ throw new ValidationError(`Invalid value "${value}" for key "${key}"`, meta?.validValues ? `Valid values: ${meta.validValues.join(', ')}` : undefined);
114
+ }
115
+ // Save to appropriate config file
116
+ if (global) {
117
+ const currentConfig = loadGlobalConfig();
118
+ saveGlobalConfig({
119
+ ...currentConfig,
120
+ [key]: parseResult.parsed,
121
+ });
122
+ }
123
+ else {
124
+ const currentConfig = loadProjectConfig() || {};
125
+ saveProjectConfig({
126
+ ...currentConfig,
127
+ [key]: parseResult.parsed,
128
+ });
129
+ }
130
+ printSuccess(`Set ${key} = ${value}`);
131
+ }
132
+ /**
133
+ * Remove a configuration key
134
+ */
135
+ function unsetConfigKey(key, global) {
136
+ const scope = global ? 'global' : 'project';
137
+ // Validate key for scope
138
+ if (!isValidKeyForScope(key, scope)) {
139
+ const validKeys = VALID_KEYS[scope];
140
+ throw new ValidationError(`Invalid key "${key}" for ${scope} config`, `Valid keys: ${validKeys.join(', ')}`);
141
+ }
142
+ if (global) {
143
+ const config = loadGlobalConfig();
144
+ delete config[key];
145
+ saveGlobalConfig(config);
146
+ }
147
+ else {
148
+ const config = loadProjectConfig() || {};
149
+ delete config[key];
150
+ saveProjectConfig(config);
151
+ }
152
+ printSuccess(`Removed ${key} from ${scope} config`);
153
+ }
154
+ /**
155
+ * Configure command action handler
156
+ */
157
+ export async function configureAction(key, value, options) {
158
+ // Handle --unset
159
+ if (options.unset) {
160
+ unsetConfigKey(options.unset, !!options.global);
161
+ return;
162
+ }
163
+ // No key = show all config
164
+ if (!key) {
165
+ displayAllConfig();
166
+ return;
167
+ }
168
+ // Validate key exists in at least one scope
169
+ const isValidGlobal = isValidKeyForScope(key, 'global');
170
+ const isValidProject = isValidKeyForScope(key, 'project');
171
+ if (!isValidGlobal && !isValidProject && key !== 'apiKey') {
172
+ const allKeys = [...new Set([...VALID_KEYS.global, ...VALID_KEYS.project])];
173
+ throw new ValidationError(`Unknown configuration key "${key}"`, `Valid keys: ${allKeys.join(', ')}`);
174
+ }
175
+ // Key only = show value
176
+ if (value === undefined) {
177
+ displayKey(key);
178
+ return;
179
+ }
180
+ // Key + value = set value
181
+ // Prevent setting apiKey via configure
182
+ if (key === 'apiKey') {
183
+ throw new CliError('Cannot set API key via configure command', 1, 'Use `specforge-mcp login` to set your API key');
184
+ }
185
+ setConfigValue(key, value, !!options.global);
186
+ }
187
+ /**
188
+ * Register configure command with Commander
189
+ */
190
+ export function registerConfigureCommand(program) {
191
+ program
192
+ .command('configure [key] [value]')
193
+ .alias('config')
194
+ .description('View or modify configuration')
195
+ .option('--global', 'Read/write global config (~/.specforge/config.json)')
196
+ .option('--unset <key>', 'Remove a configuration key')
197
+ .addHelpText('after', `
198
+ Examples:
199
+ $ specforge-mcp configure # Show all configuration
200
+ $ specforge-mcp configure format # Show format value
201
+ $ specforge-mcp configure format toon # Set project format to toon
202
+ $ specforge-mcp configure --global format json # Set global format to json
203
+ $ specforge-mcp configure --unset projectId # Remove projectId from project config
204
+
205
+ Valid keys:
206
+ Global: ${VALID_KEYS.global.join(', ')}
207
+ Project: ${VALID_KEYS.project.join(', ')}
208
+
209
+ Key descriptions:
210
+ format - Output format: json or toon (44% smaller)
211
+ projectId - Default project ID for this directory
212
+ specificationId - Default specification ID for this directory
213
+ autoSetContext - Auto-set working context on start (true/false)
214
+ defaultProjectId - Global default project ID
215
+ `)
216
+ .action(withErrorHandler(configureAction));
217
+ }
218
+ //# sourceMappingURL=configure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.js","sourceRoot":"","sources":["../../../src/cli/commands/configure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * Configure Command Types
3
+ *
4
+ * Type definitions and constants for the configure command.
5
+ */
6
+ /**
7
+ * Configure command options from Commander
8
+ */
9
+ export interface ConfigureOptions {
10
+ /** Read/write global config (~/.specforge/config.json) */
11
+ global?: boolean;
12
+ /** Remove a configuration key */
13
+ unset?: string;
14
+ }
15
+ /**
16
+ * Configuration scope
17
+ */
18
+ export type ConfigScope = 'global' | 'project';
19
+ /**
20
+ * Valid configuration keys by scope
21
+ */
22
+ export declare const VALID_KEYS: Record<ConfigScope, string[]>;
23
+ /**
24
+ * All valid configuration keys (union of both scopes)
25
+ */
26
+ export declare const ALL_VALID_KEYS: readonly ["format", "projectId", "specificationId", "autoSetContext", "defaultProjectId"];
27
+ /**
28
+ * Valid configuration key type
29
+ */
30
+ export type ValidConfigKey = (typeof ALL_VALID_KEYS)[number];
31
+ /**
32
+ * Configuration key metadata
33
+ */
34
+ export interface ConfigKeyMeta {
35
+ /** Human-readable description */
36
+ description: string;
37
+ /** Valid scopes for this key */
38
+ scopes: ConfigScope[];
39
+ /** Valid values (if restricted) */
40
+ validValues?: string[];
41
+ /** Whether the value should be masked in output */
42
+ masked?: boolean;
43
+ /** Value type after parsing */
44
+ type: 'string' | 'boolean';
45
+ }
46
+ /**
47
+ * Configuration key metadata map
48
+ */
49
+ export declare const CONFIG_KEY_META: Record<ValidConfigKey, ConfigKeyMeta>;
50
+ /**
51
+ * Key validator function type
52
+ */
53
+ export type KeyValidator = (value: string) => boolean;
54
+ /**
55
+ * Key validators for values that need validation
56
+ */
57
+ export declare const KEY_VALIDATORS: Partial<Record<ValidConfigKey, KeyValidator>>;
58
+ /**
59
+ * Value parser function type
60
+ */
61
+ export type ValueParser = (value: string) => unknown;
62
+ /**
63
+ * Value parsers for converting string input to proper types
64
+ */
65
+ export declare const VALUE_PARSERS: Partial<Record<ValidConfigKey, ValueParser>>;
66
+ /**
67
+ * Configuration display entry
68
+ */
69
+ export interface ConfigDisplayEntry {
70
+ /** Configuration key */
71
+ key: string;
72
+ /** Resolved value */
73
+ value: unknown;
74
+ /** Source of the value */
75
+ source: string;
76
+ /** Whether to mask the value */
77
+ masked?: boolean;
78
+ }
79
+ /**
80
+ * Validation result
81
+ */
82
+ export interface ValidationResult {
83
+ /** Whether the validation passed */
84
+ valid: boolean;
85
+ /** Error message if validation failed */
86
+ error?: string;
87
+ /** Hint for valid values */
88
+ hint?: string;
89
+ }
90
+ /**
91
+ * Check if a key is valid for the given scope
92
+ */
93
+ export declare function isValidKeyForScope(key: string, scope: ConfigScope): boolean;
94
+ /**
95
+ * Get validator for a key
96
+ */
97
+ export declare function getValidator(key: string): KeyValidator | undefined;
98
+ /**
99
+ * Get parser for a key
100
+ */
101
+ export declare function getParser(key: string): ValueParser | undefined;
102
+ /**
103
+ * Parse and validate a configuration value
104
+ */
105
+ export declare function parseConfigValue(key: string, value: string): {
106
+ parsed: unknown;
107
+ valid: boolean;
108
+ error?: string;
109
+ };
110
+ //# sourceMappingURL=configure.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.types.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/configure.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;AAE/C;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,CAGpD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,2FAMjB,CAAC;AAEX;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,mDAAmD;IACnD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;CAC5B;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,cAAc,EAAE,aAAa,CA4BjE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAEtD;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAGxE,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC,CAEtE,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,wBAAwB;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,qBAAqB;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,0BAA0B;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,oCAAoC;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,yCAAyC;IACzC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAE3E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAElE;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAE9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,GACZ;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAiBrD"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * Configure Command Types
3
+ *
4
+ * Type definitions and constants for the configure command.
5
+ */
6
+ /**
7
+ * Valid configuration keys by scope
8
+ */
9
+ export const VALID_KEYS = {
10
+ global: ['format', 'defaultProjectId'],
11
+ project: ['format', 'projectId', 'specificationId', 'autoSetContext'],
12
+ };
13
+ /**
14
+ * All valid configuration keys (union of both scopes)
15
+ */
16
+ export const ALL_VALID_KEYS = [
17
+ 'format',
18
+ 'projectId',
19
+ 'specificationId',
20
+ 'autoSetContext',
21
+ 'defaultProjectId',
22
+ ];
23
+ /**
24
+ * Configuration key metadata map
25
+ */
26
+ export const CONFIG_KEY_META = {
27
+ format: {
28
+ description: 'Output format',
29
+ scopes: ['global', 'project'],
30
+ validValues: ['json', 'toon'],
31
+ type: 'string',
32
+ },
33
+ projectId: {
34
+ description: 'Default project ID',
35
+ scopes: ['project'],
36
+ type: 'string',
37
+ },
38
+ specificationId: {
39
+ description: 'Default specification ID',
40
+ scopes: ['project'],
41
+ type: 'string',
42
+ },
43
+ autoSetContext: {
44
+ description: 'Auto-set working context on MCP server start',
45
+ scopes: ['project'],
46
+ validValues: ['true', 'false'],
47
+ type: 'boolean',
48
+ },
49
+ defaultProjectId: {
50
+ description: 'Global default project ID',
51
+ scopes: ['global'],
52
+ type: 'string',
53
+ },
54
+ };
55
+ /**
56
+ * Key validators for values that need validation
57
+ */
58
+ export const KEY_VALIDATORS = {
59
+ format: (v) => ['json', 'toon'].includes(v),
60
+ autoSetContext: (v) => ['true', 'false'].includes(v.toLowerCase()),
61
+ };
62
+ /**
63
+ * Value parsers for converting string input to proper types
64
+ */
65
+ export const VALUE_PARSERS = {
66
+ autoSetContext: (v) => v.toLowerCase() === 'true',
67
+ };
68
+ /**
69
+ * Check if a key is valid for the given scope
70
+ */
71
+ export function isValidKeyForScope(key, scope) {
72
+ return VALID_KEYS[scope].includes(key);
73
+ }
74
+ /**
75
+ * Get validator for a key
76
+ */
77
+ export function getValidator(key) {
78
+ return KEY_VALIDATORS[key];
79
+ }
80
+ /**
81
+ * Get parser for a key
82
+ */
83
+ export function getParser(key) {
84
+ return VALUE_PARSERS[key];
85
+ }
86
+ /**
87
+ * Parse and validate a configuration value
88
+ */
89
+ export function parseConfigValue(key, value) {
90
+ // Validate if validator exists
91
+ const validator = getValidator(key);
92
+ if (validator && !validator(value)) {
93
+ const meta = CONFIG_KEY_META[key];
94
+ return {
95
+ parsed: value,
96
+ valid: false,
97
+ error: `Invalid value "${value}" for key "${key}". Valid values: ${meta?.validValues?.join(', ')}`,
98
+ };
99
+ }
100
+ // Parse the value
101
+ const parser = getParser(key);
102
+ const parsed = parser ? parser(value) : value;
103
+ return { parsed, valid: true };
104
+ }
105
+ //# sourceMappingURL=configure.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configure.types.js","sourceRoot":"","sources":["../../../src/cli/commands/configure.types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Call Command Implementation
3
+ *
4
+ * Allows directly calling MCP tools with JSON arguments, useful for testing
5
+ * and debugging.
6
+ */
7
+ import type { CallOptions } from './types.js';
8
+ /**
9
+ * Call command implementation
10
+ *
11
+ * Directly calls an MCP tool with optional JSON arguments.
12
+ */
13
+ export declare function callCommand(tool: string, options: CallOptions): Promise<void>;
14
+ //# sourceMappingURL=call.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/debug/call.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAsD9C;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA4DnF"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Call Command Implementation
3
+ *
4
+ * Allows directly calling MCP tools with JSON arguments, useful for testing
5
+ * and debugging.
6
+ */
7
+ import ora from 'ora';
8
+ import { resolveConfig } from '../../config/index.js';
9
+ import { colors } from '../../ui/colors.js';
10
+ import { ApiClient } from '../../../client/api-client.js';
11
+ /**
12
+ * Parse JSON arguments safely
13
+ */
14
+ function parseArgs(argsString) {
15
+ if (!argsString) {
16
+ return {};
17
+ }
18
+ try {
19
+ return JSON.parse(argsString);
20
+ }
21
+ catch (error) {
22
+ throw new Error(`Invalid JSON in --args. Example: --args='{"ticketId": "abc123"}'`);
23
+ }
24
+ }
25
+ /**
26
+ * Format response as TOON
27
+ */
28
+ function formatToon(response) {
29
+ if (typeof response === 'object' && response !== null) {
30
+ const lines = ['@response'];
31
+ const entries = Object.entries(response);
32
+ for (const [key, value] of entries) {
33
+ if (typeof value === 'object' && value !== null) {
34
+ lines.push(` ${key}: ${JSON.stringify(value)}`);
35
+ }
36
+ else {
37
+ lines.push(` ${key}: ${value}`);
38
+ }
39
+ }
40
+ return lines.join('\n');
41
+ }
42
+ return String(response);
43
+ }
44
+ /**
45
+ * Format output based on options
46
+ */
47
+ function formatOutput(response, options) {
48
+ if (options.raw) {
49
+ return typeof response === 'string' ? response : JSON.stringify(response);
50
+ }
51
+ if (options.format === 'toon') {
52
+ return formatToon(response);
53
+ }
54
+ // Default to formatted JSON
55
+ return JSON.stringify(response, null, 2);
56
+ }
57
+ /**
58
+ * Call command implementation
59
+ *
60
+ * Directly calls an MCP tool with optional JSON arguments.
61
+ */
62
+ export async function callCommand(tool, options) {
63
+ // Validate tool name
64
+ if (!tool) {
65
+ console.error(colors.error('\nError: Tool name is required.'));
66
+ console.error("Usage: specforge-mcp call <tool> --args='{\"key\": \"value\"}'");
67
+ process.exit(1);
68
+ }
69
+ const config = resolveConfig();
70
+ // Parse arguments
71
+ let args;
72
+ try {
73
+ args = parseArgs(options.args);
74
+ }
75
+ catch (error) {
76
+ const message = error instanceof Error ? error.message : 'Invalid JSON';
77
+ console.error(colors.error(`\nError: ${message}`));
78
+ process.exit(1);
79
+ }
80
+ const spinner = ora(`Calling ${tool}...`).start();
81
+ try {
82
+ if (!config.apiKey) {
83
+ spinner.fail('Not authenticated');
84
+ console.error(colors.error('\nError: Not authenticated.'));
85
+ console.error(colors.muted('Run `specforge-mcp login` to authenticate first.'));
86
+ process.exit(1);
87
+ }
88
+ const client = new ApiClient({
89
+ apiKey: config.apiKey,
90
+ apiUrl: config.apiUrl,
91
+ debug: config.debug,
92
+ });
93
+ const response = await client.call(tool, args);
94
+ spinner.stop();
95
+ // Format and display output
96
+ const output = formatOutput(response, options);
97
+ console.log(output);
98
+ }
99
+ catch (error) {
100
+ spinner.fail(`Failed to call ${tool}`);
101
+ const message = error instanceof Error ? error.message : 'Unknown error';
102
+ // Provide helpful error messages
103
+ if (message.includes('Unknown tool') || message.includes('not found')) {
104
+ console.error(colors.error(`\nError: Unknown tool "${tool}".`));
105
+ console.error(colors.muted("Run 'specforge-mcp tools' to see available tools."));
106
+ }
107
+ else if (message.includes('required')) {
108
+ console.error(colors.error(`\nError: ${message}`));
109
+ console.error(colors.muted('Check the tool requires specific arguments.'));
110
+ }
111
+ else {
112
+ console.error(colors.error(`\nError: ${message}`));
113
+ }
114
+ process.exit(1);
115
+ }
116
+ }
117
+ //# sourceMappingURL=call.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call.js","sourceRoot":"","sources":["../../../../src/cli/commands/debug/call.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAG1D;;GAEG;AACH,SAAS,SAAS,CAAC,UAA8B;IAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,kEAAkE,CACnE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,QAAiB;IACnC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtD,MAAM,KAAK,GAAa,CAAC,WAAW,CAAC,CAAC;QACtC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACnC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBAChD,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,QAAiB,EAAE,OAAoB;IAC3D,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,OAAO,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,4BAA4B;IAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,OAAoB;IAClE,qBAAqB;IACrB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAE/B,kBAAkB;IAClB,IAAI,IAA6B,CAAC;IAClC,IAAI,CAAC;QACH,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;QACxE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;IAElD,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC,CAAC;YAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;YAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE/C,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,4BAA4B;QAC5B,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;QACvC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;QAEzE,iCAAiC;QACjC,IAAI,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACtE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,IAAI,IAAI,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;QACnF,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Debug Command Module
3
+ *
4
+ * Exports all debug command types and utilities.
5
+ */
6
+ export * from './types.js';
7
+ export { callCommand } from './call.js';
8
+ export { toolsCommand } from './tools.js';
9
+ export { testCommand } from './test.js';
10
+ export { whoamiCommand } from './whoami.js';
11
+ export { registerDebugCommands } from './register.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/debug/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Debug Command Module
3
+ *
4
+ * Exports all debug command types and utilities.
5
+ */
6
+ export * from './types.js';
7
+ export { callCommand } from './call.js';
8
+ export { toolsCommand } from './tools.js';
9
+ export { testCommand } from './test.js';
10
+ export { whoamiCommand } from './whoami.js';
11
+ export { registerDebugCommands } from './register.js';
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/debug/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Debug Command Registration
3
+ *
4
+ * Registers all debug commands with the CLI framework.
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Register all debug commands with the CLI
9
+ */
10
+ export declare function registerDebugCommands(program: Command): void;
11
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/debug/register.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkG5D"}