@thirdfy/agent-cli 0.1.20 → 0.1.22
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/CHANGELOG.md +15 -5
- package/bin/thirdfy-agent.mjs +99 -6
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,14 +4,24 @@ All notable changes to `@thirdfy/agent-cli` are documented here. The format is b
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
-
## [0.1.
|
|
7
|
+
## [0.1.22] - 2026-04-28
|
|
8
8
|
|
|
9
|
-
**npm:** [`@thirdfy/agent-cli@0.1.
|
|
10
|
-
**Git tag:** `v0.1.
|
|
9
|
+
**npm:** [`@thirdfy/agent-cli@0.1.22`](https://www.npmjs.com/package/@thirdfy/agent-cli/v/0.1.22)
|
|
10
|
+
**Git tag:** `v0.1.22`
|
|
11
11
|
|
|
12
|
-
###
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Agent tracking/data commands:** Added `data summary`, `track actions`, `track events`, and `track action` so operators and agents can read Thirdfy-owned analytics and report actions without raw telemetry HTTP calls.
|
|
15
|
+
- **Permissive custom tracking:** `track action` now supports unknown/custom action names with optional `--source`, `--provider`, `--protocol`, `--namespace`, and `--action-type` metadata.
|
|
16
|
+
|
|
17
|
+
## [0.1.21] - 2026-04-26
|
|
18
|
+
|
|
19
|
+
**npm:** [`@thirdfy/agent-cli@0.1.21`](https://www.npmjs.com/package/@thirdfy/agent-cli/v/0.1.21)
|
|
20
|
+
**Git tag:** [`v0.1.21`](https://github.com/thirdfy/agent-cli/releases/tag/v0.1.21)
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
13
23
|
|
|
14
|
-
- **
|
|
24
|
+
- **Agent run / execution-wallet:** `agent-run` path now uses the execution-wallet preflight contract so managed lanes receive consistent wallet metadata and validation.
|
|
15
25
|
|
|
16
26
|
## [0.1.18] - 2026-04-21
|
|
17
27
|
|
package/bin/thirdfy-agent.mjs
CHANGED
|
@@ -176,6 +176,18 @@ async function main() {
|
|
|
176
176
|
case 'credits balance':
|
|
177
177
|
await commandCreditsBalance(context, subFlags, capabilities);
|
|
178
178
|
return;
|
|
179
|
+
case 'data summary':
|
|
180
|
+
await commandDataSummary(context, subFlags, capabilities);
|
|
181
|
+
return;
|
|
182
|
+
case 'track actions':
|
|
183
|
+
await commandTrackList(context, subFlags, capabilities, 'actions');
|
|
184
|
+
return;
|
|
185
|
+
case 'track events':
|
|
186
|
+
await commandTrackList(context, subFlags, capabilities, 'events');
|
|
187
|
+
return;
|
|
188
|
+
case 'track action':
|
|
189
|
+
await commandTrackAction(context, subFlags, capabilities);
|
|
190
|
+
return;
|
|
179
191
|
case 'delegation create':
|
|
180
192
|
await commandDelegationCreate(context, subFlags, capabilities);
|
|
181
193
|
return;
|
|
@@ -539,6 +551,82 @@ async function commandCatalogsList(ctx, flags, capabilities) {
|
|
|
539
551
|
});
|
|
540
552
|
}
|
|
541
553
|
|
|
554
|
+
async function commandDataSummary(ctx, flags, capabilities) {
|
|
555
|
+
const agentKey = requireFlag(flags, 'agentKey', 'Missing --agent-key');
|
|
556
|
+
const query = new URLSearchParams({ agentKey });
|
|
557
|
+
if (flags.chainId) query.set('chainId', String(flags.chainId));
|
|
558
|
+
if (flags.limit) query.set('limit', String(flags.limit));
|
|
559
|
+
const response = await apiGet(ctx, `/api/v1/agent/telemetry/summary?${query.toString()}`);
|
|
560
|
+
printEnvelope({
|
|
561
|
+
success: true,
|
|
562
|
+
code: 'DATA_SUMMARY_OK',
|
|
563
|
+
message: 'Agent data summary loaded',
|
|
564
|
+
data: response,
|
|
565
|
+
meta: {
|
|
566
|
+
apiBase: ctx.apiBase,
|
|
567
|
+
agentKey,
|
|
568
|
+
chainId: flags.chainId ? Number(flags.chainId) : null,
|
|
569
|
+
},
|
|
570
|
+
});
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
async function commandTrackList(ctx, flags, capabilities, kind) {
|
|
574
|
+
const agentKey = requireFlag(flags, 'agentKey', 'Missing --agent-key');
|
|
575
|
+
const query = new URLSearchParams({ agentKey });
|
|
576
|
+
if (flags.limit) query.set('limit', String(flags.limit));
|
|
577
|
+
const response = await apiGet(ctx, `/api/v1/agent/telemetry/${kind}?${query.toString()}`);
|
|
578
|
+
printEnvelope({
|
|
579
|
+
success: true,
|
|
580
|
+
code: kind === 'events' ? 'TRACK_EVENTS_OK' : 'TRACK_ACTIONS_OK',
|
|
581
|
+
message: kind === 'events' ? 'Tracked agent events loaded' : 'Tracked agent actions loaded',
|
|
582
|
+
data: response,
|
|
583
|
+
meta: {
|
|
584
|
+
apiBase: ctx.apiBase,
|
|
585
|
+
agentKey,
|
|
586
|
+
kind,
|
|
587
|
+
},
|
|
588
|
+
});
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
async function commandTrackAction(ctx, flags, capabilities) {
|
|
592
|
+
const agentApiKey = resolveAgentApiKey(flags, 'thirdfy');
|
|
593
|
+
const action = requireFlag(flags, 'action', 'Missing --action');
|
|
594
|
+
const payload = {
|
|
595
|
+
agentApiKey,
|
|
596
|
+
action,
|
|
597
|
+
status: String(flags.status || 'observed'),
|
|
598
|
+
};
|
|
599
|
+
if (flags.agentKey) payload.agentKey = String(flags.agentKey);
|
|
600
|
+
if (flags.eventId) payload.eventId = String(flags.eventId);
|
|
601
|
+
if (flags.idempotencyKey) payload.idempotencyKey = String(flags.idempotencyKey);
|
|
602
|
+
if (flags.category) payload.category = String(flags.category);
|
|
603
|
+
if (flags.source) payload.source = String(flags.source);
|
|
604
|
+
if (flags.provider) payload.provider = String(flags.provider);
|
|
605
|
+
if (flags.protocol) payload.protocol = String(flags.protocol);
|
|
606
|
+
if (flags.namespace) payload.namespace = String(flags.namespace);
|
|
607
|
+
if (flags.actionType) payload.actionType = String(flags.actionType);
|
|
608
|
+
if (flags.chainId) payload.chainId = Number(flags.chainId);
|
|
609
|
+
if (flags.amountUsd) payload.amountUsd = Number(flags.amountUsd);
|
|
610
|
+
if (flags.txHash) payload.txHash = String(flags.txHash);
|
|
611
|
+
if (flags.userDid) payload.userDid = String(flags.userDid);
|
|
612
|
+
if (flags.params) payload.params = parseJsonFlag(flags, 'params');
|
|
613
|
+
if (flags.decision) payload.decision = parseJsonFlag(flags, 'decision');
|
|
614
|
+
if (flags.proof) payload.proof = parseJsonFlag(flags, 'proof');
|
|
615
|
+
|
|
616
|
+
const response = await apiPost(ctx, '/api/v1/agent/telemetry/actions', payload);
|
|
617
|
+
printEnvelope({
|
|
618
|
+
success: Boolean(response?.success !== false),
|
|
619
|
+
code: response?.success === false ? 'TRACK_ACTION_FAILED' : 'TRACK_ACTION_OK',
|
|
620
|
+
message: response?.success === false ? 'Agent action tracking failed' : 'Agent action tracked',
|
|
621
|
+
data: response,
|
|
622
|
+
meta: {
|
|
623
|
+
apiBase: ctx.apiBase,
|
|
624
|
+
action,
|
|
625
|
+
chainId: payload.chainId || null,
|
|
626
|
+
},
|
|
627
|
+
});
|
|
628
|
+
}
|
|
629
|
+
|
|
542
630
|
async function commandActions(ctx, flags, capabilities) {
|
|
543
631
|
const policyAware = Boolean(flags.agentApiKey);
|
|
544
632
|
const actions = applyActionFilters(await getCachedActionsCatalog(ctx, flags), flags);
|
|
@@ -2716,14 +2804,15 @@ async function resolveManagedExecutionPreflight(ctx, flags, resolved, options =
|
|
|
2716
2804
|
};
|
|
2717
2805
|
}
|
|
2718
2806
|
const tokenIn = resolveTokenInForFunding(getPreparedParams(flags));
|
|
2719
|
-
const
|
|
2720
|
-
agentApiKey,
|
|
2807
|
+
const query = new URLSearchParams({
|
|
2721
2808
|
userDid,
|
|
2722
|
-
chainId,
|
|
2809
|
+
chainId: String(chainId),
|
|
2723
2810
|
runMode,
|
|
2724
|
-
|
|
2725
|
-
|
|
2726
|
-
const response = await
|
|
2811
|
+
});
|
|
2812
|
+
if (tokenIn) query.set('tokenIn', tokenIn);
|
|
2813
|
+
const response = await apiGet(ctx, `/api/v1/agent/execution-wallet?${query.toString()}`, {
|
|
2814
|
+
'x-agent-api-key': agentApiKey,
|
|
2815
|
+
});
|
|
2727
2816
|
const executionWalletAddress = String(response?.executionWalletAddress || '').trim().toLowerCase();
|
|
2728
2817
|
const signerMethod = String(response?.signerMethod || 'managed_wallet_server').trim();
|
|
2729
2818
|
const rawBalance = String(response?.fundingTokenBalance?.raw || '').trim();
|
|
@@ -3478,6 +3567,10 @@ Core commands:
|
|
|
3478
3567
|
thirdfy-agent whoami [--json]
|
|
3479
3568
|
thirdfy-agent catalogs list [--json]
|
|
3480
3569
|
thirdfy-agent actions [--catalog <id>] [--provider <id>] [--agent-api-key <key>] [--chain-id <id>] [--run-mode <mode>] [--json]
|
|
3570
|
+
thirdfy-agent data summary --agent-key <key> [--chain-id <id>] [--limit <n>] [--json]
|
|
3571
|
+
thirdfy-agent track actions --agent-key <key> [--limit <n>] [--json]
|
|
3572
|
+
thirdfy-agent track events --agent-key <key> [--limit <n>] [--json]
|
|
3573
|
+
thirdfy-agent track action --agent-api-key <key> --action <name> [--category <name>] [--source agent|external_mcp|operator|thirdfy|custom] [--provider <id>] [--protocol <id>] [--namespace <name>] [--action-type supported|custom] [--status observed|planned|skipped|submitted|confirmed|failed|blocked] [--chain-id <id>] [--params <json>] [--json]
|
|
3481
3574
|
thirdfy-agent delegation create [--auth-token <token> | --owner-session-token <token>] --agent-key <key> --owner-address <addr> --token-address <addr> --max-usd-per-day <usd> [--session-account-address <addr>] [--json]
|
|
3482
3575
|
thirdfy-agent delegation init-custodial [--auth-token <token> | --owner-session-token <token>] [--chain-id <id>] [--json]
|
|
3483
3576
|
thirdfy-agent delegation custodial-grant [--auth-token <token> | --owner-session-token <token>] --agent-key <key> --token-address <addr> --max-usd-per-day <usd> [--chain-id <id>] [--period-duration <sec>] [--expiry-seconds <sec>] [--json]
|