kirograph 0.27.1 → 0.28.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 (222) hide show
  1. package/README.md +35 -2
  2. package/dist/bin/commands/annotations.js +56 -0
  3. package/dist/bin/commands/annotations.js.map +7 -0
  4. package/dist/bin/commands/ast-rewrite.js +55 -0
  5. package/dist/bin/commands/ast-rewrite.js.map +7 -0
  6. package/dist/bin/commands/bench.js +103 -0
  7. package/dist/bin/commands/bench.js.map +7 -0
  8. package/dist/bin/commands/branch.js +133 -0
  9. package/dist/bin/commands/branch.js.map +7 -0
  10. package/dist/bin/commands/callees.js +76 -0
  11. package/dist/bin/commands/callees.js.map +7 -0
  12. package/dist/bin/commands/callers.js +76 -0
  13. package/dist/bin/commands/callers.js.map +7 -0
  14. package/dist/bin/commands/changelog.js +55 -0
  15. package/dist/bin/commands/changelog.js.map +7 -0
  16. package/dist/bin/commands/circular-deps.js +68 -0
  17. package/dist/bin/commands/circular-deps.js.map +7 -0
  18. package/dist/bin/commands/commit-context.js +55 -0
  19. package/dist/bin/commands/commit-context.js.map +7 -0
  20. package/dist/bin/commands/complexity.js +60 -0
  21. package/dist/bin/commands/complexity.js.map +7 -0
  22. package/dist/bin/commands/cost.js +146 -0
  23. package/dist/bin/commands/cost.js.map +7 -0
  24. package/dist/bin/commands/dependency-depth.js +55 -0
  25. package/dist/bin/commands/dependency-depth.js.map +7 -0
  26. package/dist/bin/commands/diff-context.js +55 -0
  27. package/dist/bin/commands/diff-context.js.map +7 -0
  28. package/dist/bin/commands/distribution.js +56 -0
  29. package/dist/bin/commands/distribution.js.map +7 -0
  30. package/dist/bin/commands/doc-coverage.js +56 -0
  31. package/dist/bin/commands/doc-coverage.js.map +7 -0
  32. package/dist/bin/commands/doctor.js +202 -0
  33. package/dist/bin/commands/doctor.js.map +7 -0
  34. package/dist/bin/commands/dsm.js +56 -0
  35. package/dist/bin/commands/dsm.js.map +7 -0
  36. package/dist/bin/commands/gini.js +55 -0
  37. package/dist/bin/commands/gini.js.map +7 -0
  38. package/dist/bin/commands/god-class.js +56 -0
  39. package/dist/bin/commands/god-class.js.map +7 -0
  40. package/dist/bin/commands/health.js +55 -0
  41. package/dist/bin/commands/health.js.map +7 -0
  42. package/dist/bin/commands/help.js +224 -45
  43. package/dist/bin/commands/help.js.map +2 -2
  44. package/dist/bin/commands/impact.js +76 -0
  45. package/dist/bin/commands/impact.js.map +7 -0
  46. package/dist/bin/commands/inheritance-depth.js +56 -0
  47. package/dist/bin/commands/inheritance-depth.js.map +7 -0
  48. package/dist/bin/commands/insert-at.js +55 -0
  49. package/dist/bin/commands/insert-at.js.map +7 -0
  50. package/dist/bin/commands/largest.js +56 -0
  51. package/dist/bin/commands/largest.js.map +7 -0
  52. package/dist/bin/commands/manifest.js +158 -0
  53. package/dist/bin/commands/manifest.js.map +7 -0
  54. package/dist/bin/commands/module-api.js +57 -0
  55. package/dist/bin/commands/module-api.js.map +7 -0
  56. package/dist/bin/commands/monitor.js +91 -0
  57. package/dist/bin/commands/monitor.js.map +7 -0
  58. package/dist/bin/commands/multi-replace.js +66 -0
  59. package/dist/bin/commands/multi-replace.js.map +7 -0
  60. package/dist/bin/commands/pr-context.js +55 -0
  61. package/dist/bin/commands/pr-context.js.map +7 -0
  62. package/dist/bin/commands/query.js +19 -1
  63. package/dist/bin/commands/query.js.map +3 -3
  64. package/dist/bin/commands/rank.js +56 -0
  65. package/dist/bin/commands/rank.js.map +7 -0
  66. package/dist/bin/commands/read.js +1 -1
  67. package/dist/bin/commands/read.js.map +2 -2
  68. package/dist/bin/commands/recursion.js +56 -0
  69. package/dist/bin/commands/recursion.js.map +7 -0
  70. package/dist/bin/commands/rename-preview.js +56 -0
  71. package/dist/bin/commands/rename-preview.js.map +7 -0
  72. package/dist/bin/commands/session.js +60 -0
  73. package/dist/bin/commands/session.js.map +7 -0
  74. package/dist/bin/commands/simplify-scan.js +56 -0
  75. package/dist/bin/commands/simplify-scan.js.map +7 -0
  76. package/dist/bin/commands/str-replace.js +55 -0
  77. package/dist/bin/commands/str-replace.js.map +7 -0
  78. package/dist/bin/commands/test-coverage.js +59 -0
  79. package/dist/bin/commands/test-coverage.js.map +7 -0
  80. package/dist/bin/commands/test-map.js +56 -0
  81. package/dist/bin/commands/test-map.js.map +7 -0
  82. package/dist/bin/commands/test-risk.js +59 -0
  83. package/dist/bin/commands/test-risk.js.map +7 -0
  84. package/dist/bin/commands/type-hierarchy.js +76 -0
  85. package/dist/bin/commands/type-hierarchy.js.map +7 -0
  86. package/dist/bin/commands/unused-imports.js +55 -0
  87. package/dist/bin/commands/unused-imports.js.map +7 -0
  88. package/dist/bin/commands/upgrade.js +78 -0
  89. package/dist/bin/commands/upgrade.js.map +7 -0
  90. package/dist/bin/installer/common.js +19 -9
  91. package/dist/bin/installer/common.js.map +2 -2
  92. package/dist/bin/installer/config-prompt.js +147 -12
  93. package/dist/bin/installer/config-prompt.js.map +3 -3
  94. package/dist/bin/installer/index.js +62 -6
  95. package/dist/bin/installer/index.js.map +2 -2
  96. package/dist/bin/installer/instructions.js +14 -25
  97. package/dist/bin/installer/instructions.js.map +2 -2
  98. package/dist/bin/installer/mcp.js.map +2 -2
  99. package/dist/bin/installer/steering.js +569 -100
  100. package/dist/bin/installer/steering.js.map +2 -2
  101. package/dist/bin/installer/targets/aider.js +3 -3
  102. package/dist/bin/installer/targets/aider.js.map +2 -2
  103. package/dist/bin/installer/targets/amp.js +3 -3
  104. package/dist/bin/installer/targets/amp.js.map +2 -2
  105. package/dist/bin/installer/targets/antigravity.js +4 -4
  106. package/dist/bin/installer/targets/antigravity.js.map +2 -2
  107. package/dist/bin/installer/targets/augment.js +3 -3
  108. package/dist/bin/installer/targets/augment.js.map +2 -2
  109. package/dist/bin/installer/targets/claude.js +3 -3
  110. package/dist/bin/installer/targets/claude.js.map +2 -2
  111. package/dist/bin/installer/targets/cline.js +4 -4
  112. package/dist/bin/installer/targets/cline.js.map +2 -2
  113. package/dist/bin/installer/targets/codex.js +4 -4
  114. package/dist/bin/installer/targets/codex.js.map +2 -2
  115. package/dist/bin/installer/targets/continue.js +4 -4
  116. package/dist/bin/installer/targets/continue.js.map +2 -2
  117. package/dist/bin/installer/targets/copilot-cli.js +4 -4
  118. package/dist/bin/installer/targets/copilot-cli.js.map +2 -2
  119. package/dist/bin/installer/targets/copilot.js +4 -4
  120. package/dist/bin/installer/targets/copilot.js.map +2 -2
  121. package/dist/bin/installer/targets/cursor.js +5 -5
  122. package/dist/bin/installer/targets/cursor.js.map +2 -2
  123. package/dist/bin/installer/targets/devin.js +4 -4
  124. package/dist/bin/installer/targets/devin.js.map +2 -2
  125. package/dist/bin/installer/targets/gemini-cli.js +4 -4
  126. package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
  127. package/dist/bin/installer/targets/generic.js +2 -2
  128. package/dist/bin/installer/targets/generic.js.map +2 -2
  129. package/dist/bin/installer/targets/goose.js +3 -4
  130. package/dist/bin/installer/targets/goose.js.map +3 -3
  131. package/dist/bin/installer/targets/index.js.map +1 -1
  132. package/dist/bin/installer/targets/junie.js +4 -4
  133. package/dist/bin/installer/targets/junie.js.map +2 -2
  134. package/dist/bin/installer/targets/kilo.js +4 -4
  135. package/dist/bin/installer/targets/kilo.js.map +2 -2
  136. package/dist/bin/installer/targets/kiro.js +27 -3
  137. package/dist/bin/installer/targets/kiro.js.map +2 -2
  138. package/dist/bin/installer/targets/opencode.js +3 -3
  139. package/dist/bin/installer/targets/opencode.js.map +2 -2
  140. package/dist/bin/installer/targets/openhands.js +3 -3
  141. package/dist/bin/installer/targets/openhands.js.map +2 -2
  142. package/dist/bin/installer/targets/qoder.js +2 -2
  143. package/dist/bin/installer/targets/qoder.js.map +2 -2
  144. package/dist/bin/installer/targets/qwen.js +2 -2
  145. package/dist/bin/installer/targets/qwen.js.map +2 -2
  146. package/dist/bin/installer/targets/replit.js +3 -3
  147. package/dist/bin/installer/targets/replit.js.map +2 -2
  148. package/dist/bin/installer/targets/roo.js +4 -4
  149. package/dist/bin/installer/targets/roo.js.map +2 -2
  150. package/dist/bin/installer/targets/tabnine.js +3 -3
  151. package/dist/bin/installer/targets/tabnine.js.map +2 -2
  152. package/dist/bin/installer/targets/trae.js +3 -3
  153. package/dist/bin/installer/targets/trae.js.map +2 -2
  154. package/dist/bin/installer/targets/warp.js +4 -4
  155. package/dist/bin/installer/targets/warp.js.map +2 -2
  156. package/dist/bin/installer/targets/windsurf.js +4 -4
  157. package/dist/bin/installer/targets/windsurf.js.map +2 -2
  158. package/dist/bin/kirograph.js +83 -1
  159. package/dist/bin/kirograph.js.map +3 -3
  160. package/dist/config.js +30 -8
  161. package/dist/config.js.map +2 -2
  162. package/dist/core/branch-manager.js +111 -0
  163. package/dist/core/branch-manager.js.map +7 -0
  164. package/dist/core/pipeline.js +3 -3
  165. package/dist/core/pipeline.js.map +2 -2
  166. package/dist/data/pixelrag-bridge.js +93 -0
  167. package/dist/data/pixelrag-bridge.js.map +7 -0
  168. package/dist/data/pixelrag-manager.js +416 -0
  169. package/dist/data/pixelrag-manager.js.map +7 -0
  170. package/dist/db/database.js +34 -7
  171. package/dist/db/database.js.map +2 -2
  172. package/dist/db/schema.sql +7 -1
  173. package/dist/extraction/complexity.js +116 -0
  174. package/dist/extraction/complexity.js.map +7 -0
  175. package/dist/extraction/extractor.js +52 -1
  176. package/dist/extraction/extractor.js.map +2 -2
  177. package/dist/graph/git-context.js +229 -0
  178. package/dist/graph/git-context.js.map +7 -0
  179. package/dist/index.js +4 -2
  180. package/dist/index.js.map +2 -2
  181. package/dist/mcp/cache.js +1 -1
  182. package/dist/mcp/cache.js.map +2 -2
  183. package/dist/mcp/handler.js +446 -0
  184. package/dist/mcp/handler.js.map +7 -0
  185. package/dist/mcp/handlers/architecture.js +297 -0
  186. package/dist/mcp/handlers/architecture.js.map +7 -0
  187. package/dist/mcp/handlers/branch.js +175 -0
  188. package/dist/mcp/handlers/branch.js.map +7 -0
  189. package/dist/mcp/handlers/code-health.js +563 -0
  190. package/dist/mcp/handlers/code-health.js.map +7 -0
  191. package/dist/mcp/handlers/complexity.js +267 -0
  192. package/dist/mcp/handlers/complexity.js.map +7 -0
  193. package/dist/mcp/handlers/core.js +611 -0
  194. package/dist/mcp/handlers/core.js.map +7 -0
  195. package/dist/mcp/handlers/data.js +337 -0
  196. package/dist/mcp/handlers/data.js.map +7 -0
  197. package/dist/mcp/handlers/docs.js +159 -0
  198. package/dist/mcp/handlers/docs.js.map +7 -0
  199. package/dist/mcp/handlers/edit-primitives.js +200 -0
  200. package/dist/mcp/handlers/edit-primitives.js.map +7 -0
  201. package/dist/mcp/handlers/git-context.js +286 -0
  202. package/dist/mcp/handlers/git-context.js.map +7 -0
  203. package/dist/mcp/handlers/memory.js +363 -0
  204. package/dist/mcp/handlers/memory.js.map +7 -0
  205. package/dist/mcp/handlers/patterns.js +310 -0
  206. package/dist/mcp/handlers/patterns.js.map +7 -0
  207. package/dist/mcp/handlers/security.js +699 -0
  208. package/dist/mcp/handlers/security.js.map +7 -0
  209. package/dist/mcp/handlers/utils.js +97 -0
  210. package/dist/mcp/handlers/utils.js.map +7 -0
  211. package/dist/mcp/handlers/watchmen.js +104 -0
  212. package/dist/mcp/handlers/watchmen.js.map +7 -0
  213. package/dist/mcp/handlers/wiki.js +242 -0
  214. package/dist/mcp/handlers/wiki.js.map +7 -0
  215. package/dist/mcp/server.js +72 -3
  216. package/dist/mcp/server.js.map +2 -2
  217. package/dist/mcp/tool-names.js +136 -10
  218. package/dist/mcp/tool-names.js.map +2 -2
  219. package/dist/mcp/tools.js +846 -3019
  220. package/dist/mcp/tools.js.map +3 -3
  221. package/dist/types.js.map +2 -2
  222. package/package.json +36 -10
@@ -0,0 +1,158 @@
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 manifest_exports = {};
30
+ __export(manifest_exports, {
31
+ register: () => register
32
+ });
33
+ module.exports = __toCommonJS(manifest_exports);
34
+ var path = __toESM(require("path"));
35
+ var fs = __toESM(require("fs"));
36
+ var import_ui = require("../ui");
37
+ function register(program) {
38
+ program.command("manifest [projectPath]").description("Workspace manifest summary: packages, versions, licenses, and version drift").option("--package <name>", "Drill into a specific package (partial name match)").option("--ecosystem <lang>", "Filter by ecosystem/language (npm, cargo, go, python, maven, gradle)").option("--drift", "Show packages with version drift across manifests").action(async (projectPath, opts) => {
39
+ const target = path.resolve(projectPath ?? process.cwd());
40
+ const { parseAllManifests } = await Promise.resolve().then(() => require("../../architecture/manifest/index.js"));
41
+ let packages = await parseAllManifests(target);
42
+ if (packages.length === 0) {
43
+ console.log(`
44
+ ${import_ui.dim}No manifest packages found in ${target}${import_ui.reset}`);
45
+ console.log(` ${import_ui.dim}Run \`kirograph index\` first or check your project root.${import_ui.reset}
46
+ `);
47
+ return;
48
+ }
49
+ const licenseMap = /* @__PURE__ */ new Map();
50
+ for (const pkg of packages) {
51
+ if (!pkg.manifestPath) continue;
52
+ const absManifest = path.join(target, pkg.manifestPath);
53
+ try {
54
+ const basename = path.basename(absManifest);
55
+ if (basename === "package.json") {
56
+ const raw = JSON.parse(fs.readFileSync(absManifest, "utf8"));
57
+ if (typeof raw.license === "string") licenseMap.set(pkg.id, raw.license);
58
+ } else if (basename === "Cargo.toml") {
59
+ const content = fs.readFileSync(absManifest, "utf8");
60
+ const m = content.match(/^\s*license\s*=\s*"([^"]+)"/m);
61
+ if (m) licenseMap.set(pkg.id, m[1]);
62
+ } else if (basename === "pyproject.toml") {
63
+ const content = fs.readFileSync(absManifest, "utf8");
64
+ const m = content.match(/^\s*license\s*=\s*"([^"]+)"/m);
65
+ if (m) licenseMap.set(pkg.id, m[1]);
66
+ }
67
+ } catch {
68
+ }
69
+ }
70
+ if (opts.ecosystem) {
71
+ const filter = opts.ecosystem.toLowerCase();
72
+ packages = packages.filter(
73
+ (p) => p.language?.toLowerCase().includes(filter) || p.manifestPath?.toLowerCase().includes(filter)
74
+ );
75
+ }
76
+ if (opts.package) {
77
+ const query = opts.package.toLowerCase();
78
+ const pkg = packages.find(
79
+ (p) => p.name.toLowerCase().includes(query) || p.path.toLowerCase().includes(query) || p.id.toLowerCase().includes(query)
80
+ );
81
+ if (!pkg) {
82
+ console.error(` Package "${opts.package}" not found. Run \`kirograph manifest\` to list all packages.`);
83
+ process.exit(1);
84
+ }
85
+ console.log();
86
+ console.log((0, import_ui.section)(` ${pkg.name}`));
87
+ console.log(` ${(0, import_ui.label)("ID")} ${pkg.id}`);
88
+ console.log(` ${(0, import_ui.label)("Path")} ${pkg.path}`);
89
+ console.log(` ${(0, import_ui.label)("Source")} ${pkg.source}${pkg.manifestPath ? ` (${pkg.manifestPath})` : ""}`);
90
+ if (pkg.version) console.log(` ${(0, import_ui.label)("Version")} ${pkg.version}`);
91
+ if (pkg.language) console.log(` ${(0, import_ui.label)("Language")} ${pkg.language}`);
92
+ if (licenseMap.has(pkg.id)) console.log(` ${(0, import_ui.label)("License")} ${licenseMap.get(pkg.id)}`);
93
+ if (pkg.externalDeps && pkg.externalDeps.length > 0) {
94
+ console.log();
95
+ console.log(` ${(0, import_ui.label)("External deps")} (${pkg.externalDeps.length})`);
96
+ for (const dep of pkg.externalDeps) {
97
+ console.log(` ${import_ui.dim}\xB7${import_ui.reset} ${dep}`);
98
+ }
99
+ }
100
+ console.log();
101
+ return;
102
+ }
103
+ if (opts.drift) {
104
+ const byName = /* @__PURE__ */ new Map();
105
+ for (const pkg of packages) {
106
+ const key = pkg.name.toLowerCase();
107
+ if (!byName.has(key)) byName.set(key, []);
108
+ byName.get(key).push({ version: pkg.version, path: pkg.path });
109
+ }
110
+ const drifted = [...byName.entries()].filter(([, entries]) => {
111
+ const versions = new Set(entries.map((e) => e.version).filter(Boolean));
112
+ return entries.length > 1 && versions.size > 1;
113
+ });
114
+ console.log();
115
+ if (drifted.length === 0) {
116
+ console.log(` ${import_ui.green}\u2713${import_ui.reset} No version drift detected.`);
117
+ } else {
118
+ console.log((0, import_ui.section)(` Version Drift (${drifted.length} package${drifted.length !== 1 ? "s" : ""})`));
119
+ console.log();
120
+ for (const [name, entries] of drifted) {
121
+ console.log(` ${import_ui.bold}${name}${import_ui.reset}`);
122
+ for (const e of entries) {
123
+ console.log(` ${import_ui.dim}${e.path}${import_ui.reset} ${e.version ?? "(no version)"}`);
124
+ }
125
+ }
126
+ }
127
+ console.log();
128
+ return;
129
+ }
130
+ const byLang = /* @__PURE__ */ new Map();
131
+ for (const pkg of packages) {
132
+ const lang = pkg.language ?? "unknown";
133
+ if (!byLang.has(lang)) byLang.set(lang, []);
134
+ byLang.get(lang).push(pkg);
135
+ }
136
+ console.log();
137
+ console.log((0, import_ui.section)(` Workspace Manifest`));
138
+ console.log(` ${import_ui.dim}${packages.length} package${packages.length !== 1 ? "s" : ""} across ${byLang.size} ecosystem${byLang.size !== 1 ? "s" : ""}${import_ui.reset}`);
139
+ console.log();
140
+ for (const [lang, pkgs] of [...byLang.entries()].sort(([a], [b]) => a.localeCompare(b))) {
141
+ console.log(` ${(0, import_ui.label)(lang)} (${pkgs.length})`);
142
+ for (const pkg of pkgs) {
143
+ const ver = pkg.version ? ` ${import_ui.dim}v${pkg.version}${import_ui.reset}` : "";
144
+ const deps = pkg.externalDeps ? ` ${import_ui.dim}${pkg.externalDeps.length} deps${import_ui.reset}` : "";
145
+ const lic = licenseMap.has(pkg.id) ? ` ${import_ui.dim}${licenseMap.get(pkg.id)}${import_ui.reset}` : "";
146
+ console.log(` ${import_ui.bold}${pkg.name}${import_ui.reset}${ver} ${import_ui.dim}${pkg.path}${import_ui.reset}${deps}${lic}`);
147
+ }
148
+ console.log();
149
+ }
150
+ console.log(` ${import_ui.dim}Pass --package <name> for full dep list, --drift for version conflicts.${import_ui.reset}`);
151
+ console.log();
152
+ });
153
+ }
154
+ // Annotate the CommonJS export names for ESM import in node:
155
+ 0 && (module.exports = {
156
+ register
157
+ });
158
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/commands/manifest.ts"],
4
+ "sourcesContent": ["import { Command } from 'commander';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { dim, reset, green, bold, section, label } from '../ui';\n\nexport function register(program: Command): void {\n program\n .command('manifest [projectPath]')\n .description('Workspace manifest summary: packages, versions, licenses, and version drift')\n .option('--package <name>', 'Drill into a specific package (partial name match)')\n .option('--ecosystem <lang>', 'Filter by ecosystem/language (npm, cargo, go, python, maven, gradle)')\n .option('--drift', 'Show packages with version drift across manifests')\n .action(async (projectPath: string | undefined, opts: { package?: string; ecosystem?: string; drift?: boolean }) => {\n const target = path.resolve(projectPath ?? process.cwd());\n\n const { parseAllManifests } = await Promise.resolve().then(() => require('../../architecture/manifest/index.js'));\n let packages = await parseAllManifests(target);\n\n if (packages.length === 0) {\n console.log(`\\n ${dim}No manifest packages found in ${target}${reset}`);\n console.log(` ${dim}Run \\`kirograph index\\` first or check your project root.${reset}\\n`);\n return;\n }\n\n // Read license fields from manifest files\n const licenseMap = new Map<string, string>();\n for (const pkg of packages) {\n if (!pkg.manifestPath) continue;\n const absManifest = path.join(target, pkg.manifestPath);\n try {\n const basename = path.basename(absManifest);\n if (basename === 'package.json') {\n const raw = JSON.parse(fs.readFileSync(absManifest, 'utf8')) as Record<string, unknown>;\n if (typeof raw.license === 'string') licenseMap.set(pkg.id, raw.license);\n } else if (basename === 'Cargo.toml') {\n const content = fs.readFileSync(absManifest, 'utf8');\n const m = content.match(/^\\s*license\\s*=\\s*\"([^\"]+)\"/m);\n if (m) licenseMap.set(pkg.id, m[1]);\n } else if (basename === 'pyproject.toml') {\n const content = fs.readFileSync(absManifest, 'utf8');\n const m = content.match(/^\\s*license\\s*=\\s*\"([^\"]+)\"/m);\n if (m) licenseMap.set(pkg.id, m[1]);\n }\n } catch { /* ignore */ }\n }\n\n // Filter by ecosystem\n if (opts.ecosystem) {\n const filter = opts.ecosystem.toLowerCase();\n packages = packages.filter(p =>\n p.language?.toLowerCase().includes(filter) ||\n (p.manifestPath?.toLowerCase().includes(filter))\n );\n }\n\n // Drill into a specific package\n if (opts.package) {\n const query = opts.package.toLowerCase();\n const pkg = packages.find(p =>\n p.name.toLowerCase().includes(query) ||\n p.path.toLowerCase().includes(query) ||\n p.id.toLowerCase().includes(query)\n );\n if (!pkg) {\n console.error(` Package \"${opts.package}\" not found. Run \\`kirograph manifest\\` to list all packages.`);\n process.exit(1);\n }\n\n console.log();\n console.log(section(` ${pkg.name}`));\n console.log(` ${label('ID')} ${pkg.id}`);\n console.log(` ${label('Path')} ${pkg.path}`);\n console.log(` ${label('Source')} ${pkg.source}${pkg.manifestPath ? ` (${pkg.manifestPath})` : ''}`);\n if (pkg.version) console.log(` ${label('Version')} ${pkg.version}`);\n if (pkg.language) console.log(` ${label('Language')} ${pkg.language}`);\n if (licenseMap.has(pkg.id)) console.log(` ${label('License')} ${licenseMap.get(pkg.id)}`);\n\n if (pkg.externalDeps && pkg.externalDeps.length > 0) {\n console.log();\n console.log(` ${label('External deps')} (${pkg.externalDeps.length})`);\n for (const dep of pkg.externalDeps) {\n console.log(` ${dim}\u00B7${reset} ${dep}`);\n }\n }\n console.log();\n return;\n }\n\n // Version drift\n if (opts.drift) {\n const byName = new Map<string, Array<{ version?: string; path: string }>>();\n for (const pkg of packages) {\n const key = pkg.name.toLowerCase();\n if (!byName.has(key)) byName.set(key, []);\n byName.get(key)!.push({ version: pkg.version, path: pkg.path });\n }\n const drifted = [...byName.entries()].filter(([, entries]) => {\n const versions = new Set(entries.map(e => e.version).filter(Boolean));\n return entries.length > 1 && versions.size > 1;\n });\n\n console.log();\n if (drifted.length === 0) {\n console.log(` ${green}\u2713${reset} No version drift detected.`);\n } else {\n console.log(section(` Version Drift (${drifted.length} package${drifted.length !== 1 ? 's' : ''})`));\n console.log();\n for (const [name, entries] of drifted) {\n console.log(` ${bold}${name}${reset}`);\n for (const e of entries) {\n console.log(` ${dim}${e.path}${reset} ${e.version ?? '(no version)'}`);\n }\n }\n }\n console.log();\n return;\n }\n\n // Summary grouped by language\n const byLang = new Map<string, typeof packages>();\n for (const pkg of packages) {\n const lang = pkg.language ?? 'unknown';\n if (!byLang.has(lang)) byLang.set(lang, []);\n byLang.get(lang)!.push(pkg);\n }\n\n console.log();\n console.log(section(` Workspace Manifest`));\n console.log(` ${dim}${packages.length} package${packages.length !== 1 ? 's' : ''} across ${byLang.size} ecosystem${byLang.size !== 1 ? 's' : ''}${reset}`);\n console.log();\n\n for (const [lang, pkgs] of [...byLang.entries()].sort(([a], [b]) => a.localeCompare(b))) {\n console.log(` ${label(lang)} (${pkgs.length})`);\n for (const pkg of pkgs) {\n const ver = pkg.version ? ` ${dim}v${pkg.version}${reset}` : '';\n const deps = pkg.externalDeps ? ` ${dim}${pkg.externalDeps.length} deps${reset}` : '';\n const lic = licenseMap.has(pkg.id) ? ` ${dim}${licenseMap.get(pkg.id)}${reset}` : '';\n console.log(` ${bold}${pkg.name}${reset}${ver} ${dim}${pkg.path}${reset}${deps}${lic}`);\n }\n console.log();\n }\n\n console.log(` ${dim}Pass --package <name> for full dep list, --drift for version conflicts.${reset}`);\n console.log();\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,57 @@
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 module_api_exports = {};
30
+ __export(module_api_exports, {
31
+ register: () => register
32
+ });
33
+ module.exports = __toCommonJS(module_api_exports);
34
+ var path = __toESM(require("path"));
35
+ async function runTool(target, toolName, args) {
36
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
37
+ const { ToolHandler } = await Promise.resolve().then(() => require("../../mcp/handler.js"));
38
+ const cg = await KiroGraph.open(target);
39
+ const handler = new ToolHandler(cg);
40
+ const result = await handler.handle(toolName, { ...args, projectPath: target });
41
+ cg.close();
42
+ const text = result.content.map((c) => c.text).join("");
43
+ console.log(text);
44
+ }
45
+ function register(program) {
46
+ program.command("module-api [path] [projectPath]").description("List all exported symbols in a file or directory").option("--limit <n>", "Max results", "50").option("--format <fmt>", "Output format (table|json)", "table").action(async (pathArg, projectPath, opts) => {
47
+ const target = path.resolve(projectPath ?? process.cwd());
48
+ const limit = parseInt(opts.limit) || 50;
49
+ const { format } = opts;
50
+ await runTool(target, "kirograph_module_api", { path: pathArg, limit, format });
51
+ });
52
+ }
53
+ // Annotate the CommonJS export names for ESM import in node:
54
+ 0 && (module.exports = {
55
+ register
56
+ });
57
+ //# sourceMappingURL=module-api.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/commands/module-api.ts"],
4
+ "sourcesContent": ["import * as path from 'path';\nimport { Command } from 'commander';\nimport { dim, reset, violet, bold } from '../ui';\n\nasync function runTool(target: string, toolName: string, args: Record<string, unknown>): Promise<void> {\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n const { ToolHandler } = (await Promise.resolve().then(() => require('../../mcp/handler.js'))) as any;\n const cg = await KiroGraph.open(target);\n const handler = new ToolHandler(cg);\n const result = await handler.handle(toolName, { ...args, projectPath: target });\n cg.close();\n const text: string = result.content.map((c: any) => c.text).join('');\n console.log(text);\n}\n\nexport function register(program: Command): void {\n program\n .command('module-api [path] [projectPath]')\n .description('List all exported symbols in a file or directory')\n .option('--limit <n>', 'Max results', '50')\n .option('--format <fmt>', 'Output format (table|json)', 'table')\n .action(async (pathArg: string | undefined, projectPath: string | undefined, opts: { limit: string; format: string }) => {\n const target = path.resolve(projectPath ?? process.cwd());\n const limit = parseInt(opts.limit) || 50;\n const { format } = opts;\n await runTool(target, 'kirograph_module_api', { path: pathArg, limit, format });\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAAsB;AAItB,eAAe,QAAQ,QAAgB,UAAkB,MAA8C;AACrG,QAAM,aAAa,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,gBAAgB,CAAC,GAAG;AAClF,QAAM,EAAE,YAAY,IAAK,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,sBAAsB,CAAC;AAC3F,QAAM,KAAK,MAAM,UAAU,KAAK,MAAM;AACtC,QAAM,UAAU,IAAI,YAAY,EAAE;AAClC,QAAM,SAAS,MAAM,QAAQ,OAAO,UAAU,EAAE,GAAG,MAAM,aAAa,OAAO,CAAC;AAC9E,KAAG,MAAM;AACT,QAAM,OAAe,OAAO,QAAQ,IAAI,CAAC,MAAW,EAAE,IAAI,EAAE,KAAK,EAAE;AACnE,UAAQ,IAAI,IAAI;AAClB;AAEO,SAAS,SAAS,SAAwB;AAC/C,UACG,QAAQ,iCAAiC,EACzC,YAAY,kDAAkD,EAC9D,OAAO,eAAe,eAAe,IAAI,EACzC,OAAO,kBAAkB,8BAA8B,OAAO,EAC9D,OAAO,OAAO,SAA6B,aAAiC,SAA4C;AACvH,UAAM,SAAS,KAAK,QAAQ,eAAe,QAAQ,IAAI,CAAC;AACxD,UAAM,QAAQ,SAAS,KAAK,KAAK,KAAK;AACtC,UAAM,EAAE,OAAO,IAAI;AACnB,UAAM,QAAQ,QAAQ,wBAAwB,EAAE,MAAM,SAAS,OAAO,OAAO,CAAC;AAAA,EAChF,CAAC;AACL;",
6
+ "names": []
7
+ }
@@ -0,0 +1,91 @@
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 monitor_exports = {};
30
+ __export(monitor_exports, {
31
+ register: () => register
32
+ });
33
+ module.exports = __toCommonJS(monitor_exports);
34
+ var fs = __toESM(require("fs"));
35
+ var path = __toESM(require("path"));
36
+ function register(program) {
37
+ program.command("monitor [projectPath]").description("Live tail of MCP call log (.kirograph/mcp-calls.jsonl)").option("--lines <n>", "Show last N lines on start", "20").action(async (projectPath, opts) => {
38
+ const target = path.resolve(projectPath ?? process.cwd());
39
+ const logFile = path.join(target, ".kirograph", "mcp-calls.jsonl");
40
+ if (!fs.existsSync(logFile)) {
41
+ console.log(" No MCP call log found at: " + logFile);
42
+ console.log(" KiroGraph MCP call logging is not yet enabled in this project.");
43
+ console.log(" Note: this feature requires the MCP server to be configured to write call logs.");
44
+ return;
45
+ }
46
+ const lines = parseInt(opts.lines) || 20;
47
+ const content = fs.readFileSync(logFile, "utf8").split("\n").filter(Boolean);
48
+ const recent = content.slice(-lines);
49
+ console.log(" Showing last " + recent.length + " MCP calls (tailing " + logFile + "):\n");
50
+ for (const line of recent) {
51
+ try {
52
+ const entry = JSON.parse(line);
53
+ const ts = new Date(entry.timestamp).toISOString().slice(11, 23);
54
+ const tool = entry.tool ?? entry.toolName ?? "?";
55
+ const dur = entry.durationMs ? entry.durationMs + "ms" : "";
56
+ const tok = entry.outputTokens ? entry.outputTokens + " tok" : "";
57
+ console.log(" [" + ts + "] " + tool + (dur ? " " + dur : "") + (tok ? " " + tok : ""));
58
+ } catch {
59
+ console.log(" " + line);
60
+ }
61
+ }
62
+ console.log("\n Watching for new calls... (Ctrl+C to stop)\n");
63
+ let offset = fs.statSync(logFile).size;
64
+ fs.watch(logFile, () => {
65
+ const stat = fs.statSync(logFile);
66
+ if (stat.size <= offset) return;
67
+ const fd = fs.openSync(logFile, "r");
68
+ const buf = Buffer.alloc(stat.size - offset);
69
+ fs.readSync(fd, buf, 0, buf.length, offset);
70
+ fs.closeSync(fd);
71
+ offset = stat.size;
72
+ for (const line of buf.toString().split("\n").filter(Boolean)) {
73
+ try {
74
+ const entry = JSON.parse(line);
75
+ const ts = new Date(entry.timestamp).toISOString().slice(11, 23);
76
+ const tool = entry.tool ?? entry.toolName ?? "?";
77
+ const dur = entry.durationMs ? entry.durationMs + "ms" : "";
78
+ const tok = entry.outputTokens ? entry.outputTokens + " tok" : "";
79
+ console.log(" [" + ts + "] " + tool + (dur ? " " + dur : "") + (tok ? " " + tok : ""));
80
+ } catch {
81
+ console.log(" " + line);
82
+ }
83
+ }
84
+ });
85
+ });
86
+ }
87
+ // Annotate the CommonJS export names for ESM import in node:
88
+ 0 && (module.exports = {
89
+ register
90
+ });
91
+ //# sourceMappingURL=monitor.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/commands/monitor.ts"],
4
+ "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { Command } from 'commander';\n\nexport function register(program: Command): void {\n program.command('monitor [projectPath]')\n .description('Live tail of MCP call log (.kirograph/mcp-calls.jsonl)')\n .option('--lines <n>', 'Show last N lines on start', '20')\n .action(async (projectPath: string | undefined, opts: { lines: string }) => {\n const target = path.resolve(projectPath ?? process.cwd());\n const logFile = path.join(target, '.kirograph', 'mcp-calls.jsonl');\n\n if (!fs.existsSync(logFile)) {\n console.log(' No MCP call log found at: ' + logFile);\n console.log(' KiroGraph MCP call logging is not yet enabled in this project.');\n console.log(' Note: this feature requires the MCP server to be configured to write call logs.');\n return;\n }\n\n const lines = parseInt(opts.lines) || 20;\n // Show last N lines\n const content = fs.readFileSync(logFile, 'utf8').split('\\n').filter(Boolean);\n const recent = content.slice(-lines);\n\n console.log(' Showing last ' + recent.length + ' MCP calls (tailing ' + logFile + '):\\n');\n for (const line of recent) {\n try {\n const entry = JSON.parse(line);\n const ts = new Date(entry.timestamp).toISOString().slice(11, 23);\n const tool = entry.tool ?? entry.toolName ?? '?';\n const dur = entry.durationMs ? entry.durationMs + 'ms' : '';\n const tok = entry.outputTokens ? entry.outputTokens + ' tok' : '';\n console.log(' [' + ts + '] ' + tool + (dur ? ' ' + dur : '') + (tok ? ' ' + tok : ''));\n } catch {\n console.log(' ' + line);\n }\n }\n\n console.log('\\n Watching for new calls... (Ctrl+C to stop)\\n');\n\n // Tail using fs.watch\n let offset = fs.statSync(logFile).size;\n fs.watch(logFile, () => {\n const stat = fs.statSync(logFile);\n if (stat.size <= offset) return;\n const fd = fs.openSync(logFile, 'r');\n const buf = Buffer.alloc(stat.size - offset);\n fs.readSync(fd, buf, 0, buf.length, offset);\n fs.closeSync(fd);\n offset = stat.size;\n for (const line of buf.toString().split('\\n').filter(Boolean)) {\n try {\n const entry = JSON.parse(line);\n const ts = new Date(entry.timestamp).toISOString().slice(11, 23);\n const tool = entry.tool ?? entry.toolName ?? '?';\n const dur = entry.durationMs ? entry.durationMs + 'ms' : '';\n const tok = entry.outputTokens ? entry.outputTokens + ' tok' : '';\n console.log(' [' + ts + '] ' + tool + (dur ? ' ' + dur : '') + (tok ? ' ' + tok : ''));\n } catch {\n console.log(' ' + line);\n }\n }\n });\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AAGf,SAAS,SAAS,SAAwB;AAC/C,UAAQ,QAAQ,uBAAuB,EACpC,YAAY,wDAAwD,EACpE,OAAO,eAAe,8BAA8B,IAAI,EACxD,OAAO,OAAO,aAAiC,SAA4B;AAC1E,UAAM,SAAS,KAAK,QAAQ,eAAe,QAAQ,IAAI,CAAC;AACxD,UAAM,UAAU,KAAK,KAAK,QAAQ,cAAc,iBAAiB;AAEjE,QAAI,CAAC,GAAG,WAAW,OAAO,GAAG;AAC3B,cAAQ,IAAI,iCAAiC,OAAO;AACpD,cAAQ,IAAI,kEAAkE;AAC9E,cAAQ,IAAI,mFAAmF;AAC/F;AAAA,IACF;AAEA,UAAM,QAAQ,SAAS,KAAK,KAAK,KAAK;AAEtC,UAAM,UAAU,GAAG,aAAa,SAAS,MAAM,EAAE,MAAM,IAAI,EAAE,OAAO,OAAO;AAC3E,UAAM,SAAS,QAAQ,MAAM,CAAC,KAAK;AAEnC,YAAQ,IAAI,oBAAoB,OAAO,SAAS,yBAAyB,UAAU,MAAM;AACzF,eAAW,QAAQ,QAAQ;AACzB,UAAI;AACF,cAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,cAAM,KAAK,IAAI,KAAK,MAAM,SAAS,EAAE,YAAY,EAAE,MAAM,IAAI,EAAE;AAC/D,cAAM,OAAO,MAAM,QAAQ,MAAM,YAAY;AAC7C,cAAM,MAAM,MAAM,aAAa,MAAM,aAAa,OAAO;AACzD,cAAM,MAAM,MAAM,eAAe,MAAM,eAAe,SAAS;AAC/D,gBAAQ,IAAI,QAAQ,KAAK,OAAO,QAAQ,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,GAAG;AAAA,MAC1F,QAAQ;AACN,gBAAQ,IAAI,OAAO,IAAI;AAAA,MACzB;AAAA,IACF;AAEA,YAAQ,IAAI,kDAAkD;AAG9D,QAAI,SAAS,GAAG,SAAS,OAAO,EAAE;AAClC,OAAG,MAAM,SAAS,MAAM;AACtB,YAAM,OAAO,GAAG,SAAS,OAAO;AAChC,UAAI,KAAK,QAAQ,OAAQ;AACzB,YAAM,KAAK,GAAG,SAAS,SAAS,GAAG;AACnC,YAAM,MAAM,OAAO,MAAM,KAAK,OAAO,MAAM;AAC3C,SAAG,SAAS,IAAI,KAAK,GAAG,IAAI,QAAQ,MAAM;AAC1C,SAAG,UAAU,EAAE;AACf,eAAS,KAAK;AACd,iBAAW,QAAQ,IAAI,SAAS,EAAE,MAAM,IAAI,EAAE,OAAO,OAAO,GAAG;AAC7D,YAAI;AACF,gBAAM,QAAQ,KAAK,MAAM,IAAI;AAC7B,gBAAM,KAAK,IAAI,KAAK,MAAM,SAAS,EAAE,YAAY,EAAE,MAAM,IAAI,EAAE;AAC/D,gBAAM,OAAO,MAAM,QAAQ,MAAM,YAAY;AAC7C,gBAAM,MAAM,MAAM,aAAa,MAAM,aAAa,OAAO;AACzD,gBAAM,MAAM,MAAM,eAAe,MAAM,eAAe,SAAS;AAC/D,kBAAQ,IAAI,QAAQ,KAAK,OAAO,QAAQ,MAAM,OAAO,MAAM,OAAO,MAAM,OAAO,MAAM,GAAG;AAAA,QAC1F,QAAQ;AACN,kBAAQ,IAAI,OAAO,IAAI;AAAA,QACzB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACL;",
6
+ "names": []
7
+ }
@@ -0,0 +1,66 @@
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 multi_replace_exports = {};
30
+ __export(multi_replace_exports, {
31
+ register: () => register
32
+ });
33
+ module.exports = __toCommonJS(multi_replace_exports);
34
+ var path = __toESM(require("path"));
35
+ async function runTool(target, toolName, args) {
36
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
37
+ const { ToolHandler } = await Promise.resolve().then(() => require("../../mcp/handler.js"));
38
+ const cg = await KiroGraph.open(target);
39
+ const handler = new ToolHandler(cg);
40
+ const result = await handler.handle(toolName, { ...args, projectPath: target });
41
+ cg.close();
42
+ const text = result.content.map((c) => c.text).join("");
43
+ console.log(text);
44
+ }
45
+ function register(program) {
46
+ program.command("multi-replace <file> <pairs-json> [projectPath]").description("Multiple string replacements as an all-or-nothing transaction").action(async (file, pairsJson, projectPath) => {
47
+ const target = path.resolve(projectPath ?? process.cwd());
48
+ let pairs;
49
+ try {
50
+ pairs = JSON.parse(pairsJson);
51
+ } catch {
52
+ console.error(`
53
+ Error: pairs-json must be a valid JSON array of {old_str, new_str} objects.
54
+ `);
55
+ console.error(` Example: '[{"old_str":"foo","new_str":"bar"},{"old_str":"baz","new_str":"qux"}]'
56
+ `);
57
+ process.exit(1);
58
+ }
59
+ await runTool(target, "kirograph_multi_str_replace", { file, pairs });
60
+ });
61
+ }
62
+ // Annotate the CommonJS export names for ESM import in node:
63
+ 0 && (module.exports = {
64
+ register
65
+ });
66
+ //# sourceMappingURL=multi-replace.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/commands/multi-replace.ts"],
4
+ "sourcesContent": ["import * as path from 'path';\nimport { Command } from 'commander';\nimport { dim, reset, violet, bold } from '../ui';\n\nasync function runTool(target: string, toolName: string, args: Record<string, unknown>): Promise<void> {\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n const { ToolHandler } = (await Promise.resolve().then(() => require('../../mcp/handler.js'))) as any;\n const cg = await KiroGraph.open(target);\n const handler = new ToolHandler(cg);\n const result = await handler.handle(toolName, { ...args, projectPath: target });\n cg.close();\n const text: string = result.content.map((c: any) => c.text).join('');\n console.log(text);\n}\n\nexport function register(program: Command): void {\n program\n .command('multi-replace <file> <pairs-json> [projectPath]')\n .description('Multiple string replacements as an all-or-nothing transaction')\n .action(async (file: string, pairsJson: string, projectPath: string | undefined) => {\n const target = path.resolve(projectPath ?? process.cwd());\n\n let pairs: Array<{ old_str: string; new_str: string }>;\n try {\n pairs = JSON.parse(pairsJson);\n } catch {\n console.error(`\\n Error: pairs-json must be a valid JSON array of {old_str, new_str} objects.\\n`);\n console.error(` Example: '[{\"old_str\":\"foo\",\"new_str\":\"bar\"},{\"old_str\":\"baz\",\"new_str\":\"qux\"}]'\\n`);\n process.exit(1);\n }\n\n await runTool(target, 'kirograph_multi_str_replace', { file, pairs });\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAAsB;AAItB,eAAe,QAAQ,QAAgB,UAAkB,MAA8C;AACrG,QAAM,aAAa,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,gBAAgB,CAAC,GAAG;AAClF,QAAM,EAAE,YAAY,IAAK,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,sBAAsB,CAAC;AAC3F,QAAM,KAAK,MAAM,UAAU,KAAK,MAAM;AACtC,QAAM,UAAU,IAAI,YAAY,EAAE;AAClC,QAAM,SAAS,MAAM,QAAQ,OAAO,UAAU,EAAE,GAAG,MAAM,aAAa,OAAO,CAAC;AAC9E,KAAG,MAAM;AACT,QAAM,OAAe,OAAO,QAAQ,IAAI,CAAC,MAAW,EAAE,IAAI,EAAE,KAAK,EAAE;AACnE,UAAQ,IAAI,IAAI;AAClB;AAEO,SAAS,SAAS,SAAwB;AAC/C,UACG,QAAQ,iDAAiD,EACzD,YAAY,+DAA+D,EAC3E,OAAO,OAAO,MAAc,WAAmB,gBAAoC;AAClF,UAAM,SAAS,KAAK,QAAQ,eAAe,QAAQ,IAAI,CAAC;AAExD,QAAI;AACJ,QAAI;AACF,cAAQ,KAAK,MAAM,SAAS;AAAA,IAC9B,QAAQ;AACN,cAAQ,MAAM;AAAA;AAAA,CAAmF;AACjG,cAAQ,MAAM;AAAA,CAAsF;AACpG,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,QAAQ,QAAQ,+BAA+B,EAAE,MAAM,MAAM,CAAC;AAAA,EACtE,CAAC;AACL;",
6
+ "names": []
7
+ }
@@ -0,0 +1,55 @@
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 pr_context_exports = {};
30
+ __export(pr_context_exports, {
31
+ register: () => register
32
+ });
33
+ module.exports = __toCommonJS(pr_context_exports);
34
+ var path = __toESM(require("path"));
35
+ async function runTool(target, toolName, args) {
36
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
37
+ const { ToolHandler } = await Promise.resolve().then(() => require("../../mcp/handler.js"));
38
+ const cg = await KiroGraph.open(target);
39
+ const handler = new ToolHandler(cg);
40
+ const result = await handler.handle(toolName, { ...args, projectPath: target });
41
+ cg.close();
42
+ const text = result.content.map((c) => c.text).join("");
43
+ console.log(text);
44
+ }
45
+ function register(program) {
46
+ program.command("pr-context <base> [head] [projectPath]").description("Semantic diff between two git refs for PR descriptions").option("--format <fmt>", "Output format: text|json (default: text)", "text").action(async (base, head, projectPath, opts) => {
47
+ const target = path.resolve(projectPath ?? process.cwd());
48
+ await runTool(target, "kirograph_pr_context", { base, head: head ?? "HEAD" });
49
+ });
50
+ }
51
+ // Annotate the CommonJS export names for ESM import in node:
52
+ 0 && (module.exports = {
53
+ register
54
+ });
55
+ //# sourceMappingURL=pr-context.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/bin/commands/pr-context.ts"],
4
+ "sourcesContent": ["import * as path from 'path';\nimport { Command } from 'commander';\nimport { dim, reset, violet, bold } from '../ui';\n\nasync function runTool(target: string, toolName: string, args: Record<string, unknown>): Promise<void> {\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n const { ToolHandler } = (await Promise.resolve().then(() => require('../../mcp/handler.js'))) as any;\n const cg = await KiroGraph.open(target);\n const handler = new ToolHandler(cg);\n const result = await handler.handle(toolName, { ...args, projectPath: target });\n cg.close();\n const text: string = result.content.map((c: any) => c.text).join('');\n console.log(text);\n}\n\nexport function register(program: Command): void {\n program\n .command('pr-context <base> [head] [projectPath]')\n .description('Semantic diff between two git refs for PR descriptions')\n .option('--format <fmt>', 'Output format: text|json (default: text)', 'text')\n .action(async (base: string, head: string | undefined, projectPath: string | undefined, opts: { format: string }) => {\n const target = path.resolve(projectPath ?? process.cwd());\n await runTool(target, 'kirograph_pr_context', { base, head: head ?? 'HEAD' });\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,WAAsB;AAItB,eAAe,QAAQ,QAAgB,UAAkB,MAA8C;AACrG,QAAM,aAAa,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,gBAAgB,CAAC,GAAG;AAClF,QAAM,EAAE,YAAY,IAAK,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,sBAAsB,CAAC;AAC3F,QAAM,KAAK,MAAM,UAAU,KAAK,MAAM;AACtC,QAAM,UAAU,IAAI,YAAY,EAAE;AAClC,QAAM,SAAS,MAAM,QAAQ,OAAO,UAAU,EAAE,GAAG,MAAM,aAAa,OAAO,CAAC;AAC9E,KAAG,MAAM;AACT,QAAM,OAAe,OAAO,QAAQ,IAAI,CAAC,MAAW,EAAE,IAAI,EAAE,KAAK,EAAE;AACnE,UAAQ,IAAI,IAAI;AAClB;AAEO,SAAS,SAAS,SAAwB;AAC/C,UACG,QAAQ,wCAAwC,EAChD,YAAY,wDAAwD,EACpE,OAAO,kBAAkB,4CAA4C,MAAM,EAC3E,OAAO,OAAO,MAAc,MAA0B,aAAiC,SAA6B;AACnH,UAAM,SAAS,KAAK,QAAQ,eAAe,QAAQ,IAAI,CAAC;AACxD,UAAM,QAAQ,QAAQ,wBAAwB,EAAE,MAAM,MAAM,QAAQ,OAAO,CAAC;AAAA,EAC9E,CAAC;AACL;",
6
+ "names": []
7
+ }
@@ -23,11 +23,29 @@ __export(query_exports, {
23
23
  module.exports = __toCommonJS(query_exports);
24
24
  var import_ui = require("../ui");
25
25
  function register(program) {
26
- program.command("query <search>").description("Search for symbols").option("--kind <kind>", "Filter by kind").option("--limit <n>", "Max results", "10").action(async (search, opts) => {
26
+ program.command("query <search>").description("Search for symbols").option("--kind <kind>", "Filter by kind").option("--limit <n>", "Max results", "10").option("--qualified", "Treat search as a fully-qualified name (exact match)").option("--similar", "Use fuzzy/substring matching (broader results)").action(async (search, opts) => {
27
27
  const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
28
28
  const { trackCliToolSaving } = await Promise.resolve().then(() => require("./utils.js"));
29
29
  const cwd = process.cwd();
30
+ if (opts.qualified) {
31
+ const cg2 = await KiroGraph.open(cwd);
32
+ const { ToolHandler } = await Promise.resolve().then(() => require("../../mcp/handler.js"));
33
+ const handler = new ToolHandler(cg2);
34
+ const result = await handler.handle("kirograph_node", { symbol: search, qualified: true });
35
+ console.log(result.content[0]?.text ?? "No result");
36
+ cg2.close();
37
+ return;
38
+ }
30
39
  const cg = await KiroGraph.open(cwd);
40
+ if (opts.similar) {
41
+ const { ToolHandler } = await Promise.resolve().then(() => require("../../mcp/handler.js"));
42
+ const handler = new ToolHandler(cg);
43
+ const result = await handler.handle("kirograph_search", { query: search, mode: "similar", kind: opts.kind, limit: parseInt(opts.limit) });
44
+ console.log(result.content[0]?.text ?? "No result");
45
+ trackCliToolSaving(cwd, "kirograph_search", result.content[0]?.text ?? "", { limit: parseInt(opts.limit) });
46
+ cg.close();
47
+ return;
48
+ }
31
49
  const results = cg.searchNodes(search, opts.kind, parseInt(opts.limit));
32
50
  if (results.length === 0) {
33
51
  console.log(` ${import_ui.dim}No results for${import_ui.reset} ${import_ui.violet}${import_ui.bold}${search}${import_ui.reset}`);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/bin/commands/query.ts"],
4
- "sourcesContent": ["import { Command } from 'commander';\nimport { dim, reset, violet, bold } from '../ui';\n\nexport function register(program: Command): void {\n program\n .command('query <search>')\n .description('Search for symbols')\n .option('--kind <kind>', 'Filter by kind')\n .option('--limit <n>', 'Max results', '10')\n .action(async (search: string, opts: { kind?: string; limit: string }) => {\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n const { trackCliToolSaving } = await Promise.resolve().then(() => require('./utils.js'));\n\n const cwd = process.cwd();\n const cg = await KiroGraph.open(cwd);\n const results = cg.searchNodes(search, opts.kind as any, parseInt(opts.limit));\n if (results.length === 0) {\n console.log(` ${dim}No results for${reset} ${violet}${bold}${search}${reset}`);\n } else {\n console.log();\n for (const r of results) {\n console.log(` ${violet}${bold}${r.node.name}${reset} ${dim}${r.node.kind}${reset} ${dim}${r.node.filePath}:${r.node.startLine}${reset}`);\n }\n console.log(`\\n ${dim}${results.length} result(s)${reset}`);\n }\n\n // Track savings\n const output = results.map(r => `${r.node.name} ${r.node.kind} ${r.node.filePath}:${r.node.startLine}`).join('\\n');\n trackCliToolSaving(cwd, 'kirograph_search', output, { limit: parseInt(opts.limit) });\n\n cg.close();\n });\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,gBAAyC;AAElC,SAAS,SAAS,SAAwB;AAC/C,UACG,QAAQ,gBAAgB,EACxB,YAAY,oBAAoB,EAChC,OAAO,iBAAiB,gBAAgB,EACxC,OAAO,eAAe,eAAe,IAAI,EACzC,OAAO,OAAO,QAAgB,SAA2C;AACxE,UAAM,aAAa,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,gBAAgB,CAAC,GAAG;AAClF,UAAM,EAAE,mBAAmB,IAAI,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,YAAY,CAAC;AAEvF,UAAM,MAAM,QAAQ,IAAI;AACxB,UAAM,KAAK,MAAM,UAAU,KAAK,GAAG;AACnC,UAAM,UAAU,GAAG,YAAY,QAAQ,KAAK,MAAa,SAAS,KAAK,KAAK,CAAC;AAC7E,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAI,KAAK,aAAG,iBAAiB,eAAK,IAAI,gBAAM,GAAG,cAAI,GAAG,MAAM,GAAG,eAAK,EAAE;AAAA,IAChF,OAAO;AACL,cAAQ,IAAI;AACZ,iBAAW,KAAK,SAAS;AACvB,gBAAQ,IAAI,KAAK,gBAAM,GAAG,cAAI,GAAG,EAAE,KAAK,IAAI,GAAG,eAAK,KAAK,aAAG,GAAG,EAAE,KAAK,IAAI,GAAG,eAAK,KAAK,aAAG,GAAG,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,SAAS,GAAG,eAAK,EAAE;AAAA,MAC5I;AACA,cAAQ,IAAI;AAAA,IAAO,aAAG,GAAG,QAAQ,MAAM,aAAa,eAAK,EAAE;AAAA,IAC7D;AAGA,UAAM,SAAS,QAAQ,IAAI,OAAK,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,SAAS,EAAE,EAAE,KAAK,IAAI;AACjH,uBAAmB,KAAK,oBAAoB,QAAQ,EAAE,OAAO,SAAS,KAAK,KAAK,EAAE,CAAC;AAEnF,OAAG,MAAM;AAAA,EACX,CAAC;AACL;",
6
- "names": []
4
+ "sourcesContent": ["import { Command } from 'commander';\nimport { dim, reset, violet, bold } from '../ui';\n\nexport function register(program: Command): void {\n program\n .command('query <search>')\n .description('Search for symbols')\n .option('--kind <kind>', 'Filter by kind')\n .option('--limit <n>', 'Max results', '10')\n .option('--qualified', 'Treat search as a fully-qualified name (exact match)')\n .option('--similar', 'Use fuzzy/substring matching (broader results)')\n .action(async (search: string, opts: { kind?: string; limit: string; qualified?: boolean; similar?: boolean }) => {\n const KiroGraph = (await Promise.resolve().then(() => require('../../index.js'))).default;\n const { trackCliToolSaving } = await Promise.resolve().then(() => require('./utils.js'));\n\n const cwd = process.cwd();\n\n if (opts.qualified) {\n const cg = await KiroGraph.open(cwd);\n const { ToolHandler } = await Promise.resolve().then(() => require('../../mcp/handler.js'));\n const handler = new ToolHandler(cg);\n const result = await handler.handle('kirograph_node', { symbol: search, qualified: true });\n console.log(result.content[0]?.text ?? 'No result');\n cg.close();\n return;\n }\n\n const cg = await KiroGraph.open(cwd);\n\n if (opts.similar) {\n const { ToolHandler } = await Promise.resolve().then(() => require('../../mcp/handler.js'));\n const handler = new ToolHandler(cg);\n const result = await handler.handle('kirograph_search', { query: search, mode: 'similar', kind: opts.kind, limit: parseInt(opts.limit) });\n console.log(result.content[0]?.text ?? 'No result');\n trackCliToolSaving(cwd, 'kirograph_search', result.content[0]?.text ?? '', { limit: parseInt(opts.limit) });\n cg.close();\n return;\n }\n\n const results = cg.searchNodes(search, opts.kind as any, parseInt(opts.limit));\n if (results.length === 0) {\n console.log(` ${dim}No results for${reset} ${violet}${bold}${search}${reset}`);\n } else {\n console.log();\n for (const r of results) {\n console.log(` ${violet}${bold}${r.node.name}${reset} ${dim}${r.node.kind}${reset} ${dim}${r.node.filePath}:${r.node.startLine}${reset}`);\n }\n console.log(`\\n ${dim}${results.length} result(s)${reset}`);\n }\n\n // Track savings\n const output = results.map(r => `${r.node.name} ${r.node.kind} ${r.node.filePath}:${r.node.startLine}`).join('\\n');\n trackCliToolSaving(cwd, 'kirograph_search', output, { limit: parseInt(opts.limit) });\n\n cg.close();\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,gBAAyC;AAElC,SAAS,SAAS,SAAwB;AAC/C,UACG,QAAQ,gBAAgB,EACxB,YAAY,oBAAoB,EAChC,OAAO,iBAAiB,gBAAgB,EACxC,OAAO,eAAe,eAAe,IAAI,EACzC,OAAO,eAAe,sDAAsD,EAC5E,OAAO,aAAa,gDAAgD,EACpE,OAAO,OAAO,QAAgB,SAAmF;AAChH,UAAM,aAAa,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,gBAAgB,CAAC,GAAG;AAClF,UAAM,EAAE,mBAAmB,IAAI,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,YAAY,CAAC;AAEvF,UAAM,MAAM,QAAQ,IAAI;AAExB,QAAI,KAAK,WAAW;AAClB,YAAMA,MAAK,MAAM,UAAU,KAAK,GAAG;AACnC,YAAM,EAAE,YAAY,IAAI,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,sBAAsB,CAAC;AAC1F,YAAM,UAAU,IAAI,YAAYA,GAAE;AAClC,YAAM,SAAS,MAAM,QAAQ,OAAO,kBAAkB,EAAE,QAAQ,QAAQ,WAAW,KAAK,CAAC;AACzF,cAAQ,IAAI,OAAO,QAAQ,CAAC,GAAG,QAAQ,WAAW;AAClD,MAAAA,IAAG,MAAM;AACT;AAAA,IACF;AAEA,UAAM,KAAK,MAAM,UAAU,KAAK,GAAG;AAEnC,QAAI,KAAK,SAAS;AAChB,YAAM,EAAE,YAAY,IAAI,MAAM,QAAQ,QAAQ,EAAE,KAAK,MAAM,QAAQ,sBAAsB,CAAC;AAC1F,YAAM,UAAU,IAAI,YAAY,EAAE;AAClC,YAAM,SAAS,MAAM,QAAQ,OAAO,oBAAoB,EAAE,OAAO,QAAQ,MAAM,WAAW,MAAM,KAAK,MAAM,OAAO,SAAS,KAAK,KAAK,EAAE,CAAC;AACxI,cAAQ,IAAI,OAAO,QAAQ,CAAC,GAAG,QAAQ,WAAW;AAClD,yBAAmB,KAAK,oBAAoB,OAAO,QAAQ,CAAC,GAAG,QAAQ,IAAI,EAAE,OAAO,SAAS,KAAK,KAAK,EAAE,CAAC;AAC1G,SAAG,MAAM;AACT;AAAA,IACF;AAEA,UAAM,UAAU,GAAG,YAAY,QAAQ,KAAK,MAAa,SAAS,KAAK,KAAK,CAAC;AAC7E,QAAI,QAAQ,WAAW,GAAG;AACxB,cAAQ,IAAI,KAAK,aAAG,iBAAiB,eAAK,IAAI,gBAAM,GAAG,cAAI,GAAG,MAAM,GAAG,eAAK,EAAE;AAAA,IAChF,OAAO;AACL,cAAQ,IAAI;AACZ,iBAAW,KAAK,SAAS;AACvB,gBAAQ,IAAI,KAAK,gBAAM,GAAG,cAAI,GAAG,EAAE,KAAK,IAAI,GAAG,eAAK,KAAK,aAAG,GAAG,EAAE,KAAK,IAAI,GAAG,eAAK,KAAK,aAAG,GAAG,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,SAAS,GAAG,eAAK,EAAE;AAAA,MAC5I;AACA,cAAQ,IAAI;AAAA,IAAO,aAAG,GAAG,QAAQ,MAAM,aAAa,eAAK,EAAE;AAAA,IAC7D;AAGA,UAAM,SAAS,QAAQ,IAAI,OAAK,GAAG,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,SAAS,EAAE,EAAE,KAAK,IAAI;AACjH,uBAAmB,KAAK,oBAAoB,QAAQ,EAAE,OAAO,SAAS,KAAK,KAAK,EAAE,CAAC;AAEnF,OAAG,MAAM;AAAA,EACX,CAAC;AACL;",
6
+ "names": ["cg"]
7
7
  }
@@ -0,0 +1,56 @@
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 rank_exports = {};
30
+ __export(rank_exports, {
31
+ register: () => register
32
+ });
33
+ module.exports = __toCommonJS(rank_exports);
34
+ var path = __toESM(require("path"));
35
+ async function runTool(target, toolName, args) {
36
+ const KiroGraph = (await Promise.resolve().then(() => require("../../index.js"))).default;
37
+ const { ToolHandler } = await Promise.resolve().then(() => require("../../mcp/handler.js"));
38
+ const cg = await KiroGraph.open(target);
39
+ const handler = new ToolHandler(cg);
40
+ const result = await handler.handle(toolName, { ...args, projectPath: target });
41
+ cg.close();
42
+ const text = result.content.map((c) => c.text).join("");
43
+ console.log(text);
44
+ }
45
+ function register(program) {
46
+ program.command("rank [projectPath]").description("Symbols ranked by fan-in or fan-out edge count").option("--by <by>", "Rank by (fan-in|fan-out)", "fan-in").option("--limit <n>", "Max results", "20").action(async (projectPath, opts) => {
47
+ const target = path.resolve(projectPath ?? process.cwd());
48
+ const limit = parseInt(opts.limit) || 20;
49
+ await runTool(target, "kirograph_rank", { by: opts.by || "fan-in", limit });
50
+ });
51
+ }
52
+ // Annotate the CommonJS export names for ESM import in node:
53
+ 0 && (module.exports = {
54
+ register
55
+ });
56
+ //# sourceMappingURL=rank.js.map