@zcloak/ai-agent 1.0.23 → 1.0.25
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 +88 -117
- package/dist/bind.js +9 -8
- package/dist/bind.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +61 -37
- package/dist/cli.js.map +1 -1
- package/dist/compat.d.ts +32 -0
- package/dist/compat.js +91 -0
- package/dist/compat.js.map +1 -0
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +14 -24
- package/dist/daemon.js +44 -83
- package/dist/daemon.js.map +1 -1
- package/dist/delete.js +8 -7
- package/dist/delete.js.map +1 -1
- package/dist/doc.js +4 -3
- package/dist/doc.js.map +1 -1
- package/dist/feed.js +2 -1
- package/dist/feed.js.map +1 -1
- package/dist/identity.js +2 -1
- package/dist/identity.js.map +1 -1
- package/dist/identity_cmd.js +2 -1
- package/dist/identity_cmd.js.map +1 -1
- package/dist/log.js +3 -6
- package/dist/log.js.map +1 -1
- package/dist/mailbox-store.d.ts +92 -0
- package/dist/mailbox-store.js +166 -0
- package/dist/mailbox-store.js.map +1 -0
- package/dist/paths.d.ts +39 -0
- package/dist/paths.js +77 -0
- package/dist/paths.js.map +1 -0
- package/dist/pow.js +2 -1
- package/dist/pow.js.map +1 -1
- package/dist/pre-check.d.ts +4 -4
- package/dist/pre-check.js +25 -9
- package/dist/pre-check.js.map +1 -1
- package/dist/register.js +200 -35
- package/dist/register.js.map +1 -1
- package/dist/rpc.d.ts +4 -6
- package/dist/rpc.js +3 -3
- package/dist/rpc.js.map +1 -1
- package/dist/serve.d.ts +4 -30
- package/dist/serve.js +22 -90
- package/dist/serve.js.map +1 -1
- package/dist/session.js +4 -3
- package/dist/session.js.map +1 -1
- package/dist/sign.js +9 -8
- package/dist/sign.js.map +1 -1
- package/dist/social.js +6 -5
- package/dist/social.js.map +1 -1
- package/dist/types/registry.d.ts +1 -1
- package/dist/types/registry.js +1 -1
- package/dist/types/sign-event.d.ts +1 -1
- package/dist/types/sign-event.js +1 -1
- package/dist/utils.js +1 -1
- package/dist/utils.js.map +1 -1
- package/dist/verify.js +3 -2
- package/dist/verify.js.map +1 -1
- package/dist/vetkey.d.ts +18 -15
- package/dist/vetkey.js +182 -91
- package/dist/vetkey.js.map +1 -1
- package/dist/zmail.d.ts +7 -3
- package/dist/zmail.js +316 -20
- package/dist/zmail.js.map +1 -1
- package/package.json +1 -1
package/dist/doc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doc.js","sourceRoot":"","sources":["../src/doc.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EACL,QAAQ,EACR,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,qBAAqB,GACtB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"doc.js","sourceRoot":"","sources":["../src/doc.ts"],"names":[],"mappings":"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"}
|
package/dist/feed.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* All commands support --identity=<pem_path> to specify identity file.
|
|
13
13
|
*/
|
|
14
14
|
import { formatSignEvents } from './utils.js';
|
|
15
|
+
import * as log from './log.js';
|
|
15
16
|
// ========== Help Information ==========
|
|
16
17
|
function showHelp() {
|
|
17
18
|
console.log('zCloak.ai Event/Post Fetching Tool');
|
|
@@ -73,7 +74,7 @@ export async function run(session) {
|
|
|
73
74
|
}
|
|
74
75
|
}
|
|
75
76
|
catch (err) {
|
|
76
|
-
|
|
77
|
+
log.error(`Operation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
77
78
|
process.exit(1);
|
|
78
79
|
}
|
|
79
80
|
}
|
package/dist/feed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed.js","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"feed.js","sourceRoot":"","sources":["../src/feed.ts"],"names":[],"mappings":"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"}
|
package/dist/identity.js
CHANGED
|
@@ -16,12 +16,13 @@ import path from 'path';
|
|
|
16
16
|
import os from 'os';
|
|
17
17
|
import { generateKeyPairSync } from 'crypto';
|
|
18
18
|
import { Secp256k1KeyIdentity } from '@dfinity/identity-secp256k1';
|
|
19
|
+
import { defaultPemPath } from './paths.js';
|
|
19
20
|
// ========== PEM File Lookup ==========
|
|
20
21
|
/**
|
|
21
22
|
* zCloak default identity PEM file path
|
|
22
23
|
* Unified for macOS and Linux: ~/.config/zcloak/ai-id.pem
|
|
23
24
|
*/
|
|
24
|
-
export const DEFAULT_PEM_PATH =
|
|
25
|
+
export const DEFAULT_PEM_PATH = defaultPemPath();
|
|
25
26
|
/**
|
|
26
27
|
* Expand CLI paths like ~/foo.pem to an absolute path.
|
|
27
28
|
*/
|
package/dist/identity.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"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"}
|
package/dist/identity_cmd.js
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* Print the PEM path and principal ID of the current identity.
|
|
21
21
|
*/
|
|
22
22
|
import { DEFAULT_PEM_PATH, ensureIdentityFile, loadIdentityFromPath, resolveCliPath } from './identity.js';
|
|
23
|
+
import * as log from './log.js';
|
|
23
24
|
// ========== Help ==========
|
|
24
25
|
function showHelp() {
|
|
25
26
|
console.log('zCloak.ai Identity Key Management');
|
|
@@ -120,7 +121,7 @@ export function run(session) {
|
|
|
120
121
|
}
|
|
121
122
|
}
|
|
122
123
|
catch (err) {
|
|
123
|
-
|
|
124
|
+
log.error(`Operation failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
124
125
|
process.exit(1);
|
|
125
126
|
}
|
|
126
127
|
}
|
package/dist/identity_cmd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identity_cmd.js","sourceRoot":"","sources":["../src/identity_cmd.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"identity_cmd.js","sourceRoot":"","sources":["../src/identity_cmd.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG3G,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,6BAA6B;AAE7B,SAAS,QAAQ;IACf,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtB,OAAO,CAAC,GAAG,CAAC,+EAA+E,CAAC,CAAC;IAC7F,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;IACjF,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,mFAAmF,CAAC,CAAC;IACjG,OAAO,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;IAC1F,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;IACtF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;AACrE,CAAC;AAED,iCAAiC;AAEjC;;;;;;;;;;;;;GAaG;AACH,SAAS,WAAW,CAAC,IAAgB;IACnC,yDAAyD;IACzD,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ;QAClD,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChB,CAAC,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,QAAQ;YACpC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;YAClB,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,UAAU,GAAG,OAAO,SAAS,KAAK,QAAQ;QAC9C,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC;QAC3B,CAAC,CAAC,gBAAgB,CAAC;IAErB,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,kBAAkB,CAAC,UAAU,EAAE;QACpE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;KACvB,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAEnD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,qCAAqC,WAAW,EAAE,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC5E,CAAC;AAED;;;GAGG;AACH,SAAS,OAAO,CAAC,OAAgB;IAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,0DAA0D;AAE1D;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,OAAgB;IAClC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC7C,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,UAAU;gBACb,WAAW,CAAC,IAAI,CAAC,CAAC;gBAClB,MAAM;YACR,KAAK,MAAM;gBACT,OAAO,CAAC,OAAO,CAAC,CAAC;gBACjB,MAAM;YACR;gBACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,EAAE,CAAC,CAAC;gBACzC,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,GAAG,CAAC,KAAK,CAAC,qBAAqB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/log.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
|
-
import
|
|
3
|
-
import path from 'path';
|
|
4
|
-
const LOG_DIR = path.join(os.homedir(), '.config', 'zcloak');
|
|
5
|
-
const DEBUG_LOG_FILE = path.join(LOG_DIR, 'debug.log');
|
|
2
|
+
import { configDir, debugLogPath } from './paths.js';
|
|
6
3
|
function isDebugEnabled() {
|
|
7
4
|
const value = process.env.ZCLOAK_DEBUG?.trim().toLowerCase();
|
|
8
5
|
if (!value)
|
|
@@ -29,8 +26,8 @@ function write(level, parts) {
|
|
|
29
26
|
const entry = `[zcloak-ai] ${timestamp} ${level} ${line}\n`;
|
|
30
27
|
process.stderr.write(entry);
|
|
31
28
|
try {
|
|
32
|
-
fs.mkdirSync(
|
|
33
|
-
fs.appendFileSync(
|
|
29
|
+
fs.mkdirSync(configDir(), { recursive: true });
|
|
30
|
+
fs.appendFileSync(debugLogPath(), entry, 'utf-8');
|
|
34
31
|
}
|
|
35
32
|
catch {
|
|
36
33
|
// Logging must never break the main command path.
|
package/dist/log.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../src/log.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAErD,SAAS,cAAc;IACrB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC7D,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC;AACjF,CAAC;AAED,SAAS,UAAU,CAAC,IAAa;IAC/B,IAAI,IAAI,YAAY,KAAK,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC;IACpC,CAAC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,KAA0C,EAAE,KAAgB;IACzE,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,KAAK,GAAG,eAAe,SAAS,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC;IAE5D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAE5B,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/C,EAAE,CAAC,cAAc,CAAC,YAAY,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAG,KAAgB;IACvC,IAAI,CAAC,cAAc,EAAE;QAAE,OAAO;IAC9B,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAG,KAAgB;IACtC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,GAAG,KAAgB;IACtC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAG,KAAgB;IACvC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local mailbox storage layer for zMail.
|
|
3
|
+
*
|
|
4
|
+
* Follows the zmail-skill pattern: messages are synced from the server and
|
|
5
|
+
* cached locally so that `inbox` and `sent` can read from disk without
|
|
6
|
+
* network access.
|
|
7
|
+
*
|
|
8
|
+
* Storage layout:
|
|
9
|
+
* ~/.config/zcloak/mailboxes/{principal}/
|
|
10
|
+
* inbox.json Cached inbox messages
|
|
11
|
+
* sent.json Cached sent messages
|
|
12
|
+
* sync-state.json Incremental sync cursors
|
|
13
|
+
*
|
|
14
|
+
* Directory permissions: 0o700 (owner only)
|
|
15
|
+
* File permissions: 0o600 (owner read/write)
|
|
16
|
+
*
|
|
17
|
+
* All writes use an atomic .tmp → rename pattern to prevent data corruption
|
|
18
|
+
* if the process is interrupted mid-write.
|
|
19
|
+
*/
|
|
20
|
+
/** A single cached message — stored as the raw API response object. */
|
|
21
|
+
export type CachedMessage = Record<string, unknown>;
|
|
22
|
+
/**
|
|
23
|
+
* On-disk format for inbox.json and sent.json.
|
|
24
|
+
* Messages are stored as-is from the API (still ciphertext, never decrypted here).
|
|
25
|
+
*/
|
|
26
|
+
export interface MailboxFile {
|
|
27
|
+
/** Schema version (currently 1) */
|
|
28
|
+
version: number;
|
|
29
|
+
/** Unix timestamp (seconds) of when this file was last written */
|
|
30
|
+
synced_at: number;
|
|
31
|
+
/** Ordered array of message objects */
|
|
32
|
+
messages: CachedMessage[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Incremental sync state — tracks the server-side pagination cursor
|
|
36
|
+
* so that subsequent syncs only fetch new messages.
|
|
37
|
+
*/
|
|
38
|
+
export interface SyncState {
|
|
39
|
+
/** Schema version (currently 1) */
|
|
40
|
+
version: number;
|
|
41
|
+
/** Last inbox pagination cursor from the server */
|
|
42
|
+
inbox_cursor?: string;
|
|
43
|
+
/** Last sent pagination cursor from the server */
|
|
44
|
+
sent_cursor?: string;
|
|
45
|
+
/** Unix timestamp (seconds) of the most recent sync */
|
|
46
|
+
last_sync_at: number;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Return the mailbox directory path for a given principal.
|
|
50
|
+
* Does NOT create the directory — call {@link ensureMailboxDir} for that.
|
|
51
|
+
*/
|
|
52
|
+
export declare function mailboxDir(principal: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Ensure the principal's mailbox directory exists.
|
|
55
|
+
* Creates it (and parents) with 0o700 permissions if missing.
|
|
56
|
+
*
|
|
57
|
+
* @returns The absolute path to the mailbox directory
|
|
58
|
+
*/
|
|
59
|
+
export declare function ensureMailboxDir(principal: string): string;
|
|
60
|
+
/** Read the local inbox cache for a principal. */
|
|
61
|
+
export declare function readInbox(principal: string): MailboxFile;
|
|
62
|
+
/** Read the local sent cache for a principal. */
|
|
63
|
+
export declare function readSent(principal: string): MailboxFile;
|
|
64
|
+
/**
|
|
65
|
+
* Read the sync state for a principal.
|
|
66
|
+
* Returns null if no sync has been performed yet.
|
|
67
|
+
*/
|
|
68
|
+
export declare function readSyncState(principal: string): SyncState | null;
|
|
69
|
+
/** Write the inbox cache for a principal. */
|
|
70
|
+
export declare function writeInbox(principal: string, data: MailboxFile): void;
|
|
71
|
+
/** Write the sent cache for a principal. */
|
|
72
|
+
export declare function writeSent(principal: string, data: MailboxFile): void;
|
|
73
|
+
/** Write the sync state for a principal. */
|
|
74
|
+
export declare function writeSyncState(principal: string, state: SyncState): void;
|
|
75
|
+
/**
|
|
76
|
+
* Merge incoming messages into an existing message list.
|
|
77
|
+
*
|
|
78
|
+
* - De-duplicates by message `id`
|
|
79
|
+
* - For duplicate IDs, incoming data wins (e.g. updated `read` status)
|
|
80
|
+
* - Result is sorted by `created_at` descending (newest first)
|
|
81
|
+
*
|
|
82
|
+
* @param existing - Previously cached messages
|
|
83
|
+
* @param incoming - Newly fetched messages from the server
|
|
84
|
+
* @returns Merged, de-duplicated, sorted message array
|
|
85
|
+
*/
|
|
86
|
+
export declare function mergeMessages(existing: CachedMessage[], incoming: CachedMessage[]): CachedMessage[];
|
|
87
|
+
/**
|
|
88
|
+
* Clean up leftover .tmp files in a principal's mailbox directory.
|
|
89
|
+
* Called defensively after sync in case a previous run was interrupted.
|
|
90
|
+
*/
|
|
91
|
+
export declare function cleanupTmpFiles(principal: string): void;
|
|
92
|
+
//# sourceMappingURL=mailbox-store.d.ts.map
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local mailbox storage layer for zMail.
|
|
3
|
+
*
|
|
4
|
+
* Follows the zmail-skill pattern: messages are synced from the server and
|
|
5
|
+
* cached locally so that `inbox` and `sent` can read from disk without
|
|
6
|
+
* network access.
|
|
7
|
+
*
|
|
8
|
+
* Storage layout:
|
|
9
|
+
* ~/.config/zcloak/mailboxes/{principal}/
|
|
10
|
+
* inbox.json Cached inbox messages
|
|
11
|
+
* sent.json Cached sent messages
|
|
12
|
+
* sync-state.json Incremental sync cursors
|
|
13
|
+
*
|
|
14
|
+
* Directory permissions: 0o700 (owner only)
|
|
15
|
+
* File permissions: 0o600 (owner read/write)
|
|
16
|
+
*
|
|
17
|
+
* All writes use an atomic .tmp → rename pattern to prevent data corruption
|
|
18
|
+
* if the process is interrupted mid-write.
|
|
19
|
+
*/
|
|
20
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync, renameSync, unlinkSync } from 'fs';
|
|
21
|
+
import { join } from 'path';
|
|
22
|
+
import { mailboxDir as mailboxDirFromPaths } from './paths.js';
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// Path Helpers
|
|
25
|
+
// ============================================================================
|
|
26
|
+
/**
|
|
27
|
+
* Return the mailbox directory path for a given principal.
|
|
28
|
+
* Does NOT create the directory — call {@link ensureMailboxDir} for that.
|
|
29
|
+
*/
|
|
30
|
+
export function mailboxDir(principal) {
|
|
31
|
+
return mailboxDirFromPaths(principal);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Ensure the principal's mailbox directory exists.
|
|
35
|
+
* Creates it (and parents) with 0o700 permissions if missing.
|
|
36
|
+
*
|
|
37
|
+
* @returns The absolute path to the mailbox directory
|
|
38
|
+
*/
|
|
39
|
+
export function ensureMailboxDir(principal) {
|
|
40
|
+
const dir = mailboxDir(principal);
|
|
41
|
+
if (!existsSync(dir)) {
|
|
42
|
+
mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
43
|
+
}
|
|
44
|
+
return dir;
|
|
45
|
+
}
|
|
46
|
+
// ============================================================================
|
|
47
|
+
// Read Helpers
|
|
48
|
+
// ============================================================================
|
|
49
|
+
/** Default empty mailbox file returned when no local cache exists. */
|
|
50
|
+
function emptyMailboxFile() {
|
|
51
|
+
return { version: 1, synced_at: 0, messages: [] };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Read a JSON mailbox file from disk.
|
|
55
|
+
* Returns a default empty structure if the file does not exist.
|
|
56
|
+
*
|
|
57
|
+
* @throws Error if the file exists but contains invalid JSON
|
|
58
|
+
*/
|
|
59
|
+
function readMailboxFile(filePath) {
|
|
60
|
+
if (!existsSync(filePath))
|
|
61
|
+
return emptyMailboxFile();
|
|
62
|
+
const raw = readFileSync(filePath, 'utf-8');
|
|
63
|
+
const parsed = JSON.parse(raw);
|
|
64
|
+
if (typeof parsed.version !== 'number' || !Array.isArray(parsed.messages)) {
|
|
65
|
+
throw new Error(`Invalid mailbox file format: ${filePath}`);
|
|
66
|
+
}
|
|
67
|
+
return parsed;
|
|
68
|
+
}
|
|
69
|
+
/** Read the local inbox cache for a principal. */
|
|
70
|
+
export function readInbox(principal) {
|
|
71
|
+
return readMailboxFile(join(mailboxDir(principal), 'inbox.json'));
|
|
72
|
+
}
|
|
73
|
+
/** Read the local sent cache for a principal. */
|
|
74
|
+
export function readSent(principal) {
|
|
75
|
+
return readMailboxFile(join(mailboxDir(principal), 'sent.json'));
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Read the sync state for a principal.
|
|
79
|
+
* Returns null if no sync has been performed yet.
|
|
80
|
+
*/
|
|
81
|
+
export function readSyncState(principal) {
|
|
82
|
+
const filePath = join(mailboxDir(principal), 'sync-state.json');
|
|
83
|
+
if (!existsSync(filePath))
|
|
84
|
+
return null;
|
|
85
|
+
const raw = readFileSync(filePath, 'utf-8');
|
|
86
|
+
return JSON.parse(raw);
|
|
87
|
+
}
|
|
88
|
+
// ============================================================================
|
|
89
|
+
// Write Helpers (atomic: write .tmp then rename)
|
|
90
|
+
// ============================================================================
|
|
91
|
+
/**
|
|
92
|
+
* Atomically write a JSON file: write to a .tmp sibling, then rename.
|
|
93
|
+
* This prevents data corruption if the process is killed mid-write.
|
|
94
|
+
*/
|
|
95
|
+
function atomicWriteJson(filePath, data) {
|
|
96
|
+
const tmpPath = `${filePath}.tmp`;
|
|
97
|
+
const content = JSON.stringify(data, null, 2);
|
|
98
|
+
writeFileSync(tmpPath, content, { mode: 0o600 });
|
|
99
|
+
renameSync(tmpPath, filePath);
|
|
100
|
+
}
|
|
101
|
+
/** Write the inbox cache for a principal. */
|
|
102
|
+
export function writeInbox(principal, data) {
|
|
103
|
+
ensureMailboxDir(principal);
|
|
104
|
+
atomicWriteJson(join(mailboxDir(principal), 'inbox.json'), data);
|
|
105
|
+
}
|
|
106
|
+
/** Write the sent cache for a principal. */
|
|
107
|
+
export function writeSent(principal, data) {
|
|
108
|
+
ensureMailboxDir(principal);
|
|
109
|
+
atomicWriteJson(join(mailboxDir(principal), 'sent.json'), data);
|
|
110
|
+
}
|
|
111
|
+
/** Write the sync state for a principal. */
|
|
112
|
+
export function writeSyncState(principal, state) {
|
|
113
|
+
ensureMailboxDir(principal);
|
|
114
|
+
atomicWriteJson(join(mailboxDir(principal), 'sync-state.json'), state);
|
|
115
|
+
}
|
|
116
|
+
// ============================================================================
|
|
117
|
+
// Message Merging
|
|
118
|
+
// ============================================================================
|
|
119
|
+
/**
|
|
120
|
+
* Merge incoming messages into an existing message list.
|
|
121
|
+
*
|
|
122
|
+
* - De-duplicates by message `id`
|
|
123
|
+
* - For duplicate IDs, incoming data wins (e.g. updated `read` status)
|
|
124
|
+
* - Result is sorted by `created_at` descending (newest first)
|
|
125
|
+
*
|
|
126
|
+
* @param existing - Previously cached messages
|
|
127
|
+
* @param incoming - Newly fetched messages from the server
|
|
128
|
+
* @returns Merged, de-duplicated, sorted message array
|
|
129
|
+
*/
|
|
130
|
+
export function mergeMessages(existing, incoming) {
|
|
131
|
+
// Build a map keyed by message id; incoming overwrites existing
|
|
132
|
+
const map = new Map();
|
|
133
|
+
for (const msg of existing) {
|
|
134
|
+
const id = msg.id;
|
|
135
|
+
if (id)
|
|
136
|
+
map.set(id, msg);
|
|
137
|
+
}
|
|
138
|
+
for (const msg of incoming) {
|
|
139
|
+
const id = msg.id;
|
|
140
|
+
if (id)
|
|
141
|
+
map.set(id, msg);
|
|
142
|
+
}
|
|
143
|
+
// Sort by timestamp descending (newest first).
|
|
144
|
+
// Messages may carry created_at, received_at, or stored_at depending on
|
|
145
|
+
// whether they are inbox or sent records — fall through in priority order.
|
|
146
|
+
return Array.from(map.values()).sort((a, b) => {
|
|
147
|
+
const ta = (a.created_at ?? a.received_at ?? a.stored_at ?? 0);
|
|
148
|
+
const tb = (b.created_at ?? b.received_at ?? b.stored_at ?? 0);
|
|
149
|
+
return tb - ta;
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Clean up leftover .tmp files in a principal's mailbox directory.
|
|
154
|
+
* Called defensively after sync in case a previous run was interrupted.
|
|
155
|
+
*/
|
|
156
|
+
export function cleanupTmpFiles(principal) {
|
|
157
|
+
const dir = mailboxDir(principal);
|
|
158
|
+
for (const name of ['inbox.json.tmp', 'sent.json.tmp', 'sync-state.json.tmp']) {
|
|
159
|
+
const tmpPath = join(dir, name);
|
|
160
|
+
try {
|
|
161
|
+
unlinkSync(tmpPath);
|
|
162
|
+
}
|
|
163
|
+
catch { /* file may not exist */ }
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=mailbox-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mailbox-store.js","sourceRoot":"","sources":["../src/mailbox-store.ts"],"names":[],"mappings":"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"}
|
package/dist/paths.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized file system path definitions for zcloak-agent.
|
|
3
|
+
*
|
|
4
|
+
* ALL directory and file paths used by the application are defined here.
|
|
5
|
+
* No other module should construct paths using os.homedir() directly.
|
|
6
|
+
*
|
|
7
|
+
* Directory layout:
|
|
8
|
+
* ~/.config/zcloak/
|
|
9
|
+
* ai-id.pem Identity PEM file
|
|
10
|
+
* debug.log Debug log file
|
|
11
|
+
* .last-update-check Update check timestamp
|
|
12
|
+
* run/ Daemon runtime files (PID, socket, logs)
|
|
13
|
+
* {sanitized_id}.pid
|
|
14
|
+
* {sanitized_id}.sock
|
|
15
|
+
* {keyname}-daemon.log
|
|
16
|
+
* mailboxes/{principal}/ Per-principal mailbox cache
|
|
17
|
+
* inbox.json
|
|
18
|
+
* sent.json
|
|
19
|
+
* sync-state.json
|
|
20
|
+
*/
|
|
21
|
+
/** Root configuration directory: ~/.config/zcloak/ */
|
|
22
|
+
export declare function configDir(): string;
|
|
23
|
+
/** Daemon runtime directory: ~/.config/zcloak/run/ */
|
|
24
|
+
export declare function runtimeDir(): string;
|
|
25
|
+
/** Mailboxes root: ~/.config/zcloak/mailboxes/ */
|
|
26
|
+
export declare function mailboxesRoot(): string;
|
|
27
|
+
/** Default identity PEM file path: ~/.config/zcloak/ai-id.pem */
|
|
28
|
+
export declare function defaultPemPath(): string;
|
|
29
|
+
/** Debug log file path: ~/.config/zcloak/debug.log */
|
|
30
|
+
export declare function debugLogPath(): string;
|
|
31
|
+
/** Daemon log file path for a given key name: ~/.config/zcloak/run/{keyname}-daemon.log */
|
|
32
|
+
export declare function daemonLogPath(keyName: string): string;
|
|
33
|
+
/** Last update check timestamp file: ~/.config/zcloak/.last-update-check */
|
|
34
|
+
export declare function lastUpdateCheckPath(): string;
|
|
35
|
+
/** Mailbox directory for a given principal: ~/.config/zcloak/mailboxes/{principal}/ */
|
|
36
|
+
export declare function mailboxDir(principal: string): string;
|
|
37
|
+
/** Old daemon runtime directory: ~/.vetkey-tool/ (migrated to ~/.config/zcloak/run/) */
|
|
38
|
+
export declare function legacyRuntimeDir(): string;
|
|
39
|
+
//# sourceMappingURL=paths.d.ts.map
|
package/dist/paths.js
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized file system path definitions for zcloak-agent.
|
|
3
|
+
*
|
|
4
|
+
* ALL directory and file paths used by the application are defined here.
|
|
5
|
+
* No other module should construct paths using os.homedir() directly.
|
|
6
|
+
*
|
|
7
|
+
* Directory layout:
|
|
8
|
+
* ~/.config/zcloak/
|
|
9
|
+
* ai-id.pem Identity PEM file
|
|
10
|
+
* debug.log Debug log file
|
|
11
|
+
* .last-update-check Update check timestamp
|
|
12
|
+
* run/ Daemon runtime files (PID, socket, logs)
|
|
13
|
+
* {sanitized_id}.pid
|
|
14
|
+
* {sanitized_id}.sock
|
|
15
|
+
* {keyname}-daemon.log
|
|
16
|
+
* mailboxes/{principal}/ Per-principal mailbox cache
|
|
17
|
+
* inbox.json
|
|
18
|
+
* sent.json
|
|
19
|
+
* sync-state.json
|
|
20
|
+
*/
|
|
21
|
+
import { join } from 'path';
|
|
22
|
+
import { homedir } from 'os';
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// Root Directories
|
|
25
|
+
// ============================================================================
|
|
26
|
+
/** Root configuration directory: ~/.config/zcloak/ */
|
|
27
|
+
export function configDir() {
|
|
28
|
+
return join(homedir(), '.config', 'zcloak');
|
|
29
|
+
}
|
|
30
|
+
/** Daemon runtime directory: ~/.config/zcloak/run/ */
|
|
31
|
+
export function runtimeDir() {
|
|
32
|
+
return join(configDir(), 'run');
|
|
33
|
+
}
|
|
34
|
+
/** Mailboxes root: ~/.config/zcloak/mailboxes/ */
|
|
35
|
+
export function mailboxesRoot() {
|
|
36
|
+
return join(configDir(), 'mailboxes');
|
|
37
|
+
}
|
|
38
|
+
// ============================================================================
|
|
39
|
+
// Identity
|
|
40
|
+
// ============================================================================
|
|
41
|
+
/** Default identity PEM file path: ~/.config/zcloak/ai-id.pem */
|
|
42
|
+
export function defaultPemPath() {
|
|
43
|
+
return join(configDir(), 'ai-id.pem');
|
|
44
|
+
}
|
|
45
|
+
// ============================================================================
|
|
46
|
+
// Logging
|
|
47
|
+
// ============================================================================
|
|
48
|
+
/** Debug log file path: ~/.config/zcloak/debug.log */
|
|
49
|
+
export function debugLogPath() {
|
|
50
|
+
return join(configDir(), 'debug.log');
|
|
51
|
+
}
|
|
52
|
+
/** Daemon log file path for a given key name: ~/.config/zcloak/run/{keyname}-daemon.log */
|
|
53
|
+
export function daemonLogPath(keyName) {
|
|
54
|
+
return join(runtimeDir(), `${keyName.toLowerCase()}-daemon.log`);
|
|
55
|
+
}
|
|
56
|
+
// ============================================================================
|
|
57
|
+
// Update Check
|
|
58
|
+
// ============================================================================
|
|
59
|
+
/** Last update check timestamp file: ~/.config/zcloak/.last-update-check */
|
|
60
|
+
export function lastUpdateCheckPath() {
|
|
61
|
+
return join(configDir(), '.last-update-check');
|
|
62
|
+
}
|
|
63
|
+
// ============================================================================
|
|
64
|
+
// Mailbox Per-Principal Paths
|
|
65
|
+
// ============================================================================
|
|
66
|
+
/** Mailbox directory for a given principal: ~/.config/zcloak/mailboxes/{principal}/ */
|
|
67
|
+
export function mailboxDir(principal) {
|
|
68
|
+
return join(mailboxesRoot(), principal);
|
|
69
|
+
}
|
|
70
|
+
// ============================================================================
|
|
71
|
+
// Legacy Paths (for backward compatibility migration)
|
|
72
|
+
// ============================================================================
|
|
73
|
+
/** Old daemon runtime directory: ~/.vetkey-tool/ (migrated to ~/.config/zcloak/run/) */
|
|
74
|
+
export function legacyRuntimeDir() {
|
|
75
|
+
return join(homedir(), '.vetkey-tool');
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../src/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAE7B,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,sDAAsD;AACtD,MAAM,UAAU,SAAS;IACvB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,UAAU;IACxB,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,WAAW,CAAC,CAAC;AACxC,CAAC;AAED,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E,iEAAiE;AACjE,MAAM,UAAU,cAAc;IAC5B,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,WAAW,CAAC,CAAC;AACxC,CAAC;AAED,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E,sDAAsD;AACtD,MAAM,UAAU,YAAY;IAC1B,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,WAAW,CAAC,CAAC;AACxC,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;AACnE,CAAC;AAED,+EAA+E;AAC/E,eAAe;AACf,+EAA+E;AAE/E,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB;IACjC,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,oBAAoB,CAAC,CAAC;AACjD,CAAC;AAED,+EAA+E;AAC/E,8BAA8B;AAC9B,+EAA+E;AAE/E,uFAAuF;AACvF,MAAM,UAAU,UAAU,CAAC,SAAiB;IAC1C,OAAO,IAAI,CAAC,aAAa,EAAE,EAAE,SAAS,CAAC,CAAC;AAC1C,CAAC;AAED,+EAA+E;AAC/E,sDAAsD;AACtD,+EAA+E;AAE/E,wFAAwF;AACxF,MAAM,UAAU,gBAAgB;IAC9B,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AACzC,CAAC"}
|
package/dist/pow.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
* zcloak-ai pow 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969 5
|
|
13
13
|
*/
|
|
14
14
|
import crypto from 'crypto';
|
|
15
|
+
import * as log from './log.js';
|
|
15
16
|
// ========== Exported run() — called by cli.ts ==========
|
|
16
17
|
/**
|
|
17
18
|
* Entry point when invoked via cli.ts.
|
|
@@ -69,7 +70,7 @@ export function run(session) {
|
|
|
69
70
|
if (nonce % 10000 === 0) {
|
|
70
71
|
const elapsed = Date.now() - start;
|
|
71
72
|
if (elapsed > POW_TIMEOUT_MS) {
|
|
72
|
-
|
|
73
|
+
log.error(`PoW computation timed out after ${Math.round(elapsed / 1000)}s ` +
|
|
73
74
|
`(${nonce} hashes tried, zeros=${zeros}). ` +
|
|
74
75
|
`Consider reducing the zeros parameter.`);
|
|
75
76
|
process.exit(1);
|
package/dist/pow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pow.js","sourceRoot":"","sources":["../src/pow.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;GAWG;AAEH,OAAO,MAAM,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"pow.js","sourceRoot":"","sources":["../src/pow.ts"],"names":[],"mappings":"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"}
|
package/dist/pre-check.d.ts
CHANGED
|
@@ -21,17 +21,17 @@
|
|
|
21
21
|
*/
|
|
22
22
|
/** Result returned by preCheck() to the caller (cli.ts) */
|
|
23
23
|
export interface PreCheckResult {
|
|
24
|
-
/** Whether the CLI package was updated (requires re-execution) */
|
|
24
|
+
/** Whether the CLI package was successfully updated (requires re-execution) */
|
|
25
25
|
updated: boolean;
|
|
26
|
-
/** Human / agent-readable message (empty string when nothing
|
|
26
|
+
/** Human / agent-readable message (empty string when nothing noteworthy happened) */
|
|
27
27
|
message: string;
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
30
|
* Run the pre-flight update check.
|
|
31
31
|
*
|
|
32
32
|
* Called by cli.ts before dispatching any sub-command. If an update is
|
|
33
|
-
* detected and applied, the returned result contains a descriptive
|
|
34
|
-
* (for stderr) and `updated: true`.
|
|
33
|
+
* detected and applied successfully, the returned result contains a descriptive
|
|
34
|
+
* message (for stderr) and `updated: true`.
|
|
35
35
|
*
|
|
36
36
|
* When `updated` is true the caller should exit and prompt the agent /
|
|
37
37
|
* user to re-run the command (the running binary and SKILL.md are stale).
|