arc402-cli 1.4.50 → 1.5.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/dist/commands/chat.d.ts +3 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +561 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +44 -5
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/hermes-init.d.ts +1 -1
- package/dist/commands/hermes-init.js +9 -9
- package/dist/commands/hermes-init.js.map +1 -1
- package/dist/commands/index.d.ts +3 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +74 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/status.d.ts +18 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +141 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/subscription.d.ts +3 -0
- package/dist/commands/subscription.d.ts.map +1 -0
- package/dist/commands/subscription.js +173 -0
- package/dist/commands/subscription.js.map +1 -0
- package/dist/commerce-client.d.ts +77 -0
- package/dist/commerce-client.d.ts.map +1 -0
- package/dist/commerce-client.js +224 -0
- package/dist/commerce-client.js.map +1 -0
- package/dist/commerce-index.d.ts +39 -0
- package/dist/commerce-index.d.ts.map +1 -0
- package/dist/commerce-index.js +294 -0
- package/dist/commerce-index.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/daemon/config.d.ts +1 -0
- package/dist/daemon/config.d.ts.map +1 -1
- package/dist/daemon/config.js +7 -3
- package/dist/daemon/config.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +18 -4
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon-client.d.ts +46 -0
- package/dist/daemon-client.d.ts.map +1 -0
- package/dist/daemon-client.js +80 -0
- package/dist/daemon-client.js.map +1 -0
- package/dist/index.js +40 -34
- package/dist/index.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +8 -0
- package/dist/program.js.map +1 -1
- package/hermes/DELIVERY-SPEC.md +219 -0
- package/hermes/HERMES-INTEGRATION-SPEC.md +338 -0
- package/hermes/plugins/arc402_hermes/__init__.py +5 -0
- package/hermes/plugins/arc402_hermes/plugin.py +489 -0
- package/hermes/plugins/arc402_hermes/py.typed +0 -0
- package/hermes/plugins/arc402_hermes.egg-info/PKG-INFO +24 -0
- package/hermes/plugins/arc402_hermes.egg-info/SOURCES.txt +10 -0
- package/hermes/plugins/arc402_hermes.egg-info/dependency_links.txt +1 -0
- package/hermes/plugins/arc402_hermes.egg-info/entry_points.txt +2 -0
- package/hermes/plugins/arc402_hermes.egg-info/requires.txt +5 -0
- package/hermes/plugins/arc402_hermes.egg-info/top_level.txt +1 -0
- package/hermes/plugins/arc402_plugin.py +489 -0
- package/hermes/plugins/dist/arc402_hermes-1.0.0-py3-none-any.whl +0 -0
- package/hermes/plugins/dist/arc402_hermes-1.0.0.tar.gz +0 -0
- package/hermes/plugins/pyproject.toml +47 -0
- package/hermes/skills/arc402-agent/SKILL.md +559 -0
- package/hermes/workroom/README.md +174 -0
- package/hermes/workroom/hermes-daemon.toml +21 -0
- package/hermes/workroom/hermes-worker/IDENTITY.md +44 -0
- package/hermes/workroom/hermes-worker/SOUL.md +45 -0
- package/hermes/workroom/hermes-worker/config.json +32 -0
- package/hermes/workroom/hermes-worker/datasets/.gitkeep +0 -0
- package/hermes/workroom/hermes-worker/knowledge/.gitkeep +0 -0
- package/hermes/workroom/hermes-worker/memory/learnings.md +9 -0
- package/hermes/workroom/hermes-worker/skills/.gitkeep +0 -0
- package/package.json +9 -3
- package/README.md +0 -288
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmepC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsI1D"}
|
|
@@ -0,0 +1,561 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.registerChatCommand = registerChatCommand;
|
|
40
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const os = __importStar(require("os"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const prompts_1 = __importDefault(require("prompts"));
|
|
45
|
+
const readline_1 = __importDefault(require("readline"));
|
|
46
|
+
const child_process_1 = require("child_process");
|
|
47
|
+
const commerce_client_1 = require("../commerce-client");
|
|
48
|
+
const config_1 = require("../config");
|
|
49
|
+
const config_2 = require("../daemon/config");
|
|
50
|
+
const OPENCLAW_CONFIG_PATH = process.env.OPENCLAW_CONFIG || path.join(os.homedir(), ".openclaw", "openclaw.json");
|
|
51
|
+
const SUPPORTED_HARNESSES = ["openclaw", "claude-code", "codex", "hermes"];
|
|
52
|
+
function parseTokens(input) {
|
|
53
|
+
const tokens = [];
|
|
54
|
+
let current = "";
|
|
55
|
+
let inQuote = false;
|
|
56
|
+
let quoteChar = "";
|
|
57
|
+
let escape = false;
|
|
58
|
+
for (const ch of input) {
|
|
59
|
+
if (escape) {
|
|
60
|
+
current += ch;
|
|
61
|
+
escape = false;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (inQuote) {
|
|
65
|
+
if (quoteChar === '"' && ch === "\\") {
|
|
66
|
+
escape = true;
|
|
67
|
+
}
|
|
68
|
+
else if (ch === quoteChar) {
|
|
69
|
+
inQuote = false;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
current += ch;
|
|
73
|
+
}
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (ch === '"' || ch === "'") {
|
|
77
|
+
inQuote = true;
|
|
78
|
+
quoteChar = ch;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (/\s/.test(ch)) {
|
|
82
|
+
if (current) {
|
|
83
|
+
tokens.push(current);
|
|
84
|
+
current = "";
|
|
85
|
+
}
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
current += ch;
|
|
89
|
+
}
|
|
90
|
+
if (current) {
|
|
91
|
+
tokens.push(current);
|
|
92
|
+
}
|
|
93
|
+
return tokens;
|
|
94
|
+
}
|
|
95
|
+
function truncateAddress(address) {
|
|
96
|
+
return address.length > 12 ? `${address.slice(0, 6)}…${address.slice(-4)}` : address;
|
|
97
|
+
}
|
|
98
|
+
function formatAgreementStatus(value) {
|
|
99
|
+
const raw = typeof value === "string" ? value : typeof value === "number" ? String(value) : "unknown";
|
|
100
|
+
return raw.toUpperCase();
|
|
101
|
+
}
|
|
102
|
+
function normalizeHarness(value) {
|
|
103
|
+
const normalized = value?.trim().toLowerCase();
|
|
104
|
+
if (!normalized)
|
|
105
|
+
return undefined;
|
|
106
|
+
if (normalized === "openclaw")
|
|
107
|
+
return "openclaw";
|
|
108
|
+
if (normalized === "claude" || normalized === "claude-code")
|
|
109
|
+
return "claude-code";
|
|
110
|
+
if (normalized === "codex")
|
|
111
|
+
return "codex";
|
|
112
|
+
if (normalized === "hermes")
|
|
113
|
+
return "hermes";
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
function getHarnessLabel(harness) {
|
|
117
|
+
switch (harness) {
|
|
118
|
+
case "openclaw":
|
|
119
|
+
return "OpenClaw";
|
|
120
|
+
case "claude-code":
|
|
121
|
+
return "Claude Code";
|
|
122
|
+
case "codex":
|
|
123
|
+
return "Codex";
|
|
124
|
+
case "hermes":
|
|
125
|
+
return "Hermes";
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function commandExists(command) {
|
|
129
|
+
const result = (0, child_process_1.spawnSync)("sh", ["-lc", `command -v ${command}`], { stdio: "ignore" });
|
|
130
|
+
return result.status === 0;
|
|
131
|
+
}
|
|
132
|
+
function getHarnessReadiness(harness) {
|
|
133
|
+
switch (harness) {
|
|
134
|
+
case "openclaw":
|
|
135
|
+
if (fs.existsSync(OPENCLAW_CONFIG_PATH)) {
|
|
136
|
+
return {
|
|
137
|
+
ready: true,
|
|
138
|
+
summary: `gateway config found at ${OPENCLAW_CONFIG_PATH}`,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
ready: false,
|
|
143
|
+
summary: `missing ${OPENCLAW_CONFIG_PATH}`,
|
|
144
|
+
nextStep: "Run OpenClaw locally or create ~/.openclaw/openclaw.json before relying on OpenClaw-backed execution.",
|
|
145
|
+
};
|
|
146
|
+
case "claude-code":
|
|
147
|
+
return commandExists("claude")
|
|
148
|
+
? { ready: true, summary: "claude CLI found on PATH" }
|
|
149
|
+
: { ready: false, summary: "claude CLI not found on PATH", nextStep: "Install Claude Code or pick a different harness." };
|
|
150
|
+
case "codex":
|
|
151
|
+
return commandExists("codex")
|
|
152
|
+
? { ready: true, summary: "codex CLI found on PATH" }
|
|
153
|
+
: { ready: false, summary: "codex CLI not found on PATH", nextStep: "Install Codex CLI or pick a different harness." };
|
|
154
|
+
case "hermes":
|
|
155
|
+
return commandExists("hermes")
|
|
156
|
+
? { ready: true, summary: "hermes CLI found on PATH" }
|
|
157
|
+
: { ready: false, summary: "hermes CLI not found on PATH", nextStep: "Run `arc402 hermes init` or install Hermes before using this harness." };
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
async function testDaemonConnection(options) {
|
|
161
|
+
try {
|
|
162
|
+
await (0, commerce_client_1.fetchDaemonHealth)(options);
|
|
163
|
+
return { ok: true };
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
return {
|
|
167
|
+
ok: false,
|
|
168
|
+
error: error instanceof Error ? error.message : String(error),
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
function loadSavedChatConfig() {
|
|
173
|
+
if (!(0, config_1.configExists)())
|
|
174
|
+
return undefined;
|
|
175
|
+
return (0, config_1.loadConfig)().chat;
|
|
176
|
+
}
|
|
177
|
+
function loadDaemonHarnessDefault() {
|
|
178
|
+
if (!fs.existsSync(config_2.DAEMON_TOML))
|
|
179
|
+
return undefined;
|
|
180
|
+
try {
|
|
181
|
+
return normalizeHarness((0, config_2.loadDaemonConfig)().worker?.agent_type);
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return undefined;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
function resolveInitialRuntimeConfig(opts) {
|
|
188
|
+
const saved = loadSavedChatConfig();
|
|
189
|
+
const daemonHarness = loadDaemonHarnessDefault();
|
|
190
|
+
const explicitNodeMode = opts.local ? "local" : opts.remote ? "remote" : undefined;
|
|
191
|
+
const target = (0, commerce_client_1.resolveChatDaemonTarget)({
|
|
192
|
+
explicitBaseUrl: opts.daemonUrl,
|
|
193
|
+
explicitNodeMode,
|
|
194
|
+
});
|
|
195
|
+
const harness = normalizeHarness(opts.harness) ?? normalizeHarness(saved?.harness) ?? daemonHarness;
|
|
196
|
+
const model = opts.model?.trim() || saved?.model?.trim() || undefined;
|
|
197
|
+
const nodeMode = explicitNodeMode ?? saved?.nodeMode ?? target.mode ?? (0, commerce_client_1.inferDaemonNodeMode)(target.baseUrl);
|
|
198
|
+
if (!harness) {
|
|
199
|
+
return { missingHarness: true };
|
|
200
|
+
}
|
|
201
|
+
return {
|
|
202
|
+
missingHarness: false,
|
|
203
|
+
config: {
|
|
204
|
+
daemonUrl: target.baseUrl,
|
|
205
|
+
nodeMode,
|
|
206
|
+
harness,
|
|
207
|
+
model,
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
async function runGuidedSetup(seed) {
|
|
212
|
+
const saved = loadSavedChatConfig();
|
|
213
|
+
const daemonHarness = loadDaemonHarnessDefault();
|
|
214
|
+
const recommendedLocalUrl = (0, commerce_client_1.resolveDaemonApiBaseUrl)();
|
|
215
|
+
const initialNodeMode = seed?.nodeMode ?? saved?.nodeMode ?? "local";
|
|
216
|
+
const initialDaemonUrl = seed?.daemonUrl ??
|
|
217
|
+
saved?.daemonUrl ??
|
|
218
|
+
(initialNodeMode === "local" ? recommendedLocalUrl : "https://your-node.example.com");
|
|
219
|
+
const initialHarness = seed?.harness ?? normalizeHarness(saved?.harness) ?? daemonHarness ?? "openclaw";
|
|
220
|
+
const initialModel = seed?.model ?? saved?.model ?? "";
|
|
221
|
+
console.log(chalk_1.default.bold("◈ Commerce chat setup"));
|
|
222
|
+
console.log(" ARC-402 chat reads daemon state from either a local node on this machine or a remote node over HTTP.");
|
|
223
|
+
console.log(" It also needs a harness choice so chat can explain how hired work should be executed.");
|
|
224
|
+
console.log("");
|
|
225
|
+
const setup = await (0, prompts_1.default)([
|
|
226
|
+
{
|
|
227
|
+
type: "select",
|
|
228
|
+
name: "nodeMode",
|
|
229
|
+
message: "Which node should chat talk to?",
|
|
230
|
+
initial: initialNodeMode === "remote" ? 1 : 0,
|
|
231
|
+
choices: [
|
|
232
|
+
{ title: `Local node on this machine (${recommendedLocalUrl})`, value: "local" },
|
|
233
|
+
{ title: "Remote ARC-402 node", value: "remote" },
|
|
234
|
+
],
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
type: "text",
|
|
238
|
+
name: "daemonUrl",
|
|
239
|
+
message: "Daemon API base URL",
|
|
240
|
+
initial: (_prev, values) => values.nodeMode === "local" ? recommendedLocalUrl : initialDaemonUrl,
|
|
241
|
+
validate: (value) => {
|
|
242
|
+
try {
|
|
243
|
+
const parsed = new URL(value.trim());
|
|
244
|
+
return parsed.protocol === "http:" || parsed.protocol === "https:"
|
|
245
|
+
? true
|
|
246
|
+
: "Use an http:// or https:// URL";
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
return "Enter a valid URL";
|
|
250
|
+
}
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
{
|
|
254
|
+
type: "select",
|
|
255
|
+
name: "harness",
|
|
256
|
+
message: "Which harness should arc402 chat describe and expect?",
|
|
257
|
+
initial: Math.max(SUPPORTED_HARNESSES.indexOf(initialHarness), 0),
|
|
258
|
+
choices: [
|
|
259
|
+
{ title: "OpenClaw", value: "openclaw" },
|
|
260
|
+
{ title: "Claude Code", value: "claude-code" },
|
|
261
|
+
{ title: "Codex", value: "codex" },
|
|
262
|
+
{ title: "Hermes", value: "hermes" },
|
|
263
|
+
],
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
type: "text",
|
|
267
|
+
name: "model",
|
|
268
|
+
message: "Default model hint for chat (optional)",
|
|
269
|
+
initial: initialModel,
|
|
270
|
+
},
|
|
271
|
+
], {
|
|
272
|
+
onCancel: () => true,
|
|
273
|
+
});
|
|
274
|
+
const harness = normalizeHarness(setup.harness);
|
|
275
|
+
if (!setup.nodeMode || !setup.daemonUrl || !harness) {
|
|
276
|
+
console.log(chalk_1.default.yellow("Setup cancelled."));
|
|
277
|
+
return null;
|
|
278
|
+
}
|
|
279
|
+
const runtime = {
|
|
280
|
+
nodeMode: setup.nodeMode,
|
|
281
|
+
daemonUrl: String(setup.daemonUrl).trim().replace(/\/$/, ""),
|
|
282
|
+
harness,
|
|
283
|
+
model: String(setup.model ?? "").trim() || undefined,
|
|
284
|
+
};
|
|
285
|
+
console.log("");
|
|
286
|
+
console.log("Testing daemon endpoint...");
|
|
287
|
+
const daemonTest = await testDaemonConnection({ baseUrl: runtime.daemonUrl });
|
|
288
|
+
console.log(daemonTest.ok
|
|
289
|
+
? chalk_1.default.green(` OK: daemon responded at ${runtime.daemonUrl}`)
|
|
290
|
+
: chalk_1.default.yellow(` Daemon check failed: ${daemonTest.error}`));
|
|
291
|
+
if (!daemonTest.ok) {
|
|
292
|
+
if (runtime.nodeMode === "local") {
|
|
293
|
+
console.log(chalk_1.default.dim(" Local node hint: run `arc402 setup` or `arc402 daemon init`, then start the daemon before using local chat."));
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
console.log(chalk_1.default.dim(" Remote node hint: confirm the URL is reachable and the remote ARC-402 node is online."));
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
const readiness = getHarnessReadiness(runtime.harness);
|
|
300
|
+
console.log(readiness.ready
|
|
301
|
+
? chalk_1.default.green(` Harness check: ${getHarnessLabel(runtime.harness)} ready (${readiness.summary})`)
|
|
302
|
+
: chalk_1.default.yellow(` Harness check: ${getHarnessLabel(runtime.harness)} not ready (${readiness.summary})`));
|
|
303
|
+
if (readiness.nextStep) {
|
|
304
|
+
console.log(chalk_1.default.dim(` ${readiness.nextStep}`));
|
|
305
|
+
}
|
|
306
|
+
const existing = (0, config_1.configExists)() ? (0, config_1.loadConfig)() : undefined;
|
|
307
|
+
const nextConfig = {
|
|
308
|
+
...(existing ?? (0, config_1.loadConfig)()),
|
|
309
|
+
chat: {
|
|
310
|
+
daemonUrl: runtime.daemonUrl,
|
|
311
|
+
nodeMode: runtime.nodeMode,
|
|
312
|
+
harness: runtime.harness,
|
|
313
|
+
model: runtime.model,
|
|
314
|
+
},
|
|
315
|
+
};
|
|
316
|
+
(0, config_1.saveConfig)(nextConfig);
|
|
317
|
+
console.log("");
|
|
318
|
+
console.log(chalk_1.default.green("Saved chat setup to ~/.arc402/config.json"));
|
|
319
|
+
return runtime;
|
|
320
|
+
}
|
|
321
|
+
function describeNodeMode(config) {
|
|
322
|
+
if (config.nodeMode === "local") {
|
|
323
|
+
return `Local node: chat will read daemon state from ${config.daemonUrl} on this machine.`;
|
|
324
|
+
}
|
|
325
|
+
return `Remote node: chat will read daemon state from ${config.daemonUrl} over HTTP instead of assuming a local daemon.`;
|
|
326
|
+
}
|
|
327
|
+
function printBanner(config) {
|
|
328
|
+
console.log(chalk_1.default.cyanBright("◈"), chalk_1.default.bold("ARC-402 Commerce Shell"));
|
|
329
|
+
console.log(chalk_1.default.dim(`Node: ${config.nodeMode} Endpoint: ${config.daemonUrl}`));
|
|
330
|
+
console.log(chalk_1.default.dim(`Harness: ${getHarnessLabel(config.harness)}${config.model ? ` Model: ${config.model}` : ""} Use /<command> for direct CLI commands`));
|
|
331
|
+
console.log(chalk_1.default.dim(describeNodeMode(config)));
|
|
332
|
+
const readiness = getHarnessReadiness(config.harness);
|
|
333
|
+
console.log(readiness.ready
|
|
334
|
+
? chalk_1.default.dim(`Harness check: ${readiness.summary}`)
|
|
335
|
+
: chalk_1.default.yellow(`Harness check: ${readiness.summary}`));
|
|
336
|
+
if (!readiness.ready && readiness.nextStep) {
|
|
337
|
+
console.log(chalk_1.default.dim(`Next: ${readiness.nextStep}`));
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
async function renderStatus(options) {
|
|
341
|
+
const [health, wallet, workroom, agreements] = await Promise.all([
|
|
342
|
+
(0, commerce_client_1.fetchDaemonHealth)(options),
|
|
343
|
+
(0, commerce_client_1.fetchDaemonWalletStatus)(options),
|
|
344
|
+
(0, commerce_client_1.fetchDaemonWorkroomStatus)(options),
|
|
345
|
+
(0, commerce_client_1.fetchDaemonAgreements)(options),
|
|
346
|
+
]);
|
|
347
|
+
console.log(chalk_1.default.bold("◈ ARC-402 Commerce Shell"));
|
|
348
|
+
console.log(` Wallet: ${truncateAddress(wallet.wallet)} Chain: ${wallet.chainId} Workroom: ${workroom.status} Agreements: ${agreements.agreements.length}`);
|
|
349
|
+
console.log(` Daemon: ${truncateAddress(wallet.daemonId)} RPC: ${wallet.rpcUrl}`);
|
|
350
|
+
console.log(` Health: ${health.ok ? chalk_1.default.green("ok") : chalk_1.default.red("down")}`);
|
|
351
|
+
}
|
|
352
|
+
async function renderAgreements(options) {
|
|
353
|
+
const result = await (0, commerce_client_1.fetchDaemonAgreements)(options);
|
|
354
|
+
console.log(chalk_1.default.bold("◈ Agreements"));
|
|
355
|
+
if (result.agreements.length === 0) {
|
|
356
|
+
console.log(" No agreements found.");
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
for (const agreement of result.agreements.slice(0, 10)) {
|
|
360
|
+
const id = agreement["agreement_id"] ?? agreement["id"] ?? "n/a";
|
|
361
|
+
const counterparty = agreement["provider_address"] ??
|
|
362
|
+
agreement["hirer_address"] ??
|
|
363
|
+
agreement["counterparty"] ??
|
|
364
|
+
"unknown";
|
|
365
|
+
const status = formatAgreementStatus(agreement["status"]);
|
|
366
|
+
console.log(` #${String(id).padEnd(6)} ${status.padEnd(22)} ${truncateAddress(String(counterparty))}`);
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
async function renderWorkroom(options) {
|
|
370
|
+
const result = await (0, commerce_client_1.fetchDaemonWorkroomStatus)(options);
|
|
371
|
+
console.log(chalk_1.default.bold("◈ Workroom"));
|
|
372
|
+
console.log(` Status: ${result.status}`);
|
|
373
|
+
}
|
|
374
|
+
function printHelp() {
|
|
375
|
+
console.log(chalk_1.default.bold("◈ Commerce REPL"));
|
|
376
|
+
console.log(" status Refresh wallet/workroom/agreement context from the configured node");
|
|
377
|
+
console.log(" agreements List recent agreements from the configured node");
|
|
378
|
+
console.log(" workroom Show current workroom status");
|
|
379
|
+
console.log(" setup Re-run the guided node/harness setup");
|
|
380
|
+
console.log(" /<command> Run any existing arc402 CLI command inside the shell");
|
|
381
|
+
console.log(" help Show this help");
|
|
382
|
+
console.log(" exit Leave the shell");
|
|
383
|
+
}
|
|
384
|
+
function printLocalDaemonSetupGuidance(config, detail) {
|
|
385
|
+
const configured = fs.existsSync(config_2.DAEMON_TOML);
|
|
386
|
+
console.log(chalk_1.default.yellow(configured
|
|
387
|
+
? `Local daemon context is unavailable at ${config.daemonUrl}.`
|
|
388
|
+
: "Local daemon mode was selected, but this machine is not configured as an ARC-402 node yet."));
|
|
389
|
+
if (detail) {
|
|
390
|
+
console.log(chalk_1.default.dim(` ${detail}`));
|
|
391
|
+
}
|
|
392
|
+
console.log("");
|
|
393
|
+
console.log("Next steps:");
|
|
394
|
+
if (!configured) {
|
|
395
|
+
console.log(" 1. Run `arc402 daemon init` or `arc402 setup` to create ~/.arc402/daemon.toml.");
|
|
396
|
+
console.log(" 2. Fill in wallet, node, and harness settings, then start the node with `arc402 daemon start`.");
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
console.log(" 1. Start the local node with `arc402 daemon start`.");
|
|
400
|
+
console.log(" 2. If startup fails, inspect `arc402 daemon logs` for the exact guidance.");
|
|
401
|
+
}
|
|
402
|
+
console.log(" 3. Re-run `arc402 chat --setup` and choose Remote if you meant to use another machine's node.");
|
|
403
|
+
}
|
|
404
|
+
async function dispatchCliCommand(line) {
|
|
405
|
+
const tokens = parseTokens(line);
|
|
406
|
+
if (tokens.length === 0)
|
|
407
|
+
return;
|
|
408
|
+
const { createProgram } = await Promise.resolve().then(() => __importStar(require("../program")));
|
|
409
|
+
const program = createProgram();
|
|
410
|
+
program.exitOverride();
|
|
411
|
+
program.configureOutput({
|
|
412
|
+
writeOut: (str) => process.stdout.write(str),
|
|
413
|
+
writeErr: (str) => process.stderr.write(str),
|
|
414
|
+
});
|
|
415
|
+
try {
|
|
416
|
+
await program.parseAsync(["node", "arc402", ...tokens]);
|
|
417
|
+
}
|
|
418
|
+
catch (err) {
|
|
419
|
+
const error = err;
|
|
420
|
+
if (error.code === "commander.helpDisplayed" ||
|
|
421
|
+
error.code === "commander.version" ||
|
|
422
|
+
error.code === "commander.executeSubCommandAsync") {
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
throw err;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
function inferIntent(input) {
|
|
429
|
+
const normalized = input.trim().toLowerCase();
|
|
430
|
+
if (normalized === "help")
|
|
431
|
+
return "help";
|
|
432
|
+
if (normalized === "setup")
|
|
433
|
+
return "setup";
|
|
434
|
+
if (normalized.includes("agreement"))
|
|
435
|
+
return "agreements";
|
|
436
|
+
if (normalized.includes("workroom"))
|
|
437
|
+
return "workroom";
|
|
438
|
+
if (normalized.includes("status") || normalized.includes("wallet") || normalized.includes("balance"))
|
|
439
|
+
return "status";
|
|
440
|
+
return "unknown";
|
|
441
|
+
}
|
|
442
|
+
function registerChatCommand(program) {
|
|
443
|
+
program
|
|
444
|
+
.command("chat")
|
|
445
|
+
.description("Launch the ARC-402 Commerce REPL with guided node and harness setup")
|
|
446
|
+
.option("--daemon-url <url>", "Override the daemon API base URL")
|
|
447
|
+
.option("--harness <name>", "Harness to describe and expect: openclaw | claude-code | codex | hermes")
|
|
448
|
+
.option("--model <name>", "Default model hint shown in the shell")
|
|
449
|
+
.option("--setup", "Run guided chat setup before entering the shell")
|
|
450
|
+
.option("--local", "Force local node mode")
|
|
451
|
+
.option("--remote", "Force remote node mode")
|
|
452
|
+
.action(async (opts) => {
|
|
453
|
+
if (!process.stdin.isTTY || !process.stdout.isTTY) {
|
|
454
|
+
throw new Error("arc402 chat requires an interactive TTY");
|
|
455
|
+
}
|
|
456
|
+
if (opts.local && opts.remote) {
|
|
457
|
+
throw new Error("Choose either --local or --remote, not both.");
|
|
458
|
+
}
|
|
459
|
+
let state = resolveInitialRuntimeConfig(opts);
|
|
460
|
+
let runtimeConfig = state.config;
|
|
461
|
+
if (opts.setup || state.missingHarness) {
|
|
462
|
+
if (state.missingHarness) {
|
|
463
|
+
console.log(chalk_1.default.yellow("No chat harness is configured yet. Running guided setup."));
|
|
464
|
+
console.log("");
|
|
465
|
+
}
|
|
466
|
+
runtimeConfig = await runGuidedSetup(runtimeConfig);
|
|
467
|
+
if (!runtimeConfig) {
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
state = { missingHarness: false, config: runtimeConfig };
|
|
471
|
+
}
|
|
472
|
+
if (!runtimeConfig) {
|
|
473
|
+
throw new Error("Chat setup is incomplete. Run `arc402 chat --setup`.");
|
|
474
|
+
}
|
|
475
|
+
let activeConfig = runtimeConfig;
|
|
476
|
+
const clientOptions = { baseUrl: activeConfig.daemonUrl };
|
|
477
|
+
if (activeConfig.nodeMode === "local" && !fs.existsSync(config_2.DAEMON_TOML)) {
|
|
478
|
+
printLocalDaemonSetupGuidance(activeConfig);
|
|
479
|
+
return;
|
|
480
|
+
}
|
|
481
|
+
printBanner(activeConfig);
|
|
482
|
+
try {
|
|
483
|
+
await renderStatus(clientOptions);
|
|
484
|
+
}
|
|
485
|
+
catch (err) {
|
|
486
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
487
|
+
if (activeConfig.nodeMode === "local") {
|
|
488
|
+
printLocalDaemonSetupGuidance(activeConfig, detail);
|
|
489
|
+
return;
|
|
490
|
+
}
|
|
491
|
+
console.log(chalk_1.default.yellow(` Remote daemon context unavailable from ${activeConfig.daemonUrl}: ${detail}`));
|
|
492
|
+
}
|
|
493
|
+
printHelp();
|
|
494
|
+
const rl = readline_1.default.createInterface({
|
|
495
|
+
input: process.stdin,
|
|
496
|
+
output: process.stdout,
|
|
497
|
+
prompt: `${chalk_1.default.cyanBright(">")} `,
|
|
498
|
+
terminal: true,
|
|
499
|
+
});
|
|
500
|
+
rl.prompt();
|
|
501
|
+
rl.on("line", async (line) => {
|
|
502
|
+
const trimmed = line.trim();
|
|
503
|
+
if (!trimmed) {
|
|
504
|
+
rl.prompt();
|
|
505
|
+
return;
|
|
506
|
+
}
|
|
507
|
+
try {
|
|
508
|
+
if (trimmed === "exit" || trimmed === "quit") {
|
|
509
|
+
rl.close();
|
|
510
|
+
return;
|
|
511
|
+
}
|
|
512
|
+
if (trimmed.startsWith("/")) {
|
|
513
|
+
await dispatchCliCommand(trimmed.slice(1));
|
|
514
|
+
console.log("");
|
|
515
|
+
rl.prompt();
|
|
516
|
+
return;
|
|
517
|
+
}
|
|
518
|
+
switch (inferIntent(trimmed)) {
|
|
519
|
+
case "help":
|
|
520
|
+
printHelp();
|
|
521
|
+
break;
|
|
522
|
+
case "setup": {
|
|
523
|
+
const updated = await runGuidedSetup(activeConfig);
|
|
524
|
+
if (updated) {
|
|
525
|
+
activeConfig = updated;
|
|
526
|
+
clientOptions.baseUrl = updated.daemonUrl;
|
|
527
|
+
printBanner(activeConfig);
|
|
528
|
+
}
|
|
529
|
+
break;
|
|
530
|
+
}
|
|
531
|
+
case "status":
|
|
532
|
+
await renderStatus(clientOptions);
|
|
533
|
+
break;
|
|
534
|
+
case "agreements":
|
|
535
|
+
await renderAgreements(clientOptions);
|
|
536
|
+
break;
|
|
537
|
+
case "workroom":
|
|
538
|
+
await renderWorkroom(clientOptions);
|
|
539
|
+
break;
|
|
540
|
+
default:
|
|
541
|
+
console.log(` Chat is connected to a ${activeConfig.nodeMode} node and expects ${getHarnessLabel(activeConfig.harness)}.`);
|
|
542
|
+
console.log(" Use `status`, `agreements`, `workroom`, `setup`, or `/...` for direct CLI commands.");
|
|
543
|
+
break;
|
|
544
|
+
}
|
|
545
|
+
}
|
|
546
|
+
catch (err) {
|
|
547
|
+
console.log(` ${chalk_1.default.red(err instanceof Error ? err.message : String(err))}`);
|
|
548
|
+
}
|
|
549
|
+
console.log("");
|
|
550
|
+
rl.prompt();
|
|
551
|
+
});
|
|
552
|
+
rl.on("close", () => {
|
|
553
|
+
console.log(chalk_1.default.dim("Commerce shell closed."));
|
|
554
|
+
process.exit(0);
|
|
555
|
+
});
|
|
556
|
+
await new Promise(() => {
|
|
557
|
+
// readline keeps the process alive until close()
|
|
558
|
+
});
|
|
559
|
+
});
|
|
560
|
+
}
|
|
561
|
+
//# sourceMappingURL=chat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmeA,kDAsIC;AAxmBD,kDAA0B;AAC1B,uCAAyB;AACzB,uCAAyB;AACzB,2CAA6B;AAC7B,sDAA8B;AAC9B,wDAAgC;AAChC,iDAA0C;AAC1C,wDAU4B;AAC5B,sCAAoF;AACpF,6CAAiE;AA4BjE,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;AAClH,MAAM,mBAAmB,GAAuB,CAAC,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAE/F,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,MAAM,GAAG,KAAK,CAAC;IAEnB,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,IAAI,EAAE,CAAC;YACd,MAAM,GAAG,KAAK,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,SAAS,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBACrC,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;iBAAM,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC5B,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAC7B,OAAO,GAAG,IAAI,CAAC;YACf,SAAS,GAAG,EAAE,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;YAClB,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACrB,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;YACD,SAAS;QACX,CAAC;QACD,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,OAAe;IACtC,OAAO,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AACvF,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACtG,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,MAAM,UAAU,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/C,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAC;IAClC,IAAI,UAAU,KAAK,UAAU;QAAE,OAAO,UAAU,CAAC;IACjD,IAAI,UAAU,KAAK,QAAQ,IAAI,UAAU,KAAK,aAAa;QAAE,OAAO,aAAa,CAAC;IAClF,IAAI,UAAU,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IAC3C,IAAI,UAAU,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC7C,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,OAAyB;IAChD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC;QACvB,KAAK,OAAO;YACV,OAAO,OAAO,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,MAAM,MAAM,GAAG,IAAA,yBAAS,EAAC,IAAI,EAAE,CAAC,KAAK,EAAE,cAAc,OAAO,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtF,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC;AAC7B,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAyB;IACpD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,UAAU;YACb,IAAI,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBACxC,OAAO;oBACL,KAAK,EAAE,IAAI;oBACX,OAAO,EAAE,2BAA2B,oBAAoB,EAAE;iBAC3D,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,WAAW,oBAAoB,EAAE;gBAC1C,QAAQ,EAAE,uGAAuG;aAClH,CAAC;QACJ,KAAK,aAAa;YAChB,OAAO,aAAa,CAAC,QAAQ,CAAC;gBAC5B,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,0BAA0B,EAAE;gBACtD,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,8BAA8B,EAAE,QAAQ,EAAE,kDAAkD,EAAE,CAAC;QAC9H,KAAK,OAAO;YACV,OAAO,aAAa,CAAC,OAAO,CAAC;gBAC3B,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,yBAAyB,EAAE;gBACrD,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,6BAA6B,EAAE,QAAQ,EAAE,gDAAgD,EAAE,CAAC;QAC3H,KAAK,QAAQ;YACX,OAAO,aAAa,CAAC,QAAQ,CAAC;gBAC5B,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,0BAA0B,EAAE;gBACtD,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,8BAA8B,EAAE,QAAQ,EAAE,uEAAuE,EAAE,CAAC;IACrJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,OAAoC;IACtE,IAAI,CAAC;QACH,MAAM,IAAA,mCAAiB,EAAC,OAAO,CAAC,CAAC;QACjC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IACtB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB;IAC1B,IAAI,CAAC,IAAA,qBAAY,GAAE;QAAE,OAAO,SAAS,CAAC;IACtC,OAAO,IAAA,mBAAU,GAAE,CAAC,IAAI,CAAC;AAC3B,CAAC;AAED,SAAS,wBAAwB;IAC/B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,oBAAW,CAAC;QAAE,OAAO,SAAS,CAAC;IAClD,IAAI,CAAC;QACH,OAAO,gBAAgB,CAAC,IAAA,yBAAgB,GAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAiB;IAIpD,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,MAAM,aAAa,GAAG,wBAAwB,EAAE,CAAC;IACjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACnF,MAAM,MAAM,GAAG,IAAA,yCAAuB,EAAC;QACrC,eAAe,EAAE,IAAI,CAAC,SAAS;QAC/B,gBAAgB;KACjB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,aAAa,CAAC;IACpG,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IACtE,MAAM,QAAQ,GAAG,gBAAgB,IAAI,KAAK,EAAE,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,IAAA,qCAAmB,EAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAE3G,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,OAAO;QACL,cAAc,EAAE,KAAK;QACrB,MAAM,EAAE;YACN,SAAS,EAAE,MAAM,CAAC,OAAO;YACzB,QAAQ;YACR,OAAO;YACP,KAAK;SACN;KACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAiC;IAC7D,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,MAAM,aAAa,GAAG,wBAAwB,EAAE,CAAC;IACjD,MAAM,mBAAmB,GAAG,IAAA,yCAAuB,GAAE,CAAC;IACtD,MAAM,eAAe,GAAG,IAAI,EAAE,QAAQ,IAAI,KAAK,EAAE,QAAQ,IAAI,OAAO,CAAC;IACrE,MAAM,gBAAgB,GACpB,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,SAAS;QAChB,CAAC,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC;IACxF,MAAM,cAAc,GAAG,IAAI,EAAE,OAAO,IAAI,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,aAAa,IAAI,UAAU,CAAC;IACxG,MAAM,YAAY,GAAG,IAAI,EAAE,KAAK,IAAI,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;IAEvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IACjD,OAAO,CAAC,GAAG,CAAC,wGAAwG,CAAC,CAAC;IACtH,OAAO,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC;IACvG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,KAAK,GAAG,MAAM,IAAA,iBAAO,EAAC;QAC1B;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,UAAU;YAChB,OAAO,EAAE,iCAAiC;YAC1C,OAAO,EAAE,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,+BAA+B,mBAAmB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;gBAChF,EAAE,KAAK,EAAE,qBAAqB,EAAE,KAAK,EAAE,QAAQ,EAAE;aAClD;SACF;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,qBAAqB;YAC9B,OAAO,EAAE,CAAC,KAAc,EAAE,MAAqC,EAAE,EAAE,CACjE,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,gBAAgB;YACtE,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC1B,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;oBACrC,OAAO,MAAM,CAAC,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,QAAQ,KAAK,QAAQ;wBAChE,CAAC,CAAC,IAAI;wBACN,CAAC,CAAC,gCAAgC,CAAC;gBACvC,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,mBAAmB,CAAC;gBAC7B,CAAC;YACH,CAAC;SACF;QACD;YACE,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,uDAAuD;YAChE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YACjE,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE;gBACxC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;gBAC9C,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;gBAClC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;aACrC;SACF;QACD;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,wCAAwC;YACjD,OAAO,EAAE,YAAY;SACtB;KACF,EAAE;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;KACrB,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,OAAO,EAAE,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,OAAO,GAAsB;QACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QAC5D,OAAO;QACP,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS;KACrD,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,MAAM,oBAAoB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9E,OAAO,CAAC,GAAG,CACT,UAAU,CAAC,EAAE;QACX,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,6BAA6B,OAAO,CAAC,SAAS,EAAE,CAAC;QAC/D,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,0BAA0B,UAAU,CAAC,KAAK,EAAE,CAAC,CAC/D,CAAC;IACF,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;QACnB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,+GAA+G,CAAC,CAAC,CAAC;QAC1I,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,yFAAyF,CAAC,CAAC,CAAC;QACpH,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CACT,SAAS,CAAC,KAAK;QACb,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,oBAAoB,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,SAAS,CAAC,OAAO,GAAG,CAAC;QAClG,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,oBAAoB,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,SAAS,CAAC,OAAO,GAAG,CAAC,CAC1G,CAAC;IACF,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,MAAM,QAAQ,GAAG,IAAA,qBAAY,GAAE,CAAC,CAAC,CAAC,IAAA,mBAAU,GAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3D,MAAM,UAAU,GAAiB;QAC/B,GAAG,CAAC,QAAQ,IAAI,IAAA,mBAAU,GAAE,CAAC;QAC7B,IAAI,EAAE;YACJ,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB;KACF,CAAC;IACF,IAAA,mBAAU,EAAC,UAAU,CAAC,CAAC;IAEvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC,CAAC;IACtE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAyB;IACjD,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,gDAAgD,MAAM,CAAC,SAAS,mBAAmB,CAAC;IAC7F,CAAC;IACD,OAAO,iDAAiD,MAAM,CAAC,SAAS,gDAAgD,CAAC;AAC3H,CAAC;AAED,SAAS,WAAW,CAAC,MAAyB;IAC5C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,eAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;IACzE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,QAAQ,eAAe,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,GAAG,CACP,YAAY,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,0CAA0C,CACvI,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAEjD,MAAM,SAAS,GAAG,mBAAmB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CACT,SAAS,CAAC,KAAK;QACb,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,kBAAkB,SAAS,CAAC,OAAO,EAAE,CAAC;QAClD,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,kBAAkB,SAAS,CAAC,OAAO,EAAE,CAAC,CACxD,CAAC;IACF,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,OAAoC;IAC9D,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/D,IAAA,mCAAiB,EAAC,OAAO,CAAC;QAC1B,IAAA,yCAAuB,EAAC,OAAO,CAAC;QAChC,IAAA,2CAAyB,EAAC,OAAO,CAAC;QAClC,IAAA,uCAAqB,EAAC,OAAO,CAAC;KAC/B,CAAC,CAAC;IAEH,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CACT,aAAa,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,MAAM,CAAC,OAAO,eAAe,QAAQ,CAAC,MAAM,iBAAiB,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,CACnJ,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,aAAa,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,OAAoC;IAClE,MAAM,MAAM,GAAG,MAAM,IAAA,uCAAqB,EAAC,OAAO,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO;IACT,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACvD,MAAM,EAAE,GAAG,SAAS,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;QACjE,MAAM,YAAY,GAChB,SAAS,CAAC,kBAAkB,CAAC;YAC7B,SAAS,CAAC,eAAe,CAAC;YAC1B,SAAS,CAAC,cAAc,CAAC;YACzB,SAAS,CAAC;QACZ,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1G,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,OAAoC;IAChE,MAAM,MAAM,GAAG,MAAM,IAAA,2CAAyB,EAAC,OAAO,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC;IACtG,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;IACnF,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,0DAA0D,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,0EAA0E,CAAC,CAAC;IACxF,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,6BAA6B,CAAC,MAAyB,EAAE,MAAe;IAC/E,MAAM,UAAU,GAAG,EAAE,CAAC,UAAU,CAAC,oBAAW,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,MAAM,CACV,UAAU;QACR,CAAC,CAAC,0CAA0C,MAAM,CAAC,SAAS,GAAG;QAC/D,CAAC,CAAC,4FAA4F,CACjG,CACF,CAAC;IACF,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,kFAAkF,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,kGAAkG,CAAC,CAAC;IAClH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,6EAA6E,CAAC,CAAC;IAC7F,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,iGAAiG,CAAC,CAAC;AACjH,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAAY;IAC5C,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAEhC,MAAM,EAAE,aAAa,EAAE,GAAG,wDAAa,YAAY,GAAC,CAAC;IACrD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,OAAO,CAAC,YAAY,EAAE,CAAC;IACvB,OAAO,CAAC,eAAe,CAAC;QACtB,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;QAC5C,QAAQ,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;KAC7C,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAA0C,CAAC;QACzD,IACE,KAAK,CAAC,IAAI,KAAK,yBAAyB;YACxC,KAAK,CAAC,IAAI,KAAK,mBAAmB;YAClC,KAAK,CAAC,IAAI,KAAK,kCAAkC,EACjD,CAAC;YACD,OAAO;QACT,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,UAAU,KAAK,MAAM;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,UAAU,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IAC3C,IAAI,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,YAAY,CAAC;IAC1D,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,OAAO,UAAU,CAAC;IACvD,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtH,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAgB,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,qEAAqE,CAAC;SAClF,MAAM,CAAC,oBAAoB,EAAE,kCAAkC,CAAC;SAChE,MAAM,CAAC,kBAAkB,EAAE,yEAAyE,CAAC;SACrG,MAAM,CAAC,gBAAgB,EAAE,uCAAuC,CAAC;SACjE,MAAM,CAAC,SAAS,EAAE,iDAAiD,CAAC;SACpE,MAAM,CAAC,SAAS,EAAE,uBAAuB,CAAC;SAC1C,MAAM,CAAC,UAAU,EAAE,wBAAwB,CAAC;SAC5C,MAAM,CAAC,KAAK,EAAE,IAAiB,EAAE,EAAE;QAClC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,KAAK,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,aAAa,GAAyC,KAAK,CAAC,MAAM,CAAC;QAEvE,IAAI,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC,CAAC;gBACtF,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YACD,aAAa,GAAG,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;YACpD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,OAAO;YACT,CAAC;YACD,KAAK,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC;QAC3D,CAAC;QAED,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,IAAI,YAAY,GAAsB,aAAa,CAAC;QACpD,MAAM,aAAa,GAAgC,EAAE,OAAO,EAAE,YAAY,CAAC,SAAS,EAAE,CAAC;QAEvF,IAAI,YAAY,CAAC,QAAQ,KAAK,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,oBAAW,CAAC,EAAE,CAAC;YACrE,6BAA6B,CAAC,YAAY,CAAC,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,WAAW,CAAC,YAAY,CAAC,CAAC;QAE1B,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,aAAa,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,IAAI,YAAY,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBACtC,6BAA6B,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;gBACpD,OAAO;YACT,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,4CAA4C,YAAY,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7G,CAAC;QAED,SAAS,EAAE,CAAC;QAEZ,MAAM,EAAE,GAAG,kBAAQ,CAAC,eAAe,CAAC;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,GAAG,eAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG;YACnC,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,EAAE,CAAC,MAAM,EAAE,CAAC;QAEZ,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,EAAE,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YAED,IAAI,CAAC;gBACH,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;oBAC7C,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO;gBACT,CAAC;gBAED,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC5B,MAAM,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBAChB,EAAE,CAAC,MAAM,EAAE,CAAC;oBACZ,OAAO;gBACT,CAAC;gBAED,QAAQ,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC7B,KAAK,MAAM;wBACT,SAAS,EAAE,CAAC;wBACZ,MAAM;oBACR,KAAK,OAAO,CAAC,CAAC,CAAC;wBACb,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,CAAC;wBACnD,IAAI,OAAO,EAAE,CAAC;4BACZ,YAAY,GAAG,OAAO,CAAC;4BACvB,aAAa,CAAC,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC;4BAC1C,WAAW,CAAC,YAAY,CAAC,CAAC;wBAC5B,CAAC;wBACD,MAAM;oBACR,CAAC;oBACD,KAAK,QAAQ;wBACX,MAAM,YAAY,CAAC,aAAa,CAAC,CAAC;wBAClC,MAAM;oBACR,KAAK,YAAY;wBACf,MAAM,gBAAgB,CAAC,aAAa,CAAC,CAAC;wBACtC,MAAM;oBACR,KAAK,UAAU;wBACb,MAAM,cAAc,CAAC,aAAa,CAAC,CAAC;wBACpC,MAAM;oBACR;wBACE,OAAO,CAAC,GAAG,CAAC,4BAA4B,YAAY,CAAC,QAAQ,qBAAqB,eAAe,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBAC5H,OAAO,CAAC,GAAG,CAAC,uFAAuF,CAAC,CAAC;wBACrG,MAAM;gBACV,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,KAAK,eAAK,CAAC,GAAG,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;YAClF,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,EAAE,CAAC,MAAM,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,OAAO,CAAQ,GAAG,EAAE;YAC5B,iDAAiD;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/commands/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAohBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+iB7D"}
|
package/dist/commands/daemon.js
CHANGED
|
@@ -352,6 +352,49 @@ async function startDaemonBackground(sandboxName, runtimeRemoteRoot) {
|
|
|
352
352
|
}
|
|
353
353
|
process.exit(1);
|
|
354
354
|
}
|
|
355
|
+
function exitWithDaemonStartupGuidance(stage, detail, envVarName) {
|
|
356
|
+
console.error(`ARC-402 daemon startup blocked during ${stage}: ${detail}`);
|
|
357
|
+
console.error("");
|
|
358
|
+
console.error("Next steps:");
|
|
359
|
+
if (stage === "config") {
|
|
360
|
+
console.error(" 1. Run `arc402 daemon init` or `arc402 setup` to create ~/.arc402/daemon.toml.");
|
|
361
|
+
console.error(" 2. Fill in wallet.contract_address and network.rpc_url, then retry `arc402 daemon start`.");
|
|
362
|
+
}
|
|
363
|
+
else {
|
|
364
|
+
console.error(` 1. Export ${envVarName ?? "ARC402_MACHINE_KEY"} before starting the daemon.`);
|
|
365
|
+
console.error(" 2. If you rely on ARC-402 CLI config, make sure `~/.arc402/config.json` still contains `privateKey`.");
|
|
366
|
+
console.error(" 3. Retry `arc402 daemon start` after the machine key is available.");
|
|
367
|
+
}
|
|
368
|
+
process.exit(1);
|
|
369
|
+
}
|
|
370
|
+
function validateDaemonStartupReadiness() {
|
|
371
|
+
let daemonConfig;
|
|
372
|
+
try {
|
|
373
|
+
daemonConfig = (0, config_2.loadDaemonConfig)();
|
|
374
|
+
}
|
|
375
|
+
catch (error) {
|
|
376
|
+
exitWithDaemonStartupGuidance("config", error instanceof Error ? error.message : String(error));
|
|
377
|
+
}
|
|
378
|
+
const envVarName = (0, config_2.getMachineKeyEnvVarName)(daemonConfig);
|
|
379
|
+
let candidateKey = process.env[envVarName];
|
|
380
|
+
if (!candidateKey) {
|
|
381
|
+
try {
|
|
382
|
+
candidateKey = (0, config_1.loadConfig)().privateKey;
|
|
383
|
+
}
|
|
384
|
+
catch {
|
|
385
|
+
// Ignore config load errors here; the daemon config guidance is enough.
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
if (!candidateKey) {
|
|
389
|
+
exitWithDaemonStartupGuidance("machine-key", `missing ${envVarName}`, envVarName);
|
|
390
|
+
}
|
|
391
|
+
try {
|
|
392
|
+
void new ethers_1.ethers.Wallet(candidateKey);
|
|
393
|
+
}
|
|
394
|
+
catch {
|
|
395
|
+
exitWithDaemonStartupGuidance("machine-key", `invalid private key in ${envVarName} / ARC-402 config`, envVarName);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
355
398
|
async function stopDaemon(opts = {}) {
|
|
356
399
|
const pid = readPid();
|
|
357
400
|
if (!pid) {
|
|
@@ -453,11 +496,7 @@ function registerDaemonCommands(program) {
|
|
|
453
496
|
.action(async (opts) => {
|
|
454
497
|
const foreground = opts.foreground;
|
|
455
498
|
const forceHost = opts.host;
|
|
456
|
-
|
|
457
|
-
console.error("daemon.toml not found.");
|
|
458
|
-
console.error("Run `arc402 daemon init` first so the OpenShell-owned runtime has a wallet, relay, and harness configuration to boot.");
|
|
459
|
-
process.exit(1);
|
|
460
|
-
}
|
|
499
|
+
validateDaemonStartupReadiness();
|
|
461
500
|
const openShellCfg = forceHost ? undefined : (0, openshell_runtime_1.readOpenShellConfig)();
|
|
462
501
|
const sandboxName = openShellCfg?.sandbox.name;
|
|
463
502
|
if (forceHost) {
|