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.
- package/LICENSE +21 -0
- package/README.md +250 -0
- package/dist/adapters/cursor.d.ts +10 -0
- package/dist/adapters/cursor.d.ts.map +1 -0
- package/dist/adapters/cursor.js +39 -0
- package/dist/adapters/cursor.js.map +1 -0
- package/dist/adapters/generic.d.ts +24 -0
- package/dist/adapters/generic.d.ts.map +1 -0
- package/dist/adapters/generic.js +192 -0
- package/dist/adapters/generic.js.map +1 -0
- package/dist/adapters/hermes.d.ts +10 -0
- package/dist/adapters/hermes.d.ts.map +1 -0
- package/dist/adapters/hermes.js +170 -0
- package/dist/adapters/hermes.js.map +1 -0
- package/dist/adapters/index.d.ts +13 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +27 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/litellm.d.ts +15 -0
- package/dist/adapters/litellm.d.ts.map +1 -0
- package/dist/adapters/litellm.js +238 -0
- package/dist/adapters/litellm.js.map +1 -0
- package/dist/adapters/lmstudio.d.ts +12 -0
- package/dist/adapters/lmstudio.d.ts.map +1 -0
- package/dist/adapters/lmstudio.js +128 -0
- package/dist/adapters/lmstudio.js.map +1 -0
- package/dist/adapters/nim.d.ts +12 -0
- package/dist/adapters/nim.d.ts.map +1 -0
- package/dist/adapters/nim.js +163 -0
- package/dist/adapters/nim.js.map +1 -0
- package/dist/adapters/ollama.d.ts +12 -0
- package/dist/adapters/ollama.d.ts.map +1 -0
- package/dist/adapters/ollama.js +243 -0
- package/dist/adapters/ollama.js.map +1 -0
- package/dist/adapters/openclaw.d.ts +10 -0
- package/dist/adapters/openclaw.d.ts.map +1 -0
- package/dist/adapters/openclaw.js +197 -0
- package/dist/adapters/openclaw.js.map +1 -0
- package/dist/adapters/opencode.d.ts +10 -0
- package/dist/adapters/opencode.d.ts.map +1 -0
- package/dist/adapters/opencode.js +180 -0
- package/dist/adapters/opencode.js.map +1 -0
- package/dist/adapters/openrouter.d.ts +13 -0
- package/dist/adapters/openrouter.d.ts.map +1 -0
- package/dist/adapters/openrouter.js +173 -0
- package/dist/adapters/openrouter.js.map +1 -0
- package/dist/adapters/vllm.d.ts +12 -0
- package/dist/adapters/vllm.d.ts.map +1 -0
- package/dist/adapters/vllm.js +129 -0
- package/dist/adapters/vllm.js.map +1 -0
- package/dist/api/dashboard.d.ts +3 -0
- package/dist/api/dashboard.d.ts.map +1 -0
- package/dist/api/dashboard.js +98 -0
- package/dist/api/dashboard.js.map +1 -0
- package/dist/api/mcp.d.ts +32 -0
- package/dist/api/mcp.d.ts.map +1 -0
- package/dist/api/mcp.js +215 -0
- package/dist/api/mcp.js.map +1 -0
- package/dist/api/middleware.d.ts +20 -0
- package/dist/api/middleware.d.ts.map +1 -0
- package/dist/api/middleware.js +239 -0
- package/dist/api/middleware.js.map +1 -0
- package/dist/api/server.d.ts +26 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +294 -0
- package/dist/api/server.js.map +1 -0
- package/dist/api/streaming.d.ts +19 -0
- package/dist/api/streaming.d.ts.map +1 -0
- package/dist/api/streaming.js +274 -0
- package/dist/api/streaming.js.map +1 -0
- package/dist/cli/config-init.d.ts +2 -0
- package/dist/cli/config-init.d.ts.map +1 -0
- package/dist/cli/config-init.js +73 -0
- package/dist/cli/config-init.js.map +1 -0
- package/dist/cli/main.d.ts +3 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +618 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/context/advanced-optimizer.d.ts +12 -0
- package/dist/context/advanced-optimizer.d.ts.map +1 -0
- package/dist/context/advanced-optimizer.js +64 -0
- package/dist/context/advanced-optimizer.js.map +1 -0
- package/dist/context/optimizer.d.ts +7 -0
- package/dist/context/optimizer.d.ts.map +1 -0
- package/dist/context/optimizer.js +101 -0
- package/dist/context/optimizer.js.map +1 -0
- package/dist/core/cache.d.ts +39 -0
- package/dist/core/cache.d.ts.map +1 -0
- package/dist/core/cache.js +90 -0
- package/dist/core/cache.js.map +1 -0
- package/dist/core/health.d.ts +32 -0
- package/dist/core/health.d.ts.map +1 -0
- package/dist/core/health.js +92 -0
- package/dist/core/health.js.map +1 -0
- package/dist/core/inventory.d.ts +28 -0
- package/dist/core/inventory.d.ts.map +1 -0
- package/dist/core/inventory.js +106 -0
- package/dist/core/inventory.js.map +1 -0
- package/dist/core/metrics.d.ts +48 -0
- package/dist/core/metrics.d.ts.map +1 -0
- package/dist/core/metrics.js +115 -0
- package/dist/core/metrics.js.map +1 -0
- package/dist/core/mozart.d.ts +39 -0
- package/dist/core/mozart.d.ts.map +1 -0
- package/dist/core/mozart.js +156 -0
- package/dist/core/mozart.js.map +1 -0
- package/dist/core/persistence.d.ts +13 -0
- package/dist/core/persistence.d.ts.map +1 -0
- package/dist/core/persistence.js +119 -0
- package/dist/core/persistence.js.map +1 -0
- package/dist/core/plugins.d.ts +18 -0
- package/dist/core/plugins.d.ts.map +1 -0
- package/dist/core/plugins.js +110 -0
- package/dist/core/plugins.js.map +1 -0
- package/dist/core/reliability.d.ts +23 -0
- package/dist/core/reliability.d.ts.map +1 -0
- package/dist/core/reliability.js +70 -0
- package/dist/core/reliability.js.map +1 -0
- package/dist/core/session.d.ts +17 -0
- package/dist/core/session.d.ts.map +1 -0
- package/dist/core/session.js +67 -0
- package/dist/core/session.js.map +1 -0
- package/dist/cost/dynamic-pricing.d.ts +24 -0
- package/dist/cost/dynamic-pricing.d.ts.map +1 -0
- package/dist/cost/dynamic-pricing.js +71 -0
- package/dist/cost/dynamic-pricing.js.map +1 -0
- package/dist/cost/estimator.d.ts +8 -0
- package/dist/cost/estimator.d.ts.map +1 -0
- package/dist/cost/estimator.js +48 -0
- package/dist/cost/estimator.js.map +1 -0
- package/dist/explain/engine.d.ts +6 -0
- package/dist/explain/engine.d.ts.map +1 -0
- package/dist/explain/engine.js +59 -0
- package/dist/explain/engine.js.map +1 -0
- package/dist/index.d.ts +59 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +112 -0
- package/dist/index.js.map +1 -0
- package/dist/logs/logger.d.ts +35 -0
- package/dist/logs/logger.d.ts.map +1 -0
- package/dist/logs/logger.js +73 -0
- package/dist/logs/logger.js.map +1 -0
- package/dist/logs/redactor.d.ts +6 -0
- package/dist/logs/redactor.d.ts.map +1 -0
- package/dist/logs/redactor.js +54 -0
- package/dist/logs/redactor.js.map +1 -0
- package/dist/policy/engine.d.ts +9 -0
- package/dist/policy/engine.d.ts.map +1 -0
- package/dist/policy/engine.js +55 -0
- package/dist/policy/engine.js.map +1 -0
- package/dist/policy/loader.d.ts +3 -0
- package/dist/policy/loader.d.ts.map +1 -0
- package/dist/policy/loader.js +27 -0
- package/dist/policy/loader.js.map +1 -0
- package/dist/policy/profiles.d.ts +11 -0
- package/dist/policy/profiles.d.ts.map +1 -0
- package/dist/policy/profiles.js +263 -0
- package/dist/policy/profiles.js.map +1 -0
- package/dist/policy/yaml-loader.d.ts +10 -0
- package/dist/policy/yaml-loader.d.ts.map +1 -0
- package/dist/policy/yaml-loader.js +160 -0
- package/dist/policy/yaml-loader.js.map +1 -0
- package/dist/privacy/guard.d.ts +8 -0
- package/dist/privacy/guard.d.ts.map +1 -0
- package/dist/privacy/guard.js +125 -0
- package/dist/privacy/guard.js.map +1 -0
- package/dist/routing/circuit-breaker.d.ts +23 -0
- package/dist/routing/circuit-breaker.d.ts.map +1 -0
- package/dist/routing/circuit-breaker.js +74 -0
- package/dist/routing/circuit-breaker.js.map +1 -0
- package/dist/routing/classifier.d.ts +5 -0
- package/dist/routing/classifier.d.ts.map +1 -0
- package/dist/routing/classifier.js +102 -0
- package/dist/routing/classifier.js.map +1 -0
- package/dist/routing/fallback.d.ts +27 -0
- package/dist/routing/fallback.d.ts.map +1 -0
- package/dist/routing/fallback.js +66 -0
- package/dist/routing/fallback.js.map +1 -0
- package/dist/routing/multistage.d.ts +49 -0
- package/dist/routing/multistage.d.ts.map +1 -0
- package/dist/routing/multistage.js +108 -0
- package/dist/routing/multistage.js.map +1 -0
- package/dist/routing/router.d.ts +22 -0
- package/dist/routing/router.d.ts.map +1 -0
- package/dist/routing/router.js +123 -0
- package/dist/routing/router.js.map +1 -0
- package/dist/routing/scorer.d.ts +8 -0
- package/dist/routing/scorer.d.ts.map +1 -0
- package/dist/routing/scorer.js +131 -0
- package/dist/routing/scorer.js.map +1 -0
- package/dist/skills/definitions.d.ts +10 -0
- package/dist/skills/definitions.d.ts.map +1 -0
- package/dist/skills/definitions.js +112 -0
- package/dist/skills/definitions.js.map +1 -0
- package/dist/skills/index.d.ts +3 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +14 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/types/index.d.ts +298 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +34 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/canrunit.d.ts +26 -0
- package/dist/utils/canrunit.d.ts.map +1 -0
- package/dist/utils/canrunit.js +69 -0
- package/dist/utils/canrunit.js.map +1 -0
- package/dist/utils/dealsforge.d.ts +6 -0
- package/dist/utils/dealsforge.d.ts.map +1 -0
- package/dist/utils/dealsforge.js +105 -0
- package/dist/utils/dealsforge.js.map +1 -0
- package/docs/ADAPTERS.md +129 -0
- package/docs/ARCHITECTURE.md +113 -0
- package/docs/DELEGATED_EXECUTION.md +62 -0
- package/docs/FEATURE_MATRIX.md +113 -0
- package/docs/GATEWAY_FIRST_PRINCIPLES.md +66 -0
- package/docs/INTEGRATIONS.md +94 -0
- package/docs/LIMITATIONS.md +43 -0
- package/docs/RECOMMEND_ONLY_MODE.md +82 -0
- package/docs/ROADMAP.md +70 -0
- package/docs/SECURITY.md +74 -0
- package/docs/SKILLS_AND_TOOLS.md +141 -0
- package/examples/community-adapter/TEMPLATE.md +157 -0
- package/examples/generic-tools/README.md +29 -0
- package/examples/generic-tools/mozart-tools.json +86 -0
- package/examples/hermes/README.md +29 -0
- package/examples/hermes/mozart-tool.json +48 -0
- package/examples/litellm/README.md +21 -0
- package/examples/litellm/config.yaml +39 -0
- package/examples/ollama/README.md +37 -0
- package/examples/ollama/usage.ts +59 -0
- package/examples/openclaw/README.md +26 -0
- package/examples/openclaw/mozart-skill.yaml +80 -0
- package/examples/opencode/README.md +30 -0
- package/examples/opencode/SKILL.md +47 -0
- package/examples/opencode/mozart-skill.json +64 -0
- package/examples/openrouter/README.md +21 -0
- package/examples/openrouter/config.json +14 -0
- 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
|
+
[](https://github.com/ucav/mozart-router/actions)
|
|
4
|
+
[](https://github.com/ucav/mozart-router)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
[](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"}
|