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.
- package/dist/{card-NKQFB3HD.js → card-NQHAGTQQ.js} +3 -1
- package/dist/{card-6KL6L4GF.js → card-VVT3XBOI.js} +3 -1
- package/dist/chunk-3RG5ZIWI.js +10 -0
- package/dist/{chunk-76YORWFJ.js → chunk-3Y76PHEY.js} +62 -5
- package/dist/{chunk-QEDVPJKP.js → chunk-4DBSSFHG.js} +20 -16
- package/dist/chunk-4HLGFR72.js +155 -0
- package/dist/{chunk-ERT77HKY.js → chunk-4M6IAIVK.js} +2 -2
- package/dist/{chunk-FUGWPKXN.js → chunk-4UIUIHST.js} +1 -1
- package/dist/chunk-4XTYT4JW.js +147 -0
- package/dist/{chunk-2SOHHB2O.js → chunk-AR7Z3EQB.js} +34 -11
- package/dist/{chunk-Z4IDXMSP.js → chunk-D7NH6YLM.js} +6 -1
- package/dist/{chunk-SLZBE2I5.js → chunk-DBO2335D.js} +17 -12
- package/dist/{chunk-N3TXLBGK.js → chunk-GAZCZCAZ.js} +1 -1
- package/dist/{chunk-UQCQ2JCG.js → chunk-JJHQAZWE.js} +4 -4
- package/dist/{chunk-NLQCHO7N.js → chunk-JKD6QRUD.js} +3 -134
- package/dist/{chunk-74OZGLIT.js → chunk-LENX5NUW.js} +1 -1
- package/dist/{chunk-I3RRMAAD.js → chunk-PIO2FMX4.js} +5 -5
- package/dist/{chunk-77HAL2ZL.js → chunk-PYZGF5QH.js} +60 -3
- package/dist/chunk-Q5OFZ2JR.js +292 -0
- package/dist/{chunk-YJ3RGKPU.js → chunk-QG2LLVXP.js} +6 -2
- package/dist/chunk-QXRNW4OJ.js +35 -0
- package/dist/{chunk-UR3MISL2.js → chunk-UPNREF4L.js} +1 -1
- package/dist/{chunk-SMQDT7CT.js → chunk-UXL7DV7P.js} +7 -3
- package/dist/{chunk-PG3CLSAH.js → chunk-VJ2Q33AP.js} +3 -134
- package/dist/{chunk-DYJ7YGBM.js → chunk-WOVESOQ7.js} +237 -124
- package/dist/{chunk-BNS76U6K.js → chunk-XL5XD3IG.js} +23 -17
- package/dist/{chunk-FMKBCO2Q.js → chunk-ZYOMPJGG.js} +2 -2
- package/dist/cli/index.js +117 -48
- package/dist/{client-YB3IYO3S.js → client-XOSXFC7Q.js} +1 -0
- package/dist/{conduct-URYWMA5T.js → conduct-6C6JWZKZ.js} +13 -10
- package/dist/conduct-VSSHJHVH.js +29 -0
- package/dist/{conductor-mode-NRSVP2AU.js → conductor-mode-KKPSNN7V.js} +9 -6
- package/dist/{conductor-mode-2UFN6BUL.js → conductor-mode-NKHIZG4N.js} +17 -14
- package/dist/{config-IRWLG6IW.js → config-ZFWBAGDU.js} +1 -0
- package/dist/{credits-action-24EPLUHG.js → credits-action-N3WB4WSI.js} +5 -3
- package/dist/{daemon-A7DXZIQW.js → daemon-OM2K3U7J.js} +1 -0
- package/dist/{did-action-MQLDT4RF.js → did-action-3PNFYLX2.js} +1 -0
- package/dist/{execute-DNRNU3HM.js → execute-IEQ3RV7I.js} +6 -3
- package/dist/{execute-2Z3XIUHR.js → execute-QHP4KUV2.js} +10 -7
- package/dist/index.d.ts +412 -275
- package/dist/index.js +886 -282
- package/dist/{openclaw-setup-WA625DZA.js → openclaw-setup-PKGFB4IH.js} +19 -16
- package/dist/{openclaw-skills-76ZWXHFM.js → openclaw-skills-5VJDA6SX.js} +7 -6
- package/dist/{peers-F2EWUMVQ.js → peers-7BMU2775.js} +1 -0
- package/dist/{peers-CJ7T4RJO.js → peers-IOVCBWAI.js} +1 -0
- package/dist/{process-guard-QDBIOLY4.js → process-guard-6324CZDC.js} +1 -0
- package/dist/{publish-capability-FOCHYNYE.js → publish-capability-CHMPZ6W3.js} +4 -2
- package/dist/{reliability-metrics-JSOY3PNW.js → reliability-metrics-22JTZGB4.js} +1 -0
- package/dist/{reliability-metrics-KKUFFVB6.js → reliability-metrics-MIJ3TJWL.js} +1 -0
- package/dist/{request-KPKWBL5W.js → request-6TBVP3GR.js} +12 -9
- package/dist/request-log-2D253WML.js +17 -0
- package/dist/request-log-SIGTGOFA.js +16 -0
- package/dist/{scanner-GP4AOCW6.js → scanner-EFU6NBEJ.js} +1 -0
- package/dist/{schema-7BSSLZ4S.js → schema-FABVZKSI.js} +1 -0
- package/dist/{serve-skill-QSUIK3ZF.js → serve-skill-BRUHUDRA.js} +12 -9
- package/dist/{server-OCCAVVDF.js → server-N4BJW4TS.js} +15 -8
- package/dist/{service-coordinator-4JAUUNUL.js → service-coordinator-M2CBDEUQ.js} +539 -50
- package/dist/session-5AIRM7YF.js +144 -0
- package/dist/session-action-67J57636.js +131 -0
- package/dist/{skill-config-5O2VR546.js → skill-config-VYNF7BCY.js} +1 -0
- package/dist/{skill-wrap-YLCJMFEJ.js → skill-wrap-IAZHOYM4.js} +1 -0
- package/dist/skills/agentbnb/bootstrap.js +564 -75
- package/dist/{store-S22F3I7G.js → store-A4YPEHDV.js} +3 -1
- package/dist/{vc-action-SUD7TMN2.js → vc-action-TSAIABUM.js} +1 -0
- package/dist/websocket-client-FCPZOE4S.js +9 -0
- package/dist/websocket-client-RT4KLJL4.js +8 -0
- package/dist/{writer-4QJ3U3WE.js → writer-V7JBWKKZ.js} +1 -0
- package/package.json +1 -1
- package/dist/chunk-3466S65P.js +0 -179
- package/dist/conduct-UAEEMVFD.js +0 -26
- package/dist/websocket-client-5CRE36Z5.js +0 -7
- 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-
|
|
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
|
|
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
|
/**
|
|
@@ -7,21 +7,21 @@ import {
|
|
|
7
7
|
} from "./chunk-G5WKW3ED.js";
|
|
8
8
|
import {
|
|
9
9
|
resolveTargetCapability
|
|
10
|
-
} from "./chunk-
|
|
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-
|
|
16
|
+
} from "./chunk-4DBSSFHG.js";
|
|
17
17
|
import {
|
|
18
18
|
holdEscrow,
|
|
19
19
|
releaseEscrow,
|
|
20
20
|
settleEscrow
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-D7NH6YLM.js";
|
|
22
22
|
import {
|
|
23
23
|
RelayClient
|
|
24
|
-
} from "./chunk-
|
|
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,
|
|
@@ -4,16 +4,16 @@ import {
|
|
|
4
4
|
decompose,
|
|
5
5
|
matchSubTasks,
|
|
6
6
|
orchestrate
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-UXL7DV7P.js";
|
|
8
8
|
import {
|
|
9
9
|
BudgetManager
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-QG2LLVXP.js";
|
|
11
11
|
import {
|
|
12
12
|
openCreditDb
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-D7NH6YLM.js";
|
|
14
14
|
import {
|
|
15
15
|
RelayClient
|
|
16
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
/**
|