@kya-os/cli 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/dist/commands/build.d.ts +5 -0
  2. package/dist/commands/build.d.ts.map +1 -0
  3. package/dist/commands/build.js +173 -0
  4. package/dist/commands/build.js.map +1 -0
  5. package/dist/commands/check.d.ts.map +1 -1
  6. package/dist/commands/check.js +9 -31
  7. package/dist/commands/check.js.map +1 -1
  8. package/dist/commands/claim.d.ts +7 -1
  9. package/dist/commands/claim.d.ts.map +1 -1
  10. package/dist/commands/claim.js +196 -44
  11. package/dist/commands/claim.js.map +1 -1
  12. package/dist/commands/demo.d.ts +10 -0
  13. package/dist/commands/demo.d.ts.map +1 -0
  14. package/dist/commands/demo.js +584 -0
  15. package/dist/commands/demo.js.map +1 -0
  16. package/dist/commands/dev.d.ts +5 -0
  17. package/dist/commands/dev.d.ts.map +1 -0
  18. package/dist/commands/dev.js +111 -0
  19. package/dist/commands/dev.js.map +1 -0
  20. package/dist/commands/doctor.d.ts +11 -0
  21. package/dist/commands/doctor.d.ts.map +1 -0
  22. package/dist/commands/doctor.js +530 -0
  23. package/dist/commands/doctor.js.map +1 -0
  24. package/dist/commands/env.d.ts +1 -1
  25. package/dist/commands/env.d.ts.map +1 -1
  26. package/dist/commands/env.js +113 -15
  27. package/dist/commands/env.js.map +1 -1
  28. package/dist/commands/identity.d.ts +14 -0
  29. package/dist/commands/identity.d.ts.map +1 -0
  30. package/dist/commands/identity.js +204 -0
  31. package/dist/commands/identity.js.map +1 -0
  32. package/dist/commands/init.d.ts +6 -2
  33. package/dist/commands/init.d.ts.map +1 -1
  34. package/dist/commands/init.js +86 -670
  35. package/dist/commands/init.js.map +1 -1
  36. package/dist/commands/receipts.d.ts +11 -0
  37. package/dist/commands/receipts.d.ts.map +1 -0
  38. package/dist/commands/receipts.js +179 -0
  39. package/dist/commands/receipts.js.map +1 -0
  40. package/dist/commands/register.d.ts +15 -0
  41. package/dist/commands/register.d.ts.map +1 -0
  42. package/dist/commands/register.js +220 -0
  43. package/dist/commands/register.js.map +1 -0
  44. package/dist/commands/rotate.d.ts +7 -1
  45. package/dist/commands/rotate.d.ts.map +1 -1
  46. package/dist/commands/rotate.js +149 -109
  47. package/dist/commands/rotate.js.map +1 -1
  48. package/dist/commands/start.d.ts +5 -0
  49. package/dist/commands/start.d.ts.map +1 -0
  50. package/dist/commands/start.js +129 -0
  51. package/dist/commands/start.js.map +1 -0
  52. package/dist/commands/status.d.ts +9 -0
  53. package/dist/commands/status.d.ts.map +1 -0
  54. package/dist/commands/status.js +177 -0
  55. package/dist/commands/status.js.map +1 -0
  56. package/dist/commands/verify.d.ts +22 -0
  57. package/dist/commands/verify.d.ts.map +1 -0
  58. package/dist/commands/verify.js +491 -0
  59. package/dist/commands/verify.js.map +1 -0
  60. package/dist/components/claim-experience.d.ts +21 -0
  61. package/dist/components/claim-experience.d.ts.map +1 -0
  62. package/dist/components/claim-experience.js +138 -0
  63. package/dist/components/claim-experience.js.map +1 -0
  64. package/dist/index.js +154 -19
  65. package/dist/utils/env-manager.d.ts +6 -7
  66. package/dist/utils/env-manager.d.ts.map +1 -1
  67. package/dist/utils/env-manager.js +52 -40
  68. package/dist/utils/env-manager.js.map +1 -1
  69. package/dist/utils/identity-manager.d.ts +41 -0
  70. package/dist/utils/identity-manager.d.ts.map +1 -0
  71. package/dist/utils/identity-manager.js +159 -0
  72. package/dist/utils/identity-manager.js.map +1 -0
  73. package/dist/utils/kta-api.d.ts +67 -0
  74. package/dist/utils/kta-api.d.ts.map +1 -0
  75. package/dist/utils/kta-api.js +137 -0
  76. package/dist/utils/kta-api.js.map +1 -0
  77. package/package.json +8 -6
  78. package/dist/utils/validation.d.ts +0 -101
  79. package/dist/utils/validation.d.ts.map +0 -1
  80. package/dist/utils/validation.js +0 -109
  81. package/dist/utils/validation.js.map +0 -1
@@ -0,0 +1,491 @@
1
+ /**
2
+ * Local verification command for XMCP-I CLI
3
+ *
4
+ * Implements Requirements 15.5, 15.6:
5
+ * - Perform offline verification without KTA calls
6
+ * - Validate signatures, proofs, and key relationships locally
7
+ * - Return detailed validation results for debugging
8
+ */
9
+ import chalk from "chalk";
10
+ import ora from "ora";
11
+ import { readFileSync, existsSync } from "fs";
12
+ import { importJWK, jwtVerify } from "jose";
13
+ import { createHash } from "crypto";
14
+ import { loadCurrentIdentity } from "../utils/identity-manager.js";
15
+ import { showSuccess, showError, } from "../utils/prompts.js";
16
+ /**
17
+ * Verify command implementation
18
+ */
19
+ export async function verify(options = {}) {
20
+ const { local = false, json = false, verbose = false } = options;
21
+ if (!local) {
22
+ if (json) {
23
+ console.log(JSON.stringify({
24
+ success: false,
25
+ error: "Only --local verification is currently supported",
26
+ }, null, 2));
27
+ }
28
+ else {
29
+ showError("Only --local verification is currently supported");
30
+ console.log(chalk.gray("Use: mcpi verify --local"));
31
+ }
32
+ process.exit(1);
33
+ }
34
+ if (!json) {
35
+ console.log(chalk.cyan("\n🔍 Local Proof Verification\n"));
36
+ }
37
+ const spinner = json
38
+ ? null
39
+ : ora("Loading identity and proof data...").start();
40
+ try {
41
+ // Load current identity
42
+ const identity = loadCurrentIdentity();
43
+ if (!identity) {
44
+ const error = 'No XMCP-I identity found. Run "mcpi init" first.';
45
+ if (json) {
46
+ console.log(JSON.stringify({ success: false, error }, null, 2));
47
+ }
48
+ else {
49
+ spinner?.fail(error);
50
+ }
51
+ process.exit(1);
52
+ }
53
+ // Load proof data
54
+ const proofData = await loadProofData(options);
55
+ if (!proofData) {
56
+ const error = "No proof data provided. Use --proof, --request, and --response options.";
57
+ if (json) {
58
+ console.log(JSON.stringify({ success: false, error }, null, 2));
59
+ }
60
+ else {
61
+ spinner?.fail(error);
62
+ }
63
+ process.exit(1);
64
+ }
65
+ if (spinner) {
66
+ spinner.text = "Performing local verification...";
67
+ }
68
+ // Perform local verification
69
+ const result = await performLocalVerification(identity, proofData);
70
+ if (json) {
71
+ console.log(JSON.stringify(result, null, 2));
72
+ }
73
+ else {
74
+ spinner?.stop();
75
+ displayVerificationResults(result, verbose);
76
+ }
77
+ // Exit with appropriate code
78
+ process.exit(result.success ? 0 : 1);
79
+ }
80
+ catch (error) {
81
+ const errorMessage = error instanceof Error ? error.message : "Unknown error";
82
+ if (json) {
83
+ console.log(JSON.stringify({
84
+ success: false,
85
+ error: errorMessage,
86
+ }, null, 2));
87
+ }
88
+ else {
89
+ spinner?.fail(`Verification failed: ${errorMessage}`);
90
+ }
91
+ process.exit(1);
92
+ }
93
+ }
94
+ /**
95
+ * Load proof data from options or interactive input
96
+ */
97
+ async function loadProofData(options) {
98
+ try {
99
+ let proof;
100
+ let request;
101
+ let response;
102
+ // Load proof
103
+ if (options.proof) {
104
+ proof = loadJsonData(options.proof, "proof");
105
+ }
106
+ else {
107
+ // Try to find proof in common locations
108
+ const commonProofPaths = [
109
+ ".mcpi/last-proof.json",
110
+ "proof.json",
111
+ "test-proof.json",
112
+ ];
113
+ let proofPath = null;
114
+ for (const path of commonProofPaths) {
115
+ if (existsSync(path)) {
116
+ proofPath = path;
117
+ break;
118
+ }
119
+ }
120
+ if (!proofPath) {
121
+ return null;
122
+ }
123
+ proof = loadJsonData(proofPath, "proof");
124
+ }
125
+ // Load request if provided
126
+ if (options.request) {
127
+ request = loadJsonData(options.request, "request");
128
+ }
129
+ // Load response if provided
130
+ if (options.response) {
131
+ response = loadJsonData(options.response, "response");
132
+ }
133
+ return { proof, request, response };
134
+ }
135
+ catch (error) {
136
+ throw new Error(`Failed to load proof data: ${error instanceof Error ? error.message : "Unknown error"}`);
137
+ }
138
+ }
139
+ /**
140
+ * Load JSON data from file path or JSON string
141
+ */
142
+ function loadJsonData(input, type) {
143
+ try {
144
+ // Check if it's a file path
145
+ if (existsSync(input)) {
146
+ const content = readFileSync(input, "utf-8");
147
+ return JSON.parse(content);
148
+ }
149
+ // Try to parse as JSON string
150
+ return JSON.parse(input);
151
+ }
152
+ catch (error) {
153
+ throw new Error(`Invalid ${type} data: ${error instanceof Error ? error.message : "Parse error"}`);
154
+ }
155
+ }
156
+ /**
157
+ * Perform comprehensive local verification
158
+ */
159
+ async function performLocalVerification(identity, proofData) {
160
+ const result = {
161
+ success: false,
162
+ details: {
163
+ proofStructure: { valid: false, issues: [] },
164
+ signature: { valid: false, issues: [] },
165
+ hashes: { valid: false, issues: [] },
166
+ keyRelationship: { valid: false, issues: [] },
167
+ timestamp: { valid: false, issues: [] },
168
+ },
169
+ warnings: [],
170
+ identity: {
171
+ did: identity.did,
172
+ keyId: identity.keyId,
173
+ environment: process.env.AGENT_PRIVATE_KEY ? "prod" : "dev",
174
+ },
175
+ };
176
+ // 1. Validate proof structure
177
+ result.details.proofStructure = validateProofStructure(proofData.proof);
178
+ // 2. Validate signature
179
+ result.details.signature = await validateSignature(proofData.proof, identity);
180
+ // 3. Validate hashes (if request/response provided)
181
+ if (proofData.request && proofData.response) {
182
+ result.details.hashes = validateHashes(proofData.proof, proofData.request, proofData.response);
183
+ }
184
+ else {
185
+ result.warnings.push("Request/response data not provided - hash validation skipped");
186
+ }
187
+ // 4. Validate key relationship
188
+ result.details.keyRelationship = validateKeyRelationship(proofData.proof, identity);
189
+ // 5. Validate timestamp
190
+ result.details.timestamp = validateTimestamp(proofData.proof);
191
+ // Determine overall success
192
+ result.success =
193
+ result.details.proofStructure.valid &&
194
+ result.details.signature.valid &&
195
+ (result.details.hashes.valid ||
196
+ !proofData.request ||
197
+ !proofData.response) &&
198
+ result.details.keyRelationship.valid &&
199
+ result.details.timestamp.valid;
200
+ return result;
201
+ }
202
+ /**
203
+ * Validate proof structure
204
+ */
205
+ function validateProofStructure(proof) {
206
+ const issues = [];
207
+ // Check required fields
208
+ if (!proof.jws) {
209
+ issues.push("Missing JWS field");
210
+ }
211
+ else {
212
+ // Check detached JWS format (header..signature)
213
+ const parts = proof.jws.split(".");
214
+ if (parts.length !== 3) {
215
+ issues.push("Invalid JWS format - expected 3 parts");
216
+ }
217
+ else if (parts[1] !== "") {
218
+ issues.push("JWS is not detached - payload should be empty");
219
+ }
220
+ }
221
+ if (!proof.meta) {
222
+ issues.push("Missing meta field");
223
+ }
224
+ else {
225
+ const meta = proof.meta;
226
+ const requiredFields = [
227
+ "did",
228
+ "kid",
229
+ "ts",
230
+ "nonce",
231
+ "audience",
232
+ "sessionId",
233
+ "requestHash",
234
+ "responseHash",
235
+ ];
236
+ for (const field of requiredFields) {
237
+ if (!meta[field]) {
238
+ issues.push(`Missing meta.${field}`);
239
+ }
240
+ }
241
+ // Validate hash format
242
+ if (meta.requestHash && !meta.requestHash.match(/^sha256:[a-f0-9]{64}$/)) {
243
+ issues.push("Invalid requestHash format - expected sha256:hex");
244
+ }
245
+ if (meta.responseHash &&
246
+ !meta.responseHash.match(/^sha256:[a-f0-9]{64}$/)) {
247
+ issues.push("Invalid responseHash format - expected sha256:hex");
248
+ }
249
+ }
250
+ return {
251
+ valid: issues.length === 0,
252
+ issues,
253
+ };
254
+ }
255
+ /**
256
+ * Validate JWS signature
257
+ */
258
+ async function validateSignature(proof, identity) {
259
+ const issues = [];
260
+ try {
261
+ // Convert base64 public key to JWK format for JOSE
262
+ const publicKeyBuffer = Buffer.from(identity.publicKey, "base64");
263
+ // For Ed25519, we need to create a proper JWK
264
+ const publicKeyJwk = {
265
+ kty: "OKP",
266
+ crv: "Ed25519",
267
+ x: Buffer.from(publicKeyBuffer).toString("base64url"),
268
+ };
269
+ // Import the public key
270
+ const publicKey = await importJWK(publicKeyJwk, "EdDSA");
271
+ // Reconstruct the full JWT for verification
272
+ const payload = Buffer.from(JSON.stringify(proof.meta)).toString("base64url");
273
+ const fullJwt = proof.jws.replace("..", `.${payload}.`);
274
+ // Verify the signature
275
+ const { payload: verifiedPayload } = await jwtVerify(fullJwt, publicKey, {
276
+ algorithms: ["EdDSA"],
277
+ });
278
+ // Verify the payload matches our meta
279
+ const expectedMeta = JSON.stringify(proof.meta);
280
+ const actualMeta = JSON.stringify(verifiedPayload);
281
+ if (expectedMeta !== actualMeta) {
282
+ issues.push("Payload mismatch - meta does not match signed payload");
283
+ }
284
+ }
285
+ catch (error) {
286
+ issues.push(`Signature verification failed: ${error instanceof Error ? error.message : "Unknown error"}`);
287
+ }
288
+ return {
289
+ valid: issues.length === 0,
290
+ issues,
291
+ };
292
+ }
293
+ /**
294
+ * Validate hashes against request/response
295
+ */
296
+ function validateHashes(proof, request, response) {
297
+ const issues = [];
298
+ try {
299
+ // Generate expected hashes using the same canonicalization as the runtime
300
+ const expectedHashes = generateCanonicalHashes(request, response);
301
+ const result = {
302
+ valid: false,
303
+ issues,
304
+ expected: expectedHashes,
305
+ actual: {
306
+ requestHash: proof.meta.requestHash,
307
+ responseHash: proof.meta.responseHash,
308
+ },
309
+ };
310
+ // Compare hashes
311
+ if (proof.meta.requestHash !== expectedHashes.requestHash) {
312
+ issues.push(`Request hash mismatch - expected ${expectedHashes.requestHash}, got ${proof.meta.requestHash}`);
313
+ }
314
+ if (proof.meta.responseHash !== expectedHashes.responseHash) {
315
+ issues.push(`Response hash mismatch - expected ${expectedHashes.responseHash}, got ${proof.meta.responseHash}`);
316
+ }
317
+ result.valid = issues.length === 0;
318
+ return result;
319
+ }
320
+ catch (error) {
321
+ issues.push(`Hash validation failed: ${error instanceof Error ? error.message : "Unknown error"}`);
322
+ return { valid: false, issues };
323
+ }
324
+ }
325
+ /**
326
+ * Generate canonical hashes (matching runtime implementation)
327
+ */
328
+ function generateCanonicalHashes(request, response) {
329
+ // Canonicalize request (exclude transport metadata, include method and params)
330
+ const canonicalRequest = {
331
+ method: request.method,
332
+ ...(request.params && { params: request.params }),
333
+ };
334
+ // Canonicalize response (only the data part, exclude meta)
335
+ const canonicalResponse = response.data || response;
336
+ // Generate SHA-256 hashes with JCS canonicalization
337
+ const requestHash = generateSHA256Hash(canonicalRequest);
338
+ const responseHash = generateSHA256Hash(canonicalResponse);
339
+ return { requestHash, responseHash };
340
+ }
341
+ /**
342
+ * Generate SHA-256 hash with JCS canonicalization
343
+ */
344
+ function generateSHA256Hash(data) {
345
+ // JCS canonicalization (simplified implementation)
346
+ const canonicalJson = canonicalizeJSON(data);
347
+ // Generate SHA-256 hash
348
+ const hash = createHash("sha256").update(canonicalJson, "utf8").digest("hex");
349
+ return `sha256:${hash}`;
350
+ }
351
+ /**
352
+ * JCS canonicalization implementation (matching runtime)
353
+ */
354
+ function canonicalizeJSON(obj) {
355
+ if (obj === null)
356
+ return "null";
357
+ if (typeof obj === "boolean")
358
+ return obj.toString();
359
+ if (typeof obj === "number") {
360
+ if (Number.isNaN(obj))
361
+ return "null";
362
+ if (!Number.isFinite(obj))
363
+ return "null";
364
+ return obj.toString();
365
+ }
366
+ if (typeof obj === "string")
367
+ return JSON.stringify(obj);
368
+ if (Array.isArray(obj)) {
369
+ const items = obj.map((item) => canonicalizeJSON(item));
370
+ return `[${items.join(",")}]`;
371
+ }
372
+ if (typeof obj === "object") {
373
+ // Sort keys for canonical ordering
374
+ const sortedKeys = Object.keys(obj).sort();
375
+ const pairs = sortedKeys.map((key) => {
376
+ const value = canonicalizeJSON(obj[key]);
377
+ return `${JSON.stringify(key)}:${value}`;
378
+ });
379
+ return `{${pairs.join(",")}}`;
380
+ }
381
+ // Fallback for other types
382
+ return JSON.stringify(obj);
383
+ }
384
+ /**
385
+ * Validate key relationship between proof and identity
386
+ */
387
+ function validateKeyRelationship(proof, identity) {
388
+ const issues = [];
389
+ // Check DID match
390
+ if (proof.meta.did !== identity.did) {
391
+ issues.push(`DID mismatch - proof: ${proof.meta.did}, identity: ${identity.did}`);
392
+ }
393
+ // Check key ID match
394
+ if (proof.meta.kid !== identity.keyId) {
395
+ issues.push(`Key ID mismatch - proof: ${proof.meta.kid}, identity: ${identity.keyId}`);
396
+ }
397
+ return {
398
+ valid: issues.length === 0,
399
+ issues,
400
+ };
401
+ }
402
+ /**
403
+ * Validate timestamp
404
+ */
405
+ function validateTimestamp(proof) {
406
+ const issues = [];
407
+ const now = Math.floor(Date.now() / 1000);
408
+ const proofTime = proof.meta.ts;
409
+ const skew = Math.abs(now - proofTime);
410
+ // Default skew tolerance (can be configured via XMCP_I_TS_SKEW_SEC)
411
+ const maxSkew = parseInt(process.env.XMCP_I_TS_SKEW_SEC || "120");
412
+ if (skew > maxSkew) {
413
+ issues.push(`Timestamp skew too large: ${skew}s (max: ${maxSkew}s)`);
414
+ }
415
+ return {
416
+ valid: issues.length === 0,
417
+ issues,
418
+ skew,
419
+ };
420
+ }
421
+ /**
422
+ * Display verification results in human-readable format
423
+ */
424
+ function displayVerificationResults(result, verbose) {
425
+ console.log(chalk.bold("\n📊 Verification Results\n"));
426
+ // Overall status
427
+ if (result.success) {
428
+ showSuccess("✅ Local verification passed");
429
+ }
430
+ else {
431
+ showError("❌ Local verification failed");
432
+ }
433
+ // Identity info
434
+ if (result.identity) {
435
+ console.log(chalk.bold("\n🔑 Identity:"));
436
+ console.log(` DID: ${chalk.cyan(result.identity.did)}`);
437
+ console.log(` Key ID: ${chalk.cyan(result.identity.keyId)}`);
438
+ console.log(` Environment: ${chalk.cyan(result.identity.environment)}`);
439
+ }
440
+ // Detailed results
441
+ console.log(chalk.bold("\n🔍 Verification Details:"));
442
+ const checks = [
443
+ { name: "Proof Structure", result: result.details.proofStructure },
444
+ { name: "Signature", result: result.details.signature },
445
+ { name: "Hash Validation", result: result.details.hashes },
446
+ { name: "Key Relationship", result: result.details.keyRelationship },
447
+ { name: "Timestamp", result: result.details.timestamp },
448
+ ];
449
+ for (const check of checks) {
450
+ const status = check.result.valid ? "✅" : "❌";
451
+ const color = check.result.valid ? chalk.green : chalk.red;
452
+ console.log(` ${status} ${color(check.name)}`);
453
+ if (check.result.issues.length > 0 && (verbose || !check.result.valid)) {
454
+ for (const issue of check.result.issues) {
455
+ console.log(` ${chalk.gray("•")} ${chalk.yellow(issue)}`);
456
+ }
457
+ }
458
+ }
459
+ // Hash details
460
+ if (result.details.hashes.expected &&
461
+ result.details.hashes.actual &&
462
+ verbose) {
463
+ console.log(chalk.bold("\n📝 Hash Details:"));
464
+ console.log(` Expected Request Hash: ${chalk.gray(result.details.hashes.expected.requestHash)}`);
465
+ console.log(` Actual Request Hash: ${chalk.gray(result.details.hashes.actual.requestHash)}`);
466
+ console.log(` Expected Response Hash: ${chalk.gray(result.details.hashes.expected.responseHash)}`);
467
+ console.log(` Actual Response Hash: ${chalk.gray(result.details.hashes.actual.responseHash)}`);
468
+ }
469
+ // Timestamp details
470
+ if (result.details.timestamp.skew !== undefined && verbose) {
471
+ console.log(chalk.bold("\n⏰ Timestamp Details:"));
472
+ console.log(` Clock Skew: ${chalk.gray(result.details.timestamp.skew + "s")}`);
473
+ console.log(` Max Allowed: ${chalk.gray(process.env.XMCP_I_TS_SKEW_SEC || "120")}s`);
474
+ }
475
+ // Warnings
476
+ if (result.warnings.length > 0) {
477
+ console.log(chalk.bold("\n⚠️ Warnings:"));
478
+ for (const warning of result.warnings) {
479
+ console.log(` ${chalk.yellow("•")} ${warning}`);
480
+ }
481
+ }
482
+ // Usage hints
483
+ if (!result.success || verbose) {
484
+ console.log(chalk.bold("\n💡 Usage:"));
485
+ console.log(chalk.gray(" mcpi verify --local --proof proof.json"));
486
+ console.log(chalk.gray(" mcpi verify --local --proof proof.json --request request.json --response response.json"));
487
+ console.log(chalk.gray(" mcpi verify --local --json # JSON output"));
488
+ console.log(chalk.gray(" mcpi verify --local --verbose # Detailed output"));
489
+ }
490
+ }
491
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Claim Experience Component
3
+ * Clean, professional claim interface with vertical draw-down effect
4
+ */
5
+ /**
6
+ * Create clean claim interface without broken formatting
7
+ */
8
+ export declare function createAmazingClaimExperience(claimUrl: string, agentData?: any, status?: "unclaimed" | "claimed"): Promise<string>;
9
+ /**
10
+ * Create vertical draw-down effect for the clean boxen card
11
+ */
12
+ export declare function createClaimDrawDown(claimUrl: string, agentData?: any): AsyncGenerator<string, void, unknown>;
13
+ /**
14
+ * Simple claim sequence - just show the clean card with draw-down
15
+ */
16
+ export declare function createClaimSequence(claimUrl: string, agentData: any): AsyncGenerator<string, void, unknown>;
17
+ /**
18
+ * Clean portal sequence without complex effects
19
+ */
20
+ export declare function createPortalSequence(duration?: number): AsyncGenerator<string, void, unknown>;
21
+ //# sourceMappingURL=claim-experience.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claim-experience.d.ts","sourceRoot":"","sources":["../../src/components/claim-experience.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoBH;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,GAAG,EACf,MAAM,GAAE,WAAW,GAAG,SAAuB,GAC5C,OAAO,CAAC,MAAM,CAAC,CAgDjB;AAED;;GAEG;AACH,wBAAuB,mBAAmB,CACxC,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,GAAG,GACd,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAyBvC;AAED;;GAEG;AACH,wBAAuB,mBAAmB,CACxC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,GAAG,GACb,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CA6BvC;AAED;;GAEG;AACH,wBAAuB,oBAAoB,CACzC,QAAQ,GAAE,MAAa,GACtB,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAevC"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Claim Experience Component
3
+ * Clean, professional claim interface with vertical draw-down effect
4
+ */
5
+ import chalk from "chalk";
6
+ import gradient from "gradient-string";
7
+ import boxen from "boxen";
8
+ /**
9
+ * Simple KYA logomark without complex characters
10
+ */
11
+ const SIMPLE_KYA_LOGO = `
12
+ ╭───╮ ╭───╮
13
+ ╱ ╲─────╱ ╲
14
+ │ ● │ ◊ │ ● │
15
+ ╲ ╱─────╲ ╱
16
+ ╰───╯ ╰───╯
17
+ KNOW YOUR AI
18
+ `;
19
+ /**
20
+ * Create clean claim interface without broken formatting
21
+ */
22
+ export async function createAmazingClaimExperience(claimUrl, agentData, status = "unclaimed") {
23
+ // Clean, readable colors
24
+ const headerColor = chalk.bold.cyan;
25
+ const labelColor = chalk.bold.white;
26
+ const valueColor = chalk.green;
27
+ const urlColor = chalk.cyan.underline;
28
+ const promptColor = chalk.bold.yellow;
29
+ // Properly format URL to ensure it's clickable
30
+ const displayUrl = claimUrl; // Show full URL, no truncation
31
+ const content = `
32
+ ${headerColor("CLAIM YOUR AGENT")}
33
+
34
+ ${labelColor("STATUS:")} ${status === "claimed"
35
+ ? valueColor("CLAIMED")
36
+ : chalk.yellow("AWAITING AUTHORIZATION")}
37
+
38
+ ${labelColor("PROTOCOL:")} Model Context Protocol - Identity (MCP-I)
39
+
40
+ ${labelColor("ACTION:")} Establish cryptographic authority chain
41
+
42
+ ────────────────────────────────────────────────────────────────────────────────
43
+
44
+ ${labelColor("CLAIM PORTAL:")}
45
+
46
+ ${urlColor(displayUrl)}
47
+
48
+ This cryptographically signed link grants you control
49
+ over your agent's identity and capabilities.
50
+
51
+ ────────────────────────────────────────────────────────────────────────────────
52
+
53
+ ${promptColor("PRESS ENTER TO OPEN IN BROWSER")}
54
+
55
+ Your agent awaits activation...
56
+ `;
57
+ return boxen(content, {
58
+ padding: 1,
59
+ margin: 1,
60
+ borderStyle: "round",
61
+ borderColor: "cyan",
62
+ backgroundColor: undefined,
63
+ width: 100, // Wider to accommodate full URL
64
+ });
65
+ }
66
+ /**
67
+ * Create vertical draw-down effect for the clean boxen card
68
+ */
69
+ export async function* createClaimDrawDown(claimUrl, agentData) {
70
+ // Get the final clean card
71
+ const finalCard = await createAmazingClaimExperience(claimUrl, agentData);
72
+ const lines = finalCard.split("\n");
73
+ // Create gradient from cyan to white
74
+ const cyanToWhite = gradient(["#00bcd4", "#ffffff"]);
75
+ // Draw down effect - each line appears with gradient, ending in white
76
+ for (let i = 0; i < lines.length; i++) {
77
+ const visibleLines = lines.slice(0, i + 1);
78
+ const output = visibleLines
79
+ .map((line, index) => {
80
+ if (index === i) {
81
+ // Current line gets gradient effect
82
+ return cyanToWhite(line);
83
+ }
84
+ else {
85
+ // Previous lines are white (final state)
86
+ return chalk.white(line);
87
+ }
88
+ })
89
+ .join("\n");
90
+ yield output;
91
+ }
92
+ }
93
+ /**
94
+ * Simple claim sequence - just show the clean card with draw-down
95
+ */
96
+ export async function* createClaimSequence(claimUrl, agentData) {
97
+ // Phase 1: Draw down the clean claim card
98
+ yield* createClaimDrawDown(claimUrl, agentData);
99
+ // Phase 2: Show success message
100
+ const successContent = `
101
+ ${chalk.bold.green("AUTHORIZATION SUCCESSFUL")}
102
+
103
+ Agent identity has been claimed and is now active.
104
+
105
+ ${chalk.bold.white("Agent:")} ${agentData.name}
106
+ ${chalk.bold.white("DID:")} ${agentData.did.length > 50
107
+ ? agentData.did.substring(0, 47) + "..."
108
+ : agentData.did}
109
+ ${chalk.bold.white("Status:")} ${chalk.green("ACTIVE AND READY")}
110
+ `;
111
+ const successCard = boxen(successContent, {
112
+ padding: 1,
113
+ margin: 1,
114
+ borderStyle: "round",
115
+ borderColor: "green",
116
+ backgroundColor: undefined,
117
+ width: 70,
118
+ });
119
+ yield successCard;
120
+ }
121
+ /**
122
+ * Clean portal sequence without complex effects
123
+ */
124
+ export async function* createPortalSequence(duration = 2000) {
125
+ const frames = [
126
+ "Portal forming...",
127
+ "Portal forming...",
128
+ "Portal forming...",
129
+ "Portal ready.",
130
+ "Portal established.",
131
+ ];
132
+ const delay = duration / frames.length;
133
+ for (const frame of frames) {
134
+ yield chalk.cyan(frame);
135
+ await new Promise((resolve) => setTimeout(resolve, delay));
136
+ }
137
+ }
138
+ //# sourceMappingURL=claim-experience.js.map