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
@@ -0,0 +1,144 @@
1
+ import "./chunk-3RG5ZIWI.js";
2
+
3
+ // src/mcp/tools/session.ts
4
+ import { z } from "zod";
5
+ var sessionOpenInputSchema = {
6
+ provider_id: z.string().describe("Provider agent ID or owner to connect to"),
7
+ card_id: z.string().describe("Capability card ID of the provider"),
8
+ skill_id: z.string().describe("Skill ID to use for the session"),
9
+ budget: z.number().positive().describe("Maximum credits for this session"),
10
+ message: z.string().describe("Initial message to send to the provider"),
11
+ pricing_model: z.enum(["per_message", "per_minute", "per_session"]).optional().describe("Pricing model (default: per_message)")
12
+ };
13
+ async function handleSessionOpen(args, ctx) {
14
+ if (!ctx.relayClient) {
15
+ return { content: [{ type: "text", text: JSON.stringify({ error: "Not connected to relay. Run agentbnb serve first." }) }] };
16
+ }
17
+ try {
18
+ const sessionId = crypto.randomUUID();
19
+ const ws = ctx.relayClient.ws;
20
+ if (!ws) {
21
+ return { content: [{ type: "text", text: JSON.stringify({ error: "WebSocket not available on relay client." }) }] };
22
+ }
23
+ ws.send(JSON.stringify({
24
+ type: "session_open",
25
+ session_id: sessionId,
26
+ requester_id: ctx.identity.agent_id ?? ctx.identity.owner,
27
+ provider_id: args.provider_id,
28
+ card_id: args.card_id,
29
+ skill_id: args.skill_id,
30
+ budget: args.budget,
31
+ pricing_model: args.pricing_model ?? "per_message",
32
+ initial_message: args.message
33
+ }));
34
+ return {
35
+ content: [{
36
+ type: "text",
37
+ text: JSON.stringify({
38
+ session_id: sessionId,
39
+ status: "opening",
40
+ provider_id: args.provider_id,
41
+ skill_id: args.skill_id,
42
+ budget: args.budget,
43
+ message: "Session open request sent. Listen for session_ack and session_message responses."
44
+ })
45
+ }]
46
+ };
47
+ } catch (err) {
48
+ const message = err instanceof Error ? err.message : String(err);
49
+ return { content: [{ type: "text", text: JSON.stringify({ error: message }) }] };
50
+ }
51
+ }
52
+ function registerSessionOpenTool(server, ctx) {
53
+ server.registerTool("agentbnb_session_open", {
54
+ description: "Open an interactive session with a provider agent for multi-turn conversation. Returns a session_id to use with session_send and session_end.",
55
+ inputSchema: sessionOpenInputSchema
56
+ }, async (args) => handleSessionOpen(args, ctx));
57
+ }
58
+ var sessionSendInputSchema = {
59
+ session_id: z.string().describe("Session ID from session_open"),
60
+ message: z.string().describe("Message to send to the provider")
61
+ };
62
+ async function handleSessionSend(args, ctx) {
63
+ if (!ctx.relayClient) {
64
+ return { content: [{ type: "text", text: JSON.stringify({ error: "Not connected to relay." }) }] };
65
+ }
66
+ try {
67
+ const ws = ctx.relayClient.ws;
68
+ if (!ws) {
69
+ return { content: [{ type: "text", text: JSON.stringify({ error: "WebSocket not available." }) }] };
70
+ }
71
+ ws.send(JSON.stringify({
72
+ type: "session_message",
73
+ session_id: args.session_id,
74
+ sender: "requester",
75
+ content: args.message
76
+ }));
77
+ return {
78
+ content: [{
79
+ type: "text",
80
+ text: JSON.stringify({
81
+ session_id: args.session_id,
82
+ status: "sent",
83
+ message: "Message sent. Listen for session_message response from provider."
84
+ })
85
+ }]
86
+ };
87
+ } catch (err) {
88
+ const message = err instanceof Error ? err.message : String(err);
89
+ return { content: [{ type: "text", text: JSON.stringify({ error: message }) }] };
90
+ }
91
+ }
92
+ function registerSessionSendTool(server, ctx) {
93
+ server.registerTool("agentbnb_session_send", {
94
+ description: "Send a message within an active session. The provider will respond asynchronously.",
95
+ inputSchema: sessionSendInputSchema
96
+ }, async (args) => handleSessionSend(args, ctx));
97
+ }
98
+ var sessionEndInputSchema = {
99
+ session_id: z.string().describe("Session ID to end"),
100
+ reason: z.enum(["completed", "cancelled"]).optional().describe("Reason for ending (default: completed)")
101
+ };
102
+ async function handleSessionEnd(args, ctx) {
103
+ if (!ctx.relayClient) {
104
+ return { content: [{ type: "text", text: JSON.stringify({ error: "Not connected to relay." }) }] };
105
+ }
106
+ try {
107
+ const ws = ctx.relayClient.ws;
108
+ if (!ws) {
109
+ return { content: [{ type: "text", text: JSON.stringify({ error: "WebSocket not available." }) }] };
110
+ }
111
+ ws.send(JSON.stringify({
112
+ type: "session_end",
113
+ session_id: args.session_id,
114
+ reason: args.reason ?? "completed"
115
+ }));
116
+ return {
117
+ content: [{
118
+ type: "text",
119
+ text: JSON.stringify({
120
+ session_id: args.session_id,
121
+ status: "ending",
122
+ message: "Session end request sent. Listen for session_settled response."
123
+ })
124
+ }]
125
+ };
126
+ } catch (err) {
127
+ const message = err instanceof Error ? err.message : String(err);
128
+ return { content: [{ type: "text", text: JSON.stringify({ error: message }) }] };
129
+ }
130
+ }
131
+ function registerSessionEndTool(server, ctx) {
132
+ server.registerTool("agentbnb_session_end", {
133
+ description: "End an active session. Credits will be settled and any unused budget refunded.",
134
+ inputSchema: sessionEndInputSchema
135
+ }, async (args) => handleSessionEnd(args, ctx));
136
+ }
137
+ export {
138
+ handleSessionEnd,
139
+ handleSessionOpen,
140
+ handleSessionSend,
141
+ registerSessionEndTool,
142
+ registerSessionOpenTool,
143
+ registerSessionSendTool
144
+ };
@@ -0,0 +1,131 @@
1
+ import {
2
+ ensureIdentity
3
+ } from "./chunk-5CC6O6SO.js";
4
+ import "./chunk-YNBZLXYS.js";
5
+ import {
6
+ getConfigDir,
7
+ loadConfig
8
+ } from "./chunk-3XPBFF6H.js";
9
+ import "./chunk-UVCNMRPS.js";
10
+ import "./chunk-3RG5ZIWI.js";
11
+
12
+ // src/cli/session-action.ts
13
+ import { randomUUID } from "crypto";
14
+ import { createInterface } from "readline";
15
+ async function sessionOpen(cardId, opts) {
16
+ const config = loadConfig();
17
+ if (!config || !config.registry) {
18
+ console.error("Error: No registry configured. Run `agentbnb init` first.");
19
+ process.exit(1);
20
+ }
21
+ const configDir = getConfigDir();
22
+ const identity = ensureIdentity(configDir, config.owner);
23
+ const agentId = identity.agent_id ?? identity.owner;
24
+ const relayUrl = config.registry.replace(/^http/, "ws") + "/ws";
25
+ const WebSocket = (await import("ws")).default;
26
+ const ws = new WebSocket(relayUrl);
27
+ await new Promise((resolve, reject) => {
28
+ ws.on("open", () => {
29
+ ws.send(JSON.stringify({
30
+ type: "register",
31
+ owner: identity.owner,
32
+ agent_id: agentId,
33
+ token: config.token ?? "session-client",
34
+ card: { id: `session-client-${randomUUID()}`, owner: identity.owner, name: "session-client" }
35
+ }));
36
+ resolve();
37
+ });
38
+ ws.on("error", reject);
39
+ });
40
+ const sessionId = randomUUID();
41
+ ws.send(JSON.stringify({
42
+ type: "session_open",
43
+ session_id: sessionId,
44
+ requester_id: agentId,
45
+ provider_id: opts.skill,
46
+ // Provider resolved via card
47
+ card_id: cardId,
48
+ skill_id: opts.skill,
49
+ budget: opts.budget,
50
+ pricing_model: opts.pricing,
51
+ initial_message: opts.message
52
+ }));
53
+ console.log(`Session opened: ${sessionId}`);
54
+ console.log(`Skill: ${opts.skill} | Budget: ${opts.budget} credits | Pricing: ${opts.pricing}`);
55
+ console.log("---");
56
+ console.log(`You: ${opts.message}`);
57
+ let totalSpent = 0;
58
+ ws.on("message", (data) => {
59
+ try {
60
+ const msg = JSON.parse(data.toString());
61
+ if (msg.session_id !== sessionId) return;
62
+ switch (msg.type) {
63
+ case "session_message":
64
+ if (msg.sender === "provider") {
65
+ console.log(`Agent: ${msg.content}`);
66
+ totalSpent += 2;
67
+ console.log(` [~${totalSpent}/${opts.budget} cr]`);
68
+ }
69
+ break;
70
+ case "session_settled":
71
+ console.log(`
72
+ Session ended. Total: ${msg.total_cost} credits (${msg.messages_count} messages)`);
73
+ console.log(`Refunded: ${msg.refunded} credits`);
74
+ ws.close();
75
+ break;
76
+ case "session_error":
77
+ console.error(`Session error: [${msg.code}] ${msg.message}`);
78
+ ws.close();
79
+ break;
80
+ case "session_ack":
81
+ break;
82
+ }
83
+ } catch {
84
+ }
85
+ });
86
+ const rl = createInterface({ input: process.stdin, output: process.stdout });
87
+ const prompt = () => {
88
+ rl.question("You: ", (input) => {
89
+ if (!input || input === "/end" || input === "/quit") {
90
+ ws.send(JSON.stringify({
91
+ type: "session_end",
92
+ session_id: sessionId,
93
+ reason: "completed"
94
+ }));
95
+ rl.close();
96
+ return;
97
+ }
98
+ ws.send(JSON.stringify({
99
+ type: "session_message",
100
+ session_id: sessionId,
101
+ sender: "requester",
102
+ content: input
103
+ }));
104
+ setTimeout(prompt, 100);
105
+ });
106
+ };
107
+ setTimeout(prompt, 2e3);
108
+ }
109
+ async function sessionSend(sessionId, message) {
110
+ console.log(`Sending to session ${sessionId}: ${message}`);
111
+ console.log("Note: For interactive sessions, use `agentbnb session open` instead.");
112
+ console.log("Non-interactive send requires a running relay connection.");
113
+ }
114
+ async function sessionEnd(sessionId, reason) {
115
+ console.log(`Ending session ${sessionId} (reason: ${reason})`);
116
+ console.log("Note: Use /end within an interactive session, or send session_end via relay.");
117
+ }
118
+ async function sessionList() {
119
+ console.log("Active sessions are tracked on the relay server.");
120
+ console.log("Use the MCP tool agentbnb_session_open to manage sessions programmatically.");
121
+ }
122
+ async function sessionStatus(sessionId) {
123
+ console.log(`Session ${sessionId} status is tracked on the relay server.`);
124
+ }
125
+ export {
126
+ sessionEnd,
127
+ sessionList,
128
+ sessionOpen,
129
+ sessionSend,
130
+ sessionStatus
131
+ };
@@ -9,6 +9,7 @@ import {
9
9
  expandEnvVars,
10
10
  parseSkillsFile
11
11
  } from "./chunk-WX3GZVFG.js";
12
+ import "./chunk-3RG5ZIWI.js";
12
13
  export {
13
14
  ApiSkillConfigSchema,
14
15
  CommandSkillConfigSchema,
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  getConfigDir
3
3
  } from "./chunk-3XPBFF6H.js";
4
+ import "./chunk-3RG5ZIWI.js";
4
5
 
5
6
  // src/cli/skill-wrap.ts
6
7
  import { readFileSync, writeFileSync, existsSync, mkdirSync } from "fs";