@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/session.js
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Session — Single CLI Invocation Context
|
|
4
|
+
*
|
|
5
|
+
* Replaces global mutable state (process.argv rewriting, module-level caches)
|
|
6
|
+
* with an explicit, per-invocation context object. All sub-scripts receive a
|
|
7
|
+
* Session instance instead of reading process.argv or relying on module singletons.
|
|
8
|
+
*
|
|
9
|
+
* Lifecycle:
|
|
10
|
+
* 1. cli.ts (or standalone script) creates a Session from argv
|
|
11
|
+
* 2. Session is passed to the sub-script's run() function
|
|
12
|
+
* 3. Sub-script uses session.getSignActor(), session.autoPoW(), etc.
|
|
13
|
+
* 4. Session is garbage-collected when the process exits
|
|
14
|
+
*
|
|
15
|
+
* Lazy initialization:
|
|
16
|
+
* Identity, HttpAgent, and Actor instances are created on first use and cached
|
|
17
|
+
* within the Session. This avoids unnecessary PEM reads or HTTP connections
|
|
18
|
+
* for commands that don't need them (e.g. `doc hash`).
|
|
19
|
+
*/
|
|
20
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
21
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
22
|
+
};
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.Session = void 0;
|
|
25
|
+
const agent_1 = require("@dfinity/agent");
|
|
26
|
+
const idl_1 = require("./idl");
|
|
27
|
+
const identity_1 = require("./identity");
|
|
28
|
+
const config_1 = require("./config");
|
|
29
|
+
const utils_1 = require("./utils");
|
|
30
|
+
const config_2 = __importDefault(require("./config"));
|
|
31
|
+
/** IC mainnet host address */
|
|
32
|
+
const IC_HOST = 'https://ic0.app';
|
|
33
|
+
/**
|
|
34
|
+
* Session encapsulates all state for a single CLI command invocation.
|
|
35
|
+
*
|
|
36
|
+
* It holds:
|
|
37
|
+
* - Parsed arguments and configuration (immutable after construction)
|
|
38
|
+
* - Lazy-loaded identity, HTTP agents, and canister actors (cached per session)
|
|
39
|
+
*
|
|
40
|
+
* This design eliminates:
|
|
41
|
+
* - process.argv rewriting in cli.ts
|
|
42
|
+
* - Module-level singleton caches (_identity, _authenticatedAgent, _anonymousAgent)
|
|
43
|
+
* - Implicit global state reads in domain functions
|
|
44
|
+
*/
|
|
45
|
+
class Session {
|
|
46
|
+
/**
|
|
47
|
+
* Create a new Session from a raw argv array.
|
|
48
|
+
*
|
|
49
|
+
* @param argv - Full argument array (same format as process.argv).
|
|
50
|
+
* The first two elements (node binary, script path) are skipped
|
|
51
|
+
* by parseArgs. Global options (--identity) are extracted
|
|
52
|
+
* by getPemPath.
|
|
53
|
+
*/
|
|
54
|
+
constructor(argv) {
|
|
55
|
+
// --- Lazy-initialized stateful resources (per-session cache) ---
|
|
56
|
+
this._identity = null;
|
|
57
|
+
this._authenticatedAgent = null;
|
|
58
|
+
this._anonymousAgent = null;
|
|
59
|
+
this._argv = argv;
|
|
60
|
+
this.args = (0, utils_1.parseArgs)(argv);
|
|
61
|
+
this.canisterIds = (0, config_1.getCanisterIds)();
|
|
62
|
+
}
|
|
63
|
+
// ========== Identity ==========
|
|
64
|
+
/**
|
|
65
|
+
* Get the resolved PEM file path for this session.
|
|
66
|
+
* Uses the same resolution priority as getIdentity():
|
|
67
|
+
* --identity=<path> > ZCLOAK_IDENTITY env > dfx default location
|
|
68
|
+
*/
|
|
69
|
+
getPemPath() {
|
|
70
|
+
return (0, identity_1.getPemPath)(this._argv);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get the ECDSA secp256k1 identity for this session.
|
|
74
|
+
* Loaded from PEM file on first call, then cached.
|
|
75
|
+
*
|
|
76
|
+
* PEM path resolution: --identity=<path> > ZCLOAK_IDENTITY env > dfx default location
|
|
77
|
+
*/
|
|
78
|
+
getIdentity() {
|
|
79
|
+
if (!this._identity) {
|
|
80
|
+
const pemPath = (0, identity_1.getPemPath)(this._argv);
|
|
81
|
+
this._identity = (0, identity_1.loadIdentityFromPath)(pemPath);
|
|
82
|
+
}
|
|
83
|
+
return this._identity;
|
|
84
|
+
}
|
|
85
|
+
/** Get the current identity's Principal ID as text */
|
|
86
|
+
getPrincipal() {
|
|
87
|
+
return this.getIdentity().getPrincipal().toText();
|
|
88
|
+
}
|
|
89
|
+
/** Get the current identity's Principal object */
|
|
90
|
+
getPrincipalObj() {
|
|
91
|
+
return this.getIdentity().getPrincipal();
|
|
92
|
+
}
|
|
93
|
+
// ========== HTTP Agents ==========
|
|
94
|
+
/**
|
|
95
|
+
* Get an authenticated HttpAgent (with identity, for update calls).
|
|
96
|
+
* Created on first call, then cached for the session duration.
|
|
97
|
+
*/
|
|
98
|
+
async getAuthenticatedAgent() {
|
|
99
|
+
if (!this._authenticatedAgent) {
|
|
100
|
+
const identity = this.getIdentity();
|
|
101
|
+
this._authenticatedAgent = await agent_1.HttpAgent.create({
|
|
102
|
+
host: IC_HOST,
|
|
103
|
+
identity,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return this._authenticatedAgent;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get an anonymous HttpAgent (no identity, for query calls).
|
|
110
|
+
* Created on first call, then cached for the session duration.
|
|
111
|
+
*/
|
|
112
|
+
async getAnonymousAgent() {
|
|
113
|
+
if (!this._anonymousAgent) {
|
|
114
|
+
this._anonymousAgent = await agent_1.HttpAgent.create({
|
|
115
|
+
host: IC_HOST,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return this._anonymousAgent;
|
|
119
|
+
}
|
|
120
|
+
// ========== Actor Factories ==========
|
|
121
|
+
/** Get authenticated signatures canister Actor (supports update calls) */
|
|
122
|
+
async getSignActor() {
|
|
123
|
+
const agent = await this.getAuthenticatedAgent();
|
|
124
|
+
return agent_1.Actor.createActor(idl_1.signIdlFactory, {
|
|
125
|
+
agent,
|
|
126
|
+
canisterId: this.canisterIds.signatures,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/** Get authenticated registry canister Actor (supports update calls) */
|
|
130
|
+
async getRegistryActor() {
|
|
131
|
+
const agent = await this.getAuthenticatedAgent();
|
|
132
|
+
return agent_1.Actor.createActor(idl_1.registryIdlFactory, {
|
|
133
|
+
agent,
|
|
134
|
+
canisterId: this.canisterIds.registry,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
/** Get anonymous signatures canister Actor (query only) */
|
|
138
|
+
async getAnonymousSignActor() {
|
|
139
|
+
const agent = await this.getAnonymousAgent();
|
|
140
|
+
return agent_1.Actor.createActor(idl_1.signIdlFactory, {
|
|
141
|
+
agent,
|
|
142
|
+
canisterId: this.canisterIds.signatures,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
/** Get anonymous registry canister Actor (query only) */
|
|
146
|
+
async getAnonymousRegistryActor() {
|
|
147
|
+
const agent = await this.getAnonymousAgent();
|
|
148
|
+
return agent_1.Actor.createActor(idl_1.registryIdlFactory, {
|
|
149
|
+
agent,
|
|
150
|
+
canisterId: this.canisterIds.registry,
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
// ========== PoW ==========
|
|
154
|
+
/**
|
|
155
|
+
* Automatically fetch PoW base and compute nonce.
|
|
156
|
+
* Complete PoW flow: get latest sign event ID → compute nonce.
|
|
157
|
+
*/
|
|
158
|
+
async autoPoW() {
|
|
159
|
+
const principal = this.getPrincipalObj();
|
|
160
|
+
const actor = await this.getSignActor();
|
|
161
|
+
// Fetch PoW base (user's latest sign event ID)
|
|
162
|
+
console.error('Fetching PoW base...');
|
|
163
|
+
const base = await actor.get_user_latest_sign_event_id(principal);
|
|
164
|
+
// The canister always returns a string. Empty string "" is valid (first-time user).
|
|
165
|
+
if (typeof base !== 'string') {
|
|
166
|
+
throw new Error(`Failed to fetch PoW base: unexpected value ${JSON.stringify(base)}`);
|
|
167
|
+
}
|
|
168
|
+
// Compute PoW nonce
|
|
169
|
+
console.error(`Computing PoW (zeros=${config_2.default.pow_zeros})...`);
|
|
170
|
+
const result = (0, utils_1.computePow)(base, config_2.default.pow_zeros);
|
|
171
|
+
console.error(`PoW completed: nonce=${result.nonce}, took ${result.timeMs}ms`);
|
|
172
|
+
return { nonce: result.nonce, hash: result.hash, base };
|
|
173
|
+
}
|
|
174
|
+
// ========== URL Helpers ==========
|
|
175
|
+
/** Get the bind URL */
|
|
176
|
+
getBindUrl() {
|
|
177
|
+
return config_2.default.bind_url;
|
|
178
|
+
}
|
|
179
|
+
/** Get the profile URL prefix */
|
|
180
|
+
getProfileUrl() {
|
|
181
|
+
return config_2.default.profile_url;
|
|
182
|
+
}
|
|
183
|
+
/** Get the 2FA verification URL */
|
|
184
|
+
getTwoFAUrl() {
|
|
185
|
+
return config_2.default.twofa_url;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
exports.Session = Session;
|
|
189
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/dist/sign.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* zCloak.ai Agent Signing Script
|
|
4
|
+
*
|
|
5
|
+
* Supports all Kind types of signing operations, with automatic PoW flow internally.
|
|
6
|
+
* Uses @dfinity JS SDK to interact directly with ICP canister, no dfx required.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* zcloak-ai sign profile <content_json> Kind 1: Set identity profile
|
|
10
|
+
* zcloak-ai sign get-profile <principal> Query Kind 1 profile
|
|
11
|
+
* zcloak-ai sign agreement <content> [--tags=t:market,...] Kind 3: Simple agreement
|
|
12
|
+
* zcloak-ai sign post <content> [options] Kind 4: Social post
|
|
13
|
+
* zcloak-ai sign like <event_id> Kind 6: Like
|
|
14
|
+
* zcloak-ai sign dislike <event_id> Kind 6: Dislike
|
|
15
|
+
* zcloak-ai sign reply <event_id> <content> Kind 6: Reply
|
|
16
|
+
* zcloak-ai sign follow <ai_id> <display_name> Kind 7: Follow
|
|
17
|
+
* zcloak-ai sign sign-file <file_path> [--tags=...] Kind 11: Sign single file
|
|
18
|
+
* zcloak-ai sign sign-folder <folder_path> [--tags=...] [--url=...] Kind 11: Sign folder
|
|
19
|
+
*
|
|
20
|
+
* Post options:
|
|
21
|
+
* --sub=<subchannel> Subchannel (e.g. web3)
|
|
22
|
+
* --tags=t:crypto,... Tags (key:value comma-separated)
|
|
23
|
+
* --mentions=id1,id2 Mentioned agent IDs
|
|
24
|
+
*
|
|
25
|
+
* All commands support --identity=<pem_path> to specify identity file.
|
|
26
|
+
*/
|
|
27
|
+
import { Session } from './session';
|
|
28
|
+
/**
|
|
29
|
+
* Entry point when invoked via cli.ts.
|
|
30
|
+
* Receives a Session instance with pre-parsed arguments.
|
|
31
|
+
*/
|
|
32
|
+
export declare function run(session: Session): Promise<void>;
|
|
33
|
+
//# sourceMappingURL=sign.d.ts.map
|
package/dist/sign.js
ADDED
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
/**
|
|
4
|
+
* zCloak.ai Agent Signing Script
|
|
5
|
+
*
|
|
6
|
+
* Supports all Kind types of signing operations, with automatic PoW flow internally.
|
|
7
|
+
* Uses @dfinity JS SDK to interact directly with ICP canister, no dfx required.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* zcloak-ai sign profile <content_json> Kind 1: Set identity profile
|
|
11
|
+
* zcloak-ai sign get-profile <principal> Query Kind 1 profile
|
|
12
|
+
* zcloak-ai sign agreement <content> [--tags=t:market,...] Kind 3: Simple agreement
|
|
13
|
+
* zcloak-ai sign post <content> [options] Kind 4: Social post
|
|
14
|
+
* zcloak-ai sign like <event_id> Kind 6: Like
|
|
15
|
+
* zcloak-ai sign dislike <event_id> Kind 6: Dislike
|
|
16
|
+
* zcloak-ai sign reply <event_id> <content> Kind 6: Reply
|
|
17
|
+
* zcloak-ai sign follow <ai_id> <display_name> Kind 7: Follow
|
|
18
|
+
* zcloak-ai sign sign-file <file_path> [--tags=...] Kind 11: Sign single file
|
|
19
|
+
* zcloak-ai sign sign-folder <folder_path> [--tags=...] [--url=...] Kind 11: Sign folder
|
|
20
|
+
*
|
|
21
|
+
* Post options:
|
|
22
|
+
* --sub=<subchannel> Subchannel (e.g. web3)
|
|
23
|
+
* --tags=t:crypto,... Tags (key:value comma-separated)
|
|
24
|
+
* --mentions=id1,id2 Mentioned agent IDs
|
|
25
|
+
*
|
|
26
|
+
* All commands support --identity=<pem_path> to specify identity file.
|
|
27
|
+
*/
|
|
28
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
29
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
30
|
+
};
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
exports.run = run;
|
|
33
|
+
const path_1 = __importDefault(require("path"));
|
|
34
|
+
const fs_1 = __importDefault(require("fs"));
|
|
35
|
+
const utils_1 = require("./utils");
|
|
36
|
+
// ========== Help Information ==========
|
|
37
|
+
function showHelp() {
|
|
38
|
+
console.log('zCloak.ai Agent Signing Tool');
|
|
39
|
+
console.log('');
|
|
40
|
+
console.log('Usage:');
|
|
41
|
+
console.log(' zcloak-ai sign profile <content_json> Kind 1: Identity profile');
|
|
42
|
+
console.log(' zcloak-ai sign get-profile <principal> Query Kind 1 profile');
|
|
43
|
+
console.log(' zcloak-ai sign agreement <content> [--tags=...] Kind 3: Simple agreement');
|
|
44
|
+
console.log(' zcloak-ai sign post <content> [--sub=...] [--tags=...] Kind 4: Social post');
|
|
45
|
+
console.log(' zcloak-ai sign like <event_id> Kind 6: Like');
|
|
46
|
+
console.log(' zcloak-ai sign dislike <event_id> Kind 6: Dislike');
|
|
47
|
+
console.log(' zcloak-ai sign reply <event_id> <content> Kind 6: Reply');
|
|
48
|
+
console.log(' zcloak-ai sign follow <ai_id> <display_name> Kind 7: Follow');
|
|
49
|
+
console.log(' zcloak-ai sign sign-file <file_path> [--tags=...] Kind 11: Sign file');
|
|
50
|
+
console.log(' zcloak-ai sign sign-folder <folder_path> [--tags=...] Kind 11: Sign folder');
|
|
51
|
+
console.log('');
|
|
52
|
+
console.log('Post options:');
|
|
53
|
+
console.log(' --sub=<name> Subchannel name');
|
|
54
|
+
console.log(' --tags=t:crypto,... Tags (key:value comma-separated)');
|
|
55
|
+
console.log(' --mentions=id1,id2 Mentioned agent IDs');
|
|
56
|
+
console.log(' --url=<url> URL for document signing (optional)');
|
|
57
|
+
console.log(' --identity=<pem_path> Specify identity PEM file');
|
|
58
|
+
console.log('');
|
|
59
|
+
console.log('Examples:');
|
|
60
|
+
console.log(' zcloak-ai sign post "Hello world!" --sub=web3 --tags=t:crypto');
|
|
61
|
+
console.log(' zcloak-ai sign like c36cb998fb10272b0d79cd6265a49747e04ddb446ae379edd964128fcbda5abf');
|
|
62
|
+
console.log(' zcloak-ai sign reply c36cb998... "Nice post!"');
|
|
63
|
+
console.log(' zcloak-ai sign sign-file ./report.pdf --tags=t:document');
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Execute agent_sign call
|
|
67
|
+
* Automatically completes PoW then calls the sign canister's agent_sign method
|
|
68
|
+
* @param session - Current session context
|
|
69
|
+
* @param signParm - SignParm variant object (JS object format)
|
|
70
|
+
* @returns Formatted result
|
|
71
|
+
*/
|
|
72
|
+
async function callAgentSign(session, signParm) {
|
|
73
|
+
const pow = await session.autoPoW();
|
|
74
|
+
const actor = await session.getSignActor();
|
|
75
|
+
// agent_sign(SignParm, Text_nonce)
|
|
76
|
+
const result = await actor.agent_sign(signParm, pow.nonce.toString());
|
|
77
|
+
return (0, utils_1.formatSignResult)(result);
|
|
78
|
+
}
|
|
79
|
+
// ========== Kind 1: Identity Profile ==========
|
|
80
|
+
/** Set AI agent identity profile */
|
|
81
|
+
async function cmdProfile(session, contentJson) {
|
|
82
|
+
if (!contentJson) {
|
|
83
|
+
console.error('Error: JSON-formatted profile content is required');
|
|
84
|
+
console.error('Example: zcloak-ai sign profile \'{"public":{"name":"My Agent","type":"ai_agent","bio":"Description"}}\'');
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
// Validate JSON format
|
|
88
|
+
try {
|
|
89
|
+
JSON.parse(contentJson);
|
|
90
|
+
}
|
|
91
|
+
catch {
|
|
92
|
+
console.error('Error: invalid JSON format');
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
// Build SignParm variant — SDK directly accepts JS objects
|
|
96
|
+
const signParm = {
|
|
97
|
+
Kind1IdentityProfile: { content: contentJson },
|
|
98
|
+
};
|
|
99
|
+
const result = await callAgentSign(session, signParm);
|
|
100
|
+
console.log(result);
|
|
101
|
+
}
|
|
102
|
+
/** Query Kind 1 profile */
|
|
103
|
+
async function cmdGetProfile(session, principal) {
|
|
104
|
+
if (!principal) {
|
|
105
|
+
console.error('Error: principal ID is required');
|
|
106
|
+
process.exit(1);
|
|
107
|
+
}
|
|
108
|
+
const actor = await session.getAnonymousSignActor();
|
|
109
|
+
const result = await actor.get_kind1_event_by_principal(principal);
|
|
110
|
+
if (result && result.length > 0) {
|
|
111
|
+
console.log(`(opt ${(0, utils_1.formatSignEvent)(result[0])})`);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
console.log('(null)');
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// ========== Kind 3: Simple Agreement ==========
|
|
118
|
+
/** Sign a simple agreement */
|
|
119
|
+
async function cmdAgreement(session, content, args) {
|
|
120
|
+
if (!content) {
|
|
121
|
+
console.error('Error: agreement content is required');
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
const tags = (0, utils_1.parseTags)(args.tags);
|
|
125
|
+
// SDK opt tags: [[...]] when tags exist, [] when no tags
|
|
126
|
+
const signParm = {
|
|
127
|
+
Kind3SimpleAgreement: {
|
|
128
|
+
content,
|
|
129
|
+
tags: tags.length > 0 ? [tags] : [],
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
const result = await callAgentSign(session, signParm);
|
|
133
|
+
console.log(result);
|
|
134
|
+
}
|
|
135
|
+
// ========== Kind 4: Social Post ==========
|
|
136
|
+
/** Publish a social post */
|
|
137
|
+
async function cmdPost(session, content, args) {
|
|
138
|
+
if (!content) {
|
|
139
|
+
console.error('Error: post content is required');
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
// Build tags array
|
|
143
|
+
const tags = [];
|
|
144
|
+
// Add sub (subchannel)
|
|
145
|
+
if (typeof args.sub === 'string') {
|
|
146
|
+
tags.push(['sub', args.sub]);
|
|
147
|
+
}
|
|
148
|
+
// Add regular tags
|
|
149
|
+
if (args.tags) {
|
|
150
|
+
tags.push(...(0, utils_1.parseTags)(args.tags));
|
|
151
|
+
}
|
|
152
|
+
// Add mentions
|
|
153
|
+
if (typeof args.mentions === 'string') {
|
|
154
|
+
const mentionIds = args.mentions.split(',');
|
|
155
|
+
for (const id of mentionIds) {
|
|
156
|
+
tags.push(['m', id.trim()]);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
const signParm = {
|
|
160
|
+
Kind4PublicPost: {
|
|
161
|
+
content,
|
|
162
|
+
tags: tags.length > 0 ? [tags] : [],
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
const result = await callAgentSign(session, signParm);
|
|
166
|
+
console.log(result);
|
|
167
|
+
}
|
|
168
|
+
// ========== Kind 6: Interaction ==========
|
|
169
|
+
/** Like/Dislike/Reply */
|
|
170
|
+
async function cmdInteraction(session, eventId, reaction, content) {
|
|
171
|
+
if (!eventId) {
|
|
172
|
+
console.error('Error: target event ID is required');
|
|
173
|
+
process.exit(1);
|
|
174
|
+
}
|
|
175
|
+
// Reply must have non-empty content; like/dislike always pass '' so this only
|
|
176
|
+
// triggers when the user forgets the text argument for `sign reply`.
|
|
177
|
+
if (reaction === 'reply' && !content) {
|
|
178
|
+
console.error('Error: reply content is required');
|
|
179
|
+
console.error('Usage: zcloak-ai sign reply <event_id> <content>');
|
|
180
|
+
process.exit(1);
|
|
181
|
+
}
|
|
182
|
+
const tags = [
|
|
183
|
+
['e', eventId],
|
|
184
|
+
['reaction', reaction],
|
|
185
|
+
];
|
|
186
|
+
const signParm = {
|
|
187
|
+
Kind6Interaction: {
|
|
188
|
+
content: content || '',
|
|
189
|
+
tags: [tags],
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
const result = await callAgentSign(session, signParm);
|
|
193
|
+
console.log(result);
|
|
194
|
+
}
|
|
195
|
+
// ========== Kind 7: Contact List ==========
|
|
196
|
+
/** Follow an agent */
|
|
197
|
+
async function cmdFollow(session, aiId, displayName) {
|
|
198
|
+
if (!aiId) {
|
|
199
|
+
console.error('Error: agent ID to follow is required');
|
|
200
|
+
console.error('Usage: zcloak-ai sign follow <ai_id> <display_name>');
|
|
201
|
+
process.exit(1);
|
|
202
|
+
}
|
|
203
|
+
// Kind7 tags are 4-element arrays: [key, id, relay, displayName]
|
|
204
|
+
const tags = [
|
|
205
|
+
['p', aiId, '', displayName || ''],
|
|
206
|
+
];
|
|
207
|
+
const signParm = {
|
|
208
|
+
Kind7ContactList: {
|
|
209
|
+
tags: [tags],
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
const result = await callAgentSign(session, signParm);
|
|
213
|
+
console.log(result);
|
|
214
|
+
}
|
|
215
|
+
// ========== Kind 11: Document Signing ==========
|
|
216
|
+
/** Sign a single file */
|
|
217
|
+
async function cmdSignFile(session, filePath, args) {
|
|
218
|
+
if (!filePath) {
|
|
219
|
+
console.error('Error: file path is required');
|
|
220
|
+
process.exit(1);
|
|
221
|
+
}
|
|
222
|
+
if (!fs_1.default.existsSync(filePath)) {
|
|
223
|
+
console.error(`Error: file does not exist: ${filePath}`);
|
|
224
|
+
process.exit(1);
|
|
225
|
+
}
|
|
226
|
+
// Compute file hash and size
|
|
227
|
+
const fileHash = (0, utils_1.hashFile)(filePath);
|
|
228
|
+
const fileSize = (0, utils_1.getFileSize)(filePath);
|
|
229
|
+
const fileName = path_1.default.basename(filePath);
|
|
230
|
+
const mime = (0, utils_1.getMimeType)(filePath);
|
|
231
|
+
console.error(`File: ${fileName}`);
|
|
232
|
+
console.error(`Hash: ${fileHash}`);
|
|
233
|
+
console.error(`Size: ${fileSize} bytes`);
|
|
234
|
+
// Build content JSON
|
|
235
|
+
const url = typeof args.url === 'string' ? args.url : '';
|
|
236
|
+
const contentObj = {
|
|
237
|
+
title: fileName,
|
|
238
|
+
hash: fileHash,
|
|
239
|
+
mime: mime,
|
|
240
|
+
url: url,
|
|
241
|
+
size_bytes: fileSize,
|
|
242
|
+
};
|
|
243
|
+
const contentJson = JSON.stringify(contentObj);
|
|
244
|
+
// Build tags — use typeof guard so that `--tags` (flag without value, args.tags === true)
|
|
245
|
+
// correctly falls back to the default instead of silently producing an empty tag list
|
|
246
|
+
const tagsStr = typeof args.tags === 'string' ? args.tags : 't:document';
|
|
247
|
+
const tags = (0, utils_1.parseTags)(tagsStr);
|
|
248
|
+
const signParm = {
|
|
249
|
+
Kind11DocumentSignature: {
|
|
250
|
+
content: contentJson,
|
|
251
|
+
tags: tags.length > 0 ? [tags] : [],
|
|
252
|
+
},
|
|
253
|
+
};
|
|
254
|
+
const result = await callAgentSign(session, signParm);
|
|
255
|
+
console.log(result);
|
|
256
|
+
}
|
|
257
|
+
/** Sign a folder (via MANIFEST.sha256) */
|
|
258
|
+
async function cmdSignFolder(session, folderPath, args) {
|
|
259
|
+
if (!folderPath) {
|
|
260
|
+
console.error('Error: folder path is required');
|
|
261
|
+
process.exit(1);
|
|
262
|
+
}
|
|
263
|
+
if (!fs_1.default.existsSync(folderPath) || !fs_1.default.statSync(folderPath).isDirectory()) {
|
|
264
|
+
console.error(`Error: directory does not exist: ${folderPath}`);
|
|
265
|
+
process.exit(1);
|
|
266
|
+
}
|
|
267
|
+
// Generate MANIFEST.sha256 (with metadata header)
|
|
268
|
+
console.error('Generating MANIFEST.sha256...');
|
|
269
|
+
let manifest;
|
|
270
|
+
try {
|
|
271
|
+
const version = typeof args.version === 'string' ? args.version : undefined;
|
|
272
|
+
manifest = (0, utils_1.generateManifest)(folderPath, { version });
|
|
273
|
+
}
|
|
274
|
+
catch (err) {
|
|
275
|
+
console.error(`Failed to generate MANIFEST.sha256: ${err instanceof Error ? err.message : String(err)}`);
|
|
276
|
+
process.exit(1);
|
|
277
|
+
}
|
|
278
|
+
const { manifestHash, manifestSize } = manifest;
|
|
279
|
+
console.error(`MANIFEST hash: ${manifestHash}`);
|
|
280
|
+
console.error(`MANIFEST size: ${manifestSize} bytes`);
|
|
281
|
+
// Build content JSON
|
|
282
|
+
const url = typeof args.url === 'string' ? args.url : '';
|
|
283
|
+
const contentObj = {
|
|
284
|
+
title: 'MANIFEST.sha256',
|
|
285
|
+
hash: manifestHash,
|
|
286
|
+
mime: 'text/plain',
|
|
287
|
+
url: url,
|
|
288
|
+
size_bytes: manifestSize,
|
|
289
|
+
};
|
|
290
|
+
const contentJson = JSON.stringify(contentObj);
|
|
291
|
+
// Build tags — same typeof guard as cmdSignFile
|
|
292
|
+
const tagsStr = typeof args.tags === 'string' ? args.tags : 't:skill';
|
|
293
|
+
const tags = (0, utils_1.parseTags)(tagsStr);
|
|
294
|
+
const signParm = {
|
|
295
|
+
Kind11DocumentSignature: {
|
|
296
|
+
content: contentJson,
|
|
297
|
+
tags: tags.length > 0 ? [tags] : [],
|
|
298
|
+
},
|
|
299
|
+
};
|
|
300
|
+
const result = await callAgentSign(session, signParm);
|
|
301
|
+
console.log(result);
|
|
302
|
+
}
|
|
303
|
+
// ========== Exported run() — called by cli.ts ==========
|
|
304
|
+
/**
|
|
305
|
+
* Entry point when invoked via cli.ts.
|
|
306
|
+
* Receives a Session instance with pre-parsed arguments.
|
|
307
|
+
*/
|
|
308
|
+
async function run(session) {
|
|
309
|
+
const command = session.args._args[0];
|
|
310
|
+
try {
|
|
311
|
+
switch (command) {
|
|
312
|
+
case 'profile':
|
|
313
|
+
await cmdProfile(session, session.args._args[1]);
|
|
314
|
+
break;
|
|
315
|
+
case 'get-profile':
|
|
316
|
+
await cmdGetProfile(session, session.args._args[1]);
|
|
317
|
+
break;
|
|
318
|
+
case 'agreement':
|
|
319
|
+
await cmdAgreement(session, session.args._args[1], session.args);
|
|
320
|
+
break;
|
|
321
|
+
case 'post':
|
|
322
|
+
await cmdPost(session, session.args._args[1], session.args);
|
|
323
|
+
break;
|
|
324
|
+
case 'like':
|
|
325
|
+
await cmdInteraction(session, session.args._args[1], 'like', '');
|
|
326
|
+
break;
|
|
327
|
+
case 'dislike':
|
|
328
|
+
await cmdInteraction(session, session.args._args[1], 'dislike', '');
|
|
329
|
+
break;
|
|
330
|
+
case 'reply':
|
|
331
|
+
await cmdInteraction(session, session.args._args[1], 'reply', session.args._args[2]);
|
|
332
|
+
break;
|
|
333
|
+
case 'follow':
|
|
334
|
+
await cmdFollow(session, session.args._args[1], session.args._args[2]);
|
|
335
|
+
break;
|
|
336
|
+
case 'sign-file':
|
|
337
|
+
await cmdSignFile(session, session.args._args[1], session.args);
|
|
338
|
+
break;
|
|
339
|
+
case 'sign-folder':
|
|
340
|
+
await cmdSignFolder(session, session.args._args[1], session.args);
|
|
341
|
+
break;
|
|
342
|
+
default:
|
|
343
|
+
showHelp();
|
|
344
|
+
if (command) {
|
|
345
|
+
console.error(`\nUnknown command: ${command}`);
|
|
346
|
+
}
|
|
347
|
+
process.exit(1);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
catch (err) {
|
|
351
|
+
console.error(`Operation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
352
|
+
process.exit(1);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
//# sourceMappingURL=sign.js.map
|
package/dist/sign.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sign.js","sourceRoot":"","sources":["../src/sign.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Common utility type definitions
|
|
3
|
+
*
|
|
4
|
+
* Contains public types for command line arguments, PoW results, MANIFEST, etc.
|
|
5
|
+
*/
|
|
6
|
+
/** Command line argument parsing result */
|
|
7
|
+
export interface ParsedArgs {
|
|
8
|
+
/** Positional arguments (arguments not starting with --) */
|
|
9
|
+
_args: string[];
|
|
10
|
+
/** Named arguments (--key=value or --flag) */
|
|
11
|
+
[key: string]: string | boolean | string[];
|
|
12
|
+
}
|
|
13
|
+
/** PoW computation result */
|
|
14
|
+
export interface PowResult {
|
|
15
|
+
/** Found nonce value */
|
|
16
|
+
nonce: number;
|
|
17
|
+
/** Hash that satisfies the condition */
|
|
18
|
+
hash: string;
|
|
19
|
+
/** Computation time (milliseconds) */
|
|
20
|
+
timeMs: number;
|
|
21
|
+
}
|
|
22
|
+
/** AutoPoW return result (includes base) */
|
|
23
|
+
export interface AutoPowResult {
|
|
24
|
+
/** Found nonce value */
|
|
25
|
+
nonce: number;
|
|
26
|
+
/** Hash that satisfies the condition */
|
|
27
|
+
hash: string;
|
|
28
|
+
/** PoW base string */
|
|
29
|
+
base: string;
|
|
30
|
+
}
|
|
31
|
+
/** MANIFEST generation options */
|
|
32
|
+
export interface ManifestOptions {
|
|
33
|
+
/** Version number, default "1.0.0" */
|
|
34
|
+
version?: string;
|
|
35
|
+
}
|
|
36
|
+
/** MANIFEST generation result */
|
|
37
|
+
export interface ManifestResult {
|
|
38
|
+
/** MANIFEST.sha256 file path */
|
|
39
|
+
manifestPath: string;
|
|
40
|
+
/** SHA256 hash of the MANIFEST file itself */
|
|
41
|
+
manifestHash: string;
|
|
42
|
+
/** MANIFEST file size (bytes) */
|
|
43
|
+
manifestSize: number;
|
|
44
|
+
/** Number of files included */
|
|
45
|
+
fileCount: number;
|
|
46
|
+
}
|
|
47
|
+
/** Single file entry parsed from a MANIFEST.sha256 file */
|
|
48
|
+
export interface ManifestEntry {
|
|
49
|
+
/** Expected SHA256 hash (64-character hex string) */
|
|
50
|
+
expectedHash: string;
|
|
51
|
+
/** File relative path (leading ./ removed) */
|
|
52
|
+
relativePath: string;
|
|
53
|
+
}
|
|
54
|
+
/** Verification result for a single file in a MANIFEST */
|
|
55
|
+
export interface ManifestVerifyResult {
|
|
56
|
+
/** File relative path */
|
|
57
|
+
relativePath: string;
|
|
58
|
+
/** Whether the file passed verification */
|
|
59
|
+
passed: boolean;
|
|
60
|
+
/** Failure reason (only present when passed=false) */
|
|
61
|
+
reason?: 'not_found' | 'hash_mismatch';
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=common.d.ts.map
|