@monoes/monograph 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (221) hide show
  1. package/.monomind/data/ranked-context.json +5 -0
  2. package/.monomind/sessions/current.json +13 -0
  3. package/__tests__/export/formats.test.ts +82 -0
  4. package/__tests__/fixtures/sample.py +11 -0
  5. package/__tests__/fixtures/sample.ts +17 -0
  6. package/__tests__/integration/full-pipeline.test.ts +64 -0
  7. package/__tests__/parsers/loader.test.ts +14 -0
  8. package/__tests__/parsers/python.test.ts +32 -0
  9. package/__tests__/parsers/typescript.test.ts +45 -0
  10. package/__tests__/pipeline/analysis.test.ts +58 -0
  11. package/__tests__/pipeline/phases.test.ts +41 -0
  12. package/__tests__/pipeline/runner.test.ts +28 -0
  13. package/__tests__/setup.ts +1 -0
  14. package/__tests__/storage/db.test.ts +37 -0
  15. package/__tests__/storage/stores.test.ts +100 -0
  16. package/__tests__/types.test.ts +13 -0
  17. package/__tests__/watch/watcher.test.ts +31 -0
  18. package/dist/src/export/canvas.d.ts +3 -0
  19. package/dist/src/export/canvas.d.ts.map +1 -0
  20. package/dist/src/export/canvas.js +39 -0
  21. package/dist/src/export/canvas.js.map +1 -0
  22. package/dist/src/export/cypher.d.ts +3 -0
  23. package/dist/src/export/cypher.d.ts.map +1 -0
  24. package/dist/src/export/cypher.js +24 -0
  25. package/dist/src/export/cypher.js.map +1 -0
  26. package/dist/src/export/graphml.d.ts +3 -0
  27. package/dist/src/export/graphml.d.ts.map +1 -0
  28. package/dist/src/export/graphml.js +38 -0
  29. package/dist/src/export/graphml.js.map +1 -0
  30. package/dist/src/export/html.d.ts +3 -0
  31. package/dist/src/export/html.d.ts.map +1 -0
  32. package/dist/src/export/html.js +54 -0
  33. package/dist/src/export/html.js.map +1 -0
  34. package/dist/src/export/index.d.ts +8 -0
  35. package/dist/src/export/index.d.ts.map +1 -0
  36. package/dist/src/export/index.js +8 -0
  37. package/dist/src/export/index.js.map +1 -0
  38. package/dist/src/export/json.d.ts +3 -0
  39. package/dist/src/export/json.d.ts.map +1 -0
  40. package/dist/src/export/json.js +31 -0
  41. package/dist/src/export/json.js.map +1 -0
  42. package/dist/src/export/obsidian.d.ts +3 -0
  43. package/dist/src/export/obsidian.d.ts.map +1 -0
  44. package/dist/src/export/obsidian.js +38 -0
  45. package/dist/src/export/obsidian.js.map +1 -0
  46. package/dist/src/export/svg.d.ts +3 -0
  47. package/dist/src/export/svg.d.ts.map +1 -0
  48. package/dist/src/export/svg.js +46 -0
  49. package/dist/src/export/svg.js.map +1 -0
  50. package/dist/src/graph/analyzer.d.ts +8 -0
  51. package/dist/src/graph/analyzer.d.ts.map +1 -0
  52. package/dist/src/graph/analyzer.js +25 -0
  53. package/dist/src/graph/analyzer.js.map +1 -0
  54. package/dist/src/graph/diff.d.ts +19 -0
  55. package/dist/src/graph/diff.d.ts.map +1 -0
  56. package/dist/src/graph/diff.js +44 -0
  57. package/dist/src/graph/diff.js.map +1 -0
  58. package/dist/src/graph/loader.d.ts +5 -0
  59. package/dist/src/graph/loader.d.ts.map +1 -0
  60. package/dist/src/graph/loader.js +42 -0
  61. package/dist/src/graph/loader.js.map +1 -0
  62. package/dist/src/index.d.ts +18 -0
  63. package/dist/src/index.d.ts.map +1 -0
  64. package/dist/src/index.js +18 -0
  65. package/dist/src/index.js.map +1 -0
  66. package/dist/src/mcp/resources.d.ts +11 -0
  67. package/dist/src/mcp/resources.d.ts.map +1 -0
  68. package/dist/src/mcp/resources.js +69 -0
  69. package/dist/src/mcp/resources.js.map +1 -0
  70. package/dist/src/parsers/extractor.d.ts +5 -0
  71. package/dist/src/parsers/extractor.d.ts.map +1 -0
  72. package/dist/src/parsers/extractor.js +142 -0
  73. package/dist/src/parsers/extractor.js.map +1 -0
  74. package/dist/src/parsers/go.d.ts +3 -0
  75. package/dist/src/parsers/go.d.ts.map +1 -0
  76. package/dist/src/parsers/go.js +25 -0
  77. package/dist/src/parsers/go.js.map +1 -0
  78. package/dist/src/parsers/java.d.ts +3 -0
  79. package/dist/src/parsers/java.d.ts.map +1 -0
  80. package/dist/src/parsers/java.js +25 -0
  81. package/dist/src/parsers/java.js.map +1 -0
  82. package/dist/src/parsers/language-config.d.ts +27 -0
  83. package/dist/src/parsers/language-config.d.ts.map +1 -0
  84. package/dist/src/parsers/language-config.js +2 -0
  85. package/dist/src/parsers/language-config.js.map +1 -0
  86. package/dist/src/parsers/loader.d.ts +15 -0
  87. package/dist/src/parsers/loader.d.ts.map +1 -0
  88. package/dist/src/parsers/loader.js +73 -0
  89. package/dist/src/parsers/loader.js.map +1 -0
  90. package/dist/src/parsers/python.d.ts +3 -0
  91. package/dist/src/parsers/python.d.ts.map +1 -0
  92. package/dist/src/parsers/python.js +24 -0
  93. package/dist/src/parsers/python.js.map +1 -0
  94. package/dist/src/parsers/rust.d.ts +3 -0
  95. package/dist/src/parsers/rust.d.ts.map +1 -0
  96. package/dist/src/parsers/rust.js +23 -0
  97. package/dist/src/parsers/rust.js.map +1 -0
  98. package/dist/src/parsers/typescript.d.ts +3 -0
  99. package/dist/src/parsers/typescript.d.ts.map +1 -0
  100. package/dist/src/parsers/typescript.js +39 -0
  101. package/dist/src/parsers/typescript.js.map +1 -0
  102. package/dist/src/pipeline/orchestrator.d.ts +8 -0
  103. package/dist/src/pipeline/orchestrator.d.ts.map +1 -0
  104. package/dist/src/pipeline/orchestrator.js +37 -0
  105. package/dist/src/pipeline/orchestrator.js.map +1 -0
  106. package/dist/src/pipeline/phases/communities.d.ts +7 -0
  107. package/dist/src/pipeline/phases/communities.d.ts.map +1 -0
  108. package/dist/src/pipeline/phases/communities.js +34 -0
  109. package/dist/src/pipeline/phases/communities.js.map +1 -0
  110. package/dist/src/pipeline/phases/cross-file.d.ts +7 -0
  111. package/dist/src/pipeline/phases/cross-file.d.ts.map +1 -0
  112. package/dist/src/pipeline/phases/cross-file.js +36 -0
  113. package/dist/src/pipeline/phases/cross-file.js.map +1 -0
  114. package/dist/src/pipeline/phases/god-nodes.d.ts +7 -0
  115. package/dist/src/pipeline/phases/god-nodes.d.ts.map +1 -0
  116. package/dist/src/pipeline/phases/god-nodes.js +28 -0
  117. package/dist/src/pipeline/phases/god-nodes.js.map +1 -0
  118. package/dist/src/pipeline/phases/mro.d.ts +7 -0
  119. package/dist/src/pipeline/phases/mro.d.ts.map +1 -0
  120. package/dist/src/pipeline/phases/mro.js +41 -0
  121. package/dist/src/pipeline/phases/mro.js.map +1 -0
  122. package/dist/src/pipeline/phases/parse.d.ts +9 -0
  123. package/dist/src/pipeline/phases/parse.d.ts.map +1 -0
  124. package/dist/src/pipeline/phases/parse.js +51 -0
  125. package/dist/src/pipeline/phases/parse.js.map +1 -0
  126. package/dist/src/pipeline/phases/scan.d.ts +7 -0
  127. package/dist/src/pipeline/phases/scan.d.ts.map +1 -0
  128. package/dist/src/pipeline/phases/scan.js +60 -0
  129. package/dist/src/pipeline/phases/scan.js.map +1 -0
  130. package/dist/src/pipeline/phases/structure.d.ts +9 -0
  131. package/dist/src/pipeline/phases/structure.d.ts.map +1 -0
  132. package/dist/src/pipeline/phases/structure.js +56 -0
  133. package/dist/src/pipeline/phases/structure.js.map +1 -0
  134. package/dist/src/pipeline/phases/suggest.d.ts +7 -0
  135. package/dist/src/pipeline/phases/suggest.d.ts.map +1 -0
  136. package/dist/src/pipeline/phases/suggest.js +59 -0
  137. package/dist/src/pipeline/phases/suggest.js.map +1 -0
  138. package/dist/src/pipeline/phases/surprises.d.ts +7 -0
  139. package/dist/src/pipeline/phases/surprises.d.ts.map +1 -0
  140. package/dist/src/pipeline/phases/surprises.js +54 -0
  141. package/dist/src/pipeline/phases/surprises.js.map +1 -0
  142. package/dist/src/pipeline/runner.d.ts +8 -0
  143. package/dist/src/pipeline/runner.d.ts.map +1 -0
  144. package/dist/src/pipeline/runner.js +53 -0
  145. package/dist/src/pipeline/runner.js.map +1 -0
  146. package/dist/src/pipeline/types.d.ts +24 -0
  147. package/dist/src/pipeline/types.d.ts.map +1 -0
  148. package/dist/src/pipeline/types.js +8 -0
  149. package/dist/src/pipeline/types.js.map +1 -0
  150. package/dist/src/storage/db.d.ts +7 -0
  151. package/dist/src/storage/db.d.ts.map +1 -0
  152. package/dist/src/storage/db.js +52 -0
  153. package/dist/src/storage/db.js.map +1 -0
  154. package/dist/src/storage/edge-store.d.ts +9 -0
  155. package/dist/src/storage/edge-store.d.ts.map +1 -0
  156. package/dist/src/storage/edge-store.js +46 -0
  157. package/dist/src/storage/edge-store.js.map +1 -0
  158. package/dist/src/storage/fts-store.d.ts +11 -0
  159. package/dist/src/storage/fts-store.d.ts.map +1 -0
  160. package/dist/src/storage/fts-store.js +32 -0
  161. package/dist/src/storage/fts-store.js.map +1 -0
  162. package/dist/src/storage/node-store.d.ts +9 -0
  163. package/dist/src/storage/node-store.d.ts.map +1 -0
  164. package/dist/src/storage/node-store.js +52 -0
  165. package/dist/src/storage/node-store.js.map +1 -0
  166. package/dist/src/storage/schema.d.ts +8 -0
  167. package/dist/src/storage/schema.d.ts.map +1 -0
  168. package/dist/src/storage/schema.js +72 -0
  169. package/dist/src/storage/schema.js.map +1 -0
  170. package/dist/src/types.d.ts +76 -0
  171. package/dist/src/types.d.ts.map +1 -0
  172. package/dist/src/types.js +37 -0
  173. package/dist/src/types.js.map +1 -0
  174. package/dist/src/watch/watcher.d.ts +16 -0
  175. package/dist/src/watch/watcher.d.ts.map +1 -0
  176. package/dist/src/watch/watcher.js +59 -0
  177. package/dist/src/watch/watcher.js.map +1 -0
  178. package/dist/tsconfig.tsbuildinfo +1 -0
  179. package/package.json +44 -0
  180. package/src/export/canvas.ts +42 -0
  181. package/src/export/cypher.ts +33 -0
  182. package/src/export/graphml.ts +48 -0
  183. package/src/export/html.ts +61 -0
  184. package/src/export/index.ts +7 -0
  185. package/src/export/json.ts +36 -0
  186. package/src/export/obsidian.ts +44 -0
  187. package/src/export/svg.ts +55 -0
  188. package/src/graph/analyzer.ts +29 -0
  189. package/src/graph/diff.ts +65 -0
  190. package/src/graph/loader.ts +41 -0
  191. package/src/index.ts +17 -0
  192. package/src/mcp/resources.ts +69 -0
  193. package/src/parsers/extractor.ts +180 -0
  194. package/src/parsers/go.ts +27 -0
  195. package/src/parsers/java.ts +27 -0
  196. package/src/parsers/language-config.ts +28 -0
  197. package/src/parsers/loader.ts +85 -0
  198. package/src/parsers/python.ts +26 -0
  199. package/src/parsers/rust.ts +25 -0
  200. package/src/parsers/typescript.ts +41 -0
  201. package/src/pipeline/orchestrator.ts +46 -0
  202. package/src/pipeline/phases/communities.ts +45 -0
  203. package/src/pipeline/phases/cross-file.ts +48 -0
  204. package/src/pipeline/phases/god-nodes.ts +40 -0
  205. package/src/pipeline/phases/mro.ts +52 -0
  206. package/src/pipeline/phases/parse.ts +62 -0
  207. package/src/pipeline/phases/scan.ts +58 -0
  208. package/src/pipeline/phases/structure.ts +68 -0
  209. package/src/pipeline/phases/suggest.ts +71 -0
  210. package/src/pipeline/phases/surprises.ts +70 -0
  211. package/src/pipeline/runner.ts +61 -0
  212. package/src/pipeline/types.ts +33 -0
  213. package/src/storage/db.ts +54 -0
  214. package/src/storage/edge-store.ts +61 -0
  215. package/src/storage/fts-store.ts +52 -0
  216. package/src/storage/node-store.ts +72 -0
  217. package/src/storage/schema.ts +77 -0
  218. package/src/types.ts +131 -0
  219. package/src/watch/watcher.ts +66 -0
  220. package/tsconfig.json +10 -0
  221. package/vitest.config.ts +12 -0
@@ -0,0 +1,37 @@
1
+ // ── Node labels ───────────────────────────────────────────────────────────────
2
+ export const SYMBOL_NODE_LABELS = new Set([
3
+ 'Function', 'Class', 'Method', 'Interface', 'Variable', 'Struct', 'Enum',
4
+ 'Macro', 'Typedef', 'Union', 'Namespace', 'Trait', 'Impl', 'TypeAlias',
5
+ 'Const', 'Static', 'Property', 'Record', 'Delegate', 'Annotation',
6
+ 'Constructor', 'Template', 'Module',
7
+ ]);
8
+ export const CONFIDENCE_SCORE = {
9
+ EXTRACTED: 1.0,
10
+ INFERRED: 0.5,
11
+ AMBIGUOUS: 0.2,
12
+ };
13
+ // ── ID generation ─────────────────────────────────────────────────────────────
14
+ export function makeId(...parts) {
15
+ return parts
16
+ .join('_')
17
+ .replace(/[^a-z0-9_]/gi, '_')
18
+ .replace(/^_+|_+$/g, '')
19
+ .toLowerCase();
20
+ }
21
+ // ── Norm label ────────────────────────────────────────────────────────────────
22
+ export function toNormLabel(name) {
23
+ return name
24
+ .normalize('NFD')
25
+ .replace(/[̀-ͯ]/g, '')
26
+ .toLowerCase();
27
+ }
28
+ // ── Errors ────────────────────────────────────────────────────────────────────
29
+ export class MonographError extends Error {
30
+ cause;
31
+ constructor(message, cause) {
32
+ super(message);
33
+ this.cause = cause;
34
+ this.name = 'MonographError';
35
+ }
36
+ }
37
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA,iFAAiF;AASjF,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAY;IACnD,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM;IACxE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW;IACtE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY;IACjE,aAAa,EAAE,UAAU,EAAE,QAAQ;CACpC,CAAC,CAAC;AAcH,MAAM,CAAC,MAAM,gBAAgB,GAAmC;IAC9D,SAAS,EAAE,GAAG;IACd,QAAQ,EAAE,GAAG;IACb,SAAS,EAAE,GAAG;CACf,CAAC;AA+DF,iFAAiF;AAEjF,MAAM,UAAU,MAAM,CAAC,GAAG,KAAe;IACvC,OAAO,KAAK;SACT,IAAI,CAAC,GAAG,CAAC;SACT,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,IAAI;SACR,SAAS,CAAC,KAAK,CAAC;SAChB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,WAAW,EAAE,CAAC;AACnB,CAAC;AAWD,iFAAiF;AAEjF,MAAM,OAAO,cAAe,SAAQ,KAAK;IACM;IAA7C,YAAY,OAAe,EAAkB,KAAe;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QAD4B,UAAK,GAAL,KAAK,CAAU;QAE1D,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import { EventEmitter } from 'events';
2
+ export interface WatcherOptions {
3
+ debounceMs?: number;
4
+ }
5
+ export declare class MonographWatcher extends EventEmitter {
6
+ private readonly repoPath;
7
+ private watcher;
8
+ private debounceTimer;
9
+ private pendingChanges;
10
+ private readonly debounceMs;
11
+ constructor(repoPath: string, opts?: WatcherOptions);
12
+ start(): Promise<void>;
13
+ stop(): Promise<void>;
14
+ private handleChange;
15
+ }
16
+ //# sourceMappingURL=watcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/watch/watcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAKtC,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,gBAAiB,SAAQ,YAAY;IAMpC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IALrC,OAAO,CAAC,OAAO,CAAmC;IAClD,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;gBAEP,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB;IAKlE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,OAAO,CAAC,YAAY;CAarB"}
@@ -0,0 +1,59 @@
1
+ import chokidar from 'chokidar';
2
+ import { EventEmitter } from 'events';
3
+ import { isSupportedExtension } from '../parsers/loader.js';
4
+ import { extname } from 'path';
5
+ import { platform } from 'os';
6
+ export class MonographWatcher extends EventEmitter {
7
+ repoPath;
8
+ watcher = null;
9
+ debounceTimer = null;
10
+ pendingChanges = new Set();
11
+ debounceMs;
12
+ constructor(repoPath, opts = {}) {
13
+ super();
14
+ this.repoPath = repoPath;
15
+ this.debounceMs = opts.debounceMs ?? 3000;
16
+ }
17
+ async start() {
18
+ const usePolling = platform() === 'darwin';
19
+ this.watcher = chokidar.watch(this.repoPath, {
20
+ ignored: [
21
+ /(^|[/\\])\../, // dotfiles
22
+ /node_modules/,
23
+ /\.monomind/,
24
+ /dist\//,
25
+ /build\//,
26
+ ],
27
+ persistent: true,
28
+ ignoreInitial: true,
29
+ usePolling,
30
+ interval: usePolling ? 1000 : undefined,
31
+ });
32
+ this.watcher.on('change', (path) => this.handleChange(path));
33
+ this.watcher.on('add', (path) => this.handleChange(path));
34
+ this.watcher.on('unlink', (path) => this.handleChange(path));
35
+ this.watcher.on('error', (err) => this.emit('monograph:error', err));
36
+ await new Promise(resolve => this.watcher.once('ready', resolve));
37
+ }
38
+ async stop() {
39
+ if (this.debounceTimer)
40
+ clearTimeout(this.debounceTimer);
41
+ if (this.watcher)
42
+ await this.watcher.close();
43
+ this.watcher = null;
44
+ }
45
+ handleChange(filePath) {
46
+ const ext = extname(filePath);
47
+ if (!isSupportedExtension(ext))
48
+ return;
49
+ this.pendingChanges.add(filePath);
50
+ if (this.debounceTimer)
51
+ clearTimeout(this.debounceTimer);
52
+ this.debounceTimer = setTimeout(() => {
53
+ const changed = [...this.pendingChanges];
54
+ this.pendingChanges.clear();
55
+ this.emit('monograph:updated', changed);
56
+ }, this.debounceMs);
57
+ }
58
+ }
59
+ //# sourceMappingURL=watcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../../src/watch/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAM9B,MAAM,OAAO,gBAAiB,SAAQ,YAAY;IAMnB;IALrB,OAAO,GAA8B,IAAI,CAAC;IAC1C,aAAa,GAAyC,IAAI,CAAC;IAC3D,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1B,UAAU,CAAS;IAEpC,YAA6B,QAAgB,EAAE,OAAuB,EAAE;QACtE,KAAK,EAAE,CAAC;QADmB,aAAQ,GAAR,QAAQ,CAAQ;QAE3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,UAAU,GAAG,QAAQ,EAAE,KAAK,QAAQ,CAAC;QAE3C,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC3C,OAAO,EAAE;gBACP,cAAc,EAAM,WAAW;gBAC/B,cAAc;gBACd,YAAY;gBACZ,QAAQ;gBACR,SAAS;aACV;YACD,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,IAAI;YACnB,UAAU;YACV,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;SACxC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAY,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC,CAAC;QAE9E,MAAM,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,OAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,aAAa;YAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAEO,YAAY,CAAC,QAAgB;QACnC,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC;YAAE,OAAO;QAEvC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAElC,IAAI,IAAI,CAAC,aAAa;YAAE,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACzD,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;YACnC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;YACzC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAC5B,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;IACtB,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/types.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/compatibility/disposable.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/compatibility/indexable.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/compatibility/iterators.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/compatibility/index.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/globals.typedarray.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/buffer.buffer.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/globals.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/web-globals/domexception.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/web-globals/events.d.ts","../../../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/web-globals/fetch.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/assert.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/assert/strict.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/async_hooks.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/buffer.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/child_process.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/cluster.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/console.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/constants.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/crypto.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/dgram.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/diagnostics_channel.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/dns.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/dns/promises.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/domain.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/events.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/fs.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/fs/promises.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/http.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/http2.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/https.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/inspector.generated.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/module.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/net.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/os.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/path.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/perf_hooks.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/process.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/punycode.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/querystring.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/readline.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/readline/promises.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/repl.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/sea.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/stream.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/stream/promises.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/stream/consumers.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/stream/web.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/string_decoder.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/test.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/timers.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/timers/promises.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/tls.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/trace_events.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/tty.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/url.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/util.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/v8.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/vm.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/wasi.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/worker_threads.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/zlib.d.ts","../../../../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node/index.d.ts","../../../../node_modules/.pnpm/@types+better-sqlite3@7.6.13/node_modules/@types/better-sqlite3/index.d.ts","../src/storage/schema.ts","../src/storage/db.ts","../src/storage/node-store.ts","../src/storage/edge-store.ts","../src/storage/fts-store.ts","../../../../node_modules/.pnpm/graphology-types@0.24.8/node_modules/graphology-types/index.d.ts","../../../../node_modules/.pnpm/graphology@0.25.4_graphology-types@0.24.8/node_modules/graphology/dist/graphology.d.ts","../src/pipeline/types.ts","../src/pipeline/runner.ts","../../../../node_modules/.pnpm/tree-sitter@0.22.4/node_modules/tree-sitter/tree-sitter.d.ts","../src/parsers/language-config.ts","../src/parsers/typescript.ts","../src/parsers/python.ts","../src/parsers/go.ts","../src/parsers/rust.ts","../src/parsers/java.ts","../src/parsers/extractor.ts","../src/parsers/loader.ts","../src/pipeline/phases/scan.ts","../src/pipeline/phases/structure.ts","../src/pipeline/phases/parse.ts","../src/pipeline/phases/cross-file.ts","../src/pipeline/phases/mro.ts","../../../../node_modules/.pnpm/graphology-communities-louvain@2.0.2_graphology-types@0.24.8/node_modules/graphology-communities-louvain/index.d.ts","../src/graph/loader.ts","../src/pipeline/phases/communities.ts","../src/pipeline/phases/god-nodes.ts","../src/pipeline/phases/surprises.ts","../src/pipeline/phases/suggest.ts","../src/pipeline/orchestrator.ts","../../../../node_modules/.pnpm/graphology-utils@2.5.2_graphology-types@0.24.8/node_modules/graphology-utils/getters.d.ts","../../../../node_modules/.pnpm/graphology-shortest-path@2.1.0_graphology-types@0.24.8/node_modules/graphology-shortest-path/dijkstra.d.ts","../../../../node_modules/.pnpm/graphology-shortest-path@2.1.0_graphology-types@0.24.8/node_modules/graphology-shortest-path/unweighted.d.ts","../../../../node_modules/.pnpm/graphology-shortest-path@2.1.0_graphology-types@0.24.8/node_modules/graphology-shortest-path/astar.d.ts","../../../../node_modules/.pnpm/graphology-shortest-path@2.1.0_graphology-types@0.24.8/node_modules/graphology-shortest-path/utils.d.ts","../../../../node_modules/.pnpm/graphology-shortest-path@2.1.0_graphology-types@0.24.8/node_modules/graphology-shortest-path/index.d.ts","../src/graph/analyzer.ts","../src/graph/diff.ts","../../../../node_modules/.pnpm/anymatch@3.1.3/node_modules/anymatch/index.d.ts","../../../../node_modules/.pnpm/chokidar@3.6.0/node_modules/chokidar/types/index.d.ts","../src/watch/watcher.ts","../src/export/json.ts","../src/export/html.ts","../src/export/cypher.ts","../src/export/graphml.ts","../src/export/svg.ts","../src/index.ts","../src/export/canvas.ts","../src/export/obsidian.ts","../src/export/index.ts","../src/mcp/resources.ts","../../../../node_modules/.pnpm/@types+bcrypt@5.0.2/node_modules/@types/bcrypt/index.d.ts","../../../../node_modules/@types/deep-eql/index.d.ts","../../../../node_modules/assertion-error/index.d.ts","../../../../node_modules/@types/chai/index.d.ts","../../../../node_modules/@types/estree/index.d.ts"],"fileIdsList":[[64,111,159],[64,108,111],[64,110,111],[111],[64,111,116,144],[64,111,112,117,122,130,141,152],[64,111,112,113,122,130],[64,111],[59,60,61,64,111],[64,111,114,153],[64,111,115,116,123,131],[64,111,116,141,149],[64,111,117,119,122,130],[64,110,111,118],[64,111,119,120],[64,111,121,122],[64,110,111,122],[64,111,122,123,124,141,152],[64,111,122,123,124,137,141,144],[64,111,119,122,125,130,141,152],[64,111,122,123,125,126,130,141,149,152],[64,111,125,127,141,149,152],[62,63,64,65,66,67,68,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158],[64,111,122,128],[64,111,129,152,157],[64,111,119,122,130,141],[64,111,131],[64,111,132],[64,110,111,133],[64,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158],[64,111,135],[64,111,136],[64,111,122,137,138],[64,111,137,139,153,155],[64,111,122,141,142,144],[64,111,143,144],[64,111,141,142],[64,111,144],[64,111,145],[64,108,111,141,146],[64,111,122,147,148],[64,111,147,148],[64,111,116,130,141,149],[64,111,150],[64,111,130,151],[64,111,125,136,152],[64,111,116,153],[64,111,141,154],[64,111,129,155],[64,111,156],[64,106,111],[64,106,111,122,124,133,141,144,152,155,157],[64,111,141,158],[64,111,122,123,159,199],[64,111,166],[64,111,166,191],[64,111,192,193,194,195],[64,78,82,111,152],[64,78,111,141,152],[64,73,111],[64,75,78,111,149,152],[64,111,130,149],[64,73,111,159],[64,75,78,111,130,152],[64,70,71,74,77,111,122,141,152],[64,78,85,111],[64,70,76,111],[64,78,99,100,111],[64,74,78,111,144,152,159],[64,99,111,159],[64,72,73,111,159],[64,78,111],[64,72,73,74,75,76,77,78,79,80,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,100,101,102,103,104,105,111],[64,78,93,111],[64,78,85,86,111],[64,76,78,86,87,111],[64,77,111],[64,70,73,78,111],[64,78,82,86,87,111],[64,82,111],[64,76,78,81,111,152],[64,70,75,78,85,111],[64,111,141],[64,73,78,99,111,157,159],[64,111,213,214],[58,64,111],[64,111,202,203,204,205,206,208,209],[58,64,111,123,132],[64,111,162,167,185,196],[58,64,111,162],[58,64,111,162,167],[58,64,111,162,163,164,165,168,169,185,190,197,198,201,202,203,204,205,206],[64,111,132,162,163,164],[58,64,111,170,171,178],[64,111,129,171],[64,111,170],[58,64,111,170,171,172,173,174,175,176,177],[58,64,111,132,162,167,168,169,179,180,181,182,183,186,187,188,189],[58,64,111,168,181,182,184,185],[58,64,111,164,168,181],[58,64,111,168,181,182],[58,64,111,168,181],[58,64,111,123,132,163,164,168,178,180],[64,111,123,132,168,178],[58,64,111,132,168,179],[58,64,111,168,181,186],[58,64,111,168,181,182,186],[58,64,111,168],[58,64,111,123,132,160,161],[58,64,111,160],[64,111,160],[64,111,122,131,132,178,200]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"6dea6283f59757194bbacc78fd210351b2048e1998d0dffd818a74f1cc82f23a","signature":"fee85d885151f2d303f312c3522e10d3da1655417565c289945c525d5cc2a922"},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"c2a6a737189ced24ffe0634e9239b087e4c26378d0490f95141b9b9b042b746c","impliedFormat":1},{"version":"cf7ecf9a5025144ff06b937ba5f00caaafe17b5b2bcbfcdc0ee06bac464f92a1","signature":"8de60836320ff682faafa2891d352f72b7902bf9b6e8bad10f5b44e506ff0642"},{"version":"254d130ce6bd4234e3c5abde1f813e515b980452f8c237f1f4529a2811db5b81","signature":"a38667de81fc085a6eae751bd570551613fddc3660a6768143949028ed63fb00"},{"version":"0b3cddabe3c422d247b846b33c497b99a3e87a63f0f20c01f6a8f5153a40f106","signature":"fa7409d53f1effe0ee21c047840fd44bf875016e43c3349856075da37f8f10ce"},{"version":"bf245eb11fcb77c6ea140b17d5982a9c008a35693c4ec9b64c7d0e9ee750eaae","signature":"9f5bb0e2183340be07026cf5c558c145b5dbe5fecb51f8450f862dc2eec37c60"},{"version":"9eaf570f6e50e6ff010e8f36d83ada11ad6ecde3ac61c7af46ba172c02567a66","signature":"e2297bf848cdb31cd12ee83e2f48bb62aea98c1428cc7eb3d1d8a9a8e9c9cfe9"},{"version":"0cca09de16d2922f69d749aeeb619713345eea2b3169e29b18df8a33528d8d7e","impliedFormat":1},{"version":"91f902e15d203efb3b578f42777b5557fad11786073403490faf56632a101bb0","impliedFormat":1},{"version":"d6d5c2369c12858173e1a75f0166c5fb8064d3d28ac7c7b9e3edfcc878314415","signature":"a34305702e36f36d30870abb3e973cc48c4df9300b34aa99a7ced9f53e147e4d"},{"version":"297087d960939b298888f1596579f7d1014b49a5fe0763eb5fad71445903ebf2","signature":"7d211894c704af55c463713b94d89d8d5bad7ac249c2a30264678039c43d7c21"},{"version":"70aee1a800e099b54391f7686eb3f48af74feb8a78a1ba9daec0153d95686dd7","impliedFormat":1},{"version":"5e78bbd22e428c1b8e7bcddba1db058c55d3841ff3fba784664f371e3d151162","signature":"5240704cd3a911a0627f07176f7799c81465fbdc1cd8eaa963749a8798417831"},{"version":"95222d1cb6aeaf0a297af689c69626130d363d8bfd6cd81957203011701d919a","signature":"e03f4aa4fb4d14aaf1689711ce3debaabf1785863002b63962dd2ff1f3440bad"},{"version":"293edbb2c7f99d9fc7bb662d96b2aa1f188648fc31e0ccf8663a70f340eeb31c","signature":"a8d7ee56adfae5a2646aec51c7972bdac187d2d03e8274fbcacd0926a961d988"},{"version":"29765b31c1db613c62b517905a27af54f6d085665beeeb536a01cc5ccabd4d74","signature":"790641450c1377dd1dc5649bb3219a1fe7b5ac5d1a7df28faae272311070e4ad"},{"version":"2ee0b93386bd6bb14103798a2bbab87461a028906ad592a0a9ec25ca5e9a0399","signature":"34917028cd528be4071f38e0f446e26dff9c154cd7d080e53eac8cac8c724f2f"},{"version":"341c45593db7232f47f6b17e67a2393778684f94d8b581388a6e4d297ed9069b","signature":"b41d0077db350c1d28fb8109db269b00ebbc5fbbc5341eee005d99ba05b4324f"},{"version":"9f0e1ed6b91d316384594df24452c7d09168512cf6c45e780d002b1911915b0e","signature":"2ef9be919e9fdf6cd240f56d96cb1893cba83cae705fe03cc201a8287d25e203"},{"version":"938292dff8511ecacfeaddc7ef465edeef2f3af62434181beba2713c7b828634","signature":"aacea73572fe51722e8758761b6c510d853dbfd0dfe73ed89bfa85b8bc05b010"},{"version":"7acbfd325a80905172d626c7aefea0597fc4570dbf76f1b07bd7311c0eed7722","signature":"525e7bbc125bfb9a902b916d1e24f5d4c86d359647165afd122c8c602fee73d0"},{"version":"87d7a3782196e20f0541cfc7a6e75ce730fab87310f1bc6cad42fab88c51558d","signature":"b17a001154fb453b9b6ec1152c8b6da90e19993554e9113ce7081eee2c68b46c"},{"version":"990e08fafab42a4d0c3990a65491e0d93c413d525c6224e84ab0086abc518787","signature":"173412eedf7c89d1b80052b705e8530997e780199116172ec36a17cd42a18a3c"},{"version":"4a98e9f70791d8104f4a3db7b3261077e09f67452034847e8109bd56b604552e","signature":"0aae49cd566f34cf8e84bf149580ff276ea029eafdb78078fa5704659159c901"},{"version":"b9cf5f995122464b1f52141d414a0fbe9d59791b88c20733dd21f225b336618c","signature":"255e9971afc955d77973912faad377996bf824bb08c1423fe6f709f3802b8bfb"},{"version":"42fd0f8131a793d3eb8917e077c018834cbac14f16978302659fc2d2c9e87bf2","impliedFormat":1},{"version":"bdda73661ab731894983be5676ad917b44cf23e80b48f99c2bd40fd454565a9f","signature":"a479c5b74e86476c6074393abb0245d4c6851203606e6084176e585b3af690d9"},{"version":"ddac06f05642b21adfd000369fece69d57f933e40e748a536428ba1b5ecd1861","signature":"b23169dc7dfa5bcb5dde171d055ec7f39050df45d8be8930d35ba09969053b01"},{"version":"b54a43549568dedda9e87528a9f19279b438e56a091c87a0edb97dd928c80e78","signature":"726a57df2a6b276e4fef0df48a99c3bea8989ded983526dd7e201b479095955f"},{"version":"17781acb9a831dfa96084b3c20db3e3e9871b0cf6c311dd83cfcea2eb1783b89","signature":"439651ef30ab77db8105766caddcda429109b16fad1901ff46f60b51faddc25b"},{"version":"692fb2caf3601bb16cb3e2c9534840ff2a129dda7db86b6e5e7bb65c9ae61bab","signature":"1ad7080efbdce996ebb231b5d48f47116b59dd9db1cf25e89040bf0516d9ecb5"},{"version":"7eb109f9313fa96168526bcb7ae9d5f0644839498019e903b382d90581930966","signature":"c7fac3f4c186a24774cc7a24ffbb4a501efdd847a9ccc8809ea2ed2bad4abd5f"},{"version":"85f99ee775c9d14c6221a07c0a4c0ec82ea2110f682ce436336bbadd679ecf55","impliedFormat":1},{"version":"4a5cc954f9b4b19afa7afd8ce6e87220e0f2c2f7aa9994634a5228db8f66601d","impliedFormat":1},{"version":"44aa0a7f0450153814fd3a3aebcc810ac8afc655a160cb4a1f4529cea50d05a1","impliedFormat":1},{"version":"9c7e403448ee91b715ca833ec9be0f447366a7364fe9825b8669287927152db0","impliedFormat":1},{"version":"7523550341a56bad709c8ad63bec3b18a1fb00c806065e7e19a1b6dc3fb917e2","impliedFormat":1},{"version":"07fbcf6c38485de48387796f3832f32ec69a1087ff178400f9e5c050d127fa11","impliedFormat":1},{"version":"86d83d32bd38f04843300e9c45d7adecfdcc4892dedceb5e40a2af052101e5ca","signature":"136fa55702a8593b99e404f8fb75744f693d039e4840bcd0fe44b3c763cfa2ed"},{"version":"d2c608af8bab06d01b2d00a073d3535fc3324217dc1604db8d6c2d5e2599d785","signature":"87489b340c7e79f7022aab8748d8bb1d70b69d82013fd38208762034c37d8526"},{"version":"eac647a94fb1f09789e12dfecb52dcd678d05159a4796b4e415aa15892f3b103","impliedFormat":1},{"version":"0744807211f8cd16343fb1a796f53a8f7b7f95d4bd278c48febf657679bf28e6","impliedFormat":1},{"version":"845cbb3440d010ec569aa551b73432285fee0500c9b72bea5d179b61700fb7b5","signature":"c73cdb9f784c9ca69c66a631299aecdc28ba0bd3b66c35740cd6dbeadbbad2e5"},{"version":"73b65a9260e74ff2638192d302cb164bbf6b50d7b4e6b5ca43a73e3f6c155949","signature":"ae03a480f2035a57df159e172960121f5b7b02af0cbd74700df0d7e99e141b06"},{"version":"ba59b4fae7521ca204e1cffc855893fdd12def95e8fb10351a9675881aee5cde","signature":"2f243266bf449b1f72a5c7a445bd89576b156864a80aedb0b2e4d2f072a74ff1"},{"version":"441e5f82693a716c1eda6f4fe1e40120d87ec59282d56af3a1dc49dc273ee7e5","signature":"14ac73121c543b8e6741a4d19982d6bb9878f5e90ececba2af5bfb04c1e33023"},{"version":"82908b3303a864315465937e0d7f67014b2a33d64ce6c1af3689005caba58c6d","signature":"4f07831578976e1df0c451fe156a4dd9f6e835bb1b75cd278659f6f9e67de44c"},{"version":"fe448fa9ab863bf5af6528f501ba9e840e9d1ba960d026dd86d38bcc7ae16397","signature":"11c589b9a82361aa3a781ea66c3b5615e79fb7401f02582693e853cc347ea290"},"c43f1d32e9db32f7d02c785bee9e65480d87a93078c8da27652f3f04739ef678",{"version":"18bc4169d4649a8ab0808a36ac9df16154f784327c38db15ae6d14866173aafb","signature":"cede9fd03bac4d7db29e8046c8133736f92771c2350c4d2ed1e219482cd61925"},{"version":"c0360ff51bc6c51b10b87265abd920f18b130d1cb6809b8b43ac46677eb15138","signature":"409dd38e2c713d25c03004d6b1aee051efaf55ea17f3e384202bd07494e91328"},"276d4602d6f531ab7fe581bd59af2cdf707049108665a3a4668a81775a934f5e",{"version":"92e5c5f358db6621053fe2a90f3b3acd422b904386ccaa540bcaaeb7f0154dfc","signature":"6a37df393630b642c2d3d45dec184a55a93cd8c205f9a4313cb0bdfe3a983088"},{"version":"160b24efb5a868df9c54f337656b4ef55fcbe0548fe15408e1c0630ec559c559","impliedFormat":1},{"version":"427fe2004642504828c1476d0af4270e6ad4db6de78c0b5da3e4c5ca95052a99","impliedFormat":1},{"version":"2eeffcee5c1661ddca53353929558037b8cf305ffb86a803512982f99bcab50d","impliedFormat":99},{"version":"9afb4cb864d297e4092a79ee2871b5d3143ea14153f62ef0bb04ede25f432030","affectsGlobalScope":true,"impliedFormat":99},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1}],"root":[58,[161,165],168,169,[171,183],[185,190],197,198,[201,211]],"options":{"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitAny":false,"noImplicitReturns":true,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./","rootDir":"..","skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"referencedMap":[[212,1],[160,1],[108,2],[109,2],[110,3],[64,4],[111,5],[112,6],[113,7],[59,8],[62,9],[60,8],[61,8],[114,10],[115,11],[116,12],[117,13],[118,14],[119,15],[120,15],[121,16],[122,17],[123,18],[124,19],[65,8],[63,8],[125,20],[126,21],[127,22],[159,23],[128,24],[129,25],[130,26],[131,27],[132,28],[133,29],[134,30],[135,31],[136,32],[137,33],[138,33],[139,34],[140,8],[141,35],[143,36],[142,37],[144,38],[145,39],[146,40],[147,41],[148,42],[149,43],[150,44],[151,45],[152,46],[153,47],[154,48],[155,49],[156,50],[66,8],[67,8],[68,8],[107,51],[157,52],[158,53],[199,8],[69,8],[200,54],[184,55],[194,56],[192,56],[196,57],[193,55],[195,55],[166,8],[191,55],[167,55],[170,8],[56,8],[57,8],[11,8],[10,8],[2,8],[12,8],[13,8],[14,8],[15,8],[16,8],[17,8],[18,8],[19,8],[3,8],[20,8],[21,8],[4,8],[22,8],[26,8],[23,8],[24,8],[25,8],[27,8],[28,8],[29,8],[5,8],[30,8],[31,8],[32,8],[33,8],[6,8],[37,8],[34,8],[35,8],[36,8],[38,8],[7,8],[39,8],[44,8],[45,8],[40,8],[41,8],[42,8],[43,8],[8,8],[49,8],[46,8],[47,8],[48,8],[50,8],[9,8],[51,8],[52,8],[53,8],[55,8],[54,8],[1,8],[85,58],[95,59],[84,58],[105,60],[76,61],[75,62],[104,1],[98,63],[103,64],[78,65],[92,66],[77,67],[101,68],[73,69],[72,1],[102,70],[74,71],[79,72],[80,8],[83,72],[70,8],[106,73],[96,74],[87,75],[88,76],[90,77],[86,78],[89,79],[99,1],[81,80],[82,81],[91,82],[71,83],[94,74],[93,72],[97,8],[100,84],[215,85],[213,8],[216,8],[214,8],[208,86],[204,86],[205,86],[203,86],[210,87],[202,86],[209,88],[206,86],[197,89],[198,90],[185,91],[207,92],[211,93],[177,94],[174,95],[176,95],[171,96],[178,97],[173,95],[175,95],[172,95],[190,98],[186,99],[182,100],[187,101],[183,102],[181,103],[179,104],[180,105],[189,106],[188,107],[169,108],[168,91],[162,109],[164,110],[165,111],[163,110],[161,8],[58,8],[201,112]],"latestChangedDtsFile":"./src/graph/analyzer.d.ts","version":"5.9.3"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@monoes/monograph",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "description": "Native TypeScript code intelligence engine for monomind",
6
+ "main": "dist/src/index.js",
7
+ "types": "dist/src/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/src/index.d.ts",
11
+ "import": "./dist/src/index.js"
12
+ }
13
+ },
14
+ "publishConfig": {
15
+ "access": "public",
16
+ "tag": "latest"
17
+ },
18
+ "scripts": {
19
+ "build": "tsc",
20
+ "test": "vitest run"
21
+ },
22
+ "dependencies": {
23
+ "better-sqlite3": "^12.0.0",
24
+ "graphology": "^0.25.4",
25
+ "graphology-communities-louvain": "^2.0.1",
26
+ "graphology-metrics": "^2.4.0",
27
+ "graphology-shortest-path": "^2.0.2",
28
+ "graphology-traversal": "^0.3.1",
29
+ "graphology-types": "^0.24.7",
30
+ "chokidar": "^3.6.0",
31
+ "tree-sitter": "^0.22.0",
32
+ "tree-sitter-typescript": "^0.23.0",
33
+ "tree-sitter-python": "^0.23.0",
34
+ "tree-sitter-go": "^0.23.0",
35
+ "tree-sitter-rust": "^0.23.0",
36
+ "tree-sitter-java": "^0.23.0"
37
+ },
38
+ "devDependencies": {
39
+ "@types/better-sqlite3": "^7.6.0",
40
+ "@types/node": "^20.0.0",
41
+ "typescript": "^5.3.0",
42
+ "vitest": "^4.1.4"
43
+ }
44
+ }
@@ -0,0 +1,42 @@
1
+ import type { MonographNode, MonographEdge } from '../types.js';
2
+
3
+ export function toCanvas(nodes: MonographNode[], edges: MonographEdge[]): string {
4
+ const canvasNodes = nodes.map((n, i) => ({
5
+ id: n.id,
6
+ type: 'text',
7
+ text: `**${n.label}**\n${n.name}`,
8
+ x: (i % 20) * 200,
9
+ y: Math.floor(i / 20) * 120,
10
+ width: 180,
11
+ height: 80,
12
+ color: labelColor(n.label),
13
+ }));
14
+
15
+ const canvasEdges = edges.map(e => ({
16
+ id: e.id,
17
+ fromNode: e.sourceId,
18
+ toNode: e.targetId,
19
+ label: e.relation,
20
+ color: confidenceColor(e.confidence),
21
+ }));
22
+
23
+ return JSON.stringify({ nodes: canvasNodes, edges: canvasEdges }, null, 2);
24
+ }
25
+
26
+ function labelColor(label: string): string {
27
+ const map: Record<string, string> = {
28
+ Class: '1',
29
+ Function: '2',
30
+ Interface: '3',
31
+ Module: '4',
32
+ Namespace: '5',
33
+ Method: '6',
34
+ };
35
+ return map[label] ?? '6';
36
+ }
37
+
38
+ function confidenceColor(c: string): string {
39
+ if (c === 'EXTRACTED') return '#22c55e';
40
+ if (c === 'INFERRED') return '#f59e0b';
41
+ return '#ef4444';
42
+ }
@@ -0,0 +1,33 @@
1
+ import type { MonographNode, MonographEdge } from '../types.js';
2
+
3
+ export function toCypher(nodes: MonographNode[], edges: MonographEdge[]): string {
4
+ const lines: string[] = [
5
+ '// Generated by Monograph — read-only import script',
6
+ '// Only CREATE statements; no DROP/DELETE operations',
7
+ '',
8
+ ];
9
+
10
+ for (const n of nodes) {
11
+ const props = `{id: ${q(n.id)}, name: ${q(n.name)}, file: ${q(n.filePath ?? '')}, exported: ${n.isExported}}`;
12
+ lines.push(`CREATE (n_${safe(n.id)}:${n.label} ${props})`);
13
+ }
14
+
15
+ lines.push('');
16
+
17
+ for (const e of edges) {
18
+ lines.push(
19
+ `MATCH (a {id: ${q(e.sourceId)}}), (b {id: ${q(e.targetId)}}) ` +
20
+ `CREATE (a)-[:${e.relation} {confidence: ${q(e.confidence)}}]->(b)`
21
+ );
22
+ }
23
+
24
+ return lines.join('\n');
25
+ }
26
+
27
+ function q(s: string): string {
28
+ return `"${s.replace(/"/g, '\\"')}"`;
29
+ }
30
+
31
+ function safe(s: string): string {
32
+ return s.replace(/[^a-zA-Z0-9_]/g, '_');
33
+ }
@@ -0,0 +1,48 @@
1
+ import type { MonographNode, MonographEdge } from '../types.js';
2
+
3
+ export function toGraphml(nodes: MonographNode[], edges: MonographEdge[]): string {
4
+ const nodeXml = nodes
5
+ .map(
6
+ n =>
7
+ ` <node id="${esc(n.id)}">` +
8
+ `<data key="label">${esc(n.label)}</data>` +
9
+ `<data key="name">${esc(n.name)}</data>` +
10
+ `<data key="file">${esc(n.filePath ?? '')}</data>` +
11
+ `<data key="exported">${n.isExported ? 'true' : 'false'}</data>` +
12
+ `</node>`
13
+ )
14
+ .join('\n');
15
+
16
+ const edgeXml = edges
17
+ .map(
18
+ e =>
19
+ ` <edge id="${esc(e.id)}" source="${esc(e.sourceId)}" target="${esc(e.targetId)}">` +
20
+ `<data key="relation">${esc(e.relation)}</data>` +
21
+ `<data key="confidence">${esc(e.confidence)}</data>` +
22
+ `</edge>`
23
+ )
24
+ .join('\n');
25
+
26
+ return `<?xml version="1.0" encoding="UTF-8"?>
27
+ <graphml xmlns="http://graphml.graphdrawing.org/graphml">
28
+ <key id="label" for="node" attr.name="label" attr.type="string"/>
29
+ <key id="name" for="node" attr.name="name" attr.type="string"/>
30
+ <key id="file" for="node" attr.name="file" attr.type="string"/>
31
+ <key id="exported" for="node" attr.name="exported" attr.type="boolean"/>
32
+ <key id="relation" for="edge" attr.name="relation" attr.type="string"/>
33
+ <key id="confidence" for="edge" attr.name="confidence" attr.type="string"/>
34
+ <graph id="G" edgedefault="directed">
35
+ ${nodeXml}
36
+ ${edgeXml}
37
+ </graph>
38
+ </graphml>`;
39
+ }
40
+
41
+ function esc(s: string): string {
42
+ return s
43
+ .replace(/&/g, '&amp;')
44
+ .replace(/</g, '&lt;')
45
+ .replace(/>/g, '&gt;')
46
+ .replace(/"/g, '&quot;')
47
+ .replace(/'/g, '&apos;');
48
+ }
@@ -0,0 +1,61 @@
1
+ import type { MonographNode, MonographEdge } from '../types.js';
2
+
3
+ const MAX_NODES = 5000;
4
+
5
+ export function toHtml(nodes: MonographNode[], edges: MonographEdge[]): string {
6
+ const visNodes = nodes.slice(0, MAX_NODES).map(n => ({
7
+ id: n.id,
8
+ label: n.name,
9
+ title: `${n.label} in ${n.filePath ?? '?'}`,
10
+ group: n.communityId ?? 0,
11
+ }));
12
+
13
+ const visEdges = edges
14
+ .filter(
15
+ e =>
16
+ visNodes.some(n => n.id === e.sourceId) && visNodes.some(n => n.id === e.targetId)
17
+ )
18
+ .map(e => ({
19
+ from: e.sourceId,
20
+ to: e.targetId,
21
+ title: e.relation,
22
+ }));
23
+
24
+ return `<!DOCTYPE html>
25
+ <html>
26
+ <head>
27
+ <meta charset="UTF-8">
28
+ <title>Monograph</title>
29
+ <script src="https://unpkg.com/vis-network/standalone/umd/vis-network.min.js"><\/script>
30
+ <style>
31
+ * { margin: 0; padding: 0; box-sizing: border-box; }
32
+ body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; }
33
+ #graph { width: 100vw; height: 100vh; }
34
+ #search { position: fixed; top: 10px; left: 10px; z-index: 10; padding: 8px 12px; border: 1px solid #ccc; border-radius: 4px; font-size: 14px; }
35
+ #info { position: fixed; top: 10px; right: 10px; z-index: 10; background: rgba(255,255,255,0.9); padding: 10px; border-radius: 4px; font-size: 12px; }
36
+ </style>
37
+ </head>
38
+ <body>
39
+ <input id="search" placeholder="Search nodes..." oninput="filterNodes(this.value)">
40
+ <div id="info">Nodes: <span id="nodeCount">${visNodes.length}</span> | Edges: <span id="edgeCount">${visEdges.length}</span></div>
41
+ <div id="graph"><\/div>
42
+ <script>
43
+ const nodes = new vis.DataSet(${JSON.stringify(visNodes)});
44
+ const edges = new vis.DataSet(${JSON.stringify(visEdges)});
45
+ const network = new vis.Network(document.getElementById('graph'), { nodes, edges }, {
46
+ physics: { enabled: true, stabilization: { iterations: 100 } },
47
+ interaction: { hover: true },
48
+ });
49
+ function filterNodes(q) {
50
+ const originalNodes = ${JSON.stringify(visNodes)};
51
+ if (!q) {
52
+ nodes.update(originalNodes);
53
+ } else {
54
+ const lowerQ = q.toLowerCase();
55
+ nodes.update(originalNodes.map(n => ({...n, hidden: !n.label.toLowerCase().includes(lowerQ)})));
56
+ }
57
+ }
58
+ <\/script>
59
+ </body>
60
+ </html>`;
61
+ }
@@ -0,0 +1,7 @@
1
+ export { toJson } from './json.js';
2
+ export { toCypher } from './cypher.js';
3
+ export { toHtml } from './html.js';
4
+ export { toObsidian } from './obsidian.js';
5
+ export { toCanvas } from './canvas.js';
6
+ export { toGraphml } from './graphml.js';
7
+ export { toSvg } from './svg.js';
@@ -0,0 +1,36 @@
1
+ import type { MonographNode, MonographEdge } from '../types.js';
2
+
3
+ export function toJson(nodes: MonographNode[], edges: MonographEdge[]): string {
4
+ return JSON.stringify(
5
+ {
6
+ nodes: nodes.map(n => ({
7
+ id: n.id,
8
+ label: n.label,
9
+ name: n.name,
10
+ norm_label: n.normLabel,
11
+ source_file: n.filePath ?? null,
12
+ start_line: n.startLine ?? null,
13
+ end_line: n.endLine ?? null,
14
+ community: n.communityId ?? null,
15
+ is_exported: n.isExported,
16
+ language: n.language ?? null,
17
+ properties: n.properties ?? null,
18
+ })),
19
+ edges: edges.map(e => ({
20
+ id: e.id,
21
+ source: e.sourceId,
22
+ target: e.targetId,
23
+ relation: e.relation,
24
+ confidence: e.confidence,
25
+ confidence_score: e.confidenceScore,
26
+ })),
27
+ links: edges.map(e => ({
28
+ source: e.sourceId,
29
+ target: e.targetId,
30
+ relation: e.relation,
31
+ })),
32
+ },
33
+ null,
34
+ 2
35
+ );
36
+ }
@@ -0,0 +1,44 @@
1
+ import type { MonographNode, MonographEdge } from '../types.js';
2
+ import { join } from 'path';
3
+ import { writeFileSync, mkdirSync } from 'fs';
4
+
5
+ export function toObsidian(nodes: MonographNode[], edges: MonographEdge[], outputDir: string): void {
6
+ mkdirSync(outputDir, { recursive: true });
7
+
8
+ const adjOut = new Map<string, string[]>();
9
+ for (const e of edges) {
10
+ const targets = adjOut.get(e.sourceId) ?? [];
11
+ targets.push(e.targetId);
12
+ adjOut.set(e.sourceId, targets);
13
+ }
14
+
15
+ const nodeMap = new Map(nodes.map(n => [n.id, n]));
16
+
17
+ for (const node of nodes) {
18
+ const links = (adjOut.get(node.id) ?? [])
19
+ .map(tid => nodeMap.get(tid)?.name)
20
+ .filter(Boolean)
21
+ .map(name => `- [[${name}]]`)
22
+ .join('\n');
23
+
24
+ const content = `---
25
+ label: ${node.label}
26
+ file: ${node.filePath ?? ''}
27
+ exported: ${node.isExported}
28
+ community: ${node.communityId ?? 'none'}
29
+ ---
30
+
31
+ # ${node.name}
32
+
33
+ **Type:** ${node.label}
34
+ **Language:** ${node.language ?? 'unknown'}
35
+
36
+ ## Outgoing links
37
+
38
+ ${links || '_none_'}
39
+ `;
40
+
41
+ const filename = node.name.replace(/[<>:"/\\|?*]/g, '_');
42
+ writeFileSync(join(outputDir, `${filename}.md`), content);
43
+ }
44
+ }