airlock-bot 0.2.37 → 0.2.38
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 +26 -8
- package/dist/activity/stream.d.ts +29 -0
- package/dist/activity/stream.d.ts.map +1 -0
- package/dist/activity/stream.js +36 -0
- package/dist/activity/stream.js.map +1 -0
- package/dist/airlock/context.d.ts +12 -0
- package/dist/airlock/context.d.ts.map +1 -0
- package/dist/airlock/context.js +32 -0
- package/dist/airlock/context.js.map +1 -0
- package/dist/airlock/tools.d.ts +7 -0
- package/dist/airlock/tools.d.ts.map +1 -0
- package/dist/airlock/tools.js +13 -0
- package/dist/airlock/tools.js.map +1 -0
- package/dist/allowlist/engine.d.ts +12 -0
- package/dist/allowlist/engine.d.ts.map +1 -1
- package/dist/allowlist/engine.js +40 -15
- package/dist/allowlist/engine.js.map +1 -1
- package/dist/audit/api.d.ts +2 -0
- package/dist/audit/api.d.ts.map +1 -1
- package/dist/audit/api.js.map +1 -1
- package/dist/audit/db.d.ts +16 -0
- package/dist/audit/db.d.ts.map +1 -1
- package/dist/audit/db.js +73 -0
- package/dist/audit/db.js.map +1 -1
- package/dist/audit/logger.d.ts +8 -1
- package/dist/audit/logger.d.ts.map +1 -1
- package/dist/audit/logger.js +21 -0
- package/dist/audit/logger.js.map +1 -1
- package/dist/backend/airlock-adapter.d.ts +22 -0
- package/dist/backend/airlock-adapter.d.ts.map +1 -0
- package/dist/backend/airlock-adapter.js +136 -0
- package/dist/backend/airlock-adapter.js.map +1 -0
- package/dist/backend/factory.d.ts +5 -1
- package/dist/backend/factory.d.ts.map +1 -1
- package/dist/backend/factory.js +5 -5
- package/dist/backend/factory.js.map +1 -1
- package/dist/backend/mcp-adapter.d.ts.map +1 -1
- package/dist/backend/mcp-adapter.js +28 -4
- package/dist/backend/mcp-adapter.js.map +1 -1
- package/dist/backend/openapi/adapter.d.ts.map +1 -1
- package/dist/backend/openapi/adapter.js +33 -13
- package/dist/backend/openapi/adapter.js.map +1 -1
- package/dist/config/loader.d.ts +12 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +799 -23
- package/dist/config/loader.js.map +1 -1
- package/dist/config/profiles.d.ts +44 -3
- package/dist/config/profiles.d.ts.map +1 -1
- package/dist/config/profiles.js +314 -3
- package/dist/config/profiles.js.map +1 -1
- package/dist/config/schema.d.ts +3300 -201
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +272 -71
- package/dist/config/schema.js.map +1 -1
- package/dist/configure-web/cli.d.ts +1 -0
- package/dist/configure-web/cli.d.ts.map +1 -1
- package/dist/configure-web/cli.js +238 -47
- package/dist/configure-web/cli.js.map +1 -1
- package/dist/gateway.d.ts +16 -1
- package/dist/gateway.d.ts.map +1 -1
- package/dist/gateway.js +263 -57
- package/dist/gateway.js.map +1 -1
- package/dist/hitl/api.d.ts +2 -0
- package/dist/hitl/api.d.ts.map +1 -1
- package/dist/hitl/api.js +8 -0
- package/dist/hitl/api.js.map +1 -1
- package/dist/hitl/approval-dashboard.d.ts +5 -9
- package/dist/hitl/approval-dashboard.d.ts.map +1 -1
- package/dist/hitl/approval-dashboard.js +8 -55
- package/dist/hitl/approval-dashboard.js.map +1 -1
- package/dist/hitl/approval-stream.d.ts +34 -0
- package/dist/hitl/approval-stream.d.ts.map +1 -0
- package/dist/hitl/approval-stream.js +111 -0
- package/dist/hitl/approval-stream.js.map +1 -0
- package/dist/hitl/engine.d.ts +16 -7
- package/dist/hitl/engine.d.ts.map +1 -1
- package/dist/hitl/engine.js +109 -35
- package/dist/hitl/engine.js.map +1 -1
- package/dist/hitl/formatter.d.ts.map +1 -1
- package/dist/hitl/formatter.js +2 -0
- package/dist/hitl/formatter.js.map +1 -1
- package/dist/hitl/provider-factory.d.ts +8 -2
- package/dist/hitl/provider-factory.d.ts.map +1 -1
- package/dist/hitl/provider-factory.js +23 -2
- package/dist/hitl/provider-factory.js.map +1 -1
- package/dist/hitl/providers/composite.d.ts +9 -0
- package/dist/hitl/providers/composite.d.ts.map +1 -1
- package/dist/hitl/providers/composite.js +14 -0
- package/dist/hitl/providers/composite.js.map +1 -1
- package/dist/hitl/providers/dashboard.d.ts +12 -2
- package/dist/hitl/providers/dashboard.d.ts.map +1 -1
- package/dist/hitl/providers/dashboard.js +11 -5
- package/dist/hitl/providers/dashboard.js.map +1 -1
- package/dist/hitl/providers/ios.d.ts +23 -0
- package/dist/hitl/providers/ios.d.ts.map +1 -0
- package/dist/hitl/providers/ios.js +183 -0
- package/dist/hitl/providers/ios.js.map +1 -0
- package/dist/hitl/providers/macos.d.ts.map +1 -1
- package/dist/hitl/providers/macos.js +8 -4
- package/dist/hitl/providers/macos.js.map +1 -1
- package/dist/hitl/providers/openclaw.js +2 -2
- package/dist/hitl/providers/openclaw.js.map +1 -1
- package/dist/hitl/providers/stdio.js +2 -2
- package/dist/hitl/providers/stdio.js.map +1 -1
- package/dist/hitl/providers/telegram.js +2 -2
- package/dist/hitl/providers/telegram.js.map +1 -1
- package/dist/hitl/providers/tui.d.ts.map +1 -1
- package/dist/hitl/providers/tui.js +8 -2
- package/dist/hitl/providers/tui.js.map +1 -1
- package/dist/hitl/providers/types.d.ts +14 -0
- package/dist/hitl/providers/types.d.ts.map +1 -1
- package/dist/hook/api.d.ts +2 -0
- package/dist/hook/api.d.ts.map +1 -1
- package/dist/hook/api.js.map +1 -1
- package/dist/hook/normalizer.js +2 -2
- package/dist/hook/normalizer.js.map +1 -1
- package/dist/index.js +28 -1
- package/dist/index.js.map +1 -1
- package/dist/introspect/cli.d.ts +31 -0
- package/dist/introspect/cli.d.ts.map +1 -0
- package/dist/introspect/cli.js +756 -0
- package/dist/introspect/cli.js.map +1 -0
- package/dist/middleware/chain-builder.d.ts +1 -1
- package/dist/middleware/chain-builder.d.ts.map +1 -1
- package/dist/middleware/chain-builder.js +6 -4
- package/dist/middleware/chain-builder.js.map +1 -1
- package/dist/middleware/core/allowlist.d.ts.map +1 -1
- package/dist/middleware/core/allowlist.js +14 -0
- package/dist/middleware/core/allowlist.js.map +1 -1
- package/dist/middleware/core/arg-policy.d.ts +2 -1
- package/dist/middleware/core/arg-policy.d.ts.map +1 -1
- package/dist/middleware/core/arg-policy.js +156 -46
- package/dist/middleware/core/arg-policy.js.map +1 -1
- package/dist/middleware/core/exec-policy.d.ts.map +1 -1
- package/dist/middleware/core/exec-policy.js +16 -1
- package/dist/middleware/core/exec-policy.js.map +1 -1
- package/dist/middleware/core/execute.d.ts.map +1 -1
- package/dist/middleware/core/execute.js +6 -2
- 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 +15 -4
- package/dist/middleware/core/hitl-gate.js.map +1 -1
- package/dist/middleware/core/schema-validator.d.ts.map +1 -1
- package/dist/middleware/core/schema-validator.js +7 -3
- package/dist/middleware/core/schema-validator.js.map +1 -1
- package/dist/middleware/post/canary-token-injector.d.ts +4 -1
- package/dist/middleware/post/canary-token-injector.d.ts.map +1 -1
- package/dist/middleware/post/canary-token-injector.js +5 -1
- package/dist/middleware/post/canary-token-injector.js.map +1 -1
- package/dist/middleware/post/untrusted-envelope.d.ts.map +1 -1
- package/dist/middleware/post/untrusted-envelope.js +7 -1
- package/dist/middleware/post/untrusted-envelope.js.map +1 -1
- package/dist/mobile/api.d.ts +20 -0
- package/dist/mobile/api.d.ts.map +1 -0
- package/dist/mobile/api.js +255 -0
- package/dist/mobile/api.js.map +1 -0
- package/dist/mobile/apns.d.ts +68 -0
- package/dist/mobile/apns.d.ts.map +1 -0
- package/dist/mobile/apns.js +321 -0
- package/dist/mobile/apns.js.map +1 -0
- package/dist/pool/http-client.d.ts +3 -1
- package/dist/pool/http-client.d.ts.map +1 -1
- package/dist/pool/http-client.js +5 -2
- package/dist/pool/http-client.js.map +1 -1
- package/dist/pool/oauth-provider.d.ts +2 -0
- package/dist/pool/oauth-provider.d.ts.map +1 -1
- package/dist/pool/oauth-provider.js +23 -4
- package/dist/pool/oauth-provider.js.map +1 -1
- package/dist/pool/pool.d.ts +2 -1
- package/dist/pool/pool.d.ts.map +1 -1
- package/dist/pool/pool.js +2 -2
- package/dist/pool/pool.js.map +1 -1
- package/dist/pool/sse-client.d.ts +3 -1
- package/dist/pool/sse-client.d.ts.map +1 -1
- package/dist/pool/sse-client.js +5 -2
- package/dist/pool/sse-client.js.map +1 -1
- package/dist/pool/stdio-client.d.ts +3 -1
- package/dist/pool/stdio-client.d.ts.map +1 -1
- package/dist/pool/stdio-client.js +5 -2
- package/dist/pool/stdio-client.js.map +1 -1
- package/dist/registry/airlock-policy.d.ts +3 -0
- package/dist/registry/airlock-policy.d.ts.map +1 -0
- package/dist/registry/airlock-policy.js +50 -0
- package/dist/registry/airlock-policy.js.map +1 -0
- package/dist/registry/registry.d.ts +2 -0
- package/dist/registry/registry.d.ts.map +1 -1
- package/dist/registry/registry.js +19 -13
- package/dist/registry/registry.js.map +1 -1
- package/dist/security/blocked-hosts.d.ts +2 -0
- package/dist/security/blocked-hosts.d.ts.map +1 -1
- package/dist/security/blocked-hosts.js +61 -7
- package/dist/security/blocked-hosts.js.map +1 -1
- package/dist/security/request.d.ts +2 -0
- package/dist/security/request.d.ts.map +1 -1
- package/dist/security/request.js +6 -2
- package/dist/security/request.js.map +1 -1
- package/dist/security/secrets.d.ts +12 -0
- package/dist/security/secrets.d.ts.map +1 -0
- package/dist/security/secrets.js +138 -0
- package/dist/security/secrets.js.map +1 -0
- package/dist/setup-openclaw/cli.js +1 -1
- package/dist/stdio-mode.d.ts.map +1 -1
- package/dist/stdio-mode.js +125 -24
- package/dist/stdio-mode.js.map +1 -1
- package/dist/tools/api.d.ts +4 -1
- package/dist/tools/api.d.ts.map +1 -1
- package/dist/tools/api.js +58 -7
- package/dist/tools/api.js.map +1 -1
- package/dist/tools/exec.d.ts +2 -1
- package/dist/tools/exec.d.ts.map +1 -1
- package/dist/tools/exec.js +4 -3
- package/dist/tools/exec.js.map +1 -1
- package/dist/tools/http.d.ts.map +1 -1
- package/dist/tools/http.js +4 -7
- package/dist/tools/http.js.map +1 -1
- package/dist/transport/agent-server.d.ts +4 -0
- package/dist/transport/agent-server.d.ts.map +1 -1
- package/dist/transport/agent-server.js +23 -11
- package/dist/transport/agent-server.js.map +1 -1
- package/dist/transport/http-server.d.ts +2 -0
- package/dist/transport/http-server.d.ts.map +1 -1
- package/dist/transport/http-server.js +10 -6
- package/dist/transport/http-server.js.map +1 -1
- package/dist/transport/sse-server.d.ts +2 -0
- package/dist/transport/sse-server.d.ts.map +1 -1
- package/dist/transport/sse-server.js +10 -6
- package/dist/transport/sse-server.js.map +1 -1
- package/dist/transport/stdio-server.d.ts.map +1 -1
- package/dist/transport/stdio-server.js +4 -0
- package/dist/transport/stdio-server.js.map +1 -1
- package/dist/util/id.d.ts +1 -1
- package/dist/util/id.d.ts.map +1 -1
- package/dist/util/id.js +3 -3
- package/dist/util/id.js.map +1 -1
- package/examples/claude-code-setup.md +0 -2
- package/examples/docker-compose.yaml +4 -3
- package/examples/docker-gateway.yaml +8 -3
- package/examples/gateway.yaml +8 -5
- package/examples/profiles.yaml +0 -2
- package/extensions/openclaw/index.ts +9 -6
- package/extensions/openclaw/openclaw.plugin.json +5 -5
- package/package.json +3 -1
- package/schema.json +634 -28
package/dist/gateway.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { randomUUID } from 'crypto';
|
|
2
|
+
import { createConnection, isIP } from 'net';
|
|
1
3
|
import Fastify from 'fastify';
|
|
2
4
|
import { ClientPool } from './pool/pool.js';
|
|
3
5
|
import { ToolRegistry } from './registry/registry.js';
|
|
@@ -7,15 +9,18 @@ import { HitlBatcher } from './hitl/batcher.js';
|
|
|
7
9
|
import { AuditLogger } from './audit/logger.js';
|
|
8
10
|
import { hitlApiPlugin } from './hitl/api.js';
|
|
9
11
|
import { auditApiPlugin } from './audit/api.js';
|
|
12
|
+
import { mobileApiPlugin } from './mobile/api.js';
|
|
10
13
|
import { hookApiPlugin } from './hook/api.js';
|
|
11
14
|
import { toolsApiPlugin } from './tools/api.js';
|
|
12
15
|
import { ApprovalDashboardRoutes } from './hitl/approval-dashboard.js';
|
|
16
|
+
import { ApprovalStreamHub } from './hitl/approval-stream.js';
|
|
13
17
|
import { CompositeHitlProvider } from './hitl/providers/composite.js';
|
|
14
18
|
import { sseServerPlugin } from './transport/sse-server.js';
|
|
15
19
|
import { httpServerPlugin } from './transport/http-server.js';
|
|
16
20
|
import { createHitlProvider } from './hitl/provider-factory.js';
|
|
17
21
|
import { getMcpConfigs } from './config/schema.js';
|
|
18
22
|
import { buildAdapters } from './backend/factory.js';
|
|
23
|
+
import { ActivityStream } from './activity/stream.js';
|
|
19
24
|
import { childLogger } from './util/logger.js';
|
|
20
25
|
import { checkRequestSecurity } from './security/request.js';
|
|
21
26
|
const log = childLogger('gateway');
|
|
@@ -30,9 +35,16 @@ export class Gateway {
|
|
|
30
35
|
hitlBatcher;
|
|
31
36
|
hitlProvider;
|
|
32
37
|
approvalRoutes;
|
|
38
|
+
approvalStream;
|
|
33
39
|
auditLogger;
|
|
34
40
|
app;
|
|
41
|
+
managementApp;
|
|
42
|
+
downstreamSessionIds = new Map();
|
|
43
|
+
activityStream = new ActivityStream();
|
|
44
|
+
unsubscribeActivityNotifications;
|
|
35
45
|
startTime = Date.now();
|
|
46
|
+
dataPlaneRequestSecurity = {};
|
|
47
|
+
managementRequestSecurity = {};
|
|
36
48
|
constructor(config, configPath, options = {}) {
|
|
37
49
|
this.config = config;
|
|
38
50
|
this.configPath = configPath;
|
|
@@ -40,22 +52,33 @@ export class Gateway {
|
|
|
40
52
|
}
|
|
41
53
|
async start() {
|
|
42
54
|
log.info('Starting Airlock gateway');
|
|
55
|
+
this.assertManagementApiConfig(this.config);
|
|
56
|
+
this.updateRequestSecurity(this.config);
|
|
43
57
|
// Audit logger
|
|
44
58
|
this.auditLogger = new AuditLogger(this.config.audit);
|
|
45
59
|
this.auditLogger.startDailyCleanup();
|
|
46
60
|
// Approvals — provider needs approvalApi but engine doesn't exist yet, use forwarder
|
|
47
61
|
this.hitlBatcher = new HitlBatcher(this.config.approvals.batch_window_ms);
|
|
62
|
+
this.approvalStream = new ApprovalStreamHub({ activityStream: this.activityStream });
|
|
48
63
|
const approvalForwarder = {
|
|
49
|
-
approve: (
|
|
50
|
-
deny: (
|
|
64
|
+
approve: (id) => this.hitlEngine.approve(id),
|
|
65
|
+
deny: (id, reason) => this.hitlEngine.deny(id, reason),
|
|
66
|
+
approveByCode: (code) => this.hitlEngine.approveByCode(code),
|
|
67
|
+
denyByCode: (code, reason) => this.hitlEngine.denyByCode(code, reason),
|
|
51
68
|
};
|
|
52
|
-
this.approvalRoutes = new ApprovalDashboardRoutes(approvalForwarder);
|
|
69
|
+
this.approvalRoutes = new ApprovalDashboardRoutes(approvalForwarder, this.approvalStream);
|
|
53
70
|
this.hitlProvider = this.buildHitlProvider(approvalForwarder);
|
|
71
|
+
this.unsubscribeActivityNotifications = this.activityStream.subscribe((event) => {
|
|
72
|
+
void this.hitlProvider
|
|
73
|
+
.notifyActivity?.(event)
|
|
74
|
+
.catch((err) => log.error({ err }, 'Failed to send activity notification'));
|
|
75
|
+
});
|
|
54
76
|
this.hitlEngine = new HitlEngine(this.auditLogger, this.hitlProvider, this.config.approvals.timeout_ms);
|
|
55
77
|
// Wire batcher → provider
|
|
56
78
|
this.hitlBatcher.onBatchReady((_agentId, requests) => {
|
|
79
|
+
const badgeCount = this.hitlEngine.getPending().length;
|
|
57
80
|
void this.hitlProvider
|
|
58
|
-
.notify(requests)
|
|
81
|
+
.notify(requests.map((request) => ({ ...request, badgeCount })))
|
|
59
82
|
.catch((err) => log.error({ err }, 'Failed to send approval notifications'));
|
|
60
83
|
});
|
|
61
84
|
await this.hitlProvider.init();
|
|
@@ -65,7 +88,7 @@ export class Gateway {
|
|
|
65
88
|
this.pool = new ClientPool(mcpConfigs);
|
|
66
89
|
await this.pool.initialize();
|
|
67
90
|
// Build adapters from config (MCP, builtins, CLIs, APIs)
|
|
68
|
-
const adapters = buildAdapters(
|
|
91
|
+
const adapters = this.buildAdapters();
|
|
69
92
|
// Allowlist + registry
|
|
70
93
|
this.allowlist = new AllowlistEngine(this.config.agents);
|
|
71
94
|
this.registry = new ToolRegistry(adapters, this.allowlist, this.config.agents);
|
|
@@ -77,67 +100,177 @@ export class Gateway {
|
|
|
77
100
|
.catch((err) => log.error({ err }, 'Failed to refresh registry after MCP ready'));
|
|
78
101
|
});
|
|
79
102
|
await this.registry.refresh();
|
|
80
|
-
//
|
|
103
|
+
// Agent data-plane server. Control-plane routes are registered on a
|
|
104
|
+
// separate listener below and must never be added to this app.
|
|
81
105
|
this.app = Fastify({ logger: false });
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
106
|
+
const getDataPlaneRequestSecurity = () => this.dataPlaneRequestSecurity;
|
|
107
|
+
const getManagementRequestSecurity = () => this.managementRequestSecurity;
|
|
108
|
+
await this.app.register(sseServerPlugin, {
|
|
109
|
+
getDeps: (agentId) => this.buildAgentDeps(agentId),
|
|
110
|
+
getRequestSecurity: getDataPlaneRequestSecurity,
|
|
111
|
+
});
|
|
112
|
+
await this.app.register(httpServerPlugin, {
|
|
113
|
+
getDeps: (agentId) => this.buildAgentDeps(agentId),
|
|
114
|
+
getRequestSecurity: getDataPlaneRequestSecurity,
|
|
115
|
+
});
|
|
116
|
+
if (this.config.server.expose_tools_api) {
|
|
117
|
+
await this.app.register(toolsApiPlugin, {
|
|
118
|
+
getDeps: (agentId, downstreamSessionKey) => this.buildAgentDeps(agentId, downstreamSessionKey),
|
|
119
|
+
requiresSessionId: (agentId, tool) => this.requiresToolsApiSessionId(agentId, tool),
|
|
120
|
+
getRequestSecurity: getDataPlaneRequestSecurity,
|
|
92
121
|
});
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
this.
|
|
100
|
-
|
|
101
|
-
|
|
122
|
+
}
|
|
123
|
+
const { port, host } = this.config.server;
|
|
124
|
+
await this.app.listen({ port, host });
|
|
125
|
+
log.info({ port, host }, 'Airlock agent data-plane listening');
|
|
126
|
+
if (this.config.server.management_api.enabled) {
|
|
127
|
+
try {
|
|
128
|
+
await this.startManagementApi(getManagementRequestSecurity);
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
await this.app.close().catch((closeErr) => {
|
|
132
|
+
log.warn({ err: closeErr }, 'Failed to close agent data-plane after management API startup failure');
|
|
102
133
|
});
|
|
103
|
-
|
|
134
|
+
throw err;
|
|
135
|
+
}
|
|
104
136
|
}
|
|
105
|
-
|
|
106
|
-
|
|
137
|
+
}
|
|
138
|
+
async startManagementApi(getRequestSecurity) {
|
|
139
|
+
const management = this.config.server.management_api;
|
|
140
|
+
this.managementApp = Fastify({ logger: false });
|
|
141
|
+
await this.managementApp.register(hitlApiPlugin, {
|
|
142
|
+
engine: this.hitlEngine,
|
|
143
|
+
getRequestSecurity,
|
|
144
|
+
});
|
|
145
|
+
await this.managementApp.register(auditApiPlugin, {
|
|
146
|
+
auditLogger: this.auditLogger,
|
|
147
|
+
getRequestSecurity,
|
|
148
|
+
});
|
|
149
|
+
await this.managementApp.register(mobileApiPlugin, {
|
|
150
|
+
auditLogger: this.auditLogger,
|
|
151
|
+
engine: this.hitlEngine,
|
|
152
|
+
activityStream: this.activityStream,
|
|
153
|
+
configPath: this.configPath,
|
|
154
|
+
getRequestSecurity,
|
|
155
|
+
approvalStream: this.approvalStream,
|
|
156
|
+
});
|
|
157
|
+
await this.managementApp.register((adminApp, _opts, done) => {
|
|
158
|
+
adminApp.addHook('preHandler', (request, reply, hookDone) => {
|
|
159
|
+
if (!checkRequestSecurity(request, reply, getRequestSecurity())) {
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
hookDone();
|
|
163
|
+
});
|
|
164
|
+
this.approvalRoutes.registerRoutes(adminApp);
|
|
165
|
+
adminApp.get('/admin/tools', (_request, reply) => {
|
|
166
|
+
return reply.send({ tools: this.registry.getAllTools(), errors: [] });
|
|
167
|
+
});
|
|
168
|
+
adminApp.get('/activity', (_request, reply) => {
|
|
169
|
+
return reply.send({ events: this.activityStream.recent() });
|
|
170
|
+
});
|
|
171
|
+
done();
|
|
172
|
+
});
|
|
173
|
+
if (management.expose_hook_api) {
|
|
174
|
+
await this.managementApp.register(hookApiPlugin, {
|
|
107
175
|
allowlist: this.allowlist,
|
|
108
176
|
hitlEngine: this.hitlEngine,
|
|
109
177
|
hitlBatcher: this.hitlBatcher,
|
|
110
178
|
auditLogger: this.auditLogger,
|
|
111
|
-
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
if (this.config.server.expose_tools_api) {
|
|
115
|
-
await this.app.register(toolsApiPlugin, {
|
|
116
|
-
getDeps: (agentId) => this.buildAgentDeps(agentId),
|
|
117
|
-
...requestSecurity,
|
|
179
|
+
getRequestSecurity,
|
|
118
180
|
});
|
|
119
181
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
182
|
+
this.managementApp.get('/health', async (request, reply) => {
|
|
183
|
+
if (!checkRequestSecurity(request, reply, getRequestSecurity()))
|
|
184
|
+
return;
|
|
185
|
+
const dataPlane = await this.dataPlaneHealth();
|
|
186
|
+
const mcpHealth = this.pool.healthCheck();
|
|
187
|
+
const pendingApprovals = this.hitlEngine.getPending().length;
|
|
188
|
+
const uptime = Math.floor((Date.now() - this.startTime) / 1000);
|
|
189
|
+
const status = dataPlane.status === 'ok' ? 'ok' : 'degraded';
|
|
190
|
+
return { status, dataPlane, mcpHealth, pendingApprovals, uptime };
|
|
127
191
|
});
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
192
|
+
const { port, host, insecure_remote_bind } = management;
|
|
193
|
+
if (insecure_remote_bind) {
|
|
194
|
+
log.warn({ port, host }, 'Control-plane bound beyond loopback; admin/audit/approval routes may be reachable off-host. Restrict this listener with network ACLs.');
|
|
195
|
+
}
|
|
196
|
+
await this.managementApp.listen({ port, host });
|
|
197
|
+
log.info({ port, host }, 'Airlock control-plane management API listening');
|
|
198
|
+
}
|
|
199
|
+
async dataPlaneHealth() {
|
|
200
|
+
const address = this.app.server.address();
|
|
201
|
+
const host = typeof address === 'object' && address !== null ? address.address : this.config.server.host;
|
|
202
|
+
const port = typeof address === 'object' && address !== null ? address.port : this.config.server.port;
|
|
203
|
+
const status = await tcpProbe(connectableLoopbackHost(host), port, 250);
|
|
204
|
+
return { status: status ? 'ok' : 'down', host, port };
|
|
205
|
+
}
|
|
206
|
+
assertManagementApiConfig(config) {
|
|
207
|
+
const management = config.server.management_api;
|
|
208
|
+
if (!management.enabled)
|
|
209
|
+
return;
|
|
210
|
+
if (!management.api_secret && !config.server.api_secret) {
|
|
211
|
+
throw new Error('server.management_api.enabled requires server.management_api.api_secret or server.api_secret.');
|
|
212
|
+
}
|
|
213
|
+
const tokenlessAgents = Object.entries(config.agents)
|
|
214
|
+
.filter(([, agent]) => !agent.token)
|
|
215
|
+
.map(([agentId]) => agentId);
|
|
216
|
+
if (tokenlessAgents.length > 0) {
|
|
217
|
+
throw new Error(`server.management_api.enabled requires per-agent tokens. Add token to agents: ${tokenlessAgents.join(', ')}.`);
|
|
218
|
+
}
|
|
219
|
+
if (!isLoopbackHost(management.host) && !management.insecure_remote_bind) {
|
|
220
|
+
throw new Error('server.management_api.host is non-loopback while insecure_remote_bind is false. Keep it on 127.0.0.1/::1, or explicitly set server.management_api.insecure_remote_bind: true and restrict the control-plane port with network ACLs.');
|
|
221
|
+
}
|
|
222
|
+
if (management.port !== 0 && management.port === config.server.port) {
|
|
223
|
+
throw new Error('Control-plane and data-plane must not share a socket.');
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
updateRequestSecurity(config) {
|
|
227
|
+
this.dataPlaneRequestSecurity.secret = config.server.api_secret;
|
|
228
|
+
this.dataPlaneRequestSecurity.authRequired = config.server.auth_required;
|
|
229
|
+
this.dataPlaneRequestSecurity.allowedOrigins = config.server.allowed_origins;
|
|
230
|
+
this.managementRequestSecurity.secret =
|
|
231
|
+
config.server.management_api.api_secret ?? config.server.api_secret;
|
|
232
|
+
this.managementRequestSecurity.authRequired = true;
|
|
233
|
+
this.managementRequestSecurity.allowedOrigins = config.server.allowed_origins;
|
|
234
|
+
}
|
|
235
|
+
assertReloadCompatible(newConfig) {
|
|
236
|
+
const oldServer = this.config.server;
|
|
237
|
+
const newServer = newConfig.server;
|
|
238
|
+
const restartFields = [
|
|
239
|
+
['server.host', oldServer.host, newServer.host],
|
|
240
|
+
['server.port', oldServer.port, newServer.port],
|
|
241
|
+
['server.expose_tools_api', oldServer.expose_tools_api, newServer.expose_tools_api],
|
|
242
|
+
[
|
|
243
|
+
'server.management_api.enabled',
|
|
244
|
+
oldServer.management_api.enabled,
|
|
245
|
+
newServer.management_api.enabled,
|
|
246
|
+
],
|
|
247
|
+
['server.management_api.host', oldServer.management_api.host, newServer.management_api.host],
|
|
248
|
+
['server.management_api.port', oldServer.management_api.port, newServer.management_api.port],
|
|
249
|
+
[
|
|
250
|
+
'server.management_api.insecure_remote_bind',
|
|
251
|
+
oldServer.management_api.insecure_remote_bind,
|
|
252
|
+
newServer.management_api.insecure_remote_bind,
|
|
253
|
+
],
|
|
254
|
+
[
|
|
255
|
+
'server.management_api.expose_hook_api',
|
|
256
|
+
oldServer.management_api.expose_hook_api,
|
|
257
|
+
newServer.management_api.expose_hook_api,
|
|
258
|
+
],
|
|
259
|
+
[
|
|
260
|
+
'approvals.provider',
|
|
261
|
+
JSON.stringify(this.config.approvals.provider),
|
|
262
|
+
JSON.stringify(newConfig.approvals.provider),
|
|
263
|
+
],
|
|
264
|
+
[
|
|
265
|
+
'approvals.batch_window_ms',
|
|
266
|
+
this.config.approvals.batch_window_ms,
|
|
267
|
+
newConfig.approvals.batch_window_ms,
|
|
268
|
+
],
|
|
269
|
+
];
|
|
270
|
+
const changed = restartFields.find(([, oldValue, newValue]) => oldValue !== newValue);
|
|
271
|
+
if (changed) {
|
|
272
|
+
throw new Error(`${changed[0]} changed; restart Airlock to apply listener or approval-provider topology changes.`);
|
|
137
273
|
}
|
|
138
|
-
const { port, host } = this.config.server;
|
|
139
|
-
await this.app.listen({ port, host });
|
|
140
|
-
log.info({ port, host }, 'Airlock gateway listening');
|
|
141
274
|
}
|
|
142
275
|
buildHitlProvider(approvalForwarder) {
|
|
143
276
|
const providers = [];
|
|
@@ -147,17 +280,23 @@ export class Gateway {
|
|
|
147
280
|
if (configuredProvider) {
|
|
148
281
|
providers.push(createHitlProvider(configuredProvider, approvalForwarder, {
|
|
149
282
|
configPath: this.configPath,
|
|
283
|
+
auditLogger: this.auditLogger,
|
|
284
|
+
approvalStream: this.approvalStream,
|
|
150
285
|
}));
|
|
151
286
|
}
|
|
152
|
-
providers.push(this.
|
|
287
|
+
providers.push(this.approvalStream);
|
|
153
288
|
return providers.length === 1 ? providers[0] : new CompositeHitlProvider(providers);
|
|
154
289
|
}
|
|
155
|
-
buildAgentDeps(agentId) {
|
|
290
|
+
buildAgentDeps(agentId, downstreamSessionKey) {
|
|
156
291
|
const agentConfig = this.config.agents[agentId];
|
|
157
292
|
if (!agentConfig)
|
|
158
293
|
return undefined;
|
|
294
|
+
const downstreamSessionId = downstreamSessionKey
|
|
295
|
+
? this.downstreamSessionIdFor(downstreamSessionKey)
|
|
296
|
+
: undefined;
|
|
159
297
|
return {
|
|
160
298
|
agentId,
|
|
299
|
+
downstreamSessionId,
|
|
161
300
|
agentConfig,
|
|
162
301
|
getAgentConfig: () => this.config.agents[agentId] ?? agentConfig,
|
|
163
302
|
registry: this.registry,
|
|
@@ -169,15 +308,38 @@ export class Gateway {
|
|
|
169
308
|
securityConfig: this.config.security,
|
|
170
309
|
};
|
|
171
310
|
}
|
|
311
|
+
downstreamSessionIdFor(key) {
|
|
312
|
+
let id = this.downstreamSessionIds.get(key);
|
|
313
|
+
if (!id) {
|
|
314
|
+
id = randomUUID();
|
|
315
|
+
this.downstreamSessionIds.set(key, id);
|
|
316
|
+
}
|
|
317
|
+
return id;
|
|
318
|
+
}
|
|
319
|
+
requiresToolsApiSessionId(agentId, toolName) {
|
|
320
|
+
const agentConfig = this.config.agents[agentId];
|
|
321
|
+
if (!agentConfig)
|
|
322
|
+
return false;
|
|
323
|
+
const resolvedToolName = agentConfig.tool_overrides[toolName]?.alias_of ?? toolName;
|
|
324
|
+
const separatorIndex = resolvedToolName.indexOf('/');
|
|
325
|
+
if (separatorIndex <= 0)
|
|
326
|
+
return false;
|
|
327
|
+
const providerId = resolvedToolName.slice(0, separatorIndex);
|
|
328
|
+
return providerId in getMcpConfigs(this.config.providers);
|
|
329
|
+
}
|
|
172
330
|
async reload(newConfig) {
|
|
173
331
|
log.info('Reloading gateway config');
|
|
332
|
+
this.assertManagementApiConfig(newConfig);
|
|
333
|
+
this.assertReloadCompatible(newConfig);
|
|
174
334
|
this.config = newConfig;
|
|
335
|
+
this.updateRequestSecurity(newConfig);
|
|
336
|
+
this.hitlEngine.setTimeoutMs(newConfig.approvals.timeout_ms);
|
|
175
337
|
const mcpConfigs = getMcpConfigs(newConfig.providers);
|
|
176
338
|
await this.pool.reload(mcpConfigs);
|
|
177
339
|
this.allowlist.reload(newConfig.agents);
|
|
178
340
|
this.registry.reloadAgents(newConfig.agents);
|
|
179
341
|
// Rebuild adapters to pick up new CLIs/APIs
|
|
180
|
-
const adapters = buildAdapters(
|
|
342
|
+
const adapters = this.buildAdapters();
|
|
181
343
|
this.registry.setAdapters(adapters);
|
|
182
344
|
await this.registry.refresh();
|
|
183
345
|
log.info('Config reloaded: providers, allowlist, registry, and agent configs updated');
|
|
@@ -190,7 +352,10 @@ export class Gateway {
|
|
|
190
352
|
log.info('Stopping Airlock gateway');
|
|
191
353
|
this.pool?.disableReconnect();
|
|
192
354
|
await this.pool?.stop();
|
|
355
|
+
await this.managementApp?.close();
|
|
193
356
|
await this.app?.close();
|
|
357
|
+
this.unsubscribeActivityNotifications?.();
|
|
358
|
+
this.unsubscribeActivityNotifications = undefined;
|
|
194
359
|
await this.registry?.stopAll();
|
|
195
360
|
await this.hitlProvider?.stop();
|
|
196
361
|
this.auditLogger?.stop();
|
|
@@ -199,6 +364,15 @@ export class Gateway {
|
|
|
199
364
|
forceKill() {
|
|
200
365
|
this.pool?.forceKill();
|
|
201
366
|
}
|
|
367
|
+
buildAdapters() {
|
|
368
|
+
return buildAdapters(this.config, this.pool, {
|
|
369
|
+
airlock: {
|
|
370
|
+
hitlEngine: this.hitlEngine,
|
|
371
|
+
hitlBatcher: this.hitlBatcher,
|
|
372
|
+
activityStream: this.activityStream,
|
|
373
|
+
},
|
|
374
|
+
});
|
|
375
|
+
}
|
|
202
376
|
}
|
|
203
377
|
function withoutDashboardProvider(provider) {
|
|
204
378
|
if (Array.isArray(provider)) {
|
|
@@ -209,4 +383,36 @@ function withoutDashboardProvider(provider) {
|
|
|
209
383
|
}
|
|
210
384
|
return provider.type === 'dashboard' ? undefined : provider;
|
|
211
385
|
}
|
|
386
|
+
function isLoopbackHost(host) {
|
|
387
|
+
const normalized = host.startsWith('[') && host.endsWith(']') ? host.slice(1, -1) : host;
|
|
388
|
+
if (normalized === 'localhost')
|
|
389
|
+
return true;
|
|
390
|
+
const ipVersion = isIP(normalized);
|
|
391
|
+
if (ipVersion === 6)
|
|
392
|
+
return normalized === '::1';
|
|
393
|
+
if (ipVersion !== 4)
|
|
394
|
+
return false;
|
|
395
|
+
const firstOctet = Number(normalized.split('.')[0]);
|
|
396
|
+
return firstOctet === 127;
|
|
397
|
+
}
|
|
398
|
+
function connectableLoopbackHost(host) {
|
|
399
|
+
if (host === '0.0.0.0')
|
|
400
|
+
return '127.0.0.1';
|
|
401
|
+
if (host === '::' || host === '[::]')
|
|
402
|
+
return '::1';
|
|
403
|
+
return host.startsWith('[') && host.endsWith(']') ? host.slice(1, -1) : host;
|
|
404
|
+
}
|
|
405
|
+
function tcpProbe(host, port, timeoutMs) {
|
|
406
|
+
return new Promise((resolve) => {
|
|
407
|
+
const socket = createConnection({ host, port });
|
|
408
|
+
const done = (ok) => {
|
|
409
|
+
socket.destroy();
|
|
410
|
+
resolve(ok);
|
|
411
|
+
};
|
|
412
|
+
socket.setTimeout(timeoutMs);
|
|
413
|
+
socket.once('connect', () => done(true));
|
|
414
|
+
socket.once('timeout', () => done(false));
|
|
415
|
+
socket.once('error', () => done(false));
|
|
416
|
+
});
|
|
417
|
+
}
|
|
212
418
|
//# sourceMappingURL=gateway.js.map
|
package/dist/gateway.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"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"}
|
package/dist/hitl/api.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { FastifyInstance } from 'fastify';
|
|
2
2
|
import type { HitlEngine } from './engine.js';
|
|
3
|
+
import { type RequestSecurityOptions } from '../security/request.js';
|
|
3
4
|
export declare function hitlApiPlugin(app: FastifyInstance, opts: {
|
|
4
5
|
engine: HitlEngine;
|
|
5
6
|
secret?: string;
|
|
6
7
|
authRequired?: boolean;
|
|
7
8
|
allowedOrigins?: string[];
|
|
9
|
+
getRequestSecurity?: () => RequestSecurityOptions;
|
|
8
10
|
}): Promise<void>;
|
|
9
11
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/hitl/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/hitl/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/hitl/api.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAwB,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAG3F,wBAAsB,aAAa,CACjC,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE;IACJ,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,sBAAsB,CAAC;CACnD,GACA,OAAO,CAAC,IAAI,CAAC,CAiCf"}
|
package/dist/hitl/api.js
CHANGED
|
@@ -9,11 +9,19 @@ export async function hitlApiPlugin(app, opts) {
|
|
|
9
9
|
});
|
|
10
10
|
app.post('/hitl/approve/:id', async (request, reply) => {
|
|
11
11
|
const { id } = request.params;
|
|
12
|
+
if (!engine.hasPending(id)) {
|
|
13
|
+
reply.code(404);
|
|
14
|
+
return { error: 'No pending approval found for id' };
|
|
15
|
+
}
|
|
12
16
|
engine.approve(id);
|
|
13
17
|
return reply.send({ ok: true });
|
|
14
18
|
});
|
|
15
19
|
app.post('/hitl/deny/:id', async (request, reply) => {
|
|
16
20
|
const { id } = request.params;
|
|
21
|
+
if (!engine.hasPending(id)) {
|
|
22
|
+
reply.code(404);
|
|
23
|
+
return { error: 'No pending approval found for id' };
|
|
24
|
+
}
|
|
17
25
|
const body = request.body;
|
|
18
26
|
engine.deny(id, body?.reason);
|
|
19
27
|
return reply.send({ ok: true });
|
package/dist/hitl/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/hitl/api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/hitl/api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAA+B,MAAM,wBAAwB,CAAC;AAE3F,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAoB,EACpB,IAMC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAExB,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACjD,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC;YAChD,OAAO;QACT,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QACrD,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAwB,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,OAAO,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;QACvD,CAAC;QACD,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAClD,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,MAAwB,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAChB,OAAO,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;QACvD,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAuC,CAAC;QAC7D,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE;QACjD,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,19 +1,15 @@
|
|
|
1
1
|
import type { FastifyInstance } from 'fastify';
|
|
2
|
-
import type {
|
|
3
|
-
|
|
2
|
+
import type { ApprovalStreamHub } from './approval-stream.js';
|
|
3
|
+
import type { ApprovalApi } from './providers/types.js';
|
|
4
|
+
export declare class ApprovalDashboardRoutes {
|
|
4
5
|
private approvalApi;
|
|
5
|
-
private
|
|
6
|
-
|
|
7
|
-
constructor(approvalApi: ApprovalApi);
|
|
8
|
-
init(): Promise<void>;
|
|
6
|
+
private stream;
|
|
7
|
+
constructor(approvalApi: ApprovalApi, stream: ApprovalStreamHub);
|
|
9
8
|
registerRoutes(app: FastifyInstance, configPath?: string): void;
|
|
10
|
-
notify(requests: HitlNotification[]): Promise<void>;
|
|
11
|
-
stop(): Promise<void>;
|
|
12
9
|
private handleEvents;
|
|
13
10
|
private handleApprove;
|
|
14
11
|
private handleDeny;
|
|
15
12
|
private handleLatestVersion;
|
|
16
13
|
private rememberDecision;
|
|
17
|
-
private broadcast;
|
|
18
14
|
}
|
|
19
15
|
//# sourceMappingURL=approval-dashboard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval-dashboard.d.ts","sourceRoot":"","sources":["../../src/hitl/approval-dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"approval-dashboard.d.ts","sourceRoot":"","sources":["../../src/hitl/approval-dashboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAgC,MAAM,SAAS,CAAC;AAI7E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,sBAAsB,CAAC;AAO1E,qBAAa,uBAAuB;IAEhC,OAAO,CAAC,WAAW;IACnB,OAAO,CAAC,MAAM;gBADN,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,iBAAiB;IAGnC,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ/D,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,aAAa;IAwBrB,OAAO,CAAC,UAAU;YAUJ,mBAAmB;IAqBjC,OAAO,CAAC,gBAAgB;CAsCzB"}
|