@grafema/mcp 0.3.24 → 0.3.28

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 (38) hide show
  1. package/README.md +103 -90
  2. package/dist/definitions/query-tools.d.ts.map +1 -1
  3. package/dist/definitions/query-tools.js +71 -0
  4. package/dist/definitions/query-tools.js.map +1 -1
  5. package/dist/handlers/analysis-handlers.d.ts +1 -0
  6. package/dist/handlers/analysis-handlers.d.ts.map +1 -1
  7. package/dist/handlers/analysis-handlers.js +5 -1
  8. package/dist/handlers/analysis-handlers.js.map +1 -1
  9. package/dist/handlers/behavior-handlers.d.ts +29 -0
  10. package/dist/handlers/behavior-handlers.d.ts.map +1 -0
  11. package/dist/handlers/behavior-handlers.js +127 -0
  12. package/dist/handlers/behavior-handlers.js.map +1 -0
  13. package/dist/handlers/dataflow-handlers.d.ts +4 -3
  14. package/dist/handlers/dataflow-handlers.d.ts.map +1 -1
  15. package/dist/handlers/dataflow-handlers.js +93 -3
  16. package/dist/handlers/dataflow-handlers.js.map +1 -1
  17. package/dist/handlers/graphql-handlers.d.ts +1 -1
  18. package/dist/handlers/graphql-handlers.js +1 -1
  19. package/dist/handlers/index.d.ts +4 -3
  20. package/dist/handlers/index.d.ts.map +1 -1
  21. package/dist/handlers/index.js +4 -3
  22. package/dist/handlers/index.js.map +1 -1
  23. package/dist/handlers/query-handlers.js +0 -1
  24. package/dist/handlers/query-handlers.js.map +1 -1
  25. package/dist/server.js +13 -9
  26. package/dist/server.js.map +1 -1
  27. package/dist/types.d.ts +11 -0
  28. package/dist/types.d.ts.map +1 -1
  29. package/package.json +4 -4
  30. package/src/definitions/query-tools.ts +71 -0
  31. package/src/handlers/analysis-handlers.ts +6 -1
  32. package/src/handlers/behavior-handlers.ts +174 -0
  33. package/src/handlers/dataflow-handlers.ts +110 -2
  34. package/src/handlers/graphql-handlers.ts +1 -1
  35. package/src/handlers/index.ts +4 -3
  36. package/src/handlers/query-handlers.ts +1 -1
  37. package/src/server.ts +21 -10
  38. package/src/types.ts +13 -0
package/README.md CHANGED
@@ -1,134 +1,147 @@
1
1
  # @grafema/mcp
2
2
 
3
- > MCP server for Grafema code analysis toolkit
3
+ > Model Context Protocol server exposing the Grafema code graph to AI
4
+ > agents (Claude, Cursor, Copilot, Continue, …).
4
5
 
5
- **Warning: This package is in beta stage and the API may change between minor versions.**
6
+ Once wired up, your agent can ask **structural** questions about your
7
+ codebase that grep can't answer: "where is the CLASS named UserService",
8
+ "who calls this function", "where does this value flow next". The agent
9
+ gets back semantic IDs and graph neighborhoods, not text matches.
10
+
11
+ ---
6
12
 
7
13
  ## Installation
8
14
 
9
15
  ```bash
10
- npm install @grafema/mcp
16
+ npm install --save-dev @grafema/mcp
11
17
  ```
12
18
 
13
- ## Overview
14
-
15
- Model Context Protocol (MCP) server that exposes Grafema's code analysis capabilities to AI assistants like Claude. Enables AI agents to query code graphs, trace data flow, and check invariants — without reading source code.
19
+ `@grafema/cli` is required as a peer (it builds the graph the MCP server
20
+ queries).
16
21
 
17
- ## Quick Start
22
+ ---
18
23
 
19
- ### Claude Code configuration
24
+ ## Quick start
20
25
 
21
- Add to your project's `.mcp.json`:
26
+ ### Claude Code
22
27
 
23
- ```json
28
+ ```jsonc
29
+ // ~/.claude.json or project .claude.json
24
30
  {
25
31
  "mcpServers": {
26
32
  "grafema": {
27
33
  "command": "npx",
28
- "args": ["@grafema/mcp", "--project", "."]
34
+ "args": ["-y", "@grafema/mcp"]
29
35
  }
30
36
  }
31
37
  }
32
38
  ```
33
39
 
34
- The RFDB graph database server is auto-started on first query. No manual setup needed.
35
-
36
- ### Claude Desktop configuration
40
+ ### Claude Desktop
37
41
 
38
- Add to `~/.config/claude/claude_desktop_config.json`:
39
-
40
- ```json
42
+ ```jsonc
43
+ // ~/Library/Application Support/Claude/claude_desktop_config.json
41
44
  {
42
45
  "mcpServers": {
43
46
  "grafema": {
44
47
  "command": "npx",
45
- "args": ["@grafema/mcp", "--project", "/path/to/project"]
48
+ "args": ["-y", "@grafema/mcp"]
46
49
  }
47
50
  }
48
51
  }
49
52
  ```
50
53
 
51
- ## Available Tools (24)
52
-
53
- ### Graph Queries
54
- | Tool | Description |
55
- |------|-------------|
56
- | `query_graph` | Execute Datalog queries on the code graph |
57
- | `find_nodes` | Find nodes by type, name, or file |
58
- | `find_calls` | Find all calls to a function or method |
59
- | `get_stats` | Get graph statistics (node/edge counts by type) |
60
- | `get_schema` | Get available node and edge types |
61
-
62
- ### Navigation
63
- | Tool | Description |
64
- |------|-------------|
65
- | `get_function_details` | Comprehensive function details (calls, calledBy, parameters) |
66
- | `get_file_overview` | Structured overview of all entities in a file |
67
- | `get_context` | Deep context for a node (source code + graph neighborhood) |
68
- | `find_guards` | Find conditional guards protecting a node |
69
- | `read_project_structure` | Directory structure of the project |
70
-
71
- ### Data Flow
72
- | Tool | Description |
73
- |------|-------------|
74
- | `trace_alias` | Trace alias chains to the original source |
75
- | `trace_dataflow` | Trace data flow from/to a variable or expression |
76
-
77
- ### Analysis
78
- | Tool | Description |
79
- |------|-------------|
80
- | `analyze_project` | Run full or incremental analysis |
81
- | `get_analysis_status` | Current analysis status and progress |
82
- | `get_coverage` | Analysis coverage for a path |
83
- | `discover_services` | Discover services without full analysis |
84
-
85
- ### Guarantees
86
- | Tool | Description |
87
- |------|-------------|
88
- | `check_invariant` | Check a code invariant via Datalog rule |
89
- | `create_guarantee` | Create a Datalog-based or contract-based guarantee |
90
- | `list_guarantees` | List all defined guarantees |
91
- | `check_guarantees` | Run all or specific guarantees |
92
- | `delete_guarantee` | Delete a guarantee by name |
93
-
94
- ### Utilities
95
- | Tool | Description |
96
- |------|-------------|
97
- | `get_documentation` | Documentation about Grafema usage |
98
- | `report_issue` | Report a bug to GitHub (requires GITHUB_TOKEN) |
99
- | `write_config` | Write or update .grafema/config.yaml |
100
-
101
- ## Example Queries
54
+ After restart, the agent gains 44 tools grouped into:
55
+
56
+ - **Graph queries** — find_nodes, find_calls, get_neighbors, query_graph, query_graphql, get_stats, get_schema
57
+ - **Navigation** get_context, get_file_overview, get_function_details, find_guards, read_project_structure
58
+ - **Data flow** — trace_alias, trace_dataflow, trace_calls, trace_effects, traverse_graph
59
+ - **Analysis** analyze_project, get_analysis_status, get_coverage, discover_services, get_shape
60
+ - **Knowledge base** add_knowledge, query_knowledge, query_decisions, get_knowledge_stats, supersede_fact
61
+ - **Git history** git_archaeology, git_churn, git_cochange, git_ownership
62
+ - **Guarantees** check_invariant, check_guarantees, create_guarantee, list_guarantees, delete_guarantee
63
+ - **Cross-modality** find_shared_behaviors
64
+ - **Utilities** — get_documentation, report_issue, write_config, query_registry, describe, explain
65
+
66
+ ---
67
+
68
+ ## Common agent workflows
69
+
70
+ ### "Where is this defined?"
71
+ ```
72
+ find_nodes(name="UserService", type="CLASS")
73
+ → returns semantic ID
74
+ get_context(nodeId="…")
75
+ source snippet + neighborhood
76
+ ```
77
+
78
+ ### "Who calls this function?"
79
+ ```
80
+ find_calls(name="handleRequest")
81
+ file:line for every resolved caller
82
+ ```
83
+
84
+ ### "Where does data come from / go?"
85
+ ```
86
+ trace_dataflow(source="userInput", file="src/api.ts", direction="forward")
87
+ trace_dataflow(source="response", file="src/api.ts", direction="backward")
88
+ ```
89
+
90
+ ### "What's in this file?"
91
+ ```
92
+ get_file_overview(file="packages/cli/src/cli.ts")
93
+ all exports / classes / functions / constants
94
+ ```
102
95
 
96
+ ### "What architectural rules apply here?"
103
97
  ```
104
- // Find all database queries
105
- query_graph("node(X, 'db:query')")
98
+ list_guarantees()
99
+ check_guarantees(category="dataflow")
100
+ ```
101
+
102
+ ---
103
+
104
+ ## All tools
106
105
 
107
- // Trace where user input flows
108
- trace_dataflow({ from: "req.body", file: "api/users.js" })
106
+ The full per-tool catalogue with input schemas, descriptions, examples,
107
+ and "when to use" guidance lives in **[docs/mcp-reference.md](../../docs/mcp-reference.md)**.
109
108
 
110
- // Check for eval usage
111
- check_invariant("violation(X) :- node(X, 'CALL'), attr(X, 'name', 'eval')")
109
+ Regenerated from the live graph on each release:
110
+
111
+ ```bash
112
+ grafema export --feature 'mcp:tool' --as docs-md --output docs/mcp-reference.md
113
+ grafema export --feature 'mcp:tool' --as mcp-schema --output docs/mcp-schema.json
112
114
  ```
113
115
 
116
+ `mcp-schema` is the canonical JSON-RPC tools array — directly servable
117
+ by any MCP runtime.
118
+
119
+ ---
120
+
114
121
  ## Configuration
115
122
 
116
- ### GitHub Token (for bug reporting)
123
+ ### GitHub token (for `report_issue`)
117
124
 
118
- ```json
119
- {
120
- "mcpServers": {
121
- "grafema": {
122
- "command": "npx",
123
- "args": ["@grafema/mcp", "--project", "."],
124
- "env": {
125
- "GITHUB_TOKEN": "ghp_your_token_here"
126
- }
127
- }
128
- }
129
- }
125
+ Set `GITHUB_TOKEN` to a PAT with `issues:write` on the target repo for
126
+ `report_issue` to file bugs from inside the agent.
127
+
128
+ ```bash
129
+ export GITHUB_TOKEN=ghp_…
130
130
  ```
131
131
 
132
- ## License
132
+ ### Project root
133
+
134
+ The MCP server reads from `.grafema/rfdb.sock` in the current working
135
+ directory. Run `grafema analyze` first to populate the graph.
136
+
137
+ ---
138
+
139
+ ## Notes
133
140
 
134
- Apache-2.0
141
+ - Tool count stays in sync with code — no hand-maintained lists.
142
+ Add a new MCP tool definition under `packages/mcp/src/definitions/`
143
+ and it appears in the next reference regen.
144
+ - 4 setRequestHandler entry points (`CallToolRequestSchema`, etc.) are
145
+ protocol plumbing, not user-facing tools — they don't appear in the
146
+ reference.
147
+ - For CLI usage, see [@grafema/cli](../cli/README.md).
@@ -1 +1 @@
1
- {"version":3,"file":"query-tools.d.ts","sourceRoot":"","sources":["../../src/definitions/query-tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,eAAO,MAAM,WAAW,EAAE,cAAc,EA0VvC,CAAC"}
1
+ {"version":3,"file":"query-tools.d.ts","sourceRoot":"","sources":["../../src/definitions/query-tools.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,eAAO,MAAM,WAAW,EAAE,cAAc,EAiavC,CAAC"}
@@ -249,6 +249,44 @@ Returns: Indented call tree showing each hop with file:line location.`,
249
249
  required: ['source'],
250
250
  },
251
251
  },
252
+ {
253
+ name: 'trace_effects',
254
+ description: `Trace transitive side effects of a function through its call graph.
255
+
256
+ For any function, traverses CALLS edges (DFS) and collects effects from leaf nodes
257
+ using the effects-db (Node.js builtins, npm packages).
258
+
259
+ Use this when you need to:
260
+ - "What side effects does this function have?" → direct + transitive effects
261
+ - "Does this handler do IO?" → trace shows IO:FILE:READ from fs.readFileSync at depth 3
262
+ - "Where does the fetch() call come from?" → leaf_sources shows the origin at depth N
263
+ - "What crosses module boundaries?" → boundary_crossings shows file-to-file effect flow
264
+
265
+ Effect types: PURE, MUTATION, IO (with subtypes like IO:FILE:READ, IO:HTTP:REQUEST),
266
+ THROW, ASYNC, NONDETERMINISTIC, UNKNOWN.
267
+
268
+ UNKNOWN means: unresolved call, external package not in effects-db, or depth limit reached.
269
+
270
+ Returns: direct effects, transitive effects, boundary crossings, leaf sources.`,
271
+ inputSchema: {
272
+ type: 'object',
273
+ properties: {
274
+ node: {
275
+ type: 'string',
276
+ description: 'Function/method name or semantic ID',
277
+ },
278
+ file: {
279
+ type: 'string',
280
+ description: 'File path to disambiguate (optional)',
281
+ },
282
+ max_depth: {
283
+ type: 'number',
284
+ description: 'Maximum call graph traversal depth (default: 10)',
285
+ },
286
+ },
287
+ required: ['node'],
288
+ },
289
+ },
252
290
  {
253
291
  name: 'get_shape',
254
292
  description: `Get the shape (methods + properties) of a CLASS, INTERFACE, or typed variable.
@@ -348,5 +386,38 @@ Returns: List of nodes violating the rule, with file and line info.`,
348
386
  required: ['rule'],
349
387
  },
350
388
  },
389
+ {
390
+ name: 'find_shared_behaviors',
391
+ description: `List clusters of FEATUREs whose entry-points share an identical BEHAVIOR (same forward-slice hash).
392
+
393
+ Surfaces cross-modality duplication — e.g. "this CLI command is a thin wrapper around the
394
+ same library function as that HTTP endpoint" or "this MCP tool and that VS Code command
395
+ delegate to identical logic".
396
+
397
+ Each cluster contains:
398
+ - hash: sha256 of the shared transitive call set (BEHAVIOR.metadata.hash)
399
+ - effects: transitive effects (IO, MUTATION, …) attributed to the shared behavior
400
+ - coreNodeCount: size of the shared forward slice
401
+ - features: array of { id, type, name, file } — the FEATUREs that share this behavior
402
+
403
+ Cluster types are FEATURE node types: cli:command, mcp:tool, vscode:command (and any future
404
+ domain types created by enrichers).
405
+
406
+ Returns clusters ordered by size (largest first), then hash (deterministic tie-break).
407
+ Empty result means every FEATURE has a unique implementation.`,
408
+ inputSchema: {
409
+ type: 'object',
410
+ properties: {
411
+ minClusterSize: {
412
+ type: 'number',
413
+ description: 'Minimum FEATUREs per cluster (default: 2). Values below 2 are clamped to 2.',
414
+ },
415
+ limit: {
416
+ type: 'number',
417
+ description: 'Maximum clusters to return (default: 100).',
418
+ },
419
+ },
420
+ },
421
+ },
351
422
  ];
352
423
  //# sourceMappingURL=query-tools.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-tools.js","sourceRoot":"","sources":["../../src/definitions/query-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-tools.js","sourceRoot":"","sources":["../../src/definitions/query-tools.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  * MCP Analysis Handlers
3
3
  */
4
4
  import type { ToolResult, AnalyzeProjectArgs, GetSchemaArgs } from '../types.js';
5
+ export declare function handleDiscoverServices(): Promise<ToolResult>;
5
6
  export declare function handleAnalyzeProject(args: AnalyzeProjectArgs): Promise<ToolResult>;
6
7
  export declare function handleGetAnalysisStatus(): Promise<ToolResult>;
7
8
  export declare function handleGetStats(): Promise<ToolResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"analysis-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/analysis-handlers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EACV,UAAU,EACV,kBAAkB,EAClB,aAAa,EACd,MAAM,aAAa,CAAC;AAKrB,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CA6BxF;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,UAAU,CAAC,CAYnE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAmD1D;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAwB9E"}
1
+ {"version":3,"file":"analysis-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/analysis-handlers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EACV,UAAU,EACV,kBAAkB,EAClB,aAAa,EACd,MAAM,aAAa,CAAC;AAKrB,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,UAAU,CAAC,CAGlE;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CA6BxF;AAED,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,UAAU,CAAC,CAYnE;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CAmD1D;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,CAwB9E"}
@@ -1,10 +1,14 @@
1
1
  /**
2
2
  * MCP Analysis Handlers
3
3
  */
4
- import { ensureAnalyzed } from '../analysis.js';
4
+ import { ensureAnalyzed, discoverServices } from '../analysis.js';
5
5
  import { getAnalysisStatus, isAnalysisRunning } from '../state.js';
6
6
  import { textResult, errorResult, } from '../utils.js';
7
7
  // === ANALYSIS HANDLERS ===
8
+ export async function handleDiscoverServices() {
9
+ const services = await discoverServices();
10
+ return textResult(`Found ${services.length} service(s):\n${JSON.stringify(services, null, 2)}`);
11
+ }
8
12
  export async function handleAnalyzeProject(args) {
9
13
  const { service, force } = args;
10
14
  // Early check: return error for force=true if analysis is already running
@@ -1 +1 @@
1
- {"version":3,"file":"analysis-handlers.js","sourceRoot":"","sources":["../../src/handlers/analysis-handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analysis-handlers.js","sourceRoot":"","sources":["../../src/handlers/analysis-handlers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Behavior handlers — surface cross-modality FEATURE duplication.
3
+ *
4
+ * `find_shared_behaviors` lists clusters of FEATUREs (cli:command, mcp:tool,
5
+ * vscode:command, …) whose entry-point forward-slice hashes match. Mirrors the
6
+ * `grafema features --duplicates` CLI subcommand — same algorithm, same
7
+ * cluster shape — so the two channels return symmetric data.
8
+ *
9
+ * REG-1119.
10
+ */
11
+ import type { ToolResult, FindSharedBehaviorsArgs } from '../types.js';
12
+ import type { EdgeType, EdgeRecord } from '@grafema/types';
13
+ /**
14
+ * Minimal backend interface used by the logic function. Allows testing with
15
+ * a simple mock without importing the full GraphBackend. Matches the subset
16
+ * of RFDBServerBackend that we need.
17
+ */
18
+ interface BehaviorBackendLike {
19
+ getNode(id: string): Promise<Record<string, unknown> | null>;
20
+ queryNodes(query: {
21
+ type?: string;
22
+ nodeType?: string;
23
+ }): AsyncIterable<Record<string, unknown>>;
24
+ getIncomingEdges(nodeId: string, edgeTypes?: EdgeType[] | null): Promise<EdgeRecord[]>;
25
+ }
26
+ export declare function findSharedBehaviorsLogic(db: BehaviorBackendLike, args: FindSharedBehaviorsArgs): Promise<ToolResult>;
27
+ export declare function handleFindSharedBehaviors(args: FindSharedBehaviorsArgs): Promise<ToolResult>;
28
+ export {};
29
+ //# sourceMappingURL=behavior-handlers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"behavior-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/behavior-handlers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE3D;;;;GAIG;AACH,UAAU,mBAAmB;IAC3B,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAC7D,UAAU,CAAC,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChG,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;CACxF;AAsBD,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,mBAAmB,EACvB,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,UAAU,CAAC,CA6FrB;AAID,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,CAGlG"}
@@ -0,0 +1,127 @@
1
+ /**
2
+ * Behavior handlers — surface cross-modality FEATURE duplication.
3
+ *
4
+ * `find_shared_behaviors` lists clusters of FEATUREs (cli:command, mcp:tool,
5
+ * vscode:command, …) whose entry-point forward-slice hashes match. Mirrors the
6
+ * `grafema features --duplicates` CLI subcommand — same algorithm, same
7
+ * cluster shape — so the two channels return symmetric data.
8
+ *
9
+ * REG-1119.
10
+ */
11
+ import { ensureAnalyzed } from '../analysis.js';
12
+ import { textResult, errorResult } from '../utils.js';
13
+ const DEFAULT_MIN_CLUSTER_SIZE = 2;
14
+ const DEFAULT_LIMIT = 100;
15
+ const MAX_LIMIT = 10_000;
16
+ // === Logic function (testable, accepts backend directly) ===
17
+ export async function findSharedBehaviorsLogic(db, args) {
18
+ const { minClusterSize: rawMin, limit: rawLimit } = args ?? {};
19
+ if (rawMin !== undefined && (!Number.isFinite(rawMin) || rawMin < 0)) {
20
+ return errorResult('minClusterSize must be a non-negative number');
21
+ }
22
+ if (rawLimit !== undefined && (!Number.isFinite(rawLimit) || rawLimit <= 0)) {
23
+ return errorResult('limit must be a positive number');
24
+ }
25
+ if (rawLimit !== undefined && rawLimit > MAX_LIMIT) {
26
+ return errorResult(`limit must be <= ${MAX_LIMIT}`);
27
+ }
28
+ const minClusterSize = Math.max(2, rawMin ?? DEFAULT_MIN_CLUSTER_SIZE);
29
+ const limit = rawLimit ?? DEFAULT_LIMIT;
30
+ const behaviors = [];
31
+ for await (const node of db.queryNodes({ type: 'BEHAVIOR' })) {
32
+ const id = String(node.id ?? '');
33
+ if (!id)
34
+ continue;
35
+ const hash = readString(node.hash);
36
+ if (!hash)
37
+ continue;
38
+ behaviors.push({
39
+ id,
40
+ hash,
41
+ effects: readStringArray(node.effects),
42
+ coreNodeCount: readNumber(node.coreNodeCount) ?? 0,
43
+ });
44
+ }
45
+ // 2. Bucket by hash.
46
+ const byHash = new Map();
47
+ for (const b of behaviors) {
48
+ let bucket = byHash.get(b.hash);
49
+ if (!bucket) {
50
+ bucket = [];
51
+ byHash.set(b.hash, bucket);
52
+ }
53
+ bucket.push(b);
54
+ }
55
+ // 3. Resolve features (incoming IMPLEMENTED_BY) for clusters.
56
+ const clusters = [];
57
+ for (const [hash, bucket] of byHash) {
58
+ if (bucket.length < minClusterSize)
59
+ continue;
60
+ const features = [];
61
+ const seen = new Set();
62
+ for (const beh of bucket) {
63
+ const edges = await db.getIncomingEdges(beh.id, ['IMPLEMENTED_BY']);
64
+ for (const edge of edges) {
65
+ const featureId = String(edge.src);
66
+ if (!featureId || seen.has(featureId))
67
+ continue;
68
+ seen.add(featureId);
69
+ const node = await db.getNode(featureId);
70
+ if (!node)
71
+ continue;
72
+ features.push({
73
+ id: featureId,
74
+ type: readString(node.type) ?? 'UNKNOWN',
75
+ name: readString(node.name) ?? '',
76
+ file: readString(node.file) ?? '',
77
+ });
78
+ }
79
+ }
80
+ if (features.length < minClusterSize)
81
+ continue;
82
+ features.sort((a, b) => (a.type === b.type ? a.name.localeCompare(b.name) : a.type.localeCompare(b.type)));
83
+ clusters.push({
84
+ hash,
85
+ effects: bucket[0].effects,
86
+ coreNodeCount: bucket[0].coreNodeCount,
87
+ features,
88
+ });
89
+ }
90
+ clusters.sort((a, b) => (b.features.length - a.features.length) || a.hash.localeCompare(b.hash));
91
+ const truncated = clusters.length > limit;
92
+ const limited = clusters.slice(0, limit);
93
+ return textResult(JSON.stringify({
94
+ count: limited.length,
95
+ truncated,
96
+ minClusterSize,
97
+ clusters: limited,
98
+ }, null, 2));
99
+ }
100
+ // === Public handler (calls ensureAnalyzed, used by MCP routing) ===
101
+ export async function handleFindSharedBehaviors(args) {
102
+ const db = await ensureAnalyzed();
103
+ return findSharedBehaviorsLogic(db, args);
104
+ }
105
+ // === Internal helpers ===
106
+ function readString(v) {
107
+ return typeof v === 'string' ? v : undefined;
108
+ }
109
+ function readNumber(v) {
110
+ return typeof v === 'number' && Number.isFinite(v) ? v : undefined;
111
+ }
112
+ function readStringArray(v) {
113
+ if (Array.isArray(v))
114
+ return v.filter((x) => typeof x === 'string');
115
+ if (typeof v === 'string') {
116
+ try {
117
+ const parsed = JSON.parse(v);
118
+ if (Array.isArray(parsed))
119
+ return parsed.filter((x) => typeof x === 'string');
120
+ }
121
+ catch {
122
+ // not JSON
123
+ }
124
+ }
125
+ return [];
126
+ }
127
+ //# sourceMappingURL=behavior-handlers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"behavior-handlers.js","sourceRoot":"","sources":["../../src/handlers/behavior-handlers.ts"],"names":[],"mappings":"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"}
@@ -3,10 +3,10 @@
3
3
  *
4
4
  * Delegates BFS tracing to @grafema/util's shared traceDataflow module.
5
5
  */
6
- import type { ToolResult, TraceAliasArgs, TraceDataFlowArgs, TraceCallChainArgs, CheckInvariantArgs } from '../types.js';
6
+ import type { ToolResult, TraceAliasArgs, TraceDataFlowArgs, TraceCallChainArgs, TraceEffectsArgs, CheckInvariantArgs } from '../types.js';
7
7
  export declare function handleTraceAlias(args: TraceAliasArgs): Promise<ToolResult>;
8
- export declare function handleTraceDataFlow(args: TraceDataFlowArgs): Promise<ToolResult>;
9
- export declare function handleTraceCallChain(args: TraceCallChainArgs): Promise<ToolResult>;
8
+ export declare function handleTraceDataflow(args: TraceDataFlowArgs): Promise<ToolResult>;
9
+ export declare function handleTraceCalls(args: TraceCallChainArgs): Promise<ToolResult>;
10
10
  export interface ExplainArgs {
11
11
  target: string;
12
12
  file?: string;
@@ -14,4 +14,5 @@ export interface ExplainArgs {
14
14
  }
15
15
  export declare function handleExplain(args: ExplainArgs): Promise<ToolResult>;
16
16
  export declare function handleCheckInvariant(args: CheckInvariantArgs): Promise<ToolResult>;
17
+ export declare function handleTraceEffects(args: TraceEffectsArgs): Promise<ToolResult>;
17
18
  //# sourceMappingURL=dataflow-handlers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dataflow-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/dataflow-handlers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AAWrB,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAqEhF;AAID,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAoDtF;AAID,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAiExF;AAID,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAmF1E;AAID,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAmDxF"}
1
+ {"version":3,"file":"dataflow-handlers.d.ts","sourceRoot":"","sources":["../../src/handlers/dataflow-handlers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AAarB,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAqEhF;AAID,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,CAAC,CAoDtF;AAID,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAiEpF;AAID,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAmF1E;AAID,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAmDxF;AA8BD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAyEpF"}