spec-gen-cli 1.0.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 (303) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1078 -0
  3. package/dist/api/analyze.d.ts +17 -0
  4. package/dist/api/analyze.d.ts.map +1 -0
  5. package/dist/api/analyze.js +109 -0
  6. package/dist/api/analyze.js.map +1 -0
  7. package/dist/api/drift.d.ts +21 -0
  8. package/dist/api/drift.d.ts.map +1 -0
  9. package/dist/api/drift.js +145 -0
  10. package/dist/api/drift.js.map +1 -0
  11. package/dist/api/generate.d.ts +18 -0
  12. package/dist/api/generate.d.ts.map +1 -0
  13. package/dist/api/generate.js +251 -0
  14. package/dist/api/generate.js.map +1 -0
  15. package/dist/api/index.d.ts +39 -0
  16. package/dist/api/index.d.ts.map +1 -0
  17. package/dist/api/index.js +32 -0
  18. package/dist/api/index.js.map +1 -0
  19. package/dist/api/init.d.ts +18 -0
  20. package/dist/api/init.d.ts.map +1 -0
  21. package/dist/api/init.js +82 -0
  22. package/dist/api/init.js.map +1 -0
  23. package/dist/api/run.d.ts +19 -0
  24. package/dist/api/run.d.ts.map +1 -0
  25. package/dist/api/run.js +291 -0
  26. package/dist/api/run.js.map +1 -0
  27. package/dist/api/specs.d.ts +49 -0
  28. package/dist/api/specs.d.ts.map +1 -0
  29. package/dist/api/specs.js +136 -0
  30. package/dist/api/specs.js.map +1 -0
  31. package/dist/api/types.d.ts +176 -0
  32. package/dist/api/types.d.ts.map +1 -0
  33. package/dist/api/types.js +9 -0
  34. package/dist/api/types.js.map +1 -0
  35. package/dist/api/verify.d.ts +20 -0
  36. package/dist/api/verify.d.ts.map +1 -0
  37. package/dist/api/verify.js +117 -0
  38. package/dist/api/verify.js.map +1 -0
  39. package/dist/cli/commands/analyze.d.ts +27 -0
  40. package/dist/cli/commands/analyze.d.ts.map +1 -0
  41. package/dist/cli/commands/analyze.js +485 -0
  42. package/dist/cli/commands/analyze.js.map +1 -0
  43. package/dist/cli/commands/drift.d.ts +9 -0
  44. package/dist/cli/commands/drift.d.ts.map +1 -0
  45. package/dist/cli/commands/drift.js +540 -0
  46. package/dist/cli/commands/drift.js.map +1 -0
  47. package/dist/cli/commands/generate.d.ts +9 -0
  48. package/dist/cli/commands/generate.d.ts.map +1 -0
  49. package/dist/cli/commands/generate.js +633 -0
  50. package/dist/cli/commands/generate.js.map +1 -0
  51. package/dist/cli/commands/init.d.ts +9 -0
  52. package/dist/cli/commands/init.d.ts.map +1 -0
  53. package/dist/cli/commands/init.js +171 -0
  54. package/dist/cli/commands/init.js.map +1 -0
  55. package/dist/cli/commands/mcp.d.ts +638 -0
  56. package/dist/cli/commands/mcp.d.ts.map +1 -0
  57. package/dist/cli/commands/mcp.js +574 -0
  58. package/dist/cli/commands/mcp.js.map +1 -0
  59. package/dist/cli/commands/run.d.ts +24 -0
  60. package/dist/cli/commands/run.d.ts.map +1 -0
  61. package/dist/cli/commands/run.js +546 -0
  62. package/dist/cli/commands/run.js.map +1 -0
  63. package/dist/cli/commands/verify.d.ts +9 -0
  64. package/dist/cli/commands/verify.d.ts.map +1 -0
  65. package/dist/cli/commands/verify.js +417 -0
  66. package/dist/cli/commands/verify.js.map +1 -0
  67. package/dist/cli/commands/view.d.ts +9 -0
  68. package/dist/cli/commands/view.d.ts.map +1 -0
  69. package/dist/cli/commands/view.js +511 -0
  70. package/dist/cli/commands/view.js.map +1 -0
  71. package/dist/cli/index.d.ts +9 -0
  72. package/dist/cli/index.d.ts.map +1 -0
  73. package/dist/cli/index.js +83 -0
  74. package/dist/cli/index.js.map +1 -0
  75. package/dist/core/analyzer/architecture-writer.d.ts +67 -0
  76. package/dist/core/analyzer/architecture-writer.d.ts.map +1 -0
  77. package/dist/core/analyzer/architecture-writer.js +209 -0
  78. package/dist/core/analyzer/architecture-writer.js.map +1 -0
  79. package/dist/core/analyzer/artifact-generator.d.ts +222 -0
  80. package/dist/core/analyzer/artifact-generator.d.ts.map +1 -0
  81. package/dist/core/analyzer/artifact-generator.js +726 -0
  82. package/dist/core/analyzer/artifact-generator.js.map +1 -0
  83. package/dist/core/analyzer/call-graph.d.ts +83 -0
  84. package/dist/core/analyzer/call-graph.d.ts.map +1 -0
  85. package/dist/core/analyzer/call-graph.js +827 -0
  86. package/dist/core/analyzer/call-graph.js.map +1 -0
  87. package/dist/core/analyzer/code-shaper.d.ts +33 -0
  88. package/dist/core/analyzer/code-shaper.d.ts.map +1 -0
  89. package/dist/core/analyzer/code-shaper.js +149 -0
  90. package/dist/core/analyzer/code-shaper.js.map +1 -0
  91. package/dist/core/analyzer/dependency-graph.d.ts +179 -0
  92. package/dist/core/analyzer/dependency-graph.d.ts.map +1 -0
  93. package/dist/core/analyzer/dependency-graph.js +574 -0
  94. package/dist/core/analyzer/dependency-graph.js.map +1 -0
  95. package/dist/core/analyzer/duplicate-detector.d.ts +52 -0
  96. package/dist/core/analyzer/duplicate-detector.d.ts.map +1 -0
  97. package/dist/core/analyzer/duplicate-detector.js +279 -0
  98. package/dist/core/analyzer/duplicate-detector.js.map +1 -0
  99. package/dist/core/analyzer/embedding-service.d.ts +50 -0
  100. package/dist/core/analyzer/embedding-service.d.ts.map +1 -0
  101. package/dist/core/analyzer/embedding-service.js +104 -0
  102. package/dist/core/analyzer/embedding-service.js.map +1 -0
  103. package/dist/core/analyzer/file-walker.d.ts +78 -0
  104. package/dist/core/analyzer/file-walker.d.ts.map +1 -0
  105. package/dist/core/analyzer/file-walker.js +531 -0
  106. package/dist/core/analyzer/file-walker.js.map +1 -0
  107. package/dist/core/analyzer/import-parser.d.ts +91 -0
  108. package/dist/core/analyzer/import-parser.d.ts.map +1 -0
  109. package/dist/core/analyzer/import-parser.js +720 -0
  110. package/dist/core/analyzer/import-parser.js.map +1 -0
  111. package/dist/core/analyzer/index.d.ts +10 -0
  112. package/dist/core/analyzer/index.d.ts.map +1 -0
  113. package/dist/core/analyzer/index.js +10 -0
  114. package/dist/core/analyzer/index.js.map +1 -0
  115. package/dist/core/analyzer/refactor-analyzer.d.ts +80 -0
  116. package/dist/core/analyzer/refactor-analyzer.d.ts.map +1 -0
  117. package/dist/core/analyzer/refactor-analyzer.js +339 -0
  118. package/dist/core/analyzer/refactor-analyzer.js.map +1 -0
  119. package/dist/core/analyzer/repository-mapper.d.ts +150 -0
  120. package/dist/core/analyzer/repository-mapper.d.ts.map +1 -0
  121. package/dist/core/analyzer/repository-mapper.js +731 -0
  122. package/dist/core/analyzer/repository-mapper.js.map +1 -0
  123. package/dist/core/analyzer/signature-extractor.d.ts +31 -0
  124. package/dist/core/analyzer/signature-extractor.d.ts.map +1 -0
  125. package/dist/core/analyzer/signature-extractor.js +387 -0
  126. package/dist/core/analyzer/signature-extractor.js.map +1 -0
  127. package/dist/core/analyzer/significance-scorer.d.ts +79 -0
  128. package/dist/core/analyzer/significance-scorer.d.ts.map +1 -0
  129. package/dist/core/analyzer/significance-scorer.js +407 -0
  130. package/dist/core/analyzer/significance-scorer.js.map +1 -0
  131. package/dist/core/analyzer/subgraph-extractor.d.ts +43 -0
  132. package/dist/core/analyzer/subgraph-extractor.d.ts.map +1 -0
  133. package/dist/core/analyzer/subgraph-extractor.js +129 -0
  134. package/dist/core/analyzer/subgraph-extractor.js.map +1 -0
  135. package/dist/core/analyzer/vector-index.d.ts +63 -0
  136. package/dist/core/analyzer/vector-index.d.ts.map +1 -0
  137. package/dist/core/analyzer/vector-index.js +169 -0
  138. package/dist/core/analyzer/vector-index.js.map +1 -0
  139. package/dist/core/drift/drift-detector.d.ts +102 -0
  140. package/dist/core/drift/drift-detector.d.ts.map +1 -0
  141. package/dist/core/drift/drift-detector.js +597 -0
  142. package/dist/core/drift/drift-detector.js.map +1 -0
  143. package/dist/core/drift/git-diff.d.ts +55 -0
  144. package/dist/core/drift/git-diff.d.ts.map +1 -0
  145. package/dist/core/drift/git-diff.js +356 -0
  146. package/dist/core/drift/git-diff.js.map +1 -0
  147. package/dist/core/drift/index.d.ts +12 -0
  148. package/dist/core/drift/index.d.ts.map +1 -0
  149. package/dist/core/drift/index.js +9 -0
  150. package/dist/core/drift/index.js.map +1 -0
  151. package/dist/core/drift/spec-mapper.d.ts +73 -0
  152. package/dist/core/drift/spec-mapper.d.ts.map +1 -0
  153. package/dist/core/drift/spec-mapper.js +353 -0
  154. package/dist/core/drift/spec-mapper.js.map +1 -0
  155. package/dist/core/generator/adr-generator.d.ts +32 -0
  156. package/dist/core/generator/adr-generator.d.ts.map +1 -0
  157. package/dist/core/generator/adr-generator.js +192 -0
  158. package/dist/core/generator/adr-generator.js.map +1 -0
  159. package/dist/core/generator/index.d.ts +9 -0
  160. package/dist/core/generator/index.d.ts.map +1 -0
  161. package/dist/core/generator/index.js +12 -0
  162. package/dist/core/generator/index.js.map +1 -0
  163. package/dist/core/generator/mapping-generator.d.ts +54 -0
  164. package/dist/core/generator/mapping-generator.d.ts.map +1 -0
  165. package/dist/core/generator/mapping-generator.js +239 -0
  166. package/dist/core/generator/mapping-generator.js.map +1 -0
  167. package/dist/core/generator/openspec-compat.d.ts +160 -0
  168. package/dist/core/generator/openspec-compat.d.ts.map +1 -0
  169. package/dist/core/generator/openspec-compat.js +523 -0
  170. package/dist/core/generator/openspec-compat.js.map +1 -0
  171. package/dist/core/generator/openspec-format-generator.d.ts +111 -0
  172. package/dist/core/generator/openspec-format-generator.d.ts.map +1 -0
  173. package/dist/core/generator/openspec-format-generator.js +817 -0
  174. package/dist/core/generator/openspec-format-generator.js.map +1 -0
  175. package/dist/core/generator/openspec-writer.d.ts +131 -0
  176. package/dist/core/generator/openspec-writer.d.ts.map +1 -0
  177. package/dist/core/generator/openspec-writer.js +379 -0
  178. package/dist/core/generator/openspec-writer.js.map +1 -0
  179. package/dist/core/generator/prompts.d.ts +35 -0
  180. package/dist/core/generator/prompts.d.ts.map +1 -0
  181. package/dist/core/generator/prompts.js +212 -0
  182. package/dist/core/generator/prompts.js.map +1 -0
  183. package/dist/core/generator/spec-pipeline.d.ts +94 -0
  184. package/dist/core/generator/spec-pipeline.d.ts.map +1 -0
  185. package/dist/core/generator/spec-pipeline.js +474 -0
  186. package/dist/core/generator/spec-pipeline.js.map +1 -0
  187. package/dist/core/generator/stages/stage1-survey.d.ts +19 -0
  188. package/dist/core/generator/stages/stage1-survey.d.ts.map +1 -0
  189. package/dist/core/generator/stages/stage1-survey.js +105 -0
  190. package/dist/core/generator/stages/stage1-survey.js.map +1 -0
  191. package/dist/core/generator/stages/stage2-entities.d.ts +11 -0
  192. package/dist/core/generator/stages/stage2-entities.d.ts.map +1 -0
  193. package/dist/core/generator/stages/stage2-entities.js +67 -0
  194. package/dist/core/generator/stages/stage2-entities.js.map +1 -0
  195. package/dist/core/generator/stages/stage3-services.d.ts +11 -0
  196. package/dist/core/generator/stages/stage3-services.d.ts.map +1 -0
  197. package/dist/core/generator/stages/stage3-services.js +75 -0
  198. package/dist/core/generator/stages/stage3-services.js.map +1 -0
  199. package/dist/core/generator/stages/stage4-api.d.ts +11 -0
  200. package/dist/core/generator/stages/stage4-api.d.ts.map +1 -0
  201. package/dist/core/generator/stages/stage4-api.js +65 -0
  202. package/dist/core/generator/stages/stage4-api.js.map +1 -0
  203. package/dist/core/generator/stages/stage5-architecture.d.ts +10 -0
  204. package/dist/core/generator/stages/stage5-architecture.d.ts.map +1 -0
  205. package/dist/core/generator/stages/stage5-architecture.js +62 -0
  206. package/dist/core/generator/stages/stage5-architecture.js.map +1 -0
  207. package/dist/core/generator/stages/stage6-adr.d.ts +8 -0
  208. package/dist/core/generator/stages/stage6-adr.d.ts.map +1 -0
  209. package/dist/core/generator/stages/stage6-adr.js +41 -0
  210. package/dist/core/generator/stages/stage6-adr.js.map +1 -0
  211. package/dist/core/services/chat-agent.d.ts +45 -0
  212. package/dist/core/services/chat-agent.d.ts.map +1 -0
  213. package/dist/core/services/chat-agent.js +310 -0
  214. package/dist/core/services/chat-agent.js.map +1 -0
  215. package/dist/core/services/chat-tools.d.ts +32 -0
  216. package/dist/core/services/chat-tools.d.ts.map +1 -0
  217. package/dist/core/services/chat-tools.js +270 -0
  218. package/dist/core/services/chat-tools.js.map +1 -0
  219. package/dist/core/services/config-manager.d.ts +61 -0
  220. package/dist/core/services/config-manager.d.ts.map +1 -0
  221. package/dist/core/services/config-manager.js +143 -0
  222. package/dist/core/services/config-manager.js.map +1 -0
  223. package/dist/core/services/gitignore-manager.d.ts +29 -0
  224. package/dist/core/services/gitignore-manager.d.ts.map +1 -0
  225. package/dist/core/services/gitignore-manager.js +106 -0
  226. package/dist/core/services/gitignore-manager.js.map +1 -0
  227. package/dist/core/services/index.d.ts +8 -0
  228. package/dist/core/services/index.d.ts.map +1 -0
  229. package/dist/core/services/index.js +8 -0
  230. package/dist/core/services/index.js.map +1 -0
  231. package/dist/core/services/llm-service.d.ts +336 -0
  232. package/dist/core/services/llm-service.d.ts.map +1 -0
  233. package/dist/core/services/llm-service.js +1155 -0
  234. package/dist/core/services/llm-service.js.map +1 -0
  235. package/dist/core/services/mcp-handlers/analysis.d.ts +42 -0
  236. package/dist/core/services/mcp-handlers/analysis.d.ts.map +1 -0
  237. package/dist/core/services/mcp-handlers/analysis.js +300 -0
  238. package/dist/core/services/mcp-handlers/analysis.js.map +1 -0
  239. package/dist/core/services/mcp-handlers/graph.d.ts +65 -0
  240. package/dist/core/services/mcp-handlers/graph.d.ts.map +1 -0
  241. package/dist/core/services/mcp-handlers/graph.js +509 -0
  242. package/dist/core/services/mcp-handlers/graph.js.map +1 -0
  243. package/dist/core/services/mcp-handlers/semantic.d.ts +38 -0
  244. package/dist/core/services/mcp-handlers/semantic.d.ts.map +1 -0
  245. package/dist/core/services/mcp-handlers/semantic.js +172 -0
  246. package/dist/core/services/mcp-handlers/semantic.js.map +1 -0
  247. package/dist/core/services/mcp-handlers/utils.d.ts +21 -0
  248. package/dist/core/services/mcp-handlers/utils.d.ts.map +1 -0
  249. package/dist/core/services/mcp-handlers/utils.js +62 -0
  250. package/dist/core/services/mcp-handlers/utils.js.map +1 -0
  251. package/dist/core/services/project-detector.d.ts +32 -0
  252. package/dist/core/services/project-detector.d.ts.map +1 -0
  253. package/dist/core/services/project-detector.js +111 -0
  254. package/dist/core/services/project-detector.js.map +1 -0
  255. package/dist/core/verifier/index.d.ts +5 -0
  256. package/dist/core/verifier/index.d.ts.map +1 -0
  257. package/dist/core/verifier/index.js +5 -0
  258. package/dist/core/verifier/index.js.map +1 -0
  259. package/dist/core/verifier/verification-engine.d.ts +226 -0
  260. package/dist/core/verifier/verification-engine.d.ts.map +1 -0
  261. package/dist/core/verifier/verification-engine.js +681 -0
  262. package/dist/core/verifier/verification-engine.js.map +1 -0
  263. package/dist/types/index.d.ts +252 -0
  264. package/dist/types/index.d.ts.map +1 -0
  265. package/dist/types/index.js +5 -0
  266. package/dist/types/index.js.map +1 -0
  267. package/dist/types/pipeline.d.ts +148 -0
  268. package/dist/types/pipeline.d.ts.map +1 -0
  269. package/dist/types/pipeline.js +5 -0
  270. package/dist/types/pipeline.js.map +1 -0
  271. package/dist/utils/errors.d.ts +51 -0
  272. package/dist/utils/errors.d.ts.map +1 -0
  273. package/dist/utils/errors.js +128 -0
  274. package/dist/utils/errors.js.map +1 -0
  275. package/dist/utils/logger.d.ts +149 -0
  276. package/dist/utils/logger.d.ts.map +1 -0
  277. package/dist/utils/logger.js +331 -0
  278. package/dist/utils/logger.js.map +1 -0
  279. package/dist/utils/progress.d.ts +142 -0
  280. package/dist/utils/progress.d.ts.map +1 -0
  281. package/dist/utils/progress.js +280 -0
  282. package/dist/utils/progress.js.map +1 -0
  283. package/dist/utils/prompts.d.ts +53 -0
  284. package/dist/utils/prompts.d.ts.map +1 -0
  285. package/dist/utils/prompts.js +199 -0
  286. package/dist/utils/prompts.js.map +1 -0
  287. package/dist/utils/shutdown.d.ts +89 -0
  288. package/dist/utils/shutdown.d.ts.map +1 -0
  289. package/dist/utils/shutdown.js +237 -0
  290. package/dist/utils/shutdown.js.map +1 -0
  291. package/package.json +114 -0
  292. package/src/viewer/InteractiveGraphViewer.jsx +1486 -0
  293. package/src/viewer/app/index.html +17 -0
  294. package/src/viewer/app/main.jsx +13 -0
  295. package/src/viewer/components/ArchitectureView.jsx +177 -0
  296. package/src/viewer/components/ChatPanel.jsx +448 -0
  297. package/src/viewer/components/ClusterGraph.jsx +441 -0
  298. package/src/viewer/components/FilterBar.jsx +179 -0
  299. package/src/viewer/components/FlatGraph.jsx +275 -0
  300. package/src/viewer/components/MicroComponents.jsx +83 -0
  301. package/src/viewer/hooks/usePanZoom.js +79 -0
  302. package/src/viewer/utils/constants.js +47 -0
  303. package/src/viewer/utils/graph-helpers.js +291 -0
@@ -0,0 +1,336 @@
1
+ /**
2
+ * LLM Service
3
+ *
4
+ * Provides a clean interface for LLM interactions with proper error handling,
5
+ * retry logic, token management, and cost tracking.
6
+ */
7
+ /**
8
+ * Claude Code CLI provider
9
+ *
10
+ * Routes LLM calls through the local `claude` CLI binary in non-interactive
11
+ * mode (`claude -p ...`). Authentication is handled by the Claude Code session
12
+ * (Max/Pro subscription) — no ANTHROPIC_API_KEY is required.
13
+ */
14
+ export declare class ClaudeCodeProvider implements LLMProvider {
15
+ name: string;
16
+ maxContextTokens: number;
17
+ maxOutputTokens: number;
18
+ private model;
19
+ constructor(model?: string);
20
+ generateCompletion(request: CompletionRequest): Promise<CompletionResponse>;
21
+ countTokens(text: string): number;
22
+ }
23
+ /**
24
+ * Mistral Vibe CLI provider
25
+ *
26
+ * Routes LLM calls through the local `mistral-vibe` CLI binary (standalone, no npm).
27
+ * No API key required — uses local LLM execution.
28
+ * If the binary is not on PATH, set MISTRAL_VIBE_CLI to its full path.
29
+ * The CLI is invoked as `vibe` (not `mistral-vibe`).
30
+ */
31
+ export declare class MistralVibeProvider implements LLMProvider {
32
+ name: string;
33
+ maxContextTokens: number;
34
+ maxOutputTokens: number;
35
+ private model;
36
+ constructor(model?: string);
37
+ generateCompletion(request: CompletionRequest): Promise<CompletionResponse>;
38
+ countTokens(text: string): number;
39
+ }
40
+ /**
41
+ * Completion request parameters
42
+ */
43
+ export interface CompletionRequest {
44
+ systemPrompt: string;
45
+ userPrompt: string;
46
+ temperature?: number;
47
+ maxTokens?: number;
48
+ stopSequences?: string[];
49
+ responseFormat?: 'text' | 'json';
50
+ }
51
+ /**
52
+ * Completion response
53
+ */
54
+ export interface CompletionResponse {
55
+ content: string;
56
+ usage: {
57
+ inputTokens: number;
58
+ outputTokens: number;
59
+ totalTokens: number;
60
+ };
61
+ model: string;
62
+ finishReason: 'stop' | 'length' | 'error';
63
+ }
64
+ /**
65
+ * LLM provider interface
66
+ */
67
+ export interface LLMProvider {
68
+ name: string;
69
+ generateCompletion(request: CompletionRequest): Promise<CompletionResponse>;
70
+ countTokens(text: string): number;
71
+ maxContextTokens: number;
72
+ maxOutputTokens: number;
73
+ }
74
+ export type ProviderName = 'anthropic' | 'openai' | 'openai-compat' | 'gemini' | 'gemini-cli' | 'claude-code' | 'mistral-vibe';
75
+ /**
76
+ * Token usage tracking
77
+ */
78
+ export interface TokenUsage {
79
+ inputTokens: number;
80
+ outputTokens: number;
81
+ totalTokens: number;
82
+ requests: number;
83
+ }
84
+ /**
85
+ * Cost tracking
86
+ */
87
+ export interface CostTracking {
88
+ estimatedCost: number;
89
+ currency: string;
90
+ byProvider: Record<string, number>;
91
+ }
92
+ /**
93
+ * LLM service options
94
+ */
95
+ export interface LLMServiceOptions {
96
+ /** Primary provider to use */
97
+ provider?: ProviderName;
98
+ /** Model override */
99
+ model?: string;
100
+ /** Custom API base URL (e.g., for local/enterprise OpenAI-compatible servers) */
101
+ apiBase?: string;
102
+ /** Disable SSL verification (for internal/self-signed certificates) */
103
+ sslVerify?: boolean;
104
+ /** Base URL for openai-compat provider (overrides OPENAI_COMPAT_BASE_URL env var) */
105
+ openaiCompatBaseUrl?: string;
106
+ /** Maximum retry attempts */
107
+ maxRetries?: number;
108
+ /** Initial retry delay in ms */
109
+ initialDelay?: number;
110
+ /** Maximum retry delay in ms */
111
+ maxDelay?: number;
112
+ /** Request timeout in ms */
113
+ timeout?: number;
114
+ /** Cost warning threshold in USD */
115
+ costWarningThreshold?: number;
116
+ /** Log directory for prompts/responses */
117
+ logDir?: string;
118
+ /** Enable prompt logging */
119
+ enableLogging?: boolean;
120
+ }
121
+ /**
122
+ * Parse the number of milliseconds to wait before retrying a 429 response.
123
+ *
124
+ * Checks (in order):
125
+ * 1. Standard `Retry-After` HTTP header (seconds as integer, or HTTP-date)
126
+ * 2. `Limit resets at: YYYY-MM-DD HH:MM:SS UTC` in the response body
127
+ *
128
+ * Returns `undefined` when nothing useful is found so the caller can fall back
129
+ * to its own exponential-backoff delay.
130
+ */
131
+ export declare function parseRetryAfterMs(body: string, retryAfterHeader?: string | null): number | undefined;
132
+ /**
133
+ * Exported for use in pre-flight cost estimation.
134
+ * Look up pricing for a model ID using prefix/family matching.
135
+ * Exact match first, then longest prefix match, then provider default.
136
+ *
137
+ * This is robust to minor version suffixes like "claude-sonnet-4-6-20251120"
138
+ * matching the "claude-sonnet-4" family entry.
139
+ */
140
+ export declare function lookupPricing(providerName: string, modelId: string): {
141
+ input: number;
142
+ output: number;
143
+ };
144
+ /**
145
+ * Estimate token count from text (rough approximation)
146
+ * ~4 characters per token for English text
147
+ */
148
+ export declare function estimateTokens(text: string): number;
149
+ /**
150
+ * Anthropic Claude provider
151
+ */
152
+ export declare class AnthropicProvider implements LLMProvider {
153
+ name: string;
154
+ maxContextTokens: number;
155
+ maxOutputTokens: number;
156
+ private apiKey;
157
+ private model;
158
+ private baseUrl;
159
+ constructor(apiKey: string, model?: string, baseUrl?: string, sslVerify?: boolean);
160
+ countTokens(text: string): number;
161
+ generateCompletion(request: CompletionRequest): Promise<CompletionResponse>;
162
+ private parseError;
163
+ }
164
+ /**
165
+ * OpenAI provider
166
+ */
167
+ export declare class OpenAIProvider implements LLMProvider {
168
+ name: string;
169
+ maxContextTokens: number;
170
+ maxOutputTokens: number;
171
+ private apiKey;
172
+ private model;
173
+ private baseUrl;
174
+ constructor(apiKey: string, model?: string, baseUrl?: string, sslVerify?: boolean);
175
+ countTokens(text: string): number;
176
+ generateCompletion(request: CompletionRequest): Promise<CompletionResponse>;
177
+ private parseError;
178
+ }
179
+ /**
180
+ * Generic OpenAI-compatible provider.
181
+ * Works with any API that implements the OpenAI chat completions format:
182
+ * Mistral AI, Groq, Together AI, Ollama, LM Studio, etc.
183
+ *
184
+ * Required env vars:
185
+ * OPENAI_COMPAT_API_KEY — API key (use "ollama" for local setups without auth)
186
+ * OPENAI_COMPAT_BASE_URL — Base URL, e.g. https://api.mistral.ai/v1
187
+ */
188
+ export declare class OpenAICompatibleProvider implements LLMProvider {
189
+ name: string;
190
+ maxContextTokens: number;
191
+ maxOutputTokens: number;
192
+ private apiKey;
193
+ private model;
194
+ private baseUrl;
195
+ constructor(apiKey: string, baseUrl: string, model?: string);
196
+ countTokens(text: string): number;
197
+ generateCompletion(request: CompletionRequest): Promise<CompletionResponse>;
198
+ }
199
+ /**
200
+ * Gemini CLI provider
201
+ *
202
+ * Routes LLM calls through the local `gemini` CLI binary in non-interactive
203
+ * mode (`gemini -p ...`). Authentication is handled by the Google account
204
+ * session — no GEMINI_API_KEY is required.
205
+ * If the binary is not on PATH, set GEMINI_CLI to its full path.
206
+ */
207
+ export declare class GeminiCLIProvider implements LLMProvider {
208
+ name: string;
209
+ maxContextTokens: number;
210
+ maxOutputTokens: number;
211
+ private model;
212
+ constructor(model?: string);
213
+ generateCompletion(request: CompletionRequest): Promise<CompletionResponse>;
214
+ countTokens(text: string): number;
215
+ }
216
+ /**
217
+ * Google Gemini provider
218
+ */
219
+ export declare class GeminiProvider implements LLMProvider {
220
+ name: string;
221
+ maxContextTokens: number;
222
+ maxOutputTokens: number;
223
+ private apiKey;
224
+ private model;
225
+ private baseUrl;
226
+ constructor(apiKey: string, model?: string);
227
+ countTokens(text: string): number;
228
+ generateCompletion(request: CompletionRequest): Promise<CompletionResponse>;
229
+ }
230
+ /**
231
+ * Mock provider for testing
232
+ */
233
+ export declare class MockLLMProvider implements LLMProvider {
234
+ name: string;
235
+ maxContextTokens: number;
236
+ maxOutputTokens: number;
237
+ private responses;
238
+ private defaultResponse;
239
+ callHistory: CompletionRequest[];
240
+ shouldFail: boolean;
241
+ failCount: number;
242
+ private currentFailCount;
243
+ setResponse(promptContains: string, response: string): void;
244
+ setDefaultResponse(response: string): void;
245
+ countTokens(text: string): number;
246
+ generateCompletion(request: CompletionRequest): Promise<CompletionResponse>;
247
+ reset(): void;
248
+ }
249
+ /**
250
+ * LLM Service - main interface for LLM interactions
251
+ */
252
+ export declare class LLMService {
253
+ private provider;
254
+ private retryConfig;
255
+ private options;
256
+ private tokenUsage;
257
+ private costTracking;
258
+ private requestLog;
259
+ constructor(provider: LLMProvider, options?: LLMServiceOptions);
260
+ /**
261
+ * Get the provider name
262
+ */
263
+ getProviderName(): string;
264
+ /**
265
+ * Get maximum context tokens for the provider
266
+ */
267
+ getMaxContextTokens(): number;
268
+ /**
269
+ * Count tokens in text
270
+ */
271
+ countTokens(text: string): number;
272
+ /**
273
+ * Get current token usage
274
+ */
275
+ getTokenUsage(): TokenUsage;
276
+ /**
277
+ * Get current cost tracking
278
+ */
279
+ getCostTracking(): CostTracking;
280
+ /**
281
+ * Reset usage tracking
282
+ */
283
+ resetTracking(): void;
284
+ /**
285
+ * Generate a completion with retry logic
286
+ */
287
+ complete(request: CompletionRequest): Promise<CompletionResponse>;
288
+ /**
289
+ * Generate a completion expecting JSON response
290
+ */
291
+ completeJSON<T>(request: CompletionRequest, schema?: object): Promise<T>;
292
+ /**
293
+ * Execute request with timeout
294
+ */
295
+ private executeWithTimeout;
296
+ /**
297
+ * Update tracking after a successful request
298
+ */
299
+ private updateTracking;
300
+ /**
301
+ * Calculate cost for a response
302
+ */
303
+ private calculateCost;
304
+ /**
305
+ * Log request/response
306
+ */
307
+ private logRequest;
308
+ /**
309
+ * Redact potential secrets from request
310
+ */
311
+ private redactSecrets;
312
+ /**
313
+ * Simple schema validation
314
+ */
315
+ private validateSchema;
316
+ /**
317
+ * Save logs to disk
318
+ */
319
+ saveLogs(): Promise<void>;
320
+ /**
321
+ * Sleep helper
322
+ */
323
+ private sleep;
324
+ }
325
+ /**
326
+ * Create an LLM service with the specified provider
327
+ */
328
+ export declare function createLLMService(options?: LLMServiceOptions): LLMService;
329
+ /**
330
+ * Create an LLM service with a mock provider (for testing)
331
+ */
332
+ export declare function createMockLLMService(options?: LLMServiceOptions): {
333
+ service: LLMService;
334
+ provider: MockLLMProvider;
335
+ };
336
+ //# sourceMappingURL=llm-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-service.d.ts","sourceRoot":"","sources":["../../../src/core/services/llm-service.ts"],"names":[],"mappings":"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"}