@agentvault/agentvault 0.15.0 → 0.15.2

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 +10 -0
  2. package/dist/_cp.d.ts.map +1 -0
  3. package/dist/cli.js +72036 -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 +1449 -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
package/dist/state.js DELETED
@@ -1,178 +0,0 @@
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
package/dist/state.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../src/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,aAAa,EACb,cAAc,EACd,aAAa,EACb,UAAU,GAEX,MAAM,oBAAoB,CAAC;AAG5B,MAAM,UAAU,GAAG,iBAAiB,CAAC;AACrC,MAAM,iBAAiB,GAAG,qBAAqB,CAAC;AAEhD,0EAA0E;AAC1E,MAAM,QAAQ,GAAG,KAAK,CAAC;AACvB,MAAM,SAAS,GAAG,KAAK,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAe,EACf,KAAqB;IAErB,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC3C,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAElG,uCAAuC;IACvC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;IACrC,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,OAAe;IAGf,yBAAyB;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;IAED,+BAA+B;IAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,qDAAqD;QACrD,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1D,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACnG,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC;QACrB,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe;IAChD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,CAAC,CAAC,CACP,MAAM;YACN,MAAM,CAAC,QAAQ;YACf,MAAM,CAAC,SAAS;YAChB,MAAM,CAAC,QAAQ;YACf,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CACxC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IACtC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,UAAU,MAAM,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,UAAU,UAAU,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACnE,MAAM,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;IACjD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe;IAChD,gDAAgD;IAChD,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,YAAY;QAAE,OAAO,KAAK,CAAC;IAE/B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,UAAU,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IACE,CAAC,MAAM;YACP,CAAC,MAAM,CAAC,QAAQ;YAChB,CAAC,MAAM,CAAC,SAAS;YACjB,CAAC,MAAM,CAAC,QAAQ;YAChB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,EACzC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1D,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;QACzF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,KAAqB,EACrB,UAAkB,EAClB,MAAc,EACd,SAAiB;IAEjB,yCAAyC;IACzC,MAAM,QAAQ,GAA2B,EAAE,CAAC;IAC5C,KAAK,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/D,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,QAAQ,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAiB;QAC3B,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,QAAQ;QACR,QAAQ,EAAE,MAAM,CAAC,WAAW,CAC1B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM;YACN;gBACE,aAAa,EAAE,CAAC,CAAC,aAAa;gBAC9B,YAAY,EAAE,CAAC,CAAC,YAAY;gBAC5B,SAAS,EAAE,CAAC,CAAC,SAAS;aACvB;SACF,CAAC,CACH;QACD,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,UAAU,EAAE,KAAK,CAAC,UAAU;KAC7B,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IAElD,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,gBAAgB,EAAE;QAClD,MAAM,EAAE,KAAK;QACb,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,SAAS,EAAE;SACrC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,WAAW,EAAE,aAAa,CAAC,SAAS,CAAC;YACrC,gBAAgB,EAAE,UAAU,CAAC,QAAQ,CAAC;SACvC,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAe;IAC9C,kDAAkD;IAClD,KAAK,MAAM,QAAQ,IAAI,CAAC,UAAU,EAAE,iBAAiB,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,wCAAwC;QAC1C,CAAC;IACH,CAAC;AACH,CAAC"}
package/dist/transport.js DELETED
@@ -1,43 +0,0 @@
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
@@ -1 +0,0 @@
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.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -1,177 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace-handlers.js","sourceRoot":"","sources":["../src/workspace-handlers.ts"],"names":[],"mappings":"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"}