@specforge/cli 0.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 (380) hide show
  1. package/README.md +781 -0
  2. package/bin/specforge +21 -0
  3. package/dist/channel.d.ts +27 -0
  4. package/dist/channel.d.ts.map +1 -0
  5. package/dist/channel.js +22 -0
  6. package/dist/channel.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 +186 -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 +82 -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 +96 -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 +14 -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 +78 -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 +91 -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 +86 -0
  34. package/dist/cli/commands/debug/tools.js.map +1 -0
  35. package/dist/cli/commands/debug/types.d.ts +119 -0
  36. package/dist/cli/commands/debug/types.d.ts.map +1 -0
  37. package/dist/cli/commands/debug/types.js +36 -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 +131 -0
  42. package/dist/cli/commands/debug/whoami.js.map +1 -0
  43. package/dist/cli/commands/doctor.d.ts +16 -0
  44. package/dist/cli/commands/doctor.d.ts.map +1 -0
  45. package/dist/cli/commands/doctor.js +413 -0
  46. package/dist/cli/commands/doctor.js.map +1 -0
  47. package/dist/cli/commands/doctor.types.d.ts +180 -0
  48. package/dist/cli/commands/doctor.types.d.ts.map +1 -0
  49. package/dist/cli/commands/doctor.types.js +140 -0
  50. package/dist/cli/commands/doctor.types.js.map +1 -0
  51. package/dist/cli/commands/feedback.d.ts +27 -0
  52. package/dist/cli/commands/feedback.d.ts.map +1 -0
  53. package/dist/cli/commands/feedback.js +262 -0
  54. package/dist/cli/commands/feedback.js.map +1 -0
  55. package/dist/cli/commands/feedback.types.d.ts +116 -0
  56. package/dist/cli/commands/feedback.types.d.ts.map +1 -0
  57. package/dist/cli/commands/feedback.types.js +65 -0
  58. package/dist/cli/commands/feedback.types.js.map +1 -0
  59. package/dist/cli/commands/index.d.ts +15 -0
  60. package/dist/cli/commands/index.d.ts.map +1 -0
  61. package/dist/cli/commands/index.js +21 -0
  62. package/dist/cli/commands/index.js.map +1 -0
  63. package/dist/cli/commands/init.d.ts +17 -0
  64. package/dist/cli/commands/init.d.ts.map +1 -0
  65. package/dist/cli/commands/init.js +773 -0
  66. package/dist/cli/commands/init.js.map +1 -0
  67. package/dist/cli/commands/init.types.d.ts +193 -0
  68. package/dist/cli/commands/init.types.d.ts.map +1 -0
  69. package/dist/cli/commands/init.types.js +29 -0
  70. package/dist/cli/commands/init.types.js.map +1 -0
  71. package/dist/cli/commands/invitations.d.ts +31 -0
  72. package/dist/cli/commands/invitations.d.ts.map +1 -0
  73. package/dist/cli/commands/invitations.js +250 -0
  74. package/dist/cli/commands/invitations.js.map +1 -0
  75. package/dist/cli/commands/login.d.ts +40 -0
  76. package/dist/cli/commands/login.d.ts.map +1 -0
  77. package/dist/cli/commands/login.js +139 -0
  78. package/dist/cli/commands/login.js.map +1 -0
  79. package/dist/cli/commands/members.d.ts +55 -0
  80. package/dist/cli/commands/members.d.ts.map +1 -0
  81. package/dist/cli/commands/members.js +296 -0
  82. package/dist/cli/commands/members.js.map +1 -0
  83. package/dist/cli/commands/scaffold/agent-types.d.ts +54 -0
  84. package/dist/cli/commands/scaffold/agent-types.d.ts.map +1 -0
  85. package/dist/cli/commands/scaffold/agent-types.js +22 -0
  86. package/dist/cli/commands/scaffold/agent-types.js.map +1 -0
  87. package/dist/cli/commands/scaffold/display.d.ts +56 -0
  88. package/dist/cli/commands/scaffold/display.d.ts.map +1 -0
  89. package/dist/cli/commands/scaffold/display.js +217 -0
  90. package/dist/cli/commands/scaffold/display.js.map +1 -0
  91. package/dist/cli/commands/scaffold/files.d.ts +99 -0
  92. package/dist/cli/commands/scaffold/files.d.ts.map +1 -0
  93. package/dist/cli/commands/scaffold/files.js +122 -0
  94. package/dist/cli/commands/scaffold/files.js.map +1 -0
  95. package/dist/cli/commands/scaffold/index.d.ts +13 -0
  96. package/dist/cli/commands/scaffold/index.d.ts.map +1 -0
  97. package/dist/cli/commands/scaffold/index.js +12 -0
  98. package/dist/cli/commands/scaffold/index.js.map +1 -0
  99. package/dist/cli/commands/scaffold/register.d.ts +11 -0
  100. package/dist/cli/commands/scaffold/register.d.ts.map +1 -0
  101. package/dist/cli/commands/scaffold/register.js +11 -0
  102. package/dist/cli/commands/scaffold/register.js.map +1 -0
  103. package/dist/cli/commands/scaffold/scaffold.d.ts +11 -0
  104. package/dist/cli/commands/scaffold/scaffold.d.ts.map +1 -0
  105. package/dist/cli/commands/scaffold/scaffold.js +728 -0
  106. package/dist/cli/commands/scaffold/scaffold.js.map +1 -0
  107. package/dist/cli/commands/scaffold/targets.d.ts +60 -0
  108. package/dist/cli/commands/scaffold/targets.d.ts.map +1 -0
  109. package/dist/cli/commands/scaffold/targets.js +251 -0
  110. package/dist/cli/commands/scaffold/targets.js.map +1 -0
  111. package/dist/cli/commands/scaffold/types.d.ts +170 -0
  112. package/dist/cli/commands/scaffold/types.d.ts.map +1 -0
  113. package/dist/cli/commands/scaffold/types.js +12 -0
  114. package/dist/cli/commands/scaffold/types.js.map +1 -0
  115. package/dist/cli/commands/scaffold/utils.d.ts +89 -0
  116. package/dist/cli/commands/scaffold/utils.d.ts.map +1 -0
  117. package/dist/cli/commands/scaffold/utils.js +401 -0
  118. package/dist/cli/commands/scaffold/utils.js.map +1 -0
  119. package/dist/cli/commands/status.d.ts +19 -0
  120. package/dist/cli/commands/status.d.ts.map +1 -0
  121. package/dist/cli/commands/status.js +124 -0
  122. package/dist/cli/commands/status.js.map +1 -0
  123. package/dist/cli/commands/status.types.d.ts +37 -0
  124. package/dist/cli/commands/status.types.d.ts.map +1 -0
  125. package/dist/cli/commands/status.types.js +7 -0
  126. package/dist/cli/commands/status.types.js.map +1 -0
  127. package/dist/cli/commands/switch.d.ts +18 -0
  128. package/dist/cli/commands/switch.d.ts.map +1 -0
  129. package/dist/cli/commands/switch.js +134 -0
  130. package/dist/cli/commands/switch.js.map +1 -0
  131. package/dist/cli/commands/switch.types.d.ts +123 -0
  132. package/dist/cli/commands/switch.types.d.ts.map +1 -0
  133. package/dist/cli/commands/switch.types.js +46 -0
  134. package/dist/cli/commands/switch.types.js.map +1 -0
  135. package/dist/cli/config/agent-teams.types.d.ts +120 -0
  136. package/dist/cli/config/agent-teams.types.d.ts.map +1 -0
  137. package/dist/cli/config/agent-teams.types.js +23 -0
  138. package/dist/cli/config/agent-teams.types.js.map +1 -0
  139. package/dist/cli/config/index.d.ts +13 -0
  140. package/dist/cli/config/index.d.ts.map +1 -0
  141. package/dist/cli/config/index.js +7 -0
  142. package/dist/cli/config/index.js.map +1 -0
  143. package/dist/cli/config/loader.d.ts +114 -0
  144. package/dist/cli/config/loader.d.ts.map +1 -0
  145. package/dist/cli/config/loader.js +198 -0
  146. package/dist/cli/config/loader.js.map +1 -0
  147. package/dist/cli/config/paths.d.ts +107 -0
  148. package/dist/cli/config/paths.d.ts.map +1 -0
  149. package/dist/cli/config/paths.js +79 -0
  150. package/dist/cli/config/paths.js.map +1 -0
  151. package/dist/cli/config/planning-sessions-registry.d.ts +52 -0
  152. package/dist/cli/config/planning-sessions-registry.d.ts.map +1 -0
  153. package/dist/cli/config/planning-sessions-registry.js +46 -0
  154. package/dist/cli/config/planning-sessions-registry.js.map +1 -0
  155. package/dist/cli/config/types.d.ts +186 -0
  156. package/dist/cli/config/types.d.ts.map +1 -0
  157. package/dist/cli/config/types.js +27 -0
  158. package/dist/cli/config/types.js.map +1 -0
  159. package/dist/cli/config/validation.d.ts +62 -0
  160. package/dist/cli/config/validation.d.ts.map +1 -0
  161. package/dist/cli/config/validation.js +133 -0
  162. package/dist/cli/config/validation.js.map +1 -0
  163. package/dist/cli/config/writer.d.ts +153 -0
  164. package/dist/cli/config/writer.d.ts.map +1 -0
  165. package/dist/cli/config/writer.js +168 -0
  166. package/dist/cli/config/writer.js.map +1 -0
  167. package/dist/cli/index.d.ts +30 -0
  168. package/dist/cli/index.d.ts.map +1 -0
  169. package/dist/cli/index.js +142 -0
  170. package/dist/cli/index.js.map +1 -0
  171. package/dist/cli/middleware/auth-guard.d.ts +107 -0
  172. package/dist/cli/middleware/auth-guard.d.ts.map +1 -0
  173. package/dist/cli/middleware/auth-guard.js +97 -0
  174. package/dist/cli/middleware/auth-guard.js.map +1 -0
  175. package/dist/cli/middleware/error-handler.d.ts +133 -0
  176. package/dist/cli/middleware/error-handler.d.ts.map +1 -0
  177. package/dist/cli/middleware/error-handler.js +139 -0
  178. package/dist/cli/middleware/error-handler.js.map +1 -0
  179. package/dist/cli/middleware/index.d.ts +6 -0
  180. package/dist/cli/middleware/index.d.ts.map +1 -0
  181. package/dist/cli/middleware/index.js +3 -0
  182. package/dist/cli/middleware/index.js.map +1 -0
  183. package/dist/cli/templates/agents/content/core/sfag-orchestrator.d.ts +9 -0
  184. package/dist/cli/templates/agents/content/core/sfag-orchestrator.d.ts.map +1 -0
  185. package/dist/cli/templates/agents/content/core/sfag-orchestrator.js +160 -0
  186. package/dist/cli/templates/agents/content/core/sfag-orchestrator.js.map +1 -0
  187. package/dist/cli/templates/agents/content/core/sfag-spec-creator.d.ts +9 -0
  188. package/dist/cli/templates/agents/content/core/sfag-spec-creator.d.ts.map +1 -0
  189. package/dist/cli/templates/agents/content/core/sfag-spec-creator.js +343 -0
  190. package/dist/cli/templates/agents/content/core/sfag-spec-creator.js.map +1 -0
  191. package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.d.ts +9 -0
  192. package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.d.ts.map +1 -0
  193. package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.js +254 -0
  194. package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.js.map +1 -0
  195. package/dist/cli/templates/agents/content/research/sfag-package-researcher.d.ts +8 -0
  196. package/dist/cli/templates/agents/content/research/sfag-package-researcher.d.ts.map +1 -0
  197. package/dist/cli/templates/agents/content/research/sfag-package-researcher.js +128 -0
  198. package/dist/cli/templates/agents/content/research/sfag-package-researcher.js.map +1 -0
  199. package/dist/cli/templates/agents/index.d.ts +23 -0
  200. package/dist/cli/templates/agents/index.d.ts.map +1 -0
  201. package/dist/cli/templates/agents/index.js +29 -0
  202. package/dist/cli/templates/agents/index.js.map +1 -0
  203. package/dist/cli/templates/commands.d.ts +17 -0
  204. package/dist/cli/templates/commands.d.ts.map +1 -0
  205. package/dist/cli/templates/commands.js +78 -0
  206. package/dist/cli/templates/commands.js.map +1 -0
  207. package/dist/cli/templates/content/sf-blockers.d.ts +7 -0
  208. package/dist/cli/templates/content/sf-blockers.d.ts.map +1 -0
  209. package/dist/cli/templates/content/sf-blockers.js +69 -0
  210. package/dist/cli/templates/content/sf-blockers.js.map +1 -0
  211. package/dist/cli/templates/content/sf-commit.d.ts +7 -0
  212. package/dist/cli/templates/content/sf-commit.d.ts.map +1 -0
  213. package/dist/cli/templates/content/sf-commit.js +79 -0
  214. package/dist/cli/templates/content/sf-commit.js.map +1 -0
  215. package/dist/cli/templates/content/sf-context.d.ts +7 -0
  216. package/dist/cli/templates/content/sf-context.d.ts.map +1 -0
  217. package/dist/cli/templates/content/sf-context.js +63 -0
  218. package/dist/cli/templates/content/sf-context.js.map +1 -0
  219. package/dist/cli/templates/content/sf-help.d.ts +7 -0
  220. package/dist/cli/templates/content/sf-help.d.ts.map +1 -0
  221. package/dist/cli/templates/content/sf-help.js +42 -0
  222. package/dist/cli/templates/content/sf-help.js.map +1 -0
  223. package/dist/cli/templates/content/sf-init.d.ts +7 -0
  224. package/dist/cli/templates/content/sf-init.d.ts.map +1 -0
  225. package/dist/cli/templates/content/sf-init.js +62 -0
  226. package/dist/cli/templates/content/sf-init.js.map +1 -0
  227. package/dist/cli/templates/content/sf-reset.d.ts +7 -0
  228. package/dist/cli/templates/content/sf-reset.d.ts.map +1 -0
  229. package/dist/cli/templates/content/sf-reset.js +67 -0
  230. package/dist/cli/templates/content/sf-reset.js.map +1 -0
  231. package/dist/cli/templates/content/sf-search.d.ts +7 -0
  232. package/dist/cli/templates/content/sf-search.d.ts.map +1 -0
  233. package/dist/cli/templates/content/sf-search.js +63 -0
  234. package/dist/cli/templates/content/sf-search.js.map +1 -0
  235. package/dist/cli/templates/content/sf-status.d.ts +7 -0
  236. package/dist/cli/templates/content/sf-status.d.ts.map +1 -0
  237. package/dist/cli/templates/content/sf-status.js +62 -0
  238. package/dist/cli/templates/content/sf-status.js.map +1 -0
  239. package/dist/cli/templates/index.d.ts +8 -0
  240. package/dist/cli/templates/index.d.ts.map +1 -0
  241. package/dist/cli/templates/index.js +17 -0
  242. package/dist/cli/templates/index.js.map +1 -0
  243. package/dist/cli/ui/banner.d.ts +38 -0
  244. package/dist/cli/ui/banner.d.ts.map +1 -0
  245. package/dist/cli/ui/banner.js +89 -0
  246. package/dist/cli/ui/banner.js.map +1 -0
  247. package/dist/cli/ui/colors.d.ts +76 -0
  248. package/dist/cli/ui/colors.d.ts.map +1 -0
  249. package/dist/cli/ui/colors.js +67 -0
  250. package/dist/cli/ui/colors.js.map +1 -0
  251. package/dist/cli/ui/index.d.ts +7 -0
  252. package/dist/cli/ui/index.d.ts.map +1 -0
  253. package/dist/cli/ui/index.js +4 -0
  254. package/dist/cli/ui/index.js.map +1 -0
  255. package/dist/cli/ui/output.d.ts +117 -0
  256. package/dist/cli/ui/output.d.ts.map +1 -0
  257. package/dist/cli/ui/output.js +83 -0
  258. package/dist/cli/ui/output.js.map +1 -0
  259. package/dist/cli/ui/spinner.d.ts +120 -0
  260. package/dist/cli/ui/spinner.d.ts.map +1 -0
  261. package/dist/cli/ui/spinner.js +158 -0
  262. package/dist/cli/ui/spinner.js.map +1 -0
  263. package/dist/cli/ui/time.d.ts +54 -0
  264. package/dist/cli/ui/time.d.ts.map +1 -0
  265. package/dist/cli/ui/time.js +119 -0
  266. package/dist/cli/ui/time.js.map +1 -0
  267. package/dist/client/api-client.d.ts +123 -0
  268. package/dist/client/api-client.d.ts.map +1 -0
  269. package/dist/client/api-client.js +105 -0
  270. package/dist/client/api-client.js.map +1 -0
  271. package/dist/client/cli-client.d.ts +26 -0
  272. package/dist/client/cli-client.d.ts.map +1 -0
  273. package/dist/client/cli-client.js +20 -0
  274. package/dist/client/cli-client.js.map +1 -0
  275. package/dist/config/index.d.ts +78 -0
  276. package/dist/config/index.d.ts.map +1 -0
  277. package/dist/config/index.js +79 -0
  278. package/dist/config/index.js.map +1 -0
  279. package/dist/index.d.ts +16 -0
  280. package/dist/index.d.ts.map +1 -0
  281. package/dist/index.js +73 -0
  282. package/dist/index.js.map +1 -0
  283. package/dist/lib/format.d.ts +126 -0
  284. package/dist/lib/format.d.ts.map +1 -0
  285. package/dist/lib/format.js +71 -0
  286. package/dist/lib/format.js.map +1 -0
  287. package/dist/lib/index.d.ts +11 -0
  288. package/dist/lib/index.d.ts.map +1 -0
  289. package/dist/lib/index.js +45 -0
  290. package/dist/lib/index.js.map +1 -0
  291. package/dist/lib/monorepo-detector.d.ts +31 -0
  292. package/dist/lib/monorepo-detector.d.ts.map +1 -0
  293. package/dist/lib/monorepo-detector.js +188 -0
  294. package/dist/lib/monorepo-detector.js.map +1 -0
  295. package/dist/lib/prompt-generator.d.ts +65 -0
  296. package/dist/lib/prompt-generator.d.ts.map +1 -0
  297. package/dist/lib/prompt-generator.js +162 -0
  298. package/dist/lib/prompt-generator.js.map +1 -0
  299. package/dist/lib/strategy-analyzer.d.ts +59 -0
  300. package/dist/lib/strategy-analyzer.d.ts.map +1 -0
  301. package/dist/lib/strategy-analyzer.js +91 -0
  302. package/dist/lib/strategy-analyzer.js.map +1 -0
  303. package/dist/lib/workflow-definitions.d.ts +41 -0
  304. package/dist/lib/workflow-definitions.d.ts.map +1 -0
  305. package/dist/lib/workflow-definitions.js +497 -0
  306. package/dist/lib/workflow-definitions.js.map +1 -0
  307. package/dist/patterns/index.d.ts +9 -0
  308. package/dist/patterns/index.d.ts.map +1 -0
  309. package/dist/patterns/index.js +21 -0
  310. package/dist/patterns/index.js.map +1 -0
  311. package/dist/patterns/inheritance.d.ts +193 -0
  312. package/dist/patterns/inheritance.d.ts.map +1 -0
  313. package/dist/patterns/inheritance.js +125 -0
  314. package/dist/patterns/inheritance.js.map +1 -0
  315. package/dist/server.d.ts +44 -0
  316. package/dist/server.d.ts.map +1 -0
  317. package/dist/server.js +91 -0
  318. package/dist/server.js.map +1 -0
  319. package/dist/tools/core/context-helper.d.ts +50 -0
  320. package/dist/tools/core/context-helper.d.ts.map +1 -0
  321. package/dist/tools/core/context-helper.js +49 -0
  322. package/dist/tools/core/context-helper.js.map +1 -0
  323. package/dist/tools/core/index.d.ts +2 -0
  324. package/dist/tools/core/index.d.ts.map +1 -0
  325. package/dist/tools/core/index.js +2 -0
  326. package/dist/tools/core/index.js.map +1 -0
  327. package/dist/tools/index.d.ts +58 -0
  328. package/dist/tools/index.d.ts.map +1 -0
  329. package/dist/tools/index.js +1499 -0
  330. package/dist/tools/index.js.map +1 -0
  331. package/dist/transport/__tests__/resolve-endpoint.test.d.ts +6 -0
  332. package/dist/transport/__tests__/resolve-endpoint.test.d.ts.map +1 -0
  333. package/dist/transport/index.d.ts +6 -0
  334. package/dist/transport/index.d.ts.map +1 -0
  335. package/dist/transport/index.js +5 -0
  336. package/dist/transport/index.js.map +1 -0
  337. package/dist/transport/interface.d.ts +25 -0
  338. package/dist/transport/interface.d.ts.map +1 -0
  339. package/dist/transport/interface.js +1 -0
  340. package/dist/transport/interface.js.map +1 -0
  341. package/dist/transport/remote.d.ts +38 -0
  342. package/dist/transport/remote.d.ts.map +1 -0
  343. package/dist/transport/remote.js +107 -0
  344. package/dist/transport/remote.js.map +1 -0
  345. package/dist/transport/resolve-endpoint.d.ts +58 -0
  346. package/dist/transport/resolve-endpoint.d.ts.map +1 -0
  347. package/dist/transport/resolve-endpoint.js +146 -0
  348. package/dist/transport/resolve-endpoint.js.map +1 -0
  349. package/dist/types/index.d.ts +212 -0
  350. package/dist/types/index.d.ts.map +1 -0
  351. package/dist/types/index.js +16 -0
  352. package/dist/types/index.js.map +1 -0
  353. package/dist/validation/index.d.ts +86 -0
  354. package/dist/validation/index.d.ts.map +1 -0
  355. package/dist/validation/index.js +392 -0
  356. package/dist/validation/index.js.map +1 -0
  357. package/dist/validation/ticket-validation.d.ts +162 -0
  358. package/dist/validation/ticket-validation.d.ts.map +1 -0
  359. package/dist/validation/ticket-validation.js +188 -0
  360. package/dist/validation/ticket-validation.js.map +1 -0
  361. package/package.json +69 -0
  362. package/src/cli/templates/agents/content/core/sfag-orchestrator.ts +165 -0
  363. package/src/cli/templates/agents/content/core/sfag-spec-creator.ts +348 -0
  364. package/src/cli/templates/agents/content/core/sfag-ticket-implementer.ts +259 -0
  365. package/src/cli/templates/agents/content/research/sfag-package-researcher.ts +132 -0
  366. package/src/cli/templates/agents/index.ts +47 -0
  367. package/src/cli/templates/commands.ts +90 -0
  368. package/src/cli/templates/content/sf-blockers.ts +71 -0
  369. package/src/cli/templates/content/sf-commit.ts +81 -0
  370. package/src/cli/templates/content/sf-context.ts +65 -0
  371. package/src/cli/templates/content/sf-help.ts +44 -0
  372. package/src/cli/templates/content/sf-init.ts +64 -0
  373. package/src/cli/templates/content/sf-reset.ts +69 -0
  374. package/src/cli/templates/content/sf-search.ts +65 -0
  375. package/src/cli/templates/content/sf-status.ts +64 -0
  376. package/src/cli/templates/index.ts +16 -0
  377. package/src/cli/templates/skills/specforge-conventions.md +114 -0
  378. package/src/cli/templates/skills/specforge-orchestrator.md +409 -0
  379. package/src/cli/templates/skills/specforge-validator.md +128 -0
  380. package/src/cli/templates/skills/specforge-worker.md +412 -0
@@ -0,0 +1,69 @@
1
+ const SF_ANALYZE_BLOCKERS_CONTENT = `# Analyze Blockers (SpecForge)
2
+
3
+ Analyze dependency bottlenecks and identify critical path tickets.
4
+
5
+ ## Task
6
+
7
+ ### 1. Get Implementation Data
8
+
9
+ **MCP Calls:**
10
+ \`\`\`typescript
11
+ // Read project config
12
+ const config = readFile('.specforge.json')
13
+ const specificationId = config.activeSpecification?.id
14
+
15
+ get_specification({ specificationId })
16
+ list_epics({ specificationId })
17
+ list_tickets({ specificationId })
18
+ \`\`\`
19
+
20
+ ### 2. Analyze Dependencies
21
+
22
+ **Logic:**
23
+ - Build dependency graph
24
+ - Calculate blocking relationships
25
+ - Identify critical path
26
+ - Find bottleneck tickets
27
+
28
+ ### 3. Display Analysis Results
29
+
30
+ **Output:**
31
+ \`\`\`
32
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
33
+ BLOCKER ANALYSIS
34
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
35
+ Specification: {title}
36
+
37
+ CRITICAL PATH
38
+ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
39
+ Length: {pathLength} tickets
40
+ Impact: {blockedCount} tickets blocked
41
+
42
+ E{n}-T{m} \u2192 E{n}-T{m} \u2192 E{n}-T{m} \u2192 ...
43
+
44
+ HIGH-IMPACT BLOCKERS
45
+ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
46
+ E{n}-T{m} \u2502 {title} \u2502 Blocking {count} tickets
47
+ \u21B3 E{n}-T{m}, E{n}-T{m}, E{n}-T{m}
48
+
49
+ BLOCKED TICKETS
50
+ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
51
+ E{n}-T{m} \u2502 {title}
52
+ \u26A0 Waiting on: E{n}-T{m} ({status})
53
+
54
+ RECOMMENDATIONS
55
+ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
56
+ \u2022 Prioritize E{n}-T{m} to unblock {count} tickets
57
+ \u2022 Review dependency chain for E{n}-T{m}
58
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
59
+ \`\`\`
60
+
61
+ ## Notes
62
+ - Identifies tickets blocking the most work
63
+ - Shows critical path through implementation
64
+ - Provides actionable recommendations
65
+ `;
66
+ export {
67
+ SF_ANALYZE_BLOCKERS_CONTENT
68
+ };
69
+ //# sourceMappingURL=sf-blockers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/cli/templates/content/sf-blockers.ts"],"sourcesContent":["/**\n * SF-Analyze-Blockers Command Template\n *\n * Template for analyzing blockers and dependency bottlenecks.\n */\n\nexport const SF_ANALYZE_BLOCKERS_CONTENT = `# Analyze Blockers (SpecForge)\n\nAnalyze dependency bottlenecks and identify critical path tickets.\n\n## Task\n\n### 1. Get Implementation Data\n\n**MCP Calls:**\n\\`\\`\\`typescript\n// Read project config\nconst config = readFile('.specforge.json')\nconst specificationId = config.activeSpecification?.id\n\nget_specification({ specificationId })\nlist_epics({ specificationId })\nlist_tickets({ specificationId })\n\\`\\`\\`\n\n### 2. Analyze Dependencies\n\n**Logic:**\n- Build dependency graph\n- Calculate blocking relationships\n- Identify critical path\n- Find bottleneck tickets\n\n### 3. Display Analysis Results\n\n**Output:**\n\\`\\`\\`\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nBLOCKER ANALYSIS\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nSpecification: {title}\n\nCRITICAL PATH\n─────────────────────────────────────────────────────────────────\nLength: {pathLength} tickets\nImpact: {blockedCount} tickets blocked\n\nE{n}-T{m} → E{n}-T{m} → E{n}-T{m} → ...\n\nHIGH-IMPACT BLOCKERS\n─────────────────────────────────────────────────────────────────\nE{n}-T{m} │ {title} │ Blocking {count} tickets\n ↳ E{n}-T{m}, E{n}-T{m}, E{n}-T{m}\n\nBLOCKED TICKETS\n─────────────────────────────────────────────────────────────────\nE{n}-T{m} │ {title}\n ⚠ Waiting on: E{n}-T{m} ({status})\n\nRECOMMENDATIONS\n─────────────────────────────────────────────────────────────────\n• Prioritize E{n}-T{m} to unblock {count} tickets\n• Review dependency chain for E{n}-T{m}\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\\`\\`\\`\n\n## Notes\n- Identifies tickets blocking the most work\n- Shows critical path through implementation\n- Provides actionable recommendations\n`;\n"],"mappings":"AAMO,MAAM,8BAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * SF-Commit Command Template
3
+ *
4
+ * Template for committing changes with SpecForge ticket metadata.
5
+ */
6
+ export declare const SF_COMMIT_CONTENT = "# Commit Changes (SpecForge)\n\nCreate a git commit with SpecForge ticket metadata.\n\n## Arguments\n- `$ARGUMENTS` - Optional: Ticket ID (uses context if not provided)\n\n## Task\n\n### 1. Get Ticket Context\n\n**MCP Calls:**\n```typescript\nif ($ARGUMENTS) {\n get_ticket({ ticketId: $ARGUMENTS })\n} else {\n // Read active ticket from .specforge.json or find active ticket\n const config = readFile('.specforge.json')\n const specificationId = config.activeSpecification?.id\n // Find the currently active ticket\n list_tickets({ specificationId, status: [\"active\"] })\n // Use the active ticket\n get_ticket({ ticketId: activeTicket.id })\n}\n```\n\n### 2. Generate Commit Message\n\n**Logic:**\n- Format: `feat(scope): description (TICKET-ID)`\n- Extract scope from epic\n- Use ticket title as description\n- Add ticket ID reference\n\n### 3. Create Commit\n\n**Shell:**\n```bash\ngit add .\ngit commit -m \"{type}({scope}): {description} ({ticketId})\"\n```\n\n### 4. Update Ticket Status\n\n**MCP Calls:**\n```typescript\ncomplete_work_session({\n ticketId: ticket.id\n})\n```\n\n### 5. Display Commit Result\n\n**Output:**\n```\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nCOMMIT CREATED\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nTicket: E{n}-T{m}\nMessage: {commitMessage}\nHash: {commitHash}\n\nTICKET COMPLETED\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\u2713 E{n}-T{m} marked as done\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\nNext: Run /sf-next for the next ticket\n```\n\n## Notes\n- Automatically completes the work session\n- Uses conventional commit format\n- Includes ticket ID for traceability\n";
7
+ //# sourceMappingURL=sf-commit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sf-commit.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-commit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,iBAAiB,+sFA0E7B,CAAC"}
@@ -0,0 +1,79 @@
1
+ const SF_COMMIT_CONTENT = `# Commit Changes (SpecForge)
2
+
3
+ Create a git commit with SpecForge ticket metadata.
4
+
5
+ ## Arguments
6
+ - \`$ARGUMENTS\` - Optional: Ticket ID (uses context if not provided)
7
+
8
+ ## Task
9
+
10
+ ### 1. Get Ticket Context
11
+
12
+ **MCP Calls:**
13
+ \`\`\`typescript
14
+ if ($ARGUMENTS) {
15
+ get_ticket({ ticketId: $ARGUMENTS })
16
+ } else {
17
+ // Read active ticket from .specforge.json or find active ticket
18
+ const config = readFile('.specforge.json')
19
+ const specificationId = config.activeSpecification?.id
20
+ // Find the currently active ticket
21
+ list_tickets({ specificationId, status: ["active"] })
22
+ // Use the active ticket
23
+ get_ticket({ ticketId: activeTicket.id })
24
+ }
25
+ \`\`\`
26
+
27
+ ### 2. Generate Commit Message
28
+
29
+ **Logic:**
30
+ - Format: \`feat(scope): description (TICKET-ID)\`
31
+ - Extract scope from epic
32
+ - Use ticket title as description
33
+ - Add ticket ID reference
34
+
35
+ ### 3. Create Commit
36
+
37
+ **Shell:**
38
+ \`\`\`bash
39
+ git add .
40
+ git commit -m "{type}({scope}): {description} ({ticketId})"
41
+ \`\`\`
42
+
43
+ ### 4. Update Ticket Status
44
+
45
+ **MCP Calls:**
46
+ \`\`\`typescript
47
+ complete_work_session({
48
+ ticketId: ticket.id
49
+ })
50
+ \`\`\`
51
+
52
+ ### 5. Display Commit Result
53
+
54
+ **Output:**
55
+ \`\`\`
56
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
57
+ COMMIT CREATED
58
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
59
+ Ticket: E{n}-T{m}
60
+ Message: {commitMessage}
61
+ Hash: {commitHash}
62
+
63
+ TICKET COMPLETED
64
+ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
65
+ \u2713 E{n}-T{m} marked as done
66
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
67
+
68
+ Next: Run /sf-next for the next ticket
69
+ \`\`\`
70
+
71
+ ## Notes
72
+ - Automatically completes the work session
73
+ - Uses conventional commit format
74
+ - Includes ticket ID for traceability
75
+ `;
76
+ export {
77
+ SF_COMMIT_CONTENT
78
+ };
79
+ //# sourceMappingURL=sf-commit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/cli/templates/content/sf-commit.ts"],"sourcesContent":["/**\n * SF-Commit Command Template\n *\n * Template for committing changes with SpecForge ticket metadata.\n */\n\nexport const SF_COMMIT_CONTENT = `# Commit Changes (SpecForge)\n\nCreate a git commit with SpecForge ticket metadata.\n\n## Arguments\n- \\`$ARGUMENTS\\` - Optional: Ticket ID (uses context if not provided)\n\n## Task\n\n### 1. Get Ticket Context\n\n**MCP Calls:**\n\\`\\`\\`typescript\nif ($ARGUMENTS) {\n get_ticket({ ticketId: $ARGUMENTS })\n} else {\n // Read active ticket from .specforge.json or find active ticket\n const config = readFile('.specforge.json')\n const specificationId = config.activeSpecification?.id\n // Find the currently active ticket\n list_tickets({ specificationId, status: [\"active\"] })\n // Use the active ticket\n get_ticket({ ticketId: activeTicket.id })\n}\n\\`\\`\\`\n\n### 2. Generate Commit Message\n\n**Logic:**\n- Format: \\`feat(scope): description (TICKET-ID)\\`\n- Extract scope from epic\n- Use ticket title as description\n- Add ticket ID reference\n\n### 3. Create Commit\n\n**Shell:**\n\\`\\`\\`bash\ngit add .\ngit commit -m \"{type}({scope}): {description} ({ticketId})\"\n\\`\\`\\`\n\n### 4. Update Ticket Status\n\n**MCP Calls:**\n\\`\\`\\`typescript\ncomplete_work_session({\n ticketId: ticket.id\n})\n\\`\\`\\`\n\n### 5. Display Commit Result\n\n**Output:**\n\\`\\`\\`\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nCOMMIT CREATED\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nTicket: E{n}-T{m}\nMessage: {commitMessage}\nHash: {commitHash}\n\nTICKET COMPLETED\n─────────────────────────────────────────────────────────────────\n✓ E{n}-T{m} marked as done\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nNext: Run /sf-next for the next ticket\n\\`\\`\\`\n\n## Notes\n- Automatically completes the work session\n- Uses conventional commit format\n- Includes ticket ID for traceability\n`;\n"],"mappings":"AAMO,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * SF-Context Command Template
3
+ *
4
+ * Template for viewing or switching working context.
5
+ */
6
+ export declare const SF_CONTEXT_CONTENT = "# Working Context (SpecForge)\n\nQuickly view or switch the current working context.\n\n## Arguments\n- `$ARGUMENTS` - Optional: Project or Specification ID to switch to\n\n## Task\n\n### 1. If No Arguments - Show Current Context\n\n**Logic:**\n```typescript\n// Read project config\nconst config = readFile('.specforge.json')\nconst projectId = config.project.id\nconst specificationId = config.activeSpecification?.id\n\n// Load details\nif (specificationId) {\n get_specification({ specificationId, include: [\"status\"] })\n}\n```\n\n**Output:**\n```\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nWORKING CONTEXT\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nProject: {project.name}\nSpecification: {spec.title}\nSource: .specforge.json\n\nProgress: {done}/{total} ({pct}%)\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n```\n\n### 2. If Arguments - Switch Context\n\n**Logic:**\n```typescript\n// Try as specification first\nget_specification({ specificationId: $ARGUMENTS })\n\n// Update .specforge.json activeSpecification\n// (or inform user to update manually)\n```\n\n**Output:**\n```\n\u2713 Switched to: {name}\n Update .specforge.json activeSpecification.id to persist.\n```\n\n## Notes\n- No argument = show current context\n- With argument = switch context\n- Auto-detects if ID is project or specification\n";
7
+ //# sourceMappingURL=sf-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sf-context.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-context.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,kBAAkB,skEA0D9B,CAAC"}
@@ -0,0 +1,63 @@
1
+ const SF_CONTEXT_CONTENT = `# Working Context (SpecForge)
2
+
3
+ Quickly view or switch the current working context.
4
+
5
+ ## Arguments
6
+ - \`$ARGUMENTS\` - Optional: Project or Specification ID to switch to
7
+
8
+ ## Task
9
+
10
+ ### 1. If No Arguments - Show Current Context
11
+
12
+ **Logic:**
13
+ \`\`\`typescript
14
+ // Read project config
15
+ const config = readFile('.specforge.json')
16
+ const projectId = config.project.id
17
+ const specificationId = config.activeSpecification?.id
18
+
19
+ // Load details
20
+ if (specificationId) {
21
+ get_specification({ specificationId, include: ["status"] })
22
+ }
23
+ \`\`\`
24
+
25
+ **Output:**
26
+ \`\`\`
27
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
28
+ WORKING CONTEXT
29
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
30
+ Project: {project.name}
31
+ Specification: {spec.title}
32
+ Source: .specforge.json
33
+
34
+ Progress: {done}/{total} ({pct}%)
35
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
36
+ \`\`\`
37
+
38
+ ### 2. If Arguments - Switch Context
39
+
40
+ **Logic:**
41
+ \`\`\`typescript
42
+ // Try as specification first
43
+ get_specification({ specificationId: $ARGUMENTS })
44
+
45
+ // Update .specforge.json activeSpecification
46
+ // (or inform user to update manually)
47
+ \`\`\`
48
+
49
+ **Output:**
50
+ \`\`\`
51
+ \u2713 Switched to: {name}
52
+ Update .specforge.json activeSpecification.id to persist.
53
+ \`\`\`
54
+
55
+ ## Notes
56
+ - No argument = show current context
57
+ - With argument = switch context
58
+ - Auto-detects if ID is project or specification
59
+ `;
60
+ export {
61
+ SF_CONTEXT_CONTENT
62
+ };
63
+ //# sourceMappingURL=sf-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/cli/templates/content/sf-context.ts"],"sourcesContent":["/**\n * SF-Context Command Template\n *\n * Template for viewing or switching working context.\n */\n\nexport const SF_CONTEXT_CONTENT = `# Working Context (SpecForge)\n\nQuickly view or switch the current working context.\n\n## Arguments\n- \\`$ARGUMENTS\\` - Optional: Project or Specification ID to switch to\n\n## Task\n\n### 1. If No Arguments - Show Current Context\n\n**Logic:**\n\\`\\`\\`typescript\n// Read project config\nconst config = readFile('.specforge.json')\nconst projectId = config.project.id\nconst specificationId = config.activeSpecification?.id\n\n// Load details\nif (specificationId) {\n get_specification({ specificationId, include: [\"status\"] })\n}\n\\`\\`\\`\n\n**Output:**\n\\`\\`\\`\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nWORKING CONTEXT\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nProject: {project.name}\nSpecification: {spec.title}\nSource: .specforge.json\n\nProgress: {done}/{total} ({pct}%)\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\\`\\`\\`\n\n### 2. If Arguments - Switch Context\n\n**Logic:**\n\\`\\`\\`typescript\n// Try as specification first\nget_specification({ specificationId: $ARGUMENTS })\n\n// Update .specforge.json activeSpecification\n// (or inform user to update manually)\n\\`\\`\\`\n\n**Output:**\n\\`\\`\\`\n✓ Switched to: {name}\n Update .specforge.json activeSpecification.id to persist.\n\\`\\`\\`\n\n## Notes\n- No argument = show current context\n- With argument = switch context\n- Auto-detects if ID is project or specification\n`;\n"],"mappings":"AAMO,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * SF-Help Command Template
3
+ *
4
+ * Template for displaying SpecForge command reference.
5
+ */
6
+ export declare const SF_HELP_CONTENT = "# SpecForge Command Reference\n\nQuick reference for all available SpecForge slash commands.\n\n## Task\n\nDisplay the command reference:\n\n```\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n SPECFORGE COMMAND REFERENCE\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n\nSETUP & CONTEXT\n/sf-init [spec-id] Initialize specification for work\n/sf-context [id] View or switch working context\n\nSTATUS & ANALYSIS\n/sf-status [spec-id] Implementation status overview\n/sf-analyze-blockers Dependency bottleneck analysis\n\nSEARCH\n/sf-search <query> Search tickets\n\nUTILITIES\n/sf-reset [spec-id] Reset ticket statuses\n/sf-commit [ticket-id] Commit with ticket metadata\n\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nTip: Use /sf-init first to set up your working context.\n\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n```\n\n## Notes\n- Commands use MCP tools from the SpecForge CLI\n- Context is persisted across commands\n- Use /sf-status to see current progress\n";
7
+ //# sourceMappingURL=sf-help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sf-help.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-help.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,eAAe,w7EAqC3B,CAAC"}
@@ -0,0 +1,42 @@
1
+ const SF_HELP_CONTENT = `# SpecForge Command Reference
2
+
3
+ Quick reference for all available SpecForge slash commands.
4
+
5
+ ## Task
6
+
7
+ Display the command reference:
8
+
9
+ \`\`\`
10
+ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
11
+ SPECFORGE COMMAND REFERENCE
12
+ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
13
+
14
+ SETUP & CONTEXT
15
+ /sf-init [spec-id] Initialize specification for work
16
+ /sf-context [id] View or switch working context
17
+
18
+ STATUS & ANALYSIS
19
+ /sf-status [spec-id] Implementation status overview
20
+ /sf-analyze-blockers Dependency bottleneck analysis
21
+
22
+ SEARCH
23
+ /sf-search <query> Search tickets
24
+
25
+ UTILITIES
26
+ /sf-reset [spec-id] Reset ticket statuses
27
+ /sf-commit [ticket-id] Commit with ticket metadata
28
+
29
+ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
30
+ Tip: Use /sf-init first to set up your working context.
31
+ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
32
+ \`\`\`
33
+
34
+ ## Notes
35
+ - Commands use MCP tools from the SpecForge CLI
36
+ - Context is persisted across commands
37
+ - Use /sf-status to see current progress
38
+ `;
39
+ export {
40
+ SF_HELP_CONTENT
41
+ };
42
+ //# sourceMappingURL=sf-help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/cli/templates/content/sf-help.ts"],"sourcesContent":["/**\n * SF-Help Command Template\n *\n * Template for displaying SpecForge command reference.\n */\n\nexport const SF_HELP_CONTENT = `# SpecForge Command Reference\n\nQuick reference for all available SpecForge slash commands.\n\n## Task\n\nDisplay the command reference:\n\n\\`\\`\\`\n═══════════════════════════════════════════════════════════════════\n SPECFORGE COMMAND REFERENCE\n═══════════════════════════════════════════════════════════════════\n\nSETUP & CONTEXT\n/sf-init [spec-id] Initialize specification for work\n/sf-context [id] View or switch working context\n\nSTATUS & ANALYSIS\n/sf-status [spec-id] Implementation status overview\n/sf-analyze-blockers Dependency bottleneck analysis\n\nSEARCH\n/sf-search <query> Search tickets\n\nUTILITIES\n/sf-reset [spec-id] Reset ticket statuses\n/sf-commit [ticket-id] Commit with ticket metadata\n\n═══════════════════════════════════════════════════════════════════\nTip: Use /sf-init first to set up your working context.\n═══════════════════════════════════════════════════════════════════\n\\`\\`\\`\n\n## Notes\n- Commands use MCP tools from the SpecForge CLI\n- Context is persisted across commands\n- Use /sf-status to see current progress\n`;\n"],"mappings":"AAMO,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * SF-Init Command Template
3
+ *
4
+ * Template for initializing SpecForge specification for implementation work.
5
+ */
6
+ export declare const SF_INIT_CONTENT = "# Initialize Ticket System (SpecForge)\n\nInitialize a SpecForge specification for implementation work.\n\n## Arguments\n- `$ARGUMENTS` - Optional: Specification ID to initialize\n\n## Task\n\n### 1. Get or Set Working Context\n\n**Logic:**\n```typescript\n// Read project config\nconst config = readFile('.specforge.json')\nconst projectId = config.project.id\nconst specificationId = $ARGUMENTS || config.activeSpecification?.id\n\n// If no spec found, list available specs\nif (!specificationId) {\n list_specifications({ projectId })\n // Let user pick\n}\n```\n\n### 2. Load Specification Details\n\n**MCP Calls:**\n```typescript\nget_specification(specificationId)\nlist_epics({ specificationId })\nlist_tickets({ specificationId })\n```\n\n### 3. Display Initialization Summary\n\n**Output:**\n```\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nSPECFORGE INITIALIZED\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nSpecification: {title}\nStatus: {status}\nEpics: {epicCount}\nTickets: {ticketCount}\n\nProgress: {done}/{total} ({percentage}%)\nReady: {readyCount} tickets available\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\nNext: Run /sf-next to start the next ready ticket\n```\n\n## Notes\n- Context persists across commands\n- Use /sf-status for detailed view\n- Use /sf-next to start implementation\n";
7
+ //# sourceMappingURL=sf-init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sf-init.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-init.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,eAAe,+kEAyD3B,CAAC"}
@@ -0,0 +1,62 @@
1
+ const SF_INIT_CONTENT = `# Initialize Ticket System (SpecForge)
2
+
3
+ Initialize a SpecForge specification for implementation work.
4
+
5
+ ## Arguments
6
+ - \`$ARGUMENTS\` - Optional: Specification ID to initialize
7
+
8
+ ## Task
9
+
10
+ ### 1. Get or Set Working Context
11
+
12
+ **Logic:**
13
+ \`\`\`typescript
14
+ // Read project config
15
+ const config = readFile('.specforge.json')
16
+ const projectId = config.project.id
17
+ const specificationId = $ARGUMENTS || config.activeSpecification?.id
18
+
19
+ // If no spec found, list available specs
20
+ if (!specificationId) {
21
+ list_specifications({ projectId })
22
+ // Let user pick
23
+ }
24
+ \`\`\`
25
+
26
+ ### 2. Load Specification Details
27
+
28
+ **MCP Calls:**
29
+ \`\`\`typescript
30
+ get_specification(specificationId)
31
+ list_epics({ specificationId })
32
+ list_tickets({ specificationId })
33
+ \`\`\`
34
+
35
+ ### 3. Display Initialization Summary
36
+
37
+ **Output:**
38
+ \`\`\`
39
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
40
+ SPECFORGE INITIALIZED
41
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
42
+ Specification: {title}
43
+ Status: {status}
44
+ Epics: {epicCount}
45
+ Tickets: {ticketCount}
46
+
47
+ Progress: {done}/{total} ({percentage}%)
48
+ Ready: {readyCount} tickets available
49
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
50
+
51
+ Next: Run /sf-next to start the next ready ticket
52
+ \`\`\`
53
+
54
+ ## Notes
55
+ - Context persists across commands
56
+ - Use /sf-status for detailed view
57
+ - Use /sf-next to start implementation
58
+ `;
59
+ export {
60
+ SF_INIT_CONTENT
61
+ };
62
+ //# sourceMappingURL=sf-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/cli/templates/content/sf-init.ts"],"sourcesContent":["/**\n * SF-Init Command Template\n *\n * Template for initializing SpecForge specification for implementation work.\n */\n\nexport const SF_INIT_CONTENT = `# Initialize Ticket System (SpecForge)\n\nInitialize a SpecForge specification for implementation work.\n\n## Arguments\n- \\`$ARGUMENTS\\` - Optional: Specification ID to initialize\n\n## Task\n\n### 1. Get or Set Working Context\n\n**Logic:**\n\\`\\`\\`typescript\n// Read project config\nconst config = readFile('.specforge.json')\nconst projectId = config.project.id\nconst specificationId = $ARGUMENTS || config.activeSpecification?.id\n\n// If no spec found, list available specs\nif (!specificationId) {\n list_specifications({ projectId })\n // Let user pick\n}\n\\`\\`\\`\n\n### 2. Load Specification Details\n\n**MCP Calls:**\n\\`\\`\\`typescript\nget_specification(specificationId)\nlist_epics({ specificationId })\nlist_tickets({ specificationId })\n\\`\\`\\`\n\n### 3. Display Initialization Summary\n\n**Output:**\n\\`\\`\\`\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nSPECFORGE INITIALIZED\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nSpecification: {title}\nStatus: {status}\nEpics: {epicCount}\nTickets: {ticketCount}\n\nProgress: {done}/{total} ({percentage}%)\nReady: {readyCount} tickets available\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nNext: Run /sf-next to start the next ready ticket\n\\`\\`\\`\n\n## Notes\n- Context persists across commands\n- Use /sf-status for detailed view\n- Use /sf-next to start implementation\n`;\n"],"mappings":"AAMO,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * SF-Reset Command Template
3
+ *
4
+ * Template for resetting ticket statuses with dependency awareness.
5
+ */
6
+ export declare const SF_RESET_CONTENT = "# Reset Ticket Statuses (SpecForge)\n\nReset ticket statuses to ready state with dependency awareness.\n\n## Arguments\n- `$ARGUMENTS` - Optional: Specification ID or ticket ID to reset\n\n## Task\n\n### 1. Get Reset Scope\n\n**MCP Calls:**\n```typescript\n// Read project config\nconst config = readFile('.specforge.json')\nconst specificationId = $ARGUMENTS || config.activeSpecification?.id\n\nif ($ARGUMENTS?.match(/Ed+-Td+/)) {\n // Single ticket reset\n get_ticket({ ticketId: $ARGUMENTS })\n} else {\n // Full specification reset\n list_tickets({ specificationId })\n}\n```\n\n### 2. Reset Tickets\n\n**MCP Calls:**\n```typescript\n// Reset tickets via lifecycle operation\nreset_work_session({\n specificationId,\n ticketId: $ARGUMENTS.match(/Ed+-Td+/) ? $ARGUMENTS : undefined\n})\n```\n\n### 3. Display Reset Results\n\n**Output:**\n```\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nTICKET RESET COMPLETE\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nScope: {scope}\n\nRESET SUMMARY\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nReady: {readyCount} tickets\nBlocked: {blockedCount} tickets\nDone: {doneCount} tickets (unchanged)\n\nRESET TICKETS\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nE{n}-T{m} \u2502 {oldStatus} \u2192 {newStatus}\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n```\n\n## Notes\n- Respects dependency constraints\n- Can reset single ticket or entire specification\n- Completed tickets remain unchanged by default\n";
7
+ //# sourceMappingURL=sf-reset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sf-reset.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-reset.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,gBAAgB,i3FA8D5B,CAAC"}
@@ -0,0 +1,67 @@
1
+ const SF_RESET_CONTENT = `# Reset Ticket Statuses (SpecForge)
2
+
3
+ Reset ticket statuses to ready state with dependency awareness.
4
+
5
+ ## Arguments
6
+ - \`$ARGUMENTS\` - Optional: Specification ID or ticket ID to reset
7
+
8
+ ## Task
9
+
10
+ ### 1. Get Reset Scope
11
+
12
+ **MCP Calls:**
13
+ \`\`\`typescript
14
+ // Read project config
15
+ const config = readFile('.specforge.json')
16
+ const specificationId = $ARGUMENTS || config.activeSpecification?.id
17
+
18
+ if ($ARGUMENTS?.match(/Ed+-Td+/)) {
19
+ // Single ticket reset
20
+ get_ticket({ ticketId: $ARGUMENTS })
21
+ } else {
22
+ // Full specification reset
23
+ list_tickets({ specificationId })
24
+ }
25
+ \`\`\`
26
+
27
+ ### 2. Reset Tickets
28
+
29
+ **MCP Calls:**
30
+ \`\`\`typescript
31
+ // Reset tickets via lifecycle operation
32
+ reset_work_session({
33
+ specificationId,
34
+ ticketId: $ARGUMENTS.match(/Ed+-Td+/) ? $ARGUMENTS : undefined
35
+ })
36
+ \`\`\`
37
+
38
+ ### 3. Display Reset Results
39
+
40
+ **Output:**
41
+ \`\`\`
42
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
43
+ TICKET RESET COMPLETE
44
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
45
+ Scope: {scope}
46
+
47
+ RESET SUMMARY
48
+ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
49
+ Ready: {readyCount} tickets
50
+ Blocked: {blockedCount} tickets
51
+ Done: {doneCount} tickets (unchanged)
52
+
53
+ RESET TICKETS
54
+ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
55
+ E{n}-T{m} \u2502 {oldStatus} \u2192 {newStatus}
56
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
57
+ \`\`\`
58
+
59
+ ## Notes
60
+ - Respects dependency constraints
61
+ - Can reset single ticket or entire specification
62
+ - Completed tickets remain unchanged by default
63
+ `;
64
+ export {
65
+ SF_RESET_CONTENT
66
+ };
67
+ //# sourceMappingURL=sf-reset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/cli/templates/content/sf-reset.ts"],"sourcesContent":["/**\n * SF-Reset Command Template\n *\n * Template for resetting ticket statuses with dependency awareness.\n */\n\nexport const SF_RESET_CONTENT = `# Reset Ticket Statuses (SpecForge)\n\nReset ticket statuses to ready state with dependency awareness.\n\n## Arguments\n- \\`$ARGUMENTS\\` - Optional: Specification ID or ticket ID to reset\n\n## Task\n\n### 1. Get Reset Scope\n\n**MCP Calls:**\n\\`\\`\\`typescript\n// Read project config\nconst config = readFile('.specforge.json')\nconst specificationId = $ARGUMENTS || config.activeSpecification?.id\n\nif ($ARGUMENTS?.match(/E\\d+-T\\d+/)) {\n // Single ticket reset\n get_ticket({ ticketId: $ARGUMENTS })\n} else {\n // Full specification reset\n list_tickets({ specificationId })\n}\n\\`\\`\\`\n\n### 2. Reset Tickets\n\n**MCP Calls:**\n\\`\\`\\`typescript\n// Reset tickets via lifecycle operation\nreset_work_session({\n specificationId,\n ticketId: $ARGUMENTS.match(/E\\d+-T\\d+/) ? $ARGUMENTS : undefined\n})\n\\`\\`\\`\n\n### 3. Display Reset Results\n\n**Output:**\n\\`\\`\\`\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nTICKET RESET COMPLETE\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nScope: {scope}\n\nRESET SUMMARY\n─────────────────────────────────────────────────────────────────\nReady: {readyCount} tickets\nBlocked: {blockedCount} tickets\nDone: {doneCount} tickets (unchanged)\n\nRESET TICKETS\n─────────────────────────────────────────────────────────────────\nE{n}-T{m} │ {oldStatus} → {newStatus}\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\\`\\`\\`\n\n## Notes\n- Respects dependency constraints\n- Can reset single ticket or entire specification\n- Completed tickets remain unchanged by default\n`;\n"],"mappings":"AAMO,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * SF-Search Command Template
3
+ *
4
+ * Template for searching tickets by text, tags, or filters.
5
+ */
6
+ export declare const SF_SEARCH_CONTENT = "# Search Tickets (SpecForge)\n\nSearch tickets by text, tags, status, or other filters.\n\n## Arguments\n- `$ARGUMENTS` - Required: Search query\n\n## Task\n\n### 1. Parse Search Query\n\n**Logic:**\n- Extract search terms\n- Parse filters (status:, epic:, tag:)\n- Identify text search vs filter search\n\n### 2. Search Tickets\n\n**MCP Calls:**\n```typescript\n// Read project config\nconst config = readFile('.specforge.json')\nconst specificationId = config.activeSpecification?.id\n\nsearch_tickets({\n specificationId,\n query: extractedTerms,\n status: extractedStatus,\n tags: extractedTags\n})\n```\n\n### 3. Display Search Results\n\n**Output:**\n```\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nSEARCH RESULTS\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nQuery: {query}\nFound: {resultCount} tickets\n\nRESULTS\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nE{n}-T{m} \u2502 {title} \u2502 {status}\n {matchedText}...\n\nE{n}-T{m} \u2502 {title} \u2502 {status}\n {matchedText}...\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\nTip: Use filters like status:ready or epic:E1\n```\n\n## Notes\n- Supports text search and filters\n- Filters: status:, epic:, tag:, priority:\n- Can combine multiple filters\n";
7
+ //# sourceMappingURL=sf-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sf-search.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-search.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,iBAAiB,0yEA0D7B,CAAC"}
@@ -0,0 +1,63 @@
1
+ const SF_SEARCH_CONTENT = `# Search Tickets (SpecForge)
2
+
3
+ Search tickets by text, tags, status, or other filters.
4
+
5
+ ## Arguments
6
+ - \`$ARGUMENTS\` - Required: Search query
7
+
8
+ ## Task
9
+
10
+ ### 1. Parse Search Query
11
+
12
+ **Logic:**
13
+ - Extract search terms
14
+ - Parse filters (status:, epic:, tag:)
15
+ - Identify text search vs filter search
16
+
17
+ ### 2. Search Tickets
18
+
19
+ **MCP Calls:**
20
+ \`\`\`typescript
21
+ // Read project config
22
+ const config = readFile('.specforge.json')
23
+ const specificationId = config.activeSpecification?.id
24
+
25
+ search_tickets({
26
+ specificationId,
27
+ query: extractedTerms,
28
+ status: extractedStatus,
29
+ tags: extractedTags
30
+ })
31
+ \`\`\`
32
+
33
+ ### 3. Display Search Results
34
+
35
+ **Output:**
36
+ \`\`\`
37
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
38
+ SEARCH RESULTS
39
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
40
+ Query: {query}
41
+ Found: {resultCount} tickets
42
+
43
+ RESULTS
44
+ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
45
+ E{n}-T{m} \u2502 {title} \u2502 {status}
46
+ {matchedText}...
47
+
48
+ E{n}-T{m} \u2502 {title} \u2502 {status}
49
+ {matchedText}...
50
+ \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501
51
+
52
+ Tip: Use filters like status:ready or epic:E1
53
+ \`\`\`
54
+
55
+ ## Notes
56
+ - Supports text search and filters
57
+ - Filters: status:, epic:, tag:, priority:
58
+ - Can combine multiple filters
59
+ `;
60
+ export {
61
+ SF_SEARCH_CONTENT
62
+ };
63
+ //# sourceMappingURL=sf-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/cli/templates/content/sf-search.ts"],"sourcesContent":["/**\n * SF-Search Command Template\n *\n * Template for searching tickets by text, tags, or filters.\n */\n\nexport const SF_SEARCH_CONTENT = `# Search Tickets (SpecForge)\n\nSearch tickets by text, tags, status, or other filters.\n\n## Arguments\n- \\`$ARGUMENTS\\` - Required: Search query\n\n## Task\n\n### 1. Parse Search Query\n\n**Logic:**\n- Extract search terms\n- Parse filters (status:, epic:, tag:)\n- Identify text search vs filter search\n\n### 2. Search Tickets\n\n**MCP Calls:**\n\\`\\`\\`typescript\n// Read project config\nconst config = readFile('.specforge.json')\nconst specificationId = config.activeSpecification?.id\n\nsearch_tickets({\n specificationId,\n query: extractedTerms,\n status: extractedStatus,\n tags: extractedTags\n})\n\\`\\`\\`\n\n### 3. Display Search Results\n\n**Output:**\n\\`\\`\\`\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nSEARCH RESULTS\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\nQuery: {query}\nFound: {resultCount} tickets\n\nRESULTS\n─────────────────────────────────────────────────────────────────\nE{n}-T{m} │ {title} │ {status}\n {matchedText}...\n\nE{n}-T{m} │ {title} │ {status}\n {matchedText}...\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n\nTip: Use filters like status:ready or epic:E1\n\\`\\`\\`\n\n## Notes\n- Supports text search and filters\n- Filters: status:, epic:, tag:, priority:\n- Can combine multiple filters\n`;\n"],"mappings":"AAMO,MAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * SF-Status Command Template
3
+ *
4
+ * Template for displaying implementation status with consolidated tools.
5
+ */
6
+ export declare const SF_STATUS_CONTENT = "# Implementation Status (SpecForge)\n\nDisplay comprehensive implementation status with consolidated progress view.\n\n## Arguments\n- `$ARGUMENTS` - Optional: Specification ID to view status for\n\n## Task\n\n### 1. Get Specification Context\n\n**Logic:**\n```typescript\n// Read project config\nconst config = readFile('.specforge.json')\nconst specificationId = $ARGUMENTS || config.activeSpecification?.id\n```\n\n### 2. Load Implementation Data\n\n**MCP Calls:**\n```typescript\nget_specification(specificationId)\nlist_epics({ specificationId })\nlist_tickets({ specificationId })\n```\n\n### 3. Display Status Overview\n\n**Output:**\n```\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nIMPLEMENTATION STATUS\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nSpecification: {title}\nProgress: {done}/{total} ({percentage}%)\n\nEPICS\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nE{n} \u2502 {title} \u2502 {progress}% \u2502 {status}\n\nREADY TICKETS\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nE{n}-T{m} \u2502 {title} \u2502 {priority}\n\nBLOCKED TICKETS\n\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\nE{n}-T{m} \u2502 {title} \u2502 Blocked by: {dependencies}\n\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\n\nNext: Run /sf-next to start implementation\n```\n\n## Notes\n- Shows overall progress and epic breakdown\n- Lists ready and blocked tickets\n- Use /sf-validate for system health check\n";
7
+ //# sourceMappingURL=sf-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sf-status.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-status.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,iBAAiB,opGAyD7B,CAAC"}