opencode-telos 1.0.0 → 1.0.2

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 (46) hide show
  1. package/dist/code-intelligence/ast/cache.d.ts.map +1 -1
  2. package/dist/code-intelligence/ast/cache.js +8 -5
  3. package/dist/code-intelligence/ast/cache.js.map +1 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +4 -1
  6. package/dist/index.js.map +1 -1
  7. package/dist/opencode/hooks.d.ts +1 -1
  8. package/dist/opencode/hooks.d.ts.map +1 -1
  9. package/dist/opencode/hooks.js +34 -40
  10. package/dist/opencode/hooks.js.map +1 -1
  11. package/dist/opencode/tools.d.ts.map +1 -1
  12. package/dist/opencode/tools.js +9 -8
  13. package/dist/opencode/tools.js.map +1 -1
  14. package/dist/sdd/cache/atomic.d.ts +3 -0
  15. package/dist/sdd/cache/atomic.d.ts.map +1 -0
  16. package/dist/sdd/cache/atomic.js +35 -0
  17. package/dist/sdd/cache/atomic.js.map +1 -0
  18. package/dist/sdd/cache/fingerprint.d.ts +18 -0
  19. package/dist/sdd/cache/fingerprint.d.ts.map +1 -0
  20. package/dist/sdd/cache/fingerprint.js +99 -0
  21. package/dist/sdd/cache/fingerprint.js.map +1 -0
  22. package/dist/sdd/cache/manager.d.ts +24 -10
  23. package/dist/sdd/cache/manager.d.ts.map +1 -1
  24. package/dist/sdd/cache/manager.js +184 -33
  25. package/dist/sdd/cache/manager.js.map +1 -1
  26. package/dist/sdd/cache/snapshot-store.d.ts +2 -1
  27. package/dist/sdd/cache/snapshot-store.d.ts.map +1 -1
  28. package/dist/sdd/cache/snapshot-store.js +13 -6
  29. package/dist/sdd/cache/snapshot-store.js.map +1 -1
  30. package/dist/sdd/persistence/sqlite.d.ts.map +1 -1
  31. package/dist/sdd/persistence/sqlite.js +66 -41
  32. package/dist/sdd/persistence/sqlite.js.map +1 -1
  33. package/dist/sdd/persistence/yaml.d.ts.map +1 -1
  34. package/dist/sdd/persistence/yaml.js +33 -25
  35. package/dist/sdd/persistence/yaml.js.map +1 -1
  36. package/package.json +1 -1
  37. package/src/code-intelligence/ast/cache.ts +11 -6
  38. package/src/index.ts +4 -1
  39. package/src/opencode/hooks.ts +34 -39
  40. package/src/opencode/tools.ts +9 -8
  41. package/src/sdd/cache/atomic.ts +30 -0
  42. package/src/sdd/cache/fingerprint.ts +98 -0
  43. package/src/sdd/cache/manager.ts +182 -39
  44. package/src/sdd/cache/snapshot-store.ts +14 -7
  45. package/src/sdd/persistence/sqlite.ts +50 -24
  46. package/src/sdd/persistence/yaml.ts +40 -26
@@ -0,0 +1,3 @@
1
+ /** Write a cache artifact so readers see either the old complete file or the new complete file. */
2
+ export declare function atomicWriteFile(filePath: string, content: string): void;
3
+ //# sourceMappingURL=atomic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic.d.ts","sourceRoot":"","sources":["../../../src/sdd/cache/atomic.ts"],"names":[],"mappings":"AAGA,mGAAmG;AACnG,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAyBvE"}
@@ -0,0 +1,35 @@
1
+ import { closeSync, existsSync, fsyncSync, mkdirSync, openSync, renameSync, writeFileSync } from "fs";
2
+ import { dirname } from "path";
3
+ /** Write a cache artifact so readers see either the old complete file or the new complete file. */
4
+ export function atomicWriteFile(filePath, content) {
5
+ const directory = dirname(filePath);
6
+ if (!existsSync(directory))
7
+ mkdirSync(directory, { recursive: true });
8
+ const temporaryPath = `${filePath}.tmp-${process.pid}-${Date.now()}`;
9
+ let descriptor;
10
+ try {
11
+ descriptor = openSync(temporaryPath, "w", 0o600);
12
+ writeFileSync(descriptor, content, "utf-8");
13
+ fsyncSync(descriptor);
14
+ closeSync(descriptor);
15
+ descriptor = undefined;
16
+ renameSync(temporaryPath, filePath);
17
+ }
18
+ finally {
19
+ if (descriptor !== undefined) {
20
+ try {
21
+ closeSync(descriptor);
22
+ }
23
+ catch { }
24
+ }
25
+ try {
26
+ // A failed rename must not leave a misleading cache artifact behind.
27
+ if (existsSync(temporaryPath)) {
28
+ const { unlinkSync } = require("fs");
29
+ unlinkSync(temporaryPath);
30
+ }
31
+ }
32
+ catch { }
33
+ }
34
+ }
35
+ //# sourceMappingURL=atomic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"atomic.js","sourceRoot":"","sources":["../../../src/sdd/cache/atomic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AACrG,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAE9B,mGAAmG;AACnG,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,OAAe;IAC/D,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IACnC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAAE,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IAErE,MAAM,aAAa,GAAG,GAAG,QAAQ,QAAQ,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAA;IACpE,IAAI,UAA8B,CAAA;IAClC,IAAI,CAAC;QACH,UAAU,GAAG,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE,KAAK,CAAC,CAAA;QAChD,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;QAC3C,SAAS,CAAC,UAAU,CAAC,CAAA;QACrB,SAAS,CAAC,UAAU,CAAC,CAAA;QACrB,UAAU,GAAG,SAAS,CAAA;QACtB,UAAU,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;IACrC,CAAC;YAAS,CAAC;QACT,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC;gBAAC,SAAS,CAAC,UAAU,CAAC,CAAA;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACxC,CAAC;QACD,IAAI,CAAC;YACH,qEAAqE;YACrE,IAAI,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC9B,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;gBACpC,UAAU,CAAC,aAAa,CAAC,CAAA;YAC3B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ import type { KnowledgeGraph } from "../domain/types.js";
2
+ export declare function stableSerialize(value: unknown): string;
3
+ export declare function sha256(value: string | Uint8Array): string;
4
+ /** Deterministic content fingerprint for the complete graph, independent of YAML/SQLite formatting. */
5
+ export declare function graphFingerprint(graph: KnowledgeGraph): string;
6
+ export declare function fileContentFingerprint(filePath: string): string;
7
+ /** Fast identity for external-file detection; includes all files when several files are supplied. */
8
+ export declare function fileSignature(filePaths: string[]): string;
9
+ export declare function configFingerprint(projectDir: string): string;
10
+ /** Content fingerprint for code-dependent analyses. The caller can cache this by fileSignature. */
11
+ export declare function sourceFingerprint(projectDir: string, previous?: {
12
+ fingerprint: string;
13
+ signature: string;
14
+ } | null): {
15
+ fingerprint: string;
16
+ signature: string;
17
+ };
18
+ //# sourceMappingURL=fingerprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../../src/sdd/cache/fingerprint.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAaxD,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQtD;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAEzD;AAED,uGAAuG;AACvG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAQ9D;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM/D;AAED,qGAAqG;AACrG,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAUzD;AAED,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAG5D;AAsBD,mGAAmG;AACnG,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,MAAM,EAClB,QAAQ,CAAC,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAC3D;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAM5C"}
@@ -0,0 +1,99 @@
1
+ import { createHash } from "crypto";
2
+ import { existsSync, readFileSync, readdirSync, statSync } from "fs";
3
+ import { join, relative } from "path";
4
+ const SOURCE_EXTENSIONS = new Set([
5
+ ".c", ".cc", ".cpp", ".cs", ".go", ".h", ".hpp", ".java", ".js", ".jsx",
6
+ ".json", ".kt", ".mjs", ".mts", ".py", ".rb", ".rs", ".svelte", ".swift",
7
+ ".ts", ".tsx", ".vue", ".yaml", ".yml",
8
+ ]);
9
+ const IGNORED_DIRECTORIES = new Set([
10
+ ".git", ".sdd", ".opencode", "node_modules", "dist", "build", "coverage",
11
+ ".cache", ".next", ".turbo", "target", "vendor",
12
+ ]);
13
+ export function stableSerialize(value) {
14
+ if (value === null)
15
+ return "null";
16
+ if (value === undefined)
17
+ return "undefined";
18
+ if (typeof value !== "object")
19
+ return JSON.stringify(value);
20
+ if (Array.isArray(value))
21
+ return `[${value.map(stableSerialize).join(",")}]`;
22
+ const record = value;
23
+ return `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${stableSerialize(record[key])}`).join(",")}}`;
24
+ }
25
+ export function sha256(value) {
26
+ return createHash("sha256").update(value).digest("hex");
27
+ }
28
+ /** Deterministic content fingerprint for the complete graph, independent of YAML/SQLite formatting. */
29
+ export function graphFingerprint(graph) {
30
+ return sha256(stableSerialize({
31
+ version: graph.version,
32
+ project_id: graph.project_id,
33
+ metadata: graph.metadata,
34
+ nodes: [...graph.nodes].sort((a, b) => a.id.localeCompare(b.id)),
35
+ relationships: [...graph.relationships].sort((a, b) => a.id.localeCompare(b.id)),
36
+ }));
37
+ }
38
+ export function fileContentFingerprint(filePath) {
39
+ try {
40
+ return sha256(readFileSync(filePath));
41
+ }
42
+ catch {
43
+ return sha256(`missing:${filePath}`);
44
+ }
45
+ }
46
+ /** Fast identity for external-file detection; includes all files when several files are supplied. */
47
+ export function fileSignature(filePaths) {
48
+ const parts = filePaths.map((filePath) => {
49
+ try {
50
+ const stat = statSync(filePath);
51
+ return `${filePath}:${stat.dev}:${stat.ino}:${stat.size}:${stat.mtimeMs}:${stat.ctimeMs}`;
52
+ }
53
+ catch {
54
+ return `${filePath}:missing`;
55
+ }
56
+ });
57
+ return sha256(parts.sort().join("\n"));
58
+ }
59
+ export function configFingerprint(projectDir) {
60
+ const path = join(projectDir, ".sdd", "config.json");
61
+ return existsSync(path) ? fileContentFingerprint(path) : sha256("missing-config");
62
+ }
63
+ function sourceFiles(projectDir) {
64
+ const files = [];
65
+ const visit = (directory) => {
66
+ let entries;
67
+ try {
68
+ entries = readdirSync(directory, { withFileTypes: true });
69
+ }
70
+ catch {
71
+ return;
72
+ }
73
+ for (const entry of entries) {
74
+ if (entry.isSymbolicLink())
75
+ continue;
76
+ const path = join(directory, entry.name);
77
+ if (entry.isDirectory()) {
78
+ if (!IGNORED_DIRECTORIES.has(entry.name))
79
+ visit(path);
80
+ continue;
81
+ }
82
+ const extension = entry.name.slice(entry.name.lastIndexOf(".")).toLowerCase();
83
+ if (SOURCE_EXTENSIONS.has(extension))
84
+ files.push(path);
85
+ }
86
+ };
87
+ visit(projectDir);
88
+ return files.sort();
89
+ }
90
+ /** Content fingerprint for code-dependent analyses. The caller can cache this by fileSignature. */
91
+ export function sourceFingerprint(projectDir, previous) {
92
+ const files = sourceFiles(projectDir);
93
+ const signature = fileSignature(files);
94
+ if (previous?.signature === signature)
95
+ return previous;
96
+ const content = files.map((path) => `${relative(projectDir, path)}:${fileContentFingerprint(path)}`).join("\n");
97
+ return { fingerprint: sha256(content), signature };
98
+ }
99
+ //# sourceMappingURL=fingerprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../../src/sdd/cache/fingerprint.ts"],"names":[],"mappings":"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"}
@@ -6,27 +6,31 @@ interface ToolCacheEntry {
6
6
  lastAccess: number;
7
7
  toolName: string;
8
8
  argsHash: string;
9
- graphVersion: string;
9
+ graphFingerprint: string;
10
+ configFingerprint: string;
11
+ sourceFingerprint?: string;
10
12
  }
11
13
  interface AnalysisCacheEntry {
12
14
  result: unknown;
13
15
  timestamp: number;
14
16
  lastAccess: number;
15
- graphVersion: number;
16
- nodeCount: number;
17
+ graphFingerprint: string;
18
+ configFingerprint: string;
19
+ sourceFingerprint?: string;
17
20
  type: string;
18
21
  }
19
22
  interface PersistentCacheData {
20
23
  version: number;
21
24
  toolResponses: Record<string, ToolCacheEntry>;
22
25
  analysisResults: Record<string, AnalysisCacheEntry>;
23
- graphSnapshot: {
26
+ graphSnapshot?: {
24
27
  nodeCount: number;
25
28
  relationshipCount: number;
26
29
  version: string;
27
30
  lastModified: number;
28
31
  } | null;
29
- graphHash: string;
32
+ graphHash?: string;
33
+ configFingerprint?: string;
30
34
  }
31
35
  export declare class CacheManager {
32
36
  private projectDir;
@@ -36,6 +40,9 @@ export declare class CacheManager {
36
40
  private invalidationVersionOnWrite;
37
41
  private graphCache;
38
42
  private graphHash;
43
+ private sourceFingerprintCache;
44
+ private invalidationJournalOffset;
45
+ private invalidationEventCounter;
39
46
  private stats;
40
47
  constructor(projectDir: string);
41
48
  /**
@@ -43,21 +50,21 @@ export declare class CacheManager {
43
50
  * Checks: TTL (using lastAccess for freshness), graph version, invalidation status.
44
51
  * F: Uses lazy revalidation — checks version before clearing.
45
52
  */
46
- getToolResponse(toolName: string, args: Record<string, unknown>, graphVersion: string): string | null;
53
+ getToolResponse(toolName: string, args: Record<string, unknown>, currentGraphFingerprint: string): string | null;
47
54
  /**
48
55
  * Cache a tool response.
49
56
  */
50
- setToolResponse(toolName: string, args: Record<string, unknown>, response: string, graphVersion: string): void;
57
+ setToolResponse(toolName: string, args: Record<string, unknown>, response: string, currentGraphFingerprint: string): void;
51
58
  /**
52
59
  * Get cached analysis result (validate, drift, quality, etc.).
53
60
  * Revalidates based on graph state.
54
61
  * F: Uses lazy revalidation.
55
62
  */
56
- getAnalysisResult(type: string, graphVersion: number, nodeCount: number): unknown | null;
63
+ getAnalysisResult(type: string, currentGraphFingerprint: string): unknown | null;
57
64
  /**
58
65
  * Cache an analysis result.
59
66
  */
60
- setAnalysisResult(type: string, result: unknown, graphVersion: number, nodeCount: number): void;
67
+ setAnalysisResult(type: string, result: unknown, currentGraphFingerprint: string): void;
61
68
  /**
62
69
  * Mark specific node IDs as dirty.
63
70
  */
@@ -102,7 +109,7 @@ export declare class CacheManager {
102
109
  * Save graph snapshot to disk (G).
103
110
  * Called after graph mutations and on dispose.
104
111
  */
105
- saveGraphSnapshot(graph: KnowledgeGraph): void;
112
+ saveGraphSnapshot(graph: KnowledgeGraph, sourceSignature?: string): void;
106
113
  /**
107
114
  * Load graph snapshot from disk (G).
108
115
  * Returns null if no valid snapshot exists.
@@ -110,6 +117,7 @@ export declare class CacheManager {
110
117
  loadGraphSnapshot(): {
111
118
  graph: KnowledgeGraph;
112
119
  graphHash: string;
120
+ sourceSignature: string;
113
121
  } | null;
114
122
  /**
115
123
  * Invalidate graph snapshot on disk.
@@ -148,6 +156,8 @@ export declare class CacheManager {
148
156
  * Sync invalidation version after external write.
149
157
  */
150
158
  syncInvalidationVersion(): void;
159
+ /** Refresh cache state from durable invalidation events written by another process. */
160
+ refreshExternalInvalidation(): boolean;
151
161
  /**
152
162
  * Get cached nodes for a specific type.
153
163
  * Only returns if the cache version matches.
@@ -231,6 +241,10 @@ export declare class CacheManager {
231
241
  private evictOldestToolEntries;
232
242
  private loadInvalidationTracker;
233
243
  private saveInvalidationTracker;
244
+ private appendInvalidationEvent;
245
+ private toolNeedsSource;
246
+ private analysisNeedsSource;
247
+ private getSourceFingerprint;
234
248
  }
235
249
  export declare function getCacheManager(projectDir: string): CacheManager;
236
250
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/sdd/cache/manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/sdd/cache/manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAcxD,UAAU,cAAc;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,UAAU,kBAAkB;IAC1B,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,iBAAiB,EAAE,MAAM,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;IAC7C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAA;IACnD,aAAa,CAAC,EAAE;QACd,SAAS,EAAE,MAAM,CAAA;QACjB,iBAAiB,EAAE,MAAM,CAAA;QACzB,OAAO,EAAE,MAAM,CAAA;QACf,YAAY,EAAE,MAAM,CAAA;KACrB,GAAG,IAAI,CAAA;IACR,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B;AA8BD,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAQ;IAG1B,OAAO,CAAC,aAAa,CAAyC;IAC9D,OAAO,CAAC,eAAe,CAA6C;IAGpE,OAAO,CAAC,YAAY,CAMnB;IAGD,OAAO,CAAC,0BAA0B,CAAY;IAG9C,OAAO,CAAC,UAAU,CAA0B;IAG5C,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,sBAAsB,CAA0D;IACxF,OAAO,CAAC,yBAAyB,CAAI;IACrC,OAAO,CAAC,wBAAwB,CAAI;IAGpC,OAAO,CAAC,KAAK,CAMZ;gBAEW,UAAU,EAAE,MAAM;IAS9B;;;;OAIG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAiDhH;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,uBAAuB,EAAE,MAAM,GAAG,IAAI;IAsBzH;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,uBAAuB,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAgDhF;;OAEG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,EAAE,MAAM,GAAG,IAAI;IAgBvF;;OAEG;IACH,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI;IAStC;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IASzC;;;OAGG;IACH,aAAa,IAAI,IAAI;IAcrB;;;;OAIG;IACH,iBAAiB,CAAC,gBAAgB,EAAE,MAAM,EAAE,EAAE,eAAe,GAAE,MAAM,EAAO,GAAG,IAAI;IAoBnF;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAuBxD;;OAEG;IACH,mBAAmB,IAAI,mBAAmB,GAAG,IAAI;IAmBjD;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,GAAG,IAAI;IAOpD;;;OAGG;IACH,0BAA0B,IAAI,MAAM;IA0CpC;;OAEG;IACH,aAAa,IAAI,IAAI;IAoCrB;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,cAAc,EAAE,eAAe,SAAK,GAAG,IAAI;IAOpE;;;OAGG;IACH,iBAAiB,IAAI;QAAE,KAAK,EAAE,cAAc,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IASjG;;OAEG;IACH,uBAAuB,IAAI,IAAI;IAS/B;;;OAGG;IACH,6BAA6B,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAkCzD;;OAEG;IACH,gBAAgB,IAAI,OAAO;IAgC3B;;OAEG;IACH,gBAAgB,IAAI,IAAI;IAcxB;;;OAGG;IACH,SAAS,IAAI;QAAE,OAAO,EAAE;YAAE,MAAM,EAAE,OAAO,CAAC;YAAC,IAAI,EAAE,OAAO,CAAC;YAAC,QAAQ,EAAE,OAAO,CAAC;YAAC,IAAI,EAAE,OAAO,CAAA;SAAE,CAAA;KAAE;IAiD9F;;OAEG;IACH,sBAAsB,IAAI,MAAM;IAIhC;;OAEG;IACH,uBAAuB,IAAI,IAAI;IAI/B,uFAAuF;IACvF,2BAA2B,IAAI,OAAO;IA0CtC;;;OAGG;IACH,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,IAAI;IAI5E;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAIlF;;;OAGG;IACH,kBAAkB,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAKxC;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAU1C;;OAEG;IACH,sBAAsB,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,EAAE,GAAG,IAAI;IAInE;;OAEG;IACH,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,YAAY,EAAE,MAAM,GAAG,IAAI;IAMxE;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAIxD;;OAEG;IACH,kBAAkB,CAAC,KAAK,GAAE,MAAU,GAAG,IAAI;IAI3C;;OAEG;IACH,iBAAiB,CAAC,KAAK,GAAE,MAAU,GAAG,IAAI;IAI1C;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAI/C;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAM9B,QAAQ;;;;;;;;;;;;IAiBR,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,4BAA4B;IASpC,OAAO,CAAC,gCAAgC;IAQxC;;;;OAIG;IACH,OAAO,CAAC,0BAA0B;IAQlC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,qBAAqB;IAqB7B,OAAO,CAAC,yBAAyB;IAejC,OAAO,CAAC,2BAA2B;IAkBnC,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,yBAAyB;IAOjC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,uBAAuB;IAa/B,OAAO,CAAC,uBAAuB;IA0B/B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,oBAAoB;CAK7B;AAMD,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,CAOhE"}