arkna-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.d.ts ADDED
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ARKNA CLI — Setup and manage agent governance
4
+ *
5
+ * Commands:
6
+ * npx @arkna/sdk init — Interactive setup: register agent, write config, install hooks
7
+ * npx @arkna/sdk init --token <token> --url <url> — Non-interactive setup
8
+ * npx @arkna/sdk status — Check connection, compliance, enforcement status
9
+ * npx @arkna/sdk heartbeat — Send a single heartbeat (useful for cron)
10
+ *
11
+ * What `init` does:
12
+ * 1. Creates .arkna/.env with gateway token + URL
13
+ * 2. Registers agent with the ARKNA gateway
14
+ * 3. Fetches and writes governance contract (.arkna/governance.json)
15
+ * 4. Detects OpenClaw and auto-installs @arkna/openclaw-hook
16
+ * 5. Starts enforcement (if governance contract is strict mode)
17
+ * 6. Sends initial heartbeat to confirm connectivity
18
+ */
19
+ export {};
20
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;GAgBG"}
package/dist/cli.js ADDED
@@ -0,0 +1,562 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * ARKNA CLI — Setup and manage agent governance
5
+ *
6
+ * Commands:
7
+ * npx @arkna/sdk init — Interactive setup: register agent, write config, install hooks
8
+ * npx @arkna/sdk init --token <token> --url <url> — Non-interactive setup
9
+ * npx @arkna/sdk status — Check connection, compliance, enforcement status
10
+ * npx @arkna/sdk heartbeat — Send a single heartbeat (useful for cron)
11
+ *
12
+ * What `init` does:
13
+ * 1. Creates .arkna/.env with gateway token + URL
14
+ * 2. Registers agent with the ARKNA gateway
15
+ * 3. Fetches and writes governance contract (.arkna/governance.json)
16
+ * 4. Detects OpenClaw and auto-installs @arkna/openclaw-hook
17
+ * 5. Starts enforcement (if governance contract is strict mode)
18
+ * 6. Sends initial heartbeat to confirm connectivity
19
+ */
20
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ var desc = Object.getOwnPropertyDescriptor(m, k);
23
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
24
+ desc = { enumerable: true, get: function() { return m[k]; } };
25
+ }
26
+ Object.defineProperty(o, k2, desc);
27
+ }) : (function(o, m, k, k2) {
28
+ if (k2 === undefined) k2 = k;
29
+ o[k2] = m[k];
30
+ }));
31
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
32
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
33
+ }) : function(o, v) {
34
+ o["default"] = v;
35
+ });
36
+ var __importStar = (this && this.__importStar) || (function () {
37
+ var ownKeys = function(o) {
38
+ ownKeys = Object.getOwnPropertyNames || function (o) {
39
+ var ar = [];
40
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
41
+ return ar;
42
+ };
43
+ return ownKeys(o);
44
+ };
45
+ return function (mod) {
46
+ if (mod && mod.__esModule) return mod;
47
+ var result = {};
48
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
49
+ __setModuleDefault(result, mod);
50
+ return result;
51
+ };
52
+ })();
53
+ Object.defineProperty(exports, "__esModule", { value: true });
54
+ const fs = __importStar(require("fs"));
55
+ const path = __importStar(require("path"));
56
+ const readline = __importStar(require("readline"));
57
+ const child_process_1 = require("child_process");
58
+ // ============================================================================
59
+ // Helpers
60
+ // ============================================================================
61
+ const COLORS = {
62
+ reset: '\x1b[0m',
63
+ green: '\x1b[32m',
64
+ red: '\x1b[31m',
65
+ yellow: '\x1b[33m',
66
+ blue: '\x1b[34m',
67
+ dim: '\x1b[2m',
68
+ bold: '\x1b[1m',
69
+ };
70
+ function log(msg) { console.log(msg); }
71
+ function ok(msg) { log(`${COLORS.green}✓${COLORS.reset} ${msg}`); }
72
+ function warn(msg) { log(`${COLORS.yellow}⚠${COLORS.reset} ${msg}`); }
73
+ function fail(msg) { log(`${COLORS.red}✗${COLORS.reset} ${msg}`); }
74
+ function info(msg) { log(`${COLORS.dim} ${msg}${COLORS.reset}`); }
75
+ function heading(msg) { log(`\n${COLORS.bold}${msg}${COLORS.reset}`); }
76
+ function prompt(question) {
77
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
78
+ return new Promise(resolve => {
79
+ rl.question(question, answer => { rl.close(); resolve(answer.trim()); });
80
+ });
81
+ }
82
+ function detectOpenClaw() {
83
+ try {
84
+ (0, child_process_1.execSync)('which openclaw', { stdio: 'pipe' });
85
+ return true;
86
+ }
87
+ catch {
88
+ return false;
89
+ }
90
+ }
91
+ function detectPlatform() {
92
+ if (detectOpenClaw())
93
+ return 'openclaw';
94
+ try {
95
+ // Check for common agent frameworks
96
+ const pkg = JSON.parse(fs.readFileSync('package.json', 'utf-8'));
97
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
98
+ if (deps['crewai'] || deps['@crewai/sdk'])
99
+ return 'crewai';
100
+ if (deps['langchain'] || deps['@langchain/core'])
101
+ return 'langchain';
102
+ if (deps['autogen'] || deps['@autogen/core'])
103
+ return 'autogen';
104
+ }
105
+ catch { }
106
+ return 'custom';
107
+ }
108
+ /**
109
+ * Apply fail-closed OpenClaw hard-routing policy.
110
+ *
111
+ * This does not "route" native tools through ARKNA (OpenClaw core would need a pre-tool middleware for that),
112
+ * so we enforce by denying direct high-risk native tools and requiring governed SDK paths instead.
113
+ */
114
+ function applyOpenClawHardRoutePolicy() {
115
+ const cfgPath = path.join(process.env.HOME || '', '.openclaw', 'openclaw.json');
116
+ const notes = [];
117
+ if (!fs.existsSync(cfgPath)) {
118
+ return { changed: false, notes: ['openclaw config not found'] };
119
+ }
120
+ const cfg = JSON.parse(fs.readFileSync(cfgPath, 'utf-8'));
121
+ const agents = (cfg.agents ||= {});
122
+ const list = (agents.list ||= [{ id: 'main' }]);
123
+ let main = list.find((a) => a && a.id === 'main');
124
+ if (!main) {
125
+ main = { id: 'main' };
126
+ list.push(main);
127
+ }
128
+ const tools = (main.tools ||= {});
129
+ const deny = new Set(Array.isArray(tools.deny) ? tools.deny : []);
130
+ // High-risk direct paths that can bypass ARKNA policy decision flow
131
+ for (const t of ['message', 'exec', 'nodes', 'browser'])
132
+ deny.add(t);
133
+ tools.deny = Array.from(deny).sort();
134
+ // Global exec fail-closed policy
135
+ const rootTools = (cfg.tools ||= {});
136
+ const execCfg = (rootTools.exec ||= {});
137
+ execCfg.security = 'deny';
138
+ execCfg.ask = 'off';
139
+ fs.writeFileSync(cfgPath, JSON.stringify(cfg, null, 2) + '\n');
140
+ notes.push('main.tools.deny += [message, exec, nodes, browser]');
141
+ notes.push('tools.exec.security=deny, tools.exec.ask=off');
142
+ return { changed: true, notes };
143
+ }
144
+ // ============================================================================
145
+ // Commands
146
+ // ============================================================================
147
+ async function init(args) {
148
+ heading('ARKNA Agent Setup');
149
+ log('');
150
+ // Parse args
151
+ let token = '';
152
+ let url = 'https://api.arkna.com.au';
153
+ let name = '';
154
+ let nonInteractive = false;
155
+ for (let i = 0; i < args.length; i++) {
156
+ if (args[i] === '--token' && args[i + 1]) {
157
+ token = args[++i];
158
+ nonInteractive = true;
159
+ }
160
+ if (args[i] === '--url' && args[i + 1]) {
161
+ url = args[++i];
162
+ }
163
+ if (args[i] === '--name' && args[i + 1]) {
164
+ name = args[++i];
165
+ }
166
+ if (args[i] === '--non-interactive' || args[i] === '-y') {
167
+ nonInteractive = true;
168
+ }
169
+ }
170
+ // Step 1: Get credentials
171
+ heading('1. Gateway credentials');
172
+ // Check if .arkna/.env already exists
173
+ const arknaDir = path.join(process.cwd(), '.arkna');
174
+ const envPath = path.join(arknaDir, '.env');
175
+ if (fs.existsSync(envPath)) {
176
+ const existing = fs.readFileSync(envPath, 'utf-8');
177
+ const existingToken = existing.match(/ARKNA_GATEWAY_TOKEN=(.+)/)?.[1]?.trim();
178
+ if (existingToken) {
179
+ ok('.arkna/.env already exists');
180
+ if (!token)
181
+ token = existingToken;
182
+ const existingUrl = existing.match(/ARKNA_URL=(.+)/)?.[1]?.trim();
183
+ if (existingUrl && !url)
184
+ url = existingUrl;
185
+ }
186
+ }
187
+ if (!token && !nonInteractive) {
188
+ log(' Get your token from https://app.arkna.com.au → Settings → Integration Tokens');
189
+ token = await prompt(` ${COLORS.bold}Gateway token:${COLORS.reset} `);
190
+ }
191
+ if (!token) {
192
+ fail('No gateway token provided. Get one from https://app.arkna.com.au');
193
+ process.exit(1);
194
+ }
195
+ if (!nonInteractive && !url) {
196
+ const customUrl = await prompt(` ${COLORS.bold}Gateway URL${COLORS.reset} [${url}]: `);
197
+ if (customUrl)
198
+ url = customUrl;
199
+ }
200
+ // Write .arkna/.env
201
+ fs.mkdirSync(arknaDir, { recursive: true });
202
+ // Add .arkna to .gitignore if not already there
203
+ const gitignorePath = path.join(arknaDir, '.gitignore');
204
+ if (!fs.existsSync(gitignorePath)) {
205
+ fs.writeFileSync(gitignorePath, '.env\ngovernance.json\n');
206
+ }
207
+ const envContent = `# ARKNA AI Trust Gateway — auto-generated by arkna init
208
+ # Docs: https://docs.arkna.com.au/sdk
209
+ ARKNA_GATEWAY_TOKEN=${token}
210
+ ARKNA_URL=${url}
211
+ `;
212
+ fs.writeFileSync(envPath, envContent);
213
+ ok('.arkna/.env written');
214
+ // Step 2: Register agent
215
+ heading('2. Agent registration');
216
+ const platform = detectPlatform();
217
+ if (!name) {
218
+ name = path.basename(process.cwd());
219
+ if (!nonInteractive) {
220
+ const customName = await prompt(` ${COLORS.bold}Agent name${COLORS.reset} [${name}]: `);
221
+ if (customName)
222
+ name = customName;
223
+ }
224
+ }
225
+ const apiBase = url.replace(/\/$/, '') + '/api/gateway';
226
+ try {
227
+ const regResp = await fetch(`${apiBase}/register`, {
228
+ method: 'POST',
229
+ headers: { 'X-Integration-Token': token, 'Content-Type': 'application/json' },
230
+ body: JSON.stringify({ name, platform, metadata: { sdk_version: '0.1.0', setup: 'cli' } }),
231
+ signal: AbortSignal.timeout(10_000),
232
+ });
233
+ if (regResp.ok) {
234
+ const reg = await regResp.json();
235
+ const agentId = reg.agent?.id || reg.agent_id || reg.id;
236
+ ok(`Registered as "${name}" (${platform})`);
237
+ if (agentId)
238
+ info(`Agent ID: ${agentId}`);
239
+ }
240
+ else {
241
+ const err = await regResp.json().catch(() => ({}));
242
+ if (regResp.status === 409) {
243
+ ok('Agent already registered');
244
+ }
245
+ else {
246
+ warn(`Registration: ${err.error || regResp.status} (non-fatal, heartbeats still work)`);
247
+ }
248
+ }
249
+ }
250
+ catch (err) {
251
+ warn(`Could not reach gateway: ${err.message}`);
252
+ info('The agent will register automatically on first heartbeat');
253
+ }
254
+ // Step 3: Fetch governance contract
255
+ heading('3. Governance contract');
256
+ try {
257
+ const govResp = await fetch(`${apiBase}/governance`, {
258
+ headers: { 'X-Integration-Token': token },
259
+ signal: AbortSignal.timeout(10_000),
260
+ });
261
+ if (govResp.ok) {
262
+ const gov = await govResp.json();
263
+ if (gov.governance_contract) {
264
+ const contractPath = path.join(arknaDir, 'governance.json');
265
+ fs.writeFileSync(contractPath, JSON.stringify(gov.governance_contract, null, 2));
266
+ ok(`Governance contract written (${gov.governance_contract.enforcement_mode} mode)`);
267
+ info(`Governed domains: ${gov.governance_contract.governed_domains?.length || 0}`);
268
+ }
269
+ else {
270
+ info('No governance contract assigned yet');
271
+ }
272
+ }
273
+ }
274
+ catch {
275
+ info('Could not fetch governance contract (will retry on heartbeat)');
276
+ }
277
+ // Step 4: Detect and install OpenClaw hook
278
+ heading('4. Runtime integration');
279
+ if (detectOpenClaw()) {
280
+ ok('OpenClaw detected');
281
+ // Check if hook is already installed
282
+ try {
283
+ const hooksList = (0, child_process_1.execSync)('openclaw hooks list 2>/dev/null', { encoding: 'utf-8' });
284
+ if (hooksList.includes('arkna-telemetry')) {
285
+ ok('@arkna/openclaw-hook already installed');
286
+ }
287
+ else {
288
+ info('Installing @arkna/openclaw-hook...');
289
+ try {
290
+ // Try npm install first (published), fall back to local link
291
+ (0, child_process_1.execSync)('openclaw hooks install @arkna/openclaw-hook 2>/dev/null', { stdio: 'pipe' });
292
+ ok('@arkna/openclaw-hook installed');
293
+ }
294
+ catch {
295
+ // Try local path (dev/pre-publish)
296
+ const localHookPath = path.resolve(__dirname, '..', '..', 'arkna-openclaw-hook');
297
+ if (fs.existsSync(path.join(localHookPath, 'HOOK.md'))) {
298
+ try {
299
+ (0, child_process_1.execSync)(`openclaw hooks install --link ${localHookPath}`, { stdio: 'pipe' });
300
+ ok('@arkna/openclaw-hook installed (local link)');
301
+ }
302
+ catch {
303
+ warn('Could not install hook — install manually: openclaw hooks install @arkna/openclaw-hook');
304
+ }
305
+ }
306
+ else {
307
+ warn('Hook package not found — install manually: openclaw hooks install @arkna/openclaw-hook');
308
+ }
309
+ }
310
+ }
311
+ }
312
+ catch {
313
+ warn('Could not check hooks — install manually: openclaw hooks install @arkna/openclaw-hook');
314
+ }
315
+ // Apply fail-closed policy so direct high-risk native tools are blocked by default.
316
+ try {
317
+ const hardRoute = applyOpenClawHardRoutePolicy();
318
+ if (hardRoute.changed) {
319
+ ok('Applied OpenClaw hard-routing policy (fail-closed)');
320
+ hardRoute.notes.forEach((n) => info(n));
321
+ }
322
+ }
323
+ catch (err) {
324
+ warn(`Could not apply hard-routing policy automatically: ${err.message}`);
325
+ info('Manual: set main.tools.deny=[message,exec,nodes,browser] and tools.exec.security=deny');
326
+ }
327
+ }
328
+ else {
329
+ info('Not running in OpenClaw — use SDK directly:');
330
+ info('');
331
+ info(" import { ArknaClient } from '@arkna/sdk';");
332
+ info(' const client = new ArknaClient();');
333
+ info(' client.startHeartbeat(30_000, { enriched: true });');
334
+ info('');
335
+ }
336
+ // Step 5: Send initial heartbeat
337
+ heading('5. Connectivity check');
338
+ try {
339
+ const hbResp = await fetch(`${apiBase}/heartbeat`, {
340
+ method: 'POST',
341
+ headers: { 'X-Integration-Token': token, 'Content-Type': 'application/json' },
342
+ body: JSON.stringify({
343
+ metadata: {
344
+ sdk_version: '0.1.0',
345
+ platform,
346
+ setup_event: 'init_complete',
347
+ enforcement_active: fs.existsSync(path.join(arknaDir, 'governance.json')),
348
+ },
349
+ }),
350
+ signal: AbortSignal.timeout(10_000),
351
+ });
352
+ if (hbResp.ok) {
353
+ const hb = await hbResp.json();
354
+ ok('Gateway connected');
355
+ info(`Agent ID: ${hb.agent_id}`);
356
+ info(`Kill switch: ${hb.kill_switch ? 'ACTIVE' : 'off'}`);
357
+ if (hb.kill_switch) {
358
+ warn(`Kill switch is active: ${hb.kill_reason || 'no reason given'}`);
359
+ }
360
+ }
361
+ else {
362
+ fail(`Heartbeat failed: HTTP ${hbResp.status}`);
363
+ }
364
+ }
365
+ catch (err) {
366
+ fail(`Cannot reach gateway: ${err.message}`);
367
+ }
368
+ // Done
369
+ heading('Setup complete\n');
370
+ log(` Your agent is now governed by ARKNA.`);
371
+ log(` Dashboard: https://app.arkna.com.au`);
372
+ log(` Docs: https://docs.arkna.com.au/sdk\n`);
373
+ if (detectOpenClaw()) {
374
+ log(` ${COLORS.dim}Restart the gateway to activate the hook:${COLORS.reset}`);
375
+ log(` ${COLORS.bold}openclaw gateway restart${COLORS.reset}\n`);
376
+ }
377
+ }
378
+ async function status() {
379
+ heading('ARKNA Agent Status');
380
+ // Load config
381
+ const arknaDir = path.join(process.cwd(), '.arkna');
382
+ const envPath = path.join(arknaDir, '.env');
383
+ if (!fs.existsSync(envPath)) {
384
+ fail('Not initialized. Run: npx @arkna/sdk init');
385
+ process.exit(1);
386
+ }
387
+ const envContent = fs.readFileSync(envPath, 'utf-8');
388
+ const token = envContent.match(/ARKNA_GATEWAY_TOKEN=(.+)/)?.[1]?.trim();
389
+ const url = (envContent.match(/ARKNA_URL=(.+)/)?.[1]?.trim() || 'https://api.arkna.com.au').replace(/\/$/, '');
390
+ if (!token) {
391
+ fail('No ARKNA_GATEWAY_TOKEN in .arkna/.env');
392
+ process.exit(1);
393
+ }
394
+ const apiBase = url + '/api/gateway';
395
+ // Check gateway connectivity
396
+ log('');
397
+ try {
398
+ const hbResp = await fetch(`${apiBase}/heartbeat`, {
399
+ method: 'POST',
400
+ headers: { 'X-Integration-Token': token, 'Content-Type': 'application/json' },
401
+ body: JSON.stringify({ metadata: { sdk_version: '0.1.0', probe: 'status' } }),
402
+ signal: AbortSignal.timeout(10_000),
403
+ });
404
+ if (hbResp.ok) {
405
+ const hb = await hbResp.json();
406
+ ok(`Gateway: connected`);
407
+ info(`Agent ID: ${hb.agent_id}`);
408
+ info(`Kill switch: ${hb.kill_switch ? `ACTIVE (${hb.kill_reason})` : 'off'}`);
409
+ }
410
+ else {
411
+ fail(`Gateway: HTTP ${hbResp.status}`);
412
+ }
413
+ }
414
+ catch (err) {
415
+ fail(`Gateway: unreachable (${err.message})`);
416
+ }
417
+ // Check governance contract
418
+ const contractPath = path.join(arknaDir, 'governance.json');
419
+ if (fs.existsSync(contractPath)) {
420
+ try {
421
+ const contract = JSON.parse(fs.readFileSync(contractPath, 'utf-8'));
422
+ ok(`Governance: ${contract.enforcement_mode} mode`);
423
+ info(`Domains: ${contract.governed_domains?.length || 0} governed`);
424
+ info(`Issued: ${contract.issued_at}`);
425
+ }
426
+ catch {
427
+ warn('Governance: contract file corrupt');
428
+ }
429
+ }
430
+ else {
431
+ info('Governance: no contract (run init to fetch)');
432
+ }
433
+ // Check OpenClaw hook + hard-routing policy
434
+ if (detectOpenClaw()) {
435
+ try {
436
+ const hooks = (0, child_process_1.execSync)('openclaw hooks list 2>/dev/null', { encoding: 'utf-8' });
437
+ if (hooks.includes('arkna-telemetry')) {
438
+ ok('OpenClaw hook: installed');
439
+ }
440
+ else {
441
+ warn('OpenClaw hook: not installed (run: openclaw hooks install @arkna/openclaw-hook)');
442
+ }
443
+ }
444
+ catch {
445
+ warn('OpenClaw hook: could not check');
446
+ }
447
+ try {
448
+ const cfgPath = path.join(process.env.HOME || '', '.openclaw', 'openclaw.json');
449
+ if (fs.existsSync(cfgPath)) {
450
+ const cfg = JSON.parse(fs.readFileSync(cfgPath, 'utf-8'));
451
+ const main = (cfg?.agents?.list || []).find((a) => a?.id === 'main') || {};
452
+ const deny = new Set(Array.isArray(main?.tools?.deny) ? main.tools.deny : []);
453
+ const needed = ['message', 'exec', 'nodes', 'browser'];
454
+ const missing = needed.filter((k) => !deny.has(k));
455
+ const execCfg = cfg?.tools?.exec || {};
456
+ const execLocked = execCfg.security === 'deny';
457
+ if (missing.length === 0 && execLocked) {
458
+ ok('Hard-routing policy: enabled (direct high-risk tools blocked)');
459
+ }
460
+ else {
461
+ warn('Hard-routing policy: incomplete');
462
+ if (missing.length > 0)
463
+ info(`missing deny entries: ${missing.join(', ')}`);
464
+ if (!execLocked)
465
+ info('tools.exec.security is not deny');
466
+ info('Run: arkna init to apply fail-closed OpenClaw policy');
467
+ }
468
+ }
469
+ }
470
+ catch {
471
+ warn('Hard-routing policy: could not check');
472
+ }
473
+ }
474
+ log('');
475
+ }
476
+ async function heartbeat() {
477
+ // Load config
478
+ const envPath = path.join(process.cwd(), '.arkna', '.env');
479
+ if (!fs.existsSync(envPath)) {
480
+ fail('Not initialized. Run: npx @arkna/sdk init');
481
+ process.exit(1);
482
+ }
483
+ const envContent = fs.readFileSync(envPath, 'utf-8');
484
+ const token = envContent.match(/ARKNA_GATEWAY_TOKEN=(.+)/)?.[1]?.trim();
485
+ const url = (envContent.match(/ARKNA_URL=(.+)/)?.[1]?.trim() || 'https://api.arkna.com.au').replace(/\/$/, '');
486
+ if (!token) {
487
+ fail('No token');
488
+ process.exit(1);
489
+ }
490
+ const os = require('os');
491
+ const loadAvg = os.loadavg();
492
+ const totalMem = os.totalmem();
493
+ const freeMem = os.freemem();
494
+ const resp = await fetch(`${url}/api/gateway/heartbeat`, {
495
+ method: 'POST',
496
+ headers: { 'X-Integration-Token': token, 'Content-Type': 'application/json' },
497
+ body: JSON.stringify({
498
+ metadata: {
499
+ sdk_version: '0.1.0',
500
+ source: 'cli',
501
+ system: {
502
+ load_1m: Math.round(loadAvg[0] * 100) / 100,
503
+ memory_used_pct: Math.round((1 - freeMem / totalMem) * 100),
504
+ platform: os.platform(),
505
+ hostname: os.hostname(),
506
+ },
507
+ },
508
+ }),
509
+ signal: AbortSignal.timeout(10_000),
510
+ });
511
+ if (resp.ok) {
512
+ const hb = await resp.json();
513
+ ok(`Heartbeat sent — agent ${hb.agent_id}, kill_switch: ${hb.kill_switch}`);
514
+ if (hb.kill_switch) {
515
+ fail(`KILL SWITCH ACTIVE: ${hb.kill_reason}`);
516
+ process.exit(2);
517
+ }
518
+ }
519
+ else {
520
+ fail(`Heartbeat failed: HTTP ${resp.status}`);
521
+ process.exit(1);
522
+ }
523
+ }
524
+ // ============================================================================
525
+ // Main
526
+ // ============================================================================
527
+ const [cmd, ...args] = process.argv.slice(2);
528
+ switch (cmd) {
529
+ case 'init':
530
+ init(args).catch(err => { fail(err.message); process.exit(1); });
531
+ break;
532
+ case 'status':
533
+ status().catch(err => { fail(err.message); process.exit(1); });
534
+ break;
535
+ case 'heartbeat':
536
+ heartbeat().catch(err => { fail(err.message); process.exit(1); });
537
+ break;
538
+ default:
539
+ log(`
540
+ ${COLORS.bold}@arkna/sdk${COLORS.reset} — ARKNA AI Trust Gateway CLI
541
+
542
+ ${COLORS.bold}Commands:${COLORS.reset}
543
+ init Set up agent governance (register, configure, install hooks)
544
+ status Check connection and compliance status
545
+ heartbeat Send a single heartbeat with system metrics
546
+
547
+ ${COLORS.bold}Setup:${COLORS.reset}
548
+ npx @arkna/sdk init
549
+ npx @arkna/sdk init --token intk_... --url https://api.arkna.com.au
550
+
551
+ ${COLORS.bold}Options:${COLORS.reset}
552
+ --token Gateway integration token
553
+ --url Gateway URL (default: https://api.arkna.com.au)
554
+ --name Agent name (default: directory name)
555
+ -y Non-interactive mode
556
+
557
+ ${COLORS.bold}Docs:${COLORS.reset} https://docs.arkna.com.au/sdk
558
+ `);
559
+ if (cmd)
560
+ process.exit(1);
561
+ }
562
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;;;;GAgBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAE7B,mDAAqC;AACrC,iDAAyC;AAEzC,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,MAAM,MAAM,GAAG;IACb,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,UAAU;IACjB,GAAG,EAAE,UAAU;IACf,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,UAAU;IAChB,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,SAAS;CAChB,CAAC;AAEF,SAAS,GAAG,CAAC,GAAW,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/C,SAAS,EAAE,CAAC,GAAW,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,SAAS,IAAI,CAAC,GAAW,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC9E,SAAS,IAAI,CAAC,GAAW,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,SAAS,IAAI,CAAC,GAAW,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,KAAK,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3E,SAAS,OAAO,CAAC,GAAW,IAAI,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;AAE/E,SAAS,MAAM,CAAC,QAAgB;IAC9B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,CAAC;QACH,IAAA,wBAAQ,EAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AAC3B,CAAC;AAED,SAAS,cAAc;IACrB,IAAI,cAAc,EAAE;QAAE,OAAO,UAAU,CAAC;IACxC,IAAI,CAAC;QACH,oCAAoC;QACpC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,EAAE,GAAG,GAAG,CAAC,eAAe,EAAE,CAAC;QAC7D,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC;YAAE,OAAO,QAAQ,CAAC;QAC3D,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC;YAAE,OAAO,WAAW,CAAC;QACrE,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC;YAAE,OAAO,SAAS,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,SAAS,4BAA4B;IACnC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;IAChF,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,2BAA2B,CAAC,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAQ,CAAC;IACjE,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAEhD,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IACvD,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAE1E,oEAAoE;IACpE,KAAK,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC;QAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAErC,iCAAiC;IACjC,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC;IAC1B,OAAO,CAAC,GAAG,GAAG,KAAK,CAAC;IAEpB,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAE/D,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACjE,KAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAE3D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC;AAED,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,KAAK,UAAU,IAAI,CAAC,IAAc;IAChC,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC7B,GAAG,CAAC,EAAE,CAAC,CAAC;IAER,aAAa;IACb,IAAI,KAAK,GAAG,EAAE,CAAC;IACf,IAAI,GAAG,GAAG,0BAA0B,CAAC;IACrC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,IAAI,cAAc,GAAG,KAAK,CAAC;IAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;YAAC,cAAc,GAAG,IAAI,CAAC;QAAC,CAAC;QACvF,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QAC5D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;QAAC,CAAC;QAC9D,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,mBAAmB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YAAC,cAAc,GAAG,IAAI,CAAC;QAAC,CAAC;IACrF,CAAC;IAED,0BAA0B;IAC1B,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAElC,sCAAsC;IACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE5C,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACnD,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAC9E,IAAI,aAAa,EAAE,CAAC;YAClB,EAAE,CAAC,4BAA4B,CAAC,CAAC;YACjC,IAAI,CAAC,KAAK;gBAAE,KAAK,GAAG,aAAa,CAAC;YAClC,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;YAClE,IAAI,WAAW,IAAI,CAAC,GAAG;gBAAE,GAAG,GAAG,WAAW,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;QAC9B,GAAG,CAAC,gFAAgF,CAAC,CAAC;QACtF,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,MAAM,CAAC,IAAI,iBAAiB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACzE,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,kEAAkE,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,cAAc,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,KAAK,MAAM,CAAC,IAAI,cAAc,MAAM,CAAC,KAAK,KAAK,GAAG,KAAK,CAAC,CAAC;QACxF,IAAI,SAAS;YAAE,GAAG,GAAG,SAAS,CAAC;IACjC,CAAC;IAED,oBAAoB;IACpB,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE5C,gDAAgD;IAChD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IACxD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC;IAC7D,CAAC;IAED,MAAM,UAAU,GAAG;;sBAEC,KAAK;YACf,GAAG;CACd,CAAC;IACA,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACtC,EAAE,CAAC,qBAAqB,CAAC,CAAC;IAE1B,yBAAyB;IACzB,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAEjC,MAAM,QAAQ,GAAG,cAAc,EAAE,CAAC;IAClC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACpC,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,KAAK,MAAM,CAAC,IAAI,aAAa,MAAM,CAAC,KAAK,KAAK,IAAI,KAAK,CAAC,CAAC;YACzF,IAAI,UAAU;gBAAE,IAAI,GAAG,UAAU,CAAC;QACpC,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,cAAc,CAAC;IAExD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,WAAW,EAAE;YACjD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC7E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC;YAC1F,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,EAAS,CAAC;YACxC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,EAAE,CAAC;YACxD,EAAE,CAAC,kBAAkB,IAAI,MAAM,QAAQ,GAAG,CAAC,CAAC;YAC5C,IAAI,OAAO;gBAAE,IAAI,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAQ,CAAC;YAC1D,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC3B,EAAE,CAAC,0BAA0B,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,iBAAiB,GAAG,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,qCAAqC,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,CAAC,4BAA4B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,0DAA0D,CAAC,CAAC;IACnE,CAAC;IAED,oCAAoC;IACpC,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAElC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,aAAa,EAAE;YACnD,OAAO,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE;YACzC,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,EAAS,CAAC;YACxC,IAAI,GAAG,CAAC,mBAAmB,EAAE,CAAC;gBAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;gBAC5D,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACjF,EAAE,CAAC,gCAAgC,GAAG,CAAC,mBAAmB,CAAC,gBAAgB,QAAQ,CAAC,CAAC;gBACrF,IAAI,CAAC,qBAAqB,GAAG,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;YACrF,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,qCAAqC,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,CAAC,+DAA+D,CAAC,CAAC;IACxE,CAAC;IAED,2CAA2C;IAC3C,OAAO,CAAC,wBAAwB,CAAC,CAAC;IAElC,IAAI,cAAc,EAAE,EAAE,CAAC;QACrB,EAAE,CAAC,mBAAmB,CAAC,CAAC;QAExB,qCAAqC;QACrC,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAA,wBAAQ,EAAC,iCAAiC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YACrF,IAAI,SAAS,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC1C,EAAE,CAAC,wCAAwC,CAAC,CAAC;YAC/C,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,oCAAoC,CAAC,CAAC;gBAC3C,IAAI,CAAC;oBACH,6DAA6D;oBAC7D,IAAA,wBAAQ,EAAC,yDAAyD,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;oBACvF,EAAE,CAAC,gCAAgC,CAAC,CAAC;gBACvC,CAAC;gBAAC,MAAM,CAAC;oBACP,mCAAmC;oBACnC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC;oBACjF,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;wBACvD,IAAI,CAAC;4BACH,IAAA,wBAAQ,EAAC,iCAAiC,aAAa,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;4BAC9E,EAAE,CAAC,6CAA6C,CAAC,CAAC;wBACpD,CAAC;wBAAC,MAAM,CAAC;4BACP,IAAI,CAAC,wFAAwF,CAAC,CAAC;wBACjG,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,IAAI,CAAC,wFAAwF,CAAC,CAAC;oBACjG,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,uFAAuF,CAAC,CAAC;QAChG,CAAC;QAED,oFAAoF;QACpF,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,4BAA4B,EAAE,CAAC;YACjD,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBACtB,EAAE,CAAC,oDAAoD,CAAC,CAAC;gBACzD,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,IAAI,CAAC,sDAAsD,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,uFAAuF,CAAC,CAAC;QAChG,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,6CAA6C,CAAC,CAAC;QACpD,IAAI,CAAC,EAAE,CAAC,CAAC;QACT,IAAI,CAAC,6CAA6C,CAAC,CAAC;QACpD,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAC5C,IAAI,CAAC,sDAAsD,CAAC,CAAC;QAC7D,IAAI,CAAC,EAAE,CAAC,CAAC;IACX,CAAC;IAED,iCAAiC;IACjC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAEjC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,YAAY,EAAE;YACjD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC7E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,QAAQ,EAAE;oBACR,WAAW,EAAE,OAAO;oBACpB,QAAQ;oBACR,WAAW,EAAE,eAAe;oBAC5B,kBAAkB,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;iBAC1E;aACF,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAS,CAAC;YACtC,EAAE,CAAC,mBAAmB,CAAC,CAAC;YACxB,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;YAC1D,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBACnB,IAAI,CAAC,0BAA0B,EAAE,CAAC,WAAW,IAAI,iBAAiB,EAAE,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,0BAA0B,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,CAAC,yBAAyB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO;IACP,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC5B,GAAG,CAAC,wCAAwC,CAAC,CAAC;IAC9C,GAAG,CAAC,uCAAuC,CAAC,CAAC;IAC7C,GAAG,CAAC,yCAAyC,CAAC,CAAC;IAE/C,IAAI,cAAc,EAAE,EAAE,CAAC;QACrB,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,4CAA4C,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/E,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,2BAA2B,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;IACnE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM;IACnB,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAE9B,cAAc;IACd,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAE5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACxE,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,0BAA0B,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAE/G,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,CAAC,uCAAuC,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,GAAG,cAAc,CAAC;IAErC,6BAA6B;IAC7B,GAAG,CAAC,EAAE,CAAC,CAAC;IACR,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,YAAY,EAAE;YACjD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC7E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC;YAC7E,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;YACd,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAS,CAAC;YACtC,EAAE,CAAC,oBAAoB,CAAC,CAAC;YACzB,IAAI,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;YACjC,IAAI,CAAC,gBAAgB,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAChF,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,iBAAiB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,IAAI,CAAC,yBAAyB,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,4BAA4B;IAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;IAC5D,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;YACpE,EAAE,CAAC,eAAe,QAAQ,CAAC,gBAAgB,OAAO,CAAC,CAAC;YACpD,IAAI,CAAC,YAAY,QAAQ,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC,WAAW,CAAC,CAAC;YACpE,IAAI,CAAC,WAAW,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,6CAA6C,CAAC,CAAC;IACtD,CAAC;IAED,4CAA4C;IAC5C,IAAI,cAAc,EAAE,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAA,wBAAQ,EAAC,iCAAiC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YACjF,IAAI,KAAK,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACtC,EAAE,CAAC,0BAA0B,CAAC,CAAC;YACjC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,iFAAiF,CAAC,CAAC;YAC1F,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,gCAAgC,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;YAChF,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAQ,CAAC;gBACjE,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC;gBAChF,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtF,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;gBACvD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACnD,MAAM,OAAO,GAAG,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC;gBACvC,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,KAAK,MAAM,CAAC;gBAE/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;oBACvC,EAAE,CAAC,+DAA+D,CAAC,CAAC;gBACtE,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,iCAAiC,CAAC,CAAC;oBACxC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;wBAAE,IAAI,CAAC,yBAAyB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAC5E,IAAI,CAAC,UAAU;wBAAE,IAAI,CAAC,iCAAiC,CAAC,CAAC;oBACzD,IAAI,CAAC,sDAAsD,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,sCAAsC,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,GAAG,CAAC,EAAE,CAAC,CAAC;AACV,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,cAAc;IACd,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC3D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,0BAA0B,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACxE,MAAM,GAAG,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,0BAA0B,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAE/G,IAAI,CAAC,KAAK,EAAE,CAAC;QAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAElD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;IAE7B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,GAAG,wBAAwB,EAAE;QACvD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,qBAAqB,EAAE,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC7E,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,QAAQ,EAAE;gBACR,WAAW,EAAE,OAAO;gBACpB,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE;oBACN,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG;oBAC3C,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,QAAQ,CAAC,GAAG,GAAG,CAAC;oBAC3D,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;oBACvB,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;iBACxB;aACF;SACF,CAAC;QACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;KACpC,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,EAAS,CAAC;QACpC,EAAE,CAAC,0BAA0B,EAAE,CAAC,QAAQ,kBAAkB,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5E,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACnB,IAAI,CAAC,uBAAuB,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,0BAA0B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,OAAO;AACP,+EAA+E;AAE/E,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE7C,QAAQ,GAAG,EAAE,CAAC;IACZ,KAAK,MAAM;QACT,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,MAAM;IACR,KAAK,QAAQ;QACX,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,MAAM;IACR,KAAK,WAAW;QACd,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClE,MAAM;IACR;QACE,GAAG,CAAC;EACN,MAAM,CAAC,IAAI,aAAa,MAAM,CAAC,KAAK;;EAEpC,MAAM,CAAC,IAAI,YAAY,MAAM,CAAC,KAAK;;;;;EAKnC,MAAM,CAAC,IAAI,SAAS,MAAM,CAAC,KAAK;;;;EAIhC,MAAM,CAAC,IAAI,WAAW,MAAM,CAAC,KAAK;;;;;;EAMlC,MAAM,CAAC,IAAI,QAAQ,MAAM,CAAC,KAAK;CAChC,CAAC,CAAC;QACC,IAAI,GAAG;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC"}