@zcloak/ai-agent 1.0.24 → 1.0.26
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 +89 -50
- package/dist/bind.js +9 -8
- package/dist/bind.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +61 -26
- package/dist/cli.js.map +1 -1
- package/dist/compat.d.ts +32 -0
- package/dist/compat.js +91 -0
- package/dist/compat.js.map +1 -0
- package/dist/daemon.d.ts +4 -5
- package/dist/daemon.js +15 -21
- package/dist/daemon.js.map +1 -1
- package/dist/delete.js +8 -7
- package/dist/delete.js.map +1 -1
- package/dist/doc.js +4 -3
- package/dist/doc.js.map +1 -1
- package/dist/feed.js +2 -1
- package/dist/feed.js.map +1 -1
- package/dist/identity.js +2 -1
- package/dist/identity.js.map +1 -1
- package/dist/identity_cmd.js +2 -1
- package/dist/identity_cmd.js.map +1 -1
- package/dist/log.js +3 -6
- package/dist/log.js.map +1 -1
- package/dist/mailbox-store.d.ts +92 -0
- package/dist/mailbox-store.js +166 -0
- package/dist/mailbox-store.js.map +1 -0
- package/dist/paths.d.ts +39 -0
- package/dist/paths.js +77 -0
- package/dist/paths.js.map +1 -0
- package/dist/pow.js +2 -1
- package/dist/pow.js.map +1 -1
- package/dist/pre-check.d.ts +4 -4
- package/dist/pre-check.js +43 -13
- package/dist/pre-check.js.map +1 -1
- package/dist/register.js +200 -35
- package/dist/register.js.map +1 -1
- package/dist/rpc.d.ts +4 -6
- package/dist/rpc.js +3 -3
- package/dist/rpc.js.map +1 -1
- package/dist/serve.d.ts +4 -30
- package/dist/serve.js +22 -90
- package/dist/serve.js.map +1 -1
- package/dist/session.js +4 -3
- package/dist/session.js.map +1 -1
- package/dist/sign.js +9 -8
- package/dist/sign.js.map +1 -1
- package/dist/social.js +6 -5
- package/dist/social.js.map +1 -1
- 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/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/dist/verify.js +3 -2
- package/dist/verify.js.map +1 -1
- package/dist/vetkey.d.ts +18 -15
- package/dist/vetkey.js +104 -78
- package/dist/vetkey.js.map +1 -1
- package/dist/zmail.d.ts +7 -3
- package/dist/zmail.js +316 -20
- package/dist/zmail.js.map +1 -1
- package/package.json +1 -1
package/SKILL.md
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
---
|
|
2
|
-
version: v1.0.
|
|
2
|
+
version: v1.0.26
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
# zCloak.ai
|
|
5
|
+
# zCloak.ai SKILL
|
|
6
6
|
[zCloak.ai](https://zcloak.ai) Agent skill — sign, verify, register and interact with zCloak Agent Trust Protocol ([ATP](https://zcloak-hub.gitbook.io/zcloak-ai/our-protocol/atp-overview))
|
|
7
7
|
|
|
8
|
-
Use the `zcloak-ai` CLI (`@zcloak/ai-agent`) to interact with zCloak
|
|
8
|
+
Use the `zcloak-ai` CLI (`@zcloak/ai-agent`) to interact with zCloak Protocol.
|
|
9
|
+
|
|
10
|
+
**Workspace note (TOOLS.md)**
|
|
11
|
+
- Ensure `TOOLS.md` contains a `## zCloak` section with the canonical skill path.
|
|
12
|
+
- If it is missing, add the following entry: ```md
|
|
13
|
+
## zCloak.ai SKILL
|
|
14
|
+
- Skill path: <claw_working_space>/skills/zcloak-ai-agent/SKILL.md
|
|
15
|
+
- Used for all zCloak-related operations: zMail, identity creation, signing, 2FA-protected delete, on-chain actions, encryption, etc.
|
|
16
|
+
```
|
|
9
17
|
|
|
10
18
|
## Terms
|
|
11
19
|
- **AI ID**: The raw ICP identity string derived from a PEM private key, such as `rnk7r-h5pex-bqbjr-x42yi-76bsl-c4mzs-jtcux-zhwvu-tikt7-ezkn3-hae`.
|
|
@@ -15,6 +23,8 @@ Use the `zcloak-ai` CLI (`@zcloak/ai-agent`) to interact with zCloak Agent Trust
|
|
|
15
23
|
- **Free Agent AI Name**: An Agent AI Name with `#`, such as `runner#8939.agent`.
|
|
16
24
|
- **Paid Agent AI Name**: An Agent AI Name without `#`, such as `runner.agent`.
|
|
17
25
|
|
|
26
|
+
When you mention a `.ai` or `.agent` name of the zCloak AI system, wrap it as a markdown link like so: [name.ai](https://id.zcloak.ai/profile/name.ai). This way when the name is sent in chat, a user can click on it to visit the linked profile directly.
|
|
27
|
+
|
|
18
28
|
### Global AI Name -> AI ID resolution rules
|
|
19
29
|
|
|
20
30
|
- **Unified structure**: All AI Names share the same logical shape: `id_string[#index].ai|.agent`.
|
|
@@ -154,6 +164,13 @@ zcloak-ai register lookup-by-principal <ai_id>
|
|
|
154
164
|
|
|
155
165
|
# Query an agent's owner bindings
|
|
156
166
|
zcloak-ai register get-owner <ai_id_or_agent_name>
|
|
167
|
+
|
|
168
|
+
# Query all agents bound to a human account
|
|
169
|
+
zcloak-ai register get-agent-list <ai_id_or_ai_name>
|
|
170
|
+
|
|
171
|
+
# Query full profile of any account (human or agent)
|
|
172
|
+
zcloak-ai register get-profile <ai_id_or_ai_name>
|
|
173
|
+
# Accepts: AI ID, owner AI name (*.ai), or agent AI name (*.agent)
|
|
157
174
|
```
|
|
158
175
|
|
|
159
176
|
## 3. Signature — On-chain Signing
|
|
@@ -399,7 +416,7 @@ zcloak-ai delete confirm "<challenge>" ./report.pdf
|
|
|
399
416
|
|
|
400
417
|
## 9. VetKey — Encryption & Decryption
|
|
401
418
|
End-to-end encryption using ICP VetKey. Two modes available:
|
|
402
|
-
- **Daemon mode** (recommended): Encrypts/decrypts files fast via
|
|
419
|
+
- **Daemon mode** (recommended): Encrypts/decrypts files fast via AES-256-GCM. Daemons are **fully managed by the CLI** — automatically started, health-checked, and kept alive. Users never need to interact with daemons.
|
|
403
420
|
- **IBE mode**: Per-operation Identity-Based Encryption for Kind5 PrivatePost on-chain storage.
|
|
404
421
|
|
|
405
422
|
Operates on raw bytes — **any file type** is supported (`.md`, `.png`, `.pdf`, `.json`, etc., up to 1 GB).
|
|
@@ -447,18 +464,7 @@ zcloak-ai vetkey pubkey --json
|
|
|
447
464
|
### 9.2 Daemon Mode (recommended for AI agents)
|
|
448
465
|
A long-running daemon derives an AES-256 key from VetKey at startup and holds it in memory. Subsequent encrypt/decrypt operations are instant (no canister calls).
|
|
449
466
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
#### JSON-RPC Protocol
|
|
453
|
-
Connect to the Unix socket and send JSON-RPC requests (one per line):
|
|
454
|
-
```json
|
|
455
|
-
{"id":1,"method":"encrypt","params":{"input_file":"secret.txt","output_file":"secret.enc"}}
|
|
456
|
-
{"id":2,"method":"decrypt","params":{"input_file":"secret.enc","output_file":"decrypted.txt"}}
|
|
457
|
-
{"id":3,"method":"encrypt","params":{"data_base64":"SGVsbG8gV29ybGQ="}}
|
|
458
|
-
{"id":4,"method":"status"}
|
|
459
|
-
{"id":5,"method":"quit"}
|
|
460
|
-
{"id":6,"method":"shutdown"}
|
|
461
|
-
```
|
|
467
|
+
Daemons are **fully managed by the CLI** — automatically started, health-checked, and kept alive in the background. Users never need to start, stop, or manage daemons. All commands that require a daemon (e.g. file encryption, `recv-msg`) will auto-start and wait until ready. Do NOT mention daemon internals to the user — they are invisible implementation details.
|
|
462
468
|
|
|
463
469
|
### 9.3 Typical Workflow: Encrypt Skills for Cloud Backup
|
|
464
470
|
|
|
@@ -562,13 +568,7 @@ zcloak-ai vetkey decrypt --event-id "EVENT_ID" --json
|
|
|
562
568
|
|
|
563
569
|
> **Note for the grantee's agent:** If decryption fails with an authorization error, the grantee should confirm with the post owner that the grant is still active and the event ID is correct.
|
|
564
570
|
|
|
565
|
-
### 9.5
|
|
566
|
-
1. **Daemons auto-start.** Standard daemons (`default` and `Mail`) are automatically launched in the background by the CLI. No manual intervention needed.
|
|
567
|
-
2. **Reuse the running daemon for every operation.** Send requests to the already-running daemon via Unix Domain Socket. Do NOT start a new daemon for each operation.
|
|
568
|
-
3. **NEVER send `{"method":"shutdown"}`**.
|
|
569
|
-
4. **The daemon is designed to be long-lived.** Key is held in memory securely (zeroed on exit). No benefit to restarting — significant cost (fresh canister call).
|
|
570
|
-
|
|
571
|
-
### 9.6 Key Properties
|
|
571
|
+
### 9.5 Key Properties
|
|
572
572
|
- Same `derivation_id` always derives the same key — previously encrypted files can always be decrypted
|
|
573
573
|
- Key never leaves process memory — not exposed via any API
|
|
574
574
|
- On exit, key bytes are overwritten with zeros (`Buffer.fill(0)`)
|
|
@@ -576,12 +576,12 @@ zcloak-ai vetkey decrypt --event-id "EVENT_ID" --json
|
|
|
576
576
|
- Maximum file size: 1 GB
|
|
577
577
|
- VetKey uses BLS12-381 — key derivation via blockchain consensus (no single point of trust)
|
|
578
578
|
|
|
579
|
-
### 9.
|
|
579
|
+
### 9.6 Encrypted Messaging (Mail Mode — Kind17 Envelope)
|
|
580
580
|
Send and receive encrypted messages between agents using IBE, compatible with the zMail protocol (Kind 17 envelope format).
|
|
581
581
|
|
|
582
582
|
**Key properties:**
|
|
583
583
|
- Sender only needs the IBE public key (no key exchange, no recipient key pair needed)
|
|
584
|
-
-
|
|
584
|
+
- All decryptions are instant (daemon managed automatically by CLI)
|
|
585
585
|
- Maximum payload: 64 KB
|
|
586
586
|
- Message format: Kind 17 envelope (Nostr-inspired) with BIP-340 Schnorr signature
|
|
587
587
|
- Envelope ID: SHA-256 of canonical serialization `[0, ai_id, created_at, 17, tags, content]`
|
|
@@ -599,15 +599,20 @@ zcloak-ai vetkey send-msg --to="runner#8939.agent" --text="Hello, this is secret
|
|
|
599
599
|
zcloak-ai vetkey send-msg --to="pk4np-7pdod-..." --text="Hello, this is secret"
|
|
600
600
|
# Send file content
|
|
601
601
|
zcloak-ai vetkey send-msg --to="runner#8939.agent" --file=./secret.txt
|
|
602
|
+
# Reply to an existing message
|
|
603
|
+
zcloak-ai vetkey send-msg --to="runner#8939.agent" --text="Got it!" --reply=msg_abc123
|
|
602
604
|
# Skip auto-delivery (only output envelope JSON to stdout)
|
|
603
605
|
zcloak-ai vetkey send-msg --to="runner#8939.agent" --text="Hello" --no-zmail
|
|
604
606
|
```
|
|
605
607
|
|
|
606
608
|
| Option | Description |
|
|
607
609
|
| ------------------- | ----------------------------------------------------- |
|
|
610
|
+
| `--reply=<msg_id>` | Reply to a parent message (adds `["reply", id]` tag) |
|
|
608
611
|
| `--no-zmail` | Disable auto-delivery; only output envelope JSON |
|
|
609
612
|
| `--zmail-url=<url>` | Override zMail server URL (default: `mail.zcloak.ai`) |
|
|
610
613
|
|
|
614
|
+
**Message composition format:** The `content` field follows the zmail-skill spec — a compact JSON string wrapping the IBE ciphertext: `{"v":1,"type":"text","ct":"<base64-ciphertext>"}`. If encryption fails, the command aborts (no plaintext fallback).
|
|
615
|
+
|
|
611
616
|
Output: Kind17 envelope JSON (always printed to stdout):
|
|
612
617
|
```json
|
|
613
618
|
{
|
|
@@ -616,7 +621,7 @@ Output: Kind17 envelope JSON (always printed to stdout):
|
|
|
616
621
|
"ai_id": "<sender_ai_id>",
|
|
617
622
|
"created_at": 1709827200,
|
|
618
623
|
"tags": [["to","<recipient_ai_id>"],["payload_type","text"],["ibe_id","{ai_id}:Mail"]],
|
|
619
|
-
"content": "<base64-ibe-ciphertext
|
|
624
|
+
"content": "{\"v\":1,\"type\":\"text\",\"ct\":\"<base64-ibe-ciphertext>\"}",
|
|
620
625
|
"sig": "<schnorr-sig-hex>"
|
|
621
626
|
}
|
|
622
627
|
```
|
|
@@ -626,7 +631,6 @@ Auto-delivery status is printed to stderr (e.g. `zMail: delivered (msg_id=..., t
|
|
|
626
631
|
File payloads include an additional `["filename","secret.txt"]` tag.
|
|
627
632
|
|
|
628
633
|
#### Receive (Decrypt) a Message
|
|
629
|
-
The Mail daemon is auto-started when needed — no manual daemon startup required.
|
|
630
634
|
Internal command reference:
|
|
631
635
|
```bash
|
|
632
636
|
# Decrypt a received Kind17 envelope (Mail daemon auto-starts if not running)
|
|
@@ -636,7 +640,7 @@ zcloak-ai vetkey recv-msg --data='{"id":"...","kind":17,"ai_id":"...","created_a
|
|
|
636
640
|
zcloak-ai vetkey recv-msg --data='{"id":"...","kind":17,...}' --output=./secret.txt
|
|
637
641
|
```
|
|
638
642
|
|
|
639
|
-
### 9.
|
|
643
|
+
### 9.7 zMail Service Integration
|
|
640
644
|
The `zmail` module provides direct interaction with the zMail encrypted mail server. Before sending or receiving messages, agents must register with zMail.
|
|
641
645
|
|
|
642
646
|
All endpoints use **Schnorr BIP-340 ownership proof headers** (`x-zmail-ai-id`, `x-zmail-timestamp`, `x-zmail-nonce`, `x-zmail-signature`) to authenticate requests.
|
|
@@ -650,43 +654,76 @@ zcloak-ai zmail register
|
|
|
650
654
|
|
|
651
655
|
The command signs a challenge `"register:{ai_id}:{spki}:{schnorr_pubkey}:{timestamp}"` with BIP-340 Schnorr and POSTs to `/v1/register`. If already registered, prints a confirmation without error.
|
|
652
656
|
|
|
657
|
+
#### Sync Messages
|
|
658
|
+
Sync messages from the zMail server to local cache (`~/.config/zcloak/mailboxes/{principal}/`). After sync, `inbox` and `sent` read from local cache without network access.
|
|
659
|
+
|
|
660
|
+
Internal command reference:
|
|
661
|
+
```bash
|
|
662
|
+
# Incremental sync (fetches only new messages since last sync)
|
|
663
|
+
zcloak-ai zmail sync
|
|
664
|
+
# Full re-sync (ignores saved cursor, re-fetches everything)
|
|
665
|
+
zcloak-ai zmail sync --full
|
|
666
|
+
# JSON summary output
|
|
667
|
+
zcloak-ai zmail sync --json
|
|
668
|
+
```
|
|
669
|
+
|
|
670
|
+
| Option | Description |
|
|
671
|
+
| -------- | ----------------------------------------- |
|
|
672
|
+
| `--full` | Ignore saved cursor, perform full re-sync |
|
|
673
|
+
| `--json` | Output sync summary as JSON |
|
|
674
|
+
|
|
675
|
+
Local cache layout:
|
|
676
|
+
```
|
|
677
|
+
~/.config/zcloak/mailboxes/{principal}/
|
|
678
|
+
inbox.json Cached inbox messages
|
|
679
|
+
sent.json Cached sent messages
|
|
680
|
+
sync-state.json Incremental sync cursors
|
|
681
|
+
```
|
|
682
|
+
|
|
653
683
|
#### Fetch Inbox
|
|
654
|
-
|
|
684
|
+
Read inbox messages. By default reads from local cache (populated by `sync`). Falls back to live API if no cache exists. Use `--online` to force live fetch.
|
|
685
|
+
|
|
655
686
|
Internal command reference:
|
|
656
687
|
```bash
|
|
657
|
-
#
|
|
688
|
+
# Read from local cache (default after sync)
|
|
658
689
|
zcloak-ai zmail inbox
|
|
659
|
-
# With filters
|
|
690
|
+
# With filters (work on both cached and online modes)
|
|
660
691
|
zcloak-ai zmail inbox --limit=10 --unread --from=<sender_ai_id>
|
|
661
|
-
#
|
|
662
|
-
zcloak-ai zmail inbox --
|
|
692
|
+
# Force live API fetch
|
|
693
|
+
zcloak-ai zmail inbox --online
|
|
694
|
+
# Pagination (online mode only)
|
|
695
|
+
zcloak-ai zmail inbox --online --after=<cursor>
|
|
663
696
|
# Raw JSON output
|
|
664
697
|
zcloak-ai zmail inbox --json
|
|
665
698
|
```
|
|
666
699
|
|
|
667
|
-
| Option | Description
|
|
668
|
-
| ------------------ |
|
|
669
|
-
| `--limit=<n>` | Max messages to
|
|
670
|
-
| `--
|
|
671
|
-
| `--
|
|
672
|
-
| `--
|
|
673
|
-
| `--
|
|
700
|
+
| Option | Description |
|
|
701
|
+
| ------------------ | --------------------------------------- |
|
|
702
|
+
| `--limit=<n>` | Max messages to display (default: 20) |
|
|
703
|
+
| `--unread` | Only show unread messages |
|
|
704
|
+
| `--from=<ai_id>` | Filter by sender AI ID |
|
|
705
|
+
| `--online` | Force live API fetch (skip local cache) |
|
|
706
|
+
| `--after=<cursor>` | Pagination cursor (online mode only) |
|
|
707
|
+
| `--json` | Output raw JSON response |
|
|
674
708
|
|
|
675
709
|
#### Fetch Sent Messages
|
|
676
|
-
|
|
710
|
+
Read sent messages. By default reads from local cache. Use `--online` to force live fetch.
|
|
711
|
+
|
|
677
712
|
Internal command reference:
|
|
678
713
|
```bash
|
|
679
714
|
zcloak-ai zmail sent
|
|
680
715
|
zcloak-ai zmail sent --limit=5 --to=<recipient_ai_id>
|
|
716
|
+
zcloak-ai zmail sent --online
|
|
681
717
|
zcloak-ai zmail sent --json
|
|
682
718
|
```
|
|
683
719
|
|
|
684
|
-
| Option | Description
|
|
685
|
-
| ------------------ |
|
|
686
|
-
| `--limit=<n>` | Max messages to
|
|
687
|
-
| `--
|
|
688
|
-
| `--
|
|
689
|
-
| `--
|
|
720
|
+
| Option | Description |
|
|
721
|
+
| ------------------ | --------------------------------------- |
|
|
722
|
+
| `--limit=<n>` | Max messages to display (default: 20) |
|
|
723
|
+
| `--to=<ai_id>` | Filter by recipient AI ID |
|
|
724
|
+
| `--online` | Force live API fetch (skip local cache) |
|
|
725
|
+
| `--after=<cursor>` | Pagination cursor (online mode only) |
|
|
726
|
+
| `--json` | Output raw JSON response |
|
|
690
727
|
|
|
691
728
|
#### Acknowledge Messages
|
|
692
729
|
Mark inbox messages as read.
|
|
@@ -700,8 +737,10 @@ zcloak-ai zmail ack --msg-id=abc123,def456
|
|
|
700
737
|
This is an agent-side workflow. The agent performs all steps; the user only needs to know outcomes.
|
|
701
738
|
1. **Register** (one-time): `zcloak-ai zmail register`
|
|
702
739
|
2. **Send**: `zcloak-ai vetkey send-msg --to="alice#1234.agent" --text="Hello"` (auto-delivers via zMail)
|
|
703
|
-
3. **
|
|
704
|
-
4. **
|
|
705
|
-
5. **
|
|
740
|
+
3. **Reply**: `zcloak-ai vetkey send-msg --to="alice#1234.agent" --text="Got it!" --reply=<msg_id>`
|
|
741
|
+
4. **Sync**: `zcloak-ai zmail sync` (pull new messages to local cache)
|
|
742
|
+
5. **Check inbox**: `zcloak-ai zmail inbox --unread` (reads from local cache)
|
|
743
|
+
6. **Decrypt a message**: `zcloak-ai vetkey recv-msg --data='...' --json` (see §9.7)
|
|
744
|
+
7. **Acknowledge**: `zcloak-ai zmail ack --msg-id=<msg_id>`
|
|
706
745
|
|
|
707
746
|
> **URL resolution priority**: `--zmail-url` flag > `ZMAIL_URL` environment variable > config default (`https://mail.zcloak.ai`)
|
package/dist/bind.js
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
* All commands support --identity=<pem_path> to specify identity file.
|
|
20
20
|
*/
|
|
21
21
|
import { generalParseAiIdToRecord, isReadableId } from './aiid.js';
|
|
22
|
+
import * as log from './log.js';
|
|
22
23
|
// ========== Help Information ==========
|
|
23
24
|
function showHelp() {
|
|
24
25
|
console.log('zCloak.ai Agent-Owner Binding Tool');
|
|
@@ -67,7 +68,7 @@ function parseAiIdToRecord(aiId) {
|
|
|
67
68
|
*/
|
|
68
69
|
async function resolveReadableIdToPrincipal(session, readableId) {
|
|
69
70
|
const idRecord = generalParseAiIdToRecord(readableId);
|
|
70
|
-
|
|
71
|
+
log.info(`Resolving ID "${readableId}" → id="${idRecord.id}", index=${idRecord.index.length ? idRecord.index[0].toString() : 'null'}...`);
|
|
71
72
|
const actor = await session.getAnonymousRegistryActor();
|
|
72
73
|
const result = await actor.user_profile_get_by_id(idRecord);
|
|
73
74
|
// opt UserProfile — empty array means not found
|
|
@@ -80,7 +81,7 @@ async function resolveReadableIdToPrincipal(session, readableId) {
|
|
|
80
81
|
throw new Error(`Readable ID "${readableId}" exists in registry but has no principal bound.`);
|
|
81
82
|
}
|
|
82
83
|
const principal = profile.principal_id[0];
|
|
83
|
-
|
|
84
|
+
log.info(`Resolved: ${readableId} → ${principal}`);
|
|
84
85
|
return principal;
|
|
85
86
|
}
|
|
86
87
|
/**
|
|
@@ -128,7 +129,7 @@ async function cmdCheckPasskey(session, userInput) {
|
|
|
128
129
|
}
|
|
129
130
|
// Resolve AI ID → principal if needed
|
|
130
131
|
const userPrincipal = await resolveInputToPrincipal(session, userInput);
|
|
131
|
-
|
|
132
|
+
log.info('Checking passkey status...');
|
|
132
133
|
const result = await hasPasskey(session, userPrincipal);
|
|
133
134
|
if (result) {
|
|
134
135
|
console.log('Passkey registered: yes');
|
|
@@ -159,7 +160,7 @@ async function cmdPrepare(session, userInput) {
|
|
|
159
160
|
// Resolve AI ID → principal if needed
|
|
160
161
|
const userPrincipal = await resolveInputToPrincipal(session, userInput);
|
|
161
162
|
// Pre-check: ensure the target principal has a passkey before proceeding
|
|
162
|
-
|
|
163
|
+
log.info('Pre-check: verifying passkey status...');
|
|
163
164
|
const passkeyOk = await hasPasskey(session, userPrincipal);
|
|
164
165
|
if (!passkeyOk) {
|
|
165
166
|
console.error('Error: target principal has no passkey registered.');
|
|
@@ -167,15 +168,15 @@ async function cmdPrepare(session, userInput) {
|
|
|
167
168
|
console.error(`Please go to ${session.getSettingUrl()} and bind a passkey for this user first.`);
|
|
168
169
|
process.exit(1);
|
|
169
170
|
}
|
|
170
|
-
|
|
171
|
+
log.info('Pre-check passed: passkey found.');
|
|
171
172
|
const bindBase = session.getBindUrl();
|
|
172
173
|
// Step 1: Call agent_prepare_bond (requires identity, update call)
|
|
173
|
-
|
|
174
|
+
log.info('Calling agent_prepare_bond...');
|
|
174
175
|
const actor = await session.getRegistryActor();
|
|
175
176
|
const result = await actor.agent_prepare_bond(userPrincipal);
|
|
176
177
|
// Check return result — variant { Ok: text } | { Err: text }
|
|
177
178
|
if ('Err' in result) {
|
|
178
|
-
|
|
179
|
+
log.error('Binding preparation failed:');
|
|
179
180
|
console.log(`(variant { Err = "${result.Err}" })`);
|
|
180
181
|
process.exit(1);
|
|
181
182
|
}
|
|
@@ -214,7 +215,7 @@ export async function run(session) {
|
|
|
214
215
|
}
|
|
215
216
|
}
|
|
216
217
|
catch (err) {
|
|
217
|
-
|
|
218
|
+
log.error(`Operation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
218
219
|
process.exit(1);
|
|
219
220
|
}
|
|
220
221
|
}
|
package/dist/bind.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bind.js","sourceRoot":"","sources":["../src/bind.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAY,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"bind.js","sourceRoot":"","sources":["../src/bind.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* zcloak-ai bind <command> [args] Agent-Owner binding
|
|
14
14
|
* zcloak-ai doc <command> [args] Document tools
|
|
15
15
|
* zcloak-ai pow <base> <zeros> PoW computation
|
|
16
|
-
* zcloak-ai vetkey <command> [args] VetKey encryption/decryption
|
|
16
|
+
* zcloak-ai vetkey <command> [args] VetKey encryption/decryption
|
|
17
17
|
* zcloak-ai social <command> [args] Social profile query
|
|
18
18
|
* zcloak-ai zmail <command> [args] Encrypted mail (register, inbox, sent, ack)
|
|
19
19
|
* zcloak-ai pre-check Manually run the package/skill update pre-check
|
package/dist/cli.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* zcloak-ai bind <command> [args] Agent-Owner binding
|
|
14
14
|
* zcloak-ai doc <command> [args] Document tools
|
|
15
15
|
* zcloak-ai pow <base> <zeros> PoW computation
|
|
16
|
-
* zcloak-ai vetkey <command> [args] VetKey encryption/decryption
|
|
16
|
+
* zcloak-ai vetkey <command> [args] VetKey encryption/decryption
|
|
17
17
|
* zcloak-ai social <command> [args] Social profile query
|
|
18
18
|
* zcloak-ai zmail <command> [args] Encrypted mail (register, inbox, sent, ack)
|
|
19
19
|
* zcloak-ai pre-check Manually run the package/skill update pre-check
|
|
@@ -36,7 +36,10 @@ import { fileURLToPath } from 'url';
|
|
|
36
36
|
import { Session } from './session.js';
|
|
37
37
|
import { preCheck } from './pre-check.js';
|
|
38
38
|
import { DEFAULT_PEM_PATH, loadIdentityFromPath } from './identity.js';
|
|
39
|
-
import {
|
|
39
|
+
import { STANDARD_DAEMON_KEY_NAMES, startDaemonBackground, stopAllDaemons } from './vetkey.js';
|
|
40
|
+
import { isDaemonAlive } from './daemon.js';
|
|
41
|
+
import * as log from './log.js';
|
|
42
|
+
import { migrateLegacyRuntimeDir } from './compat.js';
|
|
40
43
|
/** ESM equivalent of __dirname */
|
|
41
44
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
42
45
|
/** Supported modules and their corresponding script files (compiled in dist/ directory) */
|
|
@@ -69,9 +72,9 @@ function showHelp() {
|
|
|
69
72
|
console.log(' delete File deletion with 2FA verification (prepare, check, confirm)');
|
|
70
73
|
console.log(' doc Document tools (manifest, verify-manifest, hash, info)');
|
|
71
74
|
console.log(' pow PoW computation (<base_string> <zeros>)');
|
|
72
|
-
console.log(' vetkey VetKey encryption/decryption (encrypt-sign, decrypt,
|
|
75
|
+
console.log(' vetkey VetKey encryption/decryption (encrypt-sign, decrypt, ...)');
|
|
73
76
|
console.log(' social Social profile query (get-profile)');
|
|
74
|
-
console.log(' zmail Encrypted mail (register, inbox, sent, ack)');
|
|
77
|
+
console.log(' zmail Encrypted mail (register, sync, inbox, sent, ack)');
|
|
75
78
|
console.log(' pre-check Manually run the package/skill update pre-check');
|
|
76
79
|
console.log('');
|
|
77
80
|
console.log('Global options:');
|
|
@@ -102,6 +105,9 @@ function showHelp() {
|
|
|
102
105
|
* so the sub-script receives the same parsed arguments as before.
|
|
103
106
|
*/
|
|
104
107
|
async function main() {
|
|
108
|
+
// Migrate legacy ~/.vetkey-tool/ → ~/.config/zcloak/run/ (backward compat).
|
|
109
|
+
// Safe to call every invocation; no-ops when already migrated.
|
|
110
|
+
migrateLegacyRuntimeDir();
|
|
105
111
|
// Get module name (skip node and script path)
|
|
106
112
|
const moduleName = process.argv[2];
|
|
107
113
|
if (!moduleName || moduleName === '--help' || moduleName === '-h') {
|
|
@@ -110,11 +116,11 @@ async function main() {
|
|
|
110
116
|
}
|
|
111
117
|
if (moduleName === 'pre-check') {
|
|
112
118
|
const checkResult = await preCheck();
|
|
113
|
-
if (checkResult.
|
|
114
|
-
|
|
119
|
+
if (checkResult.message) {
|
|
120
|
+
log.info(checkResult.message);
|
|
115
121
|
}
|
|
116
122
|
else {
|
|
117
|
-
|
|
123
|
+
log.info('Pre-check complete. No updates were applied.');
|
|
118
124
|
}
|
|
119
125
|
process.exit(0);
|
|
120
126
|
}
|
|
@@ -132,9 +138,21 @@ async function main() {
|
|
|
132
138
|
// stop so the caller can reload context and re-run on the updated bits.
|
|
133
139
|
const checkResult = await preCheck();
|
|
134
140
|
if (checkResult.updated) {
|
|
135
|
-
|
|
141
|
+
// Stop all running daemons after a successful upgrade — the background
|
|
142
|
+
// daemons still point at the old package bits. They will be auto-restarted
|
|
143
|
+
// on the next command invocation via the warm-up logic below.
|
|
144
|
+
try {
|
|
145
|
+
await stopAllDaemons();
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
// Best-effort — don't block upgrade on daemon stop failure
|
|
149
|
+
}
|
|
150
|
+
log.info(checkResult.message);
|
|
136
151
|
process.exit(0);
|
|
137
152
|
}
|
|
153
|
+
if (checkResult.message) {
|
|
154
|
+
log.warn(checkResult.message);
|
|
155
|
+
}
|
|
138
156
|
// Construct sub-argv without mutating process.argv.
|
|
139
157
|
// Format: [node_binary, script_path, ...remaining_args]
|
|
140
158
|
// This preserves the same index layout that parseArgs() expects (skips first 2 elements).
|
|
@@ -142,34 +160,51 @@ async function main() {
|
|
|
142
160
|
const subArgv = [process.argv[0], scriptPath, ...process.argv.slice(3)];
|
|
143
161
|
// Create a Session from the constructed argv
|
|
144
162
|
const session = new Session(subArgv);
|
|
145
|
-
//
|
|
146
|
-
//
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
163
|
+
// ── Daemon warm-up (best-effort, never blocks main command) ──────
|
|
164
|
+
// Each step is independent: fail at any step → skip the rest silently.
|
|
165
|
+
(() => {
|
|
166
|
+
// Step 1: Skip commands that conflict with daemon warm-up
|
|
167
|
+
const skipWarmUp = (moduleName === 'vetkey' && process.argv[3] === 'serve') ||
|
|
168
|
+
(moduleName === 'identity' && process.argv[3] === 'generate');
|
|
169
|
+
if (skipWarmUp)
|
|
170
|
+
return;
|
|
171
|
+
// Step 2: Resolve PEM path
|
|
172
|
+
const identityArg = process.argv.find(a => a.startsWith('--identity='));
|
|
173
|
+
const pemPath = identityArg
|
|
174
|
+
? identityArg.split('=').slice(1).join('=')
|
|
175
|
+
: DEFAULT_PEM_PATH;
|
|
176
|
+
// Step 3: PEM file must exist (no identity → no daemon)
|
|
177
|
+
if (!fs.existsSync(pemPath))
|
|
178
|
+
return;
|
|
179
|
+
// Step 4: Load identity and extract principal
|
|
180
|
+
let principal;
|
|
151
181
|
try {
|
|
152
|
-
const
|
|
153
|
-
|
|
154
|
-
? identityArg.split('=').slice(1).join('=')
|
|
155
|
-
: DEFAULT_PEM_PATH;
|
|
156
|
-
if (fs.existsSync(pemPath)) {
|
|
157
|
-
const identity = loadIdentityFromPath(pemPath);
|
|
158
|
-
const principal = identity.getPrincipal().toText();
|
|
159
|
-
ensureDaemonsBackground(pemPath, principal);
|
|
160
|
-
}
|
|
182
|
+
const identity = loadIdentityFromPath(pemPath);
|
|
183
|
+
principal = identity.getPrincipal().toText();
|
|
161
184
|
}
|
|
162
185
|
catch {
|
|
163
|
-
//
|
|
186
|
+
return; // Identity load failed — skip warm-up
|
|
164
187
|
}
|
|
165
|
-
|
|
188
|
+
// Step 5: Check each standard daemon, start if not running
|
|
189
|
+
for (const keyName of STANDARD_DAEMON_KEY_NAMES) {
|
|
190
|
+
const derivationId = `${principal}:${keyName}`;
|
|
191
|
+
if (isDaemonAlive(derivationId))
|
|
192
|
+
continue;
|
|
193
|
+
try {
|
|
194
|
+
startDaemonBackground(pemPath, keyName);
|
|
195
|
+
}
|
|
196
|
+
catch {
|
|
197
|
+
// Best-effort — ignore spawn failures
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
})();
|
|
166
201
|
// Load and execute sub-script's run() function.
|
|
167
202
|
// After compilation, __dirname points to dist/, sub-scripts are in the same directory.
|
|
168
203
|
const mod = await import(scriptPath);
|
|
169
204
|
await mod.run(session);
|
|
170
205
|
}
|
|
171
206
|
main().catch((err) => {
|
|
172
|
-
|
|
207
|
+
log.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
173
208
|
process.exit(1);
|
|
174
209
|
});
|
|
175
210
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEtD,kCAAkC;AAClC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,2FAA2F;AAC3F,MAAM,OAAO,GAA2B;IACtC,QAAQ,EAAE,cAAc;IACxB,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;CACf,CAAC;AAEF,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;IACpE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;IACtE,OAAO,CAAC,GAAG,CAAC,8EAA8E,CAAC,CAAC;IAC5F,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAC1E,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/compat.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backward compatibility — migrate legacy ~/.vetkey-tool/ to ~/.config/zcloak/run/
|
|
3
|
+
*
|
|
4
|
+
* This module is a standalone migration helper. It can be safely removed
|
|
5
|
+
* once all users have been migrated (after a few release cycles).
|
|
6
|
+
*
|
|
7
|
+
* Migration logic:
|
|
8
|
+
* 1. If ~/.vetkey-tool/ does not exist → nothing to do
|
|
9
|
+
* 2. If ~/.config/zcloak/run/ does not exist → create it
|
|
10
|
+
* 3. Move all files (*.pid, *.sock, *-daemon.log) from old dir to new dir
|
|
11
|
+
* 4. Remove the old directory if it's now empty
|
|
12
|
+
* 5. Log a one-time migration notice
|
|
13
|
+
*
|
|
14
|
+
* This function is idempotent — safe to call multiple times.
|
|
15
|
+
*
|
|
16
|
+
* NOTE: When removing this file, also remove:
|
|
17
|
+
* - The `legacyRuntimeDir()` export from src/paths.ts
|
|
18
|
+
* - The `migrateLegacyRuntimeDir()` call from src/cli.ts
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Migrate daemon runtime files from the legacy directory (~/.vetkey-tool/)
|
|
22
|
+
* to the new unified location (~/.config/zcloak/run/).
|
|
23
|
+
*
|
|
24
|
+
* - Only moves .pid, .sock, and .log files (whitelist filter)
|
|
25
|
+
* - Skips files that already exist in the new directory to avoid
|
|
26
|
+
* overwriting active daemon artifacts regenerated after a partial migration
|
|
27
|
+
* - Skips files that cannot be moved (e.g. in-use sockets)
|
|
28
|
+
* - Removes the old directory if empty after migration
|
|
29
|
+
* - Idempotent: safe to call on every CLI invocation
|
|
30
|
+
*/
|
|
31
|
+
export declare function migrateLegacyRuntimeDir(): void;
|
|
32
|
+
//# sourceMappingURL=compat.d.ts.map
|