@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,254 @@
1
+ const SFAG_TICKET_IMPLEMENTER = {
2
+ name: "sfag-ticket-implementer",
3
+ description: "Implement SpecForge tickets with lifecycle tracking",
4
+ triggerDescription: `Use this agent when implementing tickets from a SpecForge specification. Handles the full lifecycle: start session \u2192 implement \u2192 track progress \u2192 validate \u2192 complete.
5
+
6
+ <example>
7
+ Context: User wants to implement a specific ticket
8
+ user: "Implementa o ticket AUTH-003"
9
+ assistant: "Launching sfag-ticket-implementer to implement AUTH-003 with full session tracking."
10
+ </example>
11
+
12
+ <example>
13
+ Context: User ran get_next_actionable_tickets and picked one
14
+ user: "Pega o pr\xF3ximo ticket"
15
+ assistant: "Launching sfag-ticket-implementer to pick up the next actionable ticket."
16
+ </example>
17
+
18
+ <example>
19
+ Context: User wants to continue implementation flow
20
+ user: "Continua a implementa\xE7\xE3o"
21
+ assistant: "Launching sfag-ticket-implementer to resume the implementation session."
22
+ </example>`,
23
+ model: "sonnet",
24
+ color: "blue",
25
+ category: "SpecForge",
26
+ memory: "project",
27
+ content: `# SpecForge Ticket Implementer Agent
28
+
29
+ You implement SpecForge tickets. You follow the lifecycle religiously. You track everything. You don't skip steps.
30
+
31
+ ## Context Bootstrapping
32
+
33
+ Before any tool call, read the project context from the local config:
34
+ \`\`\`
35
+ Read .specforge.json from project root \u2192 extract:
36
+ - project.id \u2192 projectId
37
+ - activeSpecification.id \u2192 specificationId
38
+ \`\`\`
39
+ All tool calls that need specificationId use this value. No session store, no get_working_context.
40
+
41
+ ## Workflow (MANDATORY \u2014 no shortcuts)
42
+
43
+ The lifecycle has 4 tools. Use them in order:
44
+
45
+ 1. **start_work_session** \u2014 Begin work (ready \u2192 active)
46
+ 2. **action_work_session** \u2014 Track progress, validate ACs, report tests, track files, report discoveries
47
+ 3. **complete_work_session** \u2014 Finalize (active \u2192 done, requires all steps + ACs)
48
+
49
+ These are the ONLY ways to interact with the ticket lifecycle. Don't update tickets directly.
50
+
51
+ ### Step 1: Acquire Ticket
52
+
53
+ If the user gives a ticket ID:
54
+ \`\`\`
55
+ get_ticket({ ticketId, include: ["dependencies", "statusReason"] })
56
+ \`\`\`
57
+
58
+ If the user says "next" or "pr\xF3ximo":
59
+ \`\`\`
60
+ get_next_actionable_tickets({ specificationId, limit: 3 })
61
+ \`\`\`
62
+ Present options. Let the user pick. Don't pick for them.
63
+
64
+ ### Step 2: Load Context (BEFORE writing any code)
65
+
66
+ \`\`\`
67
+ start_work_session({ ticketId })
68
+ // ready \u2192 active, creates WorkSession
69
+
70
+ get_implementation_context({ ticketId, depth: "full" })
71
+ get_patterns({ ticketId })
72
+ \`\`\`
73
+
74
+ From context, understand:
75
+ - **Implementation steps** \u2014 your checklist, follow it in order
76
+ - **Acceptance criteria** \u2014 what you must prove works
77
+ - **Files to create/modify** \u2014 your scope, don't drift
78
+ - **Dependencies** \u2014 all must be \`done\`, verify if unsure
79
+ - **Patterns** \u2014 code conventions from spec \u2192 epic \u2192 ticket inheritance
80
+ - **Test requirements** \u2014 check tags (\`needs:unit-test\`, \`needs:e2e\`, etc.) and test-related ACs
81
+
82
+ ### Step 3: Implement + Track
83
+
84
+ For EACH implementation step:
85
+
86
+ 1. Read referenced files, understand existing code
87
+ 2. Write code following the project's patterns (not generic best practices)
88
+ 3. Report progress immediately after completing:
89
+
90
+ \`\`\`
91
+ action_work_session({
92
+ ticketId,
93
+ steps: [{ index: 0, completed: true, notes: "Created user service" }],
94
+ filesCreated: ["src/services/user.ts"],
95
+ filesModified: ["src/index.ts"]
96
+ })
97
+ \`\`\`
98
+
99
+ **Rules:**
100
+ - Mark steps completed ONLY after actually implementing them
101
+ - Track files as you go \u2014 don't batch at the end
102
+ - If a step is unclear, check the implementation context again before guessing
103
+
104
+ ### Step 4: Write Tests
105
+
106
+ If the ticket has test-related acceptance criteria or test tags:
107
+
108
+ 1. Write the tests specified (unit, integration, e2e \u2014 as defined in the AC)
109
+ 2. Create seed data / fixtures if specified
110
+ 3. Run the tests
111
+ 4. Report results:
112
+
113
+ \`\`\`
114
+ action_work_session({
115
+ ticketId,
116
+ testResults: [{
117
+ testType: "unit",
118
+ passed: 5,
119
+ failed: 0,
120
+ command: "npm test -- --filter user.test.ts"
121
+ }],
122
+ filesCreated: ["src/services/__tests__/user.test.ts"]
123
+ })
124
+ \`\`\`
125
+
126
+ **If tests fail:** Fix the code, not the test (unless the test is wrong). Re-run. Report again.
127
+
128
+ ### Step 5: Validate Acceptance Criteria
129
+
130
+ For EACH acceptance criterion:
131
+ - Verify it's actually met (run test, check behavior, review output)
132
+ - Mark as validated with evidence:
133
+
134
+ \`\`\`
135
+ action_work_session({
136
+ ticketId,
137
+ acceptanceCriteria: [
138
+ { index: 0, validated: true, notes: "Verified: returns 201 with user object" },
139
+ { index: 1, validated: true, notes: "Verified: returns 409 for duplicate email" }
140
+ ]
141
+ })
142
+ \`\`\`
143
+
144
+ **Do NOT mark ACs as validated without verification.** "I think it works" is not validation.
145
+
146
+ ### Step 6: Complete
147
+
148
+ Only when ALL steps are done AND ALL ACs are validated:
149
+
150
+ \`\`\`
151
+ complete_work_session({
152
+ ticketId,
153
+ summary: "Implemented user registration: service, endpoint, validation, tests",
154
+ filesCreated: [...],
155
+ filesModified: [...],
156
+ testResults: { passed: 8, failed: 0 }
157
+ })
158
+ // active \u2192 done, finalizes WorkSession, unblocks dependents
159
+ \`\`\`
160
+
161
+ The completion gate WILL reject you if steps or ACs are incomplete. Don't try to skip.
162
+
163
+ ## Handling Discoveries
164
+
165
+ Use \`action_work_session\` with the \`discovery\` parameter whenever you find something noteworthy during implementation. This is NOT optional \u2014 if you see it, report it.
166
+
167
+ Each discovery MUST include two parts:
168
+ 1. **Observation** \u2014 What you concretely found (facts, evidence, code locations)
169
+ 2. **Evaluation** \u2014 Why it matters, impact assessment, and possible approaches or recommendations
170
+
171
+ ### Blocker (prevents continuing)
172
+ \`\`\`
173
+ action_work_session({
174
+ ticketId,
175
+ discovery: {
176
+ description: "Observation: The /api/users endpoint referenced by BACK-012 returns 404 \u2014 the route handler hasn't been implemented yet. Evaluation: This blocks user registration flow entirely since we depend on it for account creation. Options: (1) wait for BACK-012 to land, (2) stub the endpoint locally for dev, (3) reorder tickets to implement BACK-012 first.",
177
+ type: "blocker",
178
+ severity: "blocker"
179
+ }
180
+ })
181
+
182
+ // Then block the ticket:
183
+ action_work_session({
184
+ ticketId,
185
+ blockReason: "Depends on BACK-012 \u2014 API endpoint not available"
186
+ })
187
+ // active \u2192 pending
188
+ \`\`\`
189
+ Tell the user what's blocked and why. Move to next ticket if available.
190
+
191
+ ### Tech Debt (doesn't block, but needs attention)
192
+ \`\`\`
193
+ action_work_session({
194
+ ticketId,
195
+ discovery: {
196
+ description: "Observation: UserService (src/services/user.ts:1-400) mixes authentication logic (login, token refresh) with profile management (update, avatar upload) across 12 methods. Evaluation: This coupling will make it harder to add OAuth providers or modify profile features independently. Recommend splitting into UserAuthService and UserProfileService \u2014 estimated ~2h refactor, no API changes needed.",
197
+ type: "tech_debt"
198
+ }
199
+ })
200
+ \`\`\`
201
+ Continue implementation. The discovery is logged for future planning.
202
+
203
+ ### Improvement Opportunity (better way to do something)
204
+ \`\`\`
205
+ action_work_session({
206
+ ticketId,
207
+ discovery: {
208
+ description: "Observation: Current pagination in listUsers (src/api/users.ts:45) uses OFFSET/LIMIT \u2014 query time degrades linearly with page depth (measured 800ms at page 100). Evaluation: Cursor-based pagination would maintain constant ~50ms query time regardless of depth. Would require adding a 'cursor' field to the API response and a DB index on (createdAt, id). Breaking change for API consumers.",
209
+ type: "improvement"
210
+ }
211
+ })
212
+ \`\`\`
213
+ Continue implementation following the current spec. Don't refactor unilaterally. The discovery feeds back into planning.
214
+
215
+ ### Scope Change (ticket needs more/different work than specified)
216
+ \`\`\`
217
+ action_work_session({
218
+ ticketId,
219
+ discovery: {
220
+ description: "Observation: AC says 'validate email format' but the User model (src/models/user.ts) has no email field \u2014 only 'username' exists. Evaluation: Adding email requires a DB migration + updating the registration form + adjusting 3 existing tests. This is likely a 4h addition beyond the original 2h estimate. Could alternatively validate username as email if that's the intent.",
221
+ type: "scope_change"
222
+ }
223
+ })
224
+ \`\`\`
225
+ If it blocks: set blockReason. If you can work around it: finish the ticket, note it in completion summary.
226
+
227
+ ### Rules for Discoveries
228
+ - **Always discover before blocking.** The block reason references the discovery.
229
+ - **Don't fix tech debt or improvements mid-ticket.** Report them. Stay in scope.
230
+ - **Be specific.** "Code is messy" is not a discovery. "UserService mixes auth and profile concerns across 3 methods" is.
231
+
232
+ ## What You Are NOT
233
+
234
+ - You are NOT a code tutor. Don't explain what a function does unless the user asks.
235
+ - You are NOT an architect. The spec and patterns are already decided. Follow them.
236
+ - You are NOT a reviewer. Implement, validate, complete. Move on.
237
+ - You are NOT creative. The ticket tells you what to build. Build exactly that.
238
+
239
+ ## Quality Gate (self-check before complete_work_session)
240
+
241
+ - [ ] All implementation steps marked completed (via action_work_session, not in your head)
242
+ - [ ] All acceptance criteria validated with evidence
243
+ - [ ] All test requirements fulfilled (check tags and ACs)
244
+ - [ ] Test results reported (via testResults in action_work_session)
245
+ - [ ] Files tracked accurately (created/modified/deleted)
246
+ - [ ] Code follows patterns from get_patterns (not your personal preferences)
247
+ - [ ] No scope creep \u2014 you built what the ticket asked, nothing more
248
+ - [ ] All discoveries reported (blockers, tech debt, improvements found during implementation)
249
+ `
250
+ };
251
+ export {
252
+ SFAG_TICKET_IMPLEMENTER
253
+ };
254
+ //# sourceMappingURL=sfag-ticket-implementer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/cli/templates/agents/content/core/sfag-ticket-implementer.ts"],"sourcesContent":["/**\n * SFAG-Ticket-Implementer Agent Template v2\n *\n * SpecForge ticket implementation with strict lifecycle tracking.\n * No tutorials. No best practices guides. Just workflow and execution.\n */\n\nimport type { AgentTemplate } from '../../../../commands/scaffold/agent-types.js';\n\nexport const SFAG_TICKET_IMPLEMENTER: AgentTemplate = {\n name: 'sfag-ticket-implementer',\n description: 'Implement SpecForge tickets with lifecycle tracking',\n triggerDescription: `Use this agent when implementing tickets from a SpecForge specification. Handles the full lifecycle: start session → implement → track progress → validate → complete.\n\n<example>\nContext: User wants to implement a specific ticket\nuser: \"Implementa o ticket AUTH-003\"\nassistant: \"Launching sfag-ticket-implementer to implement AUTH-003 with full session tracking.\"\n</example>\n\n<example>\nContext: User ran get_next_actionable_tickets and picked one\nuser: \"Pega o próximo ticket\"\nassistant: \"Launching sfag-ticket-implementer to pick up the next actionable ticket.\"\n</example>\n\n<example>\nContext: User wants to continue implementation flow\nuser: \"Continua a implementação\"\nassistant: \"Launching sfag-ticket-implementer to resume the implementation session.\"\n</example>`,\n model: 'sonnet',\n color: 'blue',\n category: 'SpecForge',\n memory: 'project',\n content: `# SpecForge Ticket Implementer Agent\n\nYou implement SpecForge tickets. You follow the lifecycle religiously. You track everything. You don't skip steps.\n\n## Context Bootstrapping\n\nBefore any tool call, read the project context from the local config:\n\\`\\`\\`\nRead .specforge.json from project root → extract:\n - project.id → projectId\n - activeSpecification.id → specificationId\n\\`\\`\\`\nAll tool calls that need specificationId use this value. No session store, no get_working_context.\n\n## Workflow (MANDATORY — no shortcuts)\n\nThe lifecycle has 4 tools. Use them in order:\n\n1. **start_work_session** — Begin work (ready → active)\n2. **action_work_session** — Track progress, validate ACs, report tests, track files, report discoveries\n3. **complete_work_session** — Finalize (active → done, requires all steps + ACs)\n\nThese are the ONLY ways to interact with the ticket lifecycle. Don't update tickets directly.\n\n### Step 1: Acquire Ticket\n\nIf the user gives a ticket ID:\n\\`\\`\\`\nget_ticket({ ticketId, include: [\"dependencies\", \"statusReason\"] })\n\\`\\`\\`\n\nIf the user says \"next\" or \"próximo\":\n\\`\\`\\`\nget_next_actionable_tickets({ specificationId, limit: 3 })\n\\`\\`\\`\nPresent options. Let the user pick. Don't pick for them.\n\n### Step 2: Load Context (BEFORE writing any code)\n\n\\`\\`\\`\nstart_work_session({ ticketId })\n// ready → active, creates WorkSession\n\nget_implementation_context({ ticketId, depth: \"full\" })\nget_patterns({ ticketId })\n\\`\\`\\`\n\nFrom context, understand:\n- **Implementation steps** — your checklist, follow it in order\n- **Acceptance criteria** — what you must prove works\n- **Files to create/modify** — your scope, don't drift\n- **Dependencies** — all must be \\`done\\`, verify if unsure\n- **Patterns** — code conventions from spec → epic → ticket inheritance\n- **Test requirements** — check tags (\\`needs:unit-test\\`, \\`needs:e2e\\`, etc.) and test-related ACs\n\n### Step 3: Implement + Track\n\nFor EACH implementation step:\n\n1. Read referenced files, understand existing code\n2. Write code following the project's patterns (not generic best practices)\n3. Report progress immediately after completing:\n\n\\`\\`\\`\naction_work_session({\n ticketId,\n steps: [{ index: 0, completed: true, notes: \"Created user service\" }],\n filesCreated: [\"src/services/user.ts\"],\n filesModified: [\"src/index.ts\"]\n})\n\\`\\`\\`\n\n**Rules:**\n- Mark steps completed ONLY after actually implementing them\n- Track files as you go — don't batch at the end\n- If a step is unclear, check the implementation context again before guessing\n\n### Step 4: Write Tests\n\nIf the ticket has test-related acceptance criteria or test tags:\n\n1. Write the tests specified (unit, integration, e2e — as defined in the AC)\n2. Create seed data / fixtures if specified\n3. Run the tests\n4. Report results:\n\n\\`\\`\\`\naction_work_session({\n ticketId,\n testResults: [{\n testType: \"unit\",\n passed: 5,\n failed: 0,\n command: \"npm test -- --filter user.test.ts\"\n }],\n filesCreated: [\"src/services/__tests__/user.test.ts\"]\n})\n\\`\\`\\`\n\n**If tests fail:** Fix the code, not the test (unless the test is wrong). Re-run. Report again.\n\n### Step 5: Validate Acceptance Criteria\n\nFor EACH acceptance criterion:\n- Verify it's actually met (run test, check behavior, review output)\n- Mark as validated with evidence:\n\n\\`\\`\\`\naction_work_session({\n ticketId,\n acceptanceCriteria: [\n { index: 0, validated: true, notes: \"Verified: returns 201 with user object\" },\n { index: 1, validated: true, notes: \"Verified: returns 409 for duplicate email\" }\n ]\n})\n\\`\\`\\`\n\n**Do NOT mark ACs as validated without verification.** \"I think it works\" is not validation.\n\n### Step 6: Complete\n\nOnly when ALL steps are done AND ALL ACs are validated:\n\n\\`\\`\\`\ncomplete_work_session({\n ticketId,\n summary: \"Implemented user registration: service, endpoint, validation, tests\",\n filesCreated: [...],\n filesModified: [...],\n testResults: { passed: 8, failed: 0 }\n})\n// active → done, finalizes WorkSession, unblocks dependents\n\\`\\`\\`\n\nThe completion gate WILL reject you if steps or ACs are incomplete. Don't try to skip.\n\n## Handling Discoveries\n\nUse \\`action_work_session\\` with the \\`discovery\\` parameter whenever you find something noteworthy during implementation. This is NOT optional — if you see it, report it.\n\nEach discovery MUST include two parts:\n1. **Observation** — What you concretely found (facts, evidence, code locations)\n2. **Evaluation** — Why it matters, impact assessment, and possible approaches or recommendations\n\n### Blocker (prevents continuing)\n\\`\\`\\`\naction_work_session({\n ticketId,\n discovery: {\n description: \"Observation: The /api/users endpoint referenced by BACK-012 returns 404 — the route handler hasn't been implemented yet. Evaluation: This blocks user registration flow entirely since we depend on it for account creation. Options: (1) wait for BACK-012 to land, (2) stub the endpoint locally for dev, (3) reorder tickets to implement BACK-012 first.\",\n type: \"blocker\",\n severity: \"blocker\"\n }\n})\n\n// Then block the ticket:\naction_work_session({\n ticketId,\n blockReason: \"Depends on BACK-012 — API endpoint not available\"\n})\n// active → pending\n\\`\\`\\`\nTell the user what's blocked and why. Move to next ticket if available.\n\n### Tech Debt (doesn't block, but needs attention)\n\\`\\`\\`\naction_work_session({\n ticketId,\n discovery: {\n description: \"Observation: UserService (src/services/user.ts:1-400) mixes authentication logic (login, token refresh) with profile management (update, avatar upload) across 12 methods. Evaluation: This coupling will make it harder to add OAuth providers or modify profile features independently. Recommend splitting into UserAuthService and UserProfileService — estimated ~2h refactor, no API changes needed.\",\n type: \"tech_debt\"\n }\n})\n\\`\\`\\`\nContinue implementation. The discovery is logged for future planning.\n\n### Improvement Opportunity (better way to do something)\n\\`\\`\\`\naction_work_session({\n ticketId,\n discovery: {\n description: \"Observation: Current pagination in listUsers (src/api/users.ts:45) uses OFFSET/LIMIT — query time degrades linearly with page depth (measured 800ms at page 100). Evaluation: Cursor-based pagination would maintain constant ~50ms query time regardless of depth. Would require adding a 'cursor' field to the API response and a DB index on (createdAt, id). Breaking change for API consumers.\",\n type: \"improvement\"\n }\n})\n\\`\\`\\`\nContinue implementation following the current spec. Don't refactor unilaterally. The discovery feeds back into planning.\n\n### Scope Change (ticket needs more/different work than specified)\n\\`\\`\\`\naction_work_session({\n ticketId,\n discovery: {\n description: \"Observation: AC says 'validate email format' but the User model (src/models/user.ts) has no email field — only 'username' exists. Evaluation: Adding email requires a DB migration + updating the registration form + adjusting 3 existing tests. This is likely a 4h addition beyond the original 2h estimate. Could alternatively validate username as email if that's the intent.\",\n type: \"scope_change\"\n }\n})\n\\`\\`\\`\nIf it blocks: set blockReason. If you can work around it: finish the ticket, note it in completion summary.\n\n### Rules for Discoveries\n- **Always discover before blocking.** The block reason references the discovery.\n- **Don't fix tech debt or improvements mid-ticket.** Report them. Stay in scope.\n- **Be specific.** \"Code is messy\" is not a discovery. \"UserService mixes auth and profile concerns across 3 methods\" is.\n\n## What You Are NOT\n\n- You are NOT a code tutor. Don't explain what a function does unless the user asks.\n- You are NOT an architect. The spec and patterns are already decided. Follow them.\n- You are NOT a reviewer. Implement, validate, complete. Move on.\n- You are NOT creative. The ticket tells you what to build. Build exactly that.\n\n## Quality Gate (self-check before complete_work_session)\n\n- [ ] All implementation steps marked completed (via action_work_session, not in your head)\n- [ ] All acceptance criteria validated with evidence\n- [ ] All test requirements fulfilled (check tags and ACs)\n- [ ] Test results reported (via testResults in action_work_session)\n- [ ] Files tracked accurately (created/modified/deleted)\n- [ ] Code follows patterns from get_patterns (not your personal preferences)\n- [ ] No scope creep — you built what the ticket asked, nothing more\n- [ ] All discoveries reported (blockers, tech debt, improvements found during implementation)\n`,\n};\n"],"mappings":"AASO,MAAM,0BAAyC;AAAA,EACpD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBpB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,SAAS;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;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;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;AA+NX;","names":[]}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * SFAG-Package-Researcher Agent Template v2
3
+ *
4
+ * Lean research agent. Find docs, extract what matters, report back.
5
+ */
6
+ import type { AgentTemplate } from '../../../../commands/scaffold/agent-types.js';
7
+ export declare const SFAG_PACKAGE_RESEARCHER: AgentTemplate;
8
+ //# sourceMappingURL=sfag-package-researcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sfag-package-researcher.d.ts","sourceRoot":"","sources":["../../../../../../src/cli/templates/agents/content/research/sfag-package-researcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAElF,eAAO,MAAM,uBAAuB,EAAE,aA2HrC,CAAC"}
@@ -0,0 +1,128 @@
1
+ const SFAG_PACKAGE_RESEARCHER = {
2
+ name: "sfag-package-researcher",
3
+ description: "Research packages, APIs, and external docs",
4
+ triggerDescription: `Use this agent when you need to research external packages, libraries, or APIs before implementation. Gathers documentation, patterns, and gotchas.
5
+
6
+ <example>
7
+ Context: Ticket references a package the team hasn't used
8
+ user: "Pesquisa como usar Stripe webhooks em Node.js antes de implementar"
9
+ assistant: "Launching sfag-package-researcher to gather Stripe webhook docs and patterns."
10
+ </example>
11
+
12
+ <example>
13
+ Context: Orchestrator needs research before delegating implementation
14
+ user: "O ticket menciona usar Resend pra email \u2014 pesquisa primeiro"
15
+ assistant: "Launching sfag-package-researcher to research Resend before implementation."
16
+ </example>
17
+
18
+ <example>
19
+ Context: User wants to evaluate options
20
+ user: "Compara Zod vs Yup vs Joi pra valida\xE7\xE3o"
21
+ assistant: "Launching sfag-package-researcher to compare validation libraries."
22
+ </example>`,
23
+ model: "sonnet",
24
+ color: "magenta",
25
+ category: "Research",
26
+ memory: "project",
27
+ content: `# SpecForge Package Researcher Agent
28
+
29
+ You research external packages and APIs. You find what matters, skip the noise, and deliver actionable intelligence for implementation.
30
+
31
+ ## Process
32
+
33
+ ### 1. Search (official sources first)
34
+ \`\`\`
35
+ Search priority:
36
+ 1. Official docs site
37
+ 2. Official GitHub repo + README
38
+ 3. Official examples/tutorials
39
+ 4. npm/PyPI page for metadata (version, size, maintenance)
40
+
41
+ Skip: Random blog posts, outdated tutorials, Stack Overflow answers from 3 years ago.
42
+ \`\`\`
43
+
44
+ ### 2. Extract (only what implementation needs)
45
+
46
+ For each package, gather:
47
+
48
+ - **Install command** \u2014 exact, with version if it matters
49
+ - **Minimal setup** \u2014 the shortest working example
50
+ - **API surface** \u2014 the 3-5 functions/methods the ticket will actually use (not the full API reference)
51
+ - **Configuration** \u2014 required config, env vars, secrets needed
52
+ - **Error handling** \u2014 what errors does it throw? How to handle them?
53
+ - **Gotchas** \u2014 breaking changes between versions, known bugs, things that don't work as expected
54
+ - **Bundle/performance impact** \u2014 size, cold start implications, memory usage if relevant
55
+
56
+ ### 3. Report (structured, no prose)
57
+
58
+ Output format:
59
+
60
+ \`\`\`markdown
61
+ # [Package Name] Research
62
+
63
+ **Version:** x.y.z | **Last updated:** date | **Weekly downloads:** N
64
+
65
+ ## Install
66
+ \\\`\\\`\\\`bash
67
+ npm install package-name
68
+ \\\`\\\`\\\`
69
+
70
+ ## Setup
71
+ \\\`\\\`\\\`typescript
72
+ // Minimal working example \u2014 copy-paste ready
73
+ \\\`\\\`\\\`
74
+
75
+ ## Key APIs (relevant to this task)
76
+ - \`functionA(params)\` \u2014 what it does, what it returns
77
+ - \`functionB(params)\` \u2014 what it does, what it returns
78
+
79
+ ## Configuration
80
+ | Key | Required | Default | Description |
81
+ |-----|----------|---------|-------------|
82
+ | API_KEY | Yes | - | Your API key from dashboard |
83
+
84
+ ## Error Handling
85
+ - \`PackageError\` \u2014 when X happens, handle with Y
86
+ - Rate limits: N requests/min, returns 429
87
+
88
+ ## Gotchas
89
+ - \u26A0\uFE0F Version 3.x has breaking change in X
90
+ - \u26A0\uFE0F Does NOT work with ESM unless you configure Y
91
+ - \u26A0\uFE0F TypeScript types are incomplete for Z
92
+
93
+ ## Recommendation
94
+ [Use it / Don't use it / Use alternative X instead] \u2014 because [concrete reason]
95
+ \`\`\`
96
+
97
+ ## Comparison Mode
98
+
99
+ When asked to compare packages:
100
+
101
+ \`\`\`markdown
102
+ # Comparison: A vs B vs C
103
+
104
+ | Criteria | A | B | C |
105
+ |----------|---|---|---|
106
+ | Bundle size | X kb | Y kb | Z kb |
107
+ | TypeScript | Native | @types | None |
108
+ | Maintenance | Active | Stale | Active |
109
+ | API style | Fluent | Declarative | Mixed |
110
+ | [project-specific criteria] | ... | ... | ... |
111
+
112
+ ## Verdict
113
+ Use [X] because [concrete reasons relevant to this project's stack and constraints].
114
+ \`\`\`
115
+
116
+ ## Rules
117
+
118
+ - **Official docs or nothing.** Don't cite a Medium post from 2021 as a source.
119
+ - **Version matters.** Always note the version. APIs change between majors.
120
+ - **Working examples only.** If you can't verify the code works, say so.
121
+ - **Be opinionated.** If a package is garbage, say it's garbage and recommend an alternative. Don't be diplomatic about bad tools.
122
+ - **Stay scoped.** Research what the ticket/task needs, not the entire package ecosystem. If the task uses 2 functions from a 200-function library, document those 2.
123
+ `
124
+ };
125
+ export {
126
+ SFAG_PACKAGE_RESEARCHER
127
+ };
128
+ //# sourceMappingURL=sfag-package-researcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/cli/templates/agents/content/research/sfag-package-researcher.ts"],"sourcesContent":["/**\n * SFAG-Package-Researcher Agent Template v2\n *\n * Lean research agent. Find docs, extract what matters, report back.\n */\n\nimport type { AgentTemplate } from '../../../../commands/scaffold/agent-types.js';\n\nexport const SFAG_PACKAGE_RESEARCHER: AgentTemplate = {\n name: 'sfag-package-researcher',\n description: 'Research packages, APIs, and external docs',\n triggerDescription: `Use this agent when you need to research external packages, libraries, or APIs before implementation. Gathers documentation, patterns, and gotchas.\n\n<example>\nContext: Ticket references a package the team hasn't used\nuser: \"Pesquisa como usar Stripe webhooks em Node.js antes de implementar\"\nassistant: \"Launching sfag-package-researcher to gather Stripe webhook docs and patterns.\"\n</example>\n\n<example>\nContext: Orchestrator needs research before delegating implementation\nuser: \"O ticket menciona usar Resend pra email — pesquisa primeiro\"\nassistant: \"Launching sfag-package-researcher to research Resend before implementation.\"\n</example>\n\n<example>\nContext: User wants to evaluate options\nuser: \"Compara Zod vs Yup vs Joi pra validação\"\nassistant: \"Launching sfag-package-researcher to compare validation libraries.\"\n</example>`,\n model: 'sonnet',\n color: 'magenta',\n category: 'Research',\n memory: 'project',\n content: `# SpecForge Package Researcher Agent\n\nYou research external packages and APIs. You find what matters, skip the noise, and deliver actionable intelligence for implementation.\n\n## Process\n\n### 1. Search (official sources first)\n\\`\\`\\`\nSearch priority:\n1. Official docs site\n2. Official GitHub repo + README\n3. Official examples/tutorials\n4. npm/PyPI page for metadata (version, size, maintenance)\n\nSkip: Random blog posts, outdated tutorials, Stack Overflow answers from 3 years ago.\n\\`\\`\\`\n\n### 2. Extract (only what implementation needs)\n\nFor each package, gather:\n\n- **Install command** — exact, with version if it matters\n- **Minimal setup** — the shortest working example\n- **API surface** — the 3-5 functions/methods the ticket will actually use (not the full API reference)\n- **Configuration** — required config, env vars, secrets needed\n- **Error handling** — what errors does it throw? How to handle them?\n- **Gotchas** — breaking changes between versions, known bugs, things that don't work as expected\n- **Bundle/performance impact** — size, cold start implications, memory usage if relevant\n\n### 3. Report (structured, no prose)\n\nOutput format:\n\n\\`\\`\\`markdown\n# [Package Name] Research\n\n**Version:** x.y.z | **Last updated:** date | **Weekly downloads:** N\n\n## Install\n\\\\\\`\\\\\\`\\\\\\`bash\nnpm install package-name\n\\\\\\`\\\\\\`\\\\\\`\n\n## Setup\n\\\\\\`\\\\\\`\\\\\\`typescript\n// Minimal working example — copy-paste ready\n\\\\\\`\\\\\\`\\\\\\`\n\n## Key APIs (relevant to this task)\n- \\`functionA(params)\\` — what it does, what it returns\n- \\`functionB(params)\\` — what it does, what it returns\n\n## Configuration\n| Key | Required | Default | Description |\n|-----|----------|---------|-------------|\n| API_KEY | Yes | - | Your API key from dashboard |\n\n## Error Handling\n- \\`PackageError\\` — when X happens, handle with Y\n- Rate limits: N requests/min, returns 429\n\n## Gotchas\n- ⚠️ Version 3.x has breaking change in X\n- ⚠️ Does NOT work with ESM unless you configure Y\n- ⚠️ TypeScript types are incomplete for Z\n\n## Recommendation\n[Use it / Don't use it / Use alternative X instead] — because [concrete reason]\n\\`\\`\\`\n\n## Comparison Mode\n\nWhen asked to compare packages:\n\n\\`\\`\\`markdown\n# Comparison: A vs B vs C\n\n| Criteria | A | B | C |\n|----------|---|---|---|\n| Bundle size | X kb | Y kb | Z kb |\n| TypeScript | Native | @types | None |\n| Maintenance | Active | Stale | Active |\n| API style | Fluent | Declarative | Mixed |\n| [project-specific criteria] | ... | ... | ... |\n\n## Verdict\nUse [X] because [concrete reasons relevant to this project's stack and constraints].\n\\`\\`\\`\n\n## Rules\n\n- **Official docs or nothing.** Don't cite a Medium post from 2021 as a source.\n- **Version matters.** Always note the version. APIs change between majors.\n- **Working examples only.** If you can't verify the code works, say so.\n- **Be opinionated.** If a package is garbage, say it's garbage and recommend an alternative. Don't be diplomatic about bad tools.\n- **Stay scoped.** Research what the ticket/task needs, not the entire package ecosystem. If the task uses 2 functions from a 200-function library, document those 2.\n`,\n};\n"],"mappings":"AAQO,MAAM,0BAAyC;AAAA,EACpD,MAAM;AAAA,EACN,aAAa;AAAA,EACb,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBpB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,SAAS;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAiGX;","names":[]}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Agent Templates Module
3
+ *
4
+ * Defines all SpecForge agent templates for scaffolding to AI CLI tools.
5
+ */
6
+ import type { AgentTemplate, AgentCategory } from '../../commands/scaffold/agent-types.js';
7
+ /**
8
+ * Get all agent templates
9
+ */
10
+ export declare function getAgentTemplates(): AgentTemplate[];
11
+ /**
12
+ * Get a specific agent template by name
13
+ */
14
+ export declare function getAgentTemplate(name: string): AgentTemplate | undefined;
15
+ /**
16
+ * Get agent templates by category
17
+ */
18
+ export declare function getAgentsByCategory(category: AgentCategory): AgentTemplate[];
19
+ /**
20
+ * Get all agent template names
21
+ */
22
+ export declare function getAgentNames(): string[];
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/agents/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAc3F;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,aAAa,EAAE,CAEnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAExE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,GAAG,aAAa,EAAE,CAE5E;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,EAAE,CAExC"}
@@ -0,0 +1,29 @@
1
+ import { SFAG_ORCHESTRATOR } from "./content/core/sfag-orchestrator.js";
2
+ import { SFAG_SPEC_CREATOR } from "./content/core/sfag-spec-creator.js";
3
+ import { SFAG_TICKET_IMPLEMENTER } from "./content/core/sfag-ticket-implementer.js";
4
+ import { SFAG_PACKAGE_RESEARCHER } from "./content/research/sfag-package-researcher.js";
5
+ const AGENT_TEMPLATES = [
6
+ SFAG_ORCHESTRATOR,
7
+ SFAG_SPEC_CREATOR,
8
+ SFAG_TICKET_IMPLEMENTER,
9
+ SFAG_PACKAGE_RESEARCHER
10
+ ];
11
+ function getAgentTemplates() {
12
+ return AGENT_TEMPLATES;
13
+ }
14
+ function getAgentTemplate(name) {
15
+ return AGENT_TEMPLATES.find((t) => t.name === name);
16
+ }
17
+ function getAgentsByCategory(category) {
18
+ return AGENT_TEMPLATES.filter((t) => t.category === category);
19
+ }
20
+ function getAgentNames() {
21
+ return AGENT_TEMPLATES.map((t) => t.name);
22
+ }
23
+ export {
24
+ getAgentNames,
25
+ getAgentTemplate,
26
+ getAgentTemplates,
27
+ getAgentsByCategory
28
+ };
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/cli/templates/agents/index.ts"],"sourcesContent":["/**\n * Agent Templates Module\n *\n * Defines all SpecForge agent templates for scaffolding to AI CLI tools.\n */\n\nimport type { AgentTemplate, AgentCategory } from '../../commands/scaffold/agent-types.js';\n\nimport { SFAG_ORCHESTRATOR } from './content/core/sfag-orchestrator.js';\nimport { SFAG_SPEC_CREATOR } from './content/core/sfag-spec-creator.js';\nimport { SFAG_TICKET_IMPLEMENTER } from './content/core/sfag-ticket-implementer.js';\nimport { SFAG_PACKAGE_RESEARCHER } from './content/research/sfag-package-researcher.js';\n\nconst AGENT_TEMPLATES: AgentTemplate[] = [\n SFAG_ORCHESTRATOR,\n SFAG_SPEC_CREATOR,\n SFAG_TICKET_IMPLEMENTER,\n SFAG_PACKAGE_RESEARCHER,\n];\n\n/**\n * Get all agent templates\n */\nexport function getAgentTemplates(): AgentTemplate[] {\n return AGENT_TEMPLATES;\n}\n\n/**\n * Get a specific agent template by name\n */\nexport function getAgentTemplate(name: string): AgentTemplate | undefined {\n return AGENT_TEMPLATES.find(t => t.name === name);\n}\n\n/**\n * Get agent templates by category\n */\nexport function getAgentsByCategory(category: AgentCategory): AgentTemplate[] {\n return AGENT_TEMPLATES.filter(t => t.category === category);\n}\n\n/**\n * Get all agent template names\n */\nexport function getAgentNames(): string[] {\n return AGENT_TEMPLATES.map(t => t.name);\n}\n"],"mappings":"AAQA,SAAS,yBAAyB;AAClC,SAAS,yBAAyB;AAClC,SAAS,+BAA+B;AACxC,SAAS,+BAA+B;AAExC,MAAM,kBAAmC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKO,SAAS,oBAAqC;AACnD,SAAO;AACT;AAKO,SAAS,iBAAiB,MAAyC;AACxE,SAAO,gBAAgB,KAAK,OAAK,EAAE,SAAS,IAAI;AAClD;AAKO,SAAS,oBAAoB,UAA0C;AAC5E,SAAO,gBAAgB,OAAO,OAAK,EAAE,aAAa,QAAQ;AAC5D;AAKO,SAAS,gBAA0B;AACxC,SAAO,gBAAgB,IAAI,OAAK,EAAE,IAAI;AACxC;","names":[]}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Command Templates Module
3
+ *
4
+ * Defines all SpecForge slash commands with their full markdown content
5
+ * for scaffolding to AI CLI tools.
6
+ */
7
+ import type { CommandTemplate } from '../commands/scaffold/types.js';
8
+ export declare function getCommandTemplates(): CommandTemplate[];
9
+ /**
10
+ * Get a specific command template by name
11
+ */
12
+ export declare function getCommandTemplate(name: string): CommandTemplate | undefined;
13
+ /**
14
+ * Get command templates by category
15
+ */
16
+ export declare function getCommandsByCategory(category: string): CommandTemplate[];
17
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../../src/cli/templates/commands.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAWrE,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,CAyDvD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE5E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAEzE"}
@@ -0,0 +1,78 @@
1
+ import { SF_INIT_CONTENT } from "./content/sf-init.js";
2
+ import { SF_STATUS_CONTENT } from "./content/sf-status.js";
3
+ import { SF_RESET_CONTENT } from "./content/sf-reset.js";
4
+ import { SF_ANALYZE_BLOCKERS_CONTENT } from "./content/sf-blockers.js";
5
+ import { SF_CONTEXT_CONTENT } from "./content/sf-context.js";
6
+ import { SF_SEARCH_CONTENT } from "./content/sf-search.js";
7
+ import { SF_COMMIT_CONTENT } from "./content/sf-commit.js";
8
+ import { SF_HELP_CONTENT } from "./content/sf-help.js";
9
+ function getCommandTemplates() {
10
+ return [
11
+ {
12
+ name: "sf-init",
13
+ description: "Initialize ticket system for a specification",
14
+ argumentHint: "[specification-id]",
15
+ content: SF_INIT_CONTENT,
16
+ category: "Setup"
17
+ },
18
+ {
19
+ name: "sf-context",
20
+ description: "View or switch working context",
21
+ argumentHint: "[project-or-spec-id]",
22
+ content: SF_CONTEXT_CONTENT,
23
+ category: "Setup"
24
+ },
25
+ {
26
+ name: "sf-status",
27
+ description: "Display implementation status with consolidated tools",
28
+ argumentHint: "[specification-id]",
29
+ content: SF_STATUS_CONTENT,
30
+ category: "Status"
31
+ },
32
+ {
33
+ name: "sf-analyze-blockers",
34
+ description: "Analyze blockers and dependency bottlenecks",
35
+ content: SF_ANALYZE_BLOCKERS_CONTENT,
36
+ category: "Status"
37
+ },
38
+ {
39
+ name: "sf-search",
40
+ description: "Search tickets by text, tags, or filters",
41
+ argumentHint: "<query>",
42
+ content: SF_SEARCH_CONTENT,
43
+ category: "Review"
44
+ },
45
+ {
46
+ name: "sf-reset",
47
+ description: "Reset ticket statuses with dependency awareness",
48
+ argumentHint: "[specification-id]",
49
+ content: SF_RESET_CONTENT,
50
+ category: "Utilities"
51
+ },
52
+ {
53
+ name: "sf-commit",
54
+ description: "Commit changes with SpecForge ticket metadata",
55
+ argumentHint: "[ticket-id]",
56
+ content: SF_COMMIT_CONTENT,
57
+ category: "Utilities"
58
+ },
59
+ {
60
+ name: "sf-help",
61
+ description: "Quick reference for all SpecForge commands",
62
+ content: SF_HELP_CONTENT,
63
+ category: "Utilities"
64
+ }
65
+ ];
66
+ }
67
+ function getCommandTemplate(name) {
68
+ return getCommandTemplates().find((t) => t.name === name);
69
+ }
70
+ function getCommandsByCategory(category) {
71
+ return getCommandTemplates().filter((t) => t.category === category);
72
+ }
73
+ export {
74
+ getCommandTemplate,
75
+ getCommandTemplates,
76
+ getCommandsByCategory
77
+ };
78
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/cli/templates/commands.ts"],"sourcesContent":["/**\n * Command Templates Module\n *\n * Defines all SpecForge slash commands with their full markdown content\n * for scaffolding to AI CLI tools.\n */\n\nimport type { CommandTemplate } from '../commands/scaffold/types.js';\n\nimport { SF_INIT_CONTENT } from './content/sf-init.js';\nimport { SF_STATUS_CONTENT } from './content/sf-status.js';\nimport { SF_RESET_CONTENT } from './content/sf-reset.js';\nimport { SF_ANALYZE_BLOCKERS_CONTENT } from './content/sf-blockers.js';\nimport { SF_CONTEXT_CONTENT } from './content/sf-context.js';\nimport { SF_SEARCH_CONTENT } from './content/sf-search.js';\nimport { SF_COMMIT_CONTENT } from './content/sf-commit.js';\nimport { SF_HELP_CONTENT } from './content/sf-help.js';\n\nexport function getCommandTemplates(): CommandTemplate[] {\n return [\n {\n name: 'sf-init',\n description: 'Initialize ticket system for a specification',\n argumentHint: '[specification-id]',\n content: SF_INIT_CONTENT,\n category: 'Setup',\n },\n {\n name: 'sf-context',\n description: 'View or switch working context',\n argumentHint: '[project-or-spec-id]',\n content: SF_CONTEXT_CONTENT,\n category: 'Setup',\n },\n {\n name: 'sf-status',\n description: 'Display implementation status with consolidated tools',\n argumentHint: '[specification-id]',\n content: SF_STATUS_CONTENT,\n category: 'Status',\n },\n {\n name: 'sf-analyze-blockers',\n description: 'Analyze blockers and dependency bottlenecks',\n content: SF_ANALYZE_BLOCKERS_CONTENT,\n category: 'Status',\n },\n {\n name: 'sf-search',\n description: 'Search tickets by text, tags, or filters',\n argumentHint: '<query>',\n content: SF_SEARCH_CONTENT,\n category: 'Review',\n },\n {\n name: 'sf-reset',\n description: 'Reset ticket statuses with dependency awareness',\n argumentHint: '[specification-id]',\n content: SF_RESET_CONTENT,\n category: 'Utilities',\n },\n {\n name: 'sf-commit',\n description: 'Commit changes with SpecForge ticket metadata',\n argumentHint: '[ticket-id]',\n content: SF_COMMIT_CONTENT,\n category: 'Utilities',\n },\n {\n name: 'sf-help',\n description: 'Quick reference for all SpecForge commands',\n content: SF_HELP_CONTENT,\n category: 'Utilities',\n },\n ];\n}\n\n/**\n * Get a specific command template by name\n */\nexport function getCommandTemplate(name: string): CommandTemplate | undefined {\n return getCommandTemplates().find(t => t.name === name);\n}\n\n/**\n * Get command templates by category\n */\nexport function getCommandsByCategory(category: string): CommandTemplate[] {\n return getCommandTemplates().filter(t => t.category === category);\n}\n"],"mappings":"AASA,SAAS,uBAAuB;AAChC,SAAS,yBAAyB;AAClC,SAAS,wBAAwB;AACjC,SAAS,mCAAmC;AAC5C,SAAS,0BAA0B;AACnC,SAAS,yBAAyB;AAClC,SAAS,yBAAyB;AAClC,SAAS,uBAAuB;AAEzB,SAAS,sBAAyC;AACvD,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,cAAc;AAAA,MACd,SAAS;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,cAAc;AAAA,MACd,SAAS;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,cAAc;AAAA,MACd,SAAS;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,cAAc;AAAA,MACd,SAAS;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,cAAc;AAAA,MACd,SAAS;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,cAAc;AAAA,MACd,SAAS;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,aAAa;AAAA,MACb,SAAS;AAAA,MACT,UAAU;AAAA,IACZ;AAAA,EACF;AACF;AAKO,SAAS,mBAAmB,MAA2C;AAC5E,SAAO,oBAAoB,EAAE,KAAK,OAAK,EAAE,SAAS,IAAI;AACxD;AAKO,SAAS,sBAAsB,UAAqC;AACzE,SAAO,oBAAoB,EAAE,OAAO,OAAK,EAAE,aAAa,QAAQ;AAClE;","names":[]}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * SF-Analyze-Blockers Command Template
3
+ *
4
+ * Template for analyzing blockers and dependency bottlenecks.
5
+ */
6
+ export declare 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\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\nBLOCKER ANALYSIS\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}\n\nCRITICAL PATH\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\nLength: {pathLength} tickets\nImpact: {blockedCount} tickets blocked\n\nE{n}-T{m} \u2192 E{n}-T{m} \u2192 E{n}-T{m} \u2192 ...\n\nHIGH-IMPACT BLOCKERS\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 Blocking {count} tickets\n \u21B3 E{n}-T{m}, E{n}-T{m}, E{n}-T{m}\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}\n \u26A0 Waiting on: E{n}-T{m} ({status})\n\nRECOMMENDATIONS\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\u2022 Prioritize E{n}-T{m} to unblock {count} tickets\n\u2022 Review dependency chain for E{n}-T{m}\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- Identifies tickets blocking the most work\n- Shows critical path through implementation\n- Provides actionable recommendations\n";
7
+ //# sourceMappingURL=sf-blockers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sf-blockers.d.ts","sourceRoot":"","sources":["../../../../src/cli/templates/content/sf-blockers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,2BAA2B,osHAgEvC,CAAC"}