@jcode.labs/ragmir 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.
- package/LICENSE +21 -0
- package/README.md +102 -0
- package/dist/access-log.d.ts +11 -0
- package/dist/access-log.d.ts.map +1 -0
- package/dist/access-log.js +145 -0
- package/dist/access-log.js.map +1 -0
- package/dist/chunking.d.ts +3 -0
- package/dist/chunking.d.ts.map +1 -0
- package/dist/chunking.js +58 -0
- package/dist/chunking.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +944 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +11 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +224 -0
- package/dist/config.js.map +1 -0
- package/dist/defaults.d.ts +17 -0
- package/dist/defaults.d.ts.map +1 -0
- package/dist/defaults.js +59 -0
- package/dist/defaults.js.map +1 -0
- package/dist/destroy.d.ts +3 -0
- package/dist/destroy.d.ts.map +1 -0
- package/dist/destroy.js +16 -0
- package/dist/destroy.js.map +1 -0
- package/dist/doctor.d.ts +3 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +117 -0
- package/dist/doctor.js.map +1 -0
- package/dist/embeddings.d.ts +9 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +110 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/evaluate.d.ts +3 -0
- package/dist/evaluate.d.ts.map +1 -0
- package/dist/evaluate.js +97 -0
- package/dist/evaluate.js.map +1 -0
- package/dist/files.d.ts +16 -0
- package/dist/files.d.ts.map +1 -0
- package/dist/files.js +388 -0
- package/dist/files.js.map +1 -0
- package/dist/gitignore.d.ts +3 -0
- package/dist/gitignore.d.ts.map +1 -0
- package/dist/gitignore.js +27 -0
- package/dist/gitignore.js.map +1 -0
- package/dist/guards.d.ts +2 -0
- package/dist/guards.d.ts.map +1 -0
- package/dist/guards.js +4 -0
- package/dist/guards.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest.d.ts +4 -0
- package/dist/ingest.d.ts.map +1 -0
- package/dist/ingest.js +268 -0
- package/dist/ingest.js.map +1 -0
- package/dist/init.d.ts +2 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +33 -0
- package/dist/init.js.map +1 -0
- package/dist/mcp.d.ts +8 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +189 -0
- package/dist/mcp.js.map +1 -0
- package/dist/package-manager.d.ts +11 -0
- package/dist/package-manager.d.ts.map +1 -0
- package/dist/package-manager.js +93 -0
- package/dist/package-manager.js.map +1 -0
- package/dist/parsing.d.ts +12 -0
- package/dist/parsing.d.ts.map +1 -0
- package/dist/parsing.js +307 -0
- package/dist/parsing.js.map +1 -0
- package/dist/query.d.ts +5 -0
- package/dist/query.d.ts.map +1 -0
- package/dist/query.js +180 -0
- package/dist/query.js.map +1 -0
- package/dist/redaction.d.ts +7 -0
- package/dist/redaction.d.ts.map +1 -0
- package/dist/redaction.js +93 -0
- package/dist/redaction.js.map +1 -0
- package/dist/research.d.ts +9 -0
- package/dist/research.d.ts.map +1 -0
- package/dist/research.js +335 -0
- package/dist/research.js.map +1 -0
- package/dist/security.d.ts +3 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +106 -0
- package/dist/security.js.map +1 -0
- package/dist/semantic-config.d.ts +9 -0
- package/dist/semantic-config.d.ts.map +1 -0
- package/dist/semantic-config.js +35 -0
- package/dist/semantic-config.js.map +1 -0
- package/dist/setup.d.ts +32 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +74 -0
- package/dist/setup.js.map +1 -0
- package/dist/skill.d.ts +66 -0
- package/dist/skill.d.ts.map +1 -0
- package/dist/skill.js +652 -0
- package/dist/skill.js.map +1 -0
- package/dist/sources.d.ts +16 -0
- package/dist/sources.d.ts.map +1 -0
- package/dist/sources.js +71 -0
- package/dist/sources.js.map +1 -0
- package/dist/store.d.ts +13 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +94 -0
- package/dist/store.js.map +1 -0
- package/dist/text.d.ts +3 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +10 -0
- package/dist/text.js.map +1 -0
- package/dist/types.d.ts +322 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/examples/library-api-demo/README.md +42 -0
- package/examples/library-api-demo/run.mjs +61 -0
- package/examples/sovereign-rag-demo/.ragmir/config.json +22 -0
- package/examples/sovereign-rag-demo/.ragmir/sources.txt +2 -0
- package/examples/sovereign-rag-demo/README.md +95 -0
- package/examples/sovereign-rag-demo/golden-queries.json +29 -0
- package/examples/sovereign-rag-demo/raw/dataset-inventory.csv +5 -0
- package/examples/sovereign-rag-demo/raw/facility-scan.heic +3 -0
- package/examples/sovereign-rag-demo/raw/incident-timeline.jsonl +4 -0
- package/examples/sovereign-rag-demo/raw/operations-brief.md +16 -0
- package/examples/sovereign-rag-demo/raw/review-notes.evidence +11 -0
- package/examples/sovereign-rag-demo/raw/security-policy.yaml +14 -0
- package/package.json +87 -0
- package/skills/ragmir/SKILL.md +366 -0
- package/skills/ragmir-audio-summary/SKILL.md +150 -0
- package/skills/ragmir-audio-summary/forge-voice.sh +150 -0
- package/skills/ragmir-audio-summary/split-lines.py +13 -0
- package/skills/ragmir-audio-summary/xtts-voice.py +46 -0
- package/skills/ragmir-legal-dossier/SKILL.md +143 -0
- package/skills/ragmir-markdown-report/SKILL.md +110 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAYxC,MAAM,WAAW,wBAAwB;IACvC,cAAc,EAAE,MAAM,CAAA;IACtB,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAUrF;AAED,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAe1F;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAM/E"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { mkdir } from "node:fs/promises";
|
|
3
|
+
import { tokenize } from "./text.js";
|
|
4
|
+
const LOCAL_HASH_DIMENSIONS = 384;
|
|
5
|
+
const LONG_TOKEN_MIN_LENGTH = 6;
|
|
6
|
+
const LONG_TOKEN_WEIGHT = 1.4;
|
|
7
|
+
const transformersPipelines = new Map();
|
|
8
|
+
export async function embedTexts(texts, config) {
|
|
9
|
+
if (texts.length === 0) {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
if (config.embeddingProvider === "local-hash") {
|
|
13
|
+
return texts.map(localHashEmbedding);
|
|
14
|
+
}
|
|
15
|
+
return embedWithTransformers(texts, config);
|
|
16
|
+
}
|
|
17
|
+
export async function pullEmbeddingModel(config) {
|
|
18
|
+
await mkdir(config.embeddingModelPath, { recursive: true });
|
|
19
|
+
const extractor = await transformersExtractor({
|
|
20
|
+
...config,
|
|
21
|
+
embeddingProvider: "transformers",
|
|
22
|
+
transformersAllowRemoteModels: true,
|
|
23
|
+
});
|
|
24
|
+
await extractor(["Ragmir semantic embedding model bootstrap."], {
|
|
25
|
+
pooling: "mean",
|
|
26
|
+
normalize: true,
|
|
27
|
+
});
|
|
28
|
+
return {
|
|
29
|
+
embeddingModel: config.embeddingModel,
|
|
30
|
+
embeddingModelPath: config.embeddingModelPath,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export async function embedText(text, config) {
|
|
34
|
+
const [embedding] = await embedTexts([text], config);
|
|
35
|
+
if (!embedding) {
|
|
36
|
+
throw new Error("No embedding returned for query.");
|
|
37
|
+
}
|
|
38
|
+
return embedding;
|
|
39
|
+
}
|
|
40
|
+
async function embedWithTransformers(texts, config) {
|
|
41
|
+
const extractor = await transformersExtractor(config);
|
|
42
|
+
const output = await extractor(texts, { pooling: "mean", normalize: true });
|
|
43
|
+
const rows = tensorToEmbeddingRows(output);
|
|
44
|
+
if (rows.length !== texts.length) {
|
|
45
|
+
throw new Error(`Expected ${texts.length} embeddings, received ${rows.length}.`);
|
|
46
|
+
}
|
|
47
|
+
return rows;
|
|
48
|
+
}
|
|
49
|
+
async function transformersExtractor(config) {
|
|
50
|
+
const key = [
|
|
51
|
+
config.embeddingModel,
|
|
52
|
+
config.embeddingModelPath,
|
|
53
|
+
String(config.transformersAllowRemoteModels),
|
|
54
|
+
].join("\n");
|
|
55
|
+
const cached = transformersPipelines.get(key);
|
|
56
|
+
if (cached) {
|
|
57
|
+
return cached;
|
|
58
|
+
}
|
|
59
|
+
const transformers = await import("@huggingface/transformers");
|
|
60
|
+
transformers.env.localModelPath = config.embeddingModelPath;
|
|
61
|
+
transformers.env.cacheDir = config.embeddingModelPath;
|
|
62
|
+
transformers.env.allowRemoteModels = config.transformersAllowRemoteModels;
|
|
63
|
+
const extractor = (await transformers.pipeline("feature-extraction", config.embeddingModel));
|
|
64
|
+
transformersPipelines.set(key, extractor);
|
|
65
|
+
return extractor;
|
|
66
|
+
}
|
|
67
|
+
function localHashEmbedding(text) {
|
|
68
|
+
const vector = Array.from({ length: LOCAL_HASH_DIMENSIONS }, () => 0);
|
|
69
|
+
const tokens = tokenize(text);
|
|
70
|
+
for (const token of tokens) {
|
|
71
|
+
const hash = createHash("sha256").update(token).digest();
|
|
72
|
+
const index = hash.readUInt32BE(0) % LOCAL_HASH_DIMENSIONS;
|
|
73
|
+
const sign = (hash.at(4) ?? 0) % 2 === 0 ? 1 : -1;
|
|
74
|
+
vector[index] = (vector[index] ?? 0) + sign * tokenWeight(token);
|
|
75
|
+
}
|
|
76
|
+
const magnitude = Math.sqrt(vector.reduce((sum, value) => sum + value * value, 0));
|
|
77
|
+
if (magnitude === 0) {
|
|
78
|
+
return vector;
|
|
79
|
+
}
|
|
80
|
+
return vector.map((value) => value / magnitude);
|
|
81
|
+
}
|
|
82
|
+
function tokenWeight(token) {
|
|
83
|
+
return token.length >= LONG_TOKEN_MIN_LENGTH ? LONG_TOKEN_WEIGHT : 1;
|
|
84
|
+
}
|
|
85
|
+
function tensorToEmbeddingRows(output) {
|
|
86
|
+
if (!hasToList(output)) {
|
|
87
|
+
throw new Error("Transformers embedding output does not expose tolist().");
|
|
88
|
+
}
|
|
89
|
+
const value = output.tolist();
|
|
90
|
+
if (isNumberMatrix(value)) {
|
|
91
|
+
return value;
|
|
92
|
+
}
|
|
93
|
+
if (isNumberArray(value)) {
|
|
94
|
+
return [value];
|
|
95
|
+
}
|
|
96
|
+
throw new Error("Transformers embedding output is not a numeric vector matrix.");
|
|
97
|
+
}
|
|
98
|
+
function hasToList(value) {
|
|
99
|
+
return (typeof value === "object" &&
|
|
100
|
+
value !== null &&
|
|
101
|
+
"tolist" in value &&
|
|
102
|
+
typeof value.tolist === "function");
|
|
103
|
+
}
|
|
104
|
+
function isNumberArray(value) {
|
|
105
|
+
return Array.isArray(value) && value.every((item) => typeof item === "number");
|
|
106
|
+
}
|
|
107
|
+
function isNumberMatrix(value) {
|
|
108
|
+
return Array.isArray(value) && value.every(isNumberArray);
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=embeddings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../src/embeddings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAEV,iBAAiB,EACjB,gBAAgB,EAEjB,MAAM,YAAY,CAAA;AAqBnB,wBAAsB,qBAAqB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkDjG"}
|
package/dist/evaluate.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { recordAccess } from "./access-log.js";
|
|
5
|
+
import { loadConfig } from "./config.js";
|
|
6
|
+
import { search } from "./query.js";
|
|
7
|
+
const goldenQuerySchema = z
|
|
8
|
+
.object({
|
|
9
|
+
id: z.string().min(1).optional(),
|
|
10
|
+
query: z.string().min(1),
|
|
11
|
+
expectedPaths: z.array(z.string().min(1)).min(1),
|
|
12
|
+
topK: z.number().int().positive().optional(),
|
|
13
|
+
})
|
|
14
|
+
.strict();
|
|
15
|
+
const goldenFileSchema = z.union([
|
|
16
|
+
z.array(goldenQuerySchema).min(1),
|
|
17
|
+
z
|
|
18
|
+
.object({
|
|
19
|
+
topK: z.number().int().positive().optional(),
|
|
20
|
+
queries: z.array(goldenQuerySchema).min(1),
|
|
21
|
+
})
|
|
22
|
+
.strict(),
|
|
23
|
+
]);
|
|
24
|
+
export async function evaluateGoldenQueries(options) {
|
|
25
|
+
const cwd = path.resolve(String(options.cwd ?? process.cwd()));
|
|
26
|
+
const config = await loadConfig(cwd);
|
|
27
|
+
const goldenPath = path.resolve(cwd, String(options.goldenPath));
|
|
28
|
+
const goldenFile = await readGoldenFile(goldenPath);
|
|
29
|
+
const defaultTopK = boundedTopK(options.topK ?? goldenFile.topK ?? 3, options.maxTopK);
|
|
30
|
+
const cases = [];
|
|
31
|
+
for (const goldenQuery of goldenFile.queries) {
|
|
32
|
+
const topK = boundedTopK(goldenQuery.topK ?? defaultTopK, options.maxTopK);
|
|
33
|
+
const results = await search(goldenQuery.query, { cwd, topK });
|
|
34
|
+
const returnedPaths = results.map((result) => result.relativePath);
|
|
35
|
+
const matchedPaths = returnedPaths.filter((resultPath) => goldenQuery.expectedPaths.includes(resultPath));
|
|
36
|
+
const bestRank = returnedPaths.findIndex((resultPath) => goldenQuery.expectedPaths.includes(resultPath)) + 1;
|
|
37
|
+
const result = {
|
|
38
|
+
query: goldenQuery.query,
|
|
39
|
+
expectedPaths: goldenQuery.expectedPaths,
|
|
40
|
+
topK,
|
|
41
|
+
returnedPaths,
|
|
42
|
+
matchedPaths,
|
|
43
|
+
hit: matchedPaths.length > 0,
|
|
44
|
+
bestRank: bestRank > 0 ? bestRank : null,
|
|
45
|
+
};
|
|
46
|
+
if (goldenQuery.id !== undefined) {
|
|
47
|
+
result.id = goldenQuery.id;
|
|
48
|
+
}
|
|
49
|
+
cases.push(result);
|
|
50
|
+
}
|
|
51
|
+
const hits = cases.filter((result) => result.hit).length;
|
|
52
|
+
await recordAccess(config, {
|
|
53
|
+
action: "evaluate",
|
|
54
|
+
topK: defaultTopK,
|
|
55
|
+
resultCount: cases.length,
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
goldenPath,
|
|
59
|
+
embeddingProvider: config.embeddingProvider,
|
|
60
|
+
embeddingModel: config.embeddingModel,
|
|
61
|
+
topK: defaultTopK,
|
|
62
|
+
total: cases.length,
|
|
63
|
+
hits,
|
|
64
|
+
misses: cases.length - hits,
|
|
65
|
+
recall: hits / cases.length,
|
|
66
|
+
cases,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async function readGoldenFile(goldenPath) {
|
|
70
|
+
const raw = await readFile(goldenPath, "utf8");
|
|
71
|
+
const parsed = goldenFileSchema.parse(JSON.parse(raw));
|
|
72
|
+
if (Array.isArray(parsed)) {
|
|
73
|
+
return { queries: parsed.map(normalizeGoldenQuery) };
|
|
74
|
+
}
|
|
75
|
+
const result = { queries: parsed.queries.map(normalizeGoldenQuery) };
|
|
76
|
+
if (parsed.topK !== undefined) {
|
|
77
|
+
return { ...result, topK: parsed.topK };
|
|
78
|
+
}
|
|
79
|
+
return result;
|
|
80
|
+
}
|
|
81
|
+
function normalizeGoldenQuery(value) {
|
|
82
|
+
const result = {
|
|
83
|
+
query: value.query,
|
|
84
|
+
expectedPaths: value.expectedPaths,
|
|
85
|
+
};
|
|
86
|
+
if (value.id !== undefined) {
|
|
87
|
+
result.id = value.id;
|
|
88
|
+
}
|
|
89
|
+
if (value.topK !== undefined) {
|
|
90
|
+
result.topK = value.topK;
|
|
91
|
+
}
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
function boundedTopK(topK, maxTopK) {
|
|
95
|
+
return maxTopK === undefined ? topK : Math.min(topK, maxTopK);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=evaluate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../src/evaluate.ts"],"names":[],"mappings":"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"}
|
package/dist/files.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Config, SkippedSourceFile, SkippedSourceReason, SourceFile, SourceInventory } from "./types.js";
|
|
2
|
+
export declare const OCR_IMAGE_EXTENSIONS: Set<string>;
|
|
3
|
+
export declare const DEFAULT_FAST_GLOB_IGNORES: string[];
|
|
4
|
+
export declare const DEFAULT_SUPPORTED_EXTENSIONS: Set<string>;
|
|
5
|
+
export declare function listSourceFiles(config: Config): Promise<SourceFile[]>;
|
|
6
|
+
export declare function inventorySourceFiles(config: Config): Promise<SourceInventory>;
|
|
7
|
+
export declare function supportedExtensions(config: Config): Set<string>;
|
|
8
|
+
export declare function summarizeUnsupportedExtensions(skippedFiles: SkippedSourceFile[]): Array<{
|
|
9
|
+
extension: string;
|
|
10
|
+
count: number;
|
|
11
|
+
}>;
|
|
12
|
+
export declare function isSensitiveFilePath(absolutePath: string): boolean;
|
|
13
|
+
export declare function countSkippedByReason(files: Array<{
|
|
14
|
+
reason: SkippedSourceReason;
|
|
15
|
+
}>, reason: SkippedSourceReason): number;
|
|
16
|
+
//# sourceMappingURL=files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,MAAM,EACN,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,eAAe,EAChB,MAAM,YAAY,CAAA;AAoCnB,eAAO,MAAM,oBAAoB,aAY/B,CAAA;AA4BF,eAAO,MAAM,yBAAyB,UAKrC,CAAA;AAcD,eAAO,MAAM,4BAA4B,aA8EvC,CAAA;AAEF,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAE3E;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CA8HnF;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAO/D;AASD,wBAAgB,8BAA8B,CAC5C,YAAY,EAAE,iBAAiB,EAAE,GAChC,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAW7C;AA8CD,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAQjE;AAMD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC,EAC7C,MAAM,EAAE,mBAAmB,GAC1B,MAAM,CAER"}
|
package/dist/files.js
ADDED
|
@@ -0,0 +1,388 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { readFile, stat } from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import fg from "fast-glob";
|
|
6
|
+
import { DEFAULT_CONFIG, LEGACY_KB_DIR, LEGACY_PRIVATE_DIR, RAGMIR_DIR } from "./defaults.js";
|
|
7
|
+
const GENERATED_SOURCE_READMES = new Set([
|
|
8
|
+
`${DEFAULT_CONFIG.rawDir}/README.md`,
|
|
9
|
+
`${LEGACY_PRIVATE_DIR}/README.md`,
|
|
10
|
+
]);
|
|
11
|
+
const NO_EXTENSION = "(none)";
|
|
12
|
+
const SENSITIVE_FILE_NAMES = new Set([
|
|
13
|
+
".htpasswd",
|
|
14
|
+
".netrc",
|
|
15
|
+
".npmrc",
|
|
16
|
+
".pgpass",
|
|
17
|
+
".pypirc",
|
|
18
|
+
"credentials",
|
|
19
|
+
"id_dsa",
|
|
20
|
+
"id_ecdsa",
|
|
21
|
+
"id_ed25519",
|
|
22
|
+
"id_rsa",
|
|
23
|
+
]);
|
|
24
|
+
const SENSITIVE_EXTENSIONS = new Set([
|
|
25
|
+
".asc",
|
|
26
|
+
".cer",
|
|
27
|
+
".crt",
|
|
28
|
+
".der",
|
|
29
|
+
".gpg",
|
|
30
|
+
".jks",
|
|
31
|
+
".kdbx",
|
|
32
|
+
".key",
|
|
33
|
+
".keystore",
|
|
34
|
+
".ovpn",
|
|
35
|
+
".p12",
|
|
36
|
+
".p8",
|
|
37
|
+
".pem",
|
|
38
|
+
".pfx",
|
|
39
|
+
".ppk",
|
|
40
|
+
]);
|
|
41
|
+
export const OCR_IMAGE_EXTENSIONS = new Set([
|
|
42
|
+
".avif",
|
|
43
|
+
".bmp",
|
|
44
|
+
".gif",
|
|
45
|
+
".heic",
|
|
46
|
+
".heif",
|
|
47
|
+
".jpeg",
|
|
48
|
+
".jpg",
|
|
49
|
+
".png",
|
|
50
|
+
".tif",
|
|
51
|
+
".tiff",
|
|
52
|
+
".webp",
|
|
53
|
+
]);
|
|
54
|
+
const LEGACY_WORD_EXTENSIONS = new Set([".doc"]);
|
|
55
|
+
const LEGACY_EXCEL_EXTENSIONS = new Set([".xls"]);
|
|
56
|
+
const TRANSCRIPTION_EXTENSIONS = new Set([
|
|
57
|
+
".aac",
|
|
58
|
+
".aiff",
|
|
59
|
+
".flac",
|
|
60
|
+
".m4a",
|
|
61
|
+
".mkv",
|
|
62
|
+
".mov",
|
|
63
|
+
".mp3",
|
|
64
|
+
".mp4",
|
|
65
|
+
".ogg",
|
|
66
|
+
".wav",
|
|
67
|
+
".webm",
|
|
68
|
+
]);
|
|
69
|
+
const DEFAULT_SUPPORTED_FILE_NAMES = new Set([
|
|
70
|
+
".dockerignore",
|
|
71
|
+
".gitignore",
|
|
72
|
+
".npmignore",
|
|
73
|
+
"dockerfile",
|
|
74
|
+
"gemfile",
|
|
75
|
+
"gradlew",
|
|
76
|
+
"makefile",
|
|
77
|
+
"mvnw",
|
|
78
|
+
"procfile",
|
|
79
|
+
"rakefile",
|
|
80
|
+
]);
|
|
81
|
+
export const DEFAULT_FAST_GLOB_IGNORES = [
|
|
82
|
+
"**/.git/**",
|
|
83
|
+
"**/node_modules/**",
|
|
84
|
+
`**/${LEGACY_KB_DIR}/**`,
|
|
85
|
+
`**/${RAGMIR_DIR}/**`,
|
|
86
|
+
];
|
|
87
|
+
const GLOB_PATTERN_CHARS = /[*?[{]/u;
|
|
88
|
+
export const DEFAULT_SUPPORTED_EXTENSIONS = new Set([
|
|
89
|
+
".atom",
|
|
90
|
+
".adoc",
|
|
91
|
+
".astro",
|
|
92
|
+
".bash",
|
|
93
|
+
".bat",
|
|
94
|
+
".c",
|
|
95
|
+
".cjs",
|
|
96
|
+
".cfg",
|
|
97
|
+
".cmd",
|
|
98
|
+
".conf",
|
|
99
|
+
".cpp",
|
|
100
|
+
".cs",
|
|
101
|
+
".css",
|
|
102
|
+
".csv",
|
|
103
|
+
".cts",
|
|
104
|
+
".diff",
|
|
105
|
+
".docx",
|
|
106
|
+
".eml",
|
|
107
|
+
".epub",
|
|
108
|
+
".example",
|
|
109
|
+
".exemple",
|
|
110
|
+
".go",
|
|
111
|
+
".h",
|
|
112
|
+
".hpp",
|
|
113
|
+
".htm",
|
|
114
|
+
".html",
|
|
115
|
+
".ics",
|
|
116
|
+
".ini",
|
|
117
|
+
".java",
|
|
118
|
+
".js",
|
|
119
|
+
".json",
|
|
120
|
+
".jsonl",
|
|
121
|
+
".jsx",
|
|
122
|
+
".ipynb",
|
|
123
|
+
".log",
|
|
124
|
+
".markdown",
|
|
125
|
+
".md",
|
|
126
|
+
".mdown",
|
|
127
|
+
".mdx",
|
|
128
|
+
".mmd",
|
|
129
|
+
".mjs",
|
|
130
|
+
".mts",
|
|
131
|
+
".ndjson",
|
|
132
|
+
".odp",
|
|
133
|
+
".ods",
|
|
134
|
+
".odt",
|
|
135
|
+
".patch",
|
|
136
|
+
".pdf",
|
|
137
|
+
".php",
|
|
138
|
+
".pptx",
|
|
139
|
+
".properties",
|
|
140
|
+
".ps1",
|
|
141
|
+
".py",
|
|
142
|
+
".rb",
|
|
143
|
+
".rst",
|
|
144
|
+
".rs",
|
|
145
|
+
".rss",
|
|
146
|
+
".rtf",
|
|
147
|
+
".scss",
|
|
148
|
+
".srt",
|
|
149
|
+
".svelte",
|
|
150
|
+
".svg",
|
|
151
|
+
".sh",
|
|
152
|
+
".sql",
|
|
153
|
+
".tex",
|
|
154
|
+
".text",
|
|
155
|
+
".toml",
|
|
156
|
+
".ts",
|
|
157
|
+
".tsv",
|
|
158
|
+
".tsx",
|
|
159
|
+
".txt",
|
|
160
|
+
".vtt",
|
|
161
|
+
".vue",
|
|
162
|
+
".xml",
|
|
163
|
+
".xlsx",
|
|
164
|
+
".yaml",
|
|
165
|
+
".yml",
|
|
166
|
+
]);
|
|
167
|
+
export async function listSourceFiles(config) {
|
|
168
|
+
return (await inventorySourceFiles(config)).supportedFiles;
|
|
169
|
+
}
|
|
170
|
+
export async function inventorySourceFiles(config) {
|
|
171
|
+
const inputs = await sourceInputs(config);
|
|
172
|
+
const files = new Map();
|
|
173
|
+
const skippedFiles = new Map();
|
|
174
|
+
let discoveredFiles = 0;
|
|
175
|
+
const recordSourceFile = async (absolutePath, info, source) => {
|
|
176
|
+
const relativePath = path.relative(config.projectRoot, absolutePath);
|
|
177
|
+
if (GENERATED_SOURCE_READMES.has(relativePath)) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
discoveredFiles += 1;
|
|
181
|
+
const extension = path.extname(absolutePath).toLowerCase();
|
|
182
|
+
const skipped = skippedSourceFile(absolutePath, relativePath, source, extension, info.size);
|
|
183
|
+
if (skipped) {
|
|
184
|
+
skippedFiles.set(absolutePath, skipped);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (!isSupportedSourceFile(absolutePath, extension, config)) {
|
|
188
|
+
const normalizedExtension = extension || NO_EXTENSION;
|
|
189
|
+
skippedFiles.set(absolutePath, {
|
|
190
|
+
relativePath,
|
|
191
|
+
source,
|
|
192
|
+
extension: normalizedExtension,
|
|
193
|
+
bytes: info.size,
|
|
194
|
+
reason: "unsupported-extension",
|
|
195
|
+
recommendation: skippedRecommendation("unsupported-extension", normalizedExtension),
|
|
196
|
+
});
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
if (info.size > config.maxFileBytes) {
|
|
200
|
+
const normalizedExtension = extension || NO_EXTENSION;
|
|
201
|
+
skippedFiles.set(absolutePath, {
|
|
202
|
+
relativePath,
|
|
203
|
+
source,
|
|
204
|
+
extension: normalizedExtension,
|
|
205
|
+
bytes: info.size,
|
|
206
|
+
reason: "oversized",
|
|
207
|
+
recommendation: skippedRecommendation("oversized", normalizedExtension),
|
|
208
|
+
});
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const buffer = await readFile(absolutePath);
|
|
212
|
+
files.set(absolutePath, {
|
|
213
|
+
absolutePath,
|
|
214
|
+
relativePath,
|
|
215
|
+
source,
|
|
216
|
+
extension,
|
|
217
|
+
bytes: info.size,
|
|
218
|
+
mtimeMs: info.mtimeMs,
|
|
219
|
+
checksum: createHash("sha256").update(buffer).digest("hex"),
|
|
220
|
+
});
|
|
221
|
+
};
|
|
222
|
+
for (const root of inputs.roots) {
|
|
223
|
+
if (!existsSync(root)) {
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
const rootInfo = await stat(root);
|
|
227
|
+
const entries = rootInfo.isDirectory()
|
|
228
|
+
? (await fg("**/*", {
|
|
229
|
+
cwd: root,
|
|
230
|
+
absolute: true,
|
|
231
|
+
onlyFiles: true,
|
|
232
|
+
dot: true,
|
|
233
|
+
followSymbolicLinks: false,
|
|
234
|
+
ignore: DEFAULT_FAST_GLOB_IGNORES,
|
|
235
|
+
objectMode: true,
|
|
236
|
+
stats: true,
|
|
237
|
+
unique: true,
|
|
238
|
+
}))
|
|
239
|
+
: [{ path: root, stats: { size: rootInfo.size, mtimeMs: rootInfo.mtimeMs } }];
|
|
240
|
+
for (const entry of entries) {
|
|
241
|
+
const absolutePath = path.isAbsolute(entry.path) ? entry.path : path.resolve(root, entry.path);
|
|
242
|
+
const info = entry.stats ?? (await stat(absolutePath));
|
|
243
|
+
const relativePath = path.relative(config.projectRoot, absolutePath);
|
|
244
|
+
const source = rootInfo.isDirectory()
|
|
245
|
+
? path.relative(root, absolutePath) || path.basename(absolutePath)
|
|
246
|
+
: relativePath || path.basename(absolutePath);
|
|
247
|
+
await recordSourceFile(absolutePath, info, source);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
if (inputs.patterns.length > 0) {
|
|
251
|
+
const entries = (await fg(inputs.patterns, {
|
|
252
|
+
cwd: config.projectRoot,
|
|
253
|
+
absolute: true,
|
|
254
|
+
onlyFiles: true,
|
|
255
|
+
dot: true,
|
|
256
|
+
followSymbolicLinks: false,
|
|
257
|
+
ignore: [...DEFAULT_FAST_GLOB_IGNORES, ...inputs.ignorePatterns],
|
|
258
|
+
objectMode: true,
|
|
259
|
+
stats: true,
|
|
260
|
+
unique: true,
|
|
261
|
+
}));
|
|
262
|
+
for (const entry of entries) {
|
|
263
|
+
const absolutePath = path.isAbsolute(entry.path)
|
|
264
|
+
? entry.path
|
|
265
|
+
: path.resolve(config.projectRoot, entry.path);
|
|
266
|
+
const info = entry.stats ?? (await stat(absolutePath));
|
|
267
|
+
const relativePath = path.relative(config.projectRoot, absolutePath);
|
|
268
|
+
await recordSourceFile(absolutePath, info, relativePath || path.basename(absolutePath));
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return {
|
|
272
|
+
discoveredFiles,
|
|
273
|
+
supportedFiles: [...files.values()].sort((a, b) => a.relativePath.localeCompare(b.relativePath)),
|
|
274
|
+
skippedFiles: [...skippedFiles.values()].sort((a, b) => a.relativePath.localeCompare(b.relativePath)),
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
export function supportedExtensions(config) {
|
|
278
|
+
return new Set([
|
|
279
|
+
...DEFAULT_SUPPORTED_EXTENSIONS,
|
|
280
|
+
...(config.imageOcrCommand.length > 0 ? OCR_IMAGE_EXTENSIONS : []),
|
|
281
|
+
...(config.legacyWordCommand.length > 0 ? LEGACY_WORD_EXTENSIONS : []),
|
|
282
|
+
...config.includeExtensions,
|
|
283
|
+
]);
|
|
284
|
+
}
|
|
285
|
+
function isSupportedSourceFile(absolutePath, extension, config) {
|
|
286
|
+
if (supportedExtensions(config).has(extension)) {
|
|
287
|
+
return true;
|
|
288
|
+
}
|
|
289
|
+
return DEFAULT_SUPPORTED_FILE_NAMES.has(path.basename(absolutePath).toLowerCase());
|
|
290
|
+
}
|
|
291
|
+
export function summarizeUnsupportedExtensions(skippedFiles) {
|
|
292
|
+
const counts = new Map();
|
|
293
|
+
for (const file of skippedFiles) {
|
|
294
|
+
if (file.reason !== "unsupported-extension") {
|
|
295
|
+
continue;
|
|
296
|
+
}
|
|
297
|
+
counts.set(file.extension, (counts.get(file.extension) ?? 0) + 1);
|
|
298
|
+
}
|
|
299
|
+
return [...counts.entries()]
|
|
300
|
+
.sort(([a], [b]) => a.localeCompare(b))
|
|
301
|
+
.map(([extension, count]) => ({ extension, count }));
|
|
302
|
+
}
|
|
303
|
+
async function sourceInputs(config) {
|
|
304
|
+
const roots = [config.rawDir];
|
|
305
|
+
const patterns = [];
|
|
306
|
+
const ignorePatterns = [];
|
|
307
|
+
const classifyEntry = (entry) => {
|
|
308
|
+
const trimmed = entry.trim();
|
|
309
|
+
if (!trimmed || trimmed.startsWith("#")) {
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
if (trimmed.startsWith("!")) {
|
|
313
|
+
ignorePatterns.push(sourcePattern(config.projectRoot, trimmed.slice(1).trim()));
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
if (GLOB_PATTERN_CHARS.test(trimmed)) {
|
|
317
|
+
patterns.push(sourcePattern(config.projectRoot, trimmed));
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
320
|
+
roots.push(path.isAbsolute(trimmed) ? trimmed : path.resolve(config.projectRoot, trimmed));
|
|
321
|
+
};
|
|
322
|
+
// Inline `sources` from config.json are the primary mechanism; the legacy
|
|
323
|
+
// sources.txt file is still read when present so existing projects keep working.
|
|
324
|
+
for (const entry of config.sources) {
|
|
325
|
+
classifyEntry(entry);
|
|
326
|
+
}
|
|
327
|
+
if (existsSync(config.sourcesFile)) {
|
|
328
|
+
const content = await readFile(config.sourcesFile, "utf8");
|
|
329
|
+
for (const line of content.split(/\r?\n/u)) {
|
|
330
|
+
classifyEntry(line);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
return { roots, patterns, ignorePatterns };
|
|
334
|
+
}
|
|
335
|
+
function sourcePattern(projectRoot, input) {
|
|
336
|
+
if (path.isAbsolute(input)) {
|
|
337
|
+
return path.relative(projectRoot, input).replaceAll(path.sep, "/");
|
|
338
|
+
}
|
|
339
|
+
return input.replaceAll(path.sep, "/");
|
|
340
|
+
}
|
|
341
|
+
export function isSensitiveFilePath(absolutePath) {
|
|
342
|
+
const baseName = path.basename(absolutePath).toLowerCase();
|
|
343
|
+
const extension = path.extname(absolutePath).toLowerCase();
|
|
344
|
+
return (isEnvFileName(baseName) ||
|
|
345
|
+
SENSITIVE_FILE_NAMES.has(baseName) ||
|
|
346
|
+
SENSITIVE_EXTENSIONS.has(extension));
|
|
347
|
+
}
|
|
348
|
+
function isEnvFileName(baseName) {
|
|
349
|
+
return baseName === ".env" || baseName.startsWith(".env.");
|
|
350
|
+
}
|
|
351
|
+
export function countSkippedByReason(files, reason) {
|
|
352
|
+
return files.filter((file) => file.reason === reason).length;
|
|
353
|
+
}
|
|
354
|
+
function skippedSourceFile(absolutePath, relativePath, source, extension, bytes) {
|
|
355
|
+
if (!isSensitiveFilePath(absolutePath)) {
|
|
356
|
+
return null;
|
|
357
|
+
}
|
|
358
|
+
return {
|
|
359
|
+
relativePath,
|
|
360
|
+
source,
|
|
361
|
+
extension: extension || NO_EXTENSION,
|
|
362
|
+
bytes,
|
|
363
|
+
reason: "sensitive-name",
|
|
364
|
+
recommendation: skippedRecommendation("sensitive-name", extension || NO_EXTENSION),
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
function skippedRecommendation(reason, extension) {
|
|
368
|
+
if (reason === "sensitive-name") {
|
|
369
|
+
return "Review manually; secret-like files are skipped to avoid indexing credentials or private keys.";
|
|
370
|
+
}
|
|
371
|
+
if (reason === "oversized") {
|
|
372
|
+
return "Split, compress, or raise maxFileBytes only after confirming the file is safe and useful.";
|
|
373
|
+
}
|
|
374
|
+
if (OCR_IMAGE_EXTENSIONS.has(extension)) {
|
|
375
|
+
return "Configure imageOcrCommand for local image OCR, save extracted text as a supported text file, or convert to an OCRed PDF before ingesting.";
|
|
376
|
+
}
|
|
377
|
+
if (LEGACY_WORD_EXTENSIONS.has(extension)) {
|
|
378
|
+
return "Configure legacyWordCommand for local legacy Word extraction, or convert to DOCX, PDF, HTML, or text before ingesting.";
|
|
379
|
+
}
|
|
380
|
+
if (LEGACY_EXCEL_EXTENSIONS.has(extension)) {
|
|
381
|
+
return "Convert legacy XLS workbooks to XLSX, CSV, PDF, HTML, or text before ingesting.";
|
|
382
|
+
}
|
|
383
|
+
if (TRANSCRIPTION_EXTENSIONS.has(extension)) {
|
|
384
|
+
return "Transcribe to text, VTT, or SRT before ingesting.";
|
|
385
|
+
}
|
|
386
|
+
return "Convert to a supported text, PDF, Office, OpenDocument, EPUB, or HTML format; use includeExtensions only for UTF-8 text files.";
|
|
387
|
+
}
|
|
388
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,MAAM,WAAW,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAS7F,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACvC,GAAG,cAAc,CAAC,MAAM,YAAY;IACpC,GAAG,kBAAkB,YAAY;CAClC,CAAC,CAAA;AACF,MAAM,YAAY,GAAG,QAAQ,CAAA;AAC7B,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,SAAS;IACT,aAAa;IACb,QAAQ;IACR,UAAU;IACV,YAAY;IACZ,QAAQ;CACT,CAAC,CAAA;AACF,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,WAAW;IACX,OAAO;IACP,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;CACP,CAAC,CAAA;AACF,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IAC1C,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;CACR,CAAC,CAAA;AACF,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAChD,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AACjD,MAAM,wBAAwB,GAAG,IAAI,GAAG,CAAC;IACvC,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;CACR,CAAC,CAAA;AACF,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC;IAC3C,eAAe;IACf,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,SAAS;IACT,SAAS;IACT,UAAU;IACV,MAAM;IACN,UAAU;IACV,UAAU;CACX,CAAC,CAAA;AACF,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,YAAY;IACZ,oBAAoB;IACpB,MAAM,aAAa,KAAK;IACxB,MAAM,UAAU,KAAK;CACtB,CAAA;AACD,MAAM,kBAAkB,GAAG,SAAS,CAAA;AAapC,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,GAAG,CAAC;IAClD,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,MAAM;IACN,IAAI;IACJ,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;IACN,OAAO;IACP,UAAU;IACV,UAAU;IACV,KAAK;IACL,IAAI;IACJ,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,MAAM;IACN,OAAO;IACP,KAAK;IACL,OAAO;IACP,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,MAAM;IACN,WAAW;IACX,KAAK;IACL,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,SAAS;IACT,MAAM;IACN,MAAM;IACN,MAAM;IACN,QAAQ;IACR,MAAM;IACN,MAAM;IACN,OAAO;IACP,aAAa;IACb,MAAM;IACN,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,OAAO;IACP,MAAM;IACN,SAAS;IACT,MAAM;IACN,KAAK;IACL,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,KAAK;IACL,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,MAAM;CACP,CAAC,CAAA;AAEF,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAc;IAClD,OAAO,CAAC,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAA;AAC5D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAc;IACvD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAA;IACzC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAA;IAC3C,MAAM,YAAY,GAAG,IAAI,GAAG,EAA6B,CAAA;IACzD,IAAI,eAAe,GAAG,CAAC,CAAA;IAEvB,MAAM,gBAAgB,GAAG,KAAK,EAC5B,YAAoB,EACpB,IAAsB,EACtB,MAAc,EACC,EAAE;QACjB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;QACpE,IAAI,wBAAwB,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/C,OAAM;QACR,CAAC;QACD,eAAe,IAAI,CAAC,CAAA;QAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAA;QAC1D,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,EAAE,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAE3F,IAAI,OAAO,EAAE,CAAC;YACZ,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;YACvC,OAAM;QACR,CAAC;QAED,IAAI,CAAC,qBAAqB,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,CAAC;YAC5D,MAAM,mBAAmB,GAAG,SAAS,IAAI,YAAY,CAAA;YACrD,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE;gBAC7B,YAAY;gBACZ,MAAM;gBACN,SAAS,EAAE,mBAAmB;gBAC9B,KAAK,EAAE,IAAI,CAAC,IAAI;gBAChB,MAAM,EAAE,uBAAuB;gBAC/B,cAAc,EAAE,qBAAqB,CAAC,uBAAuB,EAAE,mBAAmB,CAAC;aACpF,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;YACpC,MAAM,mBAAmB,GAAG,SAAS,IAAI,YAAY,CAAA;YACrD,YAAY,CAAC,GAAG,CAAC,YAAY,EAAE;gBAC7B,YAAY;gBACZ,MAAM;gBACN,SAAS,EAAE,mBAAmB;gBAC9B,KAAK,EAAE,IAAI,CAAC,IAAI;gBAChB,MAAM,EAAE,WAAW;gBACnB,cAAc,EAAE,qBAAqB,CAAC,WAAW,EAAE,mBAAmB,CAAC;aACxE,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAA;QAC3C,KAAK,CAAC,GAAG,CAAC,YAAY,EAAE;YACtB,YAAY;YACZ,YAAY;YACZ,MAAM;YACN,SAAS;YACT,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAC5D,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,SAAQ;QACV,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAA;QACjC,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE;YACpC,CAAC,CAAE,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE;gBACjB,GAAG,EAAE,IAAI;gBACT,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,IAAI;gBACf,GAAG,EAAE,IAAI;gBACT,mBAAmB,EAAE,KAAK;gBAC1B,MAAM,EAAE,yBAAyB;gBACjC,UAAU,EAAE,IAAI;gBAChB,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,IAAI;aACb,CAAC,CAAwE;YAC5E,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;QAE/E,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAC9F,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;YACtD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;YACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,EAAE;gBACnC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;gBAClE,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAA;YAC/C,MAAM,gBAAgB,CAAC,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;QACpD,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE;YACzC,GAAG,EAAE,MAAM,CAAC,WAAW;YACvB,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,IAAI;YACf,GAAG,EAAE,IAAI;YACT,mBAAmB,EAAE,KAAK;YAC1B,MAAM,EAAE,CAAC,GAAG,yBAAyB,EAAE,GAAG,MAAM,CAAC,cAAc,CAAC;YAChE,UAAU,EAAE,IAAI;YAChB,KAAK,EAAE,IAAI;YACX,MAAM,EAAE,IAAI;SACb,CAAC,CAAuE,CAAA;QAEzE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC;gBAC9C,CAAC,CAAC,KAAK,CAAC,IAAI;gBACZ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;YAChD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;YACtD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAA;YACpE,MAAM,gBAAgB,CAAC,YAAY,EAAE,IAAI,EAAE,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAA;QACzF,CAAC;IACH,CAAC;IAED,OAAO;QACL,eAAe;QACf,cAAc,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAChD,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAC7C;QACD,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACrD,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAC7C;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,IAAI,GAAG,CAAC;QACb,GAAG,4BAA4B;QAC/B,GAAG,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE,CAAC;QACtE,GAAG,MAAM,CAAC,iBAAiB;KAC5B,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,YAAoB,EAAE,SAAiB,EAAE,MAAc;IACpF,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,4BAA4B,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;AACpF,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,YAAiC;IAEjC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,KAAK,uBAAuB,EAAE,CAAC;YAC5C,SAAQ;QACV,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IACnE,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;SACzB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;AACxD,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,MAAc;IACxC,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,MAAM,cAAc,GAAa,EAAE,CAAA;IAEnC,MAAM,aAAa,GAAG,CAAC,KAAa,EAAQ,EAAE;QAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxC,OAAM;QACR,CAAC;QACD,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YAC/E,OAAM;QACR,CAAC;QACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACrC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;YACzD,OAAM;QACR,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAA;IAC5F,CAAC,CAAA;IAED,0EAA0E;IAC1E,iFAAiF;IACjF,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnC,aAAa,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QAC1D,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,aAAa,CAAC,IAAI,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAA;AAC5C,CAAC;AAED,SAAS,aAAa,CAAC,WAAmB,EAAE,KAAa;IACvD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IACpE,CAAC;IACD,OAAO,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,YAAoB;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAA;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAA;IAC1D,OAAO,CACL,aAAa,CAAC,QAAQ,CAAC;QACvB,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClC,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CACpC,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,OAAO,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,oBAAoB,CAClC,KAA6C,EAC7C,MAA2B;IAE3B,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,MAAM,CAAA;AAC9D,CAAC;AAED,SAAS,iBAAiB,CACxB,YAAoB,EACpB,YAAoB,EACpB,MAAc,EACd,SAAiB,EACjB,KAAa;IAEb,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO;QACL,YAAY;QACZ,MAAM;QACN,SAAS,EAAE,SAAS,IAAI,YAAY;QACpC,KAAK;QACL,MAAM,EAAE,gBAAgB;QACxB,cAAc,EAAE,qBAAqB,CAAC,gBAAgB,EAAE,SAAS,IAAI,YAAY,CAAC;KACnF,CAAA;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,MAA2B,EAAE,SAAiB;IAC3E,IAAI,MAAM,KAAK,gBAAgB,EAAE,CAAC;QAChC,OAAO,+FAA+F,CAAA;IACxG,CAAC;IACD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,OAAO,2FAA2F,CAAA;IACpG,CAAC;IACD,IAAI,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACxC,OAAO,2IAA2I,CAAA;IACpJ,CAAC;IACD,IAAI,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,OAAO,wHAAwH,CAAA;IACjI,CAAC;IACD,IAAI,uBAAuB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3C,OAAO,iFAAiF,CAAA;IAC1F,CAAC;IACD,IAAI,wBAAwB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,OAAO,mDAAmD,CAAA;IAC5D,CAAC;IACD,OAAO,gIAAgI,CAAA;AACzI,CAAC"}
|