circle-ir-ai 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/CHANGELOG.md +105 -0
  2. package/LICENSE +15 -0
  3. package/README.md +336 -0
  4. package/dist/action-queue/aggregator.d.ts +40 -0
  5. package/dist/action-queue/aggregator.d.ts.map +1 -0
  6. package/dist/action-queue/aggregator.js +375 -0
  7. package/dist/action-queue/aggregator.js.map +1 -0
  8. package/dist/action-queue/index.d.ts +14 -0
  9. package/dist/action-queue/index.d.ts.map +1 -0
  10. package/dist/action-queue/index.js +17 -0
  11. package/dist/action-queue/index.js.map +1 -0
  12. package/dist/action-queue/queue.d.ts +74 -0
  13. package/dist/action-queue/queue.d.ts.map +1 -0
  14. package/dist/action-queue/queue.js +433 -0
  15. package/dist/action-queue/queue.js.map +1 -0
  16. package/dist/action-queue/types.d.ts +162 -0
  17. package/dist/action-queue/types.d.ts.map +1 -0
  18. package/dist/action-queue/types.js +44 -0
  19. package/dist/action-queue/types.js.map +1 -0
  20. package/dist/agents/enrichment-agent.d.ts +16 -0
  21. package/dist/agents/enrichment-agent.d.ts.map +1 -0
  22. package/dist/agents/enrichment-agent.js +102 -0
  23. package/dist/agents/enrichment-agent.js.map +1 -0
  24. package/dist/agents/index.d.ts +12 -0
  25. package/dist/agents/index.d.ts.map +1 -0
  26. package/dist/agents/index.js +15 -0
  27. package/dist/agents/index.js.map +1 -0
  28. package/dist/agents/mastra/agents.d.ts +373 -0
  29. package/dist/agents/mastra/agents.d.ts.map +1 -0
  30. package/dist/agents/mastra/agents.js +347 -0
  31. package/dist/agents/mastra/agents.js.map +1 -0
  32. package/dist/agents/mastra/index.d.ts +12 -0
  33. package/dist/agents/mastra/index.d.ts.map +1 -0
  34. package/dist/agents/mastra/index.js +17 -0
  35. package/dist/agents/mastra/index.js.map +1 -0
  36. package/dist/agents/mastra/instance.d.ts +383 -0
  37. package/dist/agents/mastra/instance.d.ts.map +1 -0
  38. package/dist/agents/mastra/instance.js +37 -0
  39. package/dist/agents/mastra/instance.js.map +1 -0
  40. package/dist/agents/mastra/steps.d.ts +300 -0
  41. package/dist/agents/mastra/steps.d.ts.map +1 -0
  42. package/dist/agents/mastra/steps.js +468 -0
  43. package/dist/agents/mastra/steps.js.map +1 -0
  44. package/dist/agents/mastra/swarm.d.ts +106 -0
  45. package/dist/agents/mastra/swarm.d.ts.map +1 -0
  46. package/dist/agents/mastra/swarm.js +501 -0
  47. package/dist/agents/mastra/swarm.js.map +1 -0
  48. package/dist/agents/mastra/workflow.d.ts +81 -0
  49. package/dist/agents/mastra/workflow.d.ts.map +1 -0
  50. package/dist/agents/mastra/workflow.js +460 -0
  51. package/dist/agents/mastra/workflow.js.map +1 -0
  52. package/dist/agents/multi/agents/security.d.ts +29 -0
  53. package/dist/agents/multi/agents/security.d.ts.map +1 -0
  54. package/dist/agents/multi/agents/security.js +830 -0
  55. package/dist/agents/multi/agents/security.js.map +1 -0
  56. package/dist/agents/multi/extractor.d.ts +21 -0
  57. package/dist/agents/multi/extractor.d.ts.map +1 -0
  58. package/dist/agents/multi/extractor.js +483 -0
  59. package/dist/agents/multi/extractor.js.map +1 -0
  60. package/dist/agents/multi/index.d.ts +32 -0
  61. package/dist/agents/multi/index.d.ts.map +1 -0
  62. package/dist/agents/multi/index.js +34 -0
  63. package/dist/agents/multi/index.js.map +1 -0
  64. package/dist/agents/multi/runner.d.ts +79 -0
  65. package/dist/agents/multi/runner.d.ts.map +1 -0
  66. package/dist/agents/multi/runner.js +323 -0
  67. package/dist/agents/multi/runner.js.map +1 -0
  68. package/dist/agents/security-agent.d.ts +16 -0
  69. package/dist/agents/security-agent.d.ts.map +1 -0
  70. package/dist/agents/security-agent.js +299 -0
  71. package/dist/agents/security-agent.js.map +1 -0
  72. package/dist/agents/types.d.ts +373 -0
  73. package/dist/agents/types.d.ts.map +1 -0
  74. package/dist/agents/types.js +14 -0
  75. package/dist/agents/types.js.map +1 -0
  76. package/dist/agents/verification-agent.d.ts +23 -0
  77. package/dist/agents/verification-agent.d.ts.map +1 -0
  78. package/dist/agents/verification-agent.js +217 -0
  79. package/dist/agents/verification-agent.js.map +1 -0
  80. package/dist/agents/workflow.d.ts +30 -0
  81. package/dist/agents/workflow.d.ts.map +1 -0
  82. package/dist/agents/workflow.js +79 -0
  83. package/dist/agents/workflow.js.map +1 -0
  84. package/dist/analysis/enriched.d.ts +16 -0
  85. package/dist/analysis/enriched.d.ts.map +1 -0
  86. package/dist/analysis/enriched.js +297 -0
  87. package/dist/analysis/enriched.js.map +1 -0
  88. package/dist/analysis/llm-correlated-predicates.d.ts +80 -0
  89. package/dist/analysis/llm-correlated-predicates.d.ts.map +1 -0
  90. package/dist/analysis/llm-correlated-predicates.js +255 -0
  91. package/dist/analysis/llm-correlated-predicates.js.map +1 -0
  92. package/dist/analysis/llm-cross-file-taint.d.ts +86 -0
  93. package/dist/analysis/llm-cross-file-taint.d.ts.map +1 -0
  94. package/dist/analysis/llm-cross-file-taint.js +264 -0
  95. package/dist/analysis/llm-cross-file-taint.js.map +1 -0
  96. package/dist/analysis/pattern-discovery.d.ts +79 -0
  97. package/dist/analysis/pattern-discovery.d.ts.map +1 -0
  98. package/dist/analysis/pattern-discovery.js +447 -0
  99. package/dist/analysis/pattern-discovery.js.map +1 -0
  100. package/dist/cache/file-cache.d.ts +89 -0
  101. package/dist/cache/file-cache.d.ts.map +1 -0
  102. package/dist/cache/file-cache.js +208 -0
  103. package/dist/cache/file-cache.js.map +1 -0
  104. package/dist/cache/index.d.ts +6 -0
  105. package/dist/cache/index.d.ts.map +1 -0
  106. package/dist/cache/index.js +5 -0
  107. package/dist/cache/index.js.map +1 -0
  108. package/dist/cli/args.d.ts +52 -0
  109. package/dist/cli/args.d.ts.map +1 -0
  110. package/dist/cli/args.js +422 -0
  111. package/dist/cli/args.js.map +1 -0
  112. package/dist/cli/colors.d.ts +31 -0
  113. package/dist/cli/colors.d.ts.map +1 -0
  114. package/dist/cli/colors.js +80 -0
  115. package/dist/cli/colors.js.map +1 -0
  116. package/dist/cli/commands/analyze-skill.d.ts +33 -0
  117. package/dist/cli/commands/analyze-skill.d.ts.map +1 -0
  118. package/dist/cli/commands/analyze-skill.js +217 -0
  119. package/dist/cli/commands/analyze-skill.js.map +1 -0
  120. package/dist/cli/commands/analyze.d.ts +18 -0
  121. package/dist/cli/commands/analyze.d.ts.map +1 -0
  122. package/dist/cli/commands/analyze.js +30 -0
  123. package/dist/cli/commands/analyze.js.map +1 -0
  124. package/dist/cli/commands/benchmark-runner.d.ts +42 -0
  125. package/dist/cli/commands/benchmark-runner.d.ts.map +1 -0
  126. package/dist/cli/commands/benchmark-runner.js +18 -0
  127. package/dist/cli/commands/benchmark-runner.js.map +1 -0
  128. package/dist/cli/commands/benchmark.d.ts +11 -0
  129. package/dist/cli/commands/benchmark.d.ts.map +1 -0
  130. package/dist/cli/commands/benchmark.js +90 -0
  131. package/dist/cli/commands/benchmark.js.map +1 -0
  132. package/dist/cli/commands/dead-code.d.ts +11 -0
  133. package/dist/cli/commands/dead-code.d.ts.map +1 -0
  134. package/dist/cli/commands/dead-code.js +65 -0
  135. package/dist/cli/commands/dead-code.js.map +1 -0
  136. package/dist/cli/commands/generate-spec.d.ts +11 -0
  137. package/dist/cli/commands/generate-spec.d.ts.map +1 -0
  138. package/dist/cli/commands/generate-spec.js +67 -0
  139. package/dist/cli/commands/generate-spec.js.map +1 -0
  140. package/dist/cli/commands/health.d.ts +11 -0
  141. package/dist/cli/commands/health.d.ts.map +1 -0
  142. package/dist/cli/commands/health.js +67 -0
  143. package/dist/cli/commands/health.js.map +1 -0
  144. package/dist/cli/commands/project.d.ts +21 -0
  145. package/dist/cli/commands/project.d.ts.map +1 -0
  146. package/dist/cli/commands/project.js +92 -0
  147. package/dist/cli/commands/project.js.map +1 -0
  148. package/dist/cli/commands/scan.d.ts +11 -0
  149. package/dist/cli/commands/scan.d.ts.map +1 -0
  150. package/dist/cli/commands/scan.js +68 -0
  151. package/dist/cli/commands/scan.js.map +1 -0
  152. package/dist/cli/commands/secrets.d.ts +11 -0
  153. package/dist/cli/commands/secrets.d.ts.map +1 -0
  154. package/dist/cli/commands/secrets.js +71 -0
  155. package/dist/cli/commands/secrets.js.map +1 -0
  156. package/dist/cli/commands/swarm.d.ts +20 -0
  157. package/dist/cli/commands/swarm.d.ts.map +1 -0
  158. package/dist/cli/commands/swarm.js +174 -0
  159. package/dist/cli/commands/swarm.js.map +1 -0
  160. package/dist/cli/config.d.ts +103 -0
  161. package/dist/cli/config.d.ts.map +1 -0
  162. package/dist/cli/config.js +307 -0
  163. package/dist/cli/config.js.map +1 -0
  164. package/dist/cli/discovery.d.ts +31 -0
  165. package/dist/cli/discovery.d.ts.map +1 -0
  166. package/dist/cli/discovery.js +212 -0
  167. package/dist/cli/discovery.js.map +1 -0
  168. package/dist/cli/formatters/index.d.ts +15 -0
  169. package/dist/cli/formatters/index.d.ts.map +1 -0
  170. package/dist/cli/formatters/index.js +51 -0
  171. package/dist/cli/formatters/index.js.map +1 -0
  172. package/dist/cli/formatters/json.d.ts +11 -0
  173. package/dist/cli/formatters/json.d.ts.map +1 -0
  174. package/dist/cli/formatters/json.js +12 -0
  175. package/dist/cli/formatters/json.js.map +1 -0
  176. package/dist/cli/formatters/project-json.d.ts +11 -0
  177. package/dist/cli/formatters/project-json.d.ts.map +1 -0
  178. package/dist/cli/formatters/project-json.js +12 -0
  179. package/dist/cli/formatters/project-json.js.map +1 -0
  180. package/dist/cli/formatters/project-sarif.d.ts +11 -0
  181. package/dist/cli/formatters/project-sarif.d.ts.map +1 -0
  182. package/dist/cli/formatters/project-sarif.js +127 -0
  183. package/dist/cli/formatters/project-sarif.js.map +1 -0
  184. package/dist/cli/formatters/project-summary.d.ts +11 -0
  185. package/dist/cli/formatters/project-summary.d.ts.map +1 -0
  186. package/dist/cli/formatters/project-summary.js +202 -0
  187. package/dist/cli/formatters/project-summary.js.map +1 -0
  188. package/dist/cli/formatters/sarif-shared.d.ts +101 -0
  189. package/dist/cli/formatters/sarif-shared.d.ts.map +1 -0
  190. package/dist/cli/formatters/sarif-shared.js +57 -0
  191. package/dist/cli/formatters/sarif-shared.js.map +1 -0
  192. package/dist/cli/formatters/sarif.d.ts +12 -0
  193. package/dist/cli/formatters/sarif.d.ts.map +1 -0
  194. package/dist/cli/formatters/sarif.js +92 -0
  195. package/dist/cli/formatters/sarif.js.map +1 -0
  196. package/dist/cli/formatters/summary.d.ts +11 -0
  197. package/dist/cli/formatters/summary.d.ts.map +1 -0
  198. package/dist/cli/formatters/summary.js +240 -0
  199. package/dist/cli/formatters/summary.js.map +1 -0
  200. package/dist/cli/formatters/two-phase-summary.d.ts +11 -0
  201. package/dist/cli/formatters/two-phase-summary.d.ts.map +1 -0
  202. package/dist/cli/formatters/two-phase-summary.js +188 -0
  203. package/dist/cli/formatters/two-phase-summary.js.map +1 -0
  204. package/dist/cli/index.d.ts +15 -0
  205. package/dist/cli/index.d.ts.map +1 -0
  206. package/dist/cli/index.js +555 -0
  207. package/dist/cli/index.js.map +1 -0
  208. package/dist/components/clustering.d.ts +60 -0
  209. package/dist/components/clustering.d.ts.map +1 -0
  210. package/dist/components/clustering.js +129 -0
  211. package/dist/components/clustering.js.map +1 -0
  212. package/dist/components/enrichment.d.ts +45 -0
  213. package/dist/components/enrichment.d.ts.map +1 -0
  214. package/dist/components/enrichment.js +193 -0
  215. package/dist/components/enrichment.js.map +1 -0
  216. package/dist/components/index.d.ts +29 -0
  217. package/dist/components/index.d.ts.map +1 -0
  218. package/dist/components/index.js +56 -0
  219. package/dist/components/index.js.map +1 -0
  220. package/dist/dead-code/detector.d.ts +200 -0
  221. package/dist/dead-code/detector.d.ts.map +1 -0
  222. package/dist/dead-code/detector.js +1003 -0
  223. package/dist/dead-code/detector.js.map +1 -0
  224. package/dist/dead-code/index.d.ts +7 -0
  225. package/dist/dead-code/index.d.ts.map +1 -0
  226. package/dist/dead-code/index.js +7 -0
  227. package/dist/dead-code/index.js.map +1 -0
  228. package/dist/extractors/index.d.ts +15 -0
  229. package/dist/extractors/index.d.ts.map +1 -0
  230. package/dist/extractors/index.js +14 -0
  231. package/dist/extractors/index.js.map +1 -0
  232. package/dist/extractors/natural-language.d.ts +46 -0
  233. package/dist/extractors/natural-language.d.ts.map +1 -0
  234. package/dist/extractors/natural-language.js +228 -0
  235. package/dist/extractors/natural-language.js.map +1 -0
  236. package/dist/extractors/tree-sitter.d.ts +33 -0
  237. package/dist/extractors/tree-sitter.d.ts.map +1 -0
  238. package/dist/extractors/tree-sitter.js +69 -0
  239. package/dist/extractors/tree-sitter.js.map +1 -0
  240. package/dist/extractors/types.d.ts +62 -0
  241. package/dist/extractors/types.d.ts.map +1 -0
  242. package/dist/extractors/types.js +54 -0
  243. package/dist/extractors/types.js.map +1 -0
  244. package/dist/health-score/calculator.d.ts +123 -0
  245. package/dist/health-score/calculator.d.ts.map +1 -0
  246. package/dist/health-score/calculator.js +444 -0
  247. package/dist/health-score/calculator.js.map +1 -0
  248. package/dist/health-score/index.d.ts +12 -0
  249. package/dist/health-score/index.d.ts.map +1 -0
  250. package/dist/health-score/index.js +14 -0
  251. package/dist/health-score/index.js.map +1 -0
  252. package/dist/health-score/metrics.d.ts +142 -0
  253. package/dist/health-score/metrics.d.ts.map +1 -0
  254. package/dist/health-score/metrics.js +332 -0
  255. package/dist/health-score/metrics.js.map +1 -0
  256. package/dist/index.d.ts +26 -0
  257. package/dist/index.d.ts.map +1 -0
  258. package/dist/index.js +43 -0
  259. package/dist/index.js.map +1 -0
  260. package/dist/llm/ax-client.d.ts +477 -0
  261. package/dist/llm/ax-client.d.ts.map +1 -0
  262. package/dist/llm/ax-client.js +1641 -0
  263. package/dist/llm/ax-client.js.map +1 -0
  264. package/dist/llm/config.d.ts +58 -0
  265. package/dist/llm/config.d.ts.map +1 -0
  266. package/dist/llm/config.js +97 -0
  267. package/dist/llm/config.js.map +1 -0
  268. package/dist/llm/discovery.d.ts +123 -0
  269. package/dist/llm/discovery.d.ts.map +1 -0
  270. package/dist/llm/discovery.js +505 -0
  271. package/dist/llm/discovery.js.map +1 -0
  272. package/dist/llm/enrichment.d.ts +108 -0
  273. package/dist/llm/enrichment.d.ts.map +1 -0
  274. package/dist/llm/enrichment.js +312 -0
  275. package/dist/llm/enrichment.js.map +1 -0
  276. package/dist/llm/index.d.ts +13 -0
  277. package/dist/llm/index.d.ts.map +1 -0
  278. package/dist/llm/index.js +22 -0
  279. package/dist/llm/index.js.map +1 -0
  280. package/dist/llm/language-context.d.ts +64 -0
  281. package/dist/llm/language-context.d.ts.map +1 -0
  282. package/dist/llm/language-context.js +492 -0
  283. package/dist/llm/language-context.js.map +1 -0
  284. package/dist/llm/pattern-verification.d.ts +39 -0
  285. package/dist/llm/pattern-verification.d.ts.map +1 -0
  286. package/dist/llm/pattern-verification.js +127 -0
  287. package/dist/llm/pattern-verification.js.map +1 -0
  288. package/dist/llm/prompt-security.d.ts +120 -0
  289. package/dist/llm/prompt-security.d.ts.map +1 -0
  290. package/dist/llm/prompt-security.js +301 -0
  291. package/dist/llm/prompt-security.js.map +1 -0
  292. package/dist/llm/prompts/index.d.ts +31 -0
  293. package/dist/llm/prompts/index.d.ts.map +1 -0
  294. package/dist/llm/prompts/index.js +92 -0
  295. package/dist/llm/prompts/index.js.map +1 -0
  296. package/dist/llm/prompts/rust.d.ts +30 -0
  297. package/dist/llm/prompts/rust.d.ts.map +1 -0
  298. package/dist/llm/prompts/rust.js +121 -0
  299. package/dist/llm/prompts/rust.js.map +1 -0
  300. package/dist/llm/schemas.d.ts +892 -0
  301. package/dist/llm/schemas.d.ts.map +1 -0
  302. package/dist/llm/schemas.js +258 -0
  303. package/dist/llm/schemas.js.map +1 -0
  304. package/dist/llm/verification.d.ts +127 -0
  305. package/dist/llm/verification.d.ts.map +1 -0
  306. package/dist/llm/verification.js +394 -0
  307. package/dist/llm/verification.js.map +1 -0
  308. package/dist/project/analyzer.d.ts +30 -0
  309. package/dist/project/analyzer.d.ts.map +1 -0
  310. package/dist/project/analyzer.js +358 -0
  311. package/dist/project/analyzer.js.map +1 -0
  312. package/dist/project/call-graph.d.ts +22 -0
  313. package/dist/project/call-graph.d.ts.map +1 -0
  314. package/dist/project/call-graph.js +246 -0
  315. package/dist/project/call-graph.js.map +1 -0
  316. package/dist/project/index.d.ts +18 -0
  317. package/dist/project/index.d.ts.map +1 -0
  318. package/dist/project/index.js +20 -0
  319. package/dist/project/index.js.map +1 -0
  320. package/dist/project/taint-paths.d.ts +22 -0
  321. package/dist/project/taint-paths.d.ts.map +1 -0
  322. package/dist/project/taint-paths.js +265 -0
  323. package/dist/project/taint-paths.js.map +1 -0
  324. package/dist/project/two-phase-analyzer.d.ts +143 -0
  325. package/dist/project/two-phase-analyzer.d.ts.map +1 -0
  326. package/dist/project/two-phase-analyzer.js +646 -0
  327. package/dist/project/two-phase-analyzer.js.map +1 -0
  328. package/dist/project/type-hierarchy.d.ts +28 -0
  329. package/dist/project/type-hierarchy.d.ts.map +1 -0
  330. package/dist/project/type-hierarchy.js +218 -0
  331. package/dist/project/type-hierarchy.js.map +1 -0
  332. package/dist/secret-scan/index.d.ts +12 -0
  333. package/dist/secret-scan/index.d.ts.map +1 -0
  334. package/dist/secret-scan/index.js +14 -0
  335. package/dist/secret-scan/index.js.map +1 -0
  336. package/dist/secret-scan/patterns.d.ts +38 -0
  337. package/dist/secret-scan/patterns.d.ts.map +1 -0
  338. package/dist/secret-scan/patterns.js +473 -0
  339. package/dist/secret-scan/patterns.js.map +1 -0
  340. package/dist/secret-scan/scanner.d.ts +162 -0
  341. package/dist/secret-scan/scanner.d.ts.map +1 -0
  342. package/dist/secret-scan/scanner.js +511 -0
  343. package/dist/secret-scan/scanner.js.map +1 -0
  344. package/dist/security-scan/index.d.ts +12 -0
  345. package/dist/security-scan/index.d.ts.map +1 -0
  346. package/dist/security-scan/index.js +15 -0
  347. package/dist/security-scan/index.js.map +1 -0
  348. package/dist/security-scan/owasp-mapping.d.ts +29 -0
  349. package/dist/security-scan/owasp-mapping.d.ts.map +1 -0
  350. package/dist/security-scan/owasp-mapping.js +246 -0
  351. package/dist/security-scan/owasp-mapping.js.map +1 -0
  352. package/dist/security-scan/scanner.d.ts +204 -0
  353. package/dist/security-scan/scanner.d.ts.map +1 -0
  354. package/dist/security-scan/scanner.js +693 -0
  355. package/dist/security-scan/scanner.js.map +1 -0
  356. package/dist/security-scan/trend-tracker.d.ts +150 -0
  357. package/dist/security-scan/trend-tracker.d.ts.map +1 -0
  358. package/dist/security-scan/trend-tracker.js +299 -0
  359. package/dist/security-scan/trend-tracker.js.map +1 -0
  360. package/dist/skills/bundle-loader.d.ts +26 -0
  361. package/dist/skills/bundle-loader.d.ts.map +1 -0
  362. package/dist/skills/bundle-loader.js +284 -0
  363. package/dist/skills/bundle-loader.js.map +1 -0
  364. package/dist/skills/capability-mismatch.d.ts +21 -0
  365. package/dist/skills/capability-mismatch.d.ts.map +1 -0
  366. package/dist/skills/capability-mismatch.js +188 -0
  367. package/dist/skills/capability-mismatch.js.map +1 -0
  368. package/dist/skills/index.d.ts +10 -0
  369. package/dist/skills/index.d.ts.map +1 -0
  370. package/dist/skills/index.js +9 -0
  371. package/dist/skills/index.js.map +1 -0
  372. package/dist/skills/skill-analyzer.d.ts +16 -0
  373. package/dist/skills/skill-analyzer.d.ts.map +1 -0
  374. package/dist/skills/skill-analyzer.js +361 -0
  375. package/dist/skills/skill-analyzer.js.map +1 -0
  376. package/dist/skills/types.d.ts +195 -0
  377. package/dist/skills/types.d.ts.map +1 -0
  378. package/dist/skills/types.js +7 -0
  379. package/dist/skills/types.js.map +1 -0
  380. package/dist/specifica/conflict-resolver.d.ts +23 -0
  381. package/dist/specifica/conflict-resolver.d.ts.map +1 -0
  382. package/dist/specifica/conflict-resolver.js +129 -0
  383. package/dist/specifica/conflict-resolver.js.map +1 -0
  384. package/dist/specifica/evidence-aggregator.d.ts +33 -0
  385. package/dist/specifica/evidence-aggregator.d.ts.map +1 -0
  386. package/dist/specifica/evidence-aggregator.js +236 -0
  387. package/dist/specifica/evidence-aggregator.js.map +1 -0
  388. package/dist/specifica/evidence-extractor.d.ts +13 -0
  389. package/dist/specifica/evidence-extractor.d.ts.map +1 -0
  390. package/dist/specifica/evidence-extractor.js +431 -0
  391. package/dist/specifica/evidence-extractor.js.map +1 -0
  392. package/dist/specifica/feature-clustering.d.ts +19 -0
  393. package/dist/specifica/feature-clustering.d.ts.map +1 -0
  394. package/dist/specifica/feature-clustering.js +231 -0
  395. package/dist/specifica/feature-clustering.js.map +1 -0
  396. package/dist/specifica/generator.d.ts +16 -0
  397. package/dist/specifica/generator.d.ts.map +1 -0
  398. package/dist/specifica/generator.js +277 -0
  399. package/dist/specifica/generator.js.map +1 -0
  400. package/dist/specifica/index.d.ts +15 -0
  401. package/dist/specifica/index.d.ts.map +1 -0
  402. package/dist/specifica/index.js +18 -0
  403. package/dist/specifica/index.js.map +1 -0
  404. package/dist/specifica/prompts.d.ts +21 -0
  405. package/dist/specifica/prompts.d.ts.map +1 -0
  406. package/dist/specifica/prompts.js +196 -0
  407. package/dist/specifica/prompts.js.map +1 -0
  408. package/dist/specifica/spec-generator.d.ts +22 -0
  409. package/dist/specifica/spec-generator.d.ts.map +1 -0
  410. package/dist/specifica/spec-generator.js +229 -0
  411. package/dist/specifica/spec-generator.js.map +1 -0
  412. package/dist/specifica/types.d.ts +213 -0
  413. package/dist/specifica/types.d.ts.map +1 -0
  414. package/dist/specifica/types.js +7 -0
  415. package/dist/specifica/types.js.map +1 -0
  416. package/dist/utils/logger.d.ts +17 -0
  417. package/dist/utils/logger.d.ts.map +1 -0
  418. package/dist/utils/logger.js +51 -0
  419. package/dist/utils/logger.js.map +1 -0
  420. package/package.json +99 -0
@@ -0,0 +1,196 @@
1
+ /**
2
+ * LLM Prompts for Specifica Generation
3
+ *
4
+ * Prompt templates for generating spec.md, design.md, and tasks.md
5
+ */
6
+ /**
7
+ * Generate prompt for spec.md (requirements specification)
8
+ */
9
+ export function generateSpecPrompt(context) {
10
+ const { evidence, language, framework } = context;
11
+ return `You are a technical specification writer. Analyze the following code and generate a requirements specification in Specifica format.
12
+
13
+ ## Code Analysis
14
+
15
+ **File**: ${evidence.filePath}
16
+ **Language**: ${language}
17
+ ${framework ? `**Framework**: ${framework}` : ''}
18
+ **Lines of Code**: ${evidence.linesOfCode}
19
+
20
+ ### API Endpoints
21
+ ${formatAPIEndpoints(evidence)}
22
+
23
+ ### Methods
24
+ ${formatMethods(evidence)}
25
+
26
+ ### Data Flow
27
+ - **Sources**: ${evidence.sources.length} taint sources detected
28
+ - **Sinks**: ${evidence.sinks.length} taint sinks detected
29
+
30
+ ### Security Issues
31
+ ${formatVulnerabilities(evidence)}
32
+
33
+ ## Your Task
34
+
35
+ Generate a **requirements specification** that answers: **"What does this code do?"**
36
+
37
+ Output a JSON object with this structure:
38
+ \`\`\`json
39
+ {
40
+ "title": "Feature Name",
41
+ "summary": "One-paragraph description of what this feature does",
42
+ "requirements": [
43
+ {
44
+ "id": "REQ-001",
45
+ "description": "Testable requirement as a checkbox item",
46
+ "category": "functional|security|performance|usability",
47
+ "priority": "must|should|could",
48
+ "tested": false
49
+ }
50
+ ],
51
+ "edgeCases": [
52
+ "Edge case 1",
53
+ "Edge case 2"
54
+ ],
55
+ "errorScenarios": [
56
+ "Error scenario 1",
57
+ "Error scenario 2"
58
+ ]
59
+ }
60
+ \`\`\`
61
+
62
+ ## Guidelines
63
+
64
+ 1. **Requirements must be testable** - Each requirement should be something you can write a test for
65
+ 2. **Focus on WHAT, not HOW** - Describe behavior, not implementation
66
+ 3. **Extract from code behavior** - Infer requirements from what the code actually does
67
+ 4. **Include security requirements** - Based on detected sources/sinks/vulnerabilities
68
+ 5. **Identify edge cases** - Unusual inputs, error conditions, boundary cases
69
+ 6. **Error scenarios** - What can go wrong?
70
+
71
+ ## Example Output
72
+
73
+ \`\`\`json
74
+ {
75
+ "title": "User Authentication",
76
+ "summary": "Provides secure user login functionality with JWT token generation and session management.",
77
+ "requirements": [
78
+ {
79
+ "id": "REQ-001",
80
+ "description": "System shall accept username and password via POST /api/login",
81
+ "category": "functional",
82
+ "priority": "must",
83
+ "tested": false
84
+ },
85
+ {
86
+ "id": "REQ-002",
87
+ "description": "System shall validate credentials against user database",
88
+ "category": "functional",
89
+ "priority": "must",
90
+ "tested": false
91
+ },
92
+ {
93
+ "id": "REQ-003",
94
+ "description": "System shall generate JWT token on successful authentication",
95
+ "category": "functional",
96
+ "priority": "must",
97
+ "tested": false
98
+ },
99
+ {
100
+ "id": "REQ-004",
101
+ "description": "System shall prevent SQL injection in login query",
102
+ "category": "security",
103
+ "priority": "must",
104
+ "tested": false
105
+ },
106
+ {
107
+ "id": "REQ-005",
108
+ "description": "System shall return 401 for invalid credentials",
109
+ "category": "functional",
110
+ "priority": "must",
111
+ "tested": false
112
+ }
113
+ ],
114
+ "edgeCases": [
115
+ "Username contains special characters",
116
+ "Password is empty string",
117
+ "User account is locked",
118
+ "Multiple concurrent login attempts"
119
+ ],
120
+ "errorScenarios": [
121
+ "Database connection fails during authentication",
122
+ "JWT secret key is not configured",
123
+ "User provides malicious SQL in username field"
124
+ ]
125
+ }
126
+ \`\`\`
127
+
128
+ Now generate the specification for the provided code.`;
129
+ }
130
+ /**
131
+ * Format API endpoints for prompt
132
+ */
133
+ function formatAPIEndpoints(evidence) {
134
+ if (evidence.publicAPI.length === 0) {
135
+ return 'None detected';
136
+ }
137
+ return evidence.publicAPI.map(endpoint => {
138
+ const params = endpoint.parameters.map(p => ` - ${p.name} (${p.location}): ${p.type}${p.required ? ' [required]' : ''}`).join('\n');
139
+ return `- **${endpoint.method} ${endpoint.path}**
140
+ Handler: ${endpoint.handler}
141
+ Parameters:
142
+ ${params || ' None'}
143
+ Response: ${endpoint.responseType || 'void'}`;
144
+ }).join('\n\n');
145
+ }
146
+ /**
147
+ * Format methods for prompt
148
+ */
149
+ function formatMethods(evidence) {
150
+ if (evidence.methods.length === 0) {
151
+ return 'None';
152
+ }
153
+ const significantMethods = evidence.methods
154
+ .filter(m => m.visibility === 'public' || m.hasHttpHandling)
155
+ .slice(0, 10); // Limit to avoid token overflow
156
+ return significantMethods.map(method => {
157
+ const indicators = [];
158
+ if (method.hasHttpHandling)
159
+ indicators.push('HTTP handling');
160
+ if (method.hasDatabaseAccess)
161
+ indicators.push('Database access');
162
+ if (method.hasValidation)
163
+ indicators.push('Validation');
164
+ if (method.hasErrorHandling)
165
+ indicators.push('Error handling');
166
+ const params = method.parameters.map(p => `${p.name}: ${p.type}`).join(', ');
167
+ return `- **${method.name}**(${params}) → ${method.returnType}
168
+ ${indicators.length > 0 ? `Capabilities: ${indicators.join(', ')}` : 'No special capabilities detected'}`;
169
+ }).join('\n');
170
+ }
171
+ /**
172
+ * Format vulnerabilities for prompt
173
+ */
174
+ function formatVulnerabilities(evidence) {
175
+ if (evidence.vulnerabilities.length === 0) {
176
+ return 'None detected ✓';
177
+ }
178
+ return evidence.vulnerabilities.map(vuln => `- **${vuln.cwe}** (${vuln.severity}): ${vuln.description}
179
+ Source: ${vuln.sourceType} (line ${vuln.lineNumber})
180
+ Sink: ${vuln.sinkType}`).join('\n');
181
+ }
182
+ /**
183
+ * Generate prompt for design.md (architecture & decisions)
184
+ * TODO: Phase 2
185
+ */
186
+ export function generateDesignPrompt(context) {
187
+ return `[Phase 2: Design generation prompt - Coming soon]`;
188
+ }
189
+ /**
190
+ * Generate prompt for tasks.md (implementation order)
191
+ * TODO: Phase 3
192
+ */
193
+ export function generateTasksPrompt(context) {
194
+ return `[Phase 3: Tasks generation prompt - Coming soon]`;
195
+ }
196
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/specifica/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Spec Generator
3
+ *
4
+ * Generate spec.md using LLM from extracted evidence
5
+ */
6
+ import type { FileEvidence, SpecMdContent, SpecificaOptions } from './types.js';
7
+ /**
8
+ * Generate spec.md content from evidence
9
+ * Returns spec content and generation method used
10
+ */
11
+ export declare function generateSpec(evidence: FileEvidence, options?: SpecificaOptions): Promise<{
12
+ spec: SpecMdContent;
13
+ method: 'llm' | 'static';
14
+ model?: string;
15
+ }>;
16
+ /**
17
+ * Format spec as Markdown
18
+ */
19
+ export declare function formatSpecMarkdown(spec: SpecMdContent, metadata: {
20
+ reviewRequired: boolean;
21
+ }): string;
22
+ //# sourceMappingURL=spec-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-generator.d.ts","sourceRoot":"","sources":["../../src/specifica/spec-generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,KAAK,GAAG,QAAQ,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB5E;AA4JD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAsDrG"}
@@ -0,0 +1,229 @@
1
+ /**
2
+ * Spec Generator
3
+ *
4
+ * Generate spec.md using LLM from extracted evidence
5
+ */
6
+ import { getAxLLMClient } from '../llm/ax-client.js';
7
+ /**
8
+ * Generate spec.md content from evidence
9
+ * Returns spec content and generation method used
10
+ */
11
+ export async function generateSpec(evidence, options = {}) {
12
+ // Try LLM generation first
13
+ const llmResult = await generateWithLLM(evidence, options);
14
+ if (llmResult) {
15
+ console.log('✓ Spec generated using LLM');
16
+ return {
17
+ spec: llmResult,
18
+ method: 'llm',
19
+ model: options.specModel || process.env.LLM_ENRICHMENT_MODEL || 'cognium/gpt-oss-120b',
20
+ };
21
+ }
22
+ // Fallback to static generation
23
+ console.log('⚠ Falling back to static spec generation');
24
+ return {
25
+ spec: generateFallbackSpec(evidence),
26
+ method: 'static',
27
+ };
28
+ }
29
+ /**
30
+ * Generate spec using LLM
31
+ */
32
+ async function generateWithLLM(evidence, options) {
33
+ try {
34
+ // Get LLM client - use existing config or override if specified
35
+ const clientConfig = options.specModel ? {
36
+ phases: {
37
+ enrichment: {
38
+ model: options.specModel,
39
+ temperature: 0.3,
40
+ maxTokens: 4000,
41
+ },
42
+ verification: {
43
+ model: options.specModel,
44
+ temperature: 0.3,
45
+ maxTokens: 4000,
46
+ },
47
+ componentEnrichment: {
48
+ model: options.specModel,
49
+ temperature: 0.3,
50
+ maxTokens: 4000,
51
+ },
52
+ },
53
+ } : undefined; // Use default config from environment/config system
54
+ const client = getAxLLMClient(clientConfig);
55
+ // Prepare input for LLM
56
+ const input = {
57
+ title: extractFeatureName(evidence),
58
+ filePath: evidence.filePath,
59
+ language: evidence.language,
60
+ framework: evidence.framework?.name,
61
+ linesOfCode: evidence.linesOfCode,
62
+ apiEndpoints: evidence.publicAPI.map(e => ({
63
+ method: e.method,
64
+ path: e.path,
65
+ handler: e.handler,
66
+ })),
67
+ methods: evidence.methods.slice(0, 15).map(m => ({
68
+ name: m.name,
69
+ signature: m.signature,
70
+ })),
71
+ vulnerabilities: evidence.vulnerabilities.map(v => ({
72
+ cwe: v.cwe,
73
+ severity: v.severity,
74
+ description: v.description,
75
+ })),
76
+ };
77
+ // Call LLM
78
+ const result = await client.generateSpecification(input);
79
+ if (!result) {
80
+ return null;
81
+ }
82
+ return result;
83
+ }
84
+ catch (error) {
85
+ console.error('LLM spec generation failed:', error instanceof Error ? error.message : String(error));
86
+ return null;
87
+ }
88
+ }
89
+ /**
90
+ * Generate fallback spec when LLM fails or is disabled
91
+ */
92
+ function generateFallbackSpec(evidence) {
93
+ const requirements = [];
94
+ let reqId = 1;
95
+ // Generate requirements from API endpoints
96
+ for (const endpoint of evidence.publicAPI) {
97
+ requirements.push({
98
+ id: `REQ-${String(reqId++).padStart(3, '0')}`,
99
+ description: `System shall handle ${endpoint.method} requests to ${endpoint.path}`,
100
+ category: 'functional',
101
+ priority: 'must',
102
+ tested: false,
103
+ });
104
+ // Add parameter validation requirements
105
+ const requiredParams = endpoint.parameters.filter(p => p.required);
106
+ if (requiredParams.length > 0) {
107
+ requirements.push({
108
+ id: `REQ-${String(reqId++).padStart(3, '0')}`,
109
+ description: `System shall validate required parameters: ${requiredParams.map(p => p.name).join(', ')}`,
110
+ category: 'functional',
111
+ priority: 'must',
112
+ tested: false,
113
+ });
114
+ }
115
+ }
116
+ // Generate security requirements from vulnerabilities
117
+ for (const vuln of evidence.vulnerabilities) {
118
+ requirements.push({
119
+ id: `REQ-${String(reqId++).padStart(3, '0')}`,
120
+ description: `System shall prevent ${vuln.cwe}: ${vuln.description}`,
121
+ category: 'security',
122
+ priority: 'must',
123
+ tested: false,
124
+ });
125
+ }
126
+ // If no requirements generated, create a basic one
127
+ if (requirements.length === 0) {
128
+ requirements.push({
129
+ id: 'REQ-001',
130
+ description: `System shall provide ${evidence.methods.length} methods as defined in implementation`,
131
+ category: 'functional',
132
+ priority: 'should',
133
+ tested: false,
134
+ });
135
+ }
136
+ return {
137
+ title: extractFeatureName(evidence),
138
+ summary: `Feature providing ${evidence.methods.length} methods with ${evidence.publicAPI.length} API endpoints.`,
139
+ requirements,
140
+ edgeCases: [
141
+ 'Invalid input parameters',
142
+ 'Missing required fields',
143
+ 'Concurrent access',
144
+ ],
145
+ errorScenarios: [
146
+ 'Database connection failure',
147
+ 'Invalid data format',
148
+ 'Authentication failure',
149
+ ],
150
+ };
151
+ }
152
+ /**
153
+ * Extract feature name from file path
154
+ */
155
+ function extractFeatureName(evidence) {
156
+ const fileName = evidence.filePath.split('/').pop() || 'Unknown';
157
+ const baseName = fileName.replace(/\.(java|ts|js|py|rs)$/, '');
158
+ // Convert CamelCase or snake_case to Title Case
159
+ return baseName
160
+ .replace(/([A-Z])/g, ' $1')
161
+ .replace(/_/g, ' ')
162
+ .trim()
163
+ .split(' ')
164
+ .map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
165
+ .join(' ');
166
+ }
167
+ /**
168
+ * Format spec as Markdown
169
+ */
170
+ export function formatSpecMarkdown(spec, metadata) {
171
+ const sections = [];
172
+ // Header with review notice
173
+ if (metadata.reviewRequired) {
174
+ sections.push(`> **⚠️ Generated Specification - Review Required**
175
+ > This specification was automatically generated from code.
176
+ > Please review and refine before using.
177
+
178
+ `);
179
+ }
180
+ // Title and summary
181
+ sections.push(`# ${spec.title}\n`);
182
+ sections.push(`${spec.summary}\n`);
183
+ // Requirements
184
+ sections.push(`## Requirements\n`);
185
+ // Group requirements by category
186
+ const byCategory = groupBy(spec.requirements, r => r.category);
187
+ for (const [category, reqs] of Object.entries(byCategory)) {
188
+ const categoryTitle = category.charAt(0).toUpperCase() + category.slice(1);
189
+ sections.push(`### ${categoryTitle}\n`);
190
+ for (const req of reqs) {
191
+ const priority = req.priority === 'must' ? '**MUST**' : req.priority === 'should' ? 'SHOULD' : 'COULD';
192
+ const checked = req.tested ? 'x' : ' ';
193
+ sections.push(`- [${checked}] **${req.id}**: ${priority} ${req.description}\n`);
194
+ }
195
+ sections.push('');
196
+ }
197
+ // Edge Cases
198
+ if (spec.edgeCases.length > 0) {
199
+ sections.push(`## Edge Cases\n`);
200
+ for (const edge of spec.edgeCases) {
201
+ sections.push(`- ${edge}\n`);
202
+ }
203
+ sections.push('');
204
+ }
205
+ // Error Scenarios
206
+ if (spec.errorScenarios.length > 0) {
207
+ sections.push(`## Error Scenarios\n`);
208
+ for (const error of spec.errorScenarios) {
209
+ sections.push(`- ${error}\n`);
210
+ }
211
+ sections.push('');
212
+ }
213
+ return sections.join('\n');
214
+ }
215
+ /**
216
+ * Helper: Group array by key
217
+ */
218
+ function groupBy(array, keyFn) {
219
+ const result = {};
220
+ for (const item of array) {
221
+ const key = keyFn(item);
222
+ if (!result[key]) {
223
+ result[key] = [];
224
+ }
225
+ result[key].push(item);
226
+ }
227
+ return result;
228
+ }
229
+ //# sourceMappingURL=spec-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-generator.js","sourceRoot":"","sources":["../../src/specifica/spec-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Specifica Generation Types
3
+ *
4
+ * Type definitions for code-to-spec generation.
5
+ */
6
+ import type { CircleIR, TaintSource, TaintSink } from 'circle-ir';
7
+ export interface SpecificaOptions {
8
+ /** Output directory for .specifica/ (default: project root) */
9
+ outputDir?: string;
10
+ /** LLM model for spec generation (default: gpt-oss-120b) */
11
+ specModel?: string;
12
+ /** Whether to overwrite existing specs (default: false - prompt user) */
13
+ overwrite?: boolean;
14
+ /** Whether to use LLM enrichment for analysis (default: false - reuse existing) */
15
+ enableEnrichment?: boolean;
16
+ /** Language of the codebase (auto-detected if not provided) */
17
+ language?: 'java' | 'javascript' | 'typescript' | 'python' | 'rust';
18
+ /** Suppress console output (default: false) */
19
+ quiet?: boolean;
20
+ }
21
+ export interface ConflictResolution {
22
+ /** Strategy for handling existing .specifica/ files */
23
+ strategy: 'skip' | 'overwrite' | 'merge' | 'rename' | 'prompt';
24
+ /** Backup existing files before overwriting */
25
+ backup?: boolean;
26
+ }
27
+ export interface FileEvidence {
28
+ filePath: string;
29
+ language: string;
30
+ linesOfCode: number;
31
+ types: TypeInfo[];
32
+ methods: MethodInfo[];
33
+ publicAPI: APIEndpoint[];
34
+ imports: ImportInfo[];
35
+ exports: ExportInfo[];
36
+ sources: TaintSource[];
37
+ sinks: TaintSink[];
38
+ vulnerabilities: VulnerabilityInfo[];
39
+ comments: CommentInfo[];
40
+ todos: string[];
41
+ framework?: FrameworkInfo;
42
+ }
43
+ export interface TypeInfo {
44
+ name: string;
45
+ kind: 'class' | 'interface' | 'enum' | 'type';
46
+ visibility: 'public' | 'private' | 'protected' | 'package';
47
+ annotations: string[];
48
+ extends?: string[];
49
+ implements?: string[];
50
+ methods: string[];
51
+ fields: FieldInfo[];
52
+ }
53
+ export interface FieldInfo {
54
+ name: string;
55
+ type: string;
56
+ visibility: 'public' | 'private' | 'protected' | 'package';
57
+ annotations: string[];
58
+ isStatic: boolean;
59
+ isFinal: boolean;
60
+ }
61
+ export interface MethodInfo {
62
+ name: string;
63
+ signature: string;
64
+ returnType: string;
65
+ parameters: ParameterInfo[];
66
+ visibility: 'public' | 'private' | 'protected' | 'package';
67
+ annotations: string[];
68
+ isStatic: boolean;
69
+ isAsync: boolean;
70
+ lineStart: number;
71
+ lineEnd: number;
72
+ hasHttpHandling: boolean;
73
+ hasDatabaseAccess: boolean;
74
+ hasValidation: boolean;
75
+ hasErrorHandling: boolean;
76
+ }
77
+ export interface ParameterInfo {
78
+ name: string;
79
+ type: string;
80
+ annotations: string[];
81
+ isOptional: boolean;
82
+ }
83
+ export interface APIEndpoint {
84
+ method: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
85
+ path: string;
86
+ handler: string;
87
+ parameters: APIParameter[];
88
+ requestBody?: string;
89
+ responseType?: string;
90
+ annotations: string[];
91
+ summary?: string;
92
+ }
93
+ export interface APIParameter {
94
+ name: string;
95
+ location: 'path' | 'query' | 'body' | 'header';
96
+ type: string;
97
+ required: boolean;
98
+ description?: string;
99
+ }
100
+ export interface ImportInfo {
101
+ module: string;
102
+ imports: string[];
103
+ isFramework: boolean;
104
+ }
105
+ export interface ExportInfo {
106
+ name: string;
107
+ kind: 'function' | 'class' | 'interface' | 'type' | 'const';
108
+ isDefault: boolean;
109
+ }
110
+ export interface VulnerabilityInfo {
111
+ cwe: string;
112
+ severity: 'critical' | 'high' | 'medium' | 'low';
113
+ description: string;
114
+ sourceType: string;
115
+ sinkType: string;
116
+ lineNumber: number;
117
+ }
118
+ export interface CommentInfo {
119
+ type: 'line' | 'block' | 'doc';
120
+ content: string;
121
+ lineNumber: number;
122
+ }
123
+ export interface FrameworkInfo {
124
+ name: string;
125
+ version?: string;
126
+ patterns: string[];
127
+ layer?: 'controller' | 'service' | 'repository' | 'model' | 'util';
128
+ }
129
+ export interface FeatureCluster {
130
+ name: string;
131
+ files: string[];
132
+ evidence: FileEvidence[];
133
+ confidence: number;
134
+ clusteringMethod: 'package' | 'directory' | 'naming' | 'dependency' | 'semantic';
135
+ }
136
+ export interface SpecificaOutput {
137
+ featureName: string;
138
+ outputPath: string;
139
+ spec: SpecMdContent;
140
+ design?: DesignMdContent;
141
+ tasks?: TasksMdContent;
142
+ metadata: GenerationMetadata;
143
+ generationMethod?: 'llm' | 'static';
144
+ }
145
+ export interface SpecMdContent {
146
+ title: string;
147
+ summary: string;
148
+ requirements: Requirement[];
149
+ edgeCases: string[];
150
+ errorScenarios: string[];
151
+ }
152
+ export interface Requirement {
153
+ id: string;
154
+ description: string;
155
+ category: 'functional' | 'security' | 'performance' | 'usability';
156
+ priority: 'must' | 'should' | 'could';
157
+ tested: boolean;
158
+ }
159
+ export interface DesignMdContent {
160
+ architecture: string;
161
+ components: ComponentInfo[];
162
+ patterns: string[];
163
+ technicalDecisions: TechnicalDecision[];
164
+ securityConsiderations: string[];
165
+ componentDiagram?: string;
166
+ }
167
+ export interface ComponentInfo {
168
+ name: string;
169
+ type: 'controller' | 'service' | 'repository' | 'model' | 'util' | 'middleware';
170
+ responsibilities: string[];
171
+ dependencies: string[];
172
+ }
173
+ export interface TechnicalDecision {
174
+ decision: string;
175
+ rationale: string;
176
+ alternatives?: string[];
177
+ tradeoffs?: string;
178
+ }
179
+ export interface TasksMdContent {
180
+ tasks: Task[];
181
+ dependencyGraph?: string;
182
+ }
183
+ export interface Task {
184
+ id: string;
185
+ title: string;
186
+ description: string;
187
+ dependencies: string[];
188
+ deliverable: string;
189
+ verification: string[];
190
+ estimatedEffort?: string;
191
+ }
192
+ export interface GenerationMetadata {
193
+ generatedAt: string;
194
+ generator: string;
195
+ version: string;
196
+ model: string;
197
+ filesAnalyzed: number;
198
+ reviewRequired: boolean;
199
+ llmCost?: number;
200
+ }
201
+ export interface PromptContext {
202
+ evidence: FileEvidence;
203
+ language: string;
204
+ framework?: string;
205
+ existingAnalysis?: CircleIR;
206
+ }
207
+ export interface LLMResponse {
208
+ spec?: SpecMdContent;
209
+ design?: DesignMdContent;
210
+ tasks?: TasksMdContent;
211
+ reasoning?: string;
212
+ }
213
+ //# sourceMappingURL=types.d.ts.map