@agentvault/agentvault 0.14.29 → 0.15.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/README.md +3 -1
- package/dist/account-config.js +60 -0
- package/dist/account-config.js.map +1 -0
- package/dist/channel.d.ts +5 -0
- package/dist/channel.d.ts.map +1 -1
- package/dist/channel.js +3411 -0
- package/dist/channel.js.map +1 -0
- package/dist/cli.js +253 -72004
- package/dist/cli.js.map +1 -7
- package/dist/create-agent.js +314 -0
- package/dist/create-agent.js.map +1 -0
- package/dist/crypto-helpers.js +4 -0
- package/dist/crypto-helpers.js.map +1 -0
- package/dist/doctor.js +415 -0
- package/dist/doctor.js.map +1 -0
- package/dist/fetch-interceptor.js +213 -0
- package/dist/fetch-interceptor.js.map +1 -0
- package/dist/gateway-send.js +114 -0
- package/dist/gateway-send.js.map +1 -0
- package/dist/http-handlers.js +131 -0
- package/dist/http-handlers.js.map +1 -0
- package/dist/index.js +24 -76338
- package/dist/index.js.map +1 -7
- package/dist/mcp-handlers.js +48 -0
- package/dist/mcp-handlers.js.map +1 -0
- package/dist/mcp-server.js +192 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/openclaw-compat.js +94 -0
- package/dist/openclaw-compat.js.map +1 -0
- package/dist/openclaw-entry.d.ts.map +1 -1
- package/dist/openclaw-entry.js +1204 -1414
- package/dist/openclaw-entry.js.map +1 -7
- package/dist/openclaw-plugin.js +297 -0
- package/dist/openclaw-plugin.js.map +1 -0
- package/dist/openclaw-types.js +13 -0
- package/dist/openclaw-types.js.map +1 -0
- package/dist/setup.js +460 -0
- package/dist/setup.js.map +1 -0
- package/dist/skill-invoker.js +100 -0
- package/dist/skill-invoker.js.map +1 -0
- package/dist/skill-manifest.js +249 -0
- package/dist/skill-manifest.js.map +1 -0
- package/dist/skill-telemetry.js +146 -0
- package/dist/skill-telemetry.js.map +1 -0
- package/dist/skills-publish.js +133 -0
- package/dist/skills-publish.js.map +1 -0
- package/dist/state.js +178 -0
- package/dist/state.js.map +1 -0
- package/dist/transport.js +43 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/workspace-handlers.js +177 -0
- package/dist/workspace-handlers.js.map +1 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,114 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway-send.js","sourceRoot":"","sources":["../src/gateway-send.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,131 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-handlers.js","sourceRoot":"","sources":["../src/http-handlers.ts"],"names":[],"mappings":"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"}
|