@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,127 @@
1
+ /**
2
+ * Tool Usage Examples
3
+ *
4
+ * Provides usage examples for all MCP tools.
5
+ */
6
+ /**
7
+ * Usage examples for MCP tools
8
+ */
9
+ export const TOOL_EXAMPLES = {
10
+ // Context
11
+ get_working_context: 'get_working_context()',
12
+ set_working_context: `set_working_context({
13
+ projectId: "proj_abc123",
14
+ specificationId: "spec_def456"
15
+ })`,
16
+ // Projects
17
+ list_projects: 'list_projects({ limit: 10 })',
18
+ get_project: 'get_project({ projectId: "proj_abc123" })',
19
+ // Specifications
20
+ list_specifications: `list_specifications({
21
+ projectId: "proj_abc123",
22
+ status: "in_progress"
23
+ })`,
24
+ get_specification: 'get_specification({ specificationId: "spec_def456" })',
25
+ create_specification: `create_specification({
26
+ projectId: "proj_abc123",
27
+ title: "User Authentication",
28
+ description: "Implement user auth with OAuth"
29
+ })`,
30
+ update_specification: `update_specification({
31
+ specificationId: "spec_def456",
32
+ status: "in_progress"
33
+ })`,
34
+ // Epics
35
+ list_epics: 'list_epics({ specificationId: "spec_def456" })',
36
+ get_epic: 'get_epic({ epicId: "epic_ghi789" })',
37
+ create_epic: `create_epic({
38
+ specificationId: "spec_def456",
39
+ title: "Database Setup",
40
+ orderIndex: 1
41
+ })`,
42
+ update_epic: `update_epic({
43
+ epicId: "epic_ghi789",
44
+ status: "in_progress"
45
+ })`,
46
+ // Tickets
47
+ list_tickets: `list_tickets({
48
+ specificationId: "spec_def456",
49
+ status: "pending",
50
+ limit: 20
51
+ })`,
52
+ get_ticket: 'get_ticket({ ticketId: "ticket_xyz123" })',
53
+ create_ticket: `create_ticket({
54
+ epicId: "epic_ghi789",
55
+ title: "Create user table",
56
+ description: "Set up PostgreSQL user table",
57
+ acceptanceCriteria: ["Table created", "Indexes added"]
58
+ })`,
59
+ update_ticket: `update_ticket({
60
+ ticketId: "ticket_xyz123",
61
+ status: "done"
62
+ })`,
63
+ search_tickets: `search_tickets({
64
+ specificationId: "spec_def456",
65
+ query: "authentication"
66
+ })`,
67
+ // Implementation
68
+ get_implementation_context: 'get_implementation_context({ ticketId: "ticket_xyz123" })',
69
+ get_full_context: 'get_full_context({ ticketId: "ticket_xyz123" })',
70
+ get_pattern_chain: 'get_pattern_chain({ ticketId: "ticket_xyz123" })',
71
+ // Sessions
72
+ start_work_session: 'start_work_session({ ticketId: "ticket_xyz123" })',
73
+ complete_work_session: `complete_work_session({
74
+ ticketId: "ticket_xyz123",
75
+ summary: "Implemented user table with indexes",
76
+ actualHours: 2.5
77
+ })`,
78
+ report_progress: `report_progress({
79
+ ticketId: "ticket_xyz123",
80
+ progress: 75,
81
+ notes: "Schema complete, working on indexes"
82
+ })`,
83
+ // Autonomous
84
+ start_implementation_session: `start_implementation_session({
85
+ specificationId: "spec_def456",
86
+ mode: "autonomous"
87
+ })`,
88
+ end_session: `end_session({
89
+ sessionId: "session_abc",
90
+ status: "completed"
91
+ })`,
92
+ get_next_actionable_tickets: `get_next_actionable_tickets({
93
+ specificationId: "spec_def456",
94
+ limit: 5
95
+ })`,
96
+ // Dependencies
97
+ get_dependency_tree: 'get_dependency_tree({ ticketId: "ticket_xyz123" })',
98
+ add_dependency: `add_dependency({
99
+ ticketId: "ticket_xyz123",
100
+ dependsOn: "ticket_abc456"
101
+ })`,
102
+ remove_dependency: `remove_dependency({
103
+ ticketId: "ticket_xyz123",
104
+ dependsOn: "ticket_abc456"
105
+ })`,
106
+ // Validation
107
+ validate_ticket: 'validate_ticket({ ticketId: "ticket_xyz123" })',
108
+ validate_acceptance_criteria: `validate_acceptance_criteria({
109
+ ticketId: "ticket_xyz123",
110
+ results: [
111
+ { criterion: "Table created", passed: true },
112
+ { criterion: "Indexes added", passed: true }
113
+ ]
114
+ })`,
115
+ // Reports
116
+ get_report: `get_report({
117
+ specificationId: "spec_def456",
118
+ type: "progress"
119
+ })`,
120
+ };
121
+ /**
122
+ * Get example for a tool
123
+ */
124
+ export function getToolExample(toolName) {
125
+ return TOOL_EXAMPLES[toolName] || `${toolName}({ ... })`;
126
+ }
127
+ //# sourceMappingURL=tool-examples.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-examples.js","sourceRoot":"","sources":["../../../../src/cli/commands/docs/tool-examples.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,UAAU;IACV,mBAAmB,EAAE,uBAAuB;IAC5C,mBAAmB,EAAE;;;GAGpB;IAED,WAAW;IACX,aAAa,EAAE,8BAA8B;IAC7C,WAAW,EAAE,2CAA2C;IAExD,iBAAiB;IACjB,mBAAmB,EAAE;;;GAGpB;IACD,iBAAiB,EAAE,uDAAuD;IAC1E,oBAAoB,EAAE;;;;GAIrB;IACD,oBAAoB,EAAE;;;GAGrB;IAED,QAAQ;IACR,UAAU,EAAE,gDAAgD;IAC5D,QAAQ,EAAE,qCAAqC;IAC/C,WAAW,EAAE;;;;GAIZ;IACD,WAAW,EAAE;;;GAGZ;IAED,UAAU;IACV,YAAY,EAAE;;;;GAIb;IACD,UAAU,EAAE,2CAA2C;IACvD,aAAa,EAAE;;;;;GAKd;IACD,aAAa,EAAE;;;GAGd;IACD,cAAc,EAAE;;;GAGf;IAED,iBAAiB;IACjB,0BAA0B,EAAE,2DAA2D;IACvF,gBAAgB,EAAE,iDAAiD;IACnE,iBAAiB,EAAE,kDAAkD;IAErE,WAAW;IACX,kBAAkB,EAAE,mDAAmD;IACvE,qBAAqB,EAAE;;;;GAItB;IACD,eAAe,EAAE;;;;GAIhB;IAED,aAAa;IACb,4BAA4B,EAAE;;;GAG7B;IACD,WAAW,EAAE;;;GAGZ;IACD,2BAA2B,EAAE;;;GAG5B;IAED,eAAe;IACf,mBAAmB,EAAE,oDAAoD;IACzE,cAAc,EAAE;;;GAGf;IACD,iBAAiB,EAAE;;;GAGlB;IAED,aAAa;IACb,eAAe,EAAE,gDAAgD;IACjE,4BAA4B,EAAE;;;;;;GAM7B;IAED,UAAU;IACV,UAAU,EAAE;;;GAGX;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,QAAgB;IAC7C,OAAO,aAAa,CAAC,QAAQ,CAAC,IAAI,GAAG,QAAQ,WAAW,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Docs Command Types & Interfaces
3
+ *
4
+ * Type definitions for the documentation command including options,
5
+ * topics, and tool documentation structures.
6
+ */
7
+ /**
8
+ * Options for the docs command
9
+ */
10
+ export interface DocsOptions {
11
+ /** Show specific tool documentation */
12
+ tool?: string;
13
+ /** Search documentation */
14
+ search?: string;
15
+ /** Output as JSON */
16
+ json?: boolean;
17
+ }
18
+ /**
19
+ * Options for the tools detail command
20
+ */
21
+ export interface ToolsDetailOptions {
22
+ /** Filter by category */
23
+ category?: string;
24
+ /** Search tools */
25
+ search?: string;
26
+ /** Show parameter details */
27
+ params?: boolean;
28
+ /** Show usage examples */
29
+ examples?: boolean;
30
+ /** Output as JSON */
31
+ json?: boolean;
32
+ }
33
+ /**
34
+ * Available documentation topics
35
+ */
36
+ export type DocsTopic = 'workflow' | 'concepts' | 'api' | 'examples' | 'tools';
37
+ /**
38
+ * Documentation content map
39
+ */
40
+ export type DocsContent = Record<DocsTopic, string>;
41
+ /**
42
+ * Tool category names
43
+ */
44
+ export type ToolCategory = 'Context' | 'Projects' | 'Specifications' | 'Epics' | 'Tickets' | 'Implementation' | 'Sessions' | 'Autonomous' | 'Dependencies' | 'Validation' | 'Reports';
45
+ /**
46
+ * Tool categories mapping
47
+ */
48
+ export type ToolCategoryMap = Record<ToolCategory, string[]>;
49
+ /**
50
+ * Tool documentation info
51
+ */
52
+ export interface ToolDocInfo {
53
+ /** Tool name */
54
+ name: string;
55
+ /** Tool description */
56
+ description: string;
57
+ /** Tool category */
58
+ category: ToolCategory;
59
+ /** Parameter schema */
60
+ parameters?: ToolParameterSchema;
61
+ /** Usage example */
62
+ example?: string;
63
+ }
64
+ /**
65
+ * Tool parameter schema
66
+ */
67
+ export interface ToolParameterSchema {
68
+ /** Parameter properties */
69
+ properties: Record<string, ToolParameterProperty>;
70
+ /** Required parameter names */
71
+ required?: string[];
72
+ }
73
+ /**
74
+ * Tool parameter property
75
+ */
76
+ export interface ToolParameterProperty {
77
+ /** Parameter type */
78
+ type: string;
79
+ /** Parameter description */
80
+ description?: string;
81
+ /** Enum values if applicable */
82
+ enum?: string[];
83
+ /** Default value */
84
+ default?: unknown;
85
+ }
86
+ /**
87
+ * Tool documentation output (for JSON)
88
+ */
89
+ export interface ToolDocOutput {
90
+ /** Tool info */
91
+ tool: {
92
+ name: string;
93
+ description: string;
94
+ };
95
+ /** Tool schema */
96
+ schema: ToolParameterSchema | null;
97
+ /** Usage example */
98
+ example: string;
99
+ }
100
+ /**
101
+ * Available topics with descriptions
102
+ */
103
+ export declare const DOCS_TOPICS: Record<DocsTopic, string>;
104
+ /**
105
+ * Tool categories with their tools
106
+ */
107
+ export declare const TOOL_CATEGORIES: ToolCategoryMap;
108
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/docs/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,UAAU,GAAG,OAAO,CAAC;AAE/E;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;AAEpD;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,UAAU,GACV,gBAAgB,GAChB,OAAO,GACP,SAAS,GACT,gBAAgB,GAChB,UAAU,GACV,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,SAAS,CAAC;AAEd;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;AAE7D;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,QAAQ,EAAE,YAAY,CAAC;IACvB,uBAAuB;IACvB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAClD,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,4BAA4B;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gBAAgB;IAChB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,kBAAkB;IAClB,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACnC,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAMjD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,eAY7B,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Docs Command Types & Interfaces
3
+ *
4
+ * Type definitions for the documentation command including options,
5
+ * topics, and tool documentation structures.
6
+ */
7
+ /**
8
+ * Available topics with descriptions
9
+ */
10
+ export const DOCS_TOPICS = {
11
+ workflow: 'Implementation workflow guide',
12
+ concepts: 'Core concepts (specs, epics, tickets)',
13
+ api: 'API reference and authentication',
14
+ examples: 'Usage examples',
15
+ tools: 'MCP tool reference',
16
+ };
17
+ /**
18
+ * Tool categories with their tools
19
+ */
20
+ export const TOOL_CATEGORIES = {
21
+ 'Context': ['get_working_context', 'set_working_context'],
22
+ 'Projects': ['list_projects', 'get_project'],
23
+ 'Specifications': ['list_specifications', 'get_specification', 'create_specification', 'update_specification'],
24
+ 'Epics': ['list_epics', 'get_epic', 'create_epic', 'update_epic'],
25
+ 'Tickets': ['list_tickets', 'get_ticket', 'create_ticket', 'update_ticket', 'search_tickets'],
26
+ 'Implementation': ['get_implementation_context', 'get_full_context', 'get_pattern_chain'],
27
+ 'Sessions': ['start_work_session', 'complete_work_session', 'report_progress'],
28
+ 'Autonomous': ['start_implementation_session', 'end_session', 'get_next_actionable_tickets'],
29
+ 'Dependencies': ['get_dependency_tree', 'add_dependency', 'remove_dependency'],
30
+ 'Validation': ['validate_ticket', 'validate_acceptance_criteria'],
31
+ 'Reports': ['get_report'],
32
+ };
33
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cli/commands/docs/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAoHH;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAA8B;IACpD,QAAQ,EAAE,+BAA+B;IACzC,QAAQ,EAAE,uCAAuC;IACjD,GAAG,EAAE,kCAAkC;IACvC,QAAQ,EAAE,gBAAgB;IAC1B,KAAK,EAAE,oBAAoB;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,SAAS,EAAE,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;IACzD,UAAU,EAAE,CAAC,eAAe,EAAE,aAAa,CAAC;IAC5C,gBAAgB,EAAE,CAAC,qBAAqB,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,sBAAsB,CAAC;IAC9G,OAAO,EAAE,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC;IACjE,SAAS,EAAE,CAAC,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,gBAAgB,CAAC;IAC7F,gBAAgB,EAAE,CAAC,4BAA4B,EAAE,kBAAkB,EAAE,mBAAmB,CAAC;IACzF,UAAU,EAAE,CAAC,oBAAoB,EAAE,uBAAuB,EAAE,iBAAiB,CAAC;IAC9E,YAAY,EAAE,CAAC,8BAA8B,EAAE,aAAa,EAAE,6BAA6B,CAAC;IAC5F,cAAc,EAAE,CAAC,qBAAqB,EAAE,gBAAgB,EAAE,mBAAmB,CAAC;IAC9E,YAAY,EAAE,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;IACjE,SAAS,EAAE,CAAC,YAAY,CAAC;CAC1B,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Doctor Command
3
+ *
4
+ * Diagnoses configuration and connection issues for SpecForge MCP.
5
+ */
6
+ import { Command } from 'commander';
7
+ import { DoctorOptions } from './doctor.types.js';
8
+ /**
9
+ * Doctor command action handler
10
+ */
11
+ export declare function doctorAction(options: DoctorOptions): Promise<void>;
12
+ /**
13
+ * Register doctor command with Commander
14
+ */
15
+ export declare function registerDoctorCommand(program: Command): void;
16
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,OAAO,EACL,aAAa,EAkBd,MAAM,mBAAmB,CAAC;AAwX3B;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCxE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsB5D"}
@@ -0,0 +1,322 @@
1
+ /**
2
+ * Doctor Command
3
+ *
4
+ * Diagnoses configuration and connection issues for SpecForge MCP.
5
+ */
6
+ import fs from 'node:fs';
7
+ import ora from 'ora';
8
+ import { resolveConfig, loadGlobalConfig, loadProjectConfig, getConfigPaths, } from '../config/index.js';
9
+ import { withErrorHandler } from '../middleware/error-handler.js';
10
+ import { printBlank, printHeader } from '../ui/output.js';
11
+ import { colors } from '../ui/colors.js';
12
+ import { ApiClient } from '../../client/api-client.js';
13
+ import { createPassResult, createFailResult, createWarnResult, calculateSummary, hasFailures, getStatusIcon, CHECK_CATEGORIES, CONFIG_CHECK_NAMES, AUTH_CHECK_NAMES, CONNECTION_CHECK_NAMES, PROJECT_CHECK_NAMES, PERFORMANCE_THRESHOLDS, API_KEY_VALIDATION, FIX_SUGGESTIONS, } from './doctor.types.js';
14
+ /**
15
+ * Mask an API key for display (show only last N characters)
16
+ */
17
+ function maskApiKey(apiKey, visibleChars = 8) {
18
+ if (apiKey.length <= visibleChars) {
19
+ return '***';
20
+ }
21
+ return `${API_KEY_VALIDATION.PREFIX}...${apiKey.slice(-visibleChars)}`;
22
+ }
23
+ /**
24
+ * Run configuration checks
25
+ */
26
+ function runConfigurationChecks() {
27
+ const results = [];
28
+ const paths = getConfigPaths();
29
+ const globalConfig = loadGlobalConfig();
30
+ const projectConfig = loadProjectConfig();
31
+ // Check .mcp.json
32
+ if (fs.existsSync(paths.mcpConfig)) {
33
+ results.push(createPassResult(CONFIG_CHECK_NAMES.MCP_CONFIG_FOUND, paths.mcpConfig));
34
+ }
35
+ else {
36
+ results.push(createFailResult(CONFIG_CHECK_NAMES.MCP_CONFIG_FOUND, 'File not found', FIX_SUGGESTIONS.MISSING_MCP_CONFIG));
37
+ }
38
+ // Check .specforge.json (optional)
39
+ if (projectConfig) {
40
+ results.push(createPassResult(CONFIG_CHECK_NAMES.PROJECT_CONFIG_FOUND, paths.projectConfig));
41
+ }
42
+ else {
43
+ results.push(createWarnResult(CONFIG_CHECK_NAMES.PROJECT_CONFIG_FOUND, 'File not found (optional)', FIX_SUGGESTIONS.MISSING_PROJECT_CONFIG));
44
+ }
45
+ // Check API key configured
46
+ const apiKeySource = process.env.SPECFORGE_API_KEY
47
+ ? 'From environment variable'
48
+ : globalConfig.apiKey
49
+ ? 'From ~/.specforge/config.json'
50
+ : undefined;
51
+ if (apiKeySource) {
52
+ results.push(createPassResult(CONFIG_CHECK_NAMES.API_KEY_CONFIGURED, apiKeySource));
53
+ }
54
+ else {
55
+ results.push(createFailResult(CONFIG_CHECK_NAMES.API_KEY_CONFIGURED, 'No API key found', FIX_SUGGESTIONS.MISSING_API_KEY));
56
+ }
57
+ return results;
58
+ }
59
+ /**
60
+ * Run authentication checks
61
+ */
62
+ async function runAuthenticationChecks(apiKey) {
63
+ const results = [];
64
+ if (!apiKey) {
65
+ results.push(createFailResult(AUTH_CHECK_NAMES.API_KEY_FORMAT, 'No API key to validate'));
66
+ return results;
67
+ }
68
+ // Check format
69
+ const hasValidPrefix = apiKey.startsWith(API_KEY_VALIDATION.PREFIX);
70
+ const hasValidLength = apiKey.length >= API_KEY_VALIDATION.MIN_LENGTH;
71
+ if (hasValidPrefix && hasValidLength) {
72
+ results.push(createPassResult(AUTH_CHECK_NAMES.API_KEY_FORMAT, maskApiKey(apiKey)));
73
+ }
74
+ else {
75
+ const issues = [];
76
+ if (!hasValidPrefix)
77
+ issues.push(`should start with ${API_KEY_VALIDATION.PREFIX}`);
78
+ if (!hasValidLength)
79
+ issues.push(`minimum ${API_KEY_VALIDATION.MIN_LENGTH} characters`);
80
+ results.push(createFailResult(AUTH_CHECK_NAMES.API_KEY_FORMAT, `Invalid format (${issues.join(', ')})`, FIX_SUGGESTIONS.INVALID_API_KEY_FORMAT));
81
+ return results; // Don't test against backend if format is invalid
82
+ }
83
+ // Validate against backend
84
+ const config = resolveConfig();
85
+ const client = new ApiClient({
86
+ apiKey,
87
+ apiUrl: config.apiUrl,
88
+ debug: config.debug,
89
+ });
90
+ try {
91
+ const response = await client.call('list_projects', {});
92
+ results.push(createPassResult(AUTH_CHECK_NAMES.API_KEY_AUTHENTICATED, 'Successfully authenticated'));
93
+ const email = response.userEmail || 'Unknown';
94
+ results.push(createPassResult(AUTH_CHECK_NAMES.USER_INFO, email));
95
+ }
96
+ catch (error) {
97
+ const message = error instanceof Error ? error.message : 'Unknown error';
98
+ if (message.includes('401') || message.includes('Unauthorized')) {
99
+ results.push(createFailResult(AUTH_CHECK_NAMES.API_KEY_AUTHENTICATED, 'Invalid or expired API key', FIX_SUGGESTIONS.EXPIRED_API_KEY));
100
+ }
101
+ else {
102
+ results.push(createFailResult(AUTH_CHECK_NAMES.API_KEY_AUTHENTICATED, `Authentication failed: ${message}`));
103
+ }
104
+ }
105
+ return results;
106
+ }
107
+ /**
108
+ * Run connection checks
109
+ */
110
+ async function runConnectionChecks() {
111
+ const results = [];
112
+ const config = resolveConfig();
113
+ const apiUrl = config.apiUrl;
114
+ const healthUrl = apiUrl.replace(/\/mcp\/?$/, '/health');
115
+ try {
116
+ const start = Date.now();
117
+ const response = await fetch(healthUrl, {
118
+ method: 'GET',
119
+ signal: AbortSignal.timeout(PERFORMANCE_THRESHOLDS.CONNECTION_TIMEOUT),
120
+ });
121
+ const elapsed = Date.now() - start;
122
+ if (response.ok) {
123
+ results.push(createPassResult(CONNECTION_CHECK_NAMES.API_ENDPOINT_REACHABLE, apiUrl, { healthUrl }));
124
+ // Response time check
125
+ if (elapsed < PERFORMANCE_THRESHOLDS.RESPONSE_TIME_WARNING) {
126
+ results.push(createPassResult(CONNECTION_CHECK_NAMES.RESPONSE_TIME, `${elapsed}ms`, { elapsed }));
127
+ }
128
+ else if (elapsed < PERFORMANCE_THRESHOLDS.RESPONSE_TIME_ERROR) {
129
+ results.push(createWarnResult(CONNECTION_CHECK_NAMES.RESPONSE_TIME, `${elapsed}ms (slow)`, undefined, { elapsed }));
130
+ }
131
+ else {
132
+ results.push(createFailResult(CONNECTION_CHECK_NAMES.RESPONSE_TIME, `${elapsed}ms (very slow)`, FIX_SUGGESTIONS.CONNECTION_TIMEOUT, { elapsed }));
133
+ }
134
+ }
135
+ else {
136
+ results.push(createFailResult(CONNECTION_CHECK_NAMES.API_ENDPOINT_REACHABLE, `HTTP ${response.status} ${response.statusText}`, undefined, { status: response.status }));
137
+ }
138
+ }
139
+ catch (error) {
140
+ const message = error instanceof Error ? error.message : 'Unknown error';
141
+ if (message.includes('ENOTFOUND') || message.includes('ECONNREFUSED') || message.includes('getaddrinfo')) {
142
+ results.push(createFailResult(CONNECTION_CHECK_NAMES.API_ENDPOINT_REACHABLE, 'Could not connect to API', FIX_SUGGESTIONS.CONNECTION_FAILED));
143
+ }
144
+ else if (message.includes('timeout') || message.includes('TimeoutError')) {
145
+ results.push(createFailResult(CONNECTION_CHECK_NAMES.API_ENDPOINT_REACHABLE, 'Connection timed out', FIX_SUGGESTIONS.CONNECTION_TIMEOUT));
146
+ }
147
+ else {
148
+ results.push(createFailResult(CONNECTION_CHECK_NAMES.API_ENDPOINT_REACHABLE, message));
149
+ }
150
+ }
151
+ return results;
152
+ }
153
+ /**
154
+ * Run project access checks
155
+ */
156
+ async function runProjectAccessChecks() {
157
+ const results = [];
158
+ const config = resolveConfig();
159
+ if (!config.apiKey) {
160
+ // Skip if no API key (auth checks already failed)
161
+ return results;
162
+ }
163
+ const client = new ApiClient({
164
+ apiKey: config.apiKey,
165
+ apiUrl: config.apiUrl,
166
+ debug: config.debug,
167
+ });
168
+ // Check project access
169
+ if (config.projectId) {
170
+ try {
171
+ await client.call('get_project', { projectId: config.projectId });
172
+ results.push(createPassResult(PROJECT_CHECK_NAMES.PROJECT_ACCESSIBLE, config.projectId));
173
+ }
174
+ catch (error) {
175
+ const message = error instanceof Error ? error.message : 'Unknown error';
176
+ results.push(createFailResult(PROJECT_CHECK_NAMES.PROJECT_ACCESSIBLE, `Cannot access: ${message}`, FIX_SUGGESTIONS.PROJECT_NOT_ACCESSIBLE));
177
+ }
178
+ }
179
+ else {
180
+ results.push(createWarnResult(PROJECT_CHECK_NAMES.PROJECT_ACCESSIBLE, 'No default project configured', FIX_SUGGESTIONS.NO_PROJECT_CONFIGURED));
181
+ }
182
+ // Check specification access
183
+ if (config.specificationId) {
184
+ try {
185
+ await client.call('get_specification', { specificationId: config.specificationId });
186
+ results.push(createPassResult(PROJECT_CHECK_NAMES.SPECIFICATION_ACCESSIBLE, config.specificationId));
187
+ }
188
+ catch (error) {
189
+ const message = error instanceof Error ? error.message : 'Unknown error';
190
+ results.push(createFailResult(PROJECT_CHECK_NAMES.SPECIFICATION_ACCESSIBLE, `Cannot access: ${message}`, FIX_SUGGESTIONS.SPEC_NOT_ACCESSIBLE));
191
+ }
192
+ }
193
+ else {
194
+ results.push(createWarnResult(PROJECT_CHECK_NAMES.SPECIFICATION_ACCESSIBLE, 'No default specification configured'));
195
+ }
196
+ // Check for active implementation session
197
+ try {
198
+ const context = await client.call('get_working_context', {});
199
+ if (context.implementationSession) {
200
+ const sessionInfo = context.implementationSession.ticketId
201
+ ? `Active (ticket: ${context.implementationSession.ticketId})`
202
+ : 'Active session exists';
203
+ results.push(createPassResult(PROJECT_CHECK_NAMES.IMPLEMENTATION_SESSION, sessionInfo));
204
+ }
205
+ else {
206
+ results.push(createWarnResult(PROJECT_CHECK_NAMES.IMPLEMENTATION_SESSION, 'No active implementation session'));
207
+ }
208
+ }
209
+ catch {
210
+ // Ignore session check errors - not critical
211
+ }
212
+ return results;
213
+ }
214
+ /**
215
+ * Display the report in formatted console output
216
+ */
217
+ function displayReport(report) {
218
+ printBlank();
219
+ printHeader('SpecForge MCP Health Check');
220
+ printBlank();
221
+ for (const category of CHECK_CATEGORIES) {
222
+ const checks = report.checks[category.id];
223
+ if (checks.length === 0)
224
+ continue;
225
+ console.log(colors.bold(category.name));
226
+ for (const check of checks) {
227
+ const icon = check.status === 'pass'
228
+ ? colors.success(getStatusIcon('pass'))
229
+ : check.status === 'warn'
230
+ ? colors.warning(getStatusIcon('warn'))
231
+ : colors.error(getStatusIcon('fail'));
232
+ console.log(` ${icon} ${check.name}: ${check.message}`);
233
+ if (check.fix && check.status !== 'pass') {
234
+ console.log(colors.muted(` → ${check.fix}`));
235
+ }
236
+ }
237
+ printBlank();
238
+ }
239
+ // Summary
240
+ const { passed, failed, warnings, total } = report.summary;
241
+ if (failed === 0 && warnings === 0) {
242
+ console.log(colors.success(`All ${total} checks passed!`));
243
+ }
244
+ else if (failed === 0) {
245
+ console.log(colors.success('All checks passed!') +
246
+ colors.warning(` (${warnings} warning${warnings > 1 ? 's' : ''})`));
247
+ }
248
+ else {
249
+ const failMsg = `${failed} check${failed > 1 ? 's' : ''} failed`;
250
+ const warnMsg = warnings > 0
251
+ ? `, ${warnings} warning${warnings > 1 ? 's' : ''}`
252
+ : '';
253
+ console.log(colors.error(failMsg) + colors.warning(warnMsg));
254
+ }
255
+ printBlank();
256
+ }
257
+ /**
258
+ * Doctor command action handler
259
+ */
260
+ export async function doctorAction(options) {
261
+ const config = resolveConfig();
262
+ const spinner = ora({
263
+ text: 'Running health checks...',
264
+ color: 'cyan',
265
+ }).start();
266
+ // Run all checks
267
+ const configChecks = runConfigurationChecks();
268
+ const authChecks = await runAuthenticationChecks(config.apiKey);
269
+ const connectionChecks = await runConnectionChecks();
270
+ const projectChecks = await runProjectAccessChecks();
271
+ spinner.stop();
272
+ // Compile report
273
+ const checks = {
274
+ configuration: configChecks,
275
+ authentication: authChecks,
276
+ connection: connectionChecks,
277
+ projectAccess: projectChecks,
278
+ };
279
+ const report = {
280
+ checks,
281
+ summary: calculateSummary(checks),
282
+ timestamp: new Date().toISOString(),
283
+ };
284
+ // Output
285
+ if (options.json) {
286
+ console.log(JSON.stringify(report, null, 2));
287
+ }
288
+ else {
289
+ displayReport(report);
290
+ }
291
+ // Exit with error if any checks failed
292
+ if (hasFailures(report)) {
293
+ process.exit(1);
294
+ }
295
+ }
296
+ /**
297
+ * Register doctor command with Commander
298
+ */
299
+ export function registerDoctorCommand(program) {
300
+ program
301
+ .command('doctor')
302
+ .description('Diagnose configuration and connection issues')
303
+ .option('--json', 'Output as JSON for scripting')
304
+ .option('--fix', 'Attempt to fix issues automatically (future)')
305
+ .addHelpText('after', `
306
+ Examples:
307
+ $ specforge-mcp doctor # Run health checks
308
+ $ specforge-mcp doctor --json # Output as JSON
309
+
310
+ Check Categories:
311
+ Configuration - Config files presence and validity
312
+ Authentication - API key format and authentication
313
+ Connection - API connectivity and response time
314
+ Project Access - Access to configured project/specification
315
+
316
+ Exit Codes:
317
+ 0 - All checks passed (warnings OK)
318
+ 1 - One or more checks failed
319
+ `)
320
+ .action(withErrorHandler(doctorAction));
321
+ }
322
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"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"}