@mandible-ai/mandible 0.2.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 +391 -0
- package/dist/examples/code-pipeline/index.d.ts +3 -0
- package/dist/examples/code-pipeline/index.d.ts.map +1 -0
- package/dist/examples/code-pipeline/index.js +239 -0
- package/dist/examples/code-pipeline/index.js.map +1 -0
- package/dist/examples/code-pipeline/with-providers.d.ts +3 -0
- package/dist/examples/code-pipeline/with-providers.d.ts.map +1 -0
- package/dist/examples/code-pipeline/with-providers.js +246 -0
- package/dist/examples/code-pipeline/with-providers.js.map +1 -0
- package/dist/examples/docker-pipeline/index.d.ts +3 -0
- package/dist/examples/docker-pipeline/index.d.ts.map +1 -0
- package/dist/examples/docker-pipeline/index.js +235 -0
- package/dist/examples/docker-pipeline/index.js.map +1 -0
- package/dist/examples/github-colony/mandible.config.d.ts +11 -0
- package/dist/examples/github-colony/mandible.config.d.ts.map +1 -0
- package/dist/examples/github-colony/mandible.config.js +63 -0
- package/dist/examples/github-colony/mandible.config.js.map +1 -0
- package/dist/examples/remote-pipeline/index.d.ts +3 -0
- package/dist/examples/remote-pipeline/index.d.ts.map +1 -0
- package/dist/examples/remote-pipeline/index.js +154 -0
- package/dist/examples/remote-pipeline/index.js.map +1 -0
- package/dist/examples/repo-maintenance/fixer.d.ts +80 -0
- package/dist/examples/repo-maintenance/fixer.d.ts.map +1 -0
- package/dist/examples/repo-maintenance/fixer.js +217 -0
- package/dist/examples/repo-maintenance/fixer.js.map +1 -0
- package/dist/examples/repo-maintenance/mandible.config.d.ts +11 -0
- package/dist/examples/repo-maintenance/mandible.config.d.ts.map +1 -0
- package/dist/examples/repo-maintenance/mandible.config.js +34 -0
- package/dist/examples/repo-maintenance/mandible.config.js.map +1 -0
- package/dist/examples/repo-maintenance/scout.d.ts +39 -0
- package/dist/examples/repo-maintenance/scout.d.ts.map +1 -0
- package/dist/examples/repo-maintenance/scout.js +163 -0
- package/dist/examples/repo-maintenance/scout.js.map +1 -0
- package/dist/examples/repo-maintenance/seed.d.ts +3 -0
- package/dist/examples/repo-maintenance/seed.d.ts.map +1 -0
- package/dist/examples/repo-maintenance/seed.js +169 -0
- package/dist/examples/repo-maintenance/seed.js.map +1 -0
- package/dist/src/cli/index.d.ts +3 -0
- package/dist/src/cli/index.d.ts.map +1 -0
- package/dist/src/cli/index.js +116 -0
- package/dist/src/cli/index.js.map +1 -0
- package/dist/src/cli/server.d.ts +15 -0
- package/dist/src/cli/server.d.ts.map +1 -0
- package/dist/src/cli/server.js +204 -0
- package/dist/src/cli/server.js.map +1 -0
- package/dist/src/cloud/client.d.ts +30 -0
- package/dist/src/cloud/client.d.ts.map +1 -0
- package/dist/src/cloud/client.js +124 -0
- package/dist/src/cloud/client.js.map +1 -0
- package/dist/src/cloud/index.d.ts +5 -0
- package/dist/src/cloud/index.d.ts.map +1 -0
- package/dist/src/cloud/index.js +3 -0
- package/dist/src/cloud/index.js.map +1 -0
- package/dist/src/cloud/types.d.ts +104 -0
- package/dist/src/cloud/types.d.ts.map +1 -0
- package/dist/src/cloud/types.js +9 -0
- package/dist/src/cloud/types.js.map +1 -0
- package/dist/src/core/attestation.d.ts +63 -0
- package/dist/src/core/attestation.d.ts.map +1 -0
- package/dist/src/core/attestation.js +331 -0
- package/dist/src/core/attestation.js.map +1 -0
- package/dist/src/core/events.d.ts +22 -0
- package/dist/src/core/events.d.ts.map +1 -0
- package/dist/src/core/events.js +45 -0
- package/dist/src/core/events.js.map +1 -0
- package/dist/src/core/index.d.ts +8 -0
- package/dist/src/core/index.d.ts.map +1 -0
- package/dist/src/core/index.js +7 -0
- package/dist/src/core/index.js.map +1 -0
- package/dist/src/core/runtime.d.ts +57 -0
- package/dist/src/core/runtime.d.ts.map +1 -0
- package/dist/src/core/runtime.js +564 -0
- package/dist/src/core/runtime.js.map +1 -0
- package/dist/src/core/signal.d.ts +33 -0
- package/dist/src/core/signal.d.ts.map +1 -0
- package/dist/src/core/signal.js +127 -0
- package/dist/src/core/signal.js.map +1 -0
- package/dist/src/core/types.d.ts +395 -0
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/types.js +19 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/core/validation.d.ts +10 -0
- package/dist/src/core/validation.d.ts.map +1 -0
- package/dist/src/core/validation.js +40 -0
- package/dist/src/core/validation.js.map +1 -0
- package/dist/src/dsl/builder.d.ts +63 -0
- package/dist/src/dsl/builder.d.ts.map +1 -0
- package/dist/src/dsl/builder.js +159 -0
- package/dist/src/dsl/builder.js.map +1 -0
- package/dist/src/dsl/index.d.ts +2 -0
- package/dist/src/dsl/index.d.ts.map +1 -0
- package/dist/src/dsl/index.js +2 -0
- package/dist/src/dsl/index.js.map +1 -0
- package/dist/src/environments/dolt/adapter.d.ts +45 -0
- package/dist/src/environments/dolt/adapter.d.ts.map +1 -0
- package/dist/src/environments/dolt/adapter.js +128 -0
- package/dist/src/environments/dolt/adapter.js.map +1 -0
- package/dist/src/environments/dolt/index.d.ts +2 -0
- package/dist/src/environments/dolt/index.d.ts.map +1 -0
- package/dist/src/environments/dolt/index.js +2 -0
- package/dist/src/environments/dolt/index.js.map +1 -0
- package/dist/src/environments/filesystem/adapter.d.ts +33 -0
- package/dist/src/environments/filesystem/adapter.d.ts.map +1 -0
- package/dist/src/environments/filesystem/adapter.js +296 -0
- package/dist/src/environments/filesystem/adapter.js.map +1 -0
- package/dist/src/environments/filesystem/index.d.ts +2 -0
- package/dist/src/environments/filesystem/index.d.ts.map +1 -0
- package/dist/src/environments/filesystem/index.js +2 -0
- package/dist/src/environments/filesystem/index.js.map +1 -0
- package/dist/src/environments/github/adapter.d.ts +47 -0
- package/dist/src/environments/github/adapter.d.ts.map +1 -0
- package/dist/src/environments/github/adapter.js +324 -0
- package/dist/src/environments/github/adapter.js.map +1 -0
- package/dist/src/environments/github/client.d.ts +48 -0
- package/dist/src/environments/github/client.d.ts.map +1 -0
- package/dist/src/environments/github/client.js +151 -0
- package/dist/src/environments/github/client.js.map +1 -0
- package/dist/src/environments/github/index.d.ts +5 -0
- package/dist/src/environments/github/index.d.ts.map +1 -0
- package/dist/src/environments/github/index.js +5 -0
- package/dist/src/environments/github/index.js.map +1 -0
- package/dist/src/environments/github/mapper.d.ts +66 -0
- package/dist/src/environments/github/mapper.d.ts.map +1 -0
- package/dist/src/environments/github/mapper.js +240 -0
- package/dist/src/environments/github/mapper.js.map +1 -0
- package/dist/src/environments/github/types.d.ts +71 -0
- package/dist/src/environments/github/types.d.ts.map +1 -0
- package/dist/src/environments/github/types.js +4 -0
- package/dist/src/environments/github/types.js.map +1 -0
- package/dist/src/environments/remote/adapter.d.ts +61 -0
- package/dist/src/environments/remote/adapter.d.ts.map +1 -0
- package/dist/src/environments/remote/adapter.js +392 -0
- package/dist/src/environments/remote/adapter.js.map +1 -0
- package/dist/src/environments/remote/index.d.ts +5 -0
- package/dist/src/environments/remote/index.d.ts.map +1 -0
- package/dist/src/environments/remote/index.js +3 -0
- package/dist/src/environments/remote/index.js.map +1 -0
- package/dist/src/environments/remote/protocol.d.ts +124 -0
- package/dist/src/environments/remote/protocol.d.ts.map +1 -0
- package/dist/src/environments/remote/protocol.js +24 -0
- package/dist/src/environments/remote/protocol.js.map +1 -0
- package/dist/src/index.d.ts +25 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +31 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/patterns/bridge.d.ts +32 -0
- package/dist/src/patterns/bridge.d.ts.map +1 -0
- package/dist/src/patterns/bridge.js +163 -0
- package/dist/src/patterns/bridge.js.map +1 -0
- package/dist/src/patterns/index.d.ts +5 -0
- package/dist/src/patterns/index.d.ts.map +1 -0
- package/dist/src/patterns/index.js +3 -0
- package/dist/src/patterns/index.js.map +1 -0
- package/dist/src/patterns/sentinel.d.ts +69 -0
- package/dist/src/patterns/sentinel.d.ts.map +1 -0
- package/dist/src/patterns/sentinel.js +184 -0
- package/dist/src/patterns/sentinel.js.map +1 -0
- package/dist/src/providers/agent.d.ts +23 -0
- package/dist/src/providers/agent.d.ts.map +1 -0
- package/dist/src/providers/agent.js +184 -0
- package/dist/src/providers/agent.js.map +1 -0
- package/dist/src/providers/bash.d.ts +13 -0
- package/dist/src/providers/bash.d.ts.map +1 -0
- package/dist/src/providers/bash.js +91 -0
- package/dist/src/providers/bash.js.map +1 -0
- package/dist/src/providers/claude-code.d.ts +23 -0
- package/dist/src/providers/claude-code.d.ts.map +1 -0
- package/dist/src/providers/claude-code.js +184 -0
- package/dist/src/providers/claude-code.js.map +1 -0
- package/dist/src/providers/context.d.ts +12 -0
- package/dist/src/providers/context.d.ts.map +1 -0
- package/dist/src/providers/context.js +160 -0
- package/dist/src/providers/context.js.map +1 -0
- package/dist/src/providers/index.d.ts +6 -0
- package/dist/src/providers/index.d.ts.map +1 -0
- package/dist/src/providers/index.js +7 -0
- package/dist/src/providers/index.js.map +1 -0
- package/dist/src/providers/structured-output.d.ts +7 -0
- package/dist/src/providers/structured-output.d.ts.map +1 -0
- package/dist/src/providers/structured-output.js +316 -0
- package/dist/src/providers/structured-output.js.map +1 -0
- package/dist/src/providers/types.d.ts +239 -0
- package/dist/src/providers/types.d.ts.map +1 -0
- package/dist/src/providers/types.js +19 -0
- package/dist/src/providers/types.js.map +1 -0
- package/package.json +129 -0
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Dashboard Server — HTTP + WebSocket for real-time observability
|
|
3
|
+
// ============================================================
|
|
4
|
+
import { createServer } from 'node:http';
|
|
5
|
+
import { readFile } from 'node:fs/promises';
|
|
6
|
+
import { join, dirname } from 'node:path';
|
|
7
|
+
import { fileURLToPath } from 'node:url';
|
|
8
|
+
import { WebSocketServer } from 'ws';
|
|
9
|
+
import { createRuntime } from '../core/runtime.js';
|
|
10
|
+
import { EventBus } from '../core/events.js';
|
|
11
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
12
|
+
export async function startDevServer(config, options) {
|
|
13
|
+
const eventBus = new EventBus();
|
|
14
|
+
const runtimes = [];
|
|
15
|
+
// Create runtimes with shared event bus
|
|
16
|
+
for (const colonyDef of config.colonies) {
|
|
17
|
+
const runtime = createRuntime(colonyDef, { eventBus });
|
|
18
|
+
runtimes.push(runtime);
|
|
19
|
+
}
|
|
20
|
+
// Collect recent events for reconnecting clients
|
|
21
|
+
const recentEvents = [];
|
|
22
|
+
const MAX_RECENT = 500;
|
|
23
|
+
eventBus.on((event) => {
|
|
24
|
+
recentEvents.push(event);
|
|
25
|
+
if (recentEvents.length > MAX_RECENT) {
|
|
26
|
+
recentEvents.splice(0, recentEvents.length - MAX_RECENT);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
// HTTP server
|
|
30
|
+
const server = createServer(async (req, res) => {
|
|
31
|
+
const url = new URL(req.url ?? '/', `http://localhost:${options.port}`);
|
|
32
|
+
// CORS headers
|
|
33
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
34
|
+
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
|
|
35
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
36
|
+
if (req.method === 'OPTIONS') {
|
|
37
|
+
res.writeHead(204);
|
|
38
|
+
res.end();
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
if (url.pathname === '/api/state') {
|
|
43
|
+
const signals = await config.environment.snapshot();
|
|
44
|
+
sendJson(res, { signals });
|
|
45
|
+
}
|
|
46
|
+
else if (url.pathname === '/api/colonies') {
|
|
47
|
+
const colonies = runtimes.map(rt => ({
|
|
48
|
+
name: rt.name,
|
|
49
|
+
state: rt.state,
|
|
50
|
+
activeCount: rt.activeCount,
|
|
51
|
+
concurrency: rt.concurrency,
|
|
52
|
+
stats: rt.stats,
|
|
53
|
+
}));
|
|
54
|
+
sendJson(res, { colonies });
|
|
55
|
+
}
|
|
56
|
+
else if (url.pathname === '/api/stats') {
|
|
57
|
+
const stats = runtimes.map(rt => ({
|
|
58
|
+
name: rt.name,
|
|
59
|
+
...rt.stats,
|
|
60
|
+
}));
|
|
61
|
+
sendJson(res, { stats });
|
|
62
|
+
}
|
|
63
|
+
else if (url.pathname === '/api/events') {
|
|
64
|
+
sendJson(res, { events: recentEvents });
|
|
65
|
+
}
|
|
66
|
+
else if (url.pathname === '/api/signals' && req.method === 'POST') {
|
|
67
|
+
const body = await readBody(req);
|
|
68
|
+
const { type, payload, tags } = JSON.parse(body);
|
|
69
|
+
const signal = await config.environment.deposit({
|
|
70
|
+
type,
|
|
71
|
+
payload: payload ?? {},
|
|
72
|
+
meta: {
|
|
73
|
+
deposited_by: 'dashboard',
|
|
74
|
+
tags,
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
sendJson(res, { signal }, 201);
|
|
78
|
+
}
|
|
79
|
+
else if (url.pathname === '/' || url.pathname === '/index.html') {
|
|
80
|
+
await serveDashboard(res);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
res.writeHead(404);
|
|
84
|
+
res.end('Not found');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
console.error('Server error:', err);
|
|
89
|
+
res.writeHead(500);
|
|
90
|
+
res.end(JSON.stringify({ error: err.message }));
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
// WebSocket server
|
|
94
|
+
const wss = new WebSocketServer({ server });
|
|
95
|
+
wss.on('connection', (ws) => {
|
|
96
|
+
// Send recent events on connect for catchup
|
|
97
|
+
ws.send(JSON.stringify({ type: 'init', events: recentEvents.slice(-100) }));
|
|
98
|
+
});
|
|
99
|
+
// Forward runtime events to all connected WebSocket clients
|
|
100
|
+
eventBus.on((event) => {
|
|
101
|
+
const message = JSON.stringify({ type: 'event', data: event });
|
|
102
|
+
for (const client of wss.clients) {
|
|
103
|
+
if (client.readyState === 1) { // WebSocket.OPEN
|
|
104
|
+
client.send(message);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
// Listen for remote events relayed through the signal server
|
|
109
|
+
if ('onEvent' in config.environment && typeof config.environment.onEvent === 'function') {
|
|
110
|
+
config.environment.onEvent((event) => {
|
|
111
|
+
recentEvents.push(event);
|
|
112
|
+
if (recentEvents.length > MAX_RECENT) {
|
|
113
|
+
recentEvents.splice(0, recentEvents.length - MAX_RECENT);
|
|
114
|
+
}
|
|
115
|
+
const message = JSON.stringify({ type: 'event', data: event });
|
|
116
|
+
for (const client of wss.clients) {
|
|
117
|
+
if (client.readyState === 1) {
|
|
118
|
+
client.send(message);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
// Periodic snapshot broadcast (for concentration decay animation)
|
|
124
|
+
const snapshotInterval = setInterval(async () => {
|
|
125
|
+
try {
|
|
126
|
+
const signals = await config.environment.snapshot();
|
|
127
|
+
const message = JSON.stringify({ type: 'snapshot', signals });
|
|
128
|
+
for (const client of wss.clients) {
|
|
129
|
+
if (client.readyState === 1) {
|
|
130
|
+
client.send(message);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
catch { /* ignore snapshot errors */ }
|
|
135
|
+
}, 2000);
|
|
136
|
+
// Start HTTP server
|
|
137
|
+
server.listen(options.port, () => {
|
|
138
|
+
console.log(` dashboard: http://localhost:${options.port}`);
|
|
139
|
+
});
|
|
140
|
+
// Start all colony runtimes
|
|
141
|
+
console.log(` starting ${runtimes.length} colonies...`);
|
|
142
|
+
for (const runtime of runtimes) {
|
|
143
|
+
await runtime.start();
|
|
144
|
+
console.log(` + ${runtime.name} [running]`);
|
|
145
|
+
}
|
|
146
|
+
console.log('');
|
|
147
|
+
// Auto-open browser
|
|
148
|
+
if (options.open) {
|
|
149
|
+
const url = `http://localhost:${options.port}`;
|
|
150
|
+
try {
|
|
151
|
+
const { exec } = await import('node:child_process');
|
|
152
|
+
const cmd = process.platform === 'darwin' ? 'open' :
|
|
153
|
+
process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
154
|
+
exec(`${cmd} ${url}`);
|
|
155
|
+
}
|
|
156
|
+
catch { /* ignore open errors */ }
|
|
157
|
+
}
|
|
158
|
+
// Graceful shutdown
|
|
159
|
+
const shutdown = async () => {
|
|
160
|
+
console.log('\n shutting down...');
|
|
161
|
+
clearInterval(snapshotInterval);
|
|
162
|
+
for (const runtime of runtimes) {
|
|
163
|
+
await runtime.stop();
|
|
164
|
+
console.log(` - ${runtime.name} [stopped]`);
|
|
165
|
+
}
|
|
166
|
+
wss.close();
|
|
167
|
+
server.close();
|
|
168
|
+
console.log(' done.\n');
|
|
169
|
+
process.exit(0);
|
|
170
|
+
};
|
|
171
|
+
process.on('SIGINT', shutdown);
|
|
172
|
+
process.on('SIGTERM', shutdown);
|
|
173
|
+
}
|
|
174
|
+
function sendJson(res, data, status = 200) {
|
|
175
|
+
res.writeHead(status, { 'Content-Type': 'application/json' });
|
|
176
|
+
res.end(JSON.stringify(data));
|
|
177
|
+
}
|
|
178
|
+
function readBody(req) {
|
|
179
|
+
return new Promise((resolve, reject) => {
|
|
180
|
+
const chunks = [];
|
|
181
|
+
req.on('data', (chunk) => chunks.push(chunk));
|
|
182
|
+
req.on('end', () => resolve(Buffer.concat(chunks).toString()));
|
|
183
|
+
req.on('error', reject);
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
async function serveDashboard(res) {
|
|
187
|
+
try {
|
|
188
|
+
const htmlPath = join(__dirname, 'dashboard.html');
|
|
189
|
+
const html = await readFile(htmlPath, 'utf-8');
|
|
190
|
+
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
191
|
+
res.end(html);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
|
|
195
|
+
res.end(FALLBACK_HTML);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
const FALLBACK_HTML = `<!DOCTYPE html>
|
|
199
|
+
<html><head><title>mandible</title></head>
|
|
200
|
+
<body style="background:#1a1a2e;color:#eee;font-family:monospace;padding:2em">
|
|
201
|
+
<h1>mandible dashboard</h1>
|
|
202
|
+
<p>dashboard.html not found — rebuild the project.</p>
|
|
203
|
+
</body></html>`;
|
|
204
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/cli/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { CloudConfig, Project, CreateProjectRequest, DeployRequest, DeployResult, ColonyStatus, ZoneStatus, CreateApiKeyResponse } from './types.js';
|
|
2
|
+
export declare class MandibleCloudError extends Error {
|
|
3
|
+
code: string;
|
|
4
|
+
status: number;
|
|
5
|
+
constructor(code: string, message: string, status: number);
|
|
6
|
+
}
|
|
7
|
+
export declare class MandibleCloudClient {
|
|
8
|
+
private apiUrl;
|
|
9
|
+
private apiKey;
|
|
10
|
+
private project?;
|
|
11
|
+
constructor(config: CloudConfig);
|
|
12
|
+
createProject(req: CreateProjectRequest): Promise<Project>;
|
|
13
|
+
getProject(id?: string): Promise<Project>;
|
|
14
|
+
listProjects(): Promise<Project[]>;
|
|
15
|
+
deleteProject(id?: string): Promise<void>;
|
|
16
|
+
deploy(req: DeployRequest, projectId?: string): Promise<DeployResult>;
|
|
17
|
+
listColonies(projectId?: string): Promise<ColonyStatus[]>;
|
|
18
|
+
destroyColony(colonyName: string, projectId?: string): Promise<void>;
|
|
19
|
+
teardown(projectId?: string): Promise<void>;
|
|
20
|
+
listZones(projectId?: string): Promise<ZoneStatus[]>;
|
|
21
|
+
getZone(zoneId: string, projectId?: string): Promise<ZoneStatus>;
|
|
22
|
+
createApiKey(projectId?: string): Promise<CreateApiKeyResponse>;
|
|
23
|
+
revokeApiKey(keyId: string): Promise<void>;
|
|
24
|
+
private get;
|
|
25
|
+
private post;
|
|
26
|
+
private del;
|
|
27
|
+
private fetch;
|
|
28
|
+
private requireProject;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/cloud/client.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,WAAW,EACX,OAAO,EACP,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,UAAU,EAEV,oBAAoB,EAErB,MAAM,YAAY,CAAC;AAEpB,qBAAa,kBAAmB,SAAQ,KAAK;IACxB,IAAI,EAAE,MAAM;IAA0B,MAAM,EAAE,MAAM;gBAApD,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAS,MAAM,EAAE,MAAM;CAIxE;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAC,CAAS;gBAEb,MAAM,EAAE,WAAW;IAUzB,aAAa,CAAC,GAAG,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;IAI1D,UAAU,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzC,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAIlC,aAAa,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQzC,MAAM,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIrE,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAIzD,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW3C,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAIpD,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAQhE,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAI/D,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQlC,GAAG;YAIH,IAAI;YAQJ,GAAG;YAIH,KAAK;IAyBnB,OAAO,CAAC,cAAc;CAMvB"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Mandible Cloud — API Client
|
|
3
|
+
// ============================================================
|
|
4
|
+
// HTTP client for the Mandible Cloud REST API.
|
|
5
|
+
// Handles project management, colony deployment, zone status.
|
|
6
|
+
// ============================================================
|
|
7
|
+
export class MandibleCloudError extends Error {
|
|
8
|
+
code;
|
|
9
|
+
status;
|
|
10
|
+
constructor(code, message, status) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.code = code;
|
|
13
|
+
this.status = status;
|
|
14
|
+
this.name = 'MandibleCloudError';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class MandibleCloudClient {
|
|
18
|
+
apiUrl;
|
|
19
|
+
apiKey;
|
|
20
|
+
project;
|
|
21
|
+
constructor(config) {
|
|
22
|
+
this.apiUrl = config.apiUrl.replace(/\/$/, '');
|
|
23
|
+
this.apiKey = config.apiKey;
|
|
24
|
+
this.project = config.project;
|
|
25
|
+
}
|
|
26
|
+
// ----------------------------------------------------------
|
|
27
|
+
// Projects
|
|
28
|
+
// ----------------------------------------------------------
|
|
29
|
+
async createProject(req) {
|
|
30
|
+
return this.post('/v1/projects', req);
|
|
31
|
+
}
|
|
32
|
+
async getProject(id) {
|
|
33
|
+
return this.get(`/v1/projects/${id ?? this.requireProject()}`);
|
|
34
|
+
}
|
|
35
|
+
async listProjects() {
|
|
36
|
+
return this.get('/v1/projects');
|
|
37
|
+
}
|
|
38
|
+
async deleteProject(id) {
|
|
39
|
+
return this.del(`/v1/projects/${id ?? this.requireProject()}`);
|
|
40
|
+
}
|
|
41
|
+
// ----------------------------------------------------------
|
|
42
|
+
// Deploy / Colonies
|
|
43
|
+
// ----------------------------------------------------------
|
|
44
|
+
async deploy(req, projectId) {
|
|
45
|
+
return this.post(`/v1/projects/${projectId ?? this.requireProject()}/deploy`, req);
|
|
46
|
+
}
|
|
47
|
+
async listColonies(projectId) {
|
|
48
|
+
return this.get(`/v1/projects/${projectId ?? this.requireProject()}/colonies`);
|
|
49
|
+
}
|
|
50
|
+
async destroyColony(colonyName, projectId) {
|
|
51
|
+
return this.del(`/v1/projects/${projectId ?? this.requireProject()}/colonies/${colonyName}`);
|
|
52
|
+
}
|
|
53
|
+
async teardown(projectId) {
|
|
54
|
+
const colonies = await this.listColonies(projectId);
|
|
55
|
+
for (const colony of colonies) {
|
|
56
|
+
await this.destroyColony(colony.name, projectId);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// ----------------------------------------------------------
|
|
60
|
+
// Zones
|
|
61
|
+
// ----------------------------------------------------------
|
|
62
|
+
async listZones(projectId) {
|
|
63
|
+
return this.get(`/v1/projects/${projectId ?? this.requireProject()}/zones`);
|
|
64
|
+
}
|
|
65
|
+
async getZone(zoneId, projectId) {
|
|
66
|
+
return this.get(`/v1/projects/${projectId ?? this.requireProject()}/zones/${zoneId}`);
|
|
67
|
+
}
|
|
68
|
+
// ----------------------------------------------------------
|
|
69
|
+
// API Keys
|
|
70
|
+
// ----------------------------------------------------------
|
|
71
|
+
async createApiKey(projectId) {
|
|
72
|
+
return this.post(`/v1/auth/keys`, { project: projectId ?? this.requireProject() });
|
|
73
|
+
}
|
|
74
|
+
async revokeApiKey(keyId) {
|
|
75
|
+
return this.del(`/v1/auth/keys/${keyId}`);
|
|
76
|
+
}
|
|
77
|
+
// ----------------------------------------------------------
|
|
78
|
+
// HTTP helpers
|
|
79
|
+
// ----------------------------------------------------------
|
|
80
|
+
async get(path) {
|
|
81
|
+
return this.fetch(path, { method: 'GET' });
|
|
82
|
+
}
|
|
83
|
+
async post(path, body) {
|
|
84
|
+
return this.fetch(path, {
|
|
85
|
+
method: 'POST',
|
|
86
|
+
headers: { 'Content-Type': 'application/json' },
|
|
87
|
+
body: JSON.stringify(body),
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
async del(path) {
|
|
91
|
+
return this.fetch(path, { method: 'DELETE' });
|
|
92
|
+
}
|
|
93
|
+
async fetch(path, init) {
|
|
94
|
+
const url = `${this.apiUrl}${path}`;
|
|
95
|
+
const response = await globalThis.fetch(url, {
|
|
96
|
+
...init,
|
|
97
|
+
headers: {
|
|
98
|
+
...init.headers,
|
|
99
|
+
'Authorization': `Bearer ${this.apiKey}`,
|
|
100
|
+
'User-Agent': 'mandible-sdk/0.1.0',
|
|
101
|
+
},
|
|
102
|
+
});
|
|
103
|
+
if (!response.ok) {
|
|
104
|
+
let error;
|
|
105
|
+
try {
|
|
106
|
+
error = await response.json();
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
error = { code: 'UNKNOWN', message: response.statusText };
|
|
110
|
+
}
|
|
111
|
+
throw new MandibleCloudError(error.code, error.message, response.status);
|
|
112
|
+
}
|
|
113
|
+
if (response.status === 204)
|
|
114
|
+
return undefined;
|
|
115
|
+
return response.json();
|
|
116
|
+
}
|
|
117
|
+
requireProject() {
|
|
118
|
+
if (!this.project) {
|
|
119
|
+
throw new Error('No project specified. Pass project to constructor or method.');
|
|
120
|
+
}
|
|
121
|
+
return this.project;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/cloud/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { RemoteEnvironment } from '../environments/remote/index.js';
|
|
2
|
+
export type { RemoteEnvConfig } from '../environments/remote/index.js';
|
|
3
|
+
export { MandibleCloudClient, MandibleCloudError } from './client.js';
|
|
4
|
+
export type { CloudConfig, Project, CreateProjectRequest, DeployRequest, DeployColonyConfig, DeployResult, DeployedColony, ZoneState, ZoneStatus, ZoneMetrics, ZoneResources, ColonyStatus, ApiKey, CreateApiKeyResponse, ApiError, } from './types.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cloud/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,YAAY,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACtE,YAAY,EACV,WAAW,EACX,OAAO,EACP,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,SAAS,EACT,UAAU,EACV,WAAW,EACX,aAAa,EACb,YAAY,EACZ,MAAM,EACN,oBAAoB,EACpB,QAAQ,GACT,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cloud/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
export interface CloudConfig {
|
|
2
|
+
apiUrl: string;
|
|
3
|
+
apiKey: string;
|
|
4
|
+
project?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface Project {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
signalServerUrl: string;
|
|
10
|
+
createdAt: string;
|
|
11
|
+
colonyCount: number;
|
|
12
|
+
}
|
|
13
|
+
export interface CreateProjectRequest {
|
|
14
|
+
name: string;
|
|
15
|
+
}
|
|
16
|
+
export interface DeployRequest {
|
|
17
|
+
colonies: DeployColonyConfig[];
|
|
18
|
+
}
|
|
19
|
+
export interface DeployColonyConfig {
|
|
20
|
+
name: string;
|
|
21
|
+
image?: string;
|
|
22
|
+
sensors: Array<{
|
|
23
|
+
query: {
|
|
24
|
+
type?: string | string[];
|
|
25
|
+
unclaimed?: boolean;
|
|
26
|
+
minConcentration?: number;
|
|
27
|
+
tags?: string[];
|
|
28
|
+
};
|
|
29
|
+
pollInterval?: number;
|
|
30
|
+
}>;
|
|
31
|
+
claimStrategy: string;
|
|
32
|
+
concurrency: number;
|
|
33
|
+
config?: Record<string, unknown>;
|
|
34
|
+
resources?: ZoneResources;
|
|
35
|
+
}
|
|
36
|
+
export interface ZoneResources {
|
|
37
|
+
targetCpus?: number;
|
|
38
|
+
maxCpus?: number;
|
|
39
|
+
targetMemoryMb?: number;
|
|
40
|
+
maxMemoryMb?: number;
|
|
41
|
+
}
|
|
42
|
+
export interface DeployResult {
|
|
43
|
+
projectId: string;
|
|
44
|
+
colonies: DeployedColony[];
|
|
45
|
+
signalServerUrl: string;
|
|
46
|
+
dashboardUrl: string;
|
|
47
|
+
}
|
|
48
|
+
export interface DeployedColony {
|
|
49
|
+
name: string;
|
|
50
|
+
zoneId: string;
|
|
51
|
+
zoneName: string;
|
|
52
|
+
state: ZoneState;
|
|
53
|
+
resources: ZoneResources;
|
|
54
|
+
createdAt: string;
|
|
55
|
+
}
|
|
56
|
+
export type ZoneState = 'creating' | 'created' | 'ready' | 'running' | 'exited' | 'destroying' | 'destroyed' | 'failed';
|
|
57
|
+
export interface ZoneStatus {
|
|
58
|
+
zoneId: string;
|
|
59
|
+
zoneName: string;
|
|
60
|
+
colony: string;
|
|
61
|
+
state: ZoneState;
|
|
62
|
+
resources: ZoneResources;
|
|
63
|
+
metrics?: ZoneMetrics;
|
|
64
|
+
createdAt: string;
|
|
65
|
+
uptimeSeconds: number;
|
|
66
|
+
}
|
|
67
|
+
export interface ZoneMetrics {
|
|
68
|
+
cpuUsagePercent: number;
|
|
69
|
+
memoryUsedMb: number;
|
|
70
|
+
memoryTotalMb: number;
|
|
71
|
+
signalsProcessed: number;
|
|
72
|
+
signalsDeposited: number;
|
|
73
|
+
errors: number;
|
|
74
|
+
}
|
|
75
|
+
export interface ColonyStatus {
|
|
76
|
+
name: string;
|
|
77
|
+
zone: ZoneStatus;
|
|
78
|
+
runtimeStats: {
|
|
79
|
+
signalsSensed: number;
|
|
80
|
+
signalsClaimed: number;
|
|
81
|
+
signalsProcessed: number;
|
|
82
|
+
signalsDeposited: number;
|
|
83
|
+
claimConflicts: number;
|
|
84
|
+
errors: number;
|
|
85
|
+
avgProcessingMs: number;
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
export interface ApiKey {
|
|
89
|
+
id: string;
|
|
90
|
+
prefix: string;
|
|
91
|
+
project: string;
|
|
92
|
+
createdAt: string;
|
|
93
|
+
lastUsedAt?: string;
|
|
94
|
+
}
|
|
95
|
+
export interface CreateApiKeyResponse {
|
|
96
|
+
id: string;
|
|
97
|
+
key: string;
|
|
98
|
+
prefix: string;
|
|
99
|
+
}
|
|
100
|
+
export interface ApiError {
|
|
101
|
+
code: string;
|
|
102
|
+
message: string;
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/cloud/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Mandible Cloud — API Types
|
|
3
|
+
// ============================================================
|
|
4
|
+
// TypeScript types for the Mandible Cloud REST API.
|
|
5
|
+
// These define the contract between the open-source CLI/client
|
|
6
|
+
// and the private Cloud API server.
|
|
7
|
+
// ============================================================
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cloud/types.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,6BAA6B;AAC7B,+DAA+D;AAC/D,oDAAoD;AACpD,+DAA+D;AAC/D,oCAAoC;AACpC,+DAA+D"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { Signal, Attestation, ColonyIdentity, TrustPolicy, SigningConfig, VerificationResult } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generate a new Ed25519 colony identity.
|
|
4
|
+
* Uses @noble/ed25519 — portable across Node, browsers, and edge workers.
|
|
5
|
+
* Keys are raw 32-byte values, hex-encoded for storage.
|
|
6
|
+
*/
|
|
7
|
+
export declare function generateIdentity(name: string, environment: string, metadata?: Record<string, unknown>): Promise<ColonyIdentity>;
|
|
8
|
+
/**
|
|
9
|
+
* Create a canonical hash of the signal content that gets signed.
|
|
10
|
+
* Signs: type + payload + caused_by — the immutable semantic content.
|
|
11
|
+
* Excludes: id, meta timestamps, concentration (mutable runtime state).
|
|
12
|
+
*/
|
|
13
|
+
export declare function canonicalHash(signal: Signal<any>): string;
|
|
14
|
+
/**
|
|
15
|
+
* Create a canonical hash for an attestation.
|
|
16
|
+
* Each attestation signs over the previous signature in the chain,
|
|
17
|
+
* creating a linked chain of custody.
|
|
18
|
+
*/
|
|
19
|
+
export declare function attestationHash(signalId: string, sourceEnvironment: string, targetEnvironment: string, timestamp: number, previousSignature?: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Sign a signal using a colony's private key.
|
|
22
|
+
* Returns a new signal with signature and signer set in meta.
|
|
23
|
+
* Does NOT mutate the original signal.
|
|
24
|
+
*/
|
|
25
|
+
export declare function signSignal<T>(signal: Signal<T>, identity: ColonyIdentity): Promise<Signal<T>>;
|
|
26
|
+
/**
|
|
27
|
+
* Create a signing function that can be used as middleware.
|
|
28
|
+
* Automatically signs all signals deposited by a colony.
|
|
29
|
+
*/
|
|
30
|
+
export declare function createSigner(config: SigningConfig): <T>(signal: Signal<T>) => Promise<Signal<T>>;
|
|
31
|
+
/**
|
|
32
|
+
* Verify a signal's colony signature.
|
|
33
|
+
* Returns true if the signature is valid for the signer's public key.
|
|
34
|
+
*/
|
|
35
|
+
export declare function verifySignature(signal: Signal): Promise<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* Verify an entire attestation chain.
|
|
38
|
+
* Walks the chain from first attestation to last, checking:
|
|
39
|
+
* 1. Each attestation's signature is valid
|
|
40
|
+
* 2. The chain links correctly (each signs over the previous)
|
|
41
|
+
* 3. Source/target environments are consistent across the chain
|
|
42
|
+
*/
|
|
43
|
+
export declare function verifyAttestationChain(signalId: string, attestations: Attestation[]): Promise<Array<{
|
|
44
|
+
attester: string;
|
|
45
|
+
valid: boolean;
|
|
46
|
+
reason: string;
|
|
47
|
+
}>>;
|
|
48
|
+
/**
|
|
49
|
+
* Full signal verification: colony signature + attestation chain.
|
|
50
|
+
* Returns a VerificationResult with the determined trust level.
|
|
51
|
+
*/
|
|
52
|
+
export declare function verifySignal(signal: Signal, policy?: TrustPolicy): Promise<VerificationResult>;
|
|
53
|
+
/**
|
|
54
|
+
* Create an attestation for a signal being bridged between environments.
|
|
55
|
+
* The bridge signs the transfer, appending to the attestation chain.
|
|
56
|
+
*/
|
|
57
|
+
export declare function createAttestation(signalId: string, sourceEnvironment: string, targetEnvironment: string, bridgeIdentity: ColonyIdentity, existingAttestations?: Attestation[]): Promise<Attestation>;
|
|
58
|
+
/**
|
|
59
|
+
* Prepare a signal for bridging: add attestation and source metadata.
|
|
60
|
+
* Returns a new signal ready to deposit in the target environment.
|
|
61
|
+
*/
|
|
62
|
+
export declare function prepareForBridge(signal: Signal, sourceEnvironment: string, targetEnvironment: string, bridgeIdentity: ColonyIdentity): Promise<Signal>;
|
|
63
|
+
//# sourceMappingURL=attestation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attestation.d.ts","sourceRoot":"","sources":["../../../src/core/attestation.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EACX,cAAc,EAEd,WAAW,EACX,aAAa,EACb,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAkBpB;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,cAAc,CAAC,CAYzB;AAMD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAOzD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EACzB,iBAAiB,EAAE,MAAM,EACzB,SAAS,EAAE,MAAM,EACjB,iBAAiB,CAAC,EAAE,MAAM,GACzB,MAAM,CASR;AAMD;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAYnG;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,aAAa,IAClC,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAUxD;AAMD;;;GAGG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAetE;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,WAAW,EAAE,GAC1B,OAAO,CAAC,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CA4CtE;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAiHpG;AAMD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,EACzB,iBAAiB,EAAE,MAAM,EACzB,cAAc,EAAE,cAAc,EAC9B,oBAAoB,CAAC,EAAE,WAAW,EAAE,GACnC,OAAO,CAAC,WAAW,CAAC,CAwBtB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,iBAAiB,EAAE,MAAM,EACzB,iBAAiB,EAAE,MAAM,EACzB,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,MAAM,CAAC,CAkBjB"}
|