@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,141 @@
1
+ /**
2
+ * Ticket Command Implementation
3
+ *
4
+ * Main command for fetching and displaying detailed ticket information.
5
+ */
6
+ import ora from 'ora';
7
+ import { resolveConfig } from '../../config/index.js';
8
+ import { colors } from '../../ui/colors.js';
9
+ import { ApiClient } from '../../../client/api-client.js';
10
+ import { resolveTicketId } from './resolver.js';
11
+ import { displayHeader, displayDescription, displayAcceptanceCriteria, displayTechnicalDetails, displayImplementation, displayDependencies, displayCodeReferences, displayTypeReferences, } from './display.js';
12
+ /**
13
+ * Format ticket as TOON
14
+ */
15
+ function formatToon(ticket) {
16
+ const lines = ['@ticket'];
17
+ lines.push(` id: ${ticket.id}`);
18
+ lines.push(` ticketNumber: ${ticket.ticketNumber}`);
19
+ lines.push(` title: ${ticket.title}`);
20
+ lines.push(` priority: ${ticket.priority}`);
21
+ lines.push(` status: ${ticket.status}`);
22
+ if (ticket.complexity) {
23
+ lines.push(` complexity: ${ticket.complexity}`);
24
+ }
25
+ if (ticket.estimatedHours) {
26
+ lines.push(` estimatedHours: ${ticket.estimatedHours}`);
27
+ }
28
+ if (ticket.actualHours) {
29
+ lines.push(` actualHours: ${ticket.actualHours}`);
30
+ }
31
+ if (ticket.epic) {
32
+ lines.push(` epic: ${ticket.epic.title}`);
33
+ }
34
+ if (ticket.description) {
35
+ lines.push(` description: ${ticket.description.slice(0, 100)}${ticket.description.length > 100 ? '...' : ''}`);
36
+ }
37
+ if (ticket.acceptanceCriteria && ticket.acceptanceCriteria.length > 0) {
38
+ lines.push(' acceptanceCriteria:');
39
+ for (const criterion of ticket.acceptanceCriteria) {
40
+ lines.push(` - ${criterion}`);
41
+ }
42
+ }
43
+ return lines.join('\n');
44
+ }
45
+ /**
46
+ * Ticket command implementation
47
+ */
48
+ export async function ticketCommand(idOrNumber, options) {
49
+ if (!idOrNumber) {
50
+ console.error(colors.error('\nError: Ticket ID or number is required.'));
51
+ console.error('Usage: specforge-mcp ticket <id>');
52
+ console.error('\nExamples:');
53
+ console.error(' specforge-mcp ticket 42');
54
+ console.error(' specforge-mcp ticket abc123def456');
55
+ process.exit(1);
56
+ }
57
+ const config = resolveConfig();
58
+ const spinner = ora('Fetching ticket details...').start();
59
+ try {
60
+ if (!config.apiKey) {
61
+ spinner.fail('Not authenticated');
62
+ console.error(colors.error('\nError: Not authenticated.'));
63
+ console.error(colors.muted('Run `specforge-mcp login` to authenticate first.'));
64
+ process.exit(1);
65
+ }
66
+ const client = new ApiClient({
67
+ apiKey: config.apiKey,
68
+ apiUrl: config.apiUrl,
69
+ debug: config.debug,
70
+ });
71
+ // Resolve ticket ID (supports both number and full ID)
72
+ const ticketId = await resolveTicketId(client, idOrNumber, config.specificationId || undefined);
73
+ // Fetch full ticket details
74
+ const ticket = await client.call('get_ticket', { ticketId });
75
+ spinner.stop();
76
+ // Output based on format option
77
+ if (options.json) {
78
+ console.log(JSON.stringify(ticket, null, 2));
79
+ return;
80
+ }
81
+ if (options.toon) {
82
+ console.log(formatToon(ticket));
83
+ return;
84
+ }
85
+ // Human-readable display
86
+ await displayTicket(ticket, client);
87
+ }
88
+ catch (error) {
89
+ spinner.fail('Failed to fetch ticket');
90
+ const message = error instanceof Error ? error.message : 'Unknown error';
91
+ if (message.includes('404') || message.includes('not found')) {
92
+ console.error(colors.error(`\nError: Ticket "${idOrNumber}" not found.`));
93
+ }
94
+ else if (message.includes('403') || message.includes('Forbidden')) {
95
+ console.error(colors.error(`\nError: You do not have access to this ticket.`));
96
+ }
97
+ else if (message.includes('specification')) {
98
+ console.error(colors.error(`\nError: ${message}`));
99
+ console.error(colors.muted('\nTip: Run `specforge-mcp switch` to select a specification.'));
100
+ }
101
+ else {
102
+ console.error(colors.error(`\nError: ${message}`));
103
+ }
104
+ process.exit(1);
105
+ }
106
+ }
107
+ /**
108
+ * Display complete ticket details
109
+ */
110
+ async function displayTicket(ticket, client) {
111
+ // Header with basic info
112
+ displayHeader(ticket);
113
+ // Description
114
+ if (ticket.description) {
115
+ displayDescription(ticket.description);
116
+ }
117
+ // Acceptance Criteria
118
+ if (ticket.acceptanceCriteria && ticket.acceptanceCriteria.length > 0) {
119
+ displayAcceptanceCriteria(ticket.acceptanceCriteria, ticket.acceptanceCriteriaValidation);
120
+ }
121
+ // Technical Details
122
+ if (ticket.technicalDetails) {
123
+ displayTechnicalDetails(ticket.technicalDetails);
124
+ }
125
+ // Implementation Notes
126
+ if (ticket.implementation) {
127
+ displayImplementation(ticket.implementation);
128
+ }
129
+ // Dependencies
130
+ await displayDependencies(ticket, client);
131
+ // Code References
132
+ displayCodeReferences(ticket.codeReferences);
133
+ // Type References
134
+ displayTypeReferences(ticket.typeReferences);
135
+ // Footer spacing
136
+ console.log();
137
+ }
138
+ export { resolveTicketId } from './resolver.js';
139
+ export * from './display.js';
140
+ export * from './types.js';
141
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../../../src/cli/commands/ticket/command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Ticket Display Utilities
3
+ *
4
+ * Functions for formatting and displaying ticket information.
5
+ */
6
+ import type { Ticket, TicketPriority, TicketStatus, ColorFunction, AcceptanceCriteriaValidation } from './types.js';
7
+ import { ApiClient } from '../../../client/api-client.js';
8
+ /**
9
+ * Format ticket number as TKT-XXX
10
+ */
11
+ export declare function formatTicketNumber(num: number): string;
12
+ /**
13
+ * Get color function for priority level
14
+ */
15
+ export declare function getPriorityColor(priority: TicketPriority): ColorFunction;
16
+ /**
17
+ * Get color function for status
18
+ */
19
+ export declare function getStatusColor(status: TicketStatus): ColorFunction;
20
+ /**
21
+ * Display section header
22
+ */
23
+ export declare function printSectionHeader(icon: string, title: string): void;
24
+ /**
25
+ * Display ticket header
26
+ */
27
+ export declare function displayHeader(ticket: Ticket): void;
28
+ /**
29
+ * Display description section
30
+ */
31
+ export declare function displayDescription(description: string): void;
32
+ /**
33
+ * Display acceptance criteria with validation status
34
+ */
35
+ export declare function displayAcceptanceCriteria(criteria: string[], validation?: AcceptanceCriteriaValidation[]): void;
36
+ /**
37
+ * Display technical details section
38
+ */
39
+ export declare function displayTechnicalDetails(details: string): void;
40
+ /**
41
+ * Display implementation notes
42
+ */
43
+ export declare function displayImplementation(impl: Ticket['implementation']): void;
44
+ /**
45
+ * Display dependencies section
46
+ */
47
+ export declare function displayDependencies(ticket: Ticket, client: ApiClient): Promise<void>;
48
+ /**
49
+ * Display code references
50
+ */
51
+ export declare function displayCodeReferences(refs: Ticket['codeReferences']): void;
52
+ /**
53
+ * Display type references
54
+ */
55
+ export declare function displayTypeReferences(refs: Ticket['typeReferences']): void;
56
+ //# sourceMappingURL=display.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ticket/display.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,MAAM,EAEN,cAAc,EACd,YAAY,EACZ,aAAa,EACb,4BAA4B,EAC7B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,aAAa,CAQxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,CASlE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAGpE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAuBlD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAG5D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAAE,EAClB,UAAU,CAAC,EAAE,4BAA4B,EAAE,GAC1C,IAAI,CAgCN;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG7D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAqB1E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,IAAI,CAAC,CAwBf;AAsBD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAY1E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAW1E"}
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Ticket Display Utilities
3
+ *
4
+ * Functions for formatting and displaying ticket information.
5
+ */
6
+ import { colors } from '../../ui/colors.js';
7
+ /**
8
+ * Format ticket number as TKT-XXX
9
+ */
10
+ export function formatTicketNumber(num) {
11
+ return `TKT-${num.toString().padStart(3, '0')}`;
12
+ }
13
+ /**
14
+ * Get color function for priority level
15
+ */
16
+ export function getPriorityColor(priority) {
17
+ switch (priority) {
18
+ case 'critical': return colors.error;
19
+ case 'high': return colors.warning;
20
+ case 'medium': return colors.primary;
21
+ case 'low': return colors.muted;
22
+ default: return (s) => s;
23
+ }
24
+ }
25
+ /**
26
+ * Get color function for status
27
+ */
28
+ export function getStatusColor(status) {
29
+ switch (status) {
30
+ case 'done': return colors.success;
31
+ case 'in_progress': return colors.primary;
32
+ case 'pending': return colors.warning;
33
+ case 'blocked': return colors.error;
34
+ case 'cancelled': return colors.muted;
35
+ default: return (s) => s;
36
+ }
37
+ }
38
+ /**
39
+ * Display section header
40
+ */
41
+ export function printSectionHeader(icon, title) {
42
+ console.log(colors.bold(`\n${icon} ${title}`));
43
+ console.log('─'.repeat(40));
44
+ }
45
+ /**
46
+ * Display ticket header
47
+ */
48
+ export function displayHeader(ticket) {
49
+ const priorityColor = getPriorityColor(ticket.priority);
50
+ const statusColor = getStatusColor(ticket.status);
51
+ console.log(colors.bold(`\n${formatTicketNumber(ticket.ticketNumber)}: ${ticket.title}`));
52
+ console.log('═'.repeat(60));
53
+ // Basic info row
54
+ console.log(`\n${colors.muted('Priority:')} ${priorityColor(ticket.priority)}`);
55
+ console.log(`${colors.muted('Status:')} ${statusColor(ticket.status)}`);
56
+ if (ticket.complexity) {
57
+ console.log(`${colors.muted('Complexity:')} ${ticket.complexity}`);
58
+ }
59
+ if (ticket.estimatedHours) {
60
+ console.log(`${colors.muted('Estimated:')} ${ticket.estimatedHours} hours`);
61
+ }
62
+ if (ticket.actualHours) {
63
+ console.log(`${colors.muted('Actual:')} ${ticket.actualHours} hours`);
64
+ }
65
+ if (ticket.epic) {
66
+ console.log(`${colors.muted('Epic:')} ${ticket.epic.title}`);
67
+ }
68
+ }
69
+ /**
70
+ * Display description section
71
+ */
72
+ export function displayDescription(description) {
73
+ printSectionHeader('📝', 'Description');
74
+ console.log(description);
75
+ }
76
+ /**
77
+ * Display acceptance criteria with validation status
78
+ */
79
+ export function displayAcceptanceCriteria(criteria, validation) {
80
+ printSectionHeader('✓', 'Acceptance Criteria');
81
+ for (const criterion of criteria) {
82
+ const validationEntry = validation?.find(v => v.criterion === criterion);
83
+ let icon = '□';
84
+ let color = (s) => s;
85
+ if (validationEntry) {
86
+ switch (validationEntry.status) {
87
+ case 'passed':
88
+ icon = '✓';
89
+ color = colors.success;
90
+ break;
91
+ case 'failed':
92
+ icon = '✗';
93
+ color = colors.error;
94
+ break;
95
+ case 'pending':
96
+ default:
97
+ icon = '○';
98
+ color = colors.warning;
99
+ }
100
+ }
101
+ console.log(color(`${icon} ${criterion}`));
102
+ if (validationEntry?.notes) {
103
+ console.log(colors.muted(` └─ ${validationEntry.notes}`));
104
+ }
105
+ }
106
+ }
107
+ /**
108
+ * Display technical details section
109
+ */
110
+ export function displayTechnicalDetails(details) {
111
+ printSectionHeader('🔧', 'Technical Details');
112
+ console.log(details);
113
+ }
114
+ /**
115
+ * Display implementation notes
116
+ */
117
+ export function displayImplementation(impl) {
118
+ if (!impl)
119
+ return;
120
+ printSectionHeader('📋', 'Implementation');
121
+ if (impl.approach) {
122
+ console.log(colors.muted('Approach:'));
123
+ console.log(impl.approach);
124
+ }
125
+ if (impl.notes) {
126
+ console.log(colors.muted('\nNotes:'));
127
+ console.log(impl.notes);
128
+ }
129
+ if (impl.files && impl.files.length > 0) {
130
+ console.log(colors.muted('\nFiles:'));
131
+ for (const file of impl.files) {
132
+ console.log(` • ${colors.primary(file)}`);
133
+ }
134
+ }
135
+ }
136
+ /**
137
+ * Display dependencies section
138
+ */
139
+ export async function displayDependencies(ticket, client) {
140
+ const hasBlockedBy = ticket.blockedBy && ticket.blockedBy.length > 0;
141
+ const hasBlocks = ticket.dependencies && ticket.dependencies.length > 0;
142
+ if (!hasBlockedBy && !hasBlocks)
143
+ return;
144
+ printSectionHeader('🔗', 'Dependencies');
145
+ // Show blockers (tickets blocking this one)
146
+ if (hasBlockedBy) {
147
+ console.log(colors.muted('Blocked by:'));
148
+ for (const blockerId of ticket.blockedBy) {
149
+ await displayDependencyTicket(client, blockerId, '←');
150
+ }
151
+ }
152
+ // Show dependents (tickets this one blocks)
153
+ if (hasBlocks) {
154
+ if (hasBlockedBy)
155
+ console.log();
156
+ console.log(colors.muted('Blocks:'));
157
+ for (const depId of ticket.dependencies) {
158
+ await displayDependencyTicket(client, depId, '→');
159
+ }
160
+ }
161
+ }
162
+ /**
163
+ * Display a single dependency ticket
164
+ */
165
+ async function displayDependencyTicket(client, ticketId, arrow) {
166
+ try {
167
+ const dep = await client.call('get_ticket', { ticketId });
168
+ const statusColor = getStatusColor(dep.status);
169
+ console.log(` ${arrow} ${formatTicketNumber(dep.ticketNumber)} - ${dep.title} ` +
170
+ `[${statusColor(dep.status)}]`);
171
+ }
172
+ catch {
173
+ console.log(` ${arrow} ${ticketId} [${colors.muted('unknown')}]`);
174
+ }
175
+ }
176
+ /**
177
+ * Display code references
178
+ */
179
+ export function displayCodeReferences(refs) {
180
+ if (!refs || refs.length === 0)
181
+ return;
182
+ printSectionHeader('💻', 'Code References');
183
+ for (const ref of refs) {
184
+ const langBadge = ref.language ? colors.primary(`[${ref.language}]`) : '';
185
+ console.log(`\n${colors.warning(ref.name)} ${langBadge}`);
186
+ console.log(colors.muted('```'));
187
+ console.log(ref.code);
188
+ console.log(colors.muted('```'));
189
+ }
190
+ }
191
+ /**
192
+ * Display type references
193
+ */
194
+ export function displayTypeReferences(refs) {
195
+ if (!refs || refs.length === 0)
196
+ return;
197
+ printSectionHeader('📦', 'Type References');
198
+ for (const ref of refs) {
199
+ console.log(`\n${colors.warning(ref.name)}`);
200
+ console.log(colors.muted('```typescript'));
201
+ console.log(ref.definition);
202
+ console.log(colors.muted('```'));
203
+ }
204
+ }
205
+ //# sourceMappingURL=display.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"display.js","sourceRoot":"","sources":["../../../../src/cli/commands/ticket/display.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAW5C;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAwB;IACvD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU,CAAC,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC;QACrC,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC;QACnC,KAAK,QAAQ,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC;QACrC,KAAK,KAAK,CAAC,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC;QAChC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,MAAoB;IACjD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC;QACnC,KAAK,aAAa,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC;QAC1C,KAAK,SAAS,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC;QACtC,KAAK,SAAS,CAAC,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC;QACpC,KAAK,WAAW,CAAC,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC;QACtC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,KAAa;IAC5D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,MAAM,aAAa,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAElD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,kBAAkB,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,iBAAiB;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAExE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,cAAc,QAAQ,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,MAAM,CAAC,WAAW,QAAQ,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,kBAAkB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAkB,EAClB,UAA2C;IAE3C,kBAAkB,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;IAE/C,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE,CAAC;QACjC,MAAM,eAAe,GAAG,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAEzE,IAAI,IAAI,GAAG,GAAG,CAAC;QACf,IAAI,KAAK,GAAkB,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC;QAE5C,IAAI,eAAe,EAAE,CAAC;YACpB,QAAQ,eAAe,CAAC,MAAM,EAAE,CAAC;gBAC/B,KAAK,QAAQ;oBACX,IAAI,GAAG,GAAG,CAAC;oBACX,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;oBACvB,MAAM;gBACR,KAAK,QAAQ;oBACX,IAAI,GAAG,GAAG,CAAC;oBACX,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;oBACrB,MAAM;gBACR,KAAK,SAAS,CAAC;gBACf;oBACE,IAAI,GAAG,GAAG,CAAC;oBACX,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC,CAAC;QAE3C,IAAI,eAAe,EAAE,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,kBAAkB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA8B;IAClE,IAAI,CAAC,IAAI;QAAE,OAAO;IAElB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAE3C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,MAAc,EACd,MAAiB;IAEjB,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IAExE,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS;QAAE,OAAO;IAExC,kBAAkB,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;IAEzC,4CAA4C;IAC5C,IAAI,YAAY,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;QACzC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,SAAU,EAAE,CAAC;YAC1C,MAAM,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,YAAY;YAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QACrC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,YAAa,EAAE,CAAC;YACzC,MAAM,uBAAuB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,uBAAuB,CACpC,MAAiB,EACjB,QAAgB,EAChB,KAAa;IAEb,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,EAAE,CAAkB,CAAC;QAC3E,MAAM,WAAW,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CACT,KAAK,KAAK,IAAI,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,KAAK,GAAG;YACpE,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAC/B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA8B;IAClE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEvC,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAE5C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAA8B;IAClE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEvC,kBAAkB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAE5C,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Ticket Command Module
3
+ *
4
+ * Exports all ticket command types and utilities.
5
+ */
6
+ export * from './types.js';
7
+ export * from './command.js';
8
+ export * from './display.js';
9
+ export * from './resolver.js';
10
+ export { registerTicketCommand } from './register.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ticket/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Ticket Command Module
3
+ *
4
+ * Exports all ticket command types and utilities.
5
+ */
6
+ export * from './types.js';
7
+ export * from './command.js';
8
+ export * from './display.js';
9
+ export * from './resolver.js';
10
+ export { registerTicketCommand } from './register.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/ticket/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Ticket Command Registration
3
+ *
4
+ * Registers the ticket command with the CLI framework.
5
+ */
6
+ import { Command } from 'commander';
7
+ /**
8
+ * Register the ticket command with the CLI
9
+ */
10
+ export declare function registerTicketCommand(program: Command): void;
11
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ticket/register.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2B5D"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Ticket Command Registration
3
+ *
4
+ * Registers the ticket command with the CLI framework.
5
+ */
6
+ import { withErrorHandler } from '../../middleware/error-handler.js';
7
+ import { ticketCommand } from './command.js';
8
+ /**
9
+ * Register the ticket command with the CLI
10
+ */
11
+ export function registerTicketCommand(program) {
12
+ program
13
+ .command('ticket <id>')
14
+ .description('Show detailed ticket information')
15
+ .option('--json', 'Output as JSON')
16
+ .option('--toon', 'Output as TOON format')
17
+ .addHelpText('after', `
18
+ Examples:
19
+ $ specforge-mcp ticket 42 # Show ticket by number
20
+ $ specforge-mcp ticket abc123 # Show ticket by ID
21
+ $ specforge-mcp ticket 42 --json # Output as JSON
22
+ $ specforge-mcp ticket 42 --toon # Output as TOON format
23
+
24
+ The ticket command displays comprehensive ticket information including:
25
+ - Title, priority, status, complexity
26
+ - Description and technical details
27
+ - Acceptance criteria with validation status
28
+ - Implementation notes and affected files
29
+ - Dependencies (blockers and dependents)
30
+ - Code and type references
31
+
32
+ Ticket number lookup (e.g., "42") requires a configured specification.
33
+ Use full ticket ID if no specification is set.
34
+ `)
35
+ .action(withErrorHandler(async (id, options) => {
36
+ await ticketCommand(id, options);
37
+ }));
38
+ }
39
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../../src/cli/commands/ticket/register.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG7C;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,aAAa,CAAC;SACtB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;SACzC,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;CAiBzB,CAAC;SACG,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAU,EAAE,OAA6B,EAAE,EAAE;QAC3E,MAAM,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC,CAAC;AACR,CAAC"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Ticket ID Resolver
3
+ *
4
+ * Resolves ticket IDs from ticket numbers or full IDs.
5
+ */
6
+ import { ApiClient } from '../../../client/api-client.js';
7
+ /**
8
+ * Resolve ticket ID from number or full ID
9
+ *
10
+ * @param client - API client instance
11
+ * @param idOrNumber - Ticket ID or ticket number
12
+ * @param specificationId - Current specification ID (required for number lookup)
13
+ * @returns Resolved ticket ID
14
+ */
15
+ export declare function resolveTicketId(client: ApiClient, idOrNumber: string, specificationId?: string): Promise<string>;
16
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ticket/resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC,CA0BjB"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Ticket ID Resolver
3
+ *
4
+ * Resolves ticket IDs from ticket numbers or full IDs.
5
+ */
6
+ /**
7
+ * Resolve ticket ID from number or full ID
8
+ *
9
+ * @param client - API client instance
10
+ * @param idOrNumber - Ticket ID or ticket number
11
+ * @param specificationId - Current specification ID (required for number lookup)
12
+ * @returns Resolved ticket ID
13
+ */
14
+ export async function resolveTicketId(client, idOrNumber, specificationId) {
15
+ // If it looks like a ticket number (just digits)
16
+ if (/^\d+$/.test(idOrNumber)) {
17
+ if (!specificationId) {
18
+ throw new Error('Ticket number lookup requires a specification. ' +
19
+ 'Use full ticket ID or run `specforge-mcp switch` to set a specification.');
20
+ }
21
+ // Search by ticket number within specification
22
+ const response = await client.call('list_tickets', {
23
+ specificationId,
24
+ ticketNumber: parseInt(idOrNumber, 10),
25
+ });
26
+ const tickets = response.tickets || [];
27
+ if (tickets.length === 0) {
28
+ throw new Error(`Ticket #${idOrNumber} not found in current specification.`);
29
+ }
30
+ return tickets[0].id;
31
+ }
32
+ // Assume full ID
33
+ return idOrNumber;
34
+ }
35
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../../src/cli/commands/ticket/resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAiB,EACjB,UAAkB,EAClB,eAAwB;IAExB,iDAAiD;IACjD,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,iDAAiD;gBACjD,0EAA0E,CAC3E,CAAC;QACJ,CAAC;QAED,+CAA+C;QAC/C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE;YACjD,eAAe;YACf,YAAY,EAAE,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC;SACvC,CAAwC,CAAC;QAE1C,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC;QACvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,WAAW,UAAU,sCAAsC,CAAC,CAAC;QAC/E,CAAC;QAED,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvB,CAAC;IAED,iBAAiB;IACjB,OAAO,UAAU,CAAC;AACpB,CAAC"}