@aexol/spectral 0.9.167 → 0.9.170

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.
Files changed (43) hide show
  1. package/dist/agent/agents.d.ts.map +1 -1
  2. package/dist/agent/agents.js +30 -42
  3. package/dist/agent/index.d.ts.map +1 -1
  4. package/dist/agent/index.js +7 -0
  5. package/dist/cli.js +6 -0
  6. package/dist/commands/ports.d.ts +13 -0
  7. package/dist/commands/ports.d.ts.map +1 -0
  8. package/dist/commands/ports.js +110 -0
  9. package/dist/extensions/ports/index.d.ts +19 -0
  10. package/dist/extensions/ports/index.d.ts.map +1 -0
  11. package/dist/extensions/ports/index.js +154 -0
  12. package/dist/extensions/ports/platform.d.ts +39 -0
  13. package/dist/extensions/ports/platform.d.ts.map +1 -0
  14. package/dist/extensions/ports/platform.js +255 -0
  15. package/dist/generated/graphql-client.d.ts +39 -0
  16. package/dist/generated/graphql-client.d.ts.map +1 -0
  17. package/dist/generated/graphql-client.js +74 -0
  18. package/dist/generated/scalars.d.ts +24 -0
  19. package/dist/generated/scalars.d.ts.map +1 -0
  20. package/dist/generated/scalars.js +30 -0
  21. package/dist/generated/zeus/const.d.ts +8 -0
  22. package/dist/generated/zeus/const.d.ts.map +1 -0
  23. package/dist/generated/zeus/const.js +1626 -0
  24. package/dist/generated/zeus/index.d.ts +8570 -0
  25. package/dist/generated/zeus/index.d.ts.map +1 -0
  26. package/dist/generated/zeus/index.js +796 -0
  27. package/dist/mcp/ui-stream-types.d.ts +2 -2
  28. package/dist/memory/hooks/compaction-trigger.js +1 -1
  29. package/dist/relay/models-fetch.d.ts +4 -5
  30. package/dist/relay/models-fetch.d.ts.map +1 -1
  31. package/dist/relay/models-fetch.js +50 -79
  32. package/dist/sdk/agent-core/agent-loop.js +1 -1
  33. package/dist/sdk/coding-agent/core/agent-session.js +1 -1
  34. package/dist/sdk/coding-agent/core/extensions/native-extensions.d.ts.map +1 -1
  35. package/dist/sdk/coding-agent/core/extensions/native-extensions.js +11 -0
  36. package/dist/server/agent-bridge.d.ts +8 -6
  37. package/dist/server/agent-bridge.d.ts.map +1 -1
  38. package/dist/server/agent-bridge.js +28 -18
  39. package/dist/server/error-humanizer.d.ts.map +1 -1
  40. package/dist/server/error-humanizer.js +1 -1
  41. package/dist/server/wire.d.ts +2 -0
  42. package/dist/server/wire.d.ts.map +1 -1
  43. package/package.json +1 -1
@@ -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
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Thin wrapper over the generated Zeus client for the CLI's backend
3
+ * GraphQL calls.
4
+ *
5
+ * Zeus is generated from `backend/schema.graphql` into
6
+ * `./zeus/index.ts` (see `backend/axolotl.json`). The generated files are
7
+ * codegen artifacts — never hand-edit them. This module centralizes auth
8
+ * headers (machine JWT + optional team id) so call sites never rebuild the
9
+ * `Authorization` / `X-Team-Id` contract by hand.
10
+ */
11
+ import { Chain, type GraphQLResponse } from "./zeus/index.js";
12
+ import { scalars } from "./scalars.js";
13
+ export type { GraphQLResponse };
14
+ /** Create an authenticated backend GraphQL client (Zeus `Chain`). */
15
+ export declare function createBackendClient(opts: {
16
+ backendUrl: string;
17
+ machineJwt: string;
18
+ teamId?: string;
19
+ }): ReturnType<typeof Chain>;
20
+ /** Shared scalar codecs (ID / DateTime / Long). */
21
+ export { scalars };
22
+ /** True when an error message looks like an auth rejection. */
23
+ export declare function isAuthErrorMessage(message: string): boolean;
24
+ /**
25
+ * The error message from a caught Zeus `GraphQLError`, or the raw error
26
+ * string when the thrown value is not a GraphQL response error.
27
+ */
28
+ export declare function graphqlErrorMessage(err: unknown): string;
29
+ /**
30
+ * Classify a caught Zeus error as an auth rejection. Zeus throws
31
+ * `GraphQLError` for HTTP 200 responses with a GraphQL `errors` array, but
32
+ * non-2xx HTTP responses (e.g. 401/403) are rejected with the parsed JSON
33
+ * body object. Handle both without losing the original message.
34
+ */
35
+ export declare function classifyGraphqlError(err: unknown): {
36
+ authRejected: boolean;
37
+ message: string;
38
+ };
39
+ //# sourceMappingURL=graphql-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-client.d.ts","sourceRoot":"","sources":["../../src/generated/graphql-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,KAAK,EAEL,KAAK,eAAe,EAErB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,qEAAqE;AACrE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAY3B;AAED,mDAAmD;AACnD,OAAO,EAAE,OAAO,EAAE,CAAC;AAEnB,+DAA+D;AAC/D,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAI3D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAQxD;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG;IAClD,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB,CA4BA"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Thin wrapper over the generated Zeus client for the CLI's backend
3
+ * GraphQL calls.
4
+ *
5
+ * Zeus is generated from `backend/schema.graphql` into
6
+ * `./zeus/index.ts` (see `backend/axolotl.json`). The generated files are
7
+ * codegen artifacts — never hand-edit them. This module centralizes auth
8
+ * headers (machine JWT + optional team id) so call sites never rebuild the
9
+ * `Authorization` / `X-Team-Id` contract by hand.
10
+ */
11
+ import { Chain, GraphQLError, } from "./zeus/index.js";
12
+ import { scalars } from "./scalars.js";
13
+ /** Create an authenticated backend GraphQL client (Zeus `Chain`). */
14
+ export function createBackendClient(opts) {
15
+ const headers = {
16
+ "Content-Type": "application/json",
17
+ Authorization: `Bearer ${opts.machineJwt}`,
18
+ };
19
+ if (opts.teamId)
20
+ headers["X-Team-Id"] = opts.teamId;
21
+ const endpoint = [
22
+ `${opts.backendUrl.replace(/\/$/, "")}/graphql`,
23
+ { headers },
24
+ ];
25
+ return Chain(...endpoint);
26
+ }
27
+ /** Shared scalar codecs (ID / DateTime / Long). */
28
+ export { scalars };
29
+ /** True when an error message looks like an auth rejection. */
30
+ export function isAuthErrorMessage(message) {
31
+ return /authentication required|not authorized|unauthor|forbidden|invalid token|token expired/i.test(message);
32
+ }
33
+ /**
34
+ * The error message from a caught Zeus `GraphQLError`, or the raw error
35
+ * string when the thrown value is not a GraphQL response error.
36
+ */
37
+ export function graphqlErrorMessage(err) {
38
+ if (err instanceof GraphQLError) {
39
+ return (err.response.errors?.map((e) => e.message).join("; ") ?? "GraphQL error");
40
+ }
41
+ if (err instanceof Error)
42
+ return err.message;
43
+ return String(err);
44
+ }
45
+ /**
46
+ * Classify a caught Zeus error as an auth rejection. Zeus throws
47
+ * `GraphQLError` for HTTP 200 responses with a GraphQL `errors` array, but
48
+ * non-2xx HTTP responses (e.g. 401/403) are rejected with the parsed JSON
49
+ * body object. Handle both without losing the original message.
50
+ */
51
+ export function classifyGraphqlError(err) {
52
+ if (err instanceof GraphQLError) {
53
+ const message = graphqlErrorMessage(err);
54
+ return { authRejected: isAuthErrorMessage(message), message };
55
+ }
56
+ let message = "Unknown error";
57
+ if (err instanceof Error) {
58
+ message = err.message;
59
+ }
60
+ else if (typeof err === "string") {
61
+ message = err;
62
+ }
63
+ else if (err && typeof err === "object") {
64
+ const body = err;
65
+ if (Array.isArray(body.errors) && body.errors.length > 0) {
66
+ message = body.errors.map((e) => e.message ?? "unknown").join("; ");
67
+ }
68
+ if (typeof body.status === "number" &&
69
+ (body.status === 401 || body.status === 403)) {
70
+ return { authRejected: true, message };
71
+ }
72
+ }
73
+ return { authRejected: isAuthErrorMessage(message), message };
74
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Scalar codecs for the generated Zeus GraphQL client.
3
+ *
4
+ * Mirrors `landing/lib/scalars.ts`. The CLI only issues `query`/`mutation`
5
+ * operations against the backend's `availableAgentModels` and `agents`
6
+ * fields, neither of which carries a custom scalar today. The codecs are
7
+ * still defined here so any future CLI-side query that does touch `ID`,
8
+ * `DateTime`, `Long`, or `JSON` decodes consistently with the landing app.
9
+ */
10
+ export declare const scalars: {
11
+ ID: {
12
+ decode: (e: unknown) => string;
13
+ encode: (e: unknown) => string;
14
+ };
15
+ DateTime: {
16
+ decode: (e: unknown) => Date;
17
+ encode: (e: unknown) => string;
18
+ };
19
+ Long: {
20
+ decode: (e: unknown) => number;
21
+ encode: (e: unknown) => string;
22
+ };
23
+ };
24
+ //# sourceMappingURL=scalars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scalars.d.ts","sourceRoot":"","sources":["../../src/generated/scalars.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,eAAO,MAAM,OAAO;;oBAEJ,OAAO,KAAU,MAAM;oBACvB,OAAO;;;oBAGP,OAAO;oBACP,OAAO;;;oBAYP,OAAO,KAAU,MAAM;oBACvB,OAAO;;CAErB,CAAC"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Scalar codecs for the generated Zeus GraphQL client.
3
+ *
4
+ * Mirrors `landing/lib/scalars.ts`. The CLI only issues `query`/`mutation`
5
+ * operations against the backend's `availableAgentModels` and `agents`
6
+ * fields, neither of which carries a custom scalar today. The codecs are
7
+ * still defined here so any future CLI-side query that does touch `ID`,
8
+ * `DateTime`, `Long`, or `JSON` decodes consistently with the landing app.
9
+ */
10
+ import { ZeusScalars } from "./zeus/index.js";
11
+ export const scalars = ZeusScalars({
12
+ ID: {
13
+ decode: (e) => e,
14
+ encode: (e) => JSON.stringify(e),
15
+ },
16
+ DateTime: {
17
+ decode: (e) => new Date(e),
18
+ encode: (e) => {
19
+ const date = e instanceof Date ? e : typeof e === "string" ? new Date(e) : null;
20
+ if (!date || Number.isNaN(date.getTime())) {
21
+ throw new TypeError(`DateTime scalar cannot encode an invalid date value: ${String(e)}`);
22
+ }
23
+ return JSON.stringify(date.toISOString());
24
+ },
25
+ },
26
+ Long: {
27
+ decode: (e) => e,
28
+ encode: (e) => JSON.stringify(e),
29
+ },
30
+ });
@@ -0,0 +1,8 @@
1
+ export declare const AllTypesProps: Record<string, any>;
2
+ export declare const ReturnTypes: Record<string, any>;
3
+ export declare const Ops: {
4
+ query: "Query";
5
+ mutation: "Mutation";
6
+ subscription: "Subscription";
7
+ };
8
+ //# sourceMappingURL=const.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../../src/generated/zeus/const.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAC,GAAG,CA8xB5C,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAC,GAAG,CA8lC1C,CAAA;AAED,eAAO,MAAM,GAAG;;;;CAIf,CAAA"}