naracli 1.0.78 → 1.0.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/nara-cli-bundle.cjs +392 -31
- package/package.json +2 -2
- package/skills/nara/SKILL.md +12 -7
- package/src/cli/commands/agent.ts +26 -5
package/dist/nara-cli-bundle.cjs
CHANGED
|
@@ -60810,10 +60810,10 @@ var require_dist3 = __commonJS({
|
|
|
60810
60810
|
}
|
|
60811
60811
|
});
|
|
60812
60812
|
|
|
60813
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
60813
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/constants.ts
|
|
60814
60814
|
var DEFAULT_RPC_URL, DEFAULT_QUEST_RELAY_URL, DEFAULT_QUEST_PROGRAM_ID, DEFAULT_SKILLS_PROGRAM_ID, DEFAULT_ZKID_PROGRAM_ID, DEFAULT_AGENT_REGISTRY_PROGRAM_ID, DEFAULT_ALT_ADDRESS;
|
|
60815
60815
|
var init_constants2 = __esm({
|
|
60816
|
-
"node_modules/.pnpm/nara-sdk@1.0.
|
|
60816
|
+
"node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/constants.ts"() {
|
|
60817
60817
|
DEFAULT_RPC_URL = process.env.RPC_URL || "https://mainnet-api.nara.build/";
|
|
60818
60818
|
DEFAULT_QUEST_RELAY_URL = process.env.QUEST_RELAY_URL || "https://quest-api.nara.build/";
|
|
60819
60819
|
DEFAULT_QUEST_PROGRAM_ID = process.env.QUEST_PROGRAM_ID || "Quest11111111111111111111111111111111111111";
|
|
@@ -60824,7 +60824,7 @@ var init_constants2 = __esm({
|
|
|
60824
60824
|
}
|
|
60825
60825
|
});
|
|
60826
60826
|
|
|
60827
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
60827
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/tx.ts
|
|
60828
60828
|
function getAltAddress() {
|
|
60829
60829
|
if (_overrideAltAddresses !== null) return _overrideAltAddresses;
|
|
60830
60830
|
if (!DEFAULT_ALT_ADDRESS) return [];
|
|
@@ -60950,7 +60950,7 @@ async function sendTx(connection, payer, instructions, signers, opts) {
|
|
|
60950
60950
|
}
|
|
60951
60951
|
var import_web388, _cachedAlts, _cachedAltKey, _overrideAltAddresses, _globalSkipPreflight;
|
|
60952
60952
|
var init_tx = __esm({
|
|
60953
|
-
"node_modules/.pnpm/nara-sdk@1.0.
|
|
60953
|
+
"node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/tx.ts"() {
|
|
60954
60954
|
import_web388 = __toESM(require_index_cjs(), 1);
|
|
60955
60955
|
init_constants2();
|
|
60956
60956
|
_cachedAlts = [];
|
|
@@ -77205,10 +77205,10 @@ var require_cjs2 = __commonJS({
|
|
|
77205
77205
|
}
|
|
77206
77206
|
});
|
|
77207
77207
|
|
|
77208
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
77208
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/idls/nara_quest.json
|
|
77209
77209
|
var nara_quest_default;
|
|
77210
77210
|
var init_nara_quest = __esm({
|
|
77211
|
-
"node_modules/.pnpm/nara-sdk@1.0.
|
|
77211
|
+
"node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/idls/nara_quest.json"() {
|
|
77212
77212
|
nara_quest_default = {
|
|
77213
77213
|
address: "Quest11111111111111111111111111111111111111",
|
|
77214
77214
|
metadata: {
|
|
@@ -79362,10 +79362,10 @@ var init_nara_quest = __esm({
|
|
|
79362
79362
|
}
|
|
79363
79363
|
});
|
|
79364
79364
|
|
|
79365
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
79365
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/idls/nara_agent_registry.json
|
|
79366
79366
|
var nara_agent_registry_default;
|
|
79367
79367
|
var init_nara_agent_registry = __esm({
|
|
79368
|
-
"node_modules/.pnpm/nara-sdk@1.0.
|
|
79368
|
+
"node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/idls/nara_agent_registry.json"() {
|
|
79369
79369
|
nara_agent_registry_default = {
|
|
79370
79370
|
address: "AgentRegistry111111111111111111111111111111",
|
|
79371
79371
|
metadata: {
|
|
@@ -79375,6 +79375,306 @@ var init_nara_agent_registry = __esm({
|
|
|
79375
79375
|
description: "Nara Agent Registry - AI agent registration center"
|
|
79376
79376
|
},
|
|
79377
79377
|
instructions: [
|
|
79378
|
+
{
|
|
79379
|
+
name: "approve_rejected_twitter",
|
|
79380
|
+
discriminator: [
|
|
79381
|
+
119,
|
|
79382
|
+
20,
|
|
79383
|
+
181,
|
|
79384
|
+
34,
|
|
79385
|
+
178,
|
|
79386
|
+
73,
|
|
79387
|
+
81,
|
|
79388
|
+
50
|
|
79389
|
+
],
|
|
79390
|
+
accounts: [
|
|
79391
|
+
{
|
|
79392
|
+
name: "verifier",
|
|
79393
|
+
writable: true,
|
|
79394
|
+
signer: true
|
|
79395
|
+
},
|
|
79396
|
+
{
|
|
79397
|
+
name: "config",
|
|
79398
|
+
pda: {
|
|
79399
|
+
seeds: [
|
|
79400
|
+
{
|
|
79401
|
+
kind: "const",
|
|
79402
|
+
value: [
|
|
79403
|
+
99,
|
|
79404
|
+
111,
|
|
79405
|
+
110,
|
|
79406
|
+
102,
|
|
79407
|
+
105,
|
|
79408
|
+
103
|
|
79409
|
+
]
|
|
79410
|
+
}
|
|
79411
|
+
]
|
|
79412
|
+
}
|
|
79413
|
+
},
|
|
79414
|
+
{
|
|
79415
|
+
name: "agent",
|
|
79416
|
+
pda: {
|
|
79417
|
+
seeds: [
|
|
79418
|
+
{
|
|
79419
|
+
kind: "const",
|
|
79420
|
+
value: [
|
|
79421
|
+
97,
|
|
79422
|
+
103,
|
|
79423
|
+
101,
|
|
79424
|
+
110,
|
|
79425
|
+
116
|
|
79426
|
+
]
|
|
79427
|
+
},
|
|
79428
|
+
{
|
|
79429
|
+
kind: "arg",
|
|
79430
|
+
path: "agent_id"
|
|
79431
|
+
}
|
|
79432
|
+
]
|
|
79433
|
+
}
|
|
79434
|
+
},
|
|
79435
|
+
{
|
|
79436
|
+
name: "twitter",
|
|
79437
|
+
writable: true,
|
|
79438
|
+
pda: {
|
|
79439
|
+
seeds: [
|
|
79440
|
+
{
|
|
79441
|
+
kind: "const",
|
|
79442
|
+
value: [
|
|
79443
|
+
116,
|
|
79444
|
+
119,
|
|
79445
|
+
105,
|
|
79446
|
+
116,
|
|
79447
|
+
116,
|
|
79448
|
+
101,
|
|
79449
|
+
114
|
|
79450
|
+
]
|
|
79451
|
+
},
|
|
79452
|
+
{
|
|
79453
|
+
kind: "account",
|
|
79454
|
+
path: "agent"
|
|
79455
|
+
}
|
|
79456
|
+
]
|
|
79457
|
+
}
|
|
79458
|
+
},
|
|
79459
|
+
{
|
|
79460
|
+
name: "twitter_handle",
|
|
79461
|
+
writable: true,
|
|
79462
|
+
pda: {
|
|
79463
|
+
seeds: [
|
|
79464
|
+
{
|
|
79465
|
+
kind: "const",
|
|
79466
|
+
value: [
|
|
79467
|
+
116,
|
|
79468
|
+
119,
|
|
79469
|
+
105,
|
|
79470
|
+
116,
|
|
79471
|
+
116,
|
|
79472
|
+
101,
|
|
79473
|
+
114,
|
|
79474
|
+
95,
|
|
79475
|
+
104,
|
|
79476
|
+
97,
|
|
79477
|
+
110,
|
|
79478
|
+
100,
|
|
79479
|
+
108,
|
|
79480
|
+
101
|
|
79481
|
+
]
|
|
79482
|
+
},
|
|
79483
|
+
{
|
|
79484
|
+
kind: "arg",
|
|
79485
|
+
path: "username"
|
|
79486
|
+
}
|
|
79487
|
+
]
|
|
79488
|
+
}
|
|
79489
|
+
},
|
|
79490
|
+
{
|
|
79491
|
+
name: "authority",
|
|
79492
|
+
writable: true
|
|
79493
|
+
},
|
|
79494
|
+
{
|
|
79495
|
+
name: "twitter_verify_vault",
|
|
79496
|
+
writable: true,
|
|
79497
|
+
pda: {
|
|
79498
|
+
seeds: [
|
|
79499
|
+
{
|
|
79500
|
+
kind: "const",
|
|
79501
|
+
value: [
|
|
79502
|
+
116,
|
|
79503
|
+
119,
|
|
79504
|
+
105,
|
|
79505
|
+
116,
|
|
79506
|
+
116,
|
|
79507
|
+
101,
|
|
79508
|
+
114,
|
|
79509
|
+
95,
|
|
79510
|
+
118,
|
|
79511
|
+
101,
|
|
79512
|
+
114,
|
|
79513
|
+
105,
|
|
79514
|
+
102,
|
|
79515
|
+
121,
|
|
79516
|
+
95,
|
|
79517
|
+
118,
|
|
79518
|
+
97,
|
|
79519
|
+
117,
|
|
79520
|
+
108,
|
|
79521
|
+
116
|
|
79522
|
+
]
|
|
79523
|
+
}
|
|
79524
|
+
]
|
|
79525
|
+
}
|
|
79526
|
+
},
|
|
79527
|
+
{
|
|
79528
|
+
name: "treasury",
|
|
79529
|
+
writable: true,
|
|
79530
|
+
pda: {
|
|
79531
|
+
seeds: [
|
|
79532
|
+
{
|
|
79533
|
+
kind: "const",
|
|
79534
|
+
value: [
|
|
79535
|
+
116,
|
|
79536
|
+
114,
|
|
79537
|
+
101,
|
|
79538
|
+
97,
|
|
79539
|
+
115,
|
|
79540
|
+
117,
|
|
79541
|
+
114,
|
|
79542
|
+
121
|
|
79543
|
+
]
|
|
79544
|
+
}
|
|
79545
|
+
]
|
|
79546
|
+
}
|
|
79547
|
+
},
|
|
79548
|
+
{
|
|
79549
|
+
name: "point_mint",
|
|
79550
|
+
writable: true,
|
|
79551
|
+
pda: {
|
|
79552
|
+
seeds: [
|
|
79553
|
+
{
|
|
79554
|
+
kind: "const",
|
|
79555
|
+
value: [
|
|
79556
|
+
112,
|
|
79557
|
+
111,
|
|
79558
|
+
105,
|
|
79559
|
+
110,
|
|
79560
|
+
116,
|
|
79561
|
+
95,
|
|
79562
|
+
109,
|
|
79563
|
+
105,
|
|
79564
|
+
110,
|
|
79565
|
+
116
|
|
79566
|
+
]
|
|
79567
|
+
}
|
|
79568
|
+
]
|
|
79569
|
+
}
|
|
79570
|
+
},
|
|
79571
|
+
{
|
|
79572
|
+
name: "mint_authority",
|
|
79573
|
+
pda: {
|
|
79574
|
+
seeds: [
|
|
79575
|
+
{
|
|
79576
|
+
kind: "const",
|
|
79577
|
+
value: [
|
|
79578
|
+
109,
|
|
79579
|
+
105,
|
|
79580
|
+
110,
|
|
79581
|
+
116,
|
|
79582
|
+
95,
|
|
79583
|
+
97,
|
|
79584
|
+
117,
|
|
79585
|
+
116,
|
|
79586
|
+
104,
|
|
79587
|
+
111,
|
|
79588
|
+
114,
|
|
79589
|
+
105,
|
|
79590
|
+
116,
|
|
79591
|
+
121
|
|
79592
|
+
]
|
|
79593
|
+
}
|
|
79594
|
+
]
|
|
79595
|
+
}
|
|
79596
|
+
},
|
|
79597
|
+
{
|
|
79598
|
+
name: "authority_point_account",
|
|
79599
|
+
writable: true,
|
|
79600
|
+
pda: {
|
|
79601
|
+
seeds: [
|
|
79602
|
+
{
|
|
79603
|
+
kind: "account",
|
|
79604
|
+
path: "authority"
|
|
79605
|
+
},
|
|
79606
|
+
{
|
|
79607
|
+
kind: "account",
|
|
79608
|
+
path: "token_program"
|
|
79609
|
+
},
|
|
79610
|
+
{
|
|
79611
|
+
kind: "account",
|
|
79612
|
+
path: "point_mint"
|
|
79613
|
+
}
|
|
79614
|
+
],
|
|
79615
|
+
program: {
|
|
79616
|
+
kind: "const",
|
|
79617
|
+
value: [
|
|
79618
|
+
140,
|
|
79619
|
+
151,
|
|
79620
|
+
37,
|
|
79621
|
+
143,
|
|
79622
|
+
78,
|
|
79623
|
+
36,
|
|
79624
|
+
137,
|
|
79625
|
+
241,
|
|
79626
|
+
187,
|
|
79627
|
+
61,
|
|
79628
|
+
16,
|
|
79629
|
+
41,
|
|
79630
|
+
20,
|
|
79631
|
+
142,
|
|
79632
|
+
13,
|
|
79633
|
+
131,
|
|
79634
|
+
11,
|
|
79635
|
+
90,
|
|
79636
|
+
19,
|
|
79637
|
+
153,
|
|
79638
|
+
218,
|
|
79639
|
+
255,
|
|
79640
|
+
16,
|
|
79641
|
+
132,
|
|
79642
|
+
4,
|
|
79643
|
+
142,
|
|
79644
|
+
123,
|
|
79645
|
+
216,
|
|
79646
|
+
219,
|
|
79647
|
+
233,
|
|
79648
|
+
248,
|
|
79649
|
+
89
|
|
79650
|
+
]
|
|
79651
|
+
}
|
|
79652
|
+
}
|
|
79653
|
+
},
|
|
79654
|
+
{
|
|
79655
|
+
name: "token_program",
|
|
79656
|
+
address: "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"
|
|
79657
|
+
},
|
|
79658
|
+
{
|
|
79659
|
+
name: "associated_token_program",
|
|
79660
|
+
address: "ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"
|
|
79661
|
+
},
|
|
79662
|
+
{
|
|
79663
|
+
name: "system_program",
|
|
79664
|
+
address: "11111111111111111111111111111111"
|
|
79665
|
+
}
|
|
79666
|
+
],
|
|
79667
|
+
args: [
|
|
79668
|
+
{
|
|
79669
|
+
name: "agent_id",
|
|
79670
|
+
type: "string"
|
|
79671
|
+
},
|
|
79672
|
+
{
|
|
79673
|
+
name: "username",
|
|
79674
|
+
type: "string"
|
|
79675
|
+
}
|
|
79676
|
+
]
|
|
79677
|
+
},
|
|
79378
79678
|
{
|
|
79379
79679
|
name: "approve_tweet",
|
|
79380
79680
|
discriminator: [
|
|
@@ -81161,7 +81461,8 @@ var init_nara_agent_registry = __esm({
|
|
|
81161
81461
|
}
|
|
81162
81462
|
},
|
|
81163
81463
|
{
|
|
81164
|
-
name: "referral_agent"
|
|
81464
|
+
name: "referral_agent",
|
|
81465
|
+
writable: true
|
|
81165
81466
|
},
|
|
81166
81467
|
{
|
|
81167
81468
|
name: "referral_authority",
|
|
@@ -81775,7 +82076,8 @@ var init_nara_agent_registry = __esm({
|
|
|
81775
82076
|
}
|
|
81776
82077
|
},
|
|
81777
82078
|
{
|
|
81778
|
-
name: "referral_agent"
|
|
82079
|
+
name: "referral_agent",
|
|
82080
|
+
writable: true
|
|
81779
82081
|
},
|
|
81780
82082
|
{
|
|
81781
82083
|
name: "config",
|
|
@@ -83813,6 +84115,11 @@ var init_nara_agent_registry = __esm({
|
|
|
83813
84115
|
code: 6046,
|
|
83814
84116
|
name: "AgentIdReserved",
|
|
83815
84117
|
msg: "Agent ID length <= 4 is reserved for admin only"
|
|
84118
|
+
},
|
|
84119
|
+
{
|
|
84120
|
+
code: 6047,
|
|
84121
|
+
name: "TwitterNotRejected",
|
|
84122
|
+
msg: "Twitter binding is not in rejected status"
|
|
83816
84123
|
}
|
|
83817
84124
|
],
|
|
83818
84125
|
types: [
|
|
@@ -83923,7 +84230,7 @@ var init_nara_agent_registry = __esm({
|
|
|
83923
84230
|
}
|
|
83924
84231
|
},
|
|
83925
84232
|
{
|
|
83926
|
-
name: "
|
|
84233
|
+
name: "referral_count",
|
|
83927
84234
|
type: "u32"
|
|
83928
84235
|
},
|
|
83929
84236
|
{
|
|
@@ -84439,9 +84746,10 @@ var init_nara_agent_registry = __esm({
|
|
|
84439
84746
|
}
|
|
84440
84747
|
});
|
|
84441
84748
|
|
|
84442
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
84749
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/agent_registry.ts
|
|
84443
84750
|
var agent_registry_exports = {};
|
|
84444
84751
|
__export(agent_registry_exports, {
|
|
84752
|
+
approveRejectedTwitter: () => approveRejectedTwitter,
|
|
84445
84753
|
approveTweet: () => approveTweet,
|
|
84446
84754
|
closeBuffer: () => closeBuffer,
|
|
84447
84755
|
deleteAgent: () => deleteAgent,
|
|
@@ -84598,6 +84906,8 @@ function parseAgentRecordData(data) {
|
|
|
84598
84906
|
const referralIdLen = buf.readUInt32LE(offset);
|
|
84599
84907
|
offset += 4;
|
|
84600
84908
|
const referralId = referralIdLen > 0 ? buf.subarray(offset, offset + referralIdLen).toString("utf-8") : null;
|
|
84909
|
+
offset += 32;
|
|
84910
|
+
const referralCount = buf.readUInt32LE(offset);
|
|
84601
84911
|
return {
|
|
84602
84912
|
authority,
|
|
84603
84913
|
agentId,
|
|
@@ -84605,6 +84915,7 @@ function parseAgentRecordData(data) {
|
|
|
84605
84915
|
memory,
|
|
84606
84916
|
version: version3,
|
|
84607
84917
|
referralId,
|
|
84918
|
+
referralCount,
|
|
84608
84919
|
createdAt,
|
|
84609
84920
|
updatedAt
|
|
84610
84921
|
};
|
|
@@ -85278,6 +85589,38 @@ async function rejectTwitter(connection, wallet, agentId, options) {
|
|
|
85278
85589
|
const ix = await program3.methods.rejectTwitter(agentId).accounts({ verifier: wallet.publicKey }).instruction();
|
|
85279
85590
|
return sendTx(connection, wallet, [ix]);
|
|
85280
85591
|
}
|
|
85592
|
+
async function approveRejectedTwitter(connection, wallet, agentId, username, options, freeStakeDelta, freeStakeReason) {
|
|
85593
|
+
const program3 = createProgram(connection, wallet, options?.programId);
|
|
85594
|
+
const agentPda = getAgentPda(program3.programId, agentId);
|
|
85595
|
+
const accountInfo = await connection.getAccountInfo(agentPda);
|
|
85596
|
+
if (!accountInfo) throw new Error(`Agent "${agentId}" not found`);
|
|
85597
|
+
const authority = new import_web389.PublicKey(accountInfo.data.subarray(8, 40));
|
|
85598
|
+
const pointMint = getPointMintPda(program3.programId);
|
|
85599
|
+
const authorityPointAccount = getAssociatedTokenAddressSync(
|
|
85600
|
+
pointMint,
|
|
85601
|
+
authority,
|
|
85602
|
+
true,
|
|
85603
|
+
TOKEN_2022_PROGRAM_ID
|
|
85604
|
+
);
|
|
85605
|
+
const ix = await program3.methods.approveRejectedTwitter(agentId, username).accounts({
|
|
85606
|
+
verifier: wallet.publicKey,
|
|
85607
|
+
authority,
|
|
85608
|
+
authorityPointAccount
|
|
85609
|
+
}).instruction();
|
|
85610
|
+
const ixs = [ix];
|
|
85611
|
+
if (freeStakeDelta !== void 0 && freeStakeDelta !== 0) {
|
|
85612
|
+
const { makeAdjustFreeStakeIx: makeAdjustFreeStakeIx2 } = await Promise.resolve().then(() => (init_quest(), quest_exports));
|
|
85613
|
+
const freeStakeIx = await makeAdjustFreeStakeIx2(
|
|
85614
|
+
connection,
|
|
85615
|
+
wallet.publicKey,
|
|
85616
|
+
authority,
|
|
85617
|
+
freeStakeDelta,
|
|
85618
|
+
freeStakeReason ?? ""
|
|
85619
|
+
);
|
|
85620
|
+
ixs.push(freeStakeIx);
|
|
85621
|
+
}
|
|
85622
|
+
return sendTx(connection, wallet, ixs);
|
|
85623
|
+
}
|
|
85281
85624
|
async function approveTweet(connection, wallet, agentId, tweetId, options, freeStakeDelta, freeStakeReason) {
|
|
85282
85625
|
const program3 = createProgram(connection, wallet, options?.programId);
|
|
85283
85626
|
const agentPda = getAgentPda(program3.programId, agentId);
|
|
@@ -85317,7 +85660,7 @@ async function rejectTweet(connection, wallet, agentId, options) {
|
|
|
85317
85660
|
}
|
|
85318
85661
|
var import_web389, anchor, import_anchor, import_bn, DEFAULT_CHUNK_SIZE, BUFFER_HEADER_SIZE, MEMORY_HEADER_SIZE, BIO_META_HEADER_SIZE;
|
|
85319
85662
|
var init_agent_registry = __esm({
|
|
85320
|
-
"node_modules/.pnpm/nara-sdk@1.0.
|
|
85663
|
+
"node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/agent_registry.ts"() {
|
|
85321
85664
|
import_web389 = __toESM(require_index_cjs(), 1);
|
|
85322
85665
|
anchor = __toESM(require_cjs2(), 1);
|
|
85323
85666
|
import_anchor = __toESM(require_cjs2(), 1);
|
|
@@ -165078,7 +165421,7 @@ var init_main3 = __esm({
|
|
|
165078
165421
|
}
|
|
165079
165422
|
});
|
|
165080
165423
|
|
|
165081
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
165424
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/quest.ts
|
|
165082
165425
|
var quest_exports = {};
|
|
165083
165426
|
__export(quest_exports, {
|
|
165084
165427
|
adjustFreeStake: () => adjustFreeStake,
|
|
@@ -165582,7 +165925,7 @@ async function setAirdropConfig(connection, wallet, airdropAmount, maxAirdropCou
|
|
|
165582
165925
|
}
|
|
165583
165926
|
var import_web390, anchor2, import_anchor2, import_bn2, import_meta, BN254_FIELD, WSOL_MINT;
|
|
165584
165927
|
var init_quest = __esm({
|
|
165585
|
-
"node_modules/.pnpm/nara-sdk@1.0.
|
|
165928
|
+
"node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/quest.ts"() {
|
|
165586
165929
|
import_web390 = __toESM(require_index_cjs(), 1);
|
|
165587
165930
|
init_esm2();
|
|
165588
165931
|
anchor2 = __toESM(require_cjs2(), 1);
|
|
@@ -165889,7 +166232,7 @@ var esm_default = base;
|
|
|
165889
166232
|
var ALPHABET = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
|
|
165890
166233
|
var esm_default2 = esm_default(ALPHABET);
|
|
165891
166234
|
|
|
165892
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
166235
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/client.ts
|
|
165893
166236
|
var import_web387 = __toESM(require_index_cjs(), 1);
|
|
165894
166237
|
var NaraSDK = class {
|
|
165895
166238
|
connection;
|
|
@@ -165904,10 +166247,10 @@ var NaraSDK = class {
|
|
|
165904
166247
|
}
|
|
165905
166248
|
};
|
|
165906
166249
|
|
|
165907
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
166250
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/index.ts
|
|
165908
166251
|
init_constants2();
|
|
165909
166252
|
|
|
165910
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
166253
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/sign.ts
|
|
165911
166254
|
var import_tweetnacl = __toESM(require_nacl_fast(), 1);
|
|
165912
166255
|
function buildSignMessage(params) {
|
|
165913
166256
|
return Object.keys(params).filter((k2) => k2 !== "sign").sort().map((k2) => `${k2}=${params[k2]}`).join("&");
|
|
@@ -165935,17 +166278,17 @@ function signUrl(baseUrl, wallet, params) {
|
|
|
165935
166278
|
return url.toString();
|
|
165936
166279
|
}
|
|
165937
166280
|
|
|
165938
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
166281
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/index.ts
|
|
165939
166282
|
init_tx();
|
|
165940
166283
|
init_quest();
|
|
165941
166284
|
|
|
165942
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
166285
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/skills.ts
|
|
165943
166286
|
var import_web391 = __toESM(require_index_cjs(), 1);
|
|
165944
166287
|
var anchor3 = __toESM(require_cjs2(), 1);
|
|
165945
166288
|
var import_anchor3 = __toESM(require_cjs2(), 1);
|
|
165946
166289
|
init_constants2();
|
|
165947
166290
|
|
|
165948
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
166291
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/idls/nara_skills_hub.json
|
|
165949
166292
|
var nara_skills_hub_default = {
|
|
165950
166293
|
address: "SkiLLHub11111111111111111111111111111111111",
|
|
165951
166294
|
metadata: {
|
|
@@ -167343,7 +167686,7 @@ var nara_skills_hub_default = {
|
|
|
167343
167686
|
]
|
|
167344
167687
|
};
|
|
167345
167688
|
|
|
167346
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
167689
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/skills.ts
|
|
167347
167690
|
init_tx();
|
|
167348
167691
|
var DEFAULT_CHUNK_SIZE2 = 800;
|
|
167349
167692
|
var BUFFER_HEADER_SIZE2 = 144;
|
|
@@ -167578,7 +167921,7 @@ async function uploadSkillContent(connection, wallet, name, content, options) {
|
|
|
167578
167921
|
}
|
|
167579
167922
|
}
|
|
167580
167923
|
|
|
167581
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
167924
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/zkid.ts
|
|
167582
167925
|
var import_web392 = __toESM(require_index_cjs(), 1);
|
|
167583
167926
|
var anchor4 = __toESM(require_cjs2(), 1);
|
|
167584
167927
|
var import_anchor4 = __toESM(require_cjs2(), 1);
|
|
@@ -167588,7 +167931,7 @@ var import_bn3 = __toESM(require_bn(), 1);
|
|
|
167588
167931
|
init_constants2();
|
|
167589
167932
|
init_tx();
|
|
167590
167933
|
|
|
167591
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
167934
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/idls/nara_zk.json
|
|
167592
167935
|
var nara_zk_default = {
|
|
167593
167936
|
address: "ZKidentity111111111111111111111111111111111",
|
|
167594
167937
|
metadata: {
|
|
@@ -168799,7 +169142,7 @@ var nara_zk_default = {
|
|
|
168799
169142
|
]
|
|
168800
169143
|
};
|
|
168801
169144
|
|
|
168802
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
169145
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/src/zkid.ts
|
|
168803
169146
|
var import_meta2 = {};
|
|
168804
169147
|
var BN254_PRIME = 21888242871839275222246405745257275088696311157297823662689037894645226208583n;
|
|
168805
169148
|
var MERKLE_LEVELS = 64;
|
|
@@ -169146,7 +169489,7 @@ async function transferZkIdByCommitment(connection, payer, name, currentIdSecret
|
|
|
169146
169489
|
return sendTx(connection, payer, [ix]);
|
|
169147
169490
|
}
|
|
169148
169491
|
|
|
169149
|
-
// node_modules/.pnpm/nara-sdk@1.0.
|
|
169492
|
+
// node_modules/.pnpm/nara-sdk@1.0.74_bufferutil@4.1.0_fastestsmallesttextencoderdecoder@1.0.22_typescript@5.9.3_utf-8-validate@6.0.6/node_modules/nara-sdk/index.ts
|
|
169150
169493
|
init_agent_registry();
|
|
169151
169494
|
var import_web393 = __toESM(require_index_cjs(), 1);
|
|
169152
169495
|
var import_bn4 = __toESM(require_bn(), 1);
|
|
@@ -172681,6 +173024,7 @@ function registerZkIdCommands(program3) {
|
|
|
172681
173024
|
|
|
172682
173025
|
// src/cli/commands/agent.ts
|
|
172683
173026
|
var import_web3103 = __toESM(require_index_cjs(), 1);
|
|
173027
|
+
init_esm2();
|
|
172684
173028
|
var import_node_fs3 = require("node:fs");
|
|
172685
173029
|
var DEFAULT_RELAY_URL = process.env.QUEST_RELAY_URL || "https://quest-api.nara.build/";
|
|
172686
173030
|
async function relaySignAndSend(connection, wallet, relayUrl, endpoint, body) {
|
|
@@ -172769,8 +173113,9 @@ async function handleAgentGet(agentId, options) {
|
|
|
172769
173113
|
try {
|
|
172770
173114
|
const tv = await getTweetVerify(connection, agentId);
|
|
172771
173115
|
if (tv) {
|
|
173116
|
+
const tweetIdStr = tv.tweetId > 0n && tv.tweetId < 10000000000000000000n ? tv.tweetId.toString() : null;
|
|
172772
173117
|
tweetVerifyData = {
|
|
172773
|
-
tweetId:
|
|
173118
|
+
tweetId: tweetIdStr,
|
|
172774
173119
|
status: TWEET_VERIFY_STATUS[tv.status] ?? `unknown(${tv.status})`,
|
|
172775
173120
|
submittedAt: tv.submittedAt ? new Date(tv.submittedAt * 1e3).toISOString() : null,
|
|
172776
173121
|
lastRewardedAt: tv.lastRewardedAt ? new Date(tv.lastRewardedAt * 1e3).toISOString() : null
|
|
@@ -172778,12 +173123,23 @@ async function handleAgentGet(agentId, options) {
|
|
|
172778
173123
|
}
|
|
172779
173124
|
} catch {
|
|
172780
173125
|
}
|
|
173126
|
+
const POINTS_MINT = new import_web3103.PublicKey("AqJX47z8UT6k6gFpJjzvcAAP4NJkfykW8U8za1evry7J");
|
|
173127
|
+
let points = "0";
|
|
173128
|
+
try {
|
|
173129
|
+
const authority = info.record.authority;
|
|
173130
|
+
const tokenAccount = await getAssociatedTokenAddress(POINTS_MINT, authority, true, TOKEN_2022_PROGRAM_ID);
|
|
173131
|
+
const balance = await connection.getTokenAccountBalance(tokenAccount);
|
|
173132
|
+
points = balance.value.uiAmountString || "0";
|
|
173133
|
+
} catch {
|
|
173134
|
+
}
|
|
172781
173135
|
const data = {
|
|
172782
173136
|
agentId: info.record.agentId,
|
|
172783
173137
|
authority: info.record.authority.toBase58(),
|
|
172784
173138
|
version: info.record.version,
|
|
172785
173139
|
bio: info.bio,
|
|
172786
173140
|
metadata: info.metadata,
|
|
173141
|
+
points,
|
|
173142
|
+
referralCount: info.record.referralCount,
|
|
172787
173143
|
createdAt: new Date(info.record.createdAt * 1e3).toISOString(),
|
|
172788
173144
|
updatedAt: info.record.updatedAt ? new Date(info.record.updatedAt * 1e3).toISOString() : null,
|
|
172789
173145
|
twitter: twitterData,
|
|
@@ -172798,6 +173154,8 @@ async function handleAgentGet(agentId, options) {
|
|
|
172798
173154
|
console.log(` Version: ${data.version}`);
|
|
172799
173155
|
console.log(` Bio: ${data.bio ?? "(none)"}`);
|
|
172800
173156
|
console.log(` Metadata: ${data.metadata ?? "(none)"}`);
|
|
173157
|
+
console.log(` Points: ${data.points}`);
|
|
173158
|
+
console.log(` Referrals: ${data.referralCount}`);
|
|
172801
173159
|
console.log(` Created: ${data.createdAt}`);
|
|
172802
173160
|
if (data.updatedAt) console.log(` Updated: ${data.updatedAt}`);
|
|
172803
173161
|
if (twitterData) {
|
|
@@ -172808,7 +173166,10 @@ async function handleAgentGet(agentId, options) {
|
|
|
172808
173166
|
}
|
|
172809
173167
|
if (tweetVerifyData) {
|
|
172810
173168
|
const verified = tweetVerifyData.lastRewardedAt ? "verified" : "unverified";
|
|
172811
|
-
|
|
173169
|
+
if (tweetVerifyData.tweetId) {
|
|
173170
|
+
const tweetUsername = twitterData?.username ?? "i";
|
|
173171
|
+
console.log(` Tweet: https://x.com/${tweetUsername}/status/${tweetVerifyData.tweetId} (${verified})`);
|
|
173172
|
+
}
|
|
172812
173173
|
if (tweetVerifyData.lastRewardedAt) console.log(` Tweet last rewarded: ${tweetVerifyData.lastRewardedAt}`);
|
|
172813
173174
|
}
|
|
172814
173175
|
console.log("");
|
|
@@ -172817,8 +173178,8 @@ async function handleAgentGet(agentId, options) {
|
|
|
172817
173178
|
const lastRewarded = new Date(tweetVerifyData.lastRewardedAt).getTime();
|
|
172818
173179
|
const hoursAgo = (Date.now() - lastRewarded) / (1e3 * 60 * 60);
|
|
172819
173180
|
if (hoursAgo >= 24) {
|
|
172820
|
-
const
|
|
172821
|
-
console.log(` Tip: Last tweet verified ${
|
|
173181
|
+
const agoStr = hoursAgo >= 48 ? `${Math.floor(hoursAgo / 24)}d` : `${Math.floor(hoursAgo)}h`;
|
|
173182
|
+
console.log(` Tip: Last tweet verified ${agoStr} ago (>24h). You can submit a new tweet to earn more stake-free credits.`);
|
|
172822
173183
|
} else {
|
|
172823
173184
|
const hoursLeft = Math.ceil(24 - hoursAgo);
|
|
172824
173185
|
console.log(` Tip: Next tweet verification available in ~${hoursLeft}h.`);
|
|
@@ -173651,7 +174012,7 @@ function registerCommands(program3) {
|
|
|
173651
174012
|
}
|
|
173652
174013
|
|
|
173653
174014
|
// bin/nara-cli.ts
|
|
173654
|
-
var version2 = true ? "1.0.
|
|
174015
|
+
var version2 = true ? "1.0.79" : "dev";
|
|
173655
174016
|
var program2 = new Command();
|
|
173656
174017
|
program2.name("naracli").description("CLI for the Nara chain. Native coin is NARA (not SOL). Mine NARA for free via PoMI quests, manage wallets, register agents, and more. Run 'naracli <command> --help' for details on any command.").version(version2);
|
|
173657
174018
|
program2.option("-r, --rpc-url <url>", "RPC endpoint (default: https://mainnet-api.nara.build/)").option("-w, --wallet <path>", "Path to wallet keypair JSON file (default: ~/.config/nara/id.json)").option("-j, --json", "Output in JSON format");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "naracli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.79",
|
|
4
4
|
"description": "CLI for the Nara chain (Solana-compatible)",
|
|
5
5
|
"homepage": "https://nara.build",
|
|
6
6
|
"repository": {
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"bs58": "^6.0.0",
|
|
65
65
|
"commander": "^12.1.0",
|
|
66
66
|
"ed25519-hd-key": "^1.3.0",
|
|
67
|
-
"nara-sdk": "^1.0.
|
|
67
|
+
"nara-sdk": "^1.0.74",
|
|
68
68
|
"picocolors": "^1.1.1"
|
|
69
69
|
},
|
|
70
70
|
"packageManager": "pnpm@10.27.0+sha512.72d699da16b1179c14ba9e64dc71c9a40988cbdc65c264cb0e489db7de917f20dcf4d64d8723625f2969ba52d4b7e2a1170682d9ac2a5dcaeaab732b7e16f04a"
|
package/skills/nara/SKILL.md
CHANGED
|
@@ -88,20 +88,25 @@ You earn:
|
|
|
88
88
|
- **Agent Registry rewards + points** (extra rewards for registered agents)
|
|
89
89
|
|
|
90
90
|
### Step 5: Share & Earn Referral Rewards
|
|
91
|
-
Share your
|
|
92
|
-
- **Registration referral**:
|
|
93
|
-
- **Mining referral**:
|
|
91
|
+
Share your Agent ID on social media (Twitter/X, Discord, Telegram, etc.). When others register using your Agent ID as referral:
|
|
92
|
+
- **Registration referral**: Earn **50% of the registration fee** + referral points
|
|
93
|
+
- **Mining referral**: Earn **extra points** when referred agents mine
|
|
94
|
+
- Check your points and referral count: `npx naracli agent get`
|
|
94
95
|
|
|
96
|
+
## Points & Referrals
|
|
95
97
|
|
|
96
|
-
|
|
98
|
+
Points are on-chain tokens earned through mining, referrals, and Twitter verification. Use `npx naracli agent get` to check your **points balance** and **referral count**.
|
|
97
99
|
|
|
98
|
-
Points
|
|
99
|
-
|
|
100
|
-
To check points balance:
|
|
100
|
+
Points mint: `AqJX47z8UT6k6gFpJjzvcAAP4NJkfykW8U8za1evry7J`. You can also check with:
|
|
101
101
|
```
|
|
102
102
|
npx naracli token-balance AqJX47z8UT6k6gFpJjzvcAAP4NJkfykW8U8za1evry7J
|
|
103
103
|
```
|
|
104
104
|
|
|
105
|
+
Ways to earn points:
|
|
106
|
+
- **Mining**: Correct quest answers earn points per round
|
|
107
|
+
- **Referrals**: Earn points when referred agents register and mine
|
|
108
|
+
- **Twitter verification**: Binding Twitter and submitting tweets earn bonus points
|
|
109
|
+
|
|
105
110
|
## Spending NARA
|
|
106
111
|
|
|
107
112
|
Earned NARA can be used to purchase AI compute credits. Visit `model-api.nara.build/402` to buy compute power with NARA tokens. **Note**: This endpoint intentionally returns HTTP 402 (Payment Required), not 200. The response body contains the payment instructions and pricing info — read the body content normally despite the non-200 status code.
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { Command } from "commander";
|
|
6
6
|
import { Connection, PublicKey, VersionedTransaction } from "@solana/web3.js";
|
|
7
|
+
import { getAssociatedTokenAddress, TOKEN_2022_PROGRAM_ID } from "@solana/spl-token";
|
|
7
8
|
import { loadWallet, getRpcUrl } from "../utils/wallet";
|
|
8
9
|
import {
|
|
9
10
|
printError,
|
|
@@ -159,12 +160,13 @@ async function handleAgentGet(agentId: string, options: GlobalOptions) {
|
|
|
159
160
|
}
|
|
160
161
|
|
|
161
162
|
// Fetch tweet verification info
|
|
162
|
-
let tweetVerifyData: { tweetId: string; status: string; submittedAt: string | null; lastRewardedAt: string | null } | null = null;
|
|
163
|
+
let tweetVerifyData: { tweetId: string | null; status: string; submittedAt: string | null; lastRewardedAt: string | null } | null = null;
|
|
163
164
|
try {
|
|
164
165
|
const tv = await getTweetVerify(connection, agentId);
|
|
165
166
|
if (tv) {
|
|
167
|
+
const tweetIdStr = tv.tweetId > 0n && tv.tweetId < 10000000000000000000n ? tv.tweetId.toString() : null;
|
|
166
168
|
tweetVerifyData = {
|
|
167
|
-
tweetId:
|
|
169
|
+
tweetId: tweetIdStr,
|
|
168
170
|
status: TWEET_VERIFY_STATUS[tv.status] ?? `unknown(${tv.status})`,
|
|
169
171
|
submittedAt: tv.submittedAt ? new Date(tv.submittedAt * 1000).toISOString() : null,
|
|
170
172
|
lastRewardedAt: tv.lastRewardedAt ? new Date(tv.lastRewardedAt * 1000).toISOString() : null,
|
|
@@ -174,12 +176,26 @@ async function handleAgentGet(agentId: string, options: GlobalOptions) {
|
|
|
174
176
|
// Ignore
|
|
175
177
|
}
|
|
176
178
|
|
|
179
|
+
// Fetch points balance
|
|
180
|
+
const POINTS_MINT = new PublicKey("AqJX47z8UT6k6gFpJjzvcAAP4NJkfykW8U8za1evry7J");
|
|
181
|
+
let points = "0";
|
|
182
|
+
try {
|
|
183
|
+
const authority = info.record.authority;
|
|
184
|
+
const tokenAccount = await getAssociatedTokenAddress(POINTS_MINT, authority, true, TOKEN_2022_PROGRAM_ID);
|
|
185
|
+
const balance = await connection.getTokenAccountBalance(tokenAccount);
|
|
186
|
+
points = balance.value.uiAmountString || "0";
|
|
187
|
+
} catch {
|
|
188
|
+
// No token account
|
|
189
|
+
}
|
|
190
|
+
|
|
177
191
|
const data: Record<string, any> = {
|
|
178
192
|
agentId: info.record.agentId,
|
|
179
193
|
authority: info.record.authority.toBase58(),
|
|
180
194
|
version: info.record.version,
|
|
181
195
|
bio: info.bio,
|
|
182
196
|
metadata: info.metadata,
|
|
197
|
+
points,
|
|
198
|
+
referralCount: info.record.referralCount,
|
|
183
199
|
createdAt: new Date(info.record.createdAt * 1000).toISOString(),
|
|
184
200
|
updatedAt: info.record.updatedAt ? new Date(info.record.updatedAt * 1000).toISOString() : null,
|
|
185
201
|
twitter: twitterData,
|
|
@@ -195,6 +211,8 @@ async function handleAgentGet(agentId: string, options: GlobalOptions) {
|
|
|
195
211
|
console.log(` Version: ${data.version}`);
|
|
196
212
|
console.log(` Bio: ${data.bio ?? "(none)"}`);
|
|
197
213
|
console.log(` Metadata: ${data.metadata ?? "(none)"}`);
|
|
214
|
+
console.log(` Points: ${data.points}`);
|
|
215
|
+
console.log(` Referrals: ${data.referralCount}`);
|
|
198
216
|
console.log(` Created: ${data.createdAt}`);
|
|
199
217
|
if (data.updatedAt) console.log(` Updated: ${data.updatedAt}`);
|
|
200
218
|
// Twitter binding
|
|
@@ -207,7 +225,10 @@ async function handleAgentGet(agentId: string, options: GlobalOptions) {
|
|
|
207
225
|
// Tweet verification
|
|
208
226
|
if (tweetVerifyData) {
|
|
209
227
|
const verified = tweetVerifyData.lastRewardedAt ? "verified" : "unverified";
|
|
210
|
-
|
|
228
|
+
if (tweetVerifyData.tweetId) {
|
|
229
|
+
const tweetUsername = twitterData?.username ?? "i";
|
|
230
|
+
console.log(` Tweet: https://x.com/${tweetUsername}/status/${tweetVerifyData.tweetId} (${verified})`);
|
|
231
|
+
}
|
|
211
232
|
if (tweetVerifyData.lastRewardedAt) console.log(` Tweet last rewarded: ${tweetVerifyData.lastRewardedAt}`);
|
|
212
233
|
}
|
|
213
234
|
console.log("");
|
|
@@ -217,8 +238,8 @@ async function handleAgentGet(agentId: string, options: GlobalOptions) {
|
|
|
217
238
|
const lastRewarded = new Date(tweetVerifyData.lastRewardedAt).getTime();
|
|
218
239
|
const hoursAgo = (Date.now() - lastRewarded) / (1000 * 60 * 60);
|
|
219
240
|
if (hoursAgo >= 24) {
|
|
220
|
-
const
|
|
221
|
-
console.log(` Tip: Last tweet verified ${
|
|
241
|
+
const agoStr = hoursAgo >= 48 ? `${Math.floor(hoursAgo / 24)}d` : `${Math.floor(hoursAgo)}h`;
|
|
242
|
+
console.log(` Tip: Last tweet verified ${agoStr} ago (>24h). You can submit a new tweet to earn more stake-free credits.`);
|
|
222
243
|
} else {
|
|
223
244
|
const hoursLeft = Math.ceil(24 - hoursAgo);
|
|
224
245
|
console.log(` Tip: Next tweet verification available in ~${hoursLeft}h.`);
|