@aexol/spectral 0.9.167 → 0.9.169
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/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +7 -0
- package/dist/cli.js +6 -0
- package/dist/commands/ports.d.ts +13 -0
- package/dist/commands/ports.d.ts.map +1 -0
- package/dist/commands/ports.js +110 -0
- package/dist/extensions/ports/index.d.ts +19 -0
- package/dist/extensions/ports/index.d.ts.map +1 -0
- package/dist/extensions/ports/index.js +154 -0
- package/dist/extensions/ports/platform.d.ts +39 -0
- package/dist/extensions/ports/platform.d.ts.map +1 -0
- package/dist/extensions/ports/platform.js +255 -0
- package/dist/memory/hooks/compaction-trigger.js +1 -1
- package/dist/sdk/agent-core/agent-loop.js +1 -1
- package/dist/sdk/coding-agent/core/agent-session.js +1 -1
- package/dist/sdk/coding-agent/core/extensions/native-extensions.d.ts.map +1 -1
- package/dist/sdk/coding-agent/core/extensions/native-extensions.js +11 -0
- package/dist/server/agent-bridge.d.ts +8 -6
- package/dist/server/agent-bridge.d.ts.map +1 -1
- package/dist/server/agent-bridge.js +28 -18
- package/dist/server/error-humanizer.d.ts.map +1 -1
- package/dist/server/error-humanizer.js +1 -1
- package/dist/server/wire.d.ts +2 -0
- package/dist/server/wire.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAIX,SAAS,EAET,MAAM,4BAA4B,CAAC;AAUpC,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACN,KAAK,WAAW,EAKhB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOrD,OAAO,KAAK,EAAE,gBAAgB,IAAI,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAsG7G;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACxC,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC,GACpF,MAAM,CAYR;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAIX,SAAS,EAET,MAAM,4BAA4B,CAAC;AAUpC,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACN,KAAK,WAAW,EAKhB,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAOrD,OAAO,KAAK,EAAE,gBAAgB,IAAI,oBAAoB,EAAE,MAAM,8CAA8C,CAAC;AAsG7G;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CACxC,gBAAgB,EAAE,MAAM,GAAG,SAAS,EACpC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,cAAc,GAAG,OAAO,GAAG,QAAQ,CAAC,GACpF,MAAM,CAYR;AAkID;;;GAGG;AACH,wBAAgB,oCAAoC,CACnD,cAAc,EAAE,gBAAgB,CAAC,gBAAgB,CAAC,GAChD,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,EAAE,WAAW,CAAC,CAK3D;AAED,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,MAAM,EAAE,GAAG,SAAS,EAC/B,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,YAAY,EACjB,GAAG,EAAE,gBAAgB,GACnB,SAAS,EAAE,CAwCb;AAicD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CACxC,GAAG,EAAE,YAAY,EACjB,IAAI,CAAC,EAAE;IACN,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,GACC,IAAI,CAgaN"}
|
package/dist/agent/index.js
CHANGED
|
@@ -420,12 +420,16 @@ async function runSingleAgent(defaultCwd, agents, agentName, task, cwd, step, si
|
|
|
420
420
|
// Accumulated thinking deltas for the live subagent sheet. This stays outside
|
|
421
421
|
// final `SingleResult` so the public subagent tool_result contract is unchanged.
|
|
422
422
|
let thinkingText = "";
|
|
423
|
+
// Responses API reasoning metadata that lets the UI classify accumulated
|
|
424
|
+
// subagent thinking as activity (mirrors the main-session thinking metadata).
|
|
425
|
+
let thinkingMetadata;
|
|
423
426
|
const emitUpdate = () => {
|
|
424
427
|
if (onUpdate) {
|
|
425
428
|
const liveResult = {
|
|
426
429
|
...currentResult,
|
|
427
430
|
...(streamingText ? { streamingText } : {}),
|
|
428
431
|
...(thinkingText ? { thinkingText } : {}),
|
|
432
|
+
...(thinkingMetadata ? { thinkingMetadata } : {}),
|
|
429
433
|
};
|
|
430
434
|
onUpdate({
|
|
431
435
|
content: [{ type: "text", text: getFinalOutput(currentResult.messages) || streamingText || (thinkingText ? "(thinking...)" : "(running...)") }],
|
|
@@ -489,6 +493,9 @@ async function runSingleAgent(defaultCwd, agents, agentName, task, cwd, step, si
|
|
|
489
493
|
}
|
|
490
494
|
else if (inner?.type === "thinking_delta" && inner.delta) {
|
|
491
495
|
thinkingText += inner.delta;
|
|
496
|
+
if (inner.metadata) {
|
|
497
|
+
thinkingMetadata = { ...(thinkingMetadata ?? {}), ...inner.metadata };
|
|
498
|
+
}
|
|
492
499
|
emitUpdate();
|
|
493
500
|
}
|
|
494
501
|
continue;
|
package/dist/cli.js
CHANGED
|
@@ -36,6 +36,7 @@ function printHeader() {
|
|
|
36
36
|
" spectral bind Link this directory to an Aexol Studio project",
|
|
37
37
|
" spectral unbind Remove the Aexol Studio project binding",
|
|
38
38
|
" spectral update Check for and install the latest Spectral version",
|
|
39
|
+
" spectral ports Diagnose port collisions across local projects",
|
|
39
40
|
" spectral --version Print version and exit",
|
|
40
41
|
" spectral --help Print this help and exit",
|
|
41
42
|
"",
|
|
@@ -113,6 +114,11 @@ async function main() {
|
|
|
113
114
|
await runUpdate(args.slice(1));
|
|
114
115
|
process.exit(0);
|
|
115
116
|
}
|
|
117
|
+
if (first === "ports") {
|
|
118
|
+
const { runPorts } = await import("./commands/ports.js");
|
|
119
|
+
await runPorts(args.slice(1));
|
|
120
|
+
process.exit(0);
|
|
121
|
+
}
|
|
116
122
|
// No TUI/interactive mode is supported. All other invocations must use
|
|
117
123
|
// explicit subcommands.
|
|
118
124
|
process.stderr.write(`spectral: unknown command "${first ?? ""}".\n` +
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `spectral ports` — diagnose port collisions across local projects.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* spectral ports list every listening TCP port + owner
|
|
6
|
+
* spectral ports check <p>... check specific ports and suggest free ones
|
|
7
|
+
* spectral ports free [start] find the first free port from `start`
|
|
8
|
+
*
|
|
9
|
+
* Shares the exact same platform logic as the native `ports` extension, so
|
|
10
|
+
* results are identical whether run from the shell or from inside the agent.
|
|
11
|
+
*/
|
|
12
|
+
export declare function runPorts(args: string[]): Promise<void>;
|
|
13
|
+
//# sourceMappingURL=ports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/commands/ports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA0CH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA0E5D"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `spectral ports` — diagnose port collisions across local projects.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
* spectral ports list every listening TCP port + owner
|
|
6
|
+
* spectral ports check <p>... check specific ports and suggest free ones
|
|
7
|
+
* spectral ports free [start] find the first free port from `start`
|
|
8
|
+
*
|
|
9
|
+
* Shares the exact same platform logic as the native `ports` extension, so
|
|
10
|
+
* results are identical whether run from the shell or from inside the agent.
|
|
11
|
+
*/
|
|
12
|
+
import pc from "picocolors";
|
|
13
|
+
import { findFreePort, isPortFree, knownPortLabel, scanPorts, } from "../extensions/ports/platform.js";
|
|
14
|
+
function renderTable(entries) {
|
|
15
|
+
if (entries.length === 0)
|
|
16
|
+
return "No listening TCP ports found.";
|
|
17
|
+
const dedup = new Map();
|
|
18
|
+
for (const e of entries) {
|
|
19
|
+
const existing = dedup.get(e.port);
|
|
20
|
+
if (!existing || (existing.address === "0.0.0.0" && e.address !== "0.0.0.0")) {
|
|
21
|
+
dedup.set(e.port, { address: e.address, process: e.process, pid: e.pid });
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const rows = [...dedup.entries()].sort((a, b) => a[0] - b[0]);
|
|
25
|
+
const portW = Math.max(5, ...rows.map(([p]) => String(p).length));
|
|
26
|
+
const lines = [
|
|
27
|
+
`${rows.length} listening TCP port(s):`,
|
|
28
|
+
"",
|
|
29
|
+
`${"Port".padStart(portW)} ${"Bind".padEnd(22)} Process`,
|
|
30
|
+
`${"─".repeat(portW)} ${"─".repeat(22)} ${"─".repeat(30)}`,
|
|
31
|
+
];
|
|
32
|
+
for (const [port, info] of rows) {
|
|
33
|
+
const known = knownPortLabel(port);
|
|
34
|
+
const label = known ? ` ${known}` : "";
|
|
35
|
+
const owner = info.process ? `${info.process}${info.pid !== null ? ` (pid ${info.pid})` : ""}` : "unknown";
|
|
36
|
+
const bind = info.address === "0.0.0.0" || info.address === "::" || info.address === "::1"
|
|
37
|
+
? "all" : info.address;
|
|
38
|
+
lines.push(`${String(port).padStart(portW)} ${bind.padEnd(22)} ${owner}${label}`);
|
|
39
|
+
}
|
|
40
|
+
return lines.join("\n");
|
|
41
|
+
}
|
|
42
|
+
export async function runPorts(args) {
|
|
43
|
+
const sub = args[0];
|
|
44
|
+
if (sub === "check") {
|
|
45
|
+
const ports = args
|
|
46
|
+
.slice(1)
|
|
47
|
+
.map((p) => Number(p))
|
|
48
|
+
.filter((p) => Number.isInteger(p) && p > 0);
|
|
49
|
+
if (ports.length === 0) {
|
|
50
|
+
process.stderr.write(pc.red("Usage: spectral ports check <port> [<port>...]\n"));
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const scan = await scanPorts();
|
|
54
|
+
const owners = new Map();
|
|
55
|
+
for (const e of scan.entries) {
|
|
56
|
+
if (!owners.has(e.port))
|
|
57
|
+
owners.set(e.port, { process: e.process, pid: e.pid });
|
|
58
|
+
}
|
|
59
|
+
for (const port of ports) {
|
|
60
|
+
const owner = owners.get(port);
|
|
61
|
+
const free = owner === undefined && (await isPortFree(port));
|
|
62
|
+
if (free) {
|
|
63
|
+
process.stdout.write(pc.green(`✓ ${port} is free\n`));
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
const who = owner?.process ? `${owner.process}${owner.pid !== null ? ` (pid ${owner.pid})` : ""}` : "already bound";
|
|
67
|
+
const label = knownPortLabel(port) ? ` — ${knownPortLabel(port)}` : "";
|
|
68
|
+
const alternative = await findFreePort(port);
|
|
69
|
+
process.stdout.write(pc.red(`✗ ${port} is taken by ${who}${label}\n`));
|
|
70
|
+
process.stdout.write(pc.dim(` first free port from ${port}: ${alternative ?? "none found"}\n`));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
if (sub === "free") {
|
|
76
|
+
const start = Number(args[1]) || 3000;
|
|
77
|
+
const port = await findFreePort(start);
|
|
78
|
+
if (port === null) {
|
|
79
|
+
process.stderr.write(pc.red(`No free port found from ${start}\n`));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
const label = knownPortLabel(port) ? ` (usually: ${knownPortLabel(port)})` : "";
|
|
83
|
+
process.stdout.write(pc.green(`✓ First free port from ${start}: ${port}${label}\n`));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (sub === "--help" || sub === "-h") {
|
|
87
|
+
process.stdout.write([
|
|
88
|
+
"Usage:",
|
|
89
|
+
" spectral ports list listening TCP ports + owners",
|
|
90
|
+
" spectral ports check <p>... check specific ports and suggest free ones",
|
|
91
|
+
" spectral ports free [start] find first free port from `start` (default 3000)",
|
|
92
|
+
"",
|
|
93
|
+
].join("\n"));
|
|
94
|
+
process.exit(0);
|
|
95
|
+
}
|
|
96
|
+
// Default: full scan.
|
|
97
|
+
if (sub === undefined) {
|
|
98
|
+
try {
|
|
99
|
+
const scan = await scanPorts();
|
|
100
|
+
process.stdout.write(`${renderTable(scan.entries)}\n`);
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
process.stderr.write(pc.red(`Port scan failed: ${err instanceof Error ? err.message : String(err)}\n`));
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
process.stderr.write(pc.red(`Unknown ports subcommand: ${sub}\n`));
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ports — native spectral extension.
|
|
3
|
+
*
|
|
4
|
+
* Helps resolve the classic "many projects on one machine" problem where
|
|
5
|
+
* Postgres, NATS, Debezium, MinIO, Redis, etc. collide on the same ports.
|
|
6
|
+
*
|
|
7
|
+
* Registers three read-only/free tools:
|
|
8
|
+
* - ports_scan list every listening TCP port + owning process
|
|
9
|
+
* - ports_check check specific ports (status + owner + suggestion)
|
|
10
|
+
* - ports_find_free find the first free port from a starting point
|
|
11
|
+
*
|
|
12
|
+
* No external dependencies. On macOS we parse `lsof`, on Linux `ss`/`netstat`,
|
|
13
|
+
* and on Windows `netstat`. Port reservation for CI/docker is left to the
|
|
14
|
+
* user's compose/env files; this extension is the diagnostic + allocation
|
|
15
|
+
* layer that gives the agent the facts it needs to fix collisions.
|
|
16
|
+
*/
|
|
17
|
+
import type { ExtensionAPI } from "../../sdk/coding-agent/index.js";
|
|
18
|
+
export default function portsExtension(ext: ExtensionAPI): Promise<void>;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/extensions/ports/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAIH,OAAO,KAAK,EAAmB,YAAY,EAAkB,MAAM,iCAAiC,CAAC;AAuDrG,wBAA8B,cAAc,CAAC,GAAG,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA+F7E"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ports — native spectral extension.
|
|
3
|
+
*
|
|
4
|
+
* Helps resolve the classic "many projects on one machine" problem where
|
|
5
|
+
* Postgres, NATS, Debezium, MinIO, Redis, etc. collide on the same ports.
|
|
6
|
+
*
|
|
7
|
+
* Registers three read-only/free tools:
|
|
8
|
+
* - ports_scan list every listening TCP port + owning process
|
|
9
|
+
* - ports_check check specific ports (status + owner + suggestion)
|
|
10
|
+
* - ports_find_free find the first free port from a starting point
|
|
11
|
+
*
|
|
12
|
+
* No external dependencies. On macOS we parse `lsof`, on Linux `ss`/`netstat`,
|
|
13
|
+
* and on Windows `netstat`. Port reservation for CI/docker is left to the
|
|
14
|
+
* user's compose/env files; this extension is the diagnostic + allocation
|
|
15
|
+
* layer that gives the agent the facts it needs to fix collisions.
|
|
16
|
+
*/
|
|
17
|
+
import { Type } from "typebox";
|
|
18
|
+
import { knownPortLabel, scanPorts, isPortFree, findFreePort } from "./platform.js";
|
|
19
|
+
function errorResult(msg) {
|
|
20
|
+
return { content: [{ type: "text", text: `❌ ${msg}` }], details: { isError: true, error: msg } };
|
|
21
|
+
}
|
|
22
|
+
function renderScan(entries) {
|
|
23
|
+
if (entries.length === 0)
|
|
24
|
+
return "No listening TCP ports found.";
|
|
25
|
+
const dedup = new Map();
|
|
26
|
+
for (const e of entries) {
|
|
27
|
+
// Prefer a non-wildcard address when the same port appears twice (IPv4 + IPv6).
|
|
28
|
+
const existing = dedup.get(e.port);
|
|
29
|
+
if (!existing || (existing.address === "0.0.0.0" && e.address !== "0.0.0.0")) {
|
|
30
|
+
dedup.set(e.port, { address: e.address, process: e.process, pid: e.pid });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
const rows = [...dedup.entries()].sort((a, b) => a[0] - b[0]);
|
|
34
|
+
const portW = Math.max(5, ...rows.map(([p]) => String(p).length));
|
|
35
|
+
const rowsText = rows.map(([port, info]) => {
|
|
36
|
+
const known = knownPortLabel(port);
|
|
37
|
+
const label = known ? ` ${known}` : "";
|
|
38
|
+
const owner = info.process ? `${info.process}${info.pid !== null ? ` (pid ${info.pid})` : ""}` : "unknown";
|
|
39
|
+
const bind = info.address === "0.0.0.0" || info.address === "::" || info.address === "::1"
|
|
40
|
+
? "all" : info.address;
|
|
41
|
+
return `${String(port).padStart(portW)} ${bind.padEnd(22)} ${owner}${label}`;
|
|
42
|
+
});
|
|
43
|
+
return [
|
|
44
|
+
`${rows.length} listening TCP port(s):`,
|
|
45
|
+
"",
|
|
46
|
+
`${"Port".padStart(portW)} ${"Bind".padEnd(22)} Process`,
|
|
47
|
+
`${"─".repeat(portW)} ${"─".repeat(22)} ${"─".repeat(30)}`,
|
|
48
|
+
...rowsText,
|
|
49
|
+
].join("\n");
|
|
50
|
+
}
|
|
51
|
+
const scanSchema = Type.Object({});
|
|
52
|
+
const checkSchema = Type.Object({
|
|
53
|
+
ports: Type.Array(Type.Number(), { description: "Port numbers to check (e.g. [5432, 4222, 9000])." }),
|
|
54
|
+
host: Type.Optional(Type.String({ default: "0.0.0.0", description: "Bind host to test for free ports. Default: 0.0.0.0." })),
|
|
55
|
+
});
|
|
56
|
+
const findSchema = Type.Object({
|
|
57
|
+
start: Type.Optional(Type.Number({ default: 3000, description: "Start searching from this port. Default: 3000." })),
|
|
58
|
+
host: Type.Optional(Type.String({ default: "0.0.0.0", description: "Bind host to test. Default: 0.0.0.0." })),
|
|
59
|
+
max: Type.Optional(Type.Number({ default: 65535, description: "Upper bound. Default: 65535." })),
|
|
60
|
+
});
|
|
61
|
+
export default async function portsExtension(ext) {
|
|
62
|
+
const scanTool = {
|
|
63
|
+
name: "ports_scan",
|
|
64
|
+
label: "Scan Ports",
|
|
65
|
+
description: "List every listening TCP port on this machine with its bind address and owning process. " +
|
|
66
|
+
"Use this when services from multiple projects (Postgres, NATS, Debezium, MinIO, Redis, etc.) " +
|
|
67
|
+
"may be colliding on the same ports. Read-only.",
|
|
68
|
+
promptSnippet: "`ports_scan` — list listening TCP ports and their owning processes",
|
|
69
|
+
parameters: scanSchema,
|
|
70
|
+
async execute(_toolCallId, _params) {
|
|
71
|
+
try {
|
|
72
|
+
const result = await scanPorts();
|
|
73
|
+
return {
|
|
74
|
+
content: [{ type: "text", text: renderScan(result.entries) }],
|
|
75
|
+
details: { count: result.entries.length, platform: result.platform, command: result.command },
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
const checkTool = {
|
|
84
|
+
name: "ports_check",
|
|
85
|
+
label: "Check Ports",
|
|
86
|
+
description: "Check whether specific TCP ports are free or taken. Returns the owner process for taken ports " +
|
|
87
|
+
"and the first free alternative for requested ones. Use before starting another project's stack.",
|
|
88
|
+
promptSnippet: "`ports_check` — check status of specific ports and suggest free alternatives",
|
|
89
|
+
parameters: checkSchema,
|
|
90
|
+
async execute(_toolCallId, params) {
|
|
91
|
+
const ports = params.ports.map((p) => Number(p)).filter((p) => Number.isInteger(p) && p > 0);
|
|
92
|
+
if (ports.length === 0)
|
|
93
|
+
return errorResult("Provide at least one valid port in `ports`.");
|
|
94
|
+
const host = params.host ?? "0.0.0.0";
|
|
95
|
+
try {
|
|
96
|
+
const scan = await scanPorts();
|
|
97
|
+
const owners = new Map();
|
|
98
|
+
for (const e of scan.entries) {
|
|
99
|
+
if (!owners.has(e.port))
|
|
100
|
+
owners.set(e.port, { process: e.process, pid: e.pid });
|
|
101
|
+
}
|
|
102
|
+
const lines = [];
|
|
103
|
+
for (const port of ports) {
|
|
104
|
+
const owner = owners.get(port);
|
|
105
|
+
const free = owner === undefined && (await isPortFree(port, host));
|
|
106
|
+
if (free) {
|
|
107
|
+
lines.push(`✓ ${port} is free (bindable on ${host}).`);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
const who = owner?.process ? `${owner.process}${owner.pid !== null ? ` (pid ${owner.pid})` : ""}` : "already bound";
|
|
111
|
+
const label = knownPortLabel(port) ? ` — ${knownPortLabel(port)}` : "";
|
|
112
|
+
const alternative = await findFreePort(port, 65535, host);
|
|
113
|
+
lines.push(`✗ ${port} is taken by ${who}${label}. First free port from ${port}: ${alternative ?? "none found"}.`);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return { content: [{ type: "text", text: lines.join("\n") }], details: { ports, host } };
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
const findTool = {
|
|
124
|
+
name: "ports_find_free",
|
|
125
|
+
label: "Find Free Port",
|
|
126
|
+
description: "Find the first free TCP port at or after a starting port. Useful when allocating a per-project " +
|
|
127
|
+
"offset for a new stack without colliding with services already running on this machine.",
|
|
128
|
+
promptSnippet: "`ports_find_free` — find the first free port from a starting point",
|
|
129
|
+
parameters: findSchema,
|
|
130
|
+
async execute(_toolCallId, params) {
|
|
131
|
+
const start = Number(params.start) || 3000;
|
|
132
|
+
const max = Number(params.max) || 65535;
|
|
133
|
+
const host = params.host ?? "0.0.0.0";
|
|
134
|
+
try {
|
|
135
|
+
const port = await findFreePort(start, max, host);
|
|
136
|
+
if (port === null) {
|
|
137
|
+
return { content: [{ type: "text", text: `No free port found between ${start} and ${max} on ${host}.` }], details: { start, max, host } };
|
|
138
|
+
}
|
|
139
|
+
const label = knownPortLabel(port) ? ` (usually: ${knownPortLabel(port)})` : "";
|
|
140
|
+
return {
|
|
141
|
+
content: [{ type: "text", text: `✓ First free port from ${start} on ${host}: ${port}${label}.` }],
|
|
142
|
+
details: { port, start, max, host },
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
catch (err) {
|
|
146
|
+
return errorResult(err instanceof Error ? err.message : String(err));
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
};
|
|
150
|
+
ext.registerTool(scanTool);
|
|
151
|
+
ext.registerTool(checkTool);
|
|
152
|
+
ext.registerTool(findTool);
|
|
153
|
+
process.stderr.write(`[ports] Registered ports_scan + ports_check + ports_find_free (platform: ${process.platform}).\n`);
|
|
154
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-platform port introspection for the ports extension.
|
|
3
|
+
*
|
|
4
|
+
* Zero external dependencies. We shell out to the OS's native tooling and
|
|
5
|
+
* parse its output, so a machine with many projects/services can be inspected
|
|
6
|
+
* without requiring `lsof` from JS bindings or admin privileges.
|
|
7
|
+
*
|
|
8
|
+
* Detection order per platform:
|
|
9
|
+
* - darwin: lsof -nP -iTCP -sTCP:LISTEN
|
|
10
|
+
* - linux: ss -ltnp (fallback: netstat -ltnp)
|
|
11
|
+
* - win32: netstat -ano (pids are resolved in a second best-effort pass)
|
|
12
|
+
*/
|
|
13
|
+
export interface PortEntry {
|
|
14
|
+
port: number;
|
|
15
|
+
protocol: "tcp" | "udp";
|
|
16
|
+
address: string;
|
|
17
|
+
pid: number | null;
|
|
18
|
+
process: string | null;
|
|
19
|
+
}
|
|
20
|
+
export interface PortScanResult {
|
|
21
|
+
platform: string;
|
|
22
|
+
command: string;
|
|
23
|
+
entries: PortEntry[];
|
|
24
|
+
}
|
|
25
|
+
/** Well-known services so the report can label ports humans recognize. */
|
|
26
|
+
export declare const KNOWN_PORTS: Record<number, string>;
|
|
27
|
+
export declare function knownPortLabel(port: number): string | undefined;
|
|
28
|
+
export declare function scanPorts(): Promise<PortScanResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Check a single port using a real bind attempt, which is the only reliable
|
|
31
|
+
* cross-platform way to know whether a port is actually free (a service may be
|
|
32
|
+
* listening only on a specific interface, so a "scan" alone is not enough).
|
|
33
|
+
*/
|
|
34
|
+
export declare function isPortFree(port: number, host?: string): Promise<boolean>;
|
|
35
|
+
/**
|
|
36
|
+
* Find the first free port at or after `start`, bounded by `max`.
|
|
37
|
+
*/
|
|
38
|
+
export declare function findFreePort(start: number, max?: number, host?: string): Promise<number | null>;
|
|
39
|
+
//# sourceMappingURL=platform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform.d.ts","sourceRoot":"","sources":["../../../src/extensions/ports/platform.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,GAAG,KAAK,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,SAAS,EAAE,CAAC;CACrB;AAED,0EAA0E;AAC1E,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAuBrC,CAAC;AAEX,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE/D;AA+JD,wBAAsB,SAAS,IAAI,OAAO,CAAC,cAAc,CAAC,CA+BzD;AAED;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAWjF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,SAAQ,EAAE,IAAI,SAAY,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKvG"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cross-platform port introspection for the ports extension.
|
|
3
|
+
*
|
|
4
|
+
* Zero external dependencies. We shell out to the OS's native tooling and
|
|
5
|
+
* parse its output, so a machine with many projects/services can be inspected
|
|
6
|
+
* without requiring `lsof` from JS bindings or admin privileges.
|
|
7
|
+
*
|
|
8
|
+
* Detection order per platform:
|
|
9
|
+
* - darwin: lsof -nP -iTCP -sTCP:LISTEN
|
|
10
|
+
* - linux: ss -ltnp (fallback: netstat -ltnp)
|
|
11
|
+
* - win32: netstat -ano (pids are resolved in a second best-effort pass)
|
|
12
|
+
*/
|
|
13
|
+
import { execFile } from "node:child_process";
|
|
14
|
+
import { promisify } from "node:util";
|
|
15
|
+
import { platform as osPlatform } from "node:os";
|
|
16
|
+
const execFileAsync = promisify(execFile);
|
|
17
|
+
/** Well-known services so the report can label ports humans recognize. */
|
|
18
|
+
export const KNOWN_PORTS = {
|
|
19
|
+
3000: "React/Next dev",
|
|
20
|
+
3008: "Aexol Studio (landing)",
|
|
21
|
+
4000: "backend dev (generic)",
|
|
22
|
+
4008: "Aexol backend (GraphQL)",
|
|
23
|
+
4222: "NATS",
|
|
24
|
+
5432: "PostgreSQL (default)",
|
|
25
|
+
5433: "PostgreSQL (secondary)",
|
|
26
|
+
5434: "PostgreSQL (Aexol dev)",
|
|
27
|
+
5435: "PostgreSQL (Aexol test)",
|
|
28
|
+
6379: "Redis",
|
|
29
|
+
7000: "ControlCenter/airplay",
|
|
30
|
+
8000: "http dev (generic)",
|
|
31
|
+
8080: "http proxy (generic)",
|
|
32
|
+
8081: "http admin (generic)",
|
|
33
|
+
8083: "Debezium Connect",
|
|
34
|
+
8085: "MinIO API",
|
|
35
|
+
8086: "MinIO console (legacy)",
|
|
36
|
+
9000: "MinIO / S3 gateway",
|
|
37
|
+
9001: "MinIO console",
|
|
38
|
+
9092: "Kafka",
|
|
39
|
+
9200: "Elasticsearch",
|
|
40
|
+
27017: "MongoDB",
|
|
41
|
+
};
|
|
42
|
+
export function knownPortLabel(port) {
|
|
43
|
+
return KNOWN_PORTS[port];
|
|
44
|
+
}
|
|
45
|
+
function parsePort(raw) {
|
|
46
|
+
const n = Number(raw);
|
|
47
|
+
return Number.isInteger(n) && n >= 1 && n <= 65535 ? n : null;
|
|
48
|
+
}
|
|
49
|
+
// ===========================================================================
|
|
50
|
+
// macOS
|
|
51
|
+
// ===========================================================================
|
|
52
|
+
function parseLsof(output) {
|
|
53
|
+
const entries = [];
|
|
54
|
+
for (const line of output.split("\n")) {
|
|
55
|
+
if (!line.includes("(LISTEN)"))
|
|
56
|
+
continue;
|
|
57
|
+
const parts = line.trim().split(/\s+/);
|
|
58
|
+
if (parts.length < 3)
|
|
59
|
+
continue;
|
|
60
|
+
// lsof layout: COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
|
|
61
|
+
// NAME looks like `*:5432` or `127.0.0.1:3008` and is followed by `(LISTEN)`.
|
|
62
|
+
const tcpIndex = parts.findIndex((p) => p === "TCP");
|
|
63
|
+
const name = tcpIndex >= 0 ? parts[tcpIndex + 1] : undefined;
|
|
64
|
+
if (!name)
|
|
65
|
+
continue;
|
|
66
|
+
const addrPort = name.slice(name.lastIndexOf(":") + 1);
|
|
67
|
+
const port = parsePort(addrPort);
|
|
68
|
+
if (port === null)
|
|
69
|
+
continue;
|
|
70
|
+
const command = parts[0] ?? null;
|
|
71
|
+
const pid = parsePort(parts[1]) ?? null;
|
|
72
|
+
// Normalize the bind address: `*:5432` → 0.0.0.0, `[::1]:19876` → ::1.
|
|
73
|
+
let address;
|
|
74
|
+
if (name.startsWith("*")) {
|
|
75
|
+
address = "0.0.0.0";
|
|
76
|
+
}
|
|
77
|
+
else if (name.startsWith("[")) {
|
|
78
|
+
address = name.slice(1, name.indexOf("]"));
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
address = name.slice(0, name.lastIndexOf(":"));
|
|
82
|
+
}
|
|
83
|
+
entries.push({
|
|
84
|
+
port,
|
|
85
|
+
protocol: "tcp",
|
|
86
|
+
address,
|
|
87
|
+
pid,
|
|
88
|
+
process: command,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return entries;
|
|
92
|
+
}
|
|
93
|
+
// ===========================================================================
|
|
94
|
+
// Linux
|
|
95
|
+
// ===========================================================================
|
|
96
|
+
function parseSs(output) {
|
|
97
|
+
const entries = [];
|
|
98
|
+
for (const line of output.split("\n")) {
|
|
99
|
+
const trimmed = line.trim();
|
|
100
|
+
if (!trimmed.startsWith("LISTEN"))
|
|
101
|
+
continue;
|
|
102
|
+
const parts = trimmed.split(/\s+/);
|
|
103
|
+
// ss layout: LISTEN 0 511 0.0.0.0:5432 0.0.0.0:* users:(("postgres",pid=123,fd=5))
|
|
104
|
+
const local = parts.find((p) => /^[0-9.:\[\]]+:\d+$/.test(p) && !p.endsWith(":*"));
|
|
105
|
+
if (!local)
|
|
106
|
+
continue;
|
|
107
|
+
const port = parsePort(local.slice(local.lastIndexOf(":") + 1));
|
|
108
|
+
if (port === null)
|
|
109
|
+
continue;
|
|
110
|
+
const addr = local.startsWith("[") ? local.slice(1, local.indexOf("]")) : local.split(":")[0];
|
|
111
|
+
const userInfo = parts.find((p) => p.startsWith("users:"));
|
|
112
|
+
let process = null;
|
|
113
|
+
let pid = null;
|
|
114
|
+
if (userInfo) {
|
|
115
|
+
const procMatch = userInfo.match(/\("([^"]+)"/);
|
|
116
|
+
const pidMatch = userInfo.match(/pid=(\d+)/);
|
|
117
|
+
process = procMatch ? procMatch[1] : null;
|
|
118
|
+
pid = pidMatch ? Number(pidMatch[1]) : null;
|
|
119
|
+
}
|
|
120
|
+
entries.push({ port, protocol: "tcp", address: addr || "0.0.0.0", pid, process });
|
|
121
|
+
}
|
|
122
|
+
return entries;
|
|
123
|
+
}
|
|
124
|
+
function parseNetstat(output) {
|
|
125
|
+
const entries = [];
|
|
126
|
+
for (const line of output.split("\n")) {
|
|
127
|
+
const trimmed = line.trim();
|
|
128
|
+
if (!/(^|\s)(LISTEN|0\.0\.0\.0)/.test(trimmed))
|
|
129
|
+
continue;
|
|
130
|
+
const parts = trimmed.split(/\s+/);
|
|
131
|
+
const local = parts.find((p) => /:\d+$/.test(p) && !p.endsWith(":*"));
|
|
132
|
+
if (!local)
|
|
133
|
+
continue;
|
|
134
|
+
const port = parsePort(local.slice(local.lastIndexOf(":") + 1));
|
|
135
|
+
if (port === null)
|
|
136
|
+
continue;
|
|
137
|
+
const addr = local.startsWith("[") ? local.slice(1, local.indexOf("]")) : local.split(":")[0];
|
|
138
|
+
const process = parts[parts.length - 1]?.includes("/") ? parts[parts.length - 1].split("/")[0] : null;
|
|
139
|
+
const pid = parts[parts.length - 1]?.includes("/") ? Number(parts[parts.length - 1].split("/")[1]) : null;
|
|
140
|
+
entries.push({ port, protocol: "tcp", address: addr || "0.0.0.0", pid: pid || null, process });
|
|
141
|
+
}
|
|
142
|
+
return entries;
|
|
143
|
+
}
|
|
144
|
+
// ===========================================================================
|
|
145
|
+
// Windows
|
|
146
|
+
// ===========================================================================
|
|
147
|
+
async function resolveWinPids(entries) {
|
|
148
|
+
const pids = [...new Set(entries.map((e) => e.pid).filter((p) => p !== null))];
|
|
149
|
+
if (pids.length === 0)
|
|
150
|
+
return;
|
|
151
|
+
const query = pids.map((p) => `ProcessId=${p}`).join(",");
|
|
152
|
+
try {
|
|
153
|
+
const { stdout } = await execFileAsync("powershell.exe", ["-NoProfile", "-Command", String.raw `Get-CimInstance Win32_Process -Filter '${query}' | ForEach-Object { "$($_.ProcessId)\t$($_.Name)" }`], { timeout: 10_000, windowsHide: true });
|
|
154
|
+
const nameByPid = new Map();
|
|
155
|
+
for (const line of stdout.split("\n")) {
|
|
156
|
+
const [pidStr, ...nameParts] = line.trim().split("\t");
|
|
157
|
+
const pid = parsePort(pidStr);
|
|
158
|
+
if (pid && nameParts.length)
|
|
159
|
+
nameByPid.set(pid, nameParts.join("\t"));
|
|
160
|
+
}
|
|
161
|
+
for (const entry of entries) {
|
|
162
|
+
const name = entry.pid !== null ? nameByPid.get(entry.pid) : undefined;
|
|
163
|
+
entry.process = name ?? null;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// process names are best-effort; pids remain valid
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
function parseNetstatWin(output) {
|
|
171
|
+
const entries = [];
|
|
172
|
+
for (const line of output.split("\n")) {
|
|
173
|
+
const trimmed = line.trim();
|
|
174
|
+
if (!/^TCP\s/.test(trimmed) || !trimmed.includes("LISTENING"))
|
|
175
|
+
continue;
|
|
176
|
+
const parts = trimmed.split(/\s+/);
|
|
177
|
+
const local = parts[1];
|
|
178
|
+
const pidStr = parts[parts.length - 1];
|
|
179
|
+
const port = parsePort(local.slice(local.lastIndexOf(":") + 1));
|
|
180
|
+
if (port === null)
|
|
181
|
+
continue;
|
|
182
|
+
const pid = parsePort(pidStr);
|
|
183
|
+
entries.push({
|
|
184
|
+
port,
|
|
185
|
+
protocol: "tcp",
|
|
186
|
+
address: local.startsWith("[") ? local.slice(1, local.indexOf("]")) : local.split(":")[0],
|
|
187
|
+
pid,
|
|
188
|
+
process: null,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
return entries;
|
|
192
|
+
}
|
|
193
|
+
// ===========================================================================
|
|
194
|
+
// Unified API
|
|
195
|
+
// ===========================================================================
|
|
196
|
+
export async function scanPorts() {
|
|
197
|
+
switch (osPlatform()) {
|
|
198
|
+
case "darwin": {
|
|
199
|
+
const { stdout } = await execFileAsync("lsof", ["-nP", "-iTCP", "-sTCP:LISTEN"], {
|
|
200
|
+
timeout: 10_000,
|
|
201
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
202
|
+
});
|
|
203
|
+
return { platform: "darwin", command: "lsof -nP -iTCP -sTCP:LISTEN", entries: parseLsof(stdout) };
|
|
204
|
+
}
|
|
205
|
+
case "linux": {
|
|
206
|
+
try {
|
|
207
|
+
const { stdout } = await execFileAsync("ss", ["-ltnp"], { timeout: 10_000, maxBuffer: 10 * 1024 * 1024 });
|
|
208
|
+
return { platform: "linux", command: "ss -ltnp", entries: parseSs(stdout) };
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
const { stdout } = await execFileAsync("netstat", ["-ltnp"], { timeout: 10_000, maxBuffer: 10 * 1024 * 1024 });
|
|
212
|
+
return { platform: "linux", command: "netstat -ltnp", entries: parseNetstat(stdout) };
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
case "win32": {
|
|
216
|
+
const { stdout } = await execFileAsync("netstat", ["-ano"], {
|
|
217
|
+
timeout: 10_000,
|
|
218
|
+
maxBuffer: 10 * 1024 * 1024,
|
|
219
|
+
windowsHide: true,
|
|
220
|
+
});
|
|
221
|
+
const entries = parseNetstatWin(stdout);
|
|
222
|
+
await resolveWinPids(entries);
|
|
223
|
+
return { platform: "win32", command: "netstat -ano", entries };
|
|
224
|
+
}
|
|
225
|
+
default:
|
|
226
|
+
throw new Error(`Port scanning is not supported on ${osPlatform()}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Check a single port using a real bind attempt, which is the only reliable
|
|
231
|
+
* cross-platform way to know whether a port is actually free (a service may be
|
|
232
|
+
* listening only on a specific interface, so a "scan" alone is not enough).
|
|
233
|
+
*/
|
|
234
|
+
export async function isPortFree(port, host = "0.0.0.0") {
|
|
235
|
+
return new Promise((resolve) => {
|
|
236
|
+
import("node:net").then(({ createServer }) => {
|
|
237
|
+
const server = createServer();
|
|
238
|
+
server.once("error", () => resolve(false));
|
|
239
|
+
server.once("listening", () => {
|
|
240
|
+
server.close(() => resolve(true));
|
|
241
|
+
});
|
|
242
|
+
server.listen(port, host);
|
|
243
|
+
});
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Find the first free port at or after `start`, bounded by `max`.
|
|
248
|
+
*/
|
|
249
|
+
export async function findFreePort(start, max = 65535, host = "0.0.0.0") {
|
|
250
|
+
for (let port = Math.max(1, start); port <= Math.min(65535, max); port++) {
|
|
251
|
+
if (await isPortFree(port, host))
|
|
252
|
+
return port;
|
|
253
|
+
}
|
|
254
|
+
return null;
|
|
255
|
+
}
|
|
@@ -5,7 +5,7 @@ import { rawTokensSinceLastCompaction } from "../branch.js";
|
|
|
5
5
|
* When the last assistant message in agent_end has stopReason "error" matching this pattern,
|
|
6
6
|
* Pi will auto-retry — we must not trigger compaction between attempts.
|
|
7
7
|
*/
|
|
8
|
-
const RETRYABLE_ERROR_RE = /overloaded|provider.?returned.?error|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server.?error|internal.?error|network.?error|connection.?error|connection.?refused|connection.?lost|websocket.?closed|websocket.?error|other side closed|fetch failed|upstream.?connect|reset before headers|socket hang up|ended without|http2 request did not get a response|timed? out|timeout|terminated|retry delay/i;
|
|
8
|
+
const RETRYABLE_ERROR_RE = /overloaded|provider.?returned.?error|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server.?error|internal.?error|network.?error|connection.?error|connection.?refused|connection.?lost|connection.?closed|connection.?reset|websocket.?closed|websocket.?error|other side closed|socket connection was closed|fetch failed|upstream.?connect|reset before headers|socket hang up|ended without|http2 request did not get a response|timed? out|timeout|terminated|retry delay/i;
|
|
9
9
|
function getCompactionPolicy(ctx) {
|
|
10
10
|
return ctx.settingsManager?.getCompactionPolicy?.() ?? DEFAULT_COMPACTION_POLICY;
|
|
11
11
|
}
|
|
@@ -138,7 +138,7 @@ async function runLoop(initialContext, newMessages, initialConfig, signal, emit,
|
|
|
138
138
|
// but NOT for safety refusals or signal-based aborts.
|
|
139
139
|
const errorMsg = message.errorMessage || "";
|
|
140
140
|
const isTransientError = !signal?.aborted &&
|
|
141
|
-
/rate.?limit|429|overloaded|529|timeout|network|econnreset|fetch failed/i.test(errorMsg);
|
|
141
|
+
/rate.?limit|429|overloaded|529|timeout|network|econnreset|fetch failed|socket connection was closed|connection.?closed|connection.?reset|socket hang up|other side closed|reset before headers|upstream.?connect|http2 request did not get a response/i.test(errorMsg);
|
|
142
142
|
if (isTransientError && apiRetryCount < MAX_API_RETRIES) {
|
|
143
143
|
apiRetryCount++;
|
|
144
144
|
const backoffMs = API_RETRY_BASE_MS * Math.pow(2, apiRetryCount - 1); // 1000, 2000, 4000
|
|
@@ -2622,7 +2622,7 @@ export class AgentSession {
|
|
|
2622
2622
|
return false;
|
|
2623
2623
|
const err = message.errorMessage;
|
|
2624
2624
|
// Match: overloaded_error, provider returned error, rate limit, 429, 500, 502, 503, 504, service unavailable, network/connection errors (including connection lost), WebSocket transport closes/errors, fetch failed, premature stream endings, HTTP/2 closed before response, terminated, retry delay exceeded
|
|
2625
|
-
return /overloaded|provider.?returned.?error|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server.?error|internal.?error|network.?error|connection.?error|connection.?refused|connection.?lost|websocket.?closed|websocket.?error|other side closed|fetch failed|upstream.?connect|reset before headers|socket hang up|ended without|stream ended before message_stop|http2 request did not get a response|timed? out|timeout|terminated|retry delay/i.test(err);
|
|
2625
|
+
return /overloaded|provider.?returned.?error|rate.?limit|too many requests|429|500|502|503|504|service.?unavailable|server.?error|internal.?error|network.?error|connection.?error|connection.?refused|connection.?lost|connection.?closed|connection.?reset|websocket.?closed|websocket.?error|other side closed|socket connection was closed|fetch failed|upstream.?connect|reset before headers|socket hang up|ended without|stream ended before message_stop|http2 request did not get a response|timed? out|timeout|terminated|retry delay/i.test(err);
|
|
2626
2626
|
}
|
|
2627
2627
|
/**
|
|
2628
2628
|
* Prepare a retryable error for continuation with exponential backoff.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-extensions.d.ts","sourceRoot":"","sources":["../../../../../src/sdk/coding-agent/core/extensions/native-extensions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,uBAAuB;IACtC,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,aAAa,CAAC;IAChD;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,cAAc,EAAE,OAAO,CAAC;IACxB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,uBAAuB,
|
|
1
|
+
{"version":3,"file":"native-extensions.d.ts","sourceRoot":"","sources":["../../../../../src/sdk/coding-agent/core/extensions/native-extensions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,uBAAuB;IACtC,qEAAqE;IACrE,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,aAAa,CAAC;IAChD;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,oEAAoE;IACpE,cAAc,EAAE,OAAO,CAAC;IACxB,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,uBAAuB,EAuItD,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,uBAAuB,GAAG,SAAS,CAElF;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAI1G;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC;IAClG,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC,CAUD"}
|
|
@@ -130,6 +130,17 @@ export const NATIVE_EXTENSIONS = [
|
|
|
130
130
|
defaultEnabled: true,
|
|
131
131
|
tags: ["structure", "analysis", "cleanup", "tree", "audit"],
|
|
132
132
|
},
|
|
133
|
+
{
|
|
134
|
+
id: "ports",
|
|
135
|
+
label: "Port Inspector",
|
|
136
|
+
description: "Diagnoses port collisions across many local projects: lists listening TCP ports and their " +
|
|
137
|
+
"owning processes, checks whether specific ports are free, and allocates the first free port. " +
|
|
138
|
+
"Handles Postgres, NATS, Debezium, MinIO, Redis and any other service. Zero dependencies.",
|
|
139
|
+
category: "automation",
|
|
140
|
+
entryPath: "src/extensions/ports/index.ts",
|
|
141
|
+
defaultEnabled: true,
|
|
142
|
+
tags: ["ports", "devops", "services", "collision", "docker", "network"],
|
|
143
|
+
},
|
|
133
144
|
];
|
|
134
145
|
/**
|
|
135
146
|
* Look up a native extension by id. Returns undefined for unknown ids.
|
|
@@ -372,9 +372,12 @@ export declare class AgentBridge {
|
|
|
372
372
|
private withPromptTimeout;
|
|
373
373
|
/**
|
|
374
374
|
* Whether `ev` represents real agent progress and should reset the
|
|
375
|
-
* inactivity watchdog.
|
|
376
|
-
*
|
|
377
|
-
*
|
|
375
|
+
* inactivity watchdog. `tool_execution_update` IS included: live stdout/
|
|
376
|
+
* stderr churn proves the tool is actively producing output, so a
|
|
377
|
+
* long-running but legitimately-streaming command must not trip the
|
|
378
|
+
* watchdog. The separate per-tool TOOL_EXECUTION_TIMEOUT_MS backstop still
|
|
379
|
+
* catches a tool that runs forever. High-frequency churn events that can
|
|
380
|
+
* stream indefinitely without progress remain excluded:
|
|
378
381
|
* - `compaction_delta`
|
|
379
382
|
* - `token_usage` (wire-only; not a session event, excluded for clarity)
|
|
380
383
|
*
|
|
@@ -386,9 +389,8 @@ export declare class AgentBridge {
|
|
|
386
389
|
/**
|
|
387
390
|
* Reset the inactivity watchdog. Called from `handleEvent` ONLY for
|
|
388
391
|
* meaningful progress events (see `isMeaningfulPromptActivity`), so a
|
|
389
|
-
* long-running prompt that is actively streaming text / calling tools
|
|
390
|
-
* never killed by the inactivity timeout
|
|
391
|
-
* chunks) no longer keeps a stuck session alive forever.
|
|
392
|
+
* long-running prompt that is actively streaming text / calling tools /
|
|
393
|
+
* streaming tool output is never killed by the inactivity timeout.
|
|
392
394
|
*/
|
|
393
395
|
private bumpPromptActivity;
|
|
394
396
|
private clearPromptTimers;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-bridge.d.ts","sourceRoot":"","sources":["../../src/server/agent-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAaH,OAAO,EAQL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EAEtB,MAAM,8BAA8B,CAAC;AAatC,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,8BAA8B,CAAC;AAatC,OAAO,EACL,kBAAkB,IAAI,yBAAyB,EAEhD,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAI3E,UAAU,4BAA4B;IACpC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;CACpC;AAkBD,sEAAsE;AACtE,MAAM,MAAM,oBAAoB,GAAG,OAAO,yBAAyB,CAAC;AAmCpE,MAAM,WAAW,kBAAkB;IACjC,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,qFAAqF;IACrF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,2EAA2E;IAC3E,GAAG,EAAE,MAAM,CAAC;IACZ,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,IAAI,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IACnC;;;;;OAKG;IACH,0BAA0B,EAAE,CAAC,GAAG,EAAE;QAChC,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,MAAM,CAAC;QACpB,6EAA6E;QAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,KAAK,IAAI,CAAC;IACX;;;OAGG;IACH,yBAAyB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACxD;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAC/B;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB;;;;OAIG;IACH,cAAc,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC9C;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,oBAAoB,CAAC;IAC1C;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;;;;;;;OAWG;IACH,yBAAyB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtE;
|
|
1
|
+
{"version":3,"file":"agent-bridge.d.ts","sourceRoot":"","sources":["../../src/server/agent-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -543,11 +543,12 @@ function toRestoredMemorySnapshot(snapshot) {
|
|
|
543
543
|
* sessions are.
|
|
544
544
|
*
|
|
545
545
|
* Meaningful events are an explicit allow-list defined by
|
|
546
|
-
* `isMeaningfulPromptActivity(ev)` in `handleEvent`.
|
|
547
|
-
*
|
|
546
|
+
* `isMeaningfulPromptActivity(ev)` in `handleEvent`. `tool_execution_update`
|
|
547
|
+
* (e.g. live bash stdout chunks from a still-running tool) DOES reset the
|
|
548
|
+
* watchdog — a legitimately-streaming long-lived command is real work and
|
|
549
|
+
* must not be killed. Other high-frequency churn events — `compaction_delta`,
|
|
548
550
|
* `token_usage` — do NOT reset the watchdog, because they can stream
|
|
549
|
-
* indefinitely without real agent progress
|
|
550
|
-
* to stdout would otherwise keep the watchdog alive forever).
|
|
551
|
+
* indefinitely without real agent progress.
|
|
551
552
|
*
|
|
552
553
|
* Default 120s of total silence. Hard ceiling removed for meaningful work —
|
|
553
554
|
* working agents (including subagents) must never be killed by this watchdog.
|
|
@@ -1461,8 +1462,10 @@ export class AgentBridge {
|
|
|
1461
1462
|
*/
|
|
1462
1463
|
async withPromptTimeout(prompt) {
|
|
1463
1464
|
// Activity-based watchdog: reset on meaningful session events only via
|
|
1464
|
-
// `bumpPromptActivity()` (churn like
|
|
1465
|
-
//
|
|
1465
|
+
// `bumpPromptActivity()` (churn like compaction_delta/token_usage excluded).
|
|
1466
|
+
// `tool_execution_update` resets it too because live tool output is real
|
|
1467
|
+
// progress from an actively-running command. A separate per-tool
|
|
1468
|
+
// TOOL_EXECUTION_TIMEOUT_MS backstop guards single
|
|
1466
1469
|
// tool calls. Triggers on total silence, NOT on long active prompts.
|
|
1467
1470
|
const inactivityPromise = new Promise((_, reject) => {
|
|
1468
1471
|
this.promptReject = reject;
|
|
@@ -1479,9 +1482,12 @@ export class AgentBridge {
|
|
|
1479
1482
|
}
|
|
1480
1483
|
/**
|
|
1481
1484
|
* Whether `ev` represents real agent progress and should reset the
|
|
1482
|
-
* inactivity watchdog.
|
|
1483
|
-
*
|
|
1484
|
-
*
|
|
1485
|
+
* inactivity watchdog. `tool_execution_update` IS included: live stdout/
|
|
1486
|
+
* stderr churn proves the tool is actively producing output, so a
|
|
1487
|
+
* long-running but legitimately-streaming command must not trip the
|
|
1488
|
+
* watchdog. The separate per-tool TOOL_EXECUTION_TIMEOUT_MS backstop still
|
|
1489
|
+
* catches a tool that runs forever. High-frequency churn events that can
|
|
1490
|
+
* stream indefinitely without progress remain excluded:
|
|
1485
1491
|
* - `compaction_delta`
|
|
1486
1492
|
* - `token_usage` (wire-only; not a session event, excluded for clarity)
|
|
1487
1493
|
*
|
|
@@ -1496,10 +1502,11 @@ export class AgentBridge {
|
|
|
1496
1502
|
case "message_end":
|
|
1497
1503
|
case "agent_end":
|
|
1498
1504
|
case "tool_execution_start":
|
|
1505
|
+
case "tool_execution_update":
|
|
1499
1506
|
case "tool_execution_end":
|
|
1500
1507
|
return true;
|
|
1501
1508
|
default:
|
|
1502
|
-
//
|
|
1509
|
+
// compaction_*, prompt_mutation_status,
|
|
1503
1510
|
// queue_update, auto_retry_*, length_continuation, session_info_changed,
|
|
1504
1511
|
// thinking_level_changed — churn / non-progress, do NOT reset watchdog.
|
|
1505
1512
|
return false;
|
|
@@ -1508,9 +1515,8 @@ export class AgentBridge {
|
|
|
1508
1515
|
/**
|
|
1509
1516
|
* Reset the inactivity watchdog. Called from `handleEvent` ONLY for
|
|
1510
1517
|
* meaningful progress events (see `isMeaningfulPromptActivity`), so a
|
|
1511
|
-
* long-running prompt that is actively streaming text / calling tools
|
|
1512
|
-
* never killed by the inactivity timeout
|
|
1513
|
-
* chunks) no longer keeps a stuck session alive forever.
|
|
1518
|
+
* long-running prompt that is actively streaming text / calling tools /
|
|
1519
|
+
* streaming tool output is never killed by the inactivity timeout.
|
|
1514
1520
|
*/
|
|
1515
1521
|
bumpPromptActivity() {
|
|
1516
1522
|
if (!this.promptActivityTimer)
|
|
@@ -1690,11 +1696,12 @@ export class AgentBridge {
|
|
|
1690
1696
|
return;
|
|
1691
1697
|
// Reset inactivity watchdog ONLY on meaningful agent progress events
|
|
1692
1698
|
// (text/thinking deltas, message boundaries, tool start/end, agent_end).
|
|
1693
|
-
//
|
|
1694
|
-
//
|
|
1695
|
-
//
|
|
1696
|
-
//
|
|
1697
|
-
// tool call
|
|
1699
|
+
// Live tool output (tool_execution_update) counts as meaningful activity:
|
|
1700
|
+
// a long-lived but legitimately-streaming command is real progress. Churn
|
|
1701
|
+
// events like compaction_delta remain excluded so a stuck session cannot
|
|
1702
|
+
// keep the watchdog alive forever. A separate per-tool
|
|
1703
|
+
// TOOL_EXECUTION_TIMEOUT_MS backstop covers a single tool call that runs
|
|
1704
|
+
// forever without emitting output.
|
|
1698
1705
|
if (this.isMeaningfulPromptActivity(ev)) {
|
|
1699
1706
|
this.bumpPromptActivity();
|
|
1700
1707
|
}
|
|
@@ -1839,6 +1846,9 @@ export class AgentBridge {
|
|
|
1839
1846
|
: `Running ${currentAgent ?? "subagent"}...`,
|
|
1840
1847
|
streamingText: mode === "single" ? streamingText : undefined,
|
|
1841
1848
|
thinkingText: mode === "single" ? thinkingText : undefined,
|
|
1849
|
+
thinkingMetadata: mode === "single"
|
|
1850
|
+
? runningResult?.thinkingMetadata
|
|
1851
|
+
: undefined,
|
|
1842
1852
|
systemPrompt: mode === "single" ? runningResult?.systemPrompt : undefined,
|
|
1843
1853
|
firstMessage: mode === "single" ? runningResult?.firstMessage : undefined,
|
|
1844
1854
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-humanizer.d.ts","sourceRoot":"","sources":["../../src/server/error-humanizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,
|
|
1
|
+
{"version":3,"file":"error-humanizer.d.ts","sourceRoot":"","sources":["../../src/server/error-humanizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QACsN,CAAC;AAoC3P;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAa1D"}
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* Matches transient provider errors: rate limits, overload, timeouts, and
|
|
15
15
|
* network failures.
|
|
16
16
|
*/
|
|
17
|
-
export const PROVIDER_ERROR_PATTERNS = /rate.?limit|429|overloaded|529|timeout|network|econnreset|fetch failed/i;
|
|
17
|
+
export const PROVIDER_ERROR_PATTERNS = /rate.?limit|429|overloaded|529|timeout|network|econnreset|fetch failed|socket connection was closed|connection.?closed|connection.?reset|socket hang up|other side closed|reset before headers|upstream.?connect|http2 request did not get a response/i;
|
|
18
18
|
const RATE_LIMIT_MESSAGE = "Rate limit reached. Please try again in a moment.";
|
|
19
19
|
const NETWORK_ERROR_MESSAGE = "Network error. Please try again.";
|
|
20
20
|
const GENERIC_MESSAGE = "Something went wrong. Please try again.";
|
package/dist/server/wire.d.ts
CHANGED
|
@@ -653,6 +653,8 @@ export type ServerEvent = {
|
|
|
653
653
|
streamingText?: string;
|
|
654
654
|
/** Streaming assistant thinking accumulated so far (single mode). Updated on thinking_delta. */
|
|
655
655
|
thinkingText?: string;
|
|
656
|
+
/** Responses API reasoning metadata for thinkingText (single mode). */
|
|
657
|
+
thinkingMetadata?: Record<string, unknown>;
|
|
656
658
|
systemPrompt?: string;
|
|
657
659
|
firstMessage?: string;
|
|
658
660
|
} | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/server/wire.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,uDAAuD;AACvD,MAAM,WAAW,eAAe;IAC9B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wDAAwD;AACxD,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,oGAAoG;IACpG,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,qGAAqG;IACrG,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,+FAA+F;IAC/F,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0FAA0F;IAC1F,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,6CAA6C;AAC7C,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,wEAAwE;IACxE,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,+CAA+C;AAC/C,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX;+EAC2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;iCAE6B;IAC7B,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,oBAAoB;IACnC,yCAAyC;IACzC,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,UAAU,GAAG,YAAY,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;IACjH,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,cAAc,GAAG,YAAY,CAAC;IACrC,KAAK,CAAC,EAAE,cAAc,GAAG,eAAe,CAAC;IACzC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,CAAC,EAAE;QACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;QACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;KACxB,CAAC;IACF,UAAU,EAAE;QACV,iBAAiB,EAAE,MAAM,CAAC;QAC1B,mBAAmB,EAAE,MAAM,CAAC;QAC5B,wBAAwB,EAAE,MAAM,CAAC;QACjC,wBAAwB,EAAE,MAAM,CAAC;QACjC,gCAAgC,EAAE,MAAM,CAAC;QACzC,qBAAqB,EAAE,MAAM,CAAC;QAC9B,4BAA4B,EAAE,MAAM,CAAC;QACrC,gCAAgC,EAAE,MAAM,CAAC;QACzC,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,UAAU,GAAG,YAAY,GAAG,aAAa,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC;QAChH,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,CAAC,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACtC,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,GAAG,SAAS,CAAC;IACtE,QAAQ,EAAE;QACR,QAAQ,EAAE,OAAO,CAAC;QAClB,UAAU,EAAE,OAAO,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,WAAW,EAAE;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,YAAY,EAAE;QACZ,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;QACxB,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,QAAQ,EAAE;QACR,2BAA2B,EAAE,MAAM,CAAC;QACpC,yBAAyB,EAAE,MAAM,CAAC;QAClC,qBAAqB,EAAE,MAAM,CAAC;KAC/B,CAAC;IACF,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAClD,sFAAsF;IACtF,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,6FAA6F;IAC7F,wBAAwB,EAAE,MAAM,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,YAAY,EAAE,mBAAmB,EAAE,CAAC;IACpC,WAAW,EAAE,kBAAkB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,+BAA+B;IAC9C,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,gFAAgF;IAChF,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8DAA8D;IAC9D,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,yEAAyE;IACzE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gDAAgD;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;CAClC,CAAC;AAMF;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,CACvC,WAAW,EACX;IACE,IAAI,EACA,eAAe,GACf,YAAY,GACZ,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,GACd,WAAW,GACX,aAAa,GACb,aAAa,GACb,aAAa,GACb,OAAO,GACP,gBAAgB,GAChB,mBAAmB,GACnB,cAAc,GACd,wBAAwB,CAAC;CAC9B,CACF,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,mBAAmB,EAAE,CAAC;CAC/B;AAED,MAAM,MAAM,WAAW,GACnB;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mDAAmD;IACnD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC5C;;6CAEyC;IACzC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;mEAE+D;IAC/D,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gHAAgH;IAChH,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,6FAA6F;IAC7F,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,2DAA2D;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,GACD;IAGE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,0JAA0J;IAC1J,WAAW,CAAC,EAAE,sBAAsB,GAAG,IAAI,CAAC;IAC5C,0FAA0F;IAC1F,WAAW,EAAE,MAAM,CAAC;IACpB,iHAAiH;IACjH,aAAa,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iEAAiE;IACjE,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,yEAAyE;IACzE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,oGAAoG;IACpG,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yDAAyD;IACzD,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,6FAA6F;IAC7F,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,2DAA2D;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,GACD;IAEE,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB,GACD;IAEE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB,GACD;IACE;;;;;;;OAOG;IACH,IAAI,EAAE,uBAAuB,CAAC;IAC9B,OAAO,EAAE,WAAW,CAAC;CACtB,GACD;IACE,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,WAAW,CAAC;CACnB,GACD;IACE,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GACD;IACE,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GACD;IACE,IAAI,EAAE,WAAW,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;CACf,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,qGAAqG;IACrG,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACjE,uFAAuF;IACvF,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,kEAAkE;IAClE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACD;IACE,IAAI,EAAE,WAAW,CAAC;CACnB,GACD;IACE;;;;;;;;;OASG;IACH,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,GACD;IACE,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB,GACD;IACE,mDAAmD;IACnD,IAAI,EAAE,gBAAgB,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,wEAAwE;IACxE,IAAI,EAAE,eAAe,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,GACD;IACE,6DAA6D;IAC7D,IAAI,EAAE,qBAAqB,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB,GACD;IACE,oDAAoD;IACpD,IAAI,EAAE,gBAAgB,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB,GACD;IACE,0EAA0E;IAC1E,IAAI,EAAE,mBAAmB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;CACpB,GACD;IACE,4EAA4E;IAC5E,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB,GACD;IACE,sEAAsE;IACtE,IAAI,EAAE,kBAAkB,CAAC;CAC1B,GACD;IACE;;;;OAIG;IACH,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,WAAW,EAAE,MAAM,CAAC;QACpB,mEAAmE;QACnE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;QACpB,qDAAqD;QACrD,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,8GAA8G;IAC9G,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,uFAAuF;IACvF,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC,GACD;IACE;;;;OAIG;IACH,IAAI,EAAE,kBAAkB,CAAC;IACzB,oCAAoC;IACpC,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;CAC7C,GACD;IACE;;;;OAIG;IACH,IAAI,EAAE,kBAAkB,CAAC;IACzB,+CAA+C;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,OAAO,EAAE,MAAM,CAAC;CACjB,GACD;IACE;;;;OAIG;IACH,IAAI,EAAE,gBAAgB,CAAC;IACvB,yDAAyD;IACzD,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qFAAqF;IACrF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4DAA4D;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,mBAAmB,CAAC,EAAE,+BAA+B,EAAE,CAAC;IACxD,mFAAmF;IACnF,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,qFAAqF;IACrF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mGAAmG;IACnG,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oCAAoC;IACpC,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACD;IACE;;;;OAIG;IACH,IAAI,EAAE,oBAAoB,CAAC;IAC3B,8BAA8B;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;IACpC;;;OAGG;IACH,MAAM,CAAC,EAAE,iBAAiB,GAAG,mBAAmB,GAAG,mBAAmB,GAAG,eAAe,GAAG,WAAW,GAAG,QAAQ,GAAG,iBAAiB,CAAC;IACtI,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACzC,GACD;IACE;;;OAGG;IACH,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB,GACD;IACE;;;;;;;OAOG;IACH,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,oBAAoB,GAAG,mBAAmB,GAAG,sBAAsB,GAAG,sBAAsB,CAAC;IACpG,OAAO,EAAE,MAAM,CAAC;CACjB,GACD;IACE;;;;OAIG;IACH,IAAI,EAAE,wBAAwB,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,2DAA2D;QAC3D,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,4CAA4C;QAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC,CAAC;IACH,mEAAmE;IACnE,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,GACD;IACE,sDAAsD;IACtD,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,GACD;IACE,qEAAqE;IACrE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,SAAS,CAAC;CAC/B,GACD;IACE,sEAAsE;IACtE,IAAI,EAAE,iCAAiC,CAAC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,KAAK,CAAC;QACrB,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;QACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;KACjC,CAAC,CAAC;CACJ,GACD;IACE,kFAAkF;IAClF,IAAI,EAAE,kCAAkC,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,KAAK,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,KAAK,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ,GACD;IACE,uDAAuD;IACvD,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,GACD;IACE;;;;OAIG;IACH,IAAI,EAAE,yBAAyB,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAClD,UAAU,EAAE,aAAa,GAAG,YAAY,CAAC;IACzC,SAAS,EAAE,MAAM,CAAC;CACnB,GAID;IACE;;;;OAIG;IACH,IAAI,EAAE,gBAAgB,CAAC;IACvB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACtC,mCAAmC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACD;IACE;;;;OAIG;IACH,IAAI,EAAE,mBAAmB,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,wFAAwF;IACxF,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gGAAgG;IAChG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACD;IACE;;;;;OAKG;IACH,IAAI,EAAE,cAAc,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;IACtC,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;QAC5C,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,2CAA2C;QAC3C,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,2CAA2C;QAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,EAAE;YACL,WAAW,EAAE,MAAM,CAAC;YACpB,YAAY,EAAE,MAAM,CAAC;YACrB,eAAe,EAAE,MAAM,CAAC;YACxB,gBAAgB,EAAE,MAAM,CAAC;YACzB,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;QACF,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC,CAAC;IACH,+DAA+D;IAC/D,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;QACxB,gBAAgB,EAAE,MAAM,CAAC;QACzB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH,GACD;IACE;;;;;OAKG;IACH,IAAI,EAAE,wBAAwB,CAAC;IAC/B,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,4CAA4C;IAC5C,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACpD,uDAAuD;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kEAAkE;IAClE,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yDAAyD;IACzD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GACD;IACE;;;;;OAKG;IACH,IAAI,EAAE,eAAe,CAAC;IACtB,KAAK,EAAE,KAAK,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;QAC3B,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/server/wire.ts"],"names":[],"mappings":"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"}
|