airlock-bot 0.2.19 → 0.2.20
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/README.md +162 -24
- package/dist/backend/cli/adapter.d.ts.map +1 -1
- package/dist/backend/cli/adapter.js +7 -1
- package/dist/backend/cli/adapter.js.map +1 -1
- package/dist/backend/exec-adapter.d.ts.map +1 -1
- package/dist/backend/exec-adapter.js +2 -1
- package/dist/backend/exec-adapter.js.map +1 -1
- package/dist/backend/factory.d.ts.map +1 -1
- package/dist/backend/factory.js +3 -2
- package/dist/backend/factory.js.map +1 -1
- package/dist/backend/mcp-adapter.d.ts +7 -1
- package/dist/backend/mcp-adapter.d.ts.map +1 -1
- package/dist/backend/mcp-adapter.js +49 -1
- package/dist/backend/mcp-adapter.js.map +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +23 -0
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +1518 -16
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +151 -3
- package/dist/config/schema.js.map +1 -1
- package/dist/hitl/engine.d.ts +2 -0
- package/dist/hitl/engine.d.ts.map +1 -1
- package/dist/hitl/engine.js +2 -0
- package/dist/hitl/engine.js.map +1 -1
- package/dist/hitl/formatter.d.ts.map +1 -1
- package/dist/hitl/formatter.js +17 -1
- package/dist/hitl/formatter.js.map +1 -1
- package/dist/hitl/providers/tui.d.ts.map +1 -1
- package/dist/hitl/providers/tui.js +4 -0
- package/dist/hitl/providers/tui.js.map +1 -1
- package/dist/hitl/providers/types.d.ts +2 -0
- package/dist/hitl/providers/types.d.ts.map +1 -1
- package/dist/middleware/chain-builder.d.ts.map +1 -1
- package/dist/middleware/chain-builder.js +3 -1
- package/dist/middleware/chain-builder.js.map +1 -1
- package/dist/middleware/core/execute.d.ts.map +1 -1
- package/dist/middleware/core/execute.js +9 -3
- package/dist/middleware/core/execute.js.map +1 -1
- package/dist/middleware/core/hitl-gate.d.ts.map +1 -1
- package/dist/middleware/core/hitl-gate.js +16 -3
- package/dist/middleware/core/hitl-gate.js.map +1 -1
- package/dist/middleware/core/sandbox.d.ts +3 -0
- package/dist/middleware/core/sandbox.d.ts.map +1 -0
- package/dist/middleware/core/sandbox.js +15 -0
- package/dist/middleware/core/sandbox.js.map +1 -0
- package/dist/registry/registry.d.ts +1 -1
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +36 -18
- package/dist/registry/registry.js.map +1 -1
- package/dist/sandbox/index.d.ts +39 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +147 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/tools/exec.d.ts +2 -1
- package/dist/tools/exec.d.ts.map +1 -1
- package/dist/tools/exec.js +5 -2
- package/dist/tools/exec.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/examples/gateway.yaml +30 -0
- package/examples/sandbox-presets.yaml +142 -0
- package/package.json +7 -1
- package/schema.json +293 -3
package/README.md
CHANGED
|
@@ -6,6 +6,13 @@
|
|
|
6
6
|
|
|
7
7
|
A permissions-aware MCP gateway that sits between AI agents (Claude Code, Cursor, OpenClaw, etc.) and your downstream tool servers, CLI tools, and REST APIs. Airlock enforces per-agent allowlists, requires human approval for sensitive operations, and keeps a full audit trail of every tool call.
|
|
8
8
|
|
|
9
|
+
Documentation now lives in the VitePress docs site under `docs/`.
|
|
10
|
+
|
|
11
|
+
- Run locally: `npm run docs:dev`
|
|
12
|
+
- Build static docs: `npm run docs:build`
|
|
13
|
+
- Preview build: `npm run docs:preview`
|
|
14
|
+
- Read the entry page: `docs/index.md`
|
|
15
|
+
|
|
9
16
|
```
|
|
10
17
|
Agent (Claude Code / Cursor / OpenClaw)
|
|
11
18
|
│ stdio or SSE
|
|
@@ -142,11 +149,11 @@ Reference the output in your config:
|
|
|
142
149
|
clis:
|
|
143
150
|
git:
|
|
144
151
|
discovered: ./git-commands.yaml
|
|
145
|
-
max_output_bytes: 30000
|
|
152
|
+
max_output_bytes: 30000 # default matches Claude Code's limit
|
|
146
153
|
commands:
|
|
147
154
|
# Inline commands override discovered ones with the same name
|
|
148
155
|
custom-deploy:
|
|
149
|
-
exec:
|
|
156
|
+
exec: 'git push origin main'
|
|
150
157
|
params: {}
|
|
151
158
|
```
|
|
152
159
|
|
|
@@ -194,9 +201,9 @@ providers:
|
|
|
194
201
|
github:
|
|
195
202
|
type: stdio
|
|
196
203
|
command: npx
|
|
197
|
-
args: [
|
|
204
|
+
args: ['-y', '@modelcontextprotocol/server-github']
|
|
198
205
|
env:
|
|
199
|
-
GITHUB_PERSONAL_ACCESS_TOKEN:
|
|
206
|
+
GITHUB_PERSONAL_ACCESS_TOKEN: '${GITHUB_TOKEN}'
|
|
200
207
|
|
|
201
208
|
exec: builtin
|
|
202
209
|
http: builtin
|
|
@@ -212,7 +219,7 @@ clis:
|
|
|
212
219
|
exec: git status
|
|
213
220
|
params: {}
|
|
214
221
|
log:
|
|
215
|
-
exec:
|
|
222
|
+
exec: 'git log --oneline -n {count}'
|
|
216
223
|
params:
|
|
217
224
|
count:
|
|
218
225
|
type: number
|
|
@@ -249,25 +256,25 @@ agents:
|
|
|
249
256
|
helena:
|
|
250
257
|
extends: [readonly, developer]
|
|
251
258
|
exec:
|
|
252
|
-
allow: [
|
|
253
|
-
ask:
|
|
254
|
-
deny:
|
|
259
|
+
allow: ['git status', 'git diff*', 'npm test*']
|
|
260
|
+
ask: ['git push*']
|
|
261
|
+
deny: ['sudo *', 'rm -rf *']
|
|
255
262
|
env:
|
|
256
|
-
PATH:
|
|
263
|
+
PATH: '/usr/local/bin:/usr/bin:/bin'
|
|
257
264
|
http:
|
|
258
|
-
domain_allowlist: [
|
|
265
|
+
domain_allowlist: ['api.github.com', '*.sentry.io']
|
|
259
266
|
|
|
260
267
|
claude-code:
|
|
261
268
|
extends: [readonly]
|
|
262
269
|
exec:
|
|
263
|
-
allow: [
|
|
264
|
-
deny: [
|
|
270
|
+
allow: ['git status', 'git diff*', 'npm test']
|
|
271
|
+
deny: ['*']
|
|
265
272
|
|
|
266
273
|
approvals:
|
|
267
274
|
provider:
|
|
268
275
|
type: telegram
|
|
269
|
-
bot_token:
|
|
270
|
-
chat_id:
|
|
276
|
+
bot_token: '${TELEGRAM_BOT_TOKEN}'
|
|
277
|
+
chat_id: '${TELEGRAM_CHAT_ID}'
|
|
271
278
|
timeout_ms: 300000
|
|
272
279
|
batch_window_ms: 10000
|
|
273
280
|
```
|
|
@@ -276,18 +283,149 @@ Precedence: **deny > ask > allow > default-deny**
|
|
|
276
283
|
|
|
277
284
|
See [`examples/gateway.yaml`](examples/gateway.yaml) for a fully annotated reference config and [`examples/profiles.yaml`](examples/profiles.yaml) for composable profile examples.
|
|
278
285
|
|
|
286
|
+
## Sandbox presets and tool variants
|
|
287
|
+
|
|
288
|
+
Airlock can expose multiple names for the same underlying tool by using `tool_overrides.<name>.alias_of`.
|
|
289
|
+
This is especially useful when you want different approval posture for the same capability:
|
|
290
|
+
|
|
291
|
+
- a tightly sandboxed variant that is safe enough to `allow`
|
|
292
|
+
- a broader variant that still goes through `ask`
|
|
293
|
+
|
|
294
|
+
That pattern helps reduce approval fatigue without giving up higher-power versions of the tool.
|
|
295
|
+
|
|
296
|
+
### Why use presets?
|
|
297
|
+
|
|
298
|
+
Sandbox config gets repetitive quickly. A typical local-only transform tool wants the same shape every time:
|
|
299
|
+
|
|
300
|
+
- read the repo
|
|
301
|
+
- write only to `/tmp`
|
|
302
|
+
- deny secret directories like `~/.ssh`
|
|
303
|
+
- no outbound network
|
|
304
|
+
|
|
305
|
+
Top-level `sandbox_presets` let you define that once and reuse it across agents and tool variants.
|
|
306
|
+
|
|
307
|
+
### Example: safe Python fast path + approved full Python
|
|
308
|
+
|
|
309
|
+
```yaml
|
|
310
|
+
providers:
|
|
311
|
+
exec: builtin
|
|
312
|
+
|
|
313
|
+
sandbox_presets:
|
|
314
|
+
local_transform:
|
|
315
|
+
filesystem:
|
|
316
|
+
allow_read:
|
|
317
|
+
- '.'
|
|
318
|
+
allow_write:
|
|
319
|
+
- '/tmp'
|
|
320
|
+
- '/private/tmp'
|
|
321
|
+
deny_read:
|
|
322
|
+
- '~/.ssh'
|
|
323
|
+
- '~/.aws'
|
|
324
|
+
- '.env'
|
|
325
|
+
deny_write:
|
|
326
|
+
- '.'
|
|
327
|
+
network:
|
|
328
|
+
allowed_domains: []
|
|
329
|
+
denied_domains: []
|
|
330
|
+
|
|
331
|
+
github_only:
|
|
332
|
+
network:
|
|
333
|
+
allowed_domains:
|
|
334
|
+
- 'github.com'
|
|
335
|
+
- '*.github.com'
|
|
336
|
+
- 'api.github.com'
|
|
337
|
+
denied_domains: []
|
|
338
|
+
|
|
339
|
+
agents:
|
|
340
|
+
claude-code:
|
|
341
|
+
allow:
|
|
342
|
+
- 'python/sandboxed'
|
|
343
|
+
ask:
|
|
344
|
+
- 'python/full'
|
|
345
|
+
- 'python/github'
|
|
346
|
+
|
|
347
|
+
sandbox:
|
|
348
|
+
enabled: true
|
|
349
|
+
presets:
|
|
350
|
+
- local_transform
|
|
351
|
+
|
|
352
|
+
tool_overrides:
|
|
353
|
+
python/sandboxed:
|
|
354
|
+
alias_of: 'exec/run'
|
|
355
|
+
description: 'Run Python for local transformations only'
|
|
356
|
+
|
|
357
|
+
python/full:
|
|
358
|
+
alias_of: 'exec/run'
|
|
359
|
+
description: 'Run Python with broader permissions after approval'
|
|
360
|
+
sandbox:
|
|
361
|
+
filesystem:
|
|
362
|
+
allow_write:
|
|
363
|
+
- '.'
|
|
364
|
+
- '/tmp'
|
|
365
|
+
- '/private/tmp'
|
|
366
|
+
deny_write: []
|
|
367
|
+
network:
|
|
368
|
+
allowed_domains:
|
|
369
|
+
- 'pypi.org'
|
|
370
|
+
- '*.pythonhosted.org'
|
|
371
|
+
denied_domains: []
|
|
372
|
+
|
|
373
|
+
python/github:
|
|
374
|
+
alias_of: 'exec/run'
|
|
375
|
+
description: 'Run Python with GitHub-only network access after approval'
|
|
376
|
+
sandbox_presets:
|
|
377
|
+
- github_only
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
In this example:
|
|
381
|
+
|
|
382
|
+
- `python/sandboxed` inherits the agent's `local_transform` preset and can be broadly allowed
|
|
383
|
+
- `python/full` keeps the same base tool but overrides filesystem and network to be more permissive, so it should stay in `ask`
|
|
384
|
+
- `python/github` reuses the same local transform defaults but adds a reusable GitHub-only network preset
|
|
385
|
+
|
|
386
|
+
### Preset merge rules
|
|
387
|
+
|
|
388
|
+
Presets are expanded during config parsing.
|
|
389
|
+
|
|
390
|
+
- `sandbox.presets` applies to the whole agent sandbox baseline
|
|
391
|
+
- `tool_overrides.<tool>.sandbox_presets` applies only to that tool variant
|
|
392
|
+
- explicit `sandbox` values on the tool override win over preset values when they conflict
|
|
393
|
+
- deny lists are additive
|
|
394
|
+
- allow lists usually replace the previous value so the tool variant can define a tighter or broader envelope intentionally
|
|
395
|
+
|
|
396
|
+
### Approval and audit visibility
|
|
397
|
+
|
|
398
|
+
When a tool call requires approval, Airlock includes the resolved sandbox summary in the approval payload and formatter output.
|
|
399
|
+
That means operators can see things like:
|
|
400
|
+
|
|
401
|
+
- which presets were applied
|
|
402
|
+
- whether network is disabled or limited to specific domains
|
|
403
|
+
- where writes are allowed
|
|
404
|
+
- which paths are explicitly denied
|
|
405
|
+
|
|
406
|
+
Audit entries also include the resolved sandbox context alongside the tool arguments, so you can later verify not just what command ran, but under what safety envelope it ran.
|
|
407
|
+
|
|
408
|
+
### Practical guidance
|
|
409
|
+
|
|
410
|
+
- Use a sandboxed `allow` variant for cheap local work like JSON transforms, parsing, codegen, or text munging
|
|
411
|
+
- Keep networked or repo-writing variants in `ask` until you've smoke-tested the exact runtime you care about
|
|
412
|
+
- Prefer a small number of named presets such as `local_transform`, `github_only`, `npm_registry`, or `readonly_repo`
|
|
413
|
+
- If a tool needs a one-off tweak, put that in the tool override instead of copying a giant sandbox block everywhere
|
|
414
|
+
|
|
415
|
+
See [`examples/sandbox-presets.yaml`](examples/sandbox-presets.yaml) for a fuller example config focused on this pattern.
|
|
416
|
+
|
|
279
417
|
## HITL providers
|
|
280
418
|
|
|
281
|
-
| Provider
|
|
282
|
-
|
|
283
|
-
| TUI
|
|
284
|
-
| macOS dialog
|
|
285
|
-
| Dashboard
|
|
286
|
-
| Telegram bot
|
|
287
|
-
| Slack webhook
|
|
288
|
-
| Generic webhook | `webhook`
|
|
289
|
-
| OpenClaw
|
|
290
|
-
| stdio
|
|
419
|
+
| Provider | Config `type` | Notes |
|
|
420
|
+
| --------------- | ------------- | ------------------------------------------------------------------------------------------------- |
|
|
421
|
+
| TUI | `tui` | Terminal UI on stderr — `[a]pprove` / `[d]eny` with `j/k` navigation via `/dev/tty` |
|
|
422
|
+
| macOS dialog | `macos` | Native approve/deny popup via `osascript` — best for local dev on Mac |
|
|
423
|
+
| Dashboard | `dashboard` | Localhost web UI (default port 4112) with live SSE updates |
|
|
424
|
+
| Telegram bot | `telegram` | Long-polls for replies; reply `approve ABC123` or `deny ABC123` |
|
|
425
|
+
| Slack webhook | `slack` | Incoming webhook, fire-and-forget; pair with slash commands for approvals |
|
|
426
|
+
| Generic webhook | `webhook` | POSTs `{requests, text}` JSON; configurable headers |
|
|
427
|
+
| OpenClaw | `openclaw` | WebSocket RPC to OpenClaw gateway; see [`examples/openclaw-setup.md`](examples/openclaw-setup.md) |
|
|
428
|
+
| stdio | `stdio` | Prints to stderr, reads from stdin — for local dev and testing |
|
|
291
429
|
|
|
292
430
|
## API
|
|
293
431
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/backend/cli/adapter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/backend/cli/adapter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAO1E,MAAM,WAAW,iBAAiB;IAChC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,iBAAkB,YAAW,cAAc;IAQpD,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,MAAM;IARhB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,QAAQ,CAAmD;IACnE,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAS;gBAGrB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,SAAS,EACzB,OAAO,CAAC,EAAE,iBAAiB;IA+B7B,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAUtB,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAkC7C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAE3B,OAAO,CAAC,IAAI;IAsEZ,OAAO,CAAC,gBAAgB;CAgCzB"}
|
|
@@ -5,6 +5,7 @@ import { z } from 'zod';
|
|
|
5
5
|
import { CliCommandConfig } from '../../config/schema.js';
|
|
6
6
|
import { buildCommand } from './builder.js';
|
|
7
7
|
import { childLogger } from '../../util/logger.js';
|
|
8
|
+
import { wrapCommandWithSandbox } from '../../sandbox/index.js';
|
|
8
9
|
const log = childLogger('cli-adapter');
|
|
9
10
|
export class CliBackendAdapter {
|
|
10
11
|
configKey;
|
|
@@ -72,7 +73,12 @@ export class CliBackendAdapter {
|
|
|
72
73
|
}
|
|
73
74
|
const cwd = cmdConfig.cwd ?? this.defaultCwd;
|
|
74
75
|
const timeoutMs = cmdConfig.timeout * 1000;
|
|
75
|
-
|
|
76
|
+
const sandbox = toolCall.meta?.sandbox;
|
|
77
|
+
// Wrap command with sandbox if config is present
|
|
78
|
+
const effectiveCommand = sandbox
|
|
79
|
+
? await wrapCommandWithSandbox(fullCommand, sandbox)
|
|
80
|
+
: fullCommand;
|
|
81
|
+
return this.exec(effectiveCommand, cwd, timeoutMs);
|
|
76
82
|
}
|
|
77
83
|
async stop() { }
|
|
78
84
|
exec(command, cwd, timeoutMs = 30000) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/backend/cli/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,gBAAgB,EAAkB,MAAM,wBAAwB,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/backend/cli/adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec-adapter.d.ts","sourceRoot":"","sources":["../../src/backend/exec-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"exec-adapter.d.ts","sourceRoot":"","sources":["../../src/backend/exec-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD,qBAAa,kBAAmB,YAAW,cAAc;IAG3C,OAAO,CAAC,MAAM;IAF1B,QAAQ,CAAC,EAAE,kBAAkB;gBAET,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;IAEvD,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAItB,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAgC7C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAC5B"}
|
|
@@ -22,8 +22,9 @@ export class ExecBackendAdapter {
|
|
|
22
22
|
}
|
|
23
23
|
const cwd = typeof toolCall.args['cwd'] === 'string' ? toolCall.args['cwd'] : undefined;
|
|
24
24
|
const timeoutMs = typeof toolCall.args['timeout_ms'] === 'number' ? toolCall.args['timeout_ms'] : undefined;
|
|
25
|
+
const sandbox = toolCall.meta?.sandbox;
|
|
25
26
|
try {
|
|
26
|
-
const data = await executeExec(command, agent, cwd, timeoutMs);
|
|
27
|
+
const data = await executeExec(command, agent, cwd, timeoutMs, sandbox);
|
|
27
28
|
return {
|
|
28
29
|
success: true,
|
|
29
30
|
data,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec-adapter.js","sourceRoot":"","sources":["../../src/backend/exec-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"exec-adapter.js","sourceRoot":"","sources":["../../src/backend/exec-adapter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI9D,MAAM,OAAO,kBAAkB;IAGT;IAFX,EAAE,GAAG,cAAc,CAAC;IAE7B,YAAoB,MAAmC;QAAnC,WAAM,GAAN,MAAM,CAA6B;IAAG,CAAC;IAE3D,SAAS;QACP,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAkB;QAC3B,IAAI,QAAQ,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACjC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,sBAAsB,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;QAC1E,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC;QACzE,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAC;QAC5E,CAAC;QACD,MAAM,GAAG,GAAG,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,MAAM,SAAS,GACb,OAAO,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAE5F,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,OAA4C,CAAC;QAE5E,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YACxE,OAAO;gBACL,OAAO,EAAE,IAAI;gBACb,IAAI;gBACJ,QAAQ,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE;aAC5C,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACrF,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,KAAmB,CAAC;CAC/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/backend/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAQlD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/backend/factory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAQlD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,cAAc,EAAE,CA6BhF"}
|
package/dist/backend/factory.js
CHANGED
|
@@ -3,7 +3,7 @@ import { ExecBackendAdapter } from './exec-adapter.js';
|
|
|
3
3
|
import { HttpBackendAdapter } from './http-adapter.js';
|
|
4
4
|
import { CliBackendAdapter } from './cli/adapter.js';
|
|
5
5
|
import { OpenApiAdapter } from './openapi/adapter.js';
|
|
6
|
-
import { getBuiltinProviders } from '../config/schema.js';
|
|
6
|
+
import { getBuiltinProviders, getMcpConfigs } from '../config/schema.js';
|
|
7
7
|
/**
|
|
8
8
|
* Build all BackendAdapter instances from the gateway config.
|
|
9
9
|
* MCP adapters wrap the existing ClientPool; CLI and API adapters are standalone.
|
|
@@ -11,8 +11,9 @@ import { getBuiltinProviders } from '../config/schema.js';
|
|
|
11
11
|
export function buildAdapters(config, pool) {
|
|
12
12
|
const adapters = [];
|
|
13
13
|
// MCP adapters — one per connected MCP server
|
|
14
|
+
const mcpConfigs = getMcpConfigs(config.providers);
|
|
14
15
|
for (const mcpId of pool.getMcpIds()) {
|
|
15
|
-
adapters.push(new McpBackendAdapter(mcpId, pool));
|
|
16
|
+
adapters.push(new McpBackendAdapter(mcpId, pool, mcpConfigs[mcpId]));
|
|
16
17
|
}
|
|
17
18
|
// Builtin adapters
|
|
18
19
|
const builtins = getBuiltinProviders(config.providers);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/backend/factory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/backend/factory.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzE;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,IAAgB;IAC5D,MAAM,QAAQ,GAAqB,EAAE,CAAC;IAEtC,8CAA8C;IAC9C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;QACrC,QAAQ,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,mBAAmB;IACnB,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvD,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,0CAA0C;IAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,QAAQ,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,8CAA8C;IAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,QAAQ,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -2,13 +2,19 @@ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
|
2
2
|
import type { BackendAdapter } from './types.js';
|
|
3
3
|
import type { ToolCall, ToolResult } from '../types.js';
|
|
4
4
|
import type { ClientPool } from '../pool/pool.js';
|
|
5
|
+
import type { McpServerConfig } from '../config/schema.js';
|
|
5
6
|
export declare class McpBackendAdapter implements BackendAdapter {
|
|
6
7
|
private mcpId;
|
|
7
8
|
private pool;
|
|
9
|
+
private serverConfig?;
|
|
8
10
|
readonly id: string;
|
|
9
|
-
constructor(mcpId: string, pool: ClientPool);
|
|
11
|
+
constructor(mcpId: string, pool: ClientPool, serverConfig?: McpServerConfig | undefined);
|
|
10
12
|
listTools(): Promise<Tool[]>;
|
|
11
13
|
call(toolCall: ToolCall): Promise<ToolResult>;
|
|
14
|
+
/**
|
|
15
|
+
* Spawn an ephemeral sandboxed MCP server, call the tool, then tear down.
|
|
16
|
+
*/
|
|
17
|
+
private callSandboxed;
|
|
12
18
|
stop(): Promise<void>;
|
|
13
19
|
}
|
|
14
20
|
//# sourceMappingURL=mcp-adapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-adapter.d.ts","sourceRoot":"","sources":["../../src/backend/mcp-adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-adapter.d.ts","sourceRoot":"","sources":["../../src/backend/mcp-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAO3D,qBAAa,iBAAkB,YAAW,cAAc;IAIpD,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,YAAY,CAAC;IALvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBAGV,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,UAAU,EAChB,YAAY,CAAC,EAAE,eAAe,YAAA;IAKlC,SAAS,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAQ5B,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAwBnD;;OAEG;YACW,aAAa;IAyCrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAG5B"}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
2
|
+
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
3
|
+
import { wrapCommandWithSandbox } from '../sandbox/index.js';
|
|
4
|
+
import { childLogger } from '../util/logger.js';
|
|
5
|
+
import { VERSION } from '../version.js';
|
|
6
|
+
const log = childLogger('mcp-adapter');
|
|
1
7
|
export class McpBackendAdapter {
|
|
2
8
|
mcpId;
|
|
3
9
|
pool;
|
|
10
|
+
serverConfig;
|
|
4
11
|
id;
|
|
5
|
-
constructor(mcpId, pool) {
|
|
12
|
+
constructor(mcpId, pool, serverConfig) {
|
|
6
13
|
this.mcpId = mcpId;
|
|
7
14
|
this.pool = pool;
|
|
15
|
+
this.serverConfig = serverConfig;
|
|
8
16
|
this.id = `mcp:${mcpId}`;
|
|
9
17
|
}
|
|
10
18
|
async listTools() {
|
|
@@ -23,6 +31,11 @@ export class McpBackendAdapter {
|
|
|
23
31
|
};
|
|
24
32
|
}
|
|
25
33
|
const originalName = toolCall.tool.slice(prefix.length);
|
|
34
|
+
const sandbox = toolCall.meta?.sandbox;
|
|
35
|
+
// If sandbox config is present and server is stdio, spawn an ephemeral sandboxed instance
|
|
36
|
+
if (sandbox && this.serverConfig?.type === 'stdio') {
|
|
37
|
+
return this.callSandboxed(originalName, toolCall.args, sandbox);
|
|
38
|
+
}
|
|
26
39
|
try {
|
|
27
40
|
const data = await this.pool.callTool(this.mcpId, originalName, toolCall.args);
|
|
28
41
|
return { success: true, data };
|
|
@@ -31,6 +44,41 @@ export class McpBackendAdapter {
|
|
|
31
44
|
return { success: false, error: err instanceof Error ? err.message : String(err) };
|
|
32
45
|
}
|
|
33
46
|
}
|
|
47
|
+
/**
|
|
48
|
+
* Spawn an ephemeral sandboxed MCP server, call the tool, then tear down.
|
|
49
|
+
*/
|
|
50
|
+
async callSandboxed(toolName, args, sandbox) {
|
|
51
|
+
if (!this.serverConfig || this.serverConfig.type !== 'stdio') {
|
|
52
|
+
return { success: false, error: 'Sandboxed call requires stdio MCP server config' };
|
|
53
|
+
}
|
|
54
|
+
let transport;
|
|
55
|
+
let client;
|
|
56
|
+
try {
|
|
57
|
+
// Build the full command and wrap with sandbox
|
|
58
|
+
const fullArgs = this.serverConfig.args ?? [];
|
|
59
|
+
const baseCommand = [this.serverConfig.command, ...fullArgs].join(' ');
|
|
60
|
+
const wrappedCommand = await wrapCommandWithSandbox(baseCommand, sandbox);
|
|
61
|
+
// Parse the wrapped command back into command + args for StdioClientTransport
|
|
62
|
+
// The wrapped command is a shell command, so we use sh -c to execute it
|
|
63
|
+
transport = new StdioClientTransport({
|
|
64
|
+
command: '/bin/sh',
|
|
65
|
+
args: ['-c', wrappedCommand],
|
|
66
|
+
env: this.serverConfig.env,
|
|
67
|
+
stderr: 'pipe',
|
|
68
|
+
});
|
|
69
|
+
client = new Client({ name: 'airlock', version: VERSION });
|
|
70
|
+
await client.connect(transport);
|
|
71
|
+
log.info({ mcpId: this.mcpId, toolName }, 'Ephemeral sandboxed MCP connected');
|
|
72
|
+
const data = await client.callTool({ name: toolName, arguments: args });
|
|
73
|
+
return { success: true, data };
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
return { success: false, error: err instanceof Error ? err.message : String(err) };
|
|
77
|
+
}
|
|
78
|
+
finally {
|
|
79
|
+
await transport?.close().catch(() => { });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
34
82
|
async stop() {
|
|
35
83
|
// Pool lifecycle is managed externally
|
|
36
84
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-adapter.js","sourceRoot":"","sources":["../../src/backend/mcp-adapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-adapter.js","sourceRoot":"","sources":["../../src/backend/mcp-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AAIjE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAI7B,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4B/C;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAuB,MAAM,aAAa,CAAC;AAIjE,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAI7B,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAEnD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA4B/C;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,gBAAgB,EAAE,CA0KjE"}
|
package/dist/config/loader.js
CHANGED
|
@@ -39,6 +39,7 @@ export function validateConfig(config) {
|
|
|
39
39
|
const providerNames = new Set(Object.keys(config.providers));
|
|
40
40
|
const builtins = getBuiltinProviders(config.providers);
|
|
41
41
|
const profileNames = new Set(Object.keys(config.profiles));
|
|
42
|
+
const sandboxPresetNames = new Set(Object.keys(config.sandbox_presets ?? {}));
|
|
42
43
|
for (const [agentId, agent] of Object.entries(config.agents)) {
|
|
43
44
|
// Check for unknown profile references
|
|
44
45
|
for (const ref of agent.extends) {
|
|
@@ -51,6 +52,28 @@ export function validateConfig(config) {
|
|
|
51
52
|
});
|
|
52
53
|
}
|
|
53
54
|
}
|
|
55
|
+
for (const presetName of agent.sandbox.presets) {
|
|
56
|
+
if (!sandboxPresetNames.has(presetName)) {
|
|
57
|
+
diagnostics.push({
|
|
58
|
+
level: 'error',
|
|
59
|
+
agent: agentId,
|
|
60
|
+
message: `sandbox.presets references unknown sandbox preset "${presetName}".`,
|
|
61
|
+
suggestion: `Add "${presetName}" to the top-level sandbox_presets block, or check for typos.`,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
for (const [toolName, override] of Object.entries(agent.tool_overrides)) {
|
|
66
|
+
for (const presetName of override.sandbox_presets ?? []) {
|
|
67
|
+
if (!sandboxPresetNames.has(presetName)) {
|
|
68
|
+
diagnostics.push({
|
|
69
|
+
level: 'error',
|
|
70
|
+
agent: agentId,
|
|
71
|
+
message: `tool_overrides.${toolName}.sandbox_presets references unknown sandbox preset "${presetName}".`,
|
|
72
|
+
suggestion: `Add "${presetName}" to the top-level sandbox_presets block, or check for typos.`,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
54
77
|
// Collect all referenced namespaces from allow/ask/deny
|
|
55
78
|
const allPatterns = [...agent.allow, ...agent.ask, ...agent.deny];
|
|
56
79
|
const referencedNamespaces = new Set();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;AAWlC,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,MAAM,MAAM,GAAY,SAAS,CAAC,GAAG,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC3E,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,EAAE,CAAC;YACxB,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtB,CAAC;aAAM,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC9B,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;IAC9D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,iCAAiC,MAAM,CAAC,MAAM,cAAc;YAC1D,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CACpF,CAAC;IACJ,CAAC;IACD,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,WAAW,GAAuB,EAAE,CAAC;IAC3C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7D,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAEvD,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|