@zcloak/ai-agent 1.0.18 → 1.0.20
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/SKILL.md +764 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +48 -0
- package/dist/cli.js.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +18 -0
- package/dist/daemon.js +39 -0
- package/dist/daemon.js.map +1 -1
- package/dist/pre-check.d.ts +40 -0
- package/dist/pre-check.js +199 -0
- package/dist/pre-check.js.map +1 -0
- package/dist/types/config.d.ts +2 -0
- package/dist/types/registry.d.ts +1 -1
- package/dist/types/registry.js +1 -1
- package/dist/types/sign-event.d.ts +1 -1
- package/dist/types/sign-event.js +1 -1
- package/dist/vetkey.d.ts +54 -0
- package/dist/vetkey.js +412 -177
- package/dist/vetkey.js.map +1 -1
- package/dist/zmail.d.ts +46 -0
- package/dist/zmail.js +465 -0
- package/dist/zmail.js.map +1 -0
- package/package.json +6 -3
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.
|
|
3
|
+
"version": "1.0.20",
|
|
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",
|