@zcloak/ai-agent 1.0.53 → 1.0.54

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/dist/onboard.d.ts CHANGED
@@ -5,13 +5,11 @@
5
5
  * 1. Resolve OpenClaw workspace path
6
6
  * 2. Install SKILL.md into workspace/skills/zcloak-ai-agent/
7
7
  * 3. Update TOOLS.md in the workspace
8
- * 4. Initialize identity (show existing or generate new)
8
+ * 4. Initialize identity (load existing or generate new)
9
9
  * 5. Register with zMail
10
10
  *
11
11
  * Invoked via:
12
12
  * npx @zcloak/ai-agent@latest onboard
13
- *
14
- * Workspace resolution is shared with runPostUpgradeActions() in pre-check.ts.
15
13
  */
16
14
  export declare function runOnboard(): Promise<void>;
17
15
  //# sourceMappingURL=onboard.d.ts.map
package/dist/onboard.js CHANGED
@@ -5,26 +5,66 @@
5
5
  * 1. Resolve OpenClaw workspace path
6
6
  * 2. Install SKILL.md into workspace/skills/zcloak-ai-agent/
7
7
  * 3. Update TOOLS.md in the workspace
8
- * 4. Initialize identity (show existing or generate new)
8
+ * 4. Initialize identity (load existing or generate new)
9
9
  * 5. Register with zMail
10
10
  *
11
11
  * Invoked via:
12
12
  * npx @zcloak/ai-agent@latest onboard
13
- *
14
- * Workspace resolution is shared with runPostUpgradeActions() in pre-check.ts.
15
13
  */
14
+ import { createHash } from "crypto";
15
+ import { schnorr } from "@noble/curves/secp256k1";
16
+ import { bytesToHex } from "@noble/hashes/utils";
16
17
  import * as log from "./log.js";
17
18
  import { resolveOpenClawWorkspace, refreshSkill, updateToolsMd } from "./pre-check.js";
19
+ import { ensureIdentityFile, loadIdentityFromPath, DEFAULT_PEM_PATH } from "./identity.js";
20
+ import { schnorrPubkeyFromSpki } from "./vetkey.js";
21
+ import config from "./config.js";
18
22
  // ---------------------------------------------------------------------------
19
- // Steps (stubsimplement one by one)
23
+ // Step 4Initialize identity
20
24
  // ---------------------------------------------------------------------------
21
- /** Show existing identity or generate a new one. TODO: implement */
25
+ /** Load existing identity or generate a new one. Returns the PEM path. */
22
26
  async function initIdentity() {
23
- // TODO
27
+ const { path: pemPath, created } = ensureIdentityFile(DEFAULT_PEM_PATH);
28
+ const identity = loadIdentityFromPath(pemPath);
29
+ const principal = identity.getPrincipal().toText();
30
+ if (created) {
31
+ log.info(`[zcloak-ai] onboard [4/5] identity generated: ${principal}`);
32
+ }
33
+ else {
34
+ log.info(`[zcloak-ai] onboard [4/5] identity loaded: ${principal}`);
35
+ }
36
+ return pemPath;
24
37
  }
25
- /** Register this agent with the zMail server. TODO: implement */
26
- async function registerZmail() {
27
- // TODO
38
+ // ---------------------------------------------------------------------------
39
+ // Step 5 — Register with zMail
40
+ // ---------------------------------------------------------------------------
41
+ /** Register this agent with the zMail server. No-op if already registered. */
42
+ async function registerZmail(pemPath) {
43
+ const identity = loadIdentityFromPath(pemPath);
44
+ const principal = identity.getPrincipal().toText();
45
+ const spkiHex = Buffer.from(identity.getPublicKey().toDer()).toString("hex");
46
+ const schnorrPubkey = schnorrPubkeyFromSpki(spkiHex);
47
+ const privateKeyHex = (identity.toJSON())[1];
48
+ const zmailUrl = (process.env["ZMAIL_URL"] ?? config.zmail_url).replace(/\/+$/, "");
49
+ const timestamp = Math.floor(Date.now() / 1000);
50
+ const challenge = `register:${principal}:${spkiHex}:${schnorrPubkey}:${timestamp}`;
51
+ const msgHash = createHash("sha256").update(challenge, "utf8").digest("hex");
52
+ const sig = bytesToHex(schnorr.sign(msgHash, privateKeyHex));
53
+ const res = await fetch(`${zmailUrl}/v1/register`, {
54
+ method: "POST",
55
+ headers: { "Content-Type": "application/json" },
56
+ body: JSON.stringify({ ai_id: principal, public_key_spki: spkiHex, schnorr_pubkey: schnorrPubkey, timestamp, sig }),
57
+ });
58
+ if (res.status === 201) {
59
+ log.info(`[zcloak-ai] onboard [5/5] zMail registered: ${principal}`);
60
+ }
61
+ else if (res.status === 409) {
62
+ log.info(`[zcloak-ai] onboard [5/5] zMail already registered`);
63
+ }
64
+ else {
65
+ const body = await res.json();
66
+ throw new Error(`zMail registration failed: ${String(body["error"] ?? `HTTP ${res.status}`)}`);
67
+ }
28
68
  }
29
69
  // ---------------------------------------------------------------------------
30
70
  // Entry point
@@ -34,8 +74,8 @@ export async function runOnboard() {
34
74
  const workspace = resolveOpenClawWorkspace();
35
75
  await refreshSkill(workspace);
36
76
  await updateToolsMd(workspace);
37
- await initIdentity();
38
- await registerZmail();
77
+ const pemPath = await initIdentity();
78
+ await registerZmail(pemPath);
39
79
  log.info("[zcloak-ai] onboard complete.");
40
80
  }
41
81
  //# sourceMappingURL=onboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"onboard.js","sourceRoot":"","sources":["../src/onboard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEvF,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E,oEAAoE;AACpE,KAAK,UAAU,YAAY;IACzB,OAAO;AACT,CAAC;AAED,iEAAiE;AACjE,KAAK,UAAU,aAAa;IAC1B,OAAO;AACT,CAAC;AAED,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,GAAG,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAE5C,MAAM,SAAS,GAAG,wBAAwB,EAAE,CAAC;IAE7C,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;IAC9B,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;IAC/B,MAAM,YAAY,EAAE,CAAC;IACrB,MAAM,aAAa,EAAE,CAAC;IAEtB,GAAG,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"onboard.js","sourceRoot":"","sources":["../src/onboard.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zcloak/ai-agent",
3
- "version": "1.0.53",
3
+ "version": "1.0.54",
4
4
  "description": "zCloak.ai Agent CLI — sign, verify, register",
5
5
  "bin": {
6
6
  "zcloak-ai": "./dist/cli.js"