@jafreck/lore 0.3.6 → 0.3.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -150
- package/dist/cli.d.ts +2 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +80 -32
- package/dist/cli.js.map +1 -1
- package/dist/db/read-only.d.ts +22 -43
- package/dist/db/read-only.d.ts.map +1 -1
- package/dist/db/read-only.js +80 -156
- package/dist/db/read-only.js.map +1 -1
- package/dist/db/schema.d.ts +9 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +171 -85
- package/dist/db/schema.js.map +1 -1
- package/dist/discovery/poller.d.ts +6 -16
- package/dist/discovery/poller.d.ts.map +1 -1
- package/dist/discovery/poller.js +21 -52
- package/dist/discovery/poller.js.map +1 -1
- package/dist/discovery/scip-flush.d.ts +44 -0
- package/dist/discovery/scip-flush.d.ts.map +1 -0
- package/dist/discovery/scip-flush.js +67 -0
- package/dist/discovery/scip-flush.js.map +1 -0
- package/dist/discovery/watcher.d.ts +6 -16
- package/dist/discovery/watcher.d.ts.map +1 -1
- package/dist/discovery/watcher.js +22 -54
- package/dist/discovery/watcher.js.map +1 -1
- package/dist/docs/docs.d.ts +0 -2
- package/dist/docs/docs.d.ts.map +1 -1
- package/dist/docs/docs.js +0 -27
- package/dist/docs/docs.js.map +1 -1
- package/dist/embeddings/embedder.d.ts +12 -8
- package/dist/embeddings/embedder.d.ts.map +1 -1
- package/dist/embeddings/embedder.js +35 -19
- package/dist/embeddings/embedder.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/indexer/index.d.ts +19 -10
- package/dist/indexer/index.d.ts.map +1 -1
- package/dist/indexer/index.js +135 -28
- package/dist/indexer/index.js.map +1 -1
- package/dist/indexer/pipeline.d.ts +44 -21
- package/dist/indexer/pipeline.d.ts.map +1 -1
- package/dist/indexer/pipeline.js +48 -26
- package/dist/indexer/pipeline.js.map +1 -1
- package/dist/indexer/stages/docs-index.d.ts +1 -3
- package/dist/indexer/stages/docs-index.d.ts.map +1 -1
- package/dist/indexer/stages/docs-index.js +1 -25
- package/dist/indexer/stages/docs-index.js.map +1 -1
- package/dist/indexer/stages/index.d.ts +4 -2
- package/dist/indexer/stages/index.d.ts.map +1 -1
- package/dist/indexer/stages/index.js +3 -2
- package/dist/indexer/stages/index.js.map +1 -1
- package/dist/indexer/stages/lsp-enrichment.d.ts +1 -1
- package/dist/indexer/stages/lsp-enrichment.d.ts.map +1 -1
- package/dist/indexer/stages/lsp-enrichment.js +44 -21
- package/dist/indexer/stages/lsp-enrichment.js.map +1 -1
- package/dist/indexer/stages/overlay-cleanup.d.ts +31 -0
- package/dist/indexer/stages/overlay-cleanup.d.ts.map +1 -0
- package/dist/indexer/stages/overlay-cleanup.js +64 -0
- package/dist/indexer/stages/overlay-cleanup.js.map +1 -0
- package/dist/indexer/stages/reverse-deps.d.ts +13 -0
- package/dist/indexer/stages/reverse-deps.d.ts.map +1 -0
- package/dist/indexer/stages/reverse-deps.js +81 -0
- package/dist/indexer/stages/reverse-deps.js.map +1 -0
- package/dist/indexer/stages/{scip-source.d.ts → scip-indexer.d.ts} +38 -9
- package/dist/indexer/stages/scip-indexer.d.ts.map +1 -0
- package/dist/indexer/stages/{scip-source.js → scip-indexer.js} +359 -98
- package/dist/indexer/stages/scip-indexer.js.map +1 -0
- package/dist/indexer/stages/source-index.d.ts +3 -3
- package/dist/indexer/stages/source-index.d.ts.map +1 -1
- package/dist/indexer/stages/source-index.js +188 -70
- package/dist/indexer/stages/source-index.js.map +1 -1
- package/dist/lsp/enrichment.d.ts.map +1 -1
- package/dist/lsp/enrichment.js +1 -18
- package/dist/lsp/enrichment.js.map +1 -1
- package/dist/parsing/extractors/go.d.ts.map +1 -1
- package/dist/parsing/extractors/go.js +0 -38
- package/dist/parsing/extractors/go.js.map +1 -1
- package/dist/parsing/extractors/javascript.d.ts.map +1 -1
- package/dist/parsing/extractors/javascript.js +0 -47
- package/dist/parsing/extractors/javascript.js.map +1 -1
- package/dist/parsing/extractors/python.d.ts.map +1 -1
- package/dist/parsing/extractors/python.js +0 -22
- package/dist/parsing/extractors/python.js.map +1 -1
- package/dist/parsing/extractors/types.d.ts +0 -16
- package/dist/parsing/extractors/types.d.ts.map +1 -1
- package/dist/parsing/extractors/types.js +1 -1
- package/dist/parsing/extractors/types.js.map +1 -1
- package/dist/parsing/extractors/typescript.d.ts.map +1 -1
- package/dist/parsing/extractors/typescript.js +18 -2
- package/dist/parsing/extractors/typescript.js.map +1 -1
- package/dist/resolution/call-graph.d.ts +3 -1
- package/dist/resolution/call-graph.d.ts.map +1 -1
- package/dist/resolution/call-graph.js +15 -13
- package/dist/resolution/call-graph.js.map +1 -1
- package/dist/resolution/resolution-method.d.ts +1 -1
- package/dist/resolution/resolution-method.d.ts.map +1 -1
- package/dist/resolution/resolution-method.js +2 -0
- package/dist/resolution/resolution-method.js.map +1 -1
- package/dist/resolution/resolver.d.ts +6 -0
- package/dist/resolution/resolver.d.ts.map +1 -1
- package/dist/resolution/resolver.js +21 -0
- package/dist/resolution/resolver.js.map +1 -1
- package/dist/runtime.d.ts +0 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/scip/compdb.d.ts +38 -0
- package/dist/scip/compdb.d.ts.map +1 -0
- package/dist/scip/compdb.js +138 -0
- package/dist/scip/compdb.js.map +1 -0
- package/dist/scip/enrichment.d.ts +6 -1
- package/dist/scip/enrichment.d.ts.map +1 -1
- package/dist/scip/enrichment.js +62 -5
- package/dist/scip/enrichment.js.map +1 -1
- package/dist/scip/installer.d.ts +59 -0
- package/dist/scip/installer.d.ts.map +1 -0
- package/dist/scip/installer.js +302 -0
- package/dist/scip/installer.js.map +1 -0
- package/dist/scip/registry.d.ts +1 -1
- package/dist/scip/registry.d.ts.map +1 -1
- package/dist/scip/registry.js +33 -5
- package/dist/scip/registry.js.map +1 -1
- package/dist/server/server.d.ts +3 -8
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +7 -66
- package/dist/server/server.js.map +1 -1
- package/dist/server/tool-registry.d.ts +2 -2
- package/dist/server/tool-registry.d.ts.map +1 -1
- package/dist/server/tool-registry.js +37 -41
- package/dist/server/tool-registry.js.map +1 -1
- package/dist/server/tools/cohesion.d.ts +46 -0
- package/dist/server/tools/cohesion.d.ts.map +1 -0
- package/dist/server/tools/cohesion.js +100 -0
- package/dist/server/tools/cohesion.js.map +1 -0
- package/dist/server/tools/dependents.d.ts +139 -0
- package/dist/server/tools/dependents.d.ts.map +1 -0
- package/dist/server/tools/dependents.js +354 -0
- package/dist/server/tools/dependents.js.map +1 -0
- package/dist/server/tools/diff.d.ts +73 -0
- package/dist/server/tools/diff.d.ts.map +1 -0
- package/dist/server/tools/diff.js +157 -0
- package/dist/server/tools/diff.js.map +1 -0
- package/dist/server/tools/graph.d.ts +7 -3
- package/dist/server/tools/graph.d.ts.map +1 -1
- package/dist/server/tools/graph.js +15 -85
- package/dist/server/tools/graph.js.map +1 -1
- package/dist/server/tools/metrics.d.ts +5 -30
- package/dist/server/tools/metrics.d.ts.map +1 -1
- package/dist/server/tools/metrics.js +21 -57
- package/dist/server/tools/metrics.js.map +1 -1
- package/dist/server/tools/structure.d.ts +77 -0
- package/dist/server/tools/structure.d.ts.map +1 -0
- package/dist/server/tools/structure.js +309 -0
- package/dist/server/tools/structure.js.map +1 -0
- package/dist/server/tools/test-map.d.ts +7 -0
- package/dist/server/tools/test-map.d.ts.map +1 -1
- package/dist/server/tools/test-map.js +18 -1
- package/dist/server/tools/test-map.js.map +1 -1
- package/dist/server/tools/trace.d.ts +84 -0
- package/dist/server/tools/trace.d.ts.map +1 -0
- package/dist/server/tools/trace.js +317 -0
- package/dist/server/tools/trace.js.map +1 -0
- package/dist/testing/coverage.d.ts +11 -0
- package/dist/testing/coverage.d.ts.map +1 -1
- package/dist/testing/coverage.js +34 -2
- package/dist/testing/coverage.js.map +1 -1
- package/dist/testing/test-mapper.d.ts +1 -1
- package/dist/testing/test-mapper.d.ts.map +1 -1
- package/dist/testing/test-mapper.js +1 -0
- package/dist/testing/test-mapper.js.map +1 -1
- package/package.json +3 -1
- package/dist/indexer/stages/scip-enrichment.d.ts +0 -43
- package/dist/indexer/stages/scip-enrichment.d.ts.map +0 -1
- package/dist/indexer/stages/scip-enrichment.js +0 -174
- package/dist/indexer/stages/scip-enrichment.js.map +0 -1
- package/dist/indexer/stages/scip-source.d.ts.map +0 -1
- package/dist/indexer/stages/scip-source.js.map +0 -1
- package/dist/server/tools/annotations.d.ts +0 -40
- package/dist/server/tools/annotations.d.ts.map +0 -1
- package/dist/server/tools/annotations.js +0 -35
- package/dist/server/tools/annotations.js.map +0 -1
- package/dist/server/tools/architecture.d.ts +0 -67
- package/dist/server/tools/architecture.d.ts.map +0 -1
- package/dist/server/tools/architecture.js +0 -209
- package/dist/server/tools/architecture.js.map +0 -1
- package/dist/server/tools/coverage.d.ts +0 -67
- package/dist/server/tools/coverage.d.ts.map +0 -1
- package/dist/server/tools/coverage.js +0 -74
- package/dist/server/tools/coverage.js.map +0 -1
- package/dist/server/tools/graph-analysis.d.ts +0 -64
- package/dist/server/tools/graph-analysis.d.ts.map +0 -1
- package/dist/server/tools/graph-analysis.js +0 -82
- package/dist/server/tools/graph-analysis.js.map +0 -1
- package/dist/server/tools/notes.d.ts +0 -165
- package/dist/server/tools/notes.d.ts.map +0 -1
- package/dist/server/tools/notes.js +0 -214
- package/dist/server/tools/notes.js.map +0 -1
- package/dist/server/tools/routes.d.ts +0 -38
- package/dist/server/tools/routes.d.ts.map +0 -1
- package/dist/server/tools/routes.js +0 -38
- package/dist/server/tools/routes.js.map +0 -1
- package/dist/server/tools/writeback.d.ts +0 -49
- package/dist/server/tools/writeback.d.ts.map +0 -1
- package/dist/server/tools/writeback.js +0 -68
- package/dist/server/tools/writeback.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/scip/registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/scip/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/server/server.d.ts
CHANGED
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
* lore_snippet — source-code snippet extraction
|
|
16
16
|
* lore_blame — git blame metadata for file lines
|
|
17
17
|
* lore_metrics — aggregate code metrics
|
|
18
|
-
* lore_writeback — LLM summary write-back
|
|
19
18
|
* lore_history — git commit history queries
|
|
19
|
+
* lore_diff — exported symbol diff between branches
|
|
20
20
|
*
|
|
21
21
|
* Standalone usage:
|
|
22
22
|
* node dist/lore-server/server.js --db <path-to-lore.db>
|
|
@@ -38,14 +38,9 @@ export interface LoreServerOptions {
|
|
|
38
38
|
* Create and return a fully-configured `McpServer` with all Lore tools registered.
|
|
39
39
|
*
|
|
40
40
|
* @param db Read-only SQLite connection to the knowledge-base.
|
|
41
|
-
* @param dbPath Path to the DB file, needed by
|
|
41
|
+
* @param dbPath Path to the DB file, needed by write tools for write access.
|
|
42
42
|
* @param embedder Optional live embedding provider for semantic/fused search.
|
|
43
43
|
* @param options Optional server configuration (e.g. search observer).
|
|
44
44
|
*/
|
|
45
|
-
export declare function createLoreMcpServer(db: Database.Database, dbPath: string, embedder?: EmbeddingProvider, options?: LoreServerOptions): McpServer
|
|
46
|
-
/**
|
|
47
|
-
* Async version of `createLoreMcpServer` that properly awaits dynamic tool
|
|
48
|
-
* module imports. Preferred for new call-sites.
|
|
49
|
-
*/
|
|
50
|
-
export declare function createLoreMcpServerAsync(db: Database.Database, dbPath: string, embedder?: EmbeddingProvider, options?: LoreServerOptions): Promise<McpServer>;
|
|
45
|
+
export declare function createLoreMcpServer(db: Database.Database, dbPath: string, embedder?: EmbeddingProvider, options?: LoreServerOptions): Promise<McpServer>;
|
|
51
46
|
//# sourceMappingURL=server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,OAAO,EAEL,KAAK,QAAQ,EACd,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAyB,KAAK,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKxD,wDAAwD;AACxD,MAAM,WAAW,iBAAiB;IAChC,+FAA+F;IAC/F,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,qEAAqE;IACrE,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAID;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,iBAAiB,EAC5B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,SAAS,CAAC,CAYpB"}
|
package/dist/server/server.js
CHANGED
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
* lore_snippet — source-code snippet extraction
|
|
16
16
|
* lore_blame — git blame metadata for file lines
|
|
17
17
|
* lore_metrics — aggregate code metrics
|
|
18
|
-
* lore_writeback — LLM summary write-back
|
|
19
18
|
* lore_history — git commit history queries
|
|
19
|
+
* lore_diff — exported symbol diff between branches
|
|
20
20
|
*
|
|
21
21
|
* Standalone usage:
|
|
22
22
|
* node dist/lore-server/server.js --db <path-to-lore.db>
|
|
@@ -25,88 +25,28 @@
|
|
|
25
25
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
26
26
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
27
27
|
import { fileURLToPath } from 'url';
|
|
28
|
+
import { realpathSync } from 'fs';
|
|
28
29
|
import { openReadOnly, } from '../db/read-only.js';
|
|
29
30
|
import { getLoreMeta } from '../db/schema.js';
|
|
30
31
|
import { LazyEmbeddingProvider } from '../embeddings/embedder.js';
|
|
31
32
|
import { getLogger } from '../logger.js';
|
|
32
33
|
import { buildToolModules, registerTools } from './tool-registry.js';
|
|
33
|
-
import * as lookup from './tools/lookup.js';
|
|
34
|
-
import * as graph from './tools/graph.js';
|
|
35
|
-
import * as search from './tools/search.js';
|
|
36
|
-
import * as docsMod from './tools/docs.js';
|
|
37
|
-
import * as routes from './tools/routes.js';
|
|
38
|
-
import * as notes from './tools/notes.js';
|
|
39
|
-
import * as architecture from './tools/architecture.js';
|
|
40
|
-
import * as testMap from './tools/test-map.js';
|
|
41
|
-
import * as snippet from './tools/snippet.js';
|
|
42
|
-
import * as blame from './tools/blame.js';
|
|
43
|
-
import * as metrics from './tools/metrics.js';
|
|
44
|
-
import * as coverage from './tools/coverage.js';
|
|
45
|
-
import * as writeback from './tools/writeback.js';
|
|
46
|
-
import * as history from './tools/history.js';
|
|
47
|
-
import * as annotationsMod from './tools/annotations.js';
|
|
48
34
|
// ─── Server factory ───────────────────────────────────────────────────────────
|
|
49
35
|
/**
|
|
50
36
|
* Create and return a fully-configured `McpServer` with all Lore tools registered.
|
|
51
37
|
*
|
|
52
38
|
* @param db Read-only SQLite connection to the knowledge-base.
|
|
53
|
-
* @param dbPath Path to the DB file, needed by
|
|
39
|
+
* @param dbPath Path to the DB file, needed by write tools for write access.
|
|
54
40
|
* @param embedder Optional live embedding provider for semantic/fused search.
|
|
55
41
|
* @param options Optional server configuration (e.g. search observer).
|
|
56
42
|
*/
|
|
57
|
-
export function createLoreMcpServer(db, dbPath, embedder, options) {
|
|
58
|
-
const log = options?.logger ?? getLogger();
|
|
59
|
-
const server = new McpServer({ name: 'lore-server', version: '0.1.0' }, { capabilities: { tools: {} } });
|
|
60
|
-
// The tool modules are built synchronously from eagerly-imported tool files
|
|
61
|
-
// at startup, then registered via the data-driven registry loop.
|
|
62
|
-
// NOTE: `buildToolModules()` is async but only because it uses dynamic
|
|
63
|
-
// imports. The synchronous variant `createLoreMcpServerAsync()` should be
|
|
64
|
-
// preferred for new code. For backward-compat we register eagerly here
|
|
65
|
-
// using a self-invoking async helper that blocks the server from being
|
|
66
|
-
// ready until registration completes.
|
|
67
|
-
//
|
|
68
|
-
// However, McpServer.tool() is synchronous, so we need to register modules
|
|
69
|
-
// synchronously. We import tool modules eagerly at module scope instead.
|
|
70
|
-
const toolModules = buildToolModulesSync();
|
|
71
|
-
registerTools(server, toolModules, { db, dbPath, embedder, searchObserver: options?.searchObserver, logger: log });
|
|
72
|
-
return server;
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Async version of `createLoreMcpServer` that properly awaits dynamic tool
|
|
76
|
-
* module imports. Preferred for new call-sites.
|
|
77
|
-
*/
|
|
78
|
-
export async function createLoreMcpServerAsync(db, dbPath, embedder, options) {
|
|
43
|
+
export async function createLoreMcpServer(db, dbPath, embedder, options) {
|
|
79
44
|
const log = options?.logger ?? getLogger();
|
|
80
45
|
const server = new McpServer({ name: 'lore-server', version: '0.1.0' }, { capabilities: { tools: {} } });
|
|
81
46
|
const toolModules = await buildToolModules();
|
|
82
47
|
registerTools(server, toolModules, { db, dbPath, embedder, searchObserver: options?.searchObserver, logger: log });
|
|
83
48
|
return server;
|
|
84
49
|
}
|
|
85
|
-
// ─── Synchronous tool module builder ──────────────────────────────────────────
|
|
86
|
-
/**
|
|
87
|
-
* Eagerly import all tool modules and build the registration list.
|
|
88
|
-
* Used by the synchronous `createLoreMcpServer()` for backward compatibility.
|
|
89
|
-
*/
|
|
90
|
-
function buildToolModulesSync() {
|
|
91
|
-
return [
|
|
92
|
-
{ def: lookup.toolDef, handlerFactory: (deps) => (args) => lookup.handler(deps.db, args, deps.embedder) },
|
|
93
|
-
{ def: graph.toolDef, handlerFactory: (deps) => (args) => graph.handler(deps.db, args) },
|
|
94
|
-
{ def: search.toolDef, handlerFactory: (deps) => (args) => search.handler(deps.db, args, deps.embedder, deps.searchObserver) },
|
|
95
|
-
{ def: docsMod.toolDef, handlerFactory: (deps) => (args) => docsMod.handler(deps.db, args, deps.embedder) },
|
|
96
|
-
{ def: routes.toolDef, handlerFactory: (deps) => (args) => routes.handler(deps.db, args) },
|
|
97
|
-
{ def: notes.writeToolDef, handlerFactory: (deps) => (args) => notes.writeHandler(deps.dbPath, args) },
|
|
98
|
-
{ def: notes.readToolDef, handlerFactory: (deps) => (args) => notes.readHandler(deps.db, args) },
|
|
99
|
-
{ def: architecture.toolDef, handlerFactory: (deps) => (args) => architecture.handler(deps.db, args) },
|
|
100
|
-
{ def: testMap.toolDef, handlerFactory: (deps) => (args) => testMap.handler(deps.db, args) },
|
|
101
|
-
{ def: snippet.toolDef, handlerFactory: (deps) => (args) => snippet.handler(deps.db, args) },
|
|
102
|
-
{ def: blame.toolDef, handlerFactory: (deps) => (args) => blame.handler(deps.db, args) },
|
|
103
|
-
{ def: metrics.toolDef, handlerFactory: (deps) => (args) => metrics.handler(deps.db, args ?? {}) },
|
|
104
|
-
{ def: coverage.toolDef, handlerFactory: (deps) => (args) => coverage.handler(deps.db, args) },
|
|
105
|
-
{ def: writeback.toolDef, handlerFactory: (deps) => (args) => writeback.handler(deps.dbPath, args) },
|
|
106
|
-
{ def: history.toolDef, handlerFactory: (deps) => (args) => history.handler(deps.db, args, deps.embedder) },
|
|
107
|
-
{ def: annotationsMod.toolDef, handlerFactory: (deps) => (args) => annotationsMod.handler(deps.db, args) },
|
|
108
|
-
];
|
|
109
|
-
}
|
|
110
50
|
// ─── Embedding helper ─────────────────────────────────────────────────────────
|
|
111
51
|
/**
|
|
112
52
|
* Read the embedding model stored in `lore_meta` at index time and create a
|
|
@@ -136,7 +76,7 @@ async function main() {
|
|
|
136
76
|
const { dbPath } = parseArgs();
|
|
137
77
|
const db = openReadOnly(dbPath);
|
|
138
78
|
const embedder = await buildEmbedder(db);
|
|
139
|
-
const server = createLoreMcpServer(db, dbPath, embedder);
|
|
79
|
+
const server = await createLoreMcpServer(db, dbPath, embedder);
|
|
140
80
|
// Connect via stdio transport (standalone/debug mode).
|
|
141
81
|
const transport = new StdioServerTransport();
|
|
142
82
|
await server.connect(transport);
|
|
@@ -144,7 +84,8 @@ async function main() {
|
|
|
144
84
|
process.stderr.write('READY\n');
|
|
145
85
|
}
|
|
146
86
|
// Only run when executed as a standalone script, not when imported as a module.
|
|
147
|
-
|
|
87
|
+
// Use realpathSync to handle macOS /var → /private/var symlink.
|
|
88
|
+
if (process.argv[1] && realpathSync(process.argv[1]) === realpathSync(fileURLToPath(import.meta.url))) {
|
|
148
89
|
main().catch((err) => {
|
|
149
90
|
console.error('Lore server fatal error:', err);
|
|
150
91
|
process.exit(1);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EACL,YAAY,GAEb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAA0B,MAAM,2BAA2B,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAmB,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
* ## ToolModule contract
|
|
10
10
|
*
|
|
11
11
|
* Every tool file must export **at least**:
|
|
12
|
-
* - `toolDef`
|
|
13
|
-
* - `handler(db, args, ...)`
|
|
12
|
+
* - `toolDef` containing `name`, `description`, and `inputSchema`
|
|
13
|
+
* - `handler(db, args, ...)`
|
|
14
14
|
*
|
|
15
15
|
* The registry iterates over a list of declared `ToolModule` descriptors and
|
|
16
16
|
* calls `server.tool()` for each, using a standard `loggedHandler` wrapper.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/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,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../src/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,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKxD;;;;;;;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;AAsDD;;;;;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,CA4F9D"}
|
|
@@ -9,13 +9,14 @@
|
|
|
9
9
|
* ## ToolModule contract
|
|
10
10
|
*
|
|
11
11
|
* Every tool file must export **at least**:
|
|
12
|
-
* - `toolDef`
|
|
13
|
-
* - `handler(db, args, ...)`
|
|
12
|
+
* - `toolDef` containing `name`, `description`, and `inputSchema`
|
|
13
|
+
* - `handler(db, args, ...)`
|
|
14
14
|
*
|
|
15
15
|
* The registry iterates over a list of declared `ToolModule` descriptors and
|
|
16
16
|
* calls `server.tool()` for each, using a standard `loggedHandler` wrapper.
|
|
17
17
|
*/
|
|
18
18
|
import { z } from 'zod';
|
|
19
|
+
import { getFreshness } from '../db/read-only.js';
|
|
19
20
|
// ─── JSON-Schema → Zod conversion ────────────────────────────────────────────
|
|
20
21
|
/**
|
|
21
22
|
* Converts a single JSON-schema property definition into the corresponding Zod
|
|
@@ -86,12 +87,21 @@ export function inputSchemaToZodShape(schema) {
|
|
|
86
87
|
* Wrap an MCP tool handler with structured logging.
|
|
87
88
|
* Captures request args, response, timing, and success/error status.
|
|
88
89
|
*/
|
|
89
|
-
function loggedHandler(toolName, fn, log) {
|
|
90
|
+
function loggedHandler(toolName, fn, log, db) {
|
|
90
91
|
return async (args) => {
|
|
91
92
|
const start = performance.now();
|
|
92
93
|
try {
|
|
93
|
-
|
|
94
|
+
let result = await fn(args);
|
|
94
95
|
const durationMs = Math.round((performance.now() - start) * 100) / 100;
|
|
96
|
+
// Inject freshness metadata into the response if result is an object.
|
|
97
|
+
if (db && result && typeof result === 'object' && !Array.isArray(result)) {
|
|
98
|
+
try {
|
|
99
|
+
result.freshness = getFreshness(db);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Freshness unavailable — skip silently.
|
|
103
|
+
}
|
|
104
|
+
}
|
|
95
105
|
log.toolCall({
|
|
96
106
|
tool: toolName,
|
|
97
107
|
requestBody: args,
|
|
@@ -126,7 +136,7 @@ export function registerTools(server, modules, deps) {
|
|
|
126
136
|
for (const mod of modules) {
|
|
127
137
|
const zodShape = inputSchemaToZodShape(mod.def.inputSchema);
|
|
128
138
|
const handler = mod.handlerFactory(deps);
|
|
129
|
-
server.tool(mod.def.name, mod.def.description, zodShape, loggedHandler(mod.def.name, handler, deps.logger));
|
|
139
|
+
server.tool(mod.def.name, mod.def.description, zodShape, loggedHandler(mod.def.name, handler, deps.logger, deps.db));
|
|
130
140
|
}
|
|
131
141
|
}
|
|
132
142
|
// ─── Tool module declarations (importers) ─────────────────────────────────────
|
|
@@ -140,23 +150,21 @@ export function registerTools(server, modules, deps) {
|
|
|
140
150
|
*/
|
|
141
151
|
export async function buildToolModules() {
|
|
142
152
|
// Dynamic imports so the registry can be tree-shaken independently.
|
|
143
|
-
const [lookup, graph,
|
|
153
|
+
const [lookup, graph, search, docsMod, testMap, snippet, blame, metrics, history, trace, diff, cohesion, structure, dependents,] = await Promise.all([
|
|
144
154
|
import('./tools/lookup.js'),
|
|
145
155
|
import('./tools/graph.js'),
|
|
146
|
-
import('./tools/graph-analysis.js'),
|
|
147
156
|
import('./tools/search.js'),
|
|
148
157
|
import('./tools/docs.js'),
|
|
149
|
-
import('./tools/routes.js'),
|
|
150
|
-
import('./tools/notes.js'),
|
|
151
|
-
import('./tools/architecture.js'),
|
|
152
158
|
import('./tools/test-map.js'),
|
|
153
159
|
import('./tools/snippet.js'),
|
|
154
160
|
import('./tools/blame.js'),
|
|
155
161
|
import('./tools/metrics.js'),
|
|
156
|
-
import('./tools/coverage.js'),
|
|
157
|
-
import('./tools/writeback.js'),
|
|
158
162
|
import('./tools/history.js'),
|
|
159
|
-
import('./tools/
|
|
163
|
+
import('./tools/trace.js'),
|
|
164
|
+
import('./tools/diff.js'),
|
|
165
|
+
import('./tools/cohesion.js'),
|
|
166
|
+
import('./tools/structure.js'),
|
|
167
|
+
import('./tools/dependents.js'),
|
|
160
168
|
]);
|
|
161
169
|
return [
|
|
162
170
|
{
|
|
@@ -167,10 +175,6 @@ export async function buildToolModules() {
|
|
|
167
175
|
def: graph.toolDef,
|
|
168
176
|
handlerFactory: (deps) => (args) => graph.handler(deps.db, args),
|
|
169
177
|
},
|
|
170
|
-
{
|
|
171
|
-
def: graphAnalysis.toolDef,
|
|
172
|
-
handlerFactory: (deps) => (args) => graphAnalysis.handler(deps.db, args),
|
|
173
|
-
},
|
|
174
178
|
{
|
|
175
179
|
def: search.toolDef,
|
|
176
180
|
handlerFactory: (deps) => (args) => search.handler(deps.db, args, deps.embedder, deps.searchObserver),
|
|
@@ -179,22 +183,6 @@ export async function buildToolModules() {
|
|
|
179
183
|
def: docsMod.toolDef,
|
|
180
184
|
handlerFactory: (deps) => (args) => docsMod.handler(deps.db, args, deps.embedder),
|
|
181
185
|
},
|
|
182
|
-
{
|
|
183
|
-
def: routes.toolDef,
|
|
184
|
-
handlerFactory: (deps) => (args) => routes.handler(deps.db, args),
|
|
185
|
-
},
|
|
186
|
-
{
|
|
187
|
-
def: notes.writeToolDef,
|
|
188
|
-
handlerFactory: (deps) => (args) => notes.writeHandler(deps.dbPath, args),
|
|
189
|
-
},
|
|
190
|
-
{
|
|
191
|
-
def: notes.readToolDef,
|
|
192
|
-
handlerFactory: (deps) => (args) => notes.readHandler(deps.db, args),
|
|
193
|
-
},
|
|
194
|
-
{
|
|
195
|
-
def: architecture.toolDef,
|
|
196
|
-
handlerFactory: (deps) => (args) => architecture.handler(deps.db, args),
|
|
197
|
-
},
|
|
198
186
|
{
|
|
199
187
|
def: testMap.toolDef,
|
|
200
188
|
handlerFactory: (deps) => (args) => testMap.handler(deps.db, args),
|
|
@@ -212,20 +200,28 @@ export async function buildToolModules() {
|
|
|
212
200
|
handlerFactory: (deps) => (args) => metrics.handler(deps.db, args ?? {}),
|
|
213
201
|
},
|
|
214
202
|
{
|
|
215
|
-
def:
|
|
216
|
-
handlerFactory: (deps) => (args) =>
|
|
203
|
+
def: history.toolDef,
|
|
204
|
+
handlerFactory: (deps) => (args) => history.handler(deps.db, args, deps.embedder),
|
|
217
205
|
},
|
|
218
206
|
{
|
|
219
|
-
def:
|
|
220
|
-
handlerFactory: (deps) => (args) =>
|
|
207
|
+
def: trace.toolDef,
|
|
208
|
+
handlerFactory: (deps) => (args) => trace.handler(deps.db, args),
|
|
221
209
|
},
|
|
222
210
|
{
|
|
223
|
-
def:
|
|
224
|
-
handlerFactory: (deps) => (args) =>
|
|
211
|
+
def: diff.toolDef,
|
|
212
|
+
handlerFactory: (deps) => (args) => diff.handler(deps.db, args),
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
def: cohesion.toolDef,
|
|
216
|
+
handlerFactory: (deps) => (args) => cohesion.handler(deps.db, args ?? {}),
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
def: structure.toolDef,
|
|
220
|
+
handlerFactory: (deps) => (args) => structure.handler(deps.db, args),
|
|
225
221
|
},
|
|
226
222
|
{
|
|
227
|
-
def:
|
|
228
|
-
handlerFactory: (deps) => (args) =>
|
|
223
|
+
def: dependents.toolDef,
|
|
224
|
+
handlerFactory: (deps) => (args) => dependents.handler(deps.db, args),
|
|
229
225
|
},
|
|
230
226
|
];
|
|
231
227
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/server/tool-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,CAAC,EAAgB,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"tool-registry.js","sourceRoot":"","sources":["../../src/server/tool-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module lore-server/tools/cohesion
|
|
3
|
+
*
|
|
4
|
+
* MCP tool: rank directories by module cohesion — the ratio of internal
|
|
5
|
+
* coupling to external coupling. Uses Robert Martin's instability metric
|
|
6
|
+
* alongside a simple cohesion ratio.
|
|
7
|
+
*/
|
|
8
|
+
import type { Database } from '../../db/read-only.js';
|
|
9
|
+
export declare const toolDef: {
|
|
10
|
+
readonly name: "lore_cohesion";
|
|
11
|
+
readonly description: string;
|
|
12
|
+
readonly inputSchema: {
|
|
13
|
+
readonly type: "object";
|
|
14
|
+
readonly properties: {
|
|
15
|
+
readonly depth: {
|
|
16
|
+
readonly type: "integer";
|
|
17
|
+
readonly minimum: 1;
|
|
18
|
+
readonly description: "Number of path segments to group directories by (default 2).";
|
|
19
|
+
};
|
|
20
|
+
readonly limit: {
|
|
21
|
+
readonly type: "number";
|
|
22
|
+
readonly description: "Max directories to return (default 20, max 200).";
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
readonly required: readonly [];
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
export interface CohesionArgs {
|
|
29
|
+
depth?: number;
|
|
30
|
+
limit?: number;
|
|
31
|
+
}
|
|
32
|
+
export interface DirectoryCohesion {
|
|
33
|
+
directory: string;
|
|
34
|
+
file_count: number;
|
|
35
|
+
internal_edges: number;
|
|
36
|
+
external_inbound: number;
|
|
37
|
+
external_outbound: number;
|
|
38
|
+
cohesion: number;
|
|
39
|
+
instability: number;
|
|
40
|
+
}
|
|
41
|
+
export interface CohesionResult {
|
|
42
|
+
directories: DirectoryCohesion[];
|
|
43
|
+
}
|
|
44
|
+
/** Rank directories by module cohesion. */
|
|
45
|
+
export declare function handler(db: Database.Database, args: CohesionArgs): CohesionResult;
|
|
46
|
+
//# sourceMappingURL=cohesion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cohesion.d.ts","sourceRoot":"","sources":["../../../src/server/tools/cohesion.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAItD,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;CAqBV,CAAC;AAIX,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,iBAAiB,EAAE,CAAC;CAClC;AAWD,2CAA2C;AAC3C,wBAAgB,OAAO,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,EAAE,YAAY,GAAG,cAAc,CA4EjF"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module lore-server/tools/cohesion
|
|
3
|
+
*
|
|
4
|
+
* MCP tool: rank directories by module cohesion — the ratio of internal
|
|
5
|
+
* coupling to external coupling. Uses Robert Martin's instability metric
|
|
6
|
+
* alongside a simple cohesion ratio.
|
|
7
|
+
*/
|
|
8
|
+
// ─── Tool definition ──────────────────────────────────────────────────────────
|
|
9
|
+
export const toolDef = {
|
|
10
|
+
name: 'lore_cohesion',
|
|
11
|
+
description: 'Rank directories by module cohesion — the ratio of internal symbol references to external ones. ' +
|
|
12
|
+
'Use depth to control directory grouping granularity and limit to cap results. ' +
|
|
13
|
+
'Directories are ordered by cohesion ascending (lowest cohesion first).',
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: {
|
|
17
|
+
depth: {
|
|
18
|
+
type: 'integer',
|
|
19
|
+
minimum: 1,
|
|
20
|
+
description: 'Number of path segments to group directories by (default 2).',
|
|
21
|
+
},
|
|
22
|
+
limit: {
|
|
23
|
+
type: 'number',
|
|
24
|
+
description: 'Max directories to return (default 20, max 200).',
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
required: [],
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Truncate a file path to the first `depth` segments.
|
|
32
|
+
* E.g. depth=2 turns "src/server/tools/graph.ts" into "src/server".
|
|
33
|
+
*/
|
|
34
|
+
function truncateToDepth(filePath, depth) {
|
|
35
|
+
const parts = filePath.split('/');
|
|
36
|
+
return parts.slice(0, depth).join('/');
|
|
37
|
+
}
|
|
38
|
+
/** Rank directories by module cohesion. */
|
|
39
|
+
export function handler(db, args) {
|
|
40
|
+
const depth = Math.max(1, args.depth ?? 2);
|
|
41
|
+
const limit = Math.min(Math.max(1, args.limit ?? 20), 200);
|
|
42
|
+
// Fetch all resolved edges with their caller/callee file paths.
|
|
43
|
+
const rows = db
|
|
44
|
+
.prepare(`SELECT f_caller.path AS caller_path,
|
|
45
|
+
f_callee.path AS callee_path
|
|
46
|
+
FROM symbol_refs sr
|
|
47
|
+
JOIN symbols s_caller ON s_caller.id = sr.caller_id
|
|
48
|
+
JOIN files f_caller ON f_caller.id = s_caller.file_id
|
|
49
|
+
JOIN symbols s_callee ON s_callee.id = sr.callee_id
|
|
50
|
+
JOIN files f_callee ON f_callee.id = s_callee.file_id
|
|
51
|
+
WHERE sr.callee_id IS NOT NULL`)
|
|
52
|
+
.all();
|
|
53
|
+
// Accumulate per-directory counters.
|
|
54
|
+
const dirMap = new Map();
|
|
55
|
+
function getOrCreate(dir) {
|
|
56
|
+
let entry = dirMap.get(dir);
|
|
57
|
+
if (!entry) {
|
|
58
|
+
entry = { internal: 0, inbound: 0, outbound: 0, files: new Set() };
|
|
59
|
+
dirMap.set(dir, entry);
|
|
60
|
+
}
|
|
61
|
+
return entry;
|
|
62
|
+
}
|
|
63
|
+
for (const row of rows) {
|
|
64
|
+
const callerDir = truncateToDepth(row.caller_path, depth);
|
|
65
|
+
const calleeDir = truncateToDepth(row.callee_path, depth);
|
|
66
|
+
const callerEntry = getOrCreate(callerDir);
|
|
67
|
+
callerEntry.files.add(row.caller_path);
|
|
68
|
+
const calleeEntry = getOrCreate(calleeDir);
|
|
69
|
+
calleeEntry.files.add(row.callee_path);
|
|
70
|
+
if (callerDir === calleeDir) {
|
|
71
|
+
callerEntry.internal++;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
callerEntry.outbound++;
|
|
75
|
+
calleeEntry.inbound++;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Build result entries, excluding directories with zero total edges.
|
|
79
|
+
const directories = [];
|
|
80
|
+
for (const [dir, data] of dirMap) {
|
|
81
|
+
const totalEdges = data.internal + data.inbound + data.outbound;
|
|
82
|
+
if (totalEdges === 0)
|
|
83
|
+
continue;
|
|
84
|
+
const cohesionDenom = data.internal + data.outbound;
|
|
85
|
+
const instabilityDenom = data.inbound + data.outbound;
|
|
86
|
+
directories.push({
|
|
87
|
+
directory: dir,
|
|
88
|
+
file_count: data.files.size,
|
|
89
|
+
internal_edges: data.internal,
|
|
90
|
+
external_inbound: data.inbound,
|
|
91
|
+
external_outbound: data.outbound,
|
|
92
|
+
cohesion: cohesionDenom > 0 ? data.internal / cohesionDenom : 0,
|
|
93
|
+
instability: instabilityDenom > 0 ? data.outbound / instabilityDenom : 0,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
// Sort by cohesion ascending (worst first).
|
|
97
|
+
directories.sort((a, b) => a.cohesion - b.cohesion);
|
|
98
|
+
return { directories: directories.slice(0, limit) };
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=cohesion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cohesion.js","sourceRoot":"","sources":["../../../src/server/tools/cohesion.ts"],"names":[],"mappings":"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"}
|