@agentvault/agentvault 0.18.0 → 0.19.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.
- package/README.md +10 -11
- package/dist/__tests__/crypto-helpers.test.d.ts +2 -0
- package/dist/__tests__/crypto-helpers.test.d.ts.map +1 -0
- package/dist/__tests__/functional.test.d.ts +21 -0
- package/dist/__tests__/functional.test.d.ts.map +1 -0
- package/dist/__tests__/multi-session.test.d.ts +2 -0
- package/dist/__tests__/multi-session.test.d.ts.map +1 -0
- package/dist/__tests__/state.test.d.ts +2 -0
- package/dist/__tests__/state.test.d.ts.map +1 -0
- package/dist/__tests__/transport.test.d.ts +2 -0
- package/dist/__tests__/transport.test.d.ts.map +1 -0
- package/dist/_cp.d.ts +10 -0
- package/dist/_cp.d.ts.map +1 -0
- package/dist/account-config.d.ts +20 -0
- package/dist/account-config.d.ts.map +1 -0
- package/dist/channel.d.ts +393 -0
- package/dist/channel.d.ts.map +1 -0
- package/dist/channel.js +2257 -0
- package/dist/channel.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +113 -1
- package/dist/cli.js.map +3 -3
- package/dist/create-agent.d.ts +28 -0
- package/dist/create-agent.d.ts.map +1 -0
- package/dist/credential-store.d.ts +62 -0
- package/dist/credential-store.d.ts.map +1 -0
- package/dist/crypto-helpers.d.ts +2 -0
- package/dist/crypto-helpers.d.ts.map +1 -0
- package/dist/crypto-helpers.js +4 -0
- package/dist/crypto-helpers.js.map +1 -0
- package/dist/doctor.d.ts +41 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/fetch-interceptor.d.ts +32 -0
- package/dist/fetch-interceptor.d.ts.map +1 -0
- package/dist/gateway-send.d.ts +98 -0
- package/dist/gateway-send.d.ts.map +1 -0
- package/dist/http-handlers.d.ts +53 -0
- package/dist/http-handlers.d.ts.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +113 -1
- package/dist/index.js.map +2 -2
- package/dist/mcp-handlers.d.ts +26 -0
- package/dist/mcp-handlers.d.ts.map +1 -0
- package/dist/mcp-proxy-helpers.d.ts +9 -0
- package/dist/mcp-proxy-helpers.d.ts.map +1 -0
- package/dist/mcp-server.d.ts +90 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/openclaw-compat.d.ts +33 -0
- package/dist/openclaw-compat.d.ts.map +1 -0
- package/dist/openclaw-entry.d.ts +27 -0
- package/dist/openclaw-entry.d.ts.map +1 -0
- package/dist/openclaw-entry.js +56 -8
- package/dist/openclaw-entry.js.map +2 -2
- package/dist/openclaw-plugin.d.ts +102 -0
- package/dist/openclaw-plugin.d.ts.map +1 -0
- package/dist/openclaw-plugin.js +222 -0
- package/dist/openclaw-plugin.js.map +1 -0
- package/dist/openclaw-types.d.ts +155 -0
- package/dist/openclaw-types.d.ts.map +1 -0
- package/dist/policy-enforcer.d.ts +78 -0
- package/dist/policy-enforcer.d.ts.map +1 -0
- package/dist/setup.d.ts +27 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +329 -0
- package/dist/setup.js.map +1 -0
- package/dist/skill-invoker.d.ts +30 -0
- package/dist/skill-invoker.d.ts.map +1 -0
- package/dist/skill-manifest.d.ts +30 -0
- package/dist/skill-manifest.d.ts.map +1 -0
- package/dist/skill-telemetry.d.ts +36 -0
- package/dist/skill-telemetry.d.ts.map +1 -0
- package/dist/skills-publish.d.ts +8 -0
- package/dist/skills-publish.d.ts.map +1 -0
- package/dist/state.d.ts +32 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +61 -0
- package/dist/state.js.map +1 -0
- package/dist/transport.d.ts +24 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +43 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +417 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/workspace-handlers.d.ts +62 -0
- package/dist/workspace-handlers.d.ts.map +1 -0
- package/openclaw.plugin.json +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentVault OpenClaw Channel Plugin
|
|
3
|
+
*
|
|
4
|
+
* Registers AgentVault as a first-class OpenClaw messaging channel.
|
|
5
|
+
* Messages from the AgentVault UI are decrypted and routed into the
|
|
6
|
+
* OpenClaw agent loop; agent replies are encrypted and sent back.
|
|
7
|
+
*
|
|
8
|
+
* Installation (one-time):
|
|
9
|
+
* npx @agentvault/agentvault setup --token=av_tok_...
|
|
10
|
+
*
|
|
11
|
+
* After setup, restart OpenClaw — no further configuration needed.
|
|
12
|
+
*/
|
|
13
|
+
import { SecureChannel } from "./channel.js";
|
|
14
|
+
import { listAccountIds, resolveAccount, type ResolvedAccount } from "./account-config.js";
|
|
15
|
+
import type { PluginRuntime, ChannelGatewayContext, ChannelOutboundPayloadContext } from "./openclaw-types.js";
|
|
16
|
+
export declare function setOcRuntime(runtime: PluginRuntime): void;
|
|
17
|
+
export declare function getActiveChannel(accountId?: string): SecureChannel | undefined;
|
|
18
|
+
export declare const agentVaultPlugin: {
|
|
19
|
+
id: string;
|
|
20
|
+
meta: {
|
|
21
|
+
id: string;
|
|
22
|
+
label: string;
|
|
23
|
+
selectionLabel: string;
|
|
24
|
+
docsPath: string;
|
|
25
|
+
blurb: string;
|
|
26
|
+
aliases: string[];
|
|
27
|
+
};
|
|
28
|
+
capabilities: {
|
|
29
|
+
chatTypes: string[];
|
|
30
|
+
};
|
|
31
|
+
config: {
|
|
32
|
+
listAccountIds: typeof listAccountIds;
|
|
33
|
+
resolveAccount: typeof resolveAccount;
|
|
34
|
+
};
|
|
35
|
+
gateway: {
|
|
36
|
+
/** Health probe for `openclaw channels status --probe` */
|
|
37
|
+
probe: (ctx: any) => Promise<{
|
|
38
|
+
ok: boolean;
|
|
39
|
+
status: string;
|
|
40
|
+
error: string;
|
|
41
|
+
deviceId?: undefined;
|
|
42
|
+
sessions?: undefined;
|
|
43
|
+
} | {
|
|
44
|
+
ok: boolean;
|
|
45
|
+
status: import("./types.js").ChannelState;
|
|
46
|
+
deviceId: string | undefined;
|
|
47
|
+
sessions: number;
|
|
48
|
+
error?: undefined;
|
|
49
|
+
}>;
|
|
50
|
+
/** Status for `openclaw health --json` per-channel summary */
|
|
51
|
+
status: (ctx: any) => {
|
|
52
|
+
connected: boolean;
|
|
53
|
+
status: string;
|
|
54
|
+
deviceId?: undefined;
|
|
55
|
+
sessions?: undefined;
|
|
56
|
+
encrypted?: undefined;
|
|
57
|
+
} | {
|
|
58
|
+
connected: boolean;
|
|
59
|
+
status: import("./types.js").ChannelState;
|
|
60
|
+
deviceId: string | undefined;
|
|
61
|
+
sessions: number;
|
|
62
|
+
encrypted: boolean;
|
|
63
|
+
};
|
|
64
|
+
startAccount: (ctx: ChannelGatewayContext<ResolvedAccount>) => Promise<{
|
|
65
|
+
stop: () => Promise<void>;
|
|
66
|
+
}>;
|
|
67
|
+
};
|
|
68
|
+
outbound: {
|
|
69
|
+
deliveryMode: "direct";
|
|
70
|
+
targets: {
|
|
71
|
+
id: string;
|
|
72
|
+
label: string;
|
|
73
|
+
accountId: string;
|
|
74
|
+
}[];
|
|
75
|
+
sendText: ({ text, accountId, targetId, }: {
|
|
76
|
+
text: string;
|
|
77
|
+
accountId?: string;
|
|
78
|
+
targetId?: string;
|
|
79
|
+
}) => Promise<{
|
|
80
|
+
ok: boolean;
|
|
81
|
+
error?: string;
|
|
82
|
+
}>;
|
|
83
|
+
sendMedia: ({ text, mediaUrl, accountId, }: {
|
|
84
|
+
to: string;
|
|
85
|
+
text?: string;
|
|
86
|
+
mediaUrl: string;
|
|
87
|
+
accountId?: string;
|
|
88
|
+
}) => Promise<{
|
|
89
|
+
ok: boolean;
|
|
90
|
+
error?: string;
|
|
91
|
+
}>;
|
|
92
|
+
/** Rich payload delivery — OpenClaw v2026.3.2+ */
|
|
93
|
+
sendPayload: (ctx: ChannelOutboundPayloadContext) => Promise<{
|
|
94
|
+
ok: boolean;
|
|
95
|
+
error: string;
|
|
96
|
+
} | {
|
|
97
|
+
ok: boolean;
|
|
98
|
+
error?: undefined;
|
|
99
|
+
}>;
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=openclaw-plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-plugin.d.ts","sourceRoot":"","sources":["../src/openclaw-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAI3F,OAAO,KAAK,EACV,aAAa,EACb,qBAAqB,EACrB,6BAA6B,EAC9B,MAAM,qBAAqB,CAAC;AAS7B,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAEzD;AAED,wBAAgB,gBAAgB,CAAC,SAAS,SAAY,GAAG,aAAa,GAAG,SAAS,CAEjF;AAMD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;QAkBzB,0DAA0D;qBACvC,GAAG;;;;;;;;;;;;;QAatB,8DAA8D;sBAChD,GAAG;;;;;;;;;;;;;4BAaS,qBAAqB,CAAC,eAAe,CAAC;;;;;;;;;;;mDA0F7D;YACD,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,CAAC,EAAE,MAAM,CAAC;YACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;SACnB,KAAG,OAAO,CAAC;YAAE,EAAE,EAAE,OAAO,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;oDAkBzC;YACD,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,QAAQ,EAAE,MAAM,CAAC;YACjB,SAAS,CAAC,EAAE,MAAM,CAAC;SACpB,KAAG,OAAO,CAAC;YAAE,EAAE,EAAE,OAAO,CAAC;YAAC,KAAK,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAe5C,kDAAkD;2BACzB,6BAA6B;;;;;;;;CA8BzD,CAAC"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentVault OpenClaw Channel Plugin
|
|
3
|
+
*
|
|
4
|
+
* Registers AgentVault as a first-class OpenClaw messaging channel.
|
|
5
|
+
* Messages from the AgentVault UI are decrypted and routed into the
|
|
6
|
+
* OpenClaw agent loop; agent replies are encrypted and sent back.
|
|
7
|
+
*
|
|
8
|
+
* Installation (one-time):
|
|
9
|
+
* npx @agentvault/agentvault setup --token=av_tok_...
|
|
10
|
+
*
|
|
11
|
+
* After setup, restart OpenClaw — no further configuration needed.
|
|
12
|
+
*/
|
|
13
|
+
import { resolve } from "node:path";
|
|
14
|
+
import { SecureChannel } from "./channel.js";
|
|
15
|
+
// Runtime injected by register() — used in inbound handler
|
|
16
|
+
let _ocRuntime = null;
|
|
17
|
+
// Active channel instances keyed by accountId
|
|
18
|
+
const _channels = new Map();
|
|
19
|
+
export function setOcRuntime(runtime) {
|
|
20
|
+
_ocRuntime = runtime;
|
|
21
|
+
}
|
|
22
|
+
export function getActiveChannel(accountId = "default") {
|
|
23
|
+
return _channels.get(accountId);
|
|
24
|
+
}
|
|
25
|
+
// ---------------------------------------------------------------------------
|
|
26
|
+
// Channel plugin definition
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
export const agentVaultPlugin = {
|
|
29
|
+
id: "agentvault",
|
|
30
|
+
meta: {
|
|
31
|
+
id: "agentvault",
|
|
32
|
+
label: "AgentVault",
|
|
33
|
+
selectionLabel: "AgentVault (E2E Encrypted)",
|
|
34
|
+
docsPath: "https://agentvault.chat/docs",
|
|
35
|
+
blurb: "Zero-knowledge, end-to-end encrypted messaging between owners and their AI agents.",
|
|
36
|
+
aliases: ["av", "agent-vault"],
|
|
37
|
+
},
|
|
38
|
+
capabilities: {
|
|
39
|
+
chatTypes: ["direct"],
|
|
40
|
+
},
|
|
41
|
+
config: {
|
|
42
|
+
listAccountIds: (cfg) => {
|
|
43
|
+
const av = cfg?.channels?.agentvault;
|
|
44
|
+
return av?.dataDir ? ["default"] : [];
|
|
45
|
+
},
|
|
46
|
+
resolveAccount: (cfg, accountId) => {
|
|
47
|
+
const av = cfg?.channels?.agentvault ?? {};
|
|
48
|
+
return {
|
|
49
|
+
accountId: accountId ?? "default",
|
|
50
|
+
dataDir: av.dataDir ?? "~/.openclaw/agentvault",
|
|
51
|
+
apiUrl: av.apiUrl ?? "https://api.agentvault.chat",
|
|
52
|
+
agentName: av.agentName ?? "OpenClaw Agent",
|
|
53
|
+
httpPort: av.httpPort ?? 18790,
|
|
54
|
+
configured: Boolean(av.dataDir),
|
|
55
|
+
};
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
gateway: {
|
|
59
|
+
startAccount: async (ctx) => {
|
|
60
|
+
const { account, cfg, log, abortSignal } = ctx;
|
|
61
|
+
if (!account.configured) {
|
|
62
|
+
throw new Error("AgentVault channel is not configured.\n" +
|
|
63
|
+
"Run the one-time setup: npx @agentvault/agentvault setup --token=av_tok_...\n" +
|
|
64
|
+
"Then restart OpenClaw: openclaw gateway restart");
|
|
65
|
+
}
|
|
66
|
+
const dataDir = resolve(account.dataDir.replace(/^~/, process.env.HOME ?? "~"));
|
|
67
|
+
log?.(`[AgentVault] starting channel (dataDir=${dataDir})`);
|
|
68
|
+
const channel = new SecureChannel({
|
|
69
|
+
// No invite token needed — resuming from persisted enrolled state
|
|
70
|
+
inviteToken: "",
|
|
71
|
+
dataDir,
|
|
72
|
+
apiUrl: account.apiUrl,
|
|
73
|
+
agentName: account.agentName,
|
|
74
|
+
onMessage: async (plaintext, metadata) => {
|
|
75
|
+
if (!_ocRuntime) {
|
|
76
|
+
log?.("[AgentVault] runtime not ready — dropping inbound message");
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
await _handleInbound({ plaintext, metadata, channel, account, cfg });
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
log?.(`[AgentVault] inbound dispatch error: ${String(err)}`);
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
onStateChange: (state) => {
|
|
87
|
+
log?.(`[AgentVault] state → ${state}`);
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
_channels.set(account.accountId, channel);
|
|
91
|
+
// Start local HTTP server for proactive sends when channel is ready
|
|
92
|
+
const httpPort = account.httpPort;
|
|
93
|
+
channel.on("ready", () => {
|
|
94
|
+
channel.startHttpServer(httpPort);
|
|
95
|
+
log?.(`[AgentVault] HTTP send server listening on http://127.0.0.1:${httpPort}`);
|
|
96
|
+
});
|
|
97
|
+
// Respect gateway abort signal (OpenClaw gateway shutdown)
|
|
98
|
+
abortSignal?.addEventListener("abort", () => {
|
|
99
|
+
_channels.delete(account.accountId);
|
|
100
|
+
});
|
|
101
|
+
await channel.start();
|
|
102
|
+
return {
|
|
103
|
+
stop: async () => {
|
|
104
|
+
await channel.stop();
|
|
105
|
+
_channels.delete(account.accountId);
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
outbound: {
|
|
111
|
+
deliveryMode: "direct",
|
|
112
|
+
targets: [
|
|
113
|
+
{
|
|
114
|
+
id: "owner",
|
|
115
|
+
label: "AgentVault Owner",
|
|
116
|
+
accountId: "default",
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
id: "default",
|
|
120
|
+
label: "AgentVault Owner (default)",
|
|
121
|
+
accountId: "default",
|
|
122
|
+
},
|
|
123
|
+
],
|
|
124
|
+
sendText: async ({ text, accountId, targetId, }) => {
|
|
125
|
+
const resolvedId = accountId ?? (targetId === "owner" ? "default" : (targetId ?? "default"));
|
|
126
|
+
const channel = _channels.get(resolvedId);
|
|
127
|
+
if (!channel) {
|
|
128
|
+
return { ok: false, error: "AgentVault channel is not connected" };
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
await channel.send(text);
|
|
132
|
+
return { ok: true };
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
return { ok: false, error: String(err) };
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
};
|
|
140
|
+
// ---------------------------------------------------------------------------
|
|
141
|
+
// Inbound message handler — routes decrypted messages into the agent loop
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
async function _handleInbound(params) {
|
|
144
|
+
const { plaintext, metadata, channel, account, cfg } = params;
|
|
145
|
+
const core = _ocRuntime;
|
|
146
|
+
// Stable session key scoped to this AgentVault conversation
|
|
147
|
+
const sessionKey = `agentvault:${account.accountId}:${(metadata.conversationId ?? "default").slice(0, 8)}`;
|
|
148
|
+
const senderId = `agentvault:owner`;
|
|
149
|
+
// Resolve agent routing (respects agents.list routing rules if configured)
|
|
150
|
+
const route = core.channel.routing.resolveAgentRoute({
|
|
151
|
+
cfg,
|
|
152
|
+
channel: "agentvault",
|
|
153
|
+
accountId: account.accountId,
|
|
154
|
+
peer: { kind: "direct", id: senderId },
|
|
155
|
+
});
|
|
156
|
+
const storePath = core.channel.session.resolveStorePath(cfg?.session?.store, {
|
|
157
|
+
agentId: route.agentId,
|
|
158
|
+
});
|
|
159
|
+
const envelopeOptions = core.channel.reply.resolveEnvelopeFormatOptions(cfg);
|
|
160
|
+
const previousTimestamp = core.channel.session.readSessionUpdatedAt({
|
|
161
|
+
storePath,
|
|
162
|
+
sessionKey: route.sessionKey,
|
|
163
|
+
});
|
|
164
|
+
// Format the message body with standard OpenClaw envelope (channel label, timestamps, etc.)
|
|
165
|
+
const body = core.channel.reply.formatAgentEnvelope({
|
|
166
|
+
channel: "AgentVault",
|
|
167
|
+
from: "Owner",
|
|
168
|
+
timestamp: new Date(metadata.timestamp).getTime(),
|
|
169
|
+
previousTimestamp,
|
|
170
|
+
envelope: envelopeOptions,
|
|
171
|
+
body: plaintext,
|
|
172
|
+
});
|
|
173
|
+
// Build the inbound context payload OpenClaw expects
|
|
174
|
+
const ctxPayload = core.channel.reply.finalizeInboundContext({
|
|
175
|
+
Body: body,
|
|
176
|
+
RawBody: plaintext,
|
|
177
|
+
CommandBody: plaintext,
|
|
178
|
+
From: senderId,
|
|
179
|
+
To: `agentvault:agent:${account.accountId}`,
|
|
180
|
+
SessionKey: route.sessionKey,
|
|
181
|
+
AccountId: account.accountId,
|
|
182
|
+
ChatType: "direct",
|
|
183
|
+
ConversationLabel: "AgentVault",
|
|
184
|
+
SenderName: "Owner",
|
|
185
|
+
SenderId: senderId,
|
|
186
|
+
Provider: "agentvault",
|
|
187
|
+
Surface: "agentvault",
|
|
188
|
+
MessageSid: metadata.messageId,
|
|
189
|
+
Timestamp: new Date(metadata.timestamp).getTime(),
|
|
190
|
+
OriginatingChannel: "agentvault",
|
|
191
|
+
OriginatingTo: `agentvault:agent:${account.accountId}`,
|
|
192
|
+
// Owner is cryptographically verified via X3DH + Double Ratchet enrollment
|
|
193
|
+
CommandAuthorized: true,
|
|
194
|
+
});
|
|
195
|
+
// Record session metadata for context continuity
|
|
196
|
+
await core.channel.session.recordInboundSession({
|
|
197
|
+
storePath,
|
|
198
|
+
sessionKey: ctxPayload.SessionKey ?? route.sessionKey,
|
|
199
|
+
ctx: ctxPayload,
|
|
200
|
+
onRecordError: (err) => {
|
|
201
|
+
core.error?.(`[AgentVault] session record failed: ${String(err)}`);
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
// Dispatch to the OpenClaw agent loop; deliver replies back through the channel
|
|
205
|
+
await core.channel.reply.dispatchReplyWithBufferedBlockDispatcher({
|
|
206
|
+
ctx: ctxPayload,
|
|
207
|
+
cfg,
|
|
208
|
+
dispatcherOptions: {
|
|
209
|
+
deliver: async (payload) => {
|
|
210
|
+
const text = (payload.text ?? "").trim();
|
|
211
|
+
if (text) {
|
|
212
|
+
await channel.send(text);
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
onError: (err, info) => {
|
|
216
|
+
core.error?.(`[AgentVault] ${info?.kind ?? "reply"} error: ${String(err)}`);
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
replyOptions: {},
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=openclaw-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-plugin.js","sourceRoot":"","sources":["../src/openclaw-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw SDK type re-exports with inline fallback declarations.
|
|
3
|
+
*
|
|
4
|
+
* If `openclaw` is installed, we re-export the actual SDK types for full
|
|
5
|
+
* type-safety. Otherwise, we declare compatible fallback types so the
|
|
6
|
+
* plugin compiles standalone (e.g., during npm publish or in older envs).
|
|
7
|
+
*
|
|
8
|
+
* IMPORTANT: All runtime usage of OpenClaw APIs must still use feature
|
|
9
|
+
* detection (typeof checks, try/catch dynamic imports) — these types
|
|
10
|
+
* are purely for compile-time correctness.
|
|
11
|
+
*/
|
|
12
|
+
/** OpenClaw plugin API passed to register(). */
|
|
13
|
+
export interface OpenClawPluginApi {
|
|
14
|
+
runtime: PluginRuntime;
|
|
15
|
+
registerChannel(opts: {
|
|
16
|
+
plugin: unknown;
|
|
17
|
+
}): void;
|
|
18
|
+
registerTool?(opts: unknown, flags?: {
|
|
19
|
+
optional?: boolean;
|
|
20
|
+
}): void;
|
|
21
|
+
registerCommand?(opts: unknown): void;
|
|
22
|
+
registerHttpRoute?(opts: HttpRouteRegistration): void;
|
|
23
|
+
on?(event: string, handler: (...args: any[]) => void | Promise<void>): void;
|
|
24
|
+
}
|
|
25
|
+
/** OpenClaw runtime object — exposes channel, error, and other subsystems. */
|
|
26
|
+
export interface PluginRuntime {
|
|
27
|
+
channel: {
|
|
28
|
+
routing: {
|
|
29
|
+
resolveAgentRoute(opts: unknown): {
|
|
30
|
+
agentId: string;
|
|
31
|
+
sessionKey: string;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
session: {
|
|
35
|
+
resolveStorePath(store: unknown, opts: {
|
|
36
|
+
agentId: string;
|
|
37
|
+
}): string;
|
|
38
|
+
readSessionUpdatedAt(opts: {
|
|
39
|
+
storePath: string;
|
|
40
|
+
sessionKey: string;
|
|
41
|
+
}): number | undefined;
|
|
42
|
+
recordInboundSession(opts: unknown): Promise<void>;
|
|
43
|
+
};
|
|
44
|
+
reply: {
|
|
45
|
+
resolveEnvelopeFormatOptions(cfg: unknown): unknown;
|
|
46
|
+
formatAgentEnvelope(opts: unknown): string;
|
|
47
|
+
finalizeInboundContext(payload: Record<string, unknown>): Record<string, unknown>;
|
|
48
|
+
dispatchReplyWithBufferedBlockDispatcher(opts: unknown): Promise<void>;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
error?(...args: unknown[]): void;
|
|
52
|
+
}
|
|
53
|
+
/** Context passed to gateway.startAccount(). */
|
|
54
|
+
export interface ChannelGatewayContext<TAccount = ResolvedAccountBase> {
|
|
55
|
+
account: TAccount;
|
|
56
|
+
cfg: unknown;
|
|
57
|
+
log?: {
|
|
58
|
+
info(msg: string): void;
|
|
59
|
+
warn?(msg: string): void;
|
|
60
|
+
error?(msg: string): void;
|
|
61
|
+
} | ((msg: string) => void);
|
|
62
|
+
abortSignal?: AbortSignal;
|
|
63
|
+
}
|
|
64
|
+
/** Minimal resolved account shape from OpenClaw config resolution. */
|
|
65
|
+
export interface ResolvedAccountBase {
|
|
66
|
+
accountId: string;
|
|
67
|
+
configured: boolean;
|
|
68
|
+
dataDir: string;
|
|
69
|
+
apiUrl: string;
|
|
70
|
+
agentName: string;
|
|
71
|
+
httpPort: number;
|
|
72
|
+
}
|
|
73
|
+
/** Context passed to outbound.sendPayload(). */
|
|
74
|
+
export interface ChannelOutboundPayloadContext {
|
|
75
|
+
payload: ReplyPayload;
|
|
76
|
+
sessionKey: string;
|
|
77
|
+
accountId?: string;
|
|
78
|
+
targetId?: string;
|
|
79
|
+
}
|
|
80
|
+
/** Structured reply payload from OpenClaw v2026.3.2+. */
|
|
81
|
+
export interface ReplyPayload {
|
|
82
|
+
text?: string;
|
|
83
|
+
mediaUrls?: string[];
|
|
84
|
+
isReasoning?: boolean;
|
|
85
|
+
suggestedActions?: SuggestedAction[];
|
|
86
|
+
metadata?: Record<string, unknown>;
|
|
87
|
+
}
|
|
88
|
+
/** Suggested action attached to a reply payload. */
|
|
89
|
+
export interface SuggestedAction {
|
|
90
|
+
label: string;
|
|
91
|
+
action: string;
|
|
92
|
+
payload?: Record<string, unknown>;
|
|
93
|
+
}
|
|
94
|
+
/** Registration options for registerHttpRoute(). */
|
|
95
|
+
export interface HttpRouteRegistration {
|
|
96
|
+
path: string;
|
|
97
|
+
method?: "GET" | "POST" | "PUT" | "DELETE";
|
|
98
|
+
handler: (req: HttpRouteRequest) => Promise<HttpRouteResponse> | HttpRouteResponse;
|
|
99
|
+
}
|
|
100
|
+
/** Simplified request object from OpenClaw managed HTTP routes. */
|
|
101
|
+
export interface HttpRouteRequest {
|
|
102
|
+
method: string;
|
|
103
|
+
path: string;
|
|
104
|
+
headers: Record<string, string>;
|
|
105
|
+
body?: unknown;
|
|
106
|
+
remoteAddress?: string;
|
|
107
|
+
}
|
|
108
|
+
/** Response object for OpenClaw managed HTTP routes. */
|
|
109
|
+
export interface HttpRouteResponse {
|
|
110
|
+
status: number;
|
|
111
|
+
headers?: Record<string, string>;
|
|
112
|
+
body: unknown;
|
|
113
|
+
}
|
|
114
|
+
/** Hook event for message_sent. */
|
|
115
|
+
export interface MessageSentEvent {
|
|
116
|
+
messageId: string;
|
|
117
|
+
channelId: string;
|
|
118
|
+
sessionKey: string;
|
|
119
|
+
timestamp: number;
|
|
120
|
+
deliveryStatus: "delivered" | "failed" | "pending";
|
|
121
|
+
}
|
|
122
|
+
/** Hook event for session_start. */
|
|
123
|
+
export interface SessionStartEvent {
|
|
124
|
+
sessionKey: string;
|
|
125
|
+
agentId: string;
|
|
126
|
+
timestamp: number;
|
|
127
|
+
}
|
|
128
|
+
/** Hook event for session_end. */
|
|
129
|
+
export interface SessionEndEvent {
|
|
130
|
+
sessionKey: string;
|
|
131
|
+
agentId: string;
|
|
132
|
+
timestamp: number;
|
|
133
|
+
reason?: string;
|
|
134
|
+
}
|
|
135
|
+
/** Agent event payload from openclaw/dist/plugin-sdk/infra/agent-events.js. */
|
|
136
|
+
export interface AgentEventPayload {
|
|
137
|
+
type: string;
|
|
138
|
+
agentId: string;
|
|
139
|
+
timestamp: number;
|
|
140
|
+
data?: Record<string, unknown>;
|
|
141
|
+
}
|
|
142
|
+
/** Transcript update payload from openclaw/dist/plugin-sdk/sessions/transcript-events.js. */
|
|
143
|
+
export interface TranscriptUpdatePayload {
|
|
144
|
+
sessionKey: string;
|
|
145
|
+
delta: string;
|
|
146
|
+
timestamp: number;
|
|
147
|
+
role?: "assistant" | "user" | "system";
|
|
148
|
+
}
|
|
149
|
+
/** Hook handler map type. */
|
|
150
|
+
export type PluginHookHandlerMap = {
|
|
151
|
+
message_sent?: (event: MessageSentEvent) => void | Promise<void>;
|
|
152
|
+
session_start?: (event: SessionStartEvent) => void | Promise<void>;
|
|
153
|
+
session_end?: (event: SessionEndEvent) => void | Promise<void>;
|
|
154
|
+
};
|
|
155
|
+
//# sourceMappingURL=openclaw-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openclaw-types.d.ts","sourceRoot":"","sources":["../src/openclaw-types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,gDAAgD;AAChD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,aAAa,CAAC;IACvB,eAAe,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACjD,YAAY,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,CAAC;IACnE,eAAe,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACtC,iBAAiB,CAAC,CAAC,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAAC;IACtD,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC7E;AAED,8EAA8E;AAC9E,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE;QACP,OAAO,EAAE;YAAE,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG;gBAAE,OAAO,EAAE,MAAM,CAAC;gBAAC,UAAU,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC;QACvF,OAAO,EAAE;YACP,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;gBAAE,OAAO,EAAE,MAAM,CAAA;aAAE,GAAG,MAAM,CAAC;YACpE,oBAAoB,CAAC,IAAI,EAAE;gBAAE,SAAS,EAAE,MAAM,CAAC;gBAAC,UAAU,EAAE,MAAM,CAAA;aAAE,GAAG,MAAM,GAAG,SAAS,CAAC;YAC1F,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;SACpD,CAAC;QACF,KAAK,EAAE;YACL,4BAA4B,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC;YACpD,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;YAC3C,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YAClF,wCAAwC,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;SACxE,CAAC;KACH,CAAC;IACF,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;CAClC;AAED,gDAAgD;AAChD,MAAM,WAAW,qBAAqB,CAAC,QAAQ,GAAG,mBAAmB;IACnE,OAAO,EAAE,QAAQ,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;IACb,GAAG,CAAC,EAAE;QAAE,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,IAAI,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC;IACjH,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,sEAAsE;AACtE,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,gDAAgD;AAChD,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,yDAAyD;AACzD,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,oDAAoD;AACpD,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IAC3C,OAAO,EAAE,CAAC,GAAG,EAAE,gBAAgB,KAAK,OAAO,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAAC;CACpF;AAED,mEAAmE;AACnE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,IAAI,EAAE,OAAO,CAAC;CACf;AAED,mCAAmC;AACnC,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;CACpD;AAED,oCAAoC;AACpC,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,kCAAkC;AAClC,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,+EAA+E;AAC/E,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,6FAA6F;AAC7F,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC;CACxC;AAED,6BAA6B;AAC7B,MAAM,MAAM,oBAAoB,GAAG;IACjC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACjE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChE,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Policy Enforcer — validates skill invocations against the 5-stage policy pipeline.
|
|
3
|
+
*
|
|
4
|
+
* Pipeline stages:
|
|
5
|
+
* 1. Parse — extract action intent from request
|
|
6
|
+
* 2. Validate — schema validation of policy rules
|
|
7
|
+
* 3. Enforce — apply tool, model, and rate policies
|
|
8
|
+
* 4. Log — emit av.policy.evaluate telemetry span
|
|
9
|
+
* 5. Report — aggregate policy metrics
|
|
10
|
+
*
|
|
11
|
+
* Integration points:
|
|
12
|
+
* - AgentVaultMcpServer wraps tool handlers with enforce()
|
|
13
|
+
* - Channel.deliver() checks before forwarding sensitive messages
|
|
14
|
+
* - agentvault_check_policy MCP tool calls evaluate()
|
|
15
|
+
*/
|
|
16
|
+
import type { SkillDefinition } from "./mcp-server.js";
|
|
17
|
+
import { type TelemetrySpan } from "@agentvault/crypto";
|
|
18
|
+
export interface PolicyContext {
|
|
19
|
+
skillName: string;
|
|
20
|
+
toolName?: string;
|
|
21
|
+
model?: string;
|
|
22
|
+
args?: Record<string, unknown>;
|
|
23
|
+
agentId?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface PolicyResult {
|
|
26
|
+
allowed: boolean;
|
|
27
|
+
violations: PolicyViolation[];
|
|
28
|
+
stage: "parse" | "validate" | "enforce" | "log" | "report";
|
|
29
|
+
}
|
|
30
|
+
export interface PolicyViolation {
|
|
31
|
+
ruleId: string;
|
|
32
|
+
scope: "tool" | "model" | "rate" | "network" | "custom";
|
|
33
|
+
action: "block" | "warn" | "log";
|
|
34
|
+
type: string;
|
|
35
|
+
message: string;
|
|
36
|
+
details?: Record<string, unknown>;
|
|
37
|
+
}
|
|
38
|
+
export interface PolicyMetrics {
|
|
39
|
+
totalEvaluations: number;
|
|
40
|
+
totalBlocks: number;
|
|
41
|
+
totalWarnings: number;
|
|
42
|
+
bySkill: Record<string, {
|
|
43
|
+
evaluations: number;
|
|
44
|
+
blocks: number;
|
|
45
|
+
}>;
|
|
46
|
+
byRule: Record<string, number>;
|
|
47
|
+
}
|
|
48
|
+
export declare class PolicyEnforcer {
|
|
49
|
+
private skills;
|
|
50
|
+
private metrics;
|
|
51
|
+
private spanBuffer;
|
|
52
|
+
/**
|
|
53
|
+
* Register a skill definition for policy evaluation.
|
|
54
|
+
*/
|
|
55
|
+
registerSkill(skill: SkillDefinition): void;
|
|
56
|
+
/**
|
|
57
|
+
* Full 5-stage policy pipeline evaluation.
|
|
58
|
+
*/
|
|
59
|
+
evaluate(ctx: PolicyContext): PolicyResult;
|
|
60
|
+
/**
|
|
61
|
+
* Wrap an MCP tool handler with policy enforcement.
|
|
62
|
+
* Returns a function that checks policy before calling the original handler.
|
|
63
|
+
*/
|
|
64
|
+
wrapHandler(skillName: string, handler: (args: Record<string, unknown>) => Promise<unknown>): (args: Record<string, unknown>) => Promise<unknown>;
|
|
65
|
+
/**
|
|
66
|
+
* Get accumulated policy metrics.
|
|
67
|
+
*/
|
|
68
|
+
getMetrics(): PolicyMetrics;
|
|
69
|
+
/**
|
|
70
|
+
* Drain buffered telemetry spans.
|
|
71
|
+
*/
|
|
72
|
+
drainSpans(): TelemetrySpan[];
|
|
73
|
+
/**
|
|
74
|
+
* Reset all metrics (for testing).
|
|
75
|
+
*/
|
|
76
|
+
resetMetrics(): void;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=policy-enforcer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy-enforcer.d.ts","sourceRoot":"","sources":["../src/policy-enforcer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,oBAAoB,CAAC;AAM5B,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,KAAK,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;CAC5D;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IACxD,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAMD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAA2C;IACzD,OAAO,CAAC,OAAO,CAMb;IACF,OAAO,CAAC,UAAU,CAAuB;IAEzC;;OAEG;IACH,aAAa,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAI3C;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,aAAa,GAAG,YAAY;IAyF1C;;;OAGG;IACH,WAAW,CACT,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,GAC3D,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC;IAsBtD;;OAEG;IACH,UAAU,IAAI,aAAa;IAI3B;;OAEG;IACH,UAAU,IAAI,aAAa,EAAE;IAM7B;;OAEG;IACH,YAAY,IAAI,IAAI;CASrB"}
|
package/dist/setup.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentVault one-time setup command.
|
|
3
|
+
*
|
|
4
|
+
* Runs enrollment + waits for owner approval + persists state,
|
|
5
|
+
* then auto-registers the agentvault channel in openclaw config.
|
|
6
|
+
*
|
|
7
|
+
* Usage: npx @agentvault/agentvault setup --token=av_tok_...
|
|
8
|
+
*/
|
|
9
|
+
export declare function runSetupCommand(options: {
|
|
10
|
+
token: string;
|
|
11
|
+
name: string;
|
|
12
|
+
apiUrl: string;
|
|
13
|
+
dataDir: string;
|
|
14
|
+
accountId?: string;
|
|
15
|
+
force?: boolean;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
/**
|
|
18
|
+
* Install/update the plugin in OpenClaw's extensions directory.
|
|
19
|
+
* Returns true if the plugin is installed (or was already up-to-date).
|
|
20
|
+
*/
|
|
21
|
+
export declare function installPlugin(env: NodeJS.ProcessEnv): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Configure pm2 to manage the OpenClaw gateway process.
|
|
24
|
+
* Returns true if pm2 was configured (or already configured).
|
|
25
|
+
*/
|
|
26
|
+
export declare function configurePm2(env: NodeJS.ProcessEnv): boolean;
|
|
27
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ShB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAqC7D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CA4D5D"}
|