@jafreck/lore 0.2.4 → 0.3.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 (200) hide show
  1. package/README.md +63 -35
  2. package/dist/cli.js +41 -38
  3. package/dist/cli.js.map +1 -1
  4. package/dist/index.d.ts +24 -5
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +23 -4
  7. package/dist/index.js.map +1 -1
  8. package/dist/indexer/call-graph.d.ts +29 -8
  9. package/dist/indexer/call-graph.d.ts.map +1 -1
  10. package/dist/indexer/call-graph.js +232 -31
  11. package/dist/indexer/call-graph.js.map +1 -1
  12. package/dist/indexer/config-parser.js +6 -1
  13. package/dist/indexer/config-parser.js.map +1 -1
  14. package/dist/indexer/coverage.js +3 -1
  15. package/dist/indexer/coverage.js.map +1 -1
  16. package/dist/indexer/db.d.ts.map +1 -1
  17. package/dist/indexer/db.js +70 -1
  18. package/dist/indexer/db.js.map +1 -1
  19. package/dist/indexer/docs.d.ts.map +1 -1
  20. package/dist/indexer/docs.js +4 -0
  21. package/dist/indexer/docs.js.map +1 -1
  22. package/dist/indexer/embedder.d.ts.map +1 -1
  23. package/dist/indexer/embedder.js +5 -0
  24. package/dist/indexer/embedder.js.map +1 -1
  25. package/dist/indexer/extractors/bash.d.ts.map +1 -1
  26. package/dist/indexer/extractors/bash.js +29 -1
  27. package/dist/indexer/extractors/bash.js.map +1 -1
  28. package/dist/indexer/extractors/c.d.ts +5 -2
  29. package/dist/indexer/extractors/c.d.ts.map +1 -1
  30. package/dist/indexer/extractors/c.js +277 -8
  31. package/dist/indexer/extractors/c.js.map +1 -1
  32. package/dist/indexer/extractors/cpp.d.ts +5 -2
  33. package/dist/indexer/extractors/cpp.d.ts.map +1 -1
  34. package/dist/indexer/extractors/cpp.js +349 -3
  35. package/dist/indexer/extractors/cpp.js.map +1 -1
  36. package/dist/indexer/extractors/csharp.d.ts.map +1 -1
  37. package/dist/indexer/extractors/csharp.js +166 -1
  38. package/dist/indexer/extractors/csharp.js.map +1 -1
  39. package/dist/indexer/extractors/dart.d.ts.map +1 -1
  40. package/dist/indexer/extractors/dart.js +134 -1
  41. package/dist/indexer/extractors/dart.js.map +1 -1
  42. package/dist/indexer/extractors/elixir.d.ts.map +1 -1
  43. package/dist/indexer/extractors/elixir.js +45 -0
  44. package/dist/indexer/extractors/elixir.js.map +1 -1
  45. package/dist/indexer/extractors/elm.d.ts.map +1 -1
  46. package/dist/indexer/extractors/elm.js +33 -0
  47. package/dist/indexer/extractors/elm.js.map +1 -1
  48. package/dist/indexer/extractors/go.d.ts.map +1 -1
  49. package/dist/indexer/extractors/go.js +206 -1
  50. package/dist/indexer/extractors/go.js.map +1 -1
  51. package/dist/indexer/extractors/haskell.d.ts.map +1 -1
  52. package/dist/indexer/extractors/haskell.js +29 -0
  53. package/dist/indexer/extractors/haskell.js.map +1 -1
  54. package/dist/indexer/extractors/java.d.ts.map +1 -1
  55. package/dist/indexer/extractors/java.js +170 -1
  56. package/dist/indexer/extractors/java.js.map +1 -1
  57. package/dist/indexer/extractors/javascript.d.ts.map +1 -1
  58. package/dist/indexer/extractors/javascript.js +24 -2
  59. package/dist/indexer/extractors/javascript.js.map +1 -1
  60. package/dist/indexer/extractors/julia.d.ts.map +1 -1
  61. package/dist/indexer/extractors/julia.js +23 -1
  62. package/dist/indexer/extractors/julia.js.map +1 -1
  63. package/dist/indexer/extractors/kotlin.d.ts.map +1 -1
  64. package/dist/indexer/extractors/kotlin.js +122 -1
  65. package/dist/indexer/extractors/kotlin.js.map +1 -1
  66. package/dist/indexer/extractors/lua.d.ts.map +1 -1
  67. package/dist/indexer/extractors/lua.js +19 -1
  68. package/dist/indexer/extractors/lua.js.map +1 -1
  69. package/dist/indexer/extractors/objc.d.ts.map +1 -1
  70. package/dist/indexer/extractors/objc.js +171 -1
  71. package/dist/indexer/extractors/objc.js.map +1 -1
  72. package/dist/indexer/extractors/ocaml.d.ts.map +1 -1
  73. package/dist/indexer/extractors/ocaml.js +29 -0
  74. package/dist/indexer/extractors/ocaml.js.map +1 -1
  75. package/dist/indexer/extractors/php.d.ts.map +1 -1
  76. package/dist/indexer/extractors/php.js +137 -1
  77. package/dist/indexer/extractors/php.js.map +1 -1
  78. package/dist/indexer/extractors/python.d.ts.map +1 -1
  79. package/dist/indexer/extractors/python.js +24 -3
  80. package/dist/indexer/extractors/python.js.map +1 -1
  81. package/dist/indexer/extractors/ruby.d.ts.map +1 -1
  82. package/dist/indexer/extractors/ruby.js +23 -1
  83. package/dist/indexer/extractors/ruby.js.map +1 -1
  84. package/dist/indexer/extractors/rust.d.ts.map +1 -1
  85. package/dist/indexer/extractors/rust.js +139 -2
  86. package/dist/indexer/extractors/rust.js.map +1 -1
  87. package/dist/indexer/extractors/scala.d.ts.map +1 -1
  88. package/dist/indexer/extractors/scala.js +24 -1
  89. package/dist/indexer/extractors/scala.js.map +1 -1
  90. package/dist/indexer/extractors/swift.d.ts.map +1 -1
  91. package/dist/indexer/extractors/swift.js +129 -1
  92. package/dist/indexer/extractors/swift.js.map +1 -1
  93. package/dist/indexer/extractors/types.d.ts +78 -2
  94. package/dist/indexer/extractors/types.d.ts.map +1 -1
  95. package/dist/indexer/extractors/types.js +167 -8
  96. package/dist/indexer/extractors/types.js.map +1 -1
  97. package/dist/indexer/extractors/typescript.d.ts.map +1 -1
  98. package/dist/indexer/extractors/typescript.js +217 -1
  99. package/dist/indexer/extractors/typescript.js.map +1 -1
  100. package/dist/indexer/extractors/zig.d.ts.map +1 -1
  101. package/dist/indexer/extractors/zig.js +30 -0
  102. package/dist/indexer/extractors/zig.js.map +1 -1
  103. package/dist/indexer/git-history.d.ts.map +1 -1
  104. package/dist/indexer/git-history.js +4 -8
  105. package/dist/indexer/git-history.js.map +1 -1
  106. package/dist/indexer/git-hooks.js +1 -1
  107. package/dist/indexer/git-hooks.js.map +1 -1
  108. package/dist/indexer/index.d.ts +27 -52
  109. package/dist/indexer/index.d.ts.map +1 -1
  110. package/dist/indexer/index.js +146 -773
  111. package/dist/indexer/index.js.map +1 -1
  112. package/dist/indexer/lsp/client.d.ts.map +1 -1
  113. package/dist/indexer/lsp/client.js +40 -15
  114. package/dist/indexer/lsp/client.js.map +1 -1
  115. package/dist/indexer/lsp/config.d.ts.map +1 -1
  116. package/dist/indexer/lsp/config.js +18 -4
  117. package/dist/indexer/lsp/config.js.map +1 -1
  118. package/dist/indexer/lsp/enrichment.d.ts +2 -0
  119. package/dist/indexer/lsp/enrichment.d.ts.map +1 -1
  120. package/dist/indexer/lsp/enrichment.js +67 -33
  121. package/dist/indexer/lsp/enrichment.js.map +1 -1
  122. package/dist/indexer/pipeline.d.ts +137 -0
  123. package/dist/indexer/pipeline.d.ts.map +1 -0
  124. package/dist/indexer/pipeline.js +84 -0
  125. package/dist/indexer/pipeline.js.map +1 -0
  126. package/dist/indexer/poller.d.ts +8 -0
  127. package/dist/indexer/poller.d.ts.map +1 -1
  128. package/dist/indexer/poller.js +3 -1
  129. package/dist/indexer/poller.js.map +1 -1
  130. package/dist/indexer/resolution-method.d.ts +40 -0
  131. package/dist/indexer/resolution-method.d.ts.map +1 -0
  132. package/dist/indexer/resolution-method.js +53 -0
  133. package/dist/indexer/resolution-method.js.map +1 -0
  134. package/dist/indexer/resolver.d.ts.map +1 -1
  135. package/dist/indexer/resolver.js +8 -4
  136. package/dist/indexer/resolver.js.map +1 -1
  137. package/dist/indexer/stages/dependency-api.d.ts +18 -0
  138. package/dist/indexer/stages/dependency-api.d.ts.map +1 -0
  139. package/dist/indexer/stages/dependency-api.js +174 -0
  140. package/dist/indexer/stages/dependency-api.js.map +1 -0
  141. package/dist/indexer/stages/docs-index.d.ts +20 -0
  142. package/dist/indexer/stages/docs-index.d.ts.map +1 -0
  143. package/dist/indexer/stages/docs-index.js +144 -0
  144. package/dist/indexer/stages/docs-index.js.map +1 -0
  145. package/dist/indexer/stages/embedding.d.ts +17 -0
  146. package/dist/indexer/stages/embedding.d.ts.map +1 -0
  147. package/dist/indexer/stages/embedding.js +217 -0
  148. package/dist/indexer/stages/embedding.js.map +1 -0
  149. package/dist/indexer/stages/import-resolution.d.ts +17 -0
  150. package/dist/indexer/stages/import-resolution.d.ts.map +1 -0
  151. package/dist/indexer/stages/import-resolution.js +47 -0
  152. package/dist/indexer/stages/import-resolution.js.map +1 -0
  153. package/dist/indexer/stages/index.d.ts +12 -0
  154. package/dist/indexer/stages/index.d.ts.map +1 -0
  155. package/dist/indexer/stages/index.js +12 -0
  156. package/dist/indexer/stages/index.js.map +1 -0
  157. package/dist/indexer/stages/lsp-enrichment.d.ts +48 -0
  158. package/dist/indexer/stages/lsp-enrichment.d.ts.map +1 -0
  159. package/dist/indexer/stages/lsp-enrichment.js +158 -0
  160. package/dist/indexer/stages/lsp-enrichment.js.map +1 -0
  161. package/dist/indexer/stages/source-index.d.ts +31 -0
  162. package/dist/indexer/stages/source-index.d.ts.map +1 -0
  163. package/dist/indexer/stages/source-index.js +314 -0
  164. package/dist/indexer/stages/source-index.js.map +1 -0
  165. package/dist/indexer/watcher.d.ts +8 -0
  166. package/dist/indexer/watcher.d.ts.map +1 -1
  167. package/dist/indexer/watcher.js +18 -1
  168. package/dist/indexer/watcher.js.map +1 -1
  169. package/dist/lore-server/db.d.ts +51 -4
  170. package/dist/lore-server/db.d.ts.map +1 -1
  171. package/dist/lore-server/db.js +102 -93
  172. package/dist/lore-server/db.js.map +1 -1
  173. package/dist/lore-server/server.d.ts +5 -0
  174. package/dist/lore-server/server.d.ts.map +1 -1
  175. package/dist/lore-server/server.js +52 -273
  176. package/dist/lore-server/server.js.map +1 -1
  177. package/dist/lore-server/tool-registry.d.ts +101 -0
  178. package/dist/lore-server/tool-registry.d.ts.map +1 -0
  179. package/dist/lore-server/tool-registry.js +227 -0
  180. package/dist/lore-server/tool-registry.js.map +1 -0
  181. package/dist/lore-server/tools/graph.d.ts +11 -3
  182. package/dist/lore-server/tools/graph.d.ts.map +1 -1
  183. package/dist/lore-server/tools/graph.js +108 -13
  184. package/dist/lore-server/tools/graph.js.map +1 -1
  185. package/dist/lore-server/tools/lookup.d.ts +9 -3
  186. package/dist/lore-server/tools/lookup.d.ts.map +1 -1
  187. package/dist/lore-server/tools/lookup.js +9 -4
  188. package/dist/lore-server/tools/lookup.js.map +1 -1
  189. package/dist/lore-server/tools/notes.d.ts.map +1 -1
  190. package/dist/lore-server/tools/notes.js +6 -2
  191. package/dist/lore-server/tools/notes.js.map +1 -1
  192. package/dist/lore-server/tools/search.d.ts +4 -0
  193. package/dist/lore-server/tools/search.d.ts.map +1 -1
  194. package/dist/lore-server/tools/search.js +50 -14
  195. package/dist/lore-server/tools/search.js.map +1 -1
  196. package/dist/runtime.d.ts +88 -0
  197. package/dist/runtime.d.ts.map +1 -0
  198. package/dist/runtime.js +153 -0
  199. package/dist/runtime.js.map +1 -0
  200. package/package.json +12 -12
@@ -0,0 +1,101 @@
1
+ /**
2
+ * @module lore-server/tool-registry
3
+ *
4
+ * Single-source tool registration. Each MCP tool module exports a `toolDef`
5
+ * (or `writeToolDef` / `readToolDef`) object with its name, description, and
6
+ * JSON-schema. The registry converts those to Zod schemas and wires them into
7
+ * the `McpServer` automatically — no duplicate Zod definitions in server.ts.
8
+ *
9
+ * ## ToolModule contract
10
+ *
11
+ * Every tool file must export **at least**:
12
+ * - `toolDef` (or `writeToolDef` / `readToolDef`) containing `name`, `description`, and `inputSchema`
13
+ * - `handler(db, args, ...)` (or `writeHandler` / `readHandler` for notes)
14
+ *
15
+ * The registry iterates over a list of declared `ToolModule` descriptors and
16
+ * calls `server.tool()` for each, using a standard `loggedHandler` wrapper.
17
+ */
18
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
19
+ import { type ZodType } from 'zod';
20
+ import type { Database } from './db.js';
21
+ import type { EmbeddingProvider } from '../indexer/embedder.js';
22
+ import type { LoreLogger } from '../logger.js';
23
+ import type { SearchObserver } from './tools/search.js';
24
+ /**
25
+ * JSON-schema → Zod bridge.
26
+ *
27
+ * We convert the plain JSON-schema style `inputSchema` that every tool file
28
+ * already declares into Zod objects that `McpServer.tool()` expects. This is
29
+ * the single authoritative conversion point — server.ts no longer needs its
30
+ * own Zod literals.
31
+ */
32
+ /** Shape of a single property in a toolDef.inputSchema. */
33
+ interface JsonSchemaProperty {
34
+ type: string;
35
+ enum?: readonly string[];
36
+ description?: string;
37
+ items?: {
38
+ type: string;
39
+ };
40
+ /** JSON-Schema minimum (inclusive). */
41
+ minimum?: number;
42
+ /** JSON-Schema maximum (inclusive). */
43
+ maximum?: number;
44
+ }
45
+ /** The fragment of inputSchema that every toolDef carries. */
46
+ interface ToolInputSchema {
47
+ type: 'object';
48
+ properties: Record<string, JsonSchemaProperty>;
49
+ required?: readonly string[];
50
+ }
51
+ /** The shape that every tool file exports as `toolDef`. */
52
+ export interface ToolDefinition {
53
+ name: string;
54
+ description: string;
55
+ inputSchema: ToolInputSchema;
56
+ }
57
+ /**
58
+ * Descriptor registered with the tool registry.
59
+ *
60
+ * `handlerFactory` is a function that produces the concrete handler from the
61
+ * shared session dependencies (db, dbPath, embedder, etc.).
62
+ */
63
+ export interface ToolModule {
64
+ def: ToolDefinition;
65
+ /**
66
+ * Build and return the handler function for this tool.
67
+ * Receives session-level dependencies.
68
+ */
69
+ handlerFactory: (deps: ToolDependencies) => (args: any) => unknown | Promise<unknown>;
70
+ }
71
+ /** Dependencies that handler factories may draw from. */
72
+ export interface ToolDependencies {
73
+ db: Database.Database;
74
+ dbPath: string;
75
+ embedder?: EmbeddingProvider;
76
+ searchObserver?: SearchObserver;
77
+ logger: LoreLogger;
78
+ }
79
+ /**
80
+ * Convert an entire `toolDef.inputSchema` into a Zod shape suitable for
81
+ * passing to `server.tool()`.
82
+ */
83
+ export declare function inputSchemaToZodShape(schema: ToolInputSchema): Record<string, ZodType>;
84
+ /**
85
+ * Register all tool modules onto the MCP server.
86
+ *
87
+ * This replaces the long hand-coded `server.tool(...)` block in
88
+ * `createLoreMcpServer()` with a data-driven loop.
89
+ */
90
+ export declare function registerTools(server: McpServer, modules: ToolModule[], deps: ToolDependencies): void;
91
+ /**
92
+ * Builds the complete list of tool modules to register.
93
+ *
94
+ * Each entry pairs the existing `toolDef` with a handler factory that
95
+ * receives session dependencies. The handler factory closures mirror the
96
+ * existing `server.ts` call‐sites exactly — this is a lift-and-shift, not a
97
+ * rewrite.
98
+ */
99
+ export declare function buildToolModules(): Promise<ToolModule[]>;
100
+ export {};
101
+ //# sourceMappingURL=tool-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/lore-server/tool-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAAK,KAAK,OAAO,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAIxD;;;;;;;GAOG;AAEH,2DAA2D;AAC3D,UAAU,kBAAkB;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,8DAA8D;AAC9D,UAAU,eAAe;IACvB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC/C,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9B;AAED,2DAA2D;AAC3D,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,eAAe,CAAC;CAC9B;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,cAAc,CAAC;IACpB;;;OAGG;IACH,cAAc,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACvF;AAED,yDAAyD;AACzD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,MAAM,EAAE,UAAU,CAAC;CACpB;AAgDD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBtF;AA2CD;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,UAAU,EAAE,EACrB,IAAI,EAAE,gBAAgB,GACrB,IAAI,CAWN;AAID;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAsG9D"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * @module lore-server/tool-registry
3
+ *
4
+ * Single-source tool registration. Each MCP tool module exports a `toolDef`
5
+ * (or `writeToolDef` / `readToolDef`) object with its name, description, and
6
+ * JSON-schema. The registry converts those to Zod schemas and wires them into
7
+ * the `McpServer` automatically — no duplicate Zod definitions in server.ts.
8
+ *
9
+ * ## ToolModule contract
10
+ *
11
+ * Every tool file must export **at least**:
12
+ * - `toolDef` (or `writeToolDef` / `readToolDef`) containing `name`, `description`, and `inputSchema`
13
+ * - `handler(db, args, ...)` (or `writeHandler` / `readHandler` for notes)
14
+ *
15
+ * The registry iterates over a list of declared `ToolModule` descriptors and
16
+ * calls `server.tool()` for each, using a standard `loggedHandler` wrapper.
17
+ */
18
+ import { z } from 'zod';
19
+ // ─── JSON-Schema → Zod conversion ────────────────────────────────────────────
20
+ /**
21
+ * Converts a single JSON-schema property definition into the corresponding Zod
22
+ * type. Handles the subset of JSON-Schema we actually use in tool definitions.
23
+ */
24
+ function propertyToZod(prop) {
25
+ if (prop.enum && prop.enum.length > 0) {
26
+ const enumSchema = z.enum(prop.enum);
27
+ return prop.description ? enumSchema.describe(prop.description) : enumSchema;
28
+ }
29
+ let base;
30
+ switch (prop.type) {
31
+ case 'string':
32
+ base = z.string();
33
+ break;
34
+ case 'number': {
35
+ let num = z.number();
36
+ if (prop.minimum !== undefined)
37
+ num = num.min(prop.minimum);
38
+ if (prop.maximum !== undefined)
39
+ num = num.max(prop.maximum);
40
+ base = num;
41
+ break;
42
+ }
43
+ case 'integer': {
44
+ let num = z.number().int();
45
+ if (prop.minimum !== undefined)
46
+ num = num.min(prop.minimum);
47
+ if (prop.maximum !== undefined)
48
+ num = num.max(prop.maximum);
49
+ base = num;
50
+ break;
51
+ }
52
+ case 'boolean':
53
+ base = z.boolean();
54
+ break;
55
+ case 'array':
56
+ base = z.array(prop.items?.type === 'number' ? z.number() : z.string());
57
+ break;
58
+ default:
59
+ base = z.any();
60
+ }
61
+ return prop.description ? base.describe(prop.description) : base;
62
+ }
63
+ /**
64
+ * Convert an entire `toolDef.inputSchema` into a Zod shape suitable for
65
+ * passing to `server.tool()`.
66
+ */
67
+ export function inputSchemaToZodShape(schema) {
68
+ const shape = {};
69
+ const requiredSet = new Set(schema.required ?? []);
70
+ for (const [key, prop] of Object.entries(schema.properties)) {
71
+ const zodProp = propertyToZod(prop);
72
+ if (!requiredSet.has(key)) {
73
+ // In zod v4, .describe() before .optional() loses the description.
74
+ // We apply .optional() first then re-describe if needed.
75
+ const optProp = zodProp.optional();
76
+ shape[key] = prop.description ? optProp.describe(prop.description) : optProp;
77
+ }
78
+ else {
79
+ shape[key] = zodProp;
80
+ }
81
+ }
82
+ return shape;
83
+ }
84
+ // ─── Logged handler wrapper ───────────────────────────────────────────────────
85
+ /**
86
+ * Wrap an MCP tool handler with structured logging.
87
+ * Captures request args, response, timing, and success/error status.
88
+ */
89
+ function loggedHandler(toolName, fn, log) {
90
+ return async (args) => {
91
+ const start = performance.now();
92
+ try {
93
+ const result = await fn(args);
94
+ const durationMs = Math.round((performance.now() - start) * 100) / 100;
95
+ log.toolCall({
96
+ tool: toolName,
97
+ requestBody: args,
98
+ responseBody: result,
99
+ status: 'success',
100
+ durationMs,
101
+ });
102
+ return { content: [{ type: 'text', text: JSON.stringify(result) }] };
103
+ }
104
+ catch (err) {
105
+ const durationMs = Math.round((performance.now() - start) * 100) / 100;
106
+ const errorMessage = err instanceof Error ? err.message : String(err);
107
+ log.toolCall({
108
+ tool: toolName,
109
+ requestBody: args,
110
+ status: 'error',
111
+ durationMs,
112
+ error: errorMessage,
113
+ });
114
+ throw err;
115
+ }
116
+ };
117
+ }
118
+ // ─── Registry ─────────────────────────────────────────────────────────────────
119
+ /**
120
+ * Register all tool modules onto the MCP server.
121
+ *
122
+ * This replaces the long hand-coded `server.tool(...)` block in
123
+ * `createLoreMcpServer()` with a data-driven loop.
124
+ */
125
+ export function registerTools(server, modules, deps) {
126
+ for (const mod of modules) {
127
+ const zodShape = inputSchemaToZodShape(mod.def.inputSchema);
128
+ const handler = mod.handlerFactory(deps);
129
+ server.tool(mod.def.name, mod.def.description, zodShape, loggedHandler(mod.def.name, handler, deps.logger));
130
+ }
131
+ }
132
+ // ─── Tool module declarations (importers) ─────────────────────────────────────
133
+ /**
134
+ * Builds the complete list of tool modules to register.
135
+ *
136
+ * Each entry pairs the existing `toolDef` with a handler factory that
137
+ * receives session dependencies. The handler factory closures mirror the
138
+ * existing `server.ts` call‐sites exactly — this is a lift-and-shift, not a
139
+ * rewrite.
140
+ */
141
+ export async function buildToolModules() {
142
+ // Dynamic imports so the registry can be tree-shaken independently.
143
+ const [lookup, graph, search, docsMod, routes, notes, architecture, testMap, snippet, blame, metrics, coverage, writeback, history, annotationsMod,] = await Promise.all([
144
+ import('./tools/lookup.js'),
145
+ import('./tools/graph.js'),
146
+ import('./tools/search.js'),
147
+ import('./tools/docs.js'),
148
+ import('./tools/routes.js'),
149
+ import('./tools/notes.js'),
150
+ import('./tools/architecture.js'),
151
+ import('./tools/test-map.js'),
152
+ import('./tools/snippet.js'),
153
+ import('./tools/blame.js'),
154
+ import('./tools/metrics.js'),
155
+ import('./tools/coverage.js'),
156
+ import('./tools/writeback.js'),
157
+ import('./tools/history.js'),
158
+ import('./tools/annotations.js'),
159
+ ]);
160
+ return [
161
+ {
162
+ def: lookup.toolDef,
163
+ handlerFactory: (deps) => (args) => lookup.handler(deps.db, args, deps.embedder),
164
+ },
165
+ {
166
+ def: graph.toolDef,
167
+ handlerFactory: (deps) => (args) => graph.handler(deps.db, args),
168
+ },
169
+ {
170
+ def: search.toolDef,
171
+ handlerFactory: (deps) => (args) => search.handler(deps.db, args, deps.embedder, deps.searchObserver),
172
+ },
173
+ {
174
+ def: docsMod.toolDef,
175
+ handlerFactory: (deps) => (args) => docsMod.handler(deps.db, args, deps.embedder),
176
+ },
177
+ {
178
+ def: routes.toolDef,
179
+ handlerFactory: (deps) => (args) => routes.handler(deps.db, args),
180
+ },
181
+ {
182
+ def: notes.writeToolDef,
183
+ handlerFactory: (deps) => (args) => notes.writeHandler(deps.dbPath, args),
184
+ },
185
+ {
186
+ def: notes.readToolDef,
187
+ handlerFactory: (deps) => (args) => notes.readHandler(deps.db, args),
188
+ },
189
+ {
190
+ def: architecture.toolDef,
191
+ handlerFactory: (deps) => (args) => architecture.handler(deps.db, args),
192
+ },
193
+ {
194
+ def: testMap.toolDef,
195
+ handlerFactory: (deps) => (args) => testMap.handler(deps.db, args),
196
+ },
197
+ {
198
+ def: snippet.toolDef,
199
+ handlerFactory: (deps) => (args) => snippet.handler(deps.db, args),
200
+ },
201
+ {
202
+ def: blame.toolDef,
203
+ handlerFactory: (deps) => (args) => blame.handler(deps.db, args),
204
+ },
205
+ {
206
+ def: metrics.toolDef,
207
+ handlerFactory: (deps) => (args) => metrics.handler(deps.db, args ?? {}),
208
+ },
209
+ {
210
+ def: coverage.toolDef,
211
+ handlerFactory: (deps) => (args) => coverage.handler(deps.db, args),
212
+ },
213
+ {
214
+ def: writeback.toolDef,
215
+ handlerFactory: (deps) => (args) => writeback.handler(deps.dbPath, args),
216
+ },
217
+ {
218
+ def: history.toolDef,
219
+ handlerFactory: (deps) => (args) => history.handler(deps.db, args, deps.embedder),
220
+ },
221
+ {
222
+ def: annotationsMod.toolDef,
223
+ handlerFactory: (deps) => (args) => annotationsMod.handler(deps.db, args),
224
+ },
225
+ ];
226
+ }
227
+ //# sourceMappingURL=tool-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/lore-server/tool-registry.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,7 @@
7
7
  * traversals without additional round-trips.
8
8
  */
9
9
  import type { Database } from '../db.js';
10
+ import type { ResolutionMethod } from '../../indexer/resolution-method.js';
10
11
  export declare const toolDef: {
11
12
  readonly name: "lore_graph";
12
13
  readonly description: string;
@@ -15,7 +16,7 @@ export declare const toolDef: {
15
16
  readonly properties: {
16
17
  readonly kind: {
17
18
  readonly type: "string";
18
- readonly enum: readonly ["call", "import", "module", "inheritance"];
19
+ readonly enum: readonly ["call", "import", "module", "inheritance", "type_dependency"];
19
20
  readonly description: string;
20
21
  };
21
22
  readonly source_id: {
@@ -54,7 +55,7 @@ export declare const toolDef: {
54
55
  readonly required: readonly ["kind"];
55
56
  };
56
57
  };
57
- type GraphKind = 'call' | 'import' | 'module' | 'inheritance';
58
+ type GraphKind = 'call' | 'import' | 'module' | 'inheritance' | 'type_dependency';
58
59
  export interface GraphArgs {
59
60
  kind: GraphKind;
60
61
  source_id?: number;
@@ -66,12 +67,19 @@ export interface GraphArgs {
66
67
  semantic_max_distance?: number;
67
68
  }
68
69
  export interface GraphEdge {
69
- source_id: number;
70
+ source_id: number | null;
70
71
  source_name: string;
71
72
  source_branch: string;
72
73
  target_id: number | null;
73
74
  target_name: string;
74
75
  callee_coverage_percent?: number | null;
76
+ ref_kind?: string;
77
+ line?: number;
78
+ character?: number | null;
79
+ resolution_method?: ResolutionMethod;
80
+ definition_path?: string | null;
81
+ definition_line?: number | null;
82
+ definition_character?: number | null;
75
83
  }
76
84
  export interface GraphResult {
77
85
  edges: GraphEdge[];
@@ -1 +1 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/lore-server/tools/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAKzC,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkDV,CAAC;AAIX,KAAK,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,CAAC;AAE9D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwMD,uEAAuE;AACvE,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,GAAG,WAAW,CAgF3E"}
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../src/lore-server/tools/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAI3E,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDV,CAAC;AAIX,KAAK,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,aAAa,GAAG,iBAAiB,CAAC;AAElF,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;IACjC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,iBAAiB,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAuSD,uEAAuE;AACvE,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,GAAG,WAAW,CAgF3E"}
@@ -10,17 +10,18 @@ import { getCoveragePercentBySymbolIds, semanticSearchSymbols } from '../db.js';
10
10
  // ─── Tool definition ──────────────────────────────────────────────────────────
11
11
  export const toolDef = {
12
12
  name: 'lore_graph',
13
- description: 'Query call, import, module, or inheritance graph edges stored in the knowledge-base index. ' +
14
- 'Set `kind` to "call", "import", "module", or "inheritance". ' +
13
+ description: 'Query call, import, module, inheritance, or type dependency graph edges stored in the knowledge-base index. ' +
14
+ 'Set `kind` to "call", "import", "module", "inheritance", or "type_dependency". ' +
15
15
  'Optionally set mode="semantic" with query_vector to retrieve semantically related symbol/module nodes alongside edges.',
16
16
  inputSchema: {
17
17
  type: 'object',
18
18
  properties: {
19
19
  kind: {
20
20
  type: 'string',
21
- enum: ['call', 'import', 'module', 'inheritance'],
21
+ enum: ['call', 'import', 'module', 'inheritance', 'type_dependency'],
22
22
  description: '"call" returns symbol → callee edges; "import" returns file → imported-file edges; ' +
23
- '"module" returns module → imported-module edges; "inheritance" returns symbol → base-symbol edges.',
23
+ '"module" returns module → imported-module edges; "inheritance" returns symbol → base-symbol edges; ' +
24
+ '"type_dependency" returns symbol → referenced-type edges.',
24
25
  },
25
26
  source_id: {
26
27
  type: 'number',
@@ -72,7 +73,17 @@ function getStructuralEdges(db, args, limit) {
72
73
  s_caller.name AS source_name,
73
74
  f_caller.branch AS source_branch,
74
75
  sr.callee_id AS target_id,
75
- sr.callee_name AS target_name
76
+ sr.callee_name AS target_name,
77
+ sr.call_kind AS call_kind,
78
+ sr.call_line + 1 AS line,
79
+ CASE
80
+ WHEN sr.call_character IS NULL THEN NULL
81
+ ELSE sr.call_character + 1
82
+ END AS character,
83
+ sr.resolution_method AS resolution_method,
84
+ sr.definition_path AS definition_path,
85
+ sr.definition_line AS definition_line,
86
+ sr.definition_character AS definition_character
76
87
  FROM symbol_refs sr
77
88
  JOIN symbols s_caller ON s_caller.id = sr.caller_id
78
89
  JOIN files f_caller ON f_caller.id = s_caller.file_id
@@ -82,7 +93,17 @@ function getStructuralEdges(db, args, limit) {
82
93
  s_caller.name AS source_name,
83
94
  f_caller.branch AS source_branch,
84
95
  sr.callee_id AS target_id,
85
- sr.callee_name AS target_name
96
+ sr.callee_name AS target_name,
97
+ sr.call_kind AS call_kind,
98
+ sr.call_line + 1 AS line,
99
+ CASE
100
+ WHEN sr.call_character IS NULL THEN NULL
101
+ ELSE sr.call_character + 1
102
+ END AS character,
103
+ sr.resolution_method AS resolution_method,
104
+ sr.definition_path AS definition_path,
105
+ sr.definition_line AS definition_line,
106
+ sr.definition_character AS definition_character
86
107
  FROM symbol_refs sr
87
108
  JOIN symbols s_caller ON s_caller.id = sr.caller_id
88
109
  JOIN files f_caller ON f_caller.id = s_caller.file_id
@@ -132,7 +153,10 @@ function getStructuralEdges(db, args, limit) {
132
153
  return edges;
133
154
  }
134
155
  else if (args.kind === 'module') {
135
- // Module-level: inferred from file_imports + file_modules
156
+ // Module-level: inferred from file_imports + file_modules.
157
+ // NOTE: No writer populates `modules`/`file_modules` — this query returns
158
+ // empty results until a module-detection writer is implemented.
159
+ // The INNER JOIN on file_modules ensures graceful empty results.
136
160
  const hasFilter = args.source_id !== undefined;
137
161
  const branchClause = args.branch !== undefined ? ' AND f_src.branch = ?' : '';
138
162
  const sql = hasFilter
@@ -172,8 +196,8 @@ function getStructuralEdges(db, args, limit) {
172
196
  const edges = db.prepare(sql).all(...edgeParams);
173
197
  return edges;
174
198
  }
175
- else {
176
- // Symbol-level inheritance edges (e.g., class extends)
199
+ else if (args.kind === 'inheritance') {
200
+ // Symbol-level inheritance edges (e.g., class extends, implements)
177
201
  const hasFilter = args.source_id !== undefined;
178
202
  const branchClause = args.branch !== undefined ? ' AND f_src.branch = ?' : '';
179
203
  const sql = hasFilter
@@ -181,24 +205,95 @@ function getStructuralEdges(db, args, limit) {
181
205
  s_src.name AS source_name,
182
206
  f_src.branch AS source_branch,
183
207
  rel.target_symbol_id AS target_id,
184
- COALESCE(s_dst.name, rel.target_symbol_name) AS target_name
208
+ COALESCE(s_dst.name, rel.target_symbol_name) AS target_name,
209
+ rel.line + 1 AS line,
210
+ CASE
211
+ WHEN rel.character IS NULL THEN NULL
212
+ ELSE rel.character + 1
213
+ END AS character,
214
+ rel.resolution_method AS resolution_method,
215
+ rel.definition_path AS definition_path,
216
+ rel.definition_line AS definition_line,
217
+ rel.definition_character AS definition_character
185
218
  FROM symbol_relationships rel
186
219
  JOIN symbols s_src ON s_src.id = rel.source_symbol_id
187
220
  JOIN files f_src ON f_src.id = s_src.file_id
188
221
  LEFT JOIN symbols s_dst ON s_dst.id = rel.target_symbol_id
189
- WHERE rel.relationship_type = 'extends'
222
+ WHERE rel.relationship_type IN ('extends', 'implements')
190
223
  AND rel.source_symbol_id = ?${branchClause}
191
224
  LIMIT ?`
192
225
  : `SELECT rel.source_symbol_id AS source_id,
193
226
  s_src.name AS source_name,
194
227
  f_src.branch AS source_branch,
195
228
  rel.target_symbol_id AS target_id,
196
- COALESCE(s_dst.name, rel.target_symbol_name) AS target_name
229
+ COALESCE(s_dst.name, rel.target_symbol_name) AS target_name,
230
+ rel.line + 1 AS line,
231
+ CASE
232
+ WHEN rel.character IS NULL THEN NULL
233
+ ELSE rel.character + 1
234
+ END AS character,
235
+ rel.resolution_method AS resolution_method,
236
+ rel.definition_path AS definition_path,
237
+ rel.definition_line AS definition_line,
238
+ rel.definition_character AS definition_character
197
239
  FROM symbol_relationships rel
198
240
  JOIN symbols s_src ON s_src.id = rel.source_symbol_id
199
241
  JOIN files f_src ON f_src.id = s_src.file_id
200
242
  LEFT JOIN symbols s_dst ON s_dst.id = rel.target_symbol_id
201
- WHERE rel.relationship_type = 'extends'${branchClause}
243
+ WHERE rel.relationship_type IN ('extends', 'implements')${branchClause}
244
+ LIMIT ?`;
245
+ const edgeParams = hasFilter
246
+ ? (args.branch !== undefined ? [args.source_id, args.branch, limit] : [args.source_id, limit])
247
+ : (args.branch !== undefined ? [args.branch, limit] : [limit]);
248
+ const edges = db.prepare(sql).all(...edgeParams);
249
+ return edges;
250
+ }
251
+ else {
252
+ // type_dependency: symbol → referenced type edges
253
+ const hasFilter = args.source_id !== undefined;
254
+ const branchClause = args.branch !== undefined ? ' AND f_src.branch = ?' : '';
255
+ const sql = hasFilter
256
+ ? `SELECT tr.symbol_id AS source_id,
257
+ COALESCE(s_src.name, '') AS source_name,
258
+ f_src.branch AS source_branch,
259
+ tr.type_id AS target_id,
260
+ COALESCE(s_dst.name, tr.type_name) AS target_name,
261
+ tr.ref_kind AS ref_kind,
262
+ tr.ref_line + 1 AS line,
263
+ CASE
264
+ WHEN tr.ref_character IS NULL THEN NULL
265
+ ELSE tr.ref_character + 1
266
+ END AS character,
267
+ tr.resolution_method AS resolution_method,
268
+ tr.definition_path AS definition_path,
269
+ tr.definition_line AS definition_line,
270
+ tr.definition_character AS definition_character
271
+ FROM type_refs tr
272
+ JOIN files f_src ON f_src.id = tr.file_id
273
+ LEFT JOIN symbols s_src ON s_src.id = tr.symbol_id
274
+ LEFT JOIN symbols s_dst ON s_dst.id = tr.type_id
275
+ WHERE tr.symbol_id = ?${branchClause}
276
+ LIMIT ?`
277
+ : `SELECT tr.symbol_id AS source_id,
278
+ COALESCE(s_src.name, '') AS source_name,
279
+ f_src.branch AS source_branch,
280
+ tr.type_id AS target_id,
281
+ COALESCE(s_dst.name, tr.type_name) AS target_name,
282
+ tr.ref_kind AS ref_kind,
283
+ tr.ref_line + 1 AS line,
284
+ CASE
285
+ WHEN tr.ref_character IS NULL THEN NULL
286
+ ELSE tr.ref_character + 1
287
+ END AS character,
288
+ tr.resolution_method AS resolution_method,
289
+ tr.definition_path AS definition_path,
290
+ tr.definition_line AS definition_line,
291
+ tr.definition_character AS definition_character
292
+ FROM type_refs tr
293
+ JOIN files f_src ON f_src.id = tr.file_id
294
+ LEFT JOIN symbols s_src ON s_src.id = tr.symbol_id
295
+ LEFT JOIN symbols s_dst ON s_dst.id = tr.type_id
296
+ WHERE 1=1${branchClause}
202
297
  LIMIT ?`;
203
298
  const edgeParams = hasFilter
204
299
  ? (args.branch !== undefined ? [args.source_id, args.branch, limit] : [args.source_id, limit])
@@ -1 +1 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/lore-server/tools/graph.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEhF,iFAAiF;AAEjF,MAAM,CAAC,MAAM,OAAO,GAAG;IACrB,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,6FAA6F;QAC7F,8DAA8D;QAC9D,wHAAwH;IAC1H,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,CAAC;gBACjD,WAAW,EACT,qFAAqF;oBACrF,oGAAoG;aACvG;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EACT,8EAA8E;aACjF;YACD,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,kDAAkD;aAChE;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,wDAAwD;aACtE;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC;gBAChC,WAAW,EAAE,+FAA+F;aAC7G;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,+DAA+D;aAC7E;YACD,cAAc,EAAE;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,sEAAsE;aACpF;YACD,qBAAqB,EAAE;gBACrB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qEAAqE;aACnF;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;CACO,CAAC;AAkDX,SAAS,eAAe,CAAC,EAAqB,EAAE,IAAY;IAC1D,MAAM,GAAG,GAAG,EAAE;SACX,OAAO,CACN,sGAAsG,CACvG;SACA,GAAG,CAAC,IAAI,CAAoC,CAAC;IAChD,OAAO,GAAG,EAAE,OAAO,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,kBAAkB,CACzB,EAAqB,EACrB,IAAe,EACf,KAAa;IAEb,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,iCAAiC;QACjC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,CAAC;QACjF,MAAM,GAAG,GAAG,SAAS;YACnB,CAAC,CAAC;;;;;;;;kCAQ0B,YAAY;kBAC5B;YACZ,CAAC,CAAC;;;;;;;;qBAQa,YAAY;kBACf,CAAC;QAEf,MAAM,UAAU,GAAG,SAAS;YAC1B,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9F,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAgB,CAAC;QAChE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAC1B,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,EAAgB,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CACvF,CAAC;QACF,MAAM,kBAAkB,GAAG,6BAA6B,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QACrF,MAAM,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7C,GAAG,IAAI;YACP,uBAAuB,EACrB,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;SACpF,CAAC,CAAC,CAAC;QAEJ,OAAO,iBAAiB,CAAC;IAC3B,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,gCAAgC;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,GAAG,GAAG,SAAS;YACnB,CAAC,CAAC;;;;;;;;gCAQwB,YAAY;kBAC1B;YACZ,CAAC,CAAC;;;;;;;;qBAQa,YAAY;kBACf,CAAC;QAEf,MAAM,UAAU,GAAG,SAAS;YAC1B,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9F,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAgB,CAAC;QAEhE,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAClC,0DAA0D;QAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,GAAG,GAAG,SAAS;YACnB,CAAC,CAAC;;;;;;;;;;;;;+BAauB,YAAY;mBACxB;YACb,CAAC,CAAC;;;;;;;;;;;;;sBAac,YAAY;mBACf,CAAC;QAEhB,MAAM,UAAU,GAAG,SAAS;YAC1B,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9F,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAgB,CAAC;QAEhE,OAAO,KAAK,CAAC;IACf,CAAC;SAAM,CAAC;QACN,uDAAuD;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC;QAC/C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,GAAG,GAAG,SAAS;YACnB,CAAC,CAAC;;;;;;;;;;0CAUkC,YAAY;kBACpC;YACZ,CAAC,CAAC;;;;;;;;;mDAS2C,YAAY;kBAC7C,CAAC;QAEf,MAAM,UAAU,GAAG,SAAS;YAC1B,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9F,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,UAAU,CAAgB,CAAC;QAEhE,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,yBAAyB,CAChC,EAAqB,EACrB,SAAmB;IAEnB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzD,OAAO,EAAE,CAAC,OAAO,CACf;;;;;;;;;uBASmB,YAAY,GAAG,CACnC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAuB,CAAC;AAC5C,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,OAAO,CAAC,EAAqB,EAAE,IAAe;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC;IAChC,MAAM,KAAK,GAAG,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC;IAEvC,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC;IACtC,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7C,OAAO;YACL,KAAK;YACL,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,6CAA6C;SACzD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE,mBAAmB,CAAC,EAAE,CAAC;QAC9C,OAAO;YACL,KAAK;YACL,cAAc,EAAE,EAAE;YAClB,SAAS,EAAE,sCAAsC;SAClD,CAAC;IACJ,CAAC;IAED,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1F,MAAM,WAAW,GAAG,IAAI,CAAC,qBAAqB,CAAC;IAC/C,MAAM,UAAU,GAAG,qBAAqB,CAAC,EAAE,EAAE;QAC3C,WAAW;QACX,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,KAAK,EAAE,aAAa;KACrB,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,WAAW,KAAK,SAAS;QAC/C,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW,CAAC,CAAC;IAEzD,MAAM,WAAW,GAAwB,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACrE,SAAS,EAAE,QAAQ;QACnB,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,WAAW;QACvB,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC,CAAC,CAAC;IAEJ,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnF,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC9D,MAAM,cAAc,GAAG,yBAAyB,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzF,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACrC,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,SAAS;QACX,CAAC;QACD,MAAM,SAAS,GAAG,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAClE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,IAAI,WAAW,GAAG,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC9C,gBAAgB,CAAC,GAAG,CAAC,SAAS,EAAE;gBAC9B,SAAS,EAAE,QAAQ;gBACnB,EAAE,EAAE,OAAO,CAAC,SAAS;gBACrB,IAAI,EAAE,OAAO,CAAC,WAAW;gBACzB,MAAM,EAAE,OAAO,CAAC,aAAa;gBAC7B,KAAK,EAAE,WAAW;gBAClB,IAAI,EAAE,OAAO,CAAC,WAAW;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACtE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;WACd,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;WAChC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;WAC5B,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAElB,OAAO;QACL,KAAK;QACL,cAAc,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,WAAW,CAAC;QAChD,SAAS,EAAE,UAAU;KACtB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../../src/lore-server/tools/graph.ts"],"names":[],"mappings":"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"}