@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
package/dist/state.js
ADDED
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { encryptBackup, hashBackupCode, bytesToBase64, bytesToHex, } from "@agentvault/crypto";
|
|
4
|
+
const STATE_FILE = "agentvault.json";
|
|
5
|
+
const LEGACY_STATE_FILE = "secure-channel.json";
|
|
6
|
+
// State files contain deviceJwt and ratchet keys — restrict to owner only
|
|
7
|
+
const DIR_MODE = 0o700;
|
|
8
|
+
const FILE_MODE = 0o600;
|
|
9
|
+
export async function saveState(dataDir, state) {
|
|
10
|
+
await mkdir(dataDir, { recursive: true, mode: DIR_MODE });
|
|
11
|
+
const filePath = join(dataDir, STATE_FILE);
|
|
12
|
+
await writeFile(filePath, JSON.stringify(state, null, 2), { encoding: "utf-8", mode: FILE_MODE });
|
|
13
|
+
// Clean up legacy file after migration
|
|
14
|
+
try {
|
|
15
|
+
await rm(join(dataDir, LEGACY_STATE_FILE));
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
// Already removed or never existed
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Load raw persisted state from disk.
|
|
23
|
+
* Returns the raw parsed JSON — caller is responsible for migration
|
|
24
|
+
* from legacy format to current PersistedState.
|
|
25
|
+
*
|
|
26
|
+
* Checks agentvault.json first, falls back to secure-channel.json
|
|
27
|
+
* for backward compatibility. Auto-migrates on first legacy load.
|
|
28
|
+
*/
|
|
29
|
+
export async function loadState(dataDir) {
|
|
30
|
+
// Try new filename first
|
|
31
|
+
const filePath = join(dataDir, STATE_FILE);
|
|
32
|
+
try {
|
|
33
|
+
const raw = await readFile(filePath, "utf-8");
|
|
34
|
+
return JSON.parse(raw);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Fall through to legacy
|
|
38
|
+
}
|
|
39
|
+
// Fall back to legacy filename
|
|
40
|
+
const legacyPath = join(dataDir, LEGACY_STATE_FILE);
|
|
41
|
+
try {
|
|
42
|
+
const raw = await readFile(legacyPath, "utf-8");
|
|
43
|
+
const parsed = JSON.parse(raw);
|
|
44
|
+
// Auto-migrate: write to new filename, remove legacy
|
|
45
|
+
await mkdir(dataDir, { recursive: true, mode: DIR_MODE });
|
|
46
|
+
await writeFile(filePath, JSON.stringify(parsed, null, 2), { encoding: "utf-8", mode: FILE_MODE });
|
|
47
|
+
await rm(legacyPath);
|
|
48
|
+
return parsed;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Check whether persisted state is valid and usable (has deviceId, deviceJwt, and at least one session).
|
|
56
|
+
*/
|
|
57
|
+
export async function isStateValid(dataDir) {
|
|
58
|
+
try {
|
|
59
|
+
const filePath = join(dataDir, STATE_FILE);
|
|
60
|
+
const raw = await readFile(filePath, "utf-8");
|
|
61
|
+
const parsed = JSON.parse(raw);
|
|
62
|
+
return !!(parsed &&
|
|
63
|
+
parsed.deviceId &&
|
|
64
|
+
parsed.deviceJwt &&
|
|
65
|
+
parsed.sessions &&
|
|
66
|
+
Object.keys(parsed.sessions).length > 0);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Create a backup of the state file (atomic write via tmp + rename).
|
|
74
|
+
* Silent no-op if no state file exists.
|
|
75
|
+
*/
|
|
76
|
+
export async function backupState(dataDir) {
|
|
77
|
+
const src = join(dataDir, STATE_FILE);
|
|
78
|
+
const bak = join(dataDir, `${STATE_FILE}.bak`);
|
|
79
|
+
const tmp = join(dataDir, `${STATE_FILE}.bak.tmp`);
|
|
80
|
+
try {
|
|
81
|
+
const data = await readFile(src, "utf-8");
|
|
82
|
+
await writeFile(tmp, data, { encoding: "utf-8", mode: FILE_MODE });
|
|
83
|
+
await rename(tmp, bak);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// No state file or write failed — silent no-op
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Restore state from backup if primary state is missing/empty/invalid but .bak exists and is valid.
|
|
91
|
+
* Returns true if state was successfully restored.
|
|
92
|
+
*/
|
|
93
|
+
export async function restoreState(dataDir) {
|
|
94
|
+
// Only restore if primary is missing or invalid
|
|
95
|
+
const primaryValid = await isStateValid(dataDir);
|
|
96
|
+
if (primaryValid)
|
|
97
|
+
return false;
|
|
98
|
+
const bak = join(dataDir, `${STATE_FILE}.bak`);
|
|
99
|
+
try {
|
|
100
|
+
const data = await readFile(bak, "utf-8");
|
|
101
|
+
const parsed = JSON.parse(data);
|
|
102
|
+
if (!parsed ||
|
|
103
|
+
!parsed.deviceId ||
|
|
104
|
+
!parsed.deviceJwt ||
|
|
105
|
+
!parsed.sessions ||
|
|
106
|
+
Object.keys(parsed.sessions).length === 0) {
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
await mkdir(dataDir, { recursive: true, mode: DIR_MODE });
|
|
110
|
+
await writeFile(join(dataDir, STATE_FILE), data, { encoding: "utf-8", mode: FILE_MODE });
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return false;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Upload encrypted backup to server. Converts PersistedState → BackupBundle,
|
|
119
|
+
* encrypts with backup code, and PUTs to the backend.
|
|
120
|
+
*/
|
|
121
|
+
export async function uploadBackupToServer(state, backupCode, apiUrl, deviceJwt) {
|
|
122
|
+
// Build BackupBundle from PersistedState
|
|
123
|
+
const ratchets = {};
|
|
124
|
+
for (const [convId, session] of Object.entries(state.sessions)) {
|
|
125
|
+
if (session.ratchetState) {
|
|
126
|
+
ratchets[convId] = session.ratchetState;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
const bundle = {
|
|
130
|
+
version: 1,
|
|
131
|
+
createdAt: new Date().toISOString(),
|
|
132
|
+
deviceId: state.deviceId,
|
|
133
|
+
identityKeypair: state.identityKeypair,
|
|
134
|
+
ephemeralKeypair: state.ephemeralKeypair,
|
|
135
|
+
fingerprint: state.fingerprint,
|
|
136
|
+
ratchets,
|
|
137
|
+
sessions: Object.fromEntries(Object.entries(state.sessions).map(([convId, s]) => [
|
|
138
|
+
convId,
|
|
139
|
+
{
|
|
140
|
+
ownerDeviceId: s.ownerDeviceId,
|
|
141
|
+
ratchetState: s.ratchetState,
|
|
142
|
+
activated: s.activated,
|
|
143
|
+
},
|
|
144
|
+
])),
|
|
145
|
+
topics: state.topics,
|
|
146
|
+
defaultTopicId: state.defaultTopicId,
|
|
147
|
+
groupId: state.groupId,
|
|
148
|
+
hubAddress: state.hubAddress,
|
|
149
|
+
};
|
|
150
|
+
const encrypted = await encryptBackup(bundle, backupCode);
|
|
151
|
+
const codeHash = await hashBackupCode(backupCode);
|
|
152
|
+
const resp = await fetch(`${apiUrl}/api/v1/backup`, {
|
|
153
|
+
method: "PUT",
|
|
154
|
+
headers: {
|
|
155
|
+
"Content-Type": "application/json",
|
|
156
|
+
Authorization: `Bearer ${deviceJwt}`,
|
|
157
|
+
},
|
|
158
|
+
body: JSON.stringify({
|
|
159
|
+
backup_blob: bytesToBase64(encrypted),
|
|
160
|
+
backup_code_hash: bytesToHex(codeHash),
|
|
161
|
+
}),
|
|
162
|
+
});
|
|
163
|
+
if (!resp.ok) {
|
|
164
|
+
throw new Error(`Backup upload failed: ${resp.status}`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
export async function clearState(dataDir) {
|
|
168
|
+
// Remove both files to cover migration edge cases
|
|
169
|
+
for (const filename of [STATE_FILE, LEGACY_STATE_FILE]) {
|
|
170
|
+
try {
|
|
171
|
+
await rm(join(dataDir, filename));
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
// File doesn't exist — nothing to clear
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export async function enrollDevice(apiUrl, inviteToken, identityPkHex, ephemeralPkHex, proofHex, platform) {
|
|
2
|
+
const res = await fetch(`${apiUrl}/api/v1/enroll`, {
|
|
3
|
+
method: "POST",
|
|
4
|
+
headers: { "Content-Type": "application/json" },
|
|
5
|
+
body: JSON.stringify({
|
|
6
|
+
invite_token: inviteToken,
|
|
7
|
+
identity_public_key: identityPkHex,
|
|
8
|
+
ephemeral_public_key: ephemeralPkHex,
|
|
9
|
+
proof_of_possession: proofHex,
|
|
10
|
+
platform: platform ?? "node",
|
|
11
|
+
}),
|
|
12
|
+
});
|
|
13
|
+
if (!res.ok) {
|
|
14
|
+
const detail = await res.text();
|
|
15
|
+
throw new Error(`Enrollment failed (${res.status}): ${detail}`);
|
|
16
|
+
}
|
|
17
|
+
return res.json();
|
|
18
|
+
}
|
|
19
|
+
export async function pollDeviceStatus(apiUrl, deviceId) {
|
|
20
|
+
const res = await fetch(`${apiUrl}/api/v1/devices/${deviceId}/status`);
|
|
21
|
+
if (res.status === 429) {
|
|
22
|
+
// Rate limited — caller should back off and retry
|
|
23
|
+
return { device_id: deviceId, status: "PENDING", fingerprint: "", rateLimited: true };
|
|
24
|
+
}
|
|
25
|
+
if (!res.ok) {
|
|
26
|
+
const detail = await res.text();
|
|
27
|
+
throw new Error(`Status poll failed (${res.status}): ${detail}`);
|
|
28
|
+
}
|
|
29
|
+
return res.json();
|
|
30
|
+
}
|
|
31
|
+
export async function activateDevice(apiUrl, deviceId) {
|
|
32
|
+
const res = await fetch(`${apiUrl}/api/v1/devices/${deviceId}/activate`, {
|
|
33
|
+
method: "POST",
|
|
34
|
+
headers: { "Content-Type": "application/json" },
|
|
35
|
+
body: JSON.stringify({}),
|
|
36
|
+
});
|
|
37
|
+
if (!res.ok) {
|
|
38
|
+
const detail = await res.text();
|
|
39
|
+
throw new Error(`Activation failed (${res.status}): ${detail}`);
|
|
40
|
+
}
|
|
41
|
+
return res.json();
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAqBA,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,MAAc,EACd,WAAmB,EACnB,aAAqB,EACrB,cAAsB,EACtB,QAAgB,EAChB,QAAiB;IAEjB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,gBAAgB,EAAE;QACjD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,YAAY,EAAE,WAAW;YACzB,mBAAmB,EAAE,aAAa;YAClC,oBAAoB,EAAE,cAAc;YACpC,mBAAmB,EAAE,QAAQ;YAC7B,QAAQ,EAAE,QAAQ,IAAI,MAAM;SAC7B,CAAC;KACH,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,CAAC,MAAM,MAAM,MAAM,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAc,EACd,QAAgB;IAEhB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,mBAAmB,QAAQ,SAAS,CAAC,CAAC;IACvE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,kDAAkD;QAClD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACxF,CAAC;IACD,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,CAAC,MAAM,MAAM,MAAM,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAc,EACd,QAAgB;IAEhB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,mBAAmB,QAAQ,WAAW,EAAE;QACvE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;KACzB,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,CAAC,MAAM,MAAM,MAAM,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -151,6 +151,8 @@ export interface PersistedState {
|
|
|
151
151
|
}>;
|
|
152
152
|
/** Multi-agent room state */
|
|
153
153
|
rooms?: Record<string, RoomState>;
|
|
154
|
+
/** Last inbound room ID for sticky room routing across restarts */
|
|
155
|
+
lastInboundRoomId?: string;
|
|
154
156
|
}
|
|
155
157
|
/** Legacy state format for backward compatibility */
|
|
156
158
|
export interface LegacyPersistedState {
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IACnE,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9C,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE;QACzB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,IAAI,EAAE,WAAW,GAAG,WAAW,CAAC;QAChC,cAAc,EAAE,MAAM,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,KAAK,IAAI,CAAC;IACX,iFAAiF;IACjF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,WAAW,GACX,SAAS,GACT,YAAY,GACZ,YAAY,GACZ,OAAO,GACP,cAAc,GACd,OAAO,CAAC;AAEZ,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,6EAA6E;IAC7E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACnD,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,UAAU,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,eAAe,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3D,gBAAgB,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,YAAY,EAAE,CAAC;IAChC,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAC3B,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;QACjC,OAAO,CAAC,EAAE,aAAa,CAAC;QACxB,0BAA0B,CAAC,EAAE,MAAM,CAAC;QACpC,mEAAmE;QACnE,eAAe,CAAC,EAAE;YAChB,YAAY,EAAE,MAAM,CAAC;SACtB,CAAC;QACF,kCAAkC,CAAC,EAAE,MAAM,CAAC;KAC7C,CAAC,CAAC;IACH,kDAAkD;IAClD,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Workspace file handlers — upload, list, read workspace .md files.
|
|
3
|
+
*
|
|
4
|
+
* Workspace files (SOUL.md, IDENTITY.md, etc.) define agent personality
|
|
5
|
+
* and behavior. These handlers validate filenames, verify signatures,
|
|
6
|
+
* enforce size limits, and perform atomic writes.
|
|
7
|
+
*/
|
|
8
|
+
import { readdir, readFile, writeFile, rename, stat, unlink, mkdir } from "node:fs/promises";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
import { randomUUID } from "node:crypto";
|
|
11
|
+
import { verifyDocumentSignature, base64ToBytes } from "@agentvault/crypto";
|
|
12
|
+
/** Maximum file size: 100 KB */
|
|
13
|
+
const MAX_FILE_SIZE = 100 * 1024;
|
|
14
|
+
/**
|
|
15
|
+
* Validate a workspace filename.
|
|
16
|
+
* Returns an error message if invalid, null if valid.
|
|
17
|
+
*
|
|
18
|
+
* Rules:
|
|
19
|
+
* - Must end in .md
|
|
20
|
+
* - No path traversal (.., /)
|
|
21
|
+
* - No backslashes or null bytes
|
|
22
|
+
* - Alphanumeric, hyphens, underscores, and dots only
|
|
23
|
+
*/
|
|
24
|
+
export function validateWorkspaceFilename(filename) {
|
|
25
|
+
if (!filename || typeof filename !== "string") {
|
|
26
|
+
return "Filename is required";
|
|
27
|
+
}
|
|
28
|
+
// Null byte check
|
|
29
|
+
if (filename.includes("\0")) {
|
|
30
|
+
return "Filename contains null bytes";
|
|
31
|
+
}
|
|
32
|
+
// Path traversal checks
|
|
33
|
+
if (filename.includes("..")) {
|
|
34
|
+
return "Path traversal not allowed";
|
|
35
|
+
}
|
|
36
|
+
if (filename.includes("/") || filename.includes("\\")) {
|
|
37
|
+
return "Path separators not allowed in filename";
|
|
38
|
+
}
|
|
39
|
+
// Must end in .md
|
|
40
|
+
if (!filename.endsWith(".md")) {
|
|
41
|
+
return "Only .md files are allowed";
|
|
42
|
+
}
|
|
43
|
+
// Only allow alphanumeric, hyphens, underscores, dots
|
|
44
|
+
if (!/^[a-zA-Z0-9._-]+$/.test(filename)) {
|
|
45
|
+
return "Filename may only contain letters, numbers, hyphens, underscores, and dots";
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Handle a workspace file upload — verify signature, validate, write atomically.
|
|
51
|
+
*/
|
|
52
|
+
export async function handleWorkspaceUpload(data, workspaceDir) {
|
|
53
|
+
// Validate filename
|
|
54
|
+
const filenameError = validateWorkspaceFilename(data.filename);
|
|
55
|
+
if (filenameError) {
|
|
56
|
+
return { status: "error", error: filenameError };
|
|
57
|
+
}
|
|
58
|
+
// Validate content
|
|
59
|
+
if (!data.content || typeof data.content !== "string") {
|
|
60
|
+
return { status: "error", error: "File content is required" };
|
|
61
|
+
}
|
|
62
|
+
// Size limit
|
|
63
|
+
const contentBytes = Buffer.byteLength(data.content, "utf-8");
|
|
64
|
+
if (contentBytes > MAX_FILE_SIZE) {
|
|
65
|
+
return {
|
|
66
|
+
status: "error",
|
|
67
|
+
error: `File exceeds 100KB limit (${Math.round(contentBytes / 1024)}KB)`,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
// Verify Ed25519 signature
|
|
71
|
+
let verified = false;
|
|
72
|
+
try {
|
|
73
|
+
const signatureBytes = base64ToBytes(data.signature);
|
|
74
|
+
const publicKeyBytes = base64ToBytes(data.signer_public_key);
|
|
75
|
+
const signedPayload = {
|
|
76
|
+
filename: data.filename,
|
|
77
|
+
content: data.content,
|
|
78
|
+
timestamp: data.timestamp,
|
|
79
|
+
};
|
|
80
|
+
verified = await verifyDocumentSignature(signedPayload, signatureBytes, publicKeyBytes);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
return { status: "error", error: "Signature verification failed: invalid format" };
|
|
84
|
+
}
|
|
85
|
+
if (!verified) {
|
|
86
|
+
return { status: "error", error: "Invalid signature — file may have been tampered with" };
|
|
87
|
+
}
|
|
88
|
+
// Ensure workspace directory exists
|
|
89
|
+
await mkdir(workspaceDir, { recursive: true });
|
|
90
|
+
// Atomic write: write to temp, then rename
|
|
91
|
+
const targetPath = join(workspaceDir, data.filename);
|
|
92
|
+
const tempPath = join(workspaceDir, `.tmp_${randomUUID()}_${data.filename}`);
|
|
93
|
+
try {
|
|
94
|
+
await writeFile(tempPath, data.content, "utf-8");
|
|
95
|
+
await rename(tempPath, targetPath);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
// Clean up temp file if rename fails
|
|
99
|
+
try {
|
|
100
|
+
await unlink(tempPath);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
// ignore cleanup errors
|
|
104
|
+
}
|
|
105
|
+
return { status: "error", error: `Failed to write file: ${err.message}` };
|
|
106
|
+
}
|
|
107
|
+
console.log(`[Workspace] Wrote ${data.filename} (${contentBytes} bytes, sig verified) → ${targetPath}`);
|
|
108
|
+
return {
|
|
109
|
+
status: "success",
|
|
110
|
+
written_path: targetPath,
|
|
111
|
+
verified_signature: true,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* List .md files in the workspace directory.
|
|
116
|
+
*/
|
|
117
|
+
export async function handleWorkspaceList(workspaceDir) {
|
|
118
|
+
try {
|
|
119
|
+
const entries = await readdir(workspaceDir);
|
|
120
|
+
const files = [];
|
|
121
|
+
for (const entry of entries) {
|
|
122
|
+
if (!entry.endsWith(".md"))
|
|
123
|
+
continue;
|
|
124
|
+
try {
|
|
125
|
+
const filePath = join(workspaceDir, entry);
|
|
126
|
+
const fileStat = await stat(filePath);
|
|
127
|
+
if (!fileStat.isFile())
|
|
128
|
+
continue;
|
|
129
|
+
files.push({
|
|
130
|
+
filename: entry,
|
|
131
|
+
size: fileStat.size,
|
|
132
|
+
modified: fileStat.mtime.toISOString(),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// Skip files we can't stat
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Sort by filename
|
|
140
|
+
files.sort((a, b) => a.filename.localeCompare(b.filename));
|
|
141
|
+
return { files };
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
// If directory doesn't exist, return empty list
|
|
145
|
+
if (err.code === "ENOENT") {
|
|
146
|
+
return { files: [] };
|
|
147
|
+
}
|
|
148
|
+
throw err;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Read a workspace file's content.
|
|
153
|
+
*/
|
|
154
|
+
export async function handleWorkspaceRead(data, workspaceDir) {
|
|
155
|
+
// Validate filename
|
|
156
|
+
const filenameError = validateWorkspaceFilename(data.filename);
|
|
157
|
+
if (filenameError) {
|
|
158
|
+
return { error: filenameError };
|
|
159
|
+
}
|
|
160
|
+
const filePath = join(workspaceDir, data.filename);
|
|
161
|
+
try {
|
|
162
|
+
const content = await readFile(filePath, "utf-8");
|
|
163
|
+
const fileStat = await stat(filePath);
|
|
164
|
+
return {
|
|
165
|
+
filename: data.filename,
|
|
166
|
+
content,
|
|
167
|
+
size: fileStat.size,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
if (err.code === "ENOENT") {
|
|
172
|
+
return { error: `File not found: ${data.filename}` };
|
|
173
|
+
}
|
|
174
|
+
return { error: `Failed to read file: ${err.message}` };
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=workspace-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-handlers.js","sourceRoot":"","sources":["../src/workspace-handlers.ts"],"names":[],"mappings":"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"}
|
package/openclaw.plugin.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "agentvault",
|
|
3
3
|
"name": "AgentVault",
|
|
4
4
|
"description": "End-to-end encrypted, zero-knowledge messaging between AI agent owners and their agents.",
|
|
5
|
-
"version": "0.14.
|
|
5
|
+
"version": "0.14.30",
|
|
6
6
|
"kind": "channel",
|
|
7
7
|
"channels": ["agentvault"],
|
|
8
8
|
"outbound": {
|