kirograph 0.16.1 → 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 (365) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +103 -1605
  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/affected.js +40 -5
  10. package/dist/bin/commands/affected.js.map +2 -2
  11. package/dist/bin/commands/attack-surface.js +157 -0
  12. package/dist/bin/commands/attack-surface.js.map +7 -0
  13. package/dist/bin/commands/benchmark.js +206 -0
  14. package/dist/bin/commands/benchmark.js.map +7 -0
  15. package/dist/bin/commands/budget.js +70 -0
  16. package/dist/bin/commands/budget.js.map +7 -0
  17. package/dist/bin/commands/communities.js +77 -0
  18. package/dist/bin/commands/communities.js.map +7 -0
  19. package/dist/bin/commands/data.js +665 -0
  20. package/dist/bin/commands/data.js.map +7 -0
  21. package/dist/bin/commands/dep-confusion.js +119 -0
  22. package/dist/bin/commands/dep-confusion.js.map +7 -0
  23. package/dist/bin/commands/export.js +304 -10
  24. package/dist/bin/commands/export.js.map +2 -2
  25. package/dist/bin/commands/flows.js +97 -0
  26. package/dist/bin/commands/flows.js.map +7 -0
  27. package/dist/bin/commands/help.js +386 -100
  28. package/dist/bin/commands/help.js.map +2 -2
  29. package/dist/bin/commands/install.js +90 -8
  30. package/dist/bin/commands/install.js.map +2 -2
  31. package/dist/bin/commands/licenses.js +201 -0
  32. package/dist/bin/commands/licenses.js.map +7 -0
  33. package/dist/bin/commands/reachability.js +160 -0
  34. package/dist/bin/commands/reachability.js.map +7 -0
  35. package/dist/bin/commands/read.js +100 -0
  36. package/dist/bin/commands/read.js.map +7 -0
  37. package/dist/bin/commands/refactor.js +116 -0
  38. package/dist/bin/commands/refactor.js.map +7 -0
  39. package/dist/bin/commands/remediation.js +133 -0
  40. package/dist/bin/commands/remediation.js.map +7 -0
  41. package/dist/bin/commands/sbom.js +76 -0
  42. package/dist/bin/commands/sbom.js.map +7 -0
  43. package/dist/bin/commands/security-ci-report.js +267 -0
  44. package/dist/bin/commands/security-ci-report.js.map +7 -0
  45. package/dist/bin/commands/security-export.js +1349 -0
  46. package/dist/bin/commands/security-export.js.map +7 -0
  47. package/dist/bin/commands/security-flows.js +126 -0
  48. package/dist/bin/commands/security-flows.js.map +7 -0
  49. package/dist/bin/commands/security-secrets.js +170 -0
  50. package/dist/bin/commands/security-secrets.js.map +7 -0
  51. package/dist/bin/commands/security.js +193 -0
  52. package/dist/bin/commands/security.js.map +7 -0
  53. package/dist/bin/commands/staleness.js +144 -0
  54. package/dist/bin/commands/staleness.js.map +7 -0
  55. package/dist/bin/commands/status.js +102 -2
  56. package/dist/bin/commands/status.js.map +2 -2
  57. package/dist/bin/commands/supply-chain.js +138 -0
  58. package/dist/bin/commands/supply-chain.js.map +7 -0
  59. package/dist/bin/commands/uninit.js +109 -60
  60. package/dist/bin/commands/uninit.js.map +2 -2
  61. package/dist/bin/commands/vex.js +76 -0
  62. package/dist/bin/commands/vex.js.map +7 -0
  63. package/dist/bin/commands/vuln-suppress.js +95 -0
  64. package/dist/bin/commands/vuln-suppress.js.map +7 -0
  65. package/dist/bin/commands/vulns.js +382 -0
  66. package/dist/bin/commands/vulns.js.map +7 -0
  67. package/dist/bin/installer/auto-detect.js +125 -0
  68. package/dist/bin/installer/auto-detect.js.map +7 -0
  69. package/dist/bin/installer/cli-agent.js +28 -5
  70. package/dist/bin/installer/cli-agent.js.map +2 -2
  71. package/dist/bin/installer/common.js +47 -0
  72. package/dist/bin/installer/common.js.map +2 -2
  73. package/dist/bin/installer/config-prompt.js +39 -1
  74. package/dist/bin/installer/config-prompt.js.map +2 -2
  75. package/dist/bin/installer/detect.js +309 -0
  76. package/dist/bin/installer/detect.js.map +7 -0
  77. package/dist/bin/installer/index.js +36 -1
  78. package/dist/bin/installer/index.js.map +2 -2
  79. package/dist/bin/installer/instructions.js +195 -3
  80. package/dist/bin/installer/instructions.js.map +2 -2
  81. package/dist/bin/installer/steering.js +440 -0
  82. package/dist/bin/installer/steering.js.map +2 -2
  83. package/dist/bin/installer/targets/aider.js +3 -3
  84. package/dist/bin/installer/targets/aider.js.map +2 -2
  85. package/dist/bin/installer/targets/amp.js +3 -3
  86. package/dist/bin/installer/targets/amp.js.map +2 -2
  87. package/dist/bin/installer/targets/antigravity.js +35 -6
  88. package/dist/bin/installer/targets/antigravity.js.map +2 -2
  89. package/dist/bin/installer/targets/augment.js +3 -3
  90. package/dist/bin/installer/targets/augment.js.map +2 -2
  91. package/dist/bin/installer/targets/claude.js +49 -5
  92. package/dist/bin/installer/targets/claude.js.map +2 -2
  93. package/dist/bin/installer/targets/cline.js +32 -6
  94. package/dist/bin/installer/targets/cline.js.map +2 -2
  95. package/dist/bin/installer/targets/codex.js +64 -12
  96. package/dist/bin/installer/targets/codex.js.map +2 -2
  97. package/dist/bin/installer/targets/continue.js +2 -2
  98. package/dist/bin/installer/targets/continue.js.map +2 -2
  99. package/dist/bin/installer/targets/copilot-cli.js +101 -0
  100. package/dist/bin/installer/targets/copilot-cli.js.map +7 -0
  101. package/dist/bin/installer/targets/copilot.js +31 -5
  102. package/dist/bin/installer/targets/copilot.js.map +2 -2
  103. package/dist/bin/installer/targets/cursor.js +4 -4
  104. package/dist/bin/installer/targets/cursor.js.map +2 -2
  105. package/dist/bin/installer/targets/devin.js +2 -2
  106. package/dist/bin/installer/targets/devin.js.map +2 -2
  107. package/dist/bin/installer/targets/gemini-cli.js +2 -2
  108. package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
  109. package/dist/bin/installer/targets/generic.js +2 -14
  110. package/dist/bin/installer/targets/generic.js.map +2 -2
  111. package/dist/bin/installer/targets/goose.js +3 -3
  112. package/dist/bin/installer/targets/goose.js.map +2 -2
  113. package/dist/bin/installer/targets/index.js +250 -0
  114. package/dist/bin/installer/targets/index.js.map +2 -2
  115. package/dist/bin/installer/targets/junie.js +2 -2
  116. package/dist/bin/installer/targets/junie.js.map +2 -2
  117. package/dist/bin/installer/targets/kilo.js +2 -2
  118. package/dist/bin/installer/targets/kilo.js.map +2 -2
  119. package/dist/bin/installer/targets/kiro.js +3 -3
  120. package/dist/bin/installer/targets/kiro.js.map +2 -2
  121. package/dist/bin/installer/targets/opencode.js +2 -2
  122. package/dist/bin/installer/targets/opencode.js.map +2 -2
  123. package/dist/bin/installer/targets/openhands.js +3 -3
  124. package/dist/bin/installer/targets/openhands.js.map +2 -2
  125. package/dist/bin/installer/targets/qoder.js +91 -0
  126. package/dist/bin/installer/targets/qoder.js.map +7 -0
  127. package/dist/bin/installer/targets/qwen.js +96 -0
  128. package/dist/bin/installer/targets/qwen.js.map +7 -0
  129. package/dist/bin/installer/targets/replit.js +3 -3
  130. package/dist/bin/installer/targets/replit.js.map +2 -2
  131. package/dist/bin/installer/targets/roo.js +2 -2
  132. package/dist/bin/installer/targets/roo.js.map +2 -2
  133. package/dist/bin/installer/targets/tabnine.js +3 -3
  134. package/dist/bin/installer/targets/tabnine.js.map +2 -2
  135. package/dist/bin/installer/targets/trae.js +5 -5
  136. package/dist/bin/installer/targets/trae.js.map +2 -2
  137. package/dist/bin/installer/targets/warp.js +2 -2
  138. package/dist/bin/installer/targets/warp.js.map +2 -2
  139. package/dist/bin/installer/targets/windsurf.js +35 -6
  140. package/dist/bin/installer/targets/windsurf.js.map +2 -2
  141. package/dist/bin/kirograph.js +74 -6
  142. package/dist/bin/kirograph.js.map +3 -3
  143. package/dist/bin/progress.js +30 -0
  144. package/dist/bin/progress.js.map +2 -2
  145. package/dist/compression/naive-cost.js +25 -0
  146. package/dist/compression/naive-cost.js.map +2 -2
  147. package/dist/compression/tracker.js +91 -2
  148. package/dist/compression/tracker.js.map +2 -2
  149. package/dist/compression/types.js.map +1 -1
  150. package/dist/config.js +126 -3
  151. package/dist/config.js.map +2 -2
  152. package/dist/core/pipeline.js +92 -4
  153. package/dist/core/pipeline.js.map +2 -2
  154. package/dist/data/filters.js +105 -0
  155. package/dist/data/filters.js.map +7 -0
  156. package/dist/data/indexer.js +225 -0
  157. package/dist/data/indexer.js.map +7 -0
  158. package/dist/data/linker.js +150 -0
  159. package/dist/data/linker.js.map +7 -0
  160. package/dist/data/lint.js +109 -0
  161. package/dist/data/lint.js.map +7 -0
  162. package/dist/data/parsers/csv.js +132 -0
  163. package/dist/data/parsers/csv.js.map +7 -0
  164. package/dist/data/parsers/excel.js +88 -0
  165. package/dist/data/parsers/excel.js.map +7 -0
  166. package/dist/data/parsers/index.js +79 -0
  167. package/dist/data/parsers/index.js.map +7 -0
  168. package/dist/data/parsers/json-array.js +89 -0
  169. package/dist/data/parsers/json-array.js.map +7 -0
  170. package/dist/data/parsers/jsonl.js +84 -0
  171. package/dist/data/parsers/jsonl.js.map +7 -0
  172. package/dist/data/parsers/parquet.js +95 -0
  173. package/dist/data/parsers/parquet.js.map +7 -0
  174. package/dist/data/profiler.js +182 -0
  175. package/dist/data/profiler.js.map +7 -0
  176. package/dist/data/queries.js +512 -0
  177. package/dist/data/queries.js.map +7 -0
  178. package/dist/data/types.js +17 -0
  179. package/dist/data/types.js.map +7 -0
  180. package/dist/db/data-schema.sql +61 -0
  181. package/dist/db/database.js +67 -5
  182. package/dist/db/database.js.map +2 -2
  183. package/dist/db/memory-schema.sql +5 -1
  184. package/dist/db/schema.sql +3 -1
  185. package/dist/db/security-schema.sql +72 -0
  186. package/dist/extraction/extractor.js +81 -0
  187. package/dist/extraction/extractor.js.map +2 -2
  188. package/dist/extraction/grammars.js +32 -8
  189. package/dist/extraction/grammars.js.map +2 -2
  190. package/dist/extraction/languages.js +43 -1
  191. package/dist/extraction/languages.js.map +2 -2
  192. package/dist/extraction/notebook.js +300 -0
  193. package/dist/extraction/notebook.js.map +7 -0
  194. package/dist/extraction/wasm/tree-sitter-astro.wasm +0 -0
  195. package/dist/extraction/wasm/tree-sitter-gdscript.wasm +0 -0
  196. package/dist/extraction/wasm/tree-sitter-julia.wasm +0 -0
  197. package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
  198. package/dist/extraction/wasm/tree-sitter-perl.wasm +0 -0
  199. package/dist/extraction/wasm/tree-sitter-powershell.wasm +0 -0
  200. package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
  201. package/dist/extraction/wasm/tree-sitter-sql.wasm +0 -0
  202. package/dist/extraction/wasm/tree-sitter-verilog.wasm +0 -0
  203. package/dist/frameworks/flutter.js +130 -0
  204. package/dist/frameworks/flutter.js.map +7 -0
  205. package/dist/frameworks/index.js +7 -1
  206. package/dist/frameworks/index.js.map +3 -3
  207. package/dist/graph/communities.js +317 -0
  208. package/dist/graph/communities.js.map +7 -0
  209. package/dist/graph/flows.js +138 -0
  210. package/dist/graph/flows.js.map +7 -0
  211. package/dist/graph/refactor.js +155 -0
  212. package/dist/graph/refactor.js.map +7 -0
  213. package/dist/index.js +1 -1
  214. package/dist/index.js.map +2 -2
  215. package/dist/mcp/cache.js +172 -0
  216. package/dist/mcp/cache.js.map +7 -0
  217. package/dist/mcp/read-modes.js +295 -0
  218. package/dist/mcp/read-modes.js.map +7 -0
  219. package/dist/mcp/server.js +2 -1
  220. package/dist/mcp/server.js.map +2 -2
  221. package/dist/mcp/tool-names.js +29 -1
  222. package/dist/mcp/tool-names.js.map +2 -2
  223. package/dist/mcp/tools.js +1588 -6
  224. package/dist/mcp/tools.js.map +3 -3
  225. package/dist/memory/database.js +32 -2
  226. package/dist/memory/database.js.map +2 -2
  227. package/dist/memory/types.js.map +1 -1
  228. package/dist/resolution/bridges/android-rn.js +298 -0
  229. package/dist/resolution/bridges/android-rn.js.map +7 -0
  230. package/dist/resolution/bridges/expo-modules.js +155 -0
  231. package/dist/resolution/bridges/expo-modules.js.map +7 -0
  232. package/dist/resolution/bridges/flutter-channel.js +385 -0
  233. package/dist/resolution/bridges/flutter-channel.js.map +7 -0
  234. package/dist/resolution/bridges/index.js +80 -0
  235. package/dist/resolution/bridges/index.js.map +7 -0
  236. package/dist/resolution/bridges/native-events.js +188 -0
  237. package/dist/resolution/bridges/native-events.js.map +7 -0
  238. package/dist/resolution/bridges/native-views.js +244 -0
  239. package/dist/resolution/bridges/native-views.js.map +7 -0
  240. package/dist/resolution/bridges/react-native.js +161 -0
  241. package/dist/resolution/bridges/react-native.js.map +7 -0
  242. package/dist/resolution/bridges/swift-objc.js +227 -0
  243. package/dist/resolution/bridges/swift-objc.js.map +7 -0
  244. package/dist/resolution/bridges/turbomodules.js +216 -0
  245. package/dist/resolution/bridges/turbomodules.js.map +7 -0
  246. package/dist/resolution/index.js +61 -2
  247. package/dist/resolution/index.js.map +2 -2
  248. package/dist/security/attack-surface.js +164 -0
  249. package/dist/security/attack-surface.js.map +7 -0
  250. package/dist/security/context-warnings.js +123 -0
  251. package/dist/security/context-warnings.js.map +7 -0
  252. package/dist/security/context-warnings.test.js +300 -0
  253. package/dist/security/context-warnings.test.js.map +7 -0
  254. package/dist/security/data-flows.js +228 -0
  255. package/dist/security/data-flows.js.map +7 -0
  256. package/dist/security/dep-confusion.js +255 -0
  257. package/dist/security/dep-confusion.js.map +7 -0
  258. package/dist/security/errors.js +51 -0
  259. package/dist/security/errors.js.map +7 -0
  260. package/dist/security/export/fix-suggestions.js +58 -0
  261. package/dist/security/export/fix-suggestions.js.map +7 -0
  262. package/dist/security/export/fix-suggestions.test.js +74 -0
  263. package/dist/security/export/fix-suggestions.test.js.map +7 -0
  264. package/dist/security/export/sbom.js +230 -0
  265. package/dist/security/export/sbom.js.map +7 -0
  266. package/dist/security/export/sbom.test.js +288 -0
  267. package/dist/security/export/sbom.test.js.map +7 -0
  268. package/dist/security/export/serialization.js +142 -0
  269. package/dist/security/export/serialization.js.map +7 -0
  270. package/dist/security/export/serialization.test.js +310 -0
  271. package/dist/security/export/serialization.test.js.map +7 -0
  272. package/dist/security/export/vex.js +220 -0
  273. package/dist/security/export/vex.js.map +7 -0
  274. package/dist/security/export/vex.test.js +278 -0
  275. package/dist/security/export/vex.test.js.map +7 -0
  276. package/dist/security/index.js +67 -0
  277. package/dist/security/index.js.map +7 -0
  278. package/dist/security/integrator-transitives.test.js +359 -0
  279. package/dist/security/integrator-transitives.test.js.map +7 -0
  280. package/dist/security/integrator.js +491 -0
  281. package/dist/security/integrator.js.map +7 -0
  282. package/dist/security/integrator.test.js +237 -0
  283. package/dist/security/integrator.test.js.map +7 -0
  284. package/dist/security/license.js +70 -0
  285. package/dist/security/license.js.map +7 -0
  286. package/dist/security/manifest/adapter.js +243 -0
  287. package/dist/security/manifest/adapter.js.map +7 -0
  288. package/dist/security/manifest/adapter.test.js +272 -0
  289. package/dist/security/manifest/adapter.test.js.map +7 -0
  290. package/dist/security/manifest/parser.js +376 -0
  291. package/dist/security/manifest/parser.js.map +7 -0
  292. package/dist/security/manifest/parser.test.js +110 -0
  293. package/dist/security/manifest/parser.test.js.map +7 -0
  294. package/dist/security/manifest/plugins/cargo.js +233 -0
  295. package/dist/security/manifest/plugins/cargo.js.map +7 -0
  296. package/dist/security/manifest/plugins/cargo.test.js +304 -0
  297. package/dist/security/manifest/plugins/cargo.test.js.map +7 -0
  298. package/dist/security/manifest/plugins/composer.js +152 -0
  299. package/dist/security/manifest/plugins/composer.js.map +7 -0
  300. package/dist/security/manifest/plugins/go.js +146 -0
  301. package/dist/security/manifest/plugins/go.js.map +7 -0
  302. package/dist/security/manifest/plugins/go.test.js +341 -0
  303. package/dist/security/manifest/plugins/go.test.js.map +7 -0
  304. package/dist/security/manifest/plugins/gradle.js +159 -0
  305. package/dist/security/manifest/plugins/gradle.js.map +7 -0
  306. package/dist/security/manifest/plugins/hex.js +159 -0
  307. package/dist/security/manifest/plugins/hex.js.map +7 -0
  308. package/dist/security/manifest/plugins/maven.js +128 -0
  309. package/dist/security/manifest/plugins/maven.js.map +7 -0
  310. package/dist/security/manifest/plugins/maven.test.js +389 -0
  311. package/dist/security/manifest/plugins/maven.test.js.map +7 -0
  312. package/dist/security/manifest/plugins/npm.js +284 -0
  313. package/dist/security/manifest/plugins/npm.js.map +7 -0
  314. package/dist/security/manifest/plugins/npm.test.js +298 -0
  315. package/dist/security/manifest/plugins/npm.test.js.map +7 -0
  316. package/dist/security/manifest/plugins/nuget.js +186 -0
  317. package/dist/security/manifest/plugins/nuget.js.map +7 -0
  318. package/dist/security/manifest/plugins/pip.js +123 -0
  319. package/dist/security/manifest/plugins/pip.js.map +7 -0
  320. package/dist/security/manifest/plugins/pip.test.js +208 -0
  321. package/dist/security/manifest/plugins/pip.test.js.map +7 -0
  322. package/dist/security/manifest/plugins/pubspec.js +212 -0
  323. package/dist/security/manifest/plugins/pubspec.js.map +7 -0
  324. package/dist/security/manifest/plugins/pyproject.js +261 -0
  325. package/dist/security/manifest/plugins/pyproject.js.map +7 -0
  326. package/dist/security/manifest/plugins/rubygems.js +185 -0
  327. package/dist/security/manifest/plugins/rubygems.js.map +7 -0
  328. package/dist/security/manifest/plugins/swift.js +200 -0
  329. package/dist/security/manifest/plugins/swift.js.map +7 -0
  330. package/dist/security/owasp.js +104 -0
  331. package/dist/security/owasp.js.map +7 -0
  332. package/dist/security/pipeline.js +125 -0
  333. package/dist/security/pipeline.js.map +7 -0
  334. package/dist/security/reachability.js +276 -0
  335. package/dist/security/reachability.js.map +7 -0
  336. package/dist/security/reachability.test.js +394 -0
  337. package/dist/security/reachability.test.js.map +7 -0
  338. package/dist/security/remediation.js +126 -0
  339. package/dist/security/remediation.js.map +7 -0
  340. package/dist/security/secrets.js +176 -0
  341. package/dist/security/secrets.js.map +7 -0
  342. package/dist/security/staleness.js +231 -0
  343. package/dist/security/staleness.js.map +7 -0
  344. package/dist/security/supply-chain.js +301 -0
  345. package/dist/security/supply-chain.js.map +7 -0
  346. package/dist/security/suppressions.js +106 -0
  347. package/dist/security/suppressions.js.map +7 -0
  348. package/dist/security/types.js +17 -0
  349. package/dist/security/types.js.map +7 -0
  350. package/dist/security/vuln/client.js +355 -0
  351. package/dist/security/vuln/client.js.map +7 -0
  352. package/dist/security/vuln/client.test.js +288 -0
  353. package/dist/security/vuln/client.test.js.map +7 -0
  354. package/dist/security/vuln/epss-client.js +95 -0
  355. package/dist/security/vuln/epss-client.js.map +7 -0
  356. package/dist/security/vuln/index.js +29 -0
  357. package/dist/security/vuln/index.js.map +7 -0
  358. package/dist/security/vuln/osv-adapter.js +321 -0
  359. package/dist/security/vuln/osv-adapter.js.map +7 -0
  360. package/dist/security/vuln/osv-adapter.test.js +391 -0
  361. package/dist/security/vuln/osv-adapter.test.js.map +7 -0
  362. package/dist/security/vuln/types.js +17 -0
  363. package/dist/security/vuln/types.js.map +7 -0
  364. package/dist/types.js.map +2 -2
  365. package/package.json +5 -2
@@ -0,0 +1,101 @@
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 copilot_cli_exports = {};
30
+ __export(copilot_cli_exports, {
31
+ installCopilotCliEarly: () => installCopilotCliEarly,
32
+ installCopilotCliLate: () => installCopilotCliLate,
33
+ printCopilotCliNextSteps: () => printCopilotCliNextSteps,
34
+ uninitCopilotCli: () => uninitCopilotCli
35
+ });
36
+ module.exports = __toCommonJS(copilot_cli_exports);
37
+ var fs = __toESM(require("fs"));
38
+ var path = __toESM(require("path"));
39
+ var import_common = require("../common");
40
+ var import_instructions = require("../instructions");
41
+ const COPILOT_CLI_BLOCK_ID = "copilot-cli";
42
+ function installCopilotCliEarly(_projectRoot) {
43
+ const home = process.env.HOME || process.env.USERPROFILE || "";
44
+ const mcpPath = path.join(home, ".copilot", "mcp-config.json");
45
+ (0, import_common.ensureDir)(path.dirname(mcpPath));
46
+ const config = (0, import_common.readJson)(mcpPath);
47
+ config.servers = config.servers ?? {};
48
+ if (config.servers[import_common.KIROGRAPH_SERVER_NAME]) {
49
+ console.log(` \u2713 Copilot CLI MCP already configured in ${mcpPath}`);
50
+ return;
51
+ }
52
+ config.servers[import_common.KIROGRAPH_SERVER_NAME] = {
53
+ type: "stdio",
54
+ command: import_common.KIROGRAPH_COMMAND,
55
+ args: import_common.KIROGRAPH_MCP_ARGS
56
+ };
57
+ (0, import_common.writeJson)(mcpPath, config);
58
+ console.log(` \u2713 Copilot CLI MCP server registered in ${mcpPath}`);
59
+ }
60
+ function installCopilotCliLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture) {
61
+ const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, void 0, enableDocs, enableData, enableSecurity, enableArchitecture);
62
+ const instructionsPath = path.join(projectRoot, ".kirograph", "copilot-cli.md");
63
+ (0, import_common.ensureDir)(path.dirname(instructionsPath));
64
+ fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(opts));
65
+ console.log(` \u2713 Copilot CLI instructions written to ${instructionsPath}`);
66
+ const agentsPath = path.join(projectRoot, "AGENTS.md");
67
+ const changed = (0, import_common.upsertGeneratedBlock)(agentsPath, COPILOT_CLI_BLOCK_ID, "## KiroGraph", (0, import_instructions.buildAgentInstructions)(opts));
68
+ console.log(changed ? ` \u2713 AGENTS.md updated with KiroGraph instructions (Copilot CLI)` : ` \u2713 AGENTS.md already up to date`);
69
+ }
70
+ function uninitCopilotCli(projectRoot) {
71
+ const home = process.env.HOME || process.env.USERPROFILE || "";
72
+ const mcpPath = path.join(home, ".copilot", "mcp-config.json");
73
+ if (fs.existsSync(mcpPath)) {
74
+ const config = (0, import_common.readJson)(mcpPath);
75
+ if (config.servers?.[import_common.KIROGRAPH_SERVER_NAME]) {
76
+ delete config.servers[import_common.KIROGRAPH_SERVER_NAME];
77
+ if (Object.keys(config.servers).length === 0) delete config.servers;
78
+ (0, import_common.writeJson)(mcpPath, config);
79
+ console.log(` \u2713 Removed kirograph from ~/.copilot/mcp-config.json`);
80
+ }
81
+ }
82
+ const agentsPath = path.join(projectRoot, "AGENTS.md");
83
+ if ((0, import_common.removeGeneratedBlock)(agentsPath, COPILOT_CLI_BLOCK_ID)) {
84
+ console.log(` \u2713 Removed KiroGraph block from AGENTS.md (Copilot CLI)`);
85
+ }
86
+ }
87
+ function printCopilotCliNextSteps() {
88
+ const home = process.env.HOME || process.env.USERPROFILE || "";
89
+ const mcpPath = path.join(home, ".copilot", "mcp-config.json");
90
+ console.log("\n Done! Copilot CLI MCP server registered.");
91
+ console.log(` MCP config: ${mcpPath}`);
92
+ console.log(" KiroGraph instructions are in AGENTS.md\n");
93
+ }
94
+ // Annotate the CommonJS export names for ESM import in node:
95
+ 0 && (module.exports = {
96
+ installCopilotCliEarly,
97
+ installCopilotCliLate,
98
+ printCopilotCliNextSteps,
99
+ uninitCopilotCli
100
+ });
101
+ //# sourceMappingURL=copilot-cli.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/bin/installer/targets/copilot-cli.ts"],
4
+ "sourcesContent": ["/**\n * GitHub Copilot CLI target.\n *\n * MCP: ~/.copilot/mcp-config.json with \"servers\" key\n * Instructions: AGENTS.md (upsert block)\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst COPILOT_CLI_BLOCK_ID = 'copilot-cli';\n\nexport function installCopilotCliEarly(_projectRoot: string): void {\n const home = process.env.HOME || process.env.USERPROFILE || '';\n const mcpPath = path.join(home, '.copilot', 'mcp-config.json');\n ensureDir(path.dirname(mcpPath));\n const config = readJson(mcpPath);\n config.servers = config.servers ?? {};\n if (config.servers[KIROGRAPH_SERVER_NAME]) {\n console.log(` \u2713 Copilot CLI MCP already configured in ${mcpPath}`);\n return;\n }\n config.servers[KIROGRAPH_SERVER_NAME] = {\n type: 'stdio',\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n };\n writeJson(mcpPath, config);\n console.log(` \u2713 Copilot CLI MCP server registered in ${mcpPath}`);\n}\n\nexport function installCopilotCliLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean, enableDocs?: boolean, enableData?: boolean, enableSecurity?: boolean, enableArchitecture?: boolean): void {\n const opts = buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, undefined, enableDocs, enableData, enableSecurity, enableArchitecture);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'copilot-cli.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Copilot CLI instructions written to ${instructionsPath}`);\n\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n const changed = upsertGeneratedBlock(agentsPath, COPILOT_CLI_BLOCK_ID, '## KiroGraph', buildAgentInstructions(opts));\n console.log(changed\n ? ` \u2713 AGENTS.md updated with KiroGraph instructions (Copilot CLI)`\n : ` \u2713 AGENTS.md already up to date`);\n}\n\nexport function uninitCopilotCli(projectRoot: string): void {\n const home = process.env.HOME || process.env.USERPROFILE || '';\n const mcpPath = path.join(home, '.copilot', 'mcp-config.json');\n if (fs.existsSync(mcpPath)) {\n const config = readJson(mcpPath);\n if (config.servers?.[KIROGRAPH_SERVER_NAME]) {\n delete config.servers[KIROGRAPH_SERVER_NAME];\n if (Object.keys(config.servers).length === 0) delete config.servers;\n writeJson(mcpPath, config);\n console.log(` \u2713 Removed kirograph from ~/.copilot/mcp-config.json`);\n }\n }\n\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n if (removeGeneratedBlock(agentsPath, COPILOT_CLI_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from AGENTS.md (Copilot CLI)`);\n }\n}\n\nexport function printCopilotCliNextSteps(): void {\n const home = process.env.HOME || process.env.USERPROFILE || '';\n const mcpPath = path.join(home, '.copilot', 'mcp-config.json');\n console.log('\\n Done! Copilot CLI MCP server registered.');\n console.log(` MCP config: ${mcpPath}`);\n console.log(' KiroGraph instructions are in AGENTS.md\\n');\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAoB;AACpB,WAAsB;AAEtB,oBAUO;AACP,0BAAuC;AAEvC,MAAM,uBAAuB;AAEtB,SAAS,uBAAuB,cAA4B;AACjE,QAAM,OAAO,QAAQ,IAAI,QAAQ,QAAQ,IAAI,eAAe;AAC5D,QAAM,UAAU,KAAK,KAAK,MAAM,YAAY,iBAAiB;AAC7D,+BAAU,KAAK,QAAQ,OAAO,CAAC;AAC/B,QAAM,aAAS,wBAAS,OAAO;AAC/B,SAAO,UAAU,OAAO,WAAW,CAAC;AACpC,MAAI,OAAO,QAAQ,mCAAqB,GAAG;AACzC,YAAQ,IAAI,kDAA6C,OAAO,EAAE;AAClE;AAAA,EACF;AACA,SAAO,QAAQ,mCAAqB,IAAI;AAAA,IACtC,MAAM;AAAA,IACN,SAAS;AAAA,IACT,MAAM;AAAA,EACR;AACA,+BAAU,SAAS,MAAM;AACzB,UAAQ,IAAI,iDAA4C,OAAO,EAAE;AACnE;AAEO,SAAS,sBAAsB,aAAqB,aAAmC,uBAAgC,cAAwB,YAAsB,YAAsB,gBAA0B,oBAAoC;AAC9P,QAAM,WAAO,oCAAqB,aAAa,uBAAuB,cAAc,QAAW,YAAY,YAAY,gBAAgB,kBAAkB;AAEzJ,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,gBAAgB;AAC9E,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,IAAI,CAAC;AAC/D,UAAQ,IAAI,gDAA2C,gBAAgB,EAAE;AAEzE,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,QAAM,cAAU,oCAAqB,YAAY,sBAAsB,oBAAgB,4CAAuB,IAAI,CAAC;AACnH,UAAQ,IAAI,UACR,yEACA,uCAAkC;AACxC;AAEO,SAAS,iBAAiB,aAA2B;AAC1D,QAAM,OAAO,QAAQ,IAAI,QAAQ,QAAQ,IAAI,eAAe;AAC5D,QAAM,UAAU,KAAK,KAAK,MAAM,YAAY,iBAAiB;AAC7D,MAAI,GAAG,WAAW,OAAO,GAAG;AAC1B,UAAM,aAAS,wBAAS,OAAO;AAC/B,QAAI,OAAO,UAAU,mCAAqB,GAAG;AAC3C,aAAO,OAAO,QAAQ,mCAAqB;AAC3C,UAAI,OAAO,KAAK,OAAO,OAAO,EAAE,WAAW,EAAG,QAAO,OAAO;AAC5D,mCAAU,SAAS,MAAM;AACzB,cAAQ,IAAI,4DAAuD;AAAA,IACrE;AAAA,EACF;AAEA,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,UAAI,oCAAqB,YAAY,oBAAoB,GAAG;AAC1D,YAAQ,IAAI,+DAA0D;AAAA,EACxE;AACF;AAEO,SAAS,2BAAiC;AAC/C,QAAM,OAAO,QAAQ,IAAI,QAAQ,QAAQ,IAAI,eAAe;AAC5D,QAAM,UAAU,KAAK,KAAK,MAAM,YAAY,iBAAiB;AAC7D,UAAQ,IAAI,8CAA8C;AAC1D,UAAQ,IAAI,iBAAiB,OAAO,EAAE;AACtC,UAAQ,IAAI,6CAA6C;AAC3D;",
6
+ "names": []
7
+ }
@@ -49,15 +49,30 @@ function buildCopilotHooks() {
49
49
  };
50
50
  }
51
51
  function installCopilotEarly(projectRoot) {
52
- const mcpPath = path.join(projectRoot, ".github", "copilot-mcp.json");
53
- (0, import_common.writeMcpServersConfig)(mcpPath, {
52
+ const vscodeMcpPath = path.join(projectRoot, ".vscode", "mcp.json");
53
+ (0, import_common.ensureDir)(path.dirname(vscodeMcpPath));
54
+ const vscodeConfig = (0, import_common.readJson)(vscodeMcpPath);
55
+ vscodeConfig.servers = vscodeConfig.servers ?? {};
56
+ if (!vscodeConfig.servers[import_common.KIROGRAPH_SERVER_NAME]) {
57
+ vscodeConfig.servers[import_common.KIROGRAPH_SERVER_NAME] = {
58
+ type: "stdio",
59
+ command: import_common.KIROGRAPH_COMMAND,
60
+ args: import_common.KIROGRAPH_MCP_ARGS
61
+ };
62
+ (0, import_common.writeJson)(vscodeMcpPath, vscodeConfig);
63
+ console.log(` \u2713 Copilot MCP registered in ${vscodeMcpPath}`);
64
+ } else {
65
+ console.log(` \u2713 Copilot MCP already configured in ${vscodeMcpPath}`);
66
+ }
67
+ const ghMcpPath = path.join(projectRoot, ".github", "copilot-mcp.json");
68
+ const ghWritten = (0, import_common.writeMcpServersConfig)(ghMcpPath, {
54
69
  command: import_common.KIROGRAPH_COMMAND,
55
70
  args: import_common.KIROGRAPH_MCP_ARGS
56
71
  });
57
- console.log(` \u2713 GitHub Copilot MCP server registered in ${mcpPath}`);
72
+ console.log(ghWritten ? ` \u2713 Copilot MCP registered in ${ghMcpPath}` : ` \u2713 Copilot MCP already configured in ${ghMcpPath}`);
58
73
  }
59
- function installCopilotLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory) {
60
- const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true);
74
+ function installCopilotLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture) {
75
+ const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true, enableDocs, enableData, enableSecurity, enableArchitecture);
61
76
  const instructionsPath = path.join(projectRoot, ".kirograph", "copilot.md");
62
77
  (0, import_common.ensureDir)(path.dirname(instructionsPath));
63
78
  fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(opts));
@@ -82,6 +97,16 @@ function installCopilotLate(projectRoot, cavemanMode, shellCompressionLevel, ena
82
97
  console.log(` \u2713 Copilot hooks written to ${hooksPath}`);
83
98
  }
84
99
  function uninitCopilot(projectRoot) {
100
+ const vscodeMcpPath = path.join(projectRoot, ".vscode", "mcp.json");
101
+ if (fs.existsSync(vscodeMcpPath)) {
102
+ const config = (0, import_common.readJson)(vscodeMcpPath);
103
+ if (config.servers?.[import_common.KIROGRAPH_SERVER_NAME]) {
104
+ delete config.servers[import_common.KIROGRAPH_SERVER_NAME];
105
+ if (Object.keys(config.servers).length === 0) delete config.servers;
106
+ (0, import_common.writeJson)(vscodeMcpPath, config);
107
+ console.log(` \u2713 Removed kirograph from .vscode/mcp.json`);
108
+ }
109
+ }
85
110
  const mcpPath = path.join(projectRoot, ".github", "copilot-mcp.json");
86
111
  if ((0, import_common.removeMcpServersConfig)(mcpPath)) {
87
112
  console.log(` \u2713 Removed kirograph from .github/copilot-mcp.json`);
@@ -111,6 +136,7 @@ function uninitCopilot(projectRoot) {
111
136
  }
112
137
  function printCopilotNextSteps() {
113
138
  console.log("\n Done! Restart your editor for the Copilot MCP server and hooks to load.");
139
+ console.log(" MCP registered in .vscode/mcp.json and .github/copilot-mcp.json");
114
140
  console.log(" Auto-sync hook runs on session end.\n");
115
141
  }
116
142
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/copilot.ts"],
4
- "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n removeMcpServersConfig,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n writeMcpServersConfig,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst COPILOT_BLOCK_ID = 'copilot';\n\nfunction buildCopilotHooks(): object {\n return {\n hooks: {\n 'session-end': [\n { command: 'kirograph sync --quiet 2>/dev/null || true' },\n ],\n },\n };\n}\n\nexport function installCopilotEarly(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.github', 'copilot-mcp.json');\n writeMcpServersConfig(mcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(` \u2713 GitHub Copilot MCP server registered in ${mcpPath}`);\n}\n\nexport function installCopilotLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean): void {\n const opts = buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, true);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'copilot.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Copilot instructions written to ${instructionsPath}`);\n\n const rulesPath = path.join(projectRoot, '.github', 'copilot-instructions.md');\n ensureDir(path.dirname(rulesPath));\n const changed = upsertGeneratedBlock(rulesPath, COPILOT_BLOCK_ID, '## KiroGraph', buildAgentInstructions(opts));\n console.log(changed\n ? ` \u2713 .github/copilot-instructions.md updated with KiroGraph instructions`\n : ` \u2713 .github/copilot-instructions.md already up to date`);\n\n // Write hooks\n const hooksPath = path.join(projectRoot, '.github', 'hooks.json');\n const existing = readJson(hooksPath);\n const kgHooks = buildCopilotHooks() as any;\n existing.hooks = existing.hooks ?? {};\n for (const [event, commands] of Object.entries(kgHooks.hooks)) {\n existing.hooks[event] = existing.hooks[event] ?? [];\n for (const cmd of commands as Array<{ command: string }>) {\n if (!existing.hooks[event].some((h: any) => h.command === cmd.command)) {\n existing.hooks[event].push(cmd);\n }\n }\n }\n writeJson(hooksPath, existing);\n console.log(` \u2713 Copilot hooks written to ${hooksPath}`);\n}\n\nexport function uninitCopilot(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.github', 'copilot-mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .github/copilot-mcp.json`);\n }\n\n const rulesPath = path.join(projectRoot, '.github', 'copilot-instructions.md');\n if (removeGeneratedBlock(rulesPath, COPILOT_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from .github/copilot-instructions.md`);\n }\n\n const hooksPath = path.join(projectRoot, '.github', 'hooks.json');\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config.hooks) {\n let changed = false;\n for (const event of Object.keys(config.hooks)) {\n const before = config.hooks[event].length;\n config.hooks[event] = config.hooks[event].filter((h: any) => !h.command?.includes('kirograph'));\n if (config.hooks[event].length === 0) delete config.hooks[event];\n if (config.hooks[event]?.length !== before) changed = true;\n }\n if (Object.keys(config.hooks).length === 0) delete config.hooks;\n if (changed) {\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph hooks from .github/hooks.json`);\n }\n }\n }\n}\n\nexport function printCopilotNextSteps(): void {\n console.log('\\n Done! Restart your editor for the Copilot MCP server and hooks to load.');\n console.log(' Auto-sync hook runs on session end.\\n');\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n removeMcpServersConfig,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n writeMcpServersConfig,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst COPILOT_BLOCK_ID = 'copilot';\n\nfunction buildCopilotHooks(): object {\n return {\n hooks: {\n 'session-end': [\n { command: 'kirograph sync --quiet 2>/dev/null || true' },\n ],\n },\n };\n}\n\nexport function installCopilotEarly(projectRoot: string): void {\n // VS Code Copilot Chat format: .vscode/mcp.json with \"servers\" key\n const vscodeMcpPath = path.join(projectRoot, '.vscode', 'mcp.json');\n ensureDir(path.dirname(vscodeMcpPath));\n const vscodeConfig = readJson(vscodeMcpPath);\n vscodeConfig.servers = vscodeConfig.servers ?? {};\n if (!vscodeConfig.servers[KIROGRAPH_SERVER_NAME]) {\n vscodeConfig.servers[KIROGRAPH_SERVER_NAME] = {\n type: 'stdio',\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n };\n writeJson(vscodeMcpPath, vscodeConfig);\n console.log(` \u2713 Copilot MCP registered in ${vscodeMcpPath}`);\n } else {\n console.log(` \u2713 Copilot MCP already configured in ${vscodeMcpPath}`);\n }\n\n // GitHub Copilot agent mode format: .github/copilot-mcp.json with \"mcpServers\" key\n const ghMcpPath = path.join(projectRoot, '.github', 'copilot-mcp.json');\n const ghWritten = writeMcpServersConfig(ghMcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(ghWritten\n ? ` \u2713 Copilot MCP registered in ${ghMcpPath}`\n : ` \u2713 Copilot MCP already configured in ${ghMcpPath}`);\n}\n\nexport function installCopilotLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean, enableDocs?: boolean, enableData?: boolean, enableSecurity?: boolean, enableArchitecture?: boolean): void {\n const opts = buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, true, enableDocs, enableData, enableSecurity, enableArchitecture);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'copilot.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Copilot instructions written to ${instructionsPath}`);\n\n const rulesPath = path.join(projectRoot, '.github', 'copilot-instructions.md');\n ensureDir(path.dirname(rulesPath));\n const changed = upsertGeneratedBlock(rulesPath, COPILOT_BLOCK_ID, '## KiroGraph', buildAgentInstructions(opts));\n console.log(changed\n ? ` \u2713 .github/copilot-instructions.md updated with KiroGraph instructions`\n : ` \u2713 .github/copilot-instructions.md already up to date`);\n\n // Write hooks\n const hooksPath = path.join(projectRoot, '.github', 'hooks.json');\n const existing = readJson(hooksPath);\n const kgHooks = buildCopilotHooks() as any;\n existing.hooks = existing.hooks ?? {};\n for (const [event, commands] of Object.entries(kgHooks.hooks)) {\n existing.hooks[event] = existing.hooks[event] ?? [];\n for (const cmd of commands as Array<{ command: string }>) {\n if (!existing.hooks[event].some((h: any) => h.command === cmd.command)) {\n existing.hooks[event].push(cmd);\n }\n }\n }\n writeJson(hooksPath, existing);\n console.log(` \u2713 Copilot hooks written to ${hooksPath}`);\n}\n\nexport function uninitCopilot(projectRoot: string): void {\n // Remove from .vscode/mcp.json (servers key)\n const vscodeMcpPath = path.join(projectRoot, '.vscode', 'mcp.json');\n if (fs.existsSync(vscodeMcpPath)) {\n const config = readJson(vscodeMcpPath);\n if (config.servers?.[KIROGRAPH_SERVER_NAME]) {\n delete config.servers[KIROGRAPH_SERVER_NAME];\n if (Object.keys(config.servers).length === 0) delete config.servers;\n writeJson(vscodeMcpPath, config);\n console.log(` \u2713 Removed kirograph from .vscode/mcp.json`);\n }\n }\n\n // Remove from .github/copilot-mcp.json\n const mcpPath = path.join(projectRoot, '.github', 'copilot-mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .github/copilot-mcp.json`);\n }\n\n const rulesPath = path.join(projectRoot, '.github', 'copilot-instructions.md');\n if (removeGeneratedBlock(rulesPath, COPILOT_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from .github/copilot-instructions.md`);\n }\n\n const hooksPath = path.join(projectRoot, '.github', 'hooks.json');\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config.hooks) {\n let changed = false;\n for (const event of Object.keys(config.hooks)) {\n const before = config.hooks[event].length;\n config.hooks[event] = config.hooks[event].filter((h: any) => !h.command?.includes('kirograph'));\n if (config.hooks[event].length === 0) delete config.hooks[event];\n if (config.hooks[event]?.length !== before) changed = true;\n }\n if (Object.keys(config.hooks).length === 0) delete config.hooks;\n if (changed) {\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph hooks from .github/hooks.json`);\n }\n }\n }\n}\n\nexport function printCopilotNextSteps(): void {\n console.log('\\n Done! Restart your editor for the Copilot MCP server and hooks to load.');\n console.log(' MCP registered in .vscode/mcp.json and .github/copilot-mcp.json');\n console.log(' Auto-sync hook runs on session end.\\n');\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -55,15 +55,15 @@ function buildCursorHooks(enableCompression) {
55
55
  }
56
56
  function installCursorEarly(projectRoot) {
57
57
  const mcpPath = path.join(projectRoot, ".cursor", "mcp.json");
58
- (0, import_common.writeMcpServersConfig)(mcpPath, {
58
+ const written = (0, import_common.writeMcpServersConfig)(mcpPath, {
59
59
  command: import_common.KIROGRAPH_COMMAND,
60
60
  args: import_common.KIROGRAPH_MCP_ARGS
61
61
  });
62
- console.log(` \u2713 Cursor MCP server registered in ${mcpPath}`);
62
+ console.log(written ? ` \u2713 Cursor MCP server registered in ${mcpPath}` : ` \u2713 Cursor MCP already configured in ${mcpPath}`);
63
63
  }
64
- function installCursorLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory) {
64
+ function installCursorLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture) {
65
65
  const enableCompression = shellCompressionLevel !== void 0 && shellCompressionLevel !== "off";
66
- const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true);
66
+ const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true, enableDocs, enableData, enableSecurity, enableArchitecture);
67
67
  const instructionsPath = path.join(projectRoot, ".kirograph", "cursor.md");
68
68
  (0, import_common.ensureDir)(path.dirname(instructionsPath));
69
69
  fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(opts));
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/cursor.ts"],
4
- "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n removeMcpServersConfig,\n writeMcpServersConfig,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CURSOR_RULES_FILE = 'kirograph.mdc';\nconst CURSOR_HOOKS_FILE = 'hooks.json';\n\nfunction buildCursorHooks(enableCompression?: boolean): object {\n const hooks: Record<string, Array<{ command: string }>> = {\n stop: [\n { command: 'kirograph sync --quiet 2>/dev/null || true' },\n ],\n };\n\n if (enableCompression) {\n hooks.beforeShellExecution = [\n { command: 'kirograph compress-hint 2>/dev/null || true' },\n ];\n }\n\n return { version: 1, hooks };\n}\n\nexport function installCursorEarly(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.cursor', 'mcp.json');\n writeMcpServersConfig(mcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(` \u2713 Cursor MCP server registered in ${mcpPath}`);\n}\n\nexport function installCursorLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean): void {\n const enableCompression = shellCompressionLevel !== undefined && shellCompressionLevel !== 'off';\n const opts = buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, true);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'cursor.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Cursor instructions written to ${instructionsPath}`);\n\n const rulesDir = path.join(projectRoot, '.cursor', 'rules');\n ensureDir(rulesDir);\n const rulePath = path.join(rulesDir, CURSOR_RULES_FILE);\n const frontmatter = [\n '---',\n 'description: KiroGraph semantic code knowledge graph \u2014 use graph tools instead of grep/glob',\n 'alwaysApply: true',\n '---',\n '',\n ].join('\\n');\n fs.writeFileSync(rulePath, frontmatter + buildAgentInstructions(opts));\n console.log(` \u2713 Cursor rule written to ${rulePath}`);\n\n // Write hooks\n const hooksPath = path.join(projectRoot, '.cursor', CURSOR_HOOKS_FILE);\n const existing = readJson(hooksPath);\n const kirographHooks = buildCursorHooks(enableCompression);\n // Merge: add kirograph hooks without overwriting user's existing hooks\n const merged = { ...existing, ...kirographHooks };\n if (existing.hooks) {\n merged.hooks = { ...existing.hooks };\n const kgHooks = (kirographHooks as any).hooks;\n for (const [event, commands] of Object.entries(kgHooks)) {\n merged.hooks[event] = merged.hooks[event] ?? [];\n // Avoid duplicates\n for (const cmd of commands as Array<{ command: string }>) {\n if (!merged.hooks[event].some((h: any) => h.command === cmd.command)) {\n merged.hooks[event].push(cmd);\n }\n }\n }\n }\n writeJson(hooksPath, merged);\n console.log(` \u2713 Cursor hooks written to ${hooksPath}`);\n}\n\nexport function uninitCursor(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.cursor', 'mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .cursor/mcp.json`);\n }\n\n const rulePath = path.join(projectRoot, '.cursor', 'rules', CURSOR_RULES_FILE);\n if (fs.existsSync(rulePath)) {\n fs.unlinkSync(rulePath);\n console.log(` \u2713 Removed .cursor/rules/${CURSOR_RULES_FILE}`);\n }\n\n // Remove kirograph hooks from hooks.json\n const hooksPath = path.join(projectRoot, '.cursor', CURSOR_HOOKS_FILE);\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config.hooks) {\n let changed = false;\n for (const event of Object.keys(config.hooks)) {\n const before = config.hooks[event].length;\n config.hooks[event] = config.hooks[event].filter((h: any) => !h.command?.includes('kirograph'));\n if (config.hooks[event].length === 0) delete config.hooks[event];\n if (config.hooks[event]?.length !== before) changed = true;\n }\n if (Object.keys(config.hooks).length === 0) delete config.hooks;\n if (changed) {\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph hooks from .cursor/hooks.json`);\n }\n }\n }\n}\n\nexport function printCursorNextSteps(): void {\n console.log('\\n Done! Restart Cursor for the MCP server and hooks to load.');\n console.log(' The kirograph rule is active in .cursor/rules/kirograph.mdc');\n console.log(' Auto-sync hook runs on task completion.\\n');\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AAEtB,oBASO;AACP,0BAAuC;AAEvC,MAAM,oBAAoB;AAC1B,MAAM,oBAAoB;AAE1B,SAAS,iBAAiB,mBAAqC;AAC7D,QAAM,QAAoD;AAAA,IACxD,MAAM;AAAA,MACJ,EAAE,SAAS,6CAA6C;AAAA,IAC1D;AAAA,EACF;AAEA,MAAI,mBAAmB;AACrB,UAAM,uBAAuB;AAAA,MAC3B,EAAE,SAAS,8CAA8C;AAAA,IAC3D;AAAA,EACF;AAEA,SAAO,EAAE,SAAS,GAAG,MAAM;AAC7B;AAEO,SAAS,mBAAmB,aAA2B;AAC5D,QAAM,UAAU,KAAK,KAAK,aAAa,WAAW,UAAU;AAC5D,2CAAsB,SAAS;AAAA,IAC7B,SAAS;AAAA,IACT,MAAM;AAAA,EACR,CAAC;AACD,UAAQ,IAAI,4CAAuC,OAAO,EAAE;AAC9D;AAEO,SAAS,kBAAkB,aAAqB,aAAmC,uBAAgC,cAA8B;AACtJ,QAAM,oBAAoB,0BAA0B,UAAa,0BAA0B;AAC3F,QAAM,WAAO,oCAAqB,aAAa,uBAAuB,cAAc,IAAI;AAExF,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,WAAW;AACzE,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,IAAI,CAAC;AAC/D,UAAQ,IAAI,2CAAsC,gBAAgB,EAAE;AAEpE,QAAM,WAAW,KAAK,KAAK,aAAa,WAAW,OAAO;AAC1D,+BAAU,QAAQ;AAClB,QAAM,WAAW,KAAK,KAAK,UAAU,iBAAiB;AACtD,QAAM,cAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACX,KAAG,cAAc,UAAU,kBAAc,4CAAuB,IAAI,CAAC;AACrE,UAAQ,IAAI,mCAA8B,QAAQ,EAAE;AAGpD,QAAM,YAAY,KAAK,KAAK,aAAa,WAAW,iBAAiB;AACrE,QAAM,eAAW,wBAAS,SAAS;AACnC,QAAM,iBAAiB,iBAAiB,iBAAiB;AAEzD,QAAM,SAAS,EAAE,GAAG,UAAU,GAAG,eAAe;AAChD,MAAI,SAAS,OAAO;AAClB,WAAO,QAAQ,EAAE,GAAG,SAAS,MAAM;AACnC,UAAM,UAAW,eAAuB;AACxC,eAAW,CAAC,OAAO,QAAQ,KAAK,OAAO,QAAQ,OAAO,GAAG;AACvD,aAAO,MAAM,KAAK,IAAI,OAAO,MAAM,KAAK,KAAK,CAAC;AAE9C,iBAAW,OAAO,UAAwC;AACxD,YAAI,CAAC,OAAO,MAAM,KAAK,EAAE,KAAK,CAAC,MAAW,EAAE,YAAY,IAAI,OAAO,GAAG;AACpE,iBAAO,MAAM,KAAK,EAAE,KAAK,GAAG;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,+BAAU,WAAW,MAAM;AAC3B,UAAQ,IAAI,oCAA+B,SAAS,EAAE;AACxD;AAEO,SAAS,aAAa,aAA2B;AACtD,QAAM,UAAU,KAAK,KAAK,aAAa,WAAW,UAAU;AAC5D,UAAI,sCAAuB,OAAO,GAAG;AACnC,YAAQ,IAAI,kDAA6C;AAAA,EAC3D;AAEA,QAAM,WAAW,KAAK,KAAK,aAAa,WAAW,SAAS,iBAAiB;AAC7E,MAAI,GAAG,WAAW,QAAQ,GAAG;AAC3B,OAAG,WAAW,QAAQ;AACtB,YAAQ,IAAI,kCAA6B,iBAAiB,EAAE;AAAA,EAC9D;AAGA,QAAM,YAAY,KAAK,KAAK,aAAa,WAAW,iBAAiB;AACrE,MAAI,GAAG,WAAW,SAAS,GAAG;AAC5B,UAAM,aAAS,wBAAS,SAAS;AACjC,QAAI,OAAO,OAAO;AAChB,UAAI,UAAU;AACd,iBAAW,SAAS,OAAO,KAAK,OAAO,KAAK,GAAG;AAC7C,cAAM,SAAS,OAAO,MAAM,KAAK,EAAE;AACnC,eAAO,MAAM,KAAK,IAAI,OAAO,MAAM,KAAK,EAAE,OAAO,CAAC,MAAW,CAAC,EAAE,SAAS,SAAS,WAAW,CAAC;AAC9F,YAAI,OAAO,MAAM,KAAK,EAAE,WAAW,EAAG,QAAO,OAAO,MAAM,KAAK;AAC/D,YAAI,OAAO,MAAM,KAAK,GAAG,WAAW,OAAQ,WAAU;AAAA,MACxD;AACA,UAAI,OAAO,KAAK,OAAO,KAAK,EAAE,WAAW,EAAG,QAAO,OAAO;AAC1D,UAAI,SAAS;AACX,qCAAU,WAAW,MAAM;AAC3B,gBAAQ,IAAI,0DAAqD;AAAA,MACnE;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,uBAA6B;AAC3C,UAAQ,IAAI,gEAAgE;AAC5E,UAAQ,IAAI,+DAA+D;AAC3E,UAAQ,IAAI,6CAA6C;AAC3D;",
4
+ "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n removeMcpServersConfig,\n writeMcpServersConfig,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CURSOR_RULES_FILE = 'kirograph.mdc';\nconst CURSOR_HOOKS_FILE = 'hooks.json';\n\nfunction buildCursorHooks(enableCompression?: boolean): object {\n const hooks: Record<string, Array<{ command: string }>> = {\n stop: [\n { command: 'kirograph sync --quiet 2>/dev/null || true' },\n ],\n };\n\n if (enableCompression) {\n hooks.beforeShellExecution = [\n { command: 'kirograph compress-hint 2>/dev/null || true' },\n ];\n }\n\n return { version: 1, hooks };\n}\n\nexport function installCursorEarly(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.cursor', 'mcp.json');\n const written = writeMcpServersConfig(mcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(written\n ? ` \u2713 Cursor MCP server registered in ${mcpPath}`\n : ` \u2713 Cursor MCP already configured in ${mcpPath}`);\n}\n\nexport function installCursorLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean, enableDocs?: boolean, enableData?: boolean, enableSecurity?: boolean, enableArchitecture?: boolean): void {\n const enableCompression = shellCompressionLevel !== undefined && shellCompressionLevel !== 'off';\n const opts = buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, true, enableDocs, enableData, enableSecurity, enableArchitecture);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'cursor.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Cursor instructions written to ${instructionsPath}`);\n\n const rulesDir = path.join(projectRoot, '.cursor', 'rules');\n ensureDir(rulesDir);\n const rulePath = path.join(rulesDir, CURSOR_RULES_FILE);\n const frontmatter = [\n '---',\n 'description: KiroGraph semantic code knowledge graph \u2014 use graph tools instead of grep/glob',\n 'alwaysApply: true',\n '---',\n '',\n ].join('\\n');\n fs.writeFileSync(rulePath, frontmatter + buildAgentInstructions(opts));\n console.log(` \u2713 Cursor rule written to ${rulePath}`);\n\n // Write hooks\n const hooksPath = path.join(projectRoot, '.cursor', CURSOR_HOOKS_FILE);\n const existing = readJson(hooksPath);\n const kirographHooks = buildCursorHooks(enableCompression);\n // Merge: add kirograph hooks without overwriting user's existing hooks\n const merged = { ...existing, ...kirographHooks };\n if (existing.hooks) {\n merged.hooks = { ...existing.hooks };\n const kgHooks = (kirographHooks as any).hooks;\n for (const [event, commands] of Object.entries(kgHooks)) {\n merged.hooks[event] = merged.hooks[event] ?? [];\n // Avoid duplicates\n for (const cmd of commands as Array<{ command: string }>) {\n if (!merged.hooks[event].some((h: any) => h.command === cmd.command)) {\n merged.hooks[event].push(cmd);\n }\n }\n }\n }\n writeJson(hooksPath, merged);\n console.log(` \u2713 Cursor hooks written to ${hooksPath}`);\n}\n\nexport function uninitCursor(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.cursor', 'mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .cursor/mcp.json`);\n }\n\n const rulePath = path.join(projectRoot, '.cursor', 'rules', CURSOR_RULES_FILE);\n if (fs.existsSync(rulePath)) {\n fs.unlinkSync(rulePath);\n console.log(` \u2713 Removed .cursor/rules/${CURSOR_RULES_FILE}`);\n }\n\n // Remove kirograph hooks from hooks.json\n const hooksPath = path.join(projectRoot, '.cursor', CURSOR_HOOKS_FILE);\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config.hooks) {\n let changed = false;\n for (const event of Object.keys(config.hooks)) {\n const before = config.hooks[event].length;\n config.hooks[event] = config.hooks[event].filter((h: any) => !h.command?.includes('kirograph'));\n if (config.hooks[event].length === 0) delete config.hooks[event];\n if (config.hooks[event]?.length !== before) changed = true;\n }\n if (Object.keys(config.hooks).length === 0) delete config.hooks;\n if (changed) {\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph hooks from .cursor/hooks.json`);\n }\n }\n }\n}\n\nexport function printCursorNextSteps(): void {\n console.log('\\n Done! Restart Cursor for the MCP server and hooks to load.');\n console.log(' The kirograph rule is active in .cursor/rules/kirograph.mdc');\n console.log(' Auto-sync hook runs on task completion.\\n');\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -69,8 +69,8 @@ function installDevinEarly(projectRoot) {
69
69
  (0, import_common.writeJson)(configPath, config);
70
70
  console.log(` \u2713 Devin MCP server registered in ${configPath}`);
71
71
  }
72
- function installDevinLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory) {
73
- const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true);
72
+ function installDevinLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture) {
73
+ const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true, enableDocs, enableData, enableSecurity, enableArchitecture);
74
74
  const instructionsPath = path.join(projectRoot, ".kirograph", "devin.md");
75
75
  (0, import_common.ensureDir)(path.dirname(instructionsPath));
76
76
  fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(opts));
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/devin.ts"],
4
- "sourcesContent": ["/**\n * Devin for Terminal target.\n *\n * MCP: .devin/config.json (project-level, standard mcpServers format)\n * Hooks: .devin/hooks.v1.json (Claude Code compatible format)\n * Instructions: AGENTS.md (upsert block)\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst DEVIN_BLOCK_ID = 'devin';\n\nfunction buildDevinHooks(): object {\n return {\n hooks: {\n Stop: [\n {\n matcher: '',\n hooks: [\n {\n type: 'command',\n command: 'kirograph sync --quiet 2>/dev/null || true',\n timeout: 30,\n },\n ],\n },\n ],\n },\n };\n}\n\nexport function installDevinEarly(projectRoot: string): void {\n // Write MCP to .devin/config.json\n const configPath = path.join(projectRoot, '.devin', 'config.json');\n ensureDir(path.dirname(configPath));\n const config = readJson(configPath);\n config.mcpServers = config.mcpServers ?? {};\n config.mcpServers[KIROGRAPH_SERVER_NAME] = {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n };\n writeJson(configPath, config);\n console.log(` \u2713 Devin MCP server registered in ${configPath}`);\n}\n\nexport function installDevinLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean): void {\n const opts = buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, true);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'devin.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Devin instructions written to ${instructionsPath}`);\n\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n const changed = upsertGeneratedBlock(agentsPath, DEVIN_BLOCK_ID, '## KiroGraph', buildAgentInstructions(opts));\n console.log(changed\n ? ` \u2713 AGENTS.md updated with KiroGraph instructions (Devin)`\n : ` \u2713 AGENTS.md already up to date`);\n\n // Write hooks to .devin/hooks.v1.json (Claude Code compatible)\n const hooksPath = path.join(projectRoot, '.devin', 'hooks.v1.json');\n const existing = readJson(hooksPath);\n const kgHooks = buildDevinHooks() as any;\n existing.hooks = existing.hooks ?? {};\n for (const [event, matchers] of Object.entries(kgHooks.hooks)) {\n existing.hooks[event] = existing.hooks[event] ?? [];\n const hasKirograph = existing.hooks[event].some((m: any) =>\n m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (!hasKirograph) {\n for (const matcher of matchers as any[]) {\n existing.hooks[event].push(matcher);\n }\n }\n }\n writeJson(hooksPath, existing);\n console.log(` \u2713 Devin hooks written to ${hooksPath}`);\n}\n\nexport function uninitDevin(projectRoot: string): void {\n // Remove MCP\n const configPath = path.join(projectRoot, '.devin', 'config.json');\n if (fs.existsSync(configPath)) {\n const config = readJson(configPath);\n if (config.mcpServers?.[KIROGRAPH_SERVER_NAME]) {\n delete config.mcpServers[KIROGRAPH_SERVER_NAME];\n if (Object.keys(config.mcpServers).length === 0) delete config.mcpServers;\n writeJson(configPath, config);\n console.log(` \u2713 Removed kirograph from .devin/config.json`);\n }\n }\n\n // Remove AGENTS.md block\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n if (removeGeneratedBlock(agentsPath, DEVIN_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from AGENTS.md (Devin)`);\n }\n\n // Remove hooks\n const hooksPath = path.join(projectRoot, '.devin', 'hooks.v1.json');\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config.hooks) {\n let changed = false;\n for (const event of Object.keys(config.hooks)) {\n const before = config.hooks[event].length;\n config.hooks[event] = config.hooks[event].filter((m: any) =>\n !m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (config.hooks[event].length === 0) delete config.hooks[event];\n if (config.hooks[event]?.length !== before) changed = true;\n }\n if (Object.keys(config.hooks).length === 0) delete config.hooks;\n if (changed) {\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph hooks from .devin/hooks.v1.json`);\n }\n }\n }\n}\n\nexport function printDevinNextSteps(): void {\n console.log('\\n Done! Restart Devin for Terminal for the MCP server and hooks to load.');\n console.log(' MCP is in .devin/config.json');\n console.log(' Auto-sync hook is in .devin/hooks.v1.json');\n console.log(' KiroGraph instructions are in AGENTS.md\\n');\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Devin for Terminal target.\n *\n * MCP: .devin/config.json (project-level, standard mcpServers format)\n * Hooks: .devin/hooks.v1.json (Claude Code compatible format)\n * Instructions: AGENTS.md (upsert block)\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst DEVIN_BLOCK_ID = 'devin';\n\nfunction buildDevinHooks(): object {\n return {\n hooks: {\n Stop: [\n {\n matcher: '',\n hooks: [\n {\n type: 'command',\n command: 'kirograph sync --quiet 2>/dev/null || true',\n timeout: 30,\n },\n ],\n },\n ],\n },\n };\n}\n\nexport function installDevinEarly(projectRoot: string): void {\n // Write MCP to .devin/config.json\n const configPath = path.join(projectRoot, '.devin', 'config.json');\n ensureDir(path.dirname(configPath));\n const config = readJson(configPath);\n config.mcpServers = config.mcpServers ?? {};\n config.mcpServers[KIROGRAPH_SERVER_NAME] = {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n };\n writeJson(configPath, config);\n console.log(` \u2713 Devin MCP server registered in ${configPath}`);\n}\n\nexport function installDevinLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean, enableDocs?: boolean, enableData?: boolean, enableSecurity?: boolean, enableArchitecture?: boolean): void {\n const opts = buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, true, enableDocs, enableData, enableSecurity, enableArchitecture);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'devin.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Devin instructions written to ${instructionsPath}`);\n\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n const changed = upsertGeneratedBlock(agentsPath, DEVIN_BLOCK_ID, '## KiroGraph', buildAgentInstructions(opts));\n console.log(changed\n ? ` \u2713 AGENTS.md updated with KiroGraph instructions (Devin)`\n : ` \u2713 AGENTS.md already up to date`);\n\n // Write hooks to .devin/hooks.v1.json (Claude Code compatible)\n const hooksPath = path.join(projectRoot, '.devin', 'hooks.v1.json');\n const existing = readJson(hooksPath);\n const kgHooks = buildDevinHooks() as any;\n existing.hooks = existing.hooks ?? {};\n for (const [event, matchers] of Object.entries(kgHooks.hooks)) {\n existing.hooks[event] = existing.hooks[event] ?? [];\n const hasKirograph = existing.hooks[event].some((m: any) =>\n m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (!hasKirograph) {\n for (const matcher of matchers as any[]) {\n existing.hooks[event].push(matcher);\n }\n }\n }\n writeJson(hooksPath, existing);\n console.log(` \u2713 Devin hooks written to ${hooksPath}`);\n}\n\nexport function uninitDevin(projectRoot: string): void {\n // Remove MCP\n const configPath = path.join(projectRoot, '.devin', 'config.json');\n if (fs.existsSync(configPath)) {\n const config = readJson(configPath);\n if (config.mcpServers?.[KIROGRAPH_SERVER_NAME]) {\n delete config.mcpServers[KIROGRAPH_SERVER_NAME];\n if (Object.keys(config.mcpServers).length === 0) delete config.mcpServers;\n writeJson(configPath, config);\n console.log(` \u2713 Removed kirograph from .devin/config.json`);\n }\n }\n\n // Remove AGENTS.md block\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n if (removeGeneratedBlock(agentsPath, DEVIN_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from AGENTS.md (Devin)`);\n }\n\n // Remove hooks\n const hooksPath = path.join(projectRoot, '.devin', 'hooks.v1.json');\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config.hooks) {\n let changed = false;\n for (const event of Object.keys(config.hooks)) {\n const before = config.hooks[event].length;\n config.hooks[event] = config.hooks[event].filter((m: any) =>\n !m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (config.hooks[event].length === 0) delete config.hooks[event];\n if (config.hooks[event]?.length !== before) changed = true;\n }\n if (Object.keys(config.hooks).length === 0) delete config.hooks;\n if (changed) {\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph hooks from .devin/hooks.v1.json`);\n }\n }\n }\n}\n\nexport function printDevinNextSteps(): void {\n console.log('\\n Done! Restart Devin for Terminal for the MCP server and hooks to load.');\n console.log(' MCP is in .devin/config.json');\n console.log(' Auto-sync hook is in .devin/hooks.v1.json');\n console.log(' KiroGraph instructions are in AGENTS.md\\n');\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -51,8 +51,8 @@ function installGeminiCliEarly(projectRoot) {
51
51
  (0, import_common.writeJson)(settingsPath, settings);
52
52
  console.log(` \u2713 Gemini CLI MCP server registered in ${settingsPath}`);
53
53
  }
54
- function installGeminiCliLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory) {
55
- const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true);
54
+ function installGeminiCliLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture) {
55
+ const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true, enableDocs, enableData, enableSecurity, enableArchitecture);
56
56
  const instructionsPath = path.join(projectRoot, ".kirograph", "gemini-cli.md");
57
57
  (0, import_common.ensureDir)(path.dirname(instructionsPath));
58
58
  fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(opts));
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/gemini-cli.ts"],
4
- "sourcesContent": ["/**\n * Gemini CLI target.\n *\n * MCP: .gemini/settings.json (project-level, mcpServers format)\n * Hooks: .gemini/settings.json (hooks section with SessionEnd event)\n * Instructions: GEMINI.md (upsert block)\n *\n * NOTE: This is NOT an alias for Antigravity. Gemini CLI and Antigravity IDE\n * use different config paths and hook formats.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst GEMINI_CLI_BLOCK_ID = 'gemini-cli';\n\nexport function installGeminiCliEarly(projectRoot: string): void {\n // Write MCP + hooks to .gemini/settings.json\n const settingsPath = path.join(projectRoot, '.gemini', 'settings.json');\n ensureDir(path.dirname(settingsPath));\n const settings = readJson(settingsPath);\n\n // MCP server\n settings.mcpServers = settings.mcpServers ?? {};\n settings.mcpServers[KIROGRAPH_SERVER_NAME] = {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n };\n\n writeJson(settingsPath, settings);\n console.log(` \u2713 Gemini CLI MCP server registered in ${settingsPath}`);\n}\n\nexport function installGeminiCliLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean): void {\n const opts = buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, true);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'gemini-cli.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Gemini CLI instructions written to ${instructionsPath}`);\n\n const geminiPath = path.join(projectRoot, 'GEMINI.md');\n const changed = upsertGeneratedBlock(geminiPath, GEMINI_CLI_BLOCK_ID, '## KiroGraph', buildAgentInstructions(opts));\n console.log(changed\n ? ` \u2713 GEMINI.md updated with KiroGraph instructions`\n : ` \u2713 GEMINI.md already up to date`);\n\n // Write hooks to .gemini/settings.json\n const settingsPath = path.join(projectRoot, '.gemini', 'settings.json');\n const settings = readJson(settingsPath);\n settings.hooks = settings.hooks ?? {};\n settings.hooks.SessionEnd = settings.hooks.SessionEnd ?? [];\n\n const hasKirograph = settings.hooks.SessionEnd.some((m: any) =>\n m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (!hasKirograph) {\n settings.hooks.SessionEnd.push({\n hooks: [\n {\n type: 'command',\n command: 'kirograph sync --quiet 2>/dev/null || true',\n timeout: 5000,\n },\n ],\n });\n }\n\n writeJson(settingsPath, settings);\n console.log(` \u2713 Gemini CLI hooks written to ${settingsPath}`);\n}\n\nexport function uninitGeminiCli(projectRoot: string): void {\n const settingsPath = path.join(projectRoot, '.gemini', 'settings.json');\n if (fs.existsSync(settingsPath)) {\n const settings = readJson(settingsPath);\n let changed = false;\n\n // Remove MCP\n if (settings.mcpServers?.[KIROGRAPH_SERVER_NAME]) {\n delete settings.mcpServers[KIROGRAPH_SERVER_NAME];\n if (Object.keys(settings.mcpServers).length === 0) delete settings.mcpServers;\n changed = true;\n console.log(` \u2713 Removed kirograph from .gemini/settings.json mcpServers`);\n }\n\n // Remove hooks\n if (settings.hooks?.SessionEnd) {\n const before = settings.hooks.SessionEnd.length;\n settings.hooks.SessionEnd = settings.hooks.SessionEnd.filter((m: any) =>\n !m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (settings.hooks.SessionEnd.length === 0) delete settings.hooks.SessionEnd;\n if (Object.keys(settings.hooks).length === 0) delete settings.hooks;\n if (settings.hooks?.SessionEnd?.length !== before) {\n changed = true;\n console.log(` \u2713 Removed kirograph hooks from .gemini/settings.json`);\n }\n }\n\n if (changed) writeJson(settingsPath, settings);\n }\n\n const geminiPath = path.join(projectRoot, 'GEMINI.md');\n if (removeGeneratedBlock(geminiPath, GEMINI_CLI_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from GEMINI.md`);\n }\n}\n\nexport function printGeminiCliNextSteps(): void {\n console.log('\\n Done! Restart Gemini CLI for the MCP server and hooks to load.');\n console.log(' MCP and hooks are in .gemini/settings.json');\n console.log(' KiroGraph instructions are in GEMINI.md\\n');\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,SAAoB;AACpB,WAAsB;AAEtB,oBAUO;AACP,0BAAuC;AAEvC,MAAM,sBAAsB;AAErB,SAAS,sBAAsB,aAA2B;AAE/D,QAAM,eAAe,KAAK,KAAK,aAAa,WAAW,eAAe;AACtE,+BAAU,KAAK,QAAQ,YAAY,CAAC;AACpC,QAAM,eAAW,wBAAS,YAAY;AAGtC,WAAS,aAAa,SAAS,cAAc,CAAC;AAC9C,WAAS,WAAW,mCAAqB,IAAI;AAAA,IAC3C,SAAS;AAAA,IACT,MAAM;AAAA,EACR;AAEA,+BAAU,cAAc,QAAQ;AAChC,UAAQ,IAAI,gDAA2C,YAAY,EAAE;AACvE;AAEO,SAAS,qBAAqB,aAAqB,aAAmC,uBAAgC,cAA8B;AACzJ,QAAM,WAAO,oCAAqB,aAAa,uBAAuB,cAAc,IAAI;AAExF,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,eAAe;AAC7E,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,IAAI,CAAC;AAC/D,UAAQ,IAAI,+CAA0C,gBAAgB,EAAE;AAExE,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,QAAM,cAAU,oCAAqB,YAAY,qBAAqB,oBAAgB,4CAAuB,IAAI,CAAC;AAClH,UAAQ,IAAI,UACR,2DACA,uCAAkC;AAGtC,QAAM,eAAe,KAAK,KAAK,aAAa,WAAW,eAAe;AACtE,QAAM,eAAW,wBAAS,YAAY;AACtC,WAAS,QAAQ,SAAS,SAAS,CAAC;AACpC,WAAS,MAAM,aAAa,SAAS,MAAM,cAAc,CAAC;AAE1D,QAAM,eAAe,SAAS,MAAM,WAAW;AAAA,IAAK,CAAC,MACnD,EAAE,OAAO,KAAK,CAAC,MAAW,EAAE,SAAS,SAAS,WAAW,CAAC;AAAA,EAC5D;AACA,MAAI,CAAC,cAAc;AACjB,aAAS,MAAM,WAAW,KAAK;AAAA,MAC7B,OAAO;AAAA,QACL;AAAA,UACE,MAAM;AAAA,UACN,SAAS;AAAA,UACT,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,+BAAU,cAAc,QAAQ;AAChC,UAAQ,IAAI,wCAAmC,YAAY,EAAE;AAC/D;AAEO,SAAS,gBAAgB,aAA2B;AACzD,QAAM,eAAe,KAAK,KAAK,aAAa,WAAW,eAAe;AACtE,MAAI,GAAG,WAAW,YAAY,GAAG;AAC/B,UAAM,eAAW,wBAAS,YAAY;AACtC,QAAI,UAAU;AAGd,QAAI,SAAS,aAAa,mCAAqB,GAAG;AAChD,aAAO,SAAS,WAAW,mCAAqB;AAChD,UAAI,OAAO,KAAK,SAAS,UAAU,EAAE,WAAW,EAAG,QAAO,SAAS;AACnE,gBAAU;AACV,cAAQ,IAAI,kEAA6D;AAAA,IAC3E;AAGA,QAAI,SAAS,OAAO,YAAY;AAC9B,YAAM,SAAS,SAAS,MAAM,WAAW;AACzC,eAAS,MAAM,aAAa,SAAS,MAAM,WAAW;AAAA,QAAO,CAAC,MAC5D,CAAC,EAAE,OAAO,KAAK,CAAC,MAAW,EAAE,SAAS,SAAS,WAAW,CAAC;AAAA,MAC7D;AACA,UAAI,SAAS,MAAM,WAAW,WAAW,EAAG,QAAO,SAAS,MAAM;AAClE,UAAI,OAAO,KAAK,SAAS,KAAK,EAAE,WAAW,EAAG,QAAO,SAAS;AAC9D,UAAI,SAAS,OAAO,YAAY,WAAW,QAAQ;AACjD,kBAAU;AACV,gBAAQ,IAAI,6DAAwD;AAAA,MACtE;AAAA,IACF;AAEA,QAAI,QAAS,8BAAU,cAAc,QAAQ;AAAA,EAC/C;AAEA,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,UAAI,oCAAqB,YAAY,mBAAmB,GAAG;AACzD,YAAQ,IAAI,iDAA4C;AAAA,EAC1D;AACF;AAEO,SAAS,0BAAgC;AAC9C,UAAQ,IAAI,oEAAoE;AAChF,UAAQ,IAAI,8CAA8C;AAC1D,UAAQ,IAAI,6CAA6C;AAC3D;",
4
+ "sourcesContent": ["/**\n * Gemini CLI target.\n *\n * MCP: .gemini/settings.json (project-level, mcpServers format)\n * Hooks: .gemini/settings.json (hooks section with SessionEnd event)\n * Instructions: GEMINI.md (upsert block)\n *\n * NOTE: This is NOT an alias for Antigravity. Gemini CLI and Antigravity IDE\n * use different config paths and hook formats.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst GEMINI_CLI_BLOCK_ID = 'gemini-cli';\n\nexport function installGeminiCliEarly(projectRoot: string): void {\n // Write MCP + hooks to .gemini/settings.json\n const settingsPath = path.join(projectRoot, '.gemini', 'settings.json');\n ensureDir(path.dirname(settingsPath));\n const settings = readJson(settingsPath);\n\n // MCP server\n settings.mcpServers = settings.mcpServers ?? {};\n settings.mcpServers[KIROGRAPH_SERVER_NAME] = {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n };\n\n writeJson(settingsPath, settings);\n console.log(` \u2713 Gemini CLI MCP server registered in ${settingsPath}`);\n}\n\nexport function installGeminiCliLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean, enableDocs?: boolean, enableData?: boolean, enableSecurity?: boolean, enableArchitecture?: boolean): void {\n const opts = buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, true, enableDocs, enableData, enableSecurity, enableArchitecture);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'gemini-cli.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Gemini CLI instructions written to ${instructionsPath}`);\n\n const geminiPath = path.join(projectRoot, 'GEMINI.md');\n const changed = upsertGeneratedBlock(geminiPath, GEMINI_CLI_BLOCK_ID, '## KiroGraph', buildAgentInstructions(opts));\n console.log(changed\n ? ` \u2713 GEMINI.md updated with KiroGraph instructions`\n : ` \u2713 GEMINI.md already up to date`);\n\n // Write hooks to .gemini/settings.json\n const settingsPath = path.join(projectRoot, '.gemini', 'settings.json');\n const settings = readJson(settingsPath);\n settings.hooks = settings.hooks ?? {};\n settings.hooks.SessionEnd = settings.hooks.SessionEnd ?? [];\n\n const hasKirograph = settings.hooks.SessionEnd.some((m: any) =>\n m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (!hasKirograph) {\n settings.hooks.SessionEnd.push({\n hooks: [\n {\n type: 'command',\n command: 'kirograph sync --quiet 2>/dev/null || true',\n timeout: 5000,\n },\n ],\n });\n }\n\n writeJson(settingsPath, settings);\n console.log(` \u2713 Gemini CLI hooks written to ${settingsPath}`);\n}\n\nexport function uninitGeminiCli(projectRoot: string): void {\n const settingsPath = path.join(projectRoot, '.gemini', 'settings.json');\n if (fs.existsSync(settingsPath)) {\n const settings = readJson(settingsPath);\n let changed = false;\n\n // Remove MCP\n if (settings.mcpServers?.[KIROGRAPH_SERVER_NAME]) {\n delete settings.mcpServers[KIROGRAPH_SERVER_NAME];\n if (Object.keys(settings.mcpServers).length === 0) delete settings.mcpServers;\n changed = true;\n console.log(` \u2713 Removed kirograph from .gemini/settings.json mcpServers`);\n }\n\n // Remove hooks\n if (settings.hooks?.SessionEnd) {\n const before = settings.hooks.SessionEnd.length;\n settings.hooks.SessionEnd = settings.hooks.SessionEnd.filter((m: any) =>\n !m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (settings.hooks.SessionEnd.length === 0) delete settings.hooks.SessionEnd;\n if (Object.keys(settings.hooks).length === 0) delete settings.hooks;\n if (settings.hooks?.SessionEnd?.length !== before) {\n changed = true;\n console.log(` \u2713 Removed kirograph hooks from .gemini/settings.json`);\n }\n }\n\n if (changed) writeJson(settingsPath, settings);\n }\n\n const geminiPath = path.join(projectRoot, 'GEMINI.md');\n if (removeGeneratedBlock(geminiPath, GEMINI_CLI_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from GEMINI.md`);\n }\n}\n\nexport function printGeminiCliNextSteps(): void {\n console.log('\\n Done! Restart Gemini CLI for the MCP server and hooks to load.');\n console.log(' MCP and hooks are in .gemini/settings.json');\n console.log(' KiroGraph instructions are in GEMINI.md\\n');\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -35,8 +35,6 @@ __export(generic_exports, {
35
35
  iflowCli: () => iflowCli,
36
36
  makeGenericInstaller: () => makeGenericInstaller,
37
37
  mistralVibe: () => mistralVibe,
38
- qoder: () => qoder,
39
- qwenCode: () => qwenCode,
40
38
  rovoDev: () => rovoDev
41
39
  });
42
40
  module.exports = __toCommonJS(generic_exports);
@@ -47,10 +45,10 @@ var import_instructions = require("../instructions");
47
45
  function makeGenericInstaller(config) {
48
46
  function installEarly(_projectRoot) {
49
47
  }
50
- function installLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory) {
48
+ function installLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture) {
51
49
  const instructionsPath = path.join(projectRoot, ".kirograph", `${config.id}.md`);
52
50
  (0, import_common.ensureDir)(path.dirname(instructionsPath));
53
- fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)((0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory)));
51
+ fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)((0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, void 0, enableDocs, enableData, enableSecurity, enableArchitecture)));
54
52
  console.log(` \u2713 ${config.label} instructions written to ${instructionsPath}`);
55
53
  }
56
54
  function uninit(projectRoot) {
@@ -92,18 +90,10 @@ const iflowCli = makeGenericInstaller({
92
90
  id: "iflow",
93
91
  label: "iFlow CLI"
94
92
  });
95
- const qwenCode = makeGenericInstaller({
96
- id: "qwen",
97
- label: "Qwen Code"
98
- });
99
93
  const rovoDev = makeGenericInstaller({
100
94
  id: "rovo",
101
95
  label: "Atlassian Rovo Dev"
102
96
  });
103
- const qoder = makeGenericInstaller({
104
- id: "qoder",
105
- label: "Qoder"
106
- });
107
97
  // Annotate the CommonJS export names for ESM import in node:
108
98
  0 && (module.exports = {
109
99
  crush,
@@ -113,8 +103,6 @@ const qoder = makeGenericInstaller({
113
103
  iflowCli,
114
104
  makeGenericInstaller,
115
105
  mistralVibe,
116
- qoder,
117
- qwenCode,
118
106
  rovoDev
119
107
  });
120
108
  //# sourceMappingURL=generic.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/generic.ts"],
4
- "sourcesContent": ["/**\n * Generic print-only targets.\n * These tools don't have a well-known project-level MCP config path,\n * so we write .kirograph/<target>.md and print setup instructions.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport { ensureDir, buildInstructionOpts, printMcpCommand } from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nexport interface GenericTargetConfig {\n id: string;\n label: string;\n}\n\nexport function makeGenericInstaller(config: GenericTargetConfig) {\n function installEarly(_projectRoot: string): void {\n // No project-level MCP config for these targets.\n }\n\n function installLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean): void {\n const instructionsPath = path.join(projectRoot, '.kirograph', `${config.id}.md`);\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory)));\n console.log(` \u2713 ${config.label} instructions written to ${instructionsPath}`);\n }\n\n function uninit(projectRoot: string): void {\n const instructionsPath = path.join(projectRoot, '.kirograph', `${config.id}.md`);\n if (fs.existsSync(instructionsPath)) {\n fs.unlinkSync(instructionsPath);\n console.log(` \u2713 Removed .kirograph/${config.id}.md`);\n }\n }\n\n function printNextSteps(projectRoot: string): void {\n const escapedPath = projectRoot.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n console.log(`\\n Done! ${config.label} instructions written to .kirograph/${config.id}.md`);\n printMcpCommand(`kirograph serve --mcp --path \"${escapedPath}\"`);\n }\n\n return { installEarly, installLate, uninit, printNextSteps };\n}\n\n// \u2500\u2500 Target definitions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const mistralVibe = makeGenericInstaller({\n id: 'mistral-vibe',\n label: 'Mistral Vibe',\n});\n\nexport const ibmBob = makeGenericInstaller({\n id: 'ibm-bob',\n label: 'IBM Bob',\n});\n\nexport const crush = makeGenericInstaller({\n id: 'crush',\n label: 'Crush',\n});\n\nexport const droidFactory = makeGenericInstaller({\n id: 'droid-factory',\n label: 'Droid Factory',\n});\n\nexport const forgeCode = makeGenericInstaller({\n id: 'forgecode',\n label: 'ForgeCode',\n});\n\nexport const iflowCli = makeGenericInstaller({\n id: 'iflow',\n label: 'iFlow CLI',\n});\n\nexport const qwenCode = makeGenericInstaller({\n id: 'qwen',\n label: 'Qwen Code',\n});\n\nexport const rovoDev = makeGenericInstaller({\n id: 'rovo',\n label: 'Atlassian Rovo Dev',\n});\n\nexport const qoder = makeGenericInstaller({\n id: 'qoder',\n label: 'Qoder',\n});\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAoB;AACpB,WAAsB;AAEtB,oBAAiE;AACjE,0BAAuC;AAOhC,SAAS,qBAAqB,QAA6B;AAChE,WAAS,aAAa,cAA4B;AAAA,EAElD;AAEA,WAAS,YAAY,aAAqB,aAAmC,uBAAgC,cAA8B;AACzI,UAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,GAAG,OAAO,EAAE,KAAK;AAC/E,iCAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,OAAG,cAAc,sBAAkB,gDAAuB,oCAAqB,aAAa,uBAAuB,YAAY,CAAC,CAAC;AACjI,YAAQ,IAAI,YAAO,OAAO,KAAK,4BAA4B,gBAAgB,EAAE;AAAA,EAC/E;AAEA,WAAS,OAAO,aAA2B;AACzC,UAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,GAAG,OAAO,EAAE,KAAK;AAC/E,QAAI,GAAG,WAAW,gBAAgB,GAAG;AACnC,SAAG,WAAW,gBAAgB;AAC9B,cAAQ,IAAI,+BAA0B,OAAO,EAAE,KAAK;AAAA,IACtD;AAAA,EACF;AAEA,WAAS,eAAe,aAA2B;AACjD,UAAM,cAAc,YAAY,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK;AAC1E,YAAQ,IAAI;AAAA,UAAa,OAAO,KAAK,uCAAuC,OAAO,EAAE,KAAK;AAC1F,uCAAgB,iCAAiC,WAAW,GAAG;AAAA,EACjE;AAEA,SAAO,EAAE,cAAc,aAAa,QAAQ,eAAe;AAC7D;AAIO,MAAM,cAAc,qBAAqB;AAAA,EAC9C,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;AAEM,MAAM,SAAS,qBAAqB;AAAA,EACzC,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;AAEM,MAAM,QAAQ,qBAAqB;AAAA,EACxC,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;AAEM,MAAM,eAAe,qBAAqB;AAAA,EAC/C,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;AAEM,MAAM,YAAY,qBAAqB;AAAA,EAC5C,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;AAEM,MAAM,WAAW,qBAAqB;AAAA,EAC3C,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;AAEM,MAAM,WAAW,qBAAqB;AAAA,EAC3C,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;AAEM,MAAM,UAAU,qBAAqB;AAAA,EAC1C,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;AAEM,MAAM,QAAQ,qBAAqB;AAAA,EACxC,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;",
4
+ "sourcesContent": ["/**\n * Generic print-only targets.\n * These tools don't have a well-known project-level MCP config path,\n * so we write .kirograph/<target>.md and print setup instructions.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport { ensureDir, buildInstructionOpts, printMcpCommand } from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nexport interface GenericTargetConfig {\n id: string;\n label: string;\n}\n\nexport function makeGenericInstaller(config: GenericTargetConfig) {\n function installEarly(_projectRoot: string): void {\n // No project-level MCP config for these targets.\n }\n\n function installLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean, enableDocs?: boolean, enableData?: boolean, enableSecurity?: boolean, enableArchitecture?: boolean): void {\n const instructionsPath = path.join(projectRoot, '.kirograph', `${config.id}.md`);\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, undefined, enableDocs, enableData, enableSecurity, enableArchitecture)));\n console.log(` \u2713 ${config.label} instructions written to ${instructionsPath}`);\n }\n\n function uninit(projectRoot: string): void {\n const instructionsPath = path.join(projectRoot, '.kirograph', `${config.id}.md`);\n if (fs.existsSync(instructionsPath)) {\n fs.unlinkSync(instructionsPath);\n console.log(` \u2713 Removed .kirograph/${config.id}.md`);\n }\n }\n\n function printNextSteps(projectRoot: string): void {\n const escapedPath = projectRoot.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n console.log(`\\n Done! ${config.label} instructions written to .kirograph/${config.id}.md`);\n printMcpCommand(`kirograph serve --mcp --path \"${escapedPath}\"`);\n }\n\n return { installEarly, installLate, uninit, printNextSteps };\n}\n\n// \u2500\u2500 Target definitions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport const mistralVibe = makeGenericInstaller({\n id: 'mistral-vibe',\n label: 'Mistral Vibe',\n});\n\nexport const ibmBob = makeGenericInstaller({\n id: 'ibm-bob',\n label: 'IBM Bob',\n});\n\nexport const crush = makeGenericInstaller({\n id: 'crush',\n label: 'Crush',\n});\n\nexport const droidFactory = makeGenericInstaller({\n id: 'droid-factory',\n label: 'Droid Factory',\n});\n\nexport const forgeCode = makeGenericInstaller({\n id: 'forgecode',\n label: 'ForgeCode',\n});\n\nexport const iflowCli = makeGenericInstaller({\n id: 'iflow',\n label: 'iFlow CLI',\n});\n\nexport const rovoDev = makeGenericInstaller({\n id: 'rovo',\n label: 'Atlassian Rovo Dev',\n});\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAoB;AACpB,WAAsB;AAEtB,oBAAiE;AACjE,0BAAuC;AAOhC,SAAS,qBAAqB,QAA6B;AAChE,WAAS,aAAa,cAA4B;AAAA,EAElD;AAEA,WAAS,YAAY,aAAqB,aAAmC,uBAAgC,cAAwB,YAAsB,YAAsB,gBAA0B,oBAAoC;AAC7O,UAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,GAAG,OAAO,EAAE,KAAK;AAC/E,iCAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,OAAG,cAAc,sBAAkB,gDAAuB,oCAAqB,aAAa,uBAAuB,cAAc,QAAW,YAAY,YAAY,gBAAgB,kBAAkB,CAAC,CAAC;AACxM,YAAQ,IAAI,YAAO,OAAO,KAAK,4BAA4B,gBAAgB,EAAE;AAAA,EAC/E;AAEA,WAAS,OAAO,aAA2B;AACzC,UAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,GAAG,OAAO,EAAE,KAAK;AAC/E,QAAI,GAAG,WAAW,gBAAgB,GAAG;AACnC,SAAG,WAAW,gBAAgB;AAC9B,cAAQ,IAAI,+BAA0B,OAAO,EAAE,KAAK;AAAA,IACtD;AAAA,EACF;AAEA,WAAS,eAAe,aAA2B;AACjD,UAAM,cAAc,YAAY,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK;AAC1E,YAAQ,IAAI;AAAA,UAAa,OAAO,KAAK,uCAAuC,OAAO,EAAE,KAAK;AAC1F,uCAAgB,iCAAiC,WAAW,GAAG;AAAA,EACjE;AAEA,SAAO,EAAE,cAAc,aAAa,QAAQ,eAAe;AAC7D;AAIO,MAAM,cAAc,qBAAqB;AAAA,EAC9C,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;AAEM,MAAM,SAAS,qBAAqB;AAAA,EACzC,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;AAEM,MAAM,QAAQ,qBAAqB;AAAA,EACxC,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;AAEM,MAAM,eAAe,qBAAqB;AAAA,EAC/C,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;AAEM,MAAM,YAAY,qBAAqB;AAAA,EAC5C,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;AAEM,MAAM,WAAW,qBAAqB;AAAA,EAC3C,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;AAEM,MAAM,UAAU,qBAAqB;AAAA,EAC1C,IAAI;AAAA,EACJ,OAAO;AACT,CAAC;",
6
6
  "names": []
7
7
  }
@@ -42,13 +42,13 @@ var import_common2 = require("../common");
42
42
  const GOOSE_BLOCK_ID = "goose";
43
43
  function installGooseEarly(_projectRoot) {
44
44
  }
45
- function installGooseLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory) {
45
+ function installGooseLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture) {
46
46
  const instructionsPath = path.join(projectRoot, ".kirograph", "goose.md");
47
47
  (0, import_common.ensureDir)(path.dirname(instructionsPath));
48
- fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)((0, import_common2.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory)));
48
+ fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)((0, import_common2.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, void 0, enableDocs, enableData, enableSecurity, enableArchitecture)));
49
49
  console.log(` \u2713 Goose instructions written to ${instructionsPath}`);
50
50
  const agentsPath = path.join(projectRoot, "AGENTS.md");
51
- const changed = (0, import_common.upsertGeneratedBlock)(agentsPath, GOOSE_BLOCK_ID, "## KiroGraph", (0, import_instructions.buildAgentInstructions)((0, import_common2.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory)));
51
+ const changed = (0, import_common.upsertGeneratedBlock)(agentsPath, GOOSE_BLOCK_ID, "## KiroGraph", (0, import_instructions.buildAgentInstructions)((0, import_common2.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, void 0, enableDocs, enableData, enableSecurity, enableArchitecture)));
52
52
  console.log(changed ? ` \u2713 AGENTS.md updated with KiroGraph instructions (Goose)` : ` \u2713 AGENTS.md already up to date`);
53
53
  }
54
54
  function uninitGoose(projectRoot) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/goose.ts"],
4
- "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n printMcpCommand,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\nimport { buildInstructionOpts } from '../common';\n\nconst GOOSE_BLOCK_ID = 'goose';\n\nexport function installGooseEarly(_projectRoot: string): void {\n // Block Goose MCP is configured via `goose mcp add` command.\n // We print the command in next steps.\n}\n\nexport function installGooseLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean): void {\n const instructionsPath = path.join(projectRoot, '.kirograph', 'goose.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory)));\n console.log(` \u2713 Goose instructions written to ${instructionsPath}`);\n\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n const changed = upsertGeneratedBlock(agentsPath, GOOSE_BLOCK_ID, '## KiroGraph', buildAgentInstructions(buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory)));\n console.log(changed\n ? ` \u2713 AGENTS.md updated with KiroGraph instructions (Goose)`\n : ` \u2713 AGENTS.md already up to date`);\n}\n\nexport function uninitGoose(projectRoot: string): void {\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n if (removeGeneratedBlock(agentsPath, GOOSE_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from AGENTS.md (Goose)`);\n }\n}\n\nexport function printGooseNextSteps(projectRoot: string): void {\n const escapedPath = projectRoot.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n console.log('\\n Done! KiroGraph instructions are in AGENTS.md.');\n printMcpCommand(`goose mcp add kirograph -- kirograph serve --mcp --path \"${escapedPath}\"`);\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AAEtB,oBAKO;AACP,0BAAuC;AACvC,IAAAA,iBAAqC;AAErC,MAAM,iBAAiB;AAEhB,SAAS,kBAAkB,cAA4B;AAG9D;AAEO,SAAS,iBAAiB,aAAqB,aAAmC,uBAAgC,cAA8B;AACrJ,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,UAAU;AACxE,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,gDAAuB,qCAAqB,aAAa,uBAAuB,YAAY,CAAC,CAAC;AACjI,UAAQ,IAAI,0CAAqC,gBAAgB,EAAE;AAEnE,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,QAAM,cAAU,oCAAqB,YAAY,gBAAgB,oBAAgB,gDAAuB,qCAAqB,aAAa,uBAAuB,YAAY,CAAC,CAAC;AAC/K,UAAQ,IAAI,UACR,mEACA,uCAAkC;AACxC;AAEO,SAAS,YAAY,aAA2B;AACrD,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,UAAI,oCAAqB,YAAY,cAAc,GAAG;AACpD,YAAQ,IAAI,yDAAoD;AAAA,EAClE;AACF;AAEO,SAAS,oBAAoB,aAA2B;AAC7D,QAAM,cAAc,YAAY,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK;AAC1E,UAAQ,IAAI,oDAAoD;AAChE,qCAAgB,4DAA4D,WAAW,GAAG;AAC5F;",
4
+ "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n printMcpCommand,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\nimport { buildInstructionOpts } from '../common';\n\nconst GOOSE_BLOCK_ID = 'goose';\n\nexport function installGooseEarly(_projectRoot: string): void {\n // Block Goose MCP is configured via `goose mcp add` command.\n // We print the command in next steps.\n}\n\nexport function installGooseLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean, enableDocs?: boolean, enableData?: boolean, enableSecurity?: boolean, enableArchitecture?: boolean): void {\n const instructionsPath = path.join(projectRoot, '.kirograph', 'goose.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, undefined, enableDocs, enableData, enableSecurity, enableArchitecture)));\n console.log(` \u2713 Goose instructions written to ${instructionsPath}`);\n\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n const changed = upsertGeneratedBlock(agentsPath, GOOSE_BLOCK_ID, '## KiroGraph', buildAgentInstructions(buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, undefined, enableDocs, enableData, enableSecurity, enableArchitecture)));\n console.log(changed\n ? ` \u2713 AGENTS.md updated with KiroGraph instructions (Goose)`\n : ` \u2713 AGENTS.md already up to date`);\n}\n\nexport function uninitGoose(projectRoot: string): void {\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n if (removeGeneratedBlock(agentsPath, GOOSE_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from AGENTS.md (Goose)`);\n }\n}\n\nexport function printGooseNextSteps(projectRoot: string): void {\n const escapedPath = projectRoot.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n console.log('\\n Done! KiroGraph instructions are in AGENTS.md.');\n printMcpCommand(`goose mcp add kirograph -- kirograph serve --mcp --path \"${escapedPath}\"`);\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AAEtB,oBAKO;AACP,0BAAuC;AACvC,IAAAA,iBAAqC;AAErC,MAAM,iBAAiB;AAEhB,SAAS,kBAAkB,cAA4B;AAG9D;AAEO,SAAS,iBAAiB,aAAqB,aAAmC,uBAAgC,cAAwB,YAAsB,YAAsB,gBAA0B,oBAAoC;AACzP,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,UAAU;AACxE,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,gDAAuB,qCAAqB,aAAa,uBAAuB,cAAc,QAAW,YAAY,YAAY,gBAAgB,kBAAkB,CAAC,CAAC;AACxM,UAAQ,IAAI,0CAAqC,gBAAgB,EAAE;AAEnE,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,QAAM,cAAU,oCAAqB,YAAY,gBAAgB,oBAAgB,gDAAuB,qCAAqB,aAAa,uBAAuB,cAAc,QAAW,YAAY,YAAY,gBAAgB,kBAAkB,CAAC,CAAC;AACtP,UAAQ,IAAI,UACR,mEACA,uCAAkC;AACxC;AAEO,SAAS,YAAY,aAA2B;AACrD,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,UAAI,oCAAqB,YAAY,cAAc,GAAG;AACpD,YAAQ,IAAI,yDAAoD;AAAA,EAClE;AACF;AAEO,SAAS,oBAAoB,aAA2B;AAC7D,QAAM,cAAc,YAAY,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK;AAC1E,UAAQ,IAAI,oDAAoD;AAChE,qCAAgB,4DAA4D,WAAW,GAAG;AAC5F;",
6
6
  "names": ["import_common"]
7
7
  }