agentbnb 6.0.0 → 7.0.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 (58) hide show
  1. package/README.md +245 -39
  2. package/dist/{card-REW7BSWW.js → card-EX2EYGCZ.js} +1 -1
  3. package/dist/{chunk-C6KPAFCC.js → chunk-3LWBH7P3.js} +94 -3
  4. package/dist/{chunk-YRRVFTDR.js → chunk-5AAFG2V2.js} +3 -3
  5. package/dist/{chunk-C2T4BMRW.js → chunk-5GME4KJZ.js} +8 -6
  6. package/dist/{chunk-VPQ44XKE.js → chunk-64AK4FJM.js} +2 -2
  7. package/dist/{chunk-2TLZ6G2B.js → chunk-7EF3HYVZ.js} +158 -18
  8. package/dist/{chunk-JR6TJDIF.js → chunk-ALX4WS3A.js} +9 -4
  9. package/dist/{chunk-7XHDSWRD.js → chunk-B2VJTKO5.js} +2 -2
  10. package/dist/{chunk-TR6UZDNX.js → chunk-C537SFHV.js} +8 -6
  11. package/dist/{chunk-F53QQIM2.js → chunk-CUONY5TO.js} +1 -1
  12. package/dist/chunk-D6RKW2XG.js +395 -0
  13. package/dist/{chunk-NYV3NE5Z.js → chunk-E2OKP5CY.js} +4 -4
  14. package/dist/{chunk-TQDV254A.js → chunk-FTZTEHYG.js} +117 -117
  15. package/dist/{chunk-Y7T6IMM3.js → chunk-GKVTD4EZ.js} +1 -1
  16. package/dist/{chunk-VMH2YS2I.js → chunk-KF3TZHA5.js} +1 -1
  17. package/dist/{chunk-574W3HHE.js → chunk-LJM7FHPM.js} +1 -1
  18. package/dist/chunk-NWIQJ2CL.js +108 -0
  19. package/dist/{chunk-KA2VIEGM.js → chunk-O2OYBAVR.js} +1 -1
  20. package/dist/{chunk-NQTE577Q.js → chunk-OCSU2S6W.js} +9 -0
  21. package/dist/{chunk-PSQHUZ7X.js → chunk-OH7BP5NP.js} +1 -1
  22. package/dist/chunk-SSK653A6.js +169 -0
  23. package/dist/{chunk-BP3L2TET.js → chunk-TBJ3FZKZ.js} +2 -2
  24. package/dist/{chunk-3CIMVISQ.js → chunk-WVY2W7AA.js} +4 -0
  25. package/dist/{chunk-OZXCRLP3.js → chunk-X32NE6V4.js} +5 -2
  26. package/dist/{chunk-7YLFLC5C.js → chunk-YHY7OG6S.js} +5 -5
  27. package/dist/{chunk-JOY533UH.js → chunk-Z4MCGKTL.js} +6 -2
  28. package/dist/cli/index.js +530 -269
  29. package/dist/{client-HRYRJKSA.js → client-HKV3QWZ3.js} +3 -3
  30. package/dist/{conduct-LF6FYPLD.js → conduct-W6XF6DJW.js} +14 -13
  31. package/dist/conduct-YB64OHI6.js +22 -0
  32. package/dist/{conductor-mode-NUDQLZFM.js → conductor-mode-2GSLHVN6.js} +7 -4
  33. package/dist/{conductor-mode-YQ6QSPPT.js → conductor-mode-AKREGDIU.js} +11 -10
  34. package/dist/execute-AYQWORVH.js +15 -0
  35. package/dist/{execute-ITHIYYOX.js → execute-EPE6MZLT.js} +4 -3
  36. package/dist/index.d.ts +502 -12
  37. package/dist/index.js +706 -53
  38. package/dist/{process-guard-QCCBGILS.js → process-guard-GH5LRNWO.js} +1 -1
  39. package/dist/{publish-capability-TS6CNR5G.js → publish-capability-AH2HDW54.js} +3 -3
  40. package/dist/reliability-metrics-QG7WC5QK.js +18 -0
  41. package/dist/{request-P6QCTCCG.js → request-HCCXSKAY.js} +15 -14
  42. package/dist/{serve-skill-EZOL7UYN.js → serve-skill-SZAQT5T5.js} +9 -8
  43. package/dist/{server-3G6ZTASA.js → server-MHMAYXWZ.js} +12 -11
  44. package/dist/{service-coordinator-CRSE4GWC.js → service-coordinator-WGH6B2VT.js} +572 -68
  45. package/dist/{skill-config-4W5W5O6T.js → skill-config-FETXPNVP.js} +1 -1
  46. package/dist/skills/agentbnb/bootstrap.js +594 -73
  47. package/dist/{websocket-client-WRN3HO73.js → websocket-client-4Z5P54RU.js} +1 -1
  48. package/dist/websocket-client-QOVARTRN.js +7 -0
  49. package/openclaw.plugin.json +2 -2
  50. package/package.json +18 -11
  51. package/skills/agentbnb/bootstrap.test.ts +9 -0
  52. package/skills/agentbnb/bootstrap.ts +51 -26
  53. package/skills/agentbnb/install.sh +0 -0
  54. package/dist/chunk-QT7TEVNV.js +0 -82
  55. package/dist/chunk-RVYQSC6L.js +0 -212
  56. package/dist/conduct-QAFZIEY6.js +0 -21
  57. package/dist/execute-PNJFABVJ.js +0 -14
  58. package/dist/websocket-client-6IIDGXKB.js +0 -7
@@ -0,0 +1,108 @@
1
+ // src/credit/reliability-metrics.ts
2
+ var RELIABILITY_METRICS_SCHEMA = `
3
+ CREATE TABLE IF NOT EXISTS provider_reliability_metrics (
4
+ owner TEXT PRIMARY KEY,
5
+ current_streak INTEGER NOT NULL DEFAULT 0,
6
+ longest_streak INTEGER NOT NULL DEFAULT 0,
7
+ total_hires INTEGER NOT NULL DEFAULT 0,
8
+ repeat_hires INTEGER NOT NULL DEFAULT 0,
9
+ feedback_count INTEGER NOT NULL DEFAULT 0,
10
+ feedback_sum REAL NOT NULL DEFAULT 0,
11
+ availability_checks INTEGER NOT NULL DEFAULT 0,
12
+ availability_hits INTEGER NOT NULL DEFAULT 0,
13
+ cycle_start TEXT NOT NULL,
14
+ updated_at TEXT NOT NULL
15
+ );
16
+ `;
17
+ function ensureReliabilityTable(db) {
18
+ db.exec(RELIABILITY_METRICS_SCHEMA);
19
+ }
20
+ function ensureRow(db, owner) {
21
+ const now = (/* @__PURE__ */ new Date()).toISOString();
22
+ db.prepare(
23
+ `INSERT OR IGNORE INTO provider_reliability_metrics
24
+ (owner, current_streak, longest_streak, total_hires, repeat_hires,
25
+ feedback_count, feedback_sum, availability_checks, availability_hits,
26
+ cycle_start, updated_at)
27
+ VALUES (?, 0, 0, 0, 0, 0, 0, 0, 0, ?, ?)`
28
+ ).run(owner, now, now);
29
+ }
30
+ function recordSuccessfulHire(db, providerOwner, consumerOwner) {
31
+ const now = (/* @__PURE__ */ new Date()).toISOString();
32
+ ensureRow(db, providerOwner);
33
+ const isRepeat = db.prepare(
34
+ `SELECT COUNT(*) as cnt FROM credit_transactions
35
+ WHERE owner = ? AND reason = 'settlement'
36
+ AND reference_id IN (
37
+ SELECT id FROM credit_escrow WHERE owner = ?
38
+ )`
39
+ ).get(providerOwner, consumerOwner);
40
+ const repeatIncrement = (isRepeat?.cnt ?? 0) > 0 ? 1 : 0;
41
+ db.prepare(
42
+ `UPDATE provider_reliability_metrics
43
+ SET current_streak = current_streak + 1,
44
+ longest_streak = MAX(longest_streak, current_streak + 1),
45
+ total_hires = total_hires + 1,
46
+ repeat_hires = repeat_hires + ?,
47
+ updated_at = ?
48
+ WHERE owner = ?`
49
+ ).run(repeatIncrement, now, providerOwner);
50
+ }
51
+ function recordQualityFailure(db, providerOwner) {
52
+ const now = (/* @__PURE__ */ new Date()).toISOString();
53
+ ensureRow(db, providerOwner);
54
+ db.prepare(
55
+ `UPDATE provider_reliability_metrics
56
+ SET current_streak = 0, updated_at = ?
57
+ WHERE owner = ?`
58
+ ).run(now, providerOwner);
59
+ }
60
+ function recordFeedback(db, providerOwner, score) {
61
+ const now = (/* @__PURE__ */ new Date()).toISOString();
62
+ ensureRow(db, providerOwner);
63
+ db.prepare(
64
+ `UPDATE provider_reliability_metrics
65
+ SET feedback_count = feedback_count + 1,
66
+ feedback_sum = feedback_sum + ?,
67
+ updated_at = ?
68
+ WHERE owner = ?`
69
+ ).run(score, now, providerOwner);
70
+ }
71
+ function recordAvailabilityCheck(db, providerOwner, wasAvailable) {
72
+ const now = (/* @__PURE__ */ new Date()).toISOString();
73
+ ensureRow(db, providerOwner);
74
+ db.prepare(
75
+ `UPDATE provider_reliability_metrics
76
+ SET availability_checks = availability_checks + 1,
77
+ availability_hits = availability_hits + ?,
78
+ updated_at = ?
79
+ WHERE owner = ?`
80
+ ).run(wasAvailable ? 1 : 0, now, providerOwner);
81
+ }
82
+ function getReliabilityMetrics(db, owner) {
83
+ const row = db.prepare(
84
+ `SELECT current_streak, longest_streak, total_hires, repeat_hires,
85
+ feedback_count, feedback_sum, availability_checks, availability_hits
86
+ FROM provider_reliability_metrics WHERE owner = ?`
87
+ ).get(owner);
88
+ if (!row) return null;
89
+ return {
90
+ current_streak: row.current_streak,
91
+ longest_streak: row.longest_streak,
92
+ total_hires: row.total_hires,
93
+ repeat_hires: row.repeat_hires,
94
+ repeat_hire_rate: row.total_hires > 0 ? row.repeat_hires / row.total_hires : 0,
95
+ avg_feedback_score: row.feedback_count > 0 ? row.feedback_sum / row.feedback_count : 0,
96
+ availability_rate: row.availability_checks > 0 ? row.availability_hits / row.availability_checks : 0
97
+ };
98
+ }
99
+
100
+ export {
101
+ RELIABILITY_METRICS_SCHEMA,
102
+ ensureReliabilityTable,
103
+ recordSuccessfulHire,
104
+ recordQualityFailure,
105
+ recordFeedback,
106
+ recordAvailabilityCheck,
107
+ getReliabilityMetrics
108
+ };
@@ -2,7 +2,7 @@ import {
2
2
  AgentBnBError,
3
3
  AnyCardSchema,
4
4
  CapabilityCardSchema
5
- } from "./chunk-3CIMVISQ.js";
5
+ } from "./chunk-WVY2W7AA.js";
6
6
 
7
7
  // src/registry/request-log.ts
8
8
  var SINCE_MS = {
@@ -78,6 +78,14 @@ var OpenClawSkillConfigSchema = z.object({
78
78
  capacity: CapacitySchema,
79
79
  ...CapabilityDeclarationSchema
80
80
  });
81
+ var ClaudeCodeConfigSchema = z.object({
82
+ /** Optional system prompt passed via `-p` flag. */
83
+ system_prompt: z.string().optional(),
84
+ /** Model to use (e.g. 'claude-opus-4-6', 'claude-sonnet-4-6'). */
85
+ model: z.string().optional(),
86
+ /** When true, passes `--dangerously-skip-permissions` to claude CLI. */
87
+ auto_mode: z.boolean().default(false)
88
+ });
81
89
  var CommandSkillConfigSchema = z.object({
82
90
  id: z.string().min(1),
83
91
  type: z.literal("command"),
@@ -86,6 +94,7 @@ var CommandSkillConfigSchema = z.object({
86
94
  output_type: z.enum(["json", "text", "file"]),
87
95
  allowed_commands: z.array(z.string()).optional(),
88
96
  working_dir: z.string().optional(),
97
+ claude_code: ClaudeCodeConfigSchema.optional(),
89
98
  timeout_ms: z.number().positive().default(3e4),
90
99
  pricing: PricingSchema,
91
100
  capacity: CapacitySchema,
@@ -2,7 +2,7 @@ import {
2
2
  generateKeyPair,
3
3
  loadKeyPair,
4
4
  saveKeyPair
5
- } from "./chunk-F53QQIM2.js";
5
+ } from "./chunk-CUONY5TO.js";
6
6
 
7
7
  // src/identity/identity.ts
8
8
  import { z } from "zod";
@@ -0,0 +1,169 @@
1
+ // src/relay/types.ts
2
+ import { z } from "zod";
3
+ var RegisterMessageSchema = z.object({
4
+ type: z.literal("register"),
5
+ owner: z.string().min(1),
6
+ /** V8: Cryptographic agent identity. When present, used as the canonical key. */
7
+ agent_id: z.string().optional(),
8
+ /** V8 Phase 3: Server identifier for multi-agent delegation. */
9
+ server_id: z.string().optional(),
10
+ token: z.string().min(1),
11
+ card: z.record(z.unknown()),
12
+ // CapabilityCard (validated separately)
13
+ cards: z.array(z.record(z.unknown())).optional(),
14
+ // Additional cards (e.g., conductor card)
15
+ /** V8 Phase 3: Additional agents served by this server (multi-agent registration). */
16
+ agents: z.array(z.object({
17
+ agent_id: z.string().min(1),
18
+ display_name: z.string().min(1),
19
+ cards: z.array(z.record(z.unknown())),
20
+ delegation_token: z.record(z.unknown()).optional()
21
+ })).optional()
22
+ });
23
+ var RegisteredMessageSchema = z.object({
24
+ type: z.literal("registered"),
25
+ agent_id: z.string()
26
+ });
27
+ var RelayRequestMessageSchema = z.object({
28
+ type: z.literal("relay_request"),
29
+ id: z.string().uuid(),
30
+ target_owner: z.string().min(1),
31
+ /** V8: Target agent's cryptographic identity. Preferred over target_owner. */
32
+ target_agent_id: z.string().optional(),
33
+ card_id: z.string(),
34
+ skill_id: z.string().optional(),
35
+ params: z.record(z.unknown()).default({}),
36
+ requester: z.string().optional(),
37
+ escrow_receipt: z.record(z.unknown()).optional()
38
+ });
39
+ var IncomingRequestMessageSchema = z.object({
40
+ type: z.literal("incoming_request"),
41
+ id: z.string().uuid(),
42
+ from_owner: z.string().min(1),
43
+ card_id: z.string(),
44
+ skill_id: z.string().optional(),
45
+ params: z.record(z.unknown()).default({}),
46
+ requester: z.string().optional(),
47
+ escrow_receipt: z.record(z.unknown()).optional()
48
+ });
49
+ var RelayResponseMessageSchema = z.object({
50
+ type: z.literal("relay_response"),
51
+ id: z.string().uuid(),
52
+ result: z.unknown().optional(),
53
+ error: z.object({
54
+ code: z.number(),
55
+ message: z.string()
56
+ }).optional()
57
+ });
58
+ var ResponseMessageSchema = z.object({
59
+ type: z.literal("response"),
60
+ id: z.string().uuid(),
61
+ result: z.unknown().optional(),
62
+ error: z.object({
63
+ code: z.number(),
64
+ message: z.string()
65
+ }).optional()
66
+ });
67
+ var ErrorMessageSchema = z.object({
68
+ type: z.literal("error"),
69
+ code: z.string(),
70
+ message: z.string(),
71
+ request_id: z.string().optional()
72
+ });
73
+ var RelayProgressMessageSchema = z.object({
74
+ type: z.literal("relay_progress"),
75
+ id: z.string().uuid(),
76
+ // request ID this progress relates to
77
+ progress: z.number().min(0).max(100).optional(),
78
+ // optional percentage
79
+ message: z.string().optional()
80
+ // optional status message
81
+ });
82
+ var HeartbeatMessageSchema = z.object({
83
+ type: z.literal("heartbeat"),
84
+ owner: z.string().min(1),
85
+ capacity: z.object({
86
+ current_load: z.number(),
87
+ max_concurrent: z.number(),
88
+ queue_depth: z.number()
89
+ }),
90
+ self_summary: z.object({
91
+ capabilities: z.array(z.string()),
92
+ success_rate: z.number(),
93
+ credit_balance: z.number(),
94
+ total_completed: z.number(),
95
+ provider_number: z.number(),
96
+ reliability: z.object({
97
+ current_streak: z.number(),
98
+ repeat_hire_rate: z.number(),
99
+ avg_feedback: z.number()
100
+ })
101
+ })
102
+ });
103
+ var EscrowHoldMessageSchema = z.object({
104
+ type: z.literal("escrow_hold"),
105
+ consumer_agent_id: z.string().min(1),
106
+ provider_agent_id: z.string().min(1),
107
+ skill_id: z.string().min(1),
108
+ amount: z.number().positive(),
109
+ request_id: z.string().uuid(),
110
+ signature: z.string().optional(),
111
+ public_key: z.string().optional()
112
+ });
113
+ var EscrowHoldConfirmedMessageSchema = z.object({
114
+ type: z.literal("escrow_hold_confirmed"),
115
+ request_id: z.string(),
116
+ escrow_id: z.string(),
117
+ hold_amount: z.number(),
118
+ consumer_remaining: z.number()
119
+ });
120
+ var EscrowSettleMessageSchema = z.object({
121
+ type: z.literal("escrow_settle"),
122
+ escrow_id: z.string().min(1),
123
+ request_id: z.string().uuid(),
124
+ success: z.boolean(),
125
+ failure_reason: z.enum(["bad_execution", "overload", "timeout", "auth_error", "not_found"]).optional(),
126
+ result_hash: z.string().optional(),
127
+ signature: z.string().optional(),
128
+ public_key: z.string().optional(),
129
+ consumer_agent_id: z.string().optional()
130
+ });
131
+ var EscrowSettledMessageSchema = z.object({
132
+ type: z.literal("escrow_settled"),
133
+ escrow_id: z.string(),
134
+ request_id: z.string(),
135
+ provider_earned: z.number(),
136
+ network_fee: z.number(),
137
+ consumer_remaining: z.number(),
138
+ provider_balance: z.number()
139
+ });
140
+ var BalanceSyncMessageSchema = z.object({
141
+ type: z.literal("balance_sync"),
142
+ agent_id: z.string().min(1)
143
+ });
144
+ var BalanceSyncResponseMessageSchema = z.object({
145
+ type: z.literal("balance_sync_response"),
146
+ agent_id: z.string(),
147
+ balance: z.number()
148
+ });
149
+ var RelayMessageSchema = z.discriminatedUnion("type", [
150
+ RegisterMessageSchema,
151
+ RegisteredMessageSchema,
152
+ RelayRequestMessageSchema,
153
+ IncomingRequestMessageSchema,
154
+ RelayResponseMessageSchema,
155
+ ResponseMessageSchema,
156
+ ErrorMessageSchema,
157
+ RelayProgressMessageSchema,
158
+ HeartbeatMessageSchema,
159
+ EscrowHoldMessageSchema,
160
+ EscrowHoldConfirmedMessageSchema,
161
+ EscrowSettleMessageSchema,
162
+ EscrowSettledMessageSchema,
163
+ BalanceSyncMessageSchema,
164
+ BalanceSyncResponseMessageSchema
165
+ ]);
166
+
167
+ export {
168
+ RelayMessageSchema
169
+ };
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  insertCard
3
- } from "./chunk-KA2VIEGM.js";
3
+ } from "./chunk-O2OYBAVR.js";
4
4
  import {
5
5
  CapabilityCardSchema
6
- } from "./chunk-3CIMVISQ.js";
6
+ } from "./chunk-WVY2W7AA.js";
7
7
 
8
8
  // src/skills/publish-capability.ts
9
9
  import { randomUUID } from "crypto";
@@ -17,6 +17,8 @@ var CapabilityCardSchema = z.object({
17
17
  spec_version: z.literal("1.0").default("1.0"),
18
18
  id: z.string().uuid(),
19
19
  owner: z.string().min(1),
20
+ /** V8: Cryptographic agent identity (Ed25519 public key hash). */
21
+ agent_id: z.string().optional(),
20
22
  name: z.string().min(1).max(100),
21
23
  description: z.string().max(500),
22
24
  level: z.union([z.literal(1), z.literal(2), z.literal(3)]),
@@ -139,6 +141,8 @@ var CapabilityCardV2Schema = z.object({
139
141
  spec_version: z.literal("2.0"),
140
142
  id: z.string().uuid(),
141
143
  owner: z.string().min(1),
144
+ /** V8: Cryptographic agent identity (Ed25519 public key hash). */
145
+ agent_id: z.string().optional(),
142
146
  /** Agent display name — was 'name' in v1.0. */
143
147
  agent_name: z.string().min(1).max(100),
144
148
  /** Short one-liner shown in Hub v2 Identity Header. */
@@ -1,15 +1,18 @@
1
1
  import {
2
+ NETWORK_FEE_RATE,
2
3
  confirmEscrowDebit,
3
4
  recordEarning,
4
5
  releaseEscrow
5
- } from "./chunk-RVYQSC6L.js";
6
+ } from "./chunk-D6RKW2XG.js";
6
7
 
7
8
  // src/credit/settlement.ts
8
9
  function settleProviderEarning(providerDb, providerOwner, receipt) {
10
+ const feeAmount = Math.floor(receipt.amount * NETWORK_FEE_RATE);
11
+ const providerAmount = receipt.amount - feeAmount;
9
12
  recordEarning(
10
13
  providerDb,
11
14
  providerOwner,
12
- receipt.amount,
15
+ providerAmount,
13
16
  receipt.card_id,
14
17
  receipt.nonce
15
18
  );
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  RelayClient
3
- } from "./chunk-JOY533UH.js";
3
+ } from "./chunk-Z4MCGKTL.js";
4
4
  import {
5
5
  BudgetController,
6
6
  ORCHESTRATION_FEE,
7
7
  decompose,
8
8
  matchSubTasks,
9
9
  orchestrate
10
- } from "./chunk-NYV3NE5Z.js";
10
+ } from "./chunk-E2OKP5CY.js";
11
11
  import {
12
12
  BudgetManager
13
- } from "./chunk-C2T4BMRW.js";
13
+ } from "./chunk-5GME4KJZ.js";
14
14
  import {
15
15
  openCreditDb
16
- } from "./chunk-RVYQSC6L.js";
16
+ } from "./chunk-D6RKW2XG.js";
17
17
  import {
18
18
  loadPeers
19
19
  } from "./chunk-5AH3CMOX.js";
@@ -22,7 +22,7 @@ import {
22
22
  } from "./chunk-75OC6E4F.js";
23
23
  import {
24
24
  openDatabase
25
- } from "./chunk-KA2VIEGM.js";
25
+ } from "./chunk-O2OYBAVR.js";
26
26
 
27
27
  // src/cli/conduct.ts
28
28
  async function conductAction(task, opts) {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  RelayMessageSchema
3
- } from "./chunk-QT7TEVNV.js";
3
+ } from "./chunk-SSK653A6.js";
4
4
 
5
5
  // src/relay/websocket-client.ts
6
6
  import WebSocket from "ws";
@@ -35,9 +35,12 @@ var RelayClient = class {
35
35
  this.send({
36
36
  type: "register",
37
37
  owner: this.opts.owner,
38
+ ...this.opts.agent_id ? { agent_id: this.opts.agent_id } : {},
39
+ ...this.opts.server_id ? { server_id: this.opts.server_id } : {},
38
40
  token: this.opts.token,
39
41
  card: this.opts.card,
40
- ...this.opts.cards && this.opts.cards.length > 0 ? { cards: this.opts.cards } : {}
42
+ ...this.opts.cards && this.opts.cards.length > 0 ? { cards: this.opts.cards } : {},
43
+ ...this.opts.agents && this.opts.agents.length > 0 ? { agents: this.opts.agents } : {}
41
44
  });
42
45
  });
43
46
  this.ws.on("message", (raw) => {
@@ -113,6 +116,7 @@ var RelayClient = class {
113
116
  type: "relay_request",
114
117
  id,
115
118
  target_owner: opts.targetOwner,
119
+ ...opts.targetAgentId ? { target_agent_id: opts.targetAgentId } : {},
116
120
  card_id: opts.cardId,
117
121
  skill_id: opts.skillId,
118
122
  params: opts.params,