agentbnb 9.0.3 → 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 +117 -48
  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-OCCAVVDF.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-YLCJMFEJ.js → skill-wrap-IAZHOYM4.js} +1 -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
@@ -1,3 +1,12 @@
1
+ import {
2
+ fetchRemoteCards,
3
+ getBalance,
4
+ holdEscrow,
5
+ releaseEscrow,
6
+ resolveTargetCapability,
7
+ searchCards,
8
+ settleEscrow
9
+ } from "./chunk-XL5XD3IG.js";
1
10
  import {
2
11
  requestCapability,
3
12
  requestCapabilityBatch,
@@ -5,19 +14,13 @@ import {
5
14
  } from "./chunk-W6LOCBWQ.js";
6
15
  import {
7
16
  RelayClient
8
- } from "./chunk-DYJ7YGBM.js";
17
+ } from "./chunk-WOVESOQ7.js";
18
+ import {
19
+ loadCoreConfig
20
+ } from "./chunk-QXRNW4OJ.js";
9
21
  import {
10
22
  findPeer
11
23
  } from "./chunk-HLUEOLSZ.js";
12
- import {
13
- fetchRemoteCards,
14
- getBalance,
15
- holdEscrow,
16
- releaseEscrow,
17
- resolveTargetCapability,
18
- searchCards,
19
- settleEscrow
20
- } from "./chunk-BNS76U6K.js";
21
24
  import {
22
25
  resolveCanonicalIdentity
23
26
  } from "./chunk-EE3V3DXK.js";
@@ -854,7 +857,8 @@ async function matchSubTasks(opts) {
854
857
  }
855
858
 
856
859
  // src/conductor/budget-controller.ts
857
- var ORCHESTRATION_FEE = 5;
860
+ var coreConductor = loadCoreConfig("economics");
861
+ var ORCHESTRATION_FEE = coreConductor?.conductor?.orchestration_fee ?? 5;
858
862
  var BudgetController = class {
859
863
  /**
860
864
  * Creates a new BudgetController.
@@ -921,8 +925,9 @@ var BudgetController = class {
921
925
  };
922
926
 
923
927
  // src/credit/budget.ts
928
+ var coreBudget = loadCoreConfig("economics");
924
929
  var DEFAULT_BUDGET_CONFIG = {
925
- reserve_credits: 20
930
+ reserve_credits: coreBudget?.budget_reserve_credits ?? 20
926
931
  };
927
932
  var BudgetManager = class {
928
933
  /**
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  insertCard
3
- } from "./chunk-NLQCHO7N.js";
3
+ } from "./chunk-JKD6QRUD.js";
4
4
  import {
5
5
  CapabilityCardSchema
6
6
  } from "./chunk-UVCNMRPS.js";
@@ -7,21 +7,21 @@ import {
7
7
  } from "./chunk-G5WKW3ED.js";
8
8
  import {
9
9
  resolveTargetCapability
10
- } from "./chunk-ERT77HKY.js";
10
+ } from "./chunk-4M6IAIVK.js";
11
11
  import {
12
12
  fetchRemoteCards
13
13
  } from "./chunk-ELFGYC22.js";
14
14
  import {
15
15
  searchCards
16
- } from "./chunk-QEDVPJKP.js";
16
+ } from "./chunk-4DBSSFHG.js";
17
17
  import {
18
18
  holdEscrow,
19
19
  releaseEscrow,
20
20
  settleEscrow
21
- } from "./chunk-Z4IDXMSP.js";
21
+ } from "./chunk-D7NH6YLM.js";
22
22
  import {
23
23
  RelayClient
24
- } from "./chunk-UR3MISL2.js";
24
+ } from "./chunk-UPNREF4L.js";
25
25
  import {
26
26
  requestCapability,
27
27
  requestViaRelay
@@ -7,140 +7,13 @@ import {
7
7
  AnyCardSchema,
8
8
  CapabilityCardSchema
9
9
  } from "./chunk-UVCNMRPS.js";
10
+ import {
11
+ createRequestLogTable
12
+ } from "./chunk-4XTYT4JW.js";
10
13
 
11
14
  // src/registry/store.ts
12
15
  import Database from "better-sqlite3";
13
16
 
14
- // src/registry/request-log.ts
15
- var SINCE_MS = {
16
- "24h": 864e5,
17
- "7d": 6048e5,
18
- "30d": 2592e6
19
- };
20
- function createRequestLogTable(db) {
21
- db.exec(`
22
- CREATE TABLE IF NOT EXISTS request_log (
23
- id TEXT PRIMARY KEY,
24
- card_id TEXT NOT NULL,
25
- card_name TEXT NOT NULL,
26
- requester TEXT NOT NULL,
27
- status TEXT NOT NULL CHECK(status IN ('success', 'failure', 'timeout')),
28
- latency_ms INTEGER NOT NULL,
29
- credits_charged INTEGER NOT NULL,
30
- created_at TEXT NOT NULL
31
- );
32
-
33
- CREATE INDEX IF NOT EXISTS request_log_created_at_idx
34
- ON request_log (created_at DESC);
35
- `);
36
- try {
37
- db.exec("ALTER TABLE request_log ADD COLUMN skill_id TEXT");
38
- } catch {
39
- }
40
- try {
41
- db.exec("ALTER TABLE request_log ADD COLUMN action_type TEXT");
42
- } catch {
43
- }
44
- try {
45
- db.exec("ALTER TABLE request_log ADD COLUMN tier_invoked INTEGER");
46
- } catch {
47
- }
48
- try {
49
- db.exec("ALTER TABLE request_log ADD COLUMN failure_reason TEXT");
50
- } catch {
51
- }
52
- try {
53
- db.exec("ALTER TABLE request_log ADD COLUMN team_id TEXT");
54
- } catch {
55
- }
56
- try {
57
- db.exec("ALTER TABLE request_log ADD COLUMN role TEXT");
58
- } catch {
59
- }
60
- try {
61
- db.exec("ALTER TABLE request_log ADD COLUMN capability_type TEXT");
62
- } catch {
63
- }
64
- }
65
- function insertRequestLog(db, entry) {
66
- const stmt = db.prepare(`
67
- INSERT INTO request_log (id, card_id, card_name, requester, status, latency_ms, credits_charged, created_at, skill_id, action_type, tier_invoked, failure_reason, team_id, role, capability_type)
68
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
69
- `);
70
- stmt.run(
71
- entry.id,
72
- entry.card_id,
73
- entry.card_name,
74
- entry.requester,
75
- entry.status,
76
- entry.latency_ms,
77
- entry.credits_charged,
78
- entry.created_at,
79
- entry.skill_id ?? null,
80
- entry.action_type ?? null,
81
- entry.tier_invoked ?? null,
82
- entry.failure_reason ?? null,
83
- entry.team_id ?? null,
84
- entry.role ?? null,
85
- entry.capability_type ?? null
86
- );
87
- }
88
- function getSkillRequestCount(db, skillId, windowMs) {
89
- const cutoff = new Date(Date.now() - windowMs).toISOString();
90
- const stmt = db.prepare(
91
- `SELECT COUNT(*) as cnt FROM request_log
92
- WHERE skill_id = ? AND created_at >= ? AND status = 'success' AND action_type IS NULL`
93
- );
94
- const row = stmt.get(skillId, cutoff);
95
- return row.cnt;
96
- }
97
- function getActivityFeed(db, limit = 20, since) {
98
- const effectiveLimit = Math.min(limit, 100);
99
- if (since !== void 0) {
100
- const stmt2 = db.prepare(`
101
- SELECT r.id, r.card_name, r.requester, c.owner AS provider,
102
- r.status, r.credits_charged, r.latency_ms, r.created_at, r.action_type
103
- FROM request_log r
104
- LEFT JOIN capability_cards c ON r.card_id = c.id
105
- WHERE (r.action_type IS NULL OR r.action_type IN ('auto_share', 'agent_joined'))
106
- AND r.created_at > ?
107
- ORDER BY r.created_at DESC
108
- LIMIT ?
109
- `);
110
- return stmt2.all(since, effectiveLimit);
111
- }
112
- const stmt = db.prepare(`
113
- SELECT r.id, r.card_name, r.requester, c.owner AS provider,
114
- r.status, r.credits_charged, r.latency_ms, r.created_at, r.action_type
115
- FROM request_log r
116
- LEFT JOIN capability_cards c ON r.card_id = c.id
117
- WHERE (r.action_type IS NULL OR r.action_type IN ('auto_share', 'agent_joined'))
118
- ORDER BY r.created_at DESC
119
- LIMIT ?
120
- `);
121
- return stmt.all(effectiveLimit);
122
- }
123
- function getRequestLog(db, limit = 10, since) {
124
- if (since !== void 0) {
125
- const cutoff = new Date(Date.now() - SINCE_MS[since]).toISOString();
126
- const stmt2 = db.prepare(`
127
- SELECT id, card_id, card_name, requester, status, latency_ms, credits_charged, created_at, skill_id, action_type, tier_invoked, failure_reason, team_id, role, capability_type
128
- FROM request_log
129
- WHERE created_at >= ?
130
- ORDER BY created_at DESC
131
- LIMIT ?
132
- `);
133
- return stmt2.all(cutoff, limit);
134
- }
135
- const stmt = db.prepare(`
136
- SELECT id, card_id, card_name, requester, status, latency_ms, credits_charged, created_at, skill_id, action_type, tier_invoked, failure_reason, team_id, role
137
- FROM request_log
138
- ORDER BY created_at DESC
139
- LIMIT ?
140
- `);
141
- return stmt.all(limit);
142
- }
143
-
144
17
  // src/feedback/store.ts
145
18
  import { randomUUID } from "crypto";
146
19
  function initFeedbackTable(db) {
@@ -835,10 +708,6 @@ export {
835
708
  insertFeedback,
836
709
  getFeedbackForSkill,
837
710
  getFeedbackForProvider,
838
- insertRequestLog,
839
- getSkillRequestCount,
840
- getActivityFeed,
841
- getRequestLog,
842
711
  insertEvolution,
843
712
  getLatestEvolution,
844
713
  getEvolutionHistory,
@@ -10,7 +10,7 @@ import {
10
10
  openCreditDb,
11
11
  releaseEscrow,
12
12
  settleEscrow
13
- } from "./chunk-Z4IDXMSP.js";
13
+ } from "./chunk-D7NH6YLM.js";
14
14
  import {
15
15
  signEscrowReceipt,
16
16
  verifyEscrowReceipt
@@ -4,16 +4,16 @@ import {
4
4
  decompose,
5
5
  matchSubTasks,
6
6
  orchestrate
7
- } from "./chunk-SMQDT7CT.js";
7
+ } from "./chunk-UXL7DV7P.js";
8
8
  import {
9
9
  BudgetManager
10
- } from "./chunk-YJ3RGKPU.js";
10
+ } from "./chunk-QG2LLVXP.js";
11
11
  import {
12
12
  openCreditDb
13
- } from "./chunk-Z4IDXMSP.js";
13
+ } from "./chunk-D7NH6YLM.js";
14
14
  import {
15
15
  RelayClient
16
- } from "./chunk-UR3MISL2.js";
16
+ } from "./chunk-UPNREF4L.js";
17
17
  import {
18
18
  loadPeers
19
19
  } from "./chunk-3YQ73ZM6.js";
@@ -23,7 +23,7 @@ import {
23
23
  import {
24
24
  listCards,
25
25
  openDatabase
26
- } from "./chunk-NLQCHO7N.js";
26
+ } from "./chunk-JKD6QRUD.js";
27
27
 
28
28
  // src/cli/conduct.ts
29
29
  async function conductAction(task, opts) {
@@ -8,7 +8,7 @@ import {
8
8
  releaseEscrow,
9
9
  resolveTargetCapability,
10
10
  settleEscrow
11
- } from "./chunk-BNS76U6K.js";
11
+ } from "./chunk-XL5XD3IG.js";
12
12
  import {
13
13
  canonicalizeCreditOwner
14
14
  } from "./chunk-6QMDJVMS.js";
@@ -25,9 +25,11 @@ import {
25
25
  } from "./chunk-IVOYM3WG.js";
26
26
  import {
27
27
  getCard,
28
- insertRequestLog,
29
28
  updateReputation
30
- } from "./chunk-PG3CLSAH.js";
29
+ } from "./chunk-VJ2Q33AP.js";
30
+ import {
31
+ insertRequestLog
32
+ } from "./chunk-4XTYT4JW.js";
31
33
  import {
32
34
  lookupAgent
33
35
  } from "./chunk-EE3V3DXK.js";
@@ -698,6 +700,26 @@ async function notifyTelegramSkillFailed(opts) {
698
700
  body: JSON.stringify({ chat_id: chatId, text })
699
701
  });
700
702
  }
703
+ async function notifyTelegramSkillReceived(opts) {
704
+ const cfg = loadConfig();
705
+ if (cfg?.provider_gate !== "notify") return;
706
+ const token = cfg.telegram_bot_token ?? process.env["TELEGRAM_BOT_TOKEN"];
707
+ const chatId = cfg.telegram_chat_id ?? process.env["TELEGRAM_CHAT_ID"];
708
+ if (!token || !chatId) return;
709
+ const skillLabel = opts.skillId ? `${opts.skillName} (${opts.skillId})` : opts.skillName;
710
+ const text = [
711
+ "\u{1F4E5} [AgentBnB] Incoming rental request",
712
+ `Skill: ${skillLabel}`,
713
+ `Requester: ${opts.requester}`,
714
+ `Cost: ${opts.cost} credits`,
715
+ `Status: Executing...`
716
+ ].join("\n");
717
+ await fetch(`https://api.telegram.org/bot${token}/sendMessage`, {
718
+ method: "POST",
719
+ headers: { "Content-Type": "application/json" },
720
+ body: JSON.stringify({ chat_id: chatId, text })
721
+ });
722
+ }
701
723
  async function executeCapabilityRequest(opts) {
702
724
  const {
703
725
  registryDb,
@@ -789,6 +811,41 @@ async function executeCapabilityRequest(opts) {
789
811
  return { success: false, error: { code: -32603, message: msg } };
790
812
  }
791
813
  }
814
+ const providerCfg = loadConfig();
815
+ const providerWhitelist = providerCfg?.provider_whitelist ?? [];
816
+ const isWhitelisted = providerWhitelist.includes(requester);
817
+ if (providerCfg?.provider_accepting === false && !isWhitelisted) {
818
+ if (escrowId) releaseEscrow(creditDb, escrowId);
819
+ return { success: false, error: { code: -32098, message: "Provider is not accepting requests" } };
820
+ }
821
+ if (!isWhitelisted) {
822
+ const blacklist = providerCfg?.provider_blacklist ?? [];
823
+ if (blacklist.includes(requester)) {
824
+ if (escrowId) releaseEscrow(creditDb, escrowId);
825
+ return { success: false, error: { code: -32097, message: "Requester is blocked by provider" } };
826
+ }
827
+ }
828
+ if (!isWhitelisted) {
829
+ const dailyLimit = providerCfg?.provider_daily_limit ?? 0;
830
+ if (dailyLimit > 0) {
831
+ const { countTodayExecutions } = await import("./request-log-2D253WML.js");
832
+ const todayCount = countTodayExecutions(registryDb);
833
+ if (todayCount >= dailyLimit) {
834
+ if (escrowId) releaseEscrow(creditDb, escrowId);
835
+ return {
836
+ success: false,
837
+ error: { code: -32099, message: `Provider daily execution limit reached (${dailyLimit}/day)` }
838
+ };
839
+ }
840
+ }
841
+ }
842
+ notifyTelegramSkillReceived({
843
+ skillName: cardName,
844
+ skillId: resolvedSkillId ?? null,
845
+ requester,
846
+ cost: creditsNeeded
847
+ }).catch(() => {
848
+ });
792
849
  const startMs = Date.now();
793
850
  const handleFailure = (status, latencyMs, message, failureReason = "bad_execution") => {
794
851
  if (escrowId) releaseEscrow(creditDb, escrowId);
@@ -0,0 +1,292 @@
1
+ import {
2
+ loadCoreConfig
3
+ } from "./chunk-QXRNW4OJ.js";
4
+
5
+ // src/relay/types.ts
6
+ import { z as z2 } from "zod";
7
+
8
+ // src/session/session-types.ts
9
+ import { z } from "zod";
10
+ var DEFAULT_SESSION_CONFIG = {
11
+ pricing: {
12
+ default_model: "per_message",
13
+ per_message_base_rate: 2,
14
+ per_minute_base_rate: 1,
15
+ per_session_flat_rate: 10,
16
+ max_messages_per_session: 50,
17
+ max_minutes_per_session: 30
18
+ },
19
+ timeouts: {
20
+ idle_timeout_ms: 12e4,
21
+ max_session_duration_ms: 18e5,
22
+ message_timeout_ms: 9e4
23
+ },
24
+ abuse: {
25
+ max_concurrent_sessions_per_agent: 5,
26
+ max_sessions_per_hour: 20,
27
+ min_message_interval_ms: 1e3
28
+ },
29
+ quality: {
30
+ min_provider_reputation_for_session: 0.5,
31
+ auto_refund_on_timeout: true,
32
+ partial_refund_ratio: 0.5
33
+ }
34
+ };
35
+ function loadSessionConfig() {
36
+ const core = loadCoreConfig("session");
37
+ if (!core) return DEFAULT_SESSION_CONFIG;
38
+ return {
39
+ pricing: { ...DEFAULT_SESSION_CONFIG.pricing, ...core.pricing },
40
+ timeouts: { ...DEFAULT_SESSION_CONFIG.timeouts, ...core.timeouts },
41
+ abuse: { ...DEFAULT_SESSION_CONFIG.abuse, ...core.abuse },
42
+ quality: { ...DEFAULT_SESSION_CONFIG.quality, ...core.quality }
43
+ };
44
+ }
45
+ var SessionPricingModelSchema = z.enum(["per_message", "per_minute", "per_session"]);
46
+ var SessionOpenMessageSchema = z.object({
47
+ type: z.literal("session_open"),
48
+ session_id: z.string().uuid(),
49
+ requester_id: z.string().min(1),
50
+ provider_id: z.string().min(1),
51
+ card_id: z.string().min(1),
52
+ skill_id: z.string().min(1),
53
+ budget: z.number().positive(),
54
+ pricing_model: SessionPricingModelSchema.default("per_message"),
55
+ initial_message: z.string().min(1),
56
+ ucan_token: z.string().optional()
57
+ });
58
+ var SessionAckMessageSchema = z.object({
59
+ type: z.literal("session_ack"),
60
+ session_id: z.string(),
61
+ escrow_id: z.string(),
62
+ status: z.literal("open")
63
+ });
64
+ var SessionMessageMessageSchema = z.object({
65
+ type: z.literal("session_message"),
66
+ session_id: z.string().uuid(),
67
+ sender: z.enum(["requester", "provider"]),
68
+ content: z.string().min(1),
69
+ metadata: z.object({
70
+ model: z.string().optional(),
71
+ latency_ms: z.number().optional(),
72
+ tokens_used: z.number().optional()
73
+ }).optional()
74
+ });
75
+ var SessionEndMessageSchema = z.object({
76
+ type: z.literal("session_end"),
77
+ session_id: z.string().uuid(),
78
+ reason: z.enum(["completed", "timeout", "budget_exhausted", "error", "cancelled"]).default("completed"),
79
+ summary: z.string().optional()
80
+ });
81
+ var SessionSettledMessageSchema = z.object({
82
+ type: z.literal("session_settled"),
83
+ session_id: z.string(),
84
+ total_cost: z.number(),
85
+ messages_count: z.number(),
86
+ duration_seconds: z.number(),
87
+ refunded: z.number()
88
+ });
89
+ var SessionErrorMessageSchema = z.object({
90
+ type: z.literal("session_error"),
91
+ session_id: z.string(),
92
+ code: z.string(),
93
+ message: z.string()
94
+ });
95
+ var SESSION_MESSAGE_TYPES = /* @__PURE__ */ new Set([
96
+ "session_open",
97
+ "session_ack",
98
+ "session_message",
99
+ "session_end",
100
+ "session_settled",
101
+ "session_error"
102
+ ]);
103
+
104
+ // src/relay/types.ts
105
+ var RegisterMessageSchema = z2.object({
106
+ type: z2.literal("register"),
107
+ owner: z2.string().min(1),
108
+ /** V8: Cryptographic agent identity. When present, used as the canonical key. */
109
+ agent_id: z2.string().optional(),
110
+ /** V8 Phase 3: Server identifier for multi-agent delegation. */
111
+ server_id: z2.string().optional(),
112
+ token: z2.string().min(1),
113
+ card: z2.record(z2.unknown()),
114
+ // CapabilityCard (validated separately)
115
+ cards: z2.array(z2.record(z2.unknown())).optional(),
116
+ // Additional cards (e.g., conductor card)
117
+ /** V8 Phase 3: Additional agents served by this server (multi-agent registration). */
118
+ agents: z2.array(z2.object({
119
+ agent_id: z2.string().min(1),
120
+ display_name: z2.string().min(1),
121
+ cards: z2.array(z2.record(z2.unknown())),
122
+ delegation_token: z2.record(z2.unknown()).optional()
123
+ })).optional()
124
+ });
125
+ var RegisteredMessageSchema = z2.object({
126
+ type: z2.literal("registered"),
127
+ agent_id: z2.string()
128
+ });
129
+ var RelayRequestMessageSchema = z2.object({
130
+ type: z2.literal("relay_request"),
131
+ id: z2.string().uuid(),
132
+ target_owner: z2.string().min(1),
133
+ /** V8: Target agent's cryptographic identity. Preferred over target_owner. */
134
+ target_agent_id: z2.string().optional(),
135
+ card_id: z2.string(),
136
+ skill_id: z2.string().optional(),
137
+ params: z2.record(z2.unknown()).default({}),
138
+ requester: z2.string().optional(),
139
+ escrow_receipt: z2.record(z2.unknown()).optional(),
140
+ /** Optional UCAN token for capability delegation. */
141
+ ucan_token: z2.string().optional()
142
+ });
143
+ var IncomingRequestMessageSchema = z2.object({
144
+ type: z2.literal("incoming_request"),
145
+ id: z2.string().uuid(),
146
+ from_owner: z2.string().min(1),
147
+ card_id: z2.string(),
148
+ skill_id: z2.string().optional(),
149
+ params: z2.record(z2.unknown()).default({}),
150
+ requester: z2.string().optional(),
151
+ escrow_receipt: z2.record(z2.unknown()).optional(),
152
+ /** Optional UCAN token for capability delegation. */
153
+ ucan_token: z2.string().optional()
154
+ });
155
+ var RelayResponseMessageSchema = z2.object({
156
+ type: z2.literal("relay_response"),
157
+ id: z2.string().uuid(),
158
+ result: z2.unknown().optional(),
159
+ error: z2.object({
160
+ code: z2.number(),
161
+ message: z2.string()
162
+ }).optional()
163
+ });
164
+ var ResponseMessageSchema = z2.object({
165
+ type: z2.literal("response"),
166
+ id: z2.string().uuid(),
167
+ result: z2.unknown().optional(),
168
+ error: z2.object({
169
+ code: z2.number(),
170
+ message: z2.string()
171
+ }).optional()
172
+ });
173
+ var ErrorMessageSchema = z2.object({
174
+ type: z2.literal("error"),
175
+ code: z2.string(),
176
+ message: z2.string(),
177
+ request_id: z2.string().optional()
178
+ });
179
+ var RelayProgressMessageSchema = z2.object({
180
+ type: z2.literal("relay_progress"),
181
+ id: z2.string().uuid(),
182
+ // request ID this progress relates to
183
+ progress: z2.number().min(0).max(100).optional(),
184
+ // optional percentage
185
+ message: z2.string().optional()
186
+ // optional status message
187
+ });
188
+ var RelayStartedMessageSchema = z2.object({
189
+ type: z2.literal("relay_started"),
190
+ id: z2.string().uuid(),
191
+ message: z2.string().optional()
192
+ });
193
+ var HeartbeatMessageSchema = z2.object({
194
+ type: z2.literal("heartbeat"),
195
+ owner: z2.string().min(1),
196
+ capacity: z2.object({
197
+ current_load: z2.number(),
198
+ max_concurrent: z2.number(),
199
+ queue_depth: z2.number()
200
+ }),
201
+ self_summary: z2.object({
202
+ capabilities: z2.array(z2.string()),
203
+ success_rate: z2.number(),
204
+ credit_balance: z2.number(),
205
+ total_completed: z2.number(),
206
+ provider_number: z2.number(),
207
+ reliability: z2.object({
208
+ current_streak: z2.number(),
209
+ repeat_hire_rate: z2.number(),
210
+ avg_feedback: z2.number()
211
+ })
212
+ })
213
+ });
214
+ var EscrowHoldMessageSchema = z2.object({
215
+ type: z2.literal("escrow_hold"),
216
+ consumer_agent_id: z2.string().min(1),
217
+ provider_agent_id: z2.string().min(1),
218
+ skill_id: z2.string().min(1),
219
+ amount: z2.number().positive(),
220
+ request_id: z2.string().uuid(),
221
+ signature: z2.string().optional(),
222
+ public_key: z2.string().optional()
223
+ });
224
+ var EscrowHoldConfirmedMessageSchema = z2.object({
225
+ type: z2.literal("escrow_hold_confirmed"),
226
+ request_id: z2.string(),
227
+ escrow_id: z2.string(),
228
+ hold_amount: z2.number(),
229
+ consumer_remaining: z2.number()
230
+ });
231
+ var EscrowSettleMessageSchema = z2.object({
232
+ type: z2.literal("escrow_settle"),
233
+ escrow_id: z2.string().min(1),
234
+ request_id: z2.string().uuid(),
235
+ success: z2.boolean(),
236
+ failure_reason: z2.enum(["bad_execution", "overload", "timeout", "auth_error", "not_found"]).optional(),
237
+ result_hash: z2.string().optional(),
238
+ signature: z2.string().optional(),
239
+ public_key: z2.string().optional(),
240
+ consumer_agent_id: z2.string().optional()
241
+ });
242
+ var EscrowSettledMessageSchema = z2.object({
243
+ type: z2.literal("escrow_settled"),
244
+ escrow_id: z2.string(),
245
+ request_id: z2.string(),
246
+ provider_earned: z2.number(),
247
+ network_fee: z2.number(),
248
+ consumer_remaining: z2.number(),
249
+ provider_balance: z2.number()
250
+ });
251
+ var BalanceSyncMessageSchema = z2.object({
252
+ type: z2.literal("balance_sync"),
253
+ agent_id: z2.string().min(1)
254
+ });
255
+ var BalanceSyncResponseMessageSchema = z2.object({
256
+ type: z2.literal("balance_sync_response"),
257
+ agent_id: z2.string(),
258
+ balance: z2.number()
259
+ });
260
+ var RelayMessageSchema = z2.discriminatedUnion("type", [
261
+ RegisterMessageSchema,
262
+ RegisteredMessageSchema,
263
+ RelayRequestMessageSchema,
264
+ IncomingRequestMessageSchema,
265
+ RelayResponseMessageSchema,
266
+ ResponseMessageSchema,
267
+ ErrorMessageSchema,
268
+ RelayProgressMessageSchema,
269
+ RelayStartedMessageSchema,
270
+ HeartbeatMessageSchema,
271
+ EscrowHoldMessageSchema,
272
+ EscrowHoldConfirmedMessageSchema,
273
+ EscrowSettleMessageSchema,
274
+ EscrowSettledMessageSchema,
275
+ BalanceSyncMessageSchema,
276
+ BalanceSyncResponseMessageSchema,
277
+ SessionOpenMessageSchema,
278
+ SessionAckMessageSchema,
279
+ SessionMessageMessageSchema,
280
+ SessionEndMessageSchema,
281
+ SessionSettledMessageSchema,
282
+ SessionErrorMessageSchema
283
+ ]);
284
+
285
+ export {
286
+ loadSessionConfig,
287
+ SessionOpenMessageSchema,
288
+ SessionMessageMessageSchema,
289
+ SessionEndMessageSchema,
290
+ SESSION_MESSAGE_TYPES,
291
+ RelayMessageSchema
292
+ };
@@ -1,10 +1,14 @@
1
1
  import {
2
2
  getBalance
3
- } from "./chunk-Z4IDXMSP.js";
3
+ } from "./chunk-D7NH6YLM.js";
4
+ import {
5
+ loadCoreConfig
6
+ } from "./chunk-QXRNW4OJ.js";
4
7
 
5
8
  // src/credit/budget.ts
9
+ var coreBudget = loadCoreConfig("economics");
6
10
  var DEFAULT_BUDGET_CONFIG = {
7
- reserve_credits: 20
11
+ reserve_credits: coreBudget?.budget_reserve_credits ?? 20
8
12
  };
9
13
  var BudgetManager = class {
10
14
  /**