@phantomind/core 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 (265) hide show
  1. package/dist/adapters/aider.d.ts +12 -0
  2. package/dist/adapters/aider.d.ts.map +1 -0
  3. package/dist/adapters/aider.js +24 -0
  4. package/dist/adapters/aider.js.map +1 -0
  5. package/dist/adapters/base.d.ts +21 -0
  6. package/dist/adapters/base.d.ts.map +1 -0
  7. package/dist/adapters/base.js +83 -0
  8. package/dist/adapters/base.js.map +1 -0
  9. package/dist/adapters/claude-code.d.ts +12 -0
  10. package/dist/adapters/claude-code.d.ts.map +1 -0
  11. package/dist/adapters/claude-code.js +31 -0
  12. package/dist/adapters/claude-code.js.map +1 -0
  13. package/dist/adapters/cline.d.ts +12 -0
  14. package/dist/adapters/cline.d.ts.map +1 -0
  15. package/dist/adapters/cline.js +32 -0
  16. package/dist/adapters/cline.js.map +1 -0
  17. package/dist/adapters/codex.d.ts +18 -0
  18. package/dist/adapters/codex.d.ts.map +1 -0
  19. package/dist/adapters/codex.js +38 -0
  20. package/dist/adapters/codex.js.map +1 -0
  21. package/dist/adapters/continue.d.ts +12 -0
  22. package/dist/adapters/continue.d.ts.map +1 -0
  23. package/dist/adapters/continue.js +29 -0
  24. package/dist/adapters/continue.js.map +1 -0
  25. package/dist/adapters/copilot.d.ts +12 -0
  26. package/dist/adapters/copilot.d.ts.map +1 -0
  27. package/dist/adapters/copilot.js +31 -0
  28. package/dist/adapters/copilot.js.map +1 -0
  29. package/dist/adapters/cursor.d.ts +12 -0
  30. package/dist/adapters/cursor.d.ts.map +1 -0
  31. package/dist/adapters/cursor.js +34 -0
  32. package/dist/adapters/cursor.js.map +1 -0
  33. package/dist/adapters/index.d.ts +32 -0
  34. package/dist/adapters/index.d.ts.map +1 -0
  35. package/dist/adapters/index.js +64 -0
  36. package/dist/adapters/index.js.map +1 -0
  37. package/dist/adapters/windsurf.d.ts +12 -0
  38. package/dist/adapters/windsurf.d.ts.map +1 -0
  39. package/dist/adapters/windsurf.js +32 -0
  40. package/dist/adapters/windsurf.js.map +1 -0
  41. package/dist/adapters/zed.d.ts +12 -0
  42. package/dist/adapters/zed.d.ts.map +1 -0
  43. package/dist/adapters/zed.js +27 -0
  44. package/dist/adapters/zed.js.map +1 -0
  45. package/dist/agent/decomposer.d.ts +55 -0
  46. package/dist/agent/decomposer.d.ts.map +1 -0
  47. package/dist/agent/decomposer.js +172 -0
  48. package/dist/agent/decomposer.js.map +1 -0
  49. package/dist/agent/executor.d.ts +33 -0
  50. package/dist/agent/executor.d.ts.map +1 -0
  51. package/dist/agent/executor.js +260 -0
  52. package/dist/agent/executor.js.map +1 -0
  53. package/dist/agent/index.d.ts +8 -0
  54. package/dist/agent/index.d.ts.map +1 -0
  55. package/dist/agent/index.js +8 -0
  56. package/dist/agent/index.js.map +1 -0
  57. package/dist/agent/memory.d.ts +95 -0
  58. package/dist/agent/memory.d.ts.map +1 -0
  59. package/dist/agent/memory.js +211 -0
  60. package/dist/agent/memory.js.map +1 -0
  61. package/dist/agent/orchestrator.d.ts +54 -0
  62. package/dist/agent/orchestrator.d.ts.map +1 -0
  63. package/dist/agent/orchestrator.js +190 -0
  64. package/dist/agent/orchestrator.js.map +1 -0
  65. package/dist/agent/queue.d.ts +95 -0
  66. package/dist/agent/queue.d.ts.map +1 -0
  67. package/dist/agent/queue.js +231 -0
  68. package/dist/agent/queue.js.map +1 -0
  69. package/dist/agent/retry.d.ts +61 -0
  70. package/dist/agent/retry.d.ts.map +1 -0
  71. package/dist/agent/retry.js +162 -0
  72. package/dist/agent/retry.js.map +1 -0
  73. package/dist/agent/roles.d.ts +35 -0
  74. package/dist/agent/roles.d.ts.map +1 -0
  75. package/dist/agent/roles.js +269 -0
  76. package/dist/agent/roles.js.map +1 -0
  77. package/dist/cli/agent.d.ts +12 -0
  78. package/dist/cli/agent.d.ts.map +1 -0
  79. package/dist/cli/agent.js +85 -0
  80. package/dist/cli/agent.js.map +1 -0
  81. package/dist/cli/audit.d.ts +11 -0
  82. package/dist/cli/audit.d.ts.map +1 -0
  83. package/dist/cli/audit.js +63 -0
  84. package/dist/cli/audit.js.map +1 -0
  85. package/dist/cli/eval.d.ts +11 -0
  86. package/dist/cli/eval.d.ts.map +1 -0
  87. package/dist/cli/eval.js +79 -0
  88. package/dist/cli/eval.js.map +1 -0
  89. package/dist/cli/index.d.ts +9 -0
  90. package/dist/cli/index.d.ts.map +1 -0
  91. package/dist/cli/index.js +9 -0
  92. package/dist/cli/index.js.map +1 -0
  93. package/dist/cli/init.d.ts +13 -0
  94. package/dist/cli/init.d.ts.map +1 -0
  95. package/dist/cli/init.js +157 -0
  96. package/dist/cli/init.js.map +1 -0
  97. package/dist/cli/main.d.ts +7 -0
  98. package/dist/cli/main.d.ts.map +1 -0
  99. package/dist/cli/main.js +153 -0
  100. package/dist/cli/main.js.map +1 -0
  101. package/dist/cli/serve.d.ts +11 -0
  102. package/dist/cli/serve.d.ts.map +1 -0
  103. package/dist/cli/serve.js +23 -0
  104. package/dist/cli/serve.js.map +1 -0
  105. package/dist/cli/stats.d.ts +10 -0
  106. package/dist/cli/stats.d.ts.map +1 -0
  107. package/dist/cli/stats.js +68 -0
  108. package/dist/cli/stats.js.map +1 -0
  109. package/dist/cli/sync.d.ts +11 -0
  110. package/dist/cli/sync.d.ts.map +1 -0
  111. package/dist/cli/sync.js +49 -0
  112. package/dist/cli/sync.js.map +1 -0
  113. package/dist/cli/validate.d.ts +13 -0
  114. package/dist/cli/validate.d.ts.map +1 -0
  115. package/dist/cli/validate.js +125 -0
  116. package/dist/cli/validate.js.map +1 -0
  117. package/dist/config/index.d.ts +2 -0
  118. package/dist/config/index.d.ts.map +1 -0
  119. package/dist/config/index.js +2 -0
  120. package/dist/config/index.js.map +1 -0
  121. package/dist/config/loader.d.ts +25 -0
  122. package/dist/config/loader.d.ts.map +1 -0
  123. package/dist/config/loader.js +190 -0
  124. package/dist/config/loader.js.map +1 -0
  125. package/dist/context/embedder.d.ts +53 -0
  126. package/dist/context/embedder.d.ts.map +1 -0
  127. package/dist/context/embedder.js +235 -0
  128. package/dist/context/embedder.js.map +1 -0
  129. package/dist/context/engine.d.ts +82 -0
  130. package/dist/context/engine.d.ts.map +1 -0
  131. package/dist/context/engine.js +343 -0
  132. package/dist/context/engine.js.map +1 -0
  133. package/dist/context/index.d.ts +5 -0
  134. package/dist/context/index.d.ts.map +1 -0
  135. package/dist/context/index.js +5 -0
  136. package/dist/context/index.js.map +1 -0
  137. package/dist/context/learner.d.ts +44 -0
  138. package/dist/context/learner.d.ts.map +1 -0
  139. package/dist/context/learner.js +246 -0
  140. package/dist/context/learner.js.map +1 -0
  141. package/dist/context/versioning.d.ts +29 -0
  142. package/dist/context/versioning.d.ts.map +1 -0
  143. package/dist/context/versioning.js +81 -0
  144. package/dist/context/versioning.js.map +1 -0
  145. package/dist/index.d.ts +169 -0
  146. package/dist/index.d.ts.map +1 -0
  147. package/dist/index.js +285 -0
  148. package/dist/index.js.map +1 -0
  149. package/dist/mcp/index.d.ts +2 -0
  150. package/dist/mcp/index.d.ts.map +1 -0
  151. package/dist/mcp/index.js +2 -0
  152. package/dist/mcp/index.js.map +1 -0
  153. package/dist/mcp/server.d.ts +31 -0
  154. package/dist/mcp/server.d.ts.map +1 -0
  155. package/dist/mcp/server.js +334 -0
  156. package/dist/mcp/server.js.map +1 -0
  157. package/dist/observability/audit.d.ts +61 -0
  158. package/dist/observability/audit.d.ts.map +1 -0
  159. package/dist/observability/audit.js +168 -0
  160. package/dist/observability/audit.js.map +1 -0
  161. package/dist/observability/cost-tracker.d.ts +71 -0
  162. package/dist/observability/cost-tracker.d.ts.map +1 -0
  163. package/dist/observability/cost-tracker.js +206 -0
  164. package/dist/observability/cost-tracker.js.map +1 -0
  165. package/dist/observability/dashboard.d.ts +52 -0
  166. package/dist/observability/dashboard.d.ts.map +1 -0
  167. package/dist/observability/dashboard.js +134 -0
  168. package/dist/observability/dashboard.js.map +1 -0
  169. package/dist/observability/index.d.ts +4 -0
  170. package/dist/observability/index.d.ts.map +1 -0
  171. package/dist/observability/index.js +4 -0
  172. package/dist/observability/index.js.map +1 -0
  173. package/dist/providers/anthropic.d.ts +14 -0
  174. package/dist/providers/anthropic.d.ts.map +1 -0
  175. package/dist/providers/anthropic.js +99 -0
  176. package/dist/providers/anthropic.js.map +1 -0
  177. package/dist/providers/base.d.ts +52 -0
  178. package/dist/providers/base.d.ts.map +1 -0
  179. package/dist/providers/base.js +68 -0
  180. package/dist/providers/base.js.map +1 -0
  181. package/dist/providers/deepseek.d.ts +15 -0
  182. package/dist/providers/deepseek.d.ts.map +1 -0
  183. package/dist/providers/deepseek.js +99 -0
  184. package/dist/providers/deepseek.js.map +1 -0
  185. package/dist/providers/gemini.d.ts +15 -0
  186. package/dist/providers/gemini.d.ts.map +1 -0
  187. package/dist/providers/gemini.js +118 -0
  188. package/dist/providers/gemini.js.map +1 -0
  189. package/dist/providers/groq.d.ts +15 -0
  190. package/dist/providers/groq.d.ts.map +1 -0
  191. package/dist/providers/groq.js +101 -0
  192. package/dist/providers/groq.js.map +1 -0
  193. package/dist/providers/index.d.ts +11 -0
  194. package/dist/providers/index.d.ts.map +1 -0
  195. package/dist/providers/index.js +11 -0
  196. package/dist/providers/index.js.map +1 -0
  197. package/dist/providers/mistral.d.ts +15 -0
  198. package/dist/providers/mistral.d.ts.map +1 -0
  199. package/dist/providers/mistral.js +99 -0
  200. package/dist/providers/mistral.js.map +1 -0
  201. package/dist/providers/ollama.d.ts +14 -0
  202. package/dist/providers/ollama.d.ts.map +1 -0
  203. package/dist/providers/ollama.js +122 -0
  204. package/dist/providers/ollama.js.map +1 -0
  205. package/dist/providers/openai.d.ts +14 -0
  206. package/dist/providers/openai.d.ts.map +1 -0
  207. package/dist/providers/openai.js +80 -0
  208. package/dist/providers/openai.js.map +1 -0
  209. package/dist/providers/openrouter.d.ts +15 -0
  210. package/dist/providers/openrouter.d.ts.map +1 -0
  211. package/dist/providers/openrouter.js +101 -0
  212. package/dist/providers/openrouter.js.map +1 -0
  213. package/dist/providers/router.d.ts +51 -0
  214. package/dist/providers/router.d.ts.map +1 -0
  215. package/dist/providers/router.js +198 -0
  216. package/dist/providers/router.js.map +1 -0
  217. package/dist/quality/anomaly.d.ts +32 -0
  218. package/dist/quality/anomaly.d.ts.map +1 -0
  219. package/dist/quality/anomaly.js +126 -0
  220. package/dist/quality/anomaly.js.map +1 -0
  221. package/dist/quality/consistency.d.ts +26 -0
  222. package/dist/quality/consistency.d.ts.map +1 -0
  223. package/dist/quality/consistency.js +156 -0
  224. package/dist/quality/consistency.js.map +1 -0
  225. package/dist/quality/dual-verifier.d.ts +22 -0
  226. package/dist/quality/dual-verifier.d.ts.map +1 -0
  227. package/dist/quality/dual-verifier.js +137 -0
  228. package/dist/quality/dual-verifier.js.map +1 -0
  229. package/dist/quality/hallucination-guard.d.ts +57 -0
  230. package/dist/quality/hallucination-guard.d.ts.map +1 -0
  231. package/dist/quality/hallucination-guard.js +245 -0
  232. package/dist/quality/hallucination-guard.js.map +1 -0
  233. package/dist/quality/index.d.ts +7 -0
  234. package/dist/quality/index.d.ts.map +1 -0
  235. package/dist/quality/index.js +7 -0
  236. package/dist/quality/index.js.map +1 -0
  237. package/dist/quality/regression.d.ts +44 -0
  238. package/dist/quality/regression.d.ts.map +1 -0
  239. package/dist/quality/regression.js +181 -0
  240. package/dist/quality/regression.js.map +1 -0
  241. package/dist/quality/secret-scanner.d.ts +36 -0
  242. package/dist/quality/secret-scanner.d.ts.map +1 -0
  243. package/dist/quality/secret-scanner.js +187 -0
  244. package/dist/quality/secret-scanner.js.map +1 -0
  245. package/dist/schemas/index.d.ts +2 -0
  246. package/dist/schemas/index.d.ts.map +1 -0
  247. package/dist/schemas/index.js +2 -0
  248. package/dist/schemas/index.js.map +1 -0
  249. package/dist/schemas/registry.d.ts +72 -0
  250. package/dist/schemas/registry.d.ts.map +1 -0
  251. package/dist/schemas/registry.js +483 -0
  252. package/dist/schemas/registry.js.map +1 -0
  253. package/dist/templates/engine.d.ts +70 -0
  254. package/dist/templates/engine.d.ts.map +1 -0
  255. package/dist/templates/engine.js +71 -0
  256. package/dist/templates/engine.js.map +1 -0
  257. package/dist/templates/index.d.ts +2 -0
  258. package/dist/templates/index.d.ts.map +1 -0
  259. package/dist/templates/index.js +2 -0
  260. package/dist/templates/index.js.map +1 -0
  261. package/dist/types.d.ts +912 -0
  262. package/dist/types.d.ts.map +1 -0
  263. package/dist/types.js +75 -0
  264. package/dist/types.js.map +1 -0
  265. package/package.json +85 -0
@@ -0,0 +1,134 @@
1
+ /**
2
+ * PhantomMindAI — Analytics Dashboard
3
+ * Terminal-based usage analytics and metrics visualization.
4
+ */
5
+ export class AnalyticsDashboard {
6
+ costTracker;
7
+ auditTrail;
8
+ constructor(costTracker, auditTrail) {
9
+ this.costTracker = costTracker;
10
+ this.auditTrail = auditTrail;
11
+ }
12
+ /**
13
+ * Get comprehensive metrics
14
+ */
15
+ getMetrics() {
16
+ const costReport = this.costTracker.getReport('today');
17
+ const recentAudit = this.auditTrail.getRecent(500);
18
+ const providerRequests = recentAudit.filter(e => e.action === 'provider:request');
19
+ const qualityEvents = recentAudit.filter(e => e.action.startsWith('quality:'));
20
+ const agentEvents = recentAudit.filter(e => e.action.startsWith('agent:'));
21
+ const successfulRequests = providerRequests.filter(e => e.details?.success === true);
22
+ const responseTimes = providerRequests
23
+ .map(e => e.details?.duration)
24
+ .filter((d) => typeof d === 'number');
25
+ return {
26
+ overview: {
27
+ totalRequests: costReport.requestCount ?? 0,
28
+ totalCost: costReport.totalCost,
29
+ avgCostPerRequest: (costReport.requestCount ?? 0) > 0
30
+ ? costReport.totalCost / costReport.requestCount
31
+ : 0,
32
+ totalTokens: costReport.totalTokens?.totalTokens ?? 0,
33
+ activeProviders: Object.keys(costReport.byProvider ?? {}),
34
+ },
35
+ performance: {
36
+ avgResponseTime: responseTimes.length > 0
37
+ ? responseTimes.reduce((a, b) => a + b, 0) / responseTimes.length
38
+ : 0,
39
+ successRate: providerRequests.length > 0
40
+ ? successfulRequests.length / providerRequests.length
41
+ : 1,
42
+ errorCount: providerRequests.length - successfulRequests.length,
43
+ },
44
+ quality: {
45
+ secretsDetected: qualityEvents.filter(e => e.action === 'quality:secret-scan').length,
46
+ hallucinationsDetected: qualityEvents.filter(e => e.action === 'quality:hallucination').length,
47
+ consistencyIssues: qualityEvents.filter(e => e.action === 'quality:consistency').length,
48
+ },
49
+ agents: {
50
+ tasksCompleted: agentEvents.filter(e => e.action === 'agent:complete').length,
51
+ tasksFailed: agentEvents.filter(e => e.action === 'agent:error').length,
52
+ avgStepsPerTask: 0, // Computed separately if needed
53
+ },
54
+ };
55
+ }
56
+ /**
57
+ * Format metrics as terminal-friendly text
58
+ */
59
+ formatTerminal() {
60
+ const m = this.getMetrics();
61
+ const width = 52;
62
+ const hr = '─'.repeat(width);
63
+ const lines = [
64
+ `┌${hr}┐`,
65
+ `│${' PhantomMindAI Dashboard'.padEnd(width)}│`,
66
+ `├${hr}┤`,
67
+ `│${' OVERVIEW'.padEnd(width)}│`,
68
+ `│ Requests: ${String(m.overview.totalRequests).padEnd(width - 14)}│`,
69
+ `│ Cost: $${m.overview.totalCost.toFixed(4).padEnd(width - 15)}│`,
70
+ `│ Tokens: ${m.overview.totalTokens.toLocaleString().padEnd(width - 14)}│`,
71
+ `│ Providers: ${m.overview.activeProviders.join(', ').padEnd(width - 15) || 'none'.padEnd(width - 15)}│`,
72
+ `├${hr}┤`,
73
+ `│${' PERFORMANCE'.padEnd(width)}│`,
74
+ `│ Avg Response: ${(m.performance.avgResponseTime / 1000).toFixed(2).padEnd(width - 18)}s│`,
75
+ `│ Success Rate: ${(m.performance.successRate * 100).toFixed(1).padEnd(width - 18)}%│`,
76
+ `│ Errors: ${String(m.performance.errorCount).padEnd(width - 18)}│`,
77
+ `├${hr}┤`,
78
+ `│${' QUALITY'.padEnd(width)}│`,
79
+ `│ Secrets Found: ${String(m.quality.secretsDetected).padEnd(width - 23)}│`,
80
+ `│ Hallucinations: ${String(m.quality.hallucinationsDetected).padEnd(width - 23)}│`,
81
+ `│ Consistency Issues: ${String(m.quality.consistencyIssues).padEnd(width - 24)}│`,
82
+ `├${hr}┤`,
83
+ `│${' AGENTS'.padEnd(width)}│`,
84
+ `│ Completed: ${String(m.agents.tasksCompleted).padEnd(width - 15)}│`,
85
+ `│ Failed: ${String(m.agents.tasksFailed).padEnd(width - 15)}│`,
86
+ `└${hr}┘`,
87
+ ];
88
+ return lines.join('\n');
89
+ }
90
+ /**
91
+ * Format as markdown
92
+ */
93
+ formatMarkdown() {
94
+ const m = this.getMetrics();
95
+ return `# PhantomMindAI Analytics Dashboard
96
+
97
+ ## Overview
98
+ | Metric | Value |
99
+ |--------|-------|
100
+ | Total Requests | ${m.overview.totalRequests} |
101
+ | Total Cost | $${m.overview.totalCost.toFixed(4)} |
102
+ | Avg Cost/Request | $${m.overview.avgCostPerRequest.toFixed(6)} |
103
+ | Total Tokens | ${m.overview.totalTokens.toLocaleString()} |
104
+ | Active Providers | ${m.overview.activeProviders.join(', ') || 'none'} |
105
+
106
+ ## Performance
107
+ | Metric | Value |
108
+ |--------|-------|
109
+ | Avg Response Time | ${(m.performance.avgResponseTime / 1000).toFixed(2)}s |
110
+ | Success Rate | ${(m.performance.successRate * 100).toFixed(1)}% |
111
+ | Errors | ${m.performance.errorCount} |
112
+
113
+ ## Quality
114
+ | Metric | Value |
115
+ |--------|-------|
116
+ | Secrets Detected | ${m.quality.secretsDetected} |
117
+ | Hallucinations Detected | ${m.quality.hallucinationsDetected} |
118
+ | Consistency Issues | ${m.quality.consistencyIssues} |
119
+
120
+ ## Agent Activity
121
+ | Metric | Value |
122
+ |--------|-------|
123
+ | Tasks Completed | ${m.agents.tasksCompleted} |
124
+ | Tasks Failed | ${m.agents.tasksFailed} |
125
+ `;
126
+ }
127
+ /**
128
+ * Export as JSON
129
+ */
130
+ toJSON() {
131
+ return this.getMetrics();
132
+ }
133
+ }
134
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../src/observability/dashboard.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { AuditTrail } from './audit.js';
2
+ export { CostTracker, type CostEntry, type DailyCost } from './cost-tracker.js';
3
+ export { AnalyticsDashboard, type DashboardMetrics } from './dashboard.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { AuditTrail } from './audit.js';
2
+ export { CostTracker } from './cost-tracker.js';
3
+ export { AnalyticsDashboard } from './dashboard.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,WAAW,EAAkC,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAyB,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * PhantomMindAI — Anthropic Provider (Claude)
3
+ */
4
+ import { BaseProvider } from './base.js';
5
+ import type { CompletionRequest, CompletionResponse, StreamChunk } from '../types.js';
6
+ export declare class AnthropicProvider extends BaseProvider {
7
+ private client;
8
+ private getClient;
9
+ complete(request: CompletionRequest): Promise<CompletionResponse>;
10
+ stream(request: CompletionRequest): AsyncGenerator<StreamChunk>;
11
+ isAvailable(): Promise<boolean>;
12
+ listModels(): Promise<string[]>;
13
+ }
14
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACZ,MAAM,aAAa,CAAC;AAErB,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,MAAM,CAAM;YAEN,SAAS;IAWjB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA0ChE,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAAC,WAAW,CAAC;IAuChE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAK/B,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAOtC"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * PhantomMindAI — Anthropic Provider (Claude)
3
+ */
4
+ import { BaseProvider } from './base.js';
5
+ export class AnthropicProvider extends BaseProvider {
6
+ client;
7
+ async getClient() {
8
+ if (!this.client) {
9
+ const { default: Anthropic } = await import('@anthropic-ai/sdk');
10
+ this.client = new Anthropic({
11
+ apiKey: this.config.apiKey || process.env.ANTHROPIC_API_KEY,
12
+ ...(this.config.baseUrl && { baseURL: this.config.baseUrl }),
13
+ });
14
+ }
15
+ return this.client;
16
+ }
17
+ async complete(request) {
18
+ const client = await this.getClient();
19
+ const messages = this.buildMessages(request);
20
+ const start = Date.now();
21
+ const systemMessage = messages.find(m => m.role === 'system');
22
+ const chatMessages = messages
23
+ .filter(m => m.role !== 'system')
24
+ .map(m => ({ role: m.role, content: m.content }));
25
+ const response = await client.messages.create({
26
+ model: this.config.model,
27
+ max_tokens: request.maxTokens ?? this.config.maxTokens ?? 8096,
28
+ temperature: request.temperature ?? this.config.temperature ?? 0.2,
29
+ ...(systemMessage && { system: systemMessage.content }),
30
+ messages: chatMessages,
31
+ });
32
+ const content = response.content
33
+ .filter((block) => block.type === 'text')
34
+ .map((block) => block.text)
35
+ .join('');
36
+ const usage = {
37
+ inputTokens: response.usage.input_tokens,
38
+ outputTokens: response.usage.output_tokens,
39
+ totalTokens: response.usage.input_tokens + response.usage.output_tokens,
40
+ estimatedCost: this.estimateCost({
41
+ inputTokens: response.usage.input_tokens,
42
+ outputTokens: response.usage.output_tokens,
43
+ }),
44
+ };
45
+ return {
46
+ content,
47
+ model: this.config.model,
48
+ provider: 'anthropic',
49
+ usage,
50
+ duration: Date.now() - start,
51
+ };
52
+ }
53
+ async *stream(request) {
54
+ const client = await this.getClient();
55
+ const messages = this.buildMessages(request);
56
+ const systemMessage = messages.find(m => m.role === 'system');
57
+ const chatMessages = messages
58
+ .filter(m => m.role !== 'system')
59
+ .map(m => ({ role: m.role, content: m.content }));
60
+ const stream = await client.messages.stream({
61
+ model: this.config.model,
62
+ max_tokens: request.maxTokens ?? this.config.maxTokens ?? 8096,
63
+ temperature: request.temperature ?? this.config.temperature ?? 0.2,
64
+ ...(systemMessage && { system: systemMessage.content }),
65
+ messages: chatMessages,
66
+ });
67
+ for await (const event of stream) {
68
+ if (event.type === 'content_block_delta' && event.delta.type === 'text_delta') {
69
+ yield { content: event.delta.text, done: false };
70
+ }
71
+ }
72
+ const finalMessage = await stream.finalMessage();
73
+ yield {
74
+ content: '',
75
+ done: true,
76
+ usage: {
77
+ inputTokens: finalMessage.usage.input_tokens,
78
+ outputTokens: finalMessage.usage.output_tokens,
79
+ totalTokens: finalMessage.usage.input_tokens + finalMessage.usage.output_tokens,
80
+ estimatedCost: this.estimateCost({
81
+ inputTokens: finalMessage.usage.input_tokens,
82
+ outputTokens: finalMessage.usage.output_tokens,
83
+ }),
84
+ },
85
+ };
86
+ }
87
+ async isAvailable() {
88
+ const apiKey = this.config.apiKey || process.env.ANTHROPIC_API_KEY;
89
+ return !!apiKey;
90
+ }
91
+ async listModels() {
92
+ return [
93
+ 'claude-opus-4-20250514',
94
+ 'claude-sonnet-4-20250514',
95
+ 'claude-3-5-haiku-20241022',
96
+ ];
97
+ }
98
+ }
99
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../src/providers/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * PhantomMindAI — Abstract Provider Base
3
+ */
4
+ import type { ProviderName, ProviderConfig, CompletionRequest, CompletionResponse, ChatMessage, StreamChunk } from '../types.js';
5
+ /**
6
+ * Pricing per 1M tokens for cost estimation
7
+ */
8
+ export declare const PROVIDER_PRICING: Record<string, {
9
+ input: number;
10
+ output: number;
11
+ }>;
12
+ export declare abstract class BaseProvider {
13
+ readonly providerName: ProviderName;
14
+ protected config: ProviderConfig;
15
+ constructor(config: ProviderConfig);
16
+ /**
17
+ * Send a completion request to the provider
18
+ */
19
+ abstract complete(request: CompletionRequest): Promise<CompletionResponse>;
20
+ /**
21
+ * Stream a completion from the provider
22
+ */
23
+ abstract stream(request: CompletionRequest): AsyncGenerator<StreamChunk>;
24
+ /**
25
+ * Check if provider is available (API key set, endpoint reachable)
26
+ */
27
+ abstract isAvailable(): Promise<boolean>;
28
+ /**
29
+ * Get list of available models from this provider
30
+ */
31
+ abstract listModels(): Promise<string[]>;
32
+ /**
33
+ * Build chat messages from a CompletionRequest
34
+ */
35
+ protected buildMessages(request: CompletionRequest): ChatMessage[];
36
+ /**
37
+ * Estimate cost based on token usage
38
+ */
39
+ protected estimateCost(usage: {
40
+ inputTokens: number;
41
+ outputTokens: number;
42
+ }): number;
43
+ /**
44
+ * Get model configuration
45
+ */
46
+ getModel(): string;
47
+ /**
48
+ * Get provider configuration (redacted)
49
+ */
50
+ getConfig(): Omit<ProviderConfig, 'apiKey'>;
51
+ }
52
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EAEX,WAAW,EACZ,MAAM,aAAa,CAAC;AAErB;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAe9E,CAAC;AAEF,8BAAsB,YAAY;IAChC,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;gBAErB,MAAM,EAAE,cAAc;IAKlC;;OAEG;IACH,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAE1E;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAAC,WAAW,CAAC;IAExE;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAExC;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,OAAO,EAAE,iBAAiB,GAAG,WAAW,EAAE;IAkBlE;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAQpF;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;CAI5C"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * PhantomMindAI — Abstract Provider Base
3
+ */
4
+ /**
5
+ * Pricing per 1M tokens for cost estimation
6
+ */
7
+ export const PROVIDER_PRICING = {
8
+ 'claude-sonnet-4-20250514': { input: 3.0, output: 15.0 },
9
+ 'claude-3-5-haiku-20241022': { input: 0.8, output: 4.0 },
10
+ 'claude-opus-4-20250514': { input: 15.0, output: 75.0 },
11
+ 'gpt-4o': { input: 2.5, output: 10.0 },
12
+ 'gpt-4o-mini': { input: 0.15, output: 0.6 },
13
+ 'o1': { input: 15.0, output: 60.0 },
14
+ 'o3': { input: 10.0, output: 40.0 },
15
+ 'gemini-1.5-pro': { input: 1.25, output: 5.0 },
16
+ 'gemini-2.0-flash': { input: 0.1, output: 0.4 },
17
+ 'llama-3.3-70b-versatile': { input: 0.59, output: 0.79 },
18
+ 'mixtral-8x7b-32768': { input: 0.24, output: 0.24 },
19
+ 'mistral-large-latest': { input: 2.0, output: 6.0 },
20
+ 'codestral-latest': { input: 0.3, output: 0.9 },
21
+ 'deepseek-coder': { input: 0.14, output: 0.28 },
22
+ };
23
+ export class BaseProvider {
24
+ providerName;
25
+ config;
26
+ constructor(config) {
27
+ this.providerName = config.name;
28
+ this.config = config;
29
+ }
30
+ /**
31
+ * Build chat messages from a CompletionRequest
32
+ */
33
+ buildMessages(request) {
34
+ const messages = [];
35
+ if (request.systemPrompt) {
36
+ messages.push({ role: 'system', content: request.systemPrompt });
37
+ }
38
+ if (request.messages) {
39
+ messages.push(...request.messages);
40
+ }
41
+ if (request.prompt) {
42
+ messages.push({ role: 'user', content: request.prompt });
43
+ }
44
+ return messages;
45
+ }
46
+ /**
47
+ * Estimate cost based on token usage
48
+ */
49
+ estimateCost(usage) {
50
+ const pricing = PROVIDER_PRICING[this.config.model] ?? { input: 1.0, output: 2.0 };
51
+ return ((usage.inputTokens / 1_000_000) * pricing.input +
52
+ (usage.outputTokens / 1_000_000) * pricing.output);
53
+ }
54
+ /**
55
+ * Get model configuration
56
+ */
57
+ getModel() {
58
+ return this.config.model;
59
+ }
60
+ /**
61
+ * Get provider configuration (redacted)
62
+ */
63
+ getConfig() {
64
+ const { apiKey: _, ...rest } = this.config;
65
+ return rest;
66
+ }
67
+ }
68
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/providers/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * PhantomMindAI — DeepSeek Provider
3
+ */
4
+ import { BaseProvider } from './base.js';
5
+ import type { CompletionRequest, CompletionResponse, StreamChunk } from '../types.js';
6
+ export declare class DeepSeekProvider extends BaseProvider {
7
+ private baseUrl;
8
+ private apiKey;
9
+ constructor(config: any);
10
+ complete(request: CompletionRequest): Promise<CompletionResponse>;
11
+ stream(request: CompletionRequest): AsyncGenerator<StreamChunk>;
12
+ isAvailable(): Promise<boolean>;
13
+ listModels(): Promise<string[]>;
14
+ }
15
+ //# sourceMappingURL=deepseek.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek.d.ts","sourceRoot":"","sources":["../../src/providers/deepseek.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEtF,qBAAa,gBAAiB,SAAQ,YAAY;IAChD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,GAAG;IAMjB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyChE,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAAC,WAAW,CAAC;IA6ChE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAGtC"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * PhantomMindAI — DeepSeek Provider
3
+ */
4
+ import { BaseProvider } from './base.js';
5
+ export class DeepSeekProvider extends BaseProvider {
6
+ baseUrl;
7
+ apiKey;
8
+ constructor(config) {
9
+ super(config);
10
+ this.apiKey = config.apiKey || process.env.DEEPSEEK_API_KEY || '';
11
+ this.baseUrl = config.baseUrl || 'https://api.deepseek.com/v1';
12
+ }
13
+ async complete(request) {
14
+ const messages = this.buildMessages(request);
15
+ const start = Date.now();
16
+ const response = await fetch(`${this.baseUrl}/chat/completions`, {
17
+ method: 'POST',
18
+ headers: {
19
+ 'Content-Type': 'application/json',
20
+ Authorization: `Bearer ${this.apiKey}`,
21
+ },
22
+ body: JSON.stringify({
23
+ model: this.config.model,
24
+ messages: messages.map(m => ({ role: m.role, content: m.content })),
25
+ max_tokens: request.maxTokens ?? this.config.maxTokens ?? 8096,
26
+ temperature: request.temperature ?? this.config.temperature ?? 0.2,
27
+ }),
28
+ });
29
+ if (!response.ok) {
30
+ throw new Error(`DeepSeek API error: ${response.status} ${await response.text()}`);
31
+ }
32
+ const data = await response.json();
33
+ const content = data.choices?.[0]?.message?.content ?? '';
34
+ const inputTokens = data.usage?.prompt_tokens ?? 0;
35
+ const outputTokens = data.usage?.completion_tokens ?? 0;
36
+ return {
37
+ content,
38
+ model: this.config.model,
39
+ provider: 'deepseek',
40
+ usage: {
41
+ inputTokens,
42
+ outputTokens,
43
+ totalTokens: inputTokens + outputTokens,
44
+ estimatedCost: this.estimateCost({ inputTokens, outputTokens }),
45
+ },
46
+ duration: Date.now() - start,
47
+ };
48
+ }
49
+ async *stream(request) {
50
+ const messages = this.buildMessages(request);
51
+ const response = await fetch(`${this.baseUrl}/chat/completions`, {
52
+ method: 'POST',
53
+ headers: {
54
+ 'Content-Type': 'application/json',
55
+ Authorization: `Bearer ${this.apiKey}`,
56
+ },
57
+ body: JSON.stringify({
58
+ model: this.config.model,
59
+ messages: messages.map(m => ({ role: m.role, content: m.content })),
60
+ max_tokens: request.maxTokens ?? this.config.maxTokens ?? 8096,
61
+ temperature: request.temperature ?? this.config.temperature ?? 0.2,
62
+ stream: true,
63
+ }),
64
+ });
65
+ if (!response.ok || !response.body) {
66
+ throw new Error(`DeepSeek stream error: ${response.status}`);
67
+ }
68
+ const reader = response.body.getReader();
69
+ const decoder = new TextDecoder();
70
+ let buffer = '';
71
+ while (true) {
72
+ const { done, value } = await reader.read();
73
+ if (done)
74
+ break;
75
+ buffer += decoder.decode(value, { stream: true });
76
+ const lines = buffer.split('\n');
77
+ buffer = lines.pop() ?? '';
78
+ for (const line of lines) {
79
+ if (line.startsWith('data: ') && line !== 'data: [DONE]') {
80
+ try {
81
+ const data = JSON.parse(line.slice(6));
82
+ const text = data.choices?.[0]?.delta?.content ?? '';
83
+ if (text)
84
+ yield { content: text, done: false };
85
+ }
86
+ catch { /* skip */ }
87
+ }
88
+ }
89
+ }
90
+ yield { content: '', done: true };
91
+ }
92
+ async isAvailable() {
93
+ return !!(this.config.apiKey || process.env.DEEPSEEK_API_KEY);
94
+ }
95
+ async listModels() {
96
+ return ['deepseek-coder', 'deepseek-chat'];
97
+ }
98
+ }
99
+ //# sourceMappingURL=deepseek.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deepseek.js","sourceRoot":"","sources":["../../src/providers/deepseek.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAGzC,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IACxC,OAAO,CAAS;IAChB,MAAM,CAAS;IAEvB,YAAY,MAAW;QACrB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;QAClE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,6BAA6B,CAAC;IACjE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAA0B;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;gBACxB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnE,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI;gBAC9D,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,GAAG;aACnE,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,QAAQ,CAAC,MAAM,IAAI,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,aAAa,IAAI,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,iBAAiB,IAAI,CAAC,CAAC;QAExD,OAAO;YACL,OAAO;YACP,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACxB,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE;gBACL,WAAW;gBACX,YAAY;gBACZ,WAAW,EAAE,WAAW,GAAG,YAAY;gBACvC,aAAa,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;aAChE;YACD,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SAC7B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,CAAC,MAAM,CAAC,OAA0B;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;YAC/D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;gBACxB,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBACnE,UAAU,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,IAAI;gBAC9D,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,GAAG;gBAClE,MAAM,EAAE,IAAI;aACb,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;QAClC,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,OAAO,IAAI,EAAE,CAAC;YACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI;gBAAE,MAAM;YAChB,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;oBACzD,IAAI,CAAC;wBACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;wBACvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,IAAI,EAAE,CAAC;wBACrD,IAAI,IAAI;4BAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;oBACjD,CAAC;oBAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;IAC7C,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * PhantomMindAI — Gemini Provider (Google)
3
+ */
4
+ import { BaseProvider } from './base.js';
5
+ import type { CompletionRequest, CompletionResponse, StreamChunk } from '../types.js';
6
+ export declare class GeminiProvider extends BaseProvider {
7
+ private baseUrl;
8
+ private apiKey;
9
+ constructor(config: any);
10
+ complete(request: CompletionRequest): Promise<CompletionResponse>;
11
+ stream(request: CompletionRequest): AsyncGenerator<StreamChunk>;
12
+ isAvailable(): Promise<boolean>;
13
+ listModels(): Promise<string[]>;
14
+ }
15
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACZ,MAAM,aAAa,CAAC;AAErB,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,EAAE,GAAG;IAMjB,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAmDhE,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAAC,WAAW,CAAC;IA2DhE,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAI/B,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAGtC"}