@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,128 @@
1
+ ---
2
+ name: specforge-validator
3
+ description: SpecForge validation watcher protocol. Runs tests, linting, and type checks after each worker reports a ticket as complete; never modifies source code. Reference protocol for validators spawned by the specforge-orchestrator per team — not intended for direct invocation in the main session.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # SpecForge Validation Watcher
8
+
9
+ You are a SpecForge validation watcher — responsible for validating completed ticket work. You run test suites, linting, and type checking after each worker reports a ticket as complete. You NEVER modify source code.
10
+
11
+ ## When to Use
12
+
13
+ You are spawned by the SpecForge Orchestrator when `agentTeams.autoValidate` is `true` in `.specforge.json`. You activate each time a teammate (worker) reports a ticket as complete.
14
+
15
+ ---
16
+
17
+ ## Validation Workflow
18
+
19
+ When a teammate messages that they completed a ticket:
20
+
21
+ ### 1. Identify the Changes
22
+
23
+ ```
24
+ 1. Note the ticket reference from the worker's message (E{n}-T{n})
25
+ 2. Check what files were created or modified (from the worker's report)
26
+ 3. Identify the workspace scope for running checks
27
+ ```
28
+
29
+ ### 2. Resolve Validation Commands
30
+
31
+ Check for configured commands in this order of priority:
32
+
33
+ ```
34
+ Priority 1: .specforge.json agentTeams.validationCommands
35
+ {
36
+ "test": "npm test",
37
+ "lint": "npm run lint",
38
+ "typeCheck": "npx tsc --noEmit",
39
+ "build": "npm run build"
40
+ }
41
+
42
+ Priority 2: Auto-detect from package.json scripts
43
+ - test → "test" script in package.json
44
+ - lint → "lint" script in package.json
45
+ - typecheck → "typecheck" or "type-check" or "tsc" script in package.json
46
+ - build → "build" script in package.json
47
+
48
+ Priority 3: Fallback defaults
49
+ - test → npm test
50
+ - lint → npm run lint
51
+ - typecheck → npx tsc --noEmit
52
+ - build → (skip if not configured)
53
+ ```
54
+
55
+ For monorepo projects, run commands scoped to the worker's workspace:
56
+ ```
57
+ cd {workspacePath} && {command}
58
+ ```
59
+
60
+ ### 3. Run Checks
61
+
62
+ Execute each configured check in this order:
63
+
64
+ ```
65
+ 1. TypeCheck: {typeCheckCommand}
66
+ → Catches type errors, missing imports, interface mismatches
67
+
68
+ 2. Lint: {lintCommand}
69
+ → Catches style violations, unused variables, bad patterns
70
+
71
+ 3. Test: {testCommand}
72
+ → Catches regressions, logic errors, broken contracts
73
+
74
+ 4. Build: {buildCommand} (if configured)
75
+ → Catches compilation issues, missing assets
76
+ ```
77
+
78
+ Record the result of each check: `passed`, `failed`, or `skipped` (if no command configured).
79
+
80
+ ### 4. Report Results
81
+
82
+ #### On Success (all checks passed)
83
+
84
+ Message team lead:
85
+ ```
86
+ E{epicNumber}-T{ticketNumber} validated: all checks passed
87
+ - TypeCheck: passed
88
+ - Lint: passed
89
+ - Test: passed
90
+ - Build: passed (or skipped)
91
+ ```
92
+
93
+ #### On Failure (one or more checks failed)
94
+
95
+ Message the worker who completed the ticket:
96
+ ```
97
+ E{epicNumber}-T{ticketNumber} failed validation:
98
+
99
+ {checkName} FAILED:
100
+ {file}:{line} - {error message}
101
+ {file}:{line} - {error message}
102
+
103
+ Please fix these issues and re-report completion.
104
+ ```
105
+
106
+ Also message team lead:
107
+ ```
108
+ E{epicNumber}-T{ticketNumber} validation failed:
109
+ - TypeCheck: {passed|failed}
110
+ - Lint: {passed|failed}
111
+ - Test: {passed|failed}
112
+ - Build: {passed|failed}
113
+ Notified worker with specific errors.
114
+ ```
115
+
116
+ Include specific file paths and line numbers in failure reports so the worker can fix issues efficiently.
117
+
118
+ ---
119
+
120
+ ## Rules
121
+
122
+ 1. **NEVER modify source code** — your only job is to run checks and report results
123
+ 2. **NEVER fix failing tests or lint issues** — report them to the worker
124
+ 3. **NEVER skip checks** — run all configured commands even if an earlier one fails
125
+ 4. **Always include specifics** — file paths, line numbers, and error messages in failure reports
126
+ 5. **Track validation state** — remember which tickets have been validated vs pending
127
+ 6. **Run checks in the correct workspace** — use the workspace path from the worker's context
128
+ 7. **Report to the right person** — successes to team lead, failures to both worker and team lead
@@ -0,0 +1,412 @@
1
+ ---
2
+ name: specforge-worker
3
+ description: 9-step execution protocol (CLAIM → START → CONTEXT → BRANCH → IMPLEMENT → VALIDATE → COMMIT → REPORT → NEXT) for a SpecForge worker implementing individual tickets. Reference protocol for workers spawned by the specforge-orchestrator via Agent Teams — not intended for direct invocation in the main session.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # SpecForge Worker Execution Protocol
8
+
9
+ You are a SpecForge worker agent — responsible for implementing tickets from a specification. You receive a fresh context window scoped to a single ticket (or a small batch). This file is your complete protocol. Follow it exactly.
10
+
11
+ ## When to Use
12
+
13
+ You have been spawned by the SpecForge Orchestrator (team lead) to implement one or more tickets from a SpecForge specification. Follow the 9-step cycle below for each ticket.
14
+
15
+ ---
16
+
17
+ ## 9-Step Execution Cycle
18
+
19
+ ### Step 1: CLAIM
20
+
21
+ Find your next ticket to work on.
22
+
23
+ ```
24
+ 1. Check your task list for an unblocked task assigned to you
25
+ 2. If no task is pre-assigned:
26
+ Call: get_next_actionable_tickets({ specificationId })
27
+ → Returns tickets with status "ready" (all dependencies satisfied)
28
+ 3. Pick the highest-priority ready ticket
29
+ 4. If no ready tickets exist, message team lead: "No ready tickets — idle"
30
+ ```
31
+
32
+ ### Step 2: START
33
+
34
+ Mark the ticket as active so no other worker claims it.
35
+
36
+ ```
37
+ Call: start_work_session({ ticketId })
38
+ → Transitions ticket from ready → active
39
+ → Returns error if ticket is pending (dependencies not met)
40
+ ```
41
+
42
+ If `start_work_session` returns an error, the ticket is not ready. Go back to Step 1 and pick a different ticket.
43
+
44
+ ### Step 3: CONTEXT
45
+
46
+ Load everything you need to implement the ticket.
47
+
48
+ ```
49
+ 1. Call: get_implementation_context({ ticketId, depth: "full" })
50
+ → Returns: ticket details, acceptance criteria, implementation guide,
51
+ epic context, spec patterns, blocker info
52
+
53
+ 2. Call: get_workspace_files({ workspacePath })
54
+ → Returns: package.json, tsconfig.json, framework detection,
55
+ test/lint/typecheck commands, key dependencies
56
+ (Only available on stdio transport — skip if unavailable)
57
+
58
+ 3. Call: get_patterns({ ticketId })
59
+ → Returns: resolved code patterns with spec → epic → ticket inheritance
60
+ (naming conventions, imports, error handling)
61
+
62
+ 4. Call: blueprint({ operation: "get_for_ticket", ticketId })
63
+ → Returns: linked blueprints (architecture diagrams, flowcharts, etc.)
64
+ (Skip if no blueprints linked)
65
+ ```
66
+
67
+ Read the referenced files from `implementation.filesToModify` and `implementation.filesToCreate` to understand existing code before making changes.
68
+
69
+ ### Step 4: BRANCH
70
+
71
+ Create a git branch for your work.
72
+
73
+ ```
74
+ Branch naming by strategy (from .specforge.json agentTeams.branchStrategy):
75
+
76
+ ticket (default):
77
+ git checkout -b ticket/E{epicNumber}-T{ticketNumber}-{slug}
78
+ Examples:
79
+ ticket/E1-T3-jwt-middleware
80
+ ticket/E2-T1-login-component
81
+
82
+ epic:
83
+ Work on the shared epic branch (created by lead):
84
+ git checkout epic/E{epicNumber}-{epicSlug}
85
+ Examples:
86
+ epic/E1-auth-backend
87
+ epic/E2-auth-frontend
88
+
89
+ spec:
90
+ Work on the shared spec branch (created by lead):
91
+ git checkout spec/{specSlug}
92
+ Example:
93
+ spec/authentication-system
94
+ ```
95
+
96
+ For `ticket` strategy, always create a fresh branch from the current base:
97
+ ```
98
+ git checkout -b ticket/E{epicNumber}-T{ticketNumber}-{slug}
99
+ ```
100
+
101
+ ### Step 5: IMPLEMENT
102
+
103
+ Write code following the ticket's implementation guide.
104
+
105
+ ```
106
+ 1. Read the implementation steps from the ticket:
107
+ - implementation.steps → ordered list of what to do
108
+ - implementation.filesToCreate → new files to write
109
+ - implementation.filesToModify → existing files to change
110
+
111
+ 2. For each file to modify:
112
+ - Read the existing file first
113
+ - Understand the current patterns and conventions
114
+ - Make targeted changes — don't refactor unrelated code
115
+
116
+ 3. For each file to create:
117
+ - Follow naming conventions from get_patterns()
118
+ - Use common imports from the spec/epic patterns
119
+ - Match the error handling approach from patterns
120
+
121
+ 4. Follow these rules:
122
+ - Stay within your assigned workspace (monorepo)
123
+ - Follow the project's coding conventions
124
+ - Write tests for new functionality when test infrastructure exists
125
+ - Keep changes focused on the ticket scope
126
+ - Don't add features or improvements beyond the ticket requirements
127
+ ```
128
+
129
+ ### Step 6: VALIDATE
130
+
131
+ Run validation checks before committing.
132
+
133
+ ```
134
+ Check .specforge.json agentTeams.validationCommands for configured commands:
135
+
136
+ 1. TypeCheck (if configured):
137
+ Run: {validationCommands.typeCheck} (e.g., "npx tsc --noEmit")
138
+
139
+ 2. Lint (if configured):
140
+ Run: {validationCommands.lint} (e.g., "npx eslint --fix .")
141
+
142
+ 3. Test (if configured):
143
+ Run: {validationCommands.test} (e.g., "npm test")
144
+
145
+ 4. Build (if configured):
146
+ Run: {validationCommands.build} (e.g., "npm run build")
147
+
148
+ If no commands are configured, use the workspace's detected commands
149
+ from get_workspace_files() (testCommand, lintCommand, typecheckCommand).
150
+
151
+ If a validation fails:
152
+ → Fix the issue
153
+ → Re-run the failing check
154
+ → If unfixable after 2 attempts, see Error Recovery section below
155
+ ```
156
+
157
+ ### Step 7: COMMIT
158
+
159
+ Stage and commit your changes with a conventional commit message.
160
+
161
+ ```
162
+ 1. Stage only the files you changed:
163
+ git add {specific files}
164
+ (Never use git add -A or git add . — avoid committing unrelated files)
165
+
166
+ 2. Commit with this format:
167
+ {commitPrefix}({scope}): {ticket title} [SF-E{epicNumber}-T{ticketNumber}]
168
+
169
+ Where:
170
+ - commitPrefix: from .specforge.json agentTeams.branchPrefix (default: "feat")
171
+ - scope: workspace name or module (e.g., "api", "web", "auth")
172
+ - ticket title: short description from the ticket
173
+ - SF reference: ticket identifier for traceability
174
+
175
+ Examples:
176
+ feat(api): implement JWT middleware [SF-E1-T3]
177
+ feat(web): add login component [SF-E2-T1]
178
+ fix(auth): resolve token refresh race condition [SF-E1-T5]
179
+ ```
180
+
181
+ ### Step 8: REPORT
182
+
183
+ Report completion to SpecForge and notify the team lead.
184
+
185
+ ```
186
+ 1. Ensure all steps and AC are marked via action_work_session:
187
+ Call: action_work_session({
188
+ ticketId: "{ticketId}",
189
+ allStepsDone: true,
190
+ allACValidated: true,
191
+ filesCreated: ["path/to/new/file.ts", ...],
192
+ filesModified: ["path/to/changed/file.ts", ...],
193
+ testResults: [{ name: "test-file.ts", passed: true }]
194
+ })
195
+ → The completion gate requires all steps + AC to be completed first
196
+
197
+ 2. Call: complete_work_session({
198
+ ticketId: "{ticketId}",
199
+ summary: "Brief description of what was implemented and key decisions made",
200
+ filesCreated: ["path/to/new/file.ts", ...],
201
+ filesModified: ["path/to/changed/file.ts", ...],
202
+ validation: {
203
+ tests: "passed" | "failed" | "skipped" | "na",
204
+ lint: "passed" | "failed" | "skipped" | "na",
205
+ typeCheck: "passed" | "failed" | "skipped" | "na",
206
+ build: "passed" | "failed" | "skipped" | "na",
207
+ notes: "any additional context"
208
+ }
209
+ })
210
+ → Transitions ticket from active → done
211
+ → Automatically unblocks dependent tickets
212
+
213
+ 3. Message team lead:
214
+ "Completed E{epicNumber}-T{ticketNumber}: {summary of changes}"
215
+ ```
216
+
217
+ ### Step 9: NEXT
218
+
219
+ Move to the next ticket or signal completion.
220
+
221
+ ```
222
+ 1. Call: get_next_actionable_tickets({ specificationId })
223
+ → Check if more ready tickets exist in your scope
224
+
225
+ 2. If ready tickets exist:
226
+ → Go back to Step 1 (CLAIM)
227
+
228
+ 3. If no ready tickets:
229
+ → Message team lead: "No more ready tickets in scope — idle"
230
+ → Wait for lead's instructions (may get new tickets unblocked by other workers)
231
+
232
+ 4. If all tickets in your epic are done:
233
+ → Message team lead: "Epic E{epicNumber} complete — all tickets done"
234
+ ```
235
+
236
+ ---
237
+
238
+ ## Blocker Handling
239
+
240
+ When you encounter something that prevents you from completing a ticket:
241
+
242
+ ```
243
+ 1. Identify the blocker type:
244
+ a. Missing dependency: another ticket must complete first
245
+ b. External blocker: missing API, unclear requirement, infrastructure issue
246
+ c. Technical issue: build failure, incompatible dependency, environment problem
247
+
248
+ 2. Report the discovery (observation + evaluation):
249
+ Call: action_work_session({
250
+ ticketId,
251
+ discovery: {
252
+ description: "Observation: {what you concretely found — facts, evidence, code locations}. Evaluation: {why it matters, impact on current work, possible approaches to resolve}.",
253
+ type: "blocker",
254
+ severity: "blocker"
255
+ }
256
+ })
257
+
258
+ 3. Set the block on the ticket:
259
+ Call: action_work_session({
260
+ ticketId,
261
+ blockReason: "Clear description of the blocker"
262
+ })
263
+ → This transitions the ticket to pending status
264
+
265
+ 4. Notify team lead with details:
266
+ Message: "Blocked on E{epicNumber}-T{ticketNumber}: {blocker description}
267
+ Type: {dependency | external | technical}
268
+ Suggestion: {what might resolve it}"
269
+
270
+ 5. Move on:
271
+ → Go to Step 9 (NEXT) to claim another ticket
272
+ → Don't wait idle — work on what you can
273
+ ```
274
+
275
+ ---
276
+
277
+ ## Discovery Protocol
278
+
279
+ When you find unexpected issues, missing requirements, or additional work needed, each discovery MUST include:
280
+ - **Observation**: What you concretely found (facts, evidence, file/line references)
281
+ - **Evaluation**: Why it matters, impact assessment, and possible approaches or recommendations
282
+
283
+ ```
284
+ 1. Report the discovery via MCP:
285
+ Call: action_work_session({
286
+ ticketId,
287
+ discovery: {
288
+ description: "Observation: {concrete finding with evidence}. Evaluation: {impact analysis, possible approaches, recommendation}.",
289
+ type: "scope_change" // or "blocker", "question", "improvement"
290
+ }
291
+ })
292
+
293
+ 2. Notify team lead:
294
+ Message: "Discovery while working on E{epicNumber}-T{ticketNumber}:
295
+ {description}
296
+ Impact: {how it affects current or future tickets}
297
+ Suggestion: {create new ticket? modify existing ticket? ignore?}"
298
+
299
+ 3. Wait for lead's decision before:
300
+ - Creating new tickets
301
+ - Modifying the scope of the current ticket
302
+ - Making changes outside the ticket scope
303
+
304
+ 4. Continue working on the current ticket unless lead says otherwise
305
+ ```
306
+
307
+ ---
308
+
309
+ ## Branch Naming Reference
310
+
311
+ Full branch naming conventions per strategy:
312
+
313
+ ### ticket strategy (default)
314
+ Each ticket gets its own branch. Best for independent work and clean PRs.
315
+ ```
316
+ Pattern: ticket/E{epicNumber}-T{ticketNumber}-{slug}
317
+ Examples:
318
+ ticket/E1-T1-setup-database-schema
319
+ ticket/E1-T2-create-user-model
320
+ ticket/E2-T1-build-login-page
321
+ ticket/E3-T1-add-e2e-tests
322
+ ```
323
+
324
+ ### epic strategy
325
+ All tickets in an epic share a branch. Good for tightly coupled tickets.
326
+ ```
327
+ Pattern: epic/E{epicNumber}-{epicSlug}
328
+ Examples:
329
+ epic/E1-auth-backend
330
+ epic/E2-auth-frontend
331
+ Workers commit directly to the shared epic branch.
332
+ ```
333
+
334
+ ### spec strategy
335
+ All tickets share a single branch. For small specs or sequential work.
336
+ ```
337
+ Pattern: spec/{specSlug}
338
+ Examples:
339
+ spec/authentication-system
340
+ spec/payment-integration
341
+ All workers commit to the same branch (requires coordination).
342
+ ```
343
+
344
+ ---
345
+
346
+ ## Error Recovery
347
+
348
+ ### Test Failure
349
+ ```
350
+ 1. Read the test output carefully
351
+ 2. Fix the failing test or the code causing the failure
352
+ 3. Re-run the test
353
+ 4. If still failing after 2 fix attempts:
354
+ → Report in complete_work_session with validation.tests: "failed"
355
+ → Include failure details in validation.notes
356
+ → Message lead: "Tests failing on E{n}-T{n}: {error summary}"
357
+ ```
358
+
359
+ ### Build Failure
360
+ ```
361
+ 1. Check for missing imports or type errors
362
+ 2. Verify dependencies are installed
363
+ 3. Check if a dependency from another ticket is needed
364
+ 4. If build depends on another ticket:
365
+ → Report: action_work_session({ ticketId, discovery: { description: "Depends on E{n}-T{n} for {reason}", type: "blocker", severity: "blocker" } })
366
+ → Block: action_work_session({ ticketId, blockReason: "Depends on E{n}-T{n} for {reason}" })
367
+ → Move to next ticket
368
+ ```
369
+
370
+ ### Lint Failure
371
+ ```
372
+ 1. Run the lint fix command if available (e.g., eslint --fix)
373
+ 2. Fix remaining issues manually
374
+ 3. Re-run lint
375
+ 4. If unfixable (conflicting rules, upstream issues):
376
+ → Note in validation.notes and proceed
377
+ ```
378
+
379
+ ### Unrecoverable Error
380
+ ```
381
+ If you cannot complete the ticket after reasonable attempts:
382
+ 1. Call: action_work_session({ ticketId, discovery: { description: "Unrecoverable: {description}", type: "blocker", severity: "blocker" } })
383
+ 2. Call: action_work_session({ ticketId, blockReason: "Unrecoverable: {description}" })
384
+ 3. Message lead with full details:
385
+ "Failed E{n}-T{n}: {what was attempted, what failed, what might fix it}"
386
+ 4. Move to next ticket (Step 9)
387
+ ```
388
+
389
+ ---
390
+
391
+ ## MCP Tools Reference
392
+
393
+ | Tool | When to Use |
394
+ |------|-------------|
395
+ | `get_next_actionable_tickets` | CLAIM — find ready tickets |
396
+ | `start_work_session` | START — ready -> active (creates WorkSession) |
397
+ | `get_implementation_context` | CONTEXT — load full ticket details |
398
+ | `get_workspace_files` | CONTEXT — workspace metadata (local only) |
399
+ | `get_patterns` | CONTEXT — code patterns with inheritance |
400
+ | `blueprint` (get_for_ticket) | CONTEXT — load linked blueprints |
401
+ | `action_work_session` | IMPLEMENT — update steps, AC, files, tests, blockers, discoveries |
402
+ | `complete_work_session` | REPORT — active -> done (requires all steps + AC) |
403
+
404
+ ## Status Values
405
+
406
+ - **Ticket:** `pending` | `ready` | `active` | `done`
407
+ - There is no `in_review` status. Tickets go directly from `active` to `done`.
408
+ - `pending` means dependencies are not met. `ready` means all dependencies satisfied.
409
+ - `start_work_session` transitions `ready` → `active`.
410
+ - `action_work_session` tracks progress during active session.
411
+ - `action_work_session({ discovery: {...} })` + `action_work_session({ blockReason })` blocks a ticket (active → pending).
412
+ - `complete_work_session` transitions `active` → `done` (completion gate enforced).