@grafema/mcp 0.3.23 → 0.3.27
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 +103 -90
- package/dist/definitions/query-tools.d.ts.map +1 -1
- package/dist/definitions/query-tools.js +71 -0
- package/dist/definitions/query-tools.js.map +1 -1
- package/dist/handlers/analysis-handlers.d.ts +1 -0
- package/dist/handlers/analysis-handlers.d.ts.map +1 -1
- package/dist/handlers/analysis-handlers.js +5 -1
- package/dist/handlers/analysis-handlers.js.map +1 -1
- package/dist/handlers/behavior-handlers.d.ts +29 -0
- package/dist/handlers/behavior-handlers.d.ts.map +1 -0
- package/dist/handlers/behavior-handlers.js +127 -0
- package/dist/handlers/behavior-handlers.js.map +1 -0
- package/dist/handlers/dataflow-handlers.d.ts +4 -3
- package/dist/handlers/dataflow-handlers.d.ts.map +1 -1
- package/dist/handlers/dataflow-handlers.js +93 -3
- package/dist/handlers/dataflow-handlers.js.map +1 -1
- package/dist/handlers/graphql-handlers.d.ts +1 -1
- package/dist/handlers/graphql-handlers.js +1 -1
- package/dist/handlers/index.d.ts +4 -3
- package/dist/handlers/index.d.ts.map +1 -1
- package/dist/handlers/index.js +4 -3
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/query-handlers.js +0 -1
- package/dist/handlers/query-handlers.js.map +1 -1
- package/dist/server.js +13 -9
- package/dist/server.js.map +1 -1
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/definitions/query-tools.ts +71 -0
- package/src/handlers/analysis-handlers.ts +6 -1
- package/src/handlers/behavior-handlers.ts +174 -0
- package/src/handlers/dataflow-handlers.ts +110 -2
- package/src/handlers/graphql-handlers.ts +1 -1
- package/src/handlers/index.ts +4 -3
- package/src/handlers/query-handlers.ts +1 -1
- package/src/server.ts +21 -10
- package/src/types.ts +13 -0
package/README.md
CHANGED
|
@@ -1,134 +1,147 @@
|
|
|
1
1
|
# @grafema/mcp
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> Model Context Protocol server exposing the Grafema code graph to AI
|
|
4
|
+
> agents (Claude, Cursor, Copilot, Continue, …).
|
|
4
5
|
|
|
5
|
-
|
|
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
|
-
|
|
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
|
-
|
|
22
|
+
---
|
|
18
23
|
|
|
19
|
-
|
|
24
|
+
## Quick start
|
|
20
25
|
|
|
21
|
-
|
|
26
|
+
### Claude Code
|
|
22
27
|
|
|
23
|
-
```
|
|
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"
|
|
34
|
+
"args": ["-y", "@grafema/mcp"]
|
|
29
35
|
}
|
|
30
36
|
}
|
|
31
37
|
}
|
|
32
38
|
```
|
|
33
39
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
### Claude Desktop configuration
|
|
40
|
+
### Claude Desktop
|
|
37
41
|
|
|
38
|
-
|
|
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": ["
|
|
48
|
+
"args": ["-y", "@grafema/mcp"]
|
|
46
49
|
}
|
|
47
50
|
}
|
|
48
51
|
}
|
|
49
52
|
```
|
|
50
53
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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
|
-
|
|
105
|
-
|
|
98
|
+
list_guarantees()
|
|
99
|
+
check_guarantees(category="dataflow")
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## All tools
|
|
106
105
|
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
111
|
-
|
|
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
|
|
123
|
+
### GitHub token (for `report_issue`)
|
|
117
124
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
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
|
|
9
|
-
export declare function
|
|
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;
|
|
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"}
|