@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.
Files changed (80) hide show
  1. package/README.md +5 -0
  2. package/dist/bind.d.ts +22 -0
  3. package/dist/bind.js +145 -0
  4. package/dist/bind.js.map +1 -0
  5. package/dist/cli.d.ts +31 -0
  6. package/dist/cli.js +126 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/config.d.ts +14 -0
  9. package/dist/config.js +34 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/crypto.d.ts +113 -0
  12. package/dist/crypto.js +252 -0
  13. package/dist/crypto.js.map +1 -0
  14. package/dist/daemon.d.ts +94 -0
  15. package/dist/daemon.js +271 -0
  16. package/dist/daemon.js.map +1 -0
  17. package/dist/delete.d.ts +22 -0
  18. package/dist/delete.js +231 -0
  19. package/dist/delete.js.map +1 -0
  20. package/dist/doc.d.ts +23 -0
  21. package/dist/doc.js +180 -0
  22. package/dist/doc.js.map +1 -0
  23. package/dist/error.d.ts +45 -0
  24. package/dist/error.js +79 -0
  25. package/dist/error.js.map +1 -0
  26. package/dist/feed.d.ts +20 -0
  27. package/dist/feed.js +83 -0
  28. package/dist/feed.js.map +1 -0
  29. package/dist/identity.d.ts +50 -0
  30. package/dist/identity.js +99 -0
  31. package/dist/identity.js.map +1 -0
  32. package/dist/identity_cmd.d.ts +23 -0
  33. package/dist/identity_cmd.js +136 -0
  34. package/dist/identity_cmd.js.map +1 -0
  35. package/dist/idl.d.ts +99 -0
  36. package/dist/idl.js +213 -0
  37. package/dist/idl.js.map +1 -0
  38. package/dist/key-store.d.ts +88 -0
  39. package/dist/key-store.js +171 -0
  40. package/dist/key-store.js.map +1 -0
  41. package/dist/pow.d.ts +24 -0
  42. package/dist/pow.js +86 -0
  43. package/dist/pow.js.map +1 -0
  44. package/dist/register.d.ts +24 -0
  45. package/dist/register.js +191 -0
  46. package/dist/register.js.map +1 -0
  47. package/dist/rpc.d.ts +107 -0
  48. package/dist/rpc.js +60 -0
  49. package/dist/rpc.js.map +1 -0
  50. package/dist/serve.d.ts +55 -0
  51. package/dist/serve.js +455 -0
  52. package/dist/serve.js.map +1 -0
  53. package/dist/session.d.ts +104 -0
  54. package/dist/session.js +189 -0
  55. package/dist/session.js.map +1 -0
  56. package/dist/sign.d.ts +33 -0
  57. package/dist/sign.js +355 -0
  58. package/dist/sign.js.map +1 -0
  59. package/dist/types/common.d.ts +63 -0
  60. package/dist/types/common.js +8 -0
  61. package/dist/types/common.js.map +1 -0
  62. package/dist/types/config.d.ts +28 -0
  63. package/dist/types/config.js +8 -0
  64. package/dist/types/config.js.map +1 -0
  65. package/dist/types/registry.d.ts +72 -0
  66. package/dist/types/registry.js +13 -0
  67. package/dist/types/registry.js.map +1 -0
  68. package/dist/types/sign-event.d.ts +134 -0
  69. package/dist/types/sign-event.js +13 -0
  70. package/dist/types/sign-event.js.map +1 -0
  71. package/dist/utils.d.ts +113 -0
  72. package/dist/utils.js +382 -0
  73. package/dist/utils.js.map +1 -0
  74. package/dist/verify.d.ts +23 -0
  75. package/dist/verify.js +207 -0
  76. package/dist/verify.js.map +1 -0
  77. package/dist/vetkey.d.ts +27 -0
  78. package/dist/vetkey.js +507 -0
  79. package/dist/vetkey.js.map +1 -0
  80. package/package.json +55 -0
@@ -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
@@ -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