agentbnb 9.0.2 → 9.1.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 (72) hide show
  1. package/dist/{card-NKQFB3HD.js → card-NQHAGTQQ.js} +3 -1
  2. package/dist/{card-6KL6L4GF.js → card-VVT3XBOI.js} +3 -1
  3. package/dist/chunk-3RG5ZIWI.js +10 -0
  4. package/dist/{chunk-76YORWFJ.js → chunk-3Y76PHEY.js} +62 -5
  5. package/dist/{chunk-QEDVPJKP.js → chunk-4DBSSFHG.js} +20 -16
  6. package/dist/chunk-4HLGFR72.js +155 -0
  7. package/dist/{chunk-ERT77HKY.js → chunk-4M6IAIVK.js} +2 -2
  8. package/dist/{chunk-FUGWPKXN.js → chunk-4UIUIHST.js} +1 -1
  9. package/dist/chunk-4XTYT4JW.js +147 -0
  10. package/dist/{chunk-2SOHHB2O.js → chunk-AR7Z3EQB.js} +34 -11
  11. package/dist/{chunk-Z4IDXMSP.js → chunk-D7NH6YLM.js} +6 -1
  12. package/dist/{chunk-SLZBE2I5.js → chunk-DBO2335D.js} +17 -12
  13. package/dist/{chunk-N3TXLBGK.js → chunk-GAZCZCAZ.js} +1 -1
  14. package/dist/{chunk-UQCQ2JCG.js → chunk-JJHQAZWE.js} +4 -4
  15. package/dist/{chunk-NLQCHO7N.js → chunk-JKD6QRUD.js} +3 -134
  16. package/dist/{chunk-74OZGLIT.js → chunk-LENX5NUW.js} +1 -1
  17. package/dist/{chunk-I3RRMAAD.js → chunk-PIO2FMX4.js} +5 -5
  18. package/dist/{chunk-77HAL2ZL.js → chunk-PYZGF5QH.js} +60 -3
  19. package/dist/chunk-Q5OFZ2JR.js +292 -0
  20. package/dist/{chunk-YJ3RGKPU.js → chunk-QG2LLVXP.js} +6 -2
  21. package/dist/chunk-QXRNW4OJ.js +35 -0
  22. package/dist/{chunk-UR3MISL2.js → chunk-UPNREF4L.js} +1 -1
  23. package/dist/{chunk-SMQDT7CT.js → chunk-UXL7DV7P.js} +7 -3
  24. package/dist/{chunk-PG3CLSAH.js → chunk-VJ2Q33AP.js} +3 -134
  25. package/dist/{chunk-DYJ7YGBM.js → chunk-WOVESOQ7.js} +237 -124
  26. package/dist/{chunk-BNS76U6K.js → chunk-XL5XD3IG.js} +23 -17
  27. package/dist/{chunk-FMKBCO2Q.js → chunk-ZYOMPJGG.js} +2 -2
  28. package/dist/cli/index.js +133 -59
  29. package/dist/{client-YB3IYO3S.js → client-XOSXFC7Q.js} +1 -0
  30. package/dist/{conduct-URYWMA5T.js → conduct-6C6JWZKZ.js} +13 -10
  31. package/dist/conduct-VSSHJHVH.js +29 -0
  32. package/dist/{conductor-mode-NRSVP2AU.js → conductor-mode-KKPSNN7V.js} +9 -6
  33. package/dist/{conductor-mode-2UFN6BUL.js → conductor-mode-NKHIZG4N.js} +17 -14
  34. package/dist/{config-IRWLG6IW.js → config-ZFWBAGDU.js} +1 -0
  35. package/dist/{credits-action-24EPLUHG.js → credits-action-N3WB4WSI.js} +5 -3
  36. package/dist/{daemon-A7DXZIQW.js → daemon-OM2K3U7J.js} +1 -0
  37. package/dist/{did-action-MQLDT4RF.js → did-action-3PNFYLX2.js} +1 -0
  38. package/dist/{execute-DNRNU3HM.js → execute-IEQ3RV7I.js} +6 -3
  39. package/dist/{execute-2Z3XIUHR.js → execute-QHP4KUV2.js} +10 -7
  40. package/dist/index.d.ts +412 -275
  41. package/dist/index.js +886 -282
  42. package/dist/{openclaw-setup-WA625DZA.js → openclaw-setup-PKGFB4IH.js} +19 -16
  43. package/dist/{openclaw-skills-76ZWXHFM.js → openclaw-skills-5VJDA6SX.js} +7 -6
  44. package/dist/{peers-F2EWUMVQ.js → peers-7BMU2775.js} +1 -0
  45. package/dist/{peers-CJ7T4RJO.js → peers-IOVCBWAI.js} +1 -0
  46. package/dist/{process-guard-QDBIOLY4.js → process-guard-6324CZDC.js} +1 -0
  47. package/dist/{publish-capability-FOCHYNYE.js → publish-capability-CHMPZ6W3.js} +4 -2
  48. package/dist/{reliability-metrics-JSOY3PNW.js → reliability-metrics-22JTZGB4.js} +1 -0
  49. package/dist/{reliability-metrics-KKUFFVB6.js → reliability-metrics-MIJ3TJWL.js} +1 -0
  50. package/dist/{request-KPKWBL5W.js → request-6TBVP3GR.js} +12 -9
  51. package/dist/request-log-2D253WML.js +17 -0
  52. package/dist/request-log-SIGTGOFA.js +16 -0
  53. package/dist/{scanner-GP4AOCW6.js → scanner-EFU6NBEJ.js} +1 -0
  54. package/dist/{schema-7BSSLZ4S.js → schema-FABVZKSI.js} +1 -0
  55. package/dist/{serve-skill-QSUIK3ZF.js → serve-skill-BRUHUDRA.js} +12 -9
  56. package/dist/{server-TGV2OPUM.js → server-N4BJW4TS.js} +15 -8
  57. package/dist/{service-coordinator-4JAUUNUL.js → service-coordinator-M2CBDEUQ.js} +539 -50
  58. package/dist/session-5AIRM7YF.js +144 -0
  59. package/dist/session-action-67J57636.js +131 -0
  60. package/dist/{skill-config-5O2VR546.js → skill-config-VYNF7BCY.js} +1 -0
  61. package/dist/skill-wrap-IAZHOYM4.js +365 -0
  62. package/dist/skills/agentbnb/bootstrap.js +564 -75
  63. package/dist/{store-S22F3I7G.js → store-A4YPEHDV.js} +3 -1
  64. package/dist/{vc-action-SUD7TMN2.js → vc-action-TSAIABUM.js} +1 -0
  65. package/dist/websocket-client-FCPZOE4S.js +9 -0
  66. package/dist/websocket-client-RT4KLJL4.js +8 -0
  67. package/dist/{writer-4QJ3U3WE.js → writer-V7JBWKKZ.js} +1 -0
  68. package/package.json +1 -1
  69. package/dist/chunk-3466S65P.js +0 -179
  70. package/dist/conduct-UAEEMVFD.js +0 -26
  71. package/dist/websocket-client-5CRE36Z5.js +0 -7
  72. package/dist/websocket-client-WHEHIYIZ.js +0 -6
@@ -4,10 +4,13 @@ import {
4
4
  migrateCreditOwnerData,
5
5
  recordSuccessfulHire
6
6
  } from "./chunk-6QMDJVMS.js";
7
+ import {
8
+ loadCoreConfig
9
+ } from "./chunk-QXRNW4OJ.js";
7
10
  import {
8
11
  getCard,
9
12
  getFeedbackForProvider
10
- } from "./chunk-PG3CLSAH.js";
13
+ } from "./chunk-VJ2Q33AP.js";
11
14
  import {
12
15
  ensureAgentsTable,
13
16
  resolveCanonicalIdentity
@@ -168,7 +171,8 @@ function migrateOwner(db, oldOwner, newOwner) {
168
171
 
169
172
  // src/credit/escrow.ts
170
173
  import { randomUUID as randomUUID2 } from "crypto";
171
- var NETWORK_FEE_RATE = 0.05;
174
+ var coreEconomics = loadCoreConfig("economics");
175
+ var NETWORK_FEE_RATE = coreEconomics?.network_fee_rate ?? 0.05;
172
176
  var FINALIZABLE_ESCROW_STATUSES = /* @__PURE__ */ new Set([
173
177
  "held",
174
178
  "started",
@@ -355,27 +359,28 @@ function confirmEscrowDebit(db, escrowId) {
355
359
  }
356
360
 
357
361
  // src/feedback/reputation.ts
362
+ var coreReputation = loadCoreConfig("reputation");
358
363
  var QUALITY_SCORES = {
359
- excellent: 1,
360
- good: 0.8,
361
- acceptable: 0.6,
362
- poor: 0.3,
363
- failed: 0
364
+ excellent: coreReputation?.quality_scores?.["excellent"] ?? 1,
365
+ good: coreReputation?.quality_scores?.["good"] ?? 0.8,
366
+ acceptable: coreReputation?.quality_scores?.["acceptable"] ?? 0.6,
367
+ poor: coreReputation?.quality_scores?.["poor"] ?? 0.3,
368
+ failed: coreReputation?.quality_scores?.["failed"] ?? 0
364
369
  };
365
370
  var COST_VALUE_SCORES = {
366
- great: 1,
367
- fair: 0.6,
368
- overpriced: 0.2
371
+ great: coreReputation?.cost_value_scores?.["great"] ?? 1,
372
+ fair: coreReputation?.cost_value_scores?.["fair"] ?? 0.6,
373
+ overpriced: coreReputation?.cost_value_scores?.["overpriced"] ?? 0.2
369
374
  };
370
- var DECAY_DAYS = 30;
375
+ var DECAY_DAYS = coreReputation?.decay_days ?? 30;
371
376
  var WEIGHTS = {
372
- rating: 0.4,
373
- quality: 0.3,
374
- would_reuse: 0.2,
375
- cost_value: 0.1
377
+ rating: coreReputation?.weights?.["rating"] ?? 0.4,
378
+ quality: coreReputation?.weights?.["quality"] ?? 0.3,
379
+ would_reuse: coreReputation?.weights?.["would_reuse"] ?? 0.2,
380
+ cost_value: coreReputation?.weights?.["cost_value"] ?? 0.1
376
381
  };
377
382
  function computeReputation(feedbacks) {
378
- if (feedbacks.length === 0) return 0.5;
383
+ if (feedbacks.length === 0) return coreReputation?.cold_start_score ?? 0.5;
379
384
  const now = Date.now();
380
385
  let weightedSum = 0;
381
386
  let totalWeight = 0;
@@ -391,7 +396,7 @@ function computeReputation(feedbacks) {
391
396
  weightedSum += recencyWeight * componentScore;
392
397
  totalWeight += recencyWeight;
393
398
  }
394
- if (totalWeight === 0) return 0.5;
399
+ if (totalWeight === 0) return coreReputation?.cold_start_score ?? 0.5;
395
400
  const raw = weightedSum / totalWeight;
396
401
  return Math.max(0, Math.min(1, raw));
397
402
  }
@@ -780,6 +785,7 @@ export {
780
785
  getBalance,
781
786
  getTransactions,
782
787
  migrateOwner,
788
+ NETWORK_FEE_RATE,
783
789
  holdEscrow,
784
790
  markEscrowStarted,
785
791
  markEscrowProgressing,
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  createLedger
3
- } from "./chunk-74OZGLIT.js";
3
+ } from "./chunk-LENX5NUW.js";
4
4
  import {
5
5
  loadOrRepairIdentity
6
6
  } from "./chunk-5CC6O6SO.js";
7
7
  import {
8
8
  getBalance
9
- } from "./chunk-Z4IDXMSP.js";
9
+ } from "./chunk-D7NH6YLM.js";
10
10
  import {
11
11
  canonicalizeCreditOwner
12
12
  } from "./chunk-YDGXKH2T.js";
package/dist/cli/index.js CHANGED
@@ -1,43 +1,44 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ discoverLocalAgents
4
+ } from "../chunk-TA73FIZU.js";
5
+ import {
6
+ resolveSelfCli
7
+ } from "../chunk-7S4ZLFVI.js";
2
8
  import {
3
9
  generateHeartbeatSection,
4
10
  getOpenClawStatus,
5
11
  injectHeartbeatSection,
6
12
  performInit,
7
13
  publishFromSoulV2
8
- } from "../chunk-2SOHHB2O.js";
14
+ } from "../chunk-AR7Z3EQB.js";
15
+ import {
16
+ getPricingStats
17
+ } from "../chunk-4UIUIHST.js";
18
+ import "../chunk-GAZCZCAZ.js";
9
19
  import "../chunk-RJNKX347.js";
10
20
  import {
11
21
  AutoRequestor,
12
22
  requestViaTemporaryRelay
13
- } from "../chunk-UQCQ2JCG.js";
23
+ } from "../chunk-JJHQAZWE.js";
24
+ import "../chunk-5PV5YCSN.js";
14
25
  import {
15
26
  BudgetManager,
16
27
  DEFAULT_BUDGET_CONFIG
17
- } from "../chunk-YJ3RGKPU.js";
18
- import {
19
- discoverLocalAgents
20
- } from "../chunk-TA73FIZU.js";
21
- import {
22
- resolveSelfCli
23
- } from "../chunk-7S4ZLFVI.js";
24
- import {
25
- getPricingStats
26
- } from "../chunk-FUGWPKXN.js";
27
- import "../chunk-5PV5YCSN.js";
28
+ } from "../chunk-QG2LLVXP.js";
28
29
  import {
29
30
  DEFAULT_AUTONOMY_CONFIG
30
31
  } from "../chunk-G5WKW3ED.js";
31
32
  import {
32
33
  syncCreditsFromRegistry
33
- } from "../chunk-FMKBCO2Q.js";
34
+ } from "../chunk-ZYOMPJGG.js";
34
35
  import {
35
36
  createLedger
36
- } from "../chunk-74OZGLIT.js";
37
+ } from "../chunk-LENX5NUW.js";
37
38
  import {
38
39
  ensureIdentity
39
40
  } from "../chunk-5CC6O6SO.js";
40
- import "../chunk-ERT77HKY.js";
41
+ import "../chunk-4M6IAIVK.js";
41
42
  import {
42
43
  fetchRemoteCards,
43
44
  mergeResults
@@ -45,14 +46,15 @@ import {
45
46
  import {
46
47
  filterCards,
47
48
  searchCards
48
- } from "../chunk-QEDVPJKP.js";
49
+ } from "../chunk-4DBSSFHG.js";
49
50
  import {
50
51
  getBalance,
51
52
  getTransactions,
52
53
  openCreditDb
53
- } from "../chunk-Z4IDXMSP.js";
54
- import "../chunk-UR3MISL2.js";
55
- import "../chunk-3466S65P.js";
54
+ } from "../chunk-D7NH6YLM.js";
55
+ import "../chunk-UPNREF4L.js";
56
+ import "../chunk-Q5OFZ2JR.js";
57
+ import "../chunk-QXRNW4OJ.js";
56
58
  import {
57
59
  requestCapability
58
60
  } from "../chunk-W6LOCBWQ.js";
@@ -73,7 +75,6 @@ import {
73
75
  loadConfig,
74
76
  saveConfig
75
77
  } from "../chunk-3XPBFF6H.js";
76
- import "../chunk-N3TXLBGK.js";
77
78
  import {
78
79
  attachCanonicalAgentId,
79
80
  deleteCard,
@@ -81,11 +82,13 @@ import {
81
82
  insertCard,
82
83
  listCards,
83
84
  openDatabase
84
- } from "../chunk-NLQCHO7N.js";
85
+ } from "../chunk-JKD6QRUD.js";
85
86
  import "../chunk-J4RFJVXI.js";
86
87
  import {
87
88
  AnyCardSchema
88
89
  } from "../chunk-UVCNMRPS.js";
90
+ import "../chunk-4XTYT4JW.js";
91
+ import "../chunk-3RG5ZIWI.js";
89
92
 
90
93
  // src/cli/index.ts
91
94
  import { Command } from "commander";
@@ -236,8 +239,8 @@ Skills: ${skills2.skillCount} skill(s) in ${skills2.path}`);
236
239
  let daemonStatus = { running: false, reason: "skipped" };
237
240
  if (!skipServe) {
238
241
  try {
239
- const { ProcessGuard } = await import("../process-guard-QDBIOLY4.js");
240
- const { ServiceCoordinator } = await import("../service-coordinator-4JAUUNUL.js");
242
+ const { ProcessGuard } = await import("../process-guard-6324CZDC.js");
243
+ const { ServiceCoordinator } = await import("../service-coordinator-M2CBDEUQ.js");
241
244
  const guard = new ProcessGuard(join(initResult.configDir, ".pid"));
242
245
  const coordinator = new ServiceCoordinator(initResult.config, guard);
243
246
  const result = await coordinator.ensureRunning({
@@ -299,7 +302,7 @@ Skills: ${skills2.skillCount} skill(s) in ${skills2.path}`);
299
302
  }
300
303
 
301
304
  // src/cli/index.ts
302
- var VERSION = true ? "9.0.2" : "0.0.0-dev";
305
+ var VERSION = true ? "9.1.0" : "0.0.0-dev";
303
306
  function loadIdentityAuth(owner) {
304
307
  const configDir = getConfigDir();
305
308
  let keys;
@@ -512,8 +515,8 @@ program.command("publish-skills").description("Publish capabilities from skills.
512
515
  console.error("Error: not initialized. Run `agentbnb init` first.");
513
516
  process.exit(1);
514
517
  }
515
- const { parseSkillsFile } = await import("../skill-config-5O2VR546.js");
516
- const { skillConfigToSkill } = await import("../publish-capability-FOCHYNYE.js");
518
+ const { parseSkillsFile } = await import("../skill-config-VYNF7BCY.js");
519
+ const { skillConfigToSkill } = await import("../publish-capability-CHMPZ6W3.js");
517
520
  const skillsPath = typeof opts.fromSkills === "string" ? opts.fromSkills : "./skills.yaml";
518
521
  let yamlContent;
519
522
  try {
@@ -560,8 +563,8 @@ program.command("publish-skills").description("Publish capabilities from skills.
560
563
  db.close();
561
564
  }
562
565
  console.log(`Published ${skills2.length} skill(s) to local registry`);
563
- for (const skill of skills2) {
564
- console.log(` - ${skill.id}: ${skill.name} (${skill.pricing.credits_per_call} cr/call)`);
566
+ for (const skill2 of skills2) {
567
+ console.log(` - ${skill2.id}: ${skill2.name} (${skill2.pricing.credits_per_call} cr/call)`);
565
568
  }
566
569
  });
567
570
  program.command("sync").description("Push all local capability cards to the configured remote registry").option("--registry <url>", "Remote registry URL (overrides config.registry)").option("--json", "Output as JSON").action(async (opts) => {
@@ -735,10 +738,10 @@ ${displayName} (${shortId}) [${tags}]`);
735
738
  const skills2 = Array.isArray(raw["skills"]) ? raw["skills"] : [];
736
739
  if (skills2.length > 0) {
737
740
  console.log(" Skills:");
738
- for (const skill of skills2) {
739
- const price = String(skill.pricing?.credits_per_call ?? "?");
740
- const desc = (skill.description ?? "").slice(0, 50);
741
- console.log(` ${col(skill.id, 24)} ${col(price + " cr", 8)} ${desc}`);
741
+ for (const skill2 of skills2) {
742
+ const price = String(skill2.pricing?.credits_per_call ?? "?");
743
+ const desc = (skill2.description ?? "").slice(0, 50);
744
+ console.log(` ${col(skill2.id, 24)} ${col(price + " cr", 8)} ${desc}`);
742
745
  }
743
746
  totalSkills += skills2.length;
744
747
  } else if (card.pricing?.credits_per_call != null) {
@@ -1118,7 +1121,7 @@ Active Escrows (${heldEscrows.length}):`);
1118
1121
  });
1119
1122
  program.command("serve").description("Start the AgentBnB gateway server").option("--port <port>", "Port to listen on (overrides config)").option("--handler-url <url>", "Local capability handler URL", "http://localhost:8080").option("--skills-yaml <path>", "Path to skills.yaml (default: ~/.agentbnb/skills.yaml)").option("--registry-port <port>", "Public registry API port (0 to disable)", "7701").option("--registry <url>", "Connect to remote registry via WebSocket relay (e.g., hub.agentbnb.dev)").option("--conductor", "Enable Conductor orchestration mode").option("--announce", "Announce this gateway on the local network via mDNS").option("--no-relay", "Do not auto-connect to remote registry relay").option("--daemon", "Run in background as daemon").option("--status", "Show daemon status").option("--stop", "Stop the daemon").option("--restart", "Restart the daemon").option("--startup", "Register for auto-start on boot").action(async (opts) => {
1120
1123
  if (opts.status || opts.stop || opts.restart || opts.daemon || opts.startup) {
1121
- const { startDaemon, stopDaemon, restartDaemon, daemonStatus, registerStartup } = await import("../daemon-A7DXZIQW.js");
1124
+ const { startDaemon, stopDaemon, restartDaemon, daemonStatus, registerStartup } = await import("../daemon-OM2K3U7J.js");
1122
1125
  if (opts.status) {
1123
1126
  daemonStatus();
1124
1127
  return;
@@ -1154,8 +1157,8 @@ program.command("serve").description("Start the AgentBnB gateway server").option
1154
1157
  console.error("Error: not initialized. Run `agentbnb init` first.");
1155
1158
  process.exit(1);
1156
1159
  }
1157
- const { ProcessGuard } = await import("../process-guard-QDBIOLY4.js");
1158
- const { ServiceCoordinator } = await import("../service-coordinator-4JAUUNUL.js");
1160
+ const { ProcessGuard } = await import("../process-guard-6324CZDC.js");
1161
+ const { ServiceCoordinator } = await import("../service-coordinator-M2CBDEUQ.js");
1159
1162
  const port = opts.port ? parseInt(opts.port, 10) : config.gateway_port;
1160
1163
  const registryPort = parseInt(opts.registryPort, 10);
1161
1164
  if (!Number.isFinite(port) || !Number.isFinite(registryPort)) {
@@ -1225,7 +1228,7 @@ peersCommand.command("remove <name>").description("Remove a registered peer").ac
1225
1228
  });
1226
1229
  var configCmd = program.command("config").description("Get or set AgentBnB configuration values");
1227
1230
  configCmd.command("set <key> <value>").description("Set a configuration value").action((key, value) => {
1228
- const allowedKeys = ["registry", "tier1", "tier2", "reserve", "idle-threshold", "conductor-public", "telegram-notifications", "telegram-bot-token", "telegram-chat-id", "shared-skills"];
1231
+ const allowedKeys = ["registry", "tier1", "tier2", "reserve", "idle-threshold", "conductor-public", "telegram-notifications", "telegram-bot-token", "telegram-chat-id", "shared-skills", "provider-gate", "provider-accepting", "provider-daily-limit", "provider-whitelist", "provider-blacklist"];
1229
1232
  if (!allowedKeys.includes(key)) {
1230
1233
  console.error(`Unknown config key: ${key}. Valid keys: ${allowedKeys.join(", ")}`);
1231
1234
  process.exit(1);
@@ -1330,6 +1333,51 @@ configCmd.command("set <key> <value>").description("Set a configuration value").
1330
1333
  console.log(`Set shared-skills: ${display}`);
1331
1334
  return;
1332
1335
  }
1336
+ if (key === "provider-gate") {
1337
+ if (value !== "auto" && value !== "notify") {
1338
+ console.error('Error: provider-gate must be "auto" or "notify"');
1339
+ process.exit(1);
1340
+ }
1341
+ config.provider_gate = value;
1342
+ saveConfig(config);
1343
+ console.log(`Set provider-gate = ${value} (${value === "notify" ? "Telegram notification before execution" : "execute silently"})`);
1344
+ return;
1345
+ }
1346
+ if (key === "provider-accepting") {
1347
+ if (value !== "true" && value !== "false") {
1348
+ console.error('Error: provider-accepting must be "true" or "false"');
1349
+ process.exit(1);
1350
+ }
1351
+ config.provider_accepting = value === "true";
1352
+ saveConfig(config);
1353
+ console.log(`Set provider-accepting = ${value} (${value === "true" ? "accepting incoming requests" : "REJECTING all incoming requests"})`);
1354
+ return;
1355
+ }
1356
+ if (key === "provider-daily-limit") {
1357
+ const parsed = parseInt(value, 10);
1358
+ if (isNaN(parsed) || parsed < 0) {
1359
+ console.error("Error: provider-daily-limit must be a non-negative integer");
1360
+ process.exit(1);
1361
+ }
1362
+ config.provider_daily_limit = parsed;
1363
+ saveConfig(config);
1364
+ console.log(`Set provider-daily-limit = ${parsed} (${parsed === 0 ? "unlimited" : `max ${parsed} executions/day`})`);
1365
+ return;
1366
+ }
1367
+ if (key === "provider-whitelist") {
1368
+ config.provider_whitelist = value.trim() === "" ? [] : value.split(",").map((s) => s.trim()).filter(Boolean);
1369
+ saveConfig(config);
1370
+ const display = config.provider_whitelist.length > 0 ? config.provider_whitelist.join(", ") : "(empty)";
1371
+ console.log(`Set provider-whitelist: ${display}`);
1372
+ return;
1373
+ }
1374
+ if (key === "provider-blacklist") {
1375
+ config.provider_blacklist = value.trim() === "" ? [] : value.split(",").map((s) => s.trim()).filter(Boolean);
1376
+ saveConfig(config);
1377
+ const display = config.provider_blacklist.length > 0 ? config.provider_blacklist.join(", ") : "(empty)";
1378
+ console.log(`Set provider-blacklist: ${display}`);
1379
+ return;
1380
+ }
1333
1381
  config[key] = value;
1334
1382
  saveConfig(config);
1335
1383
  console.log(`Set ${key} = ${value}`);
@@ -1461,7 +1509,7 @@ openclaw.command("sync").description("Read SOUL.md and publish/update a v2.0 cap
1461
1509
  if (opts.soulPath) {
1462
1510
  resolvedSoulPath = opts.soulPath;
1463
1511
  } else {
1464
- const { findSoulMd, getOpenClawWorkspaceDir } = await import("../scanner-GP4AOCW6.js");
1512
+ const { findSoulMd, getOpenClawWorkspaceDir } = await import("../scanner-EFU6NBEJ.js");
1465
1513
  const found = findSoulMd(config.owner);
1466
1514
  if (found) {
1467
1515
  resolvedSoulPath = found;
@@ -1496,12 +1544,12 @@ openclaw.command("sync").description("Read SOUL.md and publish/update a v2.0 cap
1496
1544
  try {
1497
1545
  const card = publishFromSoulV2(db, content, config.owner, sharedSkills);
1498
1546
  console.log(`Published card ${card.id} with ${card.skills.length} skill(s) (from ${resolvedSoulPath})`);
1499
- for (const skill of card.skills) {
1500
- const stats = getPricingStats(db, skill.name);
1547
+ for (const skill2 of card.skills) {
1548
+ const stats = getPricingStats(db, skill2.name);
1501
1549
  if (stats.count > 0) {
1502
- console.log(` ${skill.name}: ${skill.pricing.credits_per_call} cr (market: ${stats.min}-${stats.max} cr, median ${stats.median}, ${stats.count} providers)`);
1550
+ console.log(` ${skill2.name}: ${skill2.pricing.credits_per_call} cr (market: ${stats.min}-${stats.max} cr, median ${stats.median}, ${stats.count} providers)`);
1503
1551
  } else {
1504
- console.log(` ${skill.name}: ${skill.pricing.credits_per_call} cr (no market data yet)`);
1552
+ console.log(` ${skill2.name}: ${skill2.pricing.credits_per_call} cr (no market data yet)`);
1505
1553
  }
1506
1554
  }
1507
1555
  } catch (err) {
@@ -1531,8 +1579,8 @@ openclaw.command("status").description("Show OpenClaw integration status, tier c
1531
1579
  console.log(`Balance: ${status.balance} credits`);
1532
1580
  console.log(`Reserve: ${status.reserve} credits`);
1533
1581
  console.log(`Skills: ${status.skills.length}`);
1534
- for (const skill of status.skills) {
1535
- console.log(` - ${skill.id}: ${skill.name} (idle: ${skill.idle_rate ?? "N/A"}, online: ${skill.online})`);
1582
+ for (const skill2 of status.skills) {
1583
+ console.log(` - ${skill2.id}: ${skill2.name} (idle: ${skill2.idle_rate ?? "N/A"}, online: ${skill2.online})`);
1536
1584
  }
1537
1585
  } finally {
1538
1586
  db.close();
@@ -1547,7 +1595,7 @@ openclaw.command("rules").description("Print HEARTBEAT.md rules block (or inject
1547
1595
  }
1548
1596
  const autonomy = config.autonomy ?? DEFAULT_AUTONOMY_CONFIG;
1549
1597
  const budget = config.budget ?? DEFAULT_BUDGET_CONFIG;
1550
- const section = generateHeartbeatSection(autonomy, budget);
1598
+ const section = generateHeartbeatSection(autonomy, budget, config);
1551
1599
  if (opts.inject) {
1552
1600
  injectHeartbeatSection(opts.inject, section);
1553
1601
  console.log(`Injected AgentBnB rules into ${opts.inject}`);
@@ -1556,34 +1604,34 @@ openclaw.command("rules").description("Print HEARTBEAT.md rules block (or inject
1556
1604
  }
1557
1605
  });
1558
1606
  openclaw.command("setup").description("Interactive onboarding: connect an OpenClaw agent to AgentBnB").option("--agent <name>", "Agent name to set up (skip interactive selection)").option("--soul-path <path>", "Override SOUL.md path").option("-y, --yes", "Skip confirmation prompts").action(async (opts) => {
1559
- const { runOpenClawSetup } = await import("../openclaw-setup-WA625DZA.js");
1607
+ const { runOpenClawSetup } = await import("../openclaw-setup-PKGFB4IH.js");
1560
1608
  await runOpenClawSetup(opts);
1561
1609
  });
1562
1610
  var skills = openclaw.command("skills").description("Manage shared skills on AgentBnB");
1563
1611
  skills.command("list").description("List all shared skills with stats").action(async () => {
1564
- const { skillsList } = await import("../openclaw-skills-76ZWXHFM.js");
1612
+ const { skillsList } = await import("../openclaw-skills-5VJDA6SX.js");
1565
1613
  await skillsList({});
1566
1614
  });
1567
1615
  skills.command("add").description("Add a skill to share (interactive or --manual)").option("--manual", "Non-interactive: use flags instead of prompts").option("--name <id>", "Skill ID").option("--type <type>", "Skill type (command|openclaw)").option("--price <n>", "Credits per call", parseFloat).option("--description <text>", "Skill description").action(
1568
1616
  async (opts) => {
1569
- const { skillsAdd } = await import("../openclaw-skills-76ZWXHFM.js");
1617
+ const { skillsAdd } = await import("../openclaw-skills-5VJDA6SX.js");
1570
1618
  await skillsAdd(opts);
1571
1619
  }
1572
1620
  );
1573
1621
  skills.command("remove <skillId>").description("Remove a skill from AgentBnB").action(async (skillId) => {
1574
- const { skillsRemove } = await import("../openclaw-skills-76ZWXHFM.js");
1622
+ const { skillsRemove } = await import("../openclaw-skills-5VJDA6SX.js");
1575
1623
  await skillsRemove(skillId);
1576
1624
  });
1577
1625
  skills.command("price <skillId> <price>").description("Update skill price").action(async (skillId, price) => {
1578
- const { skillsPrice } = await import("../openclaw-skills-76ZWXHFM.js");
1626
+ const { skillsPrice } = await import("../openclaw-skills-5VJDA6SX.js");
1579
1627
  await skillsPrice(skillId, parseFloat(price));
1580
1628
  });
1581
1629
  skills.command("stats").description("Revenue and performance report").option("--days <n>", "Days to look back", parseInt, 7).action(async (opts) => {
1582
- const { skillsStats } = await import("../openclaw-skills-76ZWXHFM.js");
1630
+ const { skillsStats } = await import("../openclaw-skills-5VJDA6SX.js");
1583
1631
  await skillsStats(opts);
1584
1632
  });
1585
1633
  program.command("conduct <task>").description("Orchestrate a complex task across the AgentBnB network").option("--plan-only", "Show execution plan without executing").option("--max-budget <credits>", "Maximum credits to spend", "100").option("--json", "Output as JSON").action(async (task, opts) => {
1586
- const { conductAction } = await import("../conduct-UAEEMVFD.js");
1634
+ const { conductAction } = await import("../conduct-VSSHJHVH.js");
1587
1635
  const result = await conductAction(task, opts);
1588
1636
  if (opts.json) {
1589
1637
  console.log(JSON.stringify(result, null, 2));
@@ -1630,7 +1678,7 @@ feedback.command("submit").description("Submit structured feedback for a complet
1630
1678
  console.error("Error: --json must be valid JSON");
1631
1679
  process.exit(1);
1632
1680
  }
1633
- const { StructuredFeedbackSchema } = await import("../schema-7BSSLZ4S.js");
1681
+ const { StructuredFeedbackSchema } = await import("../schema-FABVZKSI.js");
1634
1682
  const result = StructuredFeedbackSchema.safeParse(parsed);
1635
1683
  if (!result.success) {
1636
1684
  console.error("Error: invalid feedback JSON \u2014", result.error.issues.map((i) => i.message).join(", "));
@@ -1694,9 +1742,14 @@ Feedback for skill: ${opts.skill} (${feedbacks.length} entries)
1694
1742
  }
1695
1743
  });
1696
1744
  program.command("quickstart").alias("qs").description("One-command setup: init + skills.yaml + MCP registration + serve daemon").option("--owner <name>", "Agent owner name").option("--port <port>", "Gateway port", "7700").option("--no-serve", "Skip starting background daemon").option("--no-mcp", "Skip MCP registration with Claude Code").option("--json", "Output as JSON").action(runQuickstart);
1745
+ var skill = program.command("skill").description("Skill management commands");
1746
+ skill.command("wrap").description("Wrap a CLI command as a rentable AgentBnB skill").option("--name <name>", "Skill name").option("--command <cmd>", "Command template with ${params.x} placeholders").option("--description <desc>", "Short description").option("--price <credits>", 'Price per call (number or "auto")').option("--category <cat>", "Category for pricing hints").option("--inputs <json>", "Input schema JSON override").option("--outputs <json>", "Output schema JSON override").option("--tags <tags>", "Comma-separated tags").option("--auto <binary>", "Auto-detect subcommands from CLI binary").option("--from-help <binary>", "Parse --help to generate skill definition").option("--scan", "Scan PATH for all cli-anything-* binaries").option("--dry-run", "Preview without writing").option("-y, --yes", "Skip confirmation prompts").action(async (opts) => {
1747
+ const { runSkillWrap } = await import("../skill-wrap-IAZHOYM4.js");
1748
+ await runSkillWrap(opts);
1749
+ });
1697
1750
  var did = program.command("did").description("Decentralized Identity commands");
1698
1751
  did.command("show").description("Display local agent DID identifiers").option("--json", "Output as JSON").action(async (opts) => {
1699
- const { didShow, didShowJson } = await import("../did-action-MQLDT4RF.js");
1752
+ const { didShow, didShowJson } = await import("../did-action-3PNFYLX2.js");
1700
1753
  if (opts.json) {
1701
1754
  await didShowJson();
1702
1755
  } else {
@@ -1705,24 +1758,45 @@ did.command("show").description("Display local agent DID identifiers").option("-
1705
1758
  });
1706
1759
  var vc = program.command("vc").description("Verifiable Credentials commands");
1707
1760
  vc.command("show").description("Display Verifiable Credentials for this agent").option("--json", "Output as JSON").action(async (opts) => {
1708
- const { vcShow } = await import("../vc-action-SUD7TMN2.js");
1761
+ const { vcShow } = await import("../vc-action-TSAIABUM.js");
1709
1762
  await vcShow(opts);
1710
1763
  });
1711
1764
  var credits = program.command("credits").description("Credit balance and transaction management");
1712
1765
  credits.command("sync").description("Sync local credit balance from remote registry").action(async () => {
1713
- const { creditsSync } = await import("../credits-action-24EPLUHG.js");
1766
+ const { creditsSync } = await import("../credits-action-N3WB4WSI.js");
1714
1767
  await creditsSync();
1715
1768
  });
1716
1769
  credits.command("history").description("Show recent credit transactions").option("--limit <n>", "Number of transactions to show", "20").option("--json", "Output as JSON").action(async (opts) => {
1717
- const { creditsHistory } = await import("../credits-action-24EPLUHG.js");
1770
+ const { creditsHistory } = await import("../credits-action-N3WB4WSI.js");
1718
1771
  await creditsHistory(opts);
1719
1772
  });
1720
1773
  credits.command("grant <agent_id> <amount>").description("Admin: grant credits to an agent (requires ADMIN_TOKEN)").action(async (agentId, amount) => {
1721
- const { creditsGrant } = await import("../credits-action-24EPLUHG.js");
1774
+ const { creditsGrant } = await import("../credits-action-N3WB4WSI.js");
1722
1775
  await creditsGrant(agentId, amount);
1723
1776
  });
1777
+ var sessionCmd = program.command("session").description("Manage interactive agent-to-agent sessions");
1778
+ sessionCmd.command("open <card_id>").description("Open an interactive session with a provider agent").requiredOption("--skill <skill_id>", "Skill ID to use").requiredOption("--budget <credits>", "Maximum credits for this session", parseInt).requiredOption("--message <msg>", "Initial message to send").option("--pricing <model>", "Pricing model: per_message, per_minute, per_session", "per_message").action(async (cardId, opts) => {
1779
+ const { sessionOpen } = await import("../session-action-67J57636.js");
1780
+ await sessionOpen(cardId, opts);
1781
+ });
1782
+ sessionCmd.command("send <session_id> <message>").description("Send a message within an active session").action(async (sessionId, message) => {
1783
+ const { sessionSend } = await import("../session-action-67J57636.js");
1784
+ await sessionSend(sessionId, message);
1785
+ });
1786
+ sessionCmd.command("end <session_id>").description("End an active session").option("--reason <reason>", "End reason: completed, cancelled", "completed").action(async (sessionId, opts) => {
1787
+ const { sessionEnd } = await import("../session-action-67J57636.js");
1788
+ await sessionEnd(sessionId, opts.reason);
1789
+ });
1790
+ sessionCmd.command("list").description("List active sessions").action(async () => {
1791
+ const { sessionList } = await import("../session-action-67J57636.js");
1792
+ await sessionList();
1793
+ });
1794
+ sessionCmd.command("status <session_id>").description("Show session details").action(async (sessionId) => {
1795
+ const { sessionStatus } = await import("../session-action-67J57636.js");
1796
+ await sessionStatus(sessionId);
1797
+ });
1724
1798
  program.command("mcp-server").description("Start an MCP (Model Context Protocol) server for IDE integration").action(async () => {
1725
- const { startMcpServer } = await import("../server-TGV2OPUM.js");
1799
+ const { startMcpServer } = await import("../server-N4BJW4TS.js");
1726
1800
  await startMcpServer();
1727
1801
  });
1728
1802
  await program.parseAsync(process.argv);
@@ -9,6 +9,7 @@ import {
9
9
  } from "./chunk-W6LOCBWQ.js";
10
10
  import "./chunk-YNBZLXYS.js";
11
11
  import "./chunk-UVCNMRPS.js";
12
+ import "./chunk-3RG5ZIWI.js";
12
13
  export {
13
14
  REQUEST_TIMEOUT_EXPECTED_MULTIPLIER,
14
15
  REQUEST_TIMEOUT_FALLBACK_MS,
@@ -1,26 +1,29 @@
1
1
  import {
2
2
  conductAction
3
- } from "./chunk-I3RRMAAD.js";
4
- import "./chunk-SMQDT7CT.js";
3
+ } from "./chunk-PIO2FMX4.js";
4
+ import "./chunk-UXL7DV7P.js";
5
5
  import "./chunk-3MJT4PZG.js";
6
- import "./chunk-UQCQ2JCG.js";
7
- import "./chunk-YJ3RGKPU.js";
6
+ import "./chunk-JJHQAZWE.js";
8
7
  import "./chunk-5PV5YCSN.js";
8
+ import "./chunk-QG2LLVXP.js";
9
9
  import "./chunk-G5WKW3ED.js";
10
- import "./chunk-ERT77HKY.js";
10
+ import "./chunk-4M6IAIVK.js";
11
11
  import "./chunk-ELFGYC22.js";
12
- import "./chunk-QEDVPJKP.js";
13
- import "./chunk-Z4IDXMSP.js";
14
- import "./chunk-UR3MISL2.js";
15
- import "./chunk-3466S65P.js";
12
+ import "./chunk-4DBSSFHG.js";
13
+ import "./chunk-D7NH6YLM.js";
14
+ import "./chunk-UPNREF4L.js";
15
+ import "./chunk-Q5OFZ2JR.js";
16
+ import "./chunk-QXRNW4OJ.js";
16
17
  import "./chunk-W6LOCBWQ.js";
17
18
  import "./chunk-YNBZLXYS.js";
18
19
  import "./chunk-YDGXKH2T.js";
19
20
  import "./chunk-3YQ73ZM6.js";
20
21
  import "./chunk-3XPBFF6H.js";
21
- import "./chunk-NLQCHO7N.js";
22
+ import "./chunk-JKD6QRUD.js";
22
23
  import "./chunk-J4RFJVXI.js";
23
24
  import "./chunk-UVCNMRPS.js";
25
+ import "./chunk-4XTYT4JW.js";
26
+ import "./chunk-3RG5ZIWI.js";
24
27
 
25
28
  // src/mcp/tools/conduct.ts
26
29
  import { z } from "zod";
@@ -0,0 +1,29 @@
1
+ import {
2
+ conductAction
3
+ } from "./chunk-PIO2FMX4.js";
4
+ import "./chunk-UXL7DV7P.js";
5
+ import "./chunk-3MJT4PZG.js";
6
+ import "./chunk-JJHQAZWE.js";
7
+ import "./chunk-5PV5YCSN.js";
8
+ import "./chunk-QG2LLVXP.js";
9
+ import "./chunk-G5WKW3ED.js";
10
+ import "./chunk-4M6IAIVK.js";
11
+ import "./chunk-ELFGYC22.js";
12
+ import "./chunk-4DBSSFHG.js";
13
+ import "./chunk-D7NH6YLM.js";
14
+ import "./chunk-UPNREF4L.js";
15
+ import "./chunk-Q5OFZ2JR.js";
16
+ import "./chunk-QXRNW4OJ.js";
17
+ import "./chunk-W6LOCBWQ.js";
18
+ import "./chunk-YNBZLXYS.js";
19
+ import "./chunk-YDGXKH2T.js";
20
+ import "./chunk-3YQ73ZM6.js";
21
+ import "./chunk-3XPBFF6H.js";
22
+ import "./chunk-JKD6QRUD.js";
23
+ import "./chunk-J4RFJVXI.js";
24
+ import "./chunk-UVCNMRPS.js";
25
+ import "./chunk-4XTYT4JW.js";
26
+ import "./chunk-3RG5ZIWI.js";
27
+ export {
28
+ conductAction
29
+ };
@@ -7,24 +7,27 @@ import {
7
7
  matchSubTasks,
8
8
  orchestrate,
9
9
  validateAndNormalizeSubtasks
10
- } from "./chunk-SLZBE2I5.js";
10
+ } from "./chunk-DBO2335D.js";
11
+ import "./chunk-XL5XD3IG.js";
12
+ import "./chunk-6QMDJVMS.js";
11
13
  import {
12
14
  requestCapability
13
15
  } from "./chunk-W6LOCBWQ.js";
14
- import "./chunk-DYJ7YGBM.js";
15
- import "./chunk-HLUEOLSZ.js";
16
- import "./chunk-BNS76U6K.js";
17
- import "./chunk-6QMDJVMS.js";
18
16
  import "./chunk-YNBZLXYS.js";
17
+ import "./chunk-WOVESOQ7.js";
18
+ import "./chunk-QXRNW4OJ.js";
19
+ import "./chunk-HLUEOLSZ.js";
19
20
  import "./chunk-IVOYM3WG.js";
20
21
  import {
21
22
  getCardsByCapabilityType,
22
23
  getCardsBySkillCapability
23
- } from "./chunk-PG3CLSAH.js";
24
+ } from "./chunk-VJ2Q33AP.js";
25
+ import "./chunk-4XTYT4JW.js";
24
26
  import "./chunk-EE3V3DXK.js";
25
27
  import {
26
28
  AgentBnBError
27
29
  } from "./chunk-UVCNMRPS.js";
30
+ import "./chunk-3RG5ZIWI.js";
28
31
 
29
32
  // src/conductor/team-formation.ts
30
33
  import { randomUUID } from "crypto";