@highway1/cli 0.1.9 ā 0.1.12
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/bin/clawiverse.js +2 -0
- package/dist/index.js +24 -18
- package/dist/index.js.map +1 -1
- package/package.json +21 -9
- package/src/commands/card.ts +82 -0
- package/src/commands/discover.ts +168 -0
- package/src/commands/identity.ts +37 -0
- package/src/commands/init.ts +79 -0
- package/src/commands/join.ts +176 -0
- package/src/commands/send.ts +137 -0
- package/src/commands/status.ts +45 -0
- package/src/commands/trust.ts +215 -0
- package/src/config.ts +74 -0
- package/src/index.ts +49 -0
- package/src/ui.ts +38 -0
package/dist/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from 'commander';
|
|
3
3
|
import { createRequire } from 'module';
|
|
4
|
-
import { createLogger, generateKeyPair, exportKeyPair, deriveDID, importKeyPair, createNode, createAgentCard, signAgentCard, sign, createDHTOperations, createMessageRouter, createEnvelope, signEnvelope, createTrustSystem } from '@
|
|
4
|
+
import { createLogger, generateKeyPair, exportKeyPair, deriveDID, importKeyPair, createNode, createAgentCard, signAgentCard, sign, createDHTOperations, createMessageRouter, createEnvelope, signEnvelope, createTrustSystem } from '@clawiverse/core';
|
|
5
5
|
import Conf from 'conf';
|
|
6
6
|
import { homedir } from 'os';
|
|
7
7
|
import { join } from 'path';
|
|
@@ -113,7 +113,7 @@ function registerInitCommand(program2) {
|
|
|
113
113
|
printKeyValue("Name", name);
|
|
114
114
|
printKeyValue("Description", description);
|
|
115
115
|
console.log();
|
|
116
|
-
success('Run "
|
|
116
|
+
success('Run "hw1 join" to connect to the network');
|
|
117
117
|
} catch (err) {
|
|
118
118
|
error(`Failed to initialize: ${err.message}`);
|
|
119
119
|
process.exit(1);
|
|
@@ -127,7 +127,7 @@ function registerJoinCommand(program2) {
|
|
|
127
127
|
const identity = getIdentity();
|
|
128
128
|
const card = getAgentCard();
|
|
129
129
|
if (!identity || !card) {
|
|
130
|
-
error('No identity found. Run "
|
|
130
|
+
error('No identity found. Run "hw1 init" first.');
|
|
131
131
|
process.exit(1);
|
|
132
132
|
}
|
|
133
133
|
const spin = spinner("Starting libp2p node...");
|
|
@@ -156,12 +156,18 @@ function registerJoinCommand(program2) {
|
|
|
156
156
|
});
|
|
157
157
|
connectSpin.succeed("Connected to network!");
|
|
158
158
|
const cardSpin = spinner("Publishing Agent Card to DHT...");
|
|
159
|
+
const directAddrs = node.getMultiaddrs();
|
|
160
|
+
const relayAddrs = bootstrapPeers.map((relayAddr) => {
|
|
161
|
+
const peerId = node.getPeerId();
|
|
162
|
+
return `${relayAddr}/p2p-circuit/p2p/${peerId}`;
|
|
163
|
+
});
|
|
164
|
+
const allAddrs = [...directAddrs, ...relayAddrs];
|
|
159
165
|
const agentCard = createAgentCard(
|
|
160
166
|
identity.did,
|
|
161
167
|
card.name,
|
|
162
168
|
card.description,
|
|
163
169
|
card.capabilities,
|
|
164
|
-
|
|
170
|
+
allAddrs,
|
|
165
171
|
node.getPeerId()
|
|
166
172
|
);
|
|
167
173
|
const signedCard = await signAgentCard(
|
|
@@ -187,7 +193,7 @@ function registerJoinCommand(program2) {
|
|
|
187
193
|
console.log();
|
|
188
194
|
if (envelope.type === "request") {
|
|
189
195
|
info(" Sending acknowledgment response...");
|
|
190
|
-
const { createEnvelope: createEnvelope2, signEnvelope: signEnvelope2, sign: sign3 } = await import('@
|
|
196
|
+
const { createEnvelope: createEnvelope2, signEnvelope: signEnvelope2, sign: sign3 } = await import('@clawiverse/core');
|
|
191
197
|
const identity2 = getIdentity();
|
|
192
198
|
const keyPair2 = importKeyPair({
|
|
193
199
|
publicKey: identity2.publicKey,
|
|
@@ -247,7 +253,7 @@ function registerDiscoverCommand(program2) {
|
|
|
247
253
|
printHeader("Discover Agents");
|
|
248
254
|
const identity = getIdentity();
|
|
249
255
|
if (!identity) {
|
|
250
|
-
error('No identity found. Run "
|
|
256
|
+
error('No identity found. Run "hw1 init" first.');
|
|
251
257
|
process.exit(1);
|
|
252
258
|
}
|
|
253
259
|
const spin = spinner("Starting node...");
|
|
@@ -345,10 +351,10 @@ function registerDiscoverCommand(program2) {
|
|
|
345
351
|
}
|
|
346
352
|
} else {
|
|
347
353
|
spin.fail("Please specify --did, --capability, or --query");
|
|
348
|
-
info("Usage:
|
|
349
|
-
info("
|
|
350
|
-
info('
|
|
351
|
-
info('
|
|
354
|
+
info("Usage: hw1 discover --did <did>");
|
|
355
|
+
info(" hw1 discover --capability <capability>");
|
|
356
|
+
info(' hw1 discover --query "translate Japanese"');
|
|
357
|
+
info(' hw1 discover --query "code review" --min-trust 0.8');
|
|
352
358
|
}
|
|
353
359
|
await node.stop();
|
|
354
360
|
} catch (err) {
|
|
@@ -363,7 +369,7 @@ function registerSendCommand(program2) {
|
|
|
363
369
|
printHeader("Send Message");
|
|
364
370
|
const identity = getIdentity();
|
|
365
371
|
if (!identity) {
|
|
366
|
-
error('No identity found. Run "
|
|
372
|
+
error('No identity found. Run "hw1 init" first.');
|
|
367
373
|
process.exit(1);
|
|
368
374
|
}
|
|
369
375
|
let payload;
|
|
@@ -457,7 +463,7 @@ function registerStatusCommand(program2) {
|
|
|
457
463
|
const card = getAgentCard();
|
|
458
464
|
const bootstrapPeers = getBootstrapPeers();
|
|
459
465
|
if (!identity) {
|
|
460
|
-
error('No identity configured. Run "
|
|
466
|
+
error('No identity configured. Run "hw1 init" first.');
|
|
461
467
|
process.exit(1);
|
|
462
468
|
}
|
|
463
469
|
printSection("Identity");
|
|
@@ -490,7 +496,7 @@ function registerIdentityCommand(program2) {
|
|
|
490
496
|
const identity = getIdentity();
|
|
491
497
|
const card = getAgentCard();
|
|
492
498
|
if (!identity) {
|
|
493
|
-
error('No identity found. Run "
|
|
499
|
+
error('No identity found. Run "hw1 init" first.');
|
|
494
500
|
process.exit(1);
|
|
495
501
|
}
|
|
496
502
|
printKeyValue("DID", identity.did);
|
|
@@ -515,7 +521,7 @@ function registerCardCommand(program2) {
|
|
|
515
521
|
printHeader("Agent Card");
|
|
516
522
|
const agentCard = getAgentCard();
|
|
517
523
|
if (!agentCard) {
|
|
518
|
-
error('No Agent Card found. Run "
|
|
524
|
+
error('No Agent Card found. Run "hw1 init" first.');
|
|
519
525
|
process.exit(1);
|
|
520
526
|
}
|
|
521
527
|
console.log(JSON.stringify(agentCard, null, 2));
|
|
@@ -529,7 +535,7 @@ function registerCardCommand(program2) {
|
|
|
529
535
|
printHeader("Edit Agent Card");
|
|
530
536
|
const currentCard = getAgentCard();
|
|
531
537
|
if (!currentCard) {
|
|
532
|
-
error('No Agent Card found. Run "
|
|
538
|
+
error('No Agent Card found. Run "hw1 init" first.');
|
|
533
539
|
process.exit(1);
|
|
534
540
|
}
|
|
535
541
|
const answers = await inquirer.prompt([
|
|
@@ -618,9 +624,9 @@ function createTrustCommand() {
|
|
|
618
624
|
}
|
|
619
625
|
const identity = getIdentity();
|
|
620
626
|
if (!identity) {
|
|
621
|
-
throw new Error('No identity found. Run "
|
|
627
|
+
throw new Error('No identity found. Run "hw1 init" first.');
|
|
622
628
|
}
|
|
623
|
-
const { importKeyPair: importKeyPair4 } = await import('@
|
|
629
|
+
const { importKeyPair: importKeyPair4 } = await import('@clawiverse/core');
|
|
624
630
|
const keyPair = importKeyPair4({
|
|
625
631
|
publicKey: identity.publicKey,
|
|
626
632
|
privateKey: identity.privateKey
|
|
@@ -689,7 +695,7 @@ function createTrustCommand() {
|
|
|
689
695
|
// Placeholder
|
|
690
696
|
});
|
|
691
697
|
await trustSystem.start();
|
|
692
|
-
const { InteractionHistory } = await import('@
|
|
698
|
+
const { InteractionHistory } = await import('@clawiverse/core');
|
|
693
699
|
const history = new InteractionHistory(`${dataDir}/trust/interactions`);
|
|
694
700
|
await history.open();
|
|
695
701
|
const agents = await history.getAllAgents();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config.ts","../src/ui.ts","../src/commands/init.ts","../src/commands/join.ts","../src/commands/discover.ts","../src/commands/send.ts","../src/commands/status.ts","../src/commands/identity.ts","../src/commands/card.ts","../src/commands/trust.ts","../src/index.ts"],"names":["program","createEnvelope","signEnvelope","sign","identity","keyPair","importKeyPair","createNode","createDHTOperations","createMessageRouter","inquirer","join","homedir","error","require","Command"],"mappings":";;;;;;;;;;;;AAqBA,IAAM,kBAAkB,OAAA,CAAQ,GAAA,CAAI,mBAAmB,IAAA,CAAK,OAAA,IAAW,aAAa,CAAA;AAEpF,IAAM,MAAA,GAAS,IAAI,IAAA,CAAuB;AAAA,EACxC,WAAA,EAAa,YAAA;AAAA,EACb,GAAA,EAAK;AACP,CAAC,CAAA;AAcM,SAAS,WAAA,GAAuB;AACrC,EAAA,OAAO,MAAA,CAAO,IAAI,UAAU,CAAA;AAC9B;AAEO,SAAS,WAAA,GAAc;AAC5B,EAAA,OAAO,MAAA,CAAO,IAAI,UAAU,CAAA;AAC9B;AAEO,SAAS,YAAY,QAAA,EAA8C;AACxE,EAAA,MAAA,CAAO,GAAA,CAAI,YAAY,QAAQ,CAAA;AACjC;AAEO,SAAS,YAAA,GAAe;AAC7B,EAAA,OAAO,MAAA,CAAO,IAAI,WAAW,CAAA;AAC/B;AAEO,SAAS,aAAa,IAAA,EAA2C;AACtE,EAAA,MAAA,CAAO,GAAA,CAAI,aAAa,IAAI,CAAA;AAC9B;AAGA,IAAM,uBAAA,GAAoC;AAAA,EACxC;AACF,CAAA;AAEO,SAAS,iBAAA,GAA8B;AAC5C,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,wBAAwB,CAAA;AACrD,EAAA,IAAI,SAAA,IAAa,SAAA,CAAU,MAAA,GAAS,CAAA,EAAG,OAAO,SAAA;AAC9C,EAAA,OAAO,uBAAA;AACT;AClEO,SAAS,QAAQ,OAAA,EAAuB;AAC7C,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,KAAA,CAAM,QAAG,GAAG,OAAO,CAAA;AACvC;AAEO,SAAS,MAAM,OAAA,EAAuB;AAC3C,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,GAAA,CAAI,QAAG,GAAG,OAAO,CAAA;AACrC;AAEO,SAAS,KAAK,OAAA,EAAuB;AAC1C,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,QAAG,GAAG,OAAO,CAAA;AACtC;AAMO,SAAS,QAAQ,IAAA,EAAmB;AACzC,EAAA,OAAO,GAAA,CAAI,IAAI,CAAA,CAAE,KAAA,EAAM;AACzB;AAEO,SAAS,YAAY,KAAA,EAAqB;AAC/C,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAK,CAAC,CAAA;AAClC,EAAA,OAAA,CAAQ,GAAA,CAAI,MAAM,IAAA,CAAK,QAAA,CAAI,OAAO,KAAA,CAAM,MAAM,CAAC,CAAC,CAAA;AAChD,EAAA,OAAA,CAAQ,GAAA,EAAI;AACd;AAEO,SAAS,aAAA,CAAc,KAAa,KAAA,EAAqB;AAC9D,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,GAAG,GAAG,CAAA,EAAG,KAAA,CAAM,KAAA,CAAM,KAAK,CAAC,CAAA;AACvD;AAEO,SAAS,aAAa,KAAA,EAAqB;AAChD,EAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,EAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,KAAK,CAAC,CAAA;AAC/B;AC/BO,SAAS,oBAAoBA,QAAAA,EAAwB;AAC1D,EAAAA,QAAAA,CACG,QAAQ,MAAM,CAAA,CACd,YAAY,sCAAsC,CAAA,CAClD,OAAO,eAAA,EAAiB,YAAY,EACpC,MAAA,CAAO,6BAAA,EAA+B,mBAAmB,CAAA,CACzD,MAAA,CAAO,WAAW,6BAA6B,CAAA,CAC/C,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,IAAA,IAAI;AACF,MAAA,WAAA,CAAY,gCAAgC,CAAA;AAG5C,MAAA,IAAI,WAAA,EAAY,IAAK,CAAC,OAAA,CAAQ,KAAA,EAAO;AACnC,QAAA,KAAA,CAAM,oDAAoD,CAAA;AAC1D,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAGA,MAAA,IAAI,OAAO,OAAA,CAAQ,IAAA;AACnB,MAAA,IAAI,cAAc,OAAA,CAAQ,WAAA;AAE1B,MAAA,IAAI,CAAC,MAAM,IAAA,GAAO,UAAA;AAClB,MAAA,IAAI,CAAC,aAAa,WAAA,GAAc,oBAAA;AAEhC,MAAA,IAAI,CAAC,QAAQ,IAAA,EAAM;AACjB,QAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAI,MAAM,SAAS,MAAA,CAAO;AAAA,UAChD,IAAA,EAAM,OAAA;AAAA,UAAS,IAAA,EAAM,MAAA;AAAA,UAAQ,OAAA,EAAS,aAAA;AAAA,UAAe,OAAA,EAAS;AAAA,SAC/D,CAAA;AACD,QAAA,IAAA,GAAO,SAAA,IAAa,IAAA;AAAA,MACtB;AACA,MAAA,IAAI,CAAC,QAAQ,WAAA,EAAa;AACxB,QAAA,MAAM,EAAE,WAAA,EAAa,SAAA,EAAU,GAAI,MAAM,SAAS,MAAA,CAAO;AAAA,UACvD,IAAA,EAAM,OAAA;AAAA,UAAS,IAAA,EAAM,aAAA;AAAA,UAAe,OAAA,EAAS,oBAAA;AAAA,UAAsB,OAAA,EAAS;AAAA,SAC7E,CAAA;AACD,QAAA,WAAA,GAAc,SAAA,IAAa,WAAA;AAAA,MAC7B;AAEA,MAAA,MAAM,IAAA,GAAO,QAAQ,wBAAwB,CAAA;AAG7C,MAAA,MAAM,OAAA,GAAU,MAAM,eAAA,EAAgB;AACtC,MAAA,MAAM,QAAA,GAAW,cAAc,OAAO,CAAA;AACtC,MAAA,MAAM,GAAA,GAAM,SAAA,CAAU,OAAA,CAAQ,SAAS,CAAA;AAGvC,MAAA,WAAA,CAAY;AAAA,QACV,GAAA;AAAA,QACA,WAAW,QAAA,CAAS,SAAA;AAAA,QACpB,YAAY,QAAA,CAAS;AAAA,OACtB,CAAA;AAGD,MAAA,YAAA,CAAa;AAAA,QACX,IAAA;AAAA,QACA,WAAA;AAAA,QACA,cAAc;AAAC,OAChB,CAAA;AAED,MAAA,IAAA,CAAK,QAAQ,gCAAgC,CAAA;AAE7C,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,aAAA,CAAc,OAAO,GAAG,CAAA;AACxB,MAAA,aAAA,CAAc,QAAQ,IAAI,CAAA;AAC1B,MAAA,aAAA,CAAc,eAAe,WAAW,CAAA;AACxC,MAAA,OAAA,CAAQ,GAAA,EAAI;AAEZ,MAAA,OAAA,CAAQ,iDAAiD,CAAA;AAAA,IAC3D,SAAS,GAAA,EAAK;AACZ,MAAA,KAAA,CAAM,CAAA,sBAAA,EAA0B,GAAA,CAAc,OAAO,CAAA,CAAE,CAAA;AACvD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;ACjEO,SAAS,oBAAoBA,QAAAA,EAAwB;AAC1D,EAAAA,QAAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,6BAA6B,CAAA,CACzC,MAAA,CAAO,wBAAA,EAA0B,0BAA0B,CAAA,CAC3D,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,IAAA,IAAI;AACF,MAAA,WAAA,CAAY,yBAAyB,CAAA;AAErC,MAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,MAAA,MAAM,OAAO,YAAA,EAAa;AAE1B,MAAA,IAAI,CAAC,QAAA,IAAY,CAAC,IAAA,EAAM;AACtB,QAAA,KAAA,CAAM,iDAAiD,CAAA;AACvD,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,MAAM,IAAA,GAAO,QAAQ,yBAAyB,CAAA;AAE9C,MAAA,MAAM,UAAU,aAAA,CAAc;AAAA,QAC5B,WAAW,QAAA,CAAS,SAAA;AAAA,QACpB,YAAY,QAAA,CAAS;AAAA,OACtB,CAAA;AAED,MAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,SAAA,IAAa,iBAAA,EAAkB;AAE9D,MAAA,MAAM,IAAA,GAAO,MAAM,UAAA,CAAW;AAAA,QAC5B,OAAA;AAAA,QACA,cAAA;AAAA,QACA,SAAA,EAAW;AAAA,OACZ,CAAA;AAED,MAAA,MAAM,KAAK,KAAA,EAAM;AAEjB,MAAA,IAAA,CAAK,QAAQ,4BAA4B,CAAA;AAEzC,MAAA,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,SAAA,EAAW,CAAA,CAAE,CAAA;AACnC,MAAA,IAAA,CAAK,CAAA,KAAA,EAAQ,QAAA,CAAS,GAAG,CAAA,CAAE,CAAA;AAC3B,MAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,aAAA,GAAgB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAGvD,MAAA,MAAM,WAAA,GAAc,QAAQ,kCAAkC,CAAA;AAC9D,MAAA,MAAM,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AACnC,QAAA,MAAM,OAAA,GAAU,UAAA,CAAW,OAAA,EAAS,GAAK,CAAA;AACzC,QAAA,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,cAAA,EAAgB,MAAM;AACjD,UAAA,YAAA,CAAa,OAAO,CAAA;AACpB,UAAA,UAAA,CAAW,SAAS,GAAG,CAAA;AAAA,QACzB,CAAA,EAAG,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AAAA,MACnB,CAAC,CAAA;AACD,MAAA,WAAA,CAAY,QAAQ,uBAAuB,CAAA;AAG3C,MAAA,MAAM,QAAA,GAAW,QAAQ,iCAAiC,CAAA;AAE1D,MAAA,MAAM,SAAA,GAAY,eAAA;AAAA,QAChB,QAAA,CAAS,GAAA;AAAA,QACT,IAAA,CAAK,IAAA;AAAA,QACL,IAAA,CAAK,WAAA;AAAA,QACL,IAAA,CAAK,YAAA;AAAA,QACL,KAAK,aAAA,EAAc;AAAA,QACnB,KAAK,SAAA;AAAU,OACjB;AAEA,MAAA,MAAM,aAAa,MAAM,aAAA;AAAA,QAAc,SAAA;AAAA,QAAW,CAAC,IAAA,KACjD,IAAA,CAAK,IAAA,EAAM,QAAQ,UAAU;AAAA,OAC/B;AAEA,MAAA,MAAM,GAAA,GAAM,mBAAA,CAAoB,IAAA,CAAK,MAAM,CAAA;AAC3C,MAAA,MAAM,GAAA,CAAI,iBAAiB,UAAU,CAAA;AAErC,MAAA,QAAA,CAAS,QAAQ,uBAAuB,CAAA;AAGxC,MAAA,MAAM,MAAA,GAAS,mBAAA;AAAA,QACb,IAAA,CAAK,MAAA;AAAA,QACL,YAAY,IAAA;AAAA,QACZ;AAAA,OACF;AAGA,MAAA,MAAM,cAAA,GAAiB,OAAO,QAAA,KAAkB;AAC9C,QAAA,MAAM,UAAU,QAAA,CAAS,OAAA;AACzB,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,OAAA,CAAQ,CAAA,0BAAA,EAA6B,QAAA,CAAS,IAAI,CAAA,CAAE,CAAA;AACpD,QAAA,IAAA,CAAK,CAAA,gBAAA,EAAmB,QAAA,CAAS,EAAE,CAAA,CAAE,CAAA;AACrC,QAAA,IAAA,CAAK,CAAA,gBAAA,EAAmB,QAAA,CAAS,QAAQ,CAAA,CAAE,CAAA;AAC3C,QAAA,IAAA,CAAK,CAAA,gBAAA,EAAmB,QAAA,CAAS,IAAI,CAAA,CAAE,CAAA;AACvC,QAAA,IAAA,CAAK,mBAAmB,IAAA,CAAK,SAAA,CAAU,SAAS,IAAA,EAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAC1D,QAAA,OAAA,CAAQ,GAAA,EAAI;AAGZ,QAAA,IAAI,QAAA,CAAS,SAAS,SAAA,EAAW;AAC/B,UAAA,IAAA,CAAK,wCAAwC,CAAA;AAE7C,UAAA,MAAM,EAAE,cAAA,EAAAC,eAAAA,EAAgB,YAAA,EAAAC,aAAAA,EAAc,MAAAC,KAAAA,EAAK,GAAI,MAAM,OAAO,kBAAkB,CAAA;AAC9E,UAAA,MAAMC,YAAW,WAAA,EAAY;AAC7B,UAAA,MAAMC,WAAU,aAAA,CAAc;AAAA,YAC5B,WAAWD,SAAAA,CAAU,SAAA;AAAA,YACrB,YAAYA,SAAAA,CAAU;AAAA,WACvB,CAAA;AAED,UAAA,MAAM,gBAAA,GAAmBH,eAAAA;AAAA,YACvB,QAAA,CAAS,EAAA;AAAA;AAAA,YACT,QAAA,CAAS,IAAA;AAAA;AAAA,YACT,UAAA;AAAA,YACA,QAAA,CAAS,QAAA;AAAA,YACT;AAAA,cACE,MAAA,EAAQ,UAAA;AAAA,cACR,OAAA,EAAS,gCAAA;AAAA,cACT,eAAA,EAAiB,OAAA;AAAA,cACjB,SAAA,EAAW,KAAK,GAAA;AAAI,aACtB;AAAA,YACA,QAAA,CAAS;AAAA;AAAA,WACX;AAEA,UAAA,MAAM,iBAAiB,MAAMC,aAAAA;AAAA,YAAa,gBAAA;AAAA,YAAkB,CAAC,IAAA,KAC3DC,KAAAA,CAAK,IAAA,EAAME,SAAQ,UAAU;AAAA,WAC/B;AAEA,UAAA,OAAO,cAAA;AAAA,QACT;AAEA,QAAA,OAAO,KAAA,CAAA;AAAA,MACT,CAAA;AAGA,MAAA,MAAA,CAAO,eAAA,CAAgB,yBAAyB,cAAc,CAAA;AAC9D,MAAA,MAAA,CAAO,eAAA,CAAgB,2BAA2B,cAAc,CAAA;AAGhE,MAAA,MAAA,CAAO,wBAAwB,cAAc,CAAA;AAE7C,MAAA,MAAM,OAAO,KAAA,EAAM;AAEnB,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,OAAA,CAAQ,6CAA6C,CAAA;AACrD,MAAA,IAAA,CAAK,oCAAoC,CAAA;AACzC,MAAA,IAAA,CAAK,sBAAsB,CAAA;AAE3B,MAAA,OAAA,CAAQ,EAAA,CAAG,UAAU,YAAY;AAC/B,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,MAAM,QAAA,GAAW,QAAQ,kBAAkB,CAAA;AAC3C,QAAA,MAAM,OAAO,IAAA,EAAK;AAClB,QAAA,MAAM,KAAK,IAAA,EAAK;AAChB,QAAA,QAAA,CAAS,QAAQ,cAAc,CAAA;AAC/B,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB,CAAC,CAAA;AAED,MAAA,MAAM,IAAI,QAAQ,MAAM;AAAA,MAAC,CAAC,CAAA;AAAA,IAC5B,SAAS,GAAA,EAAK;AACZ,MAAA,KAAA,CAAM,CAAA,wBAAA,EAA4B,GAAA,CAAc,OAAO,CAAA,CAAE,CAAA;AACzD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;AC7JO,SAAS,wBAAwBL,QAAAA,EAAwB;AAC9D,EAAAA,SACG,OAAA,CAAQ,UAAU,CAAA,CAClB,WAAA,CAAY,gCAAgC,CAAA,CAC5C,MAAA,CAAO,2BAAA,EAA6B,sBAAsB,EAC1D,MAAA,CAAO,aAAA,EAAe,oBAAoB,CAAA,CAC1C,MAAA,CAAO,kBAAkB,qDAAqD,CAAA,CAC9E,MAAA,CAAO,qBAAA,EAAuB,2BAA2B,CAAA,CACzD,MAAA,CAAO,mBAAA,EAAqB,oBAAoB,EAChD,MAAA,CAAO,kBAAA,EAAoB,2BAAA,EAA6B,IAAI,EAC5D,MAAA,CAAO,wBAAA,EAA0B,0BAA0B,CAAA,CAC3D,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,IAAA,IAAI;AACF,MAAA,WAAA,CAAY,iBAAiB,CAAA;AAE7B,MAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,KAAA,CAAM,iDAAiD,CAAA;AACvD,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,MAAM,IAAA,GAAO,QAAQ,kBAAkB,CAAA;AAEvC,MAAA,MAAM,UAAUM,aAAAA,CAAc;AAAA,QAC5B,WAAW,QAAA,CAAS,SAAA;AAAA,QACpB,YAAY,QAAA,CAAS;AAAA,OACtB,CAAA;AAED,MAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,SAAA,IAAa,iBAAA,EAAkB;AAE9D,MAAA,MAAM,IAAA,GAAO,MAAMC,UAAAA,CAAW;AAAA,QAC5B,OAAA;AAAA,QACA,cAAA;AAAA,QACA,SAAA,EAAW;AAAA,OACZ,CAAA;AAED,MAAA,MAAM,KAAK,KAAA,EAAM;AAEjB,MAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AAEZ,MAAA,MAAM,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AACnC,QAAA,MAAM,OAAA,GAAU,UAAA,CAAW,OAAA,EAAS,IAAK,CAAA;AACzC,QAAA,IAAA,CAAK,MAAA,CAAO,gBAAA,CAAiB,cAAA,EAAgB,MAAM;AACjD,UAAA,YAAA,CAAa,OAAO,CAAA;AACpB,UAAA,UAAA,CAAW,SAAS,GAAI,CAAA;AAAA,QAC1B,CAAA,EAAG,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AAAA,MACnB,CAAC,CAAA;AAED,MAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AAEZ,MAAA,MAAM,GAAA,GAAMC,mBAAAA,CAAoB,IAAA,CAAK,MAAM,CAAA;AAE3C,MAAA,IAAI,QAAQ,GAAA,EAAK;AACf,QAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,cAAA,CAAe,QAAQ,GAAG,CAAA;AAEjD,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,IAAA,CAAK,QAAQ,cAAc,CAAA;AAC3B,UAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,UAAA,IAAA,CAAK,CAAA,cAAA,EAAiB,IAAA,CAAK,GAAG,CAAA,CAAE,CAAA;AAChC,UAAA,IAAA,CAAK,CAAA,cAAA,EAAiB,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AACjC,UAAA,IAAA,CAAK,CAAA,cAAA,EAAiB,IAAA,CAAK,WAAW,CAAA,CAAE,CAAA;AACxC,UAAA,IAAA,CAAK,CAAA,cAAA,EAAiB,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AACpC,UAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,YAAA,CAAa,KAAK,IAAI,CAAA,IAAK,QAAQ,CAAA,CAAE,CAAA;AAChE,UAAA,IAAA,CAAK,CAAA,cAAA,EAAiB,IAAA,CAAK,MAAA,IAAU,WAAW,CAAA,CAAE,CAAA;AAClD,UAAA,IAAA,CAAK,CAAA,cAAA,EAAiB,IAAA,CAAK,SAAA,CAAU,MAAA,GAAS,CAAA,GAAI,IAAA,CAAK,SAAA,CAAU,IAAA,CAAK,kBAAkB,CAAA,GAAI,QAAQ,CAAA,CAAE,CAAA;AACtG,UAAA,IAAA,CAAK,CAAA,cAAA,EAAiB,IAAI,IAAA,CAAK,IAAA,CAAK,SAAS,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,CAAA;AAAA,QAChE,CAAA,MAAO;AACL,UAAA,IAAA,CAAK,KAAK,iBAAiB,CAAA;AAAA,QAC7B;AAAA,MACF,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,KAAA,EAAO;AAE9C,QAAA,MAAM,KAAA,GAAa;AAAA,UACjB,KAAA,EAAO,QAAA,CAAS,OAAA,CAAQ,KAAA,EAAO,EAAE;AAAA,SACnC;AAEA,QAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,UAAA,KAAA,CAAM,OAAO,OAAA,CAAQ,KAAA;AAAA,QACvB,CAAA,MAAA,IAAW,QAAQ,UAAA,EAAY;AAC7B,UAAA,KAAA,CAAM,aAAa,OAAA,CAAQ,UAAA;AAAA,QAC7B;AAEA,QAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,UAAA,KAAA,CAAM,OAAA,GAAU;AAAA,YACd,aAAA,EAAe,UAAA,CAAW,OAAA,CAAQ,QAAQ;AAAA,WAC5C;AAAA,QACF;AAEA,QAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,UAAA,KAAA,CAAM,OAAA,GAAU,KAAA,CAAM,OAAA,IAAW,EAAC;AAClC,UAAA,KAAA,CAAM,OAAA,CAAQ,WAAW,OAAA,CAAQ,QAAA;AAAA,QACnC;AAEA,QAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,CAAI,cAAA,CAAe,KAAK,CAAA;AAE5C,QAAA,IAAA,CAAK,OAAA,CAAQ,CAAA,MAAA,EAAS,KAAA,CAAM,MAAM,CAAA,OAAA,CAAS,CAAA;AAE3C,QAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,UAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,CAAM;AAAA,YACtB,IAAA,EAAM,CAAC,KAAA,EAAO,MAAA,EAAQ,gBAAgB,OAAO,CAAA;AAAA,YAC7C,SAAA,EAAW,CAAC,EAAA,EAAI,EAAA,EAAI,IAAI,EAAE;AAAA,WAC3B,CAAA;AAED,UAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,YAAA,MAAM,eAAe,KAAA,CAAM,OAAA,CAAQ,KAAK,YAAY,CAAA,GAChD,KAAK,YAAA,CAAa,GAAA;AAAA,cAAI,CAAC,GAAA,KACrB,OAAO,GAAA,KAAQ,QAAA,GAAW,MAAM,GAAA,CAAI;AAAA,aACtC,CAAE,IAAA,CAAK,IAAI,CAAA,GACX,EAAA;AAEJ,YAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,GACpB,CAAA,EAAA,CAAI,IAAA,CAAK,KAAA,CAAM,gBAAA,GAAmB,GAAA,EAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA,GACjD,KAAA;AAEJ,YAAA,KAAA,CAAM,IAAA,CAAK;AAAA,cACT,IAAA,CAAK,GAAA,CAAI,SAAA,CAAU,CAAA,EAAG,EAAE,CAAA,GAAI,KAAA;AAAA,cAC5B,IAAA,CAAK,IAAA;AAAA,cACL,YAAA,CAAa,UAAU,CAAA,EAAG,EAAE,KAAK,YAAA,CAAa,MAAA,GAAS,KAAK,KAAA,GAAQ,EAAA,CAAA;AAAA,cACpE;AAAA,aACD,CAAA;AAAA,UACH;AAEA,UAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,UAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,QAAA,EAAU,CAAA;AAG5B,UAAA,IAAI,OAAA,CAAQ,KAAA,IAAS,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AACrC,YAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,YAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,YAAA,IAAA,CAAK,oBAAoB,CAAA;AACzB,YAAA,IAAA,CAAK,CAAA,eAAA,EAAkB,IAAA,CAAK,GAAG,CAAA,CAAE,CAAA;AACjC,YAAA,IAAA,CAAK,CAAA,eAAA,EAAkB,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAClC,YAAA,IAAA,CAAK,CAAA,eAAA,EAAkB,IAAA,CAAK,WAAW,CAAA,CAAE,CAAA;AAEzC,YAAA,IAAI,KAAA,CAAM,QAAQ,IAAA,CAAK,YAAY,KAAK,IAAA,CAAK,YAAA,CAAa,SAAS,CAAA,EAAG;AACpE,cAAA,MAAM,GAAA,GAAM,IAAA,CAAK,YAAA,CAAa,CAAC,CAAA;AAC/B,cAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,GAAA,KAAQ,IAAA,EAAM;AAC3C,gBAAA,IAAA,CAAK,CAAA,eAAA,EAAkB,GAAA,CAAI,IAAI,CAAA,CAAE,CAAA;AACjC,gBAAA,IAAA,CAAK,CAAA,eAAA,EAAkB,GAAA,CAAI,WAAW,CAAA,CAAE,CAAA;AAAA,cAC1C;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,KAAK,gDAAgD,CAAA;AAC1D,QAAA,IAAA,CAAK,wCAAwC,CAAA;AAC7C,QAAA,IAAA,CAAK,sDAAsD,CAAA;AAC3D,QAAA,IAAA,CAAK,yDAAyD,CAAA;AAC9D,QAAA,IAAA,CAAK,kEAAkE,CAAA;AAAA,MACzE;AAEA,MAAA,MAAM,KAAK,IAAA,EAAK;AAAA,IAClB,SAAS,GAAA,EAAK;AACZ,MAAA,KAAA,CAAM,CAAA,oBAAA,EAAwB,GAAA,CAAc,OAAO,CAAA,CAAE,CAAA;AACrD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;AC1JO,SAAS,oBAAoBR,QAAAA,EAAwB;AAC1D,EAAAA,QAAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,YAAY,iCAAiC,CAAA,CAC7C,cAAA,CAAe,YAAA,EAAc,eAAe,CAAA,CAC5C,cAAA,CAAe,uBAAA,EAAyB,qBAAqB,EAC7D,cAAA,CAAe,kBAAA,EAAoB,wBAAwB,CAAA,CAC3D,MAAA,CAAO,eAAA,EAAiB,qCAAA,EAAuC,SAAS,EACxE,MAAA,CAAO,wBAAA,EAA0B,0BAA0B,CAAA,CAC3D,OAAO,oBAAA,EAAsB,6CAA6C,CAAA,CAC1E,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,IAAA,IAAI;AACF,MAAA,WAAA,CAAY,cAAc,CAAA;AAE1B,MAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,KAAA,CAAM,iDAAiD,CAAA;AACvD,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI;AACF,QAAA,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA;AAAA,MACtC,CAAA,CAAA,MAAQ;AACN,QAAA,KAAA,CAAM,sBAAsB,CAAA;AAC5B,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,MAAM,IAAA,GAAO,QAAQ,kBAAkB,CAAA;AAEvC,MAAA,MAAM,UAAUM,aAAAA,CAAc;AAAA,QAC5B,WAAW,QAAA,CAAS,SAAA;AAAA,QACpB,YAAY,QAAA,CAAS;AAAA,OACtB,CAAA;AAED,MAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,SAAA,IAAa,iBAAA,EAAkB;AAE9D,MAAA,MAAM,IAAA,GAAO,MAAMC,UAAAA,CAAW;AAAA,QAC5B,OAAA;AAAA,QACA,cAAA;AAAA,QACA,SAAA,EAAW;AAAA,OACZ,CAAA;AAED,MAAA,MAAM,KAAK,KAAA,EAAM;AAEjB,MAAA,IAAA,CAAK,IAAA,GAAO,0BAAA;AACZ,MAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,GAAI,CAAC,CAAA;AAExD,MAAA,MAAM,GAAA,GAAMC,mBAAAA,CAAoB,IAAA,CAAK,MAAM,CAAA;AAE3C,MAAA,MAAM,MAAA,GAASC,mBAAAA;AAAA,QACb,IAAA,CAAK,MAAA;AAAA,QACL,YAAY,IAAA;AAAA,QACZ,GAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,MAAM,OAAO,KAAA,EAAM;AAEnB,MAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AAEZ,MAAA,MAAM,QAAA,GAAW,cAAA;AAAA,QACf,QAAA,CAAS,GAAA;AAAA,QACT,OAAA,CAAQ,EAAA;AAAA,QACR,OAAA,CAAQ,IAAA;AAAA,QACR,OAAA,CAAQ,QAAA;AAAA,QACR;AAAA,OACF;AAEA,MAAA,MAAM,iBAAiB,MAAM,YAAA;AAAA,QAAa,QAAA;AAAA,QAAU,CAAC,IAAA,KACnDN,IAAAA,CAAK,IAAA,EAAM,QAAQ,UAAU;AAAA,OAC/B;AAEA,MAAA,IAAA,CAAK,IAAA,GAAO,oBAAA;AAGZ,MAAA,IAAI,QAAA,GAAW,KAAA,CAAA;AACf,MAAA,IAAI,QAAQ,IAAA,EAAM;AAEhB,QAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AACxC,QAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,UAAA,QAAA,GAAW;AAAA,YACT,MAAA,EAAQ,MAAM,CAAC,CAAA;AAAA,YACf,UAAA,EAAY,CAAC,OAAA,CAAQ,IAAI;AAAA,WAC3B;AACA,UAAA,IAAA,CAAK,CAAA,aAAA,EAAgB,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAAA,QACrC;AAAA,MACF;AAEA,MAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,WAAA,CAAY,gBAAgB,QAAQ,CAAA;AAElE,MAAA,IAAA,CAAK,QAAQ,4BAA4B,CAAA;AAEzC,MAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,MAAA,IAAA,CAAK,CAAA,YAAA,EAAe,cAAA,CAAe,EAAE,CAAA,CAAE,CAAA;AACvC,MAAA,IAAA,CAAK,CAAA,IAAA,EAAO,OAAA,CAAQ,EAAE,CAAA,CAAE,CAAA;AACxB,MAAA,IAAA,CAAK,CAAA,UAAA,EAAa,OAAA,CAAQ,QAAQ,CAAA,CAAE,CAAA;AACpC,MAAA,IAAA,CAAK,CAAA,MAAA,EAAS,OAAA,CAAQ,IAAI,CAAA,CAAE,CAAA;AAC5B,MAAA,IAAA,CAAK,CAAA,SAAA,EAAY,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA,CAAE,CAAA;AAG1C,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,OAAA,CAAQ,sCAAsC,CAAA;AAC9C,QAAA,IAAA,CAAK,CAAA,aAAA,EAAgB,QAAA,CAAS,EAAE,CAAA,CAAE,CAAA;AAClC,QAAA,IAAA,CAAK,CAAA,UAAA,EAAa,QAAA,CAAS,OAAO,CAAA,CAAE,CAAA;AACpC,QAAA,IAAA,CAAK,CAAA,UAAA,EAAa,QAAA,CAAS,QAAQ,CAAA,CAAE,CAAA;AACrC,QAAA,IAAA,CAAK,CAAA,SAAA,EAAY,KAAK,SAAA,CAAU,QAAA,CAAS,SAAS,IAAA,EAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,MAC9D,CAAA,MAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,SAAA,EAAW;AACrC,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,IAAA,CAAK,mEAAmE,CAAA;AAAA,MAC1E;AAEA,MAAA,MAAM,OAAO,IAAA,EAAK;AAClB,MAAA,MAAM,KAAK,IAAA,EAAK;AAEhB,MAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,IAChB,SAAS,GAAA,EAAK;AACZ,MAAA,KAAA,CAAM,CAAA,wBAAA,EAA4B,GAAA,CAAc,OAAO,CAAA,CAAE,CAAA;AACzD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;;;ACpIO,SAAS,sBAAsBH,QAAAA,EAAwB;AAC5D,EAAAA,QAAAA,CACG,QAAQ,QAAQ,CAAA,CAChB,YAAY,qBAAqB,CAAA,CACjC,OAAO,YAAY;AAClB,IAAA,IAAI;AACF,MAAA,WAAA,CAAY,mBAAmB,CAAA;AAE/B,MAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,MAAA,MAAM,OAAO,YAAA,EAAa;AAC1B,MAAA,MAAM,iBAAiB,iBAAA,EAAkB;AAEzC,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,KAAA,CAAM,sDAAsD,CAAA;AAC5D,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,YAAA,CAAa,UAAU,CAAA;AACvB,MAAA,aAAA,CAAc,KAAA,EAAO,SAAS,GAAG,CAAA;AACjC,MAAA,aAAA,CAAc,cAAc,QAAA,CAAS,SAAA,CAAU,UAAU,CAAA,EAAG,EAAE,IAAI,KAAK,CAAA;AAEvE,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,YAAA,CAAa,YAAY,CAAA;AACzB,QAAA,aAAA,CAAc,MAAA,EAAQ,KAAK,IAAI,CAAA;AAC/B,QAAA,aAAA,CAAc,aAAA,EAAe,KAAK,WAAW,CAAA;AAC7C,QAAA,aAAA,CAAc,gBAAgB,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,KAAK,MAAM,CAAA;AAAA,MACtE;AAEA,MAAA,YAAA,CAAa,SAAS,CAAA;AACtB,MAAA,aAAA;AAAA,QACE,iBAAA;AAAA,QACA,eAAe,MAAA,GAAS,CAAA,GAAI,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA,GAAI;AAAA,OAC1D;AAEA,MAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,IACd,SAAS,GAAA,EAAK;AACZ,MAAA,KAAA,CAAM,CAAA,uBAAA,EAA2B,GAAA,CAAc,OAAO,CAAA,CAAE,CAAA;AACxD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;;;ACxCO,SAAS,wBAAwBA,QAAAA,EAAwB;AAC9D,EAAAA,QAAAA,CACG,QAAQ,UAAU,CAAA,CAClB,YAAY,mCAAmC,CAAA,CAC/C,OAAO,YAAY;AAClB,IAAA,IAAI;AACF,MAAA,WAAA,CAAY,qBAAqB,CAAA;AAEjC,MAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,MAAA,MAAM,OAAO,YAAA,EAAa;AAE1B,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,KAAA,CAAM,iDAAiD,CAAA;AACvD,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,aAAA,CAAc,KAAA,EAAO,SAAS,GAAG,CAAA;AACjC,MAAA,aAAA,CAAc,cAAc,QAAA,CAAS,SAAA,CAAU,UAAU,CAAA,EAAG,EAAE,IAAI,KAAK,CAAA;AAEvE,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,OAAA,CAAQ,GAAA,EAAI;AACZ,QAAA,aAAA,CAAc,MAAA,EAAQ,KAAK,IAAI,CAAA;AAC/B,QAAA,aAAA,CAAc,aAAA,EAAe,KAAK,WAAW,CAAA;AAC7C,QAAA,aAAA,CAAc,gBAAgB,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,KAAK,MAAM,CAAA;AAAA,MACtE;AAEA,MAAA,OAAA,CAAQ,GAAA,EAAI;AAAA,IACd,SAAS,GAAA,EAAK;AACZ,MAAA,KAAA,CAAM,CAAA,yBAAA,EAA6B,GAAA,CAAc,OAAO,CAAA,CAAE,CAAA;AAC1D,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;AC/BO,SAAS,oBAAoBA,QAAAA,EAAwB;AAC1D,EAAA,MAAM,OAAOA,QAAAA,CAAQ,OAAA,CAAQ,MAAM,CAAA,CAAE,YAAY,mBAAmB,CAAA;AAEpE,EAAA,IAAA,CACG,QAAQ,MAAM,CAAA,CACd,YAAY,yBAAyB,CAAA,CACrC,OAAO,YAAY;AAClB,IAAA,IAAI;AACF,MAAA,WAAA,CAAY,YAAY,CAAA;AAExB,MAAA,MAAM,YAAY,YAAA,EAAa;AAE/B,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,KAAA,CAAM,mDAAmD,CAAA;AACzD,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,SAAA,EAAW,IAAA,EAAM,CAAC,CAAC,CAAA;AAAA,IAChD,SAAS,GAAA,EAAK;AACZ,MAAA,KAAA,CAAM,CAAA,qBAAA,EAAyB,GAAA,CAAc,OAAO,CAAA,CAAE,CAAA;AACtD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,IAAA,CACG,QAAQ,MAAM,CAAA,CACd,YAAY,iBAAiB,CAAA,CAC7B,OAAO,YAAY;AAClB,IAAA,IAAI;AACF,MAAA,WAAA,CAAY,iBAAiB,CAAA;AAE7B,MAAA,MAAM,cAAc,YAAA,EAAa;AAEjC,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,KAAA,CAAM,mDAAmD,CAAA;AACzD,QAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,MAChB;AAEA,MAAA,MAAM,OAAA,GAAU,MAAMU,QAAAA,CAAS,MAAA,CAAO;AAAA,QACpC;AAAA,UACE,IAAA,EAAM,OAAA;AAAA,UACN,IAAA,EAAM,MAAA;AAAA,UACN,OAAA,EAAS,aAAA;AAAA,UACT,SAAS,WAAA,CAAY;AAAA,SACvB;AAAA,QACA;AAAA,UACE,IAAA,EAAM,OAAA;AAAA,UACN,IAAA,EAAM,aAAA;AAAA,UACN,OAAA,EAAS,oBAAA;AAAA,UACT,SAAS,WAAA,CAAY;AAAA,SACvB;AAAA,QACA;AAAA,UACE,IAAA,EAAM,OAAA;AAAA,UACN,IAAA,EAAM,cAAA;AAAA,UACN,OAAA,EAAS,iCAAA;AAAA,UACT,OAAA,EAAS,WAAA,CAAY,YAAA,CAAa,IAAA,CAAK,IAAI;AAAA;AAC7C,OACD,CAAA;AAED,MAAA,MAAM,WAAA,GAAc;AAAA,QAClB,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,cAAc,OAAA,CAAQ,YAAA,CACnB,MAAM,GAAG,CAAA,CACT,IAAI,CAAC,CAAA,KAAc,CAAA,CAAE,IAAA,EAAM,CAAA,CAC3B,MAAA,CAAO,CAAC,CAAA,KAAc,CAAA,CAAE,SAAS,CAAC;AAAA,OACvC;AAEA,MAAA,YAAA,CAAa,WAAW,CAAA;AAExB,MAAA,OAAA,CAAQ,kCAAkC,CAAA;AAAA,IAC5C,SAAS,GAAA,EAAK;AACZ,MAAA,KAAA,CAAM,CAAA,qBAAA,EAAyB,GAAA,CAAc,OAAO,CAAA,CAAE,CAAA;AACtD,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AACL;ACvEA,IAAM,MAAA,GAAS,aAAa,WAAW,CAAA;AAEhC,SAAS,kBAAA,GAA8B;AAC5C,EAAA,MAAM,QAAQ,IAAI,OAAA,CAAQ,OAAO,CAAA,CAC9B,YAAY,sCAAsC,CAAA;AAGrD,EAAA,KAAA,CACG,OAAA,CAAQ,MAAM,CAAA,CACd,WAAA,CAAY,+BAA+B,CAAA,CAC3C,QAAA,CAAS,OAAA,EAAS,WAAW,CAAA,CAC7B,MAAA,CAAO,OAAO,GAAA,KAAgB;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAUC,IAAAA,CAAKC,OAAAA,EAAQ,EAAG,aAAa,CAAA;AAC7C,MAAA,MAAM,cAAc,iBAAA,CAAkB;AAAA,QACpC,MAAA,EAAQ,GAAG,OAAO,CAAA,MAAA,CAAA;AAAA,QAClB,YAAA,EAAc,YAAY,IAAI,UAAA;AAAW;AAAA,OAC1C,CAAA;AAED,MAAA,MAAM,YAAY,KAAA,EAAM;AAExB,MAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,aAAA,CAAc,GAAG,CAAA;AACjD,MAAA,MAAM,YAAA,GAAe,MAAM,WAAA,CAAY,eAAA,CAAgB,GAAG,CAAA;AAE1D,MAAA,OAAA,CAAQ,GAAA,CAAI,+BAAwB,GAAG,CAAA;AACvC,MAAA,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAC1B,MAAA,OAAA,CAAQ,GAAA,CAAI,wBAAwB,KAAA,CAAM,gBAAA,GAAmB,KAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAC/E,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,oBAAA,EAAuB,KAAA,CAAM,YAAY,CAAA,CAAE,CAAA;AACvD,MAAA,OAAA,CAAQ,GAAA,CAAI,wBAAwB,KAAA,CAAM,cAAA,GAAiB,KAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAC7E,MAAA,OAAA,CAAQ,IAAI,CAAA,oBAAA,EAAuB,KAAA,CAAM,aAAa,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAA,CAAI,CAAA;AACpE,MAAA,OAAA,CAAQ,GAAA,CAAI,uBAAuB,KAAA,CAAM,MAAA,GAAS,KAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AACpE,MAAA,OAAA,CAAQ,GAAA,CAAI,uBAAuB,IAAI,IAAA,CAAK,MAAM,WAAW,CAAA,CAAE,cAAA,EAAgB,CAAA,CAAE,CAAA;AAEjF,MAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AAC3B,QAAA,OAAA,CAAQ,IAAI,wBAAmB,CAAA;AAC/B,QAAA,KAAA,MAAW,KAAK,YAAA,EAAc;AAC5B,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,eAAA,EAAa,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AACjC,UAAA,OAAA,CAAQ,GAAA,CAAI,eAAe,CAAA,CAAE,KAAA,GAAQ,KAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AACvD,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,YAAA,EAAe,CAAA,CAAE,MAAM,CAAA,CAAE,CAAA;AACrC,UAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,IAAI,IAAA,CAAK,EAAE,SAAS,CAAA,CAAE,kBAAA,EAAoB,CAAA,CAAE,CAAA;AAAA,QACvE;AAAA,MACF;AAEA,MAAA,MAAM,YAAY,IAAA,EAAK;AAAA,IACzB,SAASC,MAAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,8BAA8BA,MAAK,CAAA;AAChD,MAAA,OAAA,CAAQ,MAAM,QAAA,EAAUA,MAAAA,YAAiB,KAAA,GAAQA,MAAAA,CAAM,UAAUA,MAAK,CAAA;AACtE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,KAAA,CACG,OAAA,CAAQ,SAAS,CAAA,CACjB,WAAA,CAAY,kBAAkB,CAAA,CAC9B,QAAA,CAAS,OAAA,EAAS,sBAAsB,CAAA,CACxC,MAAA,CAAO,uBAAuB,yBAAA,EAA2B,KAAK,CAAA,CAC9D,MAAA,CAAO,uBAAA,EAAyB,wBAAA,EAA0B,oBAAoB,CAAA,CAC9E,MAAA,CAAO,OAAO,GAAA,EAAa,OAAA,KAA+C;AACzE,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAUF,IAAAA,CAAKC,OAAAA,EAAQ,EAAG,aAAa,CAAA;AAC7C,MAAA,MAAM,cAAc,iBAAA,CAAkB;AAAA,QACpC,MAAA,EAAQ,GAAG,OAAO,CAAA,MAAA,CAAA;AAAA,QAClB,YAAA,EAAc,YAAY,IAAI,UAAA;AAAW;AAAA,OAC1C,CAAA;AAED,MAAA,MAAM,YAAY,KAAA,EAAM;AAExB,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,OAAA,CAAQ,KAAK,CAAA;AACtC,MAAA,IAAI,MAAM,KAAK,CAAA,IAAK,KAAA,GAAQ,CAAA,IAAK,QAAQ,CAAA,EAAG;AAC1C,QAAA,MAAM,IAAI,MAAM,+BAA+B,CAAA;AAAA,MACjD;AAGA,MAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,MACnE;AAEA,MAAA,MAAM,EAAE,aAAA,EAAAN,cAAAA,EAAc,GAAI,MAAM,OAAO,kBAAkB,CAAA;AACzD,MAAA,MAAM,UAAUA,cAAAA,CAAc;AAAA,QAC5B,WAAW,QAAA,CAAS,SAAA;AAAA,QACpB,YAAY,QAAA,CAAS;AAAA,OACtB,CAAA;AAED,MAAA,MAAM,WAAA,GAAc,MAAM,WAAA,CAAY,OAAA;AAAA,QACpC,QAAA,CAAS,GAAA;AAAA,QACT,GAAA;AAAA,QACA,KAAA;AAAA,QACA,OAAA,CAAQ,MAAA;AAAA,QACR,OAAA,CAAQ;AAAA,OACV;AAEA,MAAA,OAAA,CAAQ,IAAI,8BAAyB,CAAA;AACrC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,MAAA,EAAS,WAAA,CAAY,IAAI,CAAA,CAAE,CAAA;AACvC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,IAAA,EAAO,WAAA,CAAY,EAAE,CAAA,CAAE,CAAA;AACnC,MAAA,OAAA,CAAQ,GAAA,CAAI,WAAW,WAAA,CAAY,KAAA,GAAQ,KAAK,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAC7D,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,WAAA,CAAY,MAAM,CAAA,CAAE,CAAA;AAE3C,MAAA,MAAM,YAAY,IAAA,EAAK;AAAA,IACzB,SAASO,MAAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,2BAA2BA,MAAK,CAAA;AAC7C,MAAA,OAAA,CAAQ,MAAM,QAAA,EAAUA,MAAAA,YAAiB,KAAA,GAAQA,MAAAA,CAAM,UAAUA,MAAK,CAAA;AACtE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,KAAA,CACG,QAAQ,SAAS,CAAA,CACjB,YAAY,wCAAwC,CAAA,CACpD,SAAS,OAAA,EAAS,WAAW,CAAA,CAC7B,MAAA,CAAO,uBAAuB,gCAAA,EAAkC,IAAI,EACpE,MAAA,CAAO,OAAO,KAAa,OAAA,KAA+B;AACzD,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAUF,IAAAA,CAAKC,OAAAA,EAAQ,EAAG,aAAa,CAAA;AAC7C,MAAA,MAAM,cAAc,iBAAA,CAAkB;AAAA,QACpC,MAAA,EAAQ,GAAG,OAAO,CAAA,MAAA,CAAA;AAAA,QAClB,YAAA,EAAc,YAAY,IAAI,UAAA;AAAW;AAAA,OAC1C,CAAA;AAED,MAAA,MAAM,YAAY,KAAA,EAAM;AAExB,MAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACxC,MAAA,MAAM,OAAA,GAAU,MAAM,WAAA,CAAY,UAAA,CAAW,KAAK,KAAK,CAAA;AAEvD,MAAA,OAAA,CAAQ,GAAA,CAAI;AAAA,mCAAA,EAAiC,GAAG,CAAA,CAAE,CAAA;AAClD,MAAA,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAE1B,MAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,QAAA,OAAA,CAAQ,IAAI,0BAA0B,CAAA;AAAA,MACxC,CAAA,MAAO;AACL,QAAA,KAAA,MAAW,eAAe,OAAA,EAAS;AACjC,UAAA,MAAM,MAAA,GAAS,WAAA,CAAY,OAAA,GAAU,QAAA,GAAM,QAAA;AAC3C,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,YAAY,IAAI,CAAA,GAAA,EAAM,IAAI,IAAA,CAAK,WAAA,CAAY,SAAS,CAAA,CAAE,cAAA,EAAgB,CAAA,CAAE,CAAA;AACjG,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kBAAA,EAAqB,WAAA,CAAY,YAAY,CAAA,EAAA,CAAI,CAAA;AAC7D,UAAA,IAAI,YAAY,MAAA,EAAQ;AACtB,YAAA,OAAA,CAAQ,IAAI,CAAA,WAAA,EAAc,QAAA,CAAI,OAAO,WAAA,CAAY,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,UAC5D;AACA,UAAA,IAAI,YAAY,QAAA,EAAU;AACxB,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,aAAA,EAAgB,WAAA,CAAY,QAAQ,CAAA,CAAE,CAAA;AAAA,UACpD;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,YAAY,IAAA,EAAK;AAAA,IACzB,SAASC,MAAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,0BAA0BA,MAAK,CAAA;AAC5C,MAAA,OAAA,CAAQ,MAAM,QAAA,EAAUA,MAAAA,YAAiB,KAAA,GAAQA,MAAAA,CAAM,UAAUA,MAAK,CAAA;AACtE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAGH,EAAA,KAAA,CACG,QAAQ,OAAO,CAAA,CACf,YAAY,6BAA6B,CAAA,CACzC,OAAO,YAAY;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,GAAUF,IAAAA,CAAKC,OAAAA,EAAQ,EAAG,aAAa,CAAA;AAC7C,MAAA,MAAM,cAAc,iBAAA,CAAkB;AAAA,QACpC,MAAA,EAAQ,GAAG,OAAO,CAAA,MAAA,CAAA;AAAA,QAClB,YAAA,EAAc,YAAY,IAAI,UAAA;AAAW;AAAA,OAC1C,CAAA;AAED,MAAA,MAAM,YAAY,KAAA,EAAM;AAGxB,MAAA,MAAM,EAAE,kBAAA,EAAmB,GAAI,MAAM,OAAO,kBAAkB,CAAA;AAC9D,MAAA,MAAM,OAAA,GAAU,IAAI,kBAAA,CAAmB,CAAA,EAAG,OAAO,CAAA,mBAAA,CAAqB,CAAA;AACtE,MAAA,MAAM,QAAQ,IAAA,EAAK;AAEnB,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,YAAA,EAAa;AAE1C,MAAA,OAAA,CAAQ,IAAI,8BAAuB,CAAA;AACnC,MAAA,OAAA,CAAQ,GAAA,CAAI,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAC1B,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,sBAAA,EAAyB,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAEpD,MAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,QAAA,OAAA,CAAQ,IAAI,8BAA8B,CAAA;AAC1C,QAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,GAAA;AAAA,UAC3B,MAAA,CAAO,GAAA,CAAI,OAAO,GAAA,MAAS;AAAA,YACzB,GAAA;AAAA,YACA,KAAA,EAAO,MAAM,WAAA,CAAY,aAAA,CAAc,GAAG;AAAA,WAC5C,CAAE;AAAA,SACJ;AAEA,QAAA,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,KAAA,CAAM,gBAAA,GAAmB,CAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAEzE,QAAA,KAAA,MAAW,EAAE,KAAK,KAAA,EAAM,IAAK,OAAO,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,EAAG;AAC/C,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAA,EAAA,CAAM,KAAA,CAAM,gBAAA,GAAmB,GAAA,EAAK,QAAQ,CAAC,CAAC,CAAA,IAAA,EAAO,GAAG,CAAA,CAAE,CAAA;AAAA,QACxE;AAAA,MACF;AAEA,MAAA,MAAM,QAAQ,KAAA,EAAM;AACpB,MAAA,MAAM,YAAY,IAAA,EAAK;AAAA,IACzB,SAASC,MAAAA,EAAO;AACd,MAAA,MAAA,CAAO,KAAA,CAAM,wBAAwBA,MAAK,CAAA;AAC1C,MAAA,OAAA,CAAQ,MAAM,QAAA,EAAUA,MAAAA,YAAiB,KAAA,GAAQA,MAAAA,CAAM,UAAUA,MAAK,CAAA;AACtE,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF,CAAC,CAAA;AAEH,EAAA,OAAO,KAAA;AACT;;;ACnNA,IAAI,CAAC,QAAQ,aAAA,EAAe;AAC1B,EAAA,OAAA,CAAQ,gBAAgB,WAAe;AACrC,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI,MAAA;AACJ,IAAA,MAAM,OAAA,GAAU,IAAI,OAAA,CAAW,CAAC,KAAK,GAAA,KAAQ;AAC3C,MAAA,OAAA,GAAU,GAAA;AACV,MAAA,MAAA,GAAS,GAAA;AAAA,IACX,CAAC,CAAA;AACD,IAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAmB,MAAA,EAAgB;AAAA,EACvD,CAAA;AACF;AAaA,IAAMC,QAAAA,GAAU,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAC7C,IAAM,EAAE,OAAA,EAAQ,GAAIA,QAAAA,CAAQ,iBAAiB,CAAA;AAE7C,IAAM,OAAA,GAAU,IAAIC,OAAAA,EAAQ;AAE5B,IAAM,OAAA,GAAU,QAAQ,IAAA,CAAK,CAAC,GAAG,QAAA,CAAS,KAAK,IAAI,KAAA,GAAQ,YAAA;AAE3D,OAAA,CACG,KAAK,OAAO,CAAA,CACZ,YAAY,mDAAmD,CAAA,CAC/D,QAAQ,OAAO,CAAA;AAGlB,mBAAA,CAAoB,OAAO,CAAA;AAC3B,mBAAA,CAAoB,OAAO,CAAA;AAC3B,uBAAA,CAAwB,OAAO,CAAA;AAC/B,mBAAA,CAAoB,OAAO,CAAA;AAC3B,qBAAA,CAAsB,OAAO,CAAA;AAC7B,uBAAA,CAAwB,OAAO,CAAA;AAC/B,mBAAA,CAAoB,OAAO,CAAA;AAC3B,OAAA,CAAQ,UAAA,CAAW,oBAAoB,CAAA;AAEvC,OAAA,CAAQ,KAAA,EAAM","file":"index.js","sourcesContent":["import Conf from 'conf';\nimport { homedir } from 'os';\nimport { join } from 'path';\n\nexport interface ClawiverseConfig {\n identity?: {\n did: string;\n publicKey: string;\n privateKey: string;\n };\n network?: {\n bootstrapPeers: string[];\n listenAddresses: string[];\n };\n agentCard?: {\n name: string;\n description: string;\n capabilities: string[];\n };\n}\n\nconst CLAWIVERSE_HOME = process.env.CLAWIVERSE_HOME || join(homedir(), '.clawiverse');\n\nconst config = new Conf<ClawiverseConfig>({\n projectName: 'clawiverse',\n cwd: CLAWIVERSE_HOME,\n});\n\nexport function getConfig(): ClawiverseConfig {\n return config.store;\n}\n\nexport function setConfig(key: string, value: unknown): void {\n config.set(key, value);\n}\n\nexport function getConfigValue<T>(key: string): T | undefined {\n return config.get(key) as T | undefined;\n}\n\nexport function hasIdentity(): boolean {\n return config.has('identity');\n}\n\nexport function getIdentity() {\n return config.get('identity');\n}\n\nexport function setIdentity(identity: ClawiverseConfig['identity']): void {\n config.set('identity', identity);\n}\n\nexport function getAgentCard() {\n return config.get('agentCard');\n}\n\nexport function setAgentCard(card: ClawiverseConfig['agentCard']): void {\n config.set('agentCard', card);\n}\n\n// Default public bootstrap nodes (update after deployment)\nconst DEFAULT_BOOTSTRAP_PEERS: string[] = [\n '/dns4/hw1.woowot.com/tcp/4001/p2p/12D3KooWH9R8d4bhzpfyWi3aY5wLBsmLp1LU8ZGk9V7rK17sfzaW',\n];\n\nexport function getBootstrapPeers(): string[] {\n const userPeers = config.get('network.bootstrapPeers') as string[] | undefined;\n if (userPeers && userPeers.length > 0) return userPeers;\n return DEFAULT_BOOTSTRAP_PEERS;\n}\n\nexport function setBootstrapPeers(peers: string[]): void {\n config.set('network.bootstrapPeers', peers);\n}\n","import chalk from 'chalk';\nimport ora, { Ora } from 'ora';\n\nexport function success(message: string): void {\n console.log(chalk.green('ā'), message);\n}\n\nexport function error(message: string): void {\n console.log(chalk.red('ā'), message);\n}\n\nexport function info(message: string): void {\n console.log(chalk.blue('ā¹'), message);\n}\n\nexport function warn(message: string): void {\n console.log(chalk.yellow('ā '), message);\n}\n\nexport function spinner(text: string): Ora {\n return ora(text).start();\n}\n\nexport function printHeader(title: string): void {\n console.log();\n console.log(chalk.bold.cyan(title));\n console.log(chalk.gray('ā'.repeat(title.length)));\n console.log();\n}\n\nexport function printKeyValue(key: string, value: string): void {\n console.log(chalk.gray(`${key}:`), chalk.white(value));\n}\n\nexport function printSection(title: string): void {\n console.log();\n console.log(chalk.bold(title));\n}\n","import { Command } from 'commander';\nimport { generateKeyPair, exportKeyPair, deriveDID } from '@clawiverse/core';\nimport { hasIdentity, setIdentity, setAgentCard } from '../config.js';\nimport { success, error, spinner, printHeader, printKeyValue } from '../ui.js';\nimport inquirer from 'inquirer';\n\nexport function registerInitCommand(program: Command): void {\n program\n .command('init')\n .description('Initialize a new Clawiverse identity')\n .option('--name <name>', 'Agent name')\n .option('--description <description>', 'Agent description')\n .option('--force', 'Overwrite existing identity')\n .action(async (options) => {\n try {\n printHeader('Initialize Clawiverse Identity');\n\n // Check if identity already exists\n if (hasIdentity() && !options.force) {\n error('Identity already exists. Use --force to overwrite.');\n process.exit(1);\n }\n\n // Prompt for agent details if not provided\n let name = options.name;\n let description = options.description;\n\n if (!name) name = 'My Agent';\n if (!description) description = 'A Clawiverse agent';\n\n if (!options.name) {\n const { name: inputName } = await inquirer.prompt({\n type: 'input', name: 'name', message: 'Agent name:', default: name,\n });\n name = inputName || name;\n }\n if (!options.description) {\n const { description: inputDesc } = await inquirer.prompt({\n type: 'input', name: 'description', message: 'Agent description:', default: description,\n });\n description = inputDesc || description;\n }\n\n const spin = spinner('Generating key pair...');\n\n // Generate key pair\n const keyPair = await generateKeyPair();\n const exported = exportKeyPair(keyPair);\n const did = deriveDID(keyPair.publicKey);\n\n // Save identity\n setIdentity({\n did,\n publicKey: exported.publicKey,\n privateKey: exported.privateKey,\n });\n\n // Save agent card\n setAgentCard({\n name,\n description,\n capabilities: [],\n });\n\n spin.succeed('Identity created successfully!');\n\n console.log();\n printKeyValue('DID', did);\n printKeyValue('Name', name);\n printKeyValue('Description', description);\n console.log();\n\n success('Run \"clawiverse join\" to connect to the network');\n } catch (err) {\n error(`Failed to initialize: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from 'commander';\nimport {\n createNode,\n importKeyPair,\n createAgentCard,\n signAgentCard,\n createDHTOperations,\n createMessageRouter,\n sign,\n} from '@clawiverse/core';\nimport { getIdentity, getAgentCard, getBootstrapPeers } from '../config.js';\nimport { success, error, spinner, printHeader, info } from '../ui.js';\n\nexport function registerJoinCommand(program: Command): void {\n program\n .command('join')\n .description('Join the Clawiverse network')\n .option('--bootstrap <peers...>', 'Bootstrap peer addresses')\n .action(async (options) => {\n try {\n printHeader('Join Clawiverse Network');\n\n const identity = getIdentity();\n const card = getAgentCard();\n\n if (!identity || !card) {\n error('No identity found. Run \"clawiverse init\" first.');\n process.exit(1);\n }\n\n const spin = spinner('Starting libp2p node...');\n\n const keyPair = importKeyPair({\n publicKey: identity.publicKey,\n privateKey: identity.privateKey,\n });\n\n const bootstrapPeers = options.bootstrap || getBootstrapPeers();\n\n const node = await createNode({\n keyPair,\n bootstrapPeers,\n enableDHT: true,\n });\n\n await node.start();\n\n spin.succeed('Node started successfully!');\n\n info(`Peer ID: ${node.getPeerId()}`);\n info(`DID: ${identity.did}`);\n info(`Listening on: ${node.getMultiaddrs().join(', ')}`);\n\n // Wait for bootstrap peer connection before publishing to DHT\n const connectSpin = spinner('Connecting to bootstrap peers...');\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(resolve, 10000);\n node.libp2p.addEventListener('peer:connect', () => {\n clearTimeout(timeout);\n setTimeout(resolve, 500);\n }, { once: true });\n });\n connectSpin.succeed('Connected to network!');\n\n // Publish Agent Card with peerId and multiaddrs so others can dial us\n const cardSpin = spinner('Publishing Agent Card to DHT...');\n\n const agentCard = createAgentCard(\n identity.did,\n card.name,\n card.description,\n card.capabilities,\n node.getMultiaddrs(),\n node.getPeerId()\n );\n\n const signedCard = await signAgentCard(agentCard, (data) =>\n sign(data, keyPair.privateKey)\n );\n\n const dht = createDHTOperations(node.libp2p);\n await dht.publishAgentCard(signedCard);\n\n cardSpin.succeed('Agent Card published!');\n\n // Register message handlers for incoming messages\n const router = createMessageRouter(\n node.libp2p,\n async () => true,\n dht\n );\n\n // Generic message handler that accepts any protocol\n const messageHandler = async (envelope: any) => {\n const payload = envelope.payload as Record<string, unknown>;\n console.log();\n success(`>>> Received message from ${envelope.from}`);\n info(` Message ID: ${envelope.id}`);\n info(` Protocol: ${envelope.protocol}`);\n info(` Type: ${envelope.type}`);\n info(` Payload: ${JSON.stringify(payload, null, 2)}`);\n console.log();\n\n // If this is a request, send back a simple acknowledgment response\n if (envelope.type === 'request') {\n info(' Sending acknowledgment response...');\n\n const { createEnvelope, signEnvelope, sign } = await import('@clawiverse/core');\n const identity = getIdentity();\n const keyPair = importKeyPair({\n publicKey: identity!.publicKey,\n privateKey: identity!.privateKey,\n });\n\n const responseEnvelope = createEnvelope(\n envelope.to, // We are the recipient, now we're the sender\n envelope.from, // Original sender is now the recipient\n 'response',\n envelope.protocol,\n {\n status: 'received',\n message: 'Message received and processed',\n originalPayload: payload,\n timestamp: Date.now()\n },\n envelope.id // replyTo: original message ID\n );\n\n const signedResponse = await signEnvelope(responseEnvelope, (data) =>\n sign(data, keyPair.privateKey)\n );\n\n return signedResponse;\n }\n\n return undefined;\n };\n\n // Register handlers for common protocols\n router.registerHandler('/clawiverse/msg/1.0.0', messageHandler);\n router.registerHandler('/clawiverse/greet/1.0.0', messageHandler);\n\n // Register catch-all handler for any other protocol\n router.registerCatchAllHandler(messageHandler);\n\n await router.start();\n\n console.log();\n success('Successfully joined the Clawiverse network!');\n info('Listening for incoming messages...');\n info('Press Ctrl+C to stop');\n\n process.on('SIGINT', async () => {\n console.log();\n const stopSpin = spinner('Stopping node...');\n await router.stop();\n await node.stop();\n stopSpin.succeed('Node stopped');\n process.exit(0);\n });\n\n await new Promise(() => {});\n } catch (err) {\n error(`Failed to join network: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from 'commander';\nimport {\n createNode,\n importKeyPair,\n createDHTOperations,\n} from '@clawiverse/core';\nimport { getIdentity, getBootstrapPeers } from '../config.js';\nimport { error, spinner, printHeader, info, success } from '../ui.js';\nimport Table from 'cli-table3';\n\nexport function registerDiscoverCommand(program: Command): void {\n program\n .command('discover')\n .description('Discover agents on the network')\n .option('--capability <capability>', 'Filter by capability')\n .option('--did <did>', 'Query specific DID')\n .option('--query <text>', 'Natural language query (e.g., \"translate Japanese\")')\n .option('--min-trust <score>', 'Minimum trust score (0-1)')\n .option('--language <lang>', 'Filter by language')\n .option('--limit <number>', 'Maximum number of results', '10')\n .option('--bootstrap <peers...>', 'Bootstrap peer addresses')\n .action(async (options) => {\n try {\n printHeader('Discover Agents');\n\n const identity = getIdentity();\n\n if (!identity) {\n error('No identity found. Run \"clawiverse init\" first.');\n process.exit(1);\n }\n\n const spin = spinner('Starting node...');\n\n const keyPair = importKeyPair({\n publicKey: identity.publicKey,\n privateKey: identity.privateKey,\n });\n\n const bootstrapPeers = options.bootstrap || getBootstrapPeers();\n\n const node = await createNode({\n keyPair,\n bootstrapPeers,\n enableDHT: true,\n });\n\n await node.start();\n\n spin.text = 'Waiting for DHT peers...';\n // Wait until connected to at least one peer, or timeout after 15s\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(resolve, 15000);\n node.libp2p.addEventListener('peer:connect', () => {\n clearTimeout(timeout);\n setTimeout(resolve, 1000); // brief settle time after first connection\n }, { once: true });\n });\n\n spin.text = 'Querying DHT...';\n\n const dht = createDHTOperations(node.libp2p);\n\n if (options.did) {\n const card = await dht.queryAgentCard(options.did);\n\n if (card) {\n spin.succeed('Agent found!');\n console.log();\n info(`DID: ${card.did}`);\n info(`Name: ${card.name}`);\n info(`Description: ${card.description}`);\n info(`Version: ${card.version}`);\n info(`Capabilities: ${card.capabilities.join(', ') || '(none)'}`);\n info(`Peer ID: ${card.peerId || '(unknown)'}`);\n info(`Endpoints: ${card.endpoints.length > 0 ? card.endpoints.join('\\n ') : '(none)'}`);\n info(`Timestamp: ${new Date(card.timestamp).toISOString()}`);\n } else {\n spin.fail('Agent not found');\n }\n } else if (options.capability || options.query) {\n // Semantic search\n const query: any = {\n limit: parseInt(options.limit, 10),\n };\n\n if (options.query) {\n query.text = options.query;\n } else if (options.capability) {\n query.capability = options.capability;\n }\n\n if (options.minTrust) {\n query.filters = {\n minTrustScore: parseFloat(options.minTrust),\n };\n }\n\n if (options.language) {\n query.filters = query.filters || {};\n query.filters.language = options.language;\n }\n\n const cards = await dht.searchSemantic(query);\n\n spin.succeed(`Found ${cards.length} agents`);\n\n if (cards.length > 0) {\n const table = new Table({\n head: ['DID', 'Name', 'Capabilities', 'Trust'],\n colWidths: [40, 20, 35, 10],\n });\n\n for (const card of cards) {\n const capabilities = Array.isArray(card.capabilities)\n ? card.capabilities.map((cap: any) =>\n typeof cap === 'string' ? cap : cap.name\n ).join(', ')\n : '';\n\n const trustScore = card.trust\n ? `${(card.trust.interactionScore * 100).toFixed(0)}%`\n : 'N/A';\n\n table.push([\n card.did.substring(0, 35) + '...',\n card.name,\n capabilities.substring(0, 30) + (capabilities.length > 30 ? '...' : ''),\n trustScore,\n ]);\n }\n\n console.log();\n console.log(table.toString());\n\n // Show detailed info for first result if query was used\n if (options.query && cards.length > 0) {\n const card = cards[0];\n console.log();\n info('Top match details:');\n info(` DID: ${card.did}`);\n info(` Name: ${card.name}`);\n info(` Description: ${card.description}`);\n\n if (Array.isArray(card.capabilities) && card.capabilities.length > 0) {\n const cap = card.capabilities[0];\n if (typeof cap === 'object' && cap !== null) {\n info(` Capability: ${cap.name}`);\n info(` ${cap.description}`);\n }\n }\n }\n }\n } else {\n spin.fail('Please specify --did, --capability, or --query');\n info('Usage: clawiverse discover --did <did>');\n info(' clawiverse discover --capability <capability>');\n info(' clawiverse discover --query \"translate Japanese\"');\n info(' clawiverse discover --query \"code review\" --min-trust 0.8');\n }\n\n await node.stop();\n } catch (err) {\n error(`Failed to discover: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from 'commander';\nimport {\n createNode,\n importKeyPair,\n createEnvelope,\n signEnvelope,\n createMessageRouter,\n createDHTOperations,\n sign,\n} from '@clawiverse/core';\nimport { getIdentity, getBootstrapPeers } from '../config.js';\nimport { success, error, spinner, printHeader, info } from '../ui.js';\n\nexport function registerSendCommand(program: Command): void {\n program\n .command('send')\n .description('Send a message to another agent')\n .requiredOption('--to <did>', 'Recipient DID')\n .requiredOption('--protocol <protocol>', 'Protocol identifier')\n .requiredOption('--payload <json>', 'Message payload (JSON)')\n .option('--type <type>', 'Message type (request|notification)', 'request')\n .option('--bootstrap <peers...>', 'Bootstrap peer addresses')\n .option('--peer <multiaddr>', 'Direct peer multiaddr (bypasses DHT lookup)')\n .action(async (options) => {\n try {\n printHeader('Send Message');\n\n const identity = getIdentity();\n\n if (!identity) {\n error('No identity found. Run \"clawiverse init\" first.');\n process.exit(1);\n }\n\n let payload;\n try {\n payload = JSON.parse(options.payload);\n } catch {\n error('Invalid JSON payload');\n process.exit(1);\n }\n\n const spin = spinner('Starting node...');\n\n const keyPair = importKeyPair({\n publicKey: identity.publicKey,\n privateKey: identity.privateKey,\n });\n\n const bootstrapPeers = options.bootstrap || getBootstrapPeers();\n\n const node = await createNode({\n keyPair,\n bootstrapPeers,\n enableDHT: true,\n });\n\n await node.start();\n\n spin.text = 'Connecting to network...';\n await new Promise((resolve) => setTimeout(resolve, 3000));\n\n const dht = createDHTOperations(node.libp2p);\n\n const router = createMessageRouter(\n node.libp2p,\n async () => true,\n dht,\n bootstrapPeers\n );\n\n await router.start();\n\n spin.text = 'Creating message...';\n\n const envelope = createEnvelope(\n identity.did,\n options.to,\n options.type,\n options.protocol,\n payload\n );\n\n const signedEnvelope = await signEnvelope(envelope, (data) =>\n sign(data, keyPair.privateKey)\n );\n\n spin.text = 'Sending message...';\n\n // Build peer hint from --peer option if provided\n let peerHint = undefined;\n if (options.peer) {\n // Extract peerId from multiaddr (last component after /p2p/)\n const parts = options.peer.split('/p2p/');\n if (parts.length === 2) {\n peerHint = {\n peerId: parts[1],\n multiaddrs: [options.peer],\n };\n info(`Direct peer: ${options.peer}`);\n }\n }\n\n const response = await router.sendMessage(signedEnvelope, peerHint);\n\n spin.succeed('Message sent successfully!');\n\n console.log();\n info(`Message ID: ${signedEnvelope.id}`);\n info(`To: ${options.to}`);\n info(`Protocol: ${options.protocol}`);\n info(`Type: ${options.type}`);\n info(`Payload: ${JSON.stringify(payload)}`);\n\n // Display response if received\n if (response) {\n console.log();\n success('>>> Received response from recipient');\n info(`Response ID: ${response.id}`);\n info(`Reply To: ${response.replyTo}`);\n info(`Protocol: ${response.protocol}`);\n info(`Payload: ${JSON.stringify(response.payload, null, 2)}`);\n } else if (options.type === 'request') {\n console.log();\n info('No response received (recipient may not have returned a response)');\n }\n\n await router.stop();\n await node.stop();\n\n success('Done');\n } catch (err) {\n error(`Failed to send message: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from 'commander';\nimport { getIdentity, getAgentCard, getBootstrapPeers } from '../config.js';\nimport { error, printHeader, printKeyValue, printSection } from '../ui.js';\n\nexport function registerStatusCommand(program: Command): void {\n program\n .command('status')\n .description('Show current status')\n .action(async () => {\n try {\n printHeader('Clawiverse Status');\n\n const identity = getIdentity();\n const card = getAgentCard();\n const bootstrapPeers = getBootstrapPeers();\n\n if (!identity) {\n error('No identity configured. Run \"clawiverse init\" first.');\n process.exit(1);\n }\n\n printSection('Identity');\n printKeyValue('DID', identity.did);\n printKeyValue('Public Key', identity.publicKey.substring(0, 16) + '...');\n\n if (card) {\n printSection('Agent Card');\n printKeyValue('Name', card.name);\n printKeyValue('Description', card.description);\n printKeyValue('Capabilities', card.capabilities.join(', ') || 'None');\n }\n\n printSection('Network');\n printKeyValue(\n 'Bootstrap Peers',\n bootstrapPeers.length > 0 ? bootstrapPeers.join(', ') : 'None configured'\n );\n\n console.log();\n } catch (err) {\n error(`Failed to show status: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from 'commander';\nimport { getIdentity, getAgentCard } from '../config.js';\nimport { error, printHeader, printKeyValue } from '../ui.js';\n\nexport function registerIdentityCommand(program: Command): void {\n program\n .command('identity')\n .description('Show current identity information')\n .action(async () => {\n try {\n printHeader('Clawiverse Identity');\n\n const identity = getIdentity();\n const card = getAgentCard();\n\n if (!identity) {\n error('No identity found. Run \"clawiverse init\" first.');\n process.exit(1);\n }\n\n printKeyValue('DID', identity.did);\n printKeyValue('Public Key', identity.publicKey.substring(0, 16) + '...');\n\n if (card) {\n console.log();\n printKeyValue('Name', card.name);\n printKeyValue('Description', card.description);\n printKeyValue('Capabilities', card.capabilities.join(', ') || 'None');\n }\n\n console.log();\n } catch (err) {\n error(`Failed to show identity: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from 'commander';\nimport { getAgentCard, setAgentCard } from '../config.js';\nimport { success, error, printHeader } from '../ui.js';\nimport inquirer from 'inquirer';\n\nexport function registerCardCommand(program: Command): void {\n const card = program.command('card').description('Manage Agent Card');\n\n card\n .command('show')\n .description('Show current Agent Card')\n .action(async () => {\n try {\n printHeader('Agent Card');\n\n const agentCard = getAgentCard();\n\n if (!agentCard) {\n error('No Agent Card found. Run \"clawiverse init\" first.');\n process.exit(1);\n }\n\n console.log(JSON.stringify(agentCard, null, 2));\n } catch (err) {\n error(`Failed to show card: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n card\n .command('edit')\n .description('Edit Agent Card')\n .action(async () => {\n try {\n printHeader('Edit Agent Card');\n\n const currentCard = getAgentCard();\n\n if (!currentCard) {\n error('No Agent Card found. Run \"clawiverse init\" first.');\n process.exit(1);\n }\n\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'name',\n message: 'Agent name:',\n default: currentCard.name,\n },\n {\n type: 'input',\n name: 'description',\n message: 'Agent description:',\n default: currentCard.description,\n },\n {\n type: 'input',\n name: 'capabilities',\n message: 'Capabilities (comma-separated):',\n default: currentCard.capabilities.join(', '),\n },\n ]);\n\n const updatedCard = {\n name: answers.name,\n description: answers.description,\n capabilities: answers.capabilities\n .split(',')\n .map((c: string) => c.trim())\n .filter((c: string) => c.length > 0),\n };\n\n setAgentCard(updatedCard);\n\n success('Agent Card updated successfully!');\n } catch (err) {\n error(`Failed to edit card: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","/**\n * Trust Command - Manage trust scores and endorsements\n */\n\nimport { Command } from 'commander';\nimport { getConfig, getIdentity } from '../config.js';\nimport { createLogger, createTrustSystem } from '@clawiverse/core';\nimport { homedir } from 'os';\nimport { join } from 'path';\n\nconst logger = createLogger('cli:trust');\n\nexport function createTrustCommand(): Command {\n const trust = new Command('trust')\n .description('Manage trust scores and endorsements');\n\n // Show trust score\n trust\n .command('show')\n .description('Show trust score for an agent')\n .argument('<did>', 'Agent DID')\n .action(async (did: string) => {\n try {\n const dataDir = join(homedir(), '.clawiverse');\n const trustSystem = createTrustSystem({\n dbPath: `${dataDir}/trust`,\n getPublicKey: async () => new Uint8Array(), // Placeholder\n });\n\n await trustSystem.start();\n\n const score = await trustSystem.getTrustScore(did);\n const endorsements = await trustSystem.getEndorsements(did);\n\n console.log('\\nš Trust Score for', did);\n console.log('ā'.repeat(60));\n console.log(`Interaction Score: ${(score.interactionScore * 100).toFixed(1)}%`);\n console.log(`Endorsements: ${score.endorsements}`);\n console.log(`Completion Rate: ${(score.completionRate * 100).toFixed(1)}%`);\n console.log(`Response Time: ${score.responseTime.toFixed(0)}ms`);\n console.log(`Uptime: ${(score.uptime * 100).toFixed(1)}%`);\n console.log(`Last Updated: ${new Date(score.lastUpdated).toLocaleString()}`);\n\n if (endorsements.length > 0) {\n console.log('\\n⨠Endorsements:');\n for (const e of endorsements) {\n console.log(` ⢠From: ${e.from}`);\n console.log(` Score: ${(e.score * 100).toFixed(0)}%`);\n console.log(` Reason: ${e.reason}`);\n console.log(` Date: ${new Date(e.timestamp).toLocaleDateString()}`);\n }\n }\n\n await trustSystem.stop();\n } catch (error) {\n logger.error('Failed to show trust score', error);\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Endorse an agent\n trust\n .command('endorse')\n .description('Endorse an agent')\n .argument('<did>', 'Agent DID to endorse')\n .option('-s, --score <score>', 'Endorsement score (0-1)', '0.8')\n .option('-r, --reason <reason>', 'Reason for endorsement', 'Good collaboration')\n .action(async (did: string, options: { score: string; reason: string }) => {\n try {\n const dataDir = join(homedir(), '.clawiverse');\n const trustSystem = createTrustSystem({\n dbPath: `${dataDir}/trust`,\n getPublicKey: async () => new Uint8Array(), // Placeholder\n });\n\n await trustSystem.start();\n\n const score = parseFloat(options.score);\n if (isNaN(score) || score < 0 || score > 1) {\n throw new Error('Score must be between 0 and 1');\n }\n\n // Load identity for signing\n const identity = getIdentity();\n if (!identity) {\n throw new Error('No identity found. Run \"clawiverse init\" first.');\n }\n\n const { importKeyPair } = await import('@clawiverse/core');\n const keyPair = importKeyPair({\n publicKey: identity.publicKey,\n privateKey: identity.privateKey,\n });\n\n const endorsement = await trustSystem.endorse(\n identity.did,\n did,\n score,\n options.reason,\n keyPair.sign\n );\n\n console.log('\\nā
Endorsement created');\n console.log(`From: ${endorsement.from}`);\n console.log(`To: ${endorsement.to}`);\n console.log(`Score: ${(endorsement.score * 100).toFixed(0)}%`);\n console.log(`Reason: ${endorsement.reason}`);\n\n await trustSystem.stop();\n } catch (error) {\n logger.error('Failed to endorse agent', error);\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Show interaction history\n trust\n .command('history')\n .description('Show interaction history with an agent')\n .argument('<did>', 'Agent DID')\n .option('-l, --limit <limit>', 'Number of interactions to show', '10')\n .action(async (did: string, options: { limit: string }) => {\n try {\n const dataDir = join(homedir(), '.clawiverse');\n const trustSystem = createTrustSystem({\n dbPath: `${dataDir}/trust`,\n getPublicKey: async () => new Uint8Array(), // Placeholder\n });\n\n await trustSystem.start();\n\n const limit = parseInt(options.limit, 10);\n const history = await trustSystem.getHistory(did, limit);\n\n console.log(`\\nš Interaction History with ${did}`);\n console.log('ā'.repeat(60));\n\n if (history.length === 0) {\n console.log('No interactions recorded');\n } else {\n for (const interaction of history) {\n const status = interaction.success ? 'ā
' : 'ā';\n console.log(`${status} ${interaction.type} - ${new Date(interaction.timestamp).toLocaleString()}`);\n console.log(` Response time: ${interaction.responseTime}ms`);\n if (interaction.rating) {\n console.log(` Rating: ${'ā'.repeat(interaction.rating)}`);\n }\n if (interaction.feedback) {\n console.log(` Feedback: ${interaction.feedback}`);\n }\n }\n }\n\n await trustSystem.stop();\n } catch (error) {\n logger.error('Failed to show history', error);\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Show trust statistics\n trust\n .command('stats')\n .description('Show local trust statistics')\n .action(async () => {\n try {\n const dataDir = join(homedir(), '.clawiverse');\n const trustSystem = createTrustSystem({\n dbPath: `${dataDir}/trust`,\n getPublicKey: async () => new Uint8Array(), // Placeholder\n });\n\n await trustSystem.start();\n\n // Get all agents from interaction history\n const { InteractionHistory } = await import('@clawiverse/core');\n const history = new InteractionHistory(`${dataDir}/trust/interactions`);\n await history.open();\n\n const agents = await history.getAllAgents();\n\n console.log('\\nš Trust Statistics');\n console.log('ā'.repeat(60));\n console.log(`Total agents tracked: ${agents.length}`);\n\n if (agents.length > 0) {\n console.log('\\nTop agents by trust score:');\n const scores = await Promise.all(\n agents.map(async (did) => ({\n did,\n score: await trustSystem.getTrustScore(did),\n }))\n );\n\n scores.sort((a, b) => b.score.interactionScore - a.score.interactionScore);\n\n for (const { did, score } of scores.slice(0, 5)) {\n console.log(` ${(score.interactionScore * 100).toFixed(0)}% - ${did}`);\n }\n }\n\n await history.close();\n await trustSystem.stop();\n } catch (error) {\n logger.error('Failed to show stats', error);\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n return trust;\n}\n","#!/usr/bin/env node\n\n// Polyfill for Node.js < v22.0.0\nif (!Promise.withResolvers) {\n Promise.withResolvers = function <T>() {\n let resolve: (value: T | PromiseLike<T>) => void;\n let reject: (reason?: any) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve: resolve!, reject: reject! };\n };\n}\n\nimport { Command } from 'commander';\nimport { createRequire } from 'module';\nimport { registerInitCommand } from './commands/init.js';\nimport { registerJoinCommand } from './commands/join.js';\nimport { registerDiscoverCommand } from './commands/discover.js';\nimport { registerSendCommand } from './commands/send.js';\nimport { registerStatusCommand } from './commands/status.js';\nimport { registerIdentityCommand } from './commands/identity.js';\nimport { registerCardCommand } from './commands/card.js';\nimport { createTrustCommand } from './commands/trust.js';\n\nconst require = createRequire(import.meta.url);\nconst { version } = require('../package.json');\n\nconst program = new Command();\n\nconst binName = process.argv[1]?.includes('hw1') ? 'hw1' : 'clawiverse';\n\nprogram\n .name(binName)\n .description('CLI tool for decentralized AI agent communication')\n .version(version);\n\n// Register commands\nregisterInitCommand(program);\nregisterJoinCommand(program);\nregisterDiscoverCommand(program);\nregisterSendCommand(program);\nregisterStatusCommand(program);\nregisterIdentityCommand(program);\nregisterCardCommand(program);\nprogram.addCommand(createTrustCommand());\n\nprogram.parse();\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/config.ts","../src/ui.ts","../src/commands/init.ts","../src/commands/join.ts","../src/commands/discover.ts","../src/commands/send.ts","../src/commands/status.ts","../src/commands/identity.ts","../src/commands/card.ts","../src/commands/trust.ts","../src/index.ts"],"names":["program","createEnvelope","signEnvelope","sign","identity","keyPair","importKeyPair","createNode","createDHTOperations","createMessageRouter","inquirer","join","homedir","error","require","Command"],"mappings":"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","file":"index.js","sourcesContent":["import Conf from 'conf';\nimport { homedir } from 'os';\nimport { join } from 'path';\n\nexport interface ClawiverseConfig {\n identity?: {\n did: string;\n publicKey: string;\n privateKey: string;\n };\n network?: {\n bootstrapPeers: string[];\n listenAddresses: string[];\n };\n agentCard?: {\n name: string;\n description: string;\n capabilities: string[];\n };\n}\n\nconst CLAWIVERSE_HOME = process.env.CLAWIVERSE_HOME || join(homedir(), '.clawiverse');\n\nconst config = new Conf<ClawiverseConfig>({\n projectName: 'clawiverse',\n cwd: CLAWIVERSE_HOME,\n});\n\nexport function getConfig(): ClawiverseConfig {\n return config.store;\n}\n\nexport function setConfig(key: string, value: unknown): void {\n config.set(key, value);\n}\n\nexport function getConfigValue<T>(key: string): T | undefined {\n return config.get(key) as T | undefined;\n}\n\nexport function hasIdentity(): boolean {\n return config.has('identity');\n}\n\nexport function getIdentity() {\n return config.get('identity');\n}\n\nexport function setIdentity(identity: ClawiverseConfig['identity']): void {\n config.set('identity', identity);\n}\n\nexport function getAgentCard() {\n return config.get('agentCard');\n}\n\nexport function setAgentCard(card: ClawiverseConfig['agentCard']): void {\n config.set('agentCard', card);\n}\n\n// Default public bootstrap nodes (update after deployment)\nconst DEFAULT_BOOTSTRAP_PEERS: string[] = [\n '/dns4/hw1.woowot.com/tcp/4001/p2p/12D3KooWH9R8d4bhzpfyWi3aY5wLBsmLp1LU8ZGk9V7rK17sfzaW',\n];\n\nexport function getBootstrapPeers(): string[] {\n const userPeers = config.get('network.bootstrapPeers') as string[] | undefined;\n if (userPeers && userPeers.length > 0) return userPeers;\n return DEFAULT_BOOTSTRAP_PEERS;\n}\n\nexport function setBootstrapPeers(peers: string[]): void {\n config.set('network.bootstrapPeers', peers);\n}\n","import chalk from 'chalk';\nimport ora, { Ora } from 'ora';\n\nexport function success(message: string): void {\n console.log(chalk.green('ā'), message);\n}\n\nexport function error(message: string): void {\n console.log(chalk.red('ā'), message);\n}\n\nexport function info(message: string): void {\n console.log(chalk.blue('ā¹'), message);\n}\n\nexport function warn(message: string): void {\n console.log(chalk.yellow('ā '), message);\n}\n\nexport function spinner(text: string): Ora {\n return ora(text).start();\n}\n\nexport function printHeader(title: string): void {\n console.log();\n console.log(chalk.bold.cyan(title));\n console.log(chalk.gray('ā'.repeat(title.length)));\n console.log();\n}\n\nexport function printKeyValue(key: string, value: string): void {\n console.log(chalk.gray(`${key}:`), chalk.white(value));\n}\n\nexport function printSection(title: string): void {\n console.log();\n console.log(chalk.bold(title));\n}\n","import { Command } from 'commander';\nimport { generateKeyPair, exportKeyPair, deriveDID } from '@clawiverse/core';\nimport { hasIdentity, setIdentity, setAgentCard } from '../config.js';\nimport { success, error, spinner, printHeader, printKeyValue } from '../ui.js';\nimport inquirer from 'inquirer';\n\nexport function registerInitCommand(program: Command): void {\n program\n .command('init')\n .description('Initialize a new Clawiverse identity')\n .option('--name <name>', 'Agent name')\n .option('--description <description>', 'Agent description')\n .option('--force', 'Overwrite existing identity')\n .action(async (options) => {\n try {\n printHeader('Initialize Clawiverse Identity');\n\n // Check if identity already exists\n if (hasIdentity() && !options.force) {\n error('Identity already exists. Use --force to overwrite.');\n process.exit(1);\n }\n\n // Prompt for agent details if not provided\n let name = options.name;\n let description = options.description;\n\n if (!name) name = 'My Agent';\n if (!description) description = 'A Clawiverse agent';\n\n if (!options.name) {\n const { name: inputName } = await inquirer.prompt({\n type: 'input', name: 'name', message: 'Agent name:', default: name,\n });\n name = inputName || name;\n }\n if (!options.description) {\n const { description: inputDesc } = await inquirer.prompt({\n type: 'input', name: 'description', message: 'Agent description:', default: description,\n });\n description = inputDesc || description;\n }\n\n const spin = spinner('Generating key pair...');\n\n // Generate key pair\n const keyPair = await generateKeyPair();\n const exported = exportKeyPair(keyPair);\n const did = deriveDID(keyPair.publicKey);\n\n // Save identity\n setIdentity({\n did,\n publicKey: exported.publicKey,\n privateKey: exported.privateKey,\n });\n\n // Save agent card\n setAgentCard({\n name,\n description,\n capabilities: [],\n });\n\n spin.succeed('Identity created successfully!');\n\n console.log();\n printKeyValue('DID', did);\n printKeyValue('Name', name);\n printKeyValue('Description', description);\n console.log();\n\n success('Run \"hw1 join\" to connect to the network');\n } catch (err) {\n error(`Failed to initialize: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from 'commander';\nimport {\n createNode,\n importKeyPair,\n createAgentCard,\n signAgentCard,\n createDHTOperations,\n createMessageRouter,\n sign,\n} from '@clawiverse/core';\nimport { getIdentity, getAgentCard, getBootstrapPeers } from '../config.js';\nimport { success, error, spinner, printHeader, info } from '../ui.js';\n\nexport function registerJoinCommand(program: Command): void {\n program\n .command('join')\n .description('Join the Clawiverse network')\n .option('--bootstrap <peers...>', 'Bootstrap peer addresses')\n .action(async (options) => {\n try {\n printHeader('Join Clawiverse Network');\n\n const identity = getIdentity();\n const card = getAgentCard();\n\n if (!identity || !card) {\n error('No identity found. Run \"hw1 init\" first.');\n process.exit(1);\n }\n\n const spin = spinner('Starting libp2p node...');\n\n const keyPair = importKeyPair({\n publicKey: identity.publicKey,\n privateKey: identity.privateKey,\n });\n\n const bootstrapPeers = options.bootstrap || getBootstrapPeers();\n\n const node = await createNode({\n keyPair,\n bootstrapPeers,\n enableDHT: true,\n });\n\n await node.start();\n\n spin.succeed('Node started successfully!');\n\n info(`Peer ID: ${node.getPeerId()}`);\n info(`DID: ${identity.did}`);\n info(`Listening on: ${node.getMultiaddrs().join(', ')}`);\n\n // Wait for bootstrap peer connection before publishing to DHT\n const connectSpin = spinner('Connecting to bootstrap peers...');\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(resolve, 10000);\n node.libp2p.addEventListener('peer:connect', () => {\n clearTimeout(timeout);\n setTimeout(resolve, 500);\n }, { once: true });\n });\n connectSpin.succeed('Connected to network!');\n\n // Publish Agent Card with peerId and multiaddrs so others can dial us\n const cardSpin = spinner('Publishing Agent Card to DHT...');\n\n // Include circuit relay addresses so nodes behind NAT can be reached\n const directAddrs = node.getMultiaddrs();\n const relayAddrs = bootstrapPeers.map((relayAddr) => {\n const peerId = node.getPeerId();\n return `${relayAddr}/p2p-circuit/p2p/${peerId}`;\n });\n const allAddrs = [...directAddrs, ...relayAddrs];\n\n const agentCard = createAgentCard(\n identity.did,\n card.name,\n card.description,\n card.capabilities,\n allAddrs,\n node.getPeerId()\n );\n\n const signedCard = await signAgentCard(agentCard, (data) =>\n sign(data, keyPair.privateKey)\n );\n\n const dht = createDHTOperations(node.libp2p);\n await dht.publishAgentCard(signedCard);\n\n cardSpin.succeed('Agent Card published!');\n\n // Register message handlers for incoming messages\n const router = createMessageRouter(\n node.libp2p,\n async () => true,\n dht\n );\n\n // Generic message handler that accepts any protocol\n const messageHandler = async (envelope: any) => {\n const payload = envelope.payload as Record<string, unknown>;\n console.log();\n success(`>>> Received message from ${envelope.from}`);\n info(` Message ID: ${envelope.id}`);\n info(` Protocol: ${envelope.protocol}`);\n info(` Type: ${envelope.type}`);\n info(` Payload: ${JSON.stringify(payload, null, 2)}`);\n console.log();\n\n // If this is a request, send back a simple acknowledgment response\n if (envelope.type === 'request') {\n info(' Sending acknowledgment response...');\n\n const { createEnvelope, signEnvelope, sign } = await import('@clawiverse/core');\n const identity = getIdentity();\n const keyPair = importKeyPair({\n publicKey: identity!.publicKey,\n privateKey: identity!.privateKey,\n });\n\n const responseEnvelope = createEnvelope(\n envelope.to, // We are the recipient, now we're the sender\n envelope.from, // Original sender is now the recipient\n 'response',\n envelope.protocol,\n {\n status: 'received',\n message: 'Message received and processed',\n originalPayload: payload,\n timestamp: Date.now()\n },\n envelope.id // replyTo: original message ID\n );\n\n const signedResponse = await signEnvelope(responseEnvelope, (data) =>\n sign(data, keyPair.privateKey)\n );\n\n return signedResponse;\n }\n\n return undefined;\n };\n\n // Register handlers for common protocols\n router.registerHandler('/clawiverse/msg/1.0.0', messageHandler);\n router.registerHandler('/clawiverse/greet/1.0.0', messageHandler);\n\n // Register catch-all handler for any other protocol\n router.registerCatchAllHandler(messageHandler);\n\n await router.start();\n\n console.log();\n success('Successfully joined the Clawiverse network!');\n info('Listening for incoming messages...');\n info('Press Ctrl+C to stop');\n\n process.on('SIGINT', async () => {\n console.log();\n const stopSpin = spinner('Stopping node...');\n await router.stop();\n await node.stop();\n stopSpin.succeed('Node stopped');\n process.exit(0);\n });\n\n await new Promise(() => {});\n } catch (err) {\n error(`Failed to join network: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from 'commander';\nimport {\n createNode,\n importKeyPair,\n createDHTOperations,\n} from '@clawiverse/core';\nimport { getIdentity, getBootstrapPeers } from '../config.js';\nimport { error, spinner, printHeader, info, success } from '../ui.js';\nimport Table from 'cli-table3';\n\nexport function registerDiscoverCommand(program: Command): void {\n program\n .command('discover')\n .description('Discover agents on the network')\n .option('--capability <capability>', 'Filter by capability')\n .option('--did <did>', 'Query specific DID')\n .option('--query <text>', 'Natural language query (e.g., \"translate Japanese\")')\n .option('--min-trust <score>', 'Minimum trust score (0-1)')\n .option('--language <lang>', 'Filter by language')\n .option('--limit <number>', 'Maximum number of results', '10')\n .option('--bootstrap <peers...>', 'Bootstrap peer addresses')\n .action(async (options) => {\n try {\n printHeader('Discover Agents');\n\n const identity = getIdentity();\n\n if (!identity) {\n error('No identity found. Run \"hw1 init\" first.');\n process.exit(1);\n }\n\n const spin = spinner('Starting node...');\n\n const keyPair = importKeyPair({\n publicKey: identity.publicKey,\n privateKey: identity.privateKey,\n });\n\n const bootstrapPeers = options.bootstrap || getBootstrapPeers();\n\n const node = await createNode({\n keyPair,\n bootstrapPeers,\n enableDHT: true,\n });\n\n await node.start();\n\n spin.text = 'Waiting for DHT peers...';\n // Wait until connected to at least one peer, or timeout after 15s\n await new Promise<void>((resolve) => {\n const timeout = setTimeout(resolve, 15000);\n node.libp2p.addEventListener('peer:connect', () => {\n clearTimeout(timeout);\n setTimeout(resolve, 1000); // brief settle time after first connection\n }, { once: true });\n });\n\n spin.text = 'Querying DHT...';\n\n const dht = createDHTOperations(node.libp2p);\n\n if (options.did) {\n const card = await dht.queryAgentCard(options.did);\n\n if (card) {\n spin.succeed('Agent found!');\n console.log();\n info(`DID: ${card.did}`);\n info(`Name: ${card.name}`);\n info(`Description: ${card.description}`);\n info(`Version: ${card.version}`);\n info(`Capabilities: ${card.capabilities.join(', ') || '(none)'}`);\n info(`Peer ID: ${card.peerId || '(unknown)'}`);\n info(`Endpoints: ${card.endpoints.length > 0 ? card.endpoints.join('\\n ') : '(none)'}`);\n info(`Timestamp: ${new Date(card.timestamp).toISOString()}`);\n } else {\n spin.fail('Agent not found');\n }\n } else if (options.capability || options.query) {\n // Semantic search\n const query: any = {\n limit: parseInt(options.limit, 10),\n };\n\n if (options.query) {\n query.text = options.query;\n } else if (options.capability) {\n query.capability = options.capability;\n }\n\n if (options.minTrust) {\n query.filters = {\n minTrustScore: parseFloat(options.minTrust),\n };\n }\n\n if (options.language) {\n query.filters = query.filters || {};\n query.filters.language = options.language;\n }\n\n const cards = await dht.searchSemantic(query);\n\n spin.succeed(`Found ${cards.length} agents`);\n\n if (cards.length > 0) {\n const table = new Table({\n head: ['DID', 'Name', 'Capabilities', 'Trust'],\n colWidths: [40, 20, 35, 10],\n });\n\n for (const card of cards) {\n const capabilities = Array.isArray(card.capabilities)\n ? card.capabilities.map((cap: any) =>\n typeof cap === 'string' ? cap : cap.name\n ).join(', ')\n : '';\n\n const trustScore = card.trust\n ? `${(card.trust.interactionScore * 100).toFixed(0)}%`\n : 'N/A';\n\n table.push([\n card.did.substring(0, 35) + '...',\n card.name,\n capabilities.substring(0, 30) + (capabilities.length > 30 ? '...' : ''),\n trustScore,\n ]);\n }\n\n console.log();\n console.log(table.toString());\n\n // Show detailed info for first result if query was used\n if (options.query && cards.length > 0) {\n const card = cards[0];\n console.log();\n info('Top match details:');\n info(` DID: ${card.did}`);\n info(` Name: ${card.name}`);\n info(` Description: ${card.description}`);\n\n if (Array.isArray(card.capabilities) && card.capabilities.length > 0) {\n const cap = card.capabilities[0];\n if (typeof cap === 'object' && cap !== null) {\n info(` Capability: ${cap.name}`);\n info(` ${cap.description}`);\n }\n }\n }\n }\n } else {\n spin.fail('Please specify --did, --capability, or --query');\n info('Usage: hw1 discover --did <did>');\n info(' hw1 discover --capability <capability>');\n info(' hw1 discover --query \"translate Japanese\"');\n info(' hw1 discover --query \"code review\" --min-trust 0.8');\n }\n\n await node.stop();\n } catch (err) {\n error(`Failed to discover: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from 'commander';\nimport {\n createNode,\n importKeyPair,\n createEnvelope,\n signEnvelope,\n createMessageRouter,\n createDHTOperations,\n sign,\n} from '@clawiverse/core';\nimport { getIdentity, getBootstrapPeers } from '../config.js';\nimport { success, error, spinner, printHeader, info } from '../ui.js';\n\nexport function registerSendCommand(program: Command): void {\n program\n .command('send')\n .description('Send a message to another agent')\n .requiredOption('--to <did>', 'Recipient DID')\n .requiredOption('--protocol <protocol>', 'Protocol identifier')\n .requiredOption('--payload <json>', 'Message payload (JSON)')\n .option('--type <type>', 'Message type (request|notification)', 'request')\n .option('--bootstrap <peers...>', 'Bootstrap peer addresses')\n .option('--peer <multiaddr>', 'Direct peer multiaddr (bypasses DHT lookup)')\n .action(async (options) => {\n try {\n printHeader('Send Message');\n\n const identity = getIdentity();\n\n if (!identity) {\n error('No identity found. Run \"hw1 init\" first.');\n process.exit(1);\n }\n\n let payload;\n try {\n payload = JSON.parse(options.payload);\n } catch {\n error('Invalid JSON payload');\n process.exit(1);\n }\n\n const spin = spinner('Starting node...');\n\n const keyPair = importKeyPair({\n publicKey: identity.publicKey,\n privateKey: identity.privateKey,\n });\n\n const bootstrapPeers = options.bootstrap || getBootstrapPeers();\n\n const node = await createNode({\n keyPair,\n bootstrapPeers,\n enableDHT: true,\n });\n\n await node.start();\n\n spin.text = 'Connecting to network...';\n await new Promise((resolve) => setTimeout(resolve, 3000));\n\n const dht = createDHTOperations(node.libp2p);\n\n const router = createMessageRouter(\n node.libp2p,\n async () => true,\n dht,\n bootstrapPeers\n );\n\n await router.start();\n\n spin.text = 'Creating message...';\n\n const envelope = createEnvelope(\n identity.did,\n options.to,\n options.type,\n options.protocol,\n payload\n );\n\n const signedEnvelope = await signEnvelope(envelope, (data) =>\n sign(data, keyPair.privateKey)\n );\n\n spin.text = 'Sending message...';\n\n // Build peer hint from --peer option if provided\n let peerHint = undefined;\n if (options.peer) {\n // Extract peerId from multiaddr (last component after /p2p/)\n const parts = options.peer.split('/p2p/');\n if (parts.length === 2) {\n peerHint = {\n peerId: parts[1],\n multiaddrs: [options.peer],\n };\n info(`Direct peer: ${options.peer}`);\n }\n }\n\n const response = await router.sendMessage(signedEnvelope, peerHint);\n\n spin.succeed('Message sent successfully!');\n\n console.log();\n info(`Message ID: ${signedEnvelope.id}`);\n info(`To: ${options.to}`);\n info(`Protocol: ${options.protocol}`);\n info(`Type: ${options.type}`);\n info(`Payload: ${JSON.stringify(payload)}`);\n\n // Display response if received\n if (response) {\n console.log();\n success('>>> Received response from recipient');\n info(`Response ID: ${response.id}`);\n info(`Reply To: ${response.replyTo}`);\n info(`Protocol: ${response.protocol}`);\n info(`Payload: ${JSON.stringify(response.payload, null, 2)}`);\n } else if (options.type === 'request') {\n console.log();\n info('No response received (recipient may not have returned a response)');\n }\n\n await router.stop();\n await node.stop();\n\n success('Done');\n } catch (err) {\n error(`Failed to send message: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from 'commander';\nimport { getIdentity, getAgentCard, getBootstrapPeers } from '../config.js';\nimport { error, printHeader, printKeyValue, printSection } from '../ui.js';\n\nexport function registerStatusCommand(program: Command): void {\n program\n .command('status')\n .description('Show current status')\n .action(async () => {\n try {\n printHeader('Clawiverse Status');\n\n const identity = getIdentity();\n const card = getAgentCard();\n const bootstrapPeers = getBootstrapPeers();\n\n if (!identity) {\n error('No identity configured. Run \"hw1 init\" first.');\n process.exit(1);\n }\n\n printSection('Identity');\n printKeyValue('DID', identity.did);\n printKeyValue('Public Key', identity.publicKey.substring(0, 16) + '...');\n\n if (card) {\n printSection('Agent Card');\n printKeyValue('Name', card.name);\n printKeyValue('Description', card.description);\n printKeyValue('Capabilities', card.capabilities.join(', ') || 'None');\n }\n\n printSection('Network');\n printKeyValue(\n 'Bootstrap Peers',\n bootstrapPeers.length > 0 ? bootstrapPeers.join(', ') : 'None configured'\n );\n\n console.log();\n } catch (err) {\n error(`Failed to show status: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from 'commander';\nimport { getIdentity, getAgentCard } from '../config.js';\nimport { error, printHeader, printKeyValue } from '../ui.js';\n\nexport function registerIdentityCommand(program: Command): void {\n program\n .command('identity')\n .description('Show current identity information')\n .action(async () => {\n try {\n printHeader('Clawiverse Identity');\n\n const identity = getIdentity();\n const card = getAgentCard();\n\n if (!identity) {\n error('No identity found. Run \"hw1 init\" first.');\n process.exit(1);\n }\n\n printKeyValue('DID', identity.did);\n printKeyValue('Public Key', identity.publicKey.substring(0, 16) + '...');\n\n if (card) {\n console.log();\n printKeyValue('Name', card.name);\n printKeyValue('Description', card.description);\n printKeyValue('Capabilities', card.capabilities.join(', ') || 'None');\n }\n\n console.log();\n } catch (err) {\n error(`Failed to show identity: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","import { Command } from 'commander';\nimport { getAgentCard, setAgentCard } from '../config.js';\nimport { success, error, printHeader } from '../ui.js';\nimport inquirer from 'inquirer';\n\nexport function registerCardCommand(program: Command): void {\n const card = program.command('card').description('Manage Agent Card');\n\n card\n .command('show')\n .description('Show current Agent Card')\n .action(async () => {\n try {\n printHeader('Agent Card');\n\n const agentCard = getAgentCard();\n\n if (!agentCard) {\n error('No Agent Card found. Run \"hw1 init\" first.');\n process.exit(1);\n }\n\n console.log(JSON.stringify(agentCard, null, 2));\n } catch (err) {\n error(`Failed to show card: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n\n card\n .command('edit')\n .description('Edit Agent Card')\n .action(async () => {\n try {\n printHeader('Edit Agent Card');\n\n const currentCard = getAgentCard();\n\n if (!currentCard) {\n error('No Agent Card found. Run \"hw1 init\" first.');\n process.exit(1);\n }\n\n const answers = await inquirer.prompt([\n {\n type: 'input',\n name: 'name',\n message: 'Agent name:',\n default: currentCard.name,\n },\n {\n type: 'input',\n name: 'description',\n message: 'Agent description:',\n default: currentCard.description,\n },\n {\n type: 'input',\n name: 'capabilities',\n message: 'Capabilities (comma-separated):',\n default: currentCard.capabilities.join(', '),\n },\n ]);\n\n const updatedCard = {\n name: answers.name,\n description: answers.description,\n capabilities: answers.capabilities\n .split(',')\n .map((c: string) => c.trim())\n .filter((c: string) => c.length > 0),\n };\n\n setAgentCard(updatedCard);\n\n success('Agent Card updated successfully!');\n } catch (err) {\n error(`Failed to edit card: ${(err as Error).message}`);\n process.exit(1);\n }\n });\n}\n","/**\n * Trust Command - Manage trust scores and endorsements\n */\n\nimport { Command } from 'commander';\nimport { getConfig, getIdentity } from '../config.js';\nimport { createLogger, createTrustSystem } from '@clawiverse/core';\nimport { homedir } from 'os';\nimport { join } from 'path';\n\nconst logger = createLogger('cli:trust');\n\nexport function createTrustCommand(): Command {\n const trust = new Command('trust')\n .description('Manage trust scores and endorsements');\n\n // Show trust score\n trust\n .command('show')\n .description('Show trust score for an agent')\n .argument('<did>', 'Agent DID')\n .action(async (did: string) => {\n try {\n const dataDir = join(homedir(), '.clawiverse');\n const trustSystem = createTrustSystem({\n dbPath: `${dataDir}/trust`,\n getPublicKey: async () => new Uint8Array(), // Placeholder\n });\n\n await trustSystem.start();\n\n const score = await trustSystem.getTrustScore(did);\n const endorsements = await trustSystem.getEndorsements(did);\n\n console.log('\\nš Trust Score for', did);\n console.log('ā'.repeat(60));\n console.log(`Interaction Score: ${(score.interactionScore * 100).toFixed(1)}%`);\n console.log(`Endorsements: ${score.endorsements}`);\n console.log(`Completion Rate: ${(score.completionRate * 100).toFixed(1)}%`);\n console.log(`Response Time: ${score.responseTime.toFixed(0)}ms`);\n console.log(`Uptime: ${(score.uptime * 100).toFixed(1)}%`);\n console.log(`Last Updated: ${new Date(score.lastUpdated).toLocaleString()}`);\n\n if (endorsements.length > 0) {\n console.log('\\n⨠Endorsements:');\n for (const e of endorsements) {\n console.log(` ⢠From: ${e.from}`);\n console.log(` Score: ${(e.score * 100).toFixed(0)}%`);\n console.log(` Reason: ${e.reason}`);\n console.log(` Date: ${new Date(e.timestamp).toLocaleDateString()}`);\n }\n }\n\n await trustSystem.stop();\n } catch (error) {\n logger.error('Failed to show trust score', error);\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Endorse an agent\n trust\n .command('endorse')\n .description('Endorse an agent')\n .argument('<did>', 'Agent DID to endorse')\n .option('-s, --score <score>', 'Endorsement score (0-1)', '0.8')\n .option('-r, --reason <reason>', 'Reason for endorsement', 'Good collaboration')\n .action(async (did: string, options: { score: string; reason: string }) => {\n try {\n const dataDir = join(homedir(), '.clawiverse');\n const trustSystem = createTrustSystem({\n dbPath: `${dataDir}/trust`,\n getPublicKey: async () => new Uint8Array(), // Placeholder\n });\n\n await trustSystem.start();\n\n const score = parseFloat(options.score);\n if (isNaN(score) || score < 0 || score > 1) {\n throw new Error('Score must be between 0 and 1');\n }\n\n // Load identity for signing\n const identity = getIdentity();\n if (!identity) {\n throw new Error('No identity found. Run \"hw1 init\" first.');\n }\n\n const { importKeyPair } = await import('@clawiverse/core');\n const keyPair = importKeyPair({\n publicKey: identity.publicKey,\n privateKey: identity.privateKey,\n });\n\n const endorsement = await trustSystem.endorse(\n identity.did,\n did,\n score,\n options.reason,\n keyPair.sign\n );\n\n console.log('\\nā
Endorsement created');\n console.log(`From: ${endorsement.from}`);\n console.log(`To: ${endorsement.to}`);\n console.log(`Score: ${(endorsement.score * 100).toFixed(0)}%`);\n console.log(`Reason: ${endorsement.reason}`);\n\n await trustSystem.stop();\n } catch (error) {\n logger.error('Failed to endorse agent', error);\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Show interaction history\n trust\n .command('history')\n .description('Show interaction history with an agent')\n .argument('<did>', 'Agent DID')\n .option('-l, --limit <limit>', 'Number of interactions to show', '10')\n .action(async (did: string, options: { limit: string }) => {\n try {\n const dataDir = join(homedir(), '.clawiverse');\n const trustSystem = createTrustSystem({\n dbPath: `${dataDir}/trust`,\n getPublicKey: async () => new Uint8Array(), // Placeholder\n });\n\n await trustSystem.start();\n\n const limit = parseInt(options.limit, 10);\n const history = await trustSystem.getHistory(did, limit);\n\n console.log(`\\nš Interaction History with ${did}`);\n console.log('ā'.repeat(60));\n\n if (history.length === 0) {\n console.log('No interactions recorded');\n } else {\n for (const interaction of history) {\n const status = interaction.success ? 'ā
' : 'ā';\n console.log(`${status} ${interaction.type} - ${new Date(interaction.timestamp).toLocaleString()}`);\n console.log(` Response time: ${interaction.responseTime}ms`);\n if (interaction.rating) {\n console.log(` Rating: ${'ā'.repeat(interaction.rating)}`);\n }\n if (interaction.feedback) {\n console.log(` Feedback: ${interaction.feedback}`);\n }\n }\n }\n\n await trustSystem.stop();\n } catch (error) {\n logger.error('Failed to show history', error);\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n // Show trust statistics\n trust\n .command('stats')\n .description('Show local trust statistics')\n .action(async () => {\n try {\n const dataDir = join(homedir(), '.clawiverse');\n const trustSystem = createTrustSystem({\n dbPath: `${dataDir}/trust`,\n getPublicKey: async () => new Uint8Array(), // Placeholder\n });\n\n await trustSystem.start();\n\n // Get all agents from interaction history\n const { InteractionHistory } = await import('@clawiverse/core');\n const history = new InteractionHistory(`${dataDir}/trust/interactions`);\n await history.open();\n\n const agents = await history.getAllAgents();\n\n console.log('\\nš Trust Statistics');\n console.log('ā'.repeat(60));\n console.log(`Total agents tracked: ${agents.length}`);\n\n if (agents.length > 0) {\n console.log('\\nTop agents by trust score:');\n const scores = await Promise.all(\n agents.map(async (did) => ({\n did,\n score: await trustSystem.getTrustScore(did),\n }))\n );\n\n scores.sort((a, b) => b.score.interactionScore - a.score.interactionScore);\n\n for (const { did, score } of scores.slice(0, 5)) {\n console.log(` ${(score.interactionScore * 100).toFixed(0)}% - ${did}`);\n }\n }\n\n await history.close();\n await trustSystem.stop();\n } catch (error) {\n logger.error('Failed to show stats', error);\n console.error('Error:', error instanceof Error ? error.message : error);\n process.exit(1);\n }\n });\n\n return trust;\n}\n","#!/usr/bin/env node\n\n// Polyfill for Node.js < v22.0.0\nif (!Promise.withResolvers) {\n Promise.withResolvers = function <T>() {\n let resolve: (value: T | PromiseLike<T>) => void;\n let reject: (reason?: any) => void;\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve: resolve!, reject: reject! };\n };\n}\n\nimport { Command } from 'commander';\nimport { createRequire } from 'module';\nimport { registerInitCommand } from './commands/init.js';\nimport { registerJoinCommand } from './commands/join.js';\nimport { registerDiscoverCommand } from './commands/discover.js';\nimport { registerSendCommand } from './commands/send.js';\nimport { registerStatusCommand } from './commands/status.js';\nimport { registerIdentityCommand } from './commands/identity.js';\nimport { registerCardCommand } from './commands/card.js';\nimport { createTrustCommand } from './commands/trust.js';\n\nconst require = createRequire(import.meta.url);\nconst { version } = require('../package.json');\n\nconst program = new Command();\n\nconst binName = process.argv[1]?.includes('hw1') ? 'hw1' : 'clawiverse';\n\nprogram\n .name(binName)\n .description('CLI tool for decentralized AI agent communication')\n .version(version);\n\n// Register commands\nregisterInitCommand(program);\nregisterJoinCommand(program);\nregisterDiscoverCommand(program);\nregisterSendCommand(program);\nregisterStatusCommand(program);\nregisterIdentityCommand(program);\nregisterCardCommand(program);\nprogram.addCommand(createTrustCommand());\n\nprogram.parse();\n"]}
|
package/package.json
CHANGED
|
@@ -1,20 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@highway1/cli",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "CLI tool for
|
|
3
|
+
"version": "0.1.12",
|
|
4
|
+
"description": "CLI tool for Clawiverse network",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
+
"clawiverse": "./dist/index.js",
|
|
7
8
|
"hw1": "./dist/index.js"
|
|
8
9
|
},
|
|
9
|
-
"
|
|
10
|
-
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsup",
|
|
12
|
+
"dev": "tsup --watch",
|
|
13
|
+
"clean": "rm -rf dist"
|
|
14
|
+
},
|
|
11
15
|
"dependencies": {
|
|
12
|
-
"@
|
|
13
|
-
"commander": "^12.1.0",
|
|
16
|
+
"@clawiverse/core": "file:../core",
|
|
14
17
|
"chalk": "^5.3.0",
|
|
15
|
-
"ora": "^8.1.0",
|
|
16
|
-
"inquirer": "^13.3.0",
|
|
17
18
|
"cli-table3": "^0.6.5",
|
|
18
|
-
"
|
|
19
|
+
"commander": "^12.1.0",
|
|
20
|
+
"conf": "^13.0.1",
|
|
21
|
+
"inquirer": "^13.3.0",
|
|
22
|
+
"ora": "^8.1.0"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"@types/node": "^22.10.2",
|
|
26
|
+
"tsup": "^8.3.5",
|
|
27
|
+
"typescript": "^5.7.2"
|
|
28
|
+
},
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=22.0.0"
|
|
19
31
|
}
|
|
20
32
|
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { getAgentCard, setAgentCard } from '../config.js';
|
|
3
|
+
import { success, error, printHeader } from '../ui.js';
|
|
4
|
+
import inquirer from 'inquirer';
|
|
5
|
+
|
|
6
|
+
export function registerCardCommand(program: Command): void {
|
|
7
|
+
const card = program.command('card').description('Manage Agent Card');
|
|
8
|
+
|
|
9
|
+
card
|
|
10
|
+
.command('show')
|
|
11
|
+
.description('Show current Agent Card')
|
|
12
|
+
.action(async () => {
|
|
13
|
+
try {
|
|
14
|
+
printHeader('Agent Card');
|
|
15
|
+
|
|
16
|
+
const agentCard = getAgentCard();
|
|
17
|
+
|
|
18
|
+
if (!agentCard) {
|
|
19
|
+
error('No Agent Card found. Run "hw1 init" first.');
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
console.log(JSON.stringify(agentCard, null, 2));
|
|
24
|
+
} catch (err) {
|
|
25
|
+
error(`Failed to show card: ${(err as Error).message}`);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
card
|
|
31
|
+
.command('edit')
|
|
32
|
+
.description('Edit Agent Card')
|
|
33
|
+
.action(async () => {
|
|
34
|
+
try {
|
|
35
|
+
printHeader('Edit Agent Card');
|
|
36
|
+
|
|
37
|
+
const currentCard = getAgentCard();
|
|
38
|
+
|
|
39
|
+
if (!currentCard) {
|
|
40
|
+
error('No Agent Card found. Run "hw1 init" first.');
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const answers = await inquirer.prompt([
|
|
45
|
+
{
|
|
46
|
+
type: 'input',
|
|
47
|
+
name: 'name',
|
|
48
|
+
message: 'Agent name:',
|
|
49
|
+
default: currentCard.name,
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
type: 'input',
|
|
53
|
+
name: 'description',
|
|
54
|
+
message: 'Agent description:',
|
|
55
|
+
default: currentCard.description,
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'input',
|
|
59
|
+
name: 'capabilities',
|
|
60
|
+
message: 'Capabilities (comma-separated):',
|
|
61
|
+
default: currentCard.capabilities.join(', '),
|
|
62
|
+
},
|
|
63
|
+
]);
|
|
64
|
+
|
|
65
|
+
const updatedCard = {
|
|
66
|
+
name: answers.name,
|
|
67
|
+
description: answers.description,
|
|
68
|
+
capabilities: answers.capabilities
|
|
69
|
+
.split(',')
|
|
70
|
+
.map((c: string) => c.trim())
|
|
71
|
+
.filter((c: string) => c.length > 0),
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
setAgentCard(updatedCard);
|
|
75
|
+
|
|
76
|
+
success('Agent Card updated successfully!');
|
|
77
|
+
} catch (err) {
|
|
78
|
+
error(`Failed to edit card: ${(err as Error).message}`);
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|