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,231 @@
1
+ /**
2
+ * Feature Clustering
3
+ *
4
+ * Groups related files into features for multi-file spec generation.
5
+ */
6
+ import * as path from 'path';
7
+ /**
8
+ * Cluster files into features based on package, naming, and dependencies
9
+ */
10
+ export function clusterFilesByFeature(evidenceList, rootDir) {
11
+ const clusters = new Map();
12
+ // Strategy 1: Package-based clustering (Java, etc.)
13
+ const packageClusters = clusterByPackage(evidenceList, rootDir);
14
+ for (const cluster of packageClusters) {
15
+ clusters.set(cluster.name, cluster);
16
+ }
17
+ // Strategy 2: Directory-based clustering (JS/TS, Python)
18
+ if (clusters.size === 0) {
19
+ const dirClusters = clusterByDirectory(evidenceList, rootDir);
20
+ for (const cluster of dirClusters) {
21
+ clusters.set(cluster.name, cluster);
22
+ }
23
+ }
24
+ // Strategy 3: Naming pattern clustering
25
+ const nameClusters = clusterByNaming(evidenceList);
26
+ mergeClusters(clusters, nameClusters);
27
+ // If no clustering worked, create one cluster per file
28
+ if (clusters.size === 0) {
29
+ for (const evidence of evidenceList) {
30
+ const name = extractFeatureNameFromFile(evidence.filePath);
31
+ clusters.set(name, {
32
+ name,
33
+ files: [evidence.filePath],
34
+ evidence: [evidence],
35
+ confidence: 0.5,
36
+ clusteringMethod: 'naming',
37
+ });
38
+ }
39
+ }
40
+ return Array.from(clusters.values());
41
+ }
42
+ /**
43
+ * Cluster by Java package structure
44
+ */
45
+ function clusterByPackage(evidenceList, rootDir) {
46
+ const clusters = new Map();
47
+ for (const evidence of evidenceList) {
48
+ // Only works for languages with explicit packages
49
+ if (evidence.language !== 'java')
50
+ continue;
51
+ // Extract package from imports/types
52
+ const packageName = extractPackageName(evidence);
53
+ if (!packageName)
54
+ continue;
55
+ // Group by last segment of package (e.g., com.example.user -> user)
56
+ const feature = packageName.split('.').pop() || 'unknown';
57
+ if (!clusters.has(feature)) {
58
+ clusters.set(feature, []);
59
+ }
60
+ clusters.get(feature).push(evidence);
61
+ }
62
+ return Array.from(clusters.entries()).map(([name, evidence]) => ({
63
+ name,
64
+ files: evidence.map(e => e.filePath),
65
+ evidence,
66
+ confidence: 0.9,
67
+ clusteringMethod: 'package',
68
+ }));
69
+ }
70
+ /**
71
+ * Cluster by directory structure
72
+ */
73
+ function clusterByDirectory(evidenceList, rootDir) {
74
+ const clusters = new Map();
75
+ for (const evidence of evidenceList) {
76
+ // Get directory relative to root
77
+ const relativePath = path.relative(rootDir, evidence.filePath);
78
+ const dir = path.dirname(relativePath);
79
+ // Use last directory segment as feature name
80
+ const segments = dir.split(path.sep);
81
+ const feature = segments[segments.length - 1] || 'root';
82
+ if (!clusters.has(feature)) {
83
+ clusters.set(feature, []);
84
+ }
85
+ clusters.get(feature).push(evidence);
86
+ }
87
+ return Array.from(clusters.entries()).map(([name, evidence]) => ({
88
+ name,
89
+ files: evidence.map(e => e.filePath),
90
+ evidence,
91
+ confidence: 0.7,
92
+ clusteringMethod: 'directory',
93
+ }));
94
+ }
95
+ /**
96
+ * Cluster by naming patterns (UserController, UserService -> user)
97
+ */
98
+ function clusterByNaming(evidenceList) {
99
+ const clusters = new Map();
100
+ for (const evidence of evidenceList) {
101
+ const fileName = path.basename(evidence.filePath, path.extname(evidence.filePath));
102
+ // Extract feature name from file name
103
+ const feature = extractFeatureNameFromFile(fileName);
104
+ if (!clusters.has(feature)) {
105
+ clusters.set(feature, []);
106
+ }
107
+ clusters.get(feature).push(evidence);
108
+ }
109
+ return Array.from(clusters.entries()).map(([name, evidence]) => ({
110
+ name,
111
+ files: evidence.map(e => e.filePath),
112
+ evidence,
113
+ confidence: 0.6,
114
+ clusteringMethod: 'naming',
115
+ }));
116
+ }
117
+ /**
118
+ * Merge naming-based clusters into existing clusters
119
+ */
120
+ function mergeClusters(existing, newClusters) {
121
+ for (const newCluster of newClusters) {
122
+ if (existing.has(newCluster.name)) {
123
+ // Merge evidence from naming cluster into existing
124
+ const existingCluster = existing.get(newCluster.name);
125
+ // Add files that aren't already in the cluster
126
+ for (const evidence of newCluster.evidence) {
127
+ if (!existingCluster.files.includes(evidence.filePath)) {
128
+ existingCluster.files.push(evidence.filePath);
129
+ existingCluster.evidence.push(evidence);
130
+ }
131
+ }
132
+ // Update confidence (max of both methods)
133
+ existingCluster.confidence = Math.max(existingCluster.confidence, newCluster.confidence);
134
+ }
135
+ }
136
+ }
137
+ /**
138
+ * Extract package name from evidence
139
+ */
140
+ function extractPackageName(evidence) {
141
+ // Try to find package from imports
142
+ for (const imp of evidence.imports) {
143
+ if (imp.module && imp.module.includes('.')) {
144
+ // Return package without the class name
145
+ const parts = imp.module.split('.');
146
+ return parts.slice(0, -1).join('.');
147
+ }
148
+ }
149
+ // Try to infer from file path
150
+ const segments = evidence.filePath.split('/');
151
+ const javaIndex = segments.findIndex(s => s === 'java');
152
+ if (javaIndex !== -1 && javaIndex < segments.length - 2) {
153
+ return segments.slice(javaIndex + 1, -1).join('.');
154
+ }
155
+ return null;
156
+ }
157
+ /**
158
+ * Extract feature name from file name
159
+ * Examples:
160
+ * UserController -> user
161
+ * OrderService -> order
162
+ * product-repository -> product
163
+ */
164
+ function extractFeatureNameFromFile(fileName) {
165
+ // Remove common suffixes
166
+ const cleaned = fileName
167
+ .replace(/Controller$/i, '')
168
+ .replace(/Service$/i, '')
169
+ .replace(/Repository$/i, '')
170
+ .replace(/Handler$/i, '')
171
+ .replace(/Manager$/i, '')
172
+ .replace(/Impl$/i, '')
173
+ .replace(/Model$/i, '')
174
+ .replace(/Entity$/i, '');
175
+ // Convert to kebab-case
176
+ return cleaned
177
+ .replace(/([A-Z])/g, '-$1')
178
+ .toLowerCase()
179
+ .replace(/^-/, '')
180
+ .replace(/_/g, '-')
181
+ .replace(/\s+/g, '-');
182
+ }
183
+ /**
184
+ * Filter clusters to only include those with multiple files or significant size
185
+ */
186
+ export function filterSignificantClusters(clusters, minFiles = 1) {
187
+ return clusters.filter(cluster => {
188
+ // Include if it has enough files
189
+ if (cluster.files.length >= minFiles) {
190
+ return true;
191
+ }
192
+ // Include if single file but has significant content
193
+ if (cluster.files.length === 1) {
194
+ const evidence = cluster.evidence[0];
195
+ const hasAPI = evidence.publicAPI.length > 0;
196
+ const hasMethods = evidence.methods.length > 3;
197
+ const hasVulns = evidence.vulnerabilities.length > 0;
198
+ return hasAPI || hasMethods || hasVulns;
199
+ }
200
+ return false;
201
+ });
202
+ }
203
+ /**
204
+ * Sort clusters by importance (API endpoints, method count, vulnerabilities)
205
+ */
206
+ export function sortClustersByImportance(clusters) {
207
+ return clusters.sort((a, b) => {
208
+ // Calculate importance score
209
+ const scoreA = calculateImportance(a);
210
+ const scoreB = calculateImportance(b);
211
+ return scoreB - scoreA;
212
+ });
213
+ }
214
+ /**
215
+ * Calculate importance score for a cluster
216
+ */
217
+ function calculateImportance(cluster) {
218
+ let score = 0;
219
+ for (const evidence of cluster.evidence) {
220
+ score += evidence.publicAPI.length * 10; // API endpoints are high value
221
+ score += evidence.methods.length * 1;
222
+ score += evidence.vulnerabilities.length * 5; // Security issues matter
223
+ score += evidence.types.length * 2;
224
+ }
225
+ // Bonus for multiple files (indicates larger feature)
226
+ if (cluster.files.length > 1) {
227
+ score += cluster.files.length * 5;
228
+ }
229
+ return score;
230
+ }
231
+ //# sourceMappingURL=feature-clustering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feature-clustering.js","sourceRoot":"","sources":["../../src/specifica/feature-clustering.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Specifica Generator
3
+ *
4
+ * Main orchestrator for generating Specifica specifications from code
5
+ */
6
+ import type { SpecificaOptions, SpecificaOutput } from './types.js';
7
+ /**
8
+ * Generate Specifica specification from a single file
9
+ */
10
+ export declare function generateSpecifica(filePath: string, options?: SpecificaOptions): Promise<SpecificaOutput>;
11
+ /**
12
+ * Generate Specifica for multiple files (directory)
13
+ * Phase 2: Feature clustering and multi-file analysis
14
+ */
15
+ export declare function generateSpecificaForDirectory(dirPath: string, options?: SpecificaOptions): Promise<SpecificaOutput[]>;
16
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/specifica/generator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EAEhB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,CAAC,CA6D1B;AAED;;;GAGG;AACH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,eAAe,EAAE,CAAC,CA+H5B"}
@@ -0,0 +1,277 @@
1
+ /**
2
+ * Specifica Generator
3
+ *
4
+ * Main orchestrator for generating Specifica specifications from code
5
+ */
6
+ import * as fs from 'fs';
7
+ import * as path from 'path';
8
+ import { analyze } from 'circle-ir';
9
+ import { extractEvidence } from './evidence-extractor.js';
10
+ import { generateSpec, formatSpecMarkdown } from './spec-generator.js';
11
+ import { resolveConflict } from './conflict-resolver.js';
12
+ /**
13
+ * Generate Specifica specification from a single file
14
+ */
15
+ export async function generateSpecifica(filePath, options = {}) {
16
+ // Read source code
17
+ const code = fs.readFileSync(filePath, 'utf-8');
18
+ // Determine output directory (default: project root)
19
+ const outputDir = options.outputDir || findProjectRoot(filePath);
20
+ const specificaDir = path.join(outputDir, '.specifica');
21
+ // Run Circle-IR analysis (reuse existing if available)
22
+ const language = options.language || detectLanguage(filePath);
23
+ const analysis = await analyze(code, filePath, language, {
24
+ // AnalyzerOptions doesn't have enableLLMEnrichment
25
+ // LLM enrichment is handled separately in circle-ir-ai
26
+ });
27
+ // Extract evidence
28
+ const evidence = extractEvidence(filePath, code, analysis);
29
+ // Generate spec.md
30
+ const { spec, method, model } = await generateSpec(evidence, options);
31
+ // Determine feature name and output path
32
+ const featureName = generateFeatureName(evidence.filePath);
33
+ const featureDir = path.join(specificaDir, featureName);
34
+ const specPath = path.join(featureDir, 'spec.md');
35
+ // Check for conflicts
36
+ if (fs.existsSync(specPath) && !options.overwrite) {
37
+ const resolution = await resolveConflict(specPath, {
38
+ strategy: 'prompt',
39
+ backup: true,
40
+ });
41
+ if (resolution === 'skip') {
42
+ throw new Error(`Spec already exists at ${specPath}. Use --overwrite to replace.`);
43
+ }
44
+ }
45
+ // Create output directory
46
+ fs.mkdirSync(featureDir, { recursive: true });
47
+ // Format and write spec.md
48
+ const metadata = {
49
+ generatedAt: new Date().toISOString(),
50
+ generator: 'circle-ir-ai/specifica',
51
+ version: getVersion(),
52
+ model: model || 'static-generation',
53
+ filesAnalyzed: 1,
54
+ reviewRequired: true,
55
+ };
56
+ const markdown = formatSpecMarkdown(spec, { reviewRequired: true });
57
+ fs.writeFileSync(specPath, markdown, 'utf-8');
58
+ return {
59
+ featureName,
60
+ outputPath: featureDir,
61
+ spec,
62
+ metadata,
63
+ generationMethod: method,
64
+ };
65
+ }
66
+ /**
67
+ * Generate Specifica for multiple files (directory)
68
+ * Phase 2: Feature clustering and multi-file analysis
69
+ */
70
+ export async function generateSpecificaForDirectory(dirPath, options = {}) {
71
+ const { clusterFilesByFeature, filterSignificantClusters, sortClustersByImportance } = await import('./feature-clustering.js');
72
+ const { aggregateEvidence } = await import('./evidence-aggregator.js');
73
+ // Find all source files in directory
74
+ const files = collectSourceFiles(dirPath);
75
+ if (files.length === 0) {
76
+ throw new Error(`No source files found in ${dirPath}`);
77
+ }
78
+ if (!options.quiet) {
79
+ console.log(`Found ${files.length} source files`);
80
+ }
81
+ // Analyze each file
82
+ const evidenceList = [];
83
+ for (let i = 0; i < files.length; i++) {
84
+ const file = files[i];
85
+ if (!options.quiet) {
86
+ console.log(`[${i + 1}/${files.length}] Analyzing ${path.basename(file)}...`);
87
+ }
88
+ try {
89
+ const code = fs.readFileSync(file, 'utf-8');
90
+ const language = detectLanguage(file);
91
+ const analysis = await analyze(code, file, language, {});
92
+ const evidence = extractEvidence(file, code, analysis);
93
+ evidenceList.push(evidence);
94
+ }
95
+ catch (error) {
96
+ console.error(`Failed to analyze ${file}:`, error instanceof Error ? error.message : String(error));
97
+ }
98
+ }
99
+ if (evidenceList.length === 0) {
100
+ throw new Error('Failed to analyze any files');
101
+ }
102
+ // Cluster files into features
103
+ if (!options.quiet) {
104
+ console.log('\nClustering files into features...');
105
+ }
106
+ let clusters = clusterFilesByFeature(evidenceList, dirPath);
107
+ clusters = filterSignificantClusters(clusters);
108
+ clusters = sortClustersByImportance(clusters);
109
+ if (!options.quiet) {
110
+ console.log(`Found ${clusters.length} features:\n`);
111
+ for (const cluster of clusters) {
112
+ console.log(` - ${cluster.name} (${cluster.files.length} files, ${cluster.clusteringMethod})`);
113
+ }
114
+ console.log('');
115
+ }
116
+ // Generate specs for each cluster
117
+ const outputs = [];
118
+ for (let i = 0; i < clusters.length; i++) {
119
+ const cluster = clusters[i];
120
+ if (!options.quiet) {
121
+ console.log(`[${i + 1}/${clusters.length}] Generating spec for ${cluster.name}...`);
122
+ }
123
+ try {
124
+ // Aggregate evidence from all files in cluster
125
+ const aggregated = aggregateEvidence(cluster);
126
+ // Generate spec from aggregated evidence
127
+ const { spec, method, model } = await generateSpec(aggregated, options);
128
+ // Determine output path
129
+ const outputDir = options.outputDir || findProjectRoot(dirPath);
130
+ const specificaDir = path.join(outputDir, '.specifica');
131
+ const featureDir = path.join(specificaDir, cluster.name);
132
+ const specPath = path.join(featureDir, 'spec.md');
133
+ // Check for conflicts
134
+ if (fs.existsSync(specPath) && !options.overwrite) {
135
+ const resolution = await resolveConflict(specPath, {
136
+ strategy: 'prompt',
137
+ backup: true,
138
+ });
139
+ if (resolution === 'skip') {
140
+ console.log(`Skipping ${cluster.name} (spec exists)`);
141
+ continue;
142
+ }
143
+ }
144
+ // Create output directory
145
+ fs.mkdirSync(featureDir, { recursive: true });
146
+ // Format and write spec.md
147
+ const metadata = {
148
+ generatedAt: new Date().toISOString(),
149
+ generator: 'circle-ir-ai/specifica',
150
+ version: getVersion(),
151
+ model: model || 'static-generation',
152
+ filesAnalyzed: cluster.files.length,
153
+ reviewRequired: true,
154
+ };
155
+ const markdown = formatSpecMarkdown(spec, { reviewRequired: true });
156
+ fs.writeFileSync(specPath, markdown, 'utf-8');
157
+ outputs.push({
158
+ featureName: cluster.name,
159
+ outputPath: featureDir,
160
+ spec,
161
+ metadata,
162
+ generationMethod: method,
163
+ });
164
+ if (!options.quiet) {
165
+ console.log(` ✓ Generated: ${featureDir}/spec.md`);
166
+ }
167
+ }
168
+ catch (error) {
169
+ console.error(`Failed to generate spec for ${cluster.name}:`, error instanceof Error ? error.message : String(error));
170
+ }
171
+ }
172
+ if (!options.quiet) {
173
+ console.log(`\n✓ Generated ${outputs.length} specifications`);
174
+ }
175
+ return outputs;
176
+ }
177
+ /**
178
+ * Find project root (directory containing package.json, pom.xml, etc.)
179
+ */
180
+ function findProjectRoot(filePath) {
181
+ let current = path.dirname(path.resolve(filePath));
182
+ while (current !== '/') {
183
+ // Check for project markers
184
+ const markers = ['package.json', 'pom.xml', 'Cargo.toml', 'pyproject.toml', '.git'];
185
+ for (const marker of markers) {
186
+ if (fs.existsSync(path.join(current, marker))) {
187
+ return current;
188
+ }
189
+ }
190
+ // Move up one directory
191
+ const parent = path.dirname(current);
192
+ if (parent === current)
193
+ break; // Reached root
194
+ current = parent;
195
+ }
196
+ // Fallback: use file's directory
197
+ return path.dirname(path.resolve(filePath));
198
+ }
199
+ /**
200
+ * Detect language from file extension
201
+ */
202
+ function detectLanguage(filePath) {
203
+ const ext = path.extname(filePath).toLowerCase();
204
+ switch (ext) {
205
+ case '.java': return 'java';
206
+ case '.js':
207
+ case '.jsx': return 'javascript';
208
+ case '.ts':
209
+ case '.tsx': return 'typescript';
210
+ case '.py': return 'python';
211
+ case '.rs': return 'rust';
212
+ default: return 'java'; // Default fallback
213
+ }
214
+ }
215
+ /**
216
+ * Generate feature name from file path
217
+ * Example: UserAuthController.java -> user-auth
218
+ */
219
+ function generateFeatureName(filePath) {
220
+ const fileName = path.basename(filePath, path.extname(filePath));
221
+ // Remove common suffixes
222
+ const cleaned = fileName
223
+ .replace(/Controller$/, '')
224
+ .replace(/Service$/, '')
225
+ .replace(/Repository$/, '')
226
+ .replace(/Handler$/, '')
227
+ .replace(/Manager$/, '')
228
+ .replace(/Impl$/, '');
229
+ // Convert to kebab-case
230
+ return cleaned
231
+ .replace(/([A-Z])/g, '-$1')
232
+ .toLowerCase()
233
+ .replace(/^-/, '')
234
+ .replace(/_/g, '-');
235
+ }
236
+ /**
237
+ * Collect all source files in a directory
238
+ */
239
+ function collectSourceFiles(dirPath) {
240
+ const files = [];
241
+ const extensions = ['.java', '.js', '.ts', '.tsx', '.jsx', '.py', '.rs'];
242
+ function traverse(currentPath) {
243
+ const entries = fs.readdirSync(currentPath, { withFileTypes: true });
244
+ for (const entry of entries) {
245
+ const fullPath = path.join(currentPath, entry.name);
246
+ // Skip node_modules, .git, dist, build, etc.
247
+ if (entry.isDirectory()) {
248
+ const skipDirs = ['node_modules', '.git', 'dist', 'build', 'target', '__pycache__', '.specifica'];
249
+ if (!skipDirs.includes(entry.name)) {
250
+ traverse(fullPath);
251
+ }
252
+ }
253
+ else if (entry.isFile()) {
254
+ const ext = path.extname(entry.name);
255
+ if (extensions.includes(ext)) {
256
+ files.push(fullPath);
257
+ }
258
+ }
259
+ }
260
+ }
261
+ traverse(dirPath);
262
+ return files;
263
+ }
264
+ /**
265
+ * Get circle-ir-ai version
266
+ */
267
+ function getVersion() {
268
+ try {
269
+ const packagePath = new URL('../../package.json', import.meta.url).pathname;
270
+ const pkg = JSON.parse(fs.readFileSync(packagePath, 'utf-8'));
271
+ return pkg.version;
272
+ }
273
+ catch {
274
+ return 'unknown';
275
+ }
276
+ }
277
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/specifica/generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Specifica Generation Module
3
+ *
4
+ * Generate Specifica-format specifications from existing code.
5
+ *
6
+ * Phase 1: Single file → spec.md
7
+ * Phase 2: Multi-file → spec.md + design.md
8
+ * Phase 3: Full project → spec.md + design.md + tasks.md
9
+ */
10
+ export { generateSpecifica, generateSpecificaForDirectory } from './generator.js';
11
+ export { extractEvidence } from './evidence-extractor.js';
12
+ export { generateSpec, formatSpecMarkdown } from './spec-generator.js';
13
+ export { resolveConflict, fileExists, getConflictStrategy } from './conflict-resolver.js';
14
+ export type { SpecificaOptions, SpecificaOutput, FileEvidence, SpecMdContent, Requirement, GenerationMetadata, ConflictResolution, } from './types.js';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/specifica/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAGlF,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGvE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG1F,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,aAAa,EACb,WAAW,EACX,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Specifica Generation Module
3
+ *
4
+ * Generate Specifica-format specifications from existing code.
5
+ *
6
+ * Phase 1: Single file → spec.md
7
+ * Phase 2: Multi-file → spec.md + design.md
8
+ * Phase 3: Full project → spec.md + design.md + tasks.md
9
+ */
10
+ // Main API
11
+ export { generateSpecifica, generateSpecificaForDirectory } from './generator.js';
12
+ // Evidence extraction
13
+ export { extractEvidence } from './evidence-extractor.js';
14
+ // Spec generation
15
+ export { generateSpec, formatSpecMarkdown } from './spec-generator.js';
16
+ // Conflict resolution
17
+ export { resolveConflict, fileExists, getConflictStrategy } from './conflict-resolver.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/specifica/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,WAAW;AACX,OAAO,EAAE,iBAAiB,EAAE,6BAA6B,EAAE,MAAM,gBAAgB,CAAC;AAElF,sBAAsB;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEvE,sBAAsB;AACtB,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * LLM Prompts for Specifica Generation
3
+ *
4
+ * Prompt templates for generating spec.md, design.md, and tasks.md
5
+ */
6
+ import type { PromptContext } from './types.js';
7
+ /**
8
+ * Generate prompt for spec.md (requirements specification)
9
+ */
10
+ export declare function generateSpecPrompt(context: PromptContext): string;
11
+ /**
12
+ * Generate prompt for design.md (architecture & decisions)
13
+ * TODO: Phase 2
14
+ */
15
+ export declare function generateDesignPrompt(context: PromptContext): string;
16
+ /**
17
+ * Generate prompt for tasks.md (implementation order)
18
+ * TODO: Phase 3
19
+ */
20
+ export declare function generateTasksPrompt(context: PromptContext): string;
21
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/specifica/prompts.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAyHjE;AAgED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAEnE;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAElE"}