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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Ucav
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,250 @@
1
+ # Mozart
2
+
3
+ [![CI](https://github.com/ucav/mozart-router/actions/workflows/ci.yml/badge.svg)](https://github.com/ucav/mozart-router/actions)
4
+ [![Tests](https://img.shields.io/badge/tests-118%20passed-brightgreen)](https://github.com/ucav/mozart-router)
5
+ [![License](https://img.shields.io/badge/license-MIT-blue)](LICENSE)
6
+ [![Version](https://img.shields.io/badge/version-0.1.0-blue)](https://github.com/ucav/mozart-router)
7
+
8
+ **Mozart is the local conductor for AI agents** — a gateway-aware routing and orchestration layer that integrates as a skill, tool, adapter or middleware into your existing AI stack.
9
+
10
+ Mozart detects your available gateways, providers and models, then routes each task to the best option based on cost, context, latency, privacy, quotas and reliability.
11
+
12
+ ```
13
+ Gateways execute. Mozart decides.
14
+
15
+ Do not rebuild what the gateway already does.
16
+ Detect it, understand it, orchestrate it.
17
+ ```
18
+
19
+ ## Why Mozart?
20
+
21
+ - **Stop choosing models manually.** Mozart classifies your task and picks the best model.
22
+ - **Stop wasting tokens.** Context optimization reduces token usage.
23
+ - **Stop leaking sensitive context.** Privacy Guard prevents secrets from being sent to cloud models.
24
+ - **Stop breaking agent workflows when providers fail.** Automatic fallback chains keep your agents running.
25
+ - **Understand every decision.** Every route comes with a full explanation — why this model, why not the others.
26
+
27
+ ## What Mozart is
28
+
29
+ - A **skill** callable by OpenClaw, OpenCode, Hermes or custom agents
30
+ - A **tool** that agents can invoke for routing decisions
31
+ - An **adapter** that reads existing gateway configs without duplicating them
32
+ - A **middleware** you can insert between your agent and its gateway
33
+ - A **local SDK** you import into your own TypeScript/Node.js projects
34
+ - A **CLI** for diagnostics, simulation, and reporting
35
+
36
+ ## What Mozart is NOT
37
+
38
+ - Not a desktop application or separate dashboard
39
+ - Not a replacement for LiteLLM, OpenRouter, or your existing gateways
40
+ - Not a tool that asks you to re-enter all your API keys
41
+ - Not a system that stores or manages keys that gateways already handle
42
+
43
+ ## Quick start
44
+
45
+ ```bash
46
+ git clone https://github.com/ucav/mozart-router.git
47
+ cd mozart-router
48
+ npm install
49
+ npm run build
50
+
51
+ # Integration-first — detect your existing stack
52
+ npx mozart-router init --gateway opencode
53
+ npx mozart-router init --gateway openclaw
54
+ npx mozart-router init --gateway hermes
55
+
56
+ # Discover what's already available
57
+ npx mozart-router doctor
58
+
59
+ # See your full inventory
60
+ npx mozart-router inventory
61
+
62
+ # Simulate routing before executing
63
+ npx mozart-router simulate "debug my Next.js build error"
64
+
65
+ # Route a task (recommend-only by default)
66
+ npx mozart-router route "write Playwright tests"
67
+
68
+ # Understand the decision
69
+ npx mozart-router why
70
+
71
+ # Session report
72
+ npx mozart-router report
73
+
74
+ # List available Mozart skills for your agents
75
+ npx mozart-router skills
76
+ ```
77
+
78
+ > Note: until published to npm, use `npm run mozart -- <command>` for local development. The `npx mozart-router` commands will work after `npm publish`.
79
+
80
+ ## Integration modes
81
+
82
+ ### 1. Skill mode — for OpenClaw, OpenCode, Hermes
83
+
84
+ Copy the skill manifest from `examples/` into your agent:
85
+
86
+ ```bash
87
+ npx mozart-router init --gateway opencode # → examples/opencode/mozart-skill.json
88
+ npx mozart-router init --gateway openclaw # → examples/openclaw/mozart-skill.yaml
89
+ npx mozart-router init --gateway hermes # → examples/hermes/mozart-tool.json
90
+ ```
91
+
92
+ ### 2. SDK mode — import into your agent code
93
+
94
+ ```typescript
95
+ import { Mozart, OllamaAdapter, OpenRouterAdapter, OpenClawAdapter } from 'mozart-router';
96
+
97
+ const mozart = new Mozart();
98
+
99
+ // Register adapters — Mozart auto-detects each gateway
100
+ mozart.registry.registerAdapter(new OllamaAdapter());
101
+ mozart.registry.registerAdapter(new OpenRouterAdapter());
102
+ mozart.registry.registerAdapter(new OpenClawAdapter());
103
+
104
+ // Discover all gateways
105
+ await mozart.detectAll();
106
+
107
+ // Route a task
108
+ const route = await mozart.recommend('write a function to sort an array');
109
+ console.log(route.selectedModel); // e.g. "qwen3:8b"
110
+
111
+ // Full processing with privacy, cost, explanation
112
+ const response = await mozart.process({
113
+ input: 'refactor the auth module',
114
+ budgetMode: 'balanced',
115
+ privacyMode: 'balanced',
116
+ executionMode: 'recommend',
117
+ });
118
+ ```
119
+
120
+ ### 3. Adapter mode — introspect any gateway
121
+
122
+ ```typescript
123
+ import { OllamaAdapter } from 'mozart-router';
124
+
125
+ const ollama = new OllamaAdapter();
126
+ const detection = await ollama.detect();
127
+ const models = await ollama.listModels();
128
+ // Build inventory without touching API keys
129
+ ```
130
+
131
+ ### 4. Middleware mode — OpenAI-compatible proxy
132
+
133
+ ```bash
134
+ npm run mozart -- proxy --port=4445
135
+ # Point your agent to http://127.0.0.1:4445/v1
136
+ # Mozart routes every chat completion to the best model
137
+ ```
138
+
139
+ ### 5. Recommend-only mode — advisory without execution
140
+
141
+ ```typescript
142
+ const recommendation = await mozart.recommend('security audit payment module');
143
+ // Returns: selected model, confidence, cost estimate, explanation
144
+ // No execution — your existing gateway handles the actual call
145
+ ```
146
+
147
+ ## Architecture
148
+
149
+ ```
150
+ User / Agent / IDE
151
+ |
152
+ Mozart Interface (CLI · SDK · Skills · API · Middleware)
153
+ |
154
+ Gateway Introspection Layer → detects existing configs non-destructively
155
+ |
156
+ Provider & Model Inventory → built from detected gateways
157
+ |
158
+ Task Classifier → heuristic, local, no LLM needed
159
+ |
160
+ Policy Engine → privacy, budget, routing rules
161
+ |
162
+ Privacy Guard → scans for secrets, blocks cloud leaks
163
+ |
164
+ Context Optimizer → reduces token waste
165
+ |
166
+ Routing Engine → 7-dimension scoring per model
167
+ |
168
+ Explainability → every decision explained
169
+ |
170
+ Execution Delegation → delegates to existing gateway
171
+ |
172
+ Existing Gateway → LiteLLM · OpenRouter · Ollama · ...
173
+ ```
174
+
175
+ ## Feature matrix
176
+
177
+ See [docs/FEATURE_MATRIX.md](docs/FEATURE_MATRIX.md) for the complete status of every module.
178
+
179
+ ## Core commands
180
+
181
+ | Command | Description |
182
+ |---------|-------------|
183
+ | `mozart doctor` | Detect gateways, providers and models |
184
+ | `mozart inventory` | Show full inventory as JSON |
185
+ | `mozart simulate <task>` | Simulate routing for a task |
186
+ | `mozart route <task>` | Route a task (recommend-only) |
187
+ | `mozart why` | Explain the last routing decision |
188
+ | `mozart report` | Show session report |
189
+ | `mozart skills` | List available Mozart skills |
190
+ | `mozart profiles` | List built-in policy profiles |
191
+ | `mozart policy list` | List available policy profiles |
192
+ | `mozart start [--port=4444]` | Start local HTTP API + dashboard |
193
+ | `mozart stream [--port=4445]` | Start streaming middleware (SSE) |
194
+ | `mozart proxy [--port=4445]` | Start OpenAI-compatible middleware |
195
+ | `mozart mcp` | Start MCP server (stdlib) |
196
+ | `mozart config init` | Interactive config generator |
197
+ | `mozart plugins` | List registered plugins |
198
+ | `mozart metrics` | Export metrics (JSON + Prometheus) |
199
+ | `mozart health` | Health check all adapters |
200
+ | `mozart scan-local` | Scan local hardware capabilities |
201
+ | `mozart sync dealsforge` | Load DealsForge provider intelligence |
202
+ | `mozart init --gateway <name>` | Generate integration files |
203
+ | `mozart reset` | Clear all local data |
204
+
205
+ ## Skills
206
+
207
+ Mozart exposes these skills for agents:
208
+
209
+ | Skill | Description |
210
+ |-------|-------------|
211
+ | `mozart.route_model` | Choose best model/provider for a task |
212
+ | `mozart.explain_route` | Explain why a model was chosen |
213
+ | `mozart.estimate_cost` | Estimate cost before execution |
214
+ | `mozart.compress_context` | Optimize context for token savings |
215
+ | `mozart.privacy_check` | Scan content for secrets |
216
+ | `mozart.fallback_plan` | Generate fallback execution plan |
217
+ | `mozart.inventory` | Return current inventory |
218
+
219
+ ## Documentation
220
+
221
+ | Document | Content |
222
+ |----------|---------|
223
+ | [ARCHITECTURE](docs/ARCHITECTURE.md) | System design and module dependencies |
224
+ | [GATEWAY_FIRST_PRINCIPLES](docs/GATEWAY_FIRST_PRINCIPLES.md) | Why Mozart doesn't replace gateways |
225
+ | [FEATURE_MATRIX](docs/FEATURE_MATRIX.md) | Complete feature status |
226
+ | [INTEGRATIONS](docs/INTEGRATIONS.md) | Supported gateways and agents |
227
+ | [ADAPTERS](docs/ADAPTERS.md) | Adapter reference and how to create new ones |
228
+ | [SKILLS_AND_TOOLS](docs/SKILLS_AND_TOOLS.md) | Skill/tool manifest reference |
229
+ | [RECOMMEND_ONLY_MODE](docs/RECOMMEND_ONLY_MODE.md) | How Mozart works without execution |
230
+ | [SECURITY](docs/SECURITY.md) | Security design and privacy guard |
231
+ | [LIMITATIONS](docs/LIMITATIONS.md) | Honest limits and constraints |
232
+ | [ROADMAP](docs/ROADMAP.md) | Development plans |
233
+
234
+ ## Security
235
+
236
+ - All secrets are redacted in logs (see [SECURITY](docs/SECURITY.md))
237
+ - No API keys are stored or logged
238
+ - Privacy Guard scans content before routing
239
+ - Local-only mode prevents cloud routing
240
+ - No mandatory telemetry
241
+ - All processing is local by default
242
+ - See [reports/SECURITY_AUDIT.md](reports/SECURITY_AUDIT.md) for full audit
243
+
244
+ ## Contributing
245
+
246
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for contribution guidelines.
247
+
248
+ ## License
249
+
250
+ MIT — see [LICENSE](LICENSE)
@@ -0,0 +1,10 @@
1
+ import { GatewayAdapter, DetectionResult, GatewayConfigSummary, Provider, Model } from '../types';
2
+ export declare class CursorAdapter implements GatewayAdapter {
3
+ id: string;
4
+ name: string;
5
+ detect(): Promise<DetectionResult>;
6
+ readConfig(): Promise<GatewayConfigSummary>;
7
+ listProviders(): Promise<Provider[]>;
8
+ listModels(): Promise<Model[]>;
9
+ }
10
+ //# sourceMappingURL=cursor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../src/adapters/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,KAAK,EACN,MAAM,UAAU,CAAC;AAElB,qBAAa,aAAc,YAAW,cAAc;IAClD,EAAE,SAAY;IACd,IAAI,SAAY;IAEV,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IAgBlC,UAAU,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAU3C,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAIpC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;CAGrC"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CursorAdapter = void 0;
4
+ class CursorAdapter {
5
+ id = 'cursor';
6
+ name = 'Cursor';
7
+ async detect() {
8
+ return {
9
+ detected: false,
10
+ gatewayId: this.id,
11
+ gatewayName: this.name,
12
+ status: 'not_found',
13
+ providersCount: 0,
14
+ modelsCount: 0,
15
+ details: [
16
+ 'Cursor adapter is a stub — direct integration depends on Cursor extension API.',
17
+ 'Mozart can be exposed as local endpoint for Cursor to consume.',
18
+ 'Alternatively, use Mozart as advisory layer via CLI or SDK.',
19
+ ],
20
+ };
21
+ }
22
+ async readConfig() {
23
+ return {
24
+ gatewayId: this.id,
25
+ gatewayName: this.name,
26
+ providers: [],
27
+ models: [],
28
+ capabilities: ['ide', 'coding', 'agent', 'editing'],
29
+ };
30
+ }
31
+ async listProviders() {
32
+ return [];
33
+ }
34
+ async listModels() {
35
+ return [];
36
+ }
37
+ }
38
+ exports.CursorAdapter = CursorAdapter;
39
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../src/adapters/cursor.ts"],"names":[],"mappings":";;;AAQA,MAAa,aAAa;IACxB,EAAE,GAAG,QAAQ,CAAC;IACd,IAAI,GAAG,QAAQ,CAAC;IAEhB,KAAK,CAAC,MAAM;QACV,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,SAAS,EAAE,IAAI,CAAC,EAAE;YAClB,WAAW,EAAE,IAAI,CAAC,IAAI;YACtB,MAAM,EAAE,WAAW;YACnB,cAAc,EAAE,CAAC;YACjB,WAAW,EAAE,CAAC;YACd,OAAO,EAAE;gBACP,gFAAgF;gBAChF,gEAAgE;gBAChE,6DAA6D;aAC9D;SACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,EAAE;YAClB,WAAW,EAAE,IAAI,CAAC,IAAI;YACtB,SAAS,EAAE,EAAE;YACb,MAAM,EAAE,EAAE;YACV,YAAY,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;SACpD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,UAAU;QACd,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AArCD,sCAqCC"}
@@ -0,0 +1,24 @@
1
+ import { GatewayAdapter, DetectionResult, Provider, Model, ExecutionTarget, ExecutionRequest, ExecutionResult, RouteDecision } from '../types';
2
+ export interface GenericAdapterConfig {
3
+ id: string;
4
+ name: string;
5
+ baseUrl: string;
6
+ apiKeyEnv?: string;
7
+ timeout?: number;
8
+ }
9
+ export declare class GenericOpenAIAdapter implements GatewayAdapter {
10
+ id: string;
11
+ name: string;
12
+ private baseUrl;
13
+ private apiKeyEnv?;
14
+ private timeout;
15
+ constructor(config: GenericAdapterConfig);
16
+ private headers;
17
+ detect(): Promise<DetectionResult>;
18
+ listProviders(): Promise<Provider[]>;
19
+ listModels(): Promise<Model[]>;
20
+ getExecutionTarget(decision: RouteDecision): Promise<ExecutionTarget>;
21
+ execute(request: ExecutionRequest): Promise<ExecutionResult>;
22
+ }
23
+ export declare function discoverAllGenericAdapters(): Promise<GenericOpenAIAdapter[]>;
24
+ //# sourceMappingURL=generic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.d.ts","sourceRoot":"","sources":["../../src/adapters/generic.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,eAAe,EACf,QAAQ,EACR,KAAK,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,aAAa,EACd,MAAM,UAAU,CAAC;AAKlB,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,oBAAqB,YAAW,cAAc;IACzD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,oBAAoB;IAQxC,OAAO,CAAC,OAAO;IAQT,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IAwClC,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAoBpC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAkC9B,kBAAkB,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC;IAYrE,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;CA2BnE;AAkBD,wBAAsB,0BAA0B,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAwBlF"}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GenericOpenAIAdapter = void 0;
4
+ exports.discoverAllGenericAdapters = discoverAllGenericAdapters;
5
+ class GenericOpenAIAdapter {
6
+ id;
7
+ name;
8
+ baseUrl;
9
+ apiKeyEnv;
10
+ timeout;
11
+ constructor(config) {
12
+ this.id = config.id;
13
+ this.name = config.name;
14
+ this.baseUrl = config.baseUrl.replace(/\/+$/, '');
15
+ this.apiKeyEnv = config.apiKeyEnv;
16
+ this.timeout = config.timeout ?? 5000;
17
+ }
18
+ headers() {
19
+ const h = { 'Content-Type': 'application/json' };
20
+ if (this.apiKeyEnv && process.env[this.apiKeyEnv]) {
21
+ h['Authorization'] = `Bearer ${process.env[this.apiKeyEnv]}`;
22
+ }
23
+ return h;
24
+ }
25
+ async detect() {
26
+ const details = [];
27
+ let modelsCount = 0;
28
+ let status = 'not_found';
29
+ try {
30
+ const response = await fetch(`${this.baseUrl}/v1/models`, {
31
+ headers: this.headers(),
32
+ signal: AbortSignal.timeout(this.timeout),
33
+ });
34
+ if (response.ok) {
35
+ const data = await response.json();
36
+ const models = data.data ?? [];
37
+ modelsCount = models.length;
38
+ status = 'active';
39
+ details.push(`OpenAI-compatible endpoint detected: ${this.baseUrl}`);
40
+ details.push(`${modelsCount} models found`);
41
+ for (const m of models.slice(0, 10)) {
42
+ details.push(` - ${m.id}`);
43
+ }
44
+ if (models.length > 10) {
45
+ details.push(` ... and ${models.length - 10} more`);
46
+ }
47
+ }
48
+ }
49
+ catch (err) {
50
+ details.push(`No response from ${this.baseUrl}: ${String(err).slice(0, 80)}`);
51
+ }
52
+ return {
53
+ detected: status !== 'not_found',
54
+ gatewayId: this.id,
55
+ gatewayName: this.name,
56
+ status,
57
+ providersCount: status !== 'not_found' ? 1 : 0,
58
+ modelsCount,
59
+ details,
60
+ };
61
+ }
62
+ async listProviders() {
63
+ const hasKey = this.apiKeyEnv ? !!process.env[this.apiKeyEnv] : true;
64
+ return [
65
+ {
66
+ id: this.id,
67
+ name: this.name,
68
+ source: 'detected',
69
+ gateway: this.id,
70
+ baseUrl: this.baseUrl,
71
+ supportsModelsEndpoint: true,
72
+ supportsStreaming: true,
73
+ supportsTools: 'unknown',
74
+ supportsJsonMode: 'unknown',
75
+ privacyLevel: this.id.includes('local') || this.baseUrl.includes('localhost') || this.baseUrl.includes('127.0.0.1') ? 'local' : 'cloud',
76
+ status: hasKey ? 'available' : 'limited',
77
+ lastCheckedAt: new Date().toISOString(),
78
+ },
79
+ ];
80
+ }
81
+ async listModels() {
82
+ const models = [];
83
+ try {
84
+ const response = await fetch(`${this.baseUrl}/v1/models`, {
85
+ headers: this.headers(),
86
+ signal: AbortSignal.timeout(this.timeout),
87
+ });
88
+ if (response.ok) {
89
+ const data = await response.json();
90
+ for (const entry of data.data ?? []) {
91
+ const isLocal = this.baseUrl.includes('localhost') || this.baseUrl.includes('127.0.0.1');
92
+ models.push({
93
+ id: entry.id,
94
+ providerId: this.id,
95
+ gatewayId: this.id,
96
+ displayName: entry.id,
97
+ family: entry.owned_by,
98
+ modality: ['text'],
99
+ contextWindow: isLocal ? 8192 : 32768,
100
+ latencyClass: isLocal ? 'fast' : 'medium',
101
+ qualityClass: 'medium',
102
+ strengths: isLocal ? ['local', 'private', 'free'] : ['openai_compatible'],
103
+ weaknesses: ['capabilities_unknown'],
104
+ privacyLevel: isLocal ? 'local' : 'cloud',
105
+ availability: 'available',
106
+ sourceConfidence: 'high',
107
+ lastCheckedAt: new Date().toISOString(),
108
+ });
109
+ }
110
+ }
111
+ }
112
+ catch { /* no models endpoint */ }
113
+ return models;
114
+ }
115
+ async getExecutionTarget(decision) {
116
+ return {
117
+ adapter: this.id,
118
+ provider: this.id,
119
+ model: decision.selectedModel,
120
+ baseUrl: this.baseUrl,
121
+ requiresApiKey: !!this.apiKeyEnv,
122
+ apiKeyManagedBy: this.apiKeyEnv ? 'env' : 'none',
123
+ method: 'direct_http',
124
+ };
125
+ }
126
+ async execute(request) {
127
+ try {
128
+ const response = await fetch(`${this.baseUrl}/v1/chat/completions`, {
129
+ method: 'POST',
130
+ headers: this.headers(),
131
+ body: JSON.stringify({
132
+ model: request.model,
133
+ messages: [{ role: 'user', content: request.input }],
134
+ stream: false,
135
+ }),
136
+ signal: AbortSignal.timeout(60000),
137
+ });
138
+ if (!response.ok) {
139
+ const errText = await response.text().catch(() => '');
140
+ return { success: false, error: `${this.name} error ${response.status}: ${errText.slice(0, 200)}`, delegated: false };
141
+ }
142
+ const data = await response.json();
143
+ return {
144
+ success: true,
145
+ output: data.choices?.[0]?.message?.content ?? '',
146
+ tokens: data.usage ? { input: data.usage.prompt_tokens ?? 0, output: data.usage.completion_tokens ?? 0, total: data.usage.total_tokens ?? 0 } : undefined,
147
+ delegated: false,
148
+ };
149
+ }
150
+ catch (err) {
151
+ return { success: false, error: `${this.name} execution failed: ${err}`, delegated: false };
152
+ }
153
+ }
154
+ }
155
+ exports.GenericOpenAIAdapter = GenericOpenAIAdapter;
156
+ // ── Auto-discovery utility ─────────────────────────────────
157
+ const COMMON_GATEWAY_URLS = [
158
+ { id: 'ollama-openai', name: 'Ollama (OpenAI endpoint)', url: 'http://localhost:11434/v1' },
159
+ { id: 'lmstudio', name: 'LM Studio', url: 'http://localhost:1234/v1' },
160
+ { id: 'vllm-local', name: 'vLLM (local)', url: 'http://localhost:8000/v1' },
161
+ { id: 'litellm-local', name: 'LiteLLM (local)', url: 'http://localhost:4000/v1' },
162
+ { id: 'openrouter-generic', name: 'OpenRouter', url: 'https://openrouter.ai/api/v1', apiKeyEnv: 'OPENROUTER_API_KEY' },
163
+ { id: 'openai-generic', name: 'OpenAI', url: 'https://api.openai.com/v1', apiKeyEnv: 'OPENAI_API_KEY' },
164
+ { id: 'groq-generic', name: 'Groq', url: 'https://api.groq.com/openai/v1', apiKeyEnv: 'GROQ_API_KEY' },
165
+ { id: 'together-generic', name: 'Together AI', url: 'https://api.together.xyz/v1', apiKeyEnv: 'TOGETHER_API_KEY' },
166
+ { id: 'deepseek-generic', name: 'DeepSeek', url: 'https://api.deepseek.com/v1', apiKeyEnv: 'DEEPSEEK_API_KEY' },
167
+ { id: 'fireworks-generic', name: 'Fireworks', url: 'https://api.fireworks.ai/inference/v1', apiKeyEnv: 'FIREWORKS_API_KEY' },
168
+ { id: 'mistral-generic', name: 'Mistral', url: 'https://api.mistral.ai/v1', apiKeyEnv: 'MISTRAL_API_KEY' },
169
+ ];
170
+ async function discoverAllGenericAdapters() {
171
+ const discovered = [];
172
+ const results = await Promise.allSettled(COMMON_GATEWAY_URLS.map(async (entry) => {
173
+ const adapter = new GenericOpenAIAdapter({
174
+ id: entry.id,
175
+ name: entry.name,
176
+ baseUrl: entry.url,
177
+ apiKeyEnv: entry.apiKeyEnv,
178
+ timeout: 3000,
179
+ });
180
+ const detection = await adapter.detect();
181
+ if (detection.detected)
182
+ return adapter;
183
+ return null;
184
+ }));
185
+ for (const result of results) {
186
+ if (result.status === 'fulfilled' && result.value) {
187
+ discovered.push(result.value);
188
+ }
189
+ }
190
+ return discovered;
191
+ }
192
+ //# sourceMappingURL=generic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic.js","sourceRoot":"","sources":["../../src/adapters/generic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { GatewayAdapter, DetectionResult, GatewayConfigSummary, Provider, Model } from '../types';
2
+ export declare class HermesAdapter implements GatewayAdapter {
3
+ id: string;
4
+ name: string;
5
+ detect(): Promise<DetectionResult>;
6
+ readConfig(): Promise<GatewayConfigSummary>;
7
+ listProviders(): Promise<Provider[]>;
8
+ listModels(): Promise<Model[]>;
9
+ }
10
+ //# sourceMappingURL=hermes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hermes.d.ts","sourceRoot":"","sources":["../../src/adapters/hermes.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,QAAQ,EACR,KAAK,EACN,MAAM,UAAU,CAAC;AAkBlB,qBAAa,aAAc,YAAW,cAAc;IAClD,EAAE,SAAY;IACd,IAAI,SAAkB;IAEhB,MAAM,IAAI,OAAO,CAAC,eAAe,CAAC;IAgDlC,UAAU,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAQ3C,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAqBpC,UAAU,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;CAoCrC"}