ctxinit 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +484 -0
  3. package/bin/ctx.js +3 -0
  4. package/dist/analysis/index.d.ts +2 -0
  5. package/dist/analysis/index.d.ts.map +1 -0
  6. package/dist/analysis/index.js +18 -0
  7. package/dist/analysis/index.js.map +1 -0
  8. package/dist/analysis/static-analysis.d.ts +79 -0
  9. package/dist/analysis/static-analysis.d.ts.map +1 -0
  10. package/dist/analysis/static-analysis.js +279 -0
  11. package/dist/analysis/static-analysis.js.map +1 -0
  12. package/dist/bootstrap/index.d.ts +8 -0
  13. package/dist/bootstrap/index.d.ts.map +1 -0
  14. package/dist/bootstrap/index.js +13 -0
  15. package/dist/bootstrap/index.js.map +1 -0
  16. package/dist/bootstrap/orchestrator.d.ts +48 -0
  17. package/dist/bootstrap/orchestrator.d.ts.map +1 -0
  18. package/dist/bootstrap/orchestrator.js +363 -0
  19. package/dist/bootstrap/orchestrator.js.map +1 -0
  20. package/dist/bootstrap/validator.d.ts +25 -0
  21. package/dist/bootstrap/validator.d.ts.map +1 -0
  22. package/dist/bootstrap/validator.js +412 -0
  23. package/dist/bootstrap/validator.js.map +1 -0
  24. package/dist/build/atomic.d.ts +74 -0
  25. package/dist/build/atomic.d.ts.map +1 -0
  26. package/dist/build/atomic.js +235 -0
  27. package/dist/build/atomic.js.map +1 -0
  28. package/dist/build/index.d.ts +10 -0
  29. package/dist/build/index.d.ts.map +1 -0
  30. package/dist/build/index.js +26 -0
  31. package/dist/build/index.js.map +1 -0
  32. package/dist/build/lock.d.ts +102 -0
  33. package/dist/build/lock.d.ts.map +1 -0
  34. package/dist/build/lock.js +297 -0
  35. package/dist/build/lock.js.map +1 -0
  36. package/dist/build/manifest.d.ts +138 -0
  37. package/dist/build/manifest.d.ts.map +1 -0
  38. package/dist/build/manifest.js +269 -0
  39. package/dist/build/manifest.js.map +1 -0
  40. package/dist/build/orchestrator.d.ts +103 -0
  41. package/dist/build/orchestrator.d.ts.map +1 -0
  42. package/dist/build/orchestrator.js +524 -0
  43. package/dist/build/orchestrator.js.map +1 -0
  44. package/dist/cli/bootstrap.d.ts +77 -0
  45. package/dist/cli/bootstrap.d.ts.map +1 -0
  46. package/dist/cli/bootstrap.js +527 -0
  47. package/dist/cli/bootstrap.js.map +1 -0
  48. package/dist/cli/build.d.ts +32 -0
  49. package/dist/cli/build.d.ts.map +1 -0
  50. package/dist/cli/build.js +156 -0
  51. package/dist/cli/build.js.map +1 -0
  52. package/dist/cli/diff.d.ts +23 -0
  53. package/dist/cli/diff.d.ts.map +1 -0
  54. package/dist/cli/diff.js +226 -0
  55. package/dist/cli/diff.js.map +1 -0
  56. package/dist/cli/hooks.d.ts +29 -0
  57. package/dist/cli/hooks.d.ts.map +1 -0
  58. package/dist/cli/hooks.js +176 -0
  59. package/dist/cli/hooks.js.map +1 -0
  60. package/dist/cli/init.d.ts +53 -0
  61. package/dist/cli/init.d.ts.map +1 -0
  62. package/dist/cli/init.js +254 -0
  63. package/dist/cli/init.js.map +1 -0
  64. package/dist/cli/lint.d.ts +46 -0
  65. package/dist/cli/lint.d.ts.map +1 -0
  66. package/dist/cli/lint.js +210 -0
  67. package/dist/cli/lint.js.map +1 -0
  68. package/dist/cli/migrate.d.ts +28 -0
  69. package/dist/cli/migrate.d.ts.map +1 -0
  70. package/dist/cli/migrate.js +350 -0
  71. package/dist/cli/migrate.js.map +1 -0
  72. package/dist/cli/verify.d.ts +21 -0
  73. package/dist/cli/verify.d.ts.map +1 -0
  74. package/dist/cli/verify.js +209 -0
  75. package/dist/cli/verify.js.map +1 -0
  76. package/dist/cli.d.ts +8 -0
  77. package/dist/cli.d.ts.map +1 -0
  78. package/dist/cli.js +262 -0
  79. package/dist/cli.js.map +1 -0
  80. package/dist/compiler/agents-compiler.d.ts +24 -0
  81. package/dist/compiler/agents-compiler.d.ts.map +1 -0
  82. package/dist/compiler/agents-compiler.js +192 -0
  83. package/dist/compiler/agents-compiler.js.map +1 -0
  84. package/dist/compiler/base-compiler.d.ts +152 -0
  85. package/dist/compiler/base-compiler.d.ts.map +1 -0
  86. package/dist/compiler/base-compiler.js +180 -0
  87. package/dist/compiler/base-compiler.js.map +1 -0
  88. package/dist/compiler/claude-compiler.d.ts +24 -0
  89. package/dist/compiler/claude-compiler.d.ts.map +1 -0
  90. package/dist/compiler/claude-compiler.js +182 -0
  91. package/dist/compiler/claude-compiler.js.map +1 -0
  92. package/dist/compiler/cursor-compiler.d.ts +33 -0
  93. package/dist/compiler/cursor-compiler.d.ts.map +1 -0
  94. package/dist/compiler/cursor-compiler.js +136 -0
  95. package/dist/compiler/cursor-compiler.js.map +1 -0
  96. package/dist/compiler/index.d.ts +7 -0
  97. package/dist/compiler/index.d.ts.map +1 -0
  98. package/dist/compiler/index.js +24 -0
  99. package/dist/compiler/index.js.map +1 -0
  100. package/dist/compiler/rule-selector.d.ts +115 -0
  101. package/dist/compiler/rule-selector.d.ts.map +1 -0
  102. package/dist/compiler/rule-selector.js +273 -0
  103. package/dist/compiler/rule-selector.js.map +1 -0
  104. package/dist/compiler/token-estimator.d.ts +74 -0
  105. package/dist/compiler/token-estimator.d.ts.map +1 -0
  106. package/dist/compiler/token-estimator.js +191 -0
  107. package/dist/compiler/token-estimator.js.map +1 -0
  108. package/dist/config/index.d.ts +2 -0
  109. package/dist/config/index.d.ts.map +1 -0
  110. package/dist/config/index.js +18 -0
  111. package/dist/config/index.js.map +1 -0
  112. package/dist/config/loader.d.ts +48 -0
  113. package/dist/config/loader.d.ts.map +1 -0
  114. package/dist/config/loader.js +175 -0
  115. package/dist/config/loader.js.map +1 -0
  116. package/dist/git/gitignore.d.ts +59 -0
  117. package/dist/git/gitignore.d.ts.map +1 -0
  118. package/dist/git/gitignore.js +268 -0
  119. package/dist/git/gitignore.js.map +1 -0
  120. package/dist/git/hooks.d.ts +34 -0
  121. package/dist/git/hooks.d.ts.map +1 -0
  122. package/dist/git/hooks.js +129 -0
  123. package/dist/git/hooks.js.map +1 -0
  124. package/dist/git/husky.d.ts +52 -0
  125. package/dist/git/husky.d.ts.map +1 -0
  126. package/dist/git/husky.js +219 -0
  127. package/dist/git/husky.js.map +1 -0
  128. package/dist/git/index.d.ts +9 -0
  129. package/dist/git/index.d.ts.map +1 -0
  130. package/dist/git/index.js +15 -0
  131. package/dist/git/index.js.map +1 -0
  132. package/dist/index.d.ts +6 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +23 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/llm/base-provider.d.ts +43 -0
  137. package/dist/llm/base-provider.d.ts.map +1 -0
  138. package/dist/llm/base-provider.js +91 -0
  139. package/dist/llm/base-provider.js.map +1 -0
  140. package/dist/llm/index.d.ts +17 -0
  141. package/dist/llm/index.d.ts.map +1 -0
  142. package/dist/llm/index.js +36 -0
  143. package/dist/llm/index.js.map +1 -0
  144. package/dist/llm/prompts/bootstrap-prompt.d.ts +27 -0
  145. package/dist/llm/prompts/bootstrap-prompt.d.ts.map +1 -0
  146. package/dist/llm/prompts/bootstrap-prompt.js +278 -0
  147. package/dist/llm/prompts/bootstrap-prompt.js.map +1 -0
  148. package/dist/llm/prompts/index.d.ts +5 -0
  149. package/dist/llm/prompts/index.d.ts.map +1 -0
  150. package/dist/llm/prompts/index.js +11 -0
  151. package/dist/llm/prompts/index.js.map +1 -0
  152. package/dist/llm/provider-factory.d.ts +27 -0
  153. package/dist/llm/provider-factory.d.ts.map +1 -0
  154. package/dist/llm/provider-factory.js +213 -0
  155. package/dist/llm/provider-factory.js.map +1 -0
  156. package/dist/llm/providers/claude-api.d.ts +21 -0
  157. package/dist/llm/providers/claude-api.d.ts.map +1 -0
  158. package/dist/llm/providers/claude-api.js +110 -0
  159. package/dist/llm/providers/claude-api.js.map +1 -0
  160. package/dist/llm/providers/claude-code.d.ts +21 -0
  161. package/dist/llm/providers/claude-code.d.ts.map +1 -0
  162. package/dist/llm/providers/claude-code.js +120 -0
  163. package/dist/llm/providers/claude-code.js.map +1 -0
  164. package/dist/llm/providers/codex-cli.d.ts +25 -0
  165. package/dist/llm/providers/codex-cli.d.ts.map +1 -0
  166. package/dist/llm/providers/codex-cli.js +129 -0
  167. package/dist/llm/providers/codex-cli.js.map +1 -0
  168. package/dist/llm/providers/cursor-cli.d.ts +24 -0
  169. package/dist/llm/providers/cursor-cli.d.ts.map +1 -0
  170. package/dist/llm/providers/cursor-cli.js +106 -0
  171. package/dist/llm/providers/cursor-cli.js.map +1 -0
  172. package/dist/llm/providers/gemini-api.d.ts +20 -0
  173. package/dist/llm/providers/gemini-api.d.ts.map +1 -0
  174. package/dist/llm/providers/gemini-api.js +121 -0
  175. package/dist/llm/providers/gemini-api.js.map +1 -0
  176. package/dist/llm/providers/gemini-cli.d.ts +20 -0
  177. package/dist/llm/providers/gemini-cli.d.ts.map +1 -0
  178. package/dist/llm/providers/gemini-cli.js +109 -0
  179. package/dist/llm/providers/gemini-cli.js.map +1 -0
  180. package/dist/llm/providers/interactive.d.ts +42 -0
  181. package/dist/llm/providers/interactive.d.ts.map +1 -0
  182. package/dist/llm/providers/interactive.js +200 -0
  183. package/dist/llm/providers/interactive.js.map +1 -0
  184. package/dist/llm/providers/openai-api.d.ts +21 -0
  185. package/dist/llm/providers/openai-api.d.ts.map +1 -0
  186. package/dist/llm/providers/openai-api.js +107 -0
  187. package/dist/llm/providers/openai-api.js.map +1 -0
  188. package/dist/llm/types.d.ts +128 -0
  189. package/dist/llm/types.d.ts.map +1 -0
  190. package/dist/llm/types.js +8 -0
  191. package/dist/llm/types.js.map +1 -0
  192. package/dist/parser/index.d.ts +3 -0
  193. package/dist/parser/index.d.ts.map +1 -0
  194. package/dist/parser/index.js +19 -0
  195. package/dist/parser/index.js.map +1 -0
  196. package/dist/parser/path-security.d.ts +40 -0
  197. package/dist/parser/path-security.d.ts.map +1 -0
  198. package/dist/parser/path-security.js +183 -0
  199. package/dist/parser/path-security.js.map +1 -0
  200. package/dist/parser/rule-parser.d.ts +50 -0
  201. package/dist/parser/rule-parser.d.ts.map +1 -0
  202. package/dist/parser/rule-parser.js +203 -0
  203. package/dist/parser/rule-parser.js.map +1 -0
  204. package/dist/schemas/config.d.ts +202 -0
  205. package/dist/schemas/config.d.ts.map +1 -0
  206. package/dist/schemas/config.js +96 -0
  207. package/dist/schemas/config.js.map +1 -0
  208. package/dist/schemas/index.d.ts +3 -0
  209. package/dist/schemas/index.d.ts.map +1 -0
  210. package/dist/schemas/index.js +19 -0
  211. package/dist/schemas/index.js.map +1 -0
  212. package/dist/schemas/rule.d.ts +67 -0
  213. package/dist/schemas/rule.d.ts.map +1 -0
  214. package/dist/schemas/rule.js +44 -0
  215. package/dist/schemas/rule.js.map +1 -0
  216. package/package.json +69 -0
  217. package/templates/architecture.md +35 -0
  218. package/templates/bootstrap-prompt.md +242 -0
  219. package/templates/config.yaml +25 -0
  220. package/templates/project.md +44 -0
  221. package/templates/rules/example.md +36 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-api.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/claude-api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,WAAW,EACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAA2C;IAC1E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAA8B;gBAEvD,MAAM,EAAE,iBAAiB;IAIrC,IAAI,IAAI,IAAI,eAAe,CAE1B;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,YAAY,IAAI,uBAAuB,CAQ1C;IAEK,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAK/B,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CAsF1D"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ /**
3
+ * Claude API Provider
4
+ *
5
+ * Uses Anthropic's Claude API directly via HTTP.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.ClaudeAPIProvider = void 0;
9
+ const base_provider_1 = require("../base-provider");
10
+ /**
11
+ * Claude API provider implementation
12
+ */
13
+ class ClaudeAPIProvider extends base_provider_1.BaseLLMProvider {
14
+ static API_URL = 'https://api.anthropic.com/v1/messages';
15
+ static DEFAULT_MODEL = 'claude-sonnet-4-20250514';
16
+ constructor(config) {
17
+ super(config);
18
+ }
19
+ get type() {
20
+ return 'claude-api';
21
+ }
22
+ get name() {
23
+ return 'Claude API (Anthropic)';
24
+ }
25
+ get capabilities() {
26
+ return {
27
+ jsonMode: false, // Claude doesn't have native JSON mode, but follows instructions well
28
+ systemPrompt: true,
29
+ streaming: true,
30
+ maxContextTokens: 200000,
31
+ maxOutputTokens: 8192,
32
+ };
33
+ }
34
+ async isAvailable() {
35
+ const apiKey = this.config.apiKey || process.env.ANTHROPIC_API_KEY;
36
+ return !!apiKey;
37
+ }
38
+ async complete(request) {
39
+ const apiKey = this.config.apiKey || process.env.ANTHROPIC_API_KEY;
40
+ if (!apiKey) {
41
+ throw new Error('ANTHROPIC_API_KEY not set');
42
+ }
43
+ const model = this.config.model || ClaudeAPIProvider.DEFAULT_MODEL;
44
+ const maxTokens = this.getMaxTokens(request);
45
+ const temperature = this.getTemperature(request);
46
+ // Build messages array
47
+ const messages = request.messages
48
+ .filter(m => m.role !== 'system')
49
+ .map(m => ({
50
+ role: m.role,
51
+ content: m.content,
52
+ }));
53
+ // Build system prompt
54
+ let systemPrompt = request.systemPrompt || '';
55
+ const systemMessages = request.messages.filter(m => m.role === 'system');
56
+ if (systemMessages.length > 0) {
57
+ systemPrompt = [systemPrompt, ...systemMessages.map(m => m.content)]
58
+ .filter(Boolean)
59
+ .join('\n\n');
60
+ }
61
+ // Add JSON instruction if requested
62
+ if (request.jsonMode) {
63
+ systemPrompt += '\n\nIMPORTANT: Respond with valid JSON only. No markdown, no explanation, just the JSON object.';
64
+ }
65
+ const body = {
66
+ model,
67
+ max_tokens: maxTokens,
68
+ temperature,
69
+ ...(systemPrompt && { system: systemPrompt }),
70
+ messages,
71
+ };
72
+ const controller = new AbortController();
73
+ const timeoutId = setTimeout(() => controller.abort(), this.getTimeout());
74
+ try {
75
+ const response = await fetch(ClaudeAPIProvider.API_URL, {
76
+ method: 'POST',
77
+ headers: {
78
+ 'Content-Type': 'application/json',
79
+ 'x-api-key': apiKey,
80
+ 'anthropic-version': '2023-06-01',
81
+ },
82
+ body: JSON.stringify(body),
83
+ signal: controller.signal,
84
+ });
85
+ if (!response.ok) {
86
+ const errorText = await response.text();
87
+ throw new Error(`Claude API error (${response.status}): ${errorText}`);
88
+ }
89
+ const data = await response.json();
90
+ const content = data.content
91
+ .filter(c => c.type === 'text')
92
+ .map(c => c.text)
93
+ .join('');
94
+ return {
95
+ content,
96
+ promptTokens: data.usage?.input_tokens,
97
+ completionTokens: data.usage?.output_tokens,
98
+ totalTokens: data.usage
99
+ ? data.usage.input_tokens + data.usage.output_tokens
100
+ : undefined,
101
+ metadata: { model },
102
+ };
103
+ }
104
+ finally {
105
+ clearTimeout(timeoutId);
106
+ }
107
+ }
108
+ }
109
+ exports.ClaudeAPIProvider = ClaudeAPIProvider;
110
+ //# sourceMappingURL=claude-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-api.js","sourceRoot":"","sources":["../../../src/llm/providers/claude-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Claude Code CLI Provider
3
+ *
4
+ * Uses the `claude` CLI tool for LLM invocation.
5
+ * Supports both interactive and piped modes.
6
+ */
7
+ import { LLMProviderType, LLMProviderConfig, LLMProviderCapabilities, LLMRequest, LLMResponse } from '../types';
8
+ import { BaseLLMProvider } from '../base-provider';
9
+ /**
10
+ * Claude Code CLI provider implementation
11
+ */
12
+ export declare class ClaudeCodeProvider extends BaseLLMProvider {
13
+ private cliCommand;
14
+ constructor(config: LLMProviderConfig);
15
+ get type(): LLMProviderType;
16
+ get name(): string;
17
+ get capabilities(): LLMProviderCapabilities;
18
+ isAvailable(): Promise<boolean>;
19
+ complete(request: LLMRequest): Promise<LLMResponse>;
20
+ }
21
+ //# sourceMappingURL=claude-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/claude-code.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,WAAW,EACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,iBAAiB;IAKrC,IAAI,IAAI,IAAI,eAAe,CAE1B;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,YAAY,IAAI,uBAAuB,CAQ1C;IAEK,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAY/B,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CAqF1D"}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ /**
3
+ * Claude Code CLI Provider
4
+ *
5
+ * Uses the `claude` CLI tool for LLM invocation.
6
+ * Supports both interactive and piped modes.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ClaudeCodeProvider = void 0;
10
+ const child_process_1 = require("child_process");
11
+ const base_provider_1 = require("../base-provider");
12
+ /**
13
+ * Claude Code CLI provider implementation
14
+ */
15
+ class ClaudeCodeProvider extends base_provider_1.BaseLLMProvider {
16
+ cliCommand;
17
+ constructor(config) {
18
+ super(config);
19
+ this.cliCommand = config.cliPath || 'claude';
20
+ }
21
+ get type() {
22
+ return 'claude-code';
23
+ }
24
+ get name() {
25
+ return 'Claude Code CLI';
26
+ }
27
+ get capabilities() {
28
+ return {
29
+ jsonMode: false,
30
+ systemPrompt: true,
31
+ streaming: true,
32
+ maxContextTokens: 200000,
33
+ maxOutputTokens: 8192,
34
+ };
35
+ }
36
+ async isAvailable() {
37
+ try {
38
+ (0, child_process_1.execSync)(`${this.cliCommand} --version`, {
39
+ stdio: 'pipe',
40
+ timeout: 5000,
41
+ });
42
+ return true;
43
+ }
44
+ catch {
45
+ return false;
46
+ }
47
+ }
48
+ async complete(request) {
49
+ const prompt = this.buildPromptFromMessages(request);
50
+ // Add JSON instruction if requested
51
+ const finalPrompt = request.jsonMode
52
+ ? `${prompt}\n\nIMPORTANT: Respond with valid JSON only. No markdown code blocks, no explanation, just the raw JSON object.`
53
+ : prompt;
54
+ return new Promise((resolve, reject) => {
55
+ const args = [
56
+ '--print', // Print response and exit (non-interactive)
57
+ '--output-format', 'text', // Plain text output
58
+ ];
59
+ // Add model if specified
60
+ if (this.config.model) {
61
+ args.push('--model', this.config.model);
62
+ }
63
+ // Add max tokens if specified
64
+ const maxTokens = this.getMaxTokens(request);
65
+ if (maxTokens) {
66
+ args.push('--max-tokens', String(maxTokens));
67
+ }
68
+ // Add the prompt
69
+ args.push(finalPrompt);
70
+ this.log('Executing command', { command: this.cliCommand, args: args.slice(0, -1), promptLength: finalPrompt.length });
71
+ const child = (0, child_process_1.spawn)(this.cliCommand, args, {
72
+ stdio: ['pipe', 'pipe', 'pipe'],
73
+ timeout: this.getTimeout(),
74
+ });
75
+ let stdout = '';
76
+ let stderr = '';
77
+ child.stdout?.on('data', (data) => {
78
+ stdout += data.toString();
79
+ });
80
+ child.stderr?.on('data', (data) => {
81
+ stderr += data.toString();
82
+ });
83
+ child.on('error', (error) => {
84
+ reject(new Error(`Claude Code CLI error: ${error.message}\n` +
85
+ `Make sure 'claude' is installed and in your PATH.\n` +
86
+ `Install: npm install -g @anthropic-ai/claude-code`));
87
+ });
88
+ // Set timeout
89
+ const timeoutId = setTimeout(() => {
90
+ child.kill('SIGTERM');
91
+ reject(new Error('Claude Code CLI timed out'));
92
+ }, this.getTimeout());
93
+ child.on('close', (code) => {
94
+ clearTimeout(timeoutId);
95
+ this.log('Process exited', { code, stdoutLength: stdout.length, stderrLength: stderr.length });
96
+ if (code !== 0) {
97
+ const errorDetails = stderr.trim() || 'No error output captured';
98
+ this.log('Command failed', { errorDetails });
99
+ const suggestion = stderr.includes('command not found') || stderr.includes('not recognized')
100
+ ? '\nMake sure claude CLI is installed: npm install -g @anthropic-ai/claude-code'
101
+ : stderr.includes('auth') || stderr.includes('token')
102
+ ? '\nAuthentication issue - try running: claude auth'
103
+ : '\nTry running with --verbose for more details.';
104
+ reject(new Error(`Claude Code CLI failed (exit code ${code}):\n${errorDetails}${suggestion}`));
105
+ return;
106
+ }
107
+ this.log('Command succeeded', { responseLength: stdout.trim().length });
108
+ resolve({
109
+ content: stdout.trim(),
110
+ metadata: {
111
+ provider: 'claude-code',
112
+ command: this.cliCommand,
113
+ },
114
+ });
115
+ });
116
+ });
117
+ }
118
+ }
119
+ exports.ClaudeCodeProvider = ClaudeCodeProvider;
120
+ //# sourceMappingURL=claude-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/llm/providers/claude-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Codex CLI Provider
3
+ *
4
+ * Uses OpenAI's Codex CLI tool for LLM invocation.
5
+ * Also supports GitHub Copilot CLI.
6
+ */
7
+ import { LLMProviderType, LLMProviderConfig, LLMProviderCapabilities, LLMRequest, LLMResponse } from '../types';
8
+ import { BaseLLMProvider } from '../base-provider';
9
+ /**
10
+ * Codex/Copilot CLI provider implementation
11
+ */
12
+ export declare class CodexCLIProvider extends BaseLLMProvider {
13
+ private cliCommand;
14
+ constructor(config: LLMProviderConfig);
15
+ /**
16
+ * Detect available CLI tool
17
+ */
18
+ private detectCLI;
19
+ get type(): LLMProviderType;
20
+ get name(): string;
21
+ get capabilities(): LLMProviderCapabilities;
22
+ isAvailable(): Promise<boolean>;
23
+ complete(request: LLMRequest): Promise<LLMResponse>;
24
+ }
25
+ //# sourceMappingURL=codex-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-cli.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/codex-cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,WAAW,EACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,eAAe;IACnD,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,iBAAiB;IAMrC;;OAEG;IACH,OAAO,CAAC,SAAS;IAmBjB,IAAI,IAAI,IAAI,eAAe,CAE1B;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,YAAY,IAAI,uBAAuB,CAQ1C;IAEK,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAa/B,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CAoE1D"}
@@ -0,0 +1,129 @@
1
+ "use strict";
2
+ /**
3
+ * Codex CLI Provider
4
+ *
5
+ * Uses OpenAI's Codex CLI tool for LLM invocation.
6
+ * Also supports GitHub Copilot CLI.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CodexCLIProvider = void 0;
10
+ const child_process_1 = require("child_process");
11
+ const base_provider_1 = require("../base-provider");
12
+ /**
13
+ * Codex/Copilot CLI provider implementation
14
+ */
15
+ class CodexCLIProvider extends base_provider_1.BaseLLMProvider {
16
+ cliCommand;
17
+ constructor(config) {
18
+ super(config);
19
+ // Support multiple CLI tools
20
+ this.cliCommand = config.cliPath || this.detectCLI();
21
+ }
22
+ /**
23
+ * Detect available CLI tool
24
+ */
25
+ detectCLI() {
26
+ // Try codex first, then gh copilot
27
+ const candidates = ['codex', 'gh copilot'];
28
+ for (const cmd of candidates) {
29
+ try {
30
+ (0, child_process_1.execSync)(`${cmd.split(' ')[0]} --version`, {
31
+ stdio: 'pipe',
32
+ timeout: 5000,
33
+ });
34
+ return cmd;
35
+ }
36
+ catch {
37
+ // Continue to next candidate
38
+ }
39
+ }
40
+ return 'codex'; // Default, will fail on isAvailable check
41
+ }
42
+ get type() {
43
+ return 'codex';
44
+ }
45
+ get name() {
46
+ return 'Codex/Copilot CLI';
47
+ }
48
+ get capabilities() {
49
+ return {
50
+ jsonMode: false,
51
+ systemPrompt: true,
52
+ streaming: false,
53
+ maxContextTokens: 128000,
54
+ maxOutputTokens: 8192,
55
+ };
56
+ }
57
+ async isAvailable() {
58
+ try {
59
+ const cmd = this.cliCommand.split(' ')[0];
60
+ (0, child_process_1.execSync)(`${cmd} --version`, {
61
+ stdio: 'pipe',
62
+ timeout: 5000,
63
+ });
64
+ return true;
65
+ }
66
+ catch {
67
+ return false;
68
+ }
69
+ }
70
+ async complete(request) {
71
+ const prompt = this.buildPromptFromMessages(request);
72
+ // Add JSON instruction if requested
73
+ const finalPrompt = request.jsonMode
74
+ ? `${prompt}\n\nIMPORTANT: Respond with valid JSON only. No markdown code blocks, no explanation, just the raw JSON object.`
75
+ : prompt;
76
+ return new Promise((resolve, reject) => {
77
+ let args;
78
+ if (this.cliCommand.startsWith('gh copilot')) {
79
+ // GitHub Copilot CLI - use 'gh' target type for general prompts
80
+ // Note: -t shell is for shell commands, -t gh for general GitHub CLI,
81
+ // -t git for git commands. For JSON generation, avoid shell type.
82
+ const targetType = request.jsonMode ? 'gh' : 'shell';
83
+ args = ['copilot', 'suggest', '-t', targetType, finalPrompt];
84
+ }
85
+ else {
86
+ // Generic codex CLI
87
+ args = ['--prompt', finalPrompt];
88
+ }
89
+ const [cmd, ...cmdArgs] = this.cliCommand.split(' ');
90
+ const fullArgs = [...cmdArgs, ...args];
91
+ const child = (0, child_process_1.spawn)(cmd, fullArgs, {
92
+ stdio: ['pipe', 'pipe', 'pipe'],
93
+ timeout: this.getTimeout(),
94
+ });
95
+ let stdout = '';
96
+ let stderr = '';
97
+ child.stdout?.on('data', (data) => {
98
+ stdout += data.toString();
99
+ });
100
+ child.stderr?.on('data', (data) => {
101
+ stderr += data.toString();
102
+ });
103
+ child.on('error', (error) => {
104
+ reject(new Error(`Codex CLI error: ${error.message}`));
105
+ });
106
+ // Set timeout
107
+ const timeoutId = setTimeout(() => {
108
+ child.kill('SIGTERM');
109
+ reject(new Error('Codex CLI timed out'));
110
+ }, this.getTimeout());
111
+ child.on('close', (code) => {
112
+ clearTimeout(timeoutId);
113
+ if (code !== 0) {
114
+ reject(new Error(`Codex CLI exited with code ${code}: ${stderr}`));
115
+ return;
116
+ }
117
+ resolve({
118
+ content: stdout.trim(),
119
+ metadata: {
120
+ provider: 'codex',
121
+ command: this.cliCommand,
122
+ },
123
+ });
124
+ });
125
+ });
126
+ }
127
+ }
128
+ exports.CodexCLIProvider = CodexCLIProvider;
129
+ //# sourceMappingURL=codex-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-cli.js","sourceRoot":"","sources":["../../../src/llm/providers/codex-cli.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,iDAAgD;AAQhD,oDAAmD;AAEnD;;GAEG;AACH,MAAa,gBAAiB,SAAQ,+BAAe;IAC3C,UAAU,CAAS;IAE3B,YAAY,MAAyB;QACnC,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,6BAA6B;QAC7B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;IACvD,CAAC;IAED;;OAEG;IACK,SAAS;QACf,mCAAmC;QACnC,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAE3C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,IAAA,wBAAQ,EAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE;oBACzC,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;gBACH,OAAO,GAAG,CAAC;YACb,CAAC;YAAC,MAAM,CAAC;gBACP,6BAA6B;YAC/B,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC,CAAC,0CAA0C;IAC5D,CAAC;IAED,IAAI,IAAI;QACN,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED,IAAI,YAAY;QACd,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,KAAK;YAChB,gBAAgB,EAAE,MAAM;YACxB,eAAe,EAAE,IAAI;SACtB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAA,wBAAQ,EAAC,GAAG,GAAG,YAAY,EAAE;gBAC3B,KAAK,EAAE,MAAM;gBACb,OAAO,EAAE,IAAI;aACd,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAmB;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAErD,oCAAoC;QACpC,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ;YAClC,CAAC,CAAC,GAAG,MAAM,iHAAiH;YAC5H,CAAC,CAAC,MAAM,CAAC;QAEX,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,IAAc,CAAC;YAEnB,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC7C,gEAAgE;gBAChE,sEAAsE;gBACtE,kEAAkE;gBAClE,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;gBACrD,IAAI,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,oBAAoB;gBACpB,IAAI,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;YACnC,CAAC;YAED,MAAM,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;YAEvC,MAAM,KAAK,GAAG,IAAA,qBAAK,EAAC,GAAG,EAAE,QAAQ,EAAE;gBACjC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;gBAC/B,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;aAC3B,CAAC,CAAC;YAEH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACxC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACxC,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC1B,MAAM,CAAC,IAAI,KAAK,CAAC,oBAAoB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACzD,CAAC,CAAC,CAAC;YAEH,cAAc;YACd,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC3C,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;YAEtB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACzB,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,KAAK,CAAC,8BAA8B,IAAI,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC;oBACnE,OAAO;gBACT,CAAC;gBAED,OAAO,CAAC;oBACN,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;oBACtB,QAAQ,EAAE;wBACR,QAAQ,EAAE,OAAO;wBACjB,OAAO,EAAE,IAAI,CAAC,UAAU;qBACzB;iBACF,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAlID,4CAkIC"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Cursor CLI Provider
3
+ *
4
+ * Experimental provider for Cursor IDE CLI integration.
5
+ * Note: Cursor primarily operates through its IDE. This provider attempts
6
+ * to use cursor-agent if available, falling back to piping prompts to stdin.
7
+ *
8
+ * This is an experimental implementation - Cursor's CLI API may change.
9
+ */
10
+ import { LLMProviderType, LLMProviderConfig, LLMProviderCapabilities, LLMRequest, LLMResponse } from '../types';
11
+ import { BaseLLMProvider } from '../base-provider';
12
+ /**
13
+ * Cursor CLI provider implementation
14
+ */
15
+ export declare class CursorCLIProvider extends BaseLLMProvider {
16
+ private cliCommand;
17
+ constructor(config: LLMProviderConfig);
18
+ get type(): LLMProviderType;
19
+ get name(): string;
20
+ get capabilities(): LLMProviderCapabilities;
21
+ isAvailable(): Promise<boolean>;
22
+ complete(request: LLMRequest): Promise<LLMResponse>;
23
+ }
24
+ //# sourceMappingURL=cursor-cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-cli.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/cursor-cli.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,WAAW,EACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,iBAAiB;IAKrC,IAAI,IAAI,IAAI,eAAe,CAE1B;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,YAAY,IAAI,uBAAuB,CAQ1C;IAEK,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAa/B,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CA+D1D"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ /**
3
+ * Cursor CLI Provider
4
+ *
5
+ * Experimental provider for Cursor IDE CLI integration.
6
+ * Note: Cursor primarily operates through its IDE. This provider attempts
7
+ * to use cursor-agent if available, falling back to piping prompts to stdin.
8
+ *
9
+ * This is an experimental implementation - Cursor's CLI API may change.
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CursorCLIProvider = void 0;
13
+ const child_process_1 = require("child_process");
14
+ const base_provider_1 = require("../base-provider");
15
+ /**
16
+ * Cursor CLI provider implementation
17
+ */
18
+ class CursorCLIProvider extends base_provider_1.BaseLLMProvider {
19
+ cliCommand;
20
+ constructor(config) {
21
+ super(config);
22
+ this.cliCommand = config.cliPath || 'cursor';
23
+ }
24
+ get type() {
25
+ return 'cursor';
26
+ }
27
+ get name() {
28
+ return 'Cursor IDE CLI';
29
+ }
30
+ get capabilities() {
31
+ return {
32
+ jsonMode: false,
33
+ systemPrompt: true,
34
+ streaming: false, // CLI mode typically doesn't stream
35
+ maxContextTokens: 128000,
36
+ maxOutputTokens: 8192,
37
+ };
38
+ }
39
+ async isAvailable() {
40
+ try {
41
+ // Check if cursor CLI is available
42
+ (0, child_process_1.execSync)(`${this.cliCommand} --version`, {
43
+ stdio: 'pipe',
44
+ timeout: 5000,
45
+ });
46
+ return true;
47
+ }
48
+ catch {
49
+ return false;
50
+ }
51
+ }
52
+ async complete(request) {
53
+ const prompt = this.buildPromptFromMessages(request);
54
+ // Add JSON instruction if requested
55
+ const finalPrompt = request.jsonMode
56
+ ? `${prompt}\n\nIMPORTANT: Respond with valid JSON only. No markdown code blocks, no explanation, just the raw JSON object.`
57
+ : prompt;
58
+ return new Promise((resolve, reject) => {
59
+ // Note: Cursor's CLI interface is not publicly documented.
60
+ // This implementation uses stdin piping as a fallback approach.
61
+ // The cursor-agent command may be available in some installations.
62
+ const args = [];
63
+ const child = (0, child_process_1.spawn)(this.cliCommand, args, {
64
+ stdio: ['pipe', 'pipe', 'pipe'],
65
+ timeout: this.getTimeout(),
66
+ });
67
+ let stdout = '';
68
+ let stderr = '';
69
+ // Write prompt to stdin for cursor to process
70
+ if (child.stdin) {
71
+ child.stdin.write(finalPrompt);
72
+ child.stdin.end();
73
+ }
74
+ child.stdout?.on('data', (data) => {
75
+ stdout += data.toString();
76
+ });
77
+ child.stderr?.on('data', (data) => {
78
+ stderr += data.toString();
79
+ });
80
+ child.on('error', (error) => {
81
+ reject(new Error(`Cursor CLI error: ${error.message}`));
82
+ });
83
+ // Set timeout
84
+ const timeoutId = setTimeout(() => {
85
+ child.kill('SIGTERM');
86
+ reject(new Error('Cursor CLI timed out'));
87
+ }, this.getTimeout());
88
+ child.on('close', (code) => {
89
+ clearTimeout(timeoutId);
90
+ if (code !== 0) {
91
+ reject(new Error(`Cursor CLI exited with code ${code}: ${stderr}`));
92
+ return;
93
+ }
94
+ resolve({
95
+ content: stdout.trim(),
96
+ metadata: {
97
+ provider: 'cursor',
98
+ command: this.cliCommand,
99
+ },
100
+ });
101
+ });
102
+ });
103
+ }
104
+ }
105
+ exports.CursorCLIProvider = CursorCLIProvider;
106
+ //# sourceMappingURL=cursor-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor-cli.js","sourceRoot":"","sources":["../../../src/llm/providers/cursor-cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Google Gemini API Provider
3
+ *
4
+ * Uses Google's Gemini API for LLM invocation.
5
+ */
6
+ import { LLMProviderType, LLMProviderConfig, LLMProviderCapabilities, LLMRequest, LLMResponse } from '../types';
7
+ import { BaseLLMProvider } from '../base-provider';
8
+ /**
9
+ * Gemini API provider implementation
10
+ */
11
+ export declare class GeminiAPIProvider extends BaseLLMProvider {
12
+ private static readonly DEFAULT_MODEL;
13
+ constructor(config: LLMProviderConfig);
14
+ get type(): LLMProviderType;
15
+ get name(): string;
16
+ get capabilities(): LLMProviderCapabilities;
17
+ isAvailable(): Promise<boolean>;
18
+ complete(request: LLMRequest): Promise<LLMResponse>;
19
+ }
20
+ //# sourceMappingURL=gemini-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini-api.d.ts","sourceRoot":"","sources":["../../../src/llm/providers/gemini-api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,uBAAuB,EACvB,UAAU,EACV,WAAW,EACZ,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAoB;gBAE7C,MAAM,EAAE,iBAAiB;IAIrC,IAAI,IAAI,IAAI,eAAe,CAE1B;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,YAAY,IAAI,uBAAuB,CAQ1C;IAEK,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAK/B,QAAQ,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;CA8G1D"}