@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,191 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * zCloak.ai Agent Registration Management Script
5
+ *
6
+ * Provides agent name query, registration, and owner relationship query functions.
7
+ * Uses @dfinity JS SDK to interact directly with ICP canister, no dfx required.
8
+ *
9
+ * Usage:
10
+ * zcloak-ai register get-principal Get current identity's principal ID
11
+ * zcloak-ai register lookup Query current principal's agent name
12
+ * zcloak-ai register lookup-by-name <agent_name> Look up principal by agent name
13
+ * zcloak-ai register lookup-by-principal <principal> Look up agent name by principal
14
+ * zcloak-ai register register <base_name> Register new agent name
15
+ * zcloak-ai register get-owner <principal> Query agent's owner (binding relationship)
16
+ *
17
+ * All commands support --identity=<pem_path> to specify identity file.
18
+ */
19
+ Object.defineProperty(exports, "__esModule", { value: true });
20
+ exports.run = run;
21
+ const utils_1 = require("./utils");
22
+ // ========== Help Information ==========
23
+ function showHelp() {
24
+ console.log('zCloak.ai Agent Registration Management');
25
+ console.log('');
26
+ console.log('Usage:');
27
+ console.log(' zcloak-ai register get-principal Get current principal ID');
28
+ console.log(' zcloak-ai register lookup Query current principal\'s agent name');
29
+ console.log(' zcloak-ai register lookup-by-name <agent_name> Look up principal by agent name');
30
+ console.log(' zcloak-ai register lookup-by-principal <principal> Look up agent name by principal');
31
+ console.log(' zcloak-ai register register <base_name> Register new agent name');
32
+ console.log(' zcloak-ai register get-owner <principal> Query agent\'s owner');
33
+ console.log('');
34
+ console.log('Options:');
35
+ console.log(' --identity=<pem_path> Specify identity PEM file');
36
+ console.log('');
37
+ console.log('Examples:');
38
+ console.log(' zcloak-ai register get-principal');
39
+ console.log(' zcloak-ai register register my-agent');
40
+ console.log(' zcloak-ai register lookup-by-name "runner#8939.agent"');
41
+ }
42
+ // ========== Command Implementations ==========
43
+ /** Get current identity's principal ID (read from PEM file) */
44
+ function cmdGetPrincipal(session) {
45
+ const principal = session.getPrincipal();
46
+ console.log(principal);
47
+ }
48
+ /** Query current principal's agent name */
49
+ async function cmdLookup(session) {
50
+ const principal = session.getPrincipal();
51
+ console.error(`Current principal: ${principal}`);
52
+ const actor = await session.getAnonymousRegistryActor();
53
+ const result = await actor.get_username_by_principal(principal);
54
+ console.log((0, utils_1.formatOptText)(result));
55
+ }
56
+ /** Look up agent name by principal */
57
+ async function cmdLookupByPrincipal(session, principal) {
58
+ if (!principal) {
59
+ console.error('Error: principal ID is required');
60
+ console.error('Usage: zcloak-ai register lookup-by-principal <principal>');
61
+ process.exit(1);
62
+ }
63
+ const actor = await session.getAnonymousRegistryActor();
64
+ const result = await actor.get_username_by_principal(principal);
65
+ console.log((0, utils_1.formatOptText)(result));
66
+ }
67
+ /** Look up principal by agent name */
68
+ async function cmdLookupByName(session, agentName) {
69
+ if (!agentName) {
70
+ console.error('Error: agent name is required');
71
+ console.error('Usage: zcloak-ai register lookup-by-name <agent_name>');
72
+ process.exit(1);
73
+ }
74
+ const actor = await session.getAnonymousRegistryActor();
75
+ const result = await actor.get_user_principal(agentName);
76
+ // opt Principal → output text format
77
+ if (result && result.length > 0) {
78
+ const principal = result[0];
79
+ console.log(`(opt principal "${principal.toText()}")`);
80
+ }
81
+ else {
82
+ console.log('(null)');
83
+ }
84
+ }
85
+ /** Register new agent name (requires identity, update call) */
86
+ async function cmdRegister(session, baseName) {
87
+ if (!baseName) {
88
+ console.error('Error: base name is required');
89
+ console.error('Usage: zcloak-ai register register <base_name>');
90
+ process.exit(1);
91
+ }
92
+ const actor = await session.getRegistryActor();
93
+ const result = await actor.register_agent(baseName);
94
+ // Output variant { Ok = record { ... } } or { Err = "..." }
95
+ if ('Ok' in result) {
96
+ console.log(`(variant { Ok = record { username = "${result.Ok.username}" } })`);
97
+ }
98
+ else if ('Err' in result) {
99
+ console.log(`(variant { Err = "${result.Err}" })`);
100
+ }
101
+ else {
102
+ console.log(JSON.stringify(result, null, 2));
103
+ }
104
+ }
105
+ /** Query agent's owner (binding relationship) */
106
+ async function cmdGetOwner(session, principalOrName) {
107
+ if (!principalOrName) {
108
+ console.error('Error: principal or agent name is required');
109
+ console.error('Usage: zcloak-ai register get-owner <principal_or_agent_name>');
110
+ process.exit(1);
111
+ }
112
+ const actor = await session.getAnonymousRegistryActor();
113
+ // Determine if it's a principal or agent name (agent name contains # and .agent)
114
+ const isAgentName = principalOrName.includes('#') && principalOrName.includes('.agent');
115
+ let profile;
116
+ if (isAgentName) {
117
+ // Query by agent name directly via user_profile_get
118
+ profile = await actor.user_profile_get(principalOrName);
119
+ }
120
+ else {
121
+ // Query by principal directly
122
+ profile = await actor.user_profile_get_by_principal(principalOrName);
123
+ }
124
+ // Format output UserProfile
125
+ if (profile && profile.length > 0) {
126
+ const p = profile[0];
127
+ const lines = [];
128
+ lines.push(` username = "${p.username}"`);
129
+ if (p.principal_id && p.principal_id.length > 0) {
130
+ lines.push(` principal_id = opt "${p.principal_id[0]}"`);
131
+ }
132
+ if (p.ai_profile && p.ai_profile.length > 0) {
133
+ const ap = p.ai_profile[0];
134
+ if (ap.position && ap.position.length > 0) {
135
+ const pos = ap.position[0];
136
+ lines.push(` is_human = ${pos.is_human}`);
137
+ if (pos.connection_list && pos.connection_list.length > 0) {
138
+ const connList = pos.connection_list
139
+ .map(c => ` principal "${c.toText()}"`)
140
+ .join('\n');
141
+ lines.push(` connection_list = vec {\n${connList}\n }`);
142
+ }
143
+ }
144
+ }
145
+ console.log(`(opt record {\n${lines.join('\n')}\n})`);
146
+ }
147
+ else {
148
+ console.log('(null)');
149
+ }
150
+ }
151
+ // ========== Exported run() — called by cli.ts ==========
152
+ /**
153
+ * Entry point when invoked via cli.ts.
154
+ * Receives a Session instance with pre-parsed arguments.
155
+ */
156
+ async function run(session) {
157
+ const command = session.args._args[0];
158
+ try {
159
+ switch (command) {
160
+ case 'get-principal':
161
+ cmdGetPrincipal(session);
162
+ break;
163
+ case 'lookup':
164
+ await cmdLookup(session);
165
+ break;
166
+ case 'lookup-by-name':
167
+ await cmdLookupByName(session, session.args._args[1]);
168
+ break;
169
+ case 'lookup-by-principal':
170
+ await cmdLookupByPrincipal(session, session.args._args[1]);
171
+ break;
172
+ case 'register':
173
+ await cmdRegister(session, session.args._args[1]);
174
+ break;
175
+ case 'get-owner':
176
+ await cmdGetOwner(session, session.args._args[1]);
177
+ break;
178
+ default:
179
+ showHelp();
180
+ if (command) {
181
+ console.error(`\nUnknown command: ${command}`);
182
+ }
183
+ process.exit(1);
184
+ }
185
+ }
186
+ catch (err) {
187
+ console.error(`Operation failed: ${err instanceof Error ? err.message : String(err)}`);
188
+ process.exit(1);
189
+ }
190
+ }
191
+ //# sourceMappingURL=register.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.js","sourceRoot":"","sources":["../src/register.ts"],"names":[],"mappings":"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"}
package/dist/rpc.d.ts ADDED
@@ -0,0 +1,107 @@
1
+ /**
2
+ * JSON-RPC Protocol Types — newline-delimited JSON over stdin/stdout or Unix Socket
3
+ *
4
+ * Protocol specification:
5
+ * - One JSON object per line (newline-delimited)
6
+ * - Request: {"id": <number|string>, "method": <string>, "params": <object>}
7
+ * - Response: {"id": <same>, "result": <object>} or {"id": <same>, "error": <string>}
8
+ *
9
+ * Supported methods:
10
+ * encrypt — Encrypt file or inline data using the held AES-256 key
11
+ * decrypt — Decrypt file or inline data using the held AES-256 key
12
+ * status — Query daemon status (derivation_id, principal, uptime)
13
+ * quit — Close current connection (UDS mode) or stop daemon (stdio mode)
14
+ * shutdown — Stop the entire daemon gracefully (UDS mode only)
15
+ */
16
+ /** JSON-RPC request wrapper (simplified JSON-RPC 2.0 without "jsonrpc" field) */
17
+ export interface RpcRequest {
18
+ /** Request ID for matching responses (number or string) */
19
+ id: number | string | null;
20
+ /** Method name: "encrypt", "decrypt", "status", "quit", or "shutdown" */
21
+ method: string;
22
+ /** Method parameters (optional, defaults to null) */
23
+ params?: Record<string, unknown>;
24
+ }
25
+ /**
26
+ * Parameters for the "encrypt" method.
27
+ *
28
+ * Two modes:
29
+ * 1. File mode: specify `input_file` + `output_file`, reads/writes files on disk
30
+ * 2. Inline mode: specify `data_base64`, returns result as base64 (no file I/O)
31
+ */
32
+ export interface EncryptParams {
33
+ /** Input file path (mutually exclusive with data_base64) */
34
+ input_file?: string;
35
+ /** Output file path (required in file mode) */
36
+ output_file?: string;
37
+ /** Inline plaintext as base64 (mutually exclusive with input_file) */
38
+ data_base64?: string;
39
+ }
40
+ /**
41
+ * Parameters for the "decrypt" method.
42
+ * Same two modes as EncryptParams (file mode vs inline mode).
43
+ */
44
+ export interface DecryptParams {
45
+ /** Input file path (mutually exclusive with data_base64) */
46
+ input_file?: string;
47
+ /** Output file path (required in file mode) */
48
+ output_file?: string;
49
+ /** Inline ciphertext as base64 (mutually exclusive with input_file) */
50
+ data_base64?: string;
51
+ }
52
+ /** JSON-RPC response wrapper. Exactly one of `result` or `error` will be present. */
53
+ export interface RpcResponse {
54
+ /** Matching request ID */
55
+ id: number | string | null;
56
+ /** Success result (present on success) */
57
+ result?: unknown;
58
+ /** Error message (present on failure) */
59
+ error?: string;
60
+ }
61
+ /** Result payload for the "encrypt" method */
62
+ export interface EncryptResult {
63
+ /** Output file path (file mode only) */
64
+ output_file?: string;
65
+ /** Base64-encoded ciphertext (inline mode only) */
66
+ data_base64?: string;
67
+ /** Original plaintext size in bytes */
68
+ plaintext_size: number;
69
+ /** Ciphertext size in bytes (includes nonce + GCM tag overhead) */
70
+ ciphertext_size: number;
71
+ }
72
+ /** Result payload for the "decrypt" method */
73
+ export interface DecryptResult {
74
+ /** Output file path (file mode only) */
75
+ output_file?: string;
76
+ /** Base64-encoded plaintext (inline mode only) */
77
+ data_base64?: string;
78
+ /** Decrypted plaintext size in bytes */
79
+ plaintext_size: number;
80
+ }
81
+ /** Result payload for the "status" method */
82
+ export interface StatusResult {
83
+ /** Daemon status (always "running" while daemon is alive) */
84
+ status: "running";
85
+ /** Derivation ID used for this session's key (e.g. "{principal}:default") */
86
+ derivation_id: string;
87
+ /** Authenticated principal text */
88
+ principal: string;
89
+ /** Daemon start timestamp (ISO 8601) */
90
+ started_at: string;
91
+ /** Daemon mode: "uds" or "stdio" */
92
+ mode?: string;
93
+ /** Unix socket path (UDS mode only) */
94
+ socket_path?: string;
95
+ }
96
+ /** Create a JSON-RPC success response */
97
+ export declare function successResponse(id: number | string | null, result: unknown): RpcResponse;
98
+ /** Create a JSON-RPC error response */
99
+ export declare function errorResponse(id: number | string | null, error: string): RpcResponse;
100
+ /**
101
+ * Parse a JSON line into an RpcRequest.
102
+ * Returns the parsed request, or an error response if parsing fails.
103
+ */
104
+ export declare function parseRpcRequest(line: string): RpcRequest | RpcResponse;
105
+ /** Check if a value is an RpcResponse (used for distinguishing parse errors from valid requests) */
106
+ export declare function isErrorResponse(value: RpcRequest | RpcResponse): value is RpcResponse;
107
+ //# sourceMappingURL=rpc.d.ts.map
package/dist/rpc.js ADDED
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ /**
3
+ * JSON-RPC Protocol Types — newline-delimited JSON over stdin/stdout or Unix Socket
4
+ *
5
+ * Protocol specification:
6
+ * - One JSON object per line (newline-delimited)
7
+ * - Request: {"id": <number|string>, "method": <string>, "params": <object>}
8
+ * - Response: {"id": <same>, "result": <object>} or {"id": <same>, "error": <string>}
9
+ *
10
+ * Supported methods:
11
+ * encrypt — Encrypt file or inline data using the held AES-256 key
12
+ * decrypt — Decrypt file or inline data using the held AES-256 key
13
+ * status — Query daemon status (derivation_id, principal, uptime)
14
+ * quit — Close current connection (UDS mode) or stop daemon (stdio mode)
15
+ * shutdown — Stop the entire daemon gracefully (UDS mode only)
16
+ */
17
+ Object.defineProperty(exports, "__esModule", { value: true });
18
+ exports.successResponse = successResponse;
19
+ exports.errorResponse = errorResponse;
20
+ exports.parseRpcRequest = parseRpcRequest;
21
+ exports.isErrorResponse = isErrorResponse;
22
+ // ============================================================================
23
+ // Helper functions
24
+ // ============================================================================
25
+ /** Create a JSON-RPC success response */
26
+ function successResponse(id, result) {
27
+ return { id, result };
28
+ }
29
+ /** Create a JSON-RPC error response */
30
+ function errorResponse(id, error) {
31
+ return { id, error };
32
+ }
33
+ /**
34
+ * Parse a JSON line into an RpcRequest.
35
+ * Returns the parsed request, or an error response if parsing fails.
36
+ */
37
+ function parseRpcRequest(line) {
38
+ try {
39
+ const parsed = JSON.parse(line);
40
+ if (!parsed || typeof parsed !== "object") {
41
+ return errorResponse(null, "Invalid JSON-RPC: not an object");
42
+ }
43
+ if (typeof parsed.method !== "string") {
44
+ return errorResponse(parsed.id ?? null, "Invalid JSON-RPC: missing 'method' field");
45
+ }
46
+ return {
47
+ id: parsed.id ?? null,
48
+ method: parsed.method,
49
+ params: parsed.params ?? undefined,
50
+ };
51
+ }
52
+ catch (e) {
53
+ return errorResponse(null, `Invalid JSON: ${e instanceof Error ? e.message : String(e)}`);
54
+ }
55
+ }
56
+ /** Check if a value is an RpcResponse (used for distinguishing parse errors from valid requests) */
57
+ function isErrorResponse(value) {
58
+ return "error" in value && typeof value.error === "string";
59
+ }
60
+ //# sourceMappingURL=rpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;AAsGH,0CAEC;AAGD,sCAEC;AAMD,0CAiBC;AAGD,0CAEC;AAxCD,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,yCAAyC;AACzC,SAAgB,eAAe,CAAC,EAA0B,EAAE,MAAe;IACzE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;AACxB,CAAC;AAED,uCAAuC;AACvC,SAAgB,aAAa,CAAC,EAA0B,EAAE,KAAa;IACrE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,SAAgB,eAAe,CAAC,IAAY;IAC1C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,OAAO,aAAa,CAAC,IAAI,EAAE,iCAAiC,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACtC,OAAO,aAAa,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,EAAE,0CAA0C,CAAC,CAAC;QACtF,CAAC;QACD,OAAO;YACL,EAAE,EAAE,MAAM,CAAC,EAAE,IAAI,IAAI;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,SAAS;SACrB,CAAC;IAClB,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,aAAa,CAAC,IAAI,EAAE,iBAAiB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5F,CAAC;AACH,CAAC;AAED,oGAAoG;AACpG,SAAgB,eAAe,CAAC,KAA+B;IAC7D,OAAO,OAAO,IAAI,KAAK,IAAI,OAAQ,KAAqB,CAAC,KAAK,KAAK,QAAQ,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Daemon Serve — JSON-RPC over Unix Domain Socket or stdin/stdout
3
+ *
4
+ * Two operational modes:
5
+ *
6
+ * 1. UDS mode (default): Unix Domain Socket listener, supports concurrent clients.
7
+ * The daemon creates a socket file and listens for connections. Each client
8
+ * connection is handled independently. "quit" closes the connection;
9
+ * "shutdown" stops the entire daemon.
10
+ *
11
+ * 2. Stdio mode (--stdio): Legacy stdin/stdout mode, single client.
12
+ * Backwards-compatible with the Rust implementation. Reads JSON-RPC from
13
+ * stdin and writes responses to stdout. "quit" stops the daemon.
14
+ *
15
+ * Both modes share the same request handling logic (handleRequest).
16
+ *
17
+ * Trust model:
18
+ * - The daemon trusts its callers (local AI agent processes or socket clients).
19
+ * - File paths in encrypt/decrypt requests are not sandboxed — the daemon
20
+ * operates with the same filesystem permissions as the calling process.
21
+ */
22
+ import type { Readable, Writable } from 'stream';
23
+ import { KeyStore } from './key-store';
24
+ /**
25
+ * Run the JSON-RPC daemon over a Unix Domain Socket.
26
+ *
27
+ * Lifecycle:
28
+ * 1. Create DaemonRuntime (PID file, socket path)
29
+ * 2. Create server and listen on socket
30
+ * 3. Emit ready info to stderr
31
+ * 4. Accept connections, handle requests concurrently
32
+ * 5. On shutdown signal: stop accepting, close connections, cleanup
33
+ *
34
+ * @param keyStore - AES-256 key holder
35
+ * @param principal - Authenticated principal text
36
+ * @param derivationId - Derivation ID used for the key
37
+ */
38
+ export declare function runDaemonUds(keyStore: KeyStore, principal: string, derivationId: string): Promise<void>;
39
+ /**
40
+ * Run the JSON-RPC daemon over stdin/stdout (legacy mode).
41
+ *
42
+ * Reads one JSON-RPC request per line from stdin, processes it,
43
+ * and writes the response to stdout. Exits on "quit" or stdin EOF.
44
+ *
45
+ * This mode is backwards-compatible with the Rust vetkey-tool implementation.
46
+ * No PID file or socket file is created.
47
+ *
48
+ * @param keyStore - AES-256 key holder (consumed; destroyed on exit)
49
+ * @param principal - Authenticated principal text
50
+ * @param derivationId - Derivation ID used for the key
51
+ * @param input - Optional input stream (defaults to process.stdin, override for testing)
52
+ * @param output - Optional output stream (defaults to process.stdout, override for testing)
53
+ */
54
+ export declare function runDaemonStdio(keyStore: KeyStore, principal: string, derivationId: string, input?: Readable, output?: Writable): Promise<void>;
55
+ //# sourceMappingURL=serve.d.ts.map