nomoreide 0.1.92 → 0.1.94
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/README.md +22 -1
- package/dist/cli/commands.d.ts +2 -0
- package/dist/cli/commands.js +32 -3
- package/dist/cli/commands.js.map +1 -1
- package/dist/core/agent-env-writers.d.ts +19 -0
- package/dist/core/agent-env-writers.js +220 -8
- package/dist/core/agent-env-writers.js.map +1 -1
- package/dist/core/agent-profiles/apply.d.ts +16 -0
- package/dist/core/agent-profiles/apply.js +24 -11
- package/dist/core/agent-profiles/apply.js.map +1 -1
- package/dist/core/agent-profiles/builtin.d.ts +8 -0
- package/dist/core/agent-profiles/builtin.js +33 -0
- package/dist/core/agent-profiles/builtin.js.map +1 -0
- package/dist/core/agent-profiles/debug-setup.d.ts +18 -0
- package/dist/core/agent-profiles/debug-setup.js +237 -0
- package/dist/core/agent-profiles/debug-setup.js.map +1 -0
- package/dist/core/agent-profiles/index.d.ts +3 -1
- package/dist/core/agent-profiles/index.js +3 -1
- package/dist/core/agent-profiles/index.js.map +1 -1
- package/dist/core/host-metrics.d.ts +41 -0
- package/dist/core/host-metrics.js +93 -0
- package/dist/core/host-metrics.js.map +1 -0
- package/dist/core/metrics-store.d.ts +28 -1
- package/dist/core/metrics-store.js +58 -3
- package/dist/core/metrics-store.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.js +8 -0
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/services.d.ts +2 -0
- package/dist/mcp/tools/services.js +18 -9
- package/dist/mcp/tools/services.js.map +1 -1
- package/dist/web/client/assets/{code-editor-KPRIkcWr.js → code-editor-C2_ukSan.js} +1 -1
- package/dist/web/client/assets/index-CKHDI1ud.js +242 -0
- package/dist/web/client/assets/index-DVHKZVqv.css +1 -0
- package/dist/web/client/index.html +2 -2
- package/dist/web/routes/metrics-routes.d.ts +1 -1
- package/dist/web/routes/metrics-routes.js +5 -2
- package/dist/web/routes/metrics-routes.js.map +1 -1
- package/dist/web/routes/shell-routes.js +2 -0
- package/dist/web/routes/shell-routes.js.map +1 -1
- package/dist/web/server.js +2 -2
- package/dist/web/server.js.map +1 -1
- package/package.json +3 -1
- package/profiles/nomoreide-debug/profile.json +19 -0
- package/profiles/nomoreide-debug/skills/nomoreide-debug/SKILL.md +38 -0
- package/profiles/nomoreide-debug/skills/nomoreide-debug/agents/openai.yaml +13 -0
- package/profiles/nomoreide-debug/skills/nomoreide-debug/evals/evals.json +23 -0
- package/dist/web/client/assets/index-Czn4YU1U.js +0 -228
- package/dist/web/client/assets/index-DpqkI74n.css +0 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { HostMetricsCollector, } from "./host-metrics.js";
|
|
2
|
+
import { readProcessTree, } from "./process-tree.js";
|
|
2
3
|
/**
|
|
3
4
|
* In-memory CPU/RSS time series for managed services. Polls process trees on a
|
|
4
5
|
* fixed cadence; PIDs that disappear are kept in the buffer so the chart can
|
|
@@ -8,13 +9,21 @@ export class MetricsStore {
|
|
|
8
9
|
manager;
|
|
9
10
|
intervalMs;
|
|
10
11
|
capacity;
|
|
12
|
+
hostCollector;
|
|
13
|
+
processTreeReader;
|
|
14
|
+
now;
|
|
11
15
|
buffers = new Map();
|
|
16
|
+
hostSamples = [];
|
|
12
17
|
timer;
|
|
13
18
|
sampling = false;
|
|
14
19
|
constructor(options) {
|
|
15
20
|
this.manager = options.manager;
|
|
16
21
|
this.intervalMs = options.intervalMs ?? 3000;
|
|
17
22
|
this.capacity = options.capacity ?? 600;
|
|
23
|
+
this.hostCollector =
|
|
24
|
+
options.hostCollector ?? new HostMetricsCollector(options.cwd ?? process.cwd());
|
|
25
|
+
this.processTreeReader = options.processTreeReader ?? readProcessTree;
|
|
26
|
+
this.now = options.now ?? Date.now;
|
|
18
27
|
}
|
|
19
28
|
start() {
|
|
20
29
|
if (this.timer)
|
|
@@ -22,6 +31,7 @@ export class MetricsStore {
|
|
|
22
31
|
this.timer = setInterval(() => void this.sampleOnce(), this.intervalMs);
|
|
23
32
|
if (typeof this.timer.unref === "function")
|
|
24
33
|
this.timer.unref();
|
|
34
|
+
void this.sampleOnce();
|
|
25
35
|
}
|
|
26
36
|
stop() {
|
|
27
37
|
if (this.timer) {
|
|
@@ -38,13 +48,43 @@ export class MetricsStore {
|
|
|
38
48
|
samples: buffer ? [...buffer.samples] : [],
|
|
39
49
|
};
|
|
40
50
|
}
|
|
51
|
+
readActivity() {
|
|
52
|
+
const statuses = this.manager.status().services;
|
|
53
|
+
const services = {};
|
|
54
|
+
const currentHostSample = this.hostSamples.at(-1);
|
|
55
|
+
for (const [name, buffer] of this.buffers) {
|
|
56
|
+
const status = statuses[name];
|
|
57
|
+
if (status?.state !== "running" ||
|
|
58
|
+
!buffer.latest ||
|
|
59
|
+
buffer.startedAt !== status.startedAt) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
services[name] = {
|
|
63
|
+
service: name,
|
|
64
|
+
startedAt: buffer.startedAt,
|
|
65
|
+
sampledAt: buffer.latest.sampledAt,
|
|
66
|
+
cpuPercent: buffer.latest.tree.cpuPercent,
|
|
67
|
+
rssMb: buffer.latest.tree.rssMb,
|
|
68
|
+
processCount: buffer.latest.tree.processCount,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
sampleIntervalMs: this.intervalMs,
|
|
73
|
+
host: {
|
|
74
|
+
current: currentHostSample ? cloneHostSample(currentHostSample) : null,
|
|
75
|
+
samples: this.hostSamples.map(cloneHostSample),
|
|
76
|
+
},
|
|
77
|
+
services,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
41
80
|
async sampleOnce() {
|
|
42
81
|
if (this.sampling)
|
|
43
82
|
return;
|
|
44
83
|
this.sampling = true;
|
|
45
84
|
try {
|
|
46
85
|
const { services } = this.manager.status();
|
|
47
|
-
const now =
|
|
86
|
+
const now = this.now();
|
|
87
|
+
const hostSample = this.hostCollector.sample(now).catch(() => undefined);
|
|
48
88
|
await Promise.all(Object.values(services).map(async (status) => {
|
|
49
89
|
if (status.state !== "running" || !status.pid)
|
|
50
90
|
return;
|
|
@@ -55,8 +95,9 @@ export class MetricsStore {
|
|
|
55
95
|
this.buffers.set(status.name, buffer);
|
|
56
96
|
}
|
|
57
97
|
try {
|
|
58
|
-
const tree = await
|
|
98
|
+
const tree = await this.processTreeReader(status.pid);
|
|
59
99
|
buffer.samples.push({ t: now, cpu: tree.cpuPercent, rss: tree.rssMb });
|
|
100
|
+
buffer.latest = { sampledAt: now, tree };
|
|
60
101
|
if (buffer.samples.length > this.capacity) {
|
|
61
102
|
buffer.samples.splice(0, buffer.samples.length - this.capacity);
|
|
62
103
|
}
|
|
@@ -65,10 +106,24 @@ export class MetricsStore {
|
|
|
65
106
|
// ps may briefly fail right after spawn / during exit — skip this tick.
|
|
66
107
|
}
|
|
67
108
|
}));
|
|
109
|
+
const nextHostSample = await hostSample;
|
|
110
|
+
if (nextHostSample) {
|
|
111
|
+
this.hostSamples.push(nextHostSample);
|
|
112
|
+
if (this.hostSamples.length > this.capacity) {
|
|
113
|
+
this.hostSamples.splice(0, this.hostSamples.length - this.capacity);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
68
116
|
}
|
|
69
117
|
finally {
|
|
70
118
|
this.sampling = false;
|
|
71
119
|
}
|
|
72
120
|
}
|
|
73
121
|
}
|
|
122
|
+
function cloneHostSample(sample) {
|
|
123
|
+
return {
|
|
124
|
+
...sample,
|
|
125
|
+
loadAverage: sample.loadAverage ? [...sample.loadAverage] : null,
|
|
126
|
+
disk: sample.disk ? { ...sample.disk } : null,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
74
129
|
//# sourceMappingURL=metrics-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-store.js","sourceRoot":"","sources":["../../src/core/metrics-store.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"metrics-store.js","sourceRoot":"","sources":["../../src/core/metrics-store.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ import { LogStore } from "../core/log-store.js";
|
|
|
6
6
|
import { ToolCallStore } from "../core/tool-call-store.js";
|
|
7
7
|
import { NOMOREIDE_TOOL_NAMES } from "./tools/index.js";
|
|
8
8
|
export { NOMOREIDE_TOOL_NAMES } from "./tools/index.js";
|
|
9
|
+
export declare const NOMOREIDE_MCP_INSTRUCTIONS: string;
|
|
9
10
|
interface CreateNoMoreIdeMcpServerOptions {
|
|
10
11
|
configPath?: string;
|
|
11
12
|
logDir?: string;
|
package/dist/mcp/server.js
CHANGED
|
@@ -9,6 +9,13 @@ import { LogStore } from "../core/log-store.js";
|
|
|
9
9
|
import { ToolCallStore } from "../core/tool-call-store.js";
|
|
10
10
|
import { NOMOREIDE_TOOL_NAMES, registerNoMoreIdeTools, } from "./tools/index.js";
|
|
11
11
|
export { NOMOREIDE_TOOL_NAMES } from "./tools/index.js";
|
|
12
|
+
export const NOMOREIDE_MCP_INSTRUCTIONS = [
|
|
13
|
+
"Use NoMoreIDE whenever the user asks to run, start, restart, debug, diagnose, or troubleshoot a local development service.",
|
|
14
|
+
"First call nomoreide_list_services and nomoreide_status to identify an equivalent registered service or bundle.",
|
|
15
|
+
"Run registered services through nomoreide_start_service or nomoreide_start_bundle in the shared daemon; do not launch duplicate ad-hoc development processes.",
|
|
16
|
+
"For failures, inspect nomoreide_service_health, nomoreide_read_logs, nomoreide_timeline, and nomoreide_service_context before restarting, then verify health and logs afterward.",
|
|
17
|
+
"If the project is not registered, explain that and use the NoMoreIDE onboarding or registration flow before managing it.",
|
|
18
|
+
].join(" ");
|
|
12
19
|
/**
|
|
13
20
|
* The MCP process is a thin client: service operations go to the shared
|
|
14
21
|
* daemon over HTTP; config, git, db, and agent tooling stay local because
|
|
@@ -32,6 +39,7 @@ export function createNoMoreIdeMcpServer(options = {}) {
|
|
|
32
39
|
const server = new FastMCP({
|
|
33
40
|
name: "NoMoreIDE MCP",
|
|
34
41
|
version: "0.1.0",
|
|
42
|
+
instructions: NOMOREIDE_MCP_INSTRUCTIONS,
|
|
35
43
|
});
|
|
36
44
|
registerNoMoreIdeTools({
|
|
37
45
|
server,
|
package/dist/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAC/E,OAAO,EACL,sBAAsB,GAEvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EACL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { FastMCP } from "fastmcp";
|
|
2
|
+
import type { NoMoreIdeConfig } from "../../core/types.js";
|
|
2
3
|
import { type ToolContext } from "./context.js";
|
|
3
4
|
export declare const SERVICE_TOOL_NAMES: readonly ["nomoreide_list_services", "nomoreide_register_service", "nomoreide_start_service", "nomoreide_stop_service", "nomoreide_restart_service", "nomoreide_read_logs", "nomoreide_register_bundle", "nomoreide_start_bundle", "nomoreide_stop_bundle", "nomoreide_status", "nomoreide_service_context", "nomoreide_service_health", "nomoreide_timeline"];
|
|
5
|
+
export declare function buildServiceDiscovery(config: Pick<NoMoreIdeConfig, "services" | "bundles">): Record<string, unknown>;
|
|
4
6
|
/**
|
|
5
7
|
* Runtime tools (start/stop/logs/status/…) call the machine-global daemon
|
|
6
8
|
* over HTTP so every session shares the same services; registration tools
|
|
@@ -23,6 +23,15 @@ const serviceNameSchema = z.object({
|
|
|
23
23
|
const bundleNameSchema = z.object({
|
|
24
24
|
name: z.string().min(1).describe("Registered bundle name."),
|
|
25
25
|
});
|
|
26
|
+
export function buildServiceDiscovery(config) {
|
|
27
|
+
return {
|
|
28
|
+
services: config.services.map(({ env, ...service }) => ({
|
|
29
|
+
...service,
|
|
30
|
+
...(env ? { envKeys: Object.keys(env).sort() } : {}),
|
|
31
|
+
})),
|
|
32
|
+
bundles: config.bundles,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
26
35
|
/**
|
|
27
36
|
* Runtime tools (start/stop/logs/status/…) call the machine-global daemon
|
|
28
37
|
* over HTTP so every session shares the same services; registration tools
|
|
@@ -32,8 +41,8 @@ export function registerServiceTools(server, ctx) {
|
|
|
32
41
|
const { configStore, daemon } = ctx;
|
|
33
42
|
server.addTool({
|
|
34
43
|
name: "nomoreide_list_services",
|
|
35
|
-
description: "
|
|
36
|
-
execute: async () => stringify(await configStore.load()),
|
|
44
|
+
description: "Discover registered NoMoreIDE services and bundles before running, starting, debugging, diagnosing, or troubleshooting a development project.",
|
|
45
|
+
execute: async () => stringify(buildServiceDiscovery(await configStore.load())),
|
|
37
46
|
});
|
|
38
47
|
server.addTool({
|
|
39
48
|
name: "nomoreide_register_service",
|
|
@@ -54,7 +63,7 @@ export function registerServiceTools(server, ctx) {
|
|
|
54
63
|
});
|
|
55
64
|
server.addTool({
|
|
56
65
|
name: "nomoreide_start_service",
|
|
57
|
-
description: "
|
|
66
|
+
description: "Run or start a registered development service in the shared NoMoreIDE daemon so it survives this session; prefer this over launching a duplicate ad-hoc process.",
|
|
58
67
|
parameters: serviceNameSchema,
|
|
59
68
|
execute: async ({ name }) => stringify(await (await daemon.client()).startService(name)),
|
|
60
69
|
});
|
|
@@ -66,13 +75,13 @@ export function registerServiceTools(server, ctx) {
|
|
|
66
75
|
});
|
|
67
76
|
server.addTool({
|
|
68
77
|
name: "nomoreide_restart_service",
|
|
69
|
-
description: "Restart a registered service.",
|
|
78
|
+
description: "Restart a registered service through the shared daemon while debugging or recovering an unhealthy service.",
|
|
70
79
|
parameters: serviceNameSchema,
|
|
71
80
|
execute: async ({ name }) => stringify(await (await daemon.client()).restartService(name)),
|
|
72
81
|
});
|
|
73
82
|
server.addTool({
|
|
74
83
|
name: "nomoreide_read_logs",
|
|
75
|
-
description: "
|
|
84
|
+
description: "Inspect recent logs while debugging or troubleshooting a registered service, regardless of which session started it in the shared daemon.",
|
|
76
85
|
parameters: z.object({
|
|
77
86
|
name: z.string().min(1),
|
|
78
87
|
limit: z.number().int().positive().max(1000).optional(),
|
|
@@ -90,7 +99,7 @@ export function registerServiceTools(server, ctx) {
|
|
|
90
99
|
});
|
|
91
100
|
server.addTool({
|
|
92
101
|
name: "nomoreide_start_bundle",
|
|
93
|
-
description: "
|
|
102
|
+
description: "Run or start every service in a registered development bundle through the shared NoMoreIDE daemon.",
|
|
94
103
|
parameters: bundleNameSchema,
|
|
95
104
|
execute: async ({ name }) => stringify(await (await daemon.client()).startBundle(name)),
|
|
96
105
|
});
|
|
@@ -102,12 +111,12 @@ export function registerServiceTools(server, ctx) {
|
|
|
102
111
|
});
|
|
103
112
|
server.addTool({
|
|
104
113
|
name: "nomoreide_status",
|
|
105
|
-
description: "
|
|
114
|
+
description: "Inspect current shared runtime status before running, debugging, restarting, or troubleshooting services.",
|
|
106
115
|
execute: async () => stringify(await (await daemon.client()).status()),
|
|
107
116
|
});
|
|
108
117
|
server.addTool({
|
|
109
118
|
name: "nomoreide_service_context",
|
|
110
|
-
description: "Build a
|
|
119
|
+
description: "Build a debugging context packet with the service definition, runtime status, health summary, recent logs, and timeline for a registered service.",
|
|
111
120
|
parameters: serviceNameSchema,
|
|
112
121
|
execute: async ({ name }) => {
|
|
113
122
|
const config = await configStore.load();
|
|
@@ -141,7 +150,7 @@ export function registerServiceTools(server, ctx) {
|
|
|
141
150
|
});
|
|
142
151
|
server.addTool({
|
|
143
152
|
name: "nomoreide_service_health",
|
|
144
|
-
description: "
|
|
153
|
+
description: "Diagnose one or all registered services with computed health summaries before restart or repair decisions.",
|
|
145
154
|
parameters: z.object({
|
|
146
155
|
service: z.string().min(1).optional(),
|
|
147
156
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/mcp/tools/services.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/mcp/tools/services.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAoB,MAAM,cAAc,CAAC;AAE3D,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,yBAAyB;IACzB,4BAA4B;IAC5B,yBAAyB;IACzB,wBAAwB;IACxB,2BAA2B;IAC3B,qBAAqB;IACrB,2BAA2B;IAC3B,wBAAwB;IACxB,uBAAuB;IACvB,kBAAkB;IAClB,2BAA2B;IAC3B,0BAA0B;IAC1B,oBAAoB;CACZ,CAAC;AAEX,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAC7D,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CAC5D,CAAC,CAAC;AAEH,MAAM,UAAU,qBAAqB,CACnC,MAAqD;IAErD,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACtD,GAAG,OAAO;YACV,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACrD,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,CAAC,OAAO;KACxB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAe,EACf,GAAgB;IAEhB,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEpC,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,+IAA+I;QACjJ,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,qBAAqB,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;KAChF,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,4BAA4B;QAClC,WAAW,EACT,4MAA4M;QAC9M,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE;YAC3D,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YACrC,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YACjC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;YACvD,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;YACpC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;YAClC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YACzC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YAC5C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;SACnC,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,WAAW,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KAC5E,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EACT,kKAAkK;QACpK,UAAU,EAAE,iBAAiB;QAC7B,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAC1B,SAAS,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KAC9D,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,mCAAmC;QAChD,UAAU,EAAE,iBAAiB;QAC7B,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAC1B,SAAS,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KAC7D,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,4GAA4G;QAC9G,UAAU,EAAE,iBAAiB;QAC7B,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAC1B,SAAS,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;KAChE,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,2IAA2I;QAC7I,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;SACxD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CACjC,SAAS,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC;KACpE,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,2CAA2C;QACxD,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YACvB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SAC5C,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;KAC3E,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,oGAAoG;QACtG,UAAU,EAAE,gBAAgB;QAC5B,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAC1B,SAAS,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KAC7D,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EAAE,4CAA4C;QACzD,UAAU,EAAE,gBAAgB;QAC5B,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAC1B,SAAS,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KAC5D,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,kBAAkB;QACxB,WAAW,EACT,2GAA2G;QAC7G,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;KACvE,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,2BAA2B;QACjC,WAAW,EACT,mJAAmJ;QACrJ,UAAU,EAAE,iBAAiB;QAC7B,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;YAC1B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YAC5E,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,sBAAsB,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACrC,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACxD,MAAM,CAAC,MAAM,EAAE;gBACf,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBACrB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;aACrB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC;YAC1E,MAAM,MAAM,GAAG,oBAAoB,CAAC;gBAClC,OAAO,EAAE,UAAU;gBACnB,MAAM;gBACN,IAAI;gBACJ,KAAK,EAAE,EAAE;gBACT,QAAQ;aACT,CAAC,CAAC;YACH,OAAO,wBAAwB,CAAC;gBAC9B,OAAO,EAAE,UAAU;gBACnB,MAAM;gBACN,aAAa,EAAE,MAAM,CAAC,OAAO;gBAC7B,UAAU,EAAE,IAAI;gBAChB,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,0BAA0B;QAChC,WAAW,EACT,4GAA4G;QAC9G,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;SACtC,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,WAAW,GAAG,OAAO;gBACzB,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC;gBACzD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;YACpB,IAAI,OAAO,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxC,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,sBAAsB,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;YACrC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC5C,MAAM,CAAC,MAAM,EAAE;gBACf,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;aACrB,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CACnC,oBAAoB,CAAC;gBACnB,OAAO,EAAE,UAAU;gBACnB,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;gBACzC,IAAI,EAAE,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC5C,KAAK,EAAE,EAAE;gBACT,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,UAAU,CAAC,IAAI,CAAC;aACxE,CAAC,CACH,CACF,CAAC;YACF,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACjD,CAAC;KACF,CAAC,CAAC;IAEH,MAAM,CAAC,OAAO,CAAC;QACb,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,gFAAgF;QAClF,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;YACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;SACxD,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;YACpC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YAC3D,MAAM,QAAQ,GAAG,OAAO;gBACtB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC;gBACrD,CAAC,CAAC,MAAM,CAAC;YACX,OAAO,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3C,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|