@agentvault/agentvault 0.15.0 → 0.15.1

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 (65) hide show
  1. package/dist/_cp.d.ts +12 -0
  2. package/dist/_cp.d.ts.map +1 -0
  3. package/dist/cli.js +72035 -253
  4. package/dist/cli.js.map +7 -1
  5. package/dist/index.js +76351 -24
  6. package/dist/index.js.map +7 -1
  7. package/dist/openclaw-entry.js +1443 -1201
  8. package/dist/openclaw-entry.js.map +7 -1
  9. package/package.json +1 -1
  10. package/dist/__tests__/crypto-helpers.test.d.ts +0 -2
  11. package/dist/__tests__/crypto-helpers.test.d.ts.map +0 -1
  12. package/dist/__tests__/functional.test.d.ts +0 -21
  13. package/dist/__tests__/functional.test.d.ts.map +0 -1
  14. package/dist/__tests__/install-plugin.test.d.ts +0 -2
  15. package/dist/__tests__/install-plugin.test.d.ts.map +0 -1
  16. package/dist/__tests__/multi-session.test.d.ts +0 -2
  17. package/dist/__tests__/multi-session.test.d.ts.map +0 -1
  18. package/dist/__tests__/state.test.d.ts +0 -2
  19. package/dist/__tests__/state.test.d.ts.map +0 -1
  20. package/dist/__tests__/transport.test.d.ts +0 -2
  21. package/dist/__tests__/transport.test.d.ts.map +0 -1
  22. package/dist/account-config.js +0 -60
  23. package/dist/account-config.js.map +0 -1
  24. package/dist/channel.js +0 -3411
  25. package/dist/channel.js.map +0 -1
  26. package/dist/create-agent.js +0 -314
  27. package/dist/create-agent.js.map +0 -1
  28. package/dist/crypto-helpers.js +0 -4
  29. package/dist/crypto-helpers.js.map +0 -1
  30. package/dist/doctor.js +0 -415
  31. package/dist/doctor.js.map +0 -1
  32. package/dist/fetch-interceptor.js +0 -213
  33. package/dist/fetch-interceptor.js.map +0 -1
  34. package/dist/gateway-send.js +0 -114
  35. package/dist/gateway-send.js.map +0 -1
  36. package/dist/http-handlers.js +0 -131
  37. package/dist/http-handlers.js.map +0 -1
  38. package/dist/mcp-handlers.js +0 -48
  39. package/dist/mcp-handlers.js.map +0 -1
  40. package/dist/mcp-server.js +0 -192
  41. package/dist/mcp-server.js.map +0 -1
  42. package/dist/openclaw-compat.js +0 -94
  43. package/dist/openclaw-compat.js.map +0 -1
  44. package/dist/openclaw-plugin.js +0 -297
  45. package/dist/openclaw-plugin.js.map +0 -1
  46. package/dist/openclaw-types.js +0 -13
  47. package/dist/openclaw-types.js.map +0 -1
  48. package/dist/setup.js +0 -460
  49. package/dist/setup.js.map +0 -1
  50. package/dist/skill-invoker.js +0 -100
  51. package/dist/skill-invoker.js.map +0 -1
  52. package/dist/skill-manifest.js +0 -249
  53. package/dist/skill-manifest.js.map +0 -1
  54. package/dist/skill-telemetry.js +0 -146
  55. package/dist/skill-telemetry.js.map +0 -1
  56. package/dist/skills-publish.js +0 -133
  57. package/dist/skills-publish.js.map +0 -1
  58. package/dist/state.js +0 -178
  59. package/dist/state.js.map +0 -1
  60. package/dist/transport.js +0 -43
  61. package/dist/transport.js.map +0 -1
  62. package/dist/types.js +0 -2
  63. package/dist/types.js.map +0 -1
  64. package/dist/workspace-handlers.js +0 -177
  65. package/dist/workspace-handlers.js.map +0 -1
@@ -1,114 +0,0 @@
1
- /**
2
- * Gateway send helper — lets agents send messages to their owner
3
- * via the plugin's local HTTP server (port 18790) or OpenClaw managed routes.
4
- *
5
- * Delivery path: sendToOwner() → plugin HTTP /send → SecureChannel.send()
6
- * → Double Ratchet encrypt → WebSocket → backend → owner's app
7
- */
8
- import { requestHeartbeatNow } from "./openclaw-compat.js";
9
- function resolveBaseUrl(options) {
10
- const host = options?.host ?? "127.0.0.1";
11
- const port = options?.port ??
12
- (process.env.GATEWAY_SEND_PORT
13
- ? Number(process.env.GATEWAY_SEND_PORT)
14
- : 18790);
15
- // If managed routes are active, check for OpenClaw's gateway URL
16
- if (!options?.port && !options?.host && process.env.OPENCLAW_GATEWAY_URL) {
17
- return process.env.OPENCLAW_GATEWAY_URL;
18
- }
19
- return `http://${host}:${port}`;
20
- }
21
- function friendlyError(err) {
22
- if (err instanceof TypeError &&
23
- String(err.cause ?? err.message).includes("ECONNREFUSED")) {
24
- return "Gateway not reachable — is OpenClaw running?";
25
- }
26
- return err instanceof Error ? err.message : String(err);
27
- }
28
- /**
29
- * Send a plaintext message to the agent's owner via the gateway HTTP server.
30
- * Never throws — returns `{ ok: false, error }` on failure.
31
- */
32
- export async function sendToOwner(text, options) {
33
- if (typeof text !== "string" || text.trim().length === 0) {
34
- return { ok: false, error: "Message text must be a non-empty string" };
35
- }
36
- // Wake agent proactively before sending (fire-and-forget)
37
- requestHeartbeatNow({ reason: "proactive-send" }).catch(() => { });
38
- try {
39
- const base = resolveBaseUrl(options);
40
- // Use managed route path if gateway URL is set, else legacy /send
41
- const sendPath = process.env.OPENCLAW_GATEWAY_URL ? "/agentvault/send" : "/send";
42
- const res = await fetch(`${base}${sendPath}`, {
43
- method: "POST",
44
- headers: { "Content-Type": "application/json" },
45
- body: JSON.stringify({ text }),
46
- signal: options?.signal,
47
- });
48
- if (!res.ok) {
49
- const body = await res.text().catch(() => "");
50
- return { ok: false, error: `HTTP ${res.status}${body ? `: ${body}` : ""}` };
51
- }
52
- return { ok: true };
53
- }
54
- catch (err) {
55
- return { ok: false, error: friendlyError(err) };
56
- }
57
- }
58
- /**
59
- * Send a decision request to the agent's owner via the gateway HTTP server.
60
- * Never throws — returns `{ ok: false, error }` on failure.
61
- */
62
- export async function sendDecisionToOwner(request, options) {
63
- if (!request.title || typeof request.title !== "string") {
64
- return { ok: false, error: "Decision title must be a non-empty string" };
65
- }
66
- if (!Array.isArray(request.options) || request.options.length < 2) {
67
- return { ok: false, error: "Decision must have at least 2 options" };
68
- }
69
- requestHeartbeatNow({ reason: "proactive-decision" }).catch(() => { });
70
- try {
71
- const base = resolveBaseUrl(options);
72
- const path = process.env.OPENCLAW_GATEWAY_URL ? "/agentvault/decision" : "/decision";
73
- const res = await fetch(`${base}${path}`, {
74
- method: "POST",
75
- headers: { "Content-Type": "application/json" },
76
- body: JSON.stringify(request),
77
- signal: options?.signal,
78
- });
79
- if (!res.ok) {
80
- const body = await res.text().catch(() => "");
81
- return { ok: false, error: `HTTP ${res.status}${body ? `: ${body}` : ""}` };
82
- }
83
- const data = (await res.json());
84
- return { ok: true, decision_id: data.decision_id };
85
- }
86
- catch (err) {
87
- return { ok: false, error: friendlyError(err) };
88
- }
89
- }
90
- /**
91
- * Check gateway health / status.
92
- * Never throws — returns `{ ok: false, error }` on failure.
93
- */
94
- export async function checkGateway(options) {
95
- try {
96
- const base = resolveBaseUrl(options);
97
- const statusPath = process.env.OPENCLAW_GATEWAY_URL ? "/agentvault/status" : "/status";
98
- const res = await fetch(`${base}${statusPath}`, { signal: options?.signal });
99
- if (!res.ok) {
100
- return { ok: false, error: `HTTP ${res.status}` };
101
- }
102
- const data = (await res.json());
103
- return {
104
- ok: true,
105
- state: data.state,
106
- deviceId: data.deviceId,
107
- sessions: data.sessions,
108
- };
109
- }
110
- catch (err) {
111
- return { ok: false, error: friendlyError(err) };
112
- }
113
- }
114
- //# sourceMappingURL=gateway-send.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gateway-send.js","sourceRoot":"","sources":["../src/gateway-send.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAwB3D,SAAS,cAAc,CAAC,OAA4B;IAClD,MAAM,IAAI,GAAG,OAAO,EAAE,IAAI,IAAI,WAAW,CAAC;IAC1C,MAAM,IAAI,GACR,OAAO,EAAE,IAAI;QACb,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAC5B,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACvC,CAAC,CAAC,KAAK,CAAC,CAAC;IAEb,iEAAiE;IACjE,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACzE,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC1C,CAAC;IAED,OAAO,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,aAAa,CAAC,GAAY;IACjC,IACE,GAAG,YAAY,SAAS;QACxB,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EACzD,CAAC;QACD,OAAO,8CAA8C,CAAC;IACxD,CAAC;IACD,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,IAAY,EACZ,OAA4B;IAE5B,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC;IACzE,CAAC;IAED,0DAA0D;IAC1D,mBAAmB,CAAC,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAElE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACrC,kEAAkE;QAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC;QACjF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,QAAQ,EAAE,EAAE;YAC5C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC;YAC9B,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;QAC9E,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;IAClD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAOC,EACD,OAA4B;IAE5B,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACxD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC;IAC3E,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,uCAAuC,EAAE,CAAC;IACvE,CAAC;IAED,mBAAmB,CAAC,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAEtE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,WAAW,CAAC;QACrF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE;YACxC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,OAAO,EAAE,MAAM;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;QAC9E,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA4B,CAAC;QAC3D,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,WAAiC,EAAE,CAAC;IAC3E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;IAClD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAA4B;IAE5B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;QACvF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,GAAG,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAE7E,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC;QACpD,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA4B,CAAC;QAC3D,OAAO;YACL,EAAE,EAAE,IAAI;YACR,KAAK,EAAE,IAAI,CAAC,KAA2B;YACvC,QAAQ,EAAE,IAAI,CAAC,QAA8B;YAC7C,QAAQ,EAAE,IAAI,CAAC,QAA8B;SAC9C,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;IAClD,CAAC;AACH,CAAC"}
@@ -1,131 +0,0 @@
1
- /**
2
- * Extracted HTTP handler logic for the AgentVault plugin.
3
- *
4
- * These handlers are shared between:
5
- * 1. The self-managed HTTP server in channel.ts (legacy/fallback path)
6
- * 2. OpenClaw's registerHttpRoute() managed routes (new path)
7
- *
8
- * Both entry points call the same handler functions, ensuring consistent
9
- * behavior regardless of how the route is served.
10
- */
11
- /**
12
- * Handle POST /send — send a message (text, file, or room).
13
- */
14
- export async function handleSendRequest(parsed, channel) {
15
- const text = parsed.text;
16
- if (!text || typeof text !== "string") {
17
- return { status: 400, body: { ok: false, error: "Missing 'text' field" } };
18
- }
19
- try {
20
- // A2A send: accept hub_address, a2a_address, a2aAddress, or channel_id
21
- let a2aTarget = (parsed.hub_address ?? parsed.a2a_address ?? parsed.a2aAddress);
22
- // Resolve channel_id to hub address if provided
23
- if (!a2aTarget && parsed.channel_id && typeof parsed.channel_id === "string") {
24
- const hubAddr = channel.resolveA2AChannelHub(parsed.channel_id);
25
- if (hubAddr)
26
- a2aTarget = hubAddr;
27
- }
28
- // Resolve room_id: explicit in body, or fallback to last inbound room context
29
- const roomId = parsed.room_id ?? channel.lastInboundRoomId;
30
- if (a2aTarget && typeof a2aTarget === "string") {
31
- await channel.sendToAgent(a2aTarget, text);
32
- }
33
- else if (roomId) {
34
- await channel.sendToRoom(roomId, text, {
35
- messageType: parsed.message_type,
36
- priority: parsed.priority,
37
- metadata: parsed.metadata,
38
- });
39
- }
40
- else if (parsed.file_path && typeof parsed.file_path === "string") {
41
- await channel.sendWithAttachment(text, parsed.file_path, {
42
- topicId: parsed.topicId,
43
- });
44
- }
45
- else {
46
- await channel.send(text, {
47
- topicId: parsed.topicId,
48
- messageType: parsed.message_type,
49
- metadata: parsed.metadata,
50
- });
51
- }
52
- return { status: 200, body: { ok: true } };
53
- }
54
- catch (err) {
55
- return { status: 500, body: { ok: false, error: String(err) } };
56
- }
57
- }
58
- /**
59
- * Handle POST /action — send an action confirmation.
60
- */
61
- export async function handleActionRequest(parsed, channel) {
62
- if (!parsed.action || typeof parsed.action !== "string") {
63
- return { status: 400, body: { ok: false, error: "Missing 'action' field" } };
64
- }
65
- try {
66
- const confirmation = {
67
- action: parsed.action,
68
- status: (parsed.status ?? "completed"),
69
- decisionId: parsed.decision_id,
70
- detail: parsed.detail,
71
- estimated_cost: parsed.estimated_cost,
72
- };
73
- if (parsed.room_id && typeof parsed.room_id === "string") {
74
- await channel.sendActionConfirmationToRoom(parsed.room_id, confirmation);
75
- }
76
- else {
77
- await channel.sendActionConfirmation(confirmation);
78
- }
79
- return { status: 200, body: { ok: true } };
80
- }
81
- catch (err) {
82
- return { status: 500, body: { ok: false, error: String(err) } };
83
- }
84
- }
85
- /**
86
- * Handle POST /decision — send a decision request to the owner.
87
- */
88
- export async function handleDecisionRequest(parsed, channel) {
89
- const title = parsed.title;
90
- if (!title || typeof title !== "string") {
91
- return { status: 400, body: { ok: false, error: "Missing 'title' field" } };
92
- }
93
- const options = parsed.options;
94
- if (!Array.isArray(options) || options.length < 2) {
95
- return { status: 400, body: { ok: false, error: "'options' must be an array with at least 2 items" } };
96
- }
97
- for (const opt of options) {
98
- if (!opt || typeof opt !== "object" || !opt.option_id || !opt.label) {
99
- return { status: 400, body: { ok: false, error: "Each option must have 'option_id' and 'label'" } };
100
- }
101
- }
102
- try {
103
- const decision_id = await channel.sendDecisionRequest({
104
- title: title,
105
- description: parsed.description,
106
- options: options,
107
- context_refs: parsed.context_refs,
108
- deadline: parsed.deadline,
109
- auto_action: parsed.auto_action,
110
- });
111
- return { status: 200, body: { ok: true, decision_id } };
112
- }
113
- catch (err) {
114
- return { status: 500, body: { ok: false, error: String(err) } };
115
- }
116
- }
117
- /**
118
- * Handle GET /status — return channel health info.
119
- */
120
- export function handleStatusRequest(channel) {
121
- return {
122
- status: 200,
123
- body: {
124
- ok: true,
125
- state: channel.state,
126
- deviceId: channel.deviceId ?? undefined,
127
- sessions: channel.sessionCount,
128
- },
129
- };
130
- }
131
- //# sourceMappingURL=http-handlers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"http-handlers.js","sourceRoot":"","sources":["../src/http-handlers.ts"],"names":[],"mappings":"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"}
@@ -1,48 +0,0 @@
1
- /**
2
- * Create an HTTP request handler for MCP routes.
3
- *
4
- * Routes:
5
- * POST /mcp — MCP Streamable HTTP messages
6
- * GET /mcp — MCP SSE stream (for server-initiated messages)
7
- * DELETE /mcp — Close MCP session
8
- *
9
- * All other paths are passed through to the next handler.
10
- */
11
- export function createMcpHandler(mcpServer, basePath = "/mcp") {
12
- return (req, res, next) => {
13
- const url = new URL(req.url ?? "/", `http://${req.headers.host ?? "localhost"}`);
14
- const pathname = url.pathname;
15
- // Only handle requests to the MCP path
16
- if (!pathname.startsWith(basePath)) {
17
- if (next)
18
- next();
19
- return;
20
- }
21
- if (!mcpServer) {
22
- res.writeHead(503, { "Content-Type": "application/json" });
23
- res.end(JSON.stringify({ error: "MCP server not initialized" }));
24
- return;
25
- }
26
- // Delegate to the MCP server
27
- mcpServer.handleRequest(req, res).catch((err) => {
28
- console.error("[MCP] Request handling error:", err);
29
- if (!res.headersSent) {
30
- res.writeHead(500, { "Content-Type": "application/json" });
31
- res.end(JSON.stringify({ error: "Internal MCP error" }));
32
- }
33
- });
34
- };
35
- }
36
- /**
37
- * Build a status object with MCP info for the /status endpoint.
38
- */
39
- export function getMcpStatus(mcpServer) {
40
- if (!mcpServer) {
41
- return { mcp_enabled: false, mcp_skills_count: 0 };
42
- }
43
- return {
44
- mcp_enabled: true,
45
- mcp_skills_count: mcpServer.skillCount,
46
- };
47
- }
48
- //# sourceMappingURL=mcp-handlers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-handlers.js","sourceRoot":"","sources":["../src/mcp-handlers.ts"],"names":[],"mappings":"AAQA;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAqC,EACrC,WAAmB,MAAM;IAEzB,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;QACjF,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAE9B,uCAAuC;QACvC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnC,IAAI,IAAI;gBAAE,IAAI,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;YAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC,CAAC,CAAC;YACjE,OAAO;QACT,CAAC;QAED,6BAA6B;QAC7B,SAAS,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;YACvD,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,CAAC,CAAC;YACpD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,SAAqC;IAErC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;IACrD,CAAC;IACD,OAAO;QACL,WAAW,EAAE,IAAI;QACjB,gBAAgB,EAAE,SAAS,CAAC,UAAU;KACvC,CAAC;AACJ,CAAC"}
@@ -1,192 +0,0 @@
1
- /**
2
- * AgentVault MCP Server — serves agent skills as MCP tools.
3
- *
4
- * Uses Streamable HTTP transport mounted on the plugin's HTTP server.
5
- * Auth: SPT Bearer tokens validated via POST /capabilities/introspect.
6
- *
7
- * Design:
8
- * - One McpServer instance is created at startup and skills are registered as tools.
9
- * - Each incoming HTTP request creates a fresh StreamableHTTPServerTransport (stateless mode).
10
- * - After the transport handles the request, close() is called so the server can
11
- * accept the next connection (Protocol enforces single-transport at a time).
12
- */
13
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
14
- import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
15
- /* -------------------------------------------------------------------------- */
16
- /* AgentVaultMcpServer */
17
- /* -------------------------------------------------------------------------- */
18
- export class AgentVaultMcpServer {
19
- server;
20
- skills = new Map();
21
- opts;
22
- initialized = false;
23
- constructor(opts) {
24
- this.opts = opts;
25
- this.server = new McpServer({
26
- name: `agentvault-${opts.agentName}`,
27
- version: "1.0.0",
28
- });
29
- }
30
- /* ---- Skill registration ------------------------------------------------ */
31
- /**
32
- * Register a skill that will be exposed as an MCP tool.
33
- * Must be called *before* `initialize()`.
34
- */
35
- registerSkill(skill) {
36
- this.skills.set(skill.name, skill);
37
- }
38
- /**
39
- * Register all skills as MCP tools / resources / prompts.
40
- * Called lazily on first request if not called explicitly.
41
- */
42
- initialize() {
43
- if (this.initialized)
44
- return;
45
- for (const [name, skill] of this.skills) {
46
- this.registerToolForSkill(name, skill);
47
- }
48
- // Registry resource — lists all registered skills as JSON.
49
- this.server.resource("skills-registry", "skills://registry", { description: "List of all registered agent skills", mimeType: "application/json" }, async () => {
50
- const registry = Array.from(this.skills.values()).map((s) => ({
51
- name: s.name,
52
- version: s.version,
53
- description: s.description,
54
- tags: s.tags,
55
- sla: s.slaDefinition,
56
- hasSchema: !!s.inputSchema,
57
- hasInstructions: !!s.instructions,
58
- }));
59
- return {
60
- contents: [{
61
- uri: "skills://registry",
62
- mimeType: "application/json",
63
- text: JSON.stringify(registry, null, 2),
64
- }],
65
- };
66
- });
67
- // Skills that carry instructions are also surfaced as MCP prompts.
68
- for (const [name, skill] of this.skills) {
69
- if (skill.instructions) {
70
- this.server.prompt(name, skill.description ?? `Instructions for ${name}`, () => ({
71
- messages: [{
72
- role: "user",
73
- content: { type: "text", text: skill.instructions },
74
- }],
75
- }));
76
- }
77
- }
78
- this.initialized = true;
79
- }
80
- /* ---- HTTP request handler ---------------------------------------------- */
81
- /**
82
- * Handle an incoming HTTP request to the /mcp endpoint.
83
- *
84
- * Supports the Streamable HTTP transport protocol:
85
- * - POST for JSON-RPC messages
86
- * - GET for SSE notification stream
87
- * - DELETE for session close
88
- *
89
- * Each request gets a fresh stateless transport; after the response is
90
- * flushed the transport + underlying protocol connection are torn down
91
- * so the single McpServer instance is ready for the next caller.
92
- */
93
- async handleRequest(req, res) {
94
- if (!this.initialized) {
95
- this.initialize();
96
- }
97
- // --- Auth: require SPT Bearer token ---
98
- const authHeader = req.headers.authorization;
99
- if (!authHeader?.startsWith("Bearer ")) {
100
- res.writeHead(401, { "Content-Type": "application/json" });
101
- res.end(JSON.stringify({ error: "Missing or invalid Authorization header" }));
102
- return;
103
- }
104
- const token = authHeader.slice(7);
105
- const valid = await this.validateSpt(token);
106
- if (!valid) {
107
- res.writeHead(403, { "Content-Type": "application/json" });
108
- res.end(JSON.stringify({ error: "Invalid or expired SPT token" }));
109
- return;
110
- }
111
- // --- Stateless transport per request ---
112
- const transport = new StreamableHTTPServerTransport({
113
- sessionIdGenerator: undefined, // stateless
114
- });
115
- await this.server.connect(transport);
116
- try {
117
- await transport.handleRequest(req, res);
118
- }
119
- finally {
120
- // Tear down so the McpServer can accept the next connection.
121
- // transport.close() triggers Protocol._onclose() which clears _transport.
122
- await transport.close();
123
- }
124
- }
125
- /* ---- Private helpers --------------------------------------------------- */
126
- /**
127
- * Register a single skill as an MCP tool.
128
- *
129
- * The MCP SDK's `tool()` overloads that accept a schema expect Zod types.
130
- * Since our skill definitions use raw JSON Schema we register without
131
- * schema validation (name + description + handler) and let the handler
132
- * receive the raw args object.
133
- */
134
- registerToolForSkill(name, skill) {
135
- const description = skill.description ?? `AgentVault skill: ${name}`;
136
- this.server.tool(name, description, async (args) => {
137
- if (!this.opts.onInvoke) {
138
- return {
139
- content: [{ type: "text", text: `Skill "${name}" invoked but no handler registered` }],
140
- };
141
- }
142
- try {
143
- const result = await this.opts.onInvoke(name, args);
144
- const text = typeof result === "string" ? result : JSON.stringify(result, null, 2);
145
- return {
146
- content: [{ type: "text", text }],
147
- };
148
- }
149
- catch (err) {
150
- const message = err instanceof Error ? err.message : String(err);
151
- return {
152
- content: [{ type: "text", text: `Error invoking skill "${name}": ${message}` }],
153
- isError: true,
154
- };
155
- }
156
- });
157
- }
158
- /**
159
- * Validate a Service Provider Token against the AgentVault backend.
160
- */
161
- async validateSpt(token) {
162
- try {
163
- const url = `${this.opts.apiUrl}/api/v1/capabilities/introspect`;
164
- const headers = {
165
- "Content-Type": "application/json",
166
- };
167
- if (this.opts.apiKey) {
168
- headers["Authorization"] = `Bearer ${this.opts.apiKey}`;
169
- }
170
- const resp = await fetch(url, {
171
- method: "POST",
172
- headers,
173
- body: JSON.stringify({ token }),
174
- });
175
- if (!resp.ok)
176
- return false;
177
- const data = (await resp.json());
178
- return data.active === true;
179
- }
180
- catch {
181
- return false;
182
- }
183
- }
184
- /* ---- Accessors --------------------------------------------------------- */
185
- get skillCount() {
186
- return this.skills.size;
187
- }
188
- get isInitialized() {
189
- return this.initialized;
190
- }
191
- }
192
- //# sourceMappingURL=mcp-server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -1,94 +0,0 @@
1
- /**
2
- * OpenClaw SDK compatibility layer — dynamic import wrappers with caching.
3
- *
4
- * Each wrapper attempts to import a deep SDK module at runtime. If the import
5
- * fails (older gateway, missing SDK), the function returns a no-op result.
6
- * Results are cached after the first attempt.
7
- *
8
- * IMPORTANT: All imports are guarded by try/catch — the plugin degrades
9
- * gracefully on older OpenClaw versions.
10
- */
11
- // ---------------------------------------------------------------------------
12
- // requestHeartbeatNow — wake agent proactively before outbound sends
13
- // ---------------------------------------------------------------------------
14
- let _heartbeatFn = null;
15
- /**
16
- * Request an immediate heartbeat wake from the OpenClaw gateway.
17
- * Returns true if the heartbeat API was available and called, false otherwise.
18
- * Never throws.
19
- */
20
- export async function requestHeartbeatNow(opts) {
21
- if (_heartbeatFn === null) {
22
- try {
23
- // @ts-expect-error — deep SDK import only available when openclaw is installed
24
- const mod = await import("openclaw/dist/plugin-sdk/infra/heartbeat-wake.js");
25
- _heartbeatFn = mod.requestHeartbeatNow ?? mod.default?.requestHeartbeatNow ?? false;
26
- }
27
- catch {
28
- _heartbeatFn = false;
29
- }
30
- }
31
- if (typeof _heartbeatFn === "function") {
32
- try {
33
- await _heartbeatFn(opts);
34
- return true;
35
- }
36
- catch {
37
- return false;
38
- }
39
- }
40
- return false;
41
- }
42
- let _agentEventFn = null;
43
- /**
44
- * Subscribe to agent-level events (tool_use, reasoning_complete, error, etc.).
45
- * Returns an unsubscribe function, or a no-op if the API is unavailable.
46
- */
47
- export async function onAgentEvent(callback) {
48
- if (_agentEventFn === null) {
49
- try {
50
- // @ts-expect-error — deep SDK import only available when openclaw is installed
51
- const mod = await import("openclaw/dist/plugin-sdk/infra/agent-events.js");
52
- _agentEventFn = mod.onAgentEvent ?? mod.default?.onAgentEvent ?? false;
53
- }
54
- catch {
55
- _agentEventFn = false;
56
- }
57
- }
58
- if (typeof _agentEventFn === "function") {
59
- try {
60
- return _agentEventFn(callback);
61
- }
62
- catch {
63
- return () => { };
64
- }
65
- }
66
- return () => { };
67
- }
68
- let _transcriptFn = null;
69
- /**
70
- * Subscribe to session transcript updates for behavioral analysis.
71
- * Returns an unsubscribe function, or a no-op if the API is unavailable.
72
- */
73
- export async function onSessionTranscriptUpdate(callback) {
74
- if (_transcriptFn === null) {
75
- try {
76
- // @ts-expect-error — deep SDK import only available when openclaw is installed
77
- const mod = await import("openclaw/dist/plugin-sdk/sessions/transcript-events.js");
78
- _transcriptFn = mod.onSessionTranscriptUpdate ?? mod.default?.onSessionTranscriptUpdate ?? false;
79
- }
80
- catch {
81
- _transcriptFn = false;
82
- }
83
- }
84
- if (typeof _transcriptFn === "function") {
85
- try {
86
- return _transcriptFn(callback);
87
- }
88
- catch {
89
- return () => { };
90
- }
91
- }
92
- return () => { };
93
- }
94
- //# sourceMappingURL=openclaw-compat.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openclaw-compat.js","sourceRoot":"","sources":["../src/openclaw-compat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,8EAA8E;AAC9E,qEAAqE;AACrE,8EAA8E;AAE9E,IAAI,YAAY,GAAmE,IAAI,CAAC;AAExF;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,IAA0B;IAClE,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,+EAA+E;YAC/E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,kDAAkD,CAAC,CAAC;YAC7E,YAAY,GAAG,GAAG,CAAC,mBAAmB,IAAI,GAAG,CAAC,OAAO,EAAE,mBAAmB,IAAI,KAAK,CAAC;QACtF,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAOD,IAAI,aAAa,GAA8D,IAAI,CAAC;AAEpF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAA4B;IAC7D,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,+EAA+E;YAC/E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gDAAgD,CAAC,CAAC;YAC3E,aAAa,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,OAAO,EAAE,YAAY,IAAI,KAAK,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;AAClB,CAAC;AAOD,IAAI,aAAa,GAA8D,IAAI,CAAC;AAEpF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,QAA4B;IAC1E,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,+EAA+E;YAC/E,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,wDAAwD,CAAC,CAAC;YACnF,aAAa,GAAG,GAAG,CAAC,yBAAyB,IAAI,GAAG,CAAC,OAAO,EAAE,yBAAyB,IAAI,KAAK,CAAC;QACnG,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,GAAG,KAAK,CAAC;QACxB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,aAAa,KAAK,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC;YACH,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,EAAE,GAAE,CAAC,CAAC;AAClB,CAAC"}