@opencodehub/mcp 0.1.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 (210) hide show
  1. package/README.md +62 -0
  2. package/dist/analysis-bridge.d.ts +23 -0
  3. package/dist/analysis-bridge.d.ts.map +1 -0
  4. package/dist/analysis-bridge.js +83 -0
  5. package/dist/analysis-bridge.js.map +1 -0
  6. package/dist/connection-pool.d.ts +76 -0
  7. package/dist/connection-pool.d.ts.map +1 -0
  8. package/dist/connection-pool.js +179 -0
  9. package/dist/connection-pool.js.map +1 -0
  10. package/dist/error-envelope.d.ts +97 -0
  11. package/dist/error-envelope.d.ts.map +1 -0
  12. package/dist/error-envelope.js +75 -0
  13. package/dist/error-envelope.js.map +1 -0
  14. package/dist/group-resolver.d.ts +29 -0
  15. package/dist/group-resolver.d.ts.map +1 -0
  16. package/dist/group-resolver.js +100 -0
  17. package/dist/group-resolver.js.map +1 -0
  18. package/dist/index.d.ts +43 -0
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +54 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/next-step-hints.d.ts +24 -0
  23. package/dist/next-step-hints.d.ts.map +1 -0
  24. package/dist/next-step-hints.js +41 -0
  25. package/dist/next-step-hints.js.map +1 -0
  26. package/dist/repo-resolver.d.ts +88 -0
  27. package/dist/repo-resolver.d.ts.map +1 -0
  28. package/dist/repo-resolver.js +211 -0
  29. package/dist/repo-resolver.js.map +1 -0
  30. package/dist/repo-uri-for-entry.d.ts +25 -0
  31. package/dist/repo-uri-for-entry.d.ts.map +1 -0
  32. package/dist/repo-uri-for-entry.js +64 -0
  33. package/dist/repo-uri-for-entry.js.map +1 -0
  34. package/dist/resources/repo-cluster.d.ts +19 -0
  35. package/dist/resources/repo-cluster.d.ts.map +1 -0
  36. package/dist/resources/repo-cluster.js +203 -0
  37. package/dist/resources/repo-cluster.js.map +1 -0
  38. package/dist/resources/repo-clusters.d.ts +14 -0
  39. package/dist/resources/repo-clusters.d.ts.map +1 -0
  40. package/dist/resources/repo-clusters.js +97 -0
  41. package/dist/resources/repo-clusters.js.map +1 -0
  42. package/dist/resources/repo-context.d.ts +12 -0
  43. package/dist/resources/repo-context.d.ts.map +1 -0
  44. package/dist/resources/repo-context.js +84 -0
  45. package/dist/resources/repo-context.js.map +1 -0
  46. package/dist/resources/repo-process.d.ts +19 -0
  47. package/dist/resources/repo-process.d.ts.map +1 -0
  48. package/dist/resources/repo-process.js +220 -0
  49. package/dist/resources/repo-process.js.map +1 -0
  50. package/dist/resources/repo-processes.d.ts +13 -0
  51. package/dist/resources/repo-processes.d.ts.map +1 -0
  52. package/dist/resources/repo-processes.js +99 -0
  53. package/dist/resources/repo-processes.js.map +1 -0
  54. package/dist/resources/repo-schema.d.ts +13 -0
  55. package/dist/resources/repo-schema.d.ts.map +1 -0
  56. package/dist/resources/repo-schema.js +99 -0
  57. package/dist/resources/repo-schema.js.map +1 -0
  58. package/dist/resources/repos.d.ts +20 -0
  59. package/dist/resources/repos.d.ts.map +1 -0
  60. package/dist/resources/repos.js +58 -0
  61. package/dist/resources/repos.js.map +1 -0
  62. package/dist/resources/store-helper.d.ts +28 -0
  63. package/dist/resources/store-helper.d.ts.map +1 -0
  64. package/dist/resources/store-helper.js +58 -0
  65. package/dist/resources/store-helper.js.map +1 -0
  66. package/dist/resources/yaml.d.ts +10 -0
  67. package/dist/resources/yaml.d.ts.map +1 -0
  68. package/dist/resources/yaml.js +16 -0
  69. package/dist/resources/yaml.js.map +1 -0
  70. package/dist/server.d.ts +46 -0
  71. package/dist/server.d.ts.map +1 -0
  72. package/dist/server.js +194 -0
  73. package/dist/server.js.map +1 -0
  74. package/dist/staleness.d.ts +19 -0
  75. package/dist/staleness.d.ts.map +1 -0
  76. package/dist/staleness.js +40 -0
  77. package/dist/staleness.js.map +1 -0
  78. package/dist/test-utils.d.ts +170 -0
  79. package/dist/test-utils.d.ts.map +1 -0
  80. package/dist/test-utils.js +473 -0
  81. package/dist/test-utils.js.map +1 -0
  82. package/dist/tools/api-impact.d.ts +47 -0
  83. package/dist/tools/api-impact.d.ts.map +1 -0
  84. package/dist/tools/api-impact.js +199 -0
  85. package/dist/tools/api-impact.js.map +1 -0
  86. package/dist/tools/confidence.d.ts +39 -0
  87. package/dist/tools/confidence.d.ts.map +1 -0
  88. package/dist/tools/confidence.js +58 -0
  89. package/dist/tools/confidence.js.map +1 -0
  90. package/dist/tools/context.d.ts +47 -0
  91. package/dist/tools/context.d.ts.map +1 -0
  92. package/dist/tools/context.js +577 -0
  93. package/dist/tools/context.js.map +1 -0
  94. package/dist/tools/dependencies.d.ts +29 -0
  95. package/dist/tools/dependencies.d.ts.map +1 -0
  96. package/dist/tools/dependencies.js +110 -0
  97. package/dist/tools/dependencies.js.map +1 -0
  98. package/dist/tools/detect-changes.d.ts +15 -0
  99. package/dist/tools/detect-changes.d.ts.map +1 -0
  100. package/dist/tools/detect-changes.js +78 -0
  101. package/dist/tools/detect-changes.js.map +1 -0
  102. package/dist/tools/group-contracts.d.ts +26 -0
  103. package/dist/tools/group-contracts.d.ts.map +1 -0
  104. package/dist/tools/group-contracts.js +251 -0
  105. package/dist/tools/group-contracts.js.map +1 -0
  106. package/dist/tools/group-cross-repo-links.d.ts +28 -0
  107. package/dist/tools/group-cross-repo-links.d.ts.map +1 -0
  108. package/dist/tools/group-cross-repo-links.js +128 -0
  109. package/dist/tools/group-cross-repo-links.js.map +1 -0
  110. package/dist/tools/group-list.d.ts +10 -0
  111. package/dist/tools/group-list.d.ts.map +1 -0
  112. package/dist/tools/group-list.js +74 -0
  113. package/dist/tools/group-list.js.map +1 -0
  114. package/dist/tools/group-query.d.ts +40 -0
  115. package/dist/tools/group-query.d.ts.map +1 -0
  116. package/dist/tools/group-query.js +209 -0
  117. package/dist/tools/group-query.js.map +1 -0
  118. package/dist/tools/group-status.d.ts +21 -0
  119. package/dist/tools/group-status.d.ts.map +1 -0
  120. package/dist/tools/group-status.js +121 -0
  121. package/dist/tools/group-status.js.map +1 -0
  122. package/dist/tools/group-sync.d.ts +23 -0
  123. package/dist/tools/group-sync.d.ts.map +1 -0
  124. package/dist/tools/group-sync.js +112 -0
  125. package/dist/tools/group-sync.js.map +1 -0
  126. package/dist/tools/impact.d.ts +36 -0
  127. package/dist/tools/impact.d.ts.map +1 -0
  128. package/dist/tools/impact.js +232 -0
  129. package/dist/tools/impact.js.map +1 -0
  130. package/dist/tools/license-audit.d.ts +34 -0
  131. package/dist/tools/license-audit.d.ts.map +1 -0
  132. package/dist/tools/license-audit.js +108 -0
  133. package/dist/tools/license-audit.js.map +1 -0
  134. package/dist/tools/list-dead-code.d.ts +26 -0
  135. package/dist/tools/list-dead-code.d.ts.map +1 -0
  136. package/dist/tools/list-dead-code.js +110 -0
  137. package/dist/tools/list-dead-code.js.map +1 -0
  138. package/dist/tools/list-findings-delta.d.ts +36 -0
  139. package/dist/tools/list-findings-delta.d.ts.map +1 -0
  140. package/dist/tools/list-findings-delta.js +274 -0
  141. package/dist/tools/list-findings-delta.js.map +1 -0
  142. package/dist/tools/list-findings.d.ts +30 -0
  143. package/dist/tools/list-findings.d.ts.map +1 -0
  144. package/dist/tools/list-findings.js +129 -0
  145. package/dist/tools/list-findings.js.map +1 -0
  146. package/dist/tools/list-repos.d.ts +17 -0
  147. package/dist/tools/list-repos.d.ts.map +1 -0
  148. package/dist/tools/list-repos.js +63 -0
  149. package/dist/tools/list-repos.js.map +1 -0
  150. package/dist/tools/owners.d.ts +23 -0
  151. package/dist/tools/owners.d.ts.map +1 -0
  152. package/dist/tools/owners.js +103 -0
  153. package/dist/tools/owners.js.map +1 -0
  154. package/dist/tools/pack-codebase.d.ts +76 -0
  155. package/dist/tools/pack-codebase.d.ts.map +1 -0
  156. package/dist/tools/pack-codebase.js +289 -0
  157. package/dist/tools/pack-codebase.js.map +1 -0
  158. package/dist/tools/project-profile.d.ts +28 -0
  159. package/dist/tools/project-profile.d.ts.map +1 -0
  160. package/dist/tools/project-profile.js +109 -0
  161. package/dist/tools/project-profile.js.map +1 -0
  162. package/dist/tools/query.d.ts +63 -0
  163. package/dist/tools/query.d.ts.map +1 -0
  164. package/dist/tools/query.js +662 -0
  165. package/dist/tools/query.js.map +1 -0
  166. package/dist/tools/remove-dead-code.d.ts +47 -0
  167. package/dist/tools/remove-dead-code.d.ts.map +1 -0
  168. package/dist/tools/remove-dead-code.js +258 -0
  169. package/dist/tools/remove-dead-code.js.map +1 -0
  170. package/dist/tools/rename.d.ts +21 -0
  171. package/dist/tools/rename.d.ts.map +1 -0
  172. package/dist/tools/rename.js +116 -0
  173. package/dist/tools/rename.js.map +1 -0
  174. package/dist/tools/risk-trends.d.ts +19 -0
  175. package/dist/tools/risk-trends.d.ts.map +1 -0
  176. package/dist/tools/risk-trends.js +73 -0
  177. package/dist/tools/risk-trends.js.map +1 -0
  178. package/dist/tools/route-map.d.ts +27 -0
  179. package/dist/tools/route-map.d.ts.map +1 -0
  180. package/dist/tools/route-map.js +119 -0
  181. package/dist/tools/route-map.js.map +1 -0
  182. package/dist/tools/scan.d.ts +27 -0
  183. package/dist/tools/scan.d.ts.map +1 -0
  184. package/dist/tools/scan.js +136 -0
  185. package/dist/tools/scan.js.map +1 -0
  186. package/dist/tools/shape-check.d.ts +53 -0
  187. package/dist/tools/shape-check.d.ts.map +1 -0
  188. package/dist/tools/shape-check.js +161 -0
  189. package/dist/tools/shape-check.js.map +1 -0
  190. package/dist/tools/shared.d.ts +101 -0
  191. package/dist/tools/shared.d.ts.map +1 -0
  192. package/dist/tools/shared.js +114 -0
  193. package/dist/tools/shared.js.map +1 -0
  194. package/dist/tools/signature.d.ts +38 -0
  195. package/dist/tools/signature.d.ts.map +1 -0
  196. package/dist/tools/signature.js +332 -0
  197. package/dist/tools/signature.js.map +1 -0
  198. package/dist/tools/sql.d.ts +34 -0
  199. package/dist/tools/sql.d.ts.map +1 -0
  200. package/dist/tools/sql.js +222 -0
  201. package/dist/tools/sql.js.map +1 -0
  202. package/dist/tools/tool-map.d.ts +24 -0
  203. package/dist/tools/tool-map.d.ts.map +1 -0
  204. package/dist/tools/tool-map.js +97 -0
  205. package/dist/tools/tool-map.js.map +1 -0
  206. package/dist/tools/verdict.d.ts +33 -0
  207. package/dist/tools/verdict.d.ts.map +1 -0
  208. package/dist/tools/verdict.js +102 -0
  209. package/dist/tools/verdict.js.map +1 -0
  210. package/package.json +76 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/tools/query.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * `remove_dead_code` — delete provably-dead symbols from disk.
3
+ *
4
+ * Pipeline:
5
+ * 1. Call {@link classifyDeadness} to get the `dead` bucket (non-exported,
6
+ * no inbound referrers).
7
+ * 2. Join against `nodes.end_line` via a batched id-IN lookup so the edit
8
+ * plan carries full `[startLine, endLine]` ranges. `DeadSymbol` only
9
+ * exposes `startLine`; we avoid touching the classifier surface.
10
+ * 3. Group deletions per file, read each file via the injected
11
+ * {@link FsAbstraction}, snapshot the lines being removed, and emit an
12
+ * edit plan.
13
+ * 4. Apply (only when `apply=true` is set explicitly — even with
14
+ * dryRun=false) by rewriting the file without the deleted line ranges
15
+ * and writing atomically through `fs.writeFileAtomic`.
16
+ *
17
+ * Defaults:
18
+ * - `dryRun=true`, `apply=false` — returns the plan, writes nothing.
19
+ *
20
+ * Destructive only when `apply=true`; otherwise read-only.
21
+ */
22
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
23
+ import { type FsAbstraction } from "@opencodehub/analysis";
24
+ import { type ToolContext, type ToolResult } from "./shared.js";
25
+ /** Edit plan entry — one contiguous line range to be removed from a file. */
26
+ export interface RemoveDeadCodeEdit {
27
+ readonly filePath: string;
28
+ readonly startLine: number;
29
+ readonly endLine: number;
30
+ /** The source lines being deleted, joined with `\n`, for audit logs. */
31
+ readonly content: string;
32
+ }
33
+ /** Factory override hook: tests inject an in-memory fs. */
34
+ export interface RemoveDeadCodeContext extends ToolContext {
35
+ readonly fsFactory?: () => FsAbstraction;
36
+ }
37
+ interface RemoveDeadCodeArgs {
38
+ readonly repo?: string | undefined;
39
+ readonly repo_uri?: string | undefined;
40
+ readonly dryRun?: boolean | undefined;
41
+ readonly filePathPattern?: string | undefined;
42
+ readonly apply?: boolean | undefined;
43
+ }
44
+ export declare function runRemoveDeadCode(ctx: RemoveDeadCodeContext, args: RemoveDeadCodeArgs): Promise<ToolResult>;
45
+ export declare function registerRemoveDeadCodeTool(server: McpServer, ctx: RemoveDeadCodeContext): void;
46
+ export {};
47
+ //# sourceMappingURL=remove-dead-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-dead-code.d.ts","sourceRoot":"","sources":["../../src/tools/remove-dead-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,UAAU,EAGhB,MAAM,aAAa,CAAC;AAkBrB,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,wEAAwE;IACxE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAMD,2DAA2D;AAC3D,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,aAAa,CAAC;CAC1C;AAED,UAAU,kBAAkB;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9C,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACtC;AAED,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,qBAAqB,EAC1B,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,UAAU,CAAC,CA+IrB;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,qBAAqB,GAAG,IAAI,CAiB9F"}
@@ -0,0 +1,258 @@
1
+ /**
2
+ * `remove_dead_code` — delete provably-dead symbols from disk.
3
+ *
4
+ * Pipeline:
5
+ * 1. Call {@link classifyDeadness} to get the `dead` bucket (non-exported,
6
+ * no inbound referrers).
7
+ * 2. Join against `nodes.end_line` via a batched id-IN lookup so the edit
8
+ * plan carries full `[startLine, endLine]` ranges. `DeadSymbol` only
9
+ * exposes `startLine`; we avoid touching the classifier surface.
10
+ * 3. Group deletions per file, read each file via the injected
11
+ * {@link FsAbstraction}, snapshot the lines being removed, and emit an
12
+ * edit plan.
13
+ * 4. Apply (only when `apply=true` is set explicitly — even with
14
+ * dryRun=false) by rewriting the file without the deleted line ranges
15
+ * and writing atomically through `fs.writeFileAtomic`.
16
+ *
17
+ * Defaults:
18
+ * - `dryRun=true`, `apply=false` — returns the plan, writes nothing.
19
+ *
20
+ * Destructive only when `apply=true`; otherwise read-only.
21
+ */
22
+ // biome-ignore-all lint/complexity/useLiteralKeys: dot-access disallowed on Record index signatures
23
+ import { isAbsolute, join } from "node:path";
24
+ import { classifyDeadness, createNodeFs, } from "@opencodehub/analysis";
25
+ import { z } from "zod";
26
+ import { toolError, toolErrorFromUnknown } from "../error-envelope.js";
27
+ import { withNextSteps } from "../next-step-hints.js";
28
+ import { stalenessFromMeta } from "../staleness.js";
29
+ import { fromToolResult, repoArgShape, toToolResult, withStore, } from "./shared.js";
30
+ const RemoveDeadCodeInput = {
31
+ ...repoArgShape,
32
+ dryRun: z
33
+ .boolean()
34
+ .optional()
35
+ .describe("Preview-only when true (DEFAULT). Set false AND pass apply=true to write."),
36
+ filePathPattern: z
37
+ .string()
38
+ .optional()
39
+ .describe("Substring filter — only dead symbols whose file path matches are considered."),
40
+ apply: z
41
+ .boolean()
42
+ .optional()
43
+ .describe("Must be explicitly true to write to disk. Ignored (and no-op) when dryRun is true."),
44
+ };
45
+ export async function runRemoveDeadCode(ctx, args) {
46
+ const dryRun = args.dryRun ?? true;
47
+ const apply = args.apply === true;
48
+ const pattern = args.filePathPattern;
49
+ const call = await withStore(ctx, args, async (store, resolved) => {
50
+ try {
51
+ // Refuse an apply that skipped the explicit opt-in. Even when the
52
+ // caller disables dryRun, we require `apply=true` as a second
53
+ // confirmation — the tool refuses to persist deletions without an explicit opt-in.
54
+ if (!dryRun && !apply) {
55
+ return toolError("INVALID_INPUT", "remove_dead_code refuses to write without an explicit apply=true flag.", "Pass both dryRun=false and apply=true to persist deletions, or leave dryRun=true for a plan.");
56
+ }
57
+ const result = await classifyDeadness(store.graph);
58
+ const candidates = result.dead.filter((s) => pattern === undefined || s.filePath.includes(pattern));
59
+ if (candidates.length === 0) {
60
+ return withNextSteps(`No dead symbols matched${pattern ? ` filePath~${pattern}` : ""}. Nothing to remove.`, {
61
+ filesAffected: 0,
62
+ totalDeletions: 0,
63
+ edits: [],
64
+ applied: false,
65
+ }, ["call `list_dead_code` with includeUnreachableExports=true to inspect exports"], stalenessFromMeta(resolved.meta));
66
+ }
67
+ const enriched = await enrichWithEndLines(store.graph, candidates);
68
+ const groupedByFile = groupByFile(enriched);
69
+ const fsFactory = ctx.fsFactory ?? createNodeFs;
70
+ const fs = fsFactory();
71
+ const edits = [];
72
+ const readFailures = [];
73
+ for (const [filePath, syms] of groupedByFile) {
74
+ const abs = resolveAbs(resolved.repoPath, filePath);
75
+ let source;
76
+ try {
77
+ source = await fs.readFile(abs);
78
+ }
79
+ catch (err) {
80
+ readFailures.push(`${filePath}: ${err.message}`);
81
+ continue;
82
+ }
83
+ const lines = source.split("\n");
84
+ for (const sym of syms) {
85
+ const start = clampLine(sym.startLine, lines.length);
86
+ const end = clampLine(sym.endLine, lines.length);
87
+ if (start === 0 || end === 0 || end < start)
88
+ continue;
89
+ const snippet = lines.slice(start - 1, end).join("\n");
90
+ edits.push({
91
+ filePath,
92
+ startLine: start,
93
+ endLine: end,
94
+ content: snippet,
95
+ });
96
+ }
97
+ }
98
+ const filesAffected = new Set(edits.map((e) => e.filePath)).size;
99
+ const totalDeletions = edits.length;
100
+ let applied = false;
101
+ const writeFailures = [];
102
+ if (!dryRun && apply) {
103
+ const editsByFile = new Map();
104
+ for (const e of edits) {
105
+ const bucket = editsByFile.get(e.filePath) ?? [];
106
+ bucket.push(e);
107
+ editsByFile.set(e.filePath, bucket);
108
+ }
109
+ for (const [filePath, fileEdits] of editsByFile) {
110
+ const abs = resolveAbs(resolved.repoPath, filePath);
111
+ let source;
112
+ try {
113
+ source = await fs.readFile(abs);
114
+ }
115
+ catch (err) {
116
+ writeFailures.push(`${filePath}: read failed — ${err.message}`);
117
+ continue;
118
+ }
119
+ const rewritten = applyDeletions(source, fileEdits);
120
+ try {
121
+ await fs.writeFileAtomic(abs, rewritten);
122
+ }
123
+ catch (err) {
124
+ writeFailures.push(`${filePath}: write failed — ${err.message}`);
125
+ }
126
+ }
127
+ applied = writeFailures.length === 0;
128
+ }
129
+ const header = `remove_dead_code (${applied ? "applied" : dryRun ? "dry-run" : "refused"}): ${filesAffected} file(s), ${totalDeletions} deletion(s).`;
130
+ const lines = [header];
131
+ for (const e of edits.slice(0, 50)) {
132
+ lines.push(` - ${e.filePath}:${e.startLine}-${e.endLine}`);
133
+ }
134
+ if (edits.length > 50)
135
+ lines.push(` … ${edits.length - 50} more`);
136
+ if (readFailures.length > 0) {
137
+ lines.push(`Read failures (${readFailures.length}):`);
138
+ for (const f of readFailures.slice(0, 20))
139
+ lines.push(` ⚠ ${f}`);
140
+ }
141
+ if (writeFailures.length > 0) {
142
+ lines.push(`Write failures (${writeFailures.length}):`);
143
+ for (const f of writeFailures.slice(0, 20))
144
+ lines.push(` ⚠ ${f}`);
145
+ }
146
+ const next = [];
147
+ if (dryRun && totalDeletions > 0) {
148
+ next.push("if the plan looks right, re-call with dryRun=false AND apply=true");
149
+ }
150
+ if (applied) {
151
+ next.push("re-index the repo with `codehub analyze` so the graph reflects the removals");
152
+ }
153
+ if (totalDeletions === 0) {
154
+ next.push("no deletions staged — confirm dead symbols exist via `list_dead_code`");
155
+ }
156
+ return withNextSteps(lines.join("\n"), {
157
+ filesAffected,
158
+ totalDeletions,
159
+ edits,
160
+ applied,
161
+ ...(readFailures.length > 0 ? { readFailures } : {}),
162
+ ...(writeFailures.length > 0 ? { writeFailures } : {}),
163
+ }, next, stalenessFromMeta(resolved.meta));
164
+ }
165
+ catch (err) {
166
+ return toolErrorFromUnknown(err);
167
+ }
168
+ });
169
+ return toToolResult(call);
170
+ }
171
+ export function registerRemoveDeadCodeTool(server, ctx) {
172
+ server.registerTool("remove_dead_code", {
173
+ title: "Remove dead symbols from disk",
174
+ description: "Generate (and optionally apply) an edit plan that deletes every provably-dead symbol's source range. Safe by default: returns a plan without writing unless BOTH dryRun=false AND apply=true are passed.",
175
+ inputSchema: RemoveDeadCodeInput,
176
+ annotations: {
177
+ readOnlyHint: false,
178
+ destructiveHint: true,
179
+ idempotentHint: false,
180
+ openWorldHint: false,
181
+ },
182
+ }, async (args) => fromToolResult(await runRemoveDeadCode(ctx, args)));
183
+ }
184
+ async function enrichWithEndLines(graph, dead) {
185
+ if (dead.length === 0)
186
+ return [];
187
+ const ids = dead.map((d) => d.id);
188
+ const partners = await graph.listNodes({ ids });
189
+ const endById = new Map();
190
+ for (const n of partners) {
191
+ const raw = n["endLine"];
192
+ const end = typeof raw === "number" && Number.isFinite(raw) ? raw : 0;
193
+ endById.set(n.id, end);
194
+ }
195
+ const out = [];
196
+ for (const d of dead) {
197
+ const endLine = endById.get(d.id) ?? d.startLine;
198
+ out.push({ ...d, endLine });
199
+ }
200
+ return out;
201
+ }
202
+ function groupByFile(syms) {
203
+ const out = new Map();
204
+ for (const s of syms) {
205
+ const bucket = out.get(s.filePath) ?? [];
206
+ bucket.push(s);
207
+ out.set(s.filePath, bucket);
208
+ }
209
+ // Sort each bucket by startLine so downstream line-slicing is predictable.
210
+ for (const [, bucket] of out) {
211
+ bucket.sort((a, b) => a.startLine - b.startLine);
212
+ }
213
+ return out;
214
+ }
215
+ function resolveAbs(repoRoot, relPath) {
216
+ return isAbsolute(relPath) ? relPath : join(repoRoot, relPath);
217
+ }
218
+ function clampLine(line, total) {
219
+ if (!Number.isFinite(line) || line <= 0)
220
+ return 0;
221
+ if (line > total)
222
+ return total;
223
+ return Math.floor(line);
224
+ }
225
+ /**
226
+ * Drop each edit's `[startLine, endLine]` range from the source, processing
227
+ * ranges in descending order so earlier line numbers stay valid. Overlapping
228
+ * ranges are collapsed — we keep the union.
229
+ */
230
+ function applyDeletions(source, edits) {
231
+ if (edits.length === 0)
232
+ return source;
233
+ const lines = source.split("\n");
234
+ // Merge overlapping / adjacent ranges, then delete right-to-left.
235
+ const sorted = [...edits].sort((a, b) => a.startLine - b.startLine);
236
+ const merged = [];
237
+ for (const e of sorted) {
238
+ const last = merged[merged.length - 1];
239
+ if (last && e.startLine <= last.end + 1) {
240
+ last.end = Math.max(last.end, e.endLine);
241
+ }
242
+ else {
243
+ merged.push({ start: e.startLine, end: e.endLine });
244
+ }
245
+ }
246
+ for (let i = merged.length - 1; i >= 0; i -= 1) {
247
+ const range = merged[i];
248
+ if (range === undefined)
249
+ continue;
250
+ const startIdx = range.start - 1;
251
+ const count = range.end - range.start + 1;
252
+ if (startIdx < 0 || startIdx >= lines.length)
253
+ continue;
254
+ lines.splice(startIdx, count);
255
+ }
256
+ return lines.join("\n");
257
+ }
258
+ //# sourceMappingURL=remove-dead-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove-dead-code.js","sourceRoot":"","sources":["../../src/tools/remove-dead-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,oGAAoG;AAEpG,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EACL,gBAAgB,EAChB,YAAY,GAGb,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EACL,cAAc,EACd,YAAY,EAGZ,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,MAAM,mBAAmB,GAAG;IAC1B,GAAG,YAAY;IACf,MAAM,EAAE,CAAC;SACN,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,2EAA2E,CAAC;IACxF,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,8EAA8E,CAAC;IAC3F,KAAK,EAAE,CAAC;SACL,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,oFAAoF,CAAC;CAClG,CAAC;AA4BF,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAA0B,EAC1B,IAAwB;IAExB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC;IAErC,MAAM,IAAI,GAAG,MAAM,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,kEAAkE;YAClE,8DAA8D;YAC9D,mFAAmF;YACnF,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtB,OAAO,SAAS,CACd,eAAe,EACf,wEAAwE,EACxE,8FAA8F,CAC/F,CAAC;YACJ,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CACnC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC7D,CAAC;YACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC5B,OAAO,aAAa,CAClB,0BAA0B,OAAO,CAAC,CAAC,CAAC,aAAa,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,sBAAsB,EACrF;oBACE,aAAa,EAAE,CAAC;oBAChB,cAAc,EAAE,CAAC;oBACjB,KAAK,EAAE,EAAE;oBACT,OAAO,EAAE,KAAK;iBACf,EACD,CAAC,8EAA8E,CAAC,EAChF,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CACjC,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YACnE,MAAM,aAAa,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YAE5C,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,IAAI,YAAY,CAAC;YAChD,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;YAEvB,MAAM,KAAK,GAAyB,EAAE,CAAC;YACvC,MAAM,YAAY,GAAa,EAAE,CAAC;YAClC,KAAK,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC;gBAC7C,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACpD,IAAI,MAAc,CAAC;gBACnB,IAAI,CAAC;oBACH,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAClC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,YAAY,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAM,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC5D,SAAS;gBACX,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACjC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBACrD,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBACjD,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG,KAAK;wBAAE,SAAS;oBACtD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACvD,KAAK,CAAC,IAAI,CAAC;wBACT,QAAQ;wBACR,SAAS,EAAE,KAAK;wBAChB,OAAO,EAAE,GAAG;wBACZ,OAAO,EAAE,OAAO;qBACjB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YACjE,MAAM,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC;YAEpC,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,MAAM,aAAa,GAAa,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;gBACrB,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgC,CAAC;gBAC5D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;oBACtB,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACjD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACf,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;gBACtC,CAAC;gBACD,KAAK,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,WAAW,EAAE,CAAC;oBAChD,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBACpD,IAAI,MAAc,CAAC;oBACnB,IAAI,CAAC;wBACH,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAClC,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,aAAa,CAAC,IAAI,CAAC,GAAG,QAAQ,mBAAoB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;wBAC3E,SAAS;oBACX,CAAC;oBACD,MAAM,SAAS,GAAG,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;oBACpD,IAAI,CAAC;wBACH,MAAM,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBAC3C,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,aAAa,CAAC,IAAI,CAAC,GAAG,QAAQ,oBAAqB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC9E,CAAC;gBACH,CAAC;gBACD,OAAO,GAAG,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC;YACvC,CAAC;YAED,MAAM,MAAM,GAAG,qBAAqB,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,aAAa,aAAa,cAAc,eAAe,CAAC;YACtJ,MAAM,KAAK,GAAa,CAAC,MAAM,CAAC,CAAC;YACjC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9D,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;gBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC;YACnE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC5B,KAAK,CAAC,IAAI,CAAC,kBAAkB,YAAY,CAAC,MAAM,IAAI,CAAC,CAAC;gBACtD,KAAK,MAAM,CAAC,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,mBAAmB,aAAa,CAAC,MAAM,IAAI,CAAC,CAAC;gBACxD,KAAK,MAAM,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACrE,CAAC;YAED,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,IAAI,MAAM,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,mEAAmE,CAAC,CAAC;YACjF,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;YAC3F,CAAC;YACD,IAAI,cAAc,KAAK,CAAC,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;YACrF,CAAC;YAED,OAAO,aAAa,CAClB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAChB;gBACE,aAAa;gBACb,cAAc;gBACd,KAAK;gBACL,OAAO;gBACP,GAAG,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,GAAG,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACvD,EACD,IAAI,EACJ,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CACjC,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,oBAAoB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAiB,EAAE,GAA0B;IACtF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;QACE,KAAK,EAAE,+BAA+B;QACtC,WAAW,EACT,0MAA0M;QAC5M,WAAW,EAAE,mBAAmB;QAChC,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,IAAI;YACrB,cAAc,EAAE,KAAK;YACrB,aAAa,EAAE,KAAK;SACrB;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,MAAM,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CACnE,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,KAAkB,EAClB,IAA2B;IAE3B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,GAAG,GAAI,CAAwC,CAAC,SAAS,CAAC,CAAC;QACjE,MAAM,GAAG,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACzB,CAAC;IACD,MAAM,GAAG,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;QACjD,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,WAAW,CAAC,IAA6B;IAChD,MAAM,GAAG,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACf,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,2EAA2E;IAC3E,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB,EAAE,OAAe;IACnD,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC;AAED,SAAS,SAAS,CAAC,IAAY,EAAE,KAAa;IAC5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAClD,IAAI,IAAI,GAAG,KAAK;QAAE,OAAO,KAAK,CAAC;IAC/B,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;GAIG;AACH,SAAS,cAAc,CAAC,MAAc,EAAE,KAAoC;IAC1E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,MAAM,CAAC;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACjC,kEAAkE;IAClE,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,MAAM,GAAqC,EAAE,CAAC;IACpD,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvC,IAAI,IAAI,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YACxC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;QAC1C,IAAI,QAAQ,GAAG,CAAC,IAAI,QAAQ,IAAI,KAAK,CAAC,MAAM;YAAE,SAAS;QACvD,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * `rename` — graph-coordinated symbol rename.
3
+ *
4
+ * Dry-run is the default: callers must explicitly set `dry_run: false` to
5
+ * apply edits. All file I/O is mediated by the analysis package's
6
+ * `createNodeFs()` abstraction so we do not touch disk from this module.
7
+ */
8
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
9
+ import { type ToolContext, type ToolResult } from "./shared.js";
10
+ interface RenameArgs {
11
+ readonly symbol_name: string;
12
+ readonly new_name: string;
13
+ readonly dry_run?: boolean | undefined;
14
+ readonly file?: string | undefined;
15
+ readonly repo?: string | undefined;
16
+ readonly repo_uri?: string | undefined;
17
+ }
18
+ export declare function runRename(ctx: ToolContext, args: RenameArgs): Promise<ToolResult>;
19
+ export declare function registerRenameTool(server: McpServer, ctx: ToolContext): void;
20
+ export {};
21
+ //# sourceMappingURL=rename.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename.d.ts","sourceRoot":"","sources":["../../src/tools/rename.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMzE,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,UAAU,EAGhB,MAAM,aAAa,CAAC;AAwBrB,UAAU,UAAU;IAClB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAgGvF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAiB5E"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * `rename` — graph-coordinated symbol rename.
3
+ *
4
+ * Dry-run is the default: callers must explicitly set `dry_run: false` to
5
+ * apply edits. All file I/O is mediated by the analysis package's
6
+ * `createNodeFs()` abstraction so we do not touch disk from this module.
7
+ */
8
+ import { z } from "zod";
9
+ import { callRunRename } from "../analysis-bridge.js";
10
+ import { toolErrorFromUnknown } from "../error-envelope.js";
11
+ import { withNextSteps } from "../next-step-hints.js";
12
+ import { stalenessFromMeta } from "../staleness.js";
13
+ import { fromToolResult, repoArgShape, toToolResult, withStore, } from "./shared.js";
14
+ const RenameInput = {
15
+ symbol_name: z
16
+ .string()
17
+ .min(1)
18
+ .describe("The symbol to rename. Combine with `file` if the name is ambiguous."),
19
+ new_name: z
20
+ .string()
21
+ .min(1)
22
+ .describe("The new identifier. Must be a valid identifier in the target language."),
23
+ dry_run: z
24
+ .boolean()
25
+ .optional()
26
+ .describe("Preview-only when true (DEFAULT). Set to false explicitly to write changes to disk."),
27
+ file: z
28
+ .string()
29
+ .optional()
30
+ .describe("File path suffix to narrow the rename to a specific definition."),
31
+ ...repoArgShape,
32
+ };
33
+ export async function runRename(ctx, args) {
34
+ const dryRun = args.dry_run ?? true;
35
+ const call = await withStore(ctx, args, async (store, resolved) => {
36
+ try {
37
+ const q = {
38
+ symbolName: args.symbol_name,
39
+ newName: args.new_name,
40
+ dryRun,
41
+ };
42
+ if (args.file)
43
+ q.scope = { filePath: args.file };
44
+ const result = await callRunRename(store.graph, q, resolved.repoPath);
45
+ if (result.ambiguous) {
46
+ return withNextSteps(`"${args.symbol_name}" is ambiguous — pass \`file\` to narrow the target.${result.hint ? `\n${result.hint}` : ""}`, {
47
+ status: "rejected",
48
+ ambiguous: true,
49
+ files_affected: 0,
50
+ total_edits: 0,
51
+ graph_edits: 0,
52
+ text_edits: 0,
53
+ changes: [],
54
+ }, ["call `context` first to pick a concrete definition"], stalenessFromMeta(resolved.meta));
55
+ }
56
+ const graphEdits = result.edits.filter((e) => e.source === "graph").length;
57
+ const textEdits = result.edits.length - graphEdits;
58
+ const filesAffected = new Set(result.edits.map((e) => e.filePath)).size;
59
+ const status = result.applied ? "applied" : "dry-run";
60
+ const header = `Rename ${args.symbol_name} → ${args.new_name} (${status})`;
61
+ const lines = [header];
62
+ lines.push(`Files affected: ${filesAffected} | edits: ${result.edits.length} | graph: ${graphEdits} | text: ${textEdits}`);
63
+ for (const edit of result.edits.slice(0, 50)) {
64
+ lines.push(` ${edit.source === "graph" ? "✓" : "?"} ${edit.filePath}:${edit.line}:${edit.column} "${edit.before}" → "${edit.after}" (conf ${edit.confidence.toFixed(2)})`);
65
+ }
66
+ if (result.edits.length > 50) {
67
+ lines.push(` … ${result.edits.length - 50} more`);
68
+ }
69
+ if (result.skipped.length > 0) {
70
+ lines.push(`Skipped files (${result.skipped.length}):`);
71
+ for (const s of result.skipped.slice(0, 20)) {
72
+ lines.push(` ⚠ ${s.filePath}: ${s.reason}`);
73
+ }
74
+ }
75
+ if (result.hint)
76
+ lines.push(`Hint: ${result.hint}`);
77
+ const next = [];
78
+ if (dryRun && result.edits.length > 0) {
79
+ next.push("if the preview looks right, re-call with dry_run=false to apply the edits");
80
+ }
81
+ if (textEdits > 0) {
82
+ next.push(`review the ${textEdits} text-based edit(s) before applying — they are best-effort`);
83
+ }
84
+ if (result.edits.length === 0) {
85
+ next.push("no edits planned — confirm the symbol exists via `context` and try again with `file`");
86
+ }
87
+ return withNextSteps(lines.join("\n"), {
88
+ status,
89
+ files_affected: filesAffected,
90
+ total_edits: result.edits.length,
91
+ graph_edits: graphEdits,
92
+ text_edits: textEdits,
93
+ changes: result.edits,
94
+ skipped: result.skipped,
95
+ }, next, stalenessFromMeta(resolved.meta));
96
+ }
97
+ catch (err) {
98
+ return toolErrorFromUnknown(err);
99
+ }
100
+ });
101
+ return toToolResult(call);
102
+ }
103
+ export function registerRenameTool(server, ctx) {
104
+ server.registerTool("rename", {
105
+ title: "Coordinated symbol rename",
106
+ description: "Produce a graph-coordinated rename plan. Graph-backed edits (tagged `graph`) are high-confidence; fall-back text-search edits (tagged `text`) should be reviewed before applying. DEFAULT is dry-run — the tool will not write to disk unless `dry_run: false` is passed explicitly.",
107
+ inputSchema: RenameInput,
108
+ annotations: {
109
+ readOnlyHint: false,
110
+ destructiveHint: true,
111
+ idempotentHint: false,
112
+ openWorldHint: false,
113
+ },
114
+ }, async (args) => fromToolResult(await runRename(ctx, args)));
115
+ }
116
+ //# sourceMappingURL=rename.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rename.js","sourceRoot":"","sources":["../../src/tools/rename.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * `risk_trends` — classify risk trajectory per community.
3
+ *
4
+ * Reads the snapshot history written by the risk-snapshot phase
5
+ * (`.codehub/history/risk_*.json`) and returns per-community trend +
6
+ * 30-day projected risk plus an overall aggregate.
7
+ *
8
+ * Pure read; idempotent; closed-world.
9
+ */
10
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
11
+ import { type ToolContext, type ToolResult } from "./shared.js";
12
+ interface RiskTrendsArgs {
13
+ readonly repo?: string | undefined;
14
+ readonly repo_uri?: string | undefined;
15
+ }
16
+ export declare function runRiskTrends(ctx: ToolContext, args: RiskTrendsArgs): Promise<ToolResult>;
17
+ export declare function registerRiskTrendsTool(server: McpServer, ctx: ToolContext): void;
18
+ export {};
19
+ //# sourceMappingURL=risk-trends.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk-trends.d.ts","sourceRoot":"","sources":["../../src/tools/risk-trends.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,UAAU,EAGhB,MAAM,aAAa,CAAC;AAMrB,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,CAmD/F;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAiBhF"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * `risk_trends` — classify risk trajectory per community.
3
+ *
4
+ * Reads the snapshot history written by the risk-snapshot phase
5
+ * (`.codehub/history/risk_*.json`) and returns per-community trend +
6
+ * 30-day projected risk plus an overall aggregate.
7
+ *
8
+ * Pure read; idempotent; closed-world.
9
+ */
10
+ import { computeRiskTrends, loadSnapshots } from "@opencodehub/analysis";
11
+ import { toolErrorFromUnknown } from "../error-envelope.js";
12
+ import { withNextSteps } from "../next-step-hints.js";
13
+ import { stalenessFromMeta } from "../staleness.js";
14
+ import { fromToolResult, repoArgShape, toToolResult, withStore, } from "./shared.js";
15
+ const RiskTrendsInput = {
16
+ ...repoArgShape,
17
+ };
18
+ export async function runRiskTrends(ctx, args) {
19
+ const call = await withStore(ctx, args, async (_store, resolved) => {
20
+ try {
21
+ const snapshots = await loadSnapshots(resolved.repoPath);
22
+ const trends = computeRiskTrends(snapshots);
23
+ const lines = [];
24
+ lines.push(`Risk trends for ${resolved.name}: overall=${trends.overallTrend} (${trends.snapshotCount} snapshots).`);
25
+ const ids = Object.keys(trends.communities).sort();
26
+ if (ids.length === 0) {
27
+ lines.push("(no community trends yet — run `codehub analyze` a few times to build history)");
28
+ }
29
+ else {
30
+ for (const id of ids.slice(0, 30)) {
31
+ const entry = trends.communities[id];
32
+ if (entry === undefined)
33
+ continue;
34
+ lines.push(`- ${id}: ${entry.trend} (current=${entry.currentRisk.toFixed(3)}, 30d=${entry.projectedRisk30d.toFixed(3)})`);
35
+ }
36
+ if (ids.length > 30)
37
+ lines.push(`… ${ids.length - 30} more communities`);
38
+ }
39
+ const next = trends.snapshotCount === 0
40
+ ? [
41
+ "run `codehub analyze` to persist the first snapshot",
42
+ "call `risk_trends` again after multiple analyze runs to see trend lines",
43
+ ]
44
+ : [
45
+ "call `detect_changes` to see whether the latest changes correlate with rising risk",
46
+ "call `verdict` to check PR-level implications of the current trajectory",
47
+ ];
48
+ return withNextSteps(lines.join("\n"), {
49
+ overall_trend: trends.overallTrend,
50
+ snapshot_count: trends.snapshotCount,
51
+ communities: trends.communities,
52
+ }, next, stalenessFromMeta(resolved.meta));
53
+ }
54
+ catch (err) {
55
+ return toolErrorFromUnknown(err);
56
+ }
57
+ });
58
+ return toToolResult(call);
59
+ }
60
+ export function registerRiskTrendsTool(server, ctx) {
61
+ server.registerTool("risk_trends", {
62
+ title: "Per-community risk trend + 30-day projection",
63
+ description: "Classify each community's recent risk arc over persisted snapshots. Returns { trend: accelerating_risk | degrading | improving | stable, projectedRisk30d, currentRisk } per community plus an overall trend. Snapshots are populated by `codehub analyze`; if the history is empty this tool returns overallTrend='stable' and an empty map.",
64
+ inputSchema: RiskTrendsInput,
65
+ annotations: {
66
+ readOnlyHint: true,
67
+ destructiveHint: false,
68
+ openWorldHint: false,
69
+ idempotentHint: true,
70
+ },
71
+ }, async (args) => fromToolResult(await runRiskTrends(ctx, args)));
72
+ }
73
+ //# sourceMappingURL=risk-trends.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk-trends.js","sourceRoot":"","sources":["../../src/tools/risk-trends.ts"],"names":[],"mappings":"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"}