@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.
Files changed (98) hide show
  1. package/README.md +73 -1
  2. package/binary-digests.json +4 -4
  3. package/dist/SKILL.md +19 -0
  4. package/dist/cli/agentAdapters.d.ts +68 -0
  5. package/dist/cli/agentAdapters.js +223 -0
  6. package/dist/cli/agentAdapters.js.map +1 -0
  7. package/dist/cli/ansi.d.ts +24 -0
  8. package/dist/cli/ansi.js +40 -0
  9. package/dist/cli/ansi.js.map +1 -0
  10. package/dist/cli/doctor.d.ts +34 -2
  11. package/dist/cli/doctor.js +51 -6
  12. package/dist/cli/doctor.js.map +1 -1
  13. package/dist/cli/doctorFreshness.d.ts +43 -0
  14. package/dist/cli/doctorFreshness.js +111 -0
  15. package/dist/cli/doctorFreshness.js.map +1 -0
  16. package/dist/cli/doctorSummaries.d.ts +2 -0
  17. package/dist/cli/doctorSummaries.js +95 -0
  18. package/dist/cli/doctorSummaries.js.map +1 -0
  19. package/dist/cli/federatedDiscovery.d.ts +16 -0
  20. package/dist/cli/federatedDiscovery.js +75 -0
  21. package/dist/cli/federatedDiscovery.js.map +1 -0
  22. package/dist/cli/init.d.ts +69 -6
  23. package/dist/cli/init.js +194 -28
  24. package/dist/cli/init.js.map +1 -1
  25. package/dist/cli/sourceSlices.d.ts +17 -0
  26. package/dist/cli/sourceSlices.js +59 -0
  27. package/dist/cli/sourceSlices.js.map +1 -0
  28. package/dist/cli/stats.d.ts +29 -0
  29. package/dist/cli/stats.js +180 -0
  30. package/dist/cli/stats.js.map +1 -0
  31. package/dist/cli/view.d.ts +71 -3
  32. package/dist/cli/view.js +147 -12
  33. package/dist/cli/view.js.map +1 -1
  34. package/dist/index.d.ts +8 -0
  35. package/dist/index.js +286 -123
  36. package/dist/index.js.map +1 -1
  37. package/dist/indexer/fetchBinary.d.ts +14 -0
  38. package/dist/indexer/fetchBinary.js +81 -40
  39. package/dist/indexer/fetchBinary.js.map +1 -1
  40. package/dist/indexer/runIndexer.d.ts +0 -2
  41. package/dist/indexer/runIndexer.js +8 -4
  42. package/dist/indexer/runIndexer.js.map +1 -1
  43. package/dist/store/JsonlGraphStore.d.ts +13 -3
  44. package/dist/store/JsonlGraphStore.js +55 -17
  45. package/dist/store/JsonlGraphStore.js.map +1 -1
  46. package/dist/store/decisions.d.ts +20 -2
  47. package/dist/store/decisions.js +35 -2
  48. package/dist/store/decisions.js.map +1 -1
  49. package/dist/store/indexedAt.d.ts +18 -0
  50. package/dist/store/indexedAt.js +56 -0
  51. package/dist/store/indexedAt.js.map +1 -0
  52. package/dist/store/instrumentTool.d.ts +40 -0
  53. package/dist/store/instrumentTool.js +82 -0
  54. package/dist/store/instrumentTool.js.map +1 -0
  55. package/dist/store/repoContextCache.d.ts +15 -0
  56. package/dist/store/repoContextCache.js +26 -0
  57. package/dist/store/repoContextCache.js.map +1 -0
  58. package/dist/store/repoSession.d.ts +63 -0
  59. package/dist/store/repoSession.js +123 -0
  60. package/dist/store/repoSession.js.map +1 -0
  61. package/dist/store/resolveRepoPath.d.ts +31 -0
  62. package/dist/store/resolveRepoPath.js +85 -0
  63. package/dist/store/resolveRepoPath.js.map +1 -0
  64. package/dist/store/sessionLog.d.ts +98 -0
  65. package/dist/store/sessionLog.js +216 -0
  66. package/dist/store/sessionLog.js.map +1 -0
  67. package/dist/store/sessionStats.d.ts +55 -0
  68. package/dist/store/sessionStats.js +140 -0
  69. package/dist/store/sessionStats.js.map +1 -0
  70. package/dist/store/sidecar.d.ts +39 -3
  71. package/dist/store/sidecar.js +89 -5
  72. package/dist/store/sidecar.js.map +1 -1
  73. package/dist/store/summaryShards.d.ts +117 -0
  74. package/dist/store/summaryShards.js +291 -0
  75. package/dist/store/summaryShards.js.map +1 -0
  76. package/dist/store/teamConfig.d.ts +13 -0
  77. package/dist/store/teamConfig.js +49 -0
  78. package/dist/store/teamConfig.js.map +1 -0
  79. package/dist/tools/indexerTools.d.ts +14 -2
  80. package/dist/tools/indexerTools.js +17 -5
  81. package/dist/tools/indexerTools.js.map +1 -1
  82. package/dist/tools/recordDecision.js +6 -1
  83. package/dist/tools/recordDecision.js.map +1 -1
  84. package/dist/viz/assets/{graph.worker-CC7BeE-8.js → graph.worker-DkH6-lMU.js} +1 -1
  85. package/dist/viz/assets/index-CxqeGuRS.css +1 -0
  86. package/dist/viz/assets/index-DiNZyrXx.js +9 -0
  87. package/dist/viz/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  88. package/dist/viz/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  89. package/dist/viz/assets/jetbrains-mono-latin-700-normal-BYuf6tUa.woff2 +0 -0
  90. package/dist/viz/assets/r3f-BZY3QR6_.js +336 -0
  91. package/dist/viz/assets/tanstack-CjXr-L-s.js +62 -0
  92. package/dist/viz/assets/three-Cpu5RUEM.js +4116 -0
  93. package/dist/viz/index.html +5 -4
  94. package/package.json +5 -4
  95. package/dist/viz/assets/index-C_8UkiJ8.js +0 -9
  96. package/dist/viz/assets/r3f-Cku1OhB-.js +0 -277
  97. package/dist/viz/assets/tanstack-DyXcNRWk.js +0 -77
  98. 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 { runDoctor } from "./cli/doctor.js";
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 REPO_REQUIRED_MSG = "REPOSKEIN_REPO_PATH (or REPOSKEIN_REPO_ID) must be set to use this tool. " +
60
- "Set REPOSKEIN_REPO_PATH to the root of the repository you want to work with.";
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
- const repoPath = process.env.REPOSKEIN_REPO_PATH;
103
- const repoId = resolveRepoId(repoPath, process.env.REPOSKEIN_REPO_ID);
104
- // Build the graph if the repo has none yet. Derived JSONL is git-ignored, so a
105
- // fresh clone arrives without it; without this the first query would fail on a
106
- // repo that indexes fine in a couple of seconds.
107
- await ensureGraph(repoPath, repoId, {
108
- mode: (process.env.REPOSKEIN_STORE ?? "auto").toLowerCase(),
109
- neo4jConfigured: !!process.env.NEO4J_PASSWORD,
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
- const store = buildStore(repoPath, repoId);
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
- const readCypher = makeReadCypher(store, repoId);
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) => readCypher(args));
123
- // Repo-scoped tools are always registered; they check repoId at call time.
124
- // Handlers are constructed with a real repoId only if it's available.
125
- const getContextProfile = repoId ? makeGetContextProfile(store, repoId, repoPath) : null;
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
- if (!getContextProfile) {
132
- return { content: [{ type: "text", text: REPO_REQUIRED_MSG }], isError: true };
133
- }
134
- return getContextProfile(args);
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
- if (!writeSummary) {
147
- return { content: [{ type: "text", text: REPO_REQUIRED_MSG }], isError: true };
148
- }
149
- return writeSummary(args);
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
- if (!initSkeleton) {
161
- return { content: [{ type: "text", text: REPO_REQUIRED_MSG }], isError: true };
162
- }
163
- return initSkeleton(args);
164
- });
165
- const reindexFile = repoId ? makeReindexFile(repoId) : null;
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
- if (!reindexFile) {
172
- return { content: [{ type: "text", text: REPO_REQUIRED_MSG }], isError: true };
173
- }
174
- return reindexFile(args);
175
- });
176
- const semanticFind = repoId
177
- ? makeSemanticFind(store, repoId, repoPath ?? ".", undefined, { decisions: !!repoPath })
178
- : null;
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
- if (!semanticFind) {
190
- return { content: [{ type: "text", text: REPO_REQUIRED_MSG }], isError: true };
191
- }
192
- return semanticFind(args);
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
- if (!temporalContext) {
202
- return { content: [{ type: "text", text: REPO_REQUIRED_MSG }], isError: true };
203
- }
204
- return temporalContext(args);
205
- });
206
- const impact = repoId ? makeImpact(store, repoId, repoPath) : null;
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
- if (!impact) {
219
- return { content: [{ type: "text", text: REPO_REQUIRED_MSG }], isError: true };
220
- }
221
- return impact(args);
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
- const decisionsReady = !!repoPath && !!repoId;
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
- if (!recordDecision) {
242
- return { content: [{ type: "text", text: REPO_REQUIRED_MSG }], isError: true };
243
- }
244
- return recordDecision(args);
245
- });
246
- const setDecisionStatus = decisionsReady ? makeSetDecisionStatus(repoPath) : null;
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
- if (!setDecisionStatus) {
253
- return { content: [{ type: "text", text: REPO_REQUIRED_MSG }], isError: true };
254
- }
255
- return setDecisionStatus(args);
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
- if (!reaffirmDecision) {
264
- return { content: [{ type: "text", text: REPO_REQUIRED_MSG }], isError: true };
265
- }
266
- return reaffirmDecision(args);
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
- if (!listDecisions) {
275
- return { content: [{ type: "text", text: REPO_REQUIRED_MSG }], isError: true };
276
- }
277
- return listDecisions(args);
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
- if (!getDecision) {
286
- return { content: [{ type: "text", text: REPO_REQUIRED_MSG }], isError: true };
287
- }
288
- return getDecision(args);
289
- });
290
- if (!repoId) {
291
- console.error("[reposkein-mcp] REPOSKEIN_REPO_PATH not set; repo-scoped tools will return an error until it is configured");
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 === "init") {
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 path = rest.find((a) => !a.startsWith("-")) ?? ".";
318
- runInit(path, { index: !noIndex })
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 path = rest.find((a) => !a.startsWith("-")) ?? process.env.REPOSKEIN_REPO_PATH ?? ".";
332
- runDoctor(path, json)
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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"}