chainlesschain 0.45.67 → 0.45.74
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/package.json +1 -1
- package/src/assets/web-panel/.build-hash +1 -1
- package/src/assets/web-panel/assets/Analytics-B4OM8S8X.css +1 -0
- package/src/assets/web-panel/assets/Analytics-sBrYoc3A.js +3 -0
- package/src/assets/web-panel/assets/AppLayout-BhJ3YFWt.js +1 -0
- package/src/assets/web-panel/assets/AppLayout-Cr2lWhF-.css +1 -0
- package/src/assets/web-panel/assets/Backup-D68fenbD.js +1 -0
- package/src/assets/web-panel/assets/Backup-fZqtfC1m.css +1 -0
- package/src/assets/web-panel/assets/{Chat-DXtvKoM0.js → Chat-DaxTP3x8.js} +1 -1
- package/src/assets/web-panel/assets/{Cron-BJ4ODHOy.js → Cron-CNs03iHJ.js} +2 -2
- package/src/assets/web-panel/assets/{Dashboard-BZd4wDPQ.js → Dashboard-CjlX4CrX.js} +2 -2
- package/src/assets/web-panel/assets/Git-CCMVr3Y8.js +2 -0
- package/src/assets/web-panel/assets/Git-DGcuBXST.css +1 -0
- package/src/assets/web-panel/assets/{Logs-CSeKZEG_.js → Logs-BY6A0UNG.js} +2 -2
- package/src/assets/web-panel/assets/{McpTools-BYQAK11r.js → McpTools-CrBVYlg6.js} +2 -2
- package/src/assets/web-panel/assets/{Memory-gkUAPyuZ.js → Memory-CWx3SpUt.js} +2 -2
- package/src/assets/web-panel/assets/{Notes-bjNrQgAo.js → Notes-1LcGD49x.js} +2 -2
- package/src/assets/web-panel/assets/Organization-DdOOM4ic.css +1 -0
- package/src/assets/web-panel/assets/Organization-Dx2DhbkM.js +4 -0
- package/src/assets/web-panel/assets/P2P-B16fjqfJ.js +2 -0
- package/src/assets/web-panel/assets/P2P-OEzOeMZX.css +1 -0
- package/src/assets/web-panel/assets/Permissions-BQbC9FzG.js +4 -0
- package/src/assets/web-panel/assets/Permissions-C9WlkGl-.css +1 -0
- package/src/assets/web-panel/assets/Projects-CjhZbNYm.js +2 -0
- package/src/assets/web-panel/assets/Projects-DxKelI5h.css +1 -0
- package/src/assets/web-panel/assets/Providers-BEakqcO5.css +1 -0
- package/src/assets/web-panel/assets/Providers-ivOAQtHM.js +2 -0
- package/src/assets/web-panel/assets/RssFeed-BlFC20eg.css +1 -0
- package/src/assets/web-panel/assets/RssFeed-BrsErdrU.js +3 -0
- package/src/assets/web-panel/assets/Security-DnEvJU5h.js +4 -0
- package/src/assets/web-panel/assets/Security-Dwxw7rfP.css +1 -0
- package/src/assets/web-panel/assets/{Services-CS0oMdxh.js → Services-7jQywNbl.js} +2 -2
- package/src/assets/web-panel/assets/Skills-BCvgBkD3.js +1 -0
- package/src/assets/web-panel/assets/{Tasks-qULws8pc.js → Tasks-CmJBC1cf.js} +1 -1
- package/src/assets/web-panel/assets/Templates-DOY_oZnm.css +1 -0
- package/src/assets/web-panel/assets/Templates-RXT8-DNk.js +1 -0
- package/src/assets/web-panel/assets/Wallet-3iYASEx_.js +4 -0
- package/src/assets/web-panel/assets/Wallet-DnIumafl.css +1 -0
- package/src/assets/web-panel/assets/WebAuthn-CNPl2VQR.css +1 -0
- package/src/assets/web-panel/assets/WebAuthn-s3Hzd9db.js +5 -0
- package/src/assets/web-panel/assets/{antd-CJSBocer.js → antd-gZyc63Qr.js} +114 -114
- package/src/assets/web-panel/assets/chat-BmwHBi9M.js +1 -0
- package/src/assets/web-panel/assets/index-DrmEk9S3.js +2 -0
- package/src/assets/web-panel/assets/{markdown-Bo5cVN4u.js → markdown-Bv7nG63L.js} +1 -1
- package/src/assets/web-panel/assets/ws-CU7Gvoom.js +1 -0
- package/src/assets/web-panel/index.html +2 -2
- package/src/commands/doctor.js +33 -151
- package/src/commands/mcp.js +1 -1
- package/src/commands/plugin.js +1 -1
- package/src/commands/session.js +106 -7
- package/src/commands/status.js +39 -69
- package/src/gateways/ws/message-dispatcher.js +9 -0
- package/src/gateways/ws/session-protocol.js +368 -1
- package/src/gateways/ws/ws-agent-handler.js +484 -0
- package/src/gateways/ws/ws-server.js +758 -4
- package/src/gateways/ws/ws-session-gateway.js +1432 -1
- package/src/harness/mcp-client.js +417 -0
- package/src/harness/mock-llm-provider.js +167 -0
- package/src/harness/plugin-manager.js +434 -0
- package/src/lib/agent-core.js +25 -1902
- package/src/lib/hashline.js +208 -0
- package/src/lib/jsonl-session-store.js +11 -0
- package/src/lib/mcp-client.js +14 -412
- package/src/lib/plugin-manager.js +29 -428
- package/src/lib/prompt-compressor.js +11 -0
- package/src/lib/session-hooks.js +61 -0
- package/src/lib/skill-loader.js +4 -0
- package/src/lib/skill-mcp.js +190 -0
- package/src/lib/workflow-state-reader.js +94 -0
- package/src/lib/ws-agent-handler.js +8 -472
- package/src/lib/ws-server.js +12 -726
- package/src/lib/ws-session-manager.js +8 -1178
- package/src/repl/agent-repl.js +27 -3
- package/src/runtime/agent-core.js +1760 -0
- package/src/runtime/agent-runtime.js +3 -1
- package/src/runtime/coding-agent-contract-shared.cjs +496 -0
- package/src/runtime/coding-agent-contract.js +49 -229
- package/src/runtime/coding-agent-events.cjs +14 -0
- package/src/runtime/coding-agent-policy.cjs +54 -5
- package/src/runtime/diagnostics.js +317 -0
- package/src/runtime/index.js +3 -0
- package/src/tools/index.js +3 -0
- package/src/tools/legacy-agent-tools.js +5 -0
- package/src/assets/web-panel/assets/AppLayout-B_tkw3Pn.js +0 -1
- package/src/assets/web-panel/assets/AppLayout-CFP4dGIJ.css +0 -1
- package/src/assets/web-panel/assets/Providers-Brm-S_hS.css +0 -1
- package/src/assets/web-panel/assets/Providers-Dbf57Tbv.js +0 -1
- package/src/assets/web-panel/assets/Skills-B2fgruv8.js +0 -1
- package/src/assets/web-panel/assets/chat-DnH09sSR.js +0 -1
- package/src/assets/web-panel/assets/index-IK-oro0g.js +0 -2
- package/src/assets/web-panel/assets/ws-DjelKkD6.js +0 -1
|
@@ -0,0 +1,317 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Runtime diagnostics — machine-readable doctor/status reports.
|
|
3
|
+
*
|
|
4
|
+
* Canonical data collectors for `chainlesschain doctor` and
|
|
5
|
+
* `chainlesschain status`. These return plain JSON-serializable
|
|
6
|
+
* objects that both the human-readable CLI renderers and external
|
|
7
|
+
* consumers (IDE integrations, monitoring) can rely on.
|
|
8
|
+
*
|
|
9
|
+
* Introduced as part of the CLI Runtime Convergence roadmap (Phase 5,
|
|
10
|
+
* 2026-04-09) per ADR decision D6 (machine-readable doctor/status JSON).
|
|
11
|
+
*
|
|
12
|
+
* Refs: docs/implementation-plans/CLI_RUNTIME_CONVERGENCE_ADR.md
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { execSync } from "node:child_process";
|
|
16
|
+
import { existsSync, readdirSync } from "node:fs";
|
|
17
|
+
import { createConnection } from "node:net";
|
|
18
|
+
import semver from "semver";
|
|
19
|
+
|
|
20
|
+
import { MIN_NODE_VERSION, DEFAULT_PORTS, VERSION } from "../constants.js";
|
|
21
|
+
import { getHomeDir, getConfigPath, getBinDir } from "../lib/paths.js";
|
|
22
|
+
import {
|
|
23
|
+
isDockerAvailable,
|
|
24
|
+
isDockerComposeAvailable,
|
|
25
|
+
getServiceStatus,
|
|
26
|
+
findComposeFile,
|
|
27
|
+
} from "../lib/service-manager.js";
|
|
28
|
+
import { loadConfig } from "../lib/config-manager.js";
|
|
29
|
+
import { isAppRunning, getAppPid } from "../lib/process-manager.js";
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Probe a TCP port. Resolves true if something is listening.
|
|
33
|
+
*/
|
|
34
|
+
export function checkPort(port, host = "127.0.0.1", timeoutMs = 1000) {
|
|
35
|
+
return new Promise((resolve) => {
|
|
36
|
+
const socket = createConnection({ port, host, timeout: timeoutMs });
|
|
37
|
+
socket.on("connect", () => {
|
|
38
|
+
socket.destroy();
|
|
39
|
+
resolve(true);
|
|
40
|
+
});
|
|
41
|
+
socket.on("error", () => resolve(false));
|
|
42
|
+
socket.on("timeout", () => {
|
|
43
|
+
socket.destroy();
|
|
44
|
+
resolve(false);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function readdirSafe(dir) {
|
|
50
|
+
try {
|
|
51
|
+
return readdirSync(dir);
|
|
52
|
+
} catch {
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function safeExec(cmd) {
|
|
58
|
+
try {
|
|
59
|
+
return execSync(cmd, { encoding: "utf-8" }).trim();
|
|
60
|
+
} catch {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Collect a machine-readable doctor report.
|
|
67
|
+
*
|
|
68
|
+
* Shape:
|
|
69
|
+
* {
|
|
70
|
+
* schema: "chainlesschain.doctor.v1",
|
|
71
|
+
* version: string, // CLI version
|
|
72
|
+
* generatedAt: string, // ISO timestamp
|
|
73
|
+
* checks: Array<{ id, name, ok, optional, detail }>,
|
|
74
|
+
* ports: Array<{ name, port, open }>,
|
|
75
|
+
* disk: { homeDir, freeGB } | null,
|
|
76
|
+
* summary: { total, passed, failed, criticalFailed }
|
|
77
|
+
* }
|
|
78
|
+
*/
|
|
79
|
+
export async function collectDoctorReport() {
|
|
80
|
+
const checks = [];
|
|
81
|
+
|
|
82
|
+
// Node.js
|
|
83
|
+
const nodeVersion = process.versions.node;
|
|
84
|
+
const nodeOk = semver.gte(nodeVersion, MIN_NODE_VERSION);
|
|
85
|
+
checks.push({
|
|
86
|
+
id: "node",
|
|
87
|
+
name: `Node.js ${nodeVersion}`,
|
|
88
|
+
ok: nodeOk,
|
|
89
|
+
optional: false,
|
|
90
|
+
detail: nodeOk ? "" : `Requires >=${MIN_NODE_VERSION}`,
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// npm
|
|
94
|
+
const npmVersion = safeExec("npm --version");
|
|
95
|
+
checks.push({
|
|
96
|
+
id: "npm",
|
|
97
|
+
name: npmVersion ? `npm ${npmVersion}` : "npm",
|
|
98
|
+
ok: Boolean(npmVersion),
|
|
99
|
+
optional: false,
|
|
100
|
+
detail: npmVersion ? "" : "Not found",
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
// Docker
|
|
104
|
+
const dockerOk = isDockerAvailable();
|
|
105
|
+
checks.push({
|
|
106
|
+
id: "docker",
|
|
107
|
+
name: "Docker",
|
|
108
|
+
ok: dockerOk,
|
|
109
|
+
optional: true,
|
|
110
|
+
detail: dockerOk ? "" : "Not installed (optional)",
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
const composeOk = isDockerComposeAvailable();
|
|
114
|
+
checks.push({
|
|
115
|
+
id: "docker-compose",
|
|
116
|
+
name: "Docker Compose",
|
|
117
|
+
ok: composeOk,
|
|
118
|
+
optional: true,
|
|
119
|
+
detail: composeOk ? "" : "Not installed (optional)",
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
// Git
|
|
123
|
+
const gitVersion = safeExec("git --version");
|
|
124
|
+
checks.push({
|
|
125
|
+
id: "git",
|
|
126
|
+
name: gitVersion || "Git",
|
|
127
|
+
ok: Boolean(gitVersion),
|
|
128
|
+
optional: false,
|
|
129
|
+
detail: gitVersion ? "" : "Not found",
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
// Config directory
|
|
133
|
+
const homeDir = getHomeDir();
|
|
134
|
+
const homeOk = existsSync(homeDir);
|
|
135
|
+
checks.push({
|
|
136
|
+
id: "config-dir",
|
|
137
|
+
name: `Config dir: ${homeDir}`,
|
|
138
|
+
ok: homeOk,
|
|
139
|
+
optional: false,
|
|
140
|
+
detail: homeOk ? "" : 'Run "chainlesschain setup"',
|
|
141
|
+
});
|
|
142
|
+
|
|
143
|
+
// Config file
|
|
144
|
+
const configPath = getConfigPath();
|
|
145
|
+
const configOk = existsSync(configPath);
|
|
146
|
+
checks.push({
|
|
147
|
+
id: "config-file",
|
|
148
|
+
name: "Config file",
|
|
149
|
+
ok: configOk,
|
|
150
|
+
optional: false,
|
|
151
|
+
detail: configOk ? "" : 'Run "chainlesschain setup"',
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
// Desktop binary
|
|
155
|
+
const binDir = getBinDir();
|
|
156
|
+
const hasBin = existsSync(binDir) && readdirSafe(binDir).length > 0;
|
|
157
|
+
checks.push({
|
|
158
|
+
id: "desktop-binary",
|
|
159
|
+
name: "Desktop binary",
|
|
160
|
+
ok: hasBin,
|
|
161
|
+
optional: true,
|
|
162
|
+
detail: hasBin
|
|
163
|
+
? ""
|
|
164
|
+
: 'Run "chainlesschain setup" or "chainlesschain update"',
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
// Setup completed
|
|
168
|
+
let setupCompleted = false;
|
|
169
|
+
try {
|
|
170
|
+
setupCompleted = Boolean(loadConfig().setupCompleted);
|
|
171
|
+
} catch {
|
|
172
|
+
// loadConfig may throw if config missing
|
|
173
|
+
}
|
|
174
|
+
checks.push({
|
|
175
|
+
id: "setup-completed",
|
|
176
|
+
name: "Setup completed",
|
|
177
|
+
ok: setupCompleted,
|
|
178
|
+
optional: false,
|
|
179
|
+
detail: setupCompleted ? "" : 'Run "chainlesschain setup"',
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
// Port scan
|
|
183
|
+
const ports = [];
|
|
184
|
+
for (const [name, port] of Object.entries(DEFAULT_PORTS)) {
|
|
185
|
+
const open = await checkPort(port);
|
|
186
|
+
ports.push({ name, port, open });
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Disk (Node 22+ statfsSync)
|
|
190
|
+
let disk = null;
|
|
191
|
+
try {
|
|
192
|
+
const { statfsSync } = await import("node:fs");
|
|
193
|
+
if (typeof statfsSync === "function") {
|
|
194
|
+
const stats = statfsSync(homeDir);
|
|
195
|
+
const freeGB = (stats.bavail * stats.bsize) / (1024 * 1024 * 1024);
|
|
196
|
+
disk = { homeDir, freeGB: Number(freeGB.toFixed(2)) };
|
|
197
|
+
}
|
|
198
|
+
} catch {
|
|
199
|
+
// statfsSync unavailable on some platforms
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
const failed = checks.filter((c) => !c.ok);
|
|
203
|
+
const criticalFailed = failed.filter((c) => !c.optional);
|
|
204
|
+
|
|
205
|
+
return {
|
|
206
|
+
schema: "chainlesschain.doctor.v1",
|
|
207
|
+
version: VERSION,
|
|
208
|
+
generatedAt: new Date().toISOString(),
|
|
209
|
+
checks,
|
|
210
|
+
ports,
|
|
211
|
+
disk,
|
|
212
|
+
summary: {
|
|
213
|
+
total: checks.length,
|
|
214
|
+
passed: checks.length - failed.length,
|
|
215
|
+
failed: failed.length,
|
|
216
|
+
criticalFailed: criticalFailed.length,
|
|
217
|
+
},
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Collect a machine-readable status report.
|
|
223
|
+
*
|
|
224
|
+
* Shape:
|
|
225
|
+
* {
|
|
226
|
+
* schema: "chainlesschain.status.v1",
|
|
227
|
+
* version: string,
|
|
228
|
+
* generatedAt: string,
|
|
229
|
+
* app: { running, pid },
|
|
230
|
+
* setup: { completed, completedAt, edition, llm: { provider, model } } | null,
|
|
231
|
+
* docker: {
|
|
232
|
+
* available,
|
|
233
|
+
* composePath: string | null,
|
|
234
|
+
* services: Array<{ name, state }> | null,
|
|
235
|
+
* note: string | null
|
|
236
|
+
* },
|
|
237
|
+
* ports: Array<{ name, port, open }>
|
|
238
|
+
* }
|
|
239
|
+
*/
|
|
240
|
+
export async function collectStatusReport() {
|
|
241
|
+
let config = {};
|
|
242
|
+
try {
|
|
243
|
+
config = loadConfig();
|
|
244
|
+
} catch {
|
|
245
|
+
// loadConfig may throw if config missing
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// App
|
|
249
|
+
const running = isAppRunning();
|
|
250
|
+
const app = {
|
|
251
|
+
running,
|
|
252
|
+
pid: running ? getAppPid() : null,
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
// Setup
|
|
256
|
+
const setup = config.setupCompleted
|
|
257
|
+
? {
|
|
258
|
+
completed: true,
|
|
259
|
+
completedAt: config.completedAt || null,
|
|
260
|
+
edition: config.edition || null,
|
|
261
|
+
llm: config.llm
|
|
262
|
+
? {
|
|
263
|
+
provider: config.llm.provider || null,
|
|
264
|
+
model: config.llm.model || null,
|
|
265
|
+
}
|
|
266
|
+
: null,
|
|
267
|
+
}
|
|
268
|
+
: { completed: false };
|
|
269
|
+
|
|
270
|
+
// Docker services
|
|
271
|
+
const dockerAvailable = isDockerAvailable();
|
|
272
|
+
const docker = {
|
|
273
|
+
available: dockerAvailable,
|
|
274
|
+
composePath: null,
|
|
275
|
+
services: null,
|
|
276
|
+
note: null,
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
if (!dockerAvailable) {
|
|
280
|
+
docker.note = "Docker not available";
|
|
281
|
+
} else {
|
|
282
|
+
const composePath = findComposeFile([process.cwd(), "backend/docker"]);
|
|
283
|
+
if (!composePath) {
|
|
284
|
+
docker.note = "docker-compose.yml not found";
|
|
285
|
+
} else {
|
|
286
|
+
docker.composePath = composePath;
|
|
287
|
+
const raw = getServiceStatus(composePath);
|
|
288
|
+
if (Array.isArray(raw)) {
|
|
289
|
+
docker.services = raw.map((svc) => ({
|
|
290
|
+
name: svc.Service || svc.Name || null,
|
|
291
|
+
state: svc.State || null,
|
|
292
|
+
}));
|
|
293
|
+
} else if (raw) {
|
|
294
|
+
docker.note = String(raw);
|
|
295
|
+
} else {
|
|
296
|
+
docker.note = "No services running";
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
// Ports
|
|
302
|
+
const ports = [];
|
|
303
|
+
for (const [name, port] of Object.entries(DEFAULT_PORTS)) {
|
|
304
|
+
const open = await checkPort(port);
|
|
305
|
+
ports.push({ name, port, open });
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
return {
|
|
309
|
+
schema: "chainlesschain.status.v1",
|
|
310
|
+
version: VERSION,
|
|
311
|
+
generatedAt: new Date().toISOString(),
|
|
312
|
+
app,
|
|
313
|
+
setup,
|
|
314
|
+
docker,
|
|
315
|
+
ports,
|
|
316
|
+
};
|
|
317
|
+
}
|
package/src/runtime/index.js
CHANGED
|
@@ -15,7 +15,10 @@ export {
|
|
|
15
15
|
CODING_AGENT_MVP_TOOL_NAMES,
|
|
16
16
|
CODING_AGENT_EXTENSION_TOOL_NAMES,
|
|
17
17
|
createCodingAgentToolRegistry,
|
|
18
|
+
getCodingAgentFunctionToolDefinition,
|
|
19
|
+
getCodingAgentFunctionToolDefinitions,
|
|
18
20
|
getCodingAgentRuntimeDescriptor,
|
|
21
|
+
getCodingAgentRuntimeDescriptorByCommand,
|
|
19
22
|
getCodingAgentToolContract,
|
|
20
23
|
getCodingAgentToolContracts,
|
|
21
24
|
getCodingAgentToolPolicy,
|
package/src/tools/index.js
CHANGED
|
@@ -24,7 +24,10 @@ export {
|
|
|
24
24
|
CODING_AGENT_MVP_TOOL_NAMES,
|
|
25
25
|
CODING_AGENT_EXTENSION_TOOL_NAMES,
|
|
26
26
|
createCodingAgentToolRegistry,
|
|
27
|
+
getCodingAgentFunctionToolDefinition,
|
|
28
|
+
getCodingAgentFunctionToolDefinitions,
|
|
27
29
|
getCodingAgentRuntimeDescriptor,
|
|
30
|
+
getCodingAgentRuntimeDescriptorByCommand,
|
|
28
31
|
getCodingAgentToolContract,
|
|
29
32
|
getCodingAgentToolContracts,
|
|
30
33
|
getCodingAgentToolPolicy,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
createCodingAgentToolRegistry,
|
|
3
3
|
getCodingAgentRuntimeDescriptor,
|
|
4
|
+
getCodingAgentRuntimeDescriptorByCommand,
|
|
4
5
|
listCodingAgentToolNames,
|
|
5
6
|
mapCodingAgentToolDefinition,
|
|
6
7
|
} from "../runtime/coding-agent-contract.js";
|
|
@@ -24,3 +25,7 @@ export function listLegacyAgentToolNames() {
|
|
|
24
25
|
export function getRuntimeToolDescriptor(toolName) {
|
|
25
26
|
return getCodingAgentRuntimeDescriptor(toolName);
|
|
26
27
|
}
|
|
28
|
+
|
|
29
|
+
export function getRuntimeToolDescriptorByCommand(command) {
|
|
30
|
+
return getCodingAgentRuntimeDescriptorByCommand(command);
|
|
31
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{o as ne,W as y,Z as t,X as i,$ as ae,a0 as le,Y as l,k as e,a1 as a,a2 as C,a3 as r,a4 as j,F as O,u as s,a5 as f,G as d,a6 as ie,a7 as de,f as ue,c as p}from"./vendor-CN0Iv_qZ.js";import{u as re}from"./ws-DjelKkD6.js";import{u as ce,T as me}from"./index-IK-oro0g.js";import{_ as pe}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{F as x,G as B,D as F,M as L,C as A,b as I,c as D,d as G,e as K,B as R,f as V,h as E,T as $,I as _e}from"./antd-CJSBocer.js";const ve={key:0,class:"logo-text"},ye={key:0,class:"mode-banner project"},fe={class:"banner-info"},ke={class:"banner-name"},ge={key:1,class:"mode-banner global"},be=["title"],Ce={key:0,class:"footer-text"},Oe={class:"header-left"},we={class:"header-right"},Te={class:"theme-switcher"},je=["data-theme-key","onClick"],xe={__name:"AppLayout",setup(Be){const P=ae(),U=le(),k=re(),w=ce(),u=ue(!1),_=window.__CC_CONFIG__||{},m=p(()=>_.mode==="project"),W=p(()=>w.current),z=p(()=>w.config.vars["--menu-mode"]),N=p(()=>{const c=U.name?.toLowerCase()||"dashboard";return[{mcptools:"mcp"}[c]||c]}),g=p(()=>k.status),H=p(()=>({connected:"success",connecting:"processing",error:"error",disconnected:"default"})[k.status]||"default"),X=p(()=>({connected:"已连接",connecting:"连接中...",error:"连接错误",disconnected:"未连接"})[k.status]||"未知");function Y(c){w.setTheme(c)}function Z({key:c}){P.push({mcp:"/mcp"}[c]||`/${c}`)}return ne(()=>k.connect()),(c,o)=>{const n=i("a-menu-item"),T=i("a-menu-item-group"),M=i("a-menu-divider"),q=i("a-menu"),J=i("a-badge"),Q=i("a-layout-sider"),S=i("a-tooltip"),ee=i("a-tag"),te=i("a-layout-header"),oe=i("router-view"),se=i("a-layout-content"),h=i("a-layout");return l(),y(h,{class:"app-root"},{default:t(()=>[e(Q,{collapsed:u.value,"onUpdate:collapsed":o[1]||(o[1]=v=>u.value=v),collapsible:"","collapsed-width":56,width:216,class:"sidebar"},{default:t(()=>[a("div",{class:C(["logo",{collapsed:u.value}])},[o[2]||(o[2]=a("span",{class:"logo-icon"},"⛓",-1)),u.value?j("",!0):(l(),r("span",ve,"ChainlessChain"))],2),u.value?(l(),r("div",{key:1,class:"mode-icon-sm",title:m.value?s(_).projectName:"全局模式"},[m.value?(l(),y(s(x),{key:0,style:{color:"#1677ff"}})):(l(),y(s(B),{key:1,style:{color:"#722ed1"}}))],8,be)):(l(),r(O,{key:0},[m.value?(l(),r("div",ye,[e(s(x),{class:"banner-icon"}),a("div",fe,[a("div",ke,f(s(_).projectName||"项目"),1),o[3]||(o[3]=a("div",{class:"banner-sub"},"项目级面板",-1))])])):(l(),r("div",ge,[e(s(B),{class:"banner-icon"}),o[4]||(o[4]=a("span",{class:"banner-name"},"全局模式",-1))]))],64)),e(q,{selectedKeys:N.value,"onUpdate:selectedKeys":o[0]||(o[0]=v=>N.value=v),theme:z.value,mode:"inline","inline-collapsed":u.value,class:"side-menu",onClick:Z},{default:t(()=>[u.value?(l(),r(O,{key:1},[e(n,{key:"dashboard"},{icon:t(()=>[e(s(F))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(L))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(A))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(I))]),_:1}),e(M,{class:"divider-sm"}),e(n,{key:"skills"},{icon:t(()=>[e(s(D))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(G))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(K))]),_:1}),e(M,{class:"divider-sm"}),e(n,{key:"notes"},{icon:t(()=>[e(s(R))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(V))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(E))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s($))]),_:1})],64)):(l(),r(O,{key:0},[e(T,null,{title:t(()=>[...o[5]||(o[5]=[a("span",{class:"group-label"},"概 览",-1)])]),default:t(()=>[e(n,{key:"dashboard"},{icon:t(()=>[e(s(F))]),default:t(()=>[o[6]||(o[6]=d("仪表板",-1))]),_:1}),e(n,{key:"chat"},{icon:t(()=>[e(s(L))]),default:t(()=>[o[7]||(o[7]=d("AI 对话",-1))]),_:1}),e(n,{key:"services"},{icon:t(()=>[e(s(A))]),default:t(()=>[o[8]||(o[8]=d("服务管理",-1))]),_:1}),e(n,{key:"logs"},{icon:t(()=>[e(s(I))]),default:t(()=>[o[9]||(o[9]=d("日志查看",-1))]),_:1})]),_:1}),e(T,null,{title:t(()=>[...o[10]||(o[10]=[a("span",{class:"group-label"},"配 置",-1)])]),default:t(()=>[e(n,{key:"skills"},{icon:t(()=>[e(s(D))]),default:t(()=>[o[11]||(o[11]=d("技能管理",-1))]),_:1}),e(n,{key:"providers"},{icon:t(()=>[e(s(G))]),default:t(()=>[o[12]||(o[12]=d("LLM 配置",-1))]),_:1}),e(n,{key:"mcp"},{icon:t(()=>[e(s(K))]),default:t(()=>[o[13]||(o[13]=d("MCP 工具",-1))]),_:1})]),_:1}),e(T,null,{title:t(()=>[...o[14]||(o[14]=[a("span",{class:"group-label"},"数 据",-1)])]),default:t(()=>[e(n,{key:"notes"},{icon:t(()=>[e(s(R))]),default:t(()=>[o[15]||(o[15]=d("笔记管理",-1))]),_:1}),e(n,{key:"memory"},{icon:t(()=>[e(s(V))]),default:t(()=>[o[16]||(o[16]=d("记忆文件",-1))]),_:1}),e(n,{key:"cron"},{icon:t(()=>[e(s(E))]),default:t(()=>[o[17]||(o[17]=d("定时任务",-1))]),_:1}),e(n,{key:"tasks"},{icon:t(()=>[e(s($))]),default:t(()=>[o[18]||(o[18]=d("后台任务",-1))]),_:1})]),_:1})],64))]),_:1},8,["selectedKeys","theme","inline-collapsed"]),a("div",{class:C(["sidebar-footer",{collapsed:u.value}])},[e(J,{status:H.value},null,8,["status"]),u.value?j("",!0):(l(),r("span",Ce,f(X.value),1))],2)]),_:1},8,["collapsed"]),e(h,{class:"main-area"},{default:t(()=>[e(te,{class:"app-header"},{default:t(()=>[a("div",Oe,[a("div",{class:C(["scope-tag",m.value?"project":"global"])},[(l(),y(ie(m.value?s(x):s(B)))),a("span",null,f(m.value?s(_).projectName||"项目":"全局模式"),1),m.value&&s(_).projectRoot?(l(),y(S,{key:0,title:s(_).projectRoot},{default:t(()=>[e(s(_e),{class:"info-icon"})]),_:1},8,["title"])):j("",!0)],2)]),a("div",we,[a("div",Te,[(l(!0),r(O,null,de(s(me),(v,b)=>(l(),y(S,{key:b,title:v.label},{default:t(()=>[a("button",{class:C(["theme-btn",{active:W.value===b}]),"data-theme-key":b,onClick:Ne=>Y(b)},f(v.icon),11,je)]),_:2},1032,["title"]))),128))]),o[19]||(o[19]=a("span",{class:"version-tag"},"v5.0.2.9",-1)),e(ee,{color:g.value==="connected"?"green":g.value==="connecting"?"orange":"red",class:"ws-tag"},{default:t(()=>[d(f(g.value==="connected"?"已连接":g.value==="connecting"?"连接中":"断开"),1)]),_:1},8,["color"])])]),_:1}),e(se,{class:"page-content"},{default:t(()=>[e(oe)]),_:1})]),_:1})]),_:1})}}},Ae=pe(xe,[["__scopeId","data-v-3fd6e0b7"]]);export{Ae as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.app-root[data-v-3fd6e0b7]{min-height:100vh;background:var(--bg-base)}.sidebar[data-v-3fd6e0b7]{background:var(--bg-sidebar)!important;border-right:1px solid var(--border-color);transition:background .25s}.main-area[data-v-3fd6e0b7]{background:var(--bg-base)}.logo[data-v-3fd6e0b7]{height:52px;display:flex;align-items:center;padding:0 18px;gap:10px;border-bottom:1px solid var(--border-color);overflow:hidden;white-space:nowrap;flex-shrink:0}.logo.collapsed[data-v-3fd6e0b7]{padding:0;justify-content:center}.logo-icon[data-v-3fd6e0b7]{font-size:20px;flex-shrink:0}.logo-text[data-v-3fd6e0b7]{color:var(--logo-text);font-weight:700;font-size:14px;letter-spacing:.01em}.mode-banner[data-v-3fd6e0b7]{display:flex;align-items:center;gap:8px;padding:7px 10px;margin:8px 8px 4px;border-radius:7px;overflow:hidden}.mode-banner.project[data-v-3fd6e0b7]{background:#1677ff1a;border:1px solid rgba(22,119,255,.2)}.mode-banner.global[data-v-3fd6e0b7]{background:#722ed11a;border:1px solid rgba(114,46,209,.2)}.banner-icon[data-v-3fd6e0b7]{font-size:13px;flex-shrink:0;color:#1677ff}.mode-banner.global .banner-icon[data-v-3fd6e0b7]{color:#722ed1}.banner-info[data-v-3fd6e0b7]{flex:1;min-width:0}.banner-name[data-v-3fd6e0b7]{font-size:12px;font-weight:600;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.banner-sub[data-v-3fd6e0b7]{font-size:10px;color:#1677ff;margin-top:1px}.mode-banner.global .banner-name[data-v-3fd6e0b7]{color:#c084fc}.mode-icon-sm[data-v-3fd6e0b7]{display:flex;justify-content:center;padding:8px 0;font-size:14px}.side-menu[data-v-3fd6e0b7]{border:none!important;margin-top:2px;-webkit-user-select:none;user-select:none;background:transparent!important}.group-label[data-v-3fd6e0b7]{color:var(--group-title);font-size:10px;font-weight:700;letter-spacing:.12em;padding-left:6px}[data-v-3fd6e0b7] .ant-menu-item-group-title{padding:8px 16px 2px!important}[data-v-3fd6e0b7] .ant-menu-item{height:38px!important;line-height:38px!important;margin:1px 4px!important;border-radius:6px!important}.divider-sm[data-v-3fd6e0b7]{margin:4px 0!important}.sidebar-footer[data-v-3fd6e0b7]{position:absolute;bottom:48px;left:0;right:0;padding:8px 18px;display:flex;align-items:center;gap:8px;border-top:1px solid var(--border-color)}.sidebar-footer.collapsed[data-v-3fd6e0b7]{justify-content:center;padding:8px 0}.footer-text[data-v-3fd6e0b7]{color:var(--text-secondary);font-size:11px}.app-header[data-v-3fd6e0b7]{background:var(--bg-header)!important;padding:0 20px!important;border-bottom:1px solid var(--border-color);height:50px!important;line-height:50px!important;display:flex!important;align-items:center!important;justify-content:space-between!important;box-shadow:0 1px 4px #0000000f}.header-left[data-v-3fd6e0b7],.header-right[data-v-3fd6e0b7]{display:flex;align-items:center;gap:10px}.scope-tag[data-v-3fd6e0b7]{display:flex;align-items:center;gap:5px;padding:3px 10px;border-radius:5px;font-size:12px;font-weight:500}.scope-tag.project[data-v-3fd6e0b7]{background:#1677ff1a;color:#1677ff;border:1px solid rgba(22,119,255,.2)}.scope-tag.global[data-v-3fd6e0b7]{background:#722ed11a;color:#722ed1;border:1px solid rgba(114,46,209,.2)}.info-icon[data-v-3fd6e0b7]{opacity:.45;cursor:help;margin-left:2px}.theme-switcher[data-v-3fd6e0b7]{display:flex;align-items:center;gap:4px;background:var(--bg-card);border:1px solid var(--border-color);border-radius:20px;padding:3px 6px}.theme-btn[data-v-3fd6e0b7]{width:26px;height:26px;border:none;border-radius:50%;cursor:pointer;background:transparent;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .15s,transform .15s;opacity:.55}.theme-btn[data-v-3fd6e0b7]:hover{opacity:.9;transform:scale(1.15);background:var(--bg-card-hover)}.theme-btn.active[data-v-3fd6e0b7]{opacity:1;transform:scale(1.1);background:var(--bg-card-hover);outline:2px solid var(--text-secondary)}.version-tag[data-v-3fd6e0b7]{color:var(--text-muted);font-size:11px}.ws-tag[data-v-3fd6e0b7]{margin:0!important;font-size:11px}.page-content[data-v-3fd6e0b7]{padding:24px;overflow:auto;background:var(--bg-base);min-height:calc(100vh - 50px)}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.providers-grid[data-v-6ade5578]{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}.provider-card[data-v-6ade5578]{border:1px solid var(--border-color)!important;transition:border-color .2s}.provider-card[data-v-6ade5578]:hover{border-color:var(--text-muted)!important}.provider-card.active[data-v-6ade5578]{border-color:#52c41a!important;background:#29a27014!important}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{V as S,f as b,o as V,a3 as k,a1 as e,k as v,Z as r,u as d,W as f,a4 as $,F as B,a7 as N,X as m,Y as l,G as y,a5 as _,a2 as F}from"./vendor-CN0Iv_qZ.js";import{u as M}from"./ws-DjelKkD6.js";import{a as I,b as O}from"./parsers-DftYMnlk.js";import{_ as j}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{R as E,o as h}from"./antd-CJSBocer.js";const R=S("providers",()=>{const w=b(!1),o=b(null),u=b([]),P=b([]),i=b(null);async function t(){const a=M();w.value=!0;try{const{output:c}=await a.execute("llm providers",15e3);u.value=I(c);const n=u.value.find(g=>g.active);n&&(i.value=n.name);const{output:p}=await a.execute("llm models",15e3);P.value=O(p)}catch(c){console.error("Failed to load providers:",c)}finally{w.value=!1}}async function x(a){await M().execute(`llm switch ${a}`,1e4),u.value.forEach(n=>n.active=n.name===a),i.value=a}async function z(a){const c=M();o.value=a;try{const{output:n,exitCode:p}=await c.execute("llm test",3e4),g=u.value.find(C=>C.name===a);return g&&(g.status=p===0?"ok":"error"),p===0}catch{const n=u.value.find(p=>p.name===a);return n&&(n.status="error"),!1}finally{o.value=null}}return{loading:w,testing:o,providers:u,localModels:P,activeProvider:i,loadProviders:t,switchProvider:x,testProvider:z}}),W={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},A={key:1,style:{"text-align":"center",padding:"60px"}},D={key:2},G={class:"providers-grid"},T={style:{display:"flex","align-items":"center",gap:"12px","margin-bottom":"12px"}},X={style:{"font-size":"24px"}},Y={style:{flex:"1"}},Z={style:{color:"#e0e0e0","font-weight":"500"}},q={style:{color:"var(--text-secondary)","font-size":"11px","font-family":"monospace"}},H={style:{display:"flex",gap:"8px","justify-content":"flex-end"}},J={key:0,style:{"margin-top":"24px"}},K={style:{color:"#ccc","font-family":"monospace","font-size":"13px"}},Q={__name:"Providers",setup(w){const o=R();async function u(i){try{await o.switchProvider(i),h.success(`已切换到 ${i}`)}catch(t){h.error(`切换失败: ${t.message}`)}}async function P(i){await o.testProvider(i)?h.success(`${i} 连接正常`):h.warning(`${i} 连接失败,请检查配置`)}return V(()=>{o.loadProviders()}),(i,t)=>{const x=m("a-button"),z=m("a-alert"),a=m("a-spin"),c=m("a-tag"),n=m("a-badge"),p=m("a-card"),g=m("a-list-item"),C=m("a-list");return l(),k("div",null,[e("div",W,[t[2]||(t[2]=e("div",null,[e("h2",{class:"page-title"},"LLM 配置"),e("p",{class:"page-sub"},"管理 AI 服务提供商")],-1)),v(x,{type:"primary",ghost:"",loading:d(o).loading,onClick:t[0]||(t[0]=s=>d(o).loadProviders())},{icon:r(()=>[v(d(E))]),default:r(()=>[t[1]||(t[1]=y(" 刷新 ",-1))]),_:1},8,["loading"])]),d(o).activeProvider?(l(),f(z,{key:0,type:"success",style:{"margin-bottom":"20px",background:"rgba(41,162,112,.08)","border-color":"rgba(41,162,112,.3)"},"show-icon":""},{message:r(()=>[e("span",null,[t[3]||(t[3]=y("当前激活:",-1)),e("strong",null,_(d(o).activeProvider),1)])]),_:1})):$("",!0),d(o).loading?(l(),k("div",A,[v(a,{size:"large"}),t[4]||(t[4]=e("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载 LLM 信息中...",-1))])):(l(),k("div",D,[e("div",G,[(l(!0),k(B,null,N(d(o).providers,s=>(l(),f(p,{key:s.name,class:F(["provider-card",{active:s.active}]),style:{background:"var(--bg-card)"},size:"small"},{default:r(()=>[e("div",T,[e("span",X,_(s.icon),1),e("div",Y,[e("div",Z,_(s.label),1),e("div",q,_(s.name),1)]),e("div",null,[s.active?(l(),f(c,{key:0,color:"green"},{default:r(()=>[...t[5]||(t[5]=[y("活跃",-1)])]),_:1})):s.status==="ok"?(l(),f(n,{key:1,status:"success",text:""})):s.status==="error"?(l(),f(n,{key:2,status:"error",text:""})):$("",!0)])]),e("div",H,[v(x,{size:"small",style:{background:"var(--bg-card-hover)","border-color":"var(--border-color)"},loading:d(o).testing===s.name,onClick:L=>P(s.name)},{default:r(()=>[...t[6]||(t[6]=[y(" 测试 ",-1)])]),_:1},8,["loading","onClick"]),s.active?(l(),f(c,{key:1,color:"green",style:{margin:"0","line-height":"24px"}},{default:r(()=>[...t[8]||(t[8]=[y("当前",-1)])]),_:1})):(l(),f(x,{key:0,size:"small",type:"primary",ghost:"",onClick:L=>u(s.name)},{default:r(()=>[...t[7]||(t[7]=[y(" 切换 ",-1)])]),_:1},8,["onClick"]))])]),_:2},1032,["class"]))),128))]),d(o).localModels.length?(l(),k("div",J,[t[9]||(t[9]=e("h3",{style:{color:"#ccc","font-size":"15px","margin-bottom":"12px"}}," 🦙 本地模型(Ollama) ",-1)),v(C,{"data-source":d(o).localModels,size:"small",style:{background:"var(--bg-card)","border-radius":"8px",border:"1px solid var(--border-color)"}},{renderItem:r(({item:s})=>[v(g,{style:{padding:"10px 16px","border-color":"#252525"}},{actions:r(()=>[v(c,{color:"cyan",style:{"font-size":"10px"}},{default:r(()=>[y(_(s.size||"local"),1)]),_:2},1024)]),default:r(()=>[e("span",K,_(s.name),1)]),_:2},1024)]),_:1},8,["data-source"])])):$("",!0)]))])}}},at=j(Q,[["__scopeId","data-v-6ade5578"]]);export{at as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{V,f as v,c as h,o as $,a3 as m,a1 as i,a5 as y,u as s,k as r,Z as d,F as C,a7 as L,X as p,$ as j,Y as u,G as g,W as M}from"./vendor-CN0Iv_qZ.js";import{u as A}from"./ws-DjelKkD6.js";import{p as F}from"./parsers-DftYMnlk.js";import{u as N}from"./chat-DnH09sSR.js";import{_ as Q}from"./_plugin-vue_export-helper-DlAUqK2U.js";import{c as R,R as E,P}from"./antd-CJSBocer.js";const T=V("skills",()=>{const _=v(!1),e=v([]),c=v(""),f=v("all"),x=h(()=>{const n=new Set(["all"]);return e.value.forEach(l=>{l.category&&n.add(l.category),l.executionMode&&n.add(l.executionMode)}),[...n]}),k=h(()=>{let n=e.value;if(f.value!=="all"&&(n=n.filter(l=>l.category===f.value||l.executionMode===f.value)),c.value){const l=c.value.toLowerCase();n=n.filter(o=>o.name?.toLowerCase().includes(l)||o.description?.toLowerCase().includes(l)||o.title?.toLowerCase().includes(l))}return n});async function b(){const n=A();_.value=!0;try{const{output:l}=await n.execute("skill list",2e4),o=F(l);e.value=o}catch(l){console.error("Failed to load skills:",l)}finally{_.value=!1}}return{loading:_,allSkills:e,searchQuery:c,selectedCategory:f,categories:x,filteredSkills:k,loadSkills:b}}),U={style:{display:"flex","align-items":"center","justify-content":"space-between","margin-bottom":"24px"}},W={class:"page-sub"},D={style:{display:"flex",gap:"12px","margin-bottom":"20px","flex-wrap":"wrap"}},G={key:0,style:{"text-align":"center",padding:"60px"}},X={key:1,class:"skills-grid"},Y={style:{display:"flex","justify-content":"space-between","align-items":"flex-start"}},Z={style:{flex:"1","min-width":"0"}},H={style:{"font-weight":"500",color:"#e0e0e0","font-size":"14px","margin-bottom":"4px","font-family":"monospace"}},J={style:{color:"var(--text-secondary)","font-size":"12px","line-height":"1.5"}},K={style:{"margin-left":"12px","flex-shrink":"0"}},ee={style:{"margin-top":"10px",display:"flex","justify-content":"flex-end"}},te={key:2,style:{"text-align":"center",padding:"60px",color:"var(--text-muted)"}},oe={__name:"Skills",setup(_){const e=T(),c=N(),f=j(),x=h(()=>e.categories.filter(o=>o!=="all").slice(0,6));function k(o){return{"built-in":"内置","cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合",workspace:"工作区",marketplace:"市场"}[o]||o}function b(o){return{"cli-direct":"CLI",agent:"Agent","llm-query":"LLM",hybrid:"混合","built-in":"内置"}[o]||o||"未知"}function n(o){return{"cli-direct":"cyan",agent:"purple","llm-query":"blue",hybrid:"orange","built-in":"green"}[o]||"default"}async function l(o){await c.createSession("agent"),f.push("/chat"),setTimeout(()=>{c.currentSessionId&&c.sendMessage(c.currentSessionId,`/skill run ${o}`)},300)}return $(()=>{e.allSkills.length||e.loadSkills()}),(o,t)=>{const S=p("a-button"),z=p("a-input-search"),w=p("a-radio-button"),I=p("a-radio-group"),q=p("a-spin"),B=p("a-tag"),O=p("a-card");return u(),m("div",null,[i("div",U,[i("div",null,[t[3]||(t[3]=i("h2",{class:"page-title"},"技能管理",-1)),i("p",W,y(s(e).allSkills.length)+" 个可用技能",1)]),r(S,{type:"primary",ghost:"",loading:s(e).loading,onClick:t[0]||(t[0]=a=>s(e).loadSkills())},{icon:d(()=>[r(s(E))]),default:d(()=>[t[4]||(t[4]=g(" 刷新 ",-1))]),_:1},8,["loading"])]),i("div",D,[r(z,{value:s(e).searchQuery,"onUpdate:value":t[1]||(t[1]=a=>s(e).searchQuery=a),placeholder:"搜索技能名称或描述...",style:{width:"300px"},"allow-clear":""},null,8,["value"]),r(I,{value:s(e).selectedCategory,"onUpdate:value":t[2]||(t[2]=a=>s(e).selectedCategory=a),"button-style":"solid"},{default:d(()=>[r(w,{value:"all"},{default:d(()=>[...t[5]||(t[5]=[g("全部",-1)])]),_:1}),(u(!0),m(C,null,L(x.value,a=>(u(),M(w,{key:a,value:a},{default:d(()=>[g(y(k(a)),1)]),_:2},1032,["value"]))),128))]),_:1},8,["value"])]),s(e).loading?(u(),m("div",G,[r(q,{size:"large"}),t[6]||(t[6]=i("div",{style:{color:"var(--text-muted)","margin-top":"12px"}},"加载技能中...",-1))])):s(e).filteredSkills.length?(u(),m("div",X,[(u(!0),m(C,null,L(s(e).filteredSkills,a=>(u(),M(O,{key:a.name,class:"skill-card",size:"small",hoverable:"",style:{background:"var(--bg-card)","border-color":"var(--border-color)",cursor:"default"}},{default:d(()=>[i("div",Y,[i("div",Z,[i("div",H,y(a.name),1),i("div",J,y(a.description||"暂无描述"),1)]),i("div",K,[r(B,{color:n(a.executionMode),style:{"font-size":"10px"}},{default:d(()=>[g(y(b(a.executionMode)),1)]),_:2},1032,["color"])])]),i("div",ee,[r(S,{size:"small",type:"primary",ghost:"",onClick:le=>l(a.name)},{icon:d(()=>[r(s(P))]),default:d(()=>[t[7]||(t[7]=g(" 运行 ",-1))]),_:1},8,["onClick"])])]),_:2},1024))),128))])):(u(),m("div",te,[r(s(R),{style:{"font-size":"48px","margin-bottom":"16px",display:"block"}}),i("div",null,y(s(e).allSkills.length?"没有匹配的技能":"点击刷新加载技能列表"),1)]))])}}},ce=Q(oe,[["__scopeId","data-v-a1cd8dd9"]]);export{ce as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{V as L,f as h,r as m}from"./vendor-CN0Iv_qZ.js";import{u as c}from"./ws-DjelKkD6.js";const w="新对话",S="新 Agent",M=L("chat",()=>{const u=h([]),l=h(null),a=m({}),i=m({}),f=m({}),y=h(!1);let g=null;function v(t){return a[t]||(a[t]=[]),a[t]}function d(t){if(!t?.id)return;const e=u.value.find(n=>n.id===t.id);if(e){Object.assign(e,t);return}u.value.unshift(t)}function A(t,e=c()){a[t]||(a[t]=[]),i[t]||(i[t]={content:"",active:!1}),e.onSession(t,n=>D(t,n))}function p(t=c()){g||(g=t.onRuntimeEvent(e=>{const n=e.payload||{},o=n.record||{};if(e.type==="session:start"){const s=n.sessionType||o.type||"chat";d({id:n.sessionId,type:s,provider:o.provider||null,model:o.model||null,projectRoot:o.projectRoot||null,status:o.status||"created",title:s==="chat"?w:S,createdAt:Date.now(),messageCount:o.messageCount??0})}else if(e.type==="session:resume"){const s=n.sessionId;if(!s)return;Array.isArray(n.history)&&(a[s]=n.history.map(r=>({role:r.role,content:r.content,timestamp:r.timestamp||Date.now()}))),i[s]||(i[s]={content:"",active:!1}),d({id:s,type:o.type||null,provider:o.provider||null,model:o.model||null,projectRoot:o.projectRoot||null,status:o.status||"resumed",messageCount:o.messageCount??(Array.isArray(n.history)?n.history.length:0)})}else if(e.type==="session:end"){const s=n.sessionId;u.value=u.value.filter(r=>r.id!==s),l.value===s&&(l.value=u.value[0]?.id||null)}}))}async function T(){const t=c();p(t),u.value=await t.listSessions()}async function C(t="chat"){const e=c();p(e);const n=await e.createSession(t);return d({id:n,type:t,title:t==="chat"?w:S,createdAt:Date.now(),messageCount:0}),A(n,e),l.value=n,n}function D(t,e){const n=v(t);if(e.type==="response-token")i[t]||(i[t]={content:"",active:!0}),i[t].content+=e.token||"",i[t].active=!0;else if(e.type==="response-complete"){const o=e.content||i[t]?.content||"";n.push({role:"assistant",content:o,timestamp:Date.now()}),i[t]&&(i[t].content="",i[t].active=!1);const s=u.value.find(r=>r.id===t);if(s&&(s.title===w||s.title===S)){const r=n.find(j=>j.role==="user");r&&(s.title=r.content.slice(0,30))}s&&(s.messageCount=n.filter(r=>r.role!=="tool").length),y.value=!1}else if(e.type==="tool-executing")n.push({role:"tool",tool:e.tool,input:e.input,status:"running",timestamp:Date.now()});else if(e.type==="tool-result"){const o=[...n].reverse().find(s=>s.role==="tool"&&s.tool===e.tool);o&&(o.result=e.result,o.status="done")}else e.type==="question"&&(f[t]={requestId:e.requestId||e.id,question:e.question,choices:e.choices||[]})}async function q(t,e){const n=c();p(n),v(t).push({role:"user",content:e,timestamp:Date.now()}),i[t]||(i[t]={content:"",active:!1}),i[t].active=!0,y.value=!0,n.sendSessionMessage(t,e)}function E(t,e){const n=c(),o=f[t];o&&(n.answerQuestion(t,o.requestId,e),delete f[t])}async function R(t){const e=c();if(p(e),l.value=t,A(t,e),!a[t]||a[t].length===0)try{await e.resumeSession(t)}catch{}}return{sessions:u,currentSessionId:l,messages:a,streaming:i,pendingQuestion:f,isLoading:y,loadSessions:T,createSession:C,sendMessage:q,answerQuestion:E,switchSession:R,getMessages:v}});export{M as u};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./AppLayout-B_tkw3Pn.js","./vendor-CN0Iv_qZ.js","./ws-DjelKkD6.js","./_plugin-vue_export-helper-DlAUqK2U.js","./antd-CJSBocer.js","./AppLayout-CFP4dGIJ.css","./Dashboard-BZd4wDPQ.js","./chat-DnH09sSR.js","./Dashboard-CKeMmCoT.css","./Chat-DXtvKoM0.js","./markdown-Bo5cVN4u.js","./Chat-DB46afPg.css","./Services-CS0oMdxh.js","./Services-C8Qs6KXv.css","./Logs-CSeKZEG_.js","./Logs-Gf_Mv9Nx.css","./Skills-B2fgruv8.js","./parsers-DftYMnlk.js","./Skills-BdjRyorN.css","./Providers-Dbf57Tbv.js","./Providers-Brm-S_hS.css","./McpTools-BYQAK11r.js","./McpTools-CyhSLDwf.css","./Notes-bjNrQgAo.js","./Notes-BG69sJKi.css","./Memory-gkUAPyuZ.js","./Memory-DRghrGJr.css","./Cron-BJ4ODHOy.js","./Tasks-qULws8pc.js","./Tasks-BJjN_YEm.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{S as k,U as x,V as L,f as A,c as y,o as I,W as S,u as T,X as E,Y as R,Z as O,k as w,R as V,_ as D}from"./vendor-CN0Iv_qZ.js";import{a as h,A as M}from"./antd-CJSBocer.js";(function(){const o=document.createElement("link").relList;if(o&&o.supports&&o.supports("modulepreload"))return;for(const e of document.querySelectorAll('link[rel="modulepreload"]'))d(e);new MutationObserver(e=>{for(const t of e)if(t.type==="childList")for(const a of t.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&d(a)}).observe(document,{childList:!0,subtree:!0});function i(e){const t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin==="use-credentials"?t.credentials="include":e.crossOrigin==="anonymous"?t.credentials="omit":t.credentials="same-origin",t}function d(e){if(e.ep)return;e.ep=!0;const t=i(e);fetch(e.href,t)}})();const C="modulepreload",N=function(c,o){return new URL(c,o).href},B={},s=function(o,i,d){let e=Promise.resolve();if(i&&i.length>0){let _=function(n){return Promise.all(n.map(f=>Promise.resolve(f).then(u=>({status:"fulfilled",value:u}),u=>({status:"rejected",reason:u}))))};const a=document.getElementsByTagName("link"),r=document.querySelector("meta[property=csp-nonce]"),m=r?.nonce||r?.getAttribute("nonce");e=_(i.map(n=>{if(n=N(n,d),n in B)return;B[n]=!0;const f=n.endsWith(".css"),u=f?'[rel="stylesheet"]':"";if(d)for(let p=a.length-1;p>=0;p--){const g=a[p];if(g.href===n&&(!f||g.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${n}"]${u}`))return;const l=document.createElement("link");if(l.rel=f?"stylesheet":C,f||(l.as="script"),l.crossOrigin="",l.href=n,m&&l.setAttribute("nonce",m),document.head.appendChild(l),f)return new Promise((p,g)=>{l.addEventListener("load",p),l.addEventListener("error",()=>g(new Error(`Unable to preload CSS for ${n}`)))})}))}function t(a){const r=new Event("vite:preloadError",{cancelable:!0});if(r.payload=a,window.dispatchEvent(r),!r.defaultPrevented)throw a}return e.then(a=>{for(const r of a||[])r.status==="rejected"&&t(r.reason);return o().catch(t)})},U=[{path:"/",component:()=>s(()=>import("./AppLayout-B_tkw3Pn.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url),children:[{path:"",redirect:"/dashboard"},{path:"dashboard",name:"Dashboard",component:()=>s(()=>import("./Dashboard-BZd4wDPQ.js"),__vite__mapDeps([6,1,2,7,3,4,8]),import.meta.url)},{path:"chat",name:"Chat",component:()=>s(()=>import("./Chat-DXtvKoM0.js"),__vite__mapDeps([9,1,10,4,7,2,3,11]),import.meta.url)},{path:"services",name:"Services",component:()=>s(()=>import("./Services-CS0oMdxh.js"),__vite__mapDeps([12,2,1,3,4,13]),import.meta.url)},{path:"logs",name:"Logs",component:()=>s(()=>import("./Logs-CSeKZEG_.js"),__vite__mapDeps([14,2,1,3,4,15]),import.meta.url)},{path:"skills",name:"Skills",component:()=>s(()=>import("./Skills-B2fgruv8.js"),__vite__mapDeps([16,1,2,17,7,3,4,18]),import.meta.url)},{path:"providers",name:"Providers",component:()=>s(()=>import("./Providers-Dbf57Tbv.js"),__vite__mapDeps([19,1,2,17,3,4,20]),import.meta.url)},{path:"mcp",name:"McpTools",component:()=>s(()=>import("./McpTools-BYQAK11r.js"),__vite__mapDeps([21,2,1,3,4,22]),import.meta.url)},{path:"notes",name:"Notes",component:()=>s(()=>import("./Notes-bjNrQgAo.js"),__vite__mapDeps([23,2,1,3,4,24]),import.meta.url)},{path:"memory",name:"Memory",component:()=>s(()=>import("./Memory-gkUAPyuZ.js"),__vite__mapDeps([25,2,1,3,4,26]),import.meta.url)},{path:"cron",name:"Cron",component:()=>s(()=>import("./Cron-BJ4ODHOy.js"),__vite__mapDeps([27,2,1,4]),import.meta.url)},{path:"tasks",name:"Tasks",component:()=>s(()=>import("./Tasks-qULws8pc.js"),__vite__mapDeps([28,1,2,3,4,29]),import.meta.url)}]}],F=k({history:x(),routes:U}),P="cc_theme",v={dark:{label:"暗黑",icon:"🌑",antd:{algorithm:h.darkAlgorithm,token:{colorPrimary:"#1677ff",colorBgBase:"#141414",colorBgContainer:"#1f1f1f",colorBgElevated:"#2a2a2a",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#1c1c1c",headerBg:"#1c1c1c",bodyBg:"#141414"},Menu:{darkItemBg:"#1c1c1c",darkSubMenuItemBg:"#171717"}}},vars:{"--bg-base":"#141414","--bg-sidebar":"#1c1c1c","--bg-header":"#1c1c1c","--bg-card":"#1f1f1f","--bg-card-hover":"#262626","--border-color":"#252525","--border-subtle":"#1e1e1e","--text-primary":"#e0e0e0","--text-secondary":"#888","--text-muted":"#444","--logo-text":"#ffffff","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,0,0,.45)","--group-title":"#3a3a3a"}},light:{label:"亮白",icon:"☀️",antd:{algorithm:h.defaultAlgorithm,token:{colorPrimary:"#1677ff",colorBgBase:"#ffffff",colorBgContainer:"#ffffff",colorBgElevated:"#ffffff",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#ffffff",headerBg:"#ffffff",bodyBg:"#f4f6fb"},Menu:{itemBg:"#ffffff"}}},vars:{"--bg-base":"#f4f6fb","--bg-sidebar":"#ffffff","--bg-header":"#ffffff","--bg-card":"#ffffff","--bg-card-hover":"#f0f4ff","--border-color":"#e8edf5","--border-subtle":"#f0f0f0","--text-primary":"#1a1a2e","--text-secondary":"#5a6474","--text-muted":"#b0b8c8","--logo-text":"#1a1a2e","--menu-mode":"light","--shadow-card":"0 2px 12px rgba(0,0,0,.07)","--group-title":"#aab0bc"}},blue:{label:"深蓝",icon:"🌊",antd:{algorithm:h.darkAlgorithm,token:{colorPrimary:"#2f80ed",colorBgBase:"#0d1117",colorBgContainer:"#161b22",colorBgElevated:"#1c2230",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#0f1923",headerBg:"#0f1923",bodyBg:"#0d1117"},Menu:{darkItemBg:"#0f1923",darkSubMenuItemBg:"#0b1520"}}},vars:{"--bg-base":"#0d1117","--bg-sidebar":"#0f1923","--bg-header":"#0f1923","--bg-card":"#161b22","--bg-card-hover":"#1c2230","--border-color":"#21303f","--border-subtle":"#182030","--text-primary":"#c9d8ef","--text-secondary":"#6e8caa","--text-muted":"#2d4060","--logo-text":"#e0eeff","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,40,80,.5)","--group-title":"#2d4060"}},green:{label:"翠绿",icon:"🌿",antd:{algorithm:h.darkAlgorithm,token:{colorPrimary:"#29a270",colorBgBase:"#0a1a12",colorBgContainer:"#0f2318",colorBgElevated:"#152e20",borderRadius:8,fontFamily:'system-ui, -apple-system, "Segoe UI", sans-serif'},components:{Layout:{siderBg:"#0c1e14",headerBg:"#0c1e14",bodyBg:"#0a1a12"},Menu:{darkItemBg:"#0c1e14",darkSubMenuItemBg:"#091810"}}},vars:{"--bg-base":"#0a1a12","--bg-sidebar":"#0c1e14","--bg-header":"#0c1e14","--bg-card":"#0f2318","--bg-card-hover":"#152e20","--border-color":"#1a3828","--border-subtle":"#122a1c","--text-primary":"#c0e8c8","--text-secondary":"#5a9a6a","--text-muted":"#1e4028","--logo-text":"#d8f0e0","--menu-mode":"dark","--shadow-card":"0 2px 8px rgba(0,40,20,.5)","--group-title":"#1e4028"}}},$=L("theme",()=>{const c=A(localStorage.getItem(P)||"dark"),o=y(()=>v[c.value]||v.dark),i=y(()=>o.value.antd),d=y(()=>c.value!=="light");function e(){const r=o.value.vars,m=document.documentElement;for(const[_,n]of Object.entries(r))m.style.setProperty(_,n);m.setAttribute("data-theme",c.value)}function t(r){v[r]&&(c.value=r,localStorage.setItem(P,r),e())}function a(){e()}return{current:c,config:o,antdTheme:i,isDark:d,setTheme:t,init:a}}),j={__name:"App",setup(c){const o=$();return I(()=>o.init()),(i,d)=>{const e=E("router-view"),t=E("a-config-provider");return R(),S(t,{theme:T(o).antdTheme},{default:O(()=>[w(e)]),_:1},8,["theme"])}}},b=V(j);b.use(D());b.use(F);b.use(M);b.mount("#app");export{v as T,$ as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{V as H,f as E,c as z}from"./vendor-CN0Iv_qZ.js";let U=0;const p=()=>`wp-${++U}`,C=new Set;function d(e,n={},i={}){return{type:e,kind:i.kind||"server",sessionId:i.sessionId||n.sessionId||null,timestamp:i.timestamp||Date.now(),payload:n}}function B(e){switch(e?.type){case"task:notification":return d("task:notification",{task:e.task},{kind:"server"});case"session-created":return d("session:start",{sessionId:e.sessionId,sessionType:e.sessionType||null,record:e.record||{id:e.sessionId,type:e.sessionType||null,status:"created",history:[],messageCount:0}},{kind:"server",sessionId:e.sessionId});case"session-resumed":return d("session:resume",{sessionId:e.sessionId,history:e.history||[],historyCount:Array.isArray(e.history)?e.history.length:0,record:e.record||{id:e.sessionId,type:null,status:"resumed",history:e.history||[],messageCount:Array.isArray(e.history)?e.history.length:0}},{kind:"server",sessionId:e.sessionId});case"worktree-diff":return d("worktree:diff:ready",{requestId:e.id||null,record:e.record||{branch:e.branch||null,summary:e.summary||null,previewEntrypoints:[{type:"worktree-diff",branch:e.branch||null}]}},{kind:"server"});case"worktree-merged":return d("worktree:merge:completed",{requestId:e.id||null,record:e.record||{branch:e.branch||null,summary:e.summary||null,conflicts:e.conflicts||[],previewEntrypoints:e.previewEntrypoints||[]}},{kind:"server"});case"compression-stats":return d("compression:summary",{requestId:e.id||null,summary:e.summary||{}},{kind:"server"});default:return null}}function N(e,n=null){C.forEach(i=>i(e,n||e))}function F(e){if(!e)return null;const n=e.record||{id:e.id||null,type:e.type||null,provider:e.provider||null,model:e.model||null,projectRoot:e.projectRoot||null,messageCount:e.messageCount??0,history:e.history||[],status:e.status||null};return{...e,id:e.id||n.id,type:e.type||n.type,provider:e.provider||n.provider,model:e.model||n.model,projectRoot:e.projectRoot||n.projectRoot,messageCount:e.messageCount??n.messageCount??0,status:e.status||n.status||null,record:n}}const Q=H("ws",()=>{const e=E(null),n=E("disconnected"),i=E(null),c=new Map,a=new Map;let b=null,w=1e3;const y=window.__CC_CONFIG__||{},I=z(()=>`ws://${y.wsHost||"127.0.0.1"}:${y.wsPort||18800}`);function h(){if(e.value?.readyState!==WebSocket.OPEN){n.value="connecting",i.value=null;try{const t=new WebSocket(I.value);e.value=t,t.onopen=()=>{w=1e3,y.wsToken?l({type:"auth",id:p(),token:y.wsToken}).then(()=>{n.value="connected"}).catch(()=>{n.value="connected"}):n.value="connected"},t.onmessage=o=>{let r;try{r=JSON.parse(o.data)}catch{return}T(r)},t.onerror=()=>{i.value="WebSocket error",n.value="error"},t.onclose=()=>{n.value="disconnected",e.value=null,c.forEach(({reject:o})=>o(new Error("WebSocket closed"))),c.clear(),b=setTimeout(()=>{w=Math.min(w*2,3e4),h()},w)}}catch(t){n.value="error",i.value=t.message}}}function O(){clearTimeout(b),e.value?.close(),e.value=null,n.value="disconnected"}function T(t){const{type:o,id:r}=t;let u=!1;if(r&&c.has(r)){const{resolve:m,reject:k,timeout:D}=c.get(r);clearTimeout(D),c.delete(r),u=!0,o==="error"?k(new Error(t.message||"Unknown error")):m(t)}const s=t.sessionId;s&&a.has(s)&&a.get(s).forEach(k=>k(t)),S.forEach(m=>m(t));const v=B(t);return v&&N(v,t),u}const S=new Set;function W(t){return S.add(t),()=>S.delete(t)}function P(t){return C.add(t),()=>C.delete(t)}function J(t,o){return a.has(t)||a.set(t,new Set),a.get(t).add(o),()=>{a.get(t)?.delete(o),a.get(t)?.size===0&&a.delete(t)}}function l(t,o=15e3){return new Promise((r,u)=>{if(e.value?.readyState!==WebSocket.OPEN){u(new Error("WebSocket not connected"));return}const s=t.id||p(),v=setTimeout(()=>{c.delete(s),u(new Error("Request timeout"))},o);c.set(s,{resolve:r,reject:u,timeout:v}),e.value.send(JSON.stringify({...t,id:s}))})}function f(t=8e3){return n.value==="connected"?Promise.resolve():new Promise((o,r)=>{const u=Date.now()+t,s=()=>{if(n.value==="connected")return o();if(n.value==="error"||Date.now()>=u)return r(new Error(`WS not ready: ${n.value}`));setTimeout(s,150)};n.value==="disconnected"&&h(),s()})}async function R(t,o=3e4){await f(8e3);const r=await l({type:"execute",command:t},o),u=r.output??r.stdout??"",s=r.stderr??"";return{output:u||s,exitCode:r.exitCode??0}}async function j(t,o=3e4){const{output:r,exitCode:u}=await R(t,o);if(u!==0)throw new Error(`Command failed: ${r}`);try{return JSON.parse(r.trim())}catch{const s=r.match(/\{[\s\S]*\}|\[[\s\S]*\]/);if(s)return JSON.parse(s[0]);throw new Error(`Invalid JSON output: ${r.slice(0,200)}`)}}async function M(t="chat",o=null){await f(8e3);const r=p();return(await l({type:"session-create",id:r,sessionType:t,projectRoot:o||y.projectRoot||null})).sessionId}function _(t,o){e.value?.readyState===WebSocket.OPEN&&e.value.send(JSON.stringify({type:"session-message",id:p(),sessionId:t,content:o}))}function $(t,o,r){e.value?.readyState===WebSocket.OPEN&&e.value.send(JSON.stringify({type:"session-answer",id:p(),sessionId:t,requestId:o,answer:r}))}async function x(){return await f(8e3),((await l({type:"session-list"},1e4)).sessions||[]).map(F).filter(Boolean)}async function q(t){try{await l({type:"session-close",sessionId:t},5e3),N(d("session:end",{sessionId:t},{kind:"server",sessionId:t}),{type:"result",sessionId:t,success:!0})}catch{}}async function A(t){return await f(8e3),await l({type:"session-resume",sessionId:t},1e4)}return{status:n,error:i,wsUrl:I,connect:h,disconnect:O,waitConnected:f,onMessage:W,onRuntimeEvent:P,onSession:J,sendRaw:l,execute:R,executeJson:j,createSession:M,resumeSession:A,sendSessionMessage:_,answerQuestion:$,listSessions:x,closeSession:q}});export{Q as u};
|