kirograph 0.17.0 → 0.19.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 (329) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +103 -1822
  3. package/dist/architecture/layers/dart.js +112 -0
  4. package/dist/architecture/layers/dart.js.map +7 -0
  5. package/dist/architecture/layers/index.js +3 -1
  6. package/dist/architecture/layers/index.js.map +2 -2
  7. package/dist/bin/banner.js +74 -6
  8. package/dist/bin/banner.js.map +2 -2
  9. package/dist/bin/commands/attack-surface.js +157 -0
  10. package/dist/bin/commands/attack-surface.js.map +7 -0
  11. package/dist/bin/commands/benchmark.js +206 -0
  12. package/dist/bin/commands/benchmark.js.map +7 -0
  13. package/dist/bin/commands/budget.js +70 -0
  14. package/dist/bin/commands/budget.js.map +7 -0
  15. package/dist/bin/commands/communities.js +77 -0
  16. package/dist/bin/commands/communities.js.map +7 -0
  17. package/dist/bin/commands/dep-confusion.js +119 -0
  18. package/dist/bin/commands/dep-confusion.js.map +7 -0
  19. package/dist/bin/commands/export.js +304 -10
  20. package/dist/bin/commands/export.js.map +2 -2
  21. package/dist/bin/commands/flows.js +97 -0
  22. package/dist/bin/commands/flows.js.map +7 -0
  23. package/dist/bin/commands/help.js +382 -101
  24. package/dist/bin/commands/help.js.map +2 -2
  25. package/dist/bin/commands/install.js +90 -8
  26. package/dist/bin/commands/install.js.map +2 -2
  27. package/dist/bin/commands/licenses.js +201 -0
  28. package/dist/bin/commands/licenses.js.map +7 -0
  29. package/dist/bin/commands/reachability.js +160 -0
  30. package/dist/bin/commands/reachability.js.map +7 -0
  31. package/dist/bin/commands/read.js +100 -0
  32. package/dist/bin/commands/read.js.map +7 -0
  33. package/dist/bin/commands/refactor.js +116 -0
  34. package/dist/bin/commands/refactor.js.map +7 -0
  35. package/dist/bin/commands/remediation.js +133 -0
  36. package/dist/bin/commands/remediation.js.map +7 -0
  37. package/dist/bin/commands/sbom.js +76 -0
  38. package/dist/bin/commands/sbom.js.map +7 -0
  39. package/dist/bin/commands/security-ci-report.js +267 -0
  40. package/dist/bin/commands/security-ci-report.js.map +7 -0
  41. package/dist/bin/commands/security-export.js +1349 -0
  42. package/dist/bin/commands/security-export.js.map +7 -0
  43. package/dist/bin/commands/security-flows.js +126 -0
  44. package/dist/bin/commands/security-flows.js.map +7 -0
  45. package/dist/bin/commands/security-secrets.js +170 -0
  46. package/dist/bin/commands/security-secrets.js.map +7 -0
  47. package/dist/bin/commands/security.js +193 -0
  48. package/dist/bin/commands/security.js.map +7 -0
  49. package/dist/bin/commands/staleness.js +144 -0
  50. package/dist/bin/commands/staleness.js.map +7 -0
  51. package/dist/bin/commands/status.js +102 -2
  52. package/dist/bin/commands/status.js.map +2 -2
  53. package/dist/bin/commands/supply-chain.js +138 -0
  54. package/dist/bin/commands/supply-chain.js.map +7 -0
  55. package/dist/bin/commands/uninit.js +109 -60
  56. package/dist/bin/commands/uninit.js.map +2 -2
  57. package/dist/bin/commands/vex.js +76 -0
  58. package/dist/bin/commands/vex.js.map +7 -0
  59. package/dist/bin/commands/vuln-suppress.js +95 -0
  60. package/dist/bin/commands/vuln-suppress.js.map +7 -0
  61. package/dist/bin/commands/vulns.js +382 -0
  62. package/dist/bin/commands/vulns.js.map +7 -0
  63. package/dist/bin/installer/auto-detect.js +125 -0
  64. package/dist/bin/installer/auto-detect.js.map +7 -0
  65. package/dist/bin/installer/cli-agent.js +28 -5
  66. package/dist/bin/installer/cli-agent.js.map +2 -2
  67. package/dist/bin/installer/common.js +47 -0
  68. package/dist/bin/installer/common.js.map +2 -2
  69. package/dist/bin/installer/config-prompt.js +12 -1
  70. package/dist/bin/installer/config-prompt.js.map +2 -2
  71. package/dist/bin/installer/detect.js +309 -0
  72. package/dist/bin/installer/detect.js.map +7 -0
  73. package/dist/bin/installer/index.js +9 -1
  74. package/dist/bin/installer/index.js.map +2 -2
  75. package/dist/bin/installer/instructions.js +195 -3
  76. package/dist/bin/installer/instructions.js.map +2 -2
  77. package/dist/bin/installer/steering.js +407 -0
  78. package/dist/bin/installer/steering.js.map +2 -2
  79. package/dist/bin/installer/targets/aider.js +3 -3
  80. package/dist/bin/installer/targets/aider.js.map +2 -2
  81. package/dist/bin/installer/targets/amp.js +3 -3
  82. package/dist/bin/installer/targets/amp.js.map +2 -2
  83. package/dist/bin/installer/targets/antigravity.js +35 -6
  84. package/dist/bin/installer/targets/antigravity.js.map +2 -2
  85. package/dist/bin/installer/targets/augment.js +3 -3
  86. package/dist/bin/installer/targets/augment.js.map +2 -2
  87. package/dist/bin/installer/targets/claude.js +49 -5
  88. package/dist/bin/installer/targets/claude.js.map +2 -2
  89. package/dist/bin/installer/targets/cline.js +32 -6
  90. package/dist/bin/installer/targets/cline.js.map +2 -2
  91. package/dist/bin/installer/targets/codex.js +64 -12
  92. package/dist/bin/installer/targets/codex.js.map +2 -2
  93. package/dist/bin/installer/targets/continue.js +2 -2
  94. package/dist/bin/installer/targets/continue.js.map +2 -2
  95. package/dist/bin/installer/targets/copilot-cli.js +101 -0
  96. package/dist/bin/installer/targets/copilot-cli.js.map +7 -0
  97. package/dist/bin/installer/targets/copilot.js +31 -5
  98. package/dist/bin/installer/targets/copilot.js.map +2 -2
  99. package/dist/bin/installer/targets/cursor.js +4 -4
  100. package/dist/bin/installer/targets/cursor.js.map +2 -2
  101. package/dist/bin/installer/targets/devin.js +2 -2
  102. package/dist/bin/installer/targets/devin.js.map +2 -2
  103. package/dist/bin/installer/targets/gemini-cli.js +2 -2
  104. package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
  105. package/dist/bin/installer/targets/generic.js +2 -14
  106. package/dist/bin/installer/targets/generic.js.map +2 -2
  107. package/dist/bin/installer/targets/goose.js +3 -3
  108. package/dist/bin/installer/targets/goose.js.map +2 -2
  109. package/dist/bin/installer/targets/index.js +250 -0
  110. package/dist/bin/installer/targets/index.js.map +2 -2
  111. package/dist/bin/installer/targets/junie.js +2 -2
  112. package/dist/bin/installer/targets/junie.js.map +2 -2
  113. package/dist/bin/installer/targets/kilo.js +2 -2
  114. package/dist/bin/installer/targets/kilo.js.map +2 -2
  115. package/dist/bin/installer/targets/kiro.js +3 -3
  116. package/dist/bin/installer/targets/kiro.js.map +2 -2
  117. package/dist/bin/installer/targets/opencode.js +2 -2
  118. package/dist/bin/installer/targets/opencode.js.map +2 -2
  119. package/dist/bin/installer/targets/openhands.js +3 -3
  120. package/dist/bin/installer/targets/openhands.js.map +2 -2
  121. package/dist/bin/installer/targets/qoder.js +91 -0
  122. package/dist/bin/installer/targets/qoder.js.map +7 -0
  123. package/dist/bin/installer/targets/qwen.js +96 -0
  124. package/dist/bin/installer/targets/qwen.js.map +7 -0
  125. package/dist/bin/installer/targets/replit.js +3 -3
  126. package/dist/bin/installer/targets/replit.js.map +2 -2
  127. package/dist/bin/installer/targets/roo.js +2 -2
  128. package/dist/bin/installer/targets/roo.js.map +2 -2
  129. package/dist/bin/installer/targets/tabnine.js +3 -3
  130. package/dist/bin/installer/targets/tabnine.js.map +2 -2
  131. package/dist/bin/installer/targets/trae.js +5 -5
  132. package/dist/bin/installer/targets/trae.js.map +2 -2
  133. package/dist/bin/installer/targets/warp.js +2 -2
  134. package/dist/bin/installer/targets/warp.js.map +2 -2
  135. package/dist/bin/installer/targets/windsurf.js +35 -6
  136. package/dist/bin/installer/targets/windsurf.js.map +2 -2
  137. package/dist/bin/kirograph.js +72 -6
  138. package/dist/bin/kirograph.js.map +3 -3
  139. package/dist/compression/tracker.js +80 -0
  140. package/dist/compression/tracker.js.map +2 -2
  141. package/dist/config.js +90 -3
  142. package/dist/config.js.map +2 -2
  143. package/dist/core/pipeline.js +36 -2
  144. package/dist/core/pipeline.js.map +2 -2
  145. package/dist/db/database.js +56 -5
  146. package/dist/db/database.js.map +2 -2
  147. package/dist/db/memory-schema.sql +5 -1
  148. package/dist/db/schema.sql +3 -1
  149. package/dist/db/security-schema.sql +72 -0
  150. package/dist/extraction/extractor.js +81 -0
  151. package/dist/extraction/extractor.js.map +2 -2
  152. package/dist/extraction/grammars.js +32 -8
  153. package/dist/extraction/grammars.js.map +2 -2
  154. package/dist/extraction/languages.js +43 -1
  155. package/dist/extraction/languages.js.map +2 -2
  156. package/dist/extraction/notebook.js +300 -0
  157. package/dist/extraction/notebook.js.map +7 -0
  158. package/dist/extraction/wasm/tree-sitter-astro.wasm +0 -0
  159. package/dist/extraction/wasm/tree-sitter-gdscript.wasm +0 -0
  160. package/dist/extraction/wasm/tree-sitter-julia.wasm +0 -0
  161. package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
  162. package/dist/extraction/wasm/tree-sitter-perl.wasm +0 -0
  163. package/dist/extraction/wasm/tree-sitter-powershell.wasm +0 -0
  164. package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
  165. package/dist/extraction/wasm/tree-sitter-sql.wasm +0 -0
  166. package/dist/extraction/wasm/tree-sitter-verilog.wasm +0 -0
  167. package/dist/frameworks/flutter.js +130 -0
  168. package/dist/frameworks/flutter.js.map +7 -0
  169. package/dist/frameworks/index.js +7 -1
  170. package/dist/frameworks/index.js.map +3 -3
  171. package/dist/graph/communities.js +317 -0
  172. package/dist/graph/communities.js.map +7 -0
  173. package/dist/graph/flows.js +138 -0
  174. package/dist/graph/flows.js.map +7 -0
  175. package/dist/graph/refactor.js +155 -0
  176. package/dist/graph/refactor.js.map +7 -0
  177. package/dist/index.js +1 -1
  178. package/dist/index.js.map +2 -2
  179. package/dist/mcp/cache.js +172 -0
  180. package/dist/mcp/cache.js.map +7 -0
  181. package/dist/mcp/read-modes.js +295 -0
  182. package/dist/mcp/read-modes.js.map +7 -0
  183. package/dist/mcp/server.js +2 -1
  184. package/dist/mcp/server.js.map +2 -2
  185. package/dist/mcp/tool-names.js +21 -1
  186. package/dist/mcp/tool-names.js.map +2 -2
  187. package/dist/mcp/tools.js +1160 -1
  188. package/dist/mcp/tools.js.map +3 -3
  189. package/dist/memory/database.js +32 -2
  190. package/dist/memory/database.js.map +2 -2
  191. package/dist/memory/types.js.map +1 -1
  192. package/dist/resolution/bridges/android-rn.js +298 -0
  193. package/dist/resolution/bridges/android-rn.js.map +7 -0
  194. package/dist/resolution/bridges/expo-modules.js +155 -0
  195. package/dist/resolution/bridges/expo-modules.js.map +7 -0
  196. package/dist/resolution/bridges/flutter-channel.js +385 -0
  197. package/dist/resolution/bridges/flutter-channel.js.map +7 -0
  198. package/dist/resolution/bridges/index.js +80 -0
  199. package/dist/resolution/bridges/index.js.map +7 -0
  200. package/dist/resolution/bridges/native-events.js +188 -0
  201. package/dist/resolution/bridges/native-events.js.map +7 -0
  202. package/dist/resolution/bridges/native-views.js +244 -0
  203. package/dist/resolution/bridges/native-views.js.map +7 -0
  204. package/dist/resolution/bridges/react-native.js +161 -0
  205. package/dist/resolution/bridges/react-native.js.map +7 -0
  206. package/dist/resolution/bridges/swift-objc.js +227 -0
  207. package/dist/resolution/bridges/swift-objc.js.map +7 -0
  208. package/dist/resolution/bridges/turbomodules.js +216 -0
  209. package/dist/resolution/bridges/turbomodules.js.map +7 -0
  210. package/dist/resolution/index.js +61 -2
  211. package/dist/resolution/index.js.map +2 -2
  212. package/dist/security/attack-surface.js +164 -0
  213. package/dist/security/attack-surface.js.map +7 -0
  214. package/dist/security/context-warnings.js +123 -0
  215. package/dist/security/context-warnings.js.map +7 -0
  216. package/dist/security/context-warnings.test.js +300 -0
  217. package/dist/security/context-warnings.test.js.map +7 -0
  218. package/dist/security/data-flows.js +228 -0
  219. package/dist/security/data-flows.js.map +7 -0
  220. package/dist/security/dep-confusion.js +255 -0
  221. package/dist/security/dep-confusion.js.map +7 -0
  222. package/dist/security/errors.js +51 -0
  223. package/dist/security/errors.js.map +7 -0
  224. package/dist/security/export/fix-suggestions.js +58 -0
  225. package/dist/security/export/fix-suggestions.js.map +7 -0
  226. package/dist/security/export/fix-suggestions.test.js +74 -0
  227. package/dist/security/export/fix-suggestions.test.js.map +7 -0
  228. package/dist/security/export/sbom.js +230 -0
  229. package/dist/security/export/sbom.js.map +7 -0
  230. package/dist/security/export/sbom.test.js +288 -0
  231. package/dist/security/export/sbom.test.js.map +7 -0
  232. package/dist/security/export/serialization.js +142 -0
  233. package/dist/security/export/serialization.js.map +7 -0
  234. package/dist/security/export/serialization.test.js +310 -0
  235. package/dist/security/export/serialization.test.js.map +7 -0
  236. package/dist/security/export/vex.js +220 -0
  237. package/dist/security/export/vex.js.map +7 -0
  238. package/dist/security/export/vex.test.js +278 -0
  239. package/dist/security/export/vex.test.js.map +7 -0
  240. package/dist/security/index.js +67 -0
  241. package/dist/security/index.js.map +7 -0
  242. package/dist/security/integrator-transitives.test.js +359 -0
  243. package/dist/security/integrator-transitives.test.js.map +7 -0
  244. package/dist/security/integrator.js +491 -0
  245. package/dist/security/integrator.js.map +7 -0
  246. package/dist/security/integrator.test.js +237 -0
  247. package/dist/security/integrator.test.js.map +7 -0
  248. package/dist/security/license.js +70 -0
  249. package/dist/security/license.js.map +7 -0
  250. package/dist/security/manifest/adapter.js +243 -0
  251. package/dist/security/manifest/adapter.js.map +7 -0
  252. package/dist/security/manifest/adapter.test.js +272 -0
  253. package/dist/security/manifest/adapter.test.js.map +7 -0
  254. package/dist/security/manifest/parser.js +376 -0
  255. package/dist/security/manifest/parser.js.map +7 -0
  256. package/dist/security/manifest/parser.test.js +110 -0
  257. package/dist/security/manifest/parser.test.js.map +7 -0
  258. package/dist/security/manifest/plugins/cargo.js +233 -0
  259. package/dist/security/manifest/plugins/cargo.js.map +7 -0
  260. package/dist/security/manifest/plugins/cargo.test.js +304 -0
  261. package/dist/security/manifest/plugins/cargo.test.js.map +7 -0
  262. package/dist/security/manifest/plugins/composer.js +152 -0
  263. package/dist/security/manifest/plugins/composer.js.map +7 -0
  264. package/dist/security/manifest/plugins/go.js +146 -0
  265. package/dist/security/manifest/plugins/go.js.map +7 -0
  266. package/dist/security/manifest/plugins/go.test.js +341 -0
  267. package/dist/security/manifest/plugins/go.test.js.map +7 -0
  268. package/dist/security/manifest/plugins/gradle.js +159 -0
  269. package/dist/security/manifest/plugins/gradle.js.map +7 -0
  270. package/dist/security/manifest/plugins/hex.js +159 -0
  271. package/dist/security/manifest/plugins/hex.js.map +7 -0
  272. package/dist/security/manifest/plugins/maven.js +128 -0
  273. package/dist/security/manifest/plugins/maven.js.map +7 -0
  274. package/dist/security/manifest/plugins/maven.test.js +389 -0
  275. package/dist/security/manifest/plugins/maven.test.js.map +7 -0
  276. package/dist/security/manifest/plugins/npm.js +284 -0
  277. package/dist/security/manifest/plugins/npm.js.map +7 -0
  278. package/dist/security/manifest/plugins/npm.test.js +298 -0
  279. package/dist/security/manifest/plugins/npm.test.js.map +7 -0
  280. package/dist/security/manifest/plugins/nuget.js +186 -0
  281. package/dist/security/manifest/plugins/nuget.js.map +7 -0
  282. package/dist/security/manifest/plugins/pip.js +123 -0
  283. package/dist/security/manifest/plugins/pip.js.map +7 -0
  284. package/dist/security/manifest/plugins/pip.test.js +208 -0
  285. package/dist/security/manifest/plugins/pip.test.js.map +7 -0
  286. package/dist/security/manifest/plugins/pubspec.js +212 -0
  287. package/dist/security/manifest/plugins/pubspec.js.map +7 -0
  288. package/dist/security/manifest/plugins/pyproject.js +261 -0
  289. package/dist/security/manifest/plugins/pyproject.js.map +7 -0
  290. package/dist/security/manifest/plugins/rubygems.js +185 -0
  291. package/dist/security/manifest/plugins/rubygems.js.map +7 -0
  292. package/dist/security/manifest/plugins/swift.js +200 -0
  293. package/dist/security/manifest/plugins/swift.js.map +7 -0
  294. package/dist/security/owasp.js +104 -0
  295. package/dist/security/owasp.js.map +7 -0
  296. package/dist/security/pipeline.js +125 -0
  297. package/dist/security/pipeline.js.map +7 -0
  298. package/dist/security/reachability.js +276 -0
  299. package/dist/security/reachability.js.map +7 -0
  300. package/dist/security/reachability.test.js +394 -0
  301. package/dist/security/reachability.test.js.map +7 -0
  302. package/dist/security/remediation.js +126 -0
  303. package/dist/security/remediation.js.map +7 -0
  304. package/dist/security/secrets.js +176 -0
  305. package/dist/security/secrets.js.map +7 -0
  306. package/dist/security/staleness.js +231 -0
  307. package/dist/security/staleness.js.map +7 -0
  308. package/dist/security/supply-chain.js +301 -0
  309. package/dist/security/supply-chain.js.map +7 -0
  310. package/dist/security/suppressions.js +106 -0
  311. package/dist/security/suppressions.js.map +7 -0
  312. package/dist/security/types.js +17 -0
  313. package/dist/security/types.js.map +7 -0
  314. package/dist/security/vuln/client.js +355 -0
  315. package/dist/security/vuln/client.js.map +7 -0
  316. package/dist/security/vuln/client.test.js +288 -0
  317. package/dist/security/vuln/client.test.js.map +7 -0
  318. package/dist/security/vuln/epss-client.js +95 -0
  319. package/dist/security/vuln/epss-client.js.map +7 -0
  320. package/dist/security/vuln/index.js +29 -0
  321. package/dist/security/vuln/index.js.map +7 -0
  322. package/dist/security/vuln/osv-adapter.js +321 -0
  323. package/dist/security/vuln/osv-adapter.js.map +7 -0
  324. package/dist/security/vuln/osv-adapter.test.js +391 -0
  325. package/dist/security/vuln/osv-adapter.test.js.map +7 -0
  326. package/dist/security/vuln/types.js +17 -0
  327. package/dist/security/vuln/types.js.map +7 -0
  328. package/dist/types.js.map +2 -2
  329. package/package.json +2 -1
@@ -0,0 +1,295 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var read_modes_exports = {};
30
+ __export(read_modes_exports, {
31
+ executeReadMode: () => executeReadMode
32
+ });
33
+ module.exports = __toCommonJS(read_modes_exports);
34
+ var fs = __toESM(require("fs"));
35
+ var path = __toESM(require("path"));
36
+ var import_cache = require("./cache");
37
+ function executeReadMode(opts) {
38
+ const { mode, filePath, start, end, cg } = opts;
39
+ switch (mode) {
40
+ case "full":
41
+ return readFull(filePath);
42
+ case "map":
43
+ return readMap(filePath, cg);
44
+ case "signatures":
45
+ return readSignatures(filePath, cg);
46
+ case "diff":
47
+ return readDiff(filePath);
48
+ case "lines":
49
+ return readLines(filePath, start, end);
50
+ case "imports":
51
+ return readImports(filePath, cg);
52
+ case "exports":
53
+ return readExports(filePath, cg);
54
+ default:
55
+ return readFull(filePath);
56
+ }
57
+ }
58
+ function readFull(filePath) {
59
+ const content = fs.readFileSync(filePath, "utf8");
60
+ return {
61
+ content,
62
+ mode: "full",
63
+ tokenEstimate: Math.round(content.length / 4)
64
+ };
65
+ }
66
+ function readMap(filePath, cg) {
67
+ if (cg) {
68
+ const projectRoot = cg.getProjectRoot();
69
+ const relPath = path.isAbsolute(filePath) ? path.relative(projectRoot, filePath) : filePath;
70
+ try {
71
+ const db = cg.getDatabase();
72
+ const nodes = db.getNodesByFile(relPath);
73
+ if (nodes.length > 0) {
74
+ const lines = [`# ${relPath} \u2014 Structure Map (${nodes.length} symbols)
75
+ `];
76
+ const sorted = [...nodes].sort((a, b) => a.startLine - b.startLine);
77
+ for (const n of sorted) {
78
+ const exported = n.isExported ? " [exported]" : "";
79
+ lines.push(` L${n.startLine}-${n.endLine} ${n.kind} ${n.name}${exported}`);
80
+ }
81
+ const content2 = lines.join("\n");
82
+ return { content: content2, mode: "map", tokenEstimate: Math.round(content2.length / 4) };
83
+ }
84
+ } catch {
85
+ }
86
+ }
87
+ const raw = fs.readFileSync(filePath, "utf8");
88
+ const fileLines = raw.split("\n");
89
+ const structureLines = [`# ${path.basename(filePath)} \u2014 Structure Map
90
+ `];
91
+ const patterns = [
92
+ /^\s*(export\s+)?(async\s+)?function\s+(\w+)/,
93
+ /^\s*(export\s+)?(default\s+)?class\s+(\w+)/,
94
+ /^\s*(export\s+)?interface\s+(\w+)/,
95
+ /^\s*(export\s+)?type\s+(\w+)/,
96
+ /^\s*(export\s+)?enum\s+(\w+)/,
97
+ /^\s*(export\s+)?const\s+(\w+)\s*=/
98
+ ];
99
+ for (let i = 0; i < fileLines.length; i++) {
100
+ const line = fileLines[i];
101
+ for (const pat of patterns) {
102
+ if (pat.test(line)) {
103
+ structureLines.push(` L${i + 1} ${line.trim()}`);
104
+ break;
105
+ }
106
+ }
107
+ }
108
+ const content = structureLines.length > 1 ? structureLines.join("\n") : `# ${path.basename(filePath)} \u2014 No structure detected`;
109
+ return { content, mode: "map", tokenEstimate: Math.round(content.length / 4) };
110
+ }
111
+ function readSignatures(filePath, cg) {
112
+ if (cg) {
113
+ const projectRoot = cg.getProjectRoot();
114
+ const relPath = path.isAbsolute(filePath) ? path.relative(projectRoot, filePath) : filePath;
115
+ try {
116
+ const db = cg.getDatabase();
117
+ const nodes = db.getNodesByFile(relPath);
118
+ if (nodes.length > 0) {
119
+ const lines = [`# ${relPath} \u2014 Signatures
120
+ `];
121
+ const sorted = [...nodes].sort((a, b) => a.startLine - b.startLine);
122
+ for (const n of sorted) {
123
+ if (n.signature) {
124
+ lines.push(`${n.signature}`);
125
+ } else {
126
+ lines.push(`${n.kind} ${n.name} (L${n.startLine})`);
127
+ }
128
+ }
129
+ const content2 = lines.join("\n");
130
+ return { content: content2, mode: "signatures", tokenEstimate: Math.round(content2.length / 4) };
131
+ }
132
+ } catch {
133
+ }
134
+ }
135
+ const raw = fs.readFileSync(filePath, "utf8");
136
+ const fileLines = raw.split("\n");
137
+ const sigs = [`# ${path.basename(filePath)} \u2014 Signatures
138
+ `];
139
+ const patterns = [
140
+ /^\s*(export\s+)?(async\s+)?function\s+/,
141
+ /^\s*(export\s+)?(default\s+)?class\s+/,
142
+ /^\s*(export\s+)?interface\s+/,
143
+ /^\s*(export\s+)?type\s+\w+/
144
+ ];
145
+ for (let i = 0; i < fileLines.length; i++) {
146
+ const line = fileLines[i];
147
+ for (const pat of patterns) {
148
+ if (pat.test(line)) {
149
+ const sig = line.replace(/\{.*$/, "").trim();
150
+ sigs.push(sig);
151
+ break;
152
+ }
153
+ }
154
+ }
155
+ const content = sigs.length > 1 ? sigs.join("\n") : `# ${path.basename(filePath)} \u2014 No signatures found`;
156
+ return { content, mode: "signatures", tokenEstimate: Math.round(content.length / 4) };
157
+ }
158
+ function readDiff(filePath) {
159
+ const cache = (0, import_cache.getFileReadCache)();
160
+ const previousContent = cache.getPreviousContent(filePath);
161
+ if (!previousContent) {
162
+ const content2 = fs.readFileSync(filePath, "utf8");
163
+ return {
164
+ content: `[no previous version cached \u2014 showing full content]
165
+
166
+ ${content2}`,
167
+ mode: "diff",
168
+ tokenEstimate: Math.round(content2.length / 4)
169
+ };
170
+ }
171
+ const currentContent = fs.readFileSync(filePath, "utf8");
172
+ if (currentContent === previousContent) {
173
+ const msg = "[no changes since last read]";
174
+ return { content: msg, mode: "diff", tokenEstimate: 5 };
175
+ }
176
+ const oldLines = previousContent.split("\n");
177
+ const newLines = currentContent.split("\n");
178
+ const diffLines = [`# Diff: ${path.basename(filePath)}
179
+ `];
180
+ let i = 0, j = 0;
181
+ while (i < oldLines.length || j < newLines.length) {
182
+ if (i >= oldLines.length) {
183
+ diffLines.push(`+ ${newLines[j]}`);
184
+ j++;
185
+ } else if (j >= newLines.length) {
186
+ diffLines.push(`- ${oldLines[i]}`);
187
+ i++;
188
+ } else if (oldLines[i] === newLines[j]) {
189
+ i++;
190
+ j++;
191
+ } else {
192
+ let foundInNew = -1;
193
+ for (let k = j + 1; k < Math.min(j + 5, newLines.length); k++) {
194
+ if (newLines[k] === oldLines[i]) {
195
+ foundInNew = k;
196
+ break;
197
+ }
198
+ }
199
+ if (foundInNew >= 0) {
200
+ while (j < foundInNew) {
201
+ diffLines.push(`+ ${newLines[j]}`);
202
+ j++;
203
+ }
204
+ } else {
205
+ diffLines.push(`- ${oldLines[i]}`);
206
+ i++;
207
+ diffLines.push(`+ ${newLines[j]}`);
208
+ j++;
209
+ }
210
+ }
211
+ }
212
+ const content = diffLines.join("\n");
213
+ return { content, mode: "diff", tokenEstimate: Math.round(content.length / 4) };
214
+ }
215
+ function readLines(filePath, start, end) {
216
+ const raw = fs.readFileSync(filePath, "utf8");
217
+ const allLines = raw.split("\n");
218
+ const startLine = Math.max(1, start ?? 1);
219
+ const endLine = Math.min(allLines.length, end ?? allLines.length);
220
+ const selected = allLines.slice(startLine - 1, endLine);
221
+ const numbered = selected.map((line, idx) => `${startLine + idx}: ${line}`);
222
+ const content = `# ${path.basename(filePath)} \u2014 Lines ${startLine}-${endLine} of ${allLines.length}
223
+
224
+ ${numbered.join("\n")}`;
225
+ return { content, mode: "lines", tokenEstimate: Math.round(content.length / 4) };
226
+ }
227
+ function readImports(filePath, cg) {
228
+ if (cg) {
229
+ const projectRoot = cg.getProjectRoot();
230
+ const relPath = path.isAbsolute(filePath) ? path.relative(projectRoot, filePath) : filePath;
231
+ try {
232
+ const db = cg.getDatabase();
233
+ const nodes = db.getNodesByFile(relPath);
234
+ const importNodes = nodes.filter((n) => n.kind === "import");
235
+ if (importNodes.length > 0) {
236
+ const lines = [`# ${relPath} \u2014 Imports (${importNodes.length})
237
+ `];
238
+ for (const n of importNodes) {
239
+ lines.push(` ${n.name} (L${n.startLine})`);
240
+ }
241
+ const content2 = lines.join("\n");
242
+ return { content: content2, mode: "imports", tokenEstimate: Math.round(content2.length / 4) };
243
+ }
244
+ } catch {
245
+ }
246
+ }
247
+ const raw = fs.readFileSync(filePath, "utf8");
248
+ const fileLines = raw.split("\n");
249
+ const importLines = [`# ${path.basename(filePath)} \u2014 Imports
250
+ `];
251
+ for (const line of fileLines) {
252
+ if (/^\s*(import|from|require\()/.test(line)) {
253
+ importLines.push(` ${line.trim()}`);
254
+ }
255
+ }
256
+ const content = importLines.length > 1 ? importLines.join("\n") : `# ${path.basename(filePath)} \u2014 No imports found`;
257
+ return { content, mode: "imports", tokenEstimate: Math.round(content.length / 4) };
258
+ }
259
+ function readExports(filePath, cg) {
260
+ if (cg) {
261
+ const projectRoot = cg.getProjectRoot();
262
+ const relPath = path.isAbsolute(filePath) ? path.relative(projectRoot, filePath) : filePath;
263
+ try {
264
+ const db = cg.getDatabase();
265
+ const nodes = db.getNodesByFile(relPath);
266
+ const exportedNodes = nodes.filter((n) => n.isExported);
267
+ if (exportedNodes.length > 0) {
268
+ const lines = [`# ${relPath} \u2014 Exports (${exportedNodes.length})
269
+ `];
270
+ for (const n of exportedNodes) {
271
+ lines.push(` ${n.kind} ${n.name} (L${n.startLine})`);
272
+ }
273
+ const content2 = lines.join("\n");
274
+ return { content: content2, mode: "exports", tokenEstimate: Math.round(content2.length / 4) };
275
+ }
276
+ } catch {
277
+ }
278
+ }
279
+ const raw = fs.readFileSync(filePath, "utf8");
280
+ const fileLines = raw.split("\n");
281
+ const exportLines = [`# ${path.basename(filePath)} \u2014 Exports
282
+ `];
283
+ for (const line of fileLines) {
284
+ if (/^\s*export\s+/.test(line)) {
285
+ exportLines.push(` ${line.trim()}`);
286
+ }
287
+ }
288
+ const content = exportLines.length > 1 ? exportLines.join("\n") : `# ${path.basename(filePath)} \u2014 No exports found`;
289
+ return { content, mode: "exports", tokenEstimate: Math.round(content.length / 4) };
290
+ }
291
+ // Annotate the CommonJS export names for ESM import in node:
292
+ 0 && (module.exports = {
293
+ executeReadMode
294
+ });
295
+ //# sourceMappingURL=read-modes.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/mcp/read-modes.ts"],
4
+ "sourcesContent": ["/**\n * KiroGraph Read Modes\n *\n * Implements multiple read modes for the kirograph_read tool:\n * - full: entire file content (default)\n * - map: structure overview (symbols with line numbers)\n * - signatures: function/class signatures only\n * - diff: changes since last read\n * - lines: specific line range\n * - imports: import statements\n * - exports: exported symbols\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport type KiroGraph from '../index';\nimport { getFileReadCache } from './cache';\n\nexport type ReadMode = 'full' | 'map' | 'signatures' | 'diff' | 'lines' | 'imports' | 'exports';\n\nexport interface ReadModeOptions {\n mode: ReadMode;\n filePath: string;\n start?: number;\n end?: number;\n cg?: KiroGraph | null;\n}\n\nexport interface ReadModeResult {\n content: string;\n mode: ReadMode;\n tokenEstimate: number;\n}\n\n/**\n * Execute a read mode against a file.\n */\nexport function executeReadMode(opts: ReadModeOptions): ReadModeResult {\n const { mode, filePath, start, end, cg } = opts;\n\n switch (mode) {\n case 'full':\n return readFull(filePath);\n case 'map':\n return readMap(filePath, cg);\n case 'signatures':\n return readSignatures(filePath, cg);\n case 'diff':\n return readDiff(filePath);\n case 'lines':\n return readLines(filePath, start, end);\n case 'imports':\n return readImports(filePath, cg);\n case 'exports':\n return readExports(filePath, cg);\n default:\n return readFull(filePath);\n }\n}\n\nfunction readFull(filePath: string): ReadModeResult {\n const content = fs.readFileSync(filePath, 'utf8');\n return {\n content,\n mode: 'full',\n tokenEstimate: Math.round(content.length / 4),\n };\n}\n\nfunction readMap(filePath: string, cg?: KiroGraph | null): ReadModeResult {\n if (cg) {\n // Use graph data \u2014 no file read needed\n const projectRoot = cg.getProjectRoot();\n const relPath = path.isAbsolute(filePath)\n ? path.relative(projectRoot, filePath)\n : filePath;\n\n try {\n const db = cg.getDatabase();\n const nodes = db.getNodesByFile(relPath);\n if (nodes.length > 0) {\n const lines = [`# ${relPath} \u2014 Structure Map (${nodes.length} symbols)\\n`];\n // Sort by line number\n const sorted = [...nodes].sort((a, b) => a.startLine - b.startLine);\n for (const n of sorted) {\n const exported = n.isExported ? ' [exported]' : '';\n lines.push(` L${n.startLine}-${n.endLine} ${n.kind} ${n.name}${exported}`);\n }\n const content = lines.join('\\n');\n return { content, mode: 'map', tokenEstimate: Math.round(content.length / 4) };\n }\n } catch {\n // Fall through to file-based approach\n }\n }\n\n // Fallback: parse file for structure indicators\n const raw = fs.readFileSync(filePath, 'utf8');\n const fileLines = raw.split('\\n');\n const structureLines: string[] = [`# ${path.basename(filePath)} \u2014 Structure Map\\n`];\n\n const patterns = [\n /^\\s*(export\\s+)?(async\\s+)?function\\s+(\\w+)/,\n /^\\s*(export\\s+)?(default\\s+)?class\\s+(\\w+)/,\n /^\\s*(export\\s+)?interface\\s+(\\w+)/,\n /^\\s*(export\\s+)?type\\s+(\\w+)/,\n /^\\s*(export\\s+)?enum\\s+(\\w+)/,\n /^\\s*(export\\s+)?const\\s+(\\w+)\\s*=/,\n ];\n\n for (let i = 0; i < fileLines.length; i++) {\n const line = fileLines[i]!;\n for (const pat of patterns) {\n if (pat.test(line)) {\n structureLines.push(` L${i + 1} ${line.trim()}`);\n break;\n }\n }\n }\n\n const content = structureLines.length > 1\n ? structureLines.join('\\n')\n : `# ${path.basename(filePath)} \u2014 No structure detected`;\n return { content, mode: 'map', tokenEstimate: Math.round(content.length / 4) };\n}\n\nfunction readSignatures(filePath: string, cg?: KiroGraph | null): ReadModeResult {\n if (cg) {\n const projectRoot = cg.getProjectRoot();\n const relPath = path.isAbsolute(filePath)\n ? path.relative(projectRoot, filePath)\n : filePath;\n\n try {\n const db = cg.getDatabase();\n const nodes = db.getNodesByFile(relPath);\n if (nodes.length > 0) {\n const lines = [`# ${relPath} \u2014 Signatures\\n`];\n const sorted = [...nodes].sort((a, b) => a.startLine - b.startLine);\n for (const n of sorted) {\n if (n.signature) {\n lines.push(`${n.signature}`);\n } else {\n lines.push(`${n.kind} ${n.name} (L${n.startLine})`);\n }\n }\n const content = lines.join('\\n');\n return { content, mode: 'signatures', tokenEstimate: Math.round(content.length / 4) };\n }\n } catch {\n // Fall through\n }\n }\n\n // Fallback: extract first line of each function/class\n const raw = fs.readFileSync(filePath, 'utf8');\n const fileLines = raw.split('\\n');\n const sigs: string[] = [`# ${path.basename(filePath)} \u2014 Signatures\\n`];\n\n const patterns = [\n /^\\s*(export\\s+)?(async\\s+)?function\\s+/,\n /^\\s*(export\\s+)?(default\\s+)?class\\s+/,\n /^\\s*(export\\s+)?interface\\s+/,\n /^\\s*(export\\s+)?type\\s+\\w+/,\n ];\n\n for (let i = 0; i < fileLines.length; i++) {\n const line = fileLines[i]!;\n for (const pat of patterns) {\n if (pat.test(line)) {\n // Take the line up to the opening brace or end\n const sig = line.replace(/\\{.*$/, '').trim();\n sigs.push(sig);\n break;\n }\n }\n }\n\n const content = sigs.length > 1\n ? sigs.join('\\n')\n : `# ${path.basename(filePath)} \u2014 No signatures found`;\n return { content, mode: 'signatures', tokenEstimate: Math.round(content.length / 4) };\n}\n\nfunction readDiff(filePath: string): ReadModeResult {\n const cache = getFileReadCache();\n const previousContent = cache.getPreviousContent(filePath);\n\n if (!previousContent) {\n // No previous version \u2014 return full content\n const content = fs.readFileSync(filePath, 'utf8');\n return {\n content: `[no previous version cached \u2014 showing full content]\\n\\n${content}`,\n mode: 'diff',\n tokenEstimate: Math.round(content.length / 4),\n };\n }\n\n const currentContent = fs.readFileSync(filePath, 'utf8');\n if (currentContent === previousContent) {\n const msg = '[no changes since last read]';\n return { content: msg, mode: 'diff', tokenEstimate: 5 };\n }\n\n // Simple line-based diff\n const oldLines = previousContent.split('\\n');\n const newLines = currentContent.split('\\n');\n const diffLines: string[] = [`# Diff: ${path.basename(filePath)}\\n`];\n\n let i = 0, j = 0;\n while (i < oldLines.length || j < newLines.length) {\n if (i >= oldLines.length) {\n diffLines.push(`+ ${newLines[j]}`);\n j++;\n } else if (j >= newLines.length) {\n diffLines.push(`- ${oldLines[i]}`);\n i++;\n } else if (oldLines[i] === newLines[j]) {\n i++;\n j++;\n } else {\n // Simple heuristic: look ahead for matching lines\n let foundInNew = -1;\n for (let k = j + 1; k < Math.min(j + 5, newLines.length); k++) {\n if (newLines[k] === oldLines[i]) { foundInNew = k; break; }\n }\n if (foundInNew >= 0) {\n // Lines were added\n while (j < foundInNew) {\n diffLines.push(`+ ${newLines[j]}`);\n j++;\n }\n } else {\n diffLines.push(`- ${oldLines[i]}`);\n i++;\n diffLines.push(`+ ${newLines[j]}`);\n j++;\n }\n }\n }\n\n const content = diffLines.join('\\n');\n return { content, mode: 'diff', tokenEstimate: Math.round(content.length / 4) };\n}\n\nfunction readLines(filePath: string, start?: number, end?: number): ReadModeResult {\n const raw = fs.readFileSync(filePath, 'utf8');\n const allLines = raw.split('\\n');\n const startLine = Math.max(1, start ?? 1);\n const endLine = Math.min(allLines.length, end ?? allLines.length);\n\n const selected = allLines.slice(startLine - 1, endLine);\n const numbered = selected.map((line, idx) => `${startLine + idx}: ${line}`);\n const content = `# ${path.basename(filePath)} \u2014 Lines ${startLine}-${endLine} of ${allLines.length}\\n\\n${numbered.join('\\n')}`;\n return { content, mode: 'lines', tokenEstimate: Math.round(content.length / 4) };\n}\n\nfunction readImports(filePath: string, cg?: KiroGraph | null): ReadModeResult {\n if (cg) {\n const projectRoot = cg.getProjectRoot();\n const relPath = path.isAbsolute(filePath)\n ? path.relative(projectRoot, filePath)\n : filePath;\n\n try {\n const db = cg.getDatabase();\n const nodes = db.getNodesByFile(relPath);\n const importNodes = nodes.filter(n => n.kind === 'import');\n if (importNodes.length > 0) {\n const lines = [`# ${relPath} \u2014 Imports (${importNodes.length})\\n`];\n for (const n of importNodes) {\n lines.push(` ${n.name} (L${n.startLine})`);\n }\n const content = lines.join('\\n');\n return { content, mode: 'imports', tokenEstimate: Math.round(content.length / 4) };\n }\n } catch {\n // Fall through\n }\n }\n\n // Fallback: regex-based import extraction\n const raw = fs.readFileSync(filePath, 'utf8');\n const fileLines = raw.split('\\n');\n const importLines: string[] = [`# ${path.basename(filePath)} \u2014 Imports\\n`];\n\n for (const line of fileLines) {\n if (/^\\s*(import|from|require\\()/.test(line)) {\n importLines.push(` ${line.trim()}`);\n }\n }\n\n const content = importLines.length > 1\n ? importLines.join('\\n')\n : `# ${path.basename(filePath)} \u2014 No imports found`;\n return { content, mode: 'imports', tokenEstimate: Math.round(content.length / 4) };\n}\n\nfunction readExports(filePath: string, cg?: KiroGraph | null): ReadModeResult {\n if (cg) {\n const projectRoot = cg.getProjectRoot();\n const relPath = path.isAbsolute(filePath)\n ? path.relative(projectRoot, filePath)\n : filePath;\n\n try {\n const db = cg.getDatabase();\n const nodes = db.getNodesByFile(relPath);\n const exportedNodes = nodes.filter(n => n.isExported);\n if (exportedNodes.length > 0) {\n const lines = [`# ${relPath} \u2014 Exports (${exportedNodes.length})\\n`];\n for (const n of exportedNodes) {\n lines.push(` ${n.kind} ${n.name} (L${n.startLine})`);\n }\n const content = lines.join('\\n');\n return { content, mode: 'exports', tokenEstimate: Math.round(content.length / 4) };\n }\n } catch {\n // Fall through\n }\n }\n\n // Fallback: regex-based export extraction\n const raw = fs.readFileSync(filePath, 'utf8');\n const fileLines = raw.split('\\n');\n const exportLines: string[] = [`# ${path.basename(filePath)} \u2014 Exports\\n`];\n\n for (const line of fileLines) {\n if (/^\\s*export\\s+/.test(line)) {\n exportLines.push(` ${line.trim()}`);\n }\n }\n\n const content = exportLines.length > 1\n ? exportLines.join('\\n')\n : `# ${path.basename(filePath)} \u2014 No exports found`;\n return { content, mode: 'exports', tokenEstimate: Math.round(content.length / 4) };\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA,SAAoB;AACpB,WAAsB;AAEtB,mBAAiC;AAqB1B,SAAS,gBAAgB,MAAuC;AACrE,QAAM,EAAE,MAAM,UAAU,OAAO,KAAK,GAAG,IAAI;AAE3C,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,SAAS,QAAQ;AAAA,IAC1B,KAAK;AACH,aAAO,QAAQ,UAAU,EAAE;AAAA,IAC7B,KAAK;AACH,aAAO,eAAe,UAAU,EAAE;AAAA,IACpC,KAAK;AACH,aAAO,SAAS,QAAQ;AAAA,IAC1B,KAAK;AACH,aAAO,UAAU,UAAU,OAAO,GAAG;AAAA,IACvC,KAAK;AACH,aAAO,YAAY,UAAU,EAAE;AAAA,IACjC,KAAK;AACH,aAAO,YAAY,UAAU,EAAE;AAAA,IACjC;AACE,aAAO,SAAS,QAAQ;AAAA,EAC5B;AACF;AAEA,SAAS,SAAS,UAAkC;AAClD,QAAM,UAAU,GAAG,aAAa,UAAU,MAAM;AAChD,SAAO;AAAA,IACL;AAAA,IACA,MAAM;AAAA,IACN,eAAe,KAAK,MAAM,QAAQ,SAAS,CAAC;AAAA,EAC9C;AACF;AAEA,SAAS,QAAQ,UAAkB,IAAuC;AACxE,MAAI,IAAI;AAEN,UAAM,cAAc,GAAG,eAAe;AACtC,UAAM,UAAU,KAAK,WAAW,QAAQ,IACpC,KAAK,SAAS,aAAa,QAAQ,IACnC;AAEJ,QAAI;AACF,YAAM,KAAK,GAAG,YAAY;AAC1B,YAAM,QAAQ,GAAG,eAAe,OAAO;AACvC,UAAI,MAAM,SAAS,GAAG;AACpB,cAAM,QAAQ,CAAC,KAAK,OAAO,0BAAqB,MAAM,MAAM;AAAA,CAAa;AAEzE,cAAM,SAAS,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS;AAClE,mBAAW,KAAK,QAAQ;AACtB,gBAAM,WAAW,EAAE,aAAa,gBAAgB;AAChD,gBAAM,KAAK,MAAM,EAAE,SAAS,IAAI,EAAE,OAAO,KAAK,EAAE,IAAI,IAAI,EAAE,IAAI,GAAG,QAAQ,EAAE;AAAA,QAC7E;AACA,cAAMA,WAAU,MAAM,KAAK,IAAI;AAC/B,eAAO,EAAE,SAAAA,UAAS,MAAM,OAAO,eAAe,KAAK,MAAMA,SAAQ,SAAS,CAAC,EAAE;AAAA,MAC/E;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,QAAM,MAAM,GAAG,aAAa,UAAU,MAAM;AAC5C,QAAM,YAAY,IAAI,MAAM,IAAI;AAChC,QAAM,iBAA2B,CAAC,KAAK,KAAK,SAAS,QAAQ,CAAC;AAAA,CAAoB;AAElF,QAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAM,OAAO,UAAU,CAAC;AACxB,eAAW,OAAO,UAAU;AAC1B,UAAI,IAAI,KAAK,IAAI,GAAG;AAClB,uBAAe,KAAK,MAAM,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,EAAE;AACjD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,eAAe,SAAS,IACpC,eAAe,KAAK,IAAI,IACxB,KAAK,KAAK,SAAS,QAAQ,CAAC;AAChC,SAAO,EAAE,SAAS,MAAM,OAAO,eAAe,KAAK,MAAM,QAAQ,SAAS,CAAC,EAAE;AAC/E;AAEA,SAAS,eAAe,UAAkB,IAAuC;AAC/E,MAAI,IAAI;AACN,UAAM,cAAc,GAAG,eAAe;AACtC,UAAM,UAAU,KAAK,WAAW,QAAQ,IACpC,KAAK,SAAS,aAAa,QAAQ,IACnC;AAEJ,QAAI;AACF,YAAM,KAAK,GAAG,YAAY;AAC1B,YAAM,QAAQ,GAAG,eAAe,OAAO;AACvC,UAAI,MAAM,SAAS,GAAG;AACpB,cAAM,QAAQ,CAAC,KAAK,OAAO;AAAA,CAAiB;AAC5C,cAAM,SAAS,CAAC,GAAG,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,YAAY,EAAE,SAAS;AAClE,mBAAW,KAAK,QAAQ;AACtB,cAAI,EAAE,WAAW;AACf,kBAAM,KAAK,GAAG,EAAE,SAAS,EAAE;AAAA,UAC7B,OAAO;AACL,kBAAM,KAAK,GAAG,EAAE,IAAI,IAAI,EAAE,IAAI,MAAM,EAAE,SAAS,GAAG;AAAA,UACpD;AAAA,QACF;AACA,cAAMA,WAAU,MAAM,KAAK,IAAI;AAC/B,eAAO,EAAE,SAAAA,UAAS,MAAM,cAAc,eAAe,KAAK,MAAMA,SAAQ,SAAS,CAAC,EAAE;AAAA,MACtF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,QAAM,MAAM,GAAG,aAAa,UAAU,MAAM;AAC5C,QAAM,YAAY,IAAI,MAAM,IAAI;AAChC,QAAM,OAAiB,CAAC,KAAK,KAAK,SAAS,QAAQ,CAAC;AAAA,CAAiB;AAErE,QAAM,WAAW;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,UAAM,OAAO,UAAU,CAAC;AACxB,eAAW,OAAO,UAAU;AAC1B,UAAI,IAAI,KAAK,IAAI,GAAG;AAElB,cAAM,MAAM,KAAK,QAAQ,SAAS,EAAE,EAAE,KAAK;AAC3C,aAAK,KAAK,GAAG;AACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,KAAK,SAAS,IAC1B,KAAK,KAAK,IAAI,IACd,KAAK,KAAK,SAAS,QAAQ,CAAC;AAChC,SAAO,EAAE,SAAS,MAAM,cAAc,eAAe,KAAK,MAAM,QAAQ,SAAS,CAAC,EAAE;AACtF;AAEA,SAAS,SAAS,UAAkC;AAClD,QAAM,YAAQ,+BAAiB;AAC/B,QAAM,kBAAkB,MAAM,mBAAmB,QAAQ;AAEzD,MAAI,CAAC,iBAAiB;AAEpB,UAAMA,WAAU,GAAG,aAAa,UAAU,MAAM;AAChD,WAAO;AAAA,MACL,SAAS;AAAA;AAAA,EAA0DA,QAAO;AAAA,MAC1E,MAAM;AAAA,MACN,eAAe,KAAK,MAAMA,SAAQ,SAAS,CAAC;AAAA,IAC9C;AAAA,EACF;AAEA,QAAM,iBAAiB,GAAG,aAAa,UAAU,MAAM;AACvD,MAAI,mBAAmB,iBAAiB;AACtC,UAAM,MAAM;AACZ,WAAO,EAAE,SAAS,KAAK,MAAM,QAAQ,eAAe,EAAE;AAAA,EACxD;AAGA,QAAM,WAAW,gBAAgB,MAAM,IAAI;AAC3C,QAAM,WAAW,eAAe,MAAM,IAAI;AAC1C,QAAM,YAAsB,CAAC,WAAW,KAAK,SAAS,QAAQ,CAAC;AAAA,CAAI;AAEnE,MAAI,IAAI,GAAG,IAAI;AACf,SAAO,IAAI,SAAS,UAAU,IAAI,SAAS,QAAQ;AACjD,QAAI,KAAK,SAAS,QAAQ;AACxB,gBAAU,KAAK,KAAK,SAAS,CAAC,CAAC,EAAE;AACjC;AAAA,IACF,WAAW,KAAK,SAAS,QAAQ;AAC/B,gBAAU,KAAK,KAAK,SAAS,CAAC,CAAC,EAAE;AACjC;AAAA,IACF,WAAW,SAAS,CAAC,MAAM,SAAS,CAAC,GAAG;AACtC;AACA;AAAA,IACF,OAAO;AAEL,UAAI,aAAa;AACjB,eAAS,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,IAAI,GAAG,SAAS,MAAM,GAAG,KAAK;AAC7D,YAAI,SAAS,CAAC,MAAM,SAAS,CAAC,GAAG;AAAE,uBAAa;AAAG;AAAA,QAAO;AAAA,MAC5D;AACA,UAAI,cAAc,GAAG;AAEnB,eAAO,IAAI,YAAY;AACrB,oBAAU,KAAK,KAAK,SAAS,CAAC,CAAC,EAAE;AACjC;AAAA,QACF;AAAA,MACF,OAAO;AACL,kBAAU,KAAK,KAAK,SAAS,CAAC,CAAC,EAAE;AACjC;AACA,kBAAU,KAAK,KAAK,SAAS,CAAC,CAAC,EAAE;AACjC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,UAAU,UAAU,KAAK,IAAI;AACnC,SAAO,EAAE,SAAS,MAAM,QAAQ,eAAe,KAAK,MAAM,QAAQ,SAAS,CAAC,EAAE;AAChF;AAEA,SAAS,UAAU,UAAkB,OAAgB,KAA8B;AACjF,QAAM,MAAM,GAAG,aAAa,UAAU,MAAM;AAC5C,QAAM,WAAW,IAAI,MAAM,IAAI;AAC/B,QAAM,YAAY,KAAK,IAAI,GAAG,SAAS,CAAC;AACxC,QAAM,UAAU,KAAK,IAAI,SAAS,QAAQ,OAAO,SAAS,MAAM;AAEhE,QAAM,WAAW,SAAS,MAAM,YAAY,GAAG,OAAO;AACtD,QAAM,WAAW,SAAS,IAAI,CAAC,MAAM,QAAQ,GAAG,YAAY,GAAG,KAAK,IAAI,EAAE;AAC1E,QAAM,UAAU,KAAK,KAAK,SAAS,QAAQ,CAAC,iBAAY,SAAS,IAAI,OAAO,OAAO,SAAS,MAAM;AAAA;AAAA,EAAO,SAAS,KAAK,IAAI,CAAC;AAC5H,SAAO,EAAE,SAAS,MAAM,SAAS,eAAe,KAAK,MAAM,QAAQ,SAAS,CAAC,EAAE;AACjF;AAEA,SAAS,YAAY,UAAkB,IAAuC;AAC5E,MAAI,IAAI;AACN,UAAM,cAAc,GAAG,eAAe;AACtC,UAAM,UAAU,KAAK,WAAW,QAAQ,IACpC,KAAK,SAAS,aAAa,QAAQ,IACnC;AAEJ,QAAI;AACF,YAAM,KAAK,GAAG,YAAY;AAC1B,YAAM,QAAQ,GAAG,eAAe,OAAO;AACvC,YAAM,cAAc,MAAM,OAAO,OAAK,EAAE,SAAS,QAAQ;AACzD,UAAI,YAAY,SAAS,GAAG;AAC1B,cAAM,QAAQ,CAAC,KAAK,OAAO,oBAAe,YAAY,MAAM;AAAA,CAAK;AACjE,mBAAW,KAAK,aAAa;AAC3B,gBAAM,KAAK,KAAK,EAAE,IAAI,MAAM,EAAE,SAAS,GAAG;AAAA,QAC5C;AACA,cAAMA,WAAU,MAAM,KAAK,IAAI;AAC/B,eAAO,EAAE,SAAAA,UAAS,MAAM,WAAW,eAAe,KAAK,MAAMA,SAAQ,SAAS,CAAC,EAAE;AAAA,MACnF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,QAAM,MAAM,GAAG,aAAa,UAAU,MAAM;AAC5C,QAAM,YAAY,IAAI,MAAM,IAAI;AAChC,QAAM,cAAwB,CAAC,KAAK,KAAK,SAAS,QAAQ,CAAC;AAAA,CAAc;AAEzE,aAAW,QAAQ,WAAW;AAC5B,QAAI,8BAA8B,KAAK,IAAI,GAAG;AAC5C,kBAAY,KAAK,KAAK,KAAK,KAAK,CAAC,EAAE;AAAA,IACrC;AAAA,EACF;AAEA,QAAM,UAAU,YAAY,SAAS,IACjC,YAAY,KAAK,IAAI,IACrB,KAAK,KAAK,SAAS,QAAQ,CAAC;AAChC,SAAO,EAAE,SAAS,MAAM,WAAW,eAAe,KAAK,MAAM,QAAQ,SAAS,CAAC,EAAE;AACnF;AAEA,SAAS,YAAY,UAAkB,IAAuC;AAC5E,MAAI,IAAI;AACN,UAAM,cAAc,GAAG,eAAe;AACtC,UAAM,UAAU,KAAK,WAAW,QAAQ,IACpC,KAAK,SAAS,aAAa,QAAQ,IACnC;AAEJ,QAAI;AACF,YAAM,KAAK,GAAG,YAAY;AAC1B,YAAM,QAAQ,GAAG,eAAe,OAAO;AACvC,YAAM,gBAAgB,MAAM,OAAO,OAAK,EAAE,UAAU;AACpD,UAAI,cAAc,SAAS,GAAG;AAC5B,cAAM,QAAQ,CAAC,KAAK,OAAO,oBAAe,cAAc,MAAM;AAAA,CAAK;AACnE,mBAAW,KAAK,eAAe;AAC7B,gBAAM,KAAK,KAAK,EAAE,IAAI,IAAI,EAAE,IAAI,MAAM,EAAE,SAAS,GAAG;AAAA,QACtD;AACA,cAAMA,WAAU,MAAM,KAAK,IAAI;AAC/B,eAAO,EAAE,SAAAA,UAAS,MAAM,WAAW,eAAe,KAAK,MAAMA,SAAQ,SAAS,CAAC,EAAE;AAAA,MACnF;AAAA,IACF,QAAQ;AAAA,IAER;AAAA,EACF;AAGA,QAAM,MAAM,GAAG,aAAa,UAAU,MAAM;AAC5C,QAAM,YAAY,IAAI,MAAM,IAAI;AAChC,QAAM,cAAwB,CAAC,KAAK,KAAK,SAAS,QAAQ,CAAC;AAAA,CAAc;AAEzE,aAAW,QAAQ,WAAW;AAC5B,QAAI,gBAAgB,KAAK,IAAI,GAAG;AAC9B,kBAAY,KAAK,KAAK,KAAK,KAAK,CAAC,EAAE;AAAA,IACrC;AAAA,EACF;AAEA,QAAM,UAAU,YAAY,SAAS,IACjC,YAAY,KAAK,IAAI,IACrB,KAAK,KAAK,SAAS,QAAQ,CAAC;AAChC,SAAO,EAAE,SAAS,MAAM,WAAW,eAAe,KAAK,MAAM,QAAQ,SAAS,CAAC,EAAE;AACnF;",
6
+ "names": ["content"]
7
+ }
@@ -31,6 +31,7 @@ __export(server_exports, {
31
31
  MCPServer: () => MCPServer
32
32
  });
33
33
  module.exports = __toCommonJS(server_exports);
34
+ var path = __toESM(require("path"));
34
35
  var import__ = __toESM(require("../index"));
35
36
  var import_transport = require("./transport");
36
37
  var import_tools = require("./tools");
@@ -40,7 +41,7 @@ class MCPServer {
40
41
  constructor(projectPath) {
41
42
  this.transport = new import_transport.StdioTransport();
42
43
  this.cg = null;
43
- this.projectPath = projectPath ?? null;
44
+ this.projectPath = projectPath ? path.resolve(projectPath) : null;
44
45
  this.toolHandler = new import_tools.ToolHandler(null);
45
46
  }
46
47
  async start() {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/mcp/server.ts"],
4
- "sourcesContent": ["/**\n * KiroGraph MCP Server\n * Implements the Model Context Protocol over stdio.\n */\n\nimport KiroGraph, { findNearestKiroGraphRoot } from '../index';\nimport { StdioTransport, ErrorCodes } from './transport';\nimport { tools, ToolHandler } from './tools';\nimport type { JsonRpcMessage } from './transport';\n\nconst SERVER_INFO = { name: 'kirograph', version: '0.1.0' };\nconst PROTOCOL_VERSION = '2024-11-05';\n\nexport class MCPServer {\n private transport = new StdioTransport();\n private cg: KiroGraph | null = null;\n private toolHandler: ToolHandler;\n private projectPath: string | null;\n\n constructor(projectPath?: string) {\n this.projectPath = projectPath ?? null;\n this.toolHandler = new ToolHandler(null);\n }\n\n async start(): Promise<void> {\n this.transport.start(this.handleMessage.bind(this));\n process.on('SIGINT', () => this.stop());\n process.on('SIGTERM', () => this.stop());\n process.stdin.on('end', () => this.stop());\n process.stdin.on('close', () => this.stop());\n }\n\n private async tryInit(projectPath: string): Promise<void> {\n const root = findNearestKiroGraphRoot(projectPath);\n if (!root) { this.projectPath = projectPath; return; }\n this.projectPath = root;\n try {\n this.cg = await KiroGraph.open(root);\n this.toolHandler.setDefaultKiroGraph(this.cg);\n } catch (err) {\n process.stderr.write(`[KiroGraph MCP] Failed to open ${root}: ${err}\\n`);\n }\n }\n\n private async handleMessage(msg: JsonRpcMessage): Promise<unknown> {\n const req = msg as any;\n\n switch (req.method) {\n case 'initialize': {\n const rootUri = req.params?.rootUri ?? req.params?.workspaceFolders?.[0]?.uri;\n if (rootUri) {\n const p = rootUri.startsWith('file://') ? decodeURIComponent(rootUri.replace(/^file:\\/\\/\\/?/, '')) : rootUri;\n await this.tryInit(p);\n } else if (this.projectPath) {\n await this.tryInit(this.projectPath);\n }\n return {\n protocolVersion: PROTOCOL_VERSION,\n capabilities: { tools: {} },\n serverInfo: SERVER_INFO,\n };\n }\n\n case 'tools/list':\n return { tools };\n\n case 'tools/call': {\n const { name, arguments: args = {} } = req.params ?? {};\n try {\n return await this.toolHandler.handle(name, args);\n } catch (err) {\n return {\n content: [{ type: 'text', text: `Error: ${err instanceof Error ? err.message : String(err)}` }],\n isError: true,\n };\n }\n }\n\n case 'notifications/initialized':\n case 'ping':\n return {};\n\n default:\n this.transport.sendError(req.id, ErrorCodes.MethodNotFound, `Unknown method: ${req.method}`);\n return undefined;\n }\n }\n\n private stop(): void {\n this.cg?.close();\n this.toolHandler.closeAll();\n process.exit(0);\n }\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,eAAoD;AACpD,uBAA2C;AAC3C,mBAAmC;AAGnC,MAAM,cAAc,EAAE,MAAM,aAAa,SAAS,QAAQ;AAC1D,MAAM,mBAAmB;AAElB,MAAM,UAAU;AAAA,EAMrB,YAAY,aAAsB;AALlC,SAAQ,YAAY,IAAI,gCAAe;AACvC,SAAQ,KAAuB;AAK7B,SAAK,cAAc,eAAe;AAClC,SAAK,cAAc,IAAI,yBAAY,IAAI;AAAA,EACzC;AAAA,EAEA,MAAM,QAAuB;AAC3B,SAAK,UAAU,MAAM,KAAK,cAAc,KAAK,IAAI,CAAC;AAClD,YAAQ,GAAG,UAAU,MAAM,KAAK,KAAK,CAAC;AACtC,YAAQ,GAAG,WAAW,MAAM,KAAK,KAAK,CAAC;AACvC,YAAQ,MAAM,GAAG,OAAO,MAAM,KAAK,KAAK,CAAC;AACzC,YAAQ,MAAM,GAAG,SAAS,MAAM,KAAK,KAAK,CAAC;AAAA,EAC7C;AAAA,EAEA,MAAc,QAAQ,aAAoC;AACxD,UAAM,WAAO,mCAAyB,WAAW;AACjD,QAAI,CAAC,MAAM;AAAE,WAAK,cAAc;AAAa;AAAA,IAAQ;AACrD,SAAK,cAAc;AACnB,QAAI;AACF,WAAK,KAAK,MAAM,SAAAA,QAAU,KAAK,IAAI;AACnC,WAAK,YAAY,oBAAoB,KAAK,EAAE;AAAA,IAC9C,SAAS,KAAK;AACZ,cAAQ,OAAO,MAAM,kCAAkC,IAAI,KAAK,GAAG;AAAA,CAAI;AAAA,IACzE;AAAA,EACF;AAAA,EAEA,MAAc,cAAc,KAAuC;AACjE,UAAM,MAAM;AAEZ,YAAQ,IAAI,QAAQ;AAAA,MAClB,KAAK,cAAc;AACjB,cAAM,UAAU,IAAI,QAAQ,WAAW,IAAI,QAAQ,mBAAmB,CAAC,GAAG;AAC1E,YAAI,SAAS;AACX,gBAAM,IAAI,QAAQ,WAAW,SAAS,IAAI,mBAAmB,QAAQ,QAAQ,iBAAiB,EAAE,CAAC,IAAI;AACrG,gBAAM,KAAK,QAAQ,CAAC;AAAA,QACtB,WAAW,KAAK,aAAa;AAC3B,gBAAM,KAAK,QAAQ,KAAK,WAAW;AAAA,QACrC;AACA,eAAO;AAAA,UACL,iBAAiB;AAAA,UACjB,cAAc,EAAE,OAAO,CAAC,EAAE;AAAA,UAC1B,YAAY;AAAA,QACd;AAAA,MACF;AAAA,MAEA,KAAK;AACH,eAAO,EAAE,0BAAM;AAAA,MAEjB,KAAK,cAAc;AACjB,cAAM,EAAE,MAAM,WAAW,OAAO,CAAC,EAAE,IAAI,IAAI,UAAU,CAAC;AACtD,YAAI;AACF,iBAAO,MAAM,KAAK,YAAY,OAAO,MAAM,IAAI;AAAA,QACjD,SAAS,KAAK;AACZ,iBAAO;AAAA,YACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,GAAG,CAAC;AAAA,YAC9F,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK;AACH,eAAO,CAAC;AAAA,MAEV;AACE,aAAK,UAAU,UAAU,IAAI,IAAI,4BAAW,gBAAgB,mBAAmB,IAAI,MAAM,EAAE;AAC3F,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EAEQ,OAAa;AACnB,SAAK,IAAI,MAAM;AACf,SAAK,YAAY,SAAS;AAC1B,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;",
4
+ "sourcesContent": ["/**\n * KiroGraph MCP Server\n * Implements the Model Context Protocol over stdio.\n */\n\nimport * as path from 'path';\nimport KiroGraph, { findNearestKiroGraphRoot } from '../index';\nimport { StdioTransport, ErrorCodes } from './transport';\nimport { tools, ToolHandler } from './tools';\nimport type { JsonRpcMessage } from './transport';\n\nconst SERVER_INFO = { name: 'kirograph', version: '0.1.0' };\nconst PROTOCOL_VERSION = '2024-11-05';\n\nexport class MCPServer {\n private transport = new StdioTransport();\n private cg: KiroGraph | null = null;\n private toolHandler: ToolHandler;\n private projectPath: string | null;\n\n constructor(projectPath?: string) {\n // Normalize to absolute path immediately to prevent any path traversal\n this.projectPath = projectPath ? path.resolve(projectPath) : null;\n this.toolHandler = new ToolHandler(null);\n }\n\n async start(): Promise<void> {\n this.transport.start(this.handleMessage.bind(this));\n process.on('SIGINT', () => this.stop());\n process.on('SIGTERM', () => this.stop());\n process.stdin.on('end', () => this.stop());\n process.stdin.on('close', () => this.stop());\n }\n\n private async tryInit(projectPath: string): Promise<void> {\n const root = findNearestKiroGraphRoot(projectPath);\n if (!root) { this.projectPath = projectPath; return; }\n this.projectPath = root;\n try {\n this.cg = await KiroGraph.open(root);\n this.toolHandler.setDefaultKiroGraph(this.cg);\n } catch (err) {\n process.stderr.write(`[KiroGraph MCP] Failed to open ${root}: ${err}\\n`);\n }\n }\n\n private async handleMessage(msg: JsonRpcMessage): Promise<unknown> {\n const req = msg as any;\n\n switch (req.method) {\n case 'initialize': {\n const rootUri = req.params?.rootUri ?? req.params?.workspaceFolders?.[0]?.uri;\n if (rootUri) {\n const p = rootUri.startsWith('file://') ? decodeURIComponent(rootUri.replace(/^file:\\/\\/\\/?/, '')) : rootUri;\n await this.tryInit(p);\n } else if (this.projectPath) {\n await this.tryInit(this.projectPath);\n }\n return {\n protocolVersion: PROTOCOL_VERSION,\n capabilities: { tools: {} },\n serverInfo: SERVER_INFO,\n };\n }\n\n case 'tools/list':\n return { tools };\n\n case 'tools/call': {\n const { name, arguments: args = {} } = req.params ?? {};\n try {\n return await this.toolHandler.handle(name, args);\n } catch (err) {\n return {\n content: [{ type: 'text', text: `Error: ${err instanceof Error ? err.message : String(err)}` }],\n isError: true,\n };\n }\n }\n\n case 'notifications/initialized':\n case 'ping':\n return {};\n\n default:\n this.transport.sendError(req.id, ErrorCodes.MethodNotFound, `Unknown method: ${req.method}`);\n return undefined;\n }\n }\n\n private stop(): void {\n this.cg?.close();\n this.toolHandler.closeAll();\n process.exit(0);\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,WAAsB;AACtB,eAAoD;AACpD,uBAA2C;AAC3C,mBAAmC;AAGnC,MAAM,cAAc,EAAE,MAAM,aAAa,SAAS,QAAQ;AAC1D,MAAM,mBAAmB;AAElB,MAAM,UAAU;AAAA,EAMrB,YAAY,aAAsB;AALlC,SAAQ,YAAY,IAAI,gCAAe;AACvC,SAAQ,KAAuB;AAM7B,SAAK,cAAc,cAAc,KAAK,QAAQ,WAAW,IAAI;AAC7D,SAAK,cAAc,IAAI,yBAAY,IAAI;AAAA,EACzC;AAAA,EAEA,MAAM,QAAuB;AAC3B,SAAK,UAAU,MAAM,KAAK,cAAc,KAAK,IAAI,CAAC;AAClD,YAAQ,GAAG,UAAU,MAAM,KAAK,KAAK,CAAC;AACtC,YAAQ,GAAG,WAAW,MAAM,KAAK,KAAK,CAAC;AACvC,YAAQ,MAAM,GAAG,OAAO,MAAM,KAAK,KAAK,CAAC;AACzC,YAAQ,MAAM,GAAG,SAAS,MAAM,KAAK,KAAK,CAAC;AAAA,EAC7C;AAAA,EAEA,MAAc,QAAQ,aAAoC;AACxD,UAAM,WAAO,mCAAyB,WAAW;AACjD,QAAI,CAAC,MAAM;AAAE,WAAK,cAAc;AAAa;AAAA,IAAQ;AACrD,SAAK,cAAc;AACnB,QAAI;AACF,WAAK,KAAK,MAAM,SAAAA,QAAU,KAAK,IAAI;AACnC,WAAK,YAAY,oBAAoB,KAAK,EAAE;AAAA,IAC9C,SAAS,KAAK;AACZ,cAAQ,OAAO,MAAM,kCAAkC,IAAI,KAAK,GAAG;AAAA,CAAI;AAAA,IACzE;AAAA,EACF;AAAA,EAEA,MAAc,cAAc,KAAuC;AACjE,UAAM,MAAM;AAEZ,YAAQ,IAAI,QAAQ;AAAA,MAClB,KAAK,cAAc;AACjB,cAAM,UAAU,IAAI,QAAQ,WAAW,IAAI,QAAQ,mBAAmB,CAAC,GAAG;AAC1E,YAAI,SAAS;AACX,gBAAM,IAAI,QAAQ,WAAW,SAAS,IAAI,mBAAmB,QAAQ,QAAQ,iBAAiB,EAAE,CAAC,IAAI;AACrG,gBAAM,KAAK,QAAQ,CAAC;AAAA,QACtB,WAAW,KAAK,aAAa;AAC3B,gBAAM,KAAK,QAAQ,KAAK,WAAW;AAAA,QACrC;AACA,eAAO;AAAA,UACL,iBAAiB;AAAA,UACjB,cAAc,EAAE,OAAO,CAAC,EAAE;AAAA,UAC1B,YAAY;AAAA,QACd;AAAA,MACF;AAAA,MAEA,KAAK;AACH,eAAO,EAAE,0BAAM;AAAA,MAEjB,KAAK,cAAc;AACjB,cAAM,EAAE,MAAM,WAAW,OAAO,CAAC,EAAE,IAAI,IAAI,UAAU,CAAC;AACtD,YAAI;AACF,iBAAO,MAAM,KAAK,YAAY,OAAO,MAAM,IAAI;AAAA,QACjD,SAAS,KAAK;AACZ,iBAAO;AAAA,YACL,SAAS,CAAC,EAAE,MAAM,QAAQ,MAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG,CAAC,GAAG,CAAC;AAAA,YAC9F,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AAAA,MAEA,KAAK;AAAA,MACL,KAAK;AACH,eAAO,CAAC;AAAA,MAEV;AACE,aAAK,UAAU,UAAU,IAAI,IAAI,4BAAW,gBAAgB,mBAAmB,IAAI,MAAM,EAAE;AAC3F,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EAEQ,OAAa;AACnB,SAAK,IAAI,MAAM;AACf,SAAK,YAAY,SAAS;AAC1B,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;",
6
6
  "names": ["KiroGraph"]
7
7
  }
@@ -42,6 +42,11 @@ const KIROGRAPH_TOOL_NAMES = [
42
42
  "kirograph_type_hierarchy",
43
43
  "kirograph_exec",
44
44
  "kirograph_gain",
45
+ "kirograph_read",
46
+ "kirograph_budget",
47
+ "kirograph_flows",
48
+ "kirograph_communities",
49
+ "kirograph_refactor",
45
50
  "kirograph_mem_search",
46
51
  "kirograph_mem_store",
47
52
  "kirograph_mem_timeline",
@@ -58,7 +63,22 @@ const KIROGRAPH_TOOL_NAMES = [
58
63
  "kirograph_data_search",
59
64
  "kirograph_data_join",
60
65
  "kirograph_data_correlations",
61
- "kirograph_data_quality"
66
+ "kirograph_data_quality",
67
+ "kirograph_security",
68
+ "kirograph_vulns",
69
+ "kirograph_sbom",
70
+ "kirograph_vex",
71
+ "kirograph_reachability",
72
+ "kirograph_vuln_add",
73
+ "kirograph_vuln_suppress",
74
+ "kirograph_staleness",
75
+ "kirograph_licenses",
76
+ "kirograph_attack_surface",
77
+ "kirograph_secrets",
78
+ "kirograph_security_flows",
79
+ "kirograph_supply_chain",
80
+ "kirograph_dep_confusion",
81
+ "kirograph_remediation"
62
82
  ];
63
83
  // Annotate the CommonJS export names for ESM import in node:
64
84
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/mcp/tool-names.ts"],
4
- "sourcesContent": ["export const KIROGRAPH_TOOL_NAMES = [\n 'kirograph_search',\n 'kirograph_context',\n 'kirograph_callers',\n 'kirograph_callees',\n 'kirograph_impact',\n 'kirograph_node',\n 'kirograph_status',\n 'kirograph_files',\n 'kirograph_dead_code',\n 'kirograph_circular_deps',\n 'kirograph_path',\n 'kirograph_architecture',\n 'kirograph_coupling',\n 'kirograph_package',\n 'kirograph_hotspots',\n 'kirograph_surprising',\n 'kirograph_diff',\n 'kirograph_type_hierarchy',\n 'kirograph_exec',\n 'kirograph_gain',\n 'kirograph_mem_search',\n 'kirograph_mem_store',\n 'kirograph_mem_timeline',\n 'kirograph_mem_status',\n 'kirograph_docs_toc',\n 'kirograph_docs_search',\n 'kirograph_docs_section',\n 'kirograph_docs_outline',\n 'kirograph_docs_refs',\n 'kirograph_data_list',\n 'kirograph_data_describe',\n 'kirograph_data_query',\n 'kirograph_data_aggregate',\n 'kirograph_data_search',\n 'kirograph_data_join',\n 'kirograph_data_correlations',\n 'kirograph_data_quality',\n];\n\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
4
+ "sourcesContent": ["export const KIROGRAPH_TOOL_NAMES = [\n 'kirograph_search',\n 'kirograph_context',\n 'kirograph_callers',\n 'kirograph_callees',\n 'kirograph_impact',\n 'kirograph_node',\n 'kirograph_status',\n 'kirograph_files',\n 'kirograph_dead_code',\n 'kirograph_circular_deps',\n 'kirograph_path',\n 'kirograph_architecture',\n 'kirograph_coupling',\n 'kirograph_package',\n 'kirograph_hotspots',\n 'kirograph_surprising',\n 'kirograph_diff',\n 'kirograph_type_hierarchy',\n 'kirograph_exec',\n 'kirograph_gain',\n 'kirograph_read',\n 'kirograph_budget',\n 'kirograph_flows',\n 'kirograph_communities',\n 'kirograph_refactor',\n 'kirograph_mem_search',\n 'kirograph_mem_store',\n 'kirograph_mem_timeline',\n 'kirograph_mem_status',\n 'kirograph_docs_toc',\n 'kirograph_docs_search',\n 'kirograph_docs_section',\n 'kirograph_docs_outline',\n 'kirograph_docs_refs',\n 'kirograph_data_list',\n 'kirograph_data_describe',\n 'kirograph_data_query',\n 'kirograph_data_aggregate',\n 'kirograph_data_search',\n 'kirograph_data_join',\n 'kirograph_data_correlations',\n 'kirograph_data_quality',\n 'kirograph_security',\n 'kirograph_vulns',\n 'kirograph_sbom',\n 'kirograph_vex',\n 'kirograph_reachability',\n 'kirograph_vuln_add',\n 'kirograph_vuln_suppress',\n 'kirograph_staleness',\n 'kirograph_licenses',\n 'kirograph_attack_surface',\n 'kirograph_secrets',\n 'kirograph_security_flows',\n 'kirograph_supply_chain',\n 'kirograph_dep_confusion',\n 'kirograph_remediation',\n];\n\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAO,MAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
6
6
  "names": []
7
7
  }