llm-agent-cli 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/agent.d.ts +112 -0
  2. package/dist/agent.d.ts.map +1 -0
  3. package/dist/agent.js +730 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/audit.d.ts +24 -0
  6. package/dist/audit.d.ts.map +1 -0
  7. package/dist/audit.js +94 -0
  8. package/dist/audit.js.map +1 -0
  9. package/dist/auth.d.ts +36 -0
  10. package/dist/auth.d.ts.map +1 -0
  11. package/dist/auth.js +236 -0
  12. package/dist/auth.js.map +1 -0
  13. package/dist/config.d.ts +35 -0
  14. package/dist/config.d.ts.map +1 -0
  15. package/dist/config.js +92 -0
  16. package/dist/config.js.map +1 -0
  17. package/dist/context.d.ts +48 -0
  18. package/dist/context.d.ts.map +1 -0
  19. package/dist/context.js +94 -0
  20. package/dist/context.js.map +1 -0
  21. package/dist/diff.d.ts +27 -0
  22. package/dist/diff.d.ts.map +1 -0
  23. package/dist/diff.js +174 -0
  24. package/dist/diff.js.map +1 -0
  25. package/dist/index.d.ts +3 -0
  26. package/dist/index.d.ts.map +1 -0
  27. package/dist/index.js +905 -0
  28. package/dist/index.js.map +1 -0
  29. package/dist/input.d.ts +13 -0
  30. package/dist/input.d.ts.map +1 -0
  31. package/dist/input.js +88 -0
  32. package/dist/input.js.map +1 -0
  33. package/dist/memory.d.ts +32 -0
  34. package/dist/memory.d.ts.map +1 -0
  35. package/dist/memory.js +103 -0
  36. package/dist/memory.js.map +1 -0
  37. package/dist/preprocessor.d.ts +12 -0
  38. package/dist/preprocessor.d.ts.map +1 -0
  39. package/dist/preprocessor.js +138 -0
  40. package/dist/preprocessor.js.map +1 -0
  41. package/dist/project.d.ts +10 -0
  42. package/dist/project.d.ts.map +1 -0
  43. package/dist/project.js +145 -0
  44. package/dist/project.js.map +1 -0
  45. package/dist/renderer.d.ts +2 -0
  46. package/dist/renderer.d.ts.map +1 -0
  47. package/dist/renderer.js +31 -0
  48. package/dist/renderer.js.map +1 -0
  49. package/dist/session.d.ts +36 -0
  50. package/dist/session.d.ts.map +1 -0
  51. package/dist/session.js +78 -0
  52. package/dist/session.js.map +1 -0
  53. package/dist/tools/filesystem.d.ts +138 -0
  54. package/dist/tools/filesystem.d.ts.map +1 -0
  55. package/dist/tools/filesystem.js +539 -0
  56. package/dist/tools/filesystem.js.map +1 -0
  57. package/dist/tools/git.d.ts +60 -0
  58. package/dist/tools/git.d.ts.map +1 -0
  59. package/dist/tools/git.js +188 -0
  60. package/dist/tools/git.js.map +1 -0
  61. package/dist/tools/index.d.ts +386 -0
  62. package/dist/tools/index.d.ts.map +1 -0
  63. package/dist/tools/index.js +142 -0
  64. package/dist/tools/index.js.map +1 -0
  65. package/dist/tools/linter.d.ts +44 -0
  66. package/dist/tools/linter.d.ts.map +1 -0
  67. package/dist/tools/linter.js +426 -0
  68. package/dist/tools/linter.js.map +1 -0
  69. package/dist/tools/network.d.ts +17 -0
  70. package/dist/tools/network.d.ts.map +1 -0
  71. package/dist/tools/network.js +121 -0
  72. package/dist/tools/network.js.map +1 -0
  73. package/dist/tools/search.d.ts +33 -0
  74. package/dist/tools/search.d.ts.map +1 -0
  75. package/dist/tools/search.js +263 -0
  76. package/dist/tools/search.js.map +1 -0
  77. package/dist/tools/security.d.ts +18 -0
  78. package/dist/tools/security.d.ts.map +1 -0
  79. package/dist/tools/security.js +242 -0
  80. package/dist/tools/security.js.map +1 -0
  81. package/dist/tools/shell.d.ts +14 -0
  82. package/dist/tools/shell.d.ts.map +1 -0
  83. package/dist/tools/shell.js +68 -0
  84. package/dist/tools/shell.js.map +1 -0
  85. package/dist/tools/types.d.ts +5 -0
  86. package/dist/tools/types.d.ts.map +1 -0
  87. package/dist/tools/types.js +2 -0
  88. package/dist/tools/types.js.map +1 -0
  89. package/package.json +59 -0
@@ -0,0 +1,17 @@
1
+ import { z } from "zod";
2
+ import type { ToolExecutionContext } from "./types.js";
3
+ export declare const FetchUrlSchema: z.ZodObject<{
4
+ url: z.ZodString;
5
+ max_bytes: z.ZodDefault<z.ZodNumber>;
6
+ timeout_ms: z.ZodDefault<z.ZodNumber>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ url: string;
9
+ max_bytes: number;
10
+ timeout_ms: number;
11
+ }, {
12
+ url: string;
13
+ max_bytes?: number | undefined;
14
+ timeout_ms?: number | undefined;
15
+ }>;
16
+ export declare function fetch_url(args: z.infer<typeof FetchUrlSchema>, context: ToolExecutionContext): Promise<string>;
17
+ //# sourceMappingURL=network.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/tools/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEvD,eAAO,MAAM,cAAc;;;;;;;;;;;;EAgBzB,CAAC;AA+DH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,EACpC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,MAAM,CAAC,CA4DjB"}
@@ -0,0 +1,121 @@
1
+ import { z } from "zod";
2
+ export const FetchUrlSchema = z.object({
3
+ url: z.string().url().describe("HTTP or HTTPS URL to fetch"),
4
+ max_bytes: z
5
+ .number()
6
+ .int()
7
+ .positive()
8
+ .max(1_000_000)
9
+ .default(250_000)
10
+ .describe("Maximum response bytes to read"),
11
+ timeout_ms: z
12
+ .number()
13
+ .int()
14
+ .positive()
15
+ .max(30_000)
16
+ .default(10_000)
17
+ .describe("Request timeout in milliseconds"),
18
+ });
19
+ function stripHtmlTags(html) {
20
+ return html
21
+ .replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, "")
22
+ .replace(/<style\b[^<]*(?:(?!<\/style>)<[^<]*)*<\/style>/gi, "")
23
+ .replace(/<[^>]+>/g, " ")
24
+ .replace(/\s+/g, " ")
25
+ .trim();
26
+ }
27
+ async function readTextWithLimit(response, maxBytes, signal) {
28
+ if (!response.body) {
29
+ const fullText = await response.text();
30
+ if (fullText.length <= maxBytes) {
31
+ return { text: fullText, truncated: false };
32
+ }
33
+ return { text: fullText.slice(0, maxBytes), truncated: true };
34
+ }
35
+ const reader = response.body.getReader();
36
+ const decoder = new TextDecoder();
37
+ let bytesRead = 0;
38
+ let text = "";
39
+ let truncated = false;
40
+ try {
41
+ while (true) {
42
+ if (signal?.aborted) {
43
+ throw new Error("Fetch aborted by user");
44
+ }
45
+ const { done, value } = await reader.read();
46
+ if (done)
47
+ break;
48
+ if (!value)
49
+ continue;
50
+ bytesRead += value.byteLength;
51
+ if (bytesRead > maxBytes) {
52
+ const overflow = bytesRead - maxBytes;
53
+ const keepBytes = value.byteLength - overflow;
54
+ if (keepBytes > 0) {
55
+ text += decoder.decode(value.slice(0, keepBytes), { stream: true });
56
+ }
57
+ truncated = true;
58
+ await reader.cancel();
59
+ break;
60
+ }
61
+ text += decoder.decode(value, { stream: true });
62
+ }
63
+ text += decoder.decode();
64
+ }
65
+ finally {
66
+ reader.releaseLock();
67
+ }
68
+ return { text, truncated };
69
+ }
70
+ export async function fetch_url(args, context) {
71
+ const parsed = FetchUrlSchema.parse(args);
72
+ const url = new URL(parsed.url);
73
+ if (url.protocol !== "http:" && url.protocol !== "https:") {
74
+ return "Error fetching URL: only http and https protocols are supported";
75
+ }
76
+ const controller = new AbortController();
77
+ const timeout = setTimeout(() => controller.abort(), parsed.timeout_ms);
78
+ if (context.abortSignal) {
79
+ context.abortSignal.addEventListener("abort", () => controller.abort(), {
80
+ once: true,
81
+ });
82
+ }
83
+ try {
84
+ const response = await fetch(parsed.url, {
85
+ method: "GET",
86
+ signal: controller.signal,
87
+ headers: {
88
+ "User-Agent": "llm-router-cli-agent/1.0",
89
+ Accept: "text/plain, text/markdown, text/html;q=0.9, */*;q=0.1",
90
+ },
91
+ });
92
+ if (!response.ok) {
93
+ return `Error fetching URL: HTTP ${response.status} ${response.statusText}`;
94
+ }
95
+ const contentType = response.headers.get("content-type") ?? "unknown";
96
+ const { text, truncated } = await readTextWithLimit(response, parsed.max_bytes, context.abortSignal);
97
+ const normalized = contentType.includes("text/html")
98
+ ? stripHtmlTags(text)
99
+ : text;
100
+ const note = truncated
101
+ ? `\n\n[Content truncated to ${parsed.max_bytes} bytes]`
102
+ : "";
103
+ return [
104
+ `URL: ${parsed.url}`,
105
+ `Content-Type: ${contentType}`,
106
+ "",
107
+ normalized,
108
+ note,
109
+ ]
110
+ .join("\n")
111
+ .trimEnd();
112
+ }
113
+ catch (err) {
114
+ const msg = err instanceof Error ? err.message : String(err);
115
+ return `Error fetching URL: ${msg}`;
116
+ }
117
+ finally {
118
+ clearTimeout(timeout);
119
+ }
120
+ }
121
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/tools/network.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { z } from "zod";
2
+ export declare const SearchFilesSchema: z.ZodObject<{
3
+ pattern: z.ZodString;
4
+ directory: z.ZodOptional<z.ZodString>;
5
+ case_sensitive: z.ZodDefault<z.ZodBoolean>;
6
+ max_results: z.ZodDefault<z.ZodNumber>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ pattern: string;
9
+ case_sensitive: boolean;
10
+ max_results: number;
11
+ directory?: string | undefined;
12
+ }, {
13
+ pattern: string;
14
+ directory?: string | undefined;
15
+ case_sensitive?: boolean | undefined;
16
+ max_results?: number | undefined;
17
+ }>;
18
+ export declare const FindFilesSchema: z.ZodObject<{
19
+ glob_pattern: z.ZodString;
20
+ directory: z.ZodOptional<z.ZodString>;
21
+ max_results: z.ZodDefault<z.ZodNumber>;
22
+ }, "strip", z.ZodTypeAny, {
23
+ max_results: number;
24
+ glob_pattern: string;
25
+ directory?: string | undefined;
26
+ }, {
27
+ glob_pattern: string;
28
+ directory?: string | undefined;
29
+ max_results?: number | undefined;
30
+ }>;
31
+ export declare function find_files(args: z.infer<typeof FindFilesSchema>): Promise<string>;
32
+ export declare function search_files(args: z.infer<typeof SearchFilesSchema>): Promise<string>;
33
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;EAiB5B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;EAgB1B,CAAC;AA+JH,wBAAsB,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CA2CvF;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,GACtC,OAAO,CAAC,MAAM,CAAC,CAkFjB"}
@@ -0,0 +1,263 @@
1
+ import fs from "fs/promises";
2
+ import path from "path";
3
+ import { spawn } from "child_process";
4
+ import { z } from "zod";
5
+ import { isPathIgnored, resolveProtectedPath } from "./security.js";
6
+ export const SearchFilesSchema = z.object({
7
+ pattern: z.string().min(1).describe("Regex or plain text pattern to search for"),
8
+ directory: z
9
+ .string()
10
+ .optional()
11
+ .describe("Directory to search in (default: current directory)"),
12
+ case_sensitive: z
13
+ .boolean()
14
+ .default(false)
15
+ .describe("Whether the search should be case sensitive"),
16
+ max_results: z
17
+ .number()
18
+ .int()
19
+ .positive()
20
+ .max(2000)
21
+ .default(200)
22
+ .describe("Maximum number of matches to return"),
23
+ });
24
+ export const FindFilesSchema = z.object({
25
+ glob_pattern: z
26
+ .string()
27
+ .min(1)
28
+ .describe("Glob to match file paths, for example: **/*.ts"),
29
+ directory: z
30
+ .string()
31
+ .optional()
32
+ .describe("Directory to search in (default: current directory)"),
33
+ max_results: z
34
+ .number()
35
+ .int()
36
+ .positive()
37
+ .max(5000)
38
+ .default(500)
39
+ .describe("Maximum number of file paths to return"),
40
+ });
41
+ function globToRegex(globPattern) {
42
+ let out = "";
43
+ for (let i = 0; i < globPattern.length; i += 1) {
44
+ const char = globPattern[i];
45
+ const next = globPattern[i + 1];
46
+ if (char === "*" && next === "*") {
47
+ out += ".*";
48
+ i += 1;
49
+ continue;
50
+ }
51
+ if (char === "*") {
52
+ out += "[^/]*";
53
+ continue;
54
+ }
55
+ if (char === "?") {
56
+ out += "[^/]";
57
+ continue;
58
+ }
59
+ if (/[.+^${}()|[\]\\]/.test(char)) {
60
+ out += `\\${char}`;
61
+ continue;
62
+ }
63
+ out += char;
64
+ }
65
+ return new RegExp(`^${out}$`);
66
+ }
67
+ async function walkFiles(rootDir, maxResults) {
68
+ const results = [];
69
+ const stack = [rootDir];
70
+ while (stack.length > 0 && results.length < maxResults) {
71
+ const current = stack.pop();
72
+ if (!current)
73
+ break;
74
+ let entries;
75
+ try {
76
+ entries = await fs.readdir(current, { withFileTypes: true });
77
+ }
78
+ catch {
79
+ continue;
80
+ }
81
+ for (const entry of entries) {
82
+ if (results.length >= maxResults)
83
+ break;
84
+ const absPath = path.join(current, entry.name);
85
+ if (await isPathIgnored(absPath)) {
86
+ continue;
87
+ }
88
+ if (entry.isSymbolicLink()) {
89
+ continue;
90
+ }
91
+ if (entry.isDirectory()) {
92
+ stack.push(absPath);
93
+ continue;
94
+ }
95
+ if (entry.isFile()) {
96
+ results.push(absPath);
97
+ }
98
+ }
99
+ }
100
+ return results;
101
+ }
102
+ async function runRipgrep(pattern, absDirectory, caseSensitive, maxResults) {
103
+ return new Promise((resolve) => {
104
+ const args = [
105
+ "--line-number",
106
+ "--no-heading",
107
+ "--color",
108
+ "never",
109
+ "--hidden",
110
+ ];
111
+ if (!caseSensitive) {
112
+ args.push("--ignore-case");
113
+ }
114
+ args.push("--", pattern, absDirectory);
115
+ const child = spawn("rg", args, {
116
+ stdio: ["ignore", "pipe", "pipe"],
117
+ });
118
+ let buffer = "";
119
+ const lines = [];
120
+ let noMatches = false;
121
+ child.stdout.on("data", (chunk) => {
122
+ buffer += chunk.toString("utf-8");
123
+ let newlineIndex = buffer.indexOf("\n");
124
+ while (newlineIndex !== -1) {
125
+ const line = buffer.slice(0, newlineIndex).trim();
126
+ buffer = buffer.slice(newlineIndex + 1);
127
+ if (line) {
128
+ lines.push(line);
129
+ }
130
+ if (lines.length >= maxResults) {
131
+ child.kill();
132
+ break;
133
+ }
134
+ newlineIndex = buffer.indexOf("\n");
135
+ }
136
+ });
137
+ child.on("error", () => {
138
+ resolve({ lines: [], usedRipgrep: false, noMatches: false });
139
+ });
140
+ child.on("close", (code) => {
141
+ if (code === 1)
142
+ noMatches = true;
143
+ resolve({ lines, usedRipgrep: true, noMatches });
144
+ });
145
+ });
146
+ }
147
+ function splitSearchLine(rawLine) {
148
+ const firstColon = rawLine.indexOf(":");
149
+ if (firstColon === -1)
150
+ return null;
151
+ const secondColon = rawLine.indexOf(":", firstColon + 1);
152
+ if (secondColon === -1)
153
+ return null;
154
+ return {
155
+ filePath: rawLine.slice(0, firstColon),
156
+ lineNumber: rawLine.slice(firstColon + 1, secondColon),
157
+ lineContent: rawLine.slice(secondColon + 1),
158
+ };
159
+ }
160
+ export async function find_files(args) {
161
+ const parsed = FindFilesSchema.parse(args);
162
+ const directoryArg = parsed.directory ?? ".";
163
+ try {
164
+ const absDirectory = await resolveProtectedPath(directoryArg);
165
+ const regex = globToRegex(parsed.glob_pattern);
166
+ const allFiles = await walkFiles(absDirectory, parsed.max_results * 5);
167
+ const matches = [];
168
+ const shouldMatchBasename = !parsed.glob_pattern.includes("/");
169
+ for (const absPath of allFiles) {
170
+ if (matches.length >= parsed.max_results)
171
+ break;
172
+ const rel = path
173
+ .relative(absDirectory, absPath)
174
+ .split(path.sep)
175
+ .join("/");
176
+ const basename = path.posix.basename(rel);
177
+ const matched = regex.test(rel) ||
178
+ (shouldMatchBasename && regex.test(basename));
179
+ if (matched) {
180
+ matches.push(absPath);
181
+ }
182
+ }
183
+ if (matches.length === 0) {
184
+ return "No files matched the provided glob pattern.";
185
+ }
186
+ const suffix = matches.length >= parsed.max_results
187
+ ? `\n[Truncated to ${parsed.max_results} matches]`
188
+ : "";
189
+ return `${matches.join("\n")}${suffix}`;
190
+ }
191
+ catch (err) {
192
+ const msg = err instanceof Error ? err.message : String(err);
193
+ return `Error finding files: ${msg}`;
194
+ }
195
+ }
196
+ export async function search_files(args) {
197
+ const parsed = SearchFilesSchema.parse(args);
198
+ const directoryArg = parsed.directory ?? ".";
199
+ try {
200
+ const absDirectory = await resolveProtectedPath(directoryArg);
201
+ const rgResult = await runRipgrep(parsed.pattern, absDirectory, parsed.case_sensitive, parsed.max_results);
202
+ let formatted = [];
203
+ if (rgResult.usedRipgrep) {
204
+ if (rgResult.noMatches || rgResult.lines.length === 0) {
205
+ return "No matches found.";
206
+ }
207
+ for (const line of rgResult.lines) {
208
+ const parts = splitSearchLine(line);
209
+ if (!parts)
210
+ continue;
211
+ const absFilePath = path.isAbsolute(parts.filePath)
212
+ ? parts.filePath
213
+ : path.resolve(absDirectory, parts.filePath);
214
+ if (await isPathIgnored(absFilePath)) {
215
+ continue;
216
+ }
217
+ formatted.push(`${absFilePath}:${parts.lineNumber}:${parts.lineContent}`);
218
+ if (formatted.length >= parsed.max_results)
219
+ break;
220
+ }
221
+ }
222
+ else {
223
+ const files = await walkFiles(absDirectory, 5_000);
224
+ const needle = parsed.case_sensitive
225
+ ? parsed.pattern
226
+ : parsed.pattern.toLowerCase();
227
+ for (const filePath of files) {
228
+ if (formatted.length >= parsed.max_results)
229
+ break;
230
+ let content;
231
+ try {
232
+ content = await fs.readFile(filePath, "utf-8");
233
+ }
234
+ catch {
235
+ continue;
236
+ }
237
+ const lines = content.split(/\r?\n/);
238
+ for (let i = 0; i < lines.length; i += 1) {
239
+ const line = lines[i] ?? "";
240
+ const haystack = parsed.case_sensitive ? line : line.toLowerCase();
241
+ if (haystack.includes(needle)) {
242
+ formatted.push(`${filePath}:${i + 1}:${line}`);
243
+ }
244
+ if (formatted.length >= parsed.max_results)
245
+ break;
246
+ }
247
+ }
248
+ if (formatted.length === 0) {
249
+ return "No matches found.";
250
+ }
251
+ }
252
+ const wasTruncated = formatted.length >= parsed.max_results;
253
+ const suffix = wasTruncated
254
+ ? `\n[Truncated to ${parsed.max_results} matches]`
255
+ : "";
256
+ return `${formatted.join("\n")}${suffix}`;
257
+ }
258
+ catch (err) {
259
+ const msg = err instanceof Error ? err.message : String(err);
260
+ return `Error searching files: ${msg}`;
261
+ }
262
+ }
263
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/tools/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export type PermissionMode = "safe" | "standard" | "yolo";
2
+ export interface ToolRuntimeConfig {
3
+ workspaceRoot: string;
4
+ permissionMode: PermissionMode;
5
+ maxReadBytes: number;
6
+ maxToolResultChars: number;
7
+ maxCommandOutputChars: number;
8
+ shellTimeoutMs: number;
9
+ }
10
+ export declare function resolveProtectedPath(inputPath: string): Promise<string>;
11
+ export declare function getRuntimeConfig(): ToolRuntimeConfig;
12
+ export declare function setRuntimeConfig(nextConfig: Partial<ToolRuntimeConfig>): void;
13
+ export declare function initializeRuntimeFromEnv(): void;
14
+ export declare function getBlockedCommandReason(command: string): string | null;
15
+ export declare function enforceWritePolicy(actionDescription: string): Promise<void>;
16
+ export declare function enforceCommandPolicy(command: string): Promise<void>;
17
+ export declare function isPathIgnored(absPath: string): Promise<boolean>;
18
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/tools/security.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB;AA6JD,wBAAsB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB7E;AAED,wBAAgB,gBAAgB,IAAI,iBAAiB,CAEpD;AAED,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAsB7E;AAED,wBAAgB,wBAAwB,IAAI,IAAI,CAwB/C;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOtE;AAqBD,wBAAsB,kBAAkB,CAAC,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjF;AAED,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAazE;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOrE"}