@specforge/cli 0.1.0 → 0.2.4

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 (643) hide show
  1. package/dist/cli/commands/debug/register.js +1 -1
  2. package/dist/cli/commands/debug/register.js.map +1 -1
  3. package/dist/cli/commands/debug/types.d.ts.map +1 -1
  4. package/dist/cli/commands/debug/types.js +4 -2
  5. package/dist/cli/commands/debug/types.js.map +1 -1
  6. package/dist/cli/commands/init.types.d.ts +4 -4
  7. package/dist/cli/commands/init.types.d.ts.map +1 -1
  8. package/dist/cli/commands/init.types.js.map +1 -1
  9. package/dist/cli/commands/scaffold/agent-types.js +1 -1
  10. package/dist/cli/commands/scaffold/agent-types.js.map +1 -1
  11. package/dist/cli/config/agent-teams.types.d.ts +35 -12
  12. package/dist/cli/config/agent-teams.types.d.ts.map +1 -1
  13. package/dist/cli/config/agent-teams.types.js.map +1 -1
  14. package/dist/cli/templates/agents/content/core/sfag-orchestrator.d.ts +21 -3
  15. package/dist/cli/templates/agents/content/core/sfag-orchestrator.d.ts.map +1 -1
  16. package/dist/cli/templates/agents/content/core/sfag-orchestrator.js +114 -48
  17. package/dist/cli/templates/agents/content/core/sfag-orchestrator.js.map +1 -1
  18. package/dist/cli/templates/agents/content/core/sfag-spec-creator.d.ts.map +1 -1
  19. package/dist/cli/templates/agents/content/core/sfag-spec-creator.js +124 -83
  20. package/dist/cli/templates/agents/content/core/sfag-spec-creator.js.map +1 -1
  21. package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.d.ts +22 -3
  22. package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.d.ts.map +1 -1
  23. package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.js +225 -160
  24. package/dist/cli/templates/agents/content/core/sfag-ticket-implementer.js.map +1 -1
  25. package/dist/cli/templates/agents/content/core/sfag-work-resolver.d.ts +16 -0
  26. package/dist/cli/templates/agents/content/core/sfag-work-resolver.d.ts.map +1 -0
  27. package/dist/cli/templates/agents/content/core/sfag-work-resolver.js +199 -0
  28. package/dist/cli/templates/agents/content/core/sfag-work-resolver.js.map +1 -0
  29. package/dist/cli/templates/agents/index.d.ts.map +1 -1
  30. package/dist/cli/templates/agents/index.js +2 -0
  31. package/dist/cli/templates/agents/index.js.map +1 -1
  32. package/dist/cli/templates/content/sf-commit.d.ts +1 -1
  33. package/dist/cli/templates/content/sf-commit.d.ts.map +1 -1
  34. package/dist/cli/templates/content/sf-commit.js +2 -2
  35. package/dist/cli/templates/content/sf-commit.js.map +1 -1
  36. package/dist/cli/templates/content/sf-reset.d.ts +5 -2
  37. package/dist/cli/templates/content/sf-reset.d.ts.map +1 -1
  38. package/dist/cli/templates/content/sf-reset.js +41 -27
  39. package/dist/cli/templates/content/sf-reset.js.map +1 -1
  40. package/dist/lib/prompt-generator.d.ts +15 -3
  41. package/dist/lib/prompt-generator.d.ts.map +1 -1
  42. package/dist/lib/prompt-generator.js +14 -6
  43. package/dist/lib/prompt-generator.js.map +1 -1
  44. package/dist/lib/workflow-definitions.js +2 -2
  45. package/dist/lib/workflow-definitions.js.map +1 -1
  46. package/dist/server.d.ts.map +1 -1
  47. package/dist/server.js +2 -1
  48. package/dist/server.js.map +1 -1
  49. package/dist/tools/__tests__/complete-planning-double-call.test.d.ts +2 -0
  50. package/dist/tools/__tests__/complete-planning-double-call.test.d.ts.map +1 -0
  51. package/dist/tools/core/__tests__/file-existence-injection.test.d.ts +2 -0
  52. package/dist/tools/core/__tests__/file-existence-injection.test.d.ts.map +1 -0
  53. package/dist/tools/core/__tests__/git-injection.test.d.ts +2 -0
  54. package/dist/tools/core/__tests__/git-injection.test.d.ts.map +1 -0
  55. package/dist/tools/core/file-existence-injection.d.ts +22 -0
  56. package/dist/tools/core/file-existence-injection.d.ts.map +1 -0
  57. package/dist/tools/core/file-existence-injection.js +49 -0
  58. package/dist/tools/core/file-existence-injection.js.map +1 -0
  59. package/dist/tools/core/git-injection.d.ts +58 -0
  60. package/dist/tools/core/git-injection.d.ts.map +1 -0
  61. package/dist/tools/core/git-injection.js +79 -0
  62. package/dist/tools/core/git-injection.js.map +1 -0
  63. package/dist/tools/core/index.d.ts +1 -0
  64. package/dist/tools/core/index.d.ts.map +1 -1
  65. package/dist/tools/core/index.js +1 -0
  66. package/dist/tools/core/index.js.map +1 -1
  67. package/dist/tools/index.d.ts.map +1 -1
  68. package/dist/tools/index.js +358 -440
  69. package/dist/tools/index.js.map +1 -1
  70. package/dist/types/index.d.ts +12 -32
  71. package/dist/types/index.d.ts.map +1 -1
  72. package/dist/types/index.js.map +1 -1
  73. package/dist/validation/index.d.ts.map +1 -1
  74. package/dist/validation/index.js +0 -15
  75. package/dist/validation/index.js.map +1 -1
  76. package/node_modules/@specforge/api-types/README.md +38 -0
  77. package/node_modules/@specforge/api-types/dist/client/appsync-client.d.ts +21 -0
  78. package/node_modules/@specforge/api-types/dist/client/appsync-client.d.ts.map +1 -0
  79. package/node_modules/@specforge/api-types/dist/client/appsync-client.js +2 -0
  80. package/node_modules/@specforge/api-types/dist/client/appsync-client.js.map +1 -0
  81. package/node_modules/@specforge/api-types/dist/client/index.d.ts +2 -0
  82. package/node_modules/@specforge/api-types/dist/client/index.d.ts.map +1 -0
  83. package/node_modules/@specforge/api-types/dist/client/index.js +2 -0
  84. package/node_modules/@specforge/api-types/dist/client/index.js.map +1 -0
  85. package/node_modules/@specforge/api-types/dist/index.d.ts +5 -0
  86. package/node_modules/@specforge/api-types/dist/index.d.ts.map +1 -0
  87. package/node_modules/@specforge/api-types/dist/index.js +9 -0
  88. package/node_modules/@specforge/api-types/dist/index.js.map +1 -0
  89. package/node_modules/@specforge/api-types/dist/mcp/error-guidance.d.ts +74 -0
  90. package/node_modules/@specforge/api-types/dist/mcp/error-guidance.d.ts.map +1 -0
  91. package/node_modules/@specforge/api-types/dist/mcp/error-guidance.js +21 -0
  92. package/node_modules/@specforge/api-types/dist/mcp/error-guidance.js.map +1 -0
  93. package/node_modules/@specforge/api-types/dist/mcp/index.d.ts +4 -0
  94. package/node_modules/@specforge/api-types/dist/mcp/index.d.ts.map +1 -0
  95. package/node_modules/@specforge/api-types/dist/mcp/index.js +8 -0
  96. package/node_modules/@specforge/api-types/dist/mcp/index.js.map +1 -0
  97. package/node_modules/@specforge/api-types/dist/mcp/lifecycle-envelope.d.ts +18 -0
  98. package/node_modules/@specforge/api-types/dist/mcp/lifecycle-envelope.d.ts.map +1 -0
  99. package/node_modules/@specforge/api-types/dist/mcp/lifecycle-envelope.js +2 -0
  100. package/node_modules/@specforge/api-types/dist/mcp/lifecycle-envelope.js.map +1 -0
  101. package/node_modules/@specforge/api-types/dist/mcp/standard-envelope.d.ts +39 -0
  102. package/node_modules/@specforge/api-types/dist/mcp/standard-envelope.d.ts.map +1 -0
  103. package/node_modules/@specforge/api-types/dist/mcp/standard-envelope.js +2 -0
  104. package/node_modules/@specforge/api-types/dist/mcp/standard-envelope.js.map +1 -0
  105. package/node_modules/@specforge/api-types/dist/runtime/billing-record.d.ts +18 -0
  106. package/node_modules/@specforge/api-types/dist/runtime/billing-record.d.ts.map +1 -0
  107. package/node_modules/@specforge/api-types/dist/runtime/billing-record.js +7 -0
  108. package/node_modules/@specforge/api-types/dist/runtime/billing-record.js.map +1 -0
  109. package/node_modules/@specforge/api-types/dist/runtime/blueprint-record.d.ts +40 -0
  110. package/node_modules/@specforge/api-types/dist/runtime/blueprint-record.d.ts.map +1 -0
  111. package/node_modules/@specforge/api-types/dist/runtime/blueprint-record.js +19 -0
  112. package/node_modules/@specforge/api-types/dist/runtime/blueprint-record.js.map +1 -0
  113. package/node_modules/@specforge/api-types/dist/runtime/dependency-tree.d.ts +96 -0
  114. package/node_modules/@specforge/api-types/dist/runtime/dependency-tree.d.ts.map +1 -0
  115. package/node_modules/@specforge/api-types/dist/runtime/dependency-tree.js +23 -0
  116. package/node_modules/@specforge/api-types/dist/runtime/dependency-tree.js.map +1 -0
  117. package/node_modules/@specforge/api-types/dist/runtime/epic-record.d.ts +117 -0
  118. package/node_modules/@specforge/api-types/dist/runtime/epic-record.d.ts.map +1 -0
  119. package/node_modules/@specforge/api-types/dist/runtime/epic-record.js +13 -0
  120. package/node_modules/@specforge/api-types/dist/runtime/epic-record.js.map +1 -0
  121. package/node_modules/@specforge/api-types/dist/runtime/feedback-record.d.ts +27 -0
  122. package/node_modules/@specforge/api-types/dist/runtime/feedback-record.d.ts.map +1 -0
  123. package/node_modules/@specforge/api-types/dist/runtime/feedback-record.js +7 -0
  124. package/node_modules/@specforge/api-types/dist/runtime/feedback-record.js.map +1 -0
  125. package/node_modules/@specforge/api-types/dist/runtime/fields.d.ts +31 -0
  126. package/node_modules/@specforge/api-types/dist/runtime/fields.d.ts.map +1 -0
  127. package/node_modules/@specforge/api-types/dist/runtime/fields.js +156 -0
  128. package/node_modules/@specforge/api-types/dist/runtime/fields.js.map +1 -0
  129. package/node_modules/@specforge/api-types/dist/runtime/index.d.ts +18 -0
  130. package/node_modules/@specforge/api-types/dist/runtime/index.d.ts.map +1 -0
  131. package/node_modules/@specforge/api-types/dist/runtime/index.js +18 -0
  132. package/node_modules/@specforge/api-types/dist/runtime/index.js.map +1 -0
  133. package/node_modules/@specforge/api-types/dist/runtime/pagination.d.ts +38 -0
  134. package/node_modules/@specforge/api-types/dist/runtime/pagination.d.ts.map +1 -0
  135. package/node_modules/@specforge/api-types/dist/runtime/pagination.js +54 -0
  136. package/node_modules/@specforge/api-types/dist/runtime/pagination.js.map +1 -0
  137. package/node_modules/@specforge/api-types/dist/runtime/project-invitation.d.ts +14 -0
  138. package/node_modules/@specforge/api-types/dist/runtime/project-invitation.d.ts.map +1 -0
  139. package/node_modules/@specforge/api-types/dist/runtime/project-invitation.js +2 -0
  140. package/node_modules/@specforge/api-types/dist/runtime/project-invitation.js.map +1 -0
  141. package/node_modules/@specforge/api-types/dist/runtime/project-member.d.ts +13 -0
  142. package/node_modules/@specforge/api-types/dist/runtime/project-member.d.ts.map +1 -0
  143. package/node_modules/@specforge/api-types/dist/runtime/project-member.js +2 -0
  144. package/node_modules/@specforge/api-types/dist/runtime/project-member.js.map +1 -0
  145. package/node_modules/@specforge/api-types/dist/runtime/project-validation.d.ts +26 -0
  146. package/node_modules/@specforge/api-types/dist/runtime/project-validation.d.ts.map +1 -0
  147. package/node_modules/@specforge/api-types/dist/runtime/project-validation.js +5 -0
  148. package/node_modules/@specforge/api-types/dist/runtime/project-validation.js.map +1 -0
  149. package/node_modules/@specforge/api-types/dist/runtime/project.d.ts +55 -0
  150. package/node_modules/@specforge/api-types/dist/runtime/project.d.ts.map +1 -0
  151. package/node_modules/@specforge/api-types/dist/runtime/project.js +10 -0
  152. package/node_modules/@specforge/api-types/dist/runtime/project.js.map +1 -0
  153. package/node_modules/@specforge/api-types/dist/runtime/response.d.ts +22 -0
  154. package/node_modules/@specforge/api-types/dist/runtime/response.d.ts.map +1 -0
  155. package/node_modules/@specforge/api-types/dist/runtime/response.js +14 -0
  156. package/node_modules/@specforge/api-types/dist/runtime/response.js.map +1 -0
  157. package/node_modules/@specforge/api-types/dist/runtime/specification-record.d.ts +90 -0
  158. package/node_modules/@specforge/api-types/dist/runtime/specification-record.d.ts.map +1 -0
  159. package/node_modules/@specforge/api-types/dist/runtime/specification-record.js +11 -0
  160. package/node_modules/@specforge/api-types/dist/runtime/specification-record.js.map +1 -0
  161. package/node_modules/@specforge/api-types/dist/runtime/status.d.ts +26 -0
  162. package/node_modules/@specforge/api-types/dist/runtime/status.d.ts.map +1 -0
  163. package/node_modules/@specforge/api-types/dist/runtime/status.js +56 -0
  164. package/node_modules/@specforge/api-types/dist/runtime/status.js.map +1 -0
  165. package/node_modules/@specforge/api-types/dist/runtime/summary.d.ts +58 -0
  166. package/node_modules/@specforge/api-types/dist/runtime/summary.d.ts.map +1 -0
  167. package/node_modules/@specforge/api-types/dist/runtime/summary.js +42 -0
  168. package/node_modules/@specforge/api-types/dist/runtime/summary.js.map +1 -0
  169. package/node_modules/@specforge/api-types/dist/runtime/ticket-record.d.ts +212 -0
  170. package/node_modules/@specforge/api-types/dist/runtime/ticket-record.d.ts.map +1 -0
  171. package/node_modules/@specforge/api-types/dist/runtime/ticket-record.js +18 -0
  172. package/node_modules/@specforge/api-types/dist/runtime/ticket-record.js.map +1 -0
  173. package/node_modules/@specforge/api-types/dist/runtime/user.d.ts +13 -0
  174. package/node_modules/@specforge/api-types/dist/runtime/user.d.ts.map +1 -0
  175. package/node_modules/@specforge/api-types/dist/runtime/user.js +9 -0
  176. package/node_modules/@specforge/api-types/dist/runtime/user.js.map +1 -0
  177. package/node_modules/@specforge/api-types/dist/stores/i-billing-store.d.ts +17 -0
  178. package/node_modules/@specforge/api-types/dist/stores/i-billing-store.d.ts.map +1 -0
  179. package/node_modules/@specforge/api-types/dist/stores/i-billing-store.js +2 -0
  180. package/node_modules/@specforge/api-types/dist/stores/i-billing-store.js.map +1 -0
  181. package/node_modules/@specforge/api-types/dist/stores/i-blueprint-store.d.ts +59 -0
  182. package/node_modules/@specforge/api-types/dist/stores/i-blueprint-store.d.ts.map +1 -0
  183. package/node_modules/@specforge/api-types/dist/stores/i-blueprint-store.js +2 -0
  184. package/node_modules/@specforge/api-types/dist/stores/i-blueprint-store.js.map +1 -0
  185. package/node_modules/@specforge/api-types/dist/stores/i-epic-store.d.ts +120 -0
  186. package/node_modules/@specforge/api-types/dist/stores/i-epic-store.d.ts.map +1 -0
  187. package/node_modules/@specforge/api-types/dist/stores/i-epic-store.js +2 -0
  188. package/node_modules/@specforge/api-types/dist/stores/i-epic-store.js.map +1 -0
  189. package/node_modules/@specforge/api-types/dist/stores/i-feedback-store.d.ts +13 -0
  190. package/node_modules/@specforge/api-types/dist/stores/i-feedback-store.d.ts.map +1 -0
  191. package/node_modules/@specforge/api-types/dist/stores/i-feedback-store.js +2 -0
  192. package/node_modules/@specforge/api-types/dist/stores/i-feedback-store.js.map +1 -0
  193. package/node_modules/@specforge/api-types/dist/stores/i-project-store.d.ts +48 -0
  194. package/node_modules/@specforge/api-types/dist/stores/i-project-store.d.ts.map +1 -0
  195. package/node_modules/@specforge/api-types/dist/stores/i-project-store.js +2 -0
  196. package/node_modules/@specforge/api-types/dist/stores/i-project-store.js.map +1 -0
  197. package/node_modules/@specforge/api-types/dist/stores/i-sharing-store.d.ts +37 -0
  198. package/node_modules/@specforge/api-types/dist/stores/i-sharing-store.d.ts.map +1 -0
  199. package/node_modules/@specforge/api-types/dist/stores/i-sharing-store.js +2 -0
  200. package/node_modules/@specforge/api-types/dist/stores/i-sharing-store.js.map +1 -0
  201. package/node_modules/@specforge/api-types/dist/stores/i-spec-store.d.ts +159 -0
  202. package/node_modules/@specforge/api-types/dist/stores/i-spec-store.d.ts.map +1 -0
  203. package/node_modules/@specforge/api-types/dist/stores/i-spec-store.js +2 -0
  204. package/node_modules/@specforge/api-types/dist/stores/i-spec-store.js.map +1 -0
  205. package/node_modules/@specforge/api-types/dist/stores/i-ticket-dependency-store.d.ts +87 -0
  206. package/node_modules/@specforge/api-types/dist/stores/i-ticket-dependency-store.d.ts.map +1 -0
  207. package/node_modules/@specforge/api-types/dist/stores/i-ticket-dependency-store.js +2 -0
  208. package/node_modules/@specforge/api-types/dist/stores/i-ticket-dependency-store.js.map +1 -0
  209. package/node_modules/@specforge/api-types/dist/stores/i-ticket-store.d.ts +347 -0
  210. package/node_modules/@specforge/api-types/dist/stores/i-ticket-store.d.ts.map +1 -0
  211. package/node_modules/@specforge/api-types/dist/stores/i-ticket-store.js +2 -0
  212. package/node_modules/@specforge/api-types/dist/stores/i-ticket-store.js.map +1 -0
  213. package/node_modules/@specforge/api-types/dist/stores/i-user-store.d.ts +5 -0
  214. package/node_modules/@specforge/api-types/dist/stores/i-user-store.d.ts.map +1 -0
  215. package/node_modules/@specforge/api-types/dist/stores/i-user-store.js +2 -0
  216. package/node_modules/@specforge/api-types/dist/stores/i-user-store.js.map +1 -0
  217. package/node_modules/@specforge/api-types/dist/stores/index.d.ts +11 -0
  218. package/node_modules/@specforge/api-types/dist/stores/index.d.ts.map +1 -0
  219. package/node_modules/@specforge/api-types/dist/stores/index.js +11 -0
  220. package/node_modules/@specforge/api-types/dist/stores/index.js.map +1 -0
  221. package/node_modules/@specforge/api-types/package.json +43 -0
  222. package/node_modules/@specforge/report-types/README.md +11 -0
  223. package/node_modules/@specforge/report-types/dist/index.d.ts +2 -0
  224. package/node_modules/@specforge/report-types/dist/index.d.ts.map +1 -0
  225. package/node_modules/@specforge/report-types/dist/index.js +2 -0
  226. package/node_modules/@specforge/report-types/dist/index.js.map +1 -0
  227. package/node_modules/@specforge/report-types/dist/reports.d.ts +90 -0
  228. package/node_modules/@specforge/report-types/dist/reports.d.ts.map +1 -0
  229. package/node_modules/@specforge/report-types/dist/reports.js +15 -0
  230. package/node_modules/@specforge/report-types/dist/reports.js.map +1 -0
  231. package/node_modules/@specforge/report-types/package.json +40 -0
  232. package/node_modules/@specforge/session-types/CHANGELOG.md +56 -0
  233. package/node_modules/@specforge/session-types/README.md +18 -0
  234. package/node_modules/@specforge/session-types/dist/index.d.ts +47 -0
  235. package/node_modules/@specforge/session-types/dist/index.d.ts.map +1 -0
  236. package/node_modules/@specforge/session-types/dist/index.js +47 -0
  237. package/node_modules/@specforge/session-types/dist/index.js.map +1 -0
  238. package/node_modules/@specforge/session-types/dist/runtime/aggregator-input.d.ts +46 -0
  239. package/node_modules/@specforge/session-types/dist/runtime/aggregator-input.d.ts.map +1 -0
  240. package/node_modules/@specforge/session-types/dist/runtime/aggregator-input.js +41 -0
  241. package/node_modules/@specforge/session-types/dist/runtime/aggregator-input.js.map +1 -0
  242. package/node_modules/@specforge/session-types/dist/runtime/discovery.d.ts +9 -0
  243. package/node_modules/@specforge/session-types/dist/runtime/discovery.d.ts.map +1 -0
  244. package/node_modules/@specforge/session-types/dist/runtime/discovery.js +2 -0
  245. package/node_modules/@specforge/session-types/dist/runtime/discovery.js.map +1 -0
  246. package/node_modules/@specforge/session-types/dist/runtime/enums.d.ts +51 -0
  247. package/node_modules/@specforge/session-types/dist/runtime/enums.d.ts.map +1 -0
  248. package/node_modules/@specforge/session-types/dist/runtime/enums.js +161 -0
  249. package/node_modules/@specforge/session-types/dist/runtime/enums.js.map +1 -0
  250. package/node_modules/@specforge/session-types/dist/runtime/implementation-config.d.ts +177 -0
  251. package/node_modules/@specforge/session-types/dist/runtime/implementation-config.d.ts.map +1 -0
  252. package/node_modules/@specforge/session-types/dist/runtime/implementation-config.js +96 -0
  253. package/node_modules/@specforge/session-types/dist/runtime/implementation-config.js.map +1 -0
  254. package/node_modules/@specforge/session-types/dist/runtime/implementation-record-event.d.ts +8 -0
  255. package/node_modules/@specforge/session-types/dist/runtime/implementation-record-event.d.ts.map +1 -0
  256. package/node_modules/@specforge/session-types/dist/runtime/implementation-record-event.js +2 -0
  257. package/node_modules/@specforge/session-types/dist/runtime/implementation-record-event.js.map +1 -0
  258. package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.d.ts +489 -0
  259. package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.d.ts.map +1 -0
  260. package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.js +152 -0
  261. package/node_modules/@specforge/session-types/dist/runtime/implementation-session-aggregate.js.map +1 -0
  262. package/node_modules/@specforge/session-types/dist/runtime/implementation-session.d.ts +8 -0
  263. package/node_modules/@specforge/session-types/dist/runtime/implementation-session.d.ts.map +1 -0
  264. package/node_modules/@specforge/session-types/dist/runtime/implementation-session.js +2 -0
  265. package/node_modules/@specforge/session-types/dist/runtime/implementation-session.js.map +1 -0
  266. package/node_modules/@specforge/session-types/dist/runtime/lifecycle-contract.d.ts +319 -0
  267. package/node_modules/@specforge/session-types/dist/runtime/lifecycle-contract.d.ts.map +1 -0
  268. package/node_modules/@specforge/session-types/dist/runtime/lifecycle-contract.js +2 -0
  269. package/node_modules/@specforge/session-types/dist/runtime/lifecycle-contract.js.map +1 -0
  270. package/node_modules/@specforge/session-types/dist/runtime/lifecycle-planning-guidance.d.ts +128 -0
  271. package/node_modules/@specforge/session-types/dist/runtime/lifecycle-planning-guidance.d.ts.map +1 -0
  272. package/node_modules/@specforge/session-types/dist/runtime/lifecycle-planning-guidance.js +30 -0
  273. package/node_modules/@specforge/session-types/dist/runtime/lifecycle-planning-guidance.js.map +1 -0
  274. package/node_modules/@specforge/session-types/dist/runtime/parsed-git-evidence.d.ts +4 -0
  275. package/node_modules/@specforge/session-types/dist/runtime/parsed-git-evidence.d.ts.map +1 -0
  276. package/node_modules/@specforge/session-types/dist/runtime/parsed-git-evidence.js +2 -0
  277. package/node_modules/@specforge/session-types/dist/runtime/parsed-git-evidence.js.map +1 -0
  278. package/node_modules/@specforge/session-types/dist/runtime/planning-config.d.ts +82 -0
  279. package/node_modules/@specforge/session-types/dist/runtime/planning-config.d.ts.map +1 -0
  280. package/node_modules/@specforge/session-types/dist/runtime/planning-config.js +61 -0
  281. package/node_modules/@specforge/session-types/dist/runtime/planning-config.js.map +1 -0
  282. package/node_modules/@specforge/session-types/dist/runtime/planning-entity-score-datapoint.d.ts +34 -0
  283. package/node_modules/@specforge/session-types/dist/runtime/planning-entity-score-datapoint.d.ts.map +1 -0
  284. package/node_modules/@specforge/session-types/dist/runtime/planning-entity-score-datapoint.js +14 -0
  285. package/node_modules/@specforge/session-types/dist/runtime/planning-entity-score-datapoint.js.map +1 -0
  286. package/node_modules/@specforge/session-types/dist/runtime/planning-operations.d.ts +6 -0
  287. package/node_modules/@specforge/session-types/dist/runtime/planning-operations.d.ts.map +1 -0
  288. package/node_modules/@specforge/session-types/dist/runtime/planning-operations.js +65 -0
  289. package/node_modules/@specforge/session-types/dist/runtime/planning-operations.js.map +1 -0
  290. package/node_modules/@specforge/session-types/dist/runtime/planning-phase-transition.d.ts +34 -0
  291. package/node_modules/@specforge/session-types/dist/runtime/planning-phase-transition.d.ts.map +1 -0
  292. package/node_modules/@specforge/session-types/dist/runtime/planning-phase-transition.js +22 -0
  293. package/node_modules/@specforge/session-types/dist/runtime/planning-phase-transition.js.map +1 -0
  294. package/node_modules/@specforge/session-types/dist/runtime/planning-session-action.d.ts +73 -0
  295. package/node_modules/@specforge/session-types/dist/runtime/planning-session-action.d.ts.map +1 -0
  296. package/node_modules/@specforge/session-types/dist/runtime/planning-session-action.js +61 -0
  297. package/node_modules/@specforge/session-types/dist/runtime/planning-session-action.js.map +1 -0
  298. package/node_modules/@specforge/session-types/dist/runtime/planning-session-aggregate.d.ts +249 -0
  299. package/node_modules/@specforge/session-types/dist/runtime/planning-session-aggregate.d.ts.map +1 -0
  300. package/node_modules/@specforge/session-types/dist/runtime/planning-session-aggregate.js +96 -0
  301. package/node_modules/@specforge/session-types/dist/runtime/planning-session-aggregate.js.map +1 -0
  302. package/node_modules/@specforge/session-types/dist/runtime/planning-session.d.ts +574 -0
  303. package/node_modules/@specforge/session-types/dist/runtime/planning-session.d.ts.map +1 -0
  304. package/node_modules/@specforge/session-types/dist/runtime/planning-session.js +40 -0
  305. package/node_modules/@specforge/session-types/dist/runtime/planning-session.js.map +1 -0
  306. package/node_modules/@specforge/session-types/dist/runtime/process-guidance.d.ts +221 -0
  307. package/node_modules/@specforge/session-types/dist/runtime/process-guidance.d.ts.map +1 -0
  308. package/node_modules/@specforge/session-types/dist/runtime/process-guidance.js +41 -0
  309. package/node_modules/@specforge/session-types/dist/runtime/process-guidance.js.map +1 -0
  310. package/node_modules/@specforge/session-types/dist/runtime/work-session-acceptance-check.d.ts +4 -0
  311. package/node_modules/@specforge/session-types/dist/runtime/work-session-acceptance-check.d.ts.map +1 -0
  312. package/node_modules/@specforge/session-types/dist/runtime/work-session-acceptance-check.js +2 -0
  313. package/node_modules/@specforge/session-types/dist/runtime/work-session-acceptance-check.js.map +1 -0
  314. package/node_modules/@specforge/session-types/dist/runtime/work-session-action.d.ts +9 -0
  315. package/node_modules/@specforge/session-types/dist/runtime/work-session-action.d.ts.map +1 -0
  316. package/node_modules/@specforge/session-types/dist/runtime/work-session-action.js +2 -0
  317. package/node_modules/@specforge/session-types/dist/runtime/work-session-action.js.map +1 -0
  318. package/node_modules/@specforge/session-types/dist/runtime/work-session-file-change.d.ts +4 -0
  319. package/node_modules/@specforge/session-types/dist/runtime/work-session-file-change.d.ts.map +1 -0
  320. package/node_modules/@specforge/session-types/dist/runtime/work-session-file-change.js +2 -0
  321. package/node_modules/@specforge/session-types/dist/runtime/work-session-file-change.js.map +1 -0
  322. package/node_modules/@specforge/session-types/dist/runtime/work-session-impl-step-completion.d.ts +4 -0
  323. package/node_modules/@specforge/session-types/dist/runtime/work-session-impl-step-completion.d.ts.map +1 -0
  324. package/node_modules/@specforge/session-types/dist/runtime/work-session-impl-step-completion.js +2 -0
  325. package/node_modules/@specforge/session-types/dist/runtime/work-session-impl-step-completion.js.map +1 -0
  326. package/node_modules/@specforge/session-types/dist/runtime/work-session-resolution.d.ts +4 -0
  327. package/node_modules/@specforge/session-types/dist/runtime/work-session-resolution.d.ts.map +1 -0
  328. package/node_modules/@specforge/session-types/dist/runtime/work-session-resolution.js +2 -0
  329. package/node_modules/@specforge/session-types/dist/runtime/work-session-resolution.js.map +1 -0
  330. package/node_modules/@specforge/session-types/dist/runtime/work-session-test-result.d.ts +4 -0
  331. package/node_modules/@specforge/session-types/dist/runtime/work-session-test-result.d.ts.map +1 -0
  332. package/node_modules/@specforge/session-types/dist/runtime/work-session-test-result.js +2 -0
  333. package/node_modules/@specforge/session-types/dist/runtime/work-session-test-result.js.map +1 -0
  334. package/node_modules/@specforge/session-types/dist/runtime/work-session.d.ts +4 -0
  335. package/node_modules/@specforge/session-types/dist/runtime/work-session.d.ts.map +1 -0
  336. package/node_modules/@specforge/session-types/dist/runtime/work-session.js +2 -0
  337. package/node_modules/@specforge/session-types/dist/runtime/work-session.js.map +1 -0
  338. package/node_modules/@specforge/session-types/dist/runtime/working-context.d.ts +43 -0
  339. package/node_modules/@specforge/session-types/dist/runtime/working-context.d.ts.map +1 -0
  340. package/node_modules/@specforge/session-types/dist/runtime/working-context.js +2 -0
  341. package/node_modules/@specforge/session-types/dist/runtime/working-context.js.map +1 -0
  342. package/node_modules/@specforge/session-types/dist/runtime/write-plan.d.ts +146 -0
  343. package/node_modules/@specforge/session-types/dist/runtime/write-plan.d.ts.map +1 -0
  344. package/node_modules/@specforge/session-types/dist/runtime/write-plan.js +2 -0
  345. package/node_modules/@specforge/session-types/dist/runtime/write-plan.js.map +1 -0
  346. package/node_modules/@specforge/session-types/dist/schema/discovery.d.ts +76 -0
  347. package/node_modules/@specforge/session-types/dist/schema/discovery.d.ts.map +1 -0
  348. package/node_modules/@specforge/session-types/dist/schema/discovery.js +42 -0
  349. package/node_modules/@specforge/session-types/dist/schema/discovery.js.map +1 -0
  350. package/node_modules/@specforge/session-types/dist/schema/implementation-record-event.d.ts +48 -0
  351. package/node_modules/@specforge/session-types/dist/schema/implementation-record-event.d.ts.map +1 -0
  352. package/node_modules/@specforge/session-types/dist/schema/implementation-record-event.js +28 -0
  353. package/node_modules/@specforge/session-types/dist/schema/implementation-record-event.js.map +1 -0
  354. package/node_modules/@specforge/session-types/dist/schema/implementation-session.d.ts +37 -0
  355. package/node_modules/@specforge/session-types/dist/schema/implementation-session.d.ts.map +1 -0
  356. package/node_modules/@specforge/session-types/dist/schema/implementation-session.js +24 -0
  357. package/node_modules/@specforge/session-types/dist/schema/implementation-session.js.map +1 -0
  358. package/node_modules/@specforge/session-types/dist/schema/index.d.ts +12 -0
  359. package/node_modules/@specforge/session-types/dist/schema/index.d.ts.map +1 -0
  360. package/node_modules/@specforge/session-types/dist/schema/index.js +12 -0
  361. package/node_modules/@specforge/session-types/dist/schema/index.js.map +1 -0
  362. package/node_modules/@specforge/session-types/dist/schema/parsed-git-evidence.d.ts +74 -0
  363. package/node_modules/@specforge/session-types/dist/schema/parsed-git-evidence.d.ts.map +1 -0
  364. package/node_modules/@specforge/session-types/dist/schema/parsed-git-evidence.js +31 -0
  365. package/node_modules/@specforge/session-types/dist/schema/parsed-git-evidence.js.map +1 -0
  366. package/node_modules/@specforge/session-types/dist/schema/work-session-acceptance-check.d.ts +27 -0
  367. package/node_modules/@specforge/session-types/dist/schema/work-session-acceptance-check.d.ts.map +1 -0
  368. package/node_modules/@specforge/session-types/dist/schema/work-session-acceptance-check.js +11 -0
  369. package/node_modules/@specforge/session-types/dist/schema/work-session-acceptance-check.js.map +1 -0
  370. package/node_modules/@specforge/session-types/dist/schema/work-session-action.d.ts +94 -0
  371. package/node_modules/@specforge/session-types/dist/schema/work-session-action.d.ts.map +1 -0
  372. package/node_modules/@specforge/session-types/dist/schema/work-session-action.js +76 -0
  373. package/node_modules/@specforge/session-types/dist/schema/work-session-action.js.map +1 -0
  374. package/node_modules/@specforge/session-types/dist/schema/work-session-file-change.d.ts +42 -0
  375. package/node_modules/@specforge/session-types/dist/schema/work-session-file-change.d.ts.map +1 -0
  376. package/node_modules/@specforge/session-types/dist/schema/work-session-file-change.js +25 -0
  377. package/node_modules/@specforge/session-types/dist/schema/work-session-file-change.js.map +1 -0
  378. package/node_modules/@specforge/session-types/dist/schema/work-session-impl-step-completion.d.ts +27 -0
  379. package/node_modules/@specforge/session-types/dist/schema/work-session-impl-step-completion.d.ts.map +1 -0
  380. package/node_modules/@specforge/session-types/dist/schema/work-session-impl-step-completion.js +11 -0
  381. package/node_modules/@specforge/session-types/dist/schema/work-session-impl-step-completion.js.map +1 -0
  382. package/node_modules/@specforge/session-types/dist/schema/work-session-resolution.d.ts +42 -0
  383. package/node_modules/@specforge/session-types/dist/schema/work-session-resolution.d.ts.map +1 -0
  384. package/node_modules/@specforge/session-types/dist/schema/work-session-resolution.js +28 -0
  385. package/node_modules/@specforge/session-types/dist/schema/work-session-resolution.js.map +1 -0
  386. package/node_modules/@specforge/session-types/dist/schema/work-session-test-result.d.ts +72 -0
  387. package/node_modules/@specforge/session-types/dist/schema/work-session-test-result.d.ts.map +1 -0
  388. package/node_modules/@specforge/session-types/dist/schema/work-session-test-result.js +43 -0
  389. package/node_modules/@specforge/session-types/dist/schema/work-session-test-result.js.map +1 -0
  390. package/node_modules/@specforge/session-types/dist/schema/work-session.d.ts +203 -0
  391. package/node_modules/@specforge/session-types/dist/schema/work-session.d.ts.map +1 -0
  392. package/node_modules/@specforge/session-types/dist/schema/work-session.js +86 -0
  393. package/node_modules/@specforge/session-types/dist/schema/work-session.js.map +1 -0
  394. package/node_modules/@specforge/session-types/dist/stores/config-store-interface.d.ts +17 -0
  395. package/node_modules/@specforge/session-types/dist/stores/config-store-interface.d.ts.map +1 -0
  396. package/node_modules/@specforge/session-types/dist/stores/config-store-interface.js +2 -0
  397. package/node_modules/@specforge/session-types/dist/stores/config-store-interface.js.map +1 -0
  398. package/node_modules/@specforge/session-types/dist/stores/discovery-store.d.ts +31 -0
  399. package/node_modules/@specforge/session-types/dist/stores/discovery-store.d.ts.map +1 -0
  400. package/node_modules/@specforge/session-types/dist/stores/discovery-store.js +2 -0
  401. package/node_modules/@specforge/session-types/dist/stores/discovery-store.js.map +1 -0
  402. package/node_modules/@specforge/session-types/dist/stores/implementation-record-event-store.d.ts +19 -0
  403. package/node_modules/@specforge/session-types/dist/stores/implementation-record-event-store.d.ts.map +1 -0
  404. package/node_modules/@specforge/session-types/dist/stores/implementation-record-event-store.js +2 -0
  405. package/node_modules/@specforge/session-types/dist/stores/implementation-record-event-store.js.map +1 -0
  406. package/node_modules/@specforge/session-types/dist/stores/implementation-session-aggregate-store.d.ts +16 -0
  407. package/node_modules/@specforge/session-types/dist/stores/implementation-session-aggregate-store.d.ts.map +1 -0
  408. package/node_modules/@specforge/session-types/dist/stores/implementation-session-aggregate-store.js +2 -0
  409. package/node_modules/@specforge/session-types/dist/stores/implementation-session-aggregate-store.js.map +1 -0
  410. package/node_modules/@specforge/session-types/dist/stores/implementation-session-store.d.ts +28 -0
  411. package/node_modules/@specforge/session-types/dist/stores/implementation-session-store.d.ts.map +1 -0
  412. package/node_modules/@specforge/session-types/dist/stores/implementation-session-store.js +2 -0
  413. package/node_modules/@specforge/session-types/dist/stores/implementation-session-store.js.map +1 -0
  414. package/node_modules/@specforge/session-types/dist/stores/planning-entity-score-datapoint-store.d.ts +12 -0
  415. package/node_modules/@specforge/session-types/dist/stores/planning-entity-score-datapoint-store.d.ts.map +1 -0
  416. package/node_modules/@specforge/session-types/dist/stores/planning-entity-score-datapoint-store.js +2 -0
  417. package/node_modules/@specforge/session-types/dist/stores/planning-entity-score-datapoint-store.js.map +1 -0
  418. package/node_modules/@specforge/session-types/dist/stores/planning-phase-transition-store.d.ts +10 -0
  419. package/node_modules/@specforge/session-types/dist/stores/planning-phase-transition-store.d.ts.map +1 -0
  420. package/node_modules/@specforge/session-types/dist/stores/planning-phase-transition-store.js +2 -0
  421. package/node_modules/@specforge/session-types/dist/stores/planning-phase-transition-store.js.map +1 -0
  422. package/node_modules/@specforge/session-types/dist/stores/planning-session-action-store.d.ts +13 -0
  423. package/node_modules/@specforge/session-types/dist/stores/planning-session-action-store.d.ts.map +1 -0
  424. package/node_modules/@specforge/session-types/dist/stores/planning-session-action-store.js +2 -0
  425. package/node_modules/@specforge/session-types/dist/stores/planning-session-action-store.js.map +1 -0
  426. package/node_modules/@specforge/session-types/dist/stores/planning-session-aggregate-store.d.ts +10 -0
  427. package/node_modules/@specforge/session-types/dist/stores/planning-session-aggregate-store.d.ts.map +1 -0
  428. package/node_modules/@specforge/session-types/dist/stores/planning-session-aggregate-store.js +2 -0
  429. package/node_modules/@specforge/session-types/dist/stores/planning-session-aggregate-store.js.map +1 -0
  430. package/node_modules/@specforge/session-types/dist/stores/planning-session-store.d.ts +20 -0
  431. package/node_modules/@specforge/session-types/dist/stores/planning-session-store.d.ts.map +1 -0
  432. package/node_modules/@specforge/session-types/dist/stores/planning-session-store.js +2 -0
  433. package/node_modules/@specforge/session-types/dist/stores/planning-session-store.js.map +1 -0
  434. package/node_modules/@specforge/session-types/dist/stores/work-session-acceptance-check-store.d.ts +15 -0
  435. package/node_modules/@specforge/session-types/dist/stores/work-session-acceptance-check-store.d.ts.map +1 -0
  436. package/node_modules/@specforge/session-types/dist/stores/work-session-acceptance-check-store.js +2 -0
  437. package/node_modules/@specforge/session-types/dist/stores/work-session-acceptance-check-store.js.map +1 -0
  438. package/node_modules/@specforge/session-types/dist/stores/work-session-action-store.d.ts +29 -0
  439. package/node_modules/@specforge/session-types/dist/stores/work-session-action-store.d.ts.map +1 -0
  440. package/node_modules/@specforge/session-types/dist/stores/work-session-action-store.js +2 -0
  441. package/node_modules/@specforge/session-types/dist/stores/work-session-action-store.js.map +1 -0
  442. package/node_modules/@specforge/session-types/dist/stores/work-session-file-change-store.d.ts +9 -0
  443. package/node_modules/@specforge/session-types/dist/stores/work-session-file-change-store.d.ts.map +1 -0
  444. package/node_modules/@specforge/session-types/dist/stores/work-session-file-change-store.js +2 -0
  445. package/node_modules/@specforge/session-types/dist/stores/work-session-file-change-store.js.map +1 -0
  446. package/node_modules/@specforge/session-types/dist/stores/work-session-impl-step-completion-store.d.ts +9 -0
  447. package/node_modules/@specforge/session-types/dist/stores/work-session-impl-step-completion-store.d.ts.map +1 -0
  448. package/node_modules/@specforge/session-types/dist/stores/work-session-impl-step-completion-store.js +2 -0
  449. package/node_modules/@specforge/session-types/dist/stores/work-session-impl-step-completion-store.js.map +1 -0
  450. package/node_modules/@specforge/session-types/dist/stores/work-session-resolution-store.d.ts +10 -0
  451. package/node_modules/@specforge/session-types/dist/stores/work-session-resolution-store.d.ts.map +1 -0
  452. package/node_modules/@specforge/session-types/dist/stores/work-session-resolution-store.js +2 -0
  453. package/node_modules/@specforge/session-types/dist/stores/work-session-resolution-store.js.map +1 -0
  454. package/node_modules/@specforge/session-types/dist/stores/work-session-store.d.ts +23 -0
  455. package/node_modules/@specforge/session-types/dist/stores/work-session-store.d.ts.map +1 -0
  456. package/node_modules/@specforge/session-types/dist/stores/work-session-store.js +2 -0
  457. package/node_modules/@specforge/session-types/dist/stores/work-session-store.js.map +1 -0
  458. package/node_modules/@specforge/session-types/dist/stores/work-session-test-result-store.d.ts +8 -0
  459. package/node_modules/@specforge/session-types/dist/stores/work-session-test-result-store.d.ts.map +1 -0
  460. package/node_modules/@specforge/session-types/dist/stores/work-session-test-result-store.js +2 -0
  461. package/node_modules/@specforge/session-types/dist/stores/work-session-test-result-store.js.map +1 -0
  462. package/node_modules/@specforge/session-types/dist/stores/working-context-store.d.ts +27 -0
  463. package/node_modules/@specforge/session-types/dist/stores/working-context-store.d.ts.map +1 -0
  464. package/node_modules/@specforge/session-types/dist/stores/working-context-store.js +2 -0
  465. package/node_modules/@specforge/session-types/dist/stores/working-context-store.js.map +1 -0
  466. package/node_modules/@specforge/session-types/package.json +43 -0
  467. package/node_modules/@specforge/spec-types/README.md +28 -0
  468. package/node_modules/@specforge/spec-types/dist/index.d.ts +4 -0
  469. package/node_modules/@specforge/spec-types/dist/index.d.ts.map +1 -0
  470. package/node_modules/@specforge/spec-types/dist/index.js +6 -0
  471. package/node_modules/@specforge/spec-types/dist/index.js.map +1 -0
  472. package/node_modules/@specforge/spec-types/dist/json-schema/v1.1/openspec.schema.json +1129 -0
  473. package/node_modules/@specforge/spec-types/dist/openspec-schema.d.ts +4 -0
  474. package/node_modules/@specforge/spec-types/dist/openspec-schema.d.ts.map +1 -0
  475. package/node_modules/@specforge/spec-types/dist/openspec-schema.js +77 -0
  476. package/node_modules/@specforge/spec-types/dist/openspec-schema.js.map +1 -0
  477. package/node_modules/@specforge/spec-types/dist/runtime/auxiliary.d.ts +14 -0
  478. package/node_modules/@specforge/spec-types/dist/runtime/auxiliary.d.ts.map +1 -0
  479. package/node_modules/@specforge/spec-types/dist/runtime/auxiliary.js +2 -0
  480. package/node_modules/@specforge/spec-types/dist/runtime/auxiliary.js.map +1 -0
  481. package/node_modules/@specforge/spec-types/dist/runtime/blueprint.d.ts +7 -0
  482. package/node_modules/@specforge/spec-types/dist/runtime/blueprint.d.ts.map +1 -0
  483. package/node_modules/@specforge/spec-types/dist/runtime/blueprint.js +2 -0
  484. package/node_modules/@specforge/spec-types/dist/runtime/blueprint.js.map +1 -0
  485. package/node_modules/@specforge/spec-types/dist/runtime/epic.d.ts +2 -0
  486. package/node_modules/@specforge/spec-types/dist/runtime/epic.d.ts.map +1 -0
  487. package/node_modules/@specforge/spec-types/dist/runtime/epic.js +2 -0
  488. package/node_modules/@specforge/spec-types/dist/runtime/epic.js.map +1 -0
  489. package/node_modules/@specforge/spec-types/dist/runtime/index.d.ts +7 -0
  490. package/node_modules/@specforge/spec-types/dist/runtime/index.d.ts.map +1 -0
  491. package/node_modules/@specforge/spec-types/dist/runtime/index.js +7 -0
  492. package/node_modules/@specforge/spec-types/dist/runtime/index.js.map +1 -0
  493. package/node_modules/@specforge/spec-types/dist/runtime/planning/api-contract.d.ts +2 -0
  494. package/node_modules/@specforge/spec-types/dist/runtime/planning/api-contract.d.ts.map +1 -0
  495. package/node_modules/@specforge/spec-types/dist/runtime/planning/api-contract.js +2 -0
  496. package/node_modules/@specforge/spec-types/dist/runtime/planning/api-contract.js.map +1 -0
  497. package/node_modules/@specforge/spec-types/dist/runtime/planning/goal.d.ts +2 -0
  498. package/node_modules/@specforge/spec-types/dist/runtime/planning/goal.d.ts.map +1 -0
  499. package/node_modules/@specforge/spec-types/dist/runtime/planning/goal.js +2 -0
  500. package/node_modules/@specforge/spec-types/dist/runtime/planning/goal.js.map +1 -0
  501. package/node_modules/@specforge/spec-types/dist/runtime/planning/guardrail.d.ts +2 -0
  502. package/node_modules/@specforge/spec-types/dist/runtime/planning/guardrail.d.ts.map +1 -0
  503. package/node_modules/@specforge/spec-types/dist/runtime/planning/guardrail.js +2 -0
  504. package/node_modules/@specforge/spec-types/dist/runtime/planning/guardrail.js.map +1 -0
  505. package/node_modules/@specforge/spec-types/dist/runtime/planning/index.d.ts +10 -0
  506. package/node_modules/@specforge/spec-types/dist/runtime/planning/index.d.ts.map +1 -0
  507. package/node_modules/@specforge/spec-types/dist/runtime/planning/index.js +10 -0
  508. package/node_modules/@specforge/spec-types/dist/runtime/planning/index.js.map +1 -0
  509. package/node_modules/@specforge/spec-types/dist/runtime/planning/nfr.d.ts +2 -0
  510. package/node_modules/@specforge/spec-types/dist/runtime/planning/nfr.d.ts.map +1 -0
  511. package/node_modules/@specforge/spec-types/dist/runtime/planning/nfr.js +2 -0
  512. package/node_modules/@specforge/spec-types/dist/runtime/planning/nfr.js.map +1 -0
  513. package/node_modules/@specforge/spec-types/dist/runtime/planning/requirement.d.ts +2 -0
  514. package/node_modules/@specforge/spec-types/dist/runtime/planning/requirement.d.ts.map +1 -0
  515. package/node_modules/@specforge/spec-types/dist/runtime/planning/requirement.js +2 -0
  516. package/node_modules/@specforge/spec-types/dist/runtime/planning/requirement.js.map +1 -0
  517. package/node_modules/@specforge/spec-types/dist/runtime/planning/scope.d.ts +2 -0
  518. package/node_modules/@specforge/spec-types/dist/runtime/planning/scope.d.ts.map +1 -0
  519. package/node_modules/@specforge/spec-types/dist/runtime/planning/scope.js +2 -0
  520. package/node_modules/@specforge/spec-types/dist/runtime/planning/scope.js.map +1 -0
  521. package/node_modules/@specforge/spec-types/dist/runtime/planning/shared-pattern.d.ts +2 -0
  522. package/node_modules/@specforge/spec-types/dist/runtime/planning/shared-pattern.d.ts.map +1 -0
  523. package/node_modules/@specforge/spec-types/dist/runtime/planning/shared-pattern.js +2 -0
  524. package/node_modules/@specforge/spec-types/dist/runtime/planning/shared-pattern.js.map +1 -0
  525. package/node_modules/@specforge/spec-types/dist/runtime/planning/structure-item.d.ts +2 -0
  526. package/node_modules/@specforge/spec-types/dist/runtime/planning/structure-item.d.ts.map +1 -0
  527. package/node_modules/@specforge/spec-types/dist/runtime/planning/structure-item.js +2 -0
  528. package/node_modules/@specforge/spec-types/dist/runtime/planning/structure-item.js.map +1 -0
  529. package/node_modules/@specforge/spec-types/dist/runtime/planning/tech-stack.d.ts +2 -0
  530. package/node_modules/@specforge/spec-types/dist/runtime/planning/tech-stack.d.ts.map +1 -0
  531. package/node_modules/@specforge/spec-types/dist/runtime/planning/tech-stack.js +2 -0
  532. package/node_modules/@specforge/spec-types/dist/runtime/planning/tech-stack.js.map +1 -0
  533. package/node_modules/@specforge/spec-types/dist/runtime/specification.d.ts +2 -0
  534. package/node_modules/@specforge/spec-types/dist/runtime/specification.d.ts.map +1 -0
  535. package/node_modules/@specforge/spec-types/dist/runtime/specification.js +2 -0
  536. package/node_modules/@specforge/spec-types/dist/runtime/specification.js.map +1 -0
  537. package/node_modules/@specforge/spec-types/dist/runtime/ticket.d.ts +2 -0
  538. package/node_modules/@specforge/spec-types/dist/runtime/ticket.d.ts.map +1 -0
  539. package/node_modules/@specforge/spec-types/dist/runtime/ticket.js +2 -0
  540. package/node_modules/@specforge/spec-types/dist/runtime/ticket.js.map +1 -0
  541. package/node_modules/@specforge/spec-types/dist/schema/auxiliary.d.ts +266 -0
  542. package/node_modules/@specforge/spec-types/dist/schema/auxiliary.d.ts.map +1 -0
  543. package/node_modules/@specforge/spec-types/dist/schema/auxiliary.js +143 -0
  544. package/node_modules/@specforge/spec-types/dist/schema/auxiliary.js.map +1 -0
  545. package/node_modules/@specforge/spec-types/dist/schema/blueprint.d.ts +47 -0
  546. package/node_modules/@specforge/spec-types/dist/schema/blueprint.d.ts.map +1 -0
  547. package/node_modules/@specforge/spec-types/dist/schema/blueprint.js +33 -0
  548. package/node_modules/@specforge/spec-types/dist/schema/blueprint.js.map +1 -0
  549. package/node_modules/@specforge/spec-types/dist/schema/entity-field-schemas.d.ts +33 -0
  550. package/node_modules/@specforge/spec-types/dist/schema/entity-field-schemas.d.ts.map +1 -0
  551. package/node_modules/@specforge/spec-types/dist/schema/entity-field-schemas.js +181 -0
  552. package/node_modules/@specforge/spec-types/dist/schema/entity-field-schemas.js.map +1 -0
  553. package/node_modules/@specforge/spec-types/dist/schema/epic.d.ts +955 -0
  554. package/node_modules/@specforge/spec-types/dist/schema/epic.d.ts.map +1 -0
  555. package/node_modules/@specforge/spec-types/dist/schema/epic.js +33 -0
  556. package/node_modules/@specforge/spec-types/dist/schema/epic.js.map +1 -0
  557. package/node_modules/@specforge/spec-types/dist/schema/index.d.ts +12 -0
  558. package/node_modules/@specforge/spec-types/dist/schema/index.d.ts.map +1 -0
  559. package/node_modules/@specforge/spec-types/dist/schema/index.js +25 -0
  560. package/node_modules/@specforge/spec-types/dist/schema/index.js.map +1 -0
  561. package/node_modules/@specforge/spec-types/dist/schema/node-verb-steps.d.ts +174 -0
  562. package/node_modules/@specforge/spec-types/dist/schema/node-verb-steps.d.ts.map +1 -0
  563. package/node_modules/@specforge/spec-types/dist/schema/node-verb-steps.js +317 -0
  564. package/node_modules/@specforge/spec-types/dist/schema/node-verb-steps.js.map +1 -0
  565. package/node_modules/@specforge/spec-types/dist/schema/patterns.d.ts +274 -0
  566. package/node_modules/@specforge/spec-types/dist/schema/patterns.d.ts.map +1 -0
  567. package/node_modules/@specforge/spec-types/dist/schema/patterns.js +106 -0
  568. package/node_modules/@specforge/spec-types/dist/schema/patterns.js.map +1 -0
  569. package/node_modules/@specforge/spec-types/dist/schema/planning/api-contract.d.ts +44 -0
  570. package/node_modules/@specforge/spec-types/dist/schema/planning/api-contract.d.ts.map +1 -0
  571. package/node_modules/@specforge/spec-types/dist/schema/planning/api-contract.js +13 -0
  572. package/node_modules/@specforge/spec-types/dist/schema/planning/api-contract.js.map +1 -0
  573. package/node_modules/@specforge/spec-types/dist/schema/planning/epic-category.d.ts +21 -0
  574. package/node_modules/@specforge/spec-types/dist/schema/planning/epic-category.d.ts.map +1 -0
  575. package/node_modules/@specforge/spec-types/dist/schema/planning/epic-category.js +14 -0
  576. package/node_modules/@specforge/spec-types/dist/schema/planning/epic-category.js.map +1 -0
  577. package/node_modules/@specforge/spec-types/dist/schema/planning/goal.d.ts +27 -0
  578. package/node_modules/@specforge/spec-types/dist/schema/planning/goal.d.ts.map +1 -0
  579. package/node_modules/@specforge/spec-types/dist/schema/planning/goal.js +13 -0
  580. package/node_modules/@specforge/spec-types/dist/schema/planning/goal.js.map +1 -0
  581. package/node_modules/@specforge/spec-types/dist/schema/planning/guardrail.d.ts +29 -0
  582. package/node_modules/@specforge/spec-types/dist/schema/planning/guardrail.d.ts.map +1 -0
  583. package/node_modules/@specforge/spec-types/dist/schema/planning/guardrail.js +14 -0
  584. package/node_modules/@specforge/spec-types/dist/schema/planning/guardrail.js.map +1 -0
  585. package/node_modules/@specforge/spec-types/dist/schema/planning/index.d.ts +12 -0
  586. package/node_modules/@specforge/spec-types/dist/schema/planning/index.d.ts.map +1 -0
  587. package/node_modules/@specforge/spec-types/dist/schema/planning/index.js +12 -0
  588. package/node_modules/@specforge/spec-types/dist/schema/planning/index.js.map +1 -0
  589. package/node_modules/@specforge/spec-types/dist/schema/planning/nfr.d.ts +27 -0
  590. package/node_modules/@specforge/spec-types/dist/schema/planning/nfr.d.ts.map +1 -0
  591. package/node_modules/@specforge/spec-types/dist/schema/planning/nfr.js +15 -0
  592. package/node_modules/@specforge/spec-types/dist/schema/planning/nfr.js.map +1 -0
  593. package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.d.ts +17 -0
  594. package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.d.ts.map +1 -0
  595. package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.js +16 -0
  596. package/node_modules/@specforge/spec-types/dist/schema/planning/planning-type.js.map +1 -0
  597. package/node_modules/@specforge/spec-types/dist/schema/planning/requirement.d.ts +63 -0
  598. package/node_modules/@specforge/spec-types/dist/schema/planning/requirement.d.ts.map +1 -0
  599. package/node_modules/@specforge/spec-types/dist/schema/planning/requirement.js +16 -0
  600. package/node_modules/@specforge/spec-types/dist/schema/planning/requirement.js.map +1 -0
  601. package/node_modules/@specforge/spec-types/dist/schema/planning/scope.d.ts +19 -0
  602. package/node_modules/@specforge/spec-types/dist/schema/planning/scope.d.ts.map +1 -0
  603. package/node_modules/@specforge/spec-types/dist/schema/planning/scope.js +8 -0
  604. package/node_modules/@specforge/spec-types/dist/schema/planning/scope.js.map +1 -0
  605. package/node_modules/@specforge/spec-types/dist/schema/planning/shared-pattern.d.ts +51 -0
  606. package/node_modules/@specforge/spec-types/dist/schema/planning/shared-pattern.d.ts.map +1 -0
  607. package/node_modules/@specforge/spec-types/dist/schema/planning/shared-pattern.js +16 -0
  608. package/node_modules/@specforge/spec-types/dist/schema/planning/shared-pattern.js.map +1 -0
  609. package/node_modules/@specforge/spec-types/dist/schema/planning/structure-item.d.ts +19 -0
  610. package/node_modules/@specforge/spec-types/dist/schema/planning/structure-item.d.ts.map +1 -0
  611. package/node_modules/@specforge/spec-types/dist/schema/planning/structure-item.js +8 -0
  612. package/node_modules/@specforge/spec-types/dist/schema/planning/structure-item.js.map +1 -0
  613. package/node_modules/@specforge/spec-types/dist/schema/planning/tech-stack.d.ts +27 -0
  614. package/node_modules/@specforge/spec-types/dist/schema/planning/tech-stack.d.ts.map +1 -0
  615. package/node_modules/@specforge/spec-types/dist/schema/planning/tech-stack.js +14 -0
  616. package/node_modules/@specforge/spec-types/dist/schema/planning/tech-stack.js.map +1 -0
  617. package/node_modules/@specforge/spec-types/dist/schema/specification.d.ts +1839 -0
  618. package/node_modules/@specforge/spec-types/dist/schema/specification.d.ts.map +1 -0
  619. package/node_modules/@specforge/spec-types/dist/schema/specification.js +43 -0
  620. package/node_modules/@specforge/spec-types/dist/schema/specification.js.map +1 -0
  621. package/node_modules/@specforge/spec-types/dist/schema/step-link-coverage.d.ts +58 -0
  622. package/node_modules/@specforge/spec-types/dist/schema/step-link-coverage.d.ts.map +1 -0
  623. package/node_modules/@specforge/spec-types/dist/schema/step-link-coverage.js +73 -0
  624. package/node_modules/@specforge/spec-types/dist/schema/step-link-coverage.js.map +1 -0
  625. package/node_modules/@specforge/spec-types/dist/schema/step-link-ids.d.ts +71 -0
  626. package/node_modules/@specforge/spec-types/dist/schema/step-link-ids.d.ts.map +1 -0
  627. package/node_modules/@specforge/spec-types/dist/schema/step-link-ids.js +96 -0
  628. package/node_modules/@specforge/spec-types/dist/schema/step-link-ids.js.map +1 -0
  629. package/node_modules/@specforge/spec-types/dist/schema/ticket.d.ts +444 -0
  630. package/node_modules/@specforge/spec-types/dist/schema/ticket.d.ts.map +1 -0
  631. package/node_modules/@specforge/spec-types/dist/schema/ticket.js +49 -0
  632. package/node_modules/@specforge/spec-types/dist/schema/ticket.js.map +1 -0
  633. package/node_modules/@specforge/spec-types/package.json +41 -0
  634. package/package.json +40 -25
  635. package/src/cli/templates/agents/content/core/sfag-orchestrator.ts +135 -51
  636. package/src/cli/templates/agents/content/core/sfag-spec-creator.ts +124 -83
  637. package/src/cli/templates/agents/content/core/sfag-ticket-implementer.ts +247 -163
  638. package/src/cli/templates/agents/content/core/sfag-work-resolver.ts +211 -0
  639. package/src/cli/templates/agents/index.ts +2 -0
  640. package/src/cli/templates/content/sf-commit.ts +2 -2
  641. package/src/cli/templates/content/sf-reset.ts +45 -28
  642. package/src/cli/templates/skills/specforge-orchestrator.md +15 -10
  643. package/src/cli/templates/skills/specforge-worker.md +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["/**\n * SpecForge MCP Type Definitions\n *\n * Most wire-protocol types live in `@specforge/types` (the canonical source\n * of truth). This file re-exports them under stable CLI names and defines a\n * small set of CLI-internal shapes: work sessions, implementation context,\n * discovery/attempt summaries, git-link records, and structured acceptance\n * criteria with normalization helpers.\n */\n\n// -----------------------------------------------------------------------------\n// Schema enums and primitive types — re-exported from @specforge/types/schema\n// -----------------------------------------------------------------------------\n\nexport type {\n SpecificationStatus,\n EpicStatus,\n TicketStatus,\n DependencyType,\n} from '@specforge/types/schema';\n\nimport type {\n SpecificationStatus,\n EpicStatus,\n TicketStatus,\n} from '@specforge/types/schema';\n\n// -----------------------------------------------------------------------------\n// Runtime entity shapes — re-exported from @specforge/types/runtime\n// -----------------------------------------------------------------------------\n\nexport type {\n Project,\n Specification,\n NamingConventions,\n SpecificationCodeStandards,\n ReturnTypes,\n Epic,\n EpicSharedPatterns,\n EpicCommonFiles,\n Ticket,\n TicketTechnicalDetails,\n TicketDependency,\n} from '@specforge/types/runtime';\n\nimport type {\n Specification,\n Epic,\n Ticket,\n} from '@specforge/types/runtime';\n\nexport type { TicketImplementation } from '@specforge/types/schema';\n\n// -----------------------------------------------------------------------------\n// API wire types — re-exported from @specforge/types/api\n// -----------------------------------------------------------------------------\n\nexport type {\n ListResponse,\n DependencyTicketSummary,\n SpecificationStatusReport,\n EpicStatusReport,\n ImplementationSummary,\n TimeReport,\n BlockersReport,\n TicketUpdate,\n BulkUpdateRequest,\n BulkUpdateResult,\n BulkCreateTicketDefinition,\n BulkCreateDependencyDefinition,\n BulkCreateTicketsRequest,\n BulkCreatedTicketInfo,\n BulkCreateTicketsResult,\n BulkDependencyDefinition,\n BulkAddDependenciesRequest,\n BulkAddDependenciesResult,\n LookupProjectRequest,\n LookupProjectResult,\n LookupSpecificationRequest,\n LookupSpecificationResult,\n LookupEpicRequest,\n LookupEpicResult,\n LookupTicketRequest,\n LookupTicketResult,\n} from '@specforge/types/api';\n\nimport type { DependencyTicketSummary } from '@specforge/types/api';\n\n// =============================================================================\n// CLI-internal types below — no canonical equivalent in @specforge/types\n// =============================================================================\n\n// -----------------------------------------------------------------------------\n// Structured acceptance criteria (TS-001)\n// -----------------------------------------------------------------------------\n\n/**\n * Structured acceptance criterion with validation state.\n */\nexport interface AcceptanceCriterion {\n id: string;\n description: string;\n validated: boolean;\n validatedAt?: string;\n validatedBy?: string;\n notes?: string;\n}\n\n/**\n * Normalizes acceptance criteria from legacy string[] format to structured\n * `AcceptanceCriterion[]`. Provides backwards compatibility for old data\n * stored as string arrays.\n */\nexport function normalizeAcceptanceCriteria(\n criteria: (string | AcceptanceCriterion)[]\n): AcceptanceCriterion[] {\n return criteria.map((c, index) => {\n if (typeof c === 'string') {\n return {\n id: `ac-${index}-${Date.now()}`,\n description: c,\n validated: false,\n };\n }\n return c;\n });\n}\n\n// -----------------------------------------------------------------------------\n// Implementation context (returned by get_implementation_context)\n// -----------------------------------------------------------------------------\n\nexport interface RelatedTicketSummary {\n id: string;\n title: string;\n status: TicketStatus;\n sameEpic: boolean;\n}\n\nexport interface TestResultSummary {\n id: string;\n testType?: string;\n allPassed: boolean;\n passed: number;\n failed: number;\n total: number;\n runAt: string;\n}\n\nexport interface PreviousAttempt {\n attemptNumber: number;\n startedAt: string;\n endedAt?: string;\n result: 'completed' | 'failed' | 'in_progress';\n testResults: TestResultSummary[];\n summary?: string;\n}\n\nexport interface DiscoverySummary {\n id: string;\n type: string;\n severity: string;\n status: string;\n title: string;\n description: string;\n createdAt: string;\n}\n\nexport interface ActiveSessionSummary {\n id: string;\n status: string;\n startedAt: string;\n config: unknown;\n ticketsCompleted: string[];\n ticketsFailed: string[];\n ticketsSkipped: string[];\n totalActiveMinutes: number;\n}\n\n/**\n * Implementation context returned by get_implementation_context.\n */\nexport interface ImplementationContext {\n /** The ticket being implemented */\n ticket: Ticket;\n /** The epic containing the ticket */\n epic: Epic;\n /** The specification containing the epic */\n specification: Specification;\n /** Dependency information */\n dependencies: {\n /** Tickets that must be completed before this one */\n blockedBy: DependencyTicketSummary[];\n /** Tickets waiting on this one */\n blocks: DependencyTicketSummary[];\n };\n /** Related tickets */\n relatedTickets: RelatedTicketSummary[];\n /** Patterns and conventions from the project */\n patterns?: Record<string, unknown>;\n /** Active implementation session (Phase 5) */\n activeSession: ActiveSessionSummary | null;\n /** Previous implementation attempts (Phase 5) */\n previousAttempts: PreviousAttempt[];\n /** Related discoveries (Phase 5) */\n relatedDiscoveries: DiscoverySummary[];\n}\n\n// -----------------------------------------------------------------------------\n// Work session state (session-scoped tables)\n// -----------------------------------------------------------------------------\n\nexport interface WorkSession {\n id: string;\n ticketId: string;\n specificationId: string;\n projectId: string;\n epicId: string;\n implementationSessionId?: string;\n status: 'active' | 'paused' | 'completed' | 'failed';\n startedAt: string;\n pausedAt?: string;\n completedAt?: string;\n actualHours?: number;\n filesCreated?: string[];\n filesModified?: string[];\n filesDeleted?: string[];\n testsPassed?: boolean;\n retryCount: number;\n retryLog?: unknown;\n actions?: unknown;\n completionAttempts?: unknown;\n tokensUsed?: { inputTokens: number; outputTokens: number };\n costUsd?: number;\n durationMs?: number;\n commitSha?: string;\n modelUsed?: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface TicketAcceptanceCriterion {\n id: string;\n ticketId: string;\n description: string;\n order: number;\n createdAt?: string;\n updatedAt?: string;\n}\n\nexport interface WorkSessionACValidation {\n id: string;\n workSessionId: string;\n criterionId: string;\n validated: boolean;\n validatedAt?: string;\n notes?: string;\n createdAt?: string;\n updatedAt?: string;\n}\n\nexport interface TicketImplementationStep {\n id: string;\n ticketId: string;\n text: string;\n order: number;\n createdAt?: string;\n updatedAt?: string;\n}\n\nexport interface WorkSessionStepCompletion {\n id: string;\n workSessionId: string;\n stepId: string;\n completed: boolean;\n completedAt?: string;\n notes?: string;\n createdAt?: string;\n updatedAt?: string;\n}\n\n// -----------------------------------------------------------------------------\n// Test result types\n// -----------------------------------------------------------------------------\n\nexport type TestType =\n | 'unit'\n | 'integration'\n | 'e2e'\n | 'manual'\n | 'typescript'\n | 'lint'\n | 'build'\n | 'typecheck'\n | 'format'\n | 'security'\n | 'custom';\n\nexport interface WorkSessionTestResult {\n id: string;\n workSessionId: string;\n testType: TestType;\n passed: boolean;\n totalTests: number;\n passedTests: number;\n failedTests: number;\n skippedTests: number;\n coverage?: number;\n errorDetails?: string;\n command?: string;\n exitCode?: number;\n durationMs?: number;\n errorCount?: number;\n warningCount?: number;\n summary?: string;\n suites?: Array<{\n name: string;\n passed: number;\n failed: number;\n skipped?: number;\n duration?: number;\n }>;\n runAt: string;\n}\n\n/** @deprecated Use WorkSessionTestResult instead */\nexport type TicketTestResult = WorkSessionTestResult;\n\n// -----------------------------------------------------------------------------\n// Git integration\n// -----------------------------------------------------------------------------\n\nexport type LinkType = 'commit' | 'pull_request' | 'branch';\n\nexport interface TicketLink {\n id: string;\n ticketId: string;\n linkType: LinkType;\n url: string;\n sha?: string;\n prNumber?: number;\n title?: string;\n status?: string;\n createdAt: string;\n}\n\n// -----------------------------------------------------------------------------\n// Silence unused-import warnings for enum aliases referenced only by JSDoc\n// -----------------------------------------------------------------------------\n// (Each of these is re-exported above; the local `import type` pulls them\n// in so that embedded JSDoc cross-references resolve in editors.)\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype _ReferencedEnums = SpecificationStatus | EpicStatus;\n"],"mappings":"AAiHO,SAAS,4BACd,UACuB;AACvB,SAAO,SAAS,IAAI,CAAC,GAAG,UAAU;AAChC,QAAI,OAAO,MAAM,UAAU;AACzB,aAAO;AAAA,QACL,IAAI,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC;AAAA,QAC7B,aAAa;AAAA,QACb,WAAW;AAAA,MACb;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../src/types/index.ts"],"sourcesContent":["/**\n * SpecForge MCP Type Definitions\n *\n * Most wire-protocol types live in the surviving type packages\n * (@specforge/spec-types for spec-domain schema/runtime, @specforge/api-types\n * for API/wire entities, @specforge/report-types for status reports). This file\n * re-exports them under stable CLI names and defines a small set of CLI-internal\n * shapes: work sessions, implementation context, discovery/attempt summaries,\n * git-link records, and structured acceptance criteria with normalization helpers.\n */\n\n// -----------------------------------------------------------------------------\n// Spec-domain schema enums + entities + pattern shapes — from @specforge/spec-types\n// -----------------------------------------------------------------------------\n\nexport type {\n SpecificationStatus,\n EpicStatus,\n Specification,\n Epic,\n Ticket,\n TicketImplementation,\n NamingConventions,\n SpecificationCodeStandards,\n ReturnTypes,\n EpicSharedPatterns,\n EpicCommonFiles,\n TicketTechnicalDetails,\n} from '@specforge/spec-types';\n\nimport type {\n SpecificationStatus,\n EpicStatus,\n Specification,\n Epic,\n Ticket,\n} from '@specforge/spec-types';\n\n// -----------------------------------------------------------------------------\n// Canonical 5-value TicketStatus + Project entity + dependency summary — from\n// @specforge/api-types (the API/wire entity home; TicketStatus carries `blocked`).\n// -----------------------------------------------------------------------------\n\nexport type {\n TicketStatus,\n Project,\n DependencyTicketSummary,\n} from '@specforge/api-types';\n\nimport type {\n TicketStatus,\n DependencyTicketSummary,\n} from '@specforge/api-types';\n\n// -----------------------------------------------------------------------------\n// Status / analytic reports — from @specforge/report-types (the report family\n// embeds the spec-domain entities + Project; the CLI is its sole type-consumer).\n// -----------------------------------------------------------------------------\n\nexport type {\n SpecificationStatusReport,\n EpicStatusReport,\n ImplementationSummary,\n TimeReport,\n BlockersReport,\n} from '@specforge/report-types';\n\n// -----------------------------------------------------------------------------\n// Canonical work-session child-state types — re-exported from\n// @specforge/session-types (the single source of truth after the M14\n// convergence + the M15.1a DDB rename). These replace the former divergent\n// CLI-local AC-validation / step-completion shapes (which had `validated`/\n// `completed` and were missing `ticketId`/`projectId`): one name + one shape\n// end-to-end (`checked`/`done` + `ticketId`/`projectId`), no aliases.\n// -----------------------------------------------------------------------------\n\nexport type {\n WorkSessionAcceptanceCheck,\n WorkSessionImplStepCompletion,\n} from '@specforge/session-types';\n\n// =============================================================================\n// CLI-internal types below — no canonical equivalent in the type packages\n// =============================================================================\n\n// -----------------------------------------------------------------------------\n// Structured acceptance criteria (TS-001)\n// -----------------------------------------------------------------------------\n\n/**\n * Structured acceptance criterion with validation state.\n */\nexport interface AcceptanceCriterion {\n id: string;\n description: string;\n validated: boolean;\n validatedAt?: string;\n validatedBy?: string;\n notes?: string;\n}\n\n/**\n * Normalizes acceptance criteria from legacy string[] format to structured\n * `AcceptanceCriterion[]`. Provides backwards compatibility for old data\n * stored as string arrays.\n */\nexport function normalizeAcceptanceCriteria(\n criteria: (string | AcceptanceCriterion)[]\n): AcceptanceCriterion[] {\n return criteria.map((c, index) => {\n if (typeof c === 'string') {\n return {\n id: `ac-${index}-${Date.now()}`,\n description: c,\n validated: false,\n };\n }\n return c;\n });\n}\n\n// -----------------------------------------------------------------------------\n// Implementation context (returned by get_implementation_context)\n// -----------------------------------------------------------------------------\n\nexport interface RelatedTicketSummary {\n id: string;\n title: string;\n status: TicketStatus;\n sameEpic: boolean;\n}\n\nexport interface TestResultSummary {\n id: string;\n testType?: string;\n allPassed: boolean;\n passed: number;\n failed: number;\n total: number;\n runAt: string;\n}\n\nexport interface PreviousAttempt {\n attemptNumber: number;\n startedAt: string;\n endedAt?: string;\n result: 'completed' | 'failed' | 'in_progress';\n testResults: TestResultSummary[];\n summary?: string;\n}\n\nexport interface DiscoverySummary {\n id: string;\n type: string;\n severity: string;\n status: string;\n title: string;\n description: string;\n createdAt: string;\n}\n\nexport interface ActiveSessionSummary {\n id: string;\n status: string;\n startedAt: string;\n config: unknown;\n ticketsCompleted: string[];\n ticketsFailed: string[];\n ticketsSkipped: string[];\n totalActiveMinutes: number;\n}\n\n/**\n * Implementation context returned by get_implementation_context.\n */\nexport interface ImplementationContext {\n /** The ticket being implemented */\n ticket: Ticket;\n /** The epic containing the ticket */\n epic: Epic;\n /** The specification containing the epic */\n specification: Specification;\n /** Dependency information */\n dependencies: {\n /** Tickets that must be completed before this one */\n blockedBy: DependencyTicketSummary[];\n /** Tickets waiting on this one */\n blocks: DependencyTicketSummary[];\n };\n /** Related tickets */\n relatedTickets: RelatedTicketSummary[];\n /** Patterns and conventions from the project */\n patterns?: Record<string, unknown>;\n /** Active implementation session (Phase 5) */\n activeSession: ActiveSessionSummary | null;\n /** Previous implementation attempts (Phase 5) */\n previousAttempts: PreviousAttempt[];\n /** Related discoveries (Phase 5) */\n relatedDiscoveries: DiscoverySummary[];\n}\n\n// -----------------------------------------------------------------------------\n// Work session state (session-scoped tables)\n// -----------------------------------------------------------------------------\n\nexport interface WorkSession {\n id: string;\n ticketId: string;\n specificationId: string;\n projectId: string;\n epicId: string;\n implementationSessionId?: string;\n status: 'active' | 'paused' | 'completed' | 'failed';\n startedAt: string;\n pausedAt?: string;\n completedAt?: string;\n actualHours?: number;\n filesCreated?: string[];\n filesModified?: string[];\n filesDeleted?: string[];\n testsPassed?: boolean;\n retryCount: number;\n retryLog?: unknown;\n actions?: unknown;\n completionAttempts?: unknown;\n tokensUsed?: { inputTokens: number; outputTokens: number };\n costUsd?: number;\n durationMs?: number;\n commitSha?: string;\n modelUsed?: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface TicketAcceptanceCriterion {\n id: string;\n ticketId: string;\n description: string;\n order: number;\n createdAt?: string;\n updatedAt?: string;\n}\n\nexport interface TicketImplementationStep {\n id: string;\n ticketId: string;\n text: string;\n order: number;\n createdAt?: string;\n updatedAt?: string;\n}\n\n// -----------------------------------------------------------------------------\n// Test result types\n// -----------------------------------------------------------------------------\n\nexport type TestType =\n | 'unit'\n | 'integration'\n | 'e2e'\n | 'manual'\n | 'typescript'\n | 'lint'\n | 'build'\n | 'typecheck'\n | 'format'\n | 'security'\n | 'custom';\n\nexport interface WorkSessionTestResult {\n id: string;\n workSessionId: string;\n testType: TestType;\n passed: boolean;\n totalTests: number;\n passedTests: number;\n failedTests: number;\n skippedTests: number;\n coverage?: number;\n errorDetails?: string;\n command?: string;\n exitCode?: number;\n durationMs?: number;\n errorCount?: number;\n warningCount?: number;\n summary?: string;\n suites?: Array<{\n name: string;\n passed: number;\n failed: number;\n skipped?: number;\n duration?: number;\n }>;\n runAt: string;\n}\n\n/** @deprecated Use WorkSessionTestResult instead */\nexport type TicketTestResult = WorkSessionTestResult;\n\n// -----------------------------------------------------------------------------\n// Git integration\n// -----------------------------------------------------------------------------\n\nexport type LinkType = 'commit' | 'pull_request' | 'branch';\n\nexport interface TicketLink {\n id: string;\n ticketId: string;\n linkType: LinkType;\n url: string;\n sha?: string;\n prNumber?: number;\n title?: string;\n status?: string;\n createdAt: string;\n}\n\n// -----------------------------------------------------------------------------\n// Silence unused-import warnings for enum aliases referenced only by JSDoc\n// -----------------------------------------------------------------------------\n// (Each of these is re-exported above; the local `import type` pulls them\n// in so that embedded JSDoc cross-references resolve in editors.)\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype _ReferencedEnums = SpecificationStatus | EpicStatus;\n"],"mappings":"AA0GO,SAAS,4BACd,UACuB;AACvB,SAAO,SAAS,IAAI,CAAC,GAAG,UAAU;AAChC,QAAI,OAAO,MAAM,UAAU;AACzB,aAAO;AAAA,QACL,IAAI,MAAM,KAAK,IAAI,KAAK,IAAI,CAAC;AAAA,QAC7B,aAAa;AAAA,QACb,WAAW;AAAA,MACb;AAAA,IACF;AACA,WAAO;AAAA,EACT,CAAC;AACH;","names":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,eAAe,EACf,cAAc,EACd,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAG/B,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,MAAM;gBAFnB,OAAO,EAAE,MAAM,EACR,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM;CAKtB;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IAGxB,UAAU,EAAE,MAAM;IAClB,SAAS,CAAC,EAAE,MAAM;gBAFzB,OAAO,EAAE,MAAM,EACR,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,YAAA;CAK5B;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAQxE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAUnE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EAAE,GACtB,IAAI,CASN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,IAAI,CAeN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACrD,IAAI,CAsBN;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,MAAc,GAAG,IAAI,CAS1E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAUnE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,IAAI,CAeN;AAMD,KAAK,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CA2LtD,CAAC;AAMF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,gBAAgB,CAkB7D;AA2BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAiCpD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,IAAI,CAKN"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/validation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,eAAe,EACf,cAAc,EACd,0BAA0B,EAC1B,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAEhC;;;GAGG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAG/B,KAAK,EAAE,MAAM;IACb,IAAI,EAAE,MAAM;gBAFnB,OAAO,EAAE,MAAM,EACR,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM;CAKtB;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,KAAK;IAGxB,UAAU,EAAE,MAAM;IAClB,SAAS,CAAC,EAAE,MAAM;gBAFzB,OAAO,EAAE,MAAM,EACR,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,YAAA;CAK5B;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAQxE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAUnE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EAAE,GACtB,IAAI,CASN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,IAAI,CAeN;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,SAAS,EAAE,MAAM,EACjB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACrD,IAAI,CAsBN;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,MAAc,GAAG,IAAI,CAS1E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAUnE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,IAAI,CAeN;AAMD,KAAK,WAAW,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAwKtD,CAAC;AAMF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;KACd,CAAC,CAAC;IACH,OAAO,EAAE,IAAI,CAAC;CACf;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,gBAAgB,CAkB7D;AA2BD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,CAiCpD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,IAAI,CAKN"}
@@ -211,9 +211,6 @@ const toolValidators = {
211
211
  if (args.filesDeleted !== void 0) {
212
212
  validateArray(args.filesDeleted, "filesDeleted");
213
213
  }
214
- if (args.blockReason !== void 0) {
215
- validateStringLength(args.blockReason, "blockReason", 1, 5e3);
216
- }
217
214
  if (args.clearBlockReason !== void 0 && typeof args.clearBlockReason !== "boolean") {
218
215
  throw new Error("clearBlockReason must be a boolean");
219
216
  }
@@ -234,15 +231,6 @@ const toolValidators = {
234
231
  validateArray(args.filesDeleted, "filesDeleted");
235
232
  }
236
233
  },
237
- start_review_session: (args) => {
238
- validateRequired(args.specificationId, "specificationId");
239
- },
240
- action_review_session: (args) => {
241
- validateRequired(args.specificationId, "specificationId");
242
- },
243
- complete_review_session: (args) => {
244
- validateRequired(args.specificationId, "specificationId");
245
- },
246
234
  reopen_specification: (args) => {
247
235
  validateRequired(args.specificationId, "specificationId");
248
236
  },
@@ -254,9 +242,6 @@ const toolValidators = {
254
242
  // Utilities
255
243
  feedback: () => {
256
244
  },
257
- reset_work_session: (args) => {
258
- validateRequired(args.specificationId, "specificationId");
259
- },
260
245
  link_pull_request: (args) => {
261
246
  validateRequired(args.ticketId, "ticketId");
262
247
  if (!args.prNumber && !args.prUrl) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/validation/index.ts"],"sourcesContent":["/**\n * Validation Utilities for MCP Tools\n *\n * Provides comprehensive input validation and error handling for all MCP tools.\n * Validation is run before each tool call to ensure proper argument types and formats.\n */\n\n// Re-export ticket validation utilities\nexport {\n type TicketComplexity,\n type WarningSeverity,\n type StrictnessLevel,\n type ValidationWarning,\n type TicketValidationResult,\n type ComplexityRules,\n type TicketValidationInput,\n validationRules,\n validateTicket,\n filterWarningsByStrictness,\n getComplexityRules,\n isValidComplexity,\n getComplexityDescription,\n suggestComplexity,\n} from './ticket-validation.js';\n\n/**\n * Custom error class for validation failures\n * Includes field name and error code for structured error handling\n */\nexport class ValidationError extends Error {\n constructor(\n message: string,\n public field: string,\n public code: string\n ) {\n super(message);\n this.name = 'ValidationError';\n }\n}\n\n/**\n * API Error class for handling HTTP errors from the backend\n */\nexport class ApiError extends Error {\n constructor(\n message: string,\n public statusCode: number,\n public errorCode?: string\n ) {\n super(message);\n this.name = 'ApiError';\n }\n}\n\n// ============================================================================\n// Basic Validators\n// ============================================================================\n\n/**\n * Validate that a value is present (not null, undefined, or empty string)\n */\nexport function validateRequired(value: unknown, fieldName: string): void {\n if (value === undefined || value === null || value === '') {\n throw new ValidationError(\n `${fieldName} is required`,\n fieldName,\n 'REQUIRED'\n );\n }\n}\n\n/**\n * Validate that a value is a valid UUID format\n */\nexport function validateUUID(value: string, fieldName: string): void {\n validateRequired(value, fieldName);\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n if (!uuidRegex.test(value)) {\n throw new ValidationError(\n `${fieldName} must be a valid UUID`,\n fieldName,\n 'INVALID_UUID'\n );\n }\n}\n\n/**\n * Validate that a value is one of the allowed enum values\n */\nexport function validateEnum(\n value: string,\n fieldName: string,\n allowedValues: string[]\n): void {\n validateRequired(value, fieldName);\n if (!allowedValues.includes(value)) {\n throw new ValidationError(\n `${fieldName} must be one of: ${allowedValues.join(', ')}`,\n fieldName,\n 'INVALID_ENUM'\n );\n }\n}\n\n/**\n * Validate that a number is within a range\n */\nexport function validateRange(\n value: number,\n fieldName: string,\n min: number,\n max: number\n): void {\n if (typeof value !== 'number' || isNaN(value)) {\n throw new ValidationError(\n `${fieldName} must be a number`,\n fieldName,\n 'INVALID_NUMBER'\n );\n }\n if (value < min || value > max) {\n throw new ValidationError(\n `${fieldName} must be between ${min} and ${max}`,\n fieldName,\n 'OUT_OF_RANGE'\n );\n }\n}\n\n/**\n * Validate that a value is an array, with optional item validation\n */\nexport function validateArray(\n value: unknown,\n fieldName: string,\n itemValidator?: (item: unknown, index: number) => void\n): void {\n if (!Array.isArray(value)) {\n throw new ValidationError(\n `${fieldName} must be an array`,\n fieldName,\n 'INVALID_ARRAY'\n );\n }\n if (itemValidator) {\n value.forEach((item, index) => {\n try {\n itemValidator(item, index);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n throw new ValidationError(\n `${fieldName}[${index}]: ${message}`,\n `${fieldName}[${index}]`,\n 'INVALID_ITEM'\n );\n }\n });\n }\n}\n\n/**\n * Validate a 40-character hex SHA\n */\nexport function validateSha(value: string, fieldName: string = 'sha'): void {\n validateRequired(value, fieldName);\n if (!/^[a-f0-9]{40}$/i.test(value)) {\n throw new ValidationError(\n `${fieldName} must be a 40-character hex string`,\n fieldName,\n 'INVALID_SHA'\n );\n }\n}\n\n/**\n * Validate an ISO 8601 date string\n */\nexport function validateDate(value: string, fieldName: string): void {\n validateRequired(value, fieldName);\n const date = new Date(value);\n if (isNaN(date.getTime())) {\n throw new ValidationError(\n `${fieldName} must be a valid ISO 8601 date`,\n fieldName,\n 'INVALID_DATE'\n );\n }\n}\n\n/**\n * Validate a string length\n */\nexport function validateStringLength(\n value: string,\n fieldName: string,\n minLength: number,\n maxLength: number\n): void {\n if (typeof value !== 'string') {\n throw new ValidationError(\n `${fieldName} must be a string`,\n fieldName,\n 'INVALID_STRING'\n );\n }\n if (value.length < minLength || value.length > maxLength) {\n throw new ValidationError(\n `${fieldName} must be between ${minLength} and ${maxLength} characters`,\n fieldName,\n 'INVALID_LENGTH'\n );\n }\n}\n\n// ============================================================================\n// Tool-Specific Validators\n// ============================================================================\n\ntype ValidatorFn = (args: Record<string, unknown>) => void;\n\n/**\n * Validators for each tool (22 tools)\n * These are applied before the tool handler is called\n */\nexport const toolValidators: Record<string, ValidatorFn> = {\n // Queries\n get: (args) => {\n validateRequired(args.type, 'type');\n validateEnum(\n args.type as string,\n 'type',\n ['project', 'specification', 'epic', 'ticket', 'implementation_session']\n );\n },\n\n list: (args) => {\n validateRequired(args.type, 'type');\n validateEnum(\n args.type as string,\n 'type',\n ['projects', 'specifications', 'epics', 'tickets']\n );\n },\n\n search: (args) => {\n if (!args.query && !args.files && !args.tags && !args.relatedTo) {\n throw new ValidationError(\n 'At least one filter is required: query, files, tags, or relatedTo',\n 'query',\n 'REQUIRED_ONE_OF'\n );\n }\n if (args.query) {\n validateStringLength(args.query as string, 'query', 1, 500);\n }\n if (args.limit !== undefined) {\n validateRange(args.limit as number, 'limit', 1, 100);\n }\n if (args.offset !== undefined) {\n validateRange(args.offset as number, 'offset', 0, 10000);\n }\n },\n\n get_next_actionable_tickets: (args) => {\n // Either specificationId or projectId is required\n if (!args.specificationId && !args.projectId) {\n throw new ValidationError(\n 'Either specificationId or projectId is required',\n 'specificationId/projectId',\n 'REQUIRED_ONE_OF'\n );\n }\n if (args.limit !== undefined) {\n validateRange(args.limit as number, 'limit', 1, 100);\n }\n },\n\n get_blocked_tickets: (args) => {\n validateRequired(args.specificationId, 'specificationId');\n },\n\n get_report: (args) => {\n validateRequired(args.type, 'type');\n validateRequired(args.scope, 'scope');\n validateRequired(args.scopeId, 'scopeId');\n },\n\n // Lifecycle. Planning verbs inject identity from local config (M9): SPS takes\n // an optional specificationId (falls back to config), APS takes only\n // `operation` (sessionId injected), CPS takes nothing (sessionId injected).\n // So no specificationId/sessionId requirements here — the handlers resolve\n // and validate them.\n start_planning_session: () => {\n /* specificationId optional — handler falls back to config */\n },\n\n action_planning_session: (args) => {\n validateRequired(args.operation, 'operation');\n },\n\n complete_planning_session: () => {\n /* no args — sessionId injected from config */\n },\n\n start_work_session: (args) => {\n validateRequired(args.ticketId, 'ticketId');\n },\n\n action_work_session: (args) => {\n validateRequired(args.ticketId, 'ticketId');\n if (args.filesCreated !== undefined) {\n validateArray(args.filesCreated, 'filesCreated');\n }\n if (args.filesModified !== undefined) {\n validateArray(args.filesModified, 'filesModified');\n }\n if (args.filesDeleted !== undefined) {\n validateArray(args.filesDeleted, 'filesDeleted');\n }\n if (args.blockReason !== undefined) {\n validateStringLength(args.blockReason as string, 'blockReason', 1, 5000);\n }\n if (args.clearBlockReason !== undefined && typeof args.clearBlockReason !== 'boolean') {\n throw new Error('clearBlockReason must be a boolean');\n }\n },\n\n complete_work_session: (args) => {\n validateRequired(args.ticketId, 'ticketId');\n validateRequired(args.summary, 'summary');\n if (args.summary) {\n validateStringLength(args.summary as string, 'summary', 1, 10000);\n }\n if (args.filesModified !== undefined) {\n validateArray(args.filesModified, 'filesModified');\n }\n if (args.filesCreated !== undefined) {\n validateArray(args.filesCreated, 'filesCreated');\n }\n if (args.filesDeleted !== undefined) {\n validateArray(args.filesDeleted, 'filesDeleted');\n }\n },\n\n start_review_session: (args) => {\n validateRequired(args.specificationId, 'specificationId');\n },\n\n action_review_session: (args) => {\n validateRequired(args.specificationId, 'specificationId');\n },\n\n complete_review_session: (args) => {\n validateRequired(args.specificationId, 'specificationId');\n },\n\n reopen_specification: (args) => {\n validateRequired(args.specificationId, 'specificationId');\n },\n\n // Mutation\n create_specification: (args) => {\n validateRequired(args.projectId, 'projectId');\n validateRequired(args.title, 'title');\n },\n\n // Utilities\n feedback: () => {\n // Validated by feedback handler\n },\n\n reset_work_session: (args) => {\n validateRequired(args.specificationId, 'specificationId');\n },\n\n link_pull_request: (args) => {\n validateRequired(args.ticketId, 'ticketId');\n if (!args.prNumber && !args.prUrl) {\n throw new ValidationError(\n 'Either prNumber or prUrl must be provided',\n 'prNumber',\n 'REQUIRED_ONE_OF'\n );\n }\n if (args.prNumber !== undefined && typeof args.prNumber !== 'number') {\n throw new ValidationError(\n 'prNumber must be a number',\n 'prNumber',\n 'INVALID_NUMBER'\n );\n }\n if (args.prUrl !== undefined) {\n const url = args.prUrl as string;\n if (!url.includes('github.com') && !url.includes('gitlab.com') && !url.includes('bitbucket.org')) {\n throw new ValidationError(\n 'prUrl must be a valid GitHub, GitLab, or Bitbucket URL',\n 'prUrl',\n 'INVALID_URL'\n );\n }\n }\n },\n\n // Orchestration\n get_critical_path: (args) => {\n validateRequired(args.specificationId, 'specificationId');\n },\n\n get_dependency_tree: (args) => {\n validateRequired(args.specificationId, 'specificationId');\n },\n};\n\n// ============================================================================\n// Error Transformation\n// ============================================================================\n\n/**\n * MCP error response format\n */\nexport interface MCPErrorResponse {\n content: Array<{\n type: 'text';\n text: string;\n }>;\n isError: true;\n}\n\n/**\n * Transform an error into MCP error response format\n */\nexport function formatMCPError(error: Error): MCPErrorResponse {\n let message = error.message;\n\n if (error instanceof ValidationError) {\n message = `Validation error for '${error.field}': ${error.message} (${error.code})`;\n } else if (error instanceof ApiError) {\n message = formatApiErrorMessage(error);\n }\n\n return {\n content: [\n {\n type: 'text',\n text: message,\n },\n ],\n isError: true,\n };\n}\n\n/**\n * Format API error message based on status code\n */\nfunction formatApiErrorMessage(error: ApiError): string {\n switch (error.statusCode) {\n case 400:\n return `Bad request: ${error.message}`;\n case 401:\n return 'Authentication failed. Check your API key.';\n case 403:\n return 'Permission denied. Your API key may lack required permissions.';\n case 404:\n return `Resource not found: ${error.message}`;\n case 429:\n return 'Rate limit exceeded. Please wait before retrying.';\n case 500:\n case 502:\n case 503:\n case 504:\n return 'Server error. Please try again later.';\n default:\n return error.message;\n }\n}\n\n/**\n * Transform HTTP/network errors into ApiError\n */\nexport function transformError(error: unknown): Error {\n if (error instanceof ValidationError || error instanceof ApiError) {\n return error;\n }\n\n if (error instanceof Error) {\n // Network errors\n if (error.message.includes('ECONNREFUSED')) {\n return new ApiError(\n 'Unable to connect to SpecForge API. Check your network connection.',\n 0,\n 'NETWORK_ERROR'\n );\n }\n if (error.message.includes('ETIMEDOUT')) {\n return new ApiError(\n 'Request timed out. Please try again.',\n 0,\n 'TIMEOUT'\n );\n }\n if (error.message.includes('ECONNRESET')) {\n return new ApiError(\n 'Connection was reset. Please try again.',\n 0,\n 'CONNECTION_RESET'\n );\n }\n\n return error;\n }\n\n return new Error(String(error));\n}\n\n/**\n * Run validation for a specific tool\n * @throws ValidationError if validation fails\n */\nexport function validateToolArgs(\n toolName: string,\n args: Record<string, unknown>\n): void {\n const validator = toolValidators[toolName];\n if (validator) {\n validator(args);\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/validation/index.ts"],"sourcesContent":["/**\n * Validation Utilities for MCP Tools\n *\n * Provides comprehensive input validation and error handling for all MCP tools.\n * Validation is run before each tool call to ensure proper argument types and formats.\n */\n\n// Re-export ticket validation utilities\nexport {\n type TicketComplexity,\n type WarningSeverity,\n type StrictnessLevel,\n type ValidationWarning,\n type TicketValidationResult,\n type ComplexityRules,\n type TicketValidationInput,\n validationRules,\n validateTicket,\n filterWarningsByStrictness,\n getComplexityRules,\n isValidComplexity,\n getComplexityDescription,\n suggestComplexity,\n} from './ticket-validation.js';\n\n/**\n * Custom error class for validation failures\n * Includes field name and error code for structured error handling\n */\nexport class ValidationError extends Error {\n constructor(\n message: string,\n public field: string,\n public code: string\n ) {\n super(message);\n this.name = 'ValidationError';\n }\n}\n\n/**\n * API Error class for handling HTTP errors from the backend\n */\nexport class ApiError extends Error {\n constructor(\n message: string,\n public statusCode: number,\n public errorCode?: string\n ) {\n super(message);\n this.name = 'ApiError';\n }\n}\n\n// ============================================================================\n// Basic Validators\n// ============================================================================\n\n/**\n * Validate that a value is present (not null, undefined, or empty string)\n */\nexport function validateRequired(value: unknown, fieldName: string): void {\n if (value === undefined || value === null || value === '') {\n throw new ValidationError(\n `${fieldName} is required`,\n fieldName,\n 'REQUIRED'\n );\n }\n}\n\n/**\n * Validate that a value is a valid UUID format\n */\nexport function validateUUID(value: string, fieldName: string): void {\n validateRequired(value, fieldName);\n const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\n if (!uuidRegex.test(value)) {\n throw new ValidationError(\n `${fieldName} must be a valid UUID`,\n fieldName,\n 'INVALID_UUID'\n );\n }\n}\n\n/**\n * Validate that a value is one of the allowed enum values\n */\nexport function validateEnum(\n value: string,\n fieldName: string,\n allowedValues: string[]\n): void {\n validateRequired(value, fieldName);\n if (!allowedValues.includes(value)) {\n throw new ValidationError(\n `${fieldName} must be one of: ${allowedValues.join(', ')}`,\n fieldName,\n 'INVALID_ENUM'\n );\n }\n}\n\n/**\n * Validate that a number is within a range\n */\nexport function validateRange(\n value: number,\n fieldName: string,\n min: number,\n max: number\n): void {\n if (typeof value !== 'number' || isNaN(value)) {\n throw new ValidationError(\n `${fieldName} must be a number`,\n fieldName,\n 'INVALID_NUMBER'\n );\n }\n if (value < min || value > max) {\n throw new ValidationError(\n `${fieldName} must be between ${min} and ${max}`,\n fieldName,\n 'OUT_OF_RANGE'\n );\n }\n}\n\n/**\n * Validate that a value is an array, with optional item validation\n */\nexport function validateArray(\n value: unknown,\n fieldName: string,\n itemValidator?: (item: unknown, index: number) => void\n): void {\n if (!Array.isArray(value)) {\n throw new ValidationError(\n `${fieldName} must be an array`,\n fieldName,\n 'INVALID_ARRAY'\n );\n }\n if (itemValidator) {\n value.forEach((item, index) => {\n try {\n itemValidator(item, index);\n } catch (error: unknown) {\n const message = error instanceof Error ? error.message : String(error);\n throw new ValidationError(\n `${fieldName}[${index}]: ${message}`,\n `${fieldName}[${index}]`,\n 'INVALID_ITEM'\n );\n }\n });\n }\n}\n\n/**\n * Validate a 40-character hex SHA\n */\nexport function validateSha(value: string, fieldName: string = 'sha'): void {\n validateRequired(value, fieldName);\n if (!/^[a-f0-9]{40}$/i.test(value)) {\n throw new ValidationError(\n `${fieldName} must be a 40-character hex string`,\n fieldName,\n 'INVALID_SHA'\n );\n }\n}\n\n/**\n * Validate an ISO 8601 date string\n */\nexport function validateDate(value: string, fieldName: string): void {\n validateRequired(value, fieldName);\n const date = new Date(value);\n if (isNaN(date.getTime())) {\n throw new ValidationError(\n `${fieldName} must be a valid ISO 8601 date`,\n fieldName,\n 'INVALID_DATE'\n );\n }\n}\n\n/**\n * Validate a string length\n */\nexport function validateStringLength(\n value: string,\n fieldName: string,\n minLength: number,\n maxLength: number\n): void {\n if (typeof value !== 'string') {\n throw new ValidationError(\n `${fieldName} must be a string`,\n fieldName,\n 'INVALID_STRING'\n );\n }\n if (value.length < minLength || value.length > maxLength) {\n throw new ValidationError(\n `${fieldName} must be between ${minLength} and ${maxLength} characters`,\n fieldName,\n 'INVALID_LENGTH'\n );\n }\n}\n\n// ============================================================================\n// Tool-Specific Validators\n// ============================================================================\n\ntype ValidatorFn = (args: Record<string, unknown>) => void;\n\n/**\n * Validators for each tool (22 tools)\n * These are applied before the tool handler is called\n */\nexport const toolValidators: Record<string, ValidatorFn> = {\n // Queries\n get: (args) => {\n validateRequired(args.type, 'type');\n validateEnum(\n args.type as string,\n 'type',\n ['project', 'specification', 'epic', 'ticket', 'implementation_session']\n );\n },\n\n list: (args) => {\n validateRequired(args.type, 'type');\n validateEnum(\n args.type as string,\n 'type',\n ['projects', 'specifications', 'epics', 'tickets']\n );\n },\n\n search: (args) => {\n if (!args.query && !args.files && !args.tags && !args.relatedTo) {\n throw new ValidationError(\n 'At least one filter is required: query, files, tags, or relatedTo',\n 'query',\n 'REQUIRED_ONE_OF'\n );\n }\n if (args.query) {\n validateStringLength(args.query as string, 'query', 1, 500);\n }\n if (args.limit !== undefined) {\n validateRange(args.limit as number, 'limit', 1, 100);\n }\n if (args.offset !== undefined) {\n validateRange(args.offset as number, 'offset', 0, 10000);\n }\n },\n\n get_next_actionable_tickets: (args) => {\n // Either specificationId or projectId is required\n if (!args.specificationId && !args.projectId) {\n throw new ValidationError(\n 'Either specificationId or projectId is required',\n 'specificationId/projectId',\n 'REQUIRED_ONE_OF'\n );\n }\n if (args.limit !== undefined) {\n validateRange(args.limit as number, 'limit', 1, 100);\n }\n },\n\n get_blocked_tickets: (args) => {\n validateRequired(args.specificationId, 'specificationId');\n },\n\n get_report: (args) => {\n validateRequired(args.type, 'type');\n validateRequired(args.scope, 'scope');\n validateRequired(args.scopeId, 'scopeId');\n },\n\n // Lifecycle. Planning verbs inject identity from local config (M9): SPS takes\n // an optional specificationId (falls back to config), APS takes only\n // `operation` (sessionId injected), CPS takes nothing (sessionId injected).\n // So no specificationId/sessionId requirements here — the handlers resolve\n // and validate them.\n start_planning_session: () => {\n /* specificationId optional — handler falls back to config */\n },\n\n action_planning_session: (args) => {\n validateRequired(args.operation, 'operation');\n },\n\n complete_planning_session: () => {\n /* no args — sessionId injected from config */\n },\n\n start_work_session: (args) => {\n validateRequired(args.ticketId, 'ticketId');\n },\n\n action_work_session: (args) => {\n validateRequired(args.ticketId, 'ticketId');\n if (args.filesCreated !== undefined) {\n validateArray(args.filesCreated, 'filesCreated');\n }\n if (args.filesModified !== undefined) {\n validateArray(args.filesModified, 'filesModified');\n }\n if (args.filesDeleted !== undefined) {\n validateArray(args.filesDeleted, 'filesDeleted');\n }\n if (args.clearBlockReason !== undefined && typeof args.clearBlockReason !== 'boolean') {\n throw new Error('clearBlockReason must be a boolean');\n }\n },\n\n complete_work_session: (args) => {\n validateRequired(args.ticketId, 'ticketId');\n validateRequired(args.summary, 'summary');\n if (args.summary) {\n validateStringLength(args.summary as string, 'summary', 1, 10000);\n }\n if (args.filesModified !== undefined) {\n validateArray(args.filesModified, 'filesModified');\n }\n if (args.filesCreated !== undefined) {\n validateArray(args.filesCreated, 'filesCreated');\n }\n if (args.filesDeleted !== undefined) {\n validateArray(args.filesDeleted, 'filesDeleted');\n }\n },\n\n reopen_specification: (args) => {\n validateRequired(args.specificationId, 'specificationId');\n },\n\n // Mutation\n create_specification: (args) => {\n validateRequired(args.projectId, 'projectId');\n validateRequired(args.title, 'title');\n },\n\n // Utilities\n feedback: () => {\n // Validated by feedback handler\n },\n\n link_pull_request: (args) => {\n validateRequired(args.ticketId, 'ticketId');\n if (!args.prNumber && !args.prUrl) {\n throw new ValidationError(\n 'Either prNumber or prUrl must be provided',\n 'prNumber',\n 'REQUIRED_ONE_OF'\n );\n }\n if (args.prNumber !== undefined && typeof args.prNumber !== 'number') {\n throw new ValidationError(\n 'prNumber must be a number',\n 'prNumber',\n 'INVALID_NUMBER'\n );\n }\n if (args.prUrl !== undefined) {\n const url = args.prUrl as string;\n if (!url.includes('github.com') && !url.includes('gitlab.com') && !url.includes('bitbucket.org')) {\n throw new ValidationError(\n 'prUrl must be a valid GitHub, GitLab, or Bitbucket URL',\n 'prUrl',\n 'INVALID_URL'\n );\n }\n }\n },\n\n // Orchestration\n get_critical_path: (args) => {\n validateRequired(args.specificationId, 'specificationId');\n },\n\n get_dependency_tree: (args) => {\n validateRequired(args.specificationId, 'specificationId');\n },\n};\n\n// ============================================================================\n// Error Transformation\n// ============================================================================\n\n/**\n * MCP error response format\n */\nexport interface MCPErrorResponse {\n content: Array<{\n type: 'text';\n text: string;\n }>;\n isError: true;\n}\n\n/**\n * Transform an error into MCP error response format\n */\nexport function formatMCPError(error: Error): MCPErrorResponse {\n let message = error.message;\n\n if (error instanceof ValidationError) {\n message = `Validation error for '${error.field}': ${error.message} (${error.code})`;\n } else if (error instanceof ApiError) {\n message = formatApiErrorMessage(error);\n }\n\n return {\n content: [\n {\n type: 'text',\n text: message,\n },\n ],\n isError: true,\n };\n}\n\n/**\n * Format API error message based on status code\n */\nfunction formatApiErrorMessage(error: ApiError): string {\n switch (error.statusCode) {\n case 400:\n return `Bad request: ${error.message}`;\n case 401:\n return 'Authentication failed. Check your API key.';\n case 403:\n return 'Permission denied. Your API key may lack required permissions.';\n case 404:\n return `Resource not found: ${error.message}`;\n case 429:\n return 'Rate limit exceeded. Please wait before retrying.';\n case 500:\n case 502:\n case 503:\n case 504:\n return 'Server error. Please try again later.';\n default:\n return error.message;\n }\n}\n\n/**\n * Transform HTTP/network errors into ApiError\n */\nexport function transformError(error: unknown): Error {\n if (error instanceof ValidationError || error instanceof ApiError) {\n return error;\n }\n\n if (error instanceof Error) {\n // Network errors\n if (error.message.includes('ECONNREFUSED')) {\n return new ApiError(\n 'Unable to connect to SpecForge API. Check your network connection.',\n 0,\n 'NETWORK_ERROR'\n );\n }\n if (error.message.includes('ETIMEDOUT')) {\n return new ApiError(\n 'Request timed out. Please try again.',\n 0,\n 'TIMEOUT'\n );\n }\n if (error.message.includes('ECONNRESET')) {\n return new ApiError(\n 'Connection was reset. Please try again.',\n 0,\n 'CONNECTION_RESET'\n );\n }\n\n return error;\n }\n\n return new Error(String(error));\n}\n\n/**\n * Run validation for a specific tool\n * @throws ValidationError if validation fails\n */\nexport function validateToolArgs(\n toolName: string,\n args: Record<string, unknown>\n): void {\n const validator = toolValidators[toolName];\n if (validator) {\n validator(args);\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,38 @@
1
+ # @specforge/api-types
2
+
3
+ Catch-all type contracts for SpecForge.
4
+
5
+ ## Scope (catch-all rule)
6
+
7
+ If a type is **not** a lifecycle session-type (those live in `@specforge/session-types`), it belongs here. spec-domain types — Spec, Epic, Ticket entities — live in `@specforge/spec-types`; everything else (User, Project, sharing, derived views, API helpers, and the store interfaces for non-session entities) lives in this package.
8
+
9
+ ## What's inside
10
+
11
+ ### Entity runtime types (`src/runtime/`)
12
+
13
+ - `user.ts` — User entity
14
+ - `project.ts` — Project entity (with denormalized counts)
15
+ - `project-member.ts`, `project-invitation.ts` — sharing entities
16
+ - `dependency-tree.ts` — derived view consumed by tree aggregator + webapp UI
17
+ - `fields.ts` — field-selection helpers for list operations
18
+ - `pagination.ts` — pagination input/info shapes + helpers
19
+ - `summary.ts` — summary-mode response shapes
20
+ - `response.ts` — response-mode types (full/minimal/id-only)
21
+ - `status.ts` — ticket-status enums + transition helpers
22
+
23
+ ### Store interfaces (`src/stores/`)
24
+
25
+ All non-session-types store contracts:
26
+
27
+ - `i-user-store.ts`, `i-project-store.ts`, `i-sharing-store.ts` — user + sharing
28
+ - `i-spec-store.ts`, `i-epic-store.ts`, `i-ticket-store.ts`, `i-ticket-dependency-store.ts`, `i-blueprint-store.ts` — spec hierarchy
29
+
30
+ Sessions stay in `@specforge/session-types`. Read-only impls (planning) and full impls (spec hierarchy) live in `@specforge/operations`.
31
+
32
+ ## Rules
33
+
34
+ - AWS SDK / smithy / sigv4 imports are forbidden (ESLint-enforced).
35
+ - zod is allowed for entity schemas.
36
+ - This package is consumed by `@specforge/lifecycle` and `@specforge/operations`.
37
+
38
+ Per M4.7 milestone spec.
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Structural contract for the AppSync GraphQL client.
3
+ *
4
+ * The concrete implementation (SigV4-signed, SSM-backed) lives in
5
+ * `@specforge/operations` and `implements` this interface. Relocated here in
6
+ * M7.4c so consumers that only need to *call* the client (e.g. the
7
+ * `@specforge/resolvers` notifier) can type against the contract without
8
+ * importing `@specforge/operations` — breaking the resolvers→operations
9
+ * arch-level cycle (monorepo-topology §2.1c).
10
+ */
11
+ export interface AppSyncClient {
12
+ /** Resolve (and cache) the AppSync GraphQL endpoint URL. */
13
+ getApiUrl(): Promise<string>;
14
+ query<T>(query: string, variables?: Record<string, unknown>, options?: {
15
+ operationName?: string;
16
+ }): Promise<T>;
17
+ mutate<T>(mutation: string, variables?: Record<string, unknown>, options?: {
18
+ operationName?: string;
19
+ }): Promise<T>;
20
+ }
21
+ //# sourceMappingURL=appsync-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appsync-client.d.ts","sourceRoot":"","sources":["../../src/client/appsync-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,CAAC,EACL,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GACnC,OAAO,CAAC,CAAC,CAAC,CAAC;IACd,MAAM,CAAC,CAAC,EACN,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GACnC,OAAO,CAAC,CAAC,CAAC,CAAC;CACf"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=appsync-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appsync-client.js","sourceRoot":"","sources":["../../src/client/appsync-client.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export * from './appsync-client.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './appsync-client.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './runtime/index.js';
2
+ export * from './stores/index.js';
3
+ export * from './client/index.js';
4
+ export * from './mcp/index.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,oBAAoB,CAAC;AAGnC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,mBAAmB,CAAC;AAGlC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,9 @@
1
+ // Entity records, derived views, and API-surface helpers.
2
+ export * from './runtime/index.js';
3
+ // Store contracts for non-session entities.
4
+ export * from './stores/index.js';
5
+ // Client contracts (structural interfaces; implementations live in operations).
6
+ export * from './client/index.js';
7
+ // MCP wire envelopes + error-guidance contract.
8
+ export * from './mcp/index.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,cAAc,oBAAoB,CAAC;AAEnC,4CAA4C;AAC5C,cAAc,mBAAmB,CAAC;AAElC,gFAAgF;AAChF,cAAc,mBAAmB,CAAC;AAElC,gDAAgD;AAChD,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Shared type contract for the error-guidance composer pipeline (ME.4).
3
+ *
4
+ * Mirrors the lifecycle guidance pipeline (`PlanningAgentResponse.guidance`),
5
+ * but for the failure modes that produce an `McpStandardErrorEnvelope` — auth,
6
+ * shape, not-found, conflict, precondition, unknown-tool, bare exceptions.
7
+ *
8
+ * This file is a PURE type contract: no runtime, no composer. The three
9
+ * composers (`composeCrudErrorGuidance` in `@specforge/core`,
10
+ * `composeAuthErrorGuidance` / `composeBasicErrorGuidance` in
11
+ * `@specforge/platform`) all consume `ErrorGuidanceInput` and return a non-null
12
+ * `ErrorGuidance` (MB.17.2 amended the ME.4 `INTERNAL → null` convention: every
13
+ * code now emits a recovery hint). The M8 dispatcher's `normaliseError` is the
14
+ * single place that assembles the envelope from the returned guidance — the
15
+ * composers never reference `McpStandardErrorEnvelope` (Option A, ME.4 §2 decision).
16
+ *
17
+ * Canonical reference: docs/architecture/lifecycle-response-convention.md
18
+ * §"Error envelope guidance".
19
+ */
20
+ /**
21
+ * Output of the error-guidance composer pipeline. `prose` is the canonical
22
+ * agent-facing message — same convention as lifecycle's
23
+ * `PlanningAgentResponse.guidance` (clients read prose verbatim; never parse
24
+ * it). `next_actions` / `related` are structured accessories for UI clients
25
+ * that want to render tool affordances.
26
+ */
27
+ export interface ErrorGuidance {
28
+ prose: string;
29
+ next_actions?: {
30
+ tool: string;
31
+ args?: Record<string, unknown>;
32
+ reason?: string;
33
+ }[];
34
+ related?: {
35
+ tool: string;
36
+ args?: Record<string, unknown>;
37
+ }[];
38
+ }
39
+ /**
40
+ * Closed set of entity types an error can reference. Declared here so both the
41
+ * CRUD error classes (operations) and the composers (core/platform) share one
42
+ * definition.
43
+ */
44
+ export type ErrorGuidanceEntityType = 'spec' | 'epic' | 'ticket' | 'planning_session' | 'blueprint' | 'project' | 'pull_request' | 'dependency' | 'ticket_blueprint_ref';
45
+ /** The seven MCP error codes a public tool can surface (ME.4 §2.5). */
46
+ export type ErrorGuidanceCode = 'NOT_FOUND' | 'VALIDATION_FAILED' | 'CONFLICT' | 'PRECONDITION_FAILED' | 'UNAUTHORISED' | 'UNKNOWN_TOOL' | 'INTERNAL';
47
+ /**
48
+ * Shared input shape consumed by all three composers. Materialised by each
49
+ * typed error class's `toGuidanceInput(ctx)` (CRUD/auth) or synthesised by the
50
+ * dispatcher (basic / unknown-tool).
51
+ */
52
+ export interface ErrorGuidanceInput {
53
+ code: ErrorGuidanceCode;
54
+ /** Verb that threw. */
55
+ tool: string;
56
+ args?: Record<string, unknown>;
57
+ context: {
58
+ entityType?: ErrorGuidanceEntityType;
59
+ entityId?: string;
60
+ /** VALIDATION_FAILED — the field that failed the schema. */
61
+ failingField?: string;
62
+ /** PRECONDITION_FAILED — status the verb required. */
63
+ expectedStatus?: string;
64
+ /** PRECONDITION_FAILED — status the entity is actually in. */
65
+ actualStatus?: string;
66
+ /** CONFLICT — the pre-existing entity that collides. */
67
+ conflictingEntityId?: string;
68
+ /** UNAUTHORISED — the scope/permission that was missing. */
69
+ requiredScope?: string;
70
+ /** UNKNOWN_TOOL — the registered verbs, for the "did you mean" hint. */
71
+ availableTools?: string[];
72
+ };
73
+ }
74
+ //# sourceMappingURL=error-guidance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-guidance.d.ts","sourceRoot":"","sources":["../../src/mcp/error-guidance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnF,OAAO,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EAAE,CAAC;CAC9D;AAED;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAC/B,MAAM,GACN,MAAM,GACN,QAAQ,GACR,kBAAkB,GAClB,WAAW,GACX,SAAS,GACT,cAAc,GACd,YAAY,GACZ,sBAAsB,CAAC;AAE3B,uEAAuE;AACvE,MAAM,MAAM,iBAAiB,GACzB,WAAW,GACX,mBAAmB,GACnB,UAAU,GACV,qBAAqB,GACrB,cAAc,GACd,cAAc,GACd,UAAU,CAAC;AAEf;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,iBAAiB,CAAC;IACxB,uBAAuB;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,EAAE;QACP,UAAU,CAAC,EAAE,uBAAuB,CAAC;QACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,4DAA4D;QAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,sDAAsD;QACtD,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,8DAA8D;QAC9D,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,wDAAwD;QACxD,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,4DAA4D;QAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,wEAAwE;QACxE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B,CAAC;CACH"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Shared type contract for the error-guidance composer pipeline (ME.4).
3
+ *
4
+ * Mirrors the lifecycle guidance pipeline (`PlanningAgentResponse.guidance`),
5
+ * but for the failure modes that produce an `McpStandardErrorEnvelope` — auth,
6
+ * shape, not-found, conflict, precondition, unknown-tool, bare exceptions.
7
+ *
8
+ * This file is a PURE type contract: no runtime, no composer. The three
9
+ * composers (`composeCrudErrorGuidance` in `@specforge/core`,
10
+ * `composeAuthErrorGuidance` / `composeBasicErrorGuidance` in
11
+ * `@specforge/platform`) all consume `ErrorGuidanceInput` and return a non-null
12
+ * `ErrorGuidance` (MB.17.2 amended the ME.4 `INTERNAL → null` convention: every
13
+ * code now emits a recovery hint). The M8 dispatcher's `normaliseError` is the
14
+ * single place that assembles the envelope from the returned guidance — the
15
+ * composers never reference `McpStandardErrorEnvelope` (Option A, ME.4 §2 decision).
16
+ *
17
+ * Canonical reference: docs/architecture/lifecycle-response-convention.md
18
+ * §"Error envelope guidance".
19
+ */
20
+ export {};
21
+ //# sourceMappingURL=error-guidance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-guidance.js","sourceRoot":"","sources":["../../src/mcp/error-guidance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG"}
@@ -0,0 +1,4 @@
1
+ export * from './lifecycle-envelope.js';
2
+ export * from './error-guidance.js';
3
+ export * from './standard-envelope.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AACA,cAAc,yBAAyB,CAAC;AAIxC,cAAc,qBAAqB,CAAC;AAGpC,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,8 @@
1
+ // MCP wire envelopes shared by CLI, webapp, and external MCP clients.
2
+ export * from './lifecycle-envelope.js';
3
+ // Error-guidance contract consumed by the composer pipeline (ME.4) and the
4
+ // M8 standard-error envelope.
5
+ export * from './error-guidance.js';
6
+ // Standard (non-lifecycle) error envelope (M8).
7
+ export * from './standard-envelope.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,cAAc,yBAAyB,CAAC;AAExC,2EAA2E;AAC3E,8BAA8B;AAC9B,cAAc,qBAAqB,CAAC;AAEpC,gDAAgD;AAChD,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { PlanningAgentResponse } from '@specforge/session-types';
2
+ /**
3
+ * Wire envelope for lifecycle tools (planning today; work/review in M16–M25).
4
+ *
5
+ * Used on BOTH success and denial — the inner `agentResponse.outcome` self-discriminates,
6
+ * so denials ship HTTP 200 with this same shape (no separate error code). Canonical
7
+ * reference: docs/architecture/lifecycle-response-convention.md §"McpLifecycleEnvelope".
8
+ *
9
+ * Field-preserving by construction: it embeds the lifecycle response whole, with no
10
+ * allowlist, denylist, or remapping. Clients read `agentResponse.guidance` (prose) and the
11
+ * typed score / gate / phase / status fields directly — never parse the prose.
12
+ */
13
+ export interface McpLifecycleEnvelope {
14
+ kind: 'lifecycle';
15
+ /** Verbatim echo of the lifecycle layer's PlanningAgentResponse. */
16
+ agentResponse: PlanningAgentResponse;
17
+ }
18
+ //# sourceMappingURL=lifecycle-envelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle-envelope.d.ts","sourceRoot":"","sources":["../../src/mcp/lifecycle-envelope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,WAAW,CAAC;IAClB,oEAAoE;IACpE,aAAa,EAAE,qBAAqB,CAAC;CACtC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lifecycle-envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle-envelope.js","sourceRoot":"","sources":["../../src/mcp/lifecycle-envelope.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ import type { ErrorGuidance, ErrorGuidanceCode } from './error-guidance.js';
2
+ /**
3
+ * Wire envelope for the 13 standard (non-lifecycle) tools on the ERROR path.
4
+ *
5
+ * Standard tools return their raw impl payload on success (no envelope wrap —
6
+ * see docs/architecture/lifecycle-response-convention.md). Only thrown errors
7
+ * are enveloped, with a typed `code`, a human `message`, the composer-produced
8
+ * `guidance`, and typed `context` extras.
9
+ *
10
+ * There is deliberately NO `LIFECYCLE_DENIED` code: lifecycle denials are a
11
+ * separate envelope (`McpLifecycleEnvelope`, HTTP 200), distinguished by `kind`.
12
+ * Clients dispatch on `kind` first.
13
+ */
14
+ export interface McpStandardErrorEnvelope {
15
+ kind: 'standard_error';
16
+ /** Typed error code — shared with the error-guidance pipeline. */
17
+ code: ErrorGuidanceCode;
18
+ /** Human-readable, externally safe message. */
19
+ message: string;
20
+ /**
21
+ * Composed by the error-guidance pipeline (ME.4, amended by MB.17.2). `prose`
22
+ * is the canonical agent-facing message (same convention as lifecycle's
23
+ * `PlanningAgentResponse.guidance`). NON-NULL for EVERY code, including
24
+ * `INTERNAL` — MB.17.2 overturns the ME.4 `INTERNAL → null` convention: a bare
25
+ * exception still has an actionable hint (*"this failed server-side; nothing was
26
+ * persisted; do NOT retry identically; re-read state or hand to the human"*). The
27
+ * dispatcher's `normaliseError` refuses to assemble an envelope with null/empty
28
+ * guidance. NEVER hand-rolled at a throw site; always produced by a composer to
29
+ * avoid prose drift.
30
+ */
31
+ guidance: ErrorGuidance;
32
+ /**
33
+ * Typed extras that fed the composer (entity id not found, conflicting session
34
+ * id, failing field, …) — kept on the envelope so clients can render
35
+ * structured affordances alongside the prose.
36
+ */
37
+ context?: Record<string, unknown>;
38
+ }
39
+ //# sourceMappingURL=standard-envelope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard-envelope.d.ts","sourceRoot":"","sources":["../../src/mcp/standard-envelope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE5E;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,gBAAgB,CAAC;IACvB,kEAAkE;IAClE,IAAI,EAAE,iBAAiB,CAAC;IACxB,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB;;;;;;;;;;OAUG;IACH,QAAQ,EAAE,aAAa,CAAC;IACxB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=standard-envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard-envelope.js","sourceRoot":"","sources":["../../src/mcp/standard-envelope.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Billing entity contracts (M7.4b — relocated from @specforge/platform so the
3
+ * billing store interface can live in api-types alongside the other store
4
+ * contracts; api-types cannot import platform).
5
+ */
6
+ export interface PlanDefinition {
7
+ planId: string;
8
+ name: string;
9
+ description?: string;
10
+ maxProjects: number;
11
+ maxActiveSpecs: number;
12
+ maxMembersPerProject: number | null;
13
+ maxApiKeys: number | null;
14
+ features: Record<string, boolean> | null;
15
+ isActive: boolean;
16
+ sortOrder: number;
17
+ }
18
+ //# sourceMappingURL=billing-record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing-record.d.ts","sourceRoot":"","sources":["../../src/runtime/billing-record.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACzC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Billing entity contracts (M7.4b — relocated from @specforge/platform so the
3
+ * billing store interface can live in api-types alongside the other store
4
+ * contracts; api-types cannot import platform).
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=billing-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billing-record.js","sourceRoot":"","sources":["../../src/runtime/billing-record.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}