@specforge/canary-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 (565) 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/node_modules/@specforge/types/dist/api/bulk.d.ts +133 -0
  362. package/node_modules/@specforge/types/dist/api/bulk.d.ts.map +1 -0
  363. package/node_modules/@specforge/types/dist/api/bulk.js +7 -0
  364. package/node_modules/@specforge/types/dist/api/bulk.js.map +1 -0
  365. package/node_modules/@specforge/types/dist/api/feedback.d.ts +22 -0
  366. package/node_modules/@specforge/types/dist/api/feedback.d.ts.map +1 -0
  367. package/node_modules/@specforge/types/dist/api/feedback.js +5 -0
  368. package/node_modules/@specforge/types/dist/api/feedback.js.map +1 -0
  369. package/node_modules/@specforge/types/dist/api/index.d.ts +6 -0
  370. package/node_modules/@specforge/types/dist/api/index.d.ts.map +1 -0
  371. package/node_modules/@specforge/types/dist/api/index.js +6 -0
  372. package/node_modules/@specforge/types/dist/api/index.js.map +1 -0
  373. package/node_modules/@specforge/types/dist/api/lists.d.ts +55 -0
  374. package/node_modules/@specforge/types/dist/api/lists.d.ts.map +1 -0
  375. package/node_modules/@specforge/types/dist/api/lists.js +8 -0
  376. package/node_modules/@specforge/types/dist/api/lists.js.map +1 -0
  377. package/node_modules/@specforge/types/dist/api/lookups.d.ts +92 -0
  378. package/node_modules/@specforge/types/dist/api/lookups.d.ts.map +1 -0
  379. package/node_modules/@specforge/types/dist/api/lookups.js +2 -0
  380. package/node_modules/@specforge/types/dist/api/lookups.js.map +1 -0
  381. package/node_modules/@specforge/types/dist/api/responses.d.ts +92 -0
  382. package/node_modules/@specforge/types/dist/api/responses.d.ts.map +1 -0
  383. package/node_modules/@specforge/types/dist/api/responses.js +9 -0
  384. package/node_modules/@specforge/types/dist/api/responses.js.map +1 -0
  385. package/node_modules/@specforge/types/dist/index.d.ts +4 -0
  386. package/node_modules/@specforge/types/dist/index.d.ts.map +1 -0
  387. package/node_modules/@specforge/types/dist/index.js +4 -0
  388. package/node_modules/@specforge/types/dist/index.js.map +1 -0
  389. package/node_modules/@specforge/types/dist/mcp/index.d.ts +2 -0
  390. package/node_modules/@specforge/types/dist/mcp/index.d.ts.map +1 -0
  391. package/node_modules/@specforge/types/dist/mcp/index.js +2 -0
  392. package/node_modules/@specforge/types/dist/mcp/index.js.map +1 -0
  393. package/node_modules/@specforge/types/dist/mcp/tools/action-planning-session.d.ts +44 -0
  394. package/node_modules/@specforge/types/dist/mcp/tools/action-planning-session.d.ts.map +1 -0
  395. package/node_modules/@specforge/types/dist/mcp/tools/action-planning-session.js +5 -0
  396. package/node_modules/@specforge/types/dist/mcp/tools/action-planning-session.js.map +1 -0
  397. package/node_modules/@specforge/types/dist/mcp/tools/action-review-session.d.ts +68 -0
  398. package/node_modules/@specforge/types/dist/mcp/tools/action-review-session.d.ts.map +1 -0
  399. package/node_modules/@specforge/types/dist/mcp/tools/action-review-session.js +7 -0
  400. package/node_modules/@specforge/types/dist/mcp/tools/action-review-session.js.map +1 -0
  401. package/node_modules/@specforge/types/dist/mcp/tools/action-work-session.d.ts +133 -0
  402. package/node_modules/@specforge/types/dist/mcp/tools/action-work-session.d.ts.map +1 -0
  403. package/node_modules/@specforge/types/dist/mcp/tools/action-work-session.js +8 -0
  404. package/node_modules/@specforge/types/dist/mcp/tools/action-work-session.js.map +1 -0
  405. package/node_modules/@specforge/types/dist/mcp/tools/complete-planning-session.d.ts +21 -0
  406. package/node_modules/@specforge/types/dist/mcp/tools/complete-planning-session.d.ts.map +1 -0
  407. package/node_modules/@specforge/types/dist/mcp/tools/complete-planning-session.js +5 -0
  408. package/node_modules/@specforge/types/dist/mcp/tools/complete-planning-session.js.map +1 -0
  409. package/node_modules/@specforge/types/dist/mcp/tools/complete-review-session.d.ts +21 -0
  410. package/node_modules/@specforge/types/dist/mcp/tools/complete-review-session.d.ts.map +1 -0
  411. package/node_modules/@specforge/types/dist/mcp/tools/complete-review-session.js +8 -0
  412. package/node_modules/@specforge/types/dist/mcp/tools/complete-review-session.js.map +1 -0
  413. package/node_modules/@specforge/types/dist/mcp/tools/complete-work-session.d.ts +42 -0
  414. package/node_modules/@specforge/types/dist/mcp/tools/complete-work-session.d.ts.map +1 -0
  415. package/node_modules/@specforge/types/dist/mcp/tools/complete-work-session.js +8 -0
  416. package/node_modules/@specforge/types/dist/mcp/tools/complete-work-session.js.map +1 -0
  417. package/node_modules/@specforge/types/dist/mcp/tools/create-specification.d.ts +21 -0
  418. package/node_modules/@specforge/types/dist/mcp/tools/create-specification.d.ts.map +1 -0
  419. package/node_modules/@specforge/types/dist/mcp/tools/create-specification.js +5 -0
  420. package/node_modules/@specforge/types/dist/mcp/tools/create-specification.js.map +1 -0
  421. package/node_modules/@specforge/types/dist/mcp/tools/feedback.d.ts +59 -0
  422. package/node_modules/@specforge/types/dist/mcp/tools/feedback.d.ts.map +1 -0
  423. package/node_modules/@specforge/types/dist/mcp/tools/feedback.js +5 -0
  424. package/node_modules/@specforge/types/dist/mcp/tools/feedback.js.map +1 -0
  425. package/node_modules/@specforge/types/dist/mcp/tools/get-blocked-tickets.d.ts +33 -0
  426. package/node_modules/@specforge/types/dist/mcp/tools/get-blocked-tickets.d.ts.map +1 -0
  427. package/node_modules/@specforge/types/dist/mcp/tools/get-blocked-tickets.js +7 -0
  428. package/node_modules/@specforge/types/dist/mcp/tools/get-blocked-tickets.js.map +1 -0
  429. package/node_modules/@specforge/types/dist/mcp/tools/get-critical-path.d.ts +15 -0
  430. package/node_modules/@specforge/types/dist/mcp/tools/get-critical-path.d.ts.map +1 -0
  431. package/node_modules/@specforge/types/dist/mcp/tools/get-critical-path.js +5 -0
  432. package/node_modules/@specforge/types/dist/mcp/tools/get-critical-path.js.map +1 -0
  433. package/node_modules/@specforge/types/dist/mcp/tools/get-dependency-tree.d.ts +15 -0
  434. package/node_modules/@specforge/types/dist/mcp/tools/get-dependency-tree.d.ts.map +1 -0
  435. package/node_modules/@specforge/types/dist/mcp/tools/get-dependency-tree.js +5 -0
  436. package/node_modules/@specforge/types/dist/mcp/tools/get-dependency-tree.js.map +1 -0
  437. package/node_modules/@specforge/types/dist/mcp/tools/get-next-actionable-tickets.d.ts +28 -0
  438. package/node_modules/@specforge/types/dist/mcp/tools/get-next-actionable-tickets.d.ts.map +1 -0
  439. package/node_modules/@specforge/types/dist/mcp/tools/get-next-actionable-tickets.js +7 -0
  440. package/node_modules/@specforge/types/dist/mcp/tools/get-next-actionable-tickets.js.map +1 -0
  441. package/node_modules/@specforge/types/dist/mcp/tools/get-report.d.ts +44 -0
  442. package/node_modules/@specforge/types/dist/mcp/tools/get-report.d.ts.map +1 -0
  443. package/node_modules/@specforge/types/dist/mcp/tools/get-report.js +8 -0
  444. package/node_modules/@specforge/types/dist/mcp/tools/get-report.js.map +1 -0
  445. package/node_modules/@specforge/types/dist/mcp/tools/get.d.ts +23 -0
  446. package/node_modules/@specforge/types/dist/mcp/tools/get.d.ts.map +1 -0
  447. package/node_modules/@specforge/types/dist/mcp/tools/get.js +7 -0
  448. package/node_modules/@specforge/types/dist/mcp/tools/get.js.map +1 -0
  449. package/node_modules/@specforge/types/dist/mcp/tools/index.d.ts +23 -0
  450. package/node_modules/@specforge/types/dist/mcp/tools/index.d.ts.map +1 -0
  451. package/node_modules/@specforge/types/dist/mcp/tools/index.js +23 -0
  452. package/node_modules/@specforge/types/dist/mcp/tools/index.js.map +1 -0
  453. package/node_modules/@specforge/types/dist/mcp/tools/link-pull-request.d.ts +27 -0
  454. package/node_modules/@specforge/types/dist/mcp/tools/link-pull-request.d.ts.map +1 -0
  455. package/node_modules/@specforge/types/dist/mcp/tools/link-pull-request.js +5 -0
  456. package/node_modules/@specforge/types/dist/mcp/tools/link-pull-request.js.map +1 -0
  457. package/node_modules/@specforge/types/dist/mcp/tools/list.d.ts +23 -0
  458. package/node_modules/@specforge/types/dist/mcp/tools/list.d.ts.map +1 -0
  459. package/node_modules/@specforge/types/dist/mcp/tools/list.js +7 -0
  460. package/node_modules/@specforge/types/dist/mcp/tools/list.js.map +1 -0
  461. package/node_modules/@specforge/types/dist/mcp/tools/reopen-specification.d.ts +14 -0
  462. package/node_modules/@specforge/types/dist/mcp/tools/reopen-specification.d.ts.map +1 -0
  463. package/node_modules/@specforge/types/dist/mcp/tools/reopen-specification.js +7 -0
  464. package/node_modules/@specforge/types/dist/mcp/tools/reopen-specification.js.map +1 -0
  465. package/node_modules/@specforge/types/dist/mcp/tools/reset-work-session.d.ts +35 -0
  466. package/node_modules/@specforge/types/dist/mcp/tools/reset-work-session.d.ts.map +1 -0
  467. package/node_modules/@specforge/types/dist/mcp/tools/reset-work-session.js +5 -0
  468. package/node_modules/@specforge/types/dist/mcp/tools/reset-work-session.js.map +1 -0
  469. package/node_modules/@specforge/types/dist/mcp/tools/search.d.ts +47 -0
  470. package/node_modules/@specforge/types/dist/mcp/tools/search.d.ts.map +1 -0
  471. package/node_modules/@specforge/types/dist/mcp/tools/search.js +7 -0
  472. package/node_modules/@specforge/types/dist/mcp/tools/search.js.map +1 -0
  473. package/node_modules/@specforge/types/dist/mcp/tools/start-planning-session.d.ts +20 -0
  474. package/node_modules/@specforge/types/dist/mcp/tools/start-planning-session.d.ts.map +1 -0
  475. package/node_modules/@specforge/types/dist/mcp/tools/start-planning-session.js +5 -0
  476. package/node_modules/@specforge/types/dist/mcp/tools/start-planning-session.js.map +1 -0
  477. package/node_modules/@specforge/types/dist/mcp/tools/start-review-session.d.ts +17 -0
  478. package/node_modules/@specforge/types/dist/mcp/tools/start-review-session.d.ts.map +1 -0
  479. package/node_modules/@specforge/types/dist/mcp/tools/start-review-session.js +8 -0
  480. package/node_modules/@specforge/types/dist/mcp/tools/start-review-session.js.map +1 -0
  481. package/node_modules/@specforge/types/dist/mcp/tools/start-work-session.d.ts +16 -0
  482. package/node_modules/@specforge/types/dist/mcp/tools/start-work-session.d.ts.map +1 -0
  483. package/node_modules/@specforge/types/dist/mcp/tools/start-work-session.js +7 -0
  484. package/node_modules/@specforge/types/dist/mcp/tools/start-work-session.js.map +1 -0
  485. package/node_modules/@specforge/types/dist/runtime/epic.d.ts +105 -0
  486. package/node_modules/@specforge/types/dist/runtime/epic.d.ts.map +1 -0
  487. package/node_modules/@specforge/types/dist/runtime/epic.js +10 -0
  488. package/node_modules/@specforge/types/dist/runtime/epic.js.map +1 -0
  489. package/node_modules/@specforge/types/dist/runtime/index.d.ts +11 -0
  490. package/node_modules/@specforge/types/dist/runtime/index.d.ts.map +1 -0
  491. package/node_modules/@specforge/types/dist/runtime/index.js +11 -0
  492. package/node_modules/@specforge/types/dist/runtime/index.js.map +1 -0
  493. package/node_modules/@specforge/types/dist/runtime/project.d.ts +22 -0
  494. package/node_modules/@specforge/types/dist/runtime/project.d.ts.map +1 -0
  495. package/node_modules/@specforge/types/dist/runtime/project.js +9 -0
  496. package/node_modules/@specforge/types/dist/runtime/project.js.map +1 -0
  497. package/node_modules/@specforge/types/dist/runtime/specification.d.ts +111 -0
  498. package/node_modules/@specforge/types/dist/runtime/specification.d.ts.map +1 -0
  499. package/node_modules/@specforge/types/dist/runtime/specification.js +10 -0
  500. package/node_modules/@specforge/types/dist/runtime/specification.js.map +1 -0
  501. package/node_modules/@specforge/types/dist/runtime/ticket.d.ts +80 -0
  502. package/node_modules/@specforge/types/dist/runtime/ticket.d.ts.map +1 -0
  503. package/node_modules/@specforge/types/dist/runtime/ticket.js +12 -0
  504. package/node_modules/@specforge/types/dist/runtime/ticket.js.map +1 -0
  505. package/node_modules/@specforge/types/dist/schema/blueprint.d.ts +18 -0
  506. package/node_modules/@specforge/types/dist/schema/blueprint.d.ts.map +1 -0
  507. package/node_modules/@specforge/types/dist/schema/blueprint.js +3 -0
  508. package/node_modules/@specforge/types/dist/schema/blueprint.js.map +1 -0
  509. package/node_modules/@specforge/types/dist/schema/epic.d.ts +28 -0
  510. package/node_modules/@specforge/types/dist/schema/epic.d.ts.map +1 -0
  511. package/node_modules/@specforge/types/dist/schema/epic.js +3 -0
  512. package/node_modules/@specforge/types/dist/schema/epic.js.map +1 -0
  513. package/node_modules/@specforge/types/dist/schema/extensions/epic.extensions.d.ts +2 -0
  514. package/node_modules/@specforge/types/dist/schema/extensions/epic.extensions.d.ts.map +1 -0
  515. package/node_modules/@specforge/types/dist/schema/extensions/epic.extensions.js +4 -0
  516. package/node_modules/@specforge/types/dist/schema/extensions/epic.extensions.js.map +1 -0
  517. package/node_modules/@specforge/types/dist/schema/extensions/specification.extensions.d.ts +6 -0
  518. package/node_modules/@specforge/types/dist/schema/extensions/specification.extensions.d.ts.map +1 -0
  519. package/node_modules/@specforge/types/dist/schema/extensions/specification.extensions.js +3 -0
  520. package/node_modules/@specforge/types/dist/schema/extensions/specification.extensions.js.map +1 -0
  521. package/node_modules/@specforge/types/dist/schema/extensions/ticket.extensions.d.ts +6 -0
  522. package/node_modules/@specforge/types/dist/schema/extensions/ticket.extensions.d.ts.map +1 -0
  523. package/node_modules/@specforge/types/dist/schema/extensions/ticket.extensions.js +3 -0
  524. package/node_modules/@specforge/types/dist/schema/extensions/ticket.extensions.js.map +1 -0
  525. package/node_modules/@specforge/types/dist/schema/index.d.ts +7 -0
  526. package/node_modules/@specforge/types/dist/schema/index.d.ts.map +1 -0
  527. package/node_modules/@specforge/types/dist/schema/index.js +7 -0
  528. package/node_modules/@specforge/types/dist/schema/index.js.map +1 -0
  529. package/node_modules/@specforge/types/dist/schema/patterns.d.ts +6 -0
  530. package/node_modules/@specforge/types/dist/schema/patterns.d.ts.map +1 -0
  531. package/node_modules/@specforge/types/dist/schema/patterns.js +3 -0
  532. package/node_modules/@specforge/types/dist/schema/patterns.js.map +1 -0
  533. package/node_modules/@specforge/types/dist/schema/project.d.ts +7 -0
  534. package/node_modules/@specforge/types/dist/schema/project.d.ts.map +1 -0
  535. package/node_modules/@specforge/types/dist/schema/project.js +3 -0
  536. package/node_modules/@specforge/types/dist/schema/project.js.map +1 -0
  537. package/node_modules/@specforge/types/dist/schema/specification.d.ts +35 -0
  538. package/node_modules/@specforge/types/dist/schema/specification.d.ts.map +1 -0
  539. package/node_modules/@specforge/types/dist/schema/specification.js +3 -0
  540. package/node_modules/@specforge/types/dist/schema/specification.js.map +1 -0
  541. package/node_modules/@specforge/types/dist/schema/ticket.d.ts +69 -0
  542. package/node_modules/@specforge/types/dist/schema/ticket.d.ts.map +1 -0
  543. package/node_modules/@specforge/types/dist/schema/ticket.js +3 -0
  544. package/node_modules/@specforge/types/dist/schema/ticket.js.map +1 -0
  545. package/node_modules/@specforge/types/package.json +69 -0
  546. package/package.json +76 -0
  547. package/src/cli/templates/agents/content/core/sfag-orchestrator.ts +165 -0
  548. package/src/cli/templates/agents/content/core/sfag-spec-creator.ts +348 -0
  549. package/src/cli/templates/agents/content/core/sfag-ticket-implementer.ts +259 -0
  550. package/src/cli/templates/agents/content/research/sfag-package-researcher.ts +132 -0
  551. package/src/cli/templates/agents/index.ts +47 -0
  552. package/src/cli/templates/commands.ts +90 -0
  553. package/src/cli/templates/content/sf-blockers.ts +71 -0
  554. package/src/cli/templates/content/sf-commit.ts +81 -0
  555. package/src/cli/templates/content/sf-context.ts +65 -0
  556. package/src/cli/templates/content/sf-help.ts +44 -0
  557. package/src/cli/templates/content/sf-init.ts +64 -0
  558. package/src/cli/templates/content/sf-reset.ts +69 -0
  559. package/src/cli/templates/content/sf-search.ts +65 -0
  560. package/src/cli/templates/content/sf-status.ts +64 -0
  561. package/src/cli/templates/index.ts +16 -0
  562. package/src/cli/templates/skills/specforge-conventions.md +114 -0
  563. package/src/cli/templates/skills/specforge-orchestrator.md +409 -0
  564. package/src/cli/templates/skills/specforge-validator.md +128 -0
  565. package/src/cli/templates/skills/specforge-worker.md +412 -0
@@ -0,0 +1,188 @@
1
+ const validationRules = {
2
+ small: {
3
+ requiresImplementation: false,
4
+ requiresTechnicalDetails: false,
5
+ requiresNotes: false,
6
+ minSteps: 0,
7
+ minAcceptanceCriteria: 1,
8
+ requiresFileInfo: false
9
+ },
10
+ medium: {
11
+ requiresImplementation: true,
12
+ requiresTechnicalDetails: false,
13
+ requiresNotes: false,
14
+ minSteps: 2,
15
+ minAcceptanceCriteria: 2,
16
+ requiresFileInfo: false
17
+ },
18
+ large: {
19
+ requiresImplementation: true,
20
+ requiresTechnicalDetails: true,
21
+ requiresNotes: false,
22
+ minSteps: 4,
23
+ minAcceptanceCriteria: 3,
24
+ requiresFileInfo: true
25
+ },
26
+ xlarge: {
27
+ requiresImplementation: true,
28
+ requiresTechnicalDetails: true,
29
+ requiresNotes: true,
30
+ minSteps: 6,
31
+ minAcceptanceCriteria: 5,
32
+ requiresFileInfo: true
33
+ }
34
+ };
35
+ function validateTicket(ticket) {
36
+ const warnings = [];
37
+ const complexity = ticket.complexity || "medium";
38
+ const rules = validationRules[complexity];
39
+ if (rules.requiresImplementation) {
40
+ if (!ticket.implementation?.steps?.length) {
41
+ warnings.push({
42
+ code: "MISSING_IMPLEMENTATION",
43
+ message: `${complexity} tickets should have implementation steps`,
44
+ field: "implementation",
45
+ severity: "warning"
46
+ });
47
+ } else if (ticket.implementation.steps.length < rules.minSteps) {
48
+ warnings.push({
49
+ code: "INSUFFICIENT_STEPS",
50
+ message: `${complexity} tickets should have at least ${rules.minSteps} implementation steps (found ${ticket.implementation.steps.length})`,
51
+ field: "implementation.steps",
52
+ severity: "recommendation"
53
+ });
54
+ }
55
+ }
56
+ if (rules.requiresTechnicalDetails && !ticket.technicalDetails) {
57
+ warnings.push({
58
+ code: "MISSING_TECHNICAL_DETAILS",
59
+ message: `${complexity} tickets should have technicalDetails`,
60
+ field: "technicalDetails",
61
+ severity: "warning"
62
+ });
63
+ }
64
+ if (rules.requiresFileInfo) {
65
+ const hasFiles = (ticket.implementation?.filesToCreate?.length ?? 0) > 0 || (ticket.implementation?.filesToModify?.length ?? 0) > 0;
66
+ if (!hasFiles) {
67
+ warnings.push({
68
+ code: "MISSING_FILE_INFO",
69
+ message: `${complexity} tickets should specify files to create/modify`,
70
+ field: "implementation",
71
+ severity: "recommendation"
72
+ });
73
+ }
74
+ }
75
+ if (rules.requiresNotes && !ticket.notes) {
76
+ warnings.push({
77
+ code: "MISSING_NOTES",
78
+ message: `${complexity} tickets should have notes with context`,
79
+ field: "notes",
80
+ severity: "info"
81
+ });
82
+ }
83
+ const criteriaCount = ticket.acceptanceCriteria?.length || 0;
84
+ if (criteriaCount < rules.minAcceptanceCriteria) {
85
+ warnings.push({
86
+ code: "INSUFFICIENT_ACCEPTANCE_CRITERIA",
87
+ message: `${complexity} tickets should have at least ${rules.minAcceptanceCriteria} acceptance criteria (found ${criteriaCount})`,
88
+ field: "acceptanceCriteria",
89
+ severity: "recommendation"
90
+ });
91
+ }
92
+ const completenessScore = calculateCompletenessScore(ticket, rules);
93
+ return {
94
+ valid: true,
95
+ warnings,
96
+ completenessScore
97
+ };
98
+ }
99
+ function calculateCompletenessScore(ticket, rules) {
100
+ let score = 0;
101
+ let maxScore = 0;
102
+ if (rules.requiresImplementation) {
103
+ maxScore += 30;
104
+ if (ticket.implementation?.steps?.length) {
105
+ const stepRatio = Math.min(ticket.implementation.steps.length / rules.minSteps, 1);
106
+ score += 30 * stepRatio;
107
+ }
108
+ }
109
+ if (rules.requiresTechnicalDetails) {
110
+ maxScore += 25;
111
+ if (ticket.technicalDetails) {
112
+ score += 15;
113
+ const hasFiles = (ticket.implementation?.filesToCreate?.length ?? 0) > 0 || (ticket.implementation?.filesToModify?.length ?? 0) > 0;
114
+ if (hasFiles) score += 10;
115
+ }
116
+ }
117
+ if (rules.requiresNotes) {
118
+ maxScore += 15;
119
+ if (ticket.notes) score += 15;
120
+ }
121
+ maxScore += 30;
122
+ const criteriaRatio = Math.min(
123
+ (ticket.acceptanceCriteria?.length || 0) / rules.minAcceptanceCriteria,
124
+ 1
125
+ );
126
+ score += 30 * criteriaRatio;
127
+ return maxScore > 0 ? Math.round(score / maxScore * 100) : 100;
128
+ }
129
+ function filterWarningsByStrictness(warnings, strictness) {
130
+ switch (strictness) {
131
+ case "lenient":
132
+ return warnings.filter((w) => w.severity === "warning");
133
+ case "normal":
134
+ return warnings.filter((w) => w.severity !== "info");
135
+ case "strict":
136
+ return warnings;
137
+ }
138
+ }
139
+ function getComplexityRules(complexity) {
140
+ return validationRules[complexity];
141
+ }
142
+ function isValidComplexity(value) {
143
+ return value === "small" || value === "medium" || value === "large" || value === "xlarge";
144
+ }
145
+ function getComplexityDescription(complexity) {
146
+ const descriptions = {
147
+ small: "Simple tasks that can be completed quickly with minimal documentation",
148
+ medium: "Standard tasks requiring basic implementation planning",
149
+ large: "Complex tasks requiring detailed implementation and technical specs",
150
+ xlarge: "Major features requiring comprehensive documentation and planning"
151
+ };
152
+ return descriptions[complexity];
153
+ }
154
+ function suggestComplexity(ticket) {
155
+ let score = 0;
156
+ const stepCount = ticket.implementation?.steps?.length || 0;
157
+ if (stepCount >= 6) score += 3;
158
+ else if (stepCount >= 4) score += 2;
159
+ else if (stepCount >= 2) score += 1;
160
+ if (ticket.technicalDetails) {
161
+ score += 1;
162
+ if (ticket.technicalDetails.endpoints?.length) score += 1;
163
+ if (ticket.technicalDetails.database) score += 1;
164
+ }
165
+ if ((ticket.implementation?.filesToCreate?.length ?? 0) > 0 || (ticket.implementation?.filesToModify?.length ?? 0) > 0) {
166
+ score += 1;
167
+ }
168
+ if (ticket.notes) {
169
+ score += 1;
170
+ }
171
+ const criteriaCount = ticket.acceptanceCriteria?.length || 0;
172
+ if (criteriaCount >= 5) score += 2;
173
+ else if (criteriaCount >= 3) score += 1;
174
+ if (score >= 8) return "xlarge";
175
+ if (score >= 5) return "large";
176
+ if (score >= 2) return "medium";
177
+ return "small";
178
+ }
179
+ export {
180
+ filterWarningsByStrictness,
181
+ getComplexityDescription,
182
+ getComplexityRules,
183
+ isValidComplexity,
184
+ suggestComplexity,
185
+ validateTicket,
186
+ validationRules
187
+ };
188
+ //# sourceMappingURL=ticket-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/validation/ticket-validation.ts"],"sourcesContent":["/**\n * Ticket Complexity Validation\n *\n * Provides complexity-based validation rules that return warnings rather than\n * errors. This encourages completeness without blocking ticket creation.\n *\n * @see MCI-023-04-complexity-validation-rules\n */\n\nimport type {\n TicketImplementation,\n TicketTechnicalDetails,\n} from '../types/index.js';\n\n// =============================================================================\n// Types\n// =============================================================================\n\n/**\n * Ticket complexity levels\n */\nexport type TicketComplexity = 'small' | 'medium' | 'large' | 'xlarge';\n\n/**\n * Validation warning severity levels\n */\nexport type WarningSeverity = 'info' | 'warning' | 'recommendation';\n\n/**\n * Validation strictness levels\n */\nexport type StrictnessLevel = 'lenient' | 'normal' | 'strict';\n\n/**\n * Single validation warning\n */\nexport interface ValidationWarning {\n /** Warning code for programmatic handling */\n code: string;\n /** Human-readable message */\n message: string;\n /** Field that triggered the warning */\n field?: string;\n /** Severity level */\n severity: WarningSeverity;\n}\n\n/**\n * Complete validation result\n */\nexport interface TicketValidationResult {\n /** Always true - warnings don't block creation */\n valid: true;\n /** List of warnings */\n warnings: ValidationWarning[];\n /** Completeness score (0-100) */\n completenessScore: number;\n}\n\n/**\n * Validation rules for a complexity level\n */\nexport interface ComplexityRules {\n /** Whether implementation steps are recommended */\n requiresImplementation: boolean;\n /** Whether technical details are recommended */\n requiresTechnicalDetails: boolean;\n /** Whether notes are recommended */\n requiresNotes: boolean;\n /** Minimum recommended implementation steps */\n minSteps: number;\n /** Minimum recommended acceptance criteria */\n minAcceptanceCriteria: number;\n /** Whether file information is recommended */\n requiresFileInfo: boolean;\n}\n\n// =============================================================================\n// Validation Rules Configuration\n// =============================================================================\n\n/**\n * Validation rules by complexity\n *\n * These rules define what fields are recommended for each complexity level.\n * Small tickets have minimal requirements, while xlarge tickets need\n * comprehensive documentation.\n */\nexport const validationRules: Record<TicketComplexity, ComplexityRules> = {\n small: {\n requiresImplementation: false,\n requiresTechnicalDetails: false,\n requiresNotes: false,\n minSteps: 0,\n minAcceptanceCriteria: 1,\n requiresFileInfo: false,\n },\n medium: {\n requiresImplementation: true,\n requiresTechnicalDetails: false,\n requiresNotes: false,\n minSteps: 2,\n minAcceptanceCriteria: 2,\n requiresFileInfo: false,\n },\n large: {\n requiresImplementation: true,\n requiresTechnicalDetails: true,\n requiresNotes: false,\n minSteps: 4,\n minAcceptanceCriteria: 3,\n requiresFileInfo: true,\n },\n xlarge: {\n requiresImplementation: true,\n requiresTechnicalDetails: true,\n requiresNotes: true,\n minSteps: 6,\n minAcceptanceCriteria: 5,\n requiresFileInfo: true,\n },\n};\n\n// =============================================================================\n// Validation Functions\n// =============================================================================\n\n/**\n * Ticket data for validation\n */\nexport interface TicketValidationInput {\n complexity?: TicketComplexity;\n implementation?: TicketImplementation | null;\n technicalDetails?: TicketTechnicalDetails | null;\n notes?: string | null;\n acceptanceCriteria?: string[];\n}\n\n/**\n * Validate a ticket against complexity-based rules\n *\n * Returns warnings for missing or incomplete fields based on the ticket's\n * complexity level. Does not block ticket creation - all validations\n * produce warnings, not errors.\n *\n * @param ticket - The ticket data to validate\n * @returns Validation result with warnings and completeness score\n *\n * @example\n * ```typescript\n * const result = validateTicket({\n * complexity: 'large',\n * implementation: { steps: [{ order: 1, title: 'Setup', action: 'create', detail: '...' }] },\n * acceptanceCriteria: ['Works correctly']\n * });\n *\n * if (result.warnings.length > 0) {\n * console.log('Suggestions:', result.warnings.map(w => w.message));\n * }\n * console.log('Completeness:', result.completenessScore + '%');\n * ```\n */\nexport function validateTicket(ticket: TicketValidationInput): TicketValidationResult {\n const warnings: ValidationWarning[] = [];\n const complexity = ticket.complexity || 'medium';\n const rules = validationRules[complexity];\n\n // Check implementation\n if (rules.requiresImplementation) {\n if (!ticket.implementation?.steps?.length) {\n warnings.push({\n code: 'MISSING_IMPLEMENTATION',\n message: `${complexity} tickets should have implementation steps`,\n field: 'implementation',\n severity: 'warning',\n });\n } else if (ticket.implementation.steps.length < rules.minSteps) {\n warnings.push({\n code: 'INSUFFICIENT_STEPS',\n message: `${complexity} tickets should have at least ${rules.minSteps} implementation steps (found ${ticket.implementation.steps.length})`,\n field: 'implementation.steps',\n severity: 'recommendation',\n });\n }\n }\n\n // Check technical details\n if (rules.requiresTechnicalDetails && !ticket.technicalDetails) {\n warnings.push({\n code: 'MISSING_TECHNICAL_DETAILS',\n message: `${complexity} tickets should have technicalDetails`,\n field: 'technicalDetails',\n severity: 'warning',\n });\n }\n\n // Check file info\n if (rules.requiresFileInfo) {\n const hasFiles =\n (ticket.implementation?.filesToCreate?.length ?? 0) > 0 ||\n (ticket.implementation?.filesToModify?.length ?? 0) > 0;\n if (!hasFiles) {\n warnings.push({\n code: 'MISSING_FILE_INFO',\n message: `${complexity} tickets should specify files to create/modify`,\n field: 'implementation',\n severity: 'recommendation',\n });\n }\n }\n\n // Check notes\n if (rules.requiresNotes && !ticket.notes) {\n warnings.push({\n code: 'MISSING_NOTES',\n message: `${complexity} tickets should have notes with context`,\n field: 'notes',\n severity: 'info',\n });\n }\n\n // Check acceptance criteria\n const criteriaCount = ticket.acceptanceCriteria?.length || 0;\n if (criteriaCount < rules.minAcceptanceCriteria) {\n warnings.push({\n code: 'INSUFFICIENT_ACCEPTANCE_CRITERIA',\n message: `${complexity} tickets should have at least ${rules.minAcceptanceCriteria} acceptance criteria (found ${criteriaCount})`,\n field: 'acceptanceCriteria',\n severity: 'recommendation',\n });\n }\n\n // Calculate completeness score\n const completenessScore = calculateCompletenessScore(ticket, rules);\n\n return {\n valid: true,\n warnings,\n completenessScore,\n };\n}\n\n/**\n * Calculate how complete a ticket is (0-100)\n *\n * Weights different fields based on complexity requirements.\n * A fully complete ticket for its complexity level scores 100.\n *\n * @param ticket - The ticket data\n * @param rules - Complexity rules to evaluate against\n * @returns Completeness score from 0 to 100\n */\nfunction calculateCompletenessScore(\n ticket: TicketValidationInput,\n rules: ComplexityRules\n): number {\n let score = 0;\n let maxScore = 0;\n\n // Implementation (30 points max)\n if (rules.requiresImplementation) {\n maxScore += 30;\n if (ticket.implementation?.steps?.length) {\n const stepRatio = Math.min(ticket.implementation.steps.length / rules.minSteps, 1);\n score += 30 * stepRatio;\n }\n }\n\n // Technical details (25 points max)\n if (rules.requiresTechnicalDetails) {\n maxScore += 25;\n if (ticket.technicalDetails) {\n score += 15;\n const hasFiles =\n (ticket.implementation?.filesToCreate?.length ?? 0) > 0 ||\n (ticket.implementation?.filesToModify?.length ?? 0) > 0;\n if (hasFiles) score += 10;\n }\n }\n\n // Notes (15 points max)\n if (rules.requiresNotes) {\n maxScore += 15;\n if (ticket.notes) score += 15;\n }\n\n // Acceptance criteria (30 points max)\n maxScore += 30;\n const criteriaRatio = Math.min(\n (ticket.acceptanceCriteria?.length || 0) / rules.minAcceptanceCriteria,\n 1\n );\n score += 30 * criteriaRatio;\n\n return maxScore > 0 ? Math.round((score / maxScore) * 100) : 100;\n}\n\n/**\n * Filter warnings by strictness level\n *\n * Allows callers to filter out lower-priority warnings based on their\n * desired strictness level.\n *\n * - lenient: Only show 'warning' severity (most important issues only)\n * - normal: Show 'warning' and 'recommendation' (default)\n * - strict: Show all warnings including 'info' level\n *\n * @param warnings - Array of validation warnings\n * @param strictness - Desired strictness level\n * @returns Filtered array of warnings\n *\n * @example\n * ```typescript\n * const result = validateTicket(ticket);\n * const warnings = filterWarningsByStrictness(result.warnings, 'lenient');\n * // Only includes warnings with severity 'warning'\n * ```\n */\nexport function filterWarningsByStrictness(\n warnings: ValidationWarning[],\n strictness: StrictnessLevel\n): ValidationWarning[] {\n switch (strictness) {\n case 'lenient':\n return warnings.filter((w) => w.severity === 'warning');\n case 'normal':\n return warnings.filter((w) => w.severity !== 'info');\n case 'strict':\n return warnings;\n }\n}\n\n/**\n * Get the rules for a specific complexity level\n *\n * Useful for displaying requirements to users or for custom validation.\n *\n * @param complexity - The complexity level\n * @returns Rules for that complexity level\n */\nexport function getComplexityRules(complexity: TicketComplexity): ComplexityRules {\n return validationRules[complexity];\n}\n\n/**\n * Check if a complexity value is valid\n *\n * @param value - The value to check\n * @returns True if value is a valid TicketComplexity\n */\nexport function isValidComplexity(value: unknown): value is TicketComplexity {\n return value === 'small' || value === 'medium' || value === 'large' || value === 'xlarge';\n}\n\n/**\n * Get human-readable description of complexity level\n *\n * @param complexity - The complexity level\n * @returns Description of what this complexity level means\n */\nexport function getComplexityDescription(complexity: TicketComplexity): string {\n const descriptions: Record<TicketComplexity, string> = {\n small: 'Simple tasks that can be completed quickly with minimal documentation',\n medium: 'Standard tasks requiring basic implementation planning',\n large: 'Complex tasks requiring detailed implementation and technical specs',\n xlarge: 'Major features requiring comprehensive documentation and planning',\n };\n return descriptions[complexity];\n}\n\n/**\n * Suggest appropriate complexity based on ticket content\n *\n * Analyzes the provided ticket data and suggests an appropriate\n * complexity level. Useful for auto-suggesting complexity during\n * ticket creation.\n *\n * @param ticket - The ticket data\n * @returns Suggested complexity level\n */\nexport function suggestComplexity(ticket: TicketValidationInput): TicketComplexity {\n let score = 0;\n\n // Implementation steps add complexity\n const stepCount = ticket.implementation?.steps?.length || 0;\n if (stepCount >= 6) score += 3;\n else if (stepCount >= 4) score += 2;\n else if (stepCount >= 2) score += 1;\n\n // Technical details add complexity\n if (ticket.technicalDetails) {\n score += 1;\n if (ticket.technicalDetails.endpoints?.length) score += 1;\n if (ticket.technicalDetails.database) score += 1;\n }\n\n // File operations on the implementation indicate more complex work\n if (\n (ticket.implementation?.filesToCreate?.length ?? 0) > 0 ||\n (ticket.implementation?.filesToModify?.length ?? 0) > 0\n ) {\n score += 1;\n }\n\n // Notes indicate more complex work\n if (ticket.notes) {\n score += 1;\n }\n\n // Acceptance criteria count\n const criteriaCount = ticket.acceptanceCriteria?.length || 0;\n if (criteriaCount >= 5) score += 2;\n else if (criteriaCount >= 3) score += 1;\n\n // Map score to complexity\n if (score >= 8) return 'xlarge';\n if (score >= 5) return 'large';\n if (score >= 2) return 'medium';\n return 'small';\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * Bulk operation wire-protocol types
3
+ *
4
+ * Extracted from packages/cli/src/types/index.ts — Phase 1.6
5
+ */
6
+ import type { TicketStatus, TicketImplementation, DependencyType } from '../schema/index.js';
7
+ import type { TicketTechnicalDetails } from '../runtime/ticket.js';
8
+ /**
9
+ * Single ticket update for bulk operations
10
+ */
11
+ export interface TicketUpdate {
12
+ ticketId: string;
13
+ status?: TicketStatus;
14
+ priority?: 'low' | 'medium' | 'high' | 'critical';
15
+ progress?: number;
16
+ blockReason?: string;
17
+ }
18
+ /**
19
+ * Request for bulk update tickets operation
20
+ */
21
+ export interface BulkUpdateRequest {
22
+ updates: TicketUpdate[];
23
+ validateDependencies?: boolean;
24
+ atomic?: boolean;
25
+ }
26
+ /**
27
+ * Result of bulk update tickets operation
28
+ */
29
+ export interface BulkUpdateResult {
30
+ updated: string[];
31
+ failed: Array<{
32
+ ticketId: string;
33
+ error: string;
34
+ }>;
35
+ rollbackPerformed: boolean;
36
+ }
37
+ /**
38
+ * Ticket definition for bulk creation
39
+ */
40
+ export interface BulkCreateTicketDefinition {
41
+ /** Ticket title (required) */
42
+ title: string;
43
+ /** Ticket description */
44
+ description?: string;
45
+ /** Estimated hours */
46
+ estimatedHours?: number;
47
+ /** Complexity level */
48
+ complexity?: 'small' | 'medium' | 'large' | 'xlarge';
49
+ /** Priority level */
50
+ priority?: 'high' | 'medium' | 'low';
51
+ /** Acceptance criteria */
52
+ acceptanceCriteria?: string[];
53
+ /** Implementation details */
54
+ implementation?: TicketImplementation;
55
+ /** Technical details */
56
+ technicalDetails?: TicketTechnicalDetails;
57
+ /** Tags */
58
+ tags?: string[];
59
+ }
60
+ /**
61
+ * Inline dependency definition for bulk creation
62
+ */
63
+ export interface BulkCreateDependencyDefinition {
64
+ /** Index of the ticket in the tickets array */
65
+ ticket: number;
66
+ /** Index(es) of the ticket(s) it depends on */
67
+ dependsOn: number | number[];
68
+ }
69
+ /**
70
+ * Request for bulk create tickets operation
71
+ */
72
+ export interface BulkCreateTicketsRequest {
73
+ /** Epic ID to create tickets in */
74
+ epicId: string;
75
+ /** Array of ticket definitions */
76
+ tickets: BulkCreateTicketDefinition[];
77
+ /** Optional inline dependencies using array indexes */
78
+ dependencies?: BulkCreateDependencyDefinition[];
79
+ }
80
+ /**
81
+ * Created ticket info in bulk create response
82
+ */
83
+ export interface BulkCreatedTicketInfo {
84
+ /** Generated ticket ID */
85
+ id: string;
86
+ /** Assigned ticket number */
87
+ ticketNumber: number;
88
+ /** Ticket title */
89
+ title: string;
90
+ }
91
+ /**
92
+ * Result of bulk create tickets operation
93
+ */
94
+ export interface BulkCreateTicketsResult {
95
+ /** Number of tickets created */
96
+ created: number;
97
+ /** Created ticket information */
98
+ tickets: BulkCreatedTicketInfo[];
99
+ /** Number of dependencies created */
100
+ dependenciesCreated: number;
101
+ }
102
+ /**
103
+ * Single dependency definition for bulk add
104
+ */
105
+ export interface BulkDependencyDefinition {
106
+ /** ID of the ticket that will depend on another */
107
+ ticketId: string;
108
+ /** ID of the ticket it will depend on */
109
+ dependsOnId: string;
110
+ /** Type of dependency (default: 'requires') */
111
+ type?: DependencyType;
112
+ }
113
+ /**
114
+ * Request for bulk add dependencies operation
115
+ */
116
+ export interface BulkAddDependenciesRequest {
117
+ /** Array of dependency definitions */
118
+ dependencies: BulkDependencyDefinition[];
119
+ /** Skip validation of circular dependencies (default: false) */
120
+ skipCircularCheck?: boolean;
121
+ }
122
+ /**
123
+ * Result of bulk add dependencies operation
124
+ */
125
+ export interface BulkAddDependenciesResult {
126
+ /** Number of dependencies created */
127
+ created: number;
128
+ /** IDs of created dependency records */
129
+ dependencyIds: string[];
130
+ /** Dependencies that were skipped (duplicates) */
131
+ skipped: number;
132
+ }
133
+ //# sourceMappingURL=bulk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk.d.ts","sourceRoot":"","sources":["../../src/api/bulk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Bulk operation wire-protocol types
3
+ *
4
+ * Extracted from packages/cli/src/types/index.ts — Phase 1.6
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=bulk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bulk.js","sourceRoot":"","sources":["../../src/api/bulk.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,22 @@
1
+ export type FeedbackSource = 'mcp' | 'cli' | 'web';
2
+ export type FeedbackCategory = 'bug' | 'feature_request' | 'usability' | 'documentation' | 'performance';
3
+ export type FeedbackSeverity = 'critical' | 'high' | 'medium' | 'low';
4
+ export interface FeedbackRecord {
5
+ id: string;
6
+ category: FeedbackCategory;
7
+ summary: string;
8
+ severity: FeedbackSeverity;
9
+ source: FeedbackSource;
10
+ tool?: string;
11
+ toolOperation?: string;
12
+ details?: string;
13
+ expected?: string;
14
+ actual?: string;
15
+ errorMessage?: string;
16
+ ticketId?: string;
17
+ userId: string;
18
+ userEmail?: string;
19
+ createdAt: string;
20
+ updatedAt?: string;
21
+ }
22
+ //# sourceMappingURL=feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/api/feedback.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AACnD,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,iBAAiB,GAAG,WAAW,GAAG,eAAe,GAAG,aAAa,CAAC;AACzG,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEtE,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,5 @@
1
+ // =============================================================================
2
+ // Feedback Wire Protocol Types
3
+ // =============================================================================
4
+ export {};
5
+ //# sourceMappingURL=feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/api/feedback.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,+BAA+B;AAC/B,gFAAgF"}
@@ -0,0 +1,6 @@
1
+ export * from './responses.js';
2
+ export * from './lookups.js';
3
+ export * from './bulk.js';
4
+ export * from './lists.js';
5
+ export * from './feedback.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './responses.js';
2
+ export * from './lookups.js';
3
+ export * from './bulk.js';
4
+ export * from './lists.js';
5
+ export * from './feedback.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * List Response & Pagination Types
3
+ *
4
+ * Canonical types for paginated list responses used across all packages.
5
+ * Unifies CLI's ListResponse (with total) and core's ListResponse (with warnings).
6
+ */
7
+ /**
8
+ * Warning about invalid field-selection requests
9
+ */
10
+ export interface FieldSelectionWarning {
11
+ invalidFields?: string[];
12
+ }
13
+ /**
14
+ * Generic list response returned by every "list" endpoint / operation.
15
+ *
16
+ * Reconciles:
17
+ * - CLI ListResponse<T> → items, nextToken, total
18
+ * - Core ListResponse<T> → items, nextToken, warnings
19
+ *
20
+ * The canonical version carries all three optional properties so both
21
+ * CLI and core can consume it without casting.
22
+ */
23
+ export interface ListResponse<T> {
24
+ items: T[];
25
+ nextToken?: string;
26
+ total?: number;
27
+ warnings?: FieldSelectionWarning;
28
+ }
29
+ /**
30
+ * Input parameters for paginated queries.
31
+ * Supports offset-based and cursor-based (nextToken) pagination.
32
+ */
33
+ export interface PaginationInput {
34
+ limit?: number;
35
+ offset?: number;
36
+ nextToken?: string;
37
+ }
38
+ /**
39
+ * Metadata describing the current page position.
40
+ */
41
+ export interface PaginationInfo {
42
+ total: number;
43
+ limit: number;
44
+ offset: number;
45
+ hasMore: boolean;
46
+ nextToken?: string;
47
+ }
48
+ /**
49
+ * A full paginated response with explicit pagination metadata.
50
+ */
51
+ export interface PaginatedResponse<T> {
52
+ items: T[];
53
+ pagination: PaginationInfo;
54
+ }
55
+ //# sourceMappingURL=lists.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lists.d.ts","sourceRoot":"","sources":["../../src/api/lists.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAMD;;;;;;;;;GASG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,qBAAqB,CAAC;CAClC;AAMD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,CAAC;IAClC,KAAK,EAAE,CAAC,EAAE,CAAC;IACX,UAAU,EAAE,cAAc,CAAC;CAC5B"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * List Response & Pagination Types
3
+ *
4
+ * Canonical types for paginated list responses used across all packages.
5
+ * Unifies CLI's ListResponse (with total) and core's ListResponse (with warnings).
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=lists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lists.js","sourceRoot":"","sources":["../../src/api/lists.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,92 @@
1
+ import type { SpecificationStatus, EpicStatus, TicketStatus } from '../schema/index.js';
2
+ /**
3
+ * Request for lookup_project operation
4
+ */
5
+ export interface LookupProjectRequest {
6
+ /** Project name to search for (partial match, case-insensitive) */
7
+ name: string;
8
+ }
9
+ /**
10
+ * Minimal project info returned by lookup_project
11
+ */
12
+ export interface LookupProjectResult {
13
+ /** Project ID */
14
+ id: string;
15
+ /** Project name */
16
+ name: string;
17
+ /** Number of specifications in the project */
18
+ specCount: number;
19
+ }
20
+ /**
21
+ * Request for lookup_specification operation
22
+ */
23
+ export interface LookupSpecificationRequest {
24
+ /** Specification title to search for (partial match, case-insensitive) */
25
+ title: string;
26
+ /** Optional project ID to narrow search */
27
+ projectId?: string;
28
+ }
29
+ /**
30
+ * Minimal specification info returned by lookup_specification
31
+ */
32
+ export interface LookupSpecificationResult {
33
+ /** Specification ID */
34
+ id: string;
35
+ /** Specification title */
36
+ title: string;
37
+ /** Status */
38
+ status: SpecificationStatus;
39
+ /** Number of epics */
40
+ epicCount: number;
41
+ }
42
+ /**
43
+ * Request for lookup_epic operation
44
+ */
45
+ export interface LookupEpicRequest {
46
+ /** Epic title to search for (partial match, case-insensitive) */
47
+ title: string;
48
+ /** Specification ID to search within */
49
+ specificationId: string;
50
+ }
51
+ /**
52
+ * Minimal epic info returned by lookup_epic
53
+ */
54
+ export interface LookupEpicResult {
55
+ /** Epic ID */
56
+ id: string;
57
+ /** Epic title */
58
+ title: string;
59
+ /** Epic number */
60
+ epicNumber: number;
61
+ /** Status */
62
+ status: EpicStatus;
63
+ /** Number of tickets */
64
+ ticketCount: number;
65
+ }
66
+ /**
67
+ * Request for lookup_ticket operation
68
+ */
69
+ export interface LookupTicketRequest {
70
+ /** Ticket title to search for (partial match, case-insensitive) */
71
+ title: string;
72
+ /** Optional epic ID to narrow search */
73
+ epicId?: string;
74
+ /** Optional specification ID to narrow search */
75
+ specificationId?: string;
76
+ }
77
+ /**
78
+ * Minimal ticket info returned by lookup_ticket
79
+ */
80
+ export interface LookupTicketResult {
81
+ /** Ticket ID */
82
+ id: string;
83
+ /** Ticket title */
84
+ title: string;
85
+ /** Ticket number */
86
+ ticketNumber: number;
87
+ /** Status */
88
+ status: TicketStatus;
89
+ /** Epic ID */
90
+ epicId: string;
91
+ }
92
+ //# sourceMappingURL=lookups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookups.d.ts","sourceRoot":"","sources":["../../src/api/lookups.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,iBAAiB;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;IACd,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,uBAAuB;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,aAAa;IACb,MAAM,EAAE,mBAAmB,CAAC;IAC5B,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,iEAAiE;IACjE,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,cAAc;IACd,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa;IACb,MAAM,EAAE,UAAU,CAAC;IACnB,wBAAwB;IACxB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAC;IACd,wCAAwC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gBAAgB;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,cAAc;IACd,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lookups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lookups.js","sourceRoot":"","sources":["../../src/api/lookups.ts"],"names":[],"mappings":""}