@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,81 @@
1
+ /**
2
+ * Terminal Color Utilities
3
+ *
4
+ * Provides consistent color theming across the CLI.
5
+ * All colors are defined here to ensure visual consistency.
6
+ */
7
+ import chalk from 'chalk';
8
+ /**
9
+ * Brand colors for SpecForge CLI
10
+ */
11
+ export const colors = {
12
+ /** Primary brand color - used for emphasis */
13
+ primary: chalk.cyan,
14
+ /** Secondary color - used for less emphasis */
15
+ secondary: chalk.blue,
16
+ /** Success messages and indicators */
17
+ success: chalk.green,
18
+ /** Warning messages */
19
+ warning: chalk.yellow,
20
+ /** Error messages */
21
+ error: chalk.red,
22
+ /** Muted/secondary text */
23
+ muted: chalk.gray,
24
+ /** Bold text */
25
+ bold: chalk.bold,
26
+ /** Underlined text (for URLs) */
27
+ link: chalk.underline.cyan,
28
+ /** Code/command styling */
29
+ code: chalk.cyan,
30
+ /** Dimmed text for less important info */
31
+ dim: chalk.dim,
32
+ };
33
+ /**
34
+ * Semantic color functions for common use cases
35
+ */
36
+ export const style = {
37
+ /** Style a command for display */
38
+ command: (cmd) => colors.code(cmd),
39
+ /** Style a URL for display */
40
+ url: (url) => colors.link(url),
41
+ /** Style a file path */
42
+ path: (path) => colors.muted(path),
43
+ /** Style a key/label */
44
+ label: (label) => colors.bold(label),
45
+ /** Style a value */
46
+ value: (value) => colors.primary(value),
47
+ /** Style as success */
48
+ ok: (text) => colors.success(text),
49
+ /** Style as error */
50
+ err: (text) => colors.error(text),
51
+ /** Style as warning */
52
+ warn: (text) => colors.warning(text),
53
+ /** Style as info */
54
+ info: (text) => colors.primary(text),
55
+ };
56
+ /**
57
+ * Status icons with colors
58
+ */
59
+ export const icons = {
60
+ success: colors.success('✓'),
61
+ error: colors.error('✗'),
62
+ warning: colors.warning('⚠'),
63
+ info: colors.primary('ℹ'),
64
+ pending: colors.muted('○'),
65
+ running: colors.primary('●'),
66
+ arrow: colors.muted('→'),
67
+ bullet: colors.muted('•'),
68
+ };
69
+ /**
70
+ * Check if terminal supports colors
71
+ */
72
+ export function supportsColor() {
73
+ return chalk.level > 0;
74
+ }
75
+ /**
76
+ * Disable colors (for non-TTY or --no-color flag)
77
+ */
78
+ export function disableColors() {
79
+ chalk.level = 0;
80
+ }
81
+ //# sourceMappingURL=colors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.js","sourceRoot":"","sources":["../../../src/cli/ui/colors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,8CAA8C;IAC9C,OAAO,EAAE,KAAK,CAAC,IAAI;IAEnB,+CAA+C;IAC/C,SAAS,EAAE,KAAK,CAAC,IAAI;IAErB,sCAAsC;IACtC,OAAO,EAAE,KAAK,CAAC,KAAK;IAEpB,uBAAuB;IACvB,OAAO,EAAE,KAAK,CAAC,MAAM;IAErB,qBAAqB;IACrB,KAAK,EAAE,KAAK,CAAC,GAAG;IAEhB,2BAA2B;IAC3B,KAAK,EAAE,KAAK,CAAC,IAAI;IAEjB,gBAAgB;IAChB,IAAI,EAAE,KAAK,CAAC,IAAI;IAEhB,iCAAiC;IACjC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,IAAI;IAE1B,2BAA2B;IAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;IAEhB,0CAA0C;IAC1C,GAAG,EAAE,KAAK,CAAC,GAAG;CACN,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,kCAAkC;IAClC,OAAO,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IAE1C,8BAA8B;IAC9B,GAAG,EAAE,CAAC,GAAW,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;IAEtC,wBAAwB;IACxB,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IAE1C,wBAAwB;IACxB,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IAE5C,oBAAoB;IACpB,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;IAE/C,uBAAuB;IACvB,EAAE,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAE1C,qBAAqB;IACrB,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;IAEzC,uBAAuB;IACvB,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;IAE5C,oBAAoB;IACpB,IAAI,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;CACpC,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;CACjB,CAAC;AAEX;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Dashboard UI Components
3
+ *
4
+ * Renders beautiful ASCII art dashboard with progress bars,
5
+ * boxed sections, and visual indicators.
6
+ */
7
+ import type { DashboardData } from '../commands/status.types.js';
8
+ /**
9
+ * Render a progress bar with percentage
10
+ */
11
+ export declare function renderProgressBar(current: number, total: number, width?: number, showPercent?: boolean): string;
12
+ /**
13
+ * Render mini bar for distributions
14
+ */
15
+ export declare function renderMiniBar(value: number, total: number, width?: number): string;
16
+ /**
17
+ * Render priority badge with color
18
+ */
19
+ export declare function renderPriority(priority: string): string;
20
+ /**
21
+ * Render complexity badge
22
+ */
23
+ export declare function renderComplexity(complexity: string, hours: number): string;
24
+ /**
25
+ * Render status indicator
26
+ */
27
+ export declare function renderStatus(status: string): string;
28
+ /**
29
+ * Format ticket number with padding
30
+ */
31
+ export declare function formatTicketNum(ticketNumber: number): string;
32
+ /**
33
+ * Create a boxed section with title
34
+ */
35
+ export declare function renderBox(title: string, content: string[], width?: number): string;
36
+ /**
37
+ * Render two boxes side by side
38
+ */
39
+ export declare function renderSideBySideBoxes(left: {
40
+ title: string;
41
+ content: string[];
42
+ }, right: {
43
+ title: string;
44
+ content: string[];
45
+ }, boxWidth?: number): string;
46
+ /**
47
+ * Render the full dashboard
48
+ */
49
+ export declare function renderDashboard(data: DashboardData): string;
50
+ /**
51
+ * Check if colors should be disabled
52
+ */
53
+ export declare function shouldDisableColors(): boolean;
54
+ //# sourceMappingURL=dashboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,aAAa,EAWd,MAAM,6BAA6B,CAAC;AAMrC;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAW,EAClB,WAAW,GAAE,OAAc,GAC1B,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,CAKtF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAE5D;AAMD;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,KAAK,GAAE,MAAW,GAAG,MAAM,CA8BtF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,EAC1C,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,EAC3C,QAAQ,GAAE,MAAW,GACpB,MAAM,CAqDR;AA8KD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CA6D3D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAE7C"}
@@ -0,0 +1,339 @@
1
+ /**
2
+ * Dashboard UI Components
3
+ *
4
+ * Renders beautiful ASCII art dashboard with progress bars,
5
+ * boxed sections, and visual indicators.
6
+ */
7
+ import chalk from 'chalk';
8
+ // ============================================================================
9
+ // UTILITY COMPONENTS
10
+ // ============================================================================
11
+ /**
12
+ * Render a progress bar with percentage
13
+ */
14
+ export function renderProgressBar(current, total, width = 28, showPercent = true) {
15
+ const percent = total > 0 ? Math.round((current / total) * 100) : 0;
16
+ const filled = Math.round((percent / 100) * width);
17
+ const empty = width - filled;
18
+ const bar = chalk.green('\u2588'.repeat(filled)) + chalk.dim('\u2591'.repeat(empty));
19
+ if (showPercent) {
20
+ return `${bar} ${percent.toString().padStart(3)}%`;
21
+ }
22
+ return bar;
23
+ }
24
+ /**
25
+ * Render mini bar for distributions
26
+ */
27
+ export function renderMiniBar(value, total, width = 14) {
28
+ const percent = total > 0 ? value / total : 0;
29
+ const filled = Math.round(percent * width);
30
+ const empty = width - filled;
31
+ return chalk.cyan('\u2588'.repeat(filled)) + chalk.dim('\u2591'.repeat(empty));
32
+ }
33
+ /**
34
+ * Render priority badge with color
35
+ */
36
+ export function renderPriority(priority) {
37
+ const badges = {
38
+ critical: chalk.red('\ud83d\udd34 critical'),
39
+ high: chalk.hex('#FFA500')('\ud83d\udfe0 high'),
40
+ medium: chalk.yellow('\ud83d\udfe1 medium'),
41
+ low: chalk.green('\ud83d\udfe2 low'),
42
+ };
43
+ return badges[priority] || priority;
44
+ }
45
+ /**
46
+ * Render complexity badge
47
+ */
48
+ export function renderComplexity(complexity, hours) {
49
+ return chalk.cyan(`${complexity.toUpperCase()} (${hours}h)`);
50
+ }
51
+ /**
52
+ * Render status indicator
53
+ */
54
+ export function renderStatus(status) {
55
+ const indicators = {
56
+ active: chalk.green('\ud83d\udfe2 Active'),
57
+ paused: chalk.yellow('\ud83d\udfe1 Paused'),
58
+ completed: chalk.blue('\ud83d\udd35 Completed'),
59
+ failed: chalk.red('\ud83d\udd34 Failed'),
60
+ };
61
+ return indicators[status] || status;
62
+ }
63
+ /**
64
+ * Format ticket number with padding
65
+ */
66
+ export function formatTicketNum(ticketNumber) {
67
+ return `TKT-${ticketNumber.toString().padStart(3, '0')}`;
68
+ }
69
+ // ============================================================================
70
+ // BOX COMPONENTS
71
+ // ============================================================================
72
+ /**
73
+ * Create a boxed section with title
74
+ */
75
+ export function renderBox(title, content, width = 78) {
76
+ const lines = [];
77
+ const innerWidth = width - 4;
78
+ // Top border
79
+ lines.push(chalk.cyan('\u250c' + '\u2500'.repeat(width - 2) + '\u2510'));
80
+ // Title
81
+ const titlePadded = ` ${title}`.padEnd(innerWidth);
82
+ lines.push(chalk.cyan('\u2502') + chalk.bold.white(titlePadded) + chalk.cyan(' \u2502'));
83
+ // Separator
84
+ lines.push(chalk.cyan('\u251c' + '\u2500'.repeat(width - 2) + '\u2524'));
85
+ // Empty line
86
+ lines.push(chalk.cyan('\u2502') + ' '.repeat(width - 2) + chalk.cyan('\u2502'));
87
+ // Content
88
+ for (const line of content) {
89
+ const padded = ` ${line}`.padEnd(width - 2);
90
+ lines.push(chalk.cyan('\u2502') + padded + chalk.cyan('\u2502'));
91
+ }
92
+ // Empty line
93
+ lines.push(chalk.cyan('\u2502') + ' '.repeat(width - 2) + chalk.cyan('\u2502'));
94
+ // Bottom border
95
+ lines.push(chalk.cyan('\u2514' + '\u2500'.repeat(width - 2) + '\u2518'));
96
+ return lines.join('\n');
97
+ }
98
+ /**
99
+ * Render two boxes side by side
100
+ */
101
+ export function renderSideBySideBoxes(left, right, boxWidth = 37) {
102
+ const lines = [];
103
+ const maxLines = Math.max(left.content.length, right.content.length);
104
+ // Pad content arrays to same length
105
+ while (left.content.length < maxLines)
106
+ left.content.push('');
107
+ while (right.content.length < maxLines)
108
+ right.content.push('');
109
+ // Top borders
110
+ lines.push(chalk.cyan('\u250c' + '\u2500'.repeat(boxWidth - 2) + '\u2510') + ' ' +
111
+ chalk.cyan('\u250c' + '\u2500'.repeat(boxWidth - 2) + '\u2510'));
112
+ // Titles
113
+ lines.push(chalk.cyan('\u2502') + chalk.bold.white(` ${left.title}`.padEnd(boxWidth - 2)) + chalk.cyan('\u2502') + ' ' +
114
+ chalk.cyan('\u2502') + chalk.bold.white(` ${right.title}`.padEnd(boxWidth - 2)) + chalk.cyan('\u2502'));
115
+ // Separators
116
+ lines.push(chalk.cyan('\u251c' + '\u2500'.repeat(boxWidth - 2) + '\u2524') + ' ' +
117
+ chalk.cyan('\u251c' + '\u2500'.repeat(boxWidth - 2) + '\u2524'));
118
+ // Empty line
119
+ lines.push(chalk.cyan('\u2502') + ' '.repeat(boxWidth - 2) + chalk.cyan('\u2502') + ' ' +
120
+ chalk.cyan('\u2502') + ' '.repeat(boxWidth - 2) + chalk.cyan('\u2502'));
121
+ // Content
122
+ for (let i = 0; i < maxLines; i++) {
123
+ lines.push(chalk.cyan('\u2502') + ` ${left.content[i]}`.padEnd(boxWidth - 2) + chalk.cyan('\u2502') + ' ' +
124
+ chalk.cyan('\u2502') + ` ${right.content[i]}`.padEnd(boxWidth - 2) + chalk.cyan('\u2502'));
125
+ }
126
+ // Empty line
127
+ lines.push(chalk.cyan('\u2502') + ' '.repeat(boxWidth - 2) + chalk.cyan('\u2502') + ' ' +
128
+ chalk.cyan('\u2502') + ' '.repeat(boxWidth - 2) + chalk.cyan('\u2502'));
129
+ // Bottom borders
130
+ lines.push(chalk.cyan('\u2514' + '\u2500'.repeat(boxWidth - 2) + '\u2518') + ' ' +
131
+ chalk.cyan('\u2514' + '\u2500'.repeat(boxWidth - 2) + '\u2518'));
132
+ return lines.join('\n');
133
+ }
134
+ // ============================================================================
135
+ // SECTION RENDERERS
136
+ // ============================================================================
137
+ /**
138
+ * Render dashboard header
139
+ */
140
+ function renderHeader(data) {
141
+ const lines = [];
142
+ lines.push(chalk.cyan('\u2554' + '\u2550'.repeat(78) + '\u2557'));
143
+ lines.push(chalk.cyan('\u2551') + chalk.bold.white(' \ud83d\udcca SPECFORGE PROJECT DASHBOARD') + ' '.repeat(45) + chalk.cyan('\u2551'));
144
+ lines.push(chalk.cyan('\u2551') + ' '.repeat(78) + chalk.cyan('\u2551'));
145
+ const projectLine = ` Project: ${chalk.bold(data.project.name)}`;
146
+ lines.push(chalk.cyan('\u2551') + chalk.white(projectLine.padEnd(78)) + chalk.cyan('\u2551'));
147
+ const specLine = ` Spec: ${chalk.bold(data.specification.title)}`;
148
+ const updatedLine = chalk.dim(`Updated: ${data.project.updatedAt}`);
149
+ const specPadded = specLine.padEnd(78 - updatedLine.length - 2);
150
+ lines.push(chalk.cyan('\u2551') + chalk.white(specPadded) + updatedLine + chalk.cyan(' \u2551'));
151
+ lines.push(chalk.cyan('\u255a' + '\u2550'.repeat(78) + '\u255d'));
152
+ return lines;
153
+ }
154
+ /**
155
+ * Render overall progress content
156
+ */
157
+ function renderOverallProgressContent(progress) {
158
+ return [
159
+ `Tickets: ${progress.completed}/${progress.total} (${progress.percentComplete}%)`,
160
+ renderProgressBar(progress.completed, progress.total),
161
+ '',
162
+ `${chalk.green('\u2705')} Completed ${progress.completed.toString().padStart(3)}`,
163
+ `${chalk.blue('\ud83d\udd04')} In Progress ${progress.inProgress.toString().padStart(3)}`,
164
+ `${chalk.dim('\u23f8\ufe0f')} Pending ${progress.pending.toString().padStart(3)}`,
165
+ `${chalk.red('\u274c')} Failed ${progress.failed.toString().padStart(3)}`,
166
+ `${chalk.yellow('\ud83d\udeab')} Blocked ${progress.blocked.toString().padStart(3)}`,
167
+ ];
168
+ }
169
+ /**
170
+ * Render time metrics content
171
+ */
172
+ function renderTimeMetricsContent(metrics) {
173
+ return [
174
+ `Estimated: ${metrics.estimatedHours}h`,
175
+ `Actual: ${metrics.actualHours}h`,
176
+ `Remaining: ~${metrics.remainingHours}h`,
177
+ '',
178
+ `Velocity: ${metrics.velocityPerDay.toFixed(1)} tickets/day`,
179
+ `Avg Time: ${metrics.avgHoursPerTicket.toFixed(1)}h/ticket`,
180
+ `On Track: ${metrics.onTrack ? chalk.green('\u2705 Yes') : chalk.red('\u274c No')}`,
181
+ '',
182
+ `Est. Completion: ${metrics.estimatedCompletion}`,
183
+ ];
184
+ }
185
+ /**
186
+ * Render specification breakdown content
187
+ */
188
+ function renderSpecificationBreakdownContent(specs) {
189
+ return specs.map(spec => {
190
+ const progress = renderProgressBar(spec.completed, spec.total, 24);
191
+ const name = spec.title.substring(0, 30).padEnd(30);
192
+ const counts = `${spec.completed.toString().padStart(2)}/${spec.total.toString().padStart(2)}`;
193
+ return `${name} ${counts} ${progress}`;
194
+ });
195
+ }
196
+ /**
197
+ * Render epic status content
198
+ */
199
+ function renderEpicStatusContent(epics) {
200
+ return epics.map(epic => {
201
+ const progress = renderProgressBar(epic.completed, epic.total, 24);
202
+ const name = `${epic.code} ${epic.title.substring(0, 26)}`.padEnd(32);
203
+ const counts = `${epic.completed.toString().padStart(2)}/${epic.total.toString().padStart(2)}`;
204
+ return `${name} ${counts} ${progress}`;
205
+ });
206
+ }
207
+ /**
208
+ * Render priority distribution content
209
+ */
210
+ function renderPriorityContent(dist) {
211
+ const total = dist.critical + dist.high + dist.medium + dist.low;
212
+ return [
213
+ `${chalk.red('\ud83d\udd34')} Critical ${dist.critical.toString().padStart(3)} ${renderMiniBar(dist.critical, total)}`,
214
+ `${chalk.hex('#FFA500')('\ud83d\udfe0')} High ${dist.high.toString().padStart(3)} ${renderMiniBar(dist.high, total)}`,
215
+ `${chalk.yellow('\ud83d\udfe1')} Medium ${dist.medium.toString().padStart(3)} ${renderMiniBar(dist.medium, total)}`,
216
+ `${chalk.green('\ud83d\udfe2')} Low ${dist.low.toString().padStart(3)} ${renderMiniBar(dist.low, total)}`,
217
+ ];
218
+ }
219
+ /**
220
+ * Render complexity distribution content
221
+ */
222
+ function renderComplexityContent(dist) {
223
+ const total = dist.xs + dist.s + dist.m + dist.l + dist.xl;
224
+ return [
225
+ `XS (< 1h) ${dist.xs.toString().padStart(3)} ${renderMiniBar(dist.xs, total)}`,
226
+ `S (1-2h) ${dist.s.toString().padStart(3)} ${renderMiniBar(dist.s, total)}`,
227
+ `M (2-4h) ${dist.m.toString().padStart(3)} ${renderMiniBar(dist.m, total)}`,
228
+ `L (4-8h) ${dist.l.toString().padStart(3)} ${renderMiniBar(dist.l, total)}`,
229
+ `XL (8h+) ${dist.xl.toString().padStart(3)} ${renderMiniBar(dist.xl, total)}`,
230
+ ];
231
+ }
232
+ /**
233
+ * Render active session content
234
+ */
235
+ function renderSessionContent(session) {
236
+ const progressProcessed = session.completed + session.failed + session.skipped;
237
+ return [
238
+ `Status: ${renderStatus(session.status)} (${session.duration}) Mode: ${session.mode}`,
239
+ session.currentTicket
240
+ ? `Current: ${formatTicketNum(session.currentTicket.ticketNumber)} ${session.currentTicket.title}`
241
+ : `Current: ${chalk.dim('(none)')}`,
242
+ `Progress: ${chalk.green(session.completed + ' completed')} \u2502 ${session.failed > 0 ? chalk.red(session.failed + ' failed') : '0 failed'} \u2502 ${session.skipped > 0 ? chalk.yellow(session.skipped + ' skipped') : '0 skipped'}`,
243
+ '',
244
+ renderProgressBar(progressProcessed, session.total, 60, false) + ` ${progressProcessed}/${session.total}`,
245
+ ];
246
+ }
247
+ /**
248
+ * Render next actionable content
249
+ */
250
+ function renderNextActionableContent(tickets) {
251
+ const content = tickets.slice(0, 3).map((ticket, i) => {
252
+ const num = formatTicketNum(ticket.ticketNumber);
253
+ const title = ticket.title.substring(0, 35).padEnd(35);
254
+ const priority = renderPriority(ticket.priority).padEnd(18);
255
+ const complexity = `${ticket.complexity.toUpperCase()} (${ticket.estimatedHours}h)`;
256
+ return `${i + 1}. ${num} ${title} ${priority} \u2502 ${complexity}`;
257
+ });
258
+ content.push('');
259
+ content.push(chalk.dim("\ud83d\udca1 Run 'specforge-mcp next' for detailed ticket info"));
260
+ return content;
261
+ }
262
+ /**
263
+ * Render blockers content
264
+ */
265
+ function renderBlockersContent(blockers, failedTickets) {
266
+ const content = [];
267
+ for (const blocker of blockers) {
268
+ content.push(`${chalk.yellow('\u26a0\ufe0f')} ${formatTicketNum(blocker.ticket.ticketNumber)} ${blocker.ticket.title}`);
269
+ if (blocker.blockedBy) {
270
+ content.push(` \u2514\u2500 Blocked by: ${formatTicketNum(blocker.blockedBy.ticketNumber)} (${blocker.blockedBy.status})`);
271
+ }
272
+ content.push('');
273
+ }
274
+ for (const failed of failedTickets) {
275
+ content.push(`${chalk.red('\u274c')} ${formatTicketNum(failed.ticket.ticketNumber)} ${failed.ticket.title} (failed)`);
276
+ if (failed.reason) {
277
+ content.push(` \u2514\u2500 Reason: ${failed.reason}`);
278
+ }
279
+ content.push('');
280
+ }
281
+ return content;
282
+ }
283
+ // ============================================================================
284
+ // MAIN DASHBOARD RENDERER
285
+ // ============================================================================
286
+ /**
287
+ * Render the full dashboard
288
+ */
289
+ export function renderDashboard(data) {
290
+ const lines = [];
291
+ // Header
292
+ lines.push(...renderHeader(data));
293
+ lines.push('');
294
+ // Overall Progress + Time Metrics (side by side)
295
+ lines.push(renderSideBySideBoxes({ title: '\ud83d\udcc8 OVERALL PROGRESS', content: renderOverallProgressContent(data.overallProgress) }, { title: '\u23f1\ufe0f TIME METRICS', content: renderTimeMetricsContent(data.timeMetrics) }, 37));
296
+ lines.push('');
297
+ // Specification Breakdown
298
+ if (data.specifications.length > 0) {
299
+ lines.push(renderBox('\ud83d\udccb SPECIFICATION BREAKDOWN', renderSpecificationBreakdownContent(data.specifications)));
300
+ lines.push('');
301
+ }
302
+ // Epic Status
303
+ if (data.epics.length > 0) {
304
+ lines.push(renderBox(`\ud83c\udfaf EPIC STATUS (${data.specification.title})`, renderEpicStatusContent(data.epics)));
305
+ lines.push('');
306
+ }
307
+ // Priority + Complexity (side by side)
308
+ lines.push(renderSideBySideBoxes({ title: '\ud83c\udfab TICKET PRIORITIES', content: renderPriorityContent(data.priorityDistribution) }, { title: '\ud83d\udcca TICKET COMPLEXITY', content: renderComplexityContent(data.complexityDistribution) }, 37));
309
+ lines.push('');
310
+ // Active Session (if exists)
311
+ if (data.session) {
312
+ lines.push(renderBox('\ud83c\udfc3 ACTIVE SESSION', renderSessionContent(data.session)));
313
+ lines.push('');
314
+ }
315
+ // Next Actionable Tickets
316
+ if (data.nextActionable.length > 0) {
317
+ lines.push(renderBox('\u26a1 NEXT ACTIONABLE TICKETS', renderNextActionableContent(data.nextActionable)));
318
+ lines.push('');
319
+ }
320
+ // Blockers & Alerts (if any)
321
+ if (data.blockers.length > 0 || data.failedTickets.length > 0) {
322
+ lines.push(renderBox('\ud83d\udea7 BLOCKERS & ALERTS', renderBlockersContent(data.blockers, data.failedTickets)));
323
+ lines.push('');
324
+ }
325
+ // Footer
326
+ const now = new Date().toLocaleString('en-US', {
327
+ month: 'short', day: 'numeric', year: 'numeric',
328
+ hour: '2-digit', minute: '2-digit', second: '2-digit'
329
+ });
330
+ lines.push(chalk.dim(` Last updated: ${now} \u2502 Use --json for raw data`));
331
+ return lines.join('\n');
332
+ }
333
+ /**
334
+ * Check if colors should be disabled
335
+ */
336
+ export function shouldDisableColors() {
337
+ return process.env.NO_COLOR === '1' || process.env.NO_COLOR === 'true';
338
+ }
339
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../src/cli/ui/dashboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * CLI UI Utilities Module
3
+ */
4
+ export * from './colors.js';
5
+ export * from './output.js';
6
+ export * from './spinner.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * CLI UI Utilities Module
3
+ */
4
+ export * from './colors.js';
5
+ export * from './output.js';
6
+ export * from './spinner.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cli/ui/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Output Formatting Utilities
3
+ *
4
+ * Provides consistent output formatting for tables, lists, and structured data.
5
+ */
6
+ /**
7
+ * Print a labeled value
8
+ *
9
+ * @example
10
+ * printField('Project', 'my-project');
11
+ * // Output: Project: my-project
12
+ */
13
+ export declare function printField(label: string, value: string | null | undefined): void;
14
+ /**
15
+ * Print a section header
16
+ *
17
+ * @example
18
+ * printHeader('Configuration');
19
+ * // Output:
20
+ * // Configuration
21
+ * // ─────────────
22
+ */
23
+ export declare function printHeader(title: string): void;
24
+ /**
25
+ * Print a blank line
26
+ */
27
+ export declare function printBlank(): void;
28
+ /**
29
+ * Print a list of items
30
+ *
31
+ * @example
32
+ * printList(['Item 1', 'Item 2', 'Item 3']);
33
+ * // Output:
34
+ * // • Item 1
35
+ * // • Item 2
36
+ * // • Item 3
37
+ */
38
+ export declare function printList(items: string[], bullet?: string): void;
39
+ /**
40
+ * Print a success message
41
+ *
42
+ * @example
43
+ * printSuccess('Configuration saved');
44
+ * // Output: ✓ Configuration saved
45
+ */
46
+ export declare function printSuccess(message: string): void;
47
+ /**
48
+ * Print an error message
49
+ *
50
+ * @example
51
+ * printError('Failed to connect');
52
+ * // Output: ✗ Failed to connect
53
+ */
54
+ export declare function printError(message: string): void;
55
+ /**
56
+ * Print a warning message
57
+ *
58
+ * @example
59
+ * printWarning('API key will expire soon');
60
+ * // Output: ⚠ API key will expire soon
61
+ */
62
+ export declare function printWarning(message: string): void;
63
+ /**
64
+ * Print an info message
65
+ *
66
+ * @example
67
+ * printInfo('Fetching data...');
68
+ * // Output: ℹ Fetching data...
69
+ */
70
+ export declare function printInfo(message: string): void;
71
+ /**
72
+ * Print a key-value table
73
+ *
74
+ * @example
75
+ * printTable({
76
+ * 'Project': 'my-project',
77
+ * 'Specification': 'v2.0',
78
+ * 'Status': 'active',
79
+ * });
80
+ */
81
+ export declare function printTable(data: Record<string, string | null | undefined>): void;
82
+ /**
83
+ * Print JSON output (for --format json)
84
+ *
85
+ * @example
86
+ * printJson({ project: 'my-project', status: 'active' });
87
+ */
88
+ export declare function printJson(data: unknown): void;
89
+ /**
90
+ * Print a command hint
91
+ *
92
+ * @example
93
+ * printHint('specforge-mcp init', 'Initialize project');
94
+ * // Output: → Run `specforge-mcp init` to initialize project
95
+ */
96
+ export declare function printHint(command: string, description: string): void;
97
+ /**
98
+ * Print a URL with description
99
+ *
100
+ * @example
101
+ * printLink('https://specforge.com', 'Visit documentation');
102
+ * // Output: → Visit documentation: https://specforge.com
103
+ */
104
+ export declare function printLink(url: string, description: string): void;
105
+ /**
106
+ * Format bytes to human readable size
107
+ */
108
+ export declare function formatBytes(bytes: number): string;
109
+ /**
110
+ * Format duration in milliseconds to human readable
111
+ */
112
+ export declare function formatDuration(ms: number): string;
113
+ /**
114
+ * Truncate string with ellipsis
115
+ */
116
+ export declare function truncate(str: string, maxLength: number): string;
117
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/output.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,CAGhF;AAED;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAEjC;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,GAAE,MAAqB,GAAG,IAAI,CAI9E;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,IAAI,CAQhF;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAEpE;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAEhE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOjD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAG/D"}