mozart-router 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 (238) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +250 -0
  3. package/dist/adapters/cursor.d.ts +10 -0
  4. package/dist/adapters/cursor.d.ts.map +1 -0
  5. package/dist/adapters/cursor.js +39 -0
  6. package/dist/adapters/cursor.js.map +1 -0
  7. package/dist/adapters/generic.d.ts +24 -0
  8. package/dist/adapters/generic.d.ts.map +1 -0
  9. package/dist/adapters/generic.js +192 -0
  10. package/dist/adapters/generic.js.map +1 -0
  11. package/dist/adapters/hermes.d.ts +10 -0
  12. package/dist/adapters/hermes.d.ts.map +1 -0
  13. package/dist/adapters/hermes.js +170 -0
  14. package/dist/adapters/hermes.js.map +1 -0
  15. package/dist/adapters/index.d.ts +13 -0
  16. package/dist/adapters/index.d.ts.map +1 -0
  17. package/dist/adapters/index.js +27 -0
  18. package/dist/adapters/index.js.map +1 -0
  19. package/dist/adapters/litellm.d.ts +15 -0
  20. package/dist/adapters/litellm.d.ts.map +1 -0
  21. package/dist/adapters/litellm.js +238 -0
  22. package/dist/adapters/litellm.js.map +1 -0
  23. package/dist/adapters/lmstudio.d.ts +12 -0
  24. package/dist/adapters/lmstudio.d.ts.map +1 -0
  25. package/dist/adapters/lmstudio.js +128 -0
  26. package/dist/adapters/lmstudio.js.map +1 -0
  27. package/dist/adapters/nim.d.ts +12 -0
  28. package/dist/adapters/nim.d.ts.map +1 -0
  29. package/dist/adapters/nim.js +163 -0
  30. package/dist/adapters/nim.js.map +1 -0
  31. package/dist/adapters/ollama.d.ts +12 -0
  32. package/dist/adapters/ollama.d.ts.map +1 -0
  33. package/dist/adapters/ollama.js +243 -0
  34. package/dist/adapters/ollama.js.map +1 -0
  35. package/dist/adapters/openclaw.d.ts +10 -0
  36. package/dist/adapters/openclaw.d.ts.map +1 -0
  37. package/dist/adapters/openclaw.js +197 -0
  38. package/dist/adapters/openclaw.js.map +1 -0
  39. package/dist/adapters/opencode.d.ts +10 -0
  40. package/dist/adapters/opencode.d.ts.map +1 -0
  41. package/dist/adapters/opencode.js +180 -0
  42. package/dist/adapters/opencode.js.map +1 -0
  43. package/dist/adapters/openrouter.d.ts +13 -0
  44. package/dist/adapters/openrouter.d.ts.map +1 -0
  45. package/dist/adapters/openrouter.js +173 -0
  46. package/dist/adapters/openrouter.js.map +1 -0
  47. package/dist/adapters/vllm.d.ts +12 -0
  48. package/dist/adapters/vllm.d.ts.map +1 -0
  49. package/dist/adapters/vllm.js +129 -0
  50. package/dist/adapters/vllm.js.map +1 -0
  51. package/dist/api/dashboard.d.ts +3 -0
  52. package/dist/api/dashboard.d.ts.map +1 -0
  53. package/dist/api/dashboard.js +98 -0
  54. package/dist/api/dashboard.js.map +1 -0
  55. package/dist/api/mcp.d.ts +32 -0
  56. package/dist/api/mcp.d.ts.map +1 -0
  57. package/dist/api/mcp.js +215 -0
  58. package/dist/api/mcp.js.map +1 -0
  59. package/dist/api/middleware.d.ts +20 -0
  60. package/dist/api/middleware.d.ts.map +1 -0
  61. package/dist/api/middleware.js +239 -0
  62. package/dist/api/middleware.js.map +1 -0
  63. package/dist/api/server.d.ts +26 -0
  64. package/dist/api/server.d.ts.map +1 -0
  65. package/dist/api/server.js +294 -0
  66. package/dist/api/server.js.map +1 -0
  67. package/dist/api/streaming.d.ts +19 -0
  68. package/dist/api/streaming.d.ts.map +1 -0
  69. package/dist/api/streaming.js +274 -0
  70. package/dist/api/streaming.js.map +1 -0
  71. package/dist/cli/config-init.d.ts +2 -0
  72. package/dist/cli/config-init.d.ts.map +1 -0
  73. package/dist/cli/config-init.js +73 -0
  74. package/dist/cli/config-init.js.map +1 -0
  75. package/dist/cli/main.d.ts +3 -0
  76. package/dist/cli/main.d.ts.map +1 -0
  77. package/dist/cli/main.js +618 -0
  78. package/dist/cli/main.js.map +1 -0
  79. package/dist/context/advanced-optimizer.d.ts +12 -0
  80. package/dist/context/advanced-optimizer.d.ts.map +1 -0
  81. package/dist/context/advanced-optimizer.js +64 -0
  82. package/dist/context/advanced-optimizer.js.map +1 -0
  83. package/dist/context/optimizer.d.ts +7 -0
  84. package/dist/context/optimizer.d.ts.map +1 -0
  85. package/dist/context/optimizer.js +101 -0
  86. package/dist/context/optimizer.js.map +1 -0
  87. package/dist/core/cache.d.ts +39 -0
  88. package/dist/core/cache.d.ts.map +1 -0
  89. package/dist/core/cache.js +90 -0
  90. package/dist/core/cache.js.map +1 -0
  91. package/dist/core/health.d.ts +32 -0
  92. package/dist/core/health.d.ts.map +1 -0
  93. package/dist/core/health.js +92 -0
  94. package/dist/core/health.js.map +1 -0
  95. package/dist/core/inventory.d.ts +28 -0
  96. package/dist/core/inventory.d.ts.map +1 -0
  97. package/dist/core/inventory.js +106 -0
  98. package/dist/core/inventory.js.map +1 -0
  99. package/dist/core/metrics.d.ts +48 -0
  100. package/dist/core/metrics.d.ts.map +1 -0
  101. package/dist/core/metrics.js +115 -0
  102. package/dist/core/metrics.js.map +1 -0
  103. package/dist/core/mozart.d.ts +39 -0
  104. package/dist/core/mozart.d.ts.map +1 -0
  105. package/dist/core/mozart.js +156 -0
  106. package/dist/core/mozart.js.map +1 -0
  107. package/dist/core/persistence.d.ts +13 -0
  108. package/dist/core/persistence.d.ts.map +1 -0
  109. package/dist/core/persistence.js +119 -0
  110. package/dist/core/persistence.js.map +1 -0
  111. package/dist/core/plugins.d.ts +18 -0
  112. package/dist/core/plugins.d.ts.map +1 -0
  113. package/dist/core/plugins.js +110 -0
  114. package/dist/core/plugins.js.map +1 -0
  115. package/dist/core/reliability.d.ts +23 -0
  116. package/dist/core/reliability.d.ts.map +1 -0
  117. package/dist/core/reliability.js +70 -0
  118. package/dist/core/reliability.js.map +1 -0
  119. package/dist/core/session.d.ts +17 -0
  120. package/dist/core/session.d.ts.map +1 -0
  121. package/dist/core/session.js +67 -0
  122. package/dist/core/session.js.map +1 -0
  123. package/dist/cost/dynamic-pricing.d.ts +24 -0
  124. package/dist/cost/dynamic-pricing.d.ts.map +1 -0
  125. package/dist/cost/dynamic-pricing.js +71 -0
  126. package/dist/cost/dynamic-pricing.js.map +1 -0
  127. package/dist/cost/estimator.d.ts +8 -0
  128. package/dist/cost/estimator.d.ts.map +1 -0
  129. package/dist/cost/estimator.js +48 -0
  130. package/dist/cost/estimator.js.map +1 -0
  131. package/dist/explain/engine.d.ts +6 -0
  132. package/dist/explain/engine.d.ts.map +1 -0
  133. package/dist/explain/engine.js +59 -0
  134. package/dist/explain/engine.js.map +1 -0
  135. package/dist/index.d.ts +59 -0
  136. package/dist/index.d.ts.map +1 -0
  137. package/dist/index.js +112 -0
  138. package/dist/index.js.map +1 -0
  139. package/dist/logs/logger.d.ts +35 -0
  140. package/dist/logs/logger.d.ts.map +1 -0
  141. package/dist/logs/logger.js +73 -0
  142. package/dist/logs/logger.js.map +1 -0
  143. package/dist/logs/redactor.d.ts +6 -0
  144. package/dist/logs/redactor.d.ts.map +1 -0
  145. package/dist/logs/redactor.js +54 -0
  146. package/dist/logs/redactor.js.map +1 -0
  147. package/dist/policy/engine.d.ts +9 -0
  148. package/dist/policy/engine.d.ts.map +1 -0
  149. package/dist/policy/engine.js +55 -0
  150. package/dist/policy/engine.js.map +1 -0
  151. package/dist/policy/loader.d.ts +3 -0
  152. package/dist/policy/loader.d.ts.map +1 -0
  153. package/dist/policy/loader.js +27 -0
  154. package/dist/policy/loader.js.map +1 -0
  155. package/dist/policy/profiles.d.ts +11 -0
  156. package/dist/policy/profiles.d.ts.map +1 -0
  157. package/dist/policy/profiles.js +263 -0
  158. package/dist/policy/profiles.js.map +1 -0
  159. package/dist/policy/yaml-loader.d.ts +10 -0
  160. package/dist/policy/yaml-loader.d.ts.map +1 -0
  161. package/dist/policy/yaml-loader.js +160 -0
  162. package/dist/policy/yaml-loader.js.map +1 -0
  163. package/dist/privacy/guard.d.ts +8 -0
  164. package/dist/privacy/guard.d.ts.map +1 -0
  165. package/dist/privacy/guard.js +125 -0
  166. package/dist/privacy/guard.js.map +1 -0
  167. package/dist/routing/circuit-breaker.d.ts +23 -0
  168. package/dist/routing/circuit-breaker.d.ts.map +1 -0
  169. package/dist/routing/circuit-breaker.js +74 -0
  170. package/dist/routing/circuit-breaker.js.map +1 -0
  171. package/dist/routing/classifier.d.ts +5 -0
  172. package/dist/routing/classifier.d.ts.map +1 -0
  173. package/dist/routing/classifier.js +102 -0
  174. package/dist/routing/classifier.js.map +1 -0
  175. package/dist/routing/fallback.d.ts +27 -0
  176. package/dist/routing/fallback.d.ts.map +1 -0
  177. package/dist/routing/fallback.js +66 -0
  178. package/dist/routing/fallback.js.map +1 -0
  179. package/dist/routing/multistage.d.ts +49 -0
  180. package/dist/routing/multistage.d.ts.map +1 -0
  181. package/dist/routing/multistage.js +108 -0
  182. package/dist/routing/multistage.js.map +1 -0
  183. package/dist/routing/router.d.ts +22 -0
  184. package/dist/routing/router.d.ts.map +1 -0
  185. package/dist/routing/router.js +123 -0
  186. package/dist/routing/router.js.map +1 -0
  187. package/dist/routing/scorer.d.ts +8 -0
  188. package/dist/routing/scorer.d.ts.map +1 -0
  189. package/dist/routing/scorer.js +131 -0
  190. package/dist/routing/scorer.js.map +1 -0
  191. package/dist/skills/definitions.d.ts +10 -0
  192. package/dist/skills/definitions.d.ts.map +1 -0
  193. package/dist/skills/definitions.js +112 -0
  194. package/dist/skills/definitions.js.map +1 -0
  195. package/dist/skills/index.d.ts +3 -0
  196. package/dist/skills/index.d.ts.map +1 -0
  197. package/dist/skills/index.js +14 -0
  198. package/dist/skills/index.js.map +1 -0
  199. package/dist/types/index.d.ts +298 -0
  200. package/dist/types/index.d.ts.map +1 -0
  201. package/dist/types/index.js +34 -0
  202. package/dist/types/index.js.map +1 -0
  203. package/dist/utils/canrunit.d.ts +26 -0
  204. package/dist/utils/canrunit.d.ts.map +1 -0
  205. package/dist/utils/canrunit.js +69 -0
  206. package/dist/utils/canrunit.js.map +1 -0
  207. package/dist/utils/dealsforge.d.ts +6 -0
  208. package/dist/utils/dealsforge.d.ts.map +1 -0
  209. package/dist/utils/dealsforge.js +105 -0
  210. package/dist/utils/dealsforge.js.map +1 -0
  211. package/docs/ADAPTERS.md +129 -0
  212. package/docs/ARCHITECTURE.md +113 -0
  213. package/docs/DELEGATED_EXECUTION.md +62 -0
  214. package/docs/FEATURE_MATRIX.md +113 -0
  215. package/docs/GATEWAY_FIRST_PRINCIPLES.md +66 -0
  216. package/docs/INTEGRATIONS.md +94 -0
  217. package/docs/LIMITATIONS.md +43 -0
  218. package/docs/RECOMMEND_ONLY_MODE.md +82 -0
  219. package/docs/ROADMAP.md +70 -0
  220. package/docs/SECURITY.md +74 -0
  221. package/docs/SKILLS_AND_TOOLS.md +141 -0
  222. package/examples/community-adapter/TEMPLATE.md +157 -0
  223. package/examples/generic-tools/README.md +29 -0
  224. package/examples/generic-tools/mozart-tools.json +86 -0
  225. package/examples/hermes/README.md +29 -0
  226. package/examples/hermes/mozart-tool.json +48 -0
  227. package/examples/litellm/README.md +21 -0
  228. package/examples/litellm/config.yaml +39 -0
  229. package/examples/ollama/README.md +37 -0
  230. package/examples/ollama/usage.ts +59 -0
  231. package/examples/openclaw/README.md +26 -0
  232. package/examples/openclaw/mozart-skill.yaml +80 -0
  233. package/examples/opencode/README.md +30 -0
  234. package/examples/opencode/SKILL.md +47 -0
  235. package/examples/opencode/mozart-skill.json +64 -0
  236. package/examples/openrouter/README.md +21 -0
  237. package/examples/openrouter/config.json +14 -0
  238. package/package.json +53 -0
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pluginRegistry = exports.PluginRegistry = void 0;
4
+ class PluginRegistry {
5
+ plugins = new Map();
6
+ register(plugin) {
7
+ this.plugins.set(plugin.name, plugin);
8
+ }
9
+ get(name) {
10
+ return this.plugins.get(name);
11
+ }
12
+ list() {
13
+ return Array.from(this.plugins.values());
14
+ }
15
+ getAllAdapters() {
16
+ const adapters = [];
17
+ for (const plugin of this.plugins.values()) {
18
+ adapters.push(...plugin.adapters);
19
+ }
20
+ return adapters;
21
+ }
22
+ async loadFromDirectory(dirPath) {
23
+ let loaded = 0;
24
+ try {
25
+ const fs = require('fs');
26
+ const path = require('path');
27
+ if (!fs.existsSync(dirPath))
28
+ return 0;
29
+ const entries = fs.readdirSync(dirPath, { withFileTypes: true });
30
+ for (const entry of entries) {
31
+ if (!entry.isDirectory())
32
+ continue;
33
+ const pkgPath = path.join(dirPath, entry.name, 'package.json');
34
+ if (!fs.existsSync(pkgPath))
35
+ continue;
36
+ try {
37
+ const mod = require(path.join(dirPath, entry.name));
38
+ if (mod?.mozartPlugin) {
39
+ const plugin = mod.mozartPlugin;
40
+ this.register(plugin);
41
+ if (plugin.onRegister)
42
+ await plugin.onRegister();
43
+ loaded++;
44
+ }
45
+ }
46
+ catch {
47
+ // skip modules that fail to load
48
+ }
49
+ }
50
+ }
51
+ catch {
52
+ // directory doesn't exist or can't be read
53
+ }
54
+ return loaded;
55
+ }
56
+ // Scan node_modules for mozart-router-adapter-* packages
57
+ async loadInstalledPlugins() {
58
+ let loaded = 0;
59
+ try {
60
+ const fs = require('fs');
61
+ const path = require('path');
62
+ const searchPaths = [
63
+ path.join(process.cwd(), 'node_modules'),
64
+ ];
65
+ // Try to find the global node_modules
66
+ try {
67
+ const { execSync } = require('child_process');
68
+ const globalPath = execSync('npm root -g', { encoding: 'utf-8' }).trim();
69
+ if (globalPath)
70
+ searchPaths.push(globalPath);
71
+ }
72
+ catch { /* ignore */ }
73
+ for (const nodeModulesPath of searchPaths) {
74
+ if (!fs.existsSync(nodeModulesPath))
75
+ continue;
76
+ const entries = fs.readdirSync(nodeModulesPath, { withFileTypes: true });
77
+ for (const entry of entries) {
78
+ if (!entry.isDirectory())
79
+ continue;
80
+ if (!entry.name.startsWith('mozart-router-adapter-'))
81
+ continue;
82
+ const pkgPath = path.join(nodeModulesPath, entry.name, 'package.json');
83
+ if (!fs.existsSync(pkgPath))
84
+ continue;
85
+ try {
86
+ const mod = require(path.join(nodeModulesPath, entry.name));
87
+ if (mod?.mozartPlugin) {
88
+ const plugin = mod.mozartPlugin;
89
+ this.register(plugin);
90
+ if (plugin.onRegister)
91
+ await plugin.onRegister();
92
+ loaded++;
93
+ }
94
+ }
95
+ catch {
96
+ // skip broken plugins
97
+ }
98
+ }
99
+ }
100
+ }
101
+ catch {
102
+ // no plugins found
103
+ }
104
+ return loaded;
105
+ }
106
+ }
107
+ exports.PluginRegistry = PluginRegistry;
108
+ // Default plugin registry singleton
109
+ exports.pluginRegistry = new PluginRegistry();
110
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/core/plugins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { HealthCheckResult } from './health';
2
+ export interface ProviderReliability {
3
+ providerId: string;
4
+ totalChecks: number;
5
+ successes: number;
6
+ failures: number;
7
+ avgLatencyMs: number;
8
+ lastSuccessAt?: string;
9
+ lastFailureAt?: string;
10
+ uptimePercent: number;
11
+ trustScore: number;
12
+ streak: number;
13
+ }
14
+ export declare class ReliabilityTracker {
15
+ private providers;
16
+ record(healthResult: HealthCheckResult): void;
17
+ private computeTrust;
18
+ get(providerId: string): ProviderReliability | undefined;
19
+ getAll(): ProviderReliability[];
20
+ getTrustiest(count?: number): ProviderReliability[];
21
+ reset(): void;
22
+ }
23
+ //# sourceMappingURL=reliability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reliability.d.ts","sourceRoot":"","sources":["../../src/core/reliability.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAK7C,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAA+C;IAEhE,MAAM,CAAC,YAAY,EAAE,iBAAiB,GAAG,IAAI;IAyC7C,OAAO,CAAC,YAAY;IAapB,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAIxD,MAAM,IAAI,mBAAmB,EAAE;IAM/B,YAAY,CAAC,KAAK,SAAI,GAAG,mBAAmB,EAAE;IAI9C,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReliabilityTracker = void 0;
4
+ class ReliabilityTracker {
5
+ providers = new Map();
6
+ record(healthResult) {
7
+ const key = healthResult.adapterId;
8
+ let entry = this.providers.get(key);
9
+ if (!entry) {
10
+ entry = {
11
+ providerId: key,
12
+ totalChecks: 0,
13
+ successes: 0,
14
+ failures: 0,
15
+ avgLatencyMs: 0,
16
+ uptimePercent: 100,
17
+ trustScore: 0.7,
18
+ streak: 0,
19
+ };
20
+ this.providers.set(key, entry);
21
+ }
22
+ entry.totalChecks++;
23
+ if (healthResult.status.connected) {
24
+ entry.successes++;
25
+ entry.lastSuccessAt = new Date().toISOString();
26
+ if (healthResult.status.latencyMs) {
27
+ entry.avgLatencyMs =
28
+ (entry.avgLatencyMs * (entry.successes - 1) + healthResult.status.latencyMs) /
29
+ entry.successes;
30
+ }
31
+ if (entry.streak < 0)
32
+ entry.streak = 1;
33
+ else
34
+ entry.streak++;
35
+ }
36
+ else {
37
+ entry.failures++;
38
+ entry.lastFailureAt = new Date().toISOString();
39
+ if (entry.streak > 0)
40
+ entry.streak = -1;
41
+ else
42
+ entry.streak--;
43
+ }
44
+ entry.uptimePercent = Math.round((entry.successes / entry.totalChecks) * 100);
45
+ entry.trustScore = this.computeTrust(entry);
46
+ }
47
+ computeTrust(r) {
48
+ const uptimeWeight = (r.uptimePercent / 100) * 0.4;
49
+ const streakWeight = r.streak > 0
50
+ ? Math.min(r.streak / 10, 1) * 0.3
51
+ : Math.max(0, 1 + r.streak / 10) * 0.3;
52
+ const recencyWeight = r.lastSuccessAt ? 0.3 : 0;
53
+ const latencyWeight = r.avgLatencyMs > 0 ? Math.max(0, 1 - r.avgLatencyMs / 5000) * 0 : 0; // neutral for now
54
+ return Math.round((uptimeWeight + streakWeight + recencyWeight + latencyWeight) * 1000) / 1000;
55
+ }
56
+ get(providerId) {
57
+ return this.providers.get(providerId);
58
+ }
59
+ getAll() {
60
+ return Array.from(this.providers.values()).sort((a, b) => b.trustScore - a.trustScore);
61
+ }
62
+ getTrustiest(count = 3) {
63
+ return this.getAll().slice(0, count);
64
+ }
65
+ reset() {
66
+ this.providers.clear();
67
+ }
68
+ }
69
+ exports.ReliabilityTracker = ReliabilityTracker;
70
+ //# sourceMappingURL=reliability.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reliability.js","sourceRoot":"","sources":["../../src/core/reliability.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { RouteDecision } from '../types';
2
+ export declare class SessionTracker {
3
+ private routes;
4
+ private startTime;
5
+ private premiumCallsAvoided;
6
+ private providerFailuresRecovered;
7
+ private sensitiveFilesKeptLocal;
8
+ constructor();
9
+ recordRoute(route: RouteDecision): void;
10
+ recordPremiumAvoided(): void;
11
+ recordFailureRecovered(): void;
12
+ recordSensitiveFileKeptLocal(): void;
13
+ generateReport(): string;
14
+ explainLast(): string;
15
+ reset(): void;
16
+ }
17
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,yBAAyB,CAAK;IACtC,OAAO,CAAC,uBAAuB,CAAK;;IAMpC,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,IAAI;IAIvC,oBAAoB,IAAI,IAAI;IAI5B,sBAAsB,IAAI,IAAI;IAI9B,4BAA4B,IAAI,IAAI;IAIpC,cAAc,IAAI,MAAM;IAiCxB,WAAW,IAAI,MAAM;IAQrB,KAAK,IAAI,IAAI;CAOd"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SessionTracker = void 0;
4
+ class SessionTracker {
5
+ routes = [];
6
+ startTime;
7
+ premiumCallsAvoided = 0;
8
+ providerFailuresRecovered = 0;
9
+ sensitiveFilesKeptLocal = 0;
10
+ constructor() {
11
+ this.startTime = new Date().toISOString();
12
+ }
13
+ recordRoute(route) {
14
+ this.routes.push(route);
15
+ }
16
+ recordPremiumAvoided() {
17
+ this.premiumCallsAvoided++;
18
+ }
19
+ recordFailureRecovered() {
20
+ this.providerFailuresRecovered++;
21
+ }
22
+ recordSensitiveFileKeptLocal() {
23
+ this.sensitiveFilesKeptLocal++;
24
+ }
25
+ generateReport() {
26
+ const totalTokensOptimized = this.routes.reduce((sum, r) => sum + r.estimatedTokens.input, 0);
27
+ let savingsPercent = 0;
28
+ if (this.routes.length > 0) {
29
+ const avgSavings = this.routes.reduce((sum, r) => {
30
+ if (r.fallbacks.length > 0) {
31
+ const premiumCost = r.fallbacks[0]?.estimatedCost ?? r.estimatedCost * 2;
32
+ if (premiumCost > 0) {
33
+ return sum + ((premiumCost - r.estimatedCost) / premiumCost) * 100;
34
+ }
35
+ }
36
+ return sum + (r.estimatedCost === 0 ? 100 : 40); // 100% savings for free local, 40% default
37
+ }, 0) / this.routes.length;
38
+ savingsPercent = isNaN(avgSavings) ? 0 : Math.round(avgSavings);
39
+ }
40
+ const lines = [
41
+ `Session report:`,
42
+ ` - ${this.routes.length} requests routed`,
43
+ ` - ${totalTokensOptimized.toLocaleString()} tokens optimized`,
44
+ ` - ${this.premiumCallsAvoided} premium calls avoided`,
45
+ ` - estimated savings: ${savingsPercent}%`,
46
+ ` - ${this.providerFailuresRecovered} provider failures recovered`,
47
+ ` - ${this.sensitiveFilesKeptLocal} sensitive files kept local`,
48
+ ];
49
+ return lines.join('\n');
50
+ }
51
+ explainLast() {
52
+ if (this.routes.length === 0) {
53
+ return 'No routing decisions recorded yet.';
54
+ }
55
+ const last = this.routes[this.routes.length - 1];
56
+ return last.explanation.join('\n');
57
+ }
58
+ reset() {
59
+ this.routes = [];
60
+ this.startTime = new Date().toISOString();
61
+ this.premiumCallsAvoided = 0;
62
+ this.providerFailuresRecovered = 0;
63
+ this.sensitiveFilesKeptLocal = 0;
64
+ }
65
+ }
66
+ exports.SessionTracker = SessionTracker;
67
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/core/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { Model } from '../types';
2
+ export interface LivePricingResult {
3
+ modelId: string;
4
+ inputPrice?: number;
5
+ outputPrice?: number;
6
+ contextWindow?: number;
7
+ provider: string;
8
+ source: 'openrouter' | 'manual';
9
+ lastUpdated: string;
10
+ }
11
+ export declare class DynamicPricing {
12
+ private cache;
13
+ private lastFetch;
14
+ private cacheTtlMs;
15
+ constructor(options?: {
16
+ cacheTtlMs?: number;
17
+ });
18
+ fetchOpenRouter(): Promise<LivePricingResult[]>;
19
+ enrichModels(models: Model[], pricingData: LivePricingResult[]): Model[];
20
+ getPrice(modelId: string): LivePricingResult | undefined;
21
+ getAllPrices(): LivePricingResult[];
22
+ clearCache(): void;
23
+ }
24
+ //# sourceMappingURL=dynamic-pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-pricing.d.ts","sourceRoot":"","sources":["../../src/cost/dynamic-pricing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAKjC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,GAAG,QAAQ,CAAC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAA6C;IAC1D,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,UAAU,CAAS;gBAEf,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAIvC,eAAe,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA+CrD,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,KAAK,EAAE;IAgBxE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIxD,YAAY,IAAI,iBAAiB,EAAE;IAInC,UAAU,IAAI,IAAI;CAInB"}
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DynamicPricing = void 0;
4
+ class DynamicPricing {
5
+ cache = new Map();
6
+ lastFetch = 0;
7
+ cacheTtlMs;
8
+ constructor(options) {
9
+ this.cacheTtlMs = options?.cacheTtlMs ?? 3600000; // 1 hour
10
+ }
11
+ async fetchOpenRouter() {
12
+ if (Date.now() - this.lastFetch < this.cacheTtlMs && this.cache.size > 0) {
13
+ return Array.from(this.cache.values());
14
+ }
15
+ try {
16
+ const response = await fetch('https://openrouter.ai/api/v1/models', {
17
+ signal: AbortSignal.timeout(10000),
18
+ });
19
+ if (!response.ok)
20
+ return [];
21
+ const data = await response.json();
22
+ const results = [];
23
+ for (const model of data.data ?? []) {
24
+ const inputPrice = model.pricing?.prompt ? parseFloat(model.pricing.prompt) * 1000 : undefined; // per 1K tokens
25
+ const outputPrice = model.pricing?.completion ? parseFloat(model.pricing.completion) * 1000 : undefined;
26
+ const result = {
27
+ modelId: model.id,
28
+ inputPrice,
29
+ outputPrice,
30
+ contextWindow: model.context_length,
31
+ provider: model.id.split('/')[0] ?? 'unknown',
32
+ source: 'openrouter',
33
+ lastUpdated: new Date().toISOString(),
34
+ };
35
+ this.cache.set(model.id, result);
36
+ results.push(result);
37
+ }
38
+ this.lastFetch = Date.now();
39
+ return results;
40
+ }
41
+ catch {
42
+ return Array.from(this.cache.values());
43
+ }
44
+ }
45
+ enrichModels(models, pricingData) {
46
+ const pricingMap = new Map(pricingData.map((p) => [p.modelId, p]));
47
+ return models.map((model) => {
48
+ const livePrice = pricingMap.get(model.id);
49
+ if (!livePrice)
50
+ return model;
51
+ return {
52
+ ...model,
53
+ inputPrice: livePrice.inputPrice ?? model.inputPrice,
54
+ outputPrice: livePrice.outputPrice ?? model.outputPrice,
55
+ contextWindow: livePrice.contextWindow ?? model.contextWindow,
56
+ };
57
+ });
58
+ }
59
+ getPrice(modelId) {
60
+ return this.cache.get(modelId);
61
+ }
62
+ getAllPrices() {
63
+ return Array.from(this.cache.values());
64
+ }
65
+ clearCache() {
66
+ this.cache.clear();
67
+ this.lastFetch = 0;
68
+ }
69
+ }
70
+ exports.DynamicPricing = DynamicPricing;
71
+ //# sourceMappingURL=dynamic-pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-pricing.js","sourceRoot":"","sources":["../../src/cost/dynamic-pricing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { RouteDecision, CostEstimate, TokenUsage, ContextStrategy, Model } from '../types';
2
+ export declare class CostEstimator {
3
+ estimate(route: RouteDecision, contextStrategy: ContextStrategy): CostEstimate;
4
+ estimateCostForModel(model: Model | null, inputTokens: number): number;
5
+ estimateTokens(text: string): TokenUsage;
6
+ calculateSavings(actualCost: number, premiumCost: number): number;
7
+ }
8
+ //# sourceMappingURL=estimator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimator.d.ts","sourceRoot":"","sources":["../../src/cost/estimator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAE3F,qBAAa,aAAa;IACxB,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,GAAG,YAAY;IAwB9E,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAatE,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU;IAMxC,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;CAIlE"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CostEstimator = void 0;
4
+ class CostEstimator {
5
+ estimate(route, contextStrategy) {
6
+ const inputCost = route.estimatedCost * 0.3;
7
+ const outputCost = route.estimatedCost * 0.7;
8
+ let savingsPercentage;
9
+ if (route.estimatedCost > 0 && route.fallbacks.length > 0) {
10
+ const premiumCost = route.fallbacks[0].estimatedCost * 1.5;
11
+ if (premiumCost > route.estimatedCost) {
12
+ savingsPercentage = Math.round((1 - route.estimatedCost / premiumCost) * 100);
13
+ }
14
+ }
15
+ return {
16
+ inputCost: Math.round(inputCost * 10000) / 10000,
17
+ outputCost: Math.round(outputCost * 10000) / 10000,
18
+ totalCost: Math.round(route.estimatedCost * 10000) / 10000,
19
+ currency: 'USD',
20
+ savingsPercentage,
21
+ comparedToPremium: route.fallbacks[0]?.estimatedCost
22
+ ? Math.round(route.fallbacks[0].estimatedCost * 10000) / 10000
23
+ : undefined,
24
+ };
25
+ }
26
+ estimateCostForModel(model, inputTokens) {
27
+ if (!model || model.inputPrice === undefined) {
28
+ // Default estimate
29
+ return Math.round(inputTokens / 1000 * 0.002 * 10000) / 10000;
30
+ }
31
+ const outputTokens = Math.ceil(inputTokens * 0.3);
32
+ const inputCost = (inputTokens / 1000) * (model.inputPrice / 1000);
33
+ const outputCost = (outputTokens / 1000) * ((model.outputPrice ?? model.inputPrice * 2) / 1000);
34
+ return Math.round((inputCost + outputCost) * 10000) / 10000;
35
+ }
36
+ estimateTokens(text) {
37
+ const input = Math.ceil(text.length / 4);
38
+ const output = Math.ceil(input * 0.3);
39
+ return { input, output, total: input + output };
40
+ }
41
+ calculateSavings(actualCost, premiumCost) {
42
+ if (premiumCost <= 0)
43
+ return 0;
44
+ return Math.round((1 - actualCost / premiumCost) * 100);
45
+ }
46
+ }
47
+ exports.CostEstimator = CostEstimator;
48
+ //# sourceMappingURL=estimator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"estimator.js","sourceRoot":"","sources":["../../src/cost/estimator.ts"],"names":[],"mappings":";;;AAEA,MAAa,aAAa;IACxB,QAAQ,CAAC,KAAoB,EAAE,eAAgC;QAC7D,MAAM,SAAS,GAAG,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC;QAC5C,MAAM,UAAU,GAAG,KAAK,CAAC,aAAa,GAAG,GAAG,CAAC;QAC7C,IAAI,iBAAqC,CAAC;QAE1C,IAAI,KAAK,CAAC,aAAa,GAAG,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,GAAG,CAAC;YAC3D,IAAI,WAAW,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC;gBACtC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC;YAChF,CAAC;QACH,CAAC;QAED,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,GAAG,KAAK;YAChD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,KAAK;YAClD,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,GAAG,KAAK;YAC1D,QAAQ,EAAE,KAAK;YACf,iBAAiB;YACjB,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa;gBAClD,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,KAAK,CAAC,GAAG,KAAK;gBAC9D,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;IAED,oBAAoB,CAAC,KAAmB,EAAE,WAAmB;QAC3D,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7C,mBAAmB;YACnB,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;QAChE,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,CAAC;QAClD,MAAM,SAAS,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;QACnE,MAAM,UAAU,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;QAEhG,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;IAC9D,CAAC;IAED,cAAc,CAAC,IAAY;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;QACtC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,CAAC;IAClD,CAAC;IAED,gBAAgB,CAAC,UAAkB,EAAE,WAAmB;QACtD,IAAI,WAAW,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC;IAC1D,CAAC;CACF;AAhDD,sCAgDC"}
@@ -0,0 +1,6 @@
1
+ import { RouteDecision, TaskProfile, CostEstimate, PrivacyDecision } from '../types';
2
+ export declare class ExplainabilityEngine {
3
+ explain(route: RouteDecision, task: TaskProfile, cost: CostEstimate, privacy: PrivacyDecision): string[];
4
+ explainRoute(route: RouteDecision): string[];
5
+ }
6
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/explain/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAErF,qBAAa,oBAAoB;IAC/B,OAAO,CACL,KAAK,EAAE,aAAa,EACpB,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,YAAY,EAClB,OAAO,EAAE,eAAe,GACvB,MAAM,EAAE;IAwDX,YAAY,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,EAAE;CAG7C"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExplainabilityEngine = void 0;
4
+ class ExplainabilityEngine {
5
+ explain(route, task, cost, privacy) {
6
+ const lines = [];
7
+ lines.push(`Task classified: ${task.taskType}`);
8
+ lines.push(` Complexity: ${task.complexity}`);
9
+ lines.push(` Context need: ${task.contextNeed}`);
10
+ lines.push('');
11
+ if (route.selectedGateway) {
12
+ lines.push(`Gateway: ${route.selectedGateway}`);
13
+ }
14
+ lines.push(`Selected model: ${route.selectedProvider} / ${route.selectedModel}`);
15
+ lines.push(`Confidence: ${Math.round(route.confidence * 100)}%`);
16
+ lines.push(`Score: ${route.score}`);
17
+ lines.push('');
18
+ lines.push('Selection factors:');
19
+ for (const exp of route.explanation) {
20
+ lines.push(` ${exp}`);
21
+ }
22
+ lines.push('');
23
+ lines.push(`Estimated cost: $${cost.totalCost.toFixed(4)} ${cost.currency}`);
24
+ if (cost.savingsPercentage !== undefined) {
25
+ lines.push(`Estimated savings: ${cost.savingsPercentage}% vs premium alternative`);
26
+ }
27
+ if (cost.comparedToPremium !== undefined && cost.comparedToPremium > 0) {
28
+ lines.push(`Compared to premium: $${cost.comparedToPremium.toFixed(4)}`);
29
+ }
30
+ lines.push('');
31
+ lines.push(`Context strategy: ${route.contextStrategy}`);
32
+ lines.push('');
33
+ lines.push('Privacy:');
34
+ if (privacy.findings.length === 0) {
35
+ lines.push(' No sensitive data detected');
36
+ }
37
+ else {
38
+ for (const f of privacy.findings) {
39
+ lines.push(` ${f.type} → ${f.action} (${f.severity})`);
40
+ }
41
+ }
42
+ lines.push('');
43
+ lines.push('Fallback chain:');
44
+ if (route.fallbacks.length === 0) {
45
+ lines.push(' No fallbacks available');
46
+ }
47
+ else {
48
+ for (const fb of route.fallbacks) {
49
+ lines.push(` ${fb.selectedProvider}/${fb.selectedModel} (confidence: ${Math.round(fb.confidence * 100)}%)`);
50
+ }
51
+ }
52
+ return lines;
53
+ }
54
+ explainRoute(route) {
55
+ return route.explanation;
56
+ }
57
+ }
58
+ exports.ExplainabilityEngine = ExplainabilityEngine;
59
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/explain/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ export { Mozart } from './core/mozart';
2
+ export type { MozartConfig } from './core/mozart';
3
+ export { InventoryRegistry } from './core/inventory';
4
+ export { SessionTracker } from './core/session';
5
+ export { ResultCache } from './core/cache';
6
+ export type { CacheEntry } from './core/cache';
7
+ export { PluginRegistry, pluginRegistry } from './core/plugins';
8
+ export type { MozartPlugin } from './core/plugins';
9
+ export { HealthChecker } from './core/health';
10
+ export type { HealthCheckResult } from './core/health';
11
+ export { MetricsCollector } from './core/metrics';
12
+ export type { MetricsSnapshot } from './core/metrics';
13
+ export { TaskClassifier } from './routing/classifier';
14
+ export { RoutingEngine } from './routing/router';
15
+ export type { PolicyEvalResult } from './routing/router';
16
+ export { RoutingScorer } from './routing/scorer';
17
+ export { FallbackManager } from './routing/fallback';
18
+ export type { FallbackEvent, FallbackResult } from './routing/fallback';
19
+ export { MultiStageRouter } from './routing/multistage';
20
+ export type { MultiStageStep, MultiStageResult } from './routing/multistage';
21
+ export { CircuitBreaker, CircuitBreakerError } from './routing/circuit-breaker';
22
+ export type { CircuitState, CircuitBreakerConfig } from './routing/circuit-breaker';
23
+ export { PolicyEngine } from './policy/engine';
24
+ export { loadPolicyFromEnv } from './policy/loader';
25
+ export { BUILTIN_PROFILES, getProfile, listProfiles, applyProfile } from './policy/profiles';
26
+ export type { ProfileDefinition } from './policy/profiles';
27
+ export { loadMozartConfig, generateDefaultConfig } from './policy/yaml-loader';
28
+ export type { LoadResult } from './policy/yaml-loader';
29
+ export { DynamicPricing } from './cost/dynamic-pricing';
30
+ export type { LivePricingResult } from './cost/dynamic-pricing';
31
+ export { ReliabilityTracker } from './core/reliability';
32
+ export type { ProviderReliability } from './core/reliability';
33
+ export { PrivacyGuard } from './privacy/guard';
34
+ export { ContextOptimizer } from './context/optimizer';
35
+ export { AdvancedContextOptimizer } from './context/advanced-optimizer';
36
+ export type { SummarizeOptions } from './context/advanced-optimizer';
37
+ export { CostEstimator } from './cost/estimator';
38
+ export { ExplainabilityEngine } from './explain/engine';
39
+ export { Logger } from './logs/logger';
40
+ export type { LogEntry } from './logs/logger';
41
+ export { Redactor } from './logs/redactor';
42
+ export { OllamaAdapter, LiteLLMAdapter, OpenRouterAdapter, OpenCodeAdapter, OpenClawAdapter, HermesAdapter, CursorAdapter, LMStudioAdapter, VllmAdapter, NvidiaNimAdapter, GenericOpenAIAdapter, discoverAllGenericAdapters, } from './adapters';
43
+ export type { GenericAdapterConfig } from './adapters';
44
+ export { ALL_SKILLS, ROUTE_MODEL_SKILL, EXPLAIN_ROUTE_SKILL, ESTIMATE_COST_SKILL, COMPRESS_CONTEXT_SKILL, PRIVACY_CHECK_SKILL, FALLBACK_PLAN_SKILL, INVENTORY_SKILL, } from './skills';
45
+ export { MozartApiServer, startApiServer } from './api/server';
46
+ export type { ApiServerOptions } from './api/server';
47
+ export { MozartMiddleware } from './api/middleware';
48
+ export type { MiddlewareOptions } from './api/middleware';
49
+ export { StreamingMiddleware } from './api/streaming';
50
+ export type { StreamingMiddlewareOptions } from './api/streaming';
51
+ export { MozartMcpServer } from './api/mcp';
52
+ export type { McpToolDefinition, McpRequest, McpResponse } from './api/mcp';
53
+ export { dashboardHtml } from './api/dashboard';
54
+ export { saveInventory, loadInventory, saveSession, loadSession, saveConfig, loadConfigYaml, getMozartDir, clearAllData, } from './core/persistence';
55
+ export { syncDealsForgeData } from './utils/dealsforge';
56
+ export { scanLocalCapability, estimateLocalModelCapacity } from './utils/canrunit';
57
+ export type { LocalCapability } from './utils/canrunit';
58
+ export type * from './types';
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}