@tienne/gestalt 0.87.0 → 0.89.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 (280) hide show
  1. package/CLAUDE.md +12 -4
  2. package/README.ko.md +2 -1
  3. package/README.md +3 -1
  4. package/dist/bin/gestalt-hook.d.ts +5 -0
  5. package/dist/bin/gestalt-hook.d.ts.map +1 -0
  6. package/dist/bin/gestalt-hook.js +51 -0
  7. package/dist/bin/gestalt-hook.js.map +1 -0
  8. package/dist/package.json +5 -3
  9. package/dist/plugin/skills/_shared/proactive-routing.md +1 -0
  10. package/dist/plugin/skills/architecture/SKILL.md +913 -0
  11. package/dist/plugin/skills/blast-radius/SKILL.md +11 -1
  12. package/dist/plugin/skills/diff-radius/SKILL.md +11 -0
  13. package/dist/schemas/architecture-ir.schema.json +596 -0
  14. package/dist/schemas/gestalt.schema.json +19 -0
  15. package/dist/src/architecture/canvas-geometry.d.ts +40 -0
  16. package/dist/src/architecture/canvas-geometry.d.ts.map +1 -0
  17. package/dist/src/architecture/canvas-geometry.js +212 -0
  18. package/dist/src/architecture/canvas-geometry.js.map +1 -0
  19. package/dist/src/architecture/codeowners.d.ts +16 -0
  20. package/dist/src/architecture/codeowners.d.ts.map +1 -0
  21. package/dist/src/architecture/codeowners.js +58 -0
  22. package/dist/src/architecture/codeowners.js.map +1 -0
  23. package/dist/src/architecture/compare-layout.d.ts +27 -0
  24. package/dist/src/architecture/compare-layout.d.ts.map +1 -0
  25. package/dist/src/architecture/compare-layout.js +72 -0
  26. package/dist/src/architecture/compare-layout.js.map +1 -0
  27. package/dist/src/architecture/dataflow-layout.d.ts +29 -0
  28. package/dist/src/architecture/dataflow-layout.d.ts.map +1 -0
  29. package/dist/src/architecture/dataflow-layout.js +229 -0
  30. package/dist/src/architecture/dataflow-layout.js.map +1 -0
  31. package/dist/src/architecture/doc-fresh.d.ts +31 -0
  32. package/dist/src/architecture/doc-fresh.d.ts.map +1 -0
  33. package/dist/src/architecture/doc-fresh.js +84 -0
  34. package/dist/src/architecture/doc-fresh.js.map +1 -0
  35. package/dist/src/architecture/doc-link.d.ts +84 -0
  36. package/dist/src/architecture/doc-link.d.ts.map +1 -0
  37. package/dist/src/architecture/doc-link.js +396 -0
  38. package/dist/src/architecture/doc-link.js.map +1 -0
  39. package/dist/src/architecture/doc-routes.d.ts +39 -0
  40. package/dist/src/architecture/doc-routes.d.ts.map +1 -0
  41. package/dist/src/architecture/doc-routes.js +123 -0
  42. package/dist/src/architecture/doc-routes.js.map +1 -0
  43. package/dist/src/architecture/doc-scan.d.ts +107 -0
  44. package/dist/src/architecture/doc-scan.d.ts.map +1 -0
  45. package/dist/src/architecture/doc-scan.js +617 -0
  46. package/dist/src/architecture/doc-scan.js.map +1 -0
  47. package/dist/src/architecture/doc-stale.d.ts +32 -0
  48. package/dist/src/architecture/doc-stale.d.ts.map +1 -0
  49. package/dist/src/architecture/doc-stale.js +60 -0
  50. package/dist/src/architecture/doc-stale.js.map +1 -0
  51. package/dist/src/architecture/drilldown.d.ts +51 -0
  52. package/dist/src/architecture/drilldown.d.ts.map +1 -0
  53. package/dist/src/architecture/drilldown.js +1160 -0
  54. package/dist/src/architecture/drilldown.js.map +1 -0
  55. package/dist/src/architecture/endpoint-match.d.ts +43 -0
  56. package/dist/src/architecture/endpoint-match.d.ts.map +1 -0
  57. package/dist/src/architecture/endpoint-match.js +133 -0
  58. package/dist/src/architecture/endpoint-match.js.map +1 -0
  59. package/dist/src/architecture/flow-layout.d.ts +79 -0
  60. package/dist/src/architecture/flow-layout.d.ts.map +1 -0
  61. package/dist/src/architecture/flow-layout.js +519 -0
  62. package/dist/src/architecture/flow-layout.js.map +1 -0
  63. package/dist/src/architecture/focus.d.ts +14 -0
  64. package/dist/src/architecture/focus.d.ts.map +1 -0
  65. package/dist/src/architecture/focus.js +107 -0
  66. package/dist/src/architecture/focus.js.map +1 -0
  67. package/dist/src/architecture/global-context.d.ts +23 -0
  68. package/dist/src/architecture/global-context.d.ts.map +1 -0
  69. package/dist/src/architecture/global-context.js +67 -0
  70. package/dist/src/architecture/global-context.js.map +1 -0
  71. package/dist/src/architecture/html-client.d.ts +35 -0
  72. package/dist/src/architecture/html-client.d.ts.map +1 -0
  73. package/dist/src/architecture/html-client.js +1852 -0
  74. package/dist/src/architecture/html-client.js.map +1 -0
  75. package/dist/src/architecture/html-renderer.d.ts +22 -0
  76. package/dist/src/architecture/html-renderer.d.ts.map +1 -0
  77. package/dist/src/architecture/html-renderer.js +1290 -0
  78. package/dist/src/architecture/html-renderer.js.map +1 -0
  79. package/dist/src/architecture/html-theme.d.ts +25 -0
  80. package/dist/src/architecture/html-theme.d.ts.map +1 -0
  81. package/dist/src/architecture/html-theme.js +681 -0
  82. package/dist/src/architecture/html-theme.js.map +1 -0
  83. package/dist/src/architecture/index.d.ts +9 -0
  84. package/dist/src/architecture/index.d.ts.map +1 -0
  85. package/dist/src/architecture/index.js +9 -0
  86. package/dist/src/architecture/index.js.map +1 -0
  87. package/dist/src/architecture/ir-schema.d.ts +1832 -0
  88. package/dist/src/architecture/ir-schema.d.ts.map +1 -0
  89. package/dist/src/architecture/ir-schema.js +343 -0
  90. package/dist/src/architecture/ir-schema.js.map +1 -0
  91. package/dist/src/architecture/kind-text.d.ts +21 -0
  92. package/dist/src/architecture/kind-text.d.ts.map +1 -0
  93. package/dist/src/architecture/kind-text.js +42 -0
  94. package/dist/src/architecture/kind-text.js.map +1 -0
  95. package/dist/src/architecture/layout.d.ts +227 -0
  96. package/dist/src/architecture/layout.d.ts.map +1 -0
  97. package/dist/src/architecture/layout.js +627 -0
  98. package/dist/src/architecture/layout.js.map +1 -0
  99. package/dist/src/architecture/mcp-tool-match.d.ts +49 -0
  100. package/dist/src/architecture/mcp-tool-match.d.ts.map +1 -0
  101. package/dist/src/architecture/mcp-tool-match.js +53 -0
  102. package/dist/src/architecture/mcp-tool-match.js.map +1 -0
  103. package/dist/src/architecture/merge.d.ts +54 -0
  104. package/dist/src/architecture/merge.d.ts.map +1 -0
  105. package/dist/src/architecture/merge.js +681 -0
  106. package/dist/src/architecture/merge.js.map +1 -0
  107. package/dist/src/architecture/micro-app.d.ts +20 -0
  108. package/dist/src/architecture/micro-app.d.ts.map +1 -0
  109. package/dist/src/architecture/micro-app.js +41 -0
  110. package/dist/src/architecture/micro-app.js.map +1 -0
  111. package/dist/src/architecture/name-ref-match.d.ts +43 -0
  112. package/dist/src/architecture/name-ref-match.d.ts.map +1 -0
  113. package/dist/src/architecture/name-ref-match.js +127 -0
  114. package/dist/src/architecture/name-ref-match.js.map +1 -0
  115. package/dist/src/architecture/packs/data.d.ts +109 -0
  116. package/dist/src/architecture/packs/data.d.ts.map +1 -0
  117. package/dist/src/architecture/packs/data.js +64 -0
  118. package/dist/src/architecture/packs/data.js.map +1 -0
  119. package/dist/src/architecture/packs/generic.d.ts +47 -0
  120. package/dist/src/architecture/packs/generic.d.ts.map +1 -0
  121. package/dist/src/architecture/packs/generic.js +35 -0
  122. package/dist/src/architecture/packs/generic.js.map +1 -0
  123. package/dist/src/architecture/packs/harness.d.ts +96 -0
  124. package/dist/src/architecture/packs/harness.d.ts.map +1 -0
  125. package/dist/src/architecture/packs/harness.js +66 -0
  126. package/dist/src/architecture/packs/harness.js.map +1 -0
  127. package/dist/src/architecture/packs/index.d.ts +840 -0
  128. package/dist/src/architecture/packs/index.d.ts.map +1 -0
  129. package/dist/src/architecture/packs/index.js +87 -0
  130. package/dist/src/architecture/packs/index.js.map +1 -0
  131. package/dist/src/architecture/packs/infra.d.ts +91 -0
  132. package/dist/src/architecture/packs/infra.d.ts.map +1 -0
  133. package/dist/src/architecture/packs/infra.js +57 -0
  134. package/dist/src/architecture/packs/infra.js.map +1 -0
  135. package/dist/src/architecture/packs/knowledge.d.ts +72 -0
  136. package/dist/src/architecture/packs/knowledge.d.ts.map +1 -0
  137. package/dist/src/architecture/packs/knowledge.js +58 -0
  138. package/dist/src/architecture/packs/knowledge.js.map +1 -0
  139. package/dist/src/architecture/packs/process.d.ts +87 -0
  140. package/dist/src/architecture/packs/process.d.ts.map +1 -0
  141. package/dist/src/architecture/packs/process.js +52 -0
  142. package/dist/src/architecture/packs/process.js.map +1 -0
  143. package/dist/src/architecture/packs/render-classes.d.ts +11 -0
  144. package/dist/src/architecture/packs/render-classes.d.ts.map +1 -0
  145. package/dist/src/architecture/packs/render-classes.js +92 -0
  146. package/dist/src/architecture/packs/render-classes.js.map +1 -0
  147. package/dist/src/architecture/packs/types.d.ts +66 -0
  148. package/dist/src/architecture/packs/types.d.ts.map +1 -0
  149. package/dist/src/architecture/packs/types.js +18 -0
  150. package/dist/src/architecture/packs/types.js.map +1 -0
  151. package/dist/src/architecture/packs/web-product.d.ts +348 -0
  152. package/dist/src/architecture/packs/web-product.d.ts.map +1 -0
  153. package/dist/src/architecture/packs/web-product.js +226 -0
  154. package/dist/src/architecture/packs/web-product.js.map +1 -0
  155. package/dist/src/architecture/sequence-layout.d.ts +50 -0
  156. package/dist/src/architecture/sequence-layout.d.ts.map +1 -0
  157. package/dist/src/architecture/sequence-layout.js +140 -0
  158. package/dist/src/architecture/sequence-layout.js.map +1 -0
  159. package/dist/src/architecture/service-facts.d.ts +30 -0
  160. package/dist/src/architecture/service-facts.d.ts.map +1 -0
  161. package/dist/src/architecture/service-facts.js +88 -0
  162. package/dist/src/architecture/service-facts.js.map +1 -0
  163. package/dist/src/architecture/store.d.ts +50 -0
  164. package/dist/src/architecture/store.d.ts.map +1 -0
  165. package/dist/src/architecture/store.js +320 -0
  166. package/dist/src/architecture/store.js.map +1 -0
  167. package/dist/src/architecture/types.d.ts +400 -0
  168. package/dist/src/architecture/types.d.ts.map +1 -0
  169. package/dist/src/architecture/types.js +75 -0
  170. package/dist/src/architecture/types.js.map +1 -0
  171. package/dist/src/architecture/validator.d.ts +65 -0
  172. package/dist/src/architecture/validator.d.ts.map +1 -0
  173. package/dist/src/architecture/validator.js +1249 -0
  174. package/dist/src/architecture/validator.js.map +1 -0
  175. package/dist/src/code-graph/cochange.d.ts +40 -0
  176. package/dist/src/code-graph/cochange.d.ts.map +1 -1
  177. package/dist/src/code-graph/cochange.js +88 -3
  178. package/dist/src/code-graph/cochange.js.map +1 -1
  179. package/dist/src/code-graph/engine.d.ts +35 -1
  180. package/dist/src/code-graph/engine.d.ts.map +1 -1
  181. package/dist/src/code-graph/engine.js +300 -55
  182. package/dist/src/code-graph/engine.js.map +1 -1
  183. package/dist/src/code-graph/freshness.d.ts +39 -0
  184. package/dist/src/code-graph/freshness.d.ts.map +1 -0
  185. package/dist/src/code-graph/freshness.js +93 -0
  186. package/dist/src/code-graph/freshness.js.map +1 -0
  187. package/dist/src/code-graph/hooks/background.d.ts +18 -0
  188. package/dist/src/code-graph/hooks/background.d.ts.map +1 -0
  189. package/dist/src/code-graph/hooks/background.js +55 -0
  190. package/dist/src/code-graph/hooks/background.js.map +1 -0
  191. package/dist/src/code-graph/hooks/pointers.d.ts +66 -0
  192. package/dist/src/code-graph/hooks/pointers.d.ts.map +1 -0
  193. package/dist/src/code-graph/hooks/pointers.js +292 -0
  194. package/dist/src/code-graph/hooks/pointers.js.map +1 -0
  195. package/dist/src/code-graph/hooks/rank.d.ts +36 -0
  196. package/dist/src/code-graph/hooks/rank.d.ts.map +1 -0
  197. package/dist/src/code-graph/hooks/rank.js +212 -0
  198. package/dist/src/code-graph/hooks/rank.js.map +1 -0
  199. package/dist/src/code-graph/hooks/run.d.ts +37 -0
  200. package/dist/src/code-graph/hooks/run.d.ts.map +1 -0
  201. package/dist/src/code-graph/hooks/run.js +324 -0
  202. package/dist/src/code-graph/hooks/run.js.map +1 -0
  203. package/dist/src/code-graph/hooks/settings.d.ts +11 -0
  204. package/dist/src/code-graph/hooks/settings.d.ts.map +1 -0
  205. package/dist/src/code-graph/hooks/settings.js +25 -0
  206. package/dist/src/code-graph/hooks/settings.js.map +1 -0
  207. package/dist/src/code-graph/hooks/state.d.ts +20 -0
  208. package/dist/src/code-graph/hooks/state.d.ts.map +1 -0
  209. package/dist/src/code-graph/hooks/state.js +73 -0
  210. package/dist/src/code-graph/hooks/state.js.map +1 -0
  211. package/dist/src/code-graph/index.d.ts +6 -2
  212. package/dist/src/code-graph/index.d.ts.map +1 -1
  213. package/dist/src/code-graph/index.js +3 -1
  214. package/dist/src/code-graph/index.js.map +1 -1
  215. package/dist/src/code-graph/ko-text.d.ts +39 -0
  216. package/dist/src/code-graph/ko-text.d.ts.map +1 -0
  217. package/dist/src/code-graph/ko-text.js +223 -0
  218. package/dist/src/code-graph/ko-text.js.map +1 -0
  219. package/dist/src/code-graph/lock.d.ts +30 -0
  220. package/dist/src/code-graph/lock.d.ts.map +1 -0
  221. package/dist/src/code-graph/lock.js +140 -0
  222. package/dist/src/code-graph/lock.js.map +1 -0
  223. package/dist/src/code-graph/plugins/typescript-skeleton.d.ts +7 -0
  224. package/dist/src/code-graph/plugins/typescript-skeleton.d.ts.map +1 -0
  225. package/dist/src/code-graph/plugins/typescript-skeleton.js +157 -0
  226. package/dist/src/code-graph/plugins/typescript-skeleton.js.map +1 -0
  227. package/dist/src/code-graph/plugins/typescript.d.ts.map +1 -1
  228. package/dist/src/code-graph/plugins/typescript.js +58 -0
  229. package/dist/src/code-graph/plugins/typescript.js.map +1 -1
  230. package/dist/src/code-graph/storage.d.ts +85 -0
  231. package/dist/src/code-graph/storage.d.ts.map +1 -1
  232. package/dist/src/code-graph/storage.js +318 -3
  233. package/dist/src/code-graph/storage.js.map +1 -1
  234. package/dist/src/code-graph/types.d.ts +66 -0
  235. package/dist/src/code-graph/types.d.ts.map +1 -1
  236. package/dist/src/core/config.d.ts +33 -0
  237. package/dist/src/core/config.d.ts.map +1 -1
  238. package/dist/src/core/config.js +14 -0
  239. package/dist/src/core/config.js.map +1 -1
  240. package/dist/src/core/errors.d.ts +4 -0
  241. package/dist/src/core/errors.d.ts.map +1 -1
  242. package/dist/src/core/errors.js +8 -0
  243. package/dist/src/core/errors.js.map +1 -1
  244. package/dist/src/core/hooks-env.d.ts +9 -0
  245. package/dist/src/core/hooks-env.d.ts.map +1 -0
  246. package/dist/src/core/hooks-env.js +16 -0
  247. package/dist/src/core/hooks-env.js.map +1 -0
  248. package/dist/src/mcp/schemas.d.ts +326 -3
  249. package/dist/src/mcp/schemas.d.ts.map +1 -1
  250. package/dist/src/mcp/schemas.js +170 -2
  251. package/dist/src/mcp/schemas.js.map +1 -1
  252. package/dist/src/mcp/server.d.ts.map +1 -1
  253. package/dist/src/mcp/server.js +28 -4
  254. package/dist/src/mcp/server.js.map +1 -1
  255. package/dist/src/mcp/tools/architecture-passthrough.d.ts +9 -0
  256. package/dist/src/mcp/tools/architecture-passthrough.d.ts.map +1 -0
  257. package/dist/src/mcp/tools/architecture-passthrough.js +587 -0
  258. package/dist/src/mcp/tools/architecture-passthrough.js.map +1 -0
  259. package/dist/src/mcp/tools/code-graph-passthrough.d.ts +6 -1
  260. package/dist/src/mcp/tools/code-graph-passthrough.d.ts.map +1 -1
  261. package/dist/src/mcp/tools/code-graph-passthrough.js +95 -6
  262. package/dist/src/mcp/tools/code-graph-passthrough.js.map +1 -1
  263. package/dist/src/utils/claude-projects.d.ts +19 -0
  264. package/dist/src/utils/claude-projects.d.ts.map +1 -0
  265. package/dist/src/utils/claude-projects.js +157 -0
  266. package/dist/src/utils/claude-projects.js.map +1 -0
  267. package/dist/src/utils/read-only-tools.d.ts +19 -0
  268. package/dist/src/utils/read-only-tools.d.ts.map +1 -0
  269. package/dist/src/utils/read-only-tools.js +132 -0
  270. package/dist/src/utils/read-only-tools.js.map +1 -0
  271. package/package.json +5 -3
  272. package/plugin/.codex-plugin/plugin.json +1 -1
  273. package/plugin/.mcp.json +1 -1
  274. package/plugin/mcp.json +1 -1
  275. package/plugin/skills/_shared/proactive-routing.md +1 -0
  276. package/plugin/skills/architecture/SKILL.md +913 -0
  277. package/plugin/skills/blast-radius/SKILL.md +11 -1
  278. package/plugin/skills/diff-radius/SKILL.md +11 -0
  279. package/schemas/architecture-ir.schema.json +596 -0
  280. package/schemas/gestalt.schema.json +19 -0
@@ -1,8 +1,9 @@
1
- import { readFileSync, existsSync, readdirSync } from 'node:fs';
2
- import { createHash } from 'node:crypto';
3
- import { join, resolve } from 'node:path';
1
+ import { readFileSync, existsSync, readdirSync, statSync } from 'node:fs';
2
+ import { join, resolve, sep } from 'node:path';
4
3
  import { execSync } from 'node:child_process';
5
4
  import { CodeGraphStore } from './storage.js';
5
+ import { detectDrift, hasAnyDrift, hasStructuralDrift, hashContent, } from './freshness.js';
6
+ import { acquireLock } from './lock.js';
6
7
  import { computeBlastRadius } from './blast-radius.js';
7
8
  import { getPluginForFile } from './plugins/index.js';
8
9
  import { syncCoChange, queryCoChange, buildCoChangeLookup } from './cochange.js';
@@ -16,29 +17,70 @@ function getFilesRecursively(repoRoot, excludePatterns, include) {
16
17
  const includeRoots = include
17
18
  ?.filter((p) => !p.startsWith('**'))
18
19
  .map((p) => p.replace(/\*\*.*$/, '').replace(/\/$/, ''));
20
+ // recursive 모드는 다 훑은 뒤에야 거를 수 있어 node_modules 같은 제외 디렉토리까지
21
+ // 내려간다. 이 레포에서 목록 하나 뽑는 데 0.5초가 넘게 걸려 질의마다 돌리기엔
22
+ // 무겁다. 그래서 직접 내려가며 제외 디렉토리는 아예 열지 않는다
19
23
  const results = [];
20
- try {
21
- const entries = readdirSync(repoRoot, { withFileTypes: true, recursive: true });
24
+ const walk = (dir) => {
25
+ let entries;
26
+ try {
27
+ entries = readdirSync(dir, { withFileTypes: true });
28
+ }
29
+ catch {
30
+ return; // directory doesn't exist or not readable
31
+ }
22
32
  for (const entry of entries) {
23
- if (!entry.isFile())
33
+ if (excludeSegments.has(entry.name))
24
34
  continue;
25
- const fullPath = join(entry.parentPath, entry.name);
26
- const rel = fullPath.slice(repoRoot.length + 1);
27
- const segments = rel.split('/');
28
- if (segments.some((s) => excludeSegments.has(s)))
35
+ const fullPath = join(dir, entry.name);
36
+ if (entry.isDirectory()) {
37
+ walk(fullPath);
38
+ continue;
39
+ }
40
+ if (!entry.isFile())
29
41
  continue;
30
42
  if (excludeSuffixes.some((s) => entry.name.endsWith(s)))
31
43
  continue;
44
+ const rel = fullPath.slice(repoRoot.length + 1);
32
45
  if (includeRoots && includeRoots.length > 0 && !includeRoots.some((r) => rel.startsWith(r)))
33
46
  continue;
34
47
  results.push(fullPath);
35
48
  }
36
- }
37
- catch {
38
- // directory doesn't exist or not readable
39
- }
49
+ };
50
+ walk(repoRoot);
40
51
  return results;
41
52
  }
53
+ const SCOPE_META_KEY = 'build_scope';
54
+ /**
55
+ * 노드 주석 색인 버전. 파일이 안 바뀌면 다시 파싱하지 않으니, 색인이 생기기 전 DB나
56
+ * 추출 규칙이 바뀐 DB는 이 값이 다를 때 한 번 전량 파싱한다.
57
+ */
58
+ const DOC_INDEX_KEY = 'doc_index_version';
59
+ const DOC_INDEX_VERSION = '1';
60
+ export const STALE_MESSAGE = '갱신 중이라 이전 그래프 기준';
61
+ export const REINDEX_PENDING_MESSAGE = '다시 파싱할 파일이 많아 백그라운드로 넘기고 이전 그래프 기준';
62
+ /**
63
+ * 질의 직전 최신화가 그 자리에서 다시 파싱할 파일 수의 상한. 넘으면 질의를 붙잡지 않고
64
+ * 이전 그래프로 답한다. 락 대기 상한(1.5초)과 같은 시간을 넘기지 않게 잡았다.
65
+ * 파일당 파싱 비용은 gestalt(484개, 1.6초) 약 3.4ms, 모노레포(8118개, 56초) 약 6.9ms라
66
+ * 느린 쪽 기준 200개면 1.4초쯤이다.
67
+ */
68
+ export const MAX_INLINE_PARSE = 200;
69
+ function planFromDrift(drift) {
70
+ return {
71
+ toParse: [...drift.added, ...drift.modified].map((f) => f.filePath),
72
+ removed: drift.removed,
73
+ touched: drift.touched,
74
+ };
75
+ }
76
+ function driftCounts(drift) {
77
+ return {
78
+ added: drift.added.length,
79
+ modified: drift.modified.length,
80
+ removed: drift.removed.length,
81
+ touched: drift.touched.length,
82
+ };
83
+ }
42
84
  const DEFAULT_EXCLUDE = [
43
85
  'node_modules/**',
44
86
  '.git/**',
@@ -53,6 +95,9 @@ export class CodeGraphEngine {
53
95
  getDbPath(repoRoot) {
54
96
  return join(repoRoot, '.gestalt', 'code-graph.db');
55
97
  }
98
+ getLockPath(repoRoot) {
99
+ return join(repoRoot, '.gestalt', 'code-graph.lock');
100
+ }
56
101
  getStore(repoRoot) {
57
102
  const dbPath = this.getDbPath(repoRoot);
58
103
  if (!this.storeCache.has(dbPath)) {
@@ -62,73 +107,195 @@ export class CodeGraphEngine {
62
107
  }
63
108
  /**
64
109
  * Build or incrementally update the code graph for a repository.
110
+ *
111
+ * incremental은 드리프트 검사로 바뀐 파일만 고른다. stat이 그대로인 파일은 읽지 않는다.
112
+ * 두 모드 모두 디스크에서 사라진 파일의 노드와 엣지를 지운다.
65
113
  */
66
114
  build(repoRoot, opts = {}) {
67
115
  const start = Date.now();
68
116
  const store = this.getStore(repoRoot);
69
- const { include, exclude = [], mode = 'full' } = opts;
117
+ const { mode = 'full' } = opts;
70
118
  logger.info('code_graph.build_started', { module: 'code-graph/engine', repoRoot, mode });
71
- // Collect files
72
- const excludePatterns = [...DEFAULT_EXCLUDE, ...exclude];
73
- const files = getFilesRecursively(repoRoot, excludePatterns, include);
74
- // Filter files that have supported plugins
75
- const supportedFiles = files.filter((f) => getPluginForFile(f) !== null);
76
- let filesToProcess = supportedFiles;
119
+ const scope = this.resolveScope(store, opts, mode);
120
+ const files = this.listScopeFiles(repoRoot, scope);
121
+ let plan;
122
+ if (mode === 'incremental' && store.getMeta(DOC_INDEX_KEY) === DOC_INDEX_VERSION) {
123
+ plan = planFromDrift(detectDrift(store, files));
124
+ }
125
+ else {
126
+ const current = new Set(files);
127
+ const known = new Set([...store.getAllFileStats().keys(), ...store.getGraphFilePaths()]);
128
+ plan = {
129
+ toParse: files,
130
+ removed: [...known].filter((f) => !current.has(f)),
131
+ touched: [],
132
+ };
133
+ }
134
+ store.setMeta(SCOPE_META_KEY, JSON.stringify(scope));
135
+ const result = this.applyPlan(repoRoot, store, plan, mode, start);
136
+ store.setMeta(DOC_INDEX_KEY, DOC_INDEX_VERSION);
137
+ return result;
138
+ }
139
+ /**
140
+ * 질의 직전에 그래프를 디스크에 맞춘다. 그래프 DB가 없으면 아무것도 안 한다
141
+ * (처음부터 빌드하는 건 build 액션의 몫이다).
142
+ *
143
+ * 여러 워크트리와 MCP 서버, CLI가 같은 DB를 갱신할 수 있어서 락을 잡고 고친다.
144
+ * 락을 못 잡으면 기다렸다가 그래도 안 되면 이전 그래프로 답하게 stale을 돌려준다.
145
+ *
146
+ * maxInlineParse를 주면 다시 파싱할 파일이 그보다 많을 때 손대지 않고 reindex_pending을
147
+ * 돌려준다. 색인 버전이 다른 옛 DB는 전량이 대상이다. 재색인은 호출한 쪽이 다른 프로세스로 넘긴다.
148
+ */
149
+ async refresh(repoRoot, opts = {}) {
150
+ const start = Date.now();
151
+ if (!this.dbExists(repoRoot)) {
152
+ return { status: 'skipped', reason: 'no_graph', durationMs: 0 };
153
+ }
154
+ const store = this.getStore(repoRoot);
155
+ const scope = this.resolveScope(store, {}, 'incremental');
156
+ const maxInlineParse = opts.maxInlineParse ?? Infinity;
157
+ const files = this.listScopeFiles(repoRoot, scope);
158
+ const reindex = store.getMeta(DOC_INDEX_KEY) !== DOC_INDEX_VERSION;
159
+ // 옛 DB는 stat 행이 없어 드리프트 검사가 파일을 전부 읽는다. 어차피 넘길 거면 그것도 건너뛴다
160
+ if (reindex && files.length > maxInlineParse) {
161
+ return this.reindexPending(files.length, undefined, start);
162
+ }
163
+ const drift = detectDrift(store, files);
164
+ if (!hasAnyDrift(drift) && !reindex) {
165
+ return { status: 'fresh', checkedFiles: drift.unchanged, durationMs: Date.now() - start };
166
+ }
167
+ const toParse = drift.added.length + drift.modified.length;
168
+ if (toParse > maxInlineParse) {
169
+ return this.reindexPending(toParse, driftCounts(drift), start);
170
+ }
171
+ const lock = await acquireLock(this.getLockPath(repoRoot), {
172
+ timeoutMs: opts.lockTimeoutMs,
173
+ });
174
+ if (!lock) {
175
+ logger.warn('code_graph.refresh_locked', { module: 'code-graph/engine', repoRoot });
176
+ return {
177
+ status: 'stale',
178
+ reason: 'locked',
179
+ message: STALE_MESSAGE,
180
+ pending: driftCounts(drift),
181
+ durationMs: Date.now() - start,
182
+ };
183
+ }
184
+ try {
185
+ if (store.getMeta(DOC_INDEX_KEY) !== DOC_INDEX_VERSION) {
186
+ const files = this.listScopeFiles(repoRoot, scope);
187
+ const current = new Set(files);
188
+ const known = new Set([...store.getAllFileStats().keys(), ...store.getGraphFilePaths()]);
189
+ const result = this.applyPlan(repoRoot, store, { toParse: files, removed: [...known].filter((f) => !current.has(f)), touched: [] }, 'incremental', Date.now());
190
+ store.setMeta(DOC_INDEX_KEY, DOC_INDEX_VERSION);
191
+ return {
192
+ status: 'refreshed',
193
+ changed: driftCounts(drift),
194
+ skippedCount: result.skippedFiles.length,
195
+ durationMs: Date.now() - start,
196
+ };
197
+ }
198
+ // 기다리는 사이 다른 프로세스가 같은 변경을 반영했을 수 있다
199
+ const recheck = detectDrift(store, this.listScopeFiles(repoRoot, scope));
200
+ if (!hasAnyDrift(recheck)) {
201
+ return {
202
+ status: 'fresh',
203
+ checkedFiles: recheck.unchanged,
204
+ durationMs: Date.now() - start,
205
+ };
206
+ }
207
+ const changed = driftCounts(recheck);
208
+ if (!hasStructuralDrift(recheck)) {
209
+ store.transaction(() => {
210
+ for (const row of recheck.touched)
211
+ store.upsertFileStat(row);
212
+ });
213
+ return { status: 'refreshed', changed, durationMs: Date.now() - start };
214
+ }
215
+ const result = this.applyPlan(repoRoot, store, planFromDrift(recheck), 'incremental', Date.now());
216
+ return {
217
+ status: 'refreshed',
218
+ changed,
219
+ skippedCount: result.skippedFiles.length,
220
+ durationMs: Date.now() - start,
221
+ };
222
+ }
223
+ finally {
224
+ lock.release();
225
+ }
226
+ }
227
+ reindexPending(toParse, pending, start) {
228
+ return {
229
+ status: 'stale',
230
+ reason: 'reindex_pending',
231
+ message: REINDEX_PENDING_MESSAGE,
232
+ toParse,
233
+ ...(pending && { pending }),
234
+ durationMs: Date.now() - start,
235
+ };
236
+ }
237
+ resolveScope(store, opts, mode) {
238
+ if (opts.include !== undefined || opts.exclude !== undefined) {
239
+ return { include: opts.include, exclude: opts.exclude ?? [] };
240
+ }
241
+ // 범위를 안 준 증분 빌드는 직전 빌드 범위를 이어받는다. 기본 범위로 돌리면
242
+ // include로 좁혀 만든 그래프에 범위 밖 파일이 전부 added로 쏟아진다
77
243
  if (mode === 'incremental') {
78
- const changedFiles = [];
79
- for (const filePath of supportedFiles) {
80
- const existingHash = store.getFileHash(filePath);
81
- if (!existingHash) {
82
- changedFiles.push(filePath);
83
- continue;
84
- }
244
+ const saved = store.getMeta(SCOPE_META_KEY);
245
+ if (saved) {
85
246
  try {
86
- const content = readFileSync(filePath, 'utf-8');
87
- const currentHash = createHash('sha256').update(content).digest('hex');
88
- if (currentHash !== existingHash)
89
- changedFiles.push(filePath);
247
+ return JSON.parse(saved);
90
248
  }
91
249
  catch {
92
- // If can't read, skip (변경 여부 판단 불가 — 재파싱 대상에서 제외)
250
+ // 깨진 메타는 기본 범위로 간다
93
251
  }
94
252
  }
95
- // 변경된 파일(F)을 참조하던 파일(A)들도 함께 재파싱 대상에 포함한다.
253
+ }
254
+ return { exclude: [] };
255
+ }
256
+ listScopeFiles(repoRoot, scope) {
257
+ const excludePatterns = [...DEFAULT_EXCLUDE, ...(scope.exclude ?? [])];
258
+ return getFilesRecursively(repoRoot, excludePatterns, scope.include).filter((f) => getPluginForFile(f) !== null);
259
+ }
260
+ applyPlan(repoRoot, store, plan, mode, start) {
261
+ const parseSet = new Set(plan.toParse);
262
+ const removedSet = new Set(plan.removed);
263
+ if (mode === 'incremental') {
264
+ // 바뀌거나 지워진 파일(F)을 참조하던 파일(A)들도 함께 재파싱 대상에 포함한다.
96
265
  // F 재파싱 시 deleteByFile(F)이 "A→F" 엣지까지 지우는데 A는 변경되지 않아
97
266
  // 재파싱 대상에서 빠지면 그 엣지가 영영 복원되지 않기 때문이다(1-hop만 전파).
98
267
  // 반드시 deleteByFile 호출 전에 조회해야 한다 — 지운 뒤에는 이미 늦다.
99
- const changedSet = new Set(changedFiles);
100
- const referencing = new Set();
101
- for (const filePath of changedFiles) {
268
+ for (const filePath of [...plan.toParse, ...plan.removed]) {
102
269
  for (const refFile of store.getReferencingFiles(filePath)) {
103
- referencing.add(refFile);
270
+ if (!removedSet.has(refFile))
271
+ parseSet.add(refFile);
104
272
  }
105
273
  }
106
- for (const refFile of referencing) {
107
- if (!changedSet.has(refFile))
108
- changedFiles.push(refFile);
109
- }
110
- filesToProcess = changedFiles;
111
274
  }
112
275
  let nodesBuilt = 0;
113
276
  let edgesBuilt = 0;
114
277
  const skippedFiles = [];
115
- for (const filePath of filesToProcess) {
278
+ const parsed = [];
279
+ for (const filePath of parseSet) {
116
280
  const plugin = getPluginForFile(filePath);
117
281
  if (!plugin)
118
282
  continue;
119
283
  try {
284
+ // stat을 먼저 뜬다. 읽은 뒤에 뜨면 그 사이 바뀐 내용이 옛 해시와 짝지어져
285
+ // 다음 검사에서 stat이 같다고 넘어간다
286
+ const st = statSync(filePath);
120
287
  const content = readFileSync(filePath, 'utf-8');
121
- const result = plugin.parse(filePath, content);
122
- // Delete old data for this file before updating
123
- store.deleteByFile(filePath);
124
- for (const node of result.nodes) {
125
- store.upsertNode(node);
126
- nodesBuilt++;
127
- }
128
- for (const edge of result.edges) {
129
- store.upsertEdge(edge);
130
- edgesBuilt++;
131
- }
288
+ parsed.push({
289
+ filePath,
290
+ result: plugin.parse(filePath, content),
291
+ stat: {
292
+ filePath,
293
+ size: st.size,
294
+ mtimeMs: st.mtimeMs,
295
+ fileHash: hashContent(content),
296
+ checkedAt: Date.now(),
297
+ },
298
+ });
132
299
  }
133
300
  catch (e) {
134
301
  // 건너뛰되 조용히 넘어가지 않는다. 여기 빠진 파일은 그래프에 없으므로
@@ -139,6 +306,30 @@ export class CodeGraphEngine {
139
306
  });
140
307
  }
141
308
  }
309
+ // 지우기를 다 끝낸 뒤에 넣는다. deleteByFile(F)는 F로 들어오는 엣지까지 지우므로
310
+ // 파일마다 지우고 넣기를 번갈아 하면 먼저 넣은 A→F 엣지가 F 차례에 사라진다
311
+ store.transaction(() => {
312
+ for (const filePath of plan.removed) {
313
+ store.deleteByFile(filePath);
314
+ store.deleteFileStat(filePath);
315
+ store.deleteEmbeddingsByFile(filePath);
316
+ }
317
+ for (const row of plan.touched)
318
+ store.upsertFileStat(row);
319
+ for (const { filePath } of parsed)
320
+ store.deleteByFile(filePath);
321
+ for (const { result, stat } of parsed) {
322
+ for (const node of result.nodes) {
323
+ store.upsertNode(node);
324
+ nodesBuilt++;
325
+ }
326
+ for (const edge of result.edges) {
327
+ store.upsertEdge(edge);
328
+ edgesBuilt++;
329
+ }
330
+ store.upsertFileStat(stat);
331
+ }
332
+ });
142
333
  if (skippedFiles.length > 0) {
143
334
  logger.warn('code_graph.files_skipped', {
144
335
  module: 'code-graph/engine',
@@ -159,10 +350,14 @@ export class CodeGraphEngine {
159
350
  reason: e instanceof Error ? e.message : String(e),
160
351
  });
161
352
  }
353
+ store.refreshTextIndexStats();
162
354
  const timeTakenMs = Date.now() - start;
163
355
  logger.info('code_graph.build_completed', {
164
356
  module: 'code-graph/engine',
165
357
  repoRoot,
358
+ mode,
359
+ parsedFiles: parseSet.size,
360
+ removedFiles: plan.removed.length,
166
361
  nodesBuilt,
167
362
  edgesBuilt,
168
363
  skippedCount: skippedFiles.length,
@@ -335,6 +530,56 @@ export class CodeGraphEngine {
335
530
  }
336
531
  return { nodes, edges };
337
532
  }
533
+ /**
534
+ * 파일의 시그니처와 줄 번호만 돌려준다. 본문은 뺀다.
535
+ * 플러그인이 skeleton을 지원하면 디스크의 현재 내용에서 뽑고 아니면 store의
536
+ * 노드 이름과 줄 범위로 대신한다. filePath는 repoRoot 안이어야 한다.
537
+ */
538
+ skeleton(repoRoot, filePath) {
539
+ const root = resolve(repoRoot);
540
+ const abs = resolve(root, filePath);
541
+ if (abs !== root && !abs.startsWith(root + sep)) {
542
+ throw new Error(`filePath is outside repoRoot: ${filePath}`);
543
+ }
544
+ const content = readFileSync(abs, 'utf-8');
545
+ const plugin = getPluginForFile(abs);
546
+ let source;
547
+ let entries;
548
+ if (plugin?.skeleton) {
549
+ source = 'signatures';
550
+ entries = plugin.skeleton(abs, content);
551
+ }
552
+ else {
553
+ source = 'graph_nodes';
554
+ entries = this.getStore(repoRoot)
555
+ .getNodesByFile(abs)
556
+ .filter((n) => n.kind !== NodeKind.File)
557
+ .sort((a, b) => (a.lineStart ?? 0) - (b.lineStart ?? 0))
558
+ .map((n) => ({
559
+ lineStart: n.lineStart ?? 0,
560
+ lineEnd: n.lineEnd ?? n.lineStart ?? 0,
561
+ depth: 0,
562
+ signature: `${n.kind.toLowerCase()} ${n.name}`,
563
+ }));
564
+ }
565
+ const body = entries
566
+ .map((e) => {
567
+ const lines = e.lineEnd > e.lineStart ? `${e.lineStart}-${e.lineEnd}` : `${e.lineStart}`;
568
+ return `${' '.repeat(e.depth)}L${lines} ${e.signature}`;
569
+ })
570
+ .join('\n');
571
+ const originalChars = content.length;
572
+ const skeletonChars = body.length;
573
+ const saved = originalChars > 0
574
+ ? (((originalChars - skeletonChars) / originalChars) * 100).toFixed(1)
575
+ : '0';
576
+ const rel = abs.slice(root.length + 1);
577
+ const header = `원본 ${originalChars.toLocaleString('en-US')}자 → ${skeletonChars.toLocaleString('en-US')}자 ` +
578
+ `(${saved}% 줄임) — ${rel}` +
579
+ (source === 'graph_nodes' ? ' [시그니처 미지원 언어라 그래프 노드 이름만]' : '');
580
+ const text = entries.length > 0 ? `${header}\n${body}` : `${header}\n(선언 없음)`;
581
+ return { filePath: abs, source, entries, originalChars, skeletonChars, text };
582
+ }
338
583
  /**
339
584
  * Returns statistics about the code graph.
340
585
  */
@@ -1 +1 @@
1
- {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/code-graph/engine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../../src/code-graph/engine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EACL,WAAW,EACX,WAAW,EACX,kBAAkB,EAClB,WAAW,GAEZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEjF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAsC3C,SAAS,mBAAmB,CAC1B,QAAgB,EAChB,eAAyB,EACzB,OAAkB;IAElB,MAAM,eAAe,GAAG,IAAI,GAAG,CAC7B,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAC5E,CAAC;IACF,MAAM,eAAe,GAAG,eAAe;SACpC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACrD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,YAAY,GAAG,OAAO;QAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAE3D,2DAA2D;IAC3D,gDAAgD;IAChD,sCAAsC;IACtC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAQ,EAAE;QACjC,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,0CAA0C;QACpD,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACvC,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACf,SAAS;YACX,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;gBAAE,SAAS;YAC9B,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAAE,SAAS;YAClE,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAChD,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACzF,SAAS;YACX,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,CAAC;IACf,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,cAAc,GAAG,aAAa,CAAC;AAErC;;;GAGG;AACH,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAC1C,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAE9B,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAChD,MAAM,CAAC,MAAM,uBAAuB,GAClC,oCAAoC,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAapC,SAAS,aAAa,CAAC,KAAkB;IACvC,OAAO;QACL,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;QACnE,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,KAAkB;IACrC,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;QACzB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;QAC/B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;QAC7B,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM;KAC9B,CAAC;AACJ,CAAC;AAED,MAAM,eAAe,GAAG;IACtB,iBAAiB;IACjB,SAAS;IACT,aAAa;IACb,SAAS;IACT,UAAU;IACV,aAAa;IACb,UAAU;CACX,CAAC;AAEF,MAAM,OAAO,eAAe;IAClB,UAAU,GAAG,IAAI,GAAG,EAA0B,CAAC;IAE/C,SAAS,CAAC,QAAgB;QAChC,OAAO,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IACrD,CAAC;IAEO,WAAW,CAAC,QAAgB;QAClC,OAAO,IAAI,CAAC,QAAQ,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;IACvD,CAAC;IAEO,QAAQ,CAAC,QAAgB;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAgB,EAAE,OAAqB,EAAE;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;QAE/B,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzF,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEnD,IAAI,IAAgB,CAAC;QACrB,IAAI,IAAI,KAAK,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,iBAAiB,EAAE,CAAC;YACjF,IAAI,GAAG,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;YACzF,IAAI,GAAG;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAClD,OAAO,EAAE,EAAE;aACZ,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QAErD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;QAClE,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;QAChD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,OAAO,CAAC,QAAgB,EAAE,OAAuB,EAAE;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QAClE,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC;QAC1D,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,QAAQ,CAAC;QAEvD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACnD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,iBAAiB,CAAC;QACnE,2DAA2D;QAC3D,IAAI,OAAO,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;YAC7C,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;QACD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YACpC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;QAC5F,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC;QAC3D,IAAI,OAAO,GAAG,cAAc,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;YACzD,SAAS,EAAE,IAAI,CAAC,aAAa;SAC9B,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,MAAM,EAAE,mBAAmB,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpF,OAAO;gBACL,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,QAAQ;gBAChB,OAAO,EAAE,aAAa;gBACtB,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC;gBAC3B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC/B,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,iBAAiB,EAAE,CAAC;gBACvD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACnD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;gBAC/B,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,GAAG,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC;gBACzF,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAC3B,QAAQ,EACR,KAAK,EACL,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EACnF,aAAa,EACb,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;gBACF,KAAK,CAAC,OAAO,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;gBAChD,OAAO;oBACL,MAAM,EAAE,WAAW;oBACnB,OAAO,EAAE,WAAW,CAAC,KAAK,CAAC;oBAC3B,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;oBACxC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;iBAC/B,CAAC;YACJ,CAAC;YACD,oCAAoC;YACpC,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YACzE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,OAAO;oBACL,MAAM,EAAE,OAAO;oBACf,YAAY,EAAE,OAAO,CAAC,SAAS;oBAC/B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;iBAC/B,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;YACrC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;gBACjC,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;oBACrB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO;wBAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBAC/D,CAAC,CAAC,CAAC;gBACH,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;YAC1E,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAC3B,QAAQ,EACR,KAAK,EACL,aAAa,CAAC,OAAO,CAAC,EACtB,aAAa,EACb,IAAI,CAAC,GAAG,EAAE,CACX,CAAC;YACF,OAAO;gBACL,MAAM,EAAE,WAAW;gBACnB,OAAO;gBACP,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM;gBACxC,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;aAC/B,CAAC;QACJ,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;IAEO,cAAc,CACpB,OAAe,EACf,OAAoC,EACpC,KAAa;QAEb,OAAO;YACL,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,iBAAiB;YACzB,OAAO,EAAE,uBAAuB;YAChC,OAAO;YACP,GAAG,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC;YAC3B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SAC/B,CAAC;IACJ,CAAC;IAEO,YAAY,CAAC,KAAqB,EAAE,IAAkB,EAAE,IAAe;QAC7E,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;QAChE,CAAC;QACD,6CAA6C;QAC7C,8CAA8C;QAC9C,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;YAC5C,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC;oBACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAe,CAAC;gBACzC,CAAC;gBAAC,MAAM,CAAC;oBACP,mBAAmB;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACzB,CAAC;IAEO,cAAc,CAAC,QAAgB,EAAE,KAAiB;QACxD,MAAM,eAAe,GAAG,CAAC,GAAG,eAAe,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;QACvE,OAAO,mBAAmB,CAAC,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CACzE,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,IAAI,CACpC,CAAC;IACJ,CAAC;IAEO,SAAS,CACf,QAAgB,EAChB,KAAqB,EACrB,IAAgB,EAChB,IAAe,EACf,KAAa;QAEb,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;YAC3B,gDAAgD;YAChD,sDAAsD;YACtD,iDAAiD;YACjD,iDAAiD;YACjD,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1D,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC;wBAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACtD,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,YAAY,GAA2C,EAAE,CAAC;QAChE,MAAM,MAAM,GAAmE,EAAE,CAAC;QAElF,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,IAAI,CAAC;gBACH,+CAA+C;gBAC/C,yBAAyB;gBACzB,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC9B,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAChD,MAAM,CAAC,IAAI,CAAC;oBACV,QAAQ;oBACR,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC;oBACvC,IAAI,EAAE;wBACJ,QAAQ;wBACR,IAAI,EAAE,EAAE,CAAC,IAAI;wBACb,OAAO,EAAE,EAAE,CAAC,OAAO;wBACnB,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC;wBAC9B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;qBACtB;iBACF,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,yCAAyC;gBACzC,oCAAoC;gBACpC,YAAY,CAAC,IAAI,CAAC;oBAChB,QAAQ;oBACR,MAAM,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;iBACnD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,+CAA+C;QAC/C,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;YACrB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACpC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC7B,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;gBAC/B,KAAK,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;YACD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO;gBAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAC1D,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,MAAM;gBAAE,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAChE,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,EAAE,CAAC;gBACtC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBAChC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBACvB,UAAU,EAAE,CAAC;gBACf,CAAC;gBACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBAChC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;oBACvB,UAAU,EAAE,CAAC;gBACf,CAAC;gBACD,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;gBACtC,MAAM,EAAE,mBAAmB;gBAC3B,KAAK,EAAE,YAAY,CAAC,MAAM;gBAC1B,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;QAED,yCAAyC;QACzC,uBAAuB;QACvB,IAAI,QAA0C,CAAC;QAC/C,IAAI,CAAC;YACH,QAAQ,GAAG,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;gBACxC,MAAM,EAAE,mBAAmB;gBAC3B,QAAQ;gBACR,MAAM,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,qBAAqB,EAAE,CAAC;QAE9B,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE;YACxC,MAAM,EAAE,mBAAmB;YAC3B,QAAQ;YACR,IAAI;YACJ,WAAW,EAAE,QAAQ,CAAC,IAAI;YAC1B,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YACjC,UAAU;YACV,UAAU;YACV,YAAY,EAAE,YAAY,CAAC,MAAM;YACjC,aAAa,EAAE,QAAQ,EAAE,KAAK;YAC9B,UAAU,EAAE,WAAW;SACxB,CAAC,CAAC;QAEH,OAAO;YACL,UAAU;YACV,UAAU;YACV,WAAW;YACX,aAAa,EAAE,KAAK,EAAE,0DAA0D;YAChF,YAAY;YACZ,QAAQ;SACT,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,QAAgB,EAAE,OAA2B,EAAE;QACzD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,EAAE,YAAY,EAAE,IAAI,GAAG,QAAQ,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QAEvE,IAAI,KAAK,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,KAAK,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClD,CAAC;QAED,4BAA4B;QAC5B,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEvF,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;QACjF,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1E,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE;YAC/C,MAAM,EAAE,mBAAmB;YAC3B,QAAQ;YACR,IAAI;YACJ,YAAY,EAAE,aAAa,CAAC,MAAM;YAClC,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,iBAAiB,EAAE,MAAM,CAAC,iBAAiB;SAC5C,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,QAAgB,EAAE,OAA0B,EAAE;QACvD,MAAM,EAAE,IAAI,GAAG,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;QACtD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEtC,MAAM,MAAM,GACV,IAAI,KAAK,QAAQ;YACf,CAAC,CAAC,+BAA+B;YACjC,CAAC,CAAC,IAAI,KAAK,UAAU;gBACnB,CAAC,CAAC,sBAAsB;gBACxB,CAAC,CAAC,2BAA2B,CAAC;QAEpC,IAAI,KAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE;gBAC9B,GAAG,EAAE,QAAQ;gBACb,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YACH,KAAK,GAAG,MAAM;iBACX,IAAI,EAAE;iBACN,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,OAAO,CAAC;iBACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,KAAK,GAAG,EAAE,CAAC;QACb,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QACzE,OAAO,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC5D,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,QAAgB,EAAE,OAA6B,EAAE;QACxD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,OAAO,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED;;;;OAIG;IACK,kBAAkB,CACxB,KAAqB,EACrB,QAAgB,EAChB,KAAe,EACf,SAAyB,EAAE;QAE3B,IAAI,CAAC;YACH,OAAO,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,MAAM,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,mCAAmC,EAAE;gBAC/C,MAAM,EAAE,mBAAmB;gBAC3B,QAAQ;gBACR,MAAM;aACP,CAAC,CAAC;YACH,OAAO;gBACL,SAAS,EAAE,KAAK;gBAChB,MAAM;gBACN,SAAS,EAAE,CAAC;gBACZ,SAAS,EAAE,EAAE;gBACb,YAAY,EAAE,CAAC;gBACf,SAAS,EAAE,KAAK;gBAChB,aAAa,EAAE,KAAK;aACrB,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAgB,EAAE,OAAqB,EAAE,MAAc;QAC3D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,EAAE,CAAC;QAEjB,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,sCAAsC;gBACtC,MAAM,WAAW,GAAG,KAAK,CAAC,gBAAgB,CAAC,YAAY,QAAQ,IAAI,MAAM,EAAE,CAAC,CAAC;gBAC7E,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;oBAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAC9C,IAAI,IAAI;4BAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,sCAAsC;gBACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,gBAAgB,CAAC,YAAY,QAAQ,IAAI,MAAM,EAAE,CAAC,CAAC;gBAC1E,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;oBAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;wBAC1B,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAC9C,IAAI,IAAI;4BAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,WAAW,CAAC,CAAC,CAAC;gBACjB,iDAAiD;gBACjD,MAAM,YAAY,GAAG,QAAQ,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;gBAC3F,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;gBAC3D,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;oBACjC,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAC9C,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;wBACjB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACjB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YACD,KAAK,YAAY,CAAC,CAAC,CAAC;gBAClB,oCAAoC;gBACpC,MAAM,YAAY,GAAG,QAAQ,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;gBAC3F,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;gBAC3D,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;oBACjC,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;wBACjC,MAAM,IAAI,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAC9C,IAAI,IAAI;4BAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnB,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;QACH,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAC,QAAgB,EAAE,QAAgB;QACzC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACpC,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAErC,IAAI,MAAgC,CAAC;QACrC,IAAI,OAAwB,CAAC;QAC7B,IAAI,MAAM,EAAE,QAAQ,EAAE,CAAC;YACrB,MAAM,GAAG,YAAY,CAAC;YACtB,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,aAAa,CAAC;YACvB,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;iBAC9B,cAAc,CAAC,GAAG,CAAC;iBACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC;iBACvC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;iBACvD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACX,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC;gBAC3B,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC;gBACtC,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,EAAE;aAC/C,CAAC,CAAC,CAAC;QACR,CAAC;QAED,MAAM,IAAI,GAAG,OAAO;aACjB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;YACT,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC;YACzF,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;QAC3D,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;QACrC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;QAClC,MAAM,KAAK,GACT,aAAa,GAAG,CAAC;YACf,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,aAAa,CAAC,GAAG,aAAa,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;YACtE,CAAC,CAAC,GAAG,CAAC;QACV,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,MAAM,GACV,MAAM,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI;YAC3F,IAAI,KAAK,WAAW,GAAG,EAAE;YACzB,CAAC,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,WAAW,CAAC;QAE9E,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;IAChF,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAgB;QACpB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,OAAO,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,QAAgB;QACvB,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,QAAgB;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACvC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;;OAGG;IACH,gBAAgB,CAAC,QAAgB,EAAE,QAAkB;QACnD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAElD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;gBACvB,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;oBACrD,KAAK,EAAE,CAAC;gBACV,CAAC;YACH,CAAC;YACD,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9C,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC3F,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,gBAAgB,CAAC,QAAgB,EAAE,KAAa,EAAE,IAAI,GAAG,EAAE;QAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,aAAa,GAAG,KAAK,CAAC,gBAAgB,EAAE,CAAC;QAC/C,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAE1C,mCAAmC;QACnC,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QAClF,MAAM,QAAQ,GAAG,IAAI,sBAAsB,EAAE,CAAC;QAE9C,kBAAkB;QAClB,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAE5B,sDAAsD;QACtD,MAAM,MAAM,GAAiB,EAAE,CAAC;QAChC,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,IAAI,YAAY,CAChC,MAAM,CAAC,SAAS,CAAC,MAAM,EACvB,MAAM,CAAC,SAAS,CAAC,UAAU,EAC3B,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,CAChC,CAAC;YACF,MAAM,KAAK,GAAG,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;YACnE,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,4DAA4D;QAC5D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;QAC3C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;YACvB,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;YACnD,IAAI,CAAC,CAAC,KAAK,GAAG,IAAI;gBAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,CAAC,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;aAC3B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC;aACd,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE,KAAa,EAAE,IAAI,GAAG,EAAE;QAC7D,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAE1D,MAAM,QAAQ,GAAG,KAAK;aACnB,KAAK,CAAC,KAAK,CAAC;aACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;aAC3B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAEf,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YACvF,QAAQ;YACR,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;SACrB,CAAC,CAAC,CAAC;QAEJ,IAAI,eAAe,GAAiB,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,eAAe,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC;QAC3E,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;QAED,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,MAAM,GAAG,oBAAoB,CAAC,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC;QACvE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,eAAe,CACnB,QAAgB,EAChB,OAA8B,EAAE;QAEhC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,MAAM,EAAE,eAAe,GAAG,IAAI,EAAE,SAAS,GAAG,EAAE,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;QAEvE,oDAAoD;QACpD,IAAI,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC/C,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;YAClF,iBAAiB,GAAG,IAAI,sBAAsB,EAAE,CAAC;QACnD,CAAC;QAED,mDAAmD;QACnD,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE9E,+CAA+C;QAC/C,MAAM,OAAO,GAAyD,EAAE,CAAC;QAEzE,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC7C,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,iBAAiB,CAAC,OAAO;oBAAE,SAAS;YAC3E,CAAC;YAED,IAAI,IAAY,CAAC;YACjB,IAAI,eAAe,EAAE,CAAC;gBACpB,IAAI,CAAC;oBACH,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBAClD,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBACrE,IAAI,GAAG,OAAO,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACpD,CAAC;gBAAC,MAAM,CAAC;oBACP,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACzC,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,cAAc;QACd,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;YAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAEvC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACrD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACvB,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC1B,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;wBAAE,SAAS;oBAEhC,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;oBACzC,KAAK,CAAC,eAAe,CAAC;wBACpB,MAAM,EAAE,KAAK,CAAC,MAAM;wBACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;wBACxB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;wBACtC,OAAO,EAAE,iBAAiB,CAAC,OAAO;wBAClC,SAAS,EAAE,GAAG;qBACf,CAAC,CAAC;oBACH,eAAe,EAAE,CAAC;gBACpB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,wCAAwC;YAC1C,CAAC;QACH,CAAC;QAED,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,KAAK;QACH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YAC7C,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC1B,CAAC;IAEO,kBAAkB,CAAC,QAAgB,EAAE,IAAY;QACvD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,wBAAwB,IAAI,EAAE,EAAE;gBACtD,GAAG,EAAE,QAAQ;gBACb,QAAQ,EAAE,OAAO;gBACjB,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aAChC,CAAC,CAAC;YACH,OAAO,MAAM;iBACV,IAAI,EAAE;iBACN,KAAK,CAAC,IAAI,CAAC;iBACX,MAAM,CAAC,OAAO,CAAC;iBACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,8CAA8C;YAC9C,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAED,4CAA4C;AAC5C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAErD,oEAAoE;AAEpE,SAAS,gBAAgB,CAAC,CAAW,EAAE,CAAW;IAChD,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrB,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;QACf,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;IACnB,CAAC;IACD,IAAI,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACzC,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;AACrD,CAAC"}
@@ -0,0 +1,39 @@
1
+ import type { CodeGraphStore, FileStatRow } from './storage.js';
2
+ /**
3
+ * mtime이 마지막 확인 시각에서 이만큼 안쪽이면 stat이 같아도 다시 읽는다.
4
+ * 확인 직후 같은 mtime 해상도 안에서 다시 쓰인 파일은 size까지 같으면
5
+ * stat만으로 구분이 안 된다 (git의 racy-clean과 같은 문제다).
6
+ * FAT 계열이 2초 해상도라 그 폭에 맞췄다.
7
+ */
8
+ export declare const RACY_WINDOW_MS = 2000;
9
+ export interface FileStamp {
10
+ filePath: string;
11
+ size: number;
12
+ mtimeMs: number;
13
+ }
14
+ export interface DriftReport {
15
+ /** 그래프에 없던 파일 */
16
+ added: FileStamp[];
17
+ /** 내용이 바뀐 파일 */
18
+ modified: FileStamp[];
19
+ /** 디스크에서 사라진 파일 */
20
+ removed: string[];
21
+ /** stat만 바뀌고 내용은 그대로인 파일. 재파싱하지 않고 stat만 고쳐 쓴다 */
22
+ touched: FileStatRow[];
23
+ /** stat이 같아 읽지 않고 넘긴 파일 수 */
24
+ unchanged: number;
25
+ durationMs: number;
26
+ }
27
+ export declare function hashContent(content: string): string;
28
+ export declare function hasStructuralDrift(d: DriftReport): boolean;
29
+ export declare function hasAnyDrift(d: DriftReport): boolean;
30
+ /**
31
+ * 디스크의 현재 파일 목록과 store를 맞대 바뀐 파일을 가린다. store에는 쓰지 않는다.
32
+ *
33
+ * - size와 mtime이 둘 다 같으면 파일을 읽지 않는다
34
+ * - 하나라도 다르면 읽어서 해시로 확정한다
35
+ * - stat 행이 없고 노드만 있는 파일은 stat 컬럼이 생기기 전에 빌드된 DB다.
36
+ * 노드의 file_hash로 한 번 확정하고 나면 다음부터는 stat으로 넘어간다
37
+ */
38
+ export declare function detectDrift(store: CodeGraphStore, currentFiles: string[]): DriftReport;
39
+ //# sourceMappingURL=freshness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"freshness.d.ts","sourceRoot":"","sources":["../../../src/code-graph/freshness.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,cAAc,OAAO,CAAC;AAEnC,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,iBAAiB;IACjB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,gBAAgB;IAChB,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,mBAAmB;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kDAAkD;IAClD,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAE1D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,WAAW,GAAG,OAAO,CAEnD;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,WAAW,CAoDtF"}