moltyjacs 0.3.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.
- package/LICENSE +21 -0
- package/README.md +223 -0
- package/dist/cli.d.ts +24 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +593 -0
- package/dist/cli.js.map +1 -0
- package/dist/gateway/wellknown.d.ts +24 -0
- package/dist/gateway/wellknown.d.ts.map +1 -0
- package/dist/gateway/wellknown.js +206 -0
- package/dist/gateway/wellknown.js.map +1 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +150 -0
- package/dist/index.js.map +1 -0
- package/dist/setup.d.ts +25 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +217 -0
- package/dist/setup.js.map +1 -0
- package/dist/tools/documents.d.ts +115 -0
- package/dist/tools/documents.d.ts.map +1 -0
- package/dist/tools/documents.js +885 -0
- package/dist/tools/documents.js.map +1 -0
- package/dist/tools/hai.d.ts +69 -0
- package/dist/tools/hai.d.ts.map +1 -0
- package/dist/tools/hai.js +214 -0
- package/dist/tools/hai.js.map +1 -0
- package/dist/tools/index.d.ts +106 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +1170 -0
- package/dist/tools/index.js.map +1 -0
- package/marketplace.json +80 -0
- package/openclaw.plugin.json +59 -0
- package/package.json +64 -0
- package/src/skills/jacs/SKILL.md +308 -0
package/dist/cli.js
ADDED
|
@@ -0,0 +1,593 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* JACS CLI Commands for OpenClaw
|
|
4
|
+
*
|
|
5
|
+
* Provides command-line interface for JACS operations.
|
|
6
|
+
*/
|
|
7
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
8
|
+
if (k2 === undefined) k2 = k;
|
|
9
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
10
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
11
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
12
|
+
}
|
|
13
|
+
Object.defineProperty(o, k2, desc);
|
|
14
|
+
}) : (function(o, m, k, k2) {
|
|
15
|
+
if (k2 === undefined) k2 = k;
|
|
16
|
+
o[k2] = m[k];
|
|
17
|
+
}));
|
|
18
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
19
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
20
|
+
}) : function(o, v) {
|
|
21
|
+
o["default"] = v;
|
|
22
|
+
});
|
|
23
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
24
|
+
var ownKeys = function(o) {
|
|
25
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
26
|
+
var ar = [];
|
|
27
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
28
|
+
return ar;
|
|
29
|
+
};
|
|
30
|
+
return ownKeys(o);
|
|
31
|
+
};
|
|
32
|
+
return function (mod) {
|
|
33
|
+
if (mod && mod.__esModule) return mod;
|
|
34
|
+
var result = {};
|
|
35
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
36
|
+
__setModuleDefault(result, mod);
|
|
37
|
+
return result;
|
|
38
|
+
};
|
|
39
|
+
})();
|
|
40
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
41
|
+
exports.cliCommands = cliCommands;
|
|
42
|
+
const jacs_1 = require("@hai.ai/jacs");
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const tools_1 = require("./tools");
|
|
46
|
+
const hai_1 = require("./tools/hai");
|
|
47
|
+
/**
|
|
48
|
+
* Creates CLI commands for the JACS plugin
|
|
49
|
+
*/
|
|
50
|
+
function cliCommands(api) {
|
|
51
|
+
const homeDir = api.runtime.homeDir;
|
|
52
|
+
const jacsDir = path.join(homeDir, ".openclaw", "jacs");
|
|
53
|
+
const keysDir = path.join(homeDir, ".openclaw", "jacs_keys");
|
|
54
|
+
return {
|
|
55
|
+
init: {
|
|
56
|
+
description: "Initialize JACS with key generation",
|
|
57
|
+
args: ["[--algorithm <algo>]", "[--name <name>]", "[--password <password>]"],
|
|
58
|
+
handler: async (args) => {
|
|
59
|
+
return api.invoke("jacs-init", args);
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
status: {
|
|
63
|
+
description: "Show JACS status and agent info",
|
|
64
|
+
handler: async () => {
|
|
65
|
+
const configPath = path.join(jacsDir, "jacs.config.json");
|
|
66
|
+
if (!fs.existsSync(configPath)) {
|
|
67
|
+
return {
|
|
68
|
+
text: "JACS not initialized.\n\nRun 'openclaw jacs init' to set up.",
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
const config = api.config;
|
|
72
|
+
let jacsConfig = {};
|
|
73
|
+
let configParseError = null;
|
|
74
|
+
try {
|
|
75
|
+
jacsConfig = JSON.parse(fs.readFileSync(configPath, "utf-8"));
|
|
76
|
+
}
|
|
77
|
+
catch (err) {
|
|
78
|
+
configParseError = err.message;
|
|
79
|
+
}
|
|
80
|
+
const pubKeyPath = path.join(keysDir, "agent.public.pem");
|
|
81
|
+
const publicKeyExists = fs.existsSync(pubKeyPath);
|
|
82
|
+
const publicKeyHash = publicKeyExists
|
|
83
|
+
? (0, jacs_1.hashString)(fs.readFileSync(pubKeyPath, "utf-8"))
|
|
84
|
+
: "N/A";
|
|
85
|
+
const statusLines = [
|
|
86
|
+
`JACS Status: Active`,
|
|
87
|
+
``,
|
|
88
|
+
`Agent ID: ${config.agentId || jacsConfig.jacs_agent_id_and_version?.split(":")[0] || "Unknown"}`,
|
|
89
|
+
`Algorithm: ${config.keyAlgorithm || jacsConfig.jacs_agent_key_algorithm || "Unknown"}`,
|
|
90
|
+
`Name: ${config.agentName || "Not set"}`,
|
|
91
|
+
`Description: ${config.agentDescription || "Not set"}`,
|
|
92
|
+
`Domain: ${config.agentDomain || "Not set"}`,
|
|
93
|
+
``,
|
|
94
|
+
`Keys:`,
|
|
95
|
+
` Public Key: ${publicKeyExists ? "Present" : "Missing"}`,
|
|
96
|
+
` Public Key Hash: ${publicKeyHash.substring(0, 32)}...`,
|
|
97
|
+
` Private Key: ${fs.existsSync(path.join(keysDir, "agent.private.pem.enc")) ? "Encrypted" : "Missing"}`,
|
|
98
|
+
``,
|
|
99
|
+
`Config Path: ${configPath}`,
|
|
100
|
+
];
|
|
101
|
+
if (configParseError) {
|
|
102
|
+
statusLines.push(``, `Warning: Could not parse config file: ${configParseError}`);
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
text: statusLines.join("\n"),
|
|
106
|
+
error: configParseError || undefined,
|
|
107
|
+
};
|
|
108
|
+
},
|
|
109
|
+
},
|
|
110
|
+
sign: {
|
|
111
|
+
description: "Sign a document with JACS",
|
|
112
|
+
args: ["<file>"],
|
|
113
|
+
handler: async (args) => {
|
|
114
|
+
const agent = api.runtime.jacs?.getAgent();
|
|
115
|
+
if (!agent) {
|
|
116
|
+
return { text: "JACS not initialized. Run 'openclaw jacs init' first." };
|
|
117
|
+
}
|
|
118
|
+
const filePath = args.file || args._?.[0];
|
|
119
|
+
if (!filePath) {
|
|
120
|
+
return { text: "Usage: openclaw jacs sign <file>", error: "Missing file argument" };
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
124
|
+
let document;
|
|
125
|
+
try {
|
|
126
|
+
document = JSON.parse(content);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
// If not JSON, wrap as text document
|
|
130
|
+
document = { content, type: "text" };
|
|
131
|
+
}
|
|
132
|
+
const signed = agent.signRequest(document);
|
|
133
|
+
const parsed = JSON.parse(signed);
|
|
134
|
+
return {
|
|
135
|
+
text: JSON.stringify(parsed, null, 2),
|
|
136
|
+
data: parsed,
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
return {
|
|
141
|
+
text: `Failed to sign document: ${err.message}`,
|
|
142
|
+
error: err.message,
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
verify: {
|
|
148
|
+
description: "Verify a JACS-signed document",
|
|
149
|
+
args: ["<file>"],
|
|
150
|
+
handler: async (args) => {
|
|
151
|
+
const agent = api.runtime.jacs?.getAgent();
|
|
152
|
+
if (!agent) {
|
|
153
|
+
return { text: "JACS not initialized. Run 'openclaw jacs init' first." };
|
|
154
|
+
}
|
|
155
|
+
const filePath = args.file || args._?.[0];
|
|
156
|
+
if (!filePath) {
|
|
157
|
+
return { text: "Usage: openclaw jacs verify <file>", error: "Missing file argument" };
|
|
158
|
+
}
|
|
159
|
+
try {
|
|
160
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
161
|
+
const result = agent.verifyResponse(content);
|
|
162
|
+
if (result.error) {
|
|
163
|
+
return {
|
|
164
|
+
text: `Verification failed: ${result.error}`,
|
|
165
|
+
data: result,
|
|
166
|
+
error: result.error,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
text: `Signature verified!
|
|
171
|
+
|
|
172
|
+
Signer: ${result.jacsId || "Unknown"}
|
|
173
|
+
Valid: Yes`,
|
|
174
|
+
data: result,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
return {
|
|
179
|
+
text: `Verification failed: ${err.message}`,
|
|
180
|
+
error: err.message,
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
},
|
|
185
|
+
hash: {
|
|
186
|
+
description: "Hash a string using JACS",
|
|
187
|
+
args: ["<string>"],
|
|
188
|
+
handler: async (args) => {
|
|
189
|
+
const input = args.string || args._?.join(" ");
|
|
190
|
+
if (!input) {
|
|
191
|
+
return { text: "Usage: openclaw jacs hash <string>", error: "Missing input" };
|
|
192
|
+
}
|
|
193
|
+
const hash = (0, jacs_1.hashString)(input);
|
|
194
|
+
return {
|
|
195
|
+
text: hash,
|
|
196
|
+
data: { input, hash },
|
|
197
|
+
};
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
"dns-record": {
|
|
201
|
+
description: "Generate DNS TXT record for agent discovery",
|
|
202
|
+
args: ["<domain>"],
|
|
203
|
+
handler: async (args) => {
|
|
204
|
+
if (!api.runtime.jacs?.isInitialized()) {
|
|
205
|
+
return { text: "JACS not initialized. Run 'openclaw jacs init' first." };
|
|
206
|
+
}
|
|
207
|
+
const domain = args.domain || args._?.[0];
|
|
208
|
+
if (!domain) {
|
|
209
|
+
return { text: "Usage: openclaw jacs dns-record <domain>", error: "Missing domain" };
|
|
210
|
+
}
|
|
211
|
+
try {
|
|
212
|
+
const config = api.config;
|
|
213
|
+
const pubKeyPath = path.join(keysDir, "agent.public.pem");
|
|
214
|
+
if (!fs.existsSync(pubKeyPath)) {
|
|
215
|
+
return { text: "Public key not found.", error: "Missing public key" };
|
|
216
|
+
}
|
|
217
|
+
const publicKey = fs.readFileSync(pubKeyPath, "utf-8");
|
|
218
|
+
const publicKeyHash = (0, jacs_1.hashString)(publicKey);
|
|
219
|
+
const agentId = config.agentId || "unknown";
|
|
220
|
+
const txtRecord = `v=hai.ai; jacs_agent_id=${agentId}; alg=SHA-256; enc=hex; jac_public_key_hash=${publicKeyHash}`;
|
|
221
|
+
const recordOwner = `_v1.agent.jacs.${domain}.`;
|
|
222
|
+
return {
|
|
223
|
+
text: `DNS TXT Record for ${domain}
|
|
224
|
+
|
|
225
|
+
Record Owner: ${recordOwner}
|
|
226
|
+
Record Type: TXT
|
|
227
|
+
TTL: 3600
|
|
228
|
+
Content:
|
|
229
|
+
${txtRecord}
|
|
230
|
+
|
|
231
|
+
Add this record to your DNS provider to enable agent discovery via DNSSEC.`,
|
|
232
|
+
data: {
|
|
233
|
+
owner: recordOwner,
|
|
234
|
+
type: "TXT",
|
|
235
|
+
ttl: 3600,
|
|
236
|
+
content: txtRecord,
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
catch (err) {
|
|
241
|
+
return {
|
|
242
|
+
text: `Failed to generate DNS record: ${err.message}`,
|
|
243
|
+
error: err.message,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
},
|
|
247
|
+
},
|
|
248
|
+
lookup: {
|
|
249
|
+
description: "Look up another agent's public key and DNS info",
|
|
250
|
+
args: ["<domain>"],
|
|
251
|
+
handler: async (args) => {
|
|
252
|
+
const domain = args.domain || args._?.[0];
|
|
253
|
+
if (!domain) {
|
|
254
|
+
return { text: "Usage: openclaw jacs lookup <domain>", error: "Missing domain" };
|
|
255
|
+
}
|
|
256
|
+
const results = [`Agent Lookup: ${domain}`, ""];
|
|
257
|
+
// Fetch public key from well-known endpoint
|
|
258
|
+
results.push("Public Key (/.well-known/jacs-pubkey.json):");
|
|
259
|
+
const keyResult = await (0, tools_1.fetchPublicKey)(domain, true); // skip cache for fresh lookup
|
|
260
|
+
if ("error" in keyResult) {
|
|
261
|
+
results.push(` Error: ${keyResult.error}`);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
const key = keyResult.data;
|
|
265
|
+
results.push(` Agent ID: ${key.agentId || "Not specified"}`);
|
|
266
|
+
results.push(` Algorithm: ${key.algorithm}`);
|
|
267
|
+
results.push(` Public Key Hash: ${key.publicKeyHash || "Not specified"}`);
|
|
268
|
+
results.push(` Public Key: ${key.key.substring(0, 60)}...`);
|
|
269
|
+
}
|
|
270
|
+
results.push("");
|
|
271
|
+
// Resolve DNS TXT record
|
|
272
|
+
results.push(`DNS TXT Record (_v1.agent.jacs.${domain}):`);
|
|
273
|
+
const dnsResult = await (0, tools_1.resolveDnsRecord)(domain);
|
|
274
|
+
if (!dnsResult) {
|
|
275
|
+
results.push(" No DNS TXT record found (or DNS resolution failed)");
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
const parsed = dnsResult.parsed;
|
|
279
|
+
results.push(` Version: ${parsed.v || "N/A"}`);
|
|
280
|
+
results.push(` Agent ID: ${parsed.jacsAgentId || "N/A"}`);
|
|
281
|
+
results.push(` Algorithm: ${parsed.alg || "N/A"}`);
|
|
282
|
+
results.push(` Encoding: ${parsed.enc || "N/A"}`);
|
|
283
|
+
results.push(` Public Key Hash: ${parsed.publicKeyHash || "N/A"}`);
|
|
284
|
+
results.push(` Raw TXT: ${dnsResult.txt}`);
|
|
285
|
+
// Verify DNS hash matches well-known key hash
|
|
286
|
+
if (!("error" in keyResult) && keyResult.data.publicKeyHash && parsed.publicKeyHash) {
|
|
287
|
+
const matches = keyResult.data.publicKeyHash === parsed.publicKeyHash;
|
|
288
|
+
results.push("");
|
|
289
|
+
results.push(`DNS Verification: ${matches ? "PASSED" : "FAILED"} (well-known hash matches DNS hash)`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return {
|
|
293
|
+
text: results.join("\n"),
|
|
294
|
+
data: {
|
|
295
|
+
domain,
|
|
296
|
+
publicKey: "error" in keyResult ? null : keyResult.data,
|
|
297
|
+
dns: dnsResult,
|
|
298
|
+
},
|
|
299
|
+
};
|
|
300
|
+
},
|
|
301
|
+
},
|
|
302
|
+
register: {
|
|
303
|
+
description: "Register this agent with HAI.ai for attested trust level",
|
|
304
|
+
args: ["[--api-key <key>]", "[--preview]"],
|
|
305
|
+
handler: async (args) => {
|
|
306
|
+
if (!api.runtime.jacs?.isInitialized()) {
|
|
307
|
+
return { text: "JACS not initialized. Run 'openclaw jacs init' first." };
|
|
308
|
+
}
|
|
309
|
+
const config = api.config;
|
|
310
|
+
const preview = args.preview || args.p;
|
|
311
|
+
// Get public key
|
|
312
|
+
const pubKeyPath = path.join(keysDir, "agent.public.pem");
|
|
313
|
+
if (!fs.existsSync(pubKeyPath)) {
|
|
314
|
+
return { text: "Public key not found.", error: "Missing public key" };
|
|
315
|
+
}
|
|
316
|
+
const publicKey = fs.readFileSync(pubKeyPath, "utf-8");
|
|
317
|
+
const publicKeyHash = (0, jacs_1.hashString)(publicKey);
|
|
318
|
+
const agentId = config.agentId;
|
|
319
|
+
if (!agentId) {
|
|
320
|
+
return { text: "Agent ID not configured.", error: "Missing agent ID" };
|
|
321
|
+
}
|
|
322
|
+
if (preview) {
|
|
323
|
+
return {
|
|
324
|
+
text: `HAI.ai Registration Preview
|
|
325
|
+
|
|
326
|
+
Agent ID: ${agentId}
|
|
327
|
+
Name: ${config.agentName || "Not set"}
|
|
328
|
+
Public Key Hash: ${publicKeyHash.substring(0, 32)}...
|
|
329
|
+
|
|
330
|
+
To complete registration, run without --preview flag.
|
|
331
|
+
Requires HAI_API_KEY environment variable or --api-key argument.`,
|
|
332
|
+
data: { agentId, agentName: config.agentName, publicKeyHash },
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
const apiKey = args.apiKey || args["api-key"] || process.env.HAI_API_KEY;
|
|
336
|
+
if (!apiKey) {
|
|
337
|
+
return {
|
|
338
|
+
text: "API key required. Set HAI_API_KEY environment variable or use --api-key.",
|
|
339
|
+
error: "Missing API key",
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
try {
|
|
343
|
+
const result = await (0, hai_1.registerWithHai)(agentId, publicKey, publicKeyHash, config.agentName, apiKey);
|
|
344
|
+
// Update config with verification claim
|
|
345
|
+
api.updateConfig({ verificationClaim: "verified-hai.ai" });
|
|
346
|
+
return {
|
|
347
|
+
text: `HAI.ai Registration Successful!
|
|
348
|
+
|
|
349
|
+
Agent ID: ${result.agent_id}
|
|
350
|
+
Verified: ${result.verified}
|
|
351
|
+
Verified At: ${result.verified_at}
|
|
352
|
+
Registration Type: ${result.registration_type}
|
|
353
|
+
|
|
354
|
+
Your agent is now registered with HAI.ai and has 'attested' trust level.`,
|
|
355
|
+
data: result,
|
|
356
|
+
};
|
|
357
|
+
}
|
|
358
|
+
catch (err) {
|
|
359
|
+
return {
|
|
360
|
+
text: `Registration failed: ${err.message}`,
|
|
361
|
+
error: err.message,
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
},
|
|
365
|
+
},
|
|
366
|
+
attestation: {
|
|
367
|
+
description: "Check attestation status for this agent or another agent",
|
|
368
|
+
args: ["[domain]"],
|
|
369
|
+
handler: async (args) => {
|
|
370
|
+
const domain = args.domain || args._?.[0];
|
|
371
|
+
if (!domain) {
|
|
372
|
+
// Check own attestation
|
|
373
|
+
if (!api.runtime.jacs?.isInitialized()) {
|
|
374
|
+
return { text: "JACS not initialized. Run 'openclaw jacs init' first." };
|
|
375
|
+
}
|
|
376
|
+
const config = api.config;
|
|
377
|
+
const pubKeyPath = path.join(keysDir, "agent.public.pem");
|
|
378
|
+
const publicKey = fs.existsSync(pubKeyPath)
|
|
379
|
+
? fs.readFileSync(pubKeyPath, "utf-8")
|
|
380
|
+
: null;
|
|
381
|
+
const publicKeyHash = publicKey ? (0, jacs_1.hashString)(publicKey) : null;
|
|
382
|
+
// Check DNS verification
|
|
383
|
+
let dnsVerified = false;
|
|
384
|
+
if (config.agentDomain) {
|
|
385
|
+
const dnsResult = await (0, tools_1.resolveDnsRecord)(config.agentDomain);
|
|
386
|
+
if (dnsResult && publicKeyHash) {
|
|
387
|
+
dnsVerified = dnsResult.parsed.publicKeyHash === publicKeyHash;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
// Check HAI.ai registration
|
|
391
|
+
let haiRegistered = false;
|
|
392
|
+
let haiStatus = null;
|
|
393
|
+
if (config.agentId && publicKeyHash) {
|
|
394
|
+
try {
|
|
395
|
+
haiStatus = await (0, hai_1.checkHaiStatus)(config.agentId);
|
|
396
|
+
haiRegistered = haiStatus?.verified ?? false;
|
|
397
|
+
}
|
|
398
|
+
catch {
|
|
399
|
+
// Not registered
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
const trustLevel = (0, hai_1.determineTrustLevel)(!!config.agentDomain, dnsVerified, haiRegistered);
|
|
403
|
+
const lines = [
|
|
404
|
+
`Attestation Status for This Agent`,
|
|
405
|
+
``,
|
|
406
|
+
`Agent ID: ${config.agentId || "Unknown"}`,
|
|
407
|
+
`Trust Level: ${trustLevel.toUpperCase()}`,
|
|
408
|
+
`Verification Claim: ${config.verificationClaim || "unverified"}`,
|
|
409
|
+
``,
|
|
410
|
+
`Domain: ${config.agentDomain || "Not configured"}`,
|
|
411
|
+
`DNS Verified: ${config.agentDomain ? (dnsVerified ? "Yes" : "No") : "N/A"}`,
|
|
412
|
+
`HAI.ai Registered: ${haiRegistered ? "Yes" : "No"}`,
|
|
413
|
+
];
|
|
414
|
+
if (haiStatus) {
|
|
415
|
+
lines.push(`HAI.ai Verified At: ${haiStatus.verified_at || "N/A"}`);
|
|
416
|
+
}
|
|
417
|
+
return {
|
|
418
|
+
text: lines.join("\n"),
|
|
419
|
+
data: {
|
|
420
|
+
agentId: config.agentId,
|
|
421
|
+
trustLevel,
|
|
422
|
+
verificationClaim: config.verificationClaim || "unverified",
|
|
423
|
+
domain: config.agentDomain,
|
|
424
|
+
dnsVerified,
|
|
425
|
+
haiRegistered,
|
|
426
|
+
haiStatus,
|
|
427
|
+
},
|
|
428
|
+
};
|
|
429
|
+
}
|
|
430
|
+
// Check external agent by domain
|
|
431
|
+
const results = [`Attestation Status for ${domain}`, ""];
|
|
432
|
+
// Fetch public key
|
|
433
|
+
const keyResult = await (0, tools_1.fetchPublicKey)(domain, true);
|
|
434
|
+
if ("error" in keyResult) {
|
|
435
|
+
return {
|
|
436
|
+
text: `Could not fetch public key from ${domain}: ${keyResult.error}`,
|
|
437
|
+
error: keyResult.error,
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
const publicKeyHash = keyResult.data.publicKeyHash || (0, jacs_1.hashString)(keyResult.data.key);
|
|
441
|
+
const agentId = keyResult.data.agentId;
|
|
442
|
+
results.push(`Agent ID: ${agentId || "Unknown"}`);
|
|
443
|
+
// Check DNS
|
|
444
|
+
const dnsResult = await (0, tools_1.resolveDnsRecord)(domain);
|
|
445
|
+
let dnsVerified = false;
|
|
446
|
+
if (dnsResult) {
|
|
447
|
+
dnsVerified = dnsResult.parsed.publicKeyHash === publicKeyHash;
|
|
448
|
+
}
|
|
449
|
+
results.push(`DNS Verified: ${dnsVerified ? "Yes" : "No"}`);
|
|
450
|
+
// Check HAI.ai
|
|
451
|
+
let haiRegistered = false;
|
|
452
|
+
let haiStatus = null;
|
|
453
|
+
if (agentId && publicKeyHash) {
|
|
454
|
+
try {
|
|
455
|
+
haiStatus = await (0, hai_1.verifyHaiRegistration)(agentId, publicKeyHash);
|
|
456
|
+
haiRegistered = haiStatus.verified;
|
|
457
|
+
}
|
|
458
|
+
catch {
|
|
459
|
+
// Not registered
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
results.push(`HAI.ai Registered: ${haiRegistered ? "Yes" : "No"}`);
|
|
463
|
+
const trustLevel = (0, hai_1.determineTrustLevel)(true, dnsVerified, haiRegistered);
|
|
464
|
+
results.push("");
|
|
465
|
+
results.push(`Trust Level: ${trustLevel.toUpperCase()}`);
|
|
466
|
+
if (haiStatus) {
|
|
467
|
+
results.push(`HAI.ai Verified At: ${haiStatus.verified_at || "N/A"}`);
|
|
468
|
+
results.push(`Registration Type: ${haiStatus.registration_type || "N/A"}`);
|
|
469
|
+
}
|
|
470
|
+
return {
|
|
471
|
+
text: results.join("\n"),
|
|
472
|
+
data: {
|
|
473
|
+
domain,
|
|
474
|
+
agentId,
|
|
475
|
+
trustLevel,
|
|
476
|
+
dnsVerified,
|
|
477
|
+
haiRegistered,
|
|
478
|
+
haiStatus,
|
|
479
|
+
},
|
|
480
|
+
};
|
|
481
|
+
},
|
|
482
|
+
},
|
|
483
|
+
claim: {
|
|
484
|
+
description: "Set or view verification claim level",
|
|
485
|
+
args: ["[level]"],
|
|
486
|
+
handler: async (args) => {
|
|
487
|
+
if (!api.runtime.jacs?.isInitialized()) {
|
|
488
|
+
return { text: "JACS not initialized. Run 'openclaw jacs init' first." };
|
|
489
|
+
}
|
|
490
|
+
const config = api.config;
|
|
491
|
+
const level = args.level || args._?.[0];
|
|
492
|
+
const pubKeyPath = path.join(keysDir, "agent.public.pem");
|
|
493
|
+
const publicKey = fs.existsSync(pubKeyPath)
|
|
494
|
+
? fs.readFileSync(pubKeyPath, "utf-8")
|
|
495
|
+
: null;
|
|
496
|
+
const publicKeyHash = publicKey ? (0, jacs_1.hashString)(publicKey) : null;
|
|
497
|
+
const proof = {
|
|
498
|
+
domain: config.agentDomain,
|
|
499
|
+
domainConfigured: !!config.agentDomain,
|
|
500
|
+
dnsRecordFound: false,
|
|
501
|
+
dnsVerified: false,
|
|
502
|
+
dnsHash: undefined,
|
|
503
|
+
publicKeyHash: publicKeyHash || undefined,
|
|
504
|
+
haiChecked: false,
|
|
505
|
+
haiRegistered: false,
|
|
506
|
+
haiVerifiedAt: undefined,
|
|
507
|
+
};
|
|
508
|
+
if (config.agentDomain) {
|
|
509
|
+
const dnsResult = await (0, tools_1.resolveDnsRecord)(config.agentDomain);
|
|
510
|
+
if (dnsResult) {
|
|
511
|
+
proof.dnsRecordFound = true;
|
|
512
|
+
proof.dnsHash = dnsResult.parsed.publicKeyHash;
|
|
513
|
+
if (publicKeyHash && dnsResult.parsed.publicKeyHash) {
|
|
514
|
+
proof.dnsVerified = dnsResult.parsed.publicKeyHash === publicKeyHash;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
const targetClaim = level || (config.verificationClaim || "unverified");
|
|
519
|
+
if (config.agentId && targetClaim === "verified-hai.ai") {
|
|
520
|
+
proof.haiChecked = true;
|
|
521
|
+
try {
|
|
522
|
+
const status = await (0, hai_1.checkHaiStatus)(config.agentId);
|
|
523
|
+
proof.haiRegistered = status?.verified ?? false;
|
|
524
|
+
proof.haiVerifiedAt = status?.verified_at;
|
|
525
|
+
}
|
|
526
|
+
catch {
|
|
527
|
+
// Not registered or unreachable
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
const proofLines = [
|
|
531
|
+
` Domain Configured: ${proof.domainConfigured ? "Yes" : "No"}`,
|
|
532
|
+
` DNS Record Found: ${proof.dnsRecordFound ? "Yes" : "No"}`,
|
|
533
|
+
` DNS Hash Verified: ${proof.dnsVerified ? "Yes" : "No"}`,
|
|
534
|
+
` HAI.ai Registered: ${proof.haiChecked ? (proof.haiRegistered ? "Yes" : "No") : "Not checked"}`,
|
|
535
|
+
];
|
|
536
|
+
if (!level) {
|
|
537
|
+
// Show current claim
|
|
538
|
+
return {
|
|
539
|
+
text: `Current Verification Claim: ${config.verificationClaim || "unverified"}
|
|
540
|
+
|
|
541
|
+
Verification Proof:
|
|
542
|
+
${proofLines.join("\n")}
|
|
543
|
+
|
|
544
|
+
Available levels:
|
|
545
|
+
- unverified: Basic self-signed agent (no requirements)
|
|
546
|
+
- verified: Domain-verified agent (requires domain + DNS TXT record hash match)
|
|
547
|
+
- verified-hai.ai: HAI.ai attested agent (requires HAI.ai registration)
|
|
548
|
+
|
|
549
|
+
Usage: openclaw jacs claim <level>`,
|
|
550
|
+
data: { currentClaim: config.verificationClaim || "unverified", proof },
|
|
551
|
+
};
|
|
552
|
+
}
|
|
553
|
+
// Validate level
|
|
554
|
+
const validLevels = ["unverified", "verified", "verified-hai.ai"];
|
|
555
|
+
if (!validLevels.includes(level)) {
|
|
556
|
+
return {
|
|
557
|
+
text: `Invalid claim level: ${level}. Valid options: ${validLevels.join(", ")}`,
|
|
558
|
+
error: "Invalid claim level",
|
|
559
|
+
};
|
|
560
|
+
}
|
|
561
|
+
const newClaim = level;
|
|
562
|
+
const currentClaim = config.verificationClaim || "unverified";
|
|
563
|
+
// Check if downgrade
|
|
564
|
+
if (!(0, hai_1.canUpgradeClaim)(currentClaim, newClaim)) {
|
|
565
|
+
return {
|
|
566
|
+
text: `Cannot downgrade verification claim from '${currentClaim}' to '${newClaim}'`,
|
|
567
|
+
error: "Claim downgrade not allowed",
|
|
568
|
+
};
|
|
569
|
+
}
|
|
570
|
+
const validationError = (0, hai_1.validateClaimRequirements)(newClaim, proof.domainConfigured, proof.dnsVerified, proof.haiRegistered);
|
|
571
|
+
if (validationError) {
|
|
572
|
+
return {
|
|
573
|
+
text: `Cannot set claim to '${newClaim}': ${validationError}
|
|
574
|
+
|
|
575
|
+
Verification Proof:
|
|
576
|
+
${proofLines.join("\n")}`,
|
|
577
|
+
error: validationError,
|
|
578
|
+
};
|
|
579
|
+
}
|
|
580
|
+
// Update config
|
|
581
|
+
api.updateConfig({ verificationClaim: newClaim });
|
|
582
|
+
return {
|
|
583
|
+
text: `Verification claim updated: ${currentClaim} -> ${newClaim}
|
|
584
|
+
|
|
585
|
+
Verification Proof:
|
|
586
|
+
${proofLines.join("\n")}`,
|
|
587
|
+
data: { previousClaim: currentClaim, newClaim, proof },
|
|
588
|
+
};
|
|
589
|
+
},
|
|
590
|
+
},
|
|
591
|
+
};
|
|
592
|
+
}
|
|
593
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* JACS Gateway Methods
|
|
3
|
+
*
|
|
4
|
+
* Serves .well-known endpoints for JACS agent discovery.
|
|
5
|
+
*/
|
|
6
|
+
import type { OpenClawPluginAPI } from "../index";
|
|
7
|
+
export interface GatewayRequest {
|
|
8
|
+
method: string;
|
|
9
|
+
path: string;
|
|
10
|
+
body?: any;
|
|
11
|
+
headers?: Record<string, string>;
|
|
12
|
+
query?: Record<string, string>;
|
|
13
|
+
}
|
|
14
|
+
export interface GatewayResponse {
|
|
15
|
+
status: (code: number) => GatewayResponse;
|
|
16
|
+
json: (data: any) => void;
|
|
17
|
+
send: (data: string) => void;
|
|
18
|
+
setHeader: (name: string, value: string) => void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Register gateway methods for well-known endpoints
|
|
22
|
+
*/
|
|
23
|
+
export declare function registerGatewayMethods(api: OpenClawPluginAPI): void;
|
|
24
|
+
//# sourceMappingURL=wellknown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wellknown.d.ts","sourceRoot":"","sources":["../../src/gateway/wellknown.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAiC,MAAM,UAAU,CAAC;AAIjF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,eAAe,CAAC;IAC1C,IAAI,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IAC1B,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAClD;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,iBAAiB,GAAG,IAAI,CA+KnE"}
|