kirograph 0.17.0 → 0.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (329) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +103 -1822
  3. package/dist/architecture/layers/dart.js +112 -0
  4. package/dist/architecture/layers/dart.js.map +7 -0
  5. package/dist/architecture/layers/index.js +3 -1
  6. package/dist/architecture/layers/index.js.map +2 -2
  7. package/dist/bin/banner.js +74 -6
  8. package/dist/bin/banner.js.map +2 -2
  9. package/dist/bin/commands/attack-surface.js +157 -0
  10. package/dist/bin/commands/attack-surface.js.map +7 -0
  11. package/dist/bin/commands/benchmark.js +206 -0
  12. package/dist/bin/commands/benchmark.js.map +7 -0
  13. package/dist/bin/commands/budget.js +70 -0
  14. package/dist/bin/commands/budget.js.map +7 -0
  15. package/dist/bin/commands/communities.js +77 -0
  16. package/dist/bin/commands/communities.js.map +7 -0
  17. package/dist/bin/commands/dep-confusion.js +119 -0
  18. package/dist/bin/commands/dep-confusion.js.map +7 -0
  19. package/dist/bin/commands/export.js +304 -10
  20. package/dist/bin/commands/export.js.map +2 -2
  21. package/dist/bin/commands/flows.js +97 -0
  22. package/dist/bin/commands/flows.js.map +7 -0
  23. package/dist/bin/commands/help.js +382 -101
  24. package/dist/bin/commands/help.js.map +2 -2
  25. package/dist/bin/commands/install.js +90 -8
  26. package/dist/bin/commands/install.js.map +2 -2
  27. package/dist/bin/commands/licenses.js +201 -0
  28. package/dist/bin/commands/licenses.js.map +7 -0
  29. package/dist/bin/commands/reachability.js +160 -0
  30. package/dist/bin/commands/reachability.js.map +7 -0
  31. package/dist/bin/commands/read.js +100 -0
  32. package/dist/bin/commands/read.js.map +7 -0
  33. package/dist/bin/commands/refactor.js +116 -0
  34. package/dist/bin/commands/refactor.js.map +7 -0
  35. package/dist/bin/commands/remediation.js +133 -0
  36. package/dist/bin/commands/remediation.js.map +7 -0
  37. package/dist/bin/commands/sbom.js +76 -0
  38. package/dist/bin/commands/sbom.js.map +7 -0
  39. package/dist/bin/commands/security-ci-report.js +267 -0
  40. package/dist/bin/commands/security-ci-report.js.map +7 -0
  41. package/dist/bin/commands/security-export.js +1349 -0
  42. package/dist/bin/commands/security-export.js.map +7 -0
  43. package/dist/bin/commands/security-flows.js +126 -0
  44. package/dist/bin/commands/security-flows.js.map +7 -0
  45. package/dist/bin/commands/security-secrets.js +170 -0
  46. package/dist/bin/commands/security-secrets.js.map +7 -0
  47. package/dist/bin/commands/security.js +193 -0
  48. package/dist/bin/commands/security.js.map +7 -0
  49. package/dist/bin/commands/staleness.js +144 -0
  50. package/dist/bin/commands/staleness.js.map +7 -0
  51. package/dist/bin/commands/status.js +102 -2
  52. package/dist/bin/commands/status.js.map +2 -2
  53. package/dist/bin/commands/supply-chain.js +138 -0
  54. package/dist/bin/commands/supply-chain.js.map +7 -0
  55. package/dist/bin/commands/uninit.js +109 -60
  56. package/dist/bin/commands/uninit.js.map +2 -2
  57. package/dist/bin/commands/vex.js +76 -0
  58. package/dist/bin/commands/vex.js.map +7 -0
  59. package/dist/bin/commands/vuln-suppress.js +95 -0
  60. package/dist/bin/commands/vuln-suppress.js.map +7 -0
  61. package/dist/bin/commands/vulns.js +382 -0
  62. package/dist/bin/commands/vulns.js.map +7 -0
  63. package/dist/bin/installer/auto-detect.js +125 -0
  64. package/dist/bin/installer/auto-detect.js.map +7 -0
  65. package/dist/bin/installer/cli-agent.js +28 -5
  66. package/dist/bin/installer/cli-agent.js.map +2 -2
  67. package/dist/bin/installer/common.js +47 -0
  68. package/dist/bin/installer/common.js.map +2 -2
  69. package/dist/bin/installer/config-prompt.js +12 -1
  70. package/dist/bin/installer/config-prompt.js.map +2 -2
  71. package/dist/bin/installer/detect.js +309 -0
  72. package/dist/bin/installer/detect.js.map +7 -0
  73. package/dist/bin/installer/index.js +9 -1
  74. package/dist/bin/installer/index.js.map +2 -2
  75. package/dist/bin/installer/instructions.js +195 -3
  76. package/dist/bin/installer/instructions.js.map +2 -2
  77. package/dist/bin/installer/steering.js +407 -0
  78. package/dist/bin/installer/steering.js.map +2 -2
  79. package/dist/bin/installer/targets/aider.js +3 -3
  80. package/dist/bin/installer/targets/aider.js.map +2 -2
  81. package/dist/bin/installer/targets/amp.js +3 -3
  82. package/dist/bin/installer/targets/amp.js.map +2 -2
  83. package/dist/bin/installer/targets/antigravity.js +35 -6
  84. package/dist/bin/installer/targets/antigravity.js.map +2 -2
  85. package/dist/bin/installer/targets/augment.js +3 -3
  86. package/dist/bin/installer/targets/augment.js.map +2 -2
  87. package/dist/bin/installer/targets/claude.js +49 -5
  88. package/dist/bin/installer/targets/claude.js.map +2 -2
  89. package/dist/bin/installer/targets/cline.js +32 -6
  90. package/dist/bin/installer/targets/cline.js.map +2 -2
  91. package/dist/bin/installer/targets/codex.js +64 -12
  92. package/dist/bin/installer/targets/codex.js.map +2 -2
  93. package/dist/bin/installer/targets/continue.js +2 -2
  94. package/dist/bin/installer/targets/continue.js.map +2 -2
  95. package/dist/bin/installer/targets/copilot-cli.js +101 -0
  96. package/dist/bin/installer/targets/copilot-cli.js.map +7 -0
  97. package/dist/bin/installer/targets/copilot.js +31 -5
  98. package/dist/bin/installer/targets/copilot.js.map +2 -2
  99. package/dist/bin/installer/targets/cursor.js +4 -4
  100. package/dist/bin/installer/targets/cursor.js.map +2 -2
  101. package/dist/bin/installer/targets/devin.js +2 -2
  102. package/dist/bin/installer/targets/devin.js.map +2 -2
  103. package/dist/bin/installer/targets/gemini-cli.js +2 -2
  104. package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
  105. package/dist/bin/installer/targets/generic.js +2 -14
  106. package/dist/bin/installer/targets/generic.js.map +2 -2
  107. package/dist/bin/installer/targets/goose.js +3 -3
  108. package/dist/bin/installer/targets/goose.js.map +2 -2
  109. package/dist/bin/installer/targets/index.js +250 -0
  110. package/dist/bin/installer/targets/index.js.map +2 -2
  111. package/dist/bin/installer/targets/junie.js +2 -2
  112. package/dist/bin/installer/targets/junie.js.map +2 -2
  113. package/dist/bin/installer/targets/kilo.js +2 -2
  114. package/dist/bin/installer/targets/kilo.js.map +2 -2
  115. package/dist/bin/installer/targets/kiro.js +3 -3
  116. package/dist/bin/installer/targets/kiro.js.map +2 -2
  117. package/dist/bin/installer/targets/opencode.js +2 -2
  118. package/dist/bin/installer/targets/opencode.js.map +2 -2
  119. package/dist/bin/installer/targets/openhands.js +3 -3
  120. package/dist/bin/installer/targets/openhands.js.map +2 -2
  121. package/dist/bin/installer/targets/qoder.js +91 -0
  122. package/dist/bin/installer/targets/qoder.js.map +7 -0
  123. package/dist/bin/installer/targets/qwen.js +96 -0
  124. package/dist/bin/installer/targets/qwen.js.map +7 -0
  125. package/dist/bin/installer/targets/replit.js +3 -3
  126. package/dist/bin/installer/targets/replit.js.map +2 -2
  127. package/dist/bin/installer/targets/roo.js +2 -2
  128. package/dist/bin/installer/targets/roo.js.map +2 -2
  129. package/dist/bin/installer/targets/tabnine.js +3 -3
  130. package/dist/bin/installer/targets/tabnine.js.map +2 -2
  131. package/dist/bin/installer/targets/trae.js +5 -5
  132. package/dist/bin/installer/targets/trae.js.map +2 -2
  133. package/dist/bin/installer/targets/warp.js +2 -2
  134. package/dist/bin/installer/targets/warp.js.map +2 -2
  135. package/dist/bin/installer/targets/windsurf.js +35 -6
  136. package/dist/bin/installer/targets/windsurf.js.map +2 -2
  137. package/dist/bin/kirograph.js +72 -6
  138. package/dist/bin/kirograph.js.map +3 -3
  139. package/dist/compression/tracker.js +80 -0
  140. package/dist/compression/tracker.js.map +2 -2
  141. package/dist/config.js +90 -3
  142. package/dist/config.js.map +2 -2
  143. package/dist/core/pipeline.js +36 -2
  144. package/dist/core/pipeline.js.map +2 -2
  145. package/dist/db/database.js +56 -5
  146. package/dist/db/database.js.map +2 -2
  147. package/dist/db/memory-schema.sql +5 -1
  148. package/dist/db/schema.sql +3 -1
  149. package/dist/db/security-schema.sql +72 -0
  150. package/dist/extraction/extractor.js +81 -0
  151. package/dist/extraction/extractor.js.map +2 -2
  152. package/dist/extraction/grammars.js +32 -8
  153. package/dist/extraction/grammars.js.map +2 -2
  154. package/dist/extraction/languages.js +43 -1
  155. package/dist/extraction/languages.js.map +2 -2
  156. package/dist/extraction/notebook.js +300 -0
  157. package/dist/extraction/notebook.js.map +7 -0
  158. package/dist/extraction/wasm/tree-sitter-astro.wasm +0 -0
  159. package/dist/extraction/wasm/tree-sitter-gdscript.wasm +0 -0
  160. package/dist/extraction/wasm/tree-sitter-julia.wasm +0 -0
  161. package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
  162. package/dist/extraction/wasm/tree-sitter-perl.wasm +0 -0
  163. package/dist/extraction/wasm/tree-sitter-powershell.wasm +0 -0
  164. package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
  165. package/dist/extraction/wasm/tree-sitter-sql.wasm +0 -0
  166. package/dist/extraction/wasm/tree-sitter-verilog.wasm +0 -0
  167. package/dist/frameworks/flutter.js +130 -0
  168. package/dist/frameworks/flutter.js.map +7 -0
  169. package/dist/frameworks/index.js +7 -1
  170. package/dist/frameworks/index.js.map +3 -3
  171. package/dist/graph/communities.js +317 -0
  172. package/dist/graph/communities.js.map +7 -0
  173. package/dist/graph/flows.js +138 -0
  174. package/dist/graph/flows.js.map +7 -0
  175. package/dist/graph/refactor.js +155 -0
  176. package/dist/graph/refactor.js.map +7 -0
  177. package/dist/index.js +1 -1
  178. package/dist/index.js.map +2 -2
  179. package/dist/mcp/cache.js +172 -0
  180. package/dist/mcp/cache.js.map +7 -0
  181. package/dist/mcp/read-modes.js +295 -0
  182. package/dist/mcp/read-modes.js.map +7 -0
  183. package/dist/mcp/server.js +2 -1
  184. package/dist/mcp/server.js.map +2 -2
  185. package/dist/mcp/tool-names.js +21 -1
  186. package/dist/mcp/tool-names.js.map +2 -2
  187. package/dist/mcp/tools.js +1160 -1
  188. package/dist/mcp/tools.js.map +3 -3
  189. package/dist/memory/database.js +32 -2
  190. package/dist/memory/database.js.map +2 -2
  191. package/dist/memory/types.js.map +1 -1
  192. package/dist/resolution/bridges/android-rn.js +298 -0
  193. package/dist/resolution/bridges/android-rn.js.map +7 -0
  194. package/dist/resolution/bridges/expo-modules.js +155 -0
  195. package/dist/resolution/bridges/expo-modules.js.map +7 -0
  196. package/dist/resolution/bridges/flutter-channel.js +385 -0
  197. package/dist/resolution/bridges/flutter-channel.js.map +7 -0
  198. package/dist/resolution/bridges/index.js +80 -0
  199. package/dist/resolution/bridges/index.js.map +7 -0
  200. package/dist/resolution/bridges/native-events.js +188 -0
  201. package/dist/resolution/bridges/native-events.js.map +7 -0
  202. package/dist/resolution/bridges/native-views.js +244 -0
  203. package/dist/resolution/bridges/native-views.js.map +7 -0
  204. package/dist/resolution/bridges/react-native.js +161 -0
  205. package/dist/resolution/bridges/react-native.js.map +7 -0
  206. package/dist/resolution/bridges/swift-objc.js +227 -0
  207. package/dist/resolution/bridges/swift-objc.js.map +7 -0
  208. package/dist/resolution/bridges/turbomodules.js +216 -0
  209. package/dist/resolution/bridges/turbomodules.js.map +7 -0
  210. package/dist/resolution/index.js +61 -2
  211. package/dist/resolution/index.js.map +2 -2
  212. package/dist/security/attack-surface.js +164 -0
  213. package/dist/security/attack-surface.js.map +7 -0
  214. package/dist/security/context-warnings.js +123 -0
  215. package/dist/security/context-warnings.js.map +7 -0
  216. package/dist/security/context-warnings.test.js +300 -0
  217. package/dist/security/context-warnings.test.js.map +7 -0
  218. package/dist/security/data-flows.js +228 -0
  219. package/dist/security/data-flows.js.map +7 -0
  220. package/dist/security/dep-confusion.js +255 -0
  221. package/dist/security/dep-confusion.js.map +7 -0
  222. package/dist/security/errors.js +51 -0
  223. package/dist/security/errors.js.map +7 -0
  224. package/dist/security/export/fix-suggestions.js +58 -0
  225. package/dist/security/export/fix-suggestions.js.map +7 -0
  226. package/dist/security/export/fix-suggestions.test.js +74 -0
  227. package/dist/security/export/fix-suggestions.test.js.map +7 -0
  228. package/dist/security/export/sbom.js +230 -0
  229. package/dist/security/export/sbom.js.map +7 -0
  230. package/dist/security/export/sbom.test.js +288 -0
  231. package/dist/security/export/sbom.test.js.map +7 -0
  232. package/dist/security/export/serialization.js +142 -0
  233. package/dist/security/export/serialization.js.map +7 -0
  234. package/dist/security/export/serialization.test.js +310 -0
  235. package/dist/security/export/serialization.test.js.map +7 -0
  236. package/dist/security/export/vex.js +220 -0
  237. package/dist/security/export/vex.js.map +7 -0
  238. package/dist/security/export/vex.test.js +278 -0
  239. package/dist/security/export/vex.test.js.map +7 -0
  240. package/dist/security/index.js +67 -0
  241. package/dist/security/index.js.map +7 -0
  242. package/dist/security/integrator-transitives.test.js +359 -0
  243. package/dist/security/integrator-transitives.test.js.map +7 -0
  244. package/dist/security/integrator.js +491 -0
  245. package/dist/security/integrator.js.map +7 -0
  246. package/dist/security/integrator.test.js +237 -0
  247. package/dist/security/integrator.test.js.map +7 -0
  248. package/dist/security/license.js +70 -0
  249. package/dist/security/license.js.map +7 -0
  250. package/dist/security/manifest/adapter.js +243 -0
  251. package/dist/security/manifest/adapter.js.map +7 -0
  252. package/dist/security/manifest/adapter.test.js +272 -0
  253. package/dist/security/manifest/adapter.test.js.map +7 -0
  254. package/dist/security/manifest/parser.js +376 -0
  255. package/dist/security/manifest/parser.js.map +7 -0
  256. package/dist/security/manifest/parser.test.js +110 -0
  257. package/dist/security/manifest/parser.test.js.map +7 -0
  258. package/dist/security/manifest/plugins/cargo.js +233 -0
  259. package/dist/security/manifest/plugins/cargo.js.map +7 -0
  260. package/dist/security/manifest/plugins/cargo.test.js +304 -0
  261. package/dist/security/manifest/plugins/cargo.test.js.map +7 -0
  262. package/dist/security/manifest/plugins/composer.js +152 -0
  263. package/dist/security/manifest/plugins/composer.js.map +7 -0
  264. package/dist/security/manifest/plugins/go.js +146 -0
  265. package/dist/security/manifest/plugins/go.js.map +7 -0
  266. package/dist/security/manifest/plugins/go.test.js +341 -0
  267. package/dist/security/manifest/plugins/go.test.js.map +7 -0
  268. package/dist/security/manifest/plugins/gradle.js +159 -0
  269. package/dist/security/manifest/plugins/gradle.js.map +7 -0
  270. package/dist/security/manifest/plugins/hex.js +159 -0
  271. package/dist/security/manifest/plugins/hex.js.map +7 -0
  272. package/dist/security/manifest/plugins/maven.js +128 -0
  273. package/dist/security/manifest/plugins/maven.js.map +7 -0
  274. package/dist/security/manifest/plugins/maven.test.js +389 -0
  275. package/dist/security/manifest/plugins/maven.test.js.map +7 -0
  276. package/dist/security/manifest/plugins/npm.js +284 -0
  277. package/dist/security/manifest/plugins/npm.js.map +7 -0
  278. package/dist/security/manifest/plugins/npm.test.js +298 -0
  279. package/dist/security/manifest/plugins/npm.test.js.map +7 -0
  280. package/dist/security/manifest/plugins/nuget.js +186 -0
  281. package/dist/security/manifest/plugins/nuget.js.map +7 -0
  282. package/dist/security/manifest/plugins/pip.js +123 -0
  283. package/dist/security/manifest/plugins/pip.js.map +7 -0
  284. package/dist/security/manifest/plugins/pip.test.js +208 -0
  285. package/dist/security/manifest/plugins/pip.test.js.map +7 -0
  286. package/dist/security/manifest/plugins/pubspec.js +212 -0
  287. package/dist/security/manifest/plugins/pubspec.js.map +7 -0
  288. package/dist/security/manifest/plugins/pyproject.js +261 -0
  289. package/dist/security/manifest/plugins/pyproject.js.map +7 -0
  290. package/dist/security/manifest/plugins/rubygems.js +185 -0
  291. package/dist/security/manifest/plugins/rubygems.js.map +7 -0
  292. package/dist/security/manifest/plugins/swift.js +200 -0
  293. package/dist/security/manifest/plugins/swift.js.map +7 -0
  294. package/dist/security/owasp.js +104 -0
  295. package/dist/security/owasp.js.map +7 -0
  296. package/dist/security/pipeline.js +125 -0
  297. package/dist/security/pipeline.js.map +7 -0
  298. package/dist/security/reachability.js +276 -0
  299. package/dist/security/reachability.js.map +7 -0
  300. package/dist/security/reachability.test.js +394 -0
  301. package/dist/security/reachability.test.js.map +7 -0
  302. package/dist/security/remediation.js +126 -0
  303. package/dist/security/remediation.js.map +7 -0
  304. package/dist/security/secrets.js +176 -0
  305. package/dist/security/secrets.js.map +7 -0
  306. package/dist/security/staleness.js +231 -0
  307. package/dist/security/staleness.js.map +7 -0
  308. package/dist/security/supply-chain.js +301 -0
  309. package/dist/security/supply-chain.js.map +7 -0
  310. package/dist/security/suppressions.js +106 -0
  311. package/dist/security/suppressions.js.map +7 -0
  312. package/dist/security/types.js +17 -0
  313. package/dist/security/types.js.map +7 -0
  314. package/dist/security/vuln/client.js +355 -0
  315. package/dist/security/vuln/client.js.map +7 -0
  316. package/dist/security/vuln/client.test.js +288 -0
  317. package/dist/security/vuln/client.test.js.map +7 -0
  318. package/dist/security/vuln/epss-client.js +95 -0
  319. package/dist/security/vuln/epss-client.js.map +7 -0
  320. package/dist/security/vuln/index.js +29 -0
  321. package/dist/security/vuln/index.js.map +7 -0
  322. package/dist/security/vuln/osv-adapter.js +321 -0
  323. package/dist/security/vuln/osv-adapter.js.map +7 -0
  324. package/dist/security/vuln/osv-adapter.test.js +391 -0
  325. package/dist/security/vuln/osv-adapter.test.js.map +7 -0
  326. package/dist/security/vuln/types.js +17 -0
  327. package/dist/security/vuln/types.js.map +7 -0
  328. package/dist/types.js.map +2 -2
  329. package/package.json +2 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/amp.ts"],
4
- "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n readJson,\n writeJson,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\nimport { buildInstructionOpts } from '../common';\n\nexport function installAmpEarly(projectRoot: string): void {\n const configPath = path.join(projectRoot, '.amp', '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 Sourcegraph Amp MCP server registered in ${configPath}`);\n}\n\nexport function installAmpLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean): void {\n const instructionsPath = path.join(projectRoot, '.kirograph', 'amp.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory)));\n console.log(` \u2713 Amp instructions written to ${instructionsPath}`);\n\n const ampInstructionsPath = path.join(projectRoot, '.amp', 'instructions.md');\n ensureDir(path.dirname(ampInstructionsPath));\n fs.writeFileSync(ampInstructionsPath, buildAgentInstructions(buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory)));\n console.log(` \u2713 Amp instructions written to ${ampInstructionsPath}`);\n}\n\nexport function uninitAmp(projectRoot: string): void {\n const configPath = path.join(projectRoot, '.amp', '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 writeJson(configPath, config);\n console.log(` \u2713 Removed kirograph from .amp/config.json`);\n }\n }\n\n const ampInstructionsPath = path.join(projectRoot, '.amp', 'instructions.md');\n if (fs.existsSync(ampInstructionsPath)) {\n fs.unlinkSync(ampInstructionsPath);\n console.log(` \u2713 Removed .amp/instructions.md`);\n }\n}\n\nexport function printAmpNextSteps(): void {\n console.log('\\n Done! Restart Sourcegraph Amp for the MCP server to load.');\n console.log(' KiroGraph instructions are in .amp/instructions.md\\n');\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AAEtB,oBAOO;AACP,0BAAuC;AACvC,IAAAA,iBAAqC;AAE9B,SAAS,gBAAgB,aAA2B;AACzD,QAAM,aAAa,KAAK,KAAK,aAAa,QAAQ,aAAa;AAC/D,+BAAU,KAAK,QAAQ,UAAU,CAAC;AAClC,QAAM,aAAS,wBAAS,UAAU;AAClC,SAAO,aAAa,OAAO,cAAc,CAAC;AAC1C,SAAO,WAAW,mCAAqB,IAAI;AAAA,IACzC,SAAS;AAAA,IACT,MAAM;AAAA,EACR;AACA,+BAAU,YAAY,MAAM;AAC5B,UAAQ,IAAI,qDAAgD,UAAU,EAAE;AAC1E;AAEO,SAAS,eAAe,aAAqB,aAAmC,uBAAgC,cAA8B;AACnJ,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,QAAQ;AACtE,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,gDAAuB,qCAAqB,aAAa,uBAAuB,YAAY,CAAC,CAAC;AACjI,UAAQ,IAAI,wCAAmC,gBAAgB,EAAE;AAEjE,QAAM,sBAAsB,KAAK,KAAK,aAAa,QAAQ,iBAAiB;AAC5E,+BAAU,KAAK,QAAQ,mBAAmB,CAAC;AAC3C,KAAG,cAAc,yBAAqB,gDAAuB,qCAAqB,aAAa,uBAAuB,YAAY,CAAC,CAAC;AACpI,UAAQ,IAAI,wCAAmC,mBAAmB,EAAE;AACtE;AAEO,SAAS,UAAU,aAA2B;AACnD,QAAM,aAAa,KAAK,KAAK,aAAa,QAAQ,aAAa;AAC/D,MAAI,GAAG,WAAW,UAAU,GAAG;AAC7B,UAAM,aAAS,wBAAS,UAAU;AAClC,QAAI,OAAO,aAAa,mCAAqB,GAAG;AAC9C,aAAO,OAAO,WAAW,mCAAqB;AAC9C,mCAAU,YAAY,MAAM;AAC5B,cAAQ,IAAI,kDAA6C;AAAA,IAC3D;AAAA,EACF;AAEA,QAAM,sBAAsB,KAAK,KAAK,aAAa,QAAQ,iBAAiB;AAC5E,MAAI,GAAG,WAAW,mBAAmB,GAAG;AACtC,OAAG,WAAW,mBAAmB;AACjC,YAAQ,IAAI,uCAAkC;AAAA,EAChD;AACF;AAEO,SAAS,oBAA0B;AACxC,UAAQ,IAAI,+DAA+D;AAC3E,UAAQ,IAAI,wDAAwD;AACtE;",
4
+ "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n readJson,\n writeJson,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\nimport { buildInstructionOpts } from '../common';\n\nexport function installAmpEarly(projectRoot: string): void {\n const configPath = path.join(projectRoot, '.amp', '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 Sourcegraph Amp MCP server registered in ${configPath}`);\n}\n\nexport function installAmpLate(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', 'amp.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, undefined, enableDocs, enableData, enableSecurity, enableArchitecture)));\n console.log(` \u2713 Amp instructions written to ${instructionsPath}`);\n\n const ampInstructionsPath = path.join(projectRoot, '.amp', 'instructions.md');\n ensureDir(path.dirname(ampInstructionsPath));\n fs.writeFileSync(ampInstructionsPath, buildAgentInstructions(buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, undefined, enableDocs, enableData, enableSecurity, enableArchitecture)));\n console.log(` \u2713 Amp instructions written to ${ampInstructionsPath}`);\n}\n\nexport function uninitAmp(projectRoot: string): void {\n const configPath = path.join(projectRoot, '.amp', '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 writeJson(configPath, config);\n console.log(` \u2713 Removed kirograph from .amp/config.json`);\n }\n }\n\n const ampInstructionsPath = path.join(projectRoot, '.amp', 'instructions.md');\n if (fs.existsSync(ampInstructionsPath)) {\n fs.unlinkSync(ampInstructionsPath);\n console.log(` \u2713 Removed .amp/instructions.md`);\n }\n}\n\nexport function printAmpNextSteps(): void {\n console.log('\\n Done! Restart Sourcegraph Amp for the MCP server to load.');\n console.log(' KiroGraph instructions are in .amp/instructions.md\\n');\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AAEtB,oBAOO;AACP,0BAAuC;AACvC,IAAAA,iBAAqC;AAE9B,SAAS,gBAAgB,aAA2B;AACzD,QAAM,aAAa,KAAK,KAAK,aAAa,QAAQ,aAAa;AAC/D,+BAAU,KAAK,QAAQ,UAAU,CAAC;AAClC,QAAM,aAAS,wBAAS,UAAU;AAClC,SAAO,aAAa,OAAO,cAAc,CAAC;AAC1C,SAAO,WAAW,mCAAqB,IAAI;AAAA,IACzC,SAAS;AAAA,IACT,MAAM;AAAA,EACR;AACA,+BAAU,YAAY,MAAM;AAC5B,UAAQ,IAAI,qDAAgD,UAAU,EAAE;AAC1E;AAEO,SAAS,eAAe,aAAqB,aAAmC,uBAAgC,cAAwB,YAAsB,YAAsB,gBAA0B,oBAAoC;AACvP,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,QAAQ;AACtE,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,gDAAuB,qCAAqB,aAAa,uBAAuB,cAAc,QAAW,YAAY,YAAY,gBAAgB,kBAAkB,CAAC,CAAC;AACxM,UAAQ,IAAI,wCAAmC,gBAAgB,EAAE;AAEjE,QAAM,sBAAsB,KAAK,KAAK,aAAa,QAAQ,iBAAiB;AAC5E,+BAAU,KAAK,QAAQ,mBAAmB,CAAC;AAC3C,KAAG,cAAc,yBAAqB,gDAAuB,qCAAqB,aAAa,uBAAuB,cAAc,QAAW,YAAY,YAAY,gBAAgB,kBAAkB,CAAC,CAAC;AAC3M,UAAQ,IAAI,wCAAmC,mBAAmB,EAAE;AACtE;AAEO,SAAS,UAAU,aAA2B;AACnD,QAAM,aAAa,KAAK,KAAK,aAAa,QAAQ,aAAa;AAC/D,MAAI,GAAG,WAAW,UAAU,GAAG;AAC7B,UAAM,aAAS,wBAAS,UAAU;AAClC,QAAI,OAAO,aAAa,mCAAqB,GAAG;AAC9C,aAAO,OAAO,WAAW,mCAAqB;AAC9C,mCAAU,YAAY,MAAM;AAC5B,cAAQ,IAAI,kDAA6C;AAAA,IAC3D;AAAA,EACF;AAEA,QAAM,sBAAsB,KAAK,KAAK,aAAa,QAAQ,iBAAiB;AAC5E,MAAI,GAAG,WAAW,mBAAmB,GAAG;AACtC,OAAG,WAAW,mBAAmB;AACjC,YAAQ,IAAI,uCAAkC;AAAA,EAChD;AACF;AAEO,SAAS,oBAA0B;AACxC,UAAQ,IAAI,+DAA+D;AAC3E,UAAQ,IAAI,wDAAwD;AACtE;",
6
6
  "names": ["import_common"]
7
7
  }
@@ -57,9 +57,24 @@ function buildAntigravityHooks() {
57
57
  };
58
58
  }
59
59
  function installAntigravityEarly(_projectRoot) {
60
+ const home = process.env.HOME || process.env.USERPROFILE || "";
61
+ const mcpPath = path.join(home, ".gemini", "antigravity", "mcp_config.json");
62
+ (0, import_common.ensureDir)(path.dirname(mcpPath));
63
+ const existing = (0, import_common.readJson)(mcpPath);
64
+ existing.mcpServers = existing.mcpServers ?? {};
65
+ if (existing.mcpServers[import_common.KIROGRAPH_SERVER_NAME]) {
66
+ console.log(` \u2713 Antigravity MCP already configured in ${mcpPath}`);
67
+ return;
68
+ }
69
+ existing.mcpServers[import_common.KIROGRAPH_SERVER_NAME] = {
70
+ command: import_common.KIROGRAPH_COMMAND,
71
+ args: import_common.KIROGRAPH_MCP_ARGS
72
+ };
73
+ (0, import_common.writeJson)(mcpPath, existing);
74
+ console.log(` \u2713 Antigravity MCP server registered in ${mcpPath}`);
60
75
  }
61
- function installAntigravityLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory) {
62
- const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true);
76
+ function installAntigravityLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture) {
77
+ const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true, enableDocs, enableData, enableSecurity, enableArchitecture);
63
78
  const instructionsPath = path.join(projectRoot, ".kirograph", "antigravity.md");
64
79
  (0, import_common.ensureDir)(path.dirname(instructionsPath));
65
80
  fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(opts));
@@ -80,6 +95,17 @@ function installAntigravityLate(projectRoot, cavemanMode, shellCompressionLevel,
80
95
  console.log(` \u2713 Antigravity hooks written to ${hooksPath}`);
81
96
  }
82
97
  function uninitAntigravity(projectRoot) {
98
+ const home = process.env.HOME || process.env.USERPROFILE || "";
99
+ const mcpPath = path.join(home, ".gemini", "antigravity", "mcp_config.json");
100
+ if (fs.existsSync(mcpPath)) {
101
+ const config = (0, import_common.readJson)(mcpPath);
102
+ if (config.mcpServers?.[import_common.KIROGRAPH_SERVER_NAME]) {
103
+ delete config.mcpServers[import_common.KIROGRAPH_SERVER_NAME];
104
+ if (Object.keys(config.mcpServers).length === 0) delete config.mcpServers;
105
+ (0, import_common.writeJson)(mcpPath, config);
106
+ console.log(` \u2713 Removed kirograph from ${mcpPath}`);
107
+ }
108
+ }
83
109
  const geminiPath = path.join(projectRoot, "GEMINI.md");
84
110
  if ((0, import_common.removeGeneratedBlock)(geminiPath, ANTIGRAVITY_BLOCK_ID)) {
85
111
  console.log(` \u2713 Removed KiroGraph block from GEMINI.md`);
@@ -94,10 +120,13 @@ function uninitAntigravity(projectRoot) {
94
120
  }
95
121
  }
96
122
  }
97
- function printAntigravityNextSteps(projectRoot) {
98
- console.log("\n Done! KiroGraph instructions are in GEMINI.md.");
99
- console.log(" Auto-sync hook installed in .agents/hooks.json");
100
- (0, import_common.printMcpSetup)("~/.gemini/antigravity/mcp_config.json", projectRoot);
123
+ function printAntigravityNextSteps(_projectRoot) {
124
+ const home = process.env.HOME || process.env.USERPROFILE || "";
125
+ const mcpPath = path.join(home, ".gemini", "antigravity", "mcp_config.json");
126
+ console.log("\n Done! Restart Antigravity for the MCP server to load.");
127
+ console.log(` MCP registered in ${mcpPath}`);
128
+ console.log(" KiroGraph instructions are in GEMINI.md");
129
+ console.log(" Auto-sync hook installed in .agents/hooks.json\n");
101
130
  }
102
131
  // Annotate the CommonJS export names for ESM import in node:
103
132
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/antigravity.ts"],
4
- "sourcesContent": ["/**\n * Antigravity IDE target.\n *\n * MCP: user-scoped at ~/.gemini/antigravity/mcp_config.json (print instructions)\n * Hooks: .agents/hooks.json (workspace-level)\n * Instructions: GEMINI.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 printMcpSetup,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst ANTIGRAVITY_BLOCK_ID = 'antigravity';\n\nfunction buildAntigravityHooks(): object {\n return {\n 'kirograph-sync': {\n Stop: [\n {\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 installAntigravityEarly(_projectRoot: string): void {\n // Antigravity IDE MCP is user-scoped at ~/.gemini/antigravity/mcp_config.json.\n // We print the setup instructions in printNextSteps instead of writing outside the project.\n}\n\nexport function installAntigravityLate(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', 'antigravity.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Antigravity instructions written to ${instructionsPath}`);\n\n const geminiPath = path.join(projectRoot, 'GEMINI.md');\n const changed = upsertGeneratedBlock(geminiPath, ANTIGRAVITY_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 .agents/hooks.json\n const hooksPath = path.join(projectRoot, '.agents', 'hooks.json');\n ensureDir(path.dirname(hooksPath));\n const existing = readJson(hooksPath);\n const kgHooks = buildAntigravityHooks() as any;\n // Merge without overwriting existing hooks\n for (const [name, config] of Object.entries(kgHooks)) {\n if (!existing[name]) {\n existing[name] = config;\n }\n }\n writeJson(hooksPath, existing);\n console.log(` \u2713 Antigravity hooks written to ${hooksPath}`);\n}\n\nexport function uninitAntigravity(projectRoot: string): void {\n const geminiPath = path.join(projectRoot, 'GEMINI.md');\n if (removeGeneratedBlock(geminiPath, ANTIGRAVITY_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from GEMINI.md`);\n }\n\n // Remove hooks\n const hooksPath = path.join(projectRoot, '.agents', 'hooks.json');\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config['kirograph-sync']) {\n delete config['kirograph-sync'];\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph-sync from .agents/hooks.json`);\n }\n }\n}\n\nexport function printAntigravityNextSteps(projectRoot: string): void {\n console.log('\\n Done! KiroGraph instructions are in GEMINI.md.');\n console.log(' Auto-sync hook installed in .agents/hooks.json');\n printMcpSetup('~/.gemini/antigravity/mcp_config.json', projectRoot);\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAoB;AACpB,WAAsB;AAEtB,oBAQO;AACP,0BAAuC;AAEvC,MAAM,uBAAuB;AAE7B,SAAS,wBAAgC;AACvC,SAAO;AAAA,IACL,kBAAkB;AAAA,MAChB,MAAM;AAAA,QACJ;AAAA,UACE,OAAO;AAAA,YACL;AAAA,cACE,MAAM;AAAA,cACN,SAAS;AAAA,cACT,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,wBAAwB,cAA4B;AAGpE;AAEO,SAAS,uBAAuB,aAAqB,aAAmC,uBAAgC,cAA8B;AAC3J,QAAM,WAAO,oCAAqB,aAAa,uBAAuB,cAAc,IAAI;AAExF,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,2DACA,uCAAkC;AAGtC,QAAM,YAAY,KAAK,KAAK,aAAa,WAAW,YAAY;AAChE,+BAAU,KAAK,QAAQ,SAAS,CAAC;AACjC,QAAM,eAAW,wBAAS,SAAS;AACnC,QAAM,UAAU,sBAAsB;AAEtC,aAAW,CAAC,MAAM,MAAM,KAAK,OAAO,QAAQ,OAAO,GAAG;AACpD,QAAI,CAAC,SAAS,IAAI,GAAG;AACnB,eAAS,IAAI,IAAI;AAAA,IACnB;AAAA,EACF;AACA,+BAAU,WAAW,QAAQ;AAC7B,UAAQ,IAAI,yCAAoC,SAAS,EAAE;AAC7D;AAEO,SAAS,kBAAkB,aAA2B;AAC3D,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,UAAI,oCAAqB,YAAY,oBAAoB,GAAG;AAC1D,YAAQ,IAAI,iDAA4C;AAAA,EAC1D;AAGA,QAAM,YAAY,KAAK,KAAK,aAAa,WAAW,YAAY;AAChE,MAAI,GAAG,WAAW,SAAS,GAAG;AAC5B,UAAM,aAAS,wBAAS,SAAS;AACjC,QAAI,OAAO,gBAAgB,GAAG;AAC5B,aAAO,OAAO,gBAAgB;AAC9B,mCAAU,WAAW,MAAM;AAC3B,cAAQ,IAAI,yDAAoD;AAAA,IAClE;AAAA,EACF;AACF;AAEO,SAAS,0BAA0B,aAA2B;AACnE,UAAQ,IAAI,oDAAoD;AAChE,UAAQ,IAAI,kDAAkD;AAC9D,mCAAc,yCAAyC,WAAW;AACpE;",
4
+ "sourcesContent": ["/**\n * Antigravity IDE target.\n *\n * MCP: user-scoped at ~/.gemini/antigravity/mcp_config.json (print instructions)\n * Hooks: .agents/hooks.json (workspace-level)\n * Instructions: GEMINI.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 upsertGeneratedBlock,\n removeGeneratedBlock,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst ANTIGRAVITY_BLOCK_ID = 'antigravity';\n\nfunction buildAntigravityHooks(): object {\n return {\n 'kirograph-sync': {\n Stop: [\n {\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 installAntigravityEarly(_projectRoot: string): void {\n // Write MCP config to user-scoped ~/.gemini/antigravity/mcp_config.json\n const home = process.env.HOME || process.env.USERPROFILE || '';\n const mcpPath = path.join(home, '.gemini', 'antigravity', 'mcp_config.json');\n ensureDir(path.dirname(mcpPath));\n const existing = readJson(mcpPath);\n existing.mcpServers = existing.mcpServers ?? {};\n if (existing.mcpServers[KIROGRAPH_SERVER_NAME]) {\n console.log(` \u2713 Antigravity MCP already configured in ${mcpPath}`);\n return;\n }\n existing.mcpServers[KIROGRAPH_SERVER_NAME] = {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n };\n writeJson(mcpPath, existing);\n console.log(` \u2713 Antigravity MCP server registered in ${mcpPath}`);\n}\n\nexport function installAntigravityLate(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', 'antigravity.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Antigravity instructions written to ${instructionsPath}`);\n\n const geminiPath = path.join(projectRoot, 'GEMINI.md');\n const changed = upsertGeneratedBlock(geminiPath, ANTIGRAVITY_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 .agents/hooks.json\n const hooksPath = path.join(projectRoot, '.agents', 'hooks.json');\n ensureDir(path.dirname(hooksPath));\n const existing = readJson(hooksPath);\n const kgHooks = buildAntigravityHooks() as any;\n // Merge without overwriting existing hooks\n for (const [name, config] of Object.entries(kgHooks)) {\n if (!existing[name]) {\n existing[name] = config;\n }\n }\n writeJson(hooksPath, existing);\n console.log(` \u2713 Antigravity hooks written to ${hooksPath}`);\n}\n\nexport function uninitAntigravity(projectRoot: string): void {\n // Remove user-scoped MCP config\n const home = process.env.HOME || process.env.USERPROFILE || '';\n const mcpPath = path.join(home, '.gemini', 'antigravity', 'mcp_config.json');\n if (fs.existsSync(mcpPath)) {\n const config = readJson(mcpPath);\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(mcpPath, config);\n console.log(` \u2713 Removed kirograph from ${mcpPath}`);\n }\n }\n\n const geminiPath = path.join(projectRoot, 'GEMINI.md');\n if (removeGeneratedBlock(geminiPath, ANTIGRAVITY_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from GEMINI.md`);\n }\n\n // Remove hooks\n const hooksPath = path.join(projectRoot, '.agents', 'hooks.json');\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config['kirograph-sync']) {\n delete config['kirograph-sync'];\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph-sync from .agents/hooks.json`);\n }\n }\n}\n\nexport function printAntigravityNextSteps(_projectRoot: string): void {\n const home = process.env.HOME || process.env.USERPROFILE || '';\n const mcpPath = path.join(home, '.gemini', 'antigravity', 'mcp_config.json');\n console.log('\\n Done! Restart Antigravity for the MCP server to load.');\n console.log(` MCP registered in ${mcpPath}`);\n console.log(' KiroGraph instructions are in GEMINI.md');\n console.log(' Auto-sync hook installed in .agents/hooks.json\\n');\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -48,13 +48,13 @@ function installAugmentEarly(projectRoot) {
48
48
  });
49
49
  console.log(` \u2713 Augment Code MCP server registered in ${mcpPath}`);
50
50
  }
51
- function installAugmentLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory) {
51
+ function installAugmentLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture) {
52
52
  const instructionsPath = path.join(projectRoot, ".kirograph", "augment.md");
53
53
  (0, import_common.ensureDir)(path.dirname(instructionsPath));
54
- fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)((0, import_common2.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory)));
54
+ fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)((0, import_common2.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, void 0, enableDocs, enableData, enableSecurity, enableArchitecture)));
55
55
  console.log(` \u2713 Augment instructions written to ${instructionsPath}`);
56
56
  const guidelinesPath = path.join(projectRoot, "augment-guidelines.md");
57
- const changed = (0, import_common.upsertGeneratedBlock)(guidelinesPath, AUGMENT_BLOCK_ID, "## KiroGraph", (0, import_instructions.buildAgentInstructions)((0, import_common2.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory)));
57
+ const changed = (0, import_common.upsertGeneratedBlock)(guidelinesPath, AUGMENT_BLOCK_ID, "## KiroGraph", (0, import_instructions.buildAgentInstructions)((0, import_common2.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, void 0, enableDocs, enableData, enableSecurity, enableArchitecture)));
58
58
  console.log(changed ? ` \u2713 augment-guidelines.md updated with KiroGraph instructions` : ` \u2713 augment-guidelines.md already up to date`);
59
59
  }
60
60
  function uninitAugment(projectRoot) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/augment.ts"],
4
- "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n removeMcpServersConfig,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n writeMcpServersConfig,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\nimport { buildInstructionOpts } from '../common';\n\nconst AUGMENT_BLOCK_ID = 'augment';\n\nexport function installAugmentEarly(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.augment', 'mcp.json');\n writeMcpServersConfig(mcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(` \u2713 Augment Code MCP server registered in ${mcpPath}`);\n}\n\nexport function installAugmentLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean): void {\n const instructionsPath = path.join(projectRoot, '.kirograph', 'augment.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory)));\n console.log(` \u2713 Augment instructions written to ${instructionsPath}`);\n\n const guidelinesPath = path.join(projectRoot, 'augment-guidelines.md');\n const changed = upsertGeneratedBlock(guidelinesPath, AUGMENT_BLOCK_ID, '## KiroGraph', buildAgentInstructions(buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory)));\n console.log(changed\n ? ` \u2713 augment-guidelines.md updated with KiroGraph instructions`\n : ` \u2713 augment-guidelines.md already up to date`);\n}\n\nexport function uninitAugment(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.augment', 'mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .augment/mcp.json`);\n }\n\n const guidelinesPath = path.join(projectRoot, 'augment-guidelines.md');\n if (removeGeneratedBlock(guidelinesPath, AUGMENT_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from augment-guidelines.md`);\n }\n}\n\nexport function printAugmentNextSteps(): void {\n console.log('\\n Done! Restart Augment Code for the MCP server to load.');\n console.log(' KiroGraph instructions are in augment-guidelines.md\\n');\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AAEtB,oBAQO;AACP,0BAAuC;AACvC,IAAAA,iBAAqC;AAErC,MAAM,mBAAmB;AAElB,SAAS,oBAAoB,aAA2B;AAC7D,QAAM,UAAU,KAAK,KAAK,aAAa,YAAY,UAAU;AAC7D,2CAAsB,SAAS;AAAA,IAC7B,SAAS;AAAA,IACT,MAAM;AAAA,EACR,CAAC;AACD,UAAQ,IAAI,kDAA6C,OAAO,EAAE;AACpE;AAEO,SAAS,mBAAmB,aAAqB,aAAmC,uBAAgC,cAA8B;AACvJ,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,YAAY;AAC1E,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,gDAAuB,qCAAqB,aAAa,uBAAuB,YAAY,CAAC,CAAC;AACjI,UAAQ,IAAI,4CAAuC,gBAAgB,EAAE;AAErE,QAAM,iBAAiB,KAAK,KAAK,aAAa,uBAAuB;AACrE,QAAM,cAAU,oCAAqB,gBAAgB,kBAAkB,oBAAgB,gDAAuB,qCAAqB,aAAa,uBAAuB,YAAY,CAAC,CAAC;AACrL,UAAQ,IAAI,UACR,uEACA,mDAA8C;AACpD;AAEO,SAAS,cAAc,aAA2B;AACvD,QAAM,UAAU,KAAK,KAAK,aAAa,YAAY,UAAU;AAC7D,UAAI,sCAAuB,OAAO,GAAG;AACnC,YAAQ,IAAI,mDAA8C;AAAA,EAC5D;AAEA,QAAM,iBAAiB,KAAK,KAAK,aAAa,uBAAuB;AACrE,UAAI,oCAAqB,gBAAgB,gBAAgB,GAAG;AAC1D,YAAQ,IAAI,6DAAwD;AAAA,EACtE;AACF;AAEO,SAAS,wBAA8B;AAC5C,UAAQ,IAAI,4DAA4D;AACxE,UAAQ,IAAI,yDAAyD;AACvE;",
4
+ "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n removeMcpServersConfig,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n writeMcpServersConfig,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\nimport { buildInstructionOpts } from '../common';\n\nconst AUGMENT_BLOCK_ID = 'augment';\n\nexport function installAugmentEarly(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.augment', 'mcp.json');\n writeMcpServersConfig(mcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(` \u2713 Augment Code MCP server registered in ${mcpPath}`);\n}\n\nexport function installAugmentLate(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', 'augment.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, undefined, enableDocs, enableData, enableSecurity, enableArchitecture)));\n console.log(` \u2713 Augment instructions written to ${instructionsPath}`);\n\n const guidelinesPath = path.join(projectRoot, 'augment-guidelines.md');\n const changed = upsertGeneratedBlock(guidelinesPath, AUGMENT_BLOCK_ID, '## KiroGraph', buildAgentInstructions(buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, undefined, enableDocs, enableData, enableSecurity, enableArchitecture)));\n console.log(changed\n ? ` \u2713 augment-guidelines.md updated with KiroGraph instructions`\n : ` \u2713 augment-guidelines.md already up to date`);\n}\n\nexport function uninitAugment(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.augment', 'mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .augment/mcp.json`);\n }\n\n const guidelinesPath = path.join(projectRoot, 'augment-guidelines.md');\n if (removeGeneratedBlock(guidelinesPath, AUGMENT_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from augment-guidelines.md`);\n }\n}\n\nexport function printAugmentNextSteps(): void {\n console.log('\\n Done! Restart Augment Code for the MCP server to load.');\n console.log(' KiroGraph instructions are in augment-guidelines.md\\n');\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AAEtB,oBAQO;AACP,0BAAuC;AACvC,IAAAA,iBAAqC;AAErC,MAAM,mBAAmB;AAElB,SAAS,oBAAoB,aAA2B;AAC7D,QAAM,UAAU,KAAK,KAAK,aAAa,YAAY,UAAU;AAC7D,2CAAsB,SAAS;AAAA,IAC7B,SAAS;AAAA,IACT,MAAM;AAAA,EACR,CAAC;AACD,UAAQ,IAAI,kDAA6C,OAAO,EAAE;AACpE;AAEO,SAAS,mBAAmB,aAAqB,aAAmC,uBAAgC,cAAwB,YAAsB,YAAsB,gBAA0B,oBAAoC;AAC3P,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,YAAY;AAC1E,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,gDAAuB,qCAAqB,aAAa,uBAAuB,cAAc,QAAW,YAAY,YAAY,gBAAgB,kBAAkB,CAAC,CAAC;AACxM,UAAQ,IAAI,4CAAuC,gBAAgB,EAAE;AAErE,QAAM,iBAAiB,KAAK,KAAK,aAAa,uBAAuB;AACrE,QAAM,cAAU,oCAAqB,gBAAgB,kBAAkB,oBAAgB,gDAAuB,qCAAqB,aAAa,uBAAuB,cAAc,QAAW,YAAY,YAAY,gBAAgB,kBAAkB,CAAC,CAAC;AAC5P,UAAQ,IAAI,UACR,uEACA,mDAA8C;AACpD;AAEO,SAAS,cAAc,aAA2B;AACvD,QAAM,UAAU,KAAK,KAAK,aAAa,YAAY,UAAU;AAC7D,UAAI,sCAAuB,OAAO,GAAG;AACnC,YAAQ,IAAI,mDAA8C;AAAA,EAC5D;AAEA,QAAM,iBAAiB,KAAK,KAAK,aAAa,uBAAuB;AACrE,UAAI,oCAAqB,gBAAgB,gBAAgB,GAAG;AAC1D,YAAQ,IAAI,6DAAwD;AAAA,EACtE;AACF;AAEO,SAAS,wBAA8B;AAC5C,UAAQ,IAAI,4DAA4D;AACxE,UAAQ,IAAI,yDAAyD;AACvE;",
6
6
  "names": ["import_common"]
7
7
  }
@@ -39,22 +39,47 @@ var path = __toESM(require("path"));
39
39
  var import_common = require("../common");
40
40
  var import_instructions = require("../instructions");
41
41
  const CLAUDE_IMPORT = "@.kirograph/claude.md";
42
+ function buildClaudeHooks() {
43
+ return {
44
+ hooks: {
45
+ Stop: [
46
+ { type: "command", command: "kirograph sync --quiet 2>/dev/null || true" }
47
+ ]
48
+ }
49
+ };
50
+ }
42
51
  function installClaudeEarly(projectRoot) {
43
52
  const mcpPath = path.join(projectRoot, ".mcp.json");
44
- (0, import_common.writeMcpServersConfig)(mcpPath, {
53
+ const written = (0, import_common.writeMcpServersConfig)(mcpPath, {
45
54
  command: import_common.KIROGRAPH_COMMAND,
46
55
  args: import_common.KIROGRAPH_MCP_ARGS
47
56
  });
48
- console.log(` \u2713 Claude MCP server registered in ${mcpPath}`);
57
+ console.log(written ? ` \u2713 Claude MCP server registered in ${mcpPath}` : ` \u2713 Claude MCP already configured in ${mcpPath}`);
49
58
  }
50
- function installClaudeLate(projectRoot, cavemanMode, _shellCompressionLevel, _enableMemory) {
59
+ function installClaudeLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture) {
60
+ const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true, enableDocs, enableData, enableSecurity, enableArchitecture);
51
61
  const instructionsPath = path.join(projectRoot, ".kirograph", "claude.md");
52
62
  (0, import_common.ensureDir)(path.dirname(instructionsPath));
53
- fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(cavemanMode));
63
+ fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(opts));
54
64
  console.log(` \u2713 Claude instructions written to ${instructionsPath}`);
55
65
  const memoryPath = path.join(projectRoot, "CLAUDE.md");
56
66
  const changed = (0, import_common.appendImportLine)(memoryPath, CLAUDE_IMPORT, "## KiroGraph");
57
67
  console.log(changed ? ` \u2713 Claude project memory updated in ${memoryPath}` : ` \u2713 Claude project memory already imports ${CLAUDE_IMPORT}`);
68
+ const settingsPath = path.join(projectRoot, ".claude", "settings.json");
69
+ (0, import_common.ensureDir)(path.dirname(settingsPath));
70
+ const settings = (0, import_common.readJson)(settingsPath);
71
+ const kgHooks = buildClaudeHooks();
72
+ settings.hooks = settings.hooks ?? {};
73
+ for (const [event, commands] of Object.entries(kgHooks.hooks)) {
74
+ settings.hooks[event] = settings.hooks[event] ?? [];
75
+ for (const cmd of commands) {
76
+ if (!settings.hooks[event].some((h) => h.command === cmd.command)) {
77
+ settings.hooks[event].push(cmd);
78
+ }
79
+ }
80
+ }
81
+ (0, import_common.writeJson)(settingsPath, settings);
82
+ console.log(` \u2713 Claude Code hooks written to ${settingsPath}`);
58
83
  }
59
84
  function uninitClaude(projectRoot) {
60
85
  const mcpPath = path.join(projectRoot, ".mcp.json");
@@ -65,9 +90,28 @@ function uninitClaude(projectRoot) {
65
90
  if ((0, import_common.removeImportLine)(memoryPath, CLAUDE_IMPORT)) {
66
91
  console.log(` \u2713 Removed KiroGraph import from CLAUDE.md`);
67
92
  }
93
+ const settingsPath = path.join(projectRoot, ".claude", "settings.json");
94
+ if (fs.existsSync(settingsPath)) {
95
+ const settings = (0, import_common.readJson)(settingsPath);
96
+ if (settings.hooks) {
97
+ let changed = false;
98
+ for (const event of Object.keys(settings.hooks)) {
99
+ const before = settings.hooks[event].length;
100
+ settings.hooks[event] = settings.hooks[event].filter((h) => !h.command?.includes("kirograph"));
101
+ if (settings.hooks[event].length === 0) delete settings.hooks[event];
102
+ if (settings.hooks[event]?.length !== before) changed = true;
103
+ }
104
+ if (Object.keys(settings.hooks).length === 0) delete settings.hooks;
105
+ if (changed) {
106
+ (0, import_common.writeJson)(settingsPath, settings);
107
+ console.log(` \u2713 Removed kirograph hooks from .claude/settings.json`);
108
+ }
109
+ }
110
+ }
68
111
  }
69
112
  function printClaudeNextSteps() {
70
- console.log("\n Done! Restart Claude Code for the MCP server and project memory to load.\n");
113
+ console.log("\n Done! Restart Claude Code for the MCP server, hooks, and project memory to load.");
114
+ console.log(" Auto-sync hook runs on session stop.\n");
71
115
  }
72
116
  // Annotate the CommonJS export names for ESM import in node:
73
117
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/claude.ts"],
4
- "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n appendImportLine,\n ensureDir,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n removeMcpServersConfig,\n removeImportLine,\n writeMcpServersConfig,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CLAUDE_IMPORT = '@.kirograph/claude.md';\n\nexport function installClaudeEarly(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.mcp.json');\n writeMcpServersConfig(mcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(` \u2713 Claude MCP server registered in ${mcpPath}`);\n}\n\nexport function installClaudeLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', _shellCompressionLevel?: string, _enableMemory?: boolean): void {\n const instructionsPath = path.join(projectRoot, '.kirograph', 'claude.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(cavemanMode));\n console.log(` \u2713 Claude instructions written to ${instructionsPath}`);\n\n const memoryPath = path.join(projectRoot, 'CLAUDE.md');\n const changed = appendImportLine(memoryPath, CLAUDE_IMPORT, '## KiroGraph');\n console.log(changed\n ? ` \u2713 Claude project memory updated in ${memoryPath}`\n : ` \u2713 Claude project memory already imports ${CLAUDE_IMPORT}`);\n}\n\nexport function uninitClaude(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .mcp.json`);\n }\n\n const memoryPath = path.join(projectRoot, 'CLAUDE.md');\n if (removeImportLine(memoryPath, CLAUDE_IMPORT)) {\n console.log(` \u2713 Removed KiroGraph import from CLAUDE.md`);\n }\n}\n\nexport function printClaudeNextSteps(): void {\n console.log('\\n Done! Restart Claude Code for the MCP server and project memory to load.\\n');\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AAEtB,oBAQO;AACP,0BAAuC;AAEvC,MAAM,gBAAgB;AAEf,SAAS,mBAAmB,aAA2B;AAC5D,QAAM,UAAU,KAAK,KAAK,aAAa,WAAW;AAClD,2CAAsB,SAAS;AAAA,IAC7B,SAAS;AAAA,IACT,MAAM;AAAA,EACR,CAAC;AACD,UAAQ,IAAI,4CAAuC,OAAO,EAAE;AAC9D;AAEO,SAAS,kBAAkB,aAAqB,aAAmC,wBAAiC,eAA+B;AACxJ,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,WAAW;AACzE,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,WAAW,CAAC;AACtE,UAAQ,IAAI,2CAAsC,gBAAgB,EAAE;AAEpE,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,QAAM,cAAU,gCAAiB,YAAY,eAAe,cAAc;AAC1E,UAAQ,IAAI,UACR,6CAAwC,UAAU,KAClD,kDAA6C,aAAa,EAAE;AAClE;AAEO,SAAS,aAAa,aAA2B;AACtD,QAAM,UAAU,KAAK,KAAK,aAAa,WAAW;AAClD,UAAI,sCAAuB,OAAO,GAAG;AACnC,YAAQ,IAAI,2CAAsC;AAAA,EACpD;AAEA,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,UAAI,gCAAiB,YAAY,aAAa,GAAG;AAC/C,YAAQ,IAAI,kDAA6C;AAAA,EAC3D;AACF;AAEO,SAAS,uBAA6B;AAC3C,UAAQ,IAAI,gFAAgF;AAC9F;",
4
+ "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n appendImportLine,\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n removeMcpServersConfig,\n removeImportLine,\n writeMcpServersConfig,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CLAUDE_IMPORT = '@.kirograph/claude.md';\n\nfunction buildClaudeHooks(): object {\n return {\n hooks: {\n Stop: [\n { type: 'command', command: 'kirograph sync --quiet 2>/dev/null || true' },\n ],\n },\n };\n}\n\nexport function installClaudeEarly(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.mcp.json');\n const written = writeMcpServersConfig(mcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(written\n ? ` \u2713 Claude MCP server registered in ${mcpPath}`\n : ` \u2713 Claude MCP already configured in ${mcpPath}`);\n}\n\nexport function installClaudeLate(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', 'claude.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Claude instructions written to ${instructionsPath}`);\n\n const memoryPath = path.join(projectRoot, 'CLAUDE.md');\n const changed = appendImportLine(memoryPath, CLAUDE_IMPORT, '## KiroGraph');\n console.log(changed\n ? ` \u2713 Claude project memory updated in ${memoryPath}`\n : ` \u2713 Claude project memory already imports ${CLAUDE_IMPORT}`);\n\n // Write hooks to .claude/settings.json\n const settingsPath = path.join(projectRoot, '.claude', 'settings.json');\n ensureDir(path.dirname(settingsPath));\n const settings = readJson(settingsPath);\n const kgHooks = buildClaudeHooks() as any;\n settings.hooks = settings.hooks ?? {};\n for (const [event, commands] of Object.entries(kgHooks.hooks)) {\n settings.hooks[event] = settings.hooks[event] ?? [];\n for (const cmd of commands as Array<{ type: string; command: string }>) {\n if (!settings.hooks[event].some((h: any) => h.command === cmd.command)) {\n settings.hooks[event].push(cmd);\n }\n }\n }\n writeJson(settingsPath, settings);\n console.log(` \u2713 Claude Code hooks written to ${settingsPath}`);\n}\n\nexport function uninitClaude(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .mcp.json`);\n }\n\n const memoryPath = path.join(projectRoot, 'CLAUDE.md');\n if (removeImportLine(memoryPath, CLAUDE_IMPORT)) {\n console.log(` \u2713 Removed KiroGraph import from CLAUDE.md`);\n }\n\n // Remove kirograph hooks from .claude/settings.json\n const settingsPath = path.join(projectRoot, '.claude', 'settings.json');\n if (fs.existsSync(settingsPath)) {\n const settings = readJson(settingsPath);\n if (settings.hooks) {\n let changed = false;\n for (const event of Object.keys(settings.hooks)) {\n const before = settings.hooks[event].length;\n settings.hooks[event] = settings.hooks[event].filter((h: any) => !h.command?.includes('kirograph'));\n if (settings.hooks[event].length === 0) delete settings.hooks[event];\n if (settings.hooks[event]?.length !== before) changed = true;\n }\n if (Object.keys(settings.hooks).length === 0) delete settings.hooks;\n if (changed) {\n writeJson(settingsPath, settings);\n console.log(` \u2713 Removed kirograph hooks from .claude/settings.json`);\n }\n }\n }\n}\n\nexport function printClaudeNextSteps(): void {\n console.log('\\n Done! Restart Claude Code for the MCP server, hooks, and project memory to load.');\n console.log(' Auto-sync hook runs on session stop.\\n');\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -40,10 +40,25 @@ var import_common = require("../common");
40
40
  var import_instructions = require("../instructions");
41
41
  const CLINE_RULES_FILE = "kirograph.md";
42
42
  const CLINE_HOOK_SCRIPT = "#!/bin/sh\nkirograph sync --quiet 2>/dev/null || true\n";
43
- function installClineEarly(_projectRoot) {
43
+ function installClineEarly(projectRoot) {
44
+ const mcpPath = path.join(projectRoot, ".cline", "mcp_settings.json");
45
+ (0, import_common.ensureDir)(path.dirname(mcpPath));
46
+ const existing = (0, import_common.readJson)(mcpPath);
47
+ existing.mcpServers = existing.mcpServers ?? {};
48
+ if (existing.mcpServers[import_common.KIROGRAPH_SERVER_NAME]) {
49
+ console.log(` \u2713 Cline MCP already configured in ${mcpPath}`);
50
+ return;
51
+ }
52
+ existing.mcpServers[import_common.KIROGRAPH_SERVER_NAME] = {
53
+ command: import_common.KIROGRAPH_COMMAND,
54
+ args: import_common.KIROGRAPH_MCP_ARGS,
55
+ disabled: false
56
+ };
57
+ (0, import_common.writeJson)(mcpPath, existing);
58
+ console.log(` \u2713 Cline MCP server registered in ${mcpPath}`);
44
59
  }
45
- function installClineLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory) {
46
- const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true);
60
+ function installClineLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture) {
61
+ const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true, enableDocs, enableData, enableSecurity, enableArchitecture);
47
62
  const instructionsPath = path.join(projectRoot, ".kirograph", "cline.md");
48
63
  (0, import_common.ensureDir)(path.dirname(instructionsPath));
49
64
  fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(opts));
@@ -63,6 +78,16 @@ function installClineLate(projectRoot, cavemanMode, shellCompressionLevel, enabl
63
78
  console.log(` \u2713 Cline hook written to ${hookPath}`);
64
79
  }
65
80
  function uninitCline(projectRoot) {
81
+ const mcpPath = path.join(projectRoot, ".cline", "mcp_settings.json");
82
+ if (fs.existsSync(mcpPath)) {
83
+ const config = (0, import_common.readJson)(mcpPath);
84
+ if (config.mcpServers?.[import_common.KIROGRAPH_SERVER_NAME]) {
85
+ delete config.mcpServers[import_common.KIROGRAPH_SERVER_NAME];
86
+ if (Object.keys(config.mcpServers).length === 0) delete config.mcpServers;
87
+ (0, import_common.writeJson)(mcpPath, config);
88
+ console.log(` \u2713 Removed kirograph from .cline/mcp_settings.json`);
89
+ }
90
+ }
66
91
  const rulePath = path.join(projectRoot, ".clinerules", CLINE_RULES_FILE);
67
92
  if (fs.existsSync(rulePath)) {
68
93
  fs.unlinkSync(rulePath);
@@ -77,9 +102,10 @@ function uninitCline(projectRoot) {
77
102
  }
78
103
  }
79
104
  }
80
- function printClineNextSteps(projectRoot) {
81
- console.log("\n Done! KiroGraph rule and hook are in .clinerules/");
82
- (0, import_common.printMcpSetup)("~/.cline/mcp.json", projectRoot);
105
+ function printClineNextSteps(_projectRoot) {
106
+ console.log("\n Done! Restart Cline for the MCP server to load.");
107
+ console.log(" MCP registered in .cline/mcp_settings.json");
108
+ console.log(" KiroGraph rule and hook are in .clinerules/\n");
83
109
  }
84
110
  // Annotate the CommonJS export names for ESM import in node:
85
111
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/cline.ts"],
4
- "sourcesContent": ["/**\n * Cline target.\n *\n * MCP: .cline/mcp_settings.json\n * Rules: .clinerules/kirograph.md (directory-based, not a flat file)\n * Hooks: .cline/hooks/task_completed (executable script)\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n printMcpSetup,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CLINE_RULES_FILE = 'kirograph.md';\nconst CLINE_HOOK_SCRIPT = '#!/bin/sh\\nkirograph sync --quiet 2>/dev/null || true\\n';\n\nexport function installClineEarly(_projectRoot: string): void {\n // Cline MCP is user-scoped at ~/.cline/mcp.json.\n // We print the setup instructions in printNextSteps.\n}\n\nexport function installClineLate(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', 'cline.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Cline instructions written to ${instructionsPath}`);\n\n // Write rules file inside .clinerules/ directory\n const rulesDir = path.join(projectRoot, '.clinerules');\n // If .clinerules exists as a flat file (legacy), remove it first\n if (fs.existsSync(rulesDir) && fs.statSync(rulesDir).isFile()) {\n fs.unlinkSync(rulesDir);\n }\n ensureDir(rulesDir);\n const rulePath = path.join(rulesDir, CLINE_RULES_FILE);\n fs.writeFileSync(rulePath, buildAgentInstructions(opts));\n console.log(` \u2713 Cline rule written to ${rulePath}`);\n\n // Write hook script\n const hooksDir = path.join(projectRoot, '.clinerules', 'hooks');\n ensureDir(hooksDir);\n const hookPath = path.join(hooksDir, 'task_completed');\n fs.writeFileSync(hookPath, CLINE_HOOK_SCRIPT, { mode: 0o755 });\n console.log(` \u2713 Cline hook written to ${hookPath}`);\n}\n\nexport function uninitCline(projectRoot: string): void {\n // Remove rule file\n const rulePath = path.join(projectRoot, '.clinerules', CLINE_RULES_FILE);\n if (fs.existsSync(rulePath)) {\n fs.unlinkSync(rulePath);\n console.log(` \u2713 Removed .clinerules/${CLINE_RULES_FILE}`);\n }\n\n // Remove hook\n const hookPath = path.join(projectRoot, '.clinerules', 'hooks', 'task_completed');\n if (fs.existsSync(hookPath)) {\n const content = fs.readFileSync(hookPath, 'utf8');\n if (content.includes('kirograph')) {\n fs.unlinkSync(hookPath);\n console.log(` \u2713 Removed Cline hook .clinerules/hooks/task_completed`);\n }\n }\n}\n\nexport function printClineNextSteps(projectRoot: string): void {\n console.log('\\n Done! KiroGraph rule and hook are in .clinerules/');\n printMcpSetup('~/.cline/mcp.json', projectRoot);\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAoB;AACpB,WAAsB;AAEtB,oBAIO;AACP,0BAAuC;AAEvC,MAAM,mBAAmB;AACzB,MAAM,oBAAoB;AAEnB,SAAS,kBAAkB,cAA4B;AAG9D;AAEO,SAAS,iBAAiB,aAAqB,aAAmC,uBAAgC,cAA8B;AACrJ,QAAM,WAAO,oCAAqB,aAAa,uBAAuB,cAAc,IAAI;AAExF,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,UAAU;AACxE,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,IAAI,CAAC;AAC/D,UAAQ,IAAI,0CAAqC,gBAAgB,EAAE;AAGnE,QAAM,WAAW,KAAK,KAAK,aAAa,aAAa;AAErD,MAAI,GAAG,WAAW,QAAQ,KAAK,GAAG,SAAS,QAAQ,EAAE,OAAO,GAAG;AAC7D,OAAG,WAAW,QAAQ;AAAA,EACxB;AACA,+BAAU,QAAQ;AAClB,QAAM,WAAW,KAAK,KAAK,UAAU,gBAAgB;AACrD,KAAG,cAAc,cAAU,4CAAuB,IAAI,CAAC;AACvD,UAAQ,IAAI,kCAA6B,QAAQ,EAAE;AAGnD,QAAM,WAAW,KAAK,KAAK,aAAa,eAAe,OAAO;AAC9D,+BAAU,QAAQ;AAClB,QAAM,WAAW,KAAK,KAAK,UAAU,gBAAgB;AACrD,KAAG,cAAc,UAAU,mBAAmB,EAAE,MAAM,IAAM,CAAC;AAC7D,UAAQ,IAAI,kCAA6B,QAAQ,EAAE;AACrD;AAEO,SAAS,YAAY,aAA2B;AAErD,QAAM,WAAW,KAAK,KAAK,aAAa,eAAe,gBAAgB;AACvE,MAAI,GAAG,WAAW,QAAQ,GAAG;AAC3B,OAAG,WAAW,QAAQ;AACtB,YAAQ,IAAI,gCAA2B,gBAAgB,EAAE;AAAA,EAC3D;AAGA,QAAM,WAAW,KAAK,KAAK,aAAa,eAAe,SAAS,gBAAgB;AAChF,MAAI,GAAG,WAAW,QAAQ,GAAG;AAC3B,UAAM,UAAU,GAAG,aAAa,UAAU,MAAM;AAChD,QAAI,QAAQ,SAAS,WAAW,GAAG;AACjC,SAAG,WAAW,QAAQ;AACtB,cAAQ,IAAI,8DAAyD;AAAA,IACvE;AAAA,EACF;AACF;AAEO,SAAS,oBAAoB,aAA2B;AAC7D,UAAQ,IAAI,uDAAuD;AACnE,mCAAc,qBAAqB,WAAW;AAChD;",
4
+ "sourcesContent": ["/**\n * Cline target.\n *\n * MCP: .cline/mcp_settings.json\n * Rules: .clinerules/kirograph.md (directory-based, not a flat file)\n * Hooks: .cline/hooks/task_completed (executable script)\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} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CLINE_RULES_FILE = 'kirograph.md';\nconst CLINE_HOOK_SCRIPT = '#!/bin/sh\\nkirograph sync --quiet 2>/dev/null || true\\n';\n\nexport function installClineEarly(projectRoot: string): void {\n // Write MCP config to workspace-level .cline/mcp_settings.json\n const mcpPath = path.join(projectRoot, '.cline', 'mcp_settings.json');\n ensureDir(path.dirname(mcpPath));\n const existing = readJson(mcpPath);\n existing.mcpServers = existing.mcpServers ?? {};\n if (existing.mcpServers[KIROGRAPH_SERVER_NAME]) {\n console.log(` \u2713 Cline MCP already configured in ${mcpPath}`);\n return;\n }\n existing.mcpServers[KIROGRAPH_SERVER_NAME] = {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n disabled: false,\n };\n writeJson(mcpPath, existing);\n console.log(` \u2713 Cline MCP server registered in ${mcpPath}`);\n}\n\nexport function installClineLate(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', 'cline.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Cline instructions written to ${instructionsPath}`);\n\n // Write rules file inside .clinerules/ directory\n const rulesDir = path.join(projectRoot, '.clinerules');\n // If .clinerules exists as a flat file (legacy), remove it first\n if (fs.existsSync(rulesDir) && fs.statSync(rulesDir).isFile()) {\n fs.unlinkSync(rulesDir);\n }\n ensureDir(rulesDir);\n const rulePath = path.join(rulesDir, CLINE_RULES_FILE);\n fs.writeFileSync(rulePath, buildAgentInstructions(opts));\n console.log(` \u2713 Cline rule written to ${rulePath}`);\n\n // Write hook script\n const hooksDir = path.join(projectRoot, '.clinerules', 'hooks');\n ensureDir(hooksDir);\n const hookPath = path.join(hooksDir, 'task_completed');\n fs.writeFileSync(hookPath, CLINE_HOOK_SCRIPT, { mode: 0o755 });\n console.log(` \u2713 Cline hook written to ${hookPath}`);\n}\n\nexport function uninitCline(projectRoot: string): void {\n // Remove MCP entry\n const mcpPath = path.join(projectRoot, '.cline', 'mcp_settings.json');\n if (fs.existsSync(mcpPath)) {\n const config = readJson(mcpPath);\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(mcpPath, config);\n console.log(` \u2713 Removed kirograph from .cline/mcp_settings.json`);\n }\n }\n\n // Remove rule file\n const rulePath = path.join(projectRoot, '.clinerules', CLINE_RULES_FILE);\n if (fs.existsSync(rulePath)) {\n fs.unlinkSync(rulePath);\n console.log(` \u2713 Removed .clinerules/${CLINE_RULES_FILE}`);\n }\n\n // Remove hook\n const hookPath = path.join(projectRoot, '.clinerules', 'hooks', 'task_completed');\n if (fs.existsSync(hookPath)) {\n const content = fs.readFileSync(hookPath, 'utf8');\n if (content.includes('kirograph')) {\n fs.unlinkSync(hookPath);\n console.log(` \u2713 Removed Cline hook .clinerules/hooks/task_completed`);\n }\n }\n}\n\nexport function printClineNextSteps(_projectRoot: string): void {\n console.log('\\n Done! Restart Cline for the MCP server to load.');\n console.log(' MCP registered in .cline/mcp_settings.json');\n console.log(' KiroGraph rule and hook are in .clinerules/\\n');\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -39,15 +39,52 @@ var path = __toESM(require("path"));
39
39
  var import_common = require("../common");
40
40
  var import_instructions = require("../instructions");
41
41
  const CODEX_BLOCK_ID = "codex";
42
- function installCodexEarly(_projectRoot) {
42
+ function buildCodexHooks() {
43
+ return {
44
+ hooks: {
45
+ Stop: [
46
+ {
47
+ hooks: [
48
+ {
49
+ type: "command",
50
+ command: "kirograph sync --quiet 2>/dev/null || true",
51
+ timeout: 30
52
+ }
53
+ ]
54
+ }
55
+ ]
56
+ }
57
+ };
43
58
  }
44
- function installCodexLate(projectRoot, cavemanMode, _shellCompressionLevel, _enableMemory) {
59
+ function installCodexEarly(projectRoot) {
60
+ const codexDir = path.join(projectRoot, ".codex");
61
+ (0, import_common.ensureDir)(codexDir);
62
+ const hooksPath = path.join(codexDir, "hooks.json");
63
+ const existing = (0, import_common.readJson)(hooksPath);
64
+ const kgHooks = buildCodexHooks();
65
+ existing.hooks = existing.hooks ?? {};
66
+ for (const [event, matchers] of Object.entries(kgHooks.hooks)) {
67
+ existing.hooks[event] = existing.hooks[event] ?? [];
68
+ for (const matcher of matchers) {
69
+ const hasKirograph = existing.hooks[event].some(
70
+ (m) => m.hooks?.some((h) => h.command?.includes("kirograph"))
71
+ );
72
+ if (!hasKirograph) {
73
+ existing.hooks[event].push(matcher);
74
+ }
75
+ }
76
+ }
77
+ (0, import_common.writeJson)(hooksPath, existing);
78
+ console.log(` \u2713 Codex hooks written to ${hooksPath}`);
79
+ }
80
+ function installCodexLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture) {
81
+ const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true, enableDocs, enableData, enableSecurity, enableArchitecture);
45
82
  const instructionsPath = path.join(projectRoot, ".kirograph", "codex.md");
46
83
  (0, import_common.ensureDir)(path.dirname(instructionsPath));
47
- fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(cavemanMode));
84
+ fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(opts));
48
85
  console.log(` \u2713 Codex instructions written to ${instructionsPath}`);
49
86
  const agentsPath = path.join(projectRoot, "AGENTS.md");
50
- const changed = (0, import_common.upsertGeneratedBlock)(agentsPath, CODEX_BLOCK_ID, "## KiroGraph", (0, import_instructions.buildAgentInstructions)(cavemanMode));
87
+ const changed = (0, import_common.upsertGeneratedBlock)(agentsPath, CODEX_BLOCK_ID, "## KiroGraph", (0, import_instructions.buildAgentInstructions)(opts));
51
88
  console.log(changed ? ` \u2713 Codex project instructions updated in ${agentsPath}` : ` \u2713 Codex project instructions already up to date`);
52
89
  }
53
90
  function uninitCodex(projectRoot) {
@@ -55,17 +92,32 @@ function uninitCodex(projectRoot) {
55
92
  if ((0, import_common.removeGeneratedBlock)(agentsPath, CODEX_BLOCK_ID)) {
56
93
  console.log(` \u2713 Removed KiroGraph block from AGENTS.md`);
57
94
  }
95
+ const hooksPath = path.join(projectRoot, ".codex", "hooks.json");
96
+ if (fs.existsSync(hooksPath)) {
97
+ const config = (0, import_common.readJson)(hooksPath);
98
+ if (config.hooks) {
99
+ let changed = false;
100
+ for (const event of Object.keys(config.hooks)) {
101
+ const before = config.hooks[event].length;
102
+ config.hooks[event] = config.hooks[event].filter(
103
+ (m) => !m.hooks?.some((h) => h.command?.includes("kirograph"))
104
+ );
105
+ if (config.hooks[event].length === 0) delete config.hooks[event];
106
+ if (config.hooks[event]?.length !== before) changed = true;
107
+ }
108
+ if (Object.keys(config.hooks).length === 0) delete config.hooks;
109
+ if (changed) {
110
+ (0, import_common.writeJson)(hooksPath, config);
111
+ console.log(` \u2713 Removed kirograph hooks from .codex/hooks.json`);
112
+ }
113
+ }
114
+ }
58
115
  }
59
116
  function printCodexNextSteps(projectRoot) {
60
117
  const escapedPath = projectRoot.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
61
- console.log("\n Done! Codex project instructions are installed.");
62
- console.log(" Add the MCP server to Codex with:");
63
- console.log(` codex mcp add kirograph -- kirograph serve --mcp --path "${escapedPath}"`);
64
- console.log("\n Or add this to ~/.codex/config.toml:");
65
- console.log(" [mcp_servers.kirograph]");
66
- console.log(' command = "kirograph"');
67
- console.log(` args = ["serve", "--mcp", "--path", "${escapedPath}"]
68
- `);
118
+ console.log("\n Done! Codex project instructions and hooks are installed.");
119
+ console.log(" Auto-sync hook runs on Stop event.");
120
+ (0, import_common.printMcpCommand)(`codex mcp add kirograph -- kirograph serve --mcp --path "${escapedPath}"`);
69
121
  }
70
122
  // Annotate the CommonJS export names for ESM import in node:
71
123
  0 && (module.exports = {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/codex.ts"],
4
- "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport { ensureDir, removeGeneratedBlock, upsertGeneratedBlock } from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CODEX_BLOCK_ID = 'codex';\n\nexport function installCodexEarly(_projectRoot: string): void {\n // Codex MCP config is user-scoped. We print the exact config in next steps\n // instead of writing outside the project from an installer command.\n}\n\nexport function installCodexLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', _shellCompressionLevel?: string, _enableMemory?: boolean): void {\n const instructionsPath = path.join(projectRoot, '.kirograph', 'codex.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(cavemanMode));\n console.log(` \u2713 Codex instructions written to ${instructionsPath}`);\n\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n const changed = upsertGeneratedBlock(agentsPath, CODEX_BLOCK_ID, '## KiroGraph', buildAgentInstructions(cavemanMode));\n console.log(changed\n ? ` \u2713 Codex project instructions updated in ${agentsPath}`\n : ` \u2713 Codex project instructions already up to date`);\n}\n\nexport function uninitCodex(projectRoot: string): void {\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n if (removeGeneratedBlock(agentsPath, CODEX_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from AGENTS.md`);\n }\n}\n\nexport function printCodexNextSteps(projectRoot: string): void {\n const escapedPath = projectRoot.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n console.log('\\n Done! Codex project instructions are installed.');\n console.log(' Add the MCP server to Codex with:');\n console.log(` codex mcp add kirograph -- kirograph serve --mcp --path \"${escapedPath}\"`);\n console.log('\\n Or add this to ~/.codex/config.toml:');\n console.log(' [mcp_servers.kirograph]');\n console.log(' command = \"kirograph\"');\n console.log(` args = [\"serve\", \"--mcp\", \"--path\", \"${escapedPath}\"]\\n`);\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AAEtB,oBAAsE;AACtE,0BAAuC;AAEvC,MAAM,iBAAiB;AAEhB,SAAS,kBAAkB,cAA4B;AAG9D;AAEO,SAAS,iBAAiB,aAAqB,aAAmC,wBAAiC,eAA+B;AACvJ,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,UAAU;AACxE,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,WAAW,CAAC;AACtE,UAAQ,IAAI,0CAAqC,gBAAgB,EAAE;AAEnE,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,QAAM,cAAU,oCAAqB,YAAY,gBAAgB,oBAAgB,4CAAuB,WAAW,CAAC;AACpH,UAAQ,IAAI,UACR,kDAA6C,UAAU,KACvD,wDAAmD;AACzD;AAEO,SAAS,YAAY,aAA2B;AACrD,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,UAAI,oCAAqB,YAAY,cAAc,GAAG;AACpD,YAAQ,IAAI,iDAA4C;AAAA,EAC1D;AACF;AAEO,SAAS,oBAAoB,aAA2B;AAC7D,QAAM,cAAc,YAAY,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK;AAC1E,UAAQ,IAAI,qDAAqD;AACjE,UAAQ,IAAI,qCAAqC;AACjD,UAAQ,IAAI,gEAAgE,WAAW,GAAG;AAC1F,UAAQ,IAAI,0CAA0C;AACtD,UAAQ,IAAI,6BAA6B;AACzC,UAAQ,IAAI,2BAA2B;AACvC,UAAQ,IAAI,4CAA4C,WAAW;AAAA,CAAM;AAC3E;",
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 printMcpCommand,\n removeGeneratedBlock,\n upsertGeneratedBlock,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CODEX_BLOCK_ID = 'codex';\n\nfunction buildCodexHooks(): object {\n return {\n hooks: {\n Stop: [\n {\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 installCodexEarly(projectRoot: string): void {\n // Codex now supports project-level .codex/ config.\n // Write hooks.json there for auto-sync.\n const codexDir = path.join(projectRoot, '.codex');\n ensureDir(codexDir);\n const hooksPath = path.join(codexDir, 'hooks.json');\n const existing = readJson(hooksPath);\n const kgHooks = buildCodexHooks() as any;\n\n existing.hooks = existing.hooks ?? {};\n for (const [event, matchers] of Object.entries(kgHooks.hooks)) {\n existing.hooks[event] = existing.hooks[event] ?? [];\n for (const matcher of matchers as any[]) {\n // Avoid duplicates by checking if a kirograph command already exists\n const hasKirograph = existing.hooks[event].some((m: any) =>\n m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (!hasKirograph) {\n existing.hooks[event].push(matcher);\n }\n }\n }\n writeJson(hooksPath, existing);\n console.log(` \u2713 Codex hooks written to ${hooksPath}`);\n}\n\nexport function installCodexLate(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', 'codex.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Codex instructions written to ${instructionsPath}`);\n\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n const changed = upsertGeneratedBlock(agentsPath, CODEX_BLOCK_ID, '## KiroGraph', buildAgentInstructions(opts));\n console.log(changed\n ? ` \u2713 Codex project instructions updated in ${agentsPath}`\n : ` \u2713 Codex project instructions already up to date`);\n}\n\nexport function uninitCodex(projectRoot: string): void {\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n if (removeGeneratedBlock(agentsPath, CODEX_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from AGENTS.md`);\n }\n\n // Remove hooks\n const hooksPath = path.join(projectRoot, '.codex', '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((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 .codex/hooks.json`);\n }\n }\n }\n}\n\nexport function printCodexNextSteps(projectRoot: string): void {\n const escapedPath = projectRoot.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n console.log('\\n Done! Codex project instructions and hooks are installed.');\n console.log(' Auto-sync hook runs on Stop event.');\n printMcpCommand(`codex mcp add kirograph -- kirograph serve --mcp --path \"${escapedPath}\"`);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -55,8 +55,8 @@ function installContinueEarly(projectRoot) {
55
55
  (0, import_common.writeJson)(mcpPath, config);
56
56
  console.log(` \u2713 Continue MCP server registered in ${mcpPath}`);
57
57
  }
58
- function installContinueLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory) {
59
- const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory);
58
+ function installContinueLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory, enableDocs, enableData, enableSecurity, enableArchitecture) {
59
+ const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, void 0, enableDocs, enableData, enableSecurity, enableArchitecture);
60
60
  const instructionsPath = path.join(projectRoot, ".kirograph", "continue.md");
61
61
  (0, import_common.ensureDir)(path.dirname(instructionsPath));
62
62
  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/continue.ts"],
4
- "sourcesContent": ["/**\n * Continue target.\n *\n * MCP: .continue/mcpServers/kirograph.json (project-level, JSON format)\n * Rules: .continue/rules/kirograph.md\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst MCP_FILE = 'kirograph.json';\nconst RULES_FILE = 'kirograph.md';\n\nexport function installContinueEarly(projectRoot: string): void {\n // Write MCP config as a JSON file in .continue/mcpServers/\n const mcpDir = path.join(projectRoot, '.continue', 'mcpServers');\n ensureDir(mcpDir);\n const mcpPath = path.join(mcpDir, MCP_FILE);\n const config = {\n mcpServers: {\n kirograph: {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n },\n },\n };\n writeJson(mcpPath, config);\n console.log(` \u2713 Continue MCP server registered in ${mcpPath}`);\n}\n\nexport function installContinueLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean): void {\n const opts = buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'continue.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Continue instructions written to ${instructionsPath}`);\n\n // Write rules file in .continue/rules/\n const rulesDir = path.join(projectRoot, '.continue', 'rules');\n ensureDir(rulesDir);\n const rulePath = path.join(rulesDir, RULES_FILE);\n fs.writeFileSync(rulePath, buildAgentInstructions(opts));\n console.log(` \u2713 Continue rule written to ${rulePath}`);\n}\n\nexport function uninitContinue(projectRoot: string): void {\n // Remove MCP file\n const mcpPath = path.join(projectRoot, '.continue', 'mcpServers', MCP_FILE);\n if (fs.existsSync(mcpPath)) {\n fs.unlinkSync(mcpPath);\n console.log(` \u2713 Removed .continue/mcpServers/${MCP_FILE}`);\n }\n\n // Remove rule file\n const rulePath = path.join(projectRoot, '.continue', 'rules', RULES_FILE);\n if (fs.existsSync(rulePath)) {\n fs.unlinkSync(rulePath);\n console.log(` \u2713 Removed .continue/rules/${RULES_FILE}`);\n }\n\n // Remove legacy config.json entry if it exists\n const legacyPath = path.join(projectRoot, '.continue', 'config.json');\n if (fs.existsSync(legacyPath)) {\n try {\n const config = JSON.parse(fs.readFileSync(legacyPath, 'utf8'));\n if (config.mcpServers?.kirograph) {\n delete config.mcpServers.kirograph;\n if (Object.keys(config.mcpServers).length === 0) delete config.mcpServers;\n fs.writeFileSync(legacyPath, JSON.stringify(config, null, 2) + '\\n');\n console.log(` \u2713 Removed legacy kirograph from .continue/config.json`);\n }\n } catch {}\n }\n}\n\nexport function printContinueNextSteps(): void {\n console.log('\\n Done! Restart Continue for the MCP server to load.');\n console.log(' MCP is in .continue/mcpServers/kirograph.json');\n console.log(' KiroGraph rule is in .continue/rules/kirograph.md\\n');\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAoB;AACpB,WAAsB;AAEtB,oBAMO;AACP,0BAAuC;AAEvC,MAAM,WAAW;AACjB,MAAM,aAAa;AAEZ,SAAS,qBAAqB,aAA2B;AAE9D,QAAM,SAAS,KAAK,KAAK,aAAa,aAAa,YAAY;AAC/D,+BAAU,MAAM;AAChB,QAAM,UAAU,KAAK,KAAK,QAAQ,QAAQ;AAC1C,QAAM,SAAS;AAAA,IACb,YAAY;AAAA,MACV,WAAW;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,+BAAU,SAAS,MAAM;AACzB,UAAQ,IAAI,8CAAyC,OAAO,EAAE;AAChE;AAEO,SAAS,oBAAoB,aAAqB,aAAmC,uBAAgC,cAA8B;AACxJ,QAAM,WAAO,oCAAqB,aAAa,uBAAuB,YAAY;AAElF,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,aAAa;AAC3E,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,IAAI,CAAC;AAC/D,UAAQ,IAAI,6CAAwC,gBAAgB,EAAE;AAGtE,QAAM,WAAW,KAAK,KAAK,aAAa,aAAa,OAAO;AAC5D,+BAAU,QAAQ;AAClB,QAAM,WAAW,KAAK,KAAK,UAAU,UAAU;AAC/C,KAAG,cAAc,cAAU,4CAAuB,IAAI,CAAC;AACvD,UAAQ,IAAI,qCAAgC,QAAQ,EAAE;AACxD;AAEO,SAAS,eAAe,aAA2B;AAExD,QAAM,UAAU,KAAK,KAAK,aAAa,aAAa,cAAc,QAAQ;AAC1E,MAAI,GAAG,WAAW,OAAO,GAAG;AAC1B,OAAG,WAAW,OAAO;AACrB,YAAQ,IAAI,yCAAoC,QAAQ,EAAE;AAAA,EAC5D;AAGA,QAAM,WAAW,KAAK,KAAK,aAAa,aAAa,SAAS,UAAU;AACxE,MAAI,GAAG,WAAW,QAAQ,GAAG;AAC3B,OAAG,WAAW,QAAQ;AACtB,YAAQ,IAAI,oCAA+B,UAAU,EAAE;AAAA,EACzD;AAGA,QAAM,aAAa,KAAK,KAAK,aAAa,aAAa,aAAa;AACpE,MAAI,GAAG,WAAW,UAAU,GAAG;AAC7B,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,GAAG,aAAa,YAAY,MAAM,CAAC;AAC7D,UAAI,OAAO,YAAY,WAAW;AAChC,eAAO,OAAO,WAAW;AACzB,YAAI,OAAO,KAAK,OAAO,UAAU,EAAE,WAAW,EAAG,QAAO,OAAO;AAC/D,WAAG,cAAc,YAAY,KAAK,UAAU,QAAQ,MAAM,CAAC,IAAI,IAAI;AACnE,gBAAQ,IAAI,8DAAyD;AAAA,MACvE;AAAA,IACF,QAAQ;AAAA,IAAC;AAAA,EACX;AACF;AAEO,SAAS,yBAA+B;AAC7C,UAAQ,IAAI,wDAAwD;AACpE,UAAQ,IAAI,iDAAiD;AAC7D,UAAQ,IAAI,uDAAuD;AACrE;",
4
+ "sourcesContent": ["/**\n * Continue target.\n *\n * MCP: .continue/mcpServers/kirograph.json (project-level, JSON format)\n * Rules: .continue/rules/kirograph.md\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst MCP_FILE = 'kirograph.json';\nconst RULES_FILE = 'kirograph.md';\n\nexport function installContinueEarly(projectRoot: string): void {\n // Write MCP config as a JSON file in .continue/mcpServers/\n const mcpDir = path.join(projectRoot, '.continue', 'mcpServers');\n ensureDir(mcpDir);\n const mcpPath = path.join(mcpDir, MCP_FILE);\n const config = {\n mcpServers: {\n kirograph: {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n },\n },\n };\n writeJson(mcpPath, config);\n console.log(` \u2713 Continue MCP server registered in ${mcpPath}`);\n}\n\nexport function installContinueLate(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', 'continue.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Continue instructions written to ${instructionsPath}`);\n\n // Write rules file in .continue/rules/\n const rulesDir = path.join(projectRoot, '.continue', 'rules');\n ensureDir(rulesDir);\n const rulePath = path.join(rulesDir, RULES_FILE);\n fs.writeFileSync(rulePath, buildAgentInstructions(opts));\n console.log(` \u2713 Continue rule written to ${rulePath}`);\n}\n\nexport function uninitContinue(projectRoot: string): void {\n // Remove MCP file\n const mcpPath = path.join(projectRoot, '.continue', 'mcpServers', MCP_FILE);\n if (fs.existsSync(mcpPath)) {\n fs.unlinkSync(mcpPath);\n console.log(` \u2713 Removed .continue/mcpServers/${MCP_FILE}`);\n }\n\n // Remove rule file\n const rulePath = path.join(projectRoot, '.continue', 'rules', RULES_FILE);\n if (fs.existsSync(rulePath)) {\n fs.unlinkSync(rulePath);\n console.log(` \u2713 Removed .continue/rules/${RULES_FILE}`);\n }\n\n // Remove legacy config.json entry if it exists\n const legacyPath = path.join(projectRoot, '.continue', 'config.json');\n if (fs.existsSync(legacyPath)) {\n try {\n const config = JSON.parse(fs.readFileSync(legacyPath, 'utf8'));\n if (config.mcpServers?.kirograph) {\n delete config.mcpServers.kirograph;\n if (Object.keys(config.mcpServers).length === 0) delete config.mcpServers;\n fs.writeFileSync(legacyPath, JSON.stringify(config, null, 2) + '\\n');\n console.log(` \u2713 Removed legacy kirograph from .continue/config.json`);\n }\n } catch {}\n }\n}\n\nexport function printContinueNextSteps(): void {\n console.log('\\n Done! Restart Continue for the MCP server to load.');\n console.log(' MCP is in .continue/mcpServers/kirograph.json');\n console.log(' KiroGraph rule is in .continue/rules/kirograph.md\\n');\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAoB;AACpB,WAAsB;AAEtB,oBAMO;AACP,0BAAuC;AAEvC,MAAM,WAAW;AACjB,MAAM,aAAa;AAEZ,SAAS,qBAAqB,aAA2B;AAE9D,QAAM,SAAS,KAAK,KAAK,aAAa,aAAa,YAAY;AAC/D,+BAAU,MAAM;AAChB,QAAM,UAAU,KAAK,KAAK,QAAQ,QAAQ;AAC1C,QAAM,SAAS;AAAA,IACb,YAAY;AAAA,MACV,WAAW;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,+BAAU,SAAS,MAAM;AACzB,UAAQ,IAAI,8CAAyC,OAAO,EAAE;AAChE;AAEO,SAAS,oBAAoB,aAAqB,aAAmC,uBAAgC,cAAwB,YAAsB,YAAsB,gBAA0B,oBAAoC;AAC5P,QAAM,WAAO,oCAAqB,aAAa,uBAAuB,cAAc,QAAW,YAAY,YAAY,gBAAgB,kBAAkB;AAEzJ,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,aAAa;AAC3E,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,IAAI,CAAC;AAC/D,UAAQ,IAAI,6CAAwC,gBAAgB,EAAE;AAGtE,QAAM,WAAW,KAAK,KAAK,aAAa,aAAa,OAAO;AAC5D,+BAAU,QAAQ;AAClB,QAAM,WAAW,KAAK,KAAK,UAAU,UAAU;AAC/C,KAAG,cAAc,cAAU,4CAAuB,IAAI,CAAC;AACvD,UAAQ,IAAI,qCAAgC,QAAQ,EAAE;AACxD;AAEO,SAAS,eAAe,aAA2B;AAExD,QAAM,UAAU,KAAK,KAAK,aAAa,aAAa,cAAc,QAAQ;AAC1E,MAAI,GAAG,WAAW,OAAO,GAAG;AAC1B,OAAG,WAAW,OAAO;AACrB,YAAQ,IAAI,yCAAoC,QAAQ,EAAE;AAAA,EAC5D;AAGA,QAAM,WAAW,KAAK,KAAK,aAAa,aAAa,SAAS,UAAU;AACxE,MAAI,GAAG,WAAW,QAAQ,GAAG;AAC3B,OAAG,WAAW,QAAQ;AACtB,YAAQ,IAAI,oCAA+B,UAAU,EAAE;AAAA,EACzD;AAGA,QAAM,aAAa,KAAK,KAAK,aAAa,aAAa,aAAa;AACpE,MAAI,GAAG,WAAW,UAAU,GAAG;AAC7B,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,GAAG,aAAa,YAAY,MAAM,CAAC;AAC7D,UAAI,OAAO,YAAY,WAAW;AAChC,eAAO,OAAO,WAAW;AACzB,YAAI,OAAO,KAAK,OAAO,UAAU,EAAE,WAAW,EAAG,QAAO,OAAO;AAC/D,WAAG,cAAc,YAAY,KAAK,UAAU,QAAQ,MAAM,CAAC,IAAI,IAAI;AACnE,gBAAQ,IAAI,8DAAyD;AAAA,MACvE;AAAA,IACF,QAAQ;AAAA,IAAC;AAAA,EACX;AACF;AAEO,SAAS,yBAA+B;AAC7C,UAAQ,IAAI,wDAAwD;AACpE,UAAQ,IAAI,iDAAiD;AAC7D,UAAQ,IAAI,uDAAuD;AACrE;",
6
6
  "names": []
7
7
  }