@zcloak/ai-agent 1.0.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 +5 -0
- package/dist/bind.d.ts +22 -0
- package/dist/bind.js +145 -0
- package/dist/bind.js.map +1 -0
- package/dist/cli.d.ts +31 -0
- package/dist/cli.js +126 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +14 -0
- package/dist/config.js +34 -0
- package/dist/config.js.map +1 -0
- package/dist/crypto.d.ts +113 -0
- package/dist/crypto.js +252 -0
- package/dist/crypto.js.map +1 -0
- package/dist/daemon.d.ts +94 -0
- package/dist/daemon.js +271 -0
- package/dist/daemon.js.map +1 -0
- package/dist/delete.d.ts +22 -0
- package/dist/delete.js +231 -0
- package/dist/delete.js.map +1 -0
- package/dist/doc.d.ts +23 -0
- package/dist/doc.js +180 -0
- package/dist/doc.js.map +1 -0
- package/dist/error.d.ts +45 -0
- package/dist/error.js +79 -0
- package/dist/error.js.map +1 -0
- package/dist/feed.d.ts +20 -0
- package/dist/feed.js +83 -0
- package/dist/feed.js.map +1 -0
- package/dist/identity.d.ts +50 -0
- package/dist/identity.js +99 -0
- package/dist/identity.js.map +1 -0
- package/dist/identity_cmd.d.ts +23 -0
- package/dist/identity_cmd.js +136 -0
- package/dist/identity_cmd.js.map +1 -0
- package/dist/idl.d.ts +99 -0
- package/dist/idl.js +213 -0
- package/dist/idl.js.map +1 -0
- package/dist/key-store.d.ts +88 -0
- package/dist/key-store.js +171 -0
- package/dist/key-store.js.map +1 -0
- package/dist/pow.d.ts +24 -0
- package/dist/pow.js +86 -0
- package/dist/pow.js.map +1 -0
- package/dist/register.d.ts +24 -0
- package/dist/register.js +191 -0
- package/dist/register.js.map +1 -0
- package/dist/rpc.d.ts +107 -0
- package/dist/rpc.js +60 -0
- package/dist/rpc.js.map +1 -0
- package/dist/serve.d.ts +55 -0
- package/dist/serve.js +455 -0
- package/dist/serve.js.map +1 -0
- package/dist/session.d.ts +104 -0
- package/dist/session.js +189 -0
- package/dist/session.js.map +1 -0
- package/dist/sign.d.ts +33 -0
- package/dist/sign.js +355 -0
- package/dist/sign.js.map +1 -0
- package/dist/types/common.d.ts +63 -0
- package/dist/types/common.js +8 -0
- package/dist/types/common.js.map +1 -0
- package/dist/types/config.d.ts +28 -0
- package/dist/types/config.js +8 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/registry.d.ts +72 -0
- package/dist/types/registry.js +13 -0
- package/dist/types/registry.js.map +1 -0
- package/dist/types/sign-event.d.ts +134 -0
- package/dist/types/sign-event.js +13 -0
- package/dist/types/sign-event.js.map +1 -0
- package/dist/utils.d.ts +113 -0
- package/dist/utils.js +382 -0
- package/dist/utils.js.map +1 -0
- package/dist/verify.d.ts +23 -0
- package/dist/verify.js +207 -0
- package/dist/verify.js.map +1 -0
- package/dist/vetkey.d.ts +27 -0
- package/dist/vetkey.js +507 -0
- package/dist/vetkey.js.map +1 -0
- package/package.json +55 -0
package/dist/utils.js
ADDED
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* zCloak.ai Common Utilities
|
|
4
|
+
*
|
|
5
|
+
* Provides PoW computation, file hashing, argument parsing, formatted output, and more.
|
|
6
|
+
* All other scripts depend on this module.
|
|
7
|
+
*/
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.computePow = computePow;
|
|
13
|
+
exports.parseArgs = parseArgs;
|
|
14
|
+
exports.parseTags = parseTags;
|
|
15
|
+
exports.hashFile = hashFile;
|
|
16
|
+
exports.getFileSize = getFileSize;
|
|
17
|
+
exports.getMimeType = getMimeType;
|
|
18
|
+
exports.listFiles = listFiles;
|
|
19
|
+
exports.generateManifest = generateManifest;
|
|
20
|
+
exports.parseManifestEntries = parseManifestEntries;
|
|
21
|
+
exports.verifyManifestEntries = verifyManifestEntries;
|
|
22
|
+
exports.formatSignEvent = formatSignEvent;
|
|
23
|
+
exports.formatSignEvents = formatSignEvents;
|
|
24
|
+
exports.buildEventUrl = buildEventUrl;
|
|
25
|
+
exports.formatSignResult = formatSignResult;
|
|
26
|
+
exports.formatOptText = formatOptText;
|
|
27
|
+
const fs_1 = __importDefault(require("fs"));
|
|
28
|
+
const path_1 = __importDefault(require("path"));
|
|
29
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
30
|
+
const config_1 = __importDefault(require("./config"));
|
|
31
|
+
const identity_1 = require("./identity");
|
|
32
|
+
// ========== PoW Computation ==========
|
|
33
|
+
/**
|
|
34
|
+
* Compute PoW nonce
|
|
35
|
+
* Finds a nonce such that sha256(base + nonce) starts with a specified number of zeros
|
|
36
|
+
* @param base - Base string (usually the latest sign event id)
|
|
37
|
+
* @param zeros - Number of leading zeros, defaults to config.pow_zeros
|
|
38
|
+
*/
|
|
39
|
+
/** Default PoW timeout in milliseconds (5 minutes) — prevents runaway CPU usage */
|
|
40
|
+
const POW_TIMEOUT_MS = 5 * 60 * 1000;
|
|
41
|
+
function computePow(base, zeros) {
|
|
42
|
+
const effectiveZeros = zeros ?? config_1.default.pow_zeros;
|
|
43
|
+
const prefix = '0'.repeat(effectiveZeros);
|
|
44
|
+
const start = Date.now();
|
|
45
|
+
let nonce = 0;
|
|
46
|
+
for (;;) {
|
|
47
|
+
const candidate = base + nonce.toString();
|
|
48
|
+
const hash = crypto_1.default.createHash('sha256').update(candidate).digest('hex');
|
|
49
|
+
if (hash.startsWith(prefix)) {
|
|
50
|
+
const timeMs = Date.now() - start;
|
|
51
|
+
return { nonce, hash, timeMs };
|
|
52
|
+
}
|
|
53
|
+
nonce++;
|
|
54
|
+
// Check timeout every 10000 iterations to avoid excessive Date.now() calls
|
|
55
|
+
if (nonce % 10000 === 0) {
|
|
56
|
+
const elapsed = Date.now() - start;
|
|
57
|
+
if (elapsed > POW_TIMEOUT_MS) {
|
|
58
|
+
throw new Error(`PoW computation timed out after ${Math.round(elapsed / 1000)}s ` +
|
|
59
|
+
`(${nonce} hashes tried, zeros=${effectiveZeros}). ` +
|
|
60
|
+
`Consider reducing the zeros parameter.`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// ========== Command Line Arguments ==========
|
|
66
|
+
/**
|
|
67
|
+
* Parse command line arguments into a structured object.
|
|
68
|
+
* Supports both --key=value and --flag formats.
|
|
69
|
+
* Positional arguments (not starting with --) are placed in _args array in order.
|
|
70
|
+
*
|
|
71
|
+
* When called with an explicit argv array, uses that instead of process.argv.
|
|
72
|
+
* The first two elements (node path and script path) are always skipped,
|
|
73
|
+
* matching the process.argv convention.
|
|
74
|
+
*
|
|
75
|
+
* @param argv - Optional explicit argument array (defaults to process.argv)
|
|
76
|
+
*/
|
|
77
|
+
function parseArgs(argv) {
|
|
78
|
+
const result = { _args: [] };
|
|
79
|
+
// Skip node and script path (first 2 elements)
|
|
80
|
+
const effectiveArgv = (argv ?? process.argv).slice(2);
|
|
81
|
+
for (const arg of effectiveArgv) {
|
|
82
|
+
if (arg.startsWith('--')) {
|
|
83
|
+
const eqIdx = arg.indexOf('=');
|
|
84
|
+
if (eqIdx > 0) {
|
|
85
|
+
result[arg.slice(2, eqIdx)] = arg.slice(eqIdx + 1);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
result[arg.slice(2)] = true;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
result._args.push(arg);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Parse --tags argument into a tag array
|
|
99
|
+
* Format: "t:crypto,sub:web3,m:alice_id"
|
|
100
|
+
*/
|
|
101
|
+
function parseTags(tagsStr) {
|
|
102
|
+
if (!tagsStr || typeof tagsStr !== 'string')
|
|
103
|
+
return [];
|
|
104
|
+
return tagsStr.split(',').map(pair => {
|
|
105
|
+
const parts = pair.split(':');
|
|
106
|
+
if (parts.length < 2) {
|
|
107
|
+
throw new Error(`Invalid tag format: "${pair}", expected key:value`);
|
|
108
|
+
}
|
|
109
|
+
return [parts[0], parts.slice(1).join(':')];
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
// ========== File Hash & MIME ==========
|
|
113
|
+
/**
|
|
114
|
+
* Compute SHA256 hash of a file (pure Node.js implementation, no shell dependency)
|
|
115
|
+
* @param filePath - File path
|
|
116
|
+
* @returns 64-character hex hash value
|
|
117
|
+
* @throws {Error} If the file cannot be read
|
|
118
|
+
*/
|
|
119
|
+
function hashFile(filePath) {
|
|
120
|
+
try {
|
|
121
|
+
const content = fs_1.default.readFileSync(filePath);
|
|
122
|
+
return crypto_1.default.createHash('sha256').update(content).digest('hex');
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
throw new Error(`Failed to compute file hash: ${filePath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Get file size (bytes)
|
|
130
|
+
* @throws {Error} If the file cannot be stat'd
|
|
131
|
+
*/
|
|
132
|
+
function getFileSize(filePath) {
|
|
133
|
+
try {
|
|
134
|
+
return fs_1.default.statSync(filePath).size;
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
throw new Error(`Failed to get file size: ${filePath}: ${err instanceof Error ? err.message : String(err)}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Common MIME type mapping table
|
|
142
|
+
* Returns the corresponding MIME type based on file extension
|
|
143
|
+
*/
|
|
144
|
+
const MIME_MAP = {
|
|
145
|
+
'.pdf': 'application/pdf',
|
|
146
|
+
'.png': 'image/png',
|
|
147
|
+
'.jpg': 'image/jpeg',
|
|
148
|
+
'.jpeg': 'image/jpeg',
|
|
149
|
+
'.gif': 'image/gif',
|
|
150
|
+
'.webp': 'image/webp',
|
|
151
|
+
'.svg': 'image/svg+xml',
|
|
152
|
+
'.md': 'text/markdown',
|
|
153
|
+
'.txt': 'text/plain',
|
|
154
|
+
'.json': 'application/json',
|
|
155
|
+
'.js': 'text/javascript',
|
|
156
|
+
'.ts': 'text/typescript',
|
|
157
|
+
'.html': 'text/html',
|
|
158
|
+
'.css': 'text/css',
|
|
159
|
+
'.py': 'text/x-python',
|
|
160
|
+
'.rs': 'text/x-rust',
|
|
161
|
+
'.wasm': 'application/wasm',
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* Return MIME type based on file path
|
|
165
|
+
*/
|
|
166
|
+
function getMimeType(filePath) {
|
|
167
|
+
const ext = path_1.default.extname(filePath).toLowerCase();
|
|
168
|
+
return MIME_MAP[ext] || 'application/octet-stream';
|
|
169
|
+
}
|
|
170
|
+
// ========== MANIFEST Generation ==========
|
|
171
|
+
/**
|
|
172
|
+
* Recursively list all files in a directory (excluding MANIFEST.sha256, .git, node_modules)
|
|
173
|
+
* @param dir - Directory path
|
|
174
|
+
* @param prefix - Path prefix (for recursion)
|
|
175
|
+
* @returns Sorted list of relative paths
|
|
176
|
+
*/
|
|
177
|
+
function listFiles(dir, prefix) {
|
|
178
|
+
const effectivePrefix = prefix || '';
|
|
179
|
+
const results = [];
|
|
180
|
+
const entries = fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
181
|
+
for (const entry of entries) {
|
|
182
|
+
const relativePath = effectivePrefix ? `${effectivePrefix}/${entry.name}` : entry.name;
|
|
183
|
+
// Exclude MANIFEST.sha256, .git, and node_modules
|
|
184
|
+
if (entry.name === 'MANIFEST.sha256')
|
|
185
|
+
continue;
|
|
186
|
+
if (entry.name === '.git')
|
|
187
|
+
continue;
|
|
188
|
+
if (entry.name === 'node_modules')
|
|
189
|
+
continue;
|
|
190
|
+
if (entry.isDirectory()) {
|
|
191
|
+
results.push(...listFiles(path_1.default.join(dir, entry.name), relativePath));
|
|
192
|
+
}
|
|
193
|
+
else if (entry.isFile()) {
|
|
194
|
+
results.push(relativePath);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return results.sort();
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Generate MANIFEST.sha256 file (with metadata header)
|
|
201
|
+
* Format compatible with GNU sha256sum, metadata represented as # comment lines
|
|
202
|
+
*
|
|
203
|
+
* This version uses pure Node.js implementation, no shell command dependency.
|
|
204
|
+
* The author field is obtained via identity.ts; left empty if identity cannot be loaded.
|
|
205
|
+
*/
|
|
206
|
+
function generateManifest(folderPath, options) {
|
|
207
|
+
const version = options?.version || '1.0.0';
|
|
208
|
+
const manifestPath = path_1.default.join(folderPath, 'MANIFEST.sha256');
|
|
209
|
+
// Get author (current principal, if a PEM file is available).
|
|
210
|
+
// Identity is optional for MANIFEST generation — leave author empty if unavailable.
|
|
211
|
+
let author = '';
|
|
212
|
+
try {
|
|
213
|
+
const pemPath = (0, identity_1.getPemPath)();
|
|
214
|
+
author = (0, identity_1.loadIdentityFromPath)(pemPath).getPrincipal().toText();
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
// No identity configured or PEM parse failed — leave author field empty
|
|
218
|
+
}
|
|
219
|
+
// Build metadata header
|
|
220
|
+
const folderName = path_1.default.basename(path_1.default.resolve(folderPath));
|
|
221
|
+
const dateStr = new Date().toISOString().replace(/\.\d{3}Z$/, 'Z');
|
|
222
|
+
const header = [
|
|
223
|
+
`# skill: ${folderName}`,
|
|
224
|
+
`# date: ${dateStr}`,
|
|
225
|
+
`# version: ${version}`,
|
|
226
|
+
`# author: ${author}`,
|
|
227
|
+
].join('\n');
|
|
228
|
+
// Recursively get all files and compute hashes
|
|
229
|
+
const files = listFiles(folderPath);
|
|
230
|
+
const hashLines = files.map(relativePath => {
|
|
231
|
+
const fullPath = path_1.default.join(folderPath, relativePath);
|
|
232
|
+
const hash = hashFile(fullPath);
|
|
233
|
+
// Compatible with sha256sum output format: <hash> ./<relative_path>
|
|
234
|
+
return `${hash} ./${relativePath}`;
|
|
235
|
+
});
|
|
236
|
+
// Write MANIFEST.sha256
|
|
237
|
+
const content = header + '\n' + hashLines.join('\n') + '\n';
|
|
238
|
+
fs_1.default.writeFileSync(manifestPath, content, 'utf-8');
|
|
239
|
+
// Compute MANIFEST's own hash and size
|
|
240
|
+
const manifestHash = hashFile(manifestPath);
|
|
241
|
+
const manifestSize = getFileSize(manifestPath);
|
|
242
|
+
return { manifestPath, manifestHash, manifestSize, fileCount: files.length };
|
|
243
|
+
}
|
|
244
|
+
// ========== MANIFEST Parsing & Verification ==========
|
|
245
|
+
/**
|
|
246
|
+
* Parse MANIFEST.sha256 file content into structured entries.
|
|
247
|
+
*
|
|
248
|
+
* Skips comment lines (starting with #) and empty lines.
|
|
249
|
+
* Each valid line must match: <64-hex-hash> <whitespace> <path>
|
|
250
|
+
* Non-empty non-comment lines that don't match this format cause an error
|
|
251
|
+
* (strict mode — prevents silently ignoring corrupted MANIFEST content).
|
|
252
|
+
*
|
|
253
|
+
* @param manifestContent - Full text content of the MANIFEST.sha256 file
|
|
254
|
+
* @returns Array of parsed ManifestEntry objects
|
|
255
|
+
* @throws {Error} If a non-empty non-comment line has invalid format
|
|
256
|
+
*/
|
|
257
|
+
function parseManifestEntries(manifestContent) {
|
|
258
|
+
const entries = [];
|
|
259
|
+
for (const rawLine of manifestContent.split('\n')) {
|
|
260
|
+
// Trim trailing \r for Windows CRLF compatibility
|
|
261
|
+
const line = rawLine.trimEnd();
|
|
262
|
+
// Skip empty lines and comment lines
|
|
263
|
+
if (!line || line.startsWith('#'))
|
|
264
|
+
continue;
|
|
265
|
+
// Parse format: <hash> ./<relative_path> or <hash> <relative_path>
|
|
266
|
+
const match = line.match(/^([a-f0-9]{64})\s+(.+)$/);
|
|
267
|
+
if (!match) {
|
|
268
|
+
throw new Error(`Invalid MANIFEST line: "${line}"`);
|
|
269
|
+
}
|
|
270
|
+
entries.push({
|
|
271
|
+
expectedHash: match[1],
|
|
272
|
+
relativePath: match[2].replace(/^\.\//, ''), // Remove leading ./
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
return entries;
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Verify file integrity against MANIFEST entries.
|
|
279
|
+
*
|
|
280
|
+
* Parses the MANIFEST content, then checks each listed file:
|
|
281
|
+
* - If the file does not exist → { passed: false, reason: 'not_found' }
|
|
282
|
+
* - If the file hash doesn't match → { passed: false, reason: 'hash_mismatch' }
|
|
283
|
+
* - If the hash matches → { passed: true }
|
|
284
|
+
*
|
|
285
|
+
* Returns structured results; the caller decides how to format output.
|
|
286
|
+
*
|
|
287
|
+
* @param manifestContent - MANIFEST.sha256 file content
|
|
288
|
+
* @param basePath - Absolute path of the folder containing the files
|
|
289
|
+
* @returns Array of verification results, one per file entry
|
|
290
|
+
* @throws {Error} If the MANIFEST format is invalid
|
|
291
|
+
*/
|
|
292
|
+
function verifyManifestEntries(manifestContent, basePath) {
|
|
293
|
+
const entries = parseManifestEntries(manifestContent);
|
|
294
|
+
const results = [];
|
|
295
|
+
for (const entry of entries) {
|
|
296
|
+
const fullPath = path_1.default.join(basePath, entry.relativePath);
|
|
297
|
+
if (!fs_1.default.existsSync(fullPath)) {
|
|
298
|
+
results.push({ relativePath: entry.relativePath, passed: false, reason: 'not_found' });
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
const actualHash = hashFile(fullPath);
|
|
302
|
+
results.push({
|
|
303
|
+
relativePath: entry.relativePath,
|
|
304
|
+
passed: actualHash === entry.expectedHash,
|
|
305
|
+
reason: actualHash === entry.expectedHash ? undefined : 'hash_mismatch',
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
return results;
|
|
309
|
+
}
|
|
310
|
+
// ========== Output Formatting ==========
|
|
311
|
+
/**
|
|
312
|
+
* Format a SignEvent object into readable text
|
|
313
|
+
* Candid opt types are represented as [] | [value] in JS
|
|
314
|
+
*/
|
|
315
|
+
function formatSignEvent(event) {
|
|
316
|
+
const lines = [];
|
|
317
|
+
lines.push(` id = "${event.id}"`);
|
|
318
|
+
lines.push(` kind = ${event.kind}`);
|
|
319
|
+
lines.push(` ai_id = "${event.ai_id}"`);
|
|
320
|
+
lines.push(` created_at = ${event.created_at}`);
|
|
321
|
+
lines.push(` content_hash = "${event.content_hash}"`);
|
|
322
|
+
// Handle opt counter — [] means null, [n] means has value
|
|
323
|
+
if (event.counter && event.counter.length > 0) {
|
|
324
|
+
lines.push(` counter = ${event.counter[0]}`);
|
|
325
|
+
}
|
|
326
|
+
// Handle opt content
|
|
327
|
+
if (event.content && event.content.length > 0) {
|
|
328
|
+
lines.push(` content = "${event.content[0]}"`);
|
|
329
|
+
}
|
|
330
|
+
// Handle opt tags
|
|
331
|
+
if (event.tags && event.tags.length > 0) {
|
|
332
|
+
const tagsStr = event.tags[0]
|
|
333
|
+
.map(t => `[${t.map(s => `"${s}"`).join(', ')}]`)
|
|
334
|
+
.join(', ');
|
|
335
|
+
lines.push(` tags = [${tagsStr}]`);
|
|
336
|
+
}
|
|
337
|
+
return `record {\n${lines.join('\n')}\n}`;
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Format a SignEvent array
|
|
341
|
+
*/
|
|
342
|
+
function formatSignEvents(events) {
|
|
343
|
+
if (!events || events.length === 0) {
|
|
344
|
+
return '(vec {})';
|
|
345
|
+
}
|
|
346
|
+
return `(vec {\n${events.map(e => formatSignEvent(e)).join(';\n')}\n})`;
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Build a full event view URL from an event ID.
|
|
350
|
+
* Uses the configured event_url prefix from config.
|
|
351
|
+
* @param eventId - The unique event ID (sha256 hash)
|
|
352
|
+
* @returns Full URL to view the event on the website
|
|
353
|
+
*/
|
|
354
|
+
function buildEventUrl(eventId) {
|
|
355
|
+
return `${config_1.default.event_url}${eventId}`;
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Format agent_sign return value (Ok/Err variant).
|
|
359
|
+
* On success, appends a "View:" line with the event URL so the agent
|
|
360
|
+
* can present a clickable link to the user.
|
|
361
|
+
*/
|
|
362
|
+
function formatSignResult(result) {
|
|
363
|
+
if ('Ok' in result) {
|
|
364
|
+
const formatted = `(variant { Ok = ${formatSignEvent(result.Ok)} })`;
|
|
365
|
+
const url = buildEventUrl(result.Ok.id);
|
|
366
|
+
return `${formatted}\n\nView: ${url}`;
|
|
367
|
+
}
|
|
368
|
+
if ('Err' in result) {
|
|
369
|
+
return `(variant { Err = "${result.Err}" })`;
|
|
370
|
+
}
|
|
371
|
+
return JSON.stringify(result, null, 2);
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Format opt text type
|
|
375
|
+
*/
|
|
376
|
+
function formatOptText(optText) {
|
|
377
|
+
if (optText && optText.length > 0) {
|
|
378
|
+
return `(opt "${optText[0]}")`;
|
|
379
|
+
}
|
|
380
|
+
return '(null)';
|
|
381
|
+
}
|
|
382
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/verify.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* zCloak.ai Verification Tool
|
|
4
|
+
*
|
|
5
|
+
* Provides message verification, file verification, folder verification, and more.
|
|
6
|
+
* Automatically resolves signer agent name and outputs profile URL during verification.
|
|
7
|
+
* Uses @dfinity JS SDK to interact directly with ICP canister, no dfx required.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* zcloak-ai verify message <content> Verify message content
|
|
11
|
+
* zcloak-ai verify file <file_path> Verify single file signature
|
|
12
|
+
* zcloak-ai verify folder <folder_path> Verify folder signature (MANIFEST.sha256)
|
|
13
|
+
* zcloak-ai verify profile <principal> Query Kind 1 identity profile
|
|
14
|
+
*
|
|
15
|
+
* All commands support --identity=<pem_path> to specify identity file.
|
|
16
|
+
*/
|
|
17
|
+
import { Session } from './session';
|
|
18
|
+
/**
|
|
19
|
+
* Entry point when invoked via cli.ts.
|
|
20
|
+
* Receives a Session instance with pre-parsed arguments.
|
|
21
|
+
*/
|
|
22
|
+
export declare function run(session: Session): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=verify.d.ts.map
|
package/dist/verify.js
ADDED
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* zCloak.ai Verification Tool
|
|
5
|
+
*
|
|
6
|
+
* Provides message verification, file verification, folder verification, and more.
|
|
7
|
+
* Automatically resolves signer agent name and outputs profile URL during verification.
|
|
8
|
+
* Uses @dfinity JS SDK to interact directly with ICP canister, no dfx required.
|
|
9
|
+
*
|
|
10
|
+
* Usage:
|
|
11
|
+
* zcloak-ai verify message <content> Verify message content
|
|
12
|
+
* zcloak-ai verify file <file_path> Verify single file signature
|
|
13
|
+
* zcloak-ai verify folder <folder_path> Verify folder signature (MANIFEST.sha256)
|
|
14
|
+
* zcloak-ai verify profile <principal> Query Kind 1 identity profile
|
|
15
|
+
*
|
|
16
|
+
* All commands support --identity=<pem_path> to specify identity file.
|
|
17
|
+
*/
|
|
18
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
19
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.run = run;
|
|
23
|
+
const fs_1 = __importDefault(require("fs"));
|
|
24
|
+
const path_1 = __importDefault(require("path"));
|
|
25
|
+
const utils_1 = require("./utils");
|
|
26
|
+
// ========== Help Information ==========
|
|
27
|
+
function showHelp() {
|
|
28
|
+
console.log('zCloak.ai Verification Tool');
|
|
29
|
+
console.log('');
|
|
30
|
+
console.log('Usage:');
|
|
31
|
+
console.log(' zcloak-ai verify message <content> Verify message content');
|
|
32
|
+
console.log(' zcloak-ai verify file <file_path> Verify single file signature');
|
|
33
|
+
console.log(' zcloak-ai verify folder <folder_path> Verify folder signature (MANIFEST.sha256)');
|
|
34
|
+
console.log(' zcloak-ai verify profile <principal> Query Kind 1 identity profile');
|
|
35
|
+
console.log('');
|
|
36
|
+
console.log('');
|
|
37
|
+
console.log('Examples:');
|
|
38
|
+
console.log(' zcloak-ai verify message "hello"');
|
|
39
|
+
console.log(' zcloak-ai verify file ./report.pdf');
|
|
40
|
+
console.log(' zcloak-ai verify folder ./my-skill/');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Extract ai_id list from verification results and resolve agent names
|
|
44
|
+
* Output signer information and profile URL
|
|
45
|
+
*/
|
|
46
|
+
async function resolveSigners(session, events) {
|
|
47
|
+
const profileBase = session.getProfileUrl();
|
|
48
|
+
// Extract all unique ai_ids
|
|
49
|
+
const aiIds = new Set();
|
|
50
|
+
for (const event of events) {
|
|
51
|
+
if (event.ai_id) {
|
|
52
|
+
aiIds.add(event.ai_id);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (aiIds.size === 0) {
|
|
56
|
+
console.log('\nNo signer information found.');
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const actor = await session.getAnonymousRegistryActor();
|
|
60
|
+
console.log('\n--- Signer Information ---');
|
|
61
|
+
for (const aiId of aiIds) {
|
|
62
|
+
console.log(`\nAgent Principal: ${aiId}`);
|
|
63
|
+
// Query agent name
|
|
64
|
+
try {
|
|
65
|
+
const nameResult = await actor.get_username_by_principal(aiId);
|
|
66
|
+
if (nameResult && nameResult.length > 0) {
|
|
67
|
+
const username = nameResult[0];
|
|
68
|
+
console.log(`Agent Name: ${username}`);
|
|
69
|
+
console.log(`Profile URL: ${profileBase}${encodeURIComponent(username)}`);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
console.log('Agent Name: (not registered)');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
console.log('Agent Name: (query failed)');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// ========== Command Implementations ==========
|
|
81
|
+
/** Verify message content */
|
|
82
|
+
async function cmdVerifyMessage(session, content) {
|
|
83
|
+
if (!content) {
|
|
84
|
+
console.error('Error: message content is required');
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
const actor = await session.getAnonymousSignActor();
|
|
88
|
+
const events = await actor.verify_message(content);
|
|
89
|
+
console.log((0, utils_1.formatSignEvents)(events));
|
|
90
|
+
await resolveSigners(session, events);
|
|
91
|
+
}
|
|
92
|
+
/** Verify single file signature */
|
|
93
|
+
async function cmdVerifyFile(session, filePath) {
|
|
94
|
+
if (!filePath) {
|
|
95
|
+
console.error('Error: file path is required');
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
if (!fs_1.default.existsSync(filePath)) {
|
|
99
|
+
console.error(`Error: file does not exist: ${filePath}`);
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
// Compute file hash
|
|
103
|
+
const fileHash = (0, utils_1.hashFile)(filePath);
|
|
104
|
+
console.log(`File: ${path_1.default.basename(filePath)}`);
|
|
105
|
+
console.log(`SHA256: ${fileHash}`);
|
|
106
|
+
console.log('');
|
|
107
|
+
// On-chain verification
|
|
108
|
+
const actor = await session.getAnonymousSignActor();
|
|
109
|
+
const events = await actor.verify_file_hash(fileHash);
|
|
110
|
+
console.log((0, utils_1.formatSignEvents)(events));
|
|
111
|
+
await resolveSigners(session, events);
|
|
112
|
+
}
|
|
113
|
+
/** Verify folder signature (MANIFEST.sha256) */
|
|
114
|
+
async function cmdVerifyFolder(session, folderPath) {
|
|
115
|
+
if (!folderPath) {
|
|
116
|
+
console.error('Error: folder path is required');
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
if (!fs_1.default.existsSync(folderPath) || !fs_1.default.statSync(folderPath).isDirectory()) {
|
|
120
|
+
console.error(`Error: directory does not exist: ${folderPath}`);
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
const manifestPath = path_1.default.join(folderPath, 'MANIFEST.sha256');
|
|
124
|
+
if (!fs_1.default.existsSync(manifestPath)) {
|
|
125
|
+
console.error(`Error: MANIFEST.sha256 not found: ${manifestPath}`);
|
|
126
|
+
process.exit(1);
|
|
127
|
+
}
|
|
128
|
+
// Step 1: Local file integrity verification using shared MANIFEST parser
|
|
129
|
+
console.log('=== Step 1: Local File Integrity Verification ===');
|
|
130
|
+
const manifestContent = fs_1.default.readFileSync(manifestPath, 'utf-8');
|
|
131
|
+
const results = (0, utils_1.verifyManifestEntries)(manifestContent, folderPath);
|
|
132
|
+
let allPassed = true;
|
|
133
|
+
for (const r of results) {
|
|
134
|
+
if (r.passed) {
|
|
135
|
+
console.log(`OK: ${r.relativePath}`);
|
|
136
|
+
}
|
|
137
|
+
else {
|
|
138
|
+
const suffix = r.reason === 'not_found' ? ' (file not found)' : '';
|
|
139
|
+
console.log(`FAILED: ${r.relativePath}${suffix}`);
|
|
140
|
+
allPassed = false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (!allPassed) {
|
|
144
|
+
console.error('\nLocal verification failed! Some files may have been modified.');
|
|
145
|
+
process.exit(1);
|
|
146
|
+
}
|
|
147
|
+
console.log('\nLocal verification passed!');
|
|
148
|
+
// Step 2: Compute MANIFEST hash and verify on-chain
|
|
149
|
+
console.log('\n=== Step 2: On-chain Signature Verification ===');
|
|
150
|
+
const manifestHash = (0, utils_1.hashFile)(manifestPath);
|
|
151
|
+
console.log(`MANIFEST SHA256: ${manifestHash}`);
|
|
152
|
+
const actor = await session.getAnonymousSignActor();
|
|
153
|
+
const events = await actor.verify_file_hash(manifestHash);
|
|
154
|
+
console.log((0, utils_1.formatSignEvents)(events));
|
|
155
|
+
await resolveSigners(session, events);
|
|
156
|
+
}
|
|
157
|
+
/** Query Kind 1 identity profile */
|
|
158
|
+
async function cmdVerifyProfile(session, principal) {
|
|
159
|
+
if (!principal) {
|
|
160
|
+
console.error('Error: principal ID is required');
|
|
161
|
+
process.exit(1);
|
|
162
|
+
}
|
|
163
|
+
const actor = await session.getAnonymousSignActor();
|
|
164
|
+
const result = await actor.get_kind1_event_by_principal(principal);
|
|
165
|
+
// opt SignEvent → formatted output
|
|
166
|
+
if (result && result.length > 0) {
|
|
167
|
+
console.log(`(opt ${(0, utils_1.formatSignEvent)(result[0])})`);
|
|
168
|
+
}
|
|
169
|
+
else {
|
|
170
|
+
console.log('(null)');
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// ========== Exported run() — called by cli.ts ==========
|
|
174
|
+
/**
|
|
175
|
+
* Entry point when invoked via cli.ts.
|
|
176
|
+
* Receives a Session instance with pre-parsed arguments.
|
|
177
|
+
*/
|
|
178
|
+
async function run(session) {
|
|
179
|
+
const command = session.args._args[0];
|
|
180
|
+
try {
|
|
181
|
+
switch (command) {
|
|
182
|
+
case 'message':
|
|
183
|
+
await cmdVerifyMessage(session, session.args._args[1]);
|
|
184
|
+
break;
|
|
185
|
+
case 'file':
|
|
186
|
+
await cmdVerifyFile(session, session.args._args[1]);
|
|
187
|
+
break;
|
|
188
|
+
case 'folder':
|
|
189
|
+
await cmdVerifyFolder(session, session.args._args[1]);
|
|
190
|
+
break;
|
|
191
|
+
case 'profile':
|
|
192
|
+
await cmdVerifyProfile(session, session.args._args[1]);
|
|
193
|
+
break;
|
|
194
|
+
default:
|
|
195
|
+
showHelp();
|
|
196
|
+
if (command) {
|
|
197
|
+
console.error(`\nUnknown command: ${command}`);
|
|
198
|
+
}
|
|
199
|
+
process.exit(1);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
catch (err) {
|
|
203
|
+
console.error(`Operation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
204
|
+
process.exit(1);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../src/verify.ts"],"names":[],"mappings":"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"}
|
package/dist/vetkey.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VetKey CLI Module — VetKey IBE encryption/decryption and daemon management
|
|
3
|
+
*
|
|
4
|
+
* Provides two encryption modes:
|
|
5
|
+
* 1. IBE mode: Per-operation Identity-Based Encryption for Kind5 PrivatePost
|
|
6
|
+
* 2. Daemon mode: Long-running AES-256-GCM daemon for fast file encryption
|
|
7
|
+
*
|
|
8
|
+
* Sub-commands:
|
|
9
|
+
* encrypt-sign Encrypt + sign Kind5 PrivatePost in one step
|
|
10
|
+
* decrypt Decrypt Kind5 PrivatePost by event ID
|
|
11
|
+
* encrypt-only Encrypt locally without canister sign
|
|
12
|
+
* pubkey Get IBE public key from canister
|
|
13
|
+
* serve Start daemon (UDS or stdio mode)
|
|
14
|
+
* stop Stop a running daemon
|
|
15
|
+
* status Query daemon status
|
|
16
|
+
*
|
|
17
|
+
* Usage: zcloak-ai vetkey <sub-command> [options]
|
|
18
|
+
*/
|
|
19
|
+
import type { Session } from './session';
|
|
20
|
+
/**
|
|
21
|
+
* Run the vetkey sub-command.
|
|
22
|
+
* Follows the same pattern as other CLI modules (sign.ts, verify.ts, etc.).
|
|
23
|
+
*
|
|
24
|
+
* @param session - CLI session with parsed args and canister access
|
|
25
|
+
*/
|
|
26
|
+
export declare function run(session: Session): Promise<void>;
|
|
27
|
+
//# sourceMappingURL=vetkey.d.ts.map
|