@zcloak/ai-agent 1.0.18 → 1.0.21

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/dist/zmail.js ADDED
@@ -0,0 +1,465 @@
1
+ /**
2
+ * zMail CLI Module — Encrypted mail client for zMail service
3
+ *
4
+ * Provides commands to interact with the zMail encrypted mail server:
5
+ * register Register this agent with zMail (required before sending)
6
+ * send Send an encrypted message (builds Kind17 envelope + POSTs to zMail)
7
+ * inbox Fetch inbox messages from zMail
8
+ * sent Fetch sent messages from zMail
9
+ * ack Acknowledge (mark as read) inbox messages
10
+ *
11
+ * All messages are end-to-end encrypted using IBE (Identity-Based Encryption).
12
+ * The zMail server never sees plaintext — it only routes and stores ciphertext.
13
+ *
14
+ * Usage: zcloak-ai zmail <sub-command> [options]
15
+ */
16
+ import { createHash, randomBytes } from 'crypto';
17
+ import { schnorr } from '@noble/curves/secp256k1';
18
+ import { bytesToHex } from '@noble/hashes/utils';
19
+ import config from './config.js';
20
+ import { extractPrivateKeyHex, schnorrPubkeyFromSpki } from './vetkey.js';
21
+ // ============================================================================
22
+ // Module Entry Point
23
+ // ============================================================================
24
+ /**
25
+ * Run the zmail sub-command.
26
+ * Follows the same pattern as other CLI modules (sign.ts, verify.ts, etc.).
27
+ *
28
+ * @param session - CLI session with parsed args and canister access
29
+ */
30
+ export async function run(session) {
31
+ const command = session.args._args[0];
32
+ switch (command) {
33
+ case 'register':
34
+ await cmdRegister(session);
35
+ break;
36
+ case 'inbox':
37
+ await cmdInbox(session);
38
+ break;
39
+ case 'sent':
40
+ await cmdSent(session);
41
+ break;
42
+ case 'ack':
43
+ await cmdAck(session);
44
+ break;
45
+ default:
46
+ showHelp();
47
+ process.exit(command ? 1 : 0);
48
+ }
49
+ }
50
+ // ============================================================================
51
+ // Help
52
+ // ============================================================================
53
+ function showHelp() {
54
+ console.log('zCloak.ai zMail — Encrypted Mail Client');
55
+ console.log('');
56
+ console.log('Usage: zcloak-ai zmail <command> [options]');
57
+ console.log('');
58
+ console.log('Commands:');
59
+ console.log(' register Register this agent with zMail server');
60
+ console.log(' inbox Fetch inbox messages');
61
+ console.log(' sent Fetch sent messages');
62
+ console.log(' ack Acknowledge (mark as read) messages');
63
+ console.log('');
64
+ console.log('Options:');
65
+ console.log(' --zmail-url=<url> Override zMail server URL');
66
+ console.log(' --limit=<n> Max messages to fetch (default: 20)');
67
+ console.log(' --after=<cursor> Pagination cursor (from previous response)');
68
+ console.log(' --unread Only fetch unread messages (inbox only)');
69
+ console.log(' --from=<principal> Filter by sender (inbox only)');
70
+ console.log(' --to=<principal> Filter by recipient (sent only)');
71
+ console.log(' --msg-id=<id,...> Message IDs to acknowledge (ack only)');
72
+ console.log(' --json Output raw JSON response');
73
+ console.log('');
74
+ console.log('Examples:');
75
+ console.log(' zcloak-ai zmail register');
76
+ console.log(' zcloak-ai zmail inbox --limit=10 --unread');
77
+ console.log(' zcloak-ai zmail sent --limit=5');
78
+ console.log(' zcloak-ai zmail ack --msg-id=abc123,def456');
79
+ }
80
+ // ============================================================================
81
+ // Configuration Helpers
82
+ // ============================================================================
83
+ /**
84
+ * Resolve the zMail server URL.
85
+ * Priority: --zmail-url flag > ZMAIL_URL env var > config default
86
+ */
87
+ function resolveZmailUrl(session) {
88
+ const flagUrl = session.args['zmail-url'];
89
+ if (typeof flagUrl === 'string' && flagUrl.length > 0) {
90
+ return flagUrl.replace(/\/+$/, '');
91
+ }
92
+ const envUrl = process.env['ZMAIL_URL'];
93
+ if (envUrl && envUrl.length > 0) {
94
+ return envUrl.replace(/\/+$/, '');
95
+ }
96
+ return config.zmail_url;
97
+ }
98
+ // ============================================================================
99
+ // Schnorr Signing Utilities (shared by register + ownership proof)
100
+ // ============================================================================
101
+ /**
102
+ * Get identity fields needed for zMail registration and signing.
103
+ * Returns the agent's principal, SPKI hex, Schnorr pubkey hex, and private key hex.
104
+ */
105
+ function getIdentityFields(session) {
106
+ const identity = session.getIdentity();
107
+ const principal = session.getPrincipal();
108
+ const spkiHex = Buffer.from(identity.getPublicKey().toDer()).toString('hex');
109
+ const schnorrPubkey = schnorrPubkeyFromSpki(spkiHex);
110
+ const privateKeyHex = extractPrivateKeyHex(session);
111
+ return { principal, spkiHex, schnorrPubkey, privateKeyHex };
112
+ }
113
+ /**
114
+ * Sign a message hash with Schnorr BIP-340.
115
+ * @param msgHashHex - SHA-256 hash to sign (64 hex chars)
116
+ * @param privateKeyHex - 32-byte private key (64 hex chars)
117
+ * @returns Signature as hex string (128 hex chars)
118
+ */
119
+ function schnorrSign(msgHashHex, privateKeyHex) {
120
+ return bytesToHex(schnorr.sign(msgHashHex, privateKeyHex));
121
+ }
122
+ /**
123
+ * Generate a random nonce as hex string (16 bytes = 32 hex chars).
124
+ */
125
+ function randomNonce() {
126
+ return randomBytes(16).toString('hex');
127
+ }
128
+ // ============================================================================
129
+ // Ownership Proof Headers (for inbox/sent/ack endpoints)
130
+ // ============================================================================
131
+ /**
132
+ * Build ownership proof headers for authenticated zMail endpoints.
133
+ *
134
+ * The proof binds the HTTP request to the agent's identity:
135
+ * canonical = "{METHOD}\n{path}\n{query}\n{body_sha256}\n{timestamp}\n{nonce}"
136
+ * sig = Schnorr.sign(SHA256(canonical), privateKey)
137
+ *
138
+ * @returns Object with x-zmail-* headers ready for fetch()
139
+ */
140
+ function buildOwnershipProofHeaders(session, method, path, query, body) {
141
+ const { principal, privateKeyHex, schnorrPubkey } = getIdentityFields(session);
142
+ const timestamp = Math.floor(Date.now() / 1000).toString();
143
+ const nonce = randomNonce();
144
+ // Canonical query: sort keys alphabetically, URL-encode key=value pairs
145
+ const canonicalQuery = query
146
+ ? Object.entries(query)
147
+ .filter(([, v]) => v !== undefined && v !== '')
148
+ .sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)
149
+ .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
150
+ .join('&')
151
+ : '';
152
+ // Body SHA-256: empty string for GET, canonical JSON for POST
153
+ const normalizedMethod = method.toUpperCase();
154
+ let bodySha256;
155
+ if (normalizedMethod === 'GET' || body === undefined) {
156
+ bodySha256 = createHash('sha256').update('', 'utf8').digest('hex');
157
+ }
158
+ else {
159
+ const canonicalBody = JSON.stringify(canonicalizeJson(body));
160
+ bodySha256 = createHash('sha256').update(canonicalBody, 'utf8').digest('hex');
161
+ }
162
+ // Build canonical string and sign
163
+ const payload = `${normalizedMethod}\n${path}\n${canonicalQuery}\n${bodySha256}\n${timestamp}\n${nonce}`;
164
+ const msgHash = createHash('sha256').update(payload, 'utf8').digest('hex');
165
+ const sig = schnorrSign(msgHash, privateKeyHex);
166
+ return {
167
+ 'x-zmail-ai-id': principal,
168
+ 'x-zmail-timestamp': timestamp,
169
+ 'x-zmail-nonce': nonce,
170
+ 'x-zmail-signature': sig,
171
+ };
172
+ }
173
+ /**
174
+ * Deep-canonicalize a JSON value for ownership proof body hashing.
175
+ * Sort object keys alphabetically, NFC-normalize strings.
176
+ * Must match zMail server's canonicalizeJson implementation.
177
+ */
178
+ function canonicalizeJson(value) {
179
+ if (typeof value === 'string') {
180
+ return value.replace(/\r\n?/g, '\n').normalize('NFC');
181
+ }
182
+ if (Array.isArray(value)) {
183
+ return value.map((item) => canonicalizeJson(item));
184
+ }
185
+ if (value !== null && typeof value === 'object') {
186
+ const out = {};
187
+ for (const [key, nested] of Object.entries(value).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)) {
188
+ out[key.replace(/\r\n?/g, '\n').normalize('NFC')] = canonicalizeJson(nested);
189
+ }
190
+ return out;
191
+ }
192
+ return value;
193
+ }
194
+ /**
195
+ * POST a Kind17 envelope to zMail's /v1/send endpoint.
196
+ *
197
+ * The sender must be registered with zMail first.
198
+ * The envelope is sent as-is — zMail validates ID, signature, and recipient registration.
199
+ *
200
+ * @param zmailUrl - zMail server base URL (e.g. "https://mail.zcloak.ai")
201
+ * @param envelope - Signed Kind17 envelope
202
+ * @returns Send result with delivery stats
203
+ * @throws Error on HTTP or validation failure
204
+ */
205
+ export async function postEnvelopeToZmail(zmailUrl, envelope) {
206
+ const url = `${zmailUrl}/v1/send`;
207
+ const res = await fetch(url, {
208
+ method: 'POST',
209
+ headers: { 'Content-Type': 'application/json' },
210
+ body: JSON.stringify(envelope),
211
+ });
212
+ const body = await res.json();
213
+ if (!res.ok) {
214
+ const errorCode = body.error || `HTTP ${res.status}`;
215
+ throw new Error(`zMail send failed: ${errorCode}`);
216
+ }
217
+ return body;
218
+ }
219
+ // ============================================================================
220
+ // Command: register
221
+ // ============================================================================
222
+ /**
223
+ * Register this agent with the zMail server.
224
+ *
225
+ * Builds the registration payload with identity fields, signs the challenge
226
+ * string with Schnorr BIP-340, and POSTs to /v1/register.
227
+ *
228
+ * The challenge format must match zMail's expected format exactly:
229
+ * "register:{ai_id}:{public_key_spki}:{schnorr_pubkey}:{timestamp}"
230
+ */
231
+ async function cmdRegister(session) {
232
+ const zmailUrl = resolveZmailUrl(session);
233
+ const { principal, spkiHex, schnorrPubkey, privateKeyHex } = getIdentityFields(session);
234
+ const timestamp = Math.floor(Date.now() / 1000);
235
+ // Build challenge string (must match zMail server's computeRegisterMessageHash)
236
+ const challenge = `register:${principal}:${spkiHex}:${schnorrPubkey}:${timestamp}`;
237
+ const msgHash = createHash('sha256').update(challenge, 'utf8').digest('hex');
238
+ const sig = schnorrSign(msgHash, privateKeyHex);
239
+ const payload = {
240
+ ai_id: principal,
241
+ public_key_spki: spkiHex,
242
+ schnorr_pubkey: schnorrPubkey,
243
+ timestamp,
244
+ sig,
245
+ };
246
+ console.error(`Registering with zMail at ${zmailUrl}...`);
247
+ console.error(` ai_id: ${principal}`);
248
+ const url = `${zmailUrl}/v1/register`;
249
+ let res;
250
+ try {
251
+ res = await fetch(url, {
252
+ method: 'POST',
253
+ headers: { 'Content-Type': 'application/json' },
254
+ body: JSON.stringify(payload),
255
+ });
256
+ }
257
+ catch (err) {
258
+ throw new Error(`Failed to connect to zMail server at ${zmailUrl}: ${err instanceof Error ? err.message : String(err)}`);
259
+ }
260
+ const body = await res.json();
261
+ if (res.status === 201) {
262
+ // Successfully registered
263
+ console.log(`Registered successfully.`);
264
+ console.log(` ai_id: ${body.ai_id}`);
265
+ console.log(` registered_at: ${body.registered_at}`);
266
+ }
267
+ else if (res.status === 409) {
268
+ // Already registered — not an error
269
+ console.log('Already registered with zMail.');
270
+ }
271
+ else {
272
+ // Unexpected error
273
+ const errorCode = body.error || `HTTP ${res.status}`;
274
+ console.error(`Registration failed: ${errorCode}`);
275
+ if (body.retry_after) {
276
+ console.error(` retry_after: ${body.retry_after}s`);
277
+ }
278
+ process.exit(1);
279
+ }
280
+ }
281
+ // ============================================================================
282
+ // Command: inbox
283
+ // ============================================================================
284
+ /**
285
+ * Fetch inbox messages from zMail.
286
+ *
287
+ * Options:
288
+ * --limit=<n> Max messages (default: 20)
289
+ * --after=<cursor> Pagination cursor
290
+ * --unread Only unread messages
291
+ * --from=<principal> Filter by sender
292
+ * --json Output raw JSON
293
+ */
294
+ async function cmdInbox(session) {
295
+ const zmailUrl = resolveZmailUrl(session);
296
+ const principal = session.getPrincipal();
297
+ const limit = session.args['limit'] || '20';
298
+ const after = session.args['after'];
299
+ const unread = session.args['unread'] === true ? 'true' : undefined;
300
+ const from = session.args['from'];
301
+ // Build query params
302
+ const query = { limit };
303
+ if (after)
304
+ query['after'] = after;
305
+ if (unread)
306
+ query['unread'] = unread;
307
+ if (from)
308
+ query['from'] = from;
309
+ const path = `/v1/inbox/${principal}`;
310
+ const queryString = Object.entries(query)
311
+ .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
312
+ .join('&');
313
+ const url = `${zmailUrl}${path}?${queryString}`;
314
+ // Build ownership proof headers
315
+ const headers = buildOwnershipProofHeaders(session, 'GET', path, query);
316
+ console.error(`Fetching inbox from ${zmailUrl}...`);
317
+ let res;
318
+ try {
319
+ res = await fetch(url, { method: 'GET', headers });
320
+ }
321
+ catch (err) {
322
+ throw new Error(`Failed to connect to zMail: ${err instanceof Error ? err.message : String(err)}`);
323
+ }
324
+ const body = await res.json();
325
+ if (!res.ok) {
326
+ const errorCode = body.error || `HTTP ${res.status}`;
327
+ throw new Error(`Inbox fetch failed: ${errorCode}`);
328
+ }
329
+ const messages = (body.messages ?? []);
330
+ const cursor = body.cursor;
331
+ const unreadCount = body.unread_count;
332
+ // JSON mode: output raw response
333
+ if (session.args['json'] === true) {
334
+ console.log(JSON.stringify(body, null, 2));
335
+ return;
336
+ }
337
+ // Formatted output
338
+ console.log(`Inbox: ${messages.length} message(s)${unreadCount !== undefined ? `, ${unreadCount} unread` : ''}`);
339
+ console.log('');
340
+ for (const msg of messages) {
341
+ const read = msg.read ? '' : ' [NEW]';
342
+ const time = new Date((msg.created_at ?? msg.received_at) * 1000).toISOString();
343
+ const from = msg.ai_id;
344
+ const msgId = msg.id;
345
+ console.log(` ${read ? '●' : '○'}${read} ${time}`);
346
+ console.log(` From: ${from}`);
347
+ console.log(` ID: ${msgId}`);
348
+ console.log('');
349
+ }
350
+ if (cursor) {
351
+ console.log(`Next page: --after=${cursor}`);
352
+ }
353
+ }
354
+ // ============================================================================
355
+ // Command: sent
356
+ // ============================================================================
357
+ /**
358
+ * Fetch sent messages from zMail.
359
+ *
360
+ * Options:
361
+ * --limit=<n> Max messages (default: 20)
362
+ * --after=<cursor> Pagination cursor
363
+ * --to=<principal> Filter by recipient
364
+ * --json Output raw JSON
365
+ */
366
+ async function cmdSent(session) {
367
+ const zmailUrl = resolveZmailUrl(session);
368
+ const principal = session.getPrincipal();
369
+ const limit = session.args['limit'] || '20';
370
+ const after = session.args['after'];
371
+ const to = session.args['to'];
372
+ const query = { limit };
373
+ if (after)
374
+ query['after'] = after;
375
+ if (to)
376
+ query['to'] = to;
377
+ const path = `/v1/sent/${principal}`;
378
+ const queryString = Object.entries(query)
379
+ .map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`)
380
+ .join('&');
381
+ const url = `${zmailUrl}${path}?${queryString}`;
382
+ const headers = buildOwnershipProofHeaders(session, 'GET', path, query);
383
+ console.error(`Fetching sent messages from ${zmailUrl}...`);
384
+ let res;
385
+ try {
386
+ res = await fetch(url, { method: 'GET', headers });
387
+ }
388
+ catch (err) {
389
+ throw new Error(`Failed to connect to zMail: ${err instanceof Error ? err.message : String(err)}`);
390
+ }
391
+ const body = await res.json();
392
+ if (!res.ok) {
393
+ const errorCode = body.error || `HTTP ${res.status}`;
394
+ throw new Error(`Sent fetch failed: ${errorCode}`);
395
+ }
396
+ const messages = (body.messages ?? []);
397
+ const cursor = body.cursor;
398
+ if (session.args['json'] === true) {
399
+ console.log(JSON.stringify(body, null, 2));
400
+ return;
401
+ }
402
+ console.log(`Sent: ${messages.length} message(s)`);
403
+ console.log('');
404
+ for (const msg of messages) {
405
+ const time = new Date((msg.created_at ?? msg.stored_at) * 1000).toISOString();
406
+ const recipients = (msg.recipients ?? []);
407
+ const msgId = msg.id;
408
+ console.log(` ${time}`);
409
+ console.log(` To: ${recipients.join(', ')}`);
410
+ console.log(` ID: ${msgId}`);
411
+ console.log('');
412
+ }
413
+ if (cursor) {
414
+ console.log(`Next page: --after=${cursor}`);
415
+ }
416
+ }
417
+ // ============================================================================
418
+ // Command: ack
419
+ // ============================================================================
420
+ /**
421
+ * Acknowledge (mark as read) inbox messages.
422
+ *
423
+ * Options:
424
+ * --msg-id=<id,...> Comma-separated message IDs to acknowledge
425
+ */
426
+ async function cmdAck(session) {
427
+ const zmailUrl = resolveZmailUrl(session);
428
+ const principal = session.getPrincipal();
429
+ const msgIdArg = session.args['msg-id'];
430
+ if (!msgIdArg) {
431
+ console.error('Error: --msg-id=<id,...> is required');
432
+ console.error('Usage: zcloak-ai zmail ack --msg-id=abc123,def456');
433
+ process.exit(1);
434
+ }
435
+ const msgIds = msgIdArg.split(',').map(id => id.trim()).filter(id => id.length > 0);
436
+ if (msgIds.length === 0) {
437
+ console.error('Error: no valid message IDs provided');
438
+ process.exit(1);
439
+ }
440
+ const path = '/v1/ack';
441
+ const body = { ai_id: principal, msg_ids: msgIds };
442
+ const headers = {
443
+ 'Content-Type': 'application/json',
444
+ ...buildOwnershipProofHeaders(session, 'POST', path, undefined, body),
445
+ };
446
+ console.error(`Acknowledging ${msgIds.length} message(s)...`);
447
+ let res;
448
+ try {
449
+ res = await fetch(`${zmailUrl}${path}`, {
450
+ method: 'POST',
451
+ headers,
452
+ body: JSON.stringify(body),
453
+ });
454
+ }
455
+ catch (err) {
456
+ throw new Error(`Failed to connect to zMail: ${err instanceof Error ? err.message : String(err)}`);
457
+ }
458
+ const resBody = await res.json();
459
+ if (!res.ok) {
460
+ const errorCode = resBody.error || `HTTP ${res.status}`;
461
+ throw new Error(`Ack failed: ${errorCode}`);
462
+ }
463
+ console.log(`Acknowledged ${resBody.acked_count ?? msgIds.length} message(s).`);
464
+ }
465
+ //# sourceMappingURL=zmail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zmail.js","sourceRoot":"","sources":["../src/zmail.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zcloak/ai-agent",
3
- "version": "1.0.18",
3
+ "version": "1.0.21",
4
4
  "description": "zCloak.ai Agent CLI — sign, verify, register",
5
5
  "bin": {
6
6
  "zcloak-ai": "./dist/cli.js"
@@ -11,7 +11,8 @@
11
11
  "files": [
12
12
  "dist/**/*.js",
13
13
  "dist/**/*.d.ts",
14
- "dist/**/*.js.map"
14
+ "dist/**/*.js.map",
15
+ "SKILL.md"
15
16
  ],
16
17
  "scripts": {
17
18
  "generate-types": "tsx scripts/generate-types.ts",
@@ -42,7 +43,9 @@
42
43
  "@dfinity/identity": "^3.4.3",
43
44
  "@dfinity/identity-secp256k1": "^3.4.3",
44
45
  "@dfinity/principal": "^3.4.3",
45
- "@dfinity/vetkeys": "^0.4.0"
46
+ "@dfinity/vetkeys": "^0.4.0",
47
+ "@noble/curves": "^1.9.7",
48
+ "@noble/hashes": "^1.8.0"
46
49
  },
47
50
  "devDependencies": {
48
51
  "@types/node": "^25.3.3",