@zcloak/ai-agent 1.0.18 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SKILL.md +764 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +48 -0
- package/dist/cli.js.map +1 -1
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +18 -0
- package/dist/daemon.js +39 -0
- package/dist/daemon.js.map +1 -1
- package/dist/pre-check.d.ts +40 -0
- package/dist/pre-check.js +246 -0
- package/dist/pre-check.js.map +1 -0
- package/dist/types/config.d.ts +2 -0
- package/dist/types/registry.d.ts +1 -1
- package/dist/types/registry.js +1 -1
- package/dist/types/sign-event.d.ts +1 -1
- package/dist/types/sign-event.js +1 -1
- package/dist/vetkey.d.ts +54 -0
- package/dist/vetkey.js +412 -177
- package/dist/vetkey.js.map +1 -1
- package/dist/zmail.d.ts +46 -0
- package/dist/zmail.js +465 -0
- package/dist/zmail.js.map +1 -0
- package/package.json +6 -3
package/dist/cli.d.ts
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* zcloak-ai pow <base> <zeros> PoW computation
|
|
16
16
|
* zcloak-ai vetkey <command> [args] VetKey encryption/decryption and daemon
|
|
17
17
|
* zcloak-ai social <command> [args] Social profile query
|
|
18
|
+
* zcloak-ai zmail <command> [args] Encrypted mail (register, inbox, sent, ack)
|
|
18
19
|
*
|
|
19
20
|
* Architecture:
|
|
20
21
|
* cli.ts creates a Session from a constructed sub-argv array and passes it
|
package/dist/cli.js
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
* zcloak-ai pow <base> <zeros> PoW computation
|
|
16
16
|
* zcloak-ai vetkey <command> [args] VetKey encryption/decryption and daemon
|
|
17
17
|
* zcloak-ai social <command> [args] Social profile query
|
|
18
|
+
* zcloak-ai zmail <command> [args] Encrypted mail (register, inbox, sent, ack)
|
|
18
19
|
*
|
|
19
20
|
* Architecture:
|
|
20
21
|
* cli.ts creates a Session from a constructed sub-argv array and passes it
|
|
@@ -28,9 +29,13 @@
|
|
|
28
29
|
* zcloak-ai feed counter
|
|
29
30
|
* zcloak-ai verify file ./report.pdf
|
|
30
31
|
*/
|
|
32
|
+
import fs from 'fs';
|
|
31
33
|
import path from 'path';
|
|
32
34
|
import { fileURLToPath } from 'url';
|
|
33
35
|
import { Session } from './session.js';
|
|
36
|
+
import { preCheck } from './pre-check.js';
|
|
37
|
+
import { ensureDaemonsBackground } from './vetkey.js';
|
|
38
|
+
import { DEFAULT_PEM_PATH, loadIdentityFromPath } from './identity.js';
|
|
34
39
|
/** ESM equivalent of __dirname */
|
|
35
40
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
36
41
|
/** Supported modules and their corresponding script files (compiled in dist/ directory) */
|
|
@@ -46,6 +51,7 @@ const MODULES = {
|
|
|
46
51
|
pow: 'pow',
|
|
47
52
|
vetkey: 'vetkey',
|
|
48
53
|
social: 'social',
|
|
54
|
+
zmail: 'zmail',
|
|
49
55
|
};
|
|
50
56
|
function showHelp() {
|
|
51
57
|
console.log('zCloak.ai Agent CLI');
|
|
@@ -64,6 +70,7 @@ function showHelp() {
|
|
|
64
70
|
console.log(' pow PoW computation (<base_string> <zeros>)');
|
|
65
71
|
console.log(' vetkey VetKey encryption/decryption (encrypt-sign, decrypt, serve, ...)');
|
|
66
72
|
console.log(' social Social profile query (get-profile)');
|
|
73
|
+
console.log(' zmail Encrypted mail (register, inbox, sent, ack)');
|
|
67
74
|
console.log('');
|
|
68
75
|
console.log('Global options:');
|
|
69
76
|
console.log(' --identity=<pem_path> Specify identity PEM file');
|
|
@@ -92,6 +99,15 @@ function showHelp() {
|
|
|
92
99
|
* so the sub-script receives the same parsed arguments as before.
|
|
93
100
|
*/
|
|
94
101
|
async function main() {
|
|
102
|
+
// Pre-flight update check: compare local CLI version against npm registry,
|
|
103
|
+
// auto-update if needed, and prompt re-execution when updates are applied.
|
|
104
|
+
// SKILL.md is bundled in the npm package, so updating the package covers everything.
|
|
105
|
+
const checkResult = await preCheck();
|
|
106
|
+
if (checkResult.updated) {
|
|
107
|
+
console.error(checkResult.message);
|
|
108
|
+
// Exit so the agent / user re-runs with the updated CLI binary and SKILL.md.
|
|
109
|
+
process.exit(0);
|
|
110
|
+
}
|
|
95
111
|
// Get module name (skip node and script path)
|
|
96
112
|
const moduleName = process.argv[2];
|
|
97
113
|
if (!moduleName || moduleName === '--help' || moduleName === '-h') {
|
|
@@ -114,6 +130,38 @@ async function main() {
|
|
|
114
130
|
const subArgv = [process.argv[0], scriptPath, ...process.argv.slice(3)];
|
|
115
131
|
// Create a Session from the constructed argv
|
|
116
132
|
const session = new Session(subArgv);
|
|
133
|
+
// Daemon health check (fire-and-forget): if the user already has a PEM identity,
|
|
134
|
+
// ensure both standard daemons ("default" and "Mail") are alive in the background.
|
|
135
|
+
// This is non-blocking — daemons are spawned but we don't wait for them to be ready.
|
|
136
|
+
// Commands that actually need a daemon (e.g. recv-msg) will wait synchronously.
|
|
137
|
+
//
|
|
138
|
+
// Skip conditions:
|
|
139
|
+
// - `vetkey serve`: manages its own daemon lifecycle via DaemonRuntime.create(),
|
|
140
|
+
// a background spawn would race with it causing "Daemon already running".
|
|
141
|
+
// - `identity generate`: may overwrite the PEM file; starting daemons with the
|
|
142
|
+
// old principal would create orphan processes unreachable by the new identity.
|
|
143
|
+
const isVetkeyServe = moduleName === 'vetkey' && process.argv[3] === 'serve';
|
|
144
|
+
const isIdentityGenerate = moduleName === 'identity' && process.argv[3] === 'generate';
|
|
145
|
+
if (!isVetkeyServe && !isIdentityGenerate) {
|
|
146
|
+
try {
|
|
147
|
+
// Resolve which PEM to use: respect --identity=<path> if provided,
|
|
148
|
+
// otherwise fall back to DEFAULT_PEM_PATH. We do NOT call getPemPath()
|
|
149
|
+
// because it auto-creates the default PEM — we only want to start
|
|
150
|
+
// daemons when the user already has an identity.
|
|
151
|
+
const identityArg = process.argv.find(a => a.startsWith('--identity='));
|
|
152
|
+
const pemPath = identityArg
|
|
153
|
+
? identityArg.split('=').slice(1).join('=') // support paths containing '='
|
|
154
|
+
: DEFAULT_PEM_PATH;
|
|
155
|
+
if (fs.existsSync(pemPath)) {
|
|
156
|
+
const identity = loadIdentityFromPath(pemPath);
|
|
157
|
+
const principal = identity.getPrincipal().toText();
|
|
158
|
+
ensureDaemonsBackground(pemPath, principal);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
// Silently ignore — daemon health check must never block the main command
|
|
163
|
+
}
|
|
164
|
+
}
|
|
117
165
|
// Load and execute sub-script's run() function.
|
|
118
166
|
// After compilation, __dirname points to dist/, sub-scripts are in the same directory.
|
|
119
167
|
const mod = await import(scriptPath);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/config.js
CHANGED
|
@@ -24,6 +24,8 @@ const config = {
|
|
|
24
24
|
setting_url: 'https://id.zcloak.ai/setting',
|
|
25
25
|
// Social platform API base URL
|
|
26
26
|
social_url: 'https://social.zcloak.ai',
|
|
27
|
+
// zMail server API base URL (encrypted mail service)
|
|
28
|
+
zmail_url: 'https://mail.zcloak.ai',
|
|
27
29
|
};
|
|
28
30
|
export default config;
|
|
29
31
|
/**
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,GAAc;IACxB,eAAe;IACf,WAAW,EAAE;QACX,QAAQ,EAAE,6BAA6B,EAAK,oBAAoB;QAChE,UAAU,EAAE,6BAA6B,EAAG,sBAAsB;KACnE;IACD,mCAAmC;IACnC,SAAS,EAAE,CAAC;IACZ,yBAAyB;IACzB,QAAQ,EAAE,iCAAiC;IAC3C,gCAAgC;IAChC,WAAW,EAAE,+BAA+B;IAC5C,4BAA4B;IAC5B,SAAS,EAAE,gCAAgC;IAC3C,oEAAoE;IACpE,SAAS,EAAE,gCAAgC;IAC3C,iDAAiD;IACjD,WAAW,EAAE,8BAA8B;IAC3C,+BAA+B;IAC/B,UAAU,EAAE,0BAA0B;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,MAAM,GAAc;IACxB,eAAe;IACf,WAAW,EAAE;QACX,QAAQ,EAAE,6BAA6B,EAAK,oBAAoB;QAChE,UAAU,EAAE,6BAA6B,EAAG,sBAAsB;KACnE;IACD,mCAAmC;IACnC,SAAS,EAAE,CAAC;IACZ,yBAAyB;IACzB,QAAQ,EAAE,iCAAiC;IAC3C,gCAAgC;IAChC,WAAW,EAAE,+BAA+B;IAC5C,4BAA4B;IAC5B,SAAS,EAAE,gCAAgC;IAC3C,oEAAoE;IACpE,SAAS,EAAE,gCAAgC;IAC3C,iDAAiD;IACjD,WAAW,EAAE,8BAA8B;IAC3C,+BAA+B;IAC/B,UAAU,EAAE,0BAA0B;IACtC,qDAAqD;IACrD,SAAS,EAAE,wBAAwB;CACpC,CAAC;AAEF,eAAe,MAAM,CAAC;AAEtB;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,MAAM,CAAC,WAAW,CAAC;AAC5B,CAAC"}
|
package/dist/daemon.d.ts
CHANGED
|
@@ -32,6 +32,24 @@ export declare function sanitizeDerivationId(derivationId: string): string;
|
|
|
32
32
|
export declare function socketPath(derivationId: string): string;
|
|
33
33
|
/** Get the PID file path for a derivation ID */
|
|
34
34
|
export declare function pidPath(derivationId: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Check whether a daemon for the given derivation ID is alive.
|
|
37
|
+
*
|
|
38
|
+
* Unlike `findRunningDaemon()` which throws on missing daemons, this function
|
|
39
|
+
* returns a simple boolean — suitable for pre-checks where the caller wants to
|
|
40
|
+
* decide whether to auto-start a daemon without catching exceptions.
|
|
41
|
+
*
|
|
42
|
+
* Checks:
|
|
43
|
+
* 1. PID file exists for the derivation ID
|
|
44
|
+
* 2. The recorded PID is still alive (kill -0)
|
|
45
|
+
* 3. Socket file exists (daemon is connectable)
|
|
46
|
+
*
|
|
47
|
+
* If stale PID/socket files are found (process dead), they are cleaned up.
|
|
48
|
+
*
|
|
49
|
+
* @param derivationId - Full derivation ID (e.g. "{principal}:Mail")
|
|
50
|
+
* @returns true if the daemon is running and connectable
|
|
51
|
+
*/
|
|
52
|
+
export declare function isDaemonAlive(derivationId: string): boolean;
|
|
35
53
|
/**
|
|
36
54
|
* Manages the lifecycle of a daemon instance.
|
|
37
55
|
*
|
package/dist/daemon.js
CHANGED
|
@@ -97,6 +97,45 @@ function isProcessAlive(pid) {
|
|
|
97
97
|
return false;
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
|
+
/**
|
|
101
|
+
* Check whether a daemon for the given derivation ID is alive.
|
|
102
|
+
*
|
|
103
|
+
* Unlike `findRunningDaemon()` which throws on missing daemons, this function
|
|
104
|
+
* returns a simple boolean — suitable for pre-checks where the caller wants to
|
|
105
|
+
* decide whether to auto-start a daemon without catching exceptions.
|
|
106
|
+
*
|
|
107
|
+
* Checks:
|
|
108
|
+
* 1. PID file exists for the derivation ID
|
|
109
|
+
* 2. The recorded PID is still alive (kill -0)
|
|
110
|
+
* 3. Socket file exists (daemon is connectable)
|
|
111
|
+
*
|
|
112
|
+
* If stale PID/socket files are found (process dead), they are cleaned up.
|
|
113
|
+
*
|
|
114
|
+
* @param derivationId - Full derivation ID (e.g. "{principal}:Mail")
|
|
115
|
+
* @returns true if the daemon is running and connectable
|
|
116
|
+
*/
|
|
117
|
+
export function isDaemonAlive(derivationId) {
|
|
118
|
+
const pid = pidPath(derivationId);
|
|
119
|
+
const sock = socketPath(derivationId);
|
|
120
|
+
// No PID file → definitely not running
|
|
121
|
+
if (!existsSync(pid))
|
|
122
|
+
return false;
|
|
123
|
+
try {
|
|
124
|
+
const pidStr = readFileSync(pid, "utf-8").trim();
|
|
125
|
+
const existingPid = parseInt(pidStr, 10);
|
|
126
|
+
if (isNaN(existingPid) || !isProcessAlive(existingPid)) {
|
|
127
|
+
// Process is dead — clean up stale files
|
|
128
|
+
safeUnlink(pid);
|
|
129
|
+
safeUnlink(sock);
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
// Process is alive — also verify socket file exists
|
|
133
|
+
return existsSync(sock);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
100
139
|
// ============================================================================
|
|
101
140
|
// DaemonRuntime
|
|
102
141
|
// ============================================================================
|
package/dist/daemon.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-flight Update Check
|
|
3
|
+
*
|
|
4
|
+
* Runs before every CLI command to ensure the CLI package is up-to-date.
|
|
5
|
+
* When a new npm version is available, we update both the npm package and the
|
|
6
|
+
* workspace SKILL.md together, then ask the caller to re-run.
|
|
7
|
+
*
|
|
8
|
+
* Flow:
|
|
9
|
+
* 1. Read ~/.config/zcloak/.last-update-check timestamp
|
|
10
|
+
* 2. If last check was < 15 minutes ago → skip (return immediately)
|
|
11
|
+
* 3. If >= 15 minutes or file missing →
|
|
12
|
+
* a. Query npm registry for latest published version
|
|
13
|
+
* b. Compare local package.json version against the registry version
|
|
14
|
+
* c. If outdated → update npm package and workspace SKILL.md
|
|
15
|
+
* d. Write current timestamp to .last-update-check
|
|
16
|
+
*
|
|
17
|
+
* Design principles:
|
|
18
|
+
* - Network failures are silently ignored (never block command execution)
|
|
19
|
+
* - All output goes to stderr (never pollute stdout / command output)
|
|
20
|
+
* - Timeout on npm commands (10s for version query, 60s for install)
|
|
21
|
+
*/
|
|
22
|
+
/** Result returned by preCheck() to the caller (cli.ts) */
|
|
23
|
+
export interface PreCheckResult {
|
|
24
|
+
/** Whether the CLI package was updated (requires re-execution) */
|
|
25
|
+
updated: boolean;
|
|
26
|
+
/** Human / agent-readable message (empty string when nothing changed) */
|
|
27
|
+
message: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Run the pre-flight update check.
|
|
31
|
+
*
|
|
32
|
+
* Called by cli.ts before dispatching any sub-command. If an update is
|
|
33
|
+
* detected and applied, the returned result contains a descriptive message
|
|
34
|
+
* (for stderr) and `updated: true`.
|
|
35
|
+
*
|
|
36
|
+
* When `updated` is true the caller should exit and prompt the agent /
|
|
37
|
+
* user to re-run the command (the running binary and SKILL.md are stale).
|
|
38
|
+
*/
|
|
39
|
+
export declare function preCheck(): Promise<PreCheckResult>;
|
|
40
|
+
//# sourceMappingURL=pre-check.d.ts.map
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-flight Update Check
|
|
3
|
+
*
|
|
4
|
+
* Runs before every CLI command to ensure the CLI package is up-to-date.
|
|
5
|
+
* When a new npm version is available, we update both the npm package and the
|
|
6
|
+
* workspace SKILL.md together, then ask the caller to re-run.
|
|
7
|
+
*
|
|
8
|
+
* Flow:
|
|
9
|
+
* 1. Read ~/.config/zcloak/.last-update-check timestamp
|
|
10
|
+
* 2. If last check was < 15 minutes ago → skip (return immediately)
|
|
11
|
+
* 3. If >= 15 minutes or file missing →
|
|
12
|
+
* a. Query npm registry for latest published version
|
|
13
|
+
* b. Compare local package.json version against the registry version
|
|
14
|
+
* c. If outdated → update npm package and workspace SKILL.md
|
|
15
|
+
* d. Write current timestamp to .last-update-check
|
|
16
|
+
*
|
|
17
|
+
* Design principles:
|
|
18
|
+
* - Network failures are silently ignored (never block command execution)
|
|
19
|
+
* - All output goes to stderr (never pollute stdout / command output)
|
|
20
|
+
* - Timeout on npm commands (10s for version query, 60s for install)
|
|
21
|
+
*/
|
|
22
|
+
import fs from "fs";
|
|
23
|
+
import https from "https";
|
|
24
|
+
import path from "path";
|
|
25
|
+
import os from "os";
|
|
26
|
+
import { execSync } from "child_process";
|
|
27
|
+
import { fileURLToPath } from "url";
|
|
28
|
+
// ---------------------------------------------------------------------------
|
|
29
|
+
// Path constants
|
|
30
|
+
// ---------------------------------------------------------------------------
|
|
31
|
+
/** ESM equivalent of __dirname */
|
|
32
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
33
|
+
/** Package root directory (one level up from dist/) */
|
|
34
|
+
const PACKAGE_ROOT = path.resolve(__dirname, "..");
|
|
35
|
+
/** Local package.json path */
|
|
36
|
+
const LOCAL_PACKAGE_JSON = path.join(PACKAGE_ROOT, "package.json");
|
|
37
|
+
/** Directory for zCloak configuration files */
|
|
38
|
+
const CONFIG_DIR = path.join(os.homedir(), ".config", "zcloak");
|
|
39
|
+
/** Timestamp file recording when we last checked for updates */
|
|
40
|
+
const CHECK_FILE = path.join(CONFIG_DIR, ".last-update-check");
|
|
41
|
+
/** Workspace SKILL.md path expected by openClaw. */
|
|
42
|
+
const WORKSPACE_SKILL_PATH = path.resolve(process.cwd(), "skills", "zcloak-ai-agent", "SKILL.md");
|
|
43
|
+
// ---------------------------------------------------------------------------
|
|
44
|
+
// Tuning constants
|
|
45
|
+
// ---------------------------------------------------------------------------
|
|
46
|
+
/** Minimum interval between update checks: 15 minutes (in milliseconds) */
|
|
47
|
+
const CHECK_INTERVAL_MS = 15 * 60 * 1000;
|
|
48
|
+
/** npm view timeout (milliseconds) */
|
|
49
|
+
const NPM_VIEW_TIMEOUT_MS = 10000;
|
|
50
|
+
/** npm install timeout (milliseconds) */
|
|
51
|
+
const NPM_INSTALL_TIMEOUT_MS = 60000;
|
|
52
|
+
/** npm package name for version queries */
|
|
53
|
+
const NPM_PACKAGE_NAME = "@zcloak/ai-agent";
|
|
54
|
+
/** Canonical remote SKILL.md URL */
|
|
55
|
+
const SKILL_MD_URL = "https://raw.githubusercontent.com/zCloak-Network/ai-agent/refs/heads/main/SKILL.md";
|
|
56
|
+
/** Raw SKILL.md fetch timeout (milliseconds) */
|
|
57
|
+
const SKILL_FETCH_TIMEOUT_MS = 10000;
|
|
58
|
+
// ---------------------------------------------------------------------------
|
|
59
|
+
// Local version helper
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
/**
|
|
62
|
+
* Read the local CLI version from package.json.
|
|
63
|
+
* Returns null if the file doesn't exist or can't be parsed.
|
|
64
|
+
*/
|
|
65
|
+
function getLocalCliVersion() {
|
|
66
|
+
try {
|
|
67
|
+
const pkg = JSON.parse(fs.readFileSync(LOCAL_PACKAGE_JSON, "utf-8"));
|
|
68
|
+
return pkg.version ?? null;
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// ---------------------------------------------------------------------------
|
|
75
|
+
// Timestamp management
|
|
76
|
+
// ---------------------------------------------------------------------------
|
|
77
|
+
/**
|
|
78
|
+
* Determine whether we should perform an update check right now.
|
|
79
|
+
*
|
|
80
|
+
* Returns true when:
|
|
81
|
+
* - The timestamp file doesn't exist (first run)
|
|
82
|
+
* - The file content is invalid
|
|
83
|
+
* - More than CHECK_INTERVAL_MS has elapsed since the last check
|
|
84
|
+
*/
|
|
85
|
+
function shouldCheck() {
|
|
86
|
+
try {
|
|
87
|
+
if (!fs.existsSync(CHECK_FILE))
|
|
88
|
+
return true;
|
|
89
|
+
const raw = fs.readFileSync(CHECK_FILE, "utf-8").trim();
|
|
90
|
+
const timestamp = parseInt(raw, 10);
|
|
91
|
+
if (isNaN(timestamp))
|
|
92
|
+
return true;
|
|
93
|
+
return Date.now() - timestamp >= CHECK_INTERVAL_MS;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Record the current time as the last-check timestamp.
|
|
101
|
+
* Creates the config directory if it doesn't exist yet.
|
|
102
|
+
*/
|
|
103
|
+
function recordCheckTime() {
|
|
104
|
+
try {
|
|
105
|
+
fs.mkdirSync(CONFIG_DIR, { recursive: true });
|
|
106
|
+
fs.writeFileSync(CHECK_FILE, String(Date.now()), "utf-8");
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Non-critical — silently ignore write failures
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// ---------------------------------------------------------------------------
|
|
113
|
+
// npm helpers
|
|
114
|
+
// ---------------------------------------------------------------------------
|
|
115
|
+
/**
|
|
116
|
+
* Query the npm registry for the latest published version of the CLI package.
|
|
117
|
+
*
|
|
118
|
+
* Uses `npm view <pkg> version` which is fast and doesn't require authentication.
|
|
119
|
+
* Returns null on any failure (network, timeout, npm not found).
|
|
120
|
+
*/
|
|
121
|
+
function getNpmLatestVersion() {
|
|
122
|
+
try {
|
|
123
|
+
const output = execSync(`npm view ${NPM_PACKAGE_NAME} version`, {
|
|
124
|
+
stdio: "pipe",
|
|
125
|
+
timeout: NPM_VIEW_TIMEOUT_MS,
|
|
126
|
+
encoding: "utf-8",
|
|
127
|
+
});
|
|
128
|
+
return output.trim() || null;
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Attempt to update the globally-installed CLI package via npm.
|
|
136
|
+
*
|
|
137
|
+
* This may fail if the user doesn't have write permissions to the global
|
|
138
|
+
* node_modules directory (e.g. needs sudo). In that case we return false
|
|
139
|
+
* and the caller will suggest a manual update command.
|
|
140
|
+
*/
|
|
141
|
+
function updateCli() {
|
|
142
|
+
try {
|
|
143
|
+
execSync(`npm install -g ${NPM_PACKAGE_NAME}@latest`, {
|
|
144
|
+
stdio: "pipe", // suppress npm output
|
|
145
|
+
timeout: NPM_INSTALL_TIMEOUT_MS,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// Non-critical — the current command can still continue on older bits
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Download a text file over HTTPS.
|
|
154
|
+
* Returns null on any network or timeout failure.
|
|
155
|
+
*/
|
|
156
|
+
function downloadText(url) {
|
|
157
|
+
return new Promise((resolve) => {
|
|
158
|
+
const req = https.get(url, (res) => {
|
|
159
|
+
if (res.statusCode !== 200) {
|
|
160
|
+
res.resume();
|
|
161
|
+
resolve(null);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
res.setEncoding("utf8");
|
|
165
|
+
let body = "";
|
|
166
|
+
res.on("data", (chunk) => {
|
|
167
|
+
body += chunk;
|
|
168
|
+
});
|
|
169
|
+
res.on("end", () => {
|
|
170
|
+
resolve(body);
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
req.setTimeout(SKILL_FETCH_TIMEOUT_MS, () => {
|
|
174
|
+
req.destroy();
|
|
175
|
+
resolve(null);
|
|
176
|
+
});
|
|
177
|
+
req.on("error", () => {
|
|
178
|
+
resolve(null);
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Refresh the workspace SKILL.md from the canonical raw GitHub URL.
|
|
184
|
+
*
|
|
185
|
+
* Network failures or filesystem failures are silently ignored.
|
|
186
|
+
*/
|
|
187
|
+
async function updateSkill() {
|
|
188
|
+
const remoteContent = await downloadText(SKILL_MD_URL);
|
|
189
|
+
if (!remoteContent)
|
|
190
|
+
return;
|
|
191
|
+
try {
|
|
192
|
+
const targetDir = path.dirname(WORKSPACE_SKILL_PATH);
|
|
193
|
+
const tempPath = `${WORKSPACE_SKILL_PATH}.tmp`;
|
|
194
|
+
fs.mkdirSync(targetDir, { recursive: true });
|
|
195
|
+
fs.writeFileSync(tempPath, remoteContent, "utf-8");
|
|
196
|
+
fs.renameSync(tempPath, WORKSPACE_SKILL_PATH);
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
// Non-critical — the current command can still continue on older bits
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// ---------------------------------------------------------------------------
|
|
203
|
+
// Main entry point
|
|
204
|
+
// ---------------------------------------------------------------------------
|
|
205
|
+
/**
|
|
206
|
+
* Run the pre-flight update check.
|
|
207
|
+
*
|
|
208
|
+
* Called by cli.ts before dispatching any sub-command. If an update is
|
|
209
|
+
* detected and applied, the returned result contains a descriptive message
|
|
210
|
+
* (for stderr) and `updated: true`.
|
|
211
|
+
*
|
|
212
|
+
* When `updated` is true the caller should exit and prompt the agent /
|
|
213
|
+
* user to re-run the command (the running binary and SKILL.md are stale).
|
|
214
|
+
*/
|
|
215
|
+
export async function preCheck() {
|
|
216
|
+
// --- Gate: skip if last check was recent enough ---
|
|
217
|
+
if (!shouldCheck()) {
|
|
218
|
+
return { updated: false, message: "" };
|
|
219
|
+
}
|
|
220
|
+
// --- Read local version from package.json ---
|
|
221
|
+
const localVersion = getLocalCliVersion();
|
|
222
|
+
// --- Query npm registry for latest version ---
|
|
223
|
+
const remoteVersion = getNpmLatestVersion();
|
|
224
|
+
recordCheckTime();
|
|
225
|
+
// Query failed → network unreachable; move on
|
|
226
|
+
if (!remoteVersion) {
|
|
227
|
+
return { updated: false, message: "" };
|
|
228
|
+
}
|
|
229
|
+
// --- Already up-to-date ---
|
|
230
|
+
if (remoteVersion === localVersion) {
|
|
231
|
+
return { updated: false, message: "" };
|
|
232
|
+
}
|
|
233
|
+
// --- Version mismatch → update both npm package and workspace SKILL.md ---
|
|
234
|
+
updateCli();
|
|
235
|
+
await updateSkill();
|
|
236
|
+
return {
|
|
237
|
+
updated: true,
|
|
238
|
+
message: [
|
|
239
|
+
"[zcloak-ai] Version update detected!",
|
|
240
|
+
`[zcloak-ai] CLI: ${localVersion ?? "unknown"} → ${remoteVersion} (updated)`,
|
|
241
|
+
`[zcloak-ai] Workspace SKILL.md target: ${WORKSPACE_SKILL_PATH}`,
|
|
242
|
+
`[zcloak-ai] You must reload the updated ${WORKSPACE_SKILL_PATH}/SKILL.md since it changed and re-run the previous command since package also updated.`,
|
|
243
|
+
].join("\n"),
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=pre-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-check.js","sourceRoot":"","sources":["../src/pre-check.ts"],"names":[],"mappings":"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"}
|
package/dist/types/config.d.ts
CHANGED
package/dist/types/registry.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Run `npm run generate-types` to regenerate this file.
|
|
5
5
|
* Source: registryIdlFactory in src/idl.ts
|
|
6
|
-
* Generated: 2026-03-
|
|
6
|
+
* Generated: 2026-03-12T11:57:24.449Z
|
|
7
7
|
*
|
|
8
8
|
* These types are derived from the Candid IDL definitions and correspond to
|
|
9
9
|
* the canister's runtime interface. Edit idl.ts to change type definitions.
|
package/dist/types/registry.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Run `npm run generate-types` to regenerate this file.
|
|
5
5
|
* Source: registryIdlFactory in src/idl.ts
|
|
6
|
-
* Generated: 2026-03-
|
|
6
|
+
* Generated: 2026-03-12T11:57:24.449Z
|
|
7
7
|
*
|
|
8
8
|
* These types are derived from the Candid IDL definitions and correspond to
|
|
9
9
|
* the canister's runtime interface. Edit idl.ts to change type definitions.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Run `npm run generate-types` to regenerate this file.
|
|
5
5
|
* Source: signIdlFactory in src/idl.ts
|
|
6
|
-
* Generated: 2026-03-
|
|
6
|
+
* Generated: 2026-03-12T11:57:24.448Z
|
|
7
7
|
*
|
|
8
8
|
* These types are derived from the Candid IDL definitions and correspond to
|
|
9
9
|
* the canister's runtime interface. Edit idl.ts to change type definitions.
|
package/dist/types/sign-event.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Run `npm run generate-types` to regenerate this file.
|
|
5
5
|
* Source: signIdlFactory in src/idl.ts
|
|
6
|
-
* Generated: 2026-03-
|
|
6
|
+
* Generated: 2026-03-12T11:57:24.448Z
|
|
7
7
|
*
|
|
8
8
|
* These types are derived from the Candid IDL definitions and correspond to
|
|
9
9
|
* the canister's runtime interface. Edit idl.ts to change type definitions.
|
package/dist/vetkey.d.ts
CHANGED
|
@@ -31,4 +31,58 @@ import type { Session } from './session.js';
|
|
|
31
31
|
* @param session - CLI session with parsed args and canister access
|
|
32
32
|
*/
|
|
33
33
|
export declare function run(session: Session): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Background daemon health check — fire-and-forget.
|
|
36
|
+
*
|
|
37
|
+
* Called by cli.ts after Session creation to keep both standard daemons
|
|
38
|
+
* ("default" and "Mail") alive. If a daemon is dead, spawns it in the
|
|
39
|
+
* background WITHOUT waiting for it to be ready (non-blocking).
|
|
40
|
+
*
|
|
41
|
+
* Prerequisites:
|
|
42
|
+
* - The PEM file must exist (user has already created an identity)
|
|
43
|
+
* - If PEM doesn't exist, silently skips (no identity = no daemon possible)
|
|
44
|
+
*
|
|
45
|
+
* All errors are silently swallowed — this is a best-effort health check
|
|
46
|
+
* and must never block or fail the main command.
|
|
47
|
+
*
|
|
48
|
+
* @param pemPath - Path to the identity PEM file
|
|
49
|
+
* @param principal - The principal ID derived from the PEM
|
|
50
|
+
*/
|
|
51
|
+
export declare function ensureDaemonsBackground(pemPath: string, principal: string): void;
|
|
52
|
+
/** Tag entry in a Kind17 envelope: ["to", principal], ["payload_type", "text"], etc. */
|
|
53
|
+
export type EnvelopeTag = [string, ...string[]];
|
|
54
|
+
/**
|
|
55
|
+
* Kind 17 envelope for encrypted messages — compatible with zMail protocol.
|
|
56
|
+
*
|
|
57
|
+
* The sender IBE-encrypts the message and wraps the ciphertext as `content`.
|
|
58
|
+
* Metadata like recipient, payload type, and IBE identity are carried in `tags`.
|
|
59
|
+
* The envelope ID is a SHA-256 hash of the canonical serialization.
|
|
60
|
+
* Signature uses BIP-340 Schnorr over the ID hash.
|
|
61
|
+
*/
|
|
62
|
+
export interface Kind17Envelope {
|
|
63
|
+
/** SHA-256 hash of canonical serialization [0, ai_id, created_at, 17, tags, content] */
|
|
64
|
+
id: string;
|
|
65
|
+
/** Fixed event kind: 17 */
|
|
66
|
+
kind: 17;
|
|
67
|
+
/** Sender's ICP principal (ai_id) */
|
|
68
|
+
ai_id: string;
|
|
69
|
+
/** Unix timestamp in seconds */
|
|
70
|
+
created_at: number;
|
|
71
|
+
/** Tags carrying recipient and optional metadata */
|
|
72
|
+
tags: EnvelopeTag[];
|
|
73
|
+
/** Encrypted content: base64 IBE ciphertext (string for single recipient) */
|
|
74
|
+
content: string;
|
|
75
|
+
/** BIP-340 Schnorr signature over the envelope ID */
|
|
76
|
+
sig: string;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Extract the raw 32-byte secp256k1 private key from the session identity.
|
|
80
|
+
* The Secp256k1KeyIdentity.toJSON() returns [publicKeyHex, privateKeyHex].
|
|
81
|
+
*/
|
|
82
|
+
export declare function extractPrivateKeyHex(session: Session): string;
|
|
83
|
+
/**
|
|
84
|
+
* Extract the BIP-340 Schnorr public key (x-only, 32 bytes hex) from an SPKI hex string.
|
|
85
|
+
* The x-coordinate sits at a fixed offset in the uncompressed secp256k1 SPKI DER structure.
|
|
86
|
+
*/
|
|
87
|
+
export declare function schnorrPubkeyFromSpki(spkiHex: string): string;
|
|
34
88
|
//# sourceMappingURL=vetkey.d.ts.map
|