@reposkein/mcp 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -1
- package/binary-digests.json +4 -4
- package/dist/SKILL.md +19 -0
- package/dist/cli/agentAdapters.d.ts +68 -0
- package/dist/cli/agentAdapters.js +223 -0
- package/dist/cli/agentAdapters.js.map +1 -0
- package/dist/cli/ansi.d.ts +24 -0
- package/dist/cli/ansi.js +40 -0
- package/dist/cli/ansi.js.map +1 -0
- package/dist/cli/doctor.d.ts +34 -2
- package/dist/cli/doctor.js +51 -6
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/doctorFreshness.d.ts +43 -0
- package/dist/cli/doctorFreshness.js +111 -0
- package/dist/cli/doctorFreshness.js.map +1 -0
- package/dist/cli/doctorSummaries.d.ts +2 -0
- package/dist/cli/doctorSummaries.js +95 -0
- package/dist/cli/doctorSummaries.js.map +1 -0
- package/dist/cli/federatedDiscovery.d.ts +16 -0
- package/dist/cli/federatedDiscovery.js +75 -0
- package/dist/cli/federatedDiscovery.js.map +1 -0
- package/dist/cli/init.d.ts +69 -6
- package/dist/cli/init.js +194 -28
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/sourceSlices.d.ts +17 -0
- package/dist/cli/sourceSlices.js +59 -0
- package/dist/cli/sourceSlices.js.map +1 -0
- package/dist/cli/stats.d.ts +29 -0
- package/dist/cli/stats.js +180 -0
- package/dist/cli/stats.js.map +1 -0
- package/dist/cli/view.d.ts +71 -3
- package/dist/cli/view.js +147 -12
- package/dist/cli/view.js.map +1 -1
- package/dist/index.d.ts +8 -0
- package/dist/index.js +286 -123
- package/dist/index.js.map +1 -1
- package/dist/indexer/fetchBinary.d.ts +14 -0
- package/dist/indexer/fetchBinary.js +81 -40
- package/dist/indexer/fetchBinary.js.map +1 -1
- package/dist/indexer/runIndexer.d.ts +0 -2
- package/dist/indexer/runIndexer.js +8 -4
- package/dist/indexer/runIndexer.js.map +1 -1
- package/dist/store/JsonlGraphStore.d.ts +13 -3
- package/dist/store/JsonlGraphStore.js +55 -17
- package/dist/store/JsonlGraphStore.js.map +1 -1
- package/dist/store/decisions.d.ts +20 -2
- package/dist/store/decisions.js +35 -2
- package/dist/store/decisions.js.map +1 -1
- package/dist/store/indexedAt.d.ts +18 -0
- package/dist/store/indexedAt.js +56 -0
- package/dist/store/indexedAt.js.map +1 -0
- package/dist/store/instrumentTool.d.ts +40 -0
- package/dist/store/instrumentTool.js +82 -0
- package/dist/store/instrumentTool.js.map +1 -0
- package/dist/store/repoContextCache.d.ts +15 -0
- package/dist/store/repoContextCache.js +26 -0
- package/dist/store/repoContextCache.js.map +1 -0
- package/dist/store/repoSession.d.ts +63 -0
- package/dist/store/repoSession.js +123 -0
- package/dist/store/repoSession.js.map +1 -0
- package/dist/store/resolveRepoPath.d.ts +31 -0
- package/dist/store/resolveRepoPath.js +85 -0
- package/dist/store/resolveRepoPath.js.map +1 -0
- package/dist/store/sessionLog.d.ts +98 -0
- package/dist/store/sessionLog.js +216 -0
- package/dist/store/sessionLog.js.map +1 -0
- package/dist/store/sessionStats.d.ts +55 -0
- package/dist/store/sessionStats.js +140 -0
- package/dist/store/sessionStats.js.map +1 -0
- package/dist/store/sidecar.d.ts +39 -3
- package/dist/store/sidecar.js +89 -5
- package/dist/store/sidecar.js.map +1 -1
- package/dist/store/summaryShards.d.ts +117 -0
- package/dist/store/summaryShards.js +291 -0
- package/dist/store/summaryShards.js.map +1 -0
- package/dist/store/teamConfig.d.ts +13 -0
- package/dist/store/teamConfig.js +49 -0
- package/dist/store/teamConfig.js.map +1 -0
- package/dist/tools/indexerTools.d.ts +14 -2
- package/dist/tools/indexerTools.js +17 -5
- package/dist/tools/indexerTools.js.map +1 -1
- package/dist/tools/recordDecision.js +6 -1
- package/dist/tools/recordDecision.js.map +1 -1
- package/dist/viz/assets/{graph.worker-CC7BeE-8.js → graph.worker-DkH6-lMU.js} +1 -1
- package/dist/viz/assets/index-CxqeGuRS.css +1 -0
- package/dist/viz/assets/index-DiNZyrXx.js +9 -0
- package/dist/viz/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- package/dist/viz/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
- package/dist/viz/assets/jetbrains-mono-latin-700-normal-BYuf6tUa.woff2 +0 -0
- package/dist/viz/assets/r3f-BZY3QR6_.js +336 -0
- package/dist/viz/assets/tanstack-CjXr-L-s.js +62 -0
- package/dist/viz/assets/three-Cpu5RUEM.js +4116 -0
- package/dist/viz/index.html +5 -4
- package/package.json +5 -4
- package/dist/viz/assets/index-C_8UkiJ8.js +0 -9
- package/dist/viz/assets/r3f-Cku1OhB-.js +0 -277
- package/dist/viz/assets/tanstack-DyXcNRWk.js +0 -77
- package/dist/viz/assets/three-Z8XaLGmf.js +0 -3839
package/dist/index.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { pathToFileURL } from "node:url";
|
|
3
3
|
import { runInit, runIndex } from "./cli/init.js";
|
|
4
|
-
import {
|
|
4
|
+
import { parseAgentsFlag } from "./cli/agentAdapters.js";
|
|
5
|
+
import { runDoctor, resolveDoctorRepoPath } from "./cli/doctor.js";
|
|
5
6
|
import { runAdr } from "./cli/adr.js";
|
|
6
7
|
import { runView, runExport, parseViewArgs } from "./cli/view.js";
|
|
8
|
+
import { runStats } from "./cli/stats.js";
|
|
7
9
|
import { existsSync, realpathSync } from "node:fs";
|
|
8
10
|
import { join } from "node:path";
|
|
9
11
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
@@ -25,9 +27,13 @@ import { makeReaffirmDecision } from "./tools/reaffirmDecision.js";
|
|
|
25
27
|
import { makeListDecisions } from "./tools/listDecisions.js";
|
|
26
28
|
import { makeGetDecision } from "./tools/getDecision.js";
|
|
27
29
|
import { resolveRepoId } from "./store/repoId.js";
|
|
30
|
+
import { RepoSession } from "./store/repoSession.js";
|
|
31
|
+
import { makeCache } from "./store/repoContextCache.js";
|
|
28
32
|
import { ensureGraph } from "./indexer/ensureGraph.js";
|
|
29
|
-
import { ensureIndexerBinary } from "./indexer/fetchBinary.js";
|
|
33
|
+
import { ensureIndexerBinary, packageVersion } from "./indexer/fetchBinary.js";
|
|
30
34
|
import { spawnIndexer } from "./indexer/runIndexer.js";
|
|
35
|
+
import { SessionLogger, resolveSessionId } from "./store/sessionLog.js";
|
|
36
|
+
import { createToolLogger } from "./store/instrumentTool.js";
|
|
31
37
|
/** Selects the store backend.
|
|
32
38
|
* REPOSKEIN_STORE = "jsonl" | "neo4j" | "auto" (default "auto").
|
|
33
39
|
* - auto: JSONL if <repoPath>/.reposkein/nodes.jsonl exists, else Neo4j if
|
|
@@ -56,8 +62,61 @@ function buildStore(repoPath, repoId) {
|
|
|
56
62
|
return new JsonlGraphStore(repoPath, repoId);
|
|
57
63
|
return neo4j();
|
|
58
64
|
}
|
|
59
|
-
const
|
|
60
|
-
|
|
65
|
+
const HELP_TEXT = `reposkein-mcp — deterministic code-graph MCP server
|
|
66
|
+
|
|
67
|
+
Usage:
|
|
68
|
+
reposkein-mcp start the MCP server (stdio transport)
|
|
69
|
+
reposkein-mcp init [path] set up a repo (indexer, git hooks, skill, graph); --no-index skips the initial index, --ci also writes a GitHub Pages publish workflow (see docs/HOSTING.md). On a repo joined from a committed .reposkein/meta.json, also auto-writes local agent MCP config (--agents claude,opencode,cursor to override detection, --dry-run to preview)
|
|
70
|
+
reposkein-mcp index [path] (re)build the committed graph
|
|
71
|
+
reposkein-mcp doctor [path] health check (indexer binary, index, repo id, hooks, graph freshness); --json for machine output, --ci additionally fails on stale graph / missing hooks / unsplit legacy summaries
|
|
72
|
+
reposkein-mcp adr <sub> ... decision-log utilities
|
|
73
|
+
reposkein-mcp stats [path] session usage report (calls, tokens saved vs grep)
|
|
74
|
+
reposkein-mcp view [path] open the constellation viewer (--export <dir> for a static site)
|
|
75
|
+
reposkein-mcp --help show this help
|
|
76
|
+
reposkein-mcp --version print the package version
|
|
77
|
+
|
|
78
|
+
Repo resolution (used by the server and by [path]-less CLI commands):
|
|
79
|
+
1. an explicit path argument, if given
|
|
80
|
+
2. REPOSKEIN_REPO_PATH, if set
|
|
81
|
+
3. the nearest ancestor of the current directory containing .reposkein/
|
|
82
|
+
4. a single .reposkein/ found while scanning subdirectories (2 levels deep,
|
|
83
|
+
skipping node_modules/.git/target/dist/.worktrees/.claude)
|
|
84
|
+
If step 4 finds more than one .reposkein/, resolution fails with an error
|
|
85
|
+
naming the candidates — set REPOSKEIN_REPO_PATH (or pass a path) to pick one.
|
|
86
|
+
|
|
87
|
+
Docs: https://github.com/reposkein/reposkein/tree/main/mcp#readme`;
|
|
88
|
+
/** Structured, actionable message for repo-scoped tool calls when no repo
|
|
89
|
+
* resolved (see `resolveRepoPath`). Names the discovered candidates when
|
|
90
|
+
* resolution failed due to workspace-mode ambiguity, and points at
|
|
91
|
+
* `list_repos` / `select_repo` so the agent can pick one instead of
|
|
92
|
+
* abandoning the tools. */
|
|
93
|
+
// Exported for the regression test below (repoRequiredMessage.test.ts) — it
|
|
94
|
+
// must keep pointing agents at list_repos/select_repo, not just the env var.
|
|
95
|
+
export function repoRequiredMessage(resolution) {
|
|
96
|
+
if (resolution.candidates && resolution.candidates.length > 0) {
|
|
97
|
+
return (`Multiple RepoSkein repos were found under ${process.cwd()} and none is selected: ` +
|
|
98
|
+
resolution.candidates.join(", ") +
|
|
99
|
+
". Call list_repos to see them, then select_repo with one of its `path` or `name` " +
|
|
100
|
+
"values (or set REPOSKEIN_REPO_PATH) to use this tool.");
|
|
101
|
+
}
|
|
102
|
+
return ("No RepoSkein repo found (checked the current directory, its ancestors, and its " +
|
|
103
|
+
"immediate subdirectories for .reposkein/). Run `reposkein-mcp init` in the repository " +
|
|
104
|
+
"you want to work with, call list_repos to check what was discovered, or set " +
|
|
105
|
+
"REPOSKEIN_REPO_PATH to its root.");
|
|
106
|
+
}
|
|
107
|
+
// Exported for the regression test below (repoRequiredMessage.test.ts) — it
|
|
108
|
+
// must name the found path and the fix (`reposkein-mcp index`), not repeat
|
|
109
|
+
// the generic "no repo found" message: a repo WAS found here, it's just not
|
|
110
|
+
// indexed yet (or, if `.reposkein/` isn't actually there, misconfigured).
|
|
111
|
+
export function repoUnindexedMessage(repoPath) {
|
|
112
|
+
if (existsSync(join(repoPath, ".reposkein"))) {
|
|
113
|
+
return (`Found .reposkein/ at ${repoPath}, but it has no meta.json (not indexed yet). ` +
|
|
114
|
+
`Run \`reposkein-mcp index ${repoPath}\` (or the init_cpg_skeleton tool) to build it, ` +
|
|
115
|
+
"then retry this call.");
|
|
116
|
+
}
|
|
117
|
+
return (`${repoPath} has no .reposkein/ directory. Run \`reposkein-mcp init ${repoPath}\` there, ` +
|
|
118
|
+
"or point REPOSKEIN_REPO_PATH / select_repo at a repo that already has one.");
|
|
119
|
+
}
|
|
61
120
|
// Exported for the regression test. `hops` MUST stay a bounded integer: a literal union
|
|
62
121
|
// (z.union([z.literal(1), z.literal(2)])) serialises to JSON-Schema `anyOf:[{const:1},{const:2}]`,
|
|
63
122
|
// which Gemini's tool-schema validator 400-rejects — and one bad tool declaration fails the
|
|
@@ -99,18 +158,102 @@ export const getDecisionInputSchema = {
|
|
|
99
158
|
decision_id: z.string(),
|
|
100
159
|
};
|
|
101
160
|
export async function main() {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
//
|
|
105
|
-
//
|
|
106
|
-
//
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
161
|
+
// Zero-config repo resolution: explicit arg (n/a here) > REPOSKEIN_REPO_PATH >
|
|
162
|
+
// walk-up (nearest ancestor with .reposkein/) > walk-down (workspace mode).
|
|
163
|
+
// See store/resolveRepoPath.ts for the full precedence + ambiguity rules.
|
|
164
|
+
// Session-scoped resolution: `select_repo` (below) can override this for
|
|
165
|
+
// the rest of the connection. Precedence: select_repo > REPOSKEIN_REPO_PATH
|
|
166
|
+
// > walk-up > walk-down. See store/repoSession.ts.
|
|
167
|
+
const session = new RepoSession({
|
|
168
|
+
cwd: process.cwd(),
|
|
169
|
+
envRepoPath: process.env.REPOSKEIN_REPO_PATH,
|
|
110
170
|
});
|
|
111
|
-
|
|
171
|
+
// REP-20 session usage stats: one instrumentation point for every tool
|
|
172
|
+
// call, wrapping the handler passed to `server.registerTool` below (each
|
|
173
|
+
// call site does `withLog("tool_name", async (args) => {...})` — logging
|
|
174
|
+
// logic itself lives only in instrumentTool.ts/sessionLog.ts, never in a
|
|
175
|
+
// handler body). Session id = this process's lifetime (start-timestamp +
|
|
176
|
+
// pid), overridable via REPOSKEIN_SESSION_ID for reproducible tests/tooling.
|
|
177
|
+
// `cachedResolve` (used by `resolveActiveRepo` below, and by the two
|
|
178
|
+
// handlers that gate on repoPath alone) memoizes `session.resolve()` per
|
|
179
|
+
// call, so the handler's own resolution and the logger's are the same
|
|
180
|
+
// filesystem walk, not two — see instrumentTool.ts for why and how.
|
|
181
|
+
const sessionLogger = new SessionLogger(resolveSessionId(process.env));
|
|
182
|
+
const { withLog, cachedResolve } = createToolLogger(session, sessionLogger);
|
|
183
|
+
// Per-repoPath {repoId, store} cache. Constructing a JsonlGraphStore is
|
|
184
|
+
// cheap (it lazily loads/re-parses its graph per call, keyed by file
|
|
185
|
+
// mtime) but re-running resolveRepoId/ensureGraph/buildStore on every tool
|
|
186
|
+
// call would still be wasted work for the common single-repo case, and
|
|
187
|
+
// rebuilding the store object would also throw away that per-instance
|
|
188
|
+
// mtime cache — so one context is built per repoPath and reused, letting
|
|
189
|
+
// `select_repo` switch back and forth cheaply too.
|
|
190
|
+
//
|
|
191
|
+
// Only a SUCCESSFUL resolution (repoId defined) is cached — see
|
|
192
|
+
// store/repoContextCache.ts. A repo whose `.reposkein/` exists but isn't
|
|
193
|
+
// indexed yet (no meta.json) is a transient, fixable state: an agent might
|
|
194
|
+
// run `reposkein-mcp index` (or init_cpg_skeleton) out-of-band and expect
|
|
195
|
+
// the very next call in this same session to pick it up. Caching that
|
|
196
|
+
// failure would freeze the session on a stale "not found" forever,
|
|
197
|
+
// undercutting select_repo's whole no-restart-needed point.
|
|
198
|
+
const getRepoContext = makeCache(async (path) => {
|
|
199
|
+
const id = resolveRepoId(path, process.env.REPOSKEIN_REPO_ID);
|
|
200
|
+
// Build the graph if the repo has none yet. Derived JSONL is
|
|
201
|
+
// git-ignored, so a fresh clone arrives without it; without this the
|
|
202
|
+
// first query on a newly selected repo would fail on one that indexes
|
|
203
|
+
// fine in seconds.
|
|
204
|
+
await ensureGraph(path, id, {
|
|
205
|
+
mode: (process.env.REPOSKEIN_STORE ?? "auto").toLowerCase(),
|
|
206
|
+
neo4jConfigured: !!process.env.NEO4J_PASSWORD,
|
|
207
|
+
});
|
|
208
|
+
return { repoId: id, store: buildStore(path, id) };
|
|
209
|
+
}, (ctx) => !!ctx.repoId);
|
|
210
|
+
/** Resolves the session's current repo for a repo-scoped tool call.
|
|
211
|
+
* Re-evaluated on every call (not once at startup) so `select_repo`
|
|
212
|
+
* actually takes effect for calls made after it. Uses `cachedResolve`
|
|
213
|
+
* (not `session.resolve()` directly) so this and the REP-20 logging
|
|
214
|
+
* wrapper share one filesystem walk per call. */
|
|
215
|
+
async function resolveActiveRepo() {
|
|
216
|
+
const resolution = cachedResolve();
|
|
217
|
+
if (!resolution.repoPath)
|
|
218
|
+
return { ok: false, message: repoRequiredMessage(resolution) };
|
|
219
|
+
const ctx = await getRepoContext(resolution.repoPath);
|
|
220
|
+
// Distinct from repoRequiredMessage: a repo path WAS resolved here — the
|
|
221
|
+
// problem is it isn't indexed (or doesn't actually have .reposkein/),
|
|
222
|
+
// not that none could be found at all. See repoUnindexedMessage.
|
|
223
|
+
if (!ctx.repoId)
|
|
224
|
+
return { ok: false, message: repoUnindexedMessage(resolution.repoPath) };
|
|
225
|
+
return { ok: true, repoPath: resolution.repoPath, repoId: ctx.repoId, store: ctx.store };
|
|
226
|
+
}
|
|
227
|
+
const errResult = (message) => ({ content: [{ type: "text", text: message }], isError: true });
|
|
112
228
|
const server = new McpServer({ name: "@reposkein/mcp", version: "0.0.0" });
|
|
113
|
-
|
|
229
|
+
server.registerTool("list_repos", {
|
|
230
|
+
title: "List discovered repos",
|
|
231
|
+
description: "Enumerate the RepoSkein repos discovered from the server's working directory (walk-up: the nearest ancestor with .reposkein/; walk-down/workspace mode: subdirectories, when no ancestor has one). Single-repo setups return exactly one entry. In workspace mode (multiple sibling repos, no default selected), use this to see the candidates, then `select_repo` one before calling other repo-scoped tools.",
|
|
232
|
+
inputSchema: {},
|
|
233
|
+
}, withLog("list_repos", async () => {
|
|
234
|
+
const repos = session.list();
|
|
235
|
+
return {
|
|
236
|
+
content: [
|
|
237
|
+
{
|
|
238
|
+
type: "text",
|
|
239
|
+
text: JSON.stringify({
|
|
240
|
+
mode: repos.length > 1 ? "workspace" : "single",
|
|
241
|
+
repos,
|
|
242
|
+
}),
|
|
243
|
+
},
|
|
244
|
+
],
|
|
245
|
+
};
|
|
246
|
+
}));
|
|
247
|
+
server.registerTool("select_repo", {
|
|
248
|
+
title: "Select the active repo",
|
|
249
|
+
description: "Set the session-active repo for all subsequent repo-scoped tool calls (get_context_profile, semantic_find, impact, decisions, etc.) — the fix for workspace-mode ambiguity (list_repos returned more than one candidate). Pass a `repo` value from list_repos: its `path` or its `name`. Overrides REPOSKEIN_REPO_PATH and any earlier select_repo call for the rest of this connection; stays in effect until called again.",
|
|
250
|
+
inputSchema: { repo: z.string() },
|
|
251
|
+
}, withLog("select_repo", async (args) => {
|
|
252
|
+
const result = session.select(args.repo);
|
|
253
|
+
if (!result.ok)
|
|
254
|
+
return errResult(result.error);
|
|
255
|
+
return { content: [{ type: "text", text: JSON.stringify({ ok: true, selected: result.repo }) }] };
|
|
256
|
+
}));
|
|
114
257
|
server.registerTool("read_cypher", {
|
|
115
258
|
title: "Read-only Cypher query",
|
|
116
259
|
description: "Run a read-only Cypher query against the RepoSkein graph. Writes are rejected. Filter by `n.repo_id = $repo_id` (or `n.repo_id IN $repo_ids`); pass `federated: true` to span this repo and its nested repos via `$repo_ids`. Results are capped (200 rows / 64KB).",
|
|
@@ -119,21 +262,26 @@ export async function main() {
|
|
|
119
262
|
params: z.record(z.string(), z.unknown()).optional(),
|
|
120
263
|
federated: z.boolean().optional(),
|
|
121
264
|
},
|
|
122
|
-
}, async (args) =>
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
265
|
+
}, withLog("read_cypher", async (args) => {
|
|
266
|
+
// read_cypher tolerates an unresolved repo (falls back to whatever
|
|
267
|
+
// buildStore(undefined, undefined) picks — Neo4j if configured, else
|
|
268
|
+
// UnconfiguredStore — matching its pre-existing, non-gated behavior).
|
|
269
|
+
const resolution = cachedResolve();
|
|
270
|
+
const ctx = resolution.repoPath
|
|
271
|
+
? await getRepoContext(resolution.repoPath)
|
|
272
|
+
: { repoId: undefined, store: buildStore(undefined, undefined) };
|
|
273
|
+
return makeReadCypher(ctx.store, ctx.repoId)(args);
|
|
274
|
+
}));
|
|
126
275
|
server.registerTool("get_context_profile", {
|
|
127
276
|
title: "Get context profile",
|
|
128
277
|
description: "Resolve a function/class (by node_id, file_path+name, or name) and return its caller/callee neighborhood (hops 1-2) with inlined prose and an enrichment_needed list. Never guesses — returns candidates if a name is ambiguous. Pass federated:true to resolve and traverse across nested repos.",
|
|
129
278
|
inputSchema: getContextProfileInputSchema,
|
|
130
|
-
}, async (args) => {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
return
|
|
135
|
-
});
|
|
136
|
-
const writeSummary = repoId ? makeWriteSemanticSummary(store, repoId) : null;
|
|
279
|
+
}, withLog("get_context_profile", async (args) => {
|
|
280
|
+
const active = await resolveActiveRepo();
|
|
281
|
+
if (!active.ok)
|
|
282
|
+
return errResult(active.message);
|
|
283
|
+
return makeGetContextProfile(active.store, active.repoId, active.repoPath)(args);
|
|
284
|
+
}));
|
|
137
285
|
server.registerTool("write_semantic_summary", {
|
|
138
286
|
title: "Write semantic summary",
|
|
139
287
|
description: "Attach a 1-3 sentence plain-text business-logic summary to a node, stamped with its current content hash for staleness tracking. Plain text only (no markdown links or code fences), max 1000 chars.",
|
|
@@ -142,13 +290,12 @@ export async function main() {
|
|
|
142
290
|
summary: z.string(),
|
|
143
291
|
model: z.string().optional(),
|
|
144
292
|
},
|
|
145
|
-
}, async (args) => {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return
|
|
150
|
-
});
|
|
151
|
-
const initSkeleton = repoId ? makeInitCpgSkeleton(repoId) : null;
|
|
293
|
+
}, withLog("write_semantic_summary", async (args) => {
|
|
294
|
+
const active = await resolveActiveRepo();
|
|
295
|
+
if (!active.ok)
|
|
296
|
+
return errResult(active.message);
|
|
297
|
+
return makeWriteSemanticSummary(active.store, active.repoId)(args);
|
|
298
|
+
}));
|
|
152
299
|
server.registerTool("init_cpg_skeleton", {
|
|
153
300
|
title: "Build the code graph",
|
|
154
301
|
description: "Index the repository with the native indexer and load it into the graph database. Run once on a fresh repo (or to rebuild). Returns node/edge counts.",
|
|
@@ -156,26 +303,28 @@ export async function main() {
|
|
|
156
303
|
path: z.string().optional(),
|
|
157
304
|
full: z.boolean().optional(),
|
|
158
305
|
},
|
|
159
|
-
}, async (args) => {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
306
|
+
}, withLog("init_cpg_skeleton", async (args) => {
|
|
307
|
+
const active = await resolveActiveRepo();
|
|
308
|
+
if (!active.ok)
|
|
309
|
+
return errResult(active.message);
|
|
310
|
+
// repoPath is threaded through explicitly (see indexerTools.ts) so this
|
|
311
|
+
// always targets the resolved active repo, not a cwd/env-based guess —
|
|
312
|
+
// an explicit args.path still wins inside makeInitCpgSkeleton itself.
|
|
313
|
+
return makeInitCpgSkeleton(active.repoId, active.repoPath)(args);
|
|
314
|
+
}));
|
|
166
315
|
server.registerTool("reindex_file", {
|
|
167
316
|
title: "Reindex after editing",
|
|
168
317
|
description: "Refresh the graph after editing a source file (pass its path). v1 performs a full reindex.",
|
|
169
318
|
inputSchema: { path: z.string() },
|
|
170
|
-
}, async (args) => {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
319
|
+
}, withLog("reindex_file", async (args) => {
|
|
320
|
+
const active = await resolveActiveRepo();
|
|
321
|
+
if (!active.ok)
|
|
322
|
+
return errResult(active.message);
|
|
323
|
+
// repoPath threaded explicitly — reindex_file has no path override of
|
|
324
|
+
// its own, so without this it would silently reindex whatever
|
|
325
|
+
// REPOSKEIN_REPO_PATH/cwd points at instead of the selected repo.
|
|
326
|
+
return makeReindexFile(active.repoId, active.repoPath)(args);
|
|
327
|
+
}));
|
|
179
328
|
server.registerTool("semantic_find", {
|
|
180
329
|
title: "Find code by meaning",
|
|
181
330
|
description: "Rank functions/classes by a lexical match over their qualified names, signatures, and agent-written summaries — the entry point to seed get_context_profile when you don't know where to start. Returns ranked node_ids. Architecture decisions are part of the corpus: \"why\" questions (why don't we X, what did we decide about Y) surface Decision rows — follow up with get_decision. federated:true spans nested repos.",
|
|
@@ -185,25 +334,23 @@ export async function main() {
|
|
|
185
334
|
kind: z.enum(["Function", "Class", "Interface", "Enum", "Decision"]).optional(),
|
|
186
335
|
federated: z.boolean().optional(),
|
|
187
336
|
},
|
|
188
|
-
}, async (args) => {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
return
|
|
193
|
-
});
|
|
194
|
-
// get_temporal_context is gated on repoPath (not the store — it reads from .git directly).
|
|
195
|
-
const temporalContext = repoPath ? makeTemporalContext(repoPath) : null;
|
|
337
|
+
}, withLog("semantic_find", async (args) => {
|
|
338
|
+
const active = await resolveActiveRepo();
|
|
339
|
+
if (!active.ok)
|
|
340
|
+
return errResult(active.message);
|
|
341
|
+
return makeSemanticFind(active.store, active.repoId, active.repoPath, undefined, { decisions: true })(args);
|
|
342
|
+
}));
|
|
196
343
|
server.registerTool("get_temporal_context", {
|
|
197
344
|
title: "Git temporal context",
|
|
198
345
|
description: "Git-derived signals for a file: how often/recently it changes, who owns it, and which files most often change together with it (co-change) — answers \"what else should I touch?\". Advisory (derived from git history, not the committed graph). Before a cross-cutting change, use this to find files that historically change together.",
|
|
199
346
|
inputSchema: { path: z.string() },
|
|
200
|
-
}, async (args) => {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
347
|
+
}, withLog("get_temporal_context", async (args) => {
|
|
348
|
+
// Gated on repoPath only (not repoId/store) — it reads from .git directly.
|
|
349
|
+
const resolution = cachedResolve();
|
|
350
|
+
if (!resolution.repoPath)
|
|
351
|
+
return errResult(repoRequiredMessage(resolution));
|
|
352
|
+
return makeTemporalContext(resolution.repoPath)(args);
|
|
353
|
+
}));
|
|
207
354
|
server.registerTool("impact", {
|
|
208
355
|
title: "Change impact + covering tests",
|
|
209
356
|
description: "Given a function/class, return its transitive callers (what could break if you change it) split into impacted code vs the tests that cover it (what to run). Resolves by node_id, file_path+name, or name. federated:true spans nested repos.",
|
|
@@ -214,82 +361,76 @@ export async function main() {
|
|
|
214
361
|
depth: z.number().int().min(1).max(5).optional(),
|
|
215
362
|
federated: z.boolean().optional(),
|
|
216
363
|
},
|
|
217
|
-
}, async (args) => {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
return
|
|
222
|
-
});
|
|
364
|
+
}, withLog("impact", async (args) => {
|
|
365
|
+
const active = await resolveActiveRepo();
|
|
366
|
+
if (!active.ok)
|
|
367
|
+
return errResult(active.message);
|
|
368
|
+
return makeImpact(active.store, active.repoId, active.repoPath)(args);
|
|
369
|
+
}));
|
|
223
370
|
// Decision tools are gated on repoPath + repoId: records live as committed
|
|
224
371
|
// files under <repoPath>/.reposkein/decisions/, the graph is used only for
|
|
225
372
|
// anchor resolution and hash stamping (Phase 1 — no GraphStore changes).
|
|
226
|
-
|
|
227
|
-
// Best-effort reindex before stamping anchors so a decision recorded right
|
|
228
|
-
// after an edit reflects the working tree, not the last index snapshot.
|
|
229
|
-
const decisionRefresh = async () => {
|
|
230
|
-
const bin = await ensureIndexerBinary();
|
|
231
|
-
await spawnIndexer(bin, ["index", "--json", "--repo-id", repoId, repoPath]);
|
|
232
|
-
};
|
|
233
|
-
const recordDecision = decisionsReady
|
|
234
|
-
? makeRecordDecision(store, repoId, repoPath, { refresh: decisionRefresh })
|
|
235
|
-
: null;
|
|
373
|
+
// `resolveActiveRepo` already requires both, so it doubles as the gate.
|
|
236
374
|
server.registerTool("record_decision", {
|
|
237
375
|
title: "Record an architecture decision",
|
|
238
376
|
description: "Record an Architecture Decision Record (ADR): why a significant design choice was made, anchored to the graph nodes and paths it governs. Use for decisions that affect structure, dependencies, interfaces, or construction techniques — not renames, formatting, or routine fixes. Records land as status \"proposed\" (the user ratifies via set_decision_status); pass supersedes to replace an earlier decision. Plain text only; anchors are stamped with the current content hash for drift tracking.",
|
|
239
377
|
inputSchema: recordDecisionInputSchema,
|
|
240
|
-
}, async (args) => {
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
378
|
+
}, withLog("record_decision", async (args) => {
|
|
379
|
+
const active = await resolveActiveRepo();
|
|
380
|
+
if (!active.ok)
|
|
381
|
+
return errResult(active.message);
|
|
382
|
+
// Best-effort reindex before stamping anchors so a decision recorded
|
|
383
|
+
// right after an edit reflects the working tree, not the last index.
|
|
384
|
+
const decisionRefresh = async () => {
|
|
385
|
+
const bin = await ensureIndexerBinary();
|
|
386
|
+
await spawnIndexer(bin, ["index", "--json", "--repo-id", active.repoId, active.repoPath]);
|
|
387
|
+
};
|
|
388
|
+
return makeRecordDecision(active.store, active.repoId, active.repoPath, { refresh: decisionRefresh })(args);
|
|
389
|
+
}));
|
|
247
390
|
server.registerTool("set_decision_status", {
|
|
248
391
|
title: "Set decision status",
|
|
249
392
|
description: "Change an ADR's lifecycle status. Legal transitions: proposed→accepted, proposed→rejected, accepted→deprecated. \"superseded\" only happens via record_decision's supersedes. Only ratify to accepted when the user has confirmed the decision.",
|
|
250
393
|
inputSchema: setDecisionStatusInputSchema,
|
|
251
|
-
}, async (args) => {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
return
|
|
256
|
-
});
|
|
257
|
-
const reaffirmDecision = decisionsReady ? makeReaffirmDecision(store, repoId, repoPath) : null;
|
|
394
|
+
}, withLog("set_decision_status", async (args) => {
|
|
395
|
+
const active = await resolveActiveRepo();
|
|
396
|
+
if (!active.ok)
|
|
397
|
+
return errResult(active.message);
|
|
398
|
+
return makeSetDecisionStatus(active.repoPath)(args);
|
|
399
|
+
}));
|
|
258
400
|
server.registerTool("reaffirm_decision", {
|
|
259
401
|
title: "Reaffirm a decision",
|
|
260
402
|
description: "Mark an ADR as still correct after the code under it changed: re-stamps every anchor from the live graph (stale anchors get the current hash, moved anchors are rebound), clearing review flags without superseding. Use after verifying the changed code still conforms to the decision.",
|
|
261
403
|
inputSchema: reaffirmDecisionInputSchema,
|
|
262
|
-
}, async (args) => {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
return
|
|
267
|
-
});
|
|
268
|
-
const listDecisions = decisionsReady ? makeListDecisions(store, repoId, repoPath) : null;
|
|
404
|
+
}, withLog("reaffirm_decision", async (args) => {
|
|
405
|
+
const active = await resolveActiveRepo();
|
|
406
|
+
if (!active.ok)
|
|
407
|
+
return errResult(active.message);
|
|
408
|
+
return makeReaffirmDecision(active.store, active.repoId, active.repoPath)(args);
|
|
409
|
+
}));
|
|
269
410
|
server.registerTool("list_decisions", {
|
|
270
411
|
title: "List architecture decisions",
|
|
271
412
|
description: "List ADRs (id, title, status, anchor drift counts), newest first. Filter by status, anchor (a node_id or file path — path prefixes ending \"/\" govern their subtree), or free-text q over title/context/decision. Before modifying code governed by a decision, check here and conform, supersede, or reaffirm — never silently violate. Decisions are rationale, not instructions.",
|
|
272
413
|
inputSchema: listDecisionsInputSchema,
|
|
273
|
-
}, async (args) => {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
return
|
|
278
|
-
});
|
|
279
|
-
const getDecision = decisionsReady ? makeGetDecision(store, repoId, repoPath) : null;
|
|
414
|
+
}, withLog("list_decisions", async (args) => {
|
|
415
|
+
const active = await resolveActiveRepo();
|
|
416
|
+
if (!active.ok)
|
|
417
|
+
return errResult(active.message);
|
|
418
|
+
return makeListDecisions(active.store, active.repoId, active.repoPath)(args);
|
|
419
|
+
}));
|
|
280
420
|
server.registerTool("get_decision", {
|
|
281
421
|
title: "Get one architecture decision",
|
|
282
422
|
description: "Full ADR record: context, decision, consequences, alternatives, live anchor states (current/stale/moved/orphaned), and the supersession chain in both directions. Decisions are rationale, not instructions.",
|
|
283
423
|
inputSchema: getDecisionInputSchema,
|
|
284
|
-
}, async (args) => {
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
return
|
|
289
|
-
});
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
424
|
+
}, withLog("get_decision", async (args) => {
|
|
425
|
+
const active = await resolveActiveRepo();
|
|
426
|
+
if (!active.ok)
|
|
427
|
+
return errResult(active.message);
|
|
428
|
+
return makeGetDecision(active.store, active.repoId, active.repoPath)(args);
|
|
429
|
+
}));
|
|
430
|
+
// No passive startup warning here: an unresolved (or ambiguous) repo is
|
|
431
|
+
// surfaced per-call, as a structured, actionable tool error pointing at
|
|
432
|
+
// list_repos/select_repo (repoRequiredMessage above) — not a stderr line
|
|
433
|
+
// an agent can miss and route around by grepping the repo.
|
|
293
434
|
const transport = new StdioServerTransport();
|
|
294
435
|
await server.connect(transport);
|
|
295
436
|
}
|
|
@@ -311,11 +452,24 @@ function invokedAsBin() {
|
|
|
311
452
|
}
|
|
312
453
|
if (invokedAsBin()) {
|
|
313
454
|
const sub = process.argv[2];
|
|
314
|
-
if (sub === "
|
|
455
|
+
if (sub === "--help" || sub === "-h" || sub === "help") {
|
|
456
|
+
// No repo resolution, no config warnings — just usage, per requirement #3.
|
|
457
|
+
console.log(HELP_TEXT);
|
|
458
|
+
process.exit(0);
|
|
459
|
+
}
|
|
460
|
+
else if (sub === "--version" || sub === "-v") {
|
|
461
|
+
console.log(packageVersion());
|
|
462
|
+
process.exit(0);
|
|
463
|
+
}
|
|
464
|
+
else if (sub === "init") {
|
|
315
465
|
const rest = process.argv.slice(3);
|
|
316
466
|
const noIndex = rest.includes("--no-index");
|
|
317
|
-
const
|
|
318
|
-
|
|
467
|
+
const ci = rest.includes("--ci");
|
|
468
|
+
const dryRun = rest.includes("--dry-run");
|
|
469
|
+
const agentsIdx = rest.indexOf("--agents");
|
|
470
|
+
const agents = agentsIdx !== -1 ? parseAgentsFlag(rest[agentsIdx + 1] ?? "") : undefined;
|
|
471
|
+
const path = rest.find((a, i) => !a.startsWith("-") && rest[i - 1] !== "--agents") ?? ".";
|
|
472
|
+
runInit(path, { index: !noIndex, ci, dryRun, agents })
|
|
319
473
|
.then((code) => process.exit(code))
|
|
320
474
|
.catch((err) => { console.error(err); process.exit(1); });
|
|
321
475
|
}
|
|
@@ -328,11 +482,20 @@ if (invokedAsBin()) {
|
|
|
328
482
|
else if (sub === "doctor") {
|
|
329
483
|
const rest = process.argv.slice(3);
|
|
330
484
|
const json = rest.includes("--json");
|
|
331
|
-
const
|
|
332
|
-
|
|
485
|
+
const ci = rest.includes("--ci");
|
|
486
|
+
const explicitPath = rest.find((a) => !a.startsWith("-"));
|
|
487
|
+
const { path, error } = resolveDoctorRepoPath(explicitPath, process.cwd(), process.env.REPOSKEIN_REPO_PATH);
|
|
488
|
+
if (error) {
|
|
489
|
+
console.error(`reposkein doctor: ${error}`);
|
|
490
|
+
process.exit(1);
|
|
491
|
+
}
|
|
492
|
+
runDoctor(path, { json, ci })
|
|
333
493
|
.then((code) => process.exit(code))
|
|
334
494
|
.catch((err) => { console.error(err); process.exit(1); });
|
|
335
495
|
}
|
|
496
|
+
else if (sub === "stats") {
|
|
497
|
+
process.exit(runStats(process.argv.slice(3), process.cwd(), process.env.REPOSKEIN_REPO_PATH));
|
|
498
|
+
}
|
|
336
499
|
else if (sub === "adr") {
|
|
337
500
|
const rest = process.argv.slice(3);
|
|
338
501
|
const adrSub = rest[0];
|
|
@@ -342,14 +505,14 @@ if (invokedAsBin()) {
|
|
|
342
505
|
process.exit(runAdr(adrSub, path, dir));
|
|
343
506
|
}
|
|
344
507
|
else if (sub === "view") {
|
|
345
|
-
const { repoPath, opts, exportDir } = parseViewArgs(process.argv.slice(3));
|
|
508
|
+
const { repoPath, opts, exportDir, exportOpts } = parseViewArgs(process.argv.slice(3));
|
|
346
509
|
const resolvedViewRepoId = resolveRepoId(repoPath, process.env.REPOSKEIN_REPO_ID);
|
|
347
510
|
if (!resolvedViewRepoId) {
|
|
348
511
|
console.error(`reposkein view: could not resolve repo id (no meta.json / REPOSKEIN_REPO_ID); falling back to placeholder "repo"`);
|
|
349
512
|
}
|
|
350
513
|
const vRepoId = resolvedViewRepoId ?? "repo";
|
|
351
514
|
const run = exportDir
|
|
352
|
-
? runExport(repoPath, vRepoId, exportDir)
|
|
515
|
+
? runExport(repoPath, vRepoId, exportDir, exportOpts)
|
|
353
516
|
: runView(repoPath, vRepoId, opts);
|
|
354
517
|
run
|
|
355
518
|
.then((code) => process.exit(code))
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|