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.
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ /**
3
+ * JACS Gateway Methods
4
+ *
5
+ * Serves .well-known endpoints for JACS agent discovery.
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.registerGatewayMethods = registerGatewayMethods;
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
+ * Register gateway methods for well-known endpoints
49
+ */
50
+ function registerGatewayMethods(api) {
51
+ const homeDir = api.runtime.homeDir;
52
+ const keysDir = path.join(homeDir, ".openclaw", "jacs_keys");
53
+ // Serve /.well-known/jacs-pubkey.json
54
+ api.registerGatewayMethod({
55
+ method: "GET",
56
+ path: "/.well-known/jacs-pubkey.json",
57
+ handler: async (req, res) => {
58
+ if (!api.runtime.jacs?.isInitialized()) {
59
+ res.status(503).json({
60
+ error: "JACS not initialized",
61
+ message: "Run 'openclaw jacs init' to configure JACS",
62
+ });
63
+ return;
64
+ }
65
+ try {
66
+ const config = api.config;
67
+ const publicKeyPath = path.join(keysDir, "agent.public.pem");
68
+ if (!fs.existsSync(publicKeyPath)) {
69
+ res.status(404).json({ error: "Public key not found" });
70
+ return;
71
+ }
72
+ const publicKey = fs.readFileSync(publicKeyPath, "utf-8");
73
+ const publicKeyHash = (0, jacs_1.hashString)(publicKey);
74
+ res.setHeader("Content-Type", "application/json");
75
+ res.setHeader("Cache-Control", "public, max-age=3600");
76
+ res.json({
77
+ publicKey,
78
+ publicKeyHash,
79
+ algorithm: config.keyAlgorithm || "pq2025",
80
+ agentId: config.agentId,
81
+ agentName: config.agentName,
82
+ agentDomain: config.agentDomain,
83
+ verificationClaim: config.verificationClaim || "unverified",
84
+ timestamp: new Date().toISOString(),
85
+ });
86
+ }
87
+ catch (err) {
88
+ api.logger.error(`Failed to serve public key: ${err.message}`);
89
+ res.status(500).json({ error: err.message });
90
+ }
91
+ },
92
+ });
93
+ // POST /jacs/verify - Public verification endpoint
94
+ api.registerGatewayMethod({
95
+ method: "POST",
96
+ path: "/jacs/verify",
97
+ handler: async (req, res) => {
98
+ if (!api.runtime.jacs?.isInitialized()) {
99
+ res.status(503).json({ error: "JACS not initialized" });
100
+ return;
101
+ }
102
+ try {
103
+ if (!req.body) {
104
+ res.status(400).json({ error: "Request body required" });
105
+ return;
106
+ }
107
+ const agent = api.runtime.jacs?.getAgent();
108
+ if (!agent) {
109
+ res.status(503).json({ error: "JACS not initialized" });
110
+ return;
111
+ }
112
+ const result = agent.verifyResponse(JSON.stringify(req.body));
113
+ res.json(result);
114
+ }
115
+ catch (err) {
116
+ res.status(400).json({ error: err.message });
117
+ }
118
+ },
119
+ });
120
+ // NOTE: No external signing endpoint is exposed.
121
+ // Signing MUST only happen internally by the agent itself.
122
+ // External signing would compromise the agent's identity.
123
+ // GET /jacs/status - Health check endpoint
124
+ api.registerGatewayMethod({
125
+ method: "GET",
126
+ path: "/jacs/status",
127
+ handler: async (req, res) => {
128
+ const config = api.config;
129
+ const initialized = api.runtime.jacs?.isInitialized() || false;
130
+ res.json({
131
+ initialized,
132
+ agentId: config.agentId || null,
133
+ algorithm: config.keyAlgorithm || null,
134
+ verificationClaim: config.verificationClaim || "unverified",
135
+ timestamp: new Date().toISOString(),
136
+ });
137
+ },
138
+ });
139
+ // GET /jacs/attestation - Full attestation status endpoint
140
+ api.registerGatewayMethod({
141
+ method: "GET",
142
+ path: "/jacs/attestation",
143
+ handler: async (req, res) => {
144
+ if (!api.runtime.jacs?.isInitialized()) {
145
+ res.status(503).json({
146
+ error: "JACS not initialized",
147
+ message: "Run 'openclaw jacs init' to configure JACS",
148
+ });
149
+ return;
150
+ }
151
+ try {
152
+ const config = api.config;
153
+ const publicKeyPath = path.join(keysDir, "agent.public.pem");
154
+ if (!fs.existsSync(publicKeyPath)) {
155
+ res.status(404).json({ error: "Public key not found" });
156
+ return;
157
+ }
158
+ const publicKey = fs.readFileSync(publicKeyPath, "utf-8");
159
+ const publicKeyHash = (0, jacs_1.hashString)(publicKey);
160
+ // Check DNS verification
161
+ let dnsVerified = false;
162
+ if (config.agentDomain) {
163
+ try {
164
+ const dnsResult = await (0, tools_1.resolveDnsRecord)(config.agentDomain);
165
+ if (dnsResult) {
166
+ dnsVerified = dnsResult.parsed.publicKeyHash === publicKeyHash;
167
+ }
168
+ }
169
+ catch {
170
+ // DNS check failed
171
+ }
172
+ }
173
+ // Check HAI.ai registration
174
+ let haiRegistered = false;
175
+ let haiRegistration = null;
176
+ if (config.agentId) {
177
+ try {
178
+ haiRegistration = await (0, hai_1.checkHaiStatus)(config.agentId);
179
+ haiRegistered = haiRegistration?.verified ?? false;
180
+ }
181
+ catch {
182
+ // HAI.ai check failed
183
+ }
184
+ }
185
+ const trustLevel = (0, hai_1.determineTrustLevel)(!!config.agentDomain, dnsVerified, haiRegistered);
186
+ const status = {
187
+ agentId: config.agentId || "",
188
+ trustLevel,
189
+ verificationClaim: config.verificationClaim || "unverified",
190
+ domain: config.agentDomain,
191
+ haiRegistration,
192
+ dnsVerified,
193
+ timestamp: new Date().toISOString(),
194
+ };
195
+ res.setHeader("Content-Type", "application/json");
196
+ res.setHeader("Cache-Control", "public, max-age=60");
197
+ res.json(status);
198
+ }
199
+ catch (err) {
200
+ api.logger.error(`Failed to get attestation status: ${err.message}`);
201
+ res.status(500).json({ error: err.message });
202
+ }
203
+ },
204
+ });
205
+ }
206
+ //# sourceMappingURL=wellknown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wellknown.js","sourceRoot":"","sources":["../../src/gateway/wellknown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * JACS OpenClaw Plugin
3
+ *
4
+ * Provides post-quantum cryptographic signatures for agent communications.
5
+ *
6
+ * Core Features:
7
+ * - Key generation and secure storage
8
+ * - Document signing and verification
9
+ * - Public key endpoint for discovery
10
+ */
11
+ import { JacsAgent } from "@hai.ai/jacs";
12
+ import * as fs from "fs";
13
+ export type TrustLevel = "basic" | "domain" | "attested";
14
+ export type VerificationClaim = "unverified" | "verified" | "verified-hai.ai";
15
+ export interface HaiRegistration {
16
+ verified: boolean;
17
+ verified_at?: string;
18
+ registration_type: string;
19
+ agent_id: string;
20
+ public_key_hash: string;
21
+ }
22
+ export interface AttestationStatus {
23
+ agentId: string;
24
+ trustLevel: TrustLevel;
25
+ verificationClaim: VerificationClaim;
26
+ domain?: string;
27
+ haiRegistration?: HaiRegistration | null;
28
+ dnsVerified?: boolean;
29
+ timestamp: string;
30
+ }
31
+ export interface JACSPluginConfig {
32
+ keyAlgorithm: string;
33
+ autoSign: boolean;
34
+ autoVerify: boolean;
35
+ agentName?: string;
36
+ agentDescription?: string;
37
+ agentDomain?: string;
38
+ agentId?: string;
39
+ verificationClaim?: VerificationClaim;
40
+ haiApiUrl?: string;
41
+ }
42
+ export interface OpenClawPluginAPI {
43
+ config: JACSPluginConfig;
44
+ logger: {
45
+ info: (msg: string) => void;
46
+ warn: (msg: string) => void;
47
+ error: (msg: string) => void;
48
+ debug: (msg: string) => void;
49
+ };
50
+ runtime: {
51
+ homeDir: string;
52
+ fs: typeof fs;
53
+ jacs?: JACSRuntime;
54
+ };
55
+ registerCli: (opts: any) => void;
56
+ registerCommand: (opts: any) => void;
57
+ registerTool: (opts: any) => void;
58
+ registerGatewayMethod: (opts: any) => void;
59
+ updateConfig: (update: Partial<JACSPluginConfig>) => void;
60
+ invoke: (command: string, args: any) => Promise<any>;
61
+ }
62
+ export interface JACSRuntime {
63
+ isInitialized: () => boolean;
64
+ getAgent: () => JacsAgent | null;
65
+ signDocument: (doc: any) => string;
66
+ verifyDocument: (doc: string) => any;
67
+ getAgentId: () => string | undefined;
68
+ getPublicKey: () => string;
69
+ }
70
+ /**
71
+ * Main plugin registration function called by OpenClaw
72
+ */
73
+ export default function register(api: OpenClawPluginAPI): void;
74
+ export { JacsAgent, hashString, verifyString, createConfig } from "@hai.ai/jacs";
75
+ export declare function setAgentInstance(agent: JacsAgent, agentId: string, publicKey: string): void;
76
+ export { setupCommand } from "./setup";
77
+ export { cliCommands } from "./cli";
78
+ export { registerTools } from "./tools";
79
+ export { registerGatewayMethods } from "./gateway/wellknown";
80
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,150 @@
1
+ "use strict";
2
+ /**
3
+ * JACS OpenClaw Plugin
4
+ *
5
+ * Provides post-quantum cryptographic signatures for agent communications.
6
+ *
7
+ * Core Features:
8
+ * - Key generation and secure storage
9
+ * - Document signing and verification
10
+ * - Public key endpoint for discovery
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.registerGatewayMethods = exports.registerTools = exports.cliCommands = exports.setupCommand = exports.createConfig = exports.verifyString = exports.hashString = exports.JacsAgent = void 0;
47
+ exports.default = register;
48
+ exports.setAgentInstance = setAgentInstance;
49
+ const jacs_1 = require("@hai.ai/jacs");
50
+ const setup_1 = require("./setup");
51
+ const cli_1 = require("./cli");
52
+ const wellknown_1 = require("./gateway/wellknown");
53
+ const tools_1 = require("./tools");
54
+ const path = __importStar(require("path"));
55
+ const fs = __importStar(require("fs"));
56
+ // Agent instance (replaces deprecated global singleton)
57
+ let agentInstance = null;
58
+ let isInitialized = false;
59
+ let currentAgentId;
60
+ let publicKeyContent;
61
+ /**
62
+ * Main plugin registration function called by OpenClaw
63
+ */
64
+ function register(api) {
65
+ const config = api.config;
66
+ const logger = api.logger;
67
+ // Determine JACS directories
68
+ const jacsDir = path.join(api.runtime.homeDir, ".openclaw", "jacs");
69
+ const keysDir = path.join(api.runtime.homeDir, ".openclaw", "jacs_keys");
70
+ const configPath = path.join(jacsDir, "jacs.config.json");
71
+ // Try to initialize JACS if config exists
72
+ if (fs.existsSync(configPath)) {
73
+ try {
74
+ // Use JacsAgent class instead of deprecated global load()
75
+ agentInstance = new jacs_1.JacsAgent();
76
+ agentInstance.load(configPath);
77
+ currentAgentId = config.agentId;
78
+ // Load public key
79
+ const pubKeyPath = path.join(keysDir, "agent.public.pem");
80
+ if (fs.existsSync(pubKeyPath)) {
81
+ publicKeyContent = fs.readFileSync(pubKeyPath, "utf-8");
82
+ }
83
+ isInitialized = true;
84
+ logger.info("JACS initialized successfully");
85
+ }
86
+ catch (err) {
87
+ logger.warn(`JACS not initialized - run 'openclaw jacs init': ${err.message}`);
88
+ agentInstance = null;
89
+ }
90
+ }
91
+ else {
92
+ logger.info("JACS not configured - run 'openclaw jacs init' to set up");
93
+ }
94
+ // Register CLI commands
95
+ api.registerCli({
96
+ name: "jacs",
97
+ description: "JACS cryptographic provenance commands",
98
+ subcommands: (0, cli_1.cliCommands)(api),
99
+ });
100
+ // Register setup/init command
101
+ api.registerCommand({
102
+ name: "jacs-init",
103
+ description: "Initialize JACS with key generation and agent creation",
104
+ handler: (0, setup_1.setupCommand)(api),
105
+ });
106
+ // Register agent tools for AI use
107
+ (0, tools_1.registerTools)(api);
108
+ // Register gateway methods for well-known endpoints
109
+ (0, wellknown_1.registerGatewayMethods)(api);
110
+ // Expose JACS runtime for other plugins
111
+ api.runtime.jacs = {
112
+ isInitialized: () => isInitialized,
113
+ getAgent: () => agentInstance,
114
+ signDocument: (doc) => {
115
+ if (!agentInstance)
116
+ throw new Error("JACS not initialized");
117
+ return agentInstance.signRequest(doc);
118
+ },
119
+ verifyDocument: (doc) => {
120
+ if (!agentInstance)
121
+ throw new Error("JACS not initialized");
122
+ return agentInstance.verifyResponse(doc);
123
+ },
124
+ getAgentId: () => currentAgentId,
125
+ getPublicKey: () => publicKeyContent || "",
126
+ };
127
+ logger.debug("JACS plugin registered");
128
+ }
129
+ // Re-export for use by other modules
130
+ var jacs_2 = require("@hai.ai/jacs");
131
+ Object.defineProperty(exports, "JacsAgent", { enumerable: true, get: function () { return jacs_2.JacsAgent; } });
132
+ Object.defineProperty(exports, "hashString", { enumerable: true, get: function () { return jacs_2.hashString; } });
133
+ Object.defineProperty(exports, "verifyString", { enumerable: true, get: function () { return jacs_2.verifyString; } });
134
+ Object.defineProperty(exports, "createConfig", { enumerable: true, get: function () { return jacs_2.createConfig; } });
135
+ // Export internal state accessor for reinit after setup
136
+ function setAgentInstance(agent, agentId, publicKey) {
137
+ agentInstance = agent;
138
+ currentAgentId = agentId;
139
+ publicKeyContent = publicKey;
140
+ isInitialized = true;
141
+ }
142
+ var setup_2 = require("./setup");
143
+ Object.defineProperty(exports, "setupCommand", { enumerable: true, get: function () { return setup_2.setupCommand; } });
144
+ var cli_2 = require("./cli");
145
+ Object.defineProperty(exports, "cliCommands", { enumerable: true, get: function () { return cli_2.cliCommands; } });
146
+ var tools_2 = require("./tools");
147
+ Object.defineProperty(exports, "registerTools", { enumerable: true, get: function () { return tools_2.registerTools; } });
148
+ var wellknown_2 = require("./gateway/wellknown");
149
+ Object.defineProperty(exports, "registerGatewayMethods", { enumerable: true, get: function () { return wellknown_2.registerGatewayMethods; } });
150
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFH,2BAsEC;AAMD,4CAKC;AAtKD,uCAAiF;AACjF,mCAAuC;AACvC,+BAAoC;AACpC,mDAA6D;AAC7D,mCAAwC;AACxC,2CAA6B;AAC7B,uCAAyB;AAsEzB,wDAAwD;AACxD,IAAI,aAAa,GAAqB,IAAI,CAAC;AAC3C,IAAI,aAAa,GAAG,KAAK,CAAC;AAC1B,IAAI,cAAkC,CAAC;AACvC,IAAI,gBAAoC,CAAC;AAEzC;;GAEG;AACH,SAAwB,QAAQ,CAAC,GAAsB;IACrD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAE1B,6BAA6B;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACzE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAE1D,0CAA0C;IAC1C,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,0DAA0D;YAC1D,aAAa,GAAG,IAAI,gBAAS,EAAE,CAAC;YAChC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC;YAEhC,kBAAkB;YAClB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;YAC1D,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9B,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YAC1D,CAAC;YAED,aAAa,GAAG,IAAI,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,oDAAoD,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YAC/E,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;IAC1E,CAAC;IAED,wBAAwB;IACxB,GAAG,CAAC,WAAW,CAAC;QACd,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,wCAAwC;QACrD,WAAW,EAAE,IAAA,iBAAW,EAAC,GAAG,CAAC;KAC9B,CAAC,CAAC;IAEH,8BAA8B;IAC9B,GAAG,CAAC,eAAe,CAAC;QAClB,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,wDAAwD;QACrE,OAAO,EAAE,IAAA,oBAAY,EAAC,GAAG,CAAC;KAC3B,CAAC,CAAC;IAEH,kCAAkC;IAClC,IAAA,qBAAa,EAAC,GAAG,CAAC,CAAC;IAEnB,oDAAoD;IACpD,IAAA,kCAAsB,EAAC,GAAG,CAAC,CAAC;IAE5B,wCAAwC;IACxC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG;QACjB,aAAa,EAAE,GAAG,EAAE,CAAC,aAAa;QAClC,QAAQ,EAAE,GAAG,EAAE,CAAC,aAAa;QAC7B,YAAY,EAAE,CAAC,GAAQ,EAAE,EAAE;YACzB,IAAI,CAAC,aAAa;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC5D,OAAO,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;QACD,cAAc,EAAE,CAAC,GAAW,EAAE,EAAE;YAC9B,IAAI,CAAC,aAAa;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC5D,OAAO,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC3C,CAAC;QACD,UAAU,EAAE,GAAG,EAAE,CAAC,cAAc;QAChC,YAAY,EAAE,GAAG,EAAE,CAAC,gBAAgB,IAAI,EAAE;KAC3C,CAAC;IAEF,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;AACzC,CAAC;AAED,qCAAqC;AACrC,qCAAiF;AAAxE,iGAAA,SAAS,OAAA;AAAE,kGAAA,UAAU,OAAA;AAAE,oGAAA,YAAY,OAAA;AAAE,oGAAA,YAAY,OAAA;AAE1D,wDAAwD;AACxD,SAAgB,gBAAgB,CAAC,KAAgB,EAAE,OAAe,EAAE,SAAiB;IACnF,aAAa,GAAG,KAAK,CAAC;IACtB,cAAc,GAAG,OAAO,CAAC;IACzB,gBAAgB,GAAG,SAAS,CAAC;IAC7B,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC;AAED,iCAAuC;AAA9B,qGAAA,YAAY,OAAA;AACrB,6BAAoC;AAA3B,kGAAA,WAAW,OAAA;AACpB,iCAAwC;AAA/B,sGAAA,aAAa,OAAA;AACtB,iDAA6D;AAApD,mHAAA,sBAAsB,OAAA"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * JACS Setup Wizard
3
+ *
4
+ * Interactive setup for generating keys and creating agent identity.
5
+ */
6
+ import type { OpenClawPluginAPI } from "./index";
7
+ export interface SetupOptions {
8
+ keyAlgorithm: string;
9
+ agentName: string;
10
+ agentDescription: string;
11
+ agentDomain?: string;
12
+ keyPassword: string;
13
+ generatedPassword: boolean;
14
+ }
15
+ export interface SetupResult {
16
+ text: string;
17
+ agentId?: string;
18
+ configPath?: string;
19
+ error?: string;
20
+ }
21
+ /**
22
+ * Creates the setup command handler
23
+ */
24
+ export declare function setupCommand(api: OpenClawPluginAPI): (ctx: any) => Promise<SetupResult>;
25
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGjD,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,iBAAiB,IACnC,KAAK,GAAG,KAAG,OAAO,CAAC,WAAW,CAAC,CAyI9C"}