kirograph 0.28.1 → 1.0.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 (110) hide show
  1. package/dist/architecture/index.js +4 -1
  2. package/dist/architecture/index.js.map +2 -2
  3. package/dist/architecture/manifest/index.js +13 -2
  4. package/dist/architecture/manifest/index.js.map +2 -2
  5. package/dist/bin/commands/install.js +2 -1
  6. package/dist/bin/commands/install.js.map +2 -2
  7. package/dist/bin/commands/status.js +2 -1
  8. package/dist/bin/commands/status.js.map +2 -2
  9. package/dist/bin/commands/uninit.js +2 -1
  10. package/dist/bin/commands/uninit.js.map +2 -2
  11. package/dist/bin/commands/vulns.js +10 -5
  12. package/dist/bin/commands/vulns.js.map +2 -2
  13. package/dist/bin/installer/common.js +7 -1
  14. package/dist/bin/installer/common.js.map +2 -2
  15. package/dist/bin/installer/detect.js +10 -0
  16. package/dist/bin/installer/detect.js.map +2 -2
  17. package/dist/bin/installer/hooks.js +13 -8
  18. package/dist/bin/installer/hooks.js.map +2 -2
  19. package/dist/bin/installer/targets/antigravity.js +1 -1
  20. package/dist/bin/installer/targets/antigravity.js.map +2 -2
  21. package/dist/bin/installer/targets/claude.js +1 -1
  22. package/dist/bin/installer/targets/claude.js.map +2 -2
  23. package/dist/bin/installer/targets/codex.js +1 -1
  24. package/dist/bin/installer/targets/codex.js.map +2 -2
  25. package/dist/bin/installer/targets/commandcode.js +84 -0
  26. package/dist/bin/installer/targets/commandcode.js.map +7 -0
  27. package/dist/bin/installer/targets/copilot.js +1 -1
  28. package/dist/bin/installer/targets/copilot.js.map +2 -2
  29. package/dist/bin/installer/targets/cursor.js +2 -2
  30. package/dist/bin/installer/targets/cursor.js.map +2 -2
  31. package/dist/bin/installer/targets/devin.js +1 -1
  32. package/dist/bin/installer/targets/devin.js.map +2 -2
  33. package/dist/bin/installer/targets/gemini-cli.js +1 -1
  34. package/dist/bin/installer/targets/gemini-cli.js.map +2 -2
  35. package/dist/bin/installer/targets/index.js +10 -0
  36. package/dist/bin/installer/targets/index.js.map +2 -2
  37. package/dist/bin/installer/targets/opencode.js +1 -1
  38. package/dist/bin/installer/targets/opencode.js.map +2 -2
  39. package/dist/bin/installer/targets/windsurf.js +1 -1
  40. package/dist/bin/installer/targets/windsurf.js.map +2 -2
  41. package/dist/bin/kirograph.js +1 -1
  42. package/dist/bin/kirograph.js.map +1 -1
  43. package/dist/config.js +21 -1
  44. package/dist/config.js.map +2 -2
  45. package/dist/core/pipeline.js +18 -6
  46. package/dist/core/pipeline.js.map +2 -2
  47. package/dist/extraction/extractor.js +58 -1
  48. package/dist/extraction/extractor.js.map +2 -2
  49. package/dist/extraction/grammars.js +38 -3
  50. package/dist/extraction/grammars.js.map +2 -2
  51. package/dist/extraction/wasm/tree-sitter-bash.wasm +0 -0
  52. package/dist/extraction/wasm/tree-sitter-c.wasm +0 -0
  53. package/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
  54. package/dist/extraction/wasm/tree-sitter-cpp.wasm +0 -0
  55. package/dist/extraction/wasm/tree-sitter-csharp.wasm +0 -0
  56. package/dist/extraction/wasm/tree-sitter-css.wasm +0 -0
  57. package/dist/extraction/wasm/tree-sitter-dart.wasm +0 -0
  58. package/dist/extraction/wasm/tree-sitter-elisp.wasm +0 -0
  59. package/dist/extraction/wasm/tree-sitter-elixir.wasm +0 -0
  60. package/dist/extraction/wasm/tree-sitter-elm.wasm +0 -0
  61. package/dist/extraction/wasm/tree-sitter-embedded_template.wasm +0 -0
  62. package/dist/extraction/wasm/tree-sitter-embeddedtemplate.wasm +0 -0
  63. package/dist/extraction/wasm/tree-sitter-go.wasm +0 -0
  64. package/dist/extraction/wasm/tree-sitter-html.wasm +0 -0
  65. package/dist/extraction/wasm/tree-sitter-java.wasm +0 -0
  66. package/dist/extraction/wasm/tree-sitter-javascript.wasm +0 -0
  67. package/dist/extraction/wasm/tree-sitter-json.wasm +0 -0
  68. package/dist/extraction/wasm/tree-sitter-kotlin.wasm +0 -0
  69. package/dist/extraction/wasm/tree-sitter-lua.wasm +0 -0
  70. package/dist/extraction/wasm/tree-sitter-objc.wasm +0 -0
  71. package/dist/extraction/wasm/tree-sitter-ocaml.wasm +0 -0
  72. package/dist/extraction/wasm/tree-sitter-php.wasm +0 -0
  73. package/dist/extraction/wasm/tree-sitter-python.wasm +0 -0
  74. package/dist/extraction/wasm/tree-sitter-ql.wasm +0 -0
  75. package/dist/extraction/wasm/tree-sitter-rescript.wasm +0 -0
  76. package/dist/extraction/wasm/tree-sitter-ruby.wasm +0 -0
  77. package/dist/extraction/wasm/tree-sitter-rust.wasm +0 -0
  78. package/dist/extraction/wasm/tree-sitter-scala.wasm +0 -0
  79. package/dist/extraction/wasm/tree-sitter-solidity.wasm +0 -0
  80. package/dist/extraction/wasm/tree-sitter-swift.wasm +0 -0
  81. package/dist/extraction/wasm/tree-sitter-systemrdl.wasm +0 -0
  82. package/dist/extraction/wasm/tree-sitter-tlaplus.wasm +0 -0
  83. package/dist/extraction/wasm/tree-sitter-toml.wasm +0 -0
  84. package/dist/extraction/wasm/tree-sitter-tsx.wasm +0 -0
  85. package/dist/extraction/wasm/tree-sitter-typescript.wasm +0 -0
  86. package/dist/extraction/wasm/tree-sitter-vue.wasm +0 -0
  87. package/dist/extraction/wasm/tree-sitter-yaml.wasm +0 -0
  88. package/dist/extraction/wasm/tree-sitter-zig.wasm +0 -0
  89. package/dist/frameworks/index.js +68 -7
  90. package/dist/frameworks/index.js.map +2 -2
  91. package/dist/security/manifest/adapter.js +17 -2
  92. package/dist/security/manifest/adapter.js.map +2 -2
  93. package/dist/security/manifest/parser.js +2 -2
  94. package/dist/security/manifest/parser.js.map +2 -2
  95. package/dist/security/pipeline.js +4 -1
  96. package/dist/security/pipeline.js.map +2 -2
  97. package/dist/security/reachability.js +61 -45
  98. package/dist/security/reachability.js.map +3 -3
  99. package/dist/security/types.js.map +1 -1
  100. package/dist/security/vuln/epss-client.js +1 -1
  101. package/dist/security/vuln/epss-client.js.map +1 -1
  102. package/dist/security/vuln/osv-adapter.js +99 -31
  103. package/dist/security/vuln/osv-adapter.js.map +2 -2
  104. package/dist/sync/index.js +9 -2
  105. package/dist/sync/index.js.map +2 -2
  106. package/dist/vectors/libsql-index.js +287 -0
  107. package/dist/vectors/libsql-index.js.map +7 -0
  108. package/dist/vectors/turso-index.js +307 -0
  109. package/dist/vectors/turso-index.js.map +7 -0
  110. package/package.json +3 -2
@@ -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 upsertGeneratedBlock,\n removeGeneratedBlock,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n LateInstallOptions,\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, opts: LateInstallOptions): void {\n const instructionOpts = buildInstructionOpts(opts, true);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'antigravity.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(instructionOpts));\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(instructionOpts));\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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",
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 silentCommand,\n LateInstallOptions,\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: silentCommand('kirograph sync --quiet'),\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, opts: LateInstallOptions): void {\n const instructionOpts = buildInstructionOpts(opts, true);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'antigravity.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(instructionOpts));\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(instructionOpts));\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
  }
@@ -43,7 +43,7 @@ function buildClaudeHooks() {
43
43
  return {
44
44
  hooks: {
45
45
  Stop: [
46
- { type: "command", command: "kirograph sync --quiet 2>/dev/null || true" }
46
+ { type: "command", command: (0, import_common.silentCommand)("kirograph sync --quiet") }
47
47
  ]
48
48
  }
49
49
  };
@@ -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 buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n removeMcpServersConfig,\n removeImportLine,\n writeMcpServersConfig,\n LateInstallOptions,\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, opts: LateInstallOptions): void {\n const instructionOpts = buildInstructionOpts(opts, false);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'claude.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(instructionOpts));\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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",
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 silentCommand,\n LateInstallOptions,\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: silentCommand('kirograph sync --quiet') },\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, opts: LateInstallOptions): void {\n const instructionOpts = buildInstructionOpts(opts, false);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'claude.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(instructionOpts));\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
  }
@@ -47,7 +47,7 @@ function buildCodexHooks() {
47
47
  hooks: [
48
48
  {
49
49
  type: "command",
50
- command: "kirograph sync --quiet 2>/dev/null || true",
50
+ command: (0, import_common.silentCommand)("kirograph sync --quiet"),
51
51
  timeout: 30
52
52
  }
53
53
  ]
@@ -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 {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n printMcpCommand,\n removeGeneratedBlock,\n upsertGeneratedBlock,\n LateInstallOptions,\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, opts: LateInstallOptions): void {\n const resolvedOpts = buildInstructionOpts(opts, false);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'codex.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(resolvedOpts));\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(resolvedOpts));\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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",
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 silentCommand,\n LateInstallOptions,\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: silentCommand('kirograph sync --quiet'),\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, opts: LateInstallOptions): void {\n const resolvedOpts = buildInstructionOpts(opts, false);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'codex.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(resolvedOpts));\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(resolvedOpts));\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
  }
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var commandcode_exports = {};
30
+ __export(commandcode_exports, {
31
+ installCommandCodeEarly: () => installCommandCodeEarly,
32
+ installCommandCodeLate: () => installCommandCodeLate,
33
+ printCommandCodeNextSteps: () => printCommandCodeNextSteps,
34
+ uninitCommandCode: () => uninitCommandCode
35
+ });
36
+ module.exports = __toCommonJS(commandcode_exports);
37
+ var fs = __toESM(require("fs"));
38
+ var path = __toESM(require("path"));
39
+ var import_common = require("../common");
40
+ var import_instructions = require("../instructions");
41
+ const COMMANDCODE_BLOCK_ID = "commandcode";
42
+ function installCommandCodeEarly(projectRoot) {
43
+ const mcpPath = path.join(projectRoot, ".mcp.json");
44
+ const written = (0, import_common.writeMcpServersConfig)(mcpPath, {
45
+ command: import_common.KIROGRAPH_COMMAND,
46
+ args: import_common.KIROGRAPH_MCP_ARGS
47
+ });
48
+ console.log(written ? ` \u2713 Command Code MCP server registered in ${mcpPath}` : ` \u2713 Command Code MCP already configured in ${mcpPath}`);
49
+ }
50
+ function installCommandCodeLate(projectRoot, opts) {
51
+ const resolvedOpts = (0, import_common.buildInstructionOpts)(opts, false);
52
+ const instructionsPath = path.join(projectRoot, ".kirograph", "commandcode.md");
53
+ (0, import_common.ensureDir)(path.dirname(instructionsPath));
54
+ fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(resolvedOpts));
55
+ console.log(` \u2713 Command Code instructions written to ${instructionsPath}`);
56
+ const agentsPath = path.join(projectRoot, "AGENTS.md");
57
+ const changed = (0, import_common.upsertGeneratedBlock)(agentsPath, COMMANDCODE_BLOCK_ID, "## KiroGraph", (0, import_instructions.buildAgentInstructions)(resolvedOpts));
58
+ console.log(changed ? ` \u2713 Command Code project instructions updated in ${agentsPath}` : ` \u2713 Command Code project instructions already up to date`);
59
+ }
60
+ function uninitCommandCode(projectRoot) {
61
+ const mcpPath = path.join(projectRoot, ".mcp.json");
62
+ if ((0, import_common.removeMcpServersConfig)(mcpPath)) {
63
+ console.log(` \u2713 Removed kirograph from .mcp.json`);
64
+ }
65
+ const agentsPath = path.join(projectRoot, "AGENTS.md");
66
+ if ((0, import_common.removeGeneratedBlock)(agentsPath, COMMANDCODE_BLOCK_ID)) {
67
+ console.log(` \u2713 Removed KiroGraph block from AGENTS.md`);
68
+ }
69
+ }
70
+ function printCommandCodeNextSteps(projectRoot) {
71
+ const escapedPath = projectRoot.replace(/\\/g, "\\\\").replace(/"/g, '\\"');
72
+ console.log("\n Done! Command Code project instructions and MCP server are installed.");
73
+ console.log(" Command Code auto-discovers the server from .mcp.json (project scope).");
74
+ console.log(" If it does not appear, add it explicitly:");
75
+ (0, import_common.printMcpCommand)(`cmd mcp add kirograph -- kirograph serve --mcp --path "${escapedPath}"`);
76
+ }
77
+ // Annotate the CommonJS export names for ESM import in node:
78
+ 0 && (module.exports = {
79
+ installCommandCodeEarly,
80
+ installCommandCodeLate,
81
+ printCommandCodeNextSteps,
82
+ uninitCommandCode
83
+ });
84
+ //# sourceMappingURL=commandcode.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/bin/installer/targets/commandcode.ts"],
4
+ "sourcesContent": ["/**\n * Command Code CLI target.\n *\n * Command Code (`cmd`, installed via `npm i -g command-code`) discovers MCP\n * servers from a project-scoped `.mcp.json` at the project root and reads\n * custom instructions from `AGENTS.md` (same conventions used by Codex/OpenCode).\n *\n * MCP: .mcp.json (mcpServers, project scope \u2014 committed to VCS)\n * Instructions: .kirograph/commandcode.md + a generated block in AGENTS.md\n *\n * Command Code has no project-level hook system comparable to Claude/Codex, so\n * no auto-sync hook is written; sync is available on demand via the MCP tools.\n *\n * Docs: https://commandcode.ai/docs/mcp\n */\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n ensureDir,\n buildInstructionOpts,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n removeMcpServersConfig,\n writeMcpServersConfig,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n printMcpCommand,\n LateInstallOptions,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst COMMANDCODE_BLOCK_ID = 'commandcode';\n\nexport function installCommandCodeEarly(projectRoot: string): void {\n // Command Code project scope stores MCP servers in .mcp.json at the project root.\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 Command Code MCP server registered in ${mcpPath}`\n : ` \u2713 Command Code MCP already configured in ${mcpPath}`);\n}\n\nexport function installCommandCodeLate(projectRoot: string, opts: LateInstallOptions): void {\n const resolvedOpts = buildInstructionOpts(opts, false);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'commandcode.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(resolvedOpts));\n console.log(` \u2713 Command Code instructions written to ${instructionsPath}`);\n\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n const changed = upsertGeneratedBlock(agentsPath, COMMANDCODE_BLOCK_ID, '## KiroGraph', buildAgentInstructions(resolvedOpts));\n console.log(changed\n ? ` \u2713 Command Code project instructions updated in ${agentsPath}`\n : ` \u2713 Command Code project instructions already up to date`);\n}\n\nexport function uninitCommandCode(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 agentsPath = path.join(projectRoot, 'AGENTS.md');\n if (removeGeneratedBlock(agentsPath, COMMANDCODE_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from AGENTS.md`);\n }\n}\n\nexport function printCommandCodeNextSteps(projectRoot: string): void {\n const escapedPath = projectRoot.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n console.log('\\n Done! Command Code project instructions and MCP server are installed.');\n console.log(' Command Code auto-discovers the server from .mcp.json (project scope).');\n console.log(' If it does not appear, add it explicitly:');\n printMcpCommand(`cmd mcp add kirograph -- kirograph serve --mcp --path \"${escapedPath}\"`);\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAeA,SAAoB;AACpB,WAAsB;AACtB,oBAYO;AACP,0BAAuC;AAEvC,MAAM,uBAAuB;AAEtB,SAAS,wBAAwB,aAA2B;AAEjE,QAAM,UAAU,KAAK,KAAK,aAAa,WAAW;AAClD,QAAM,cAAU,qCAAsB,SAAS;AAAA,IAC7C,SAAS;AAAA,IACT,MAAM;AAAA,EACR,CAAC;AACD,UAAQ,IAAI,UACR,kDAA6C,OAAO,KACpD,mDAA8C,OAAO,EAAE;AAC7D;AAEO,SAAS,uBAAuB,aAAqB,MAAgC;AAC1F,QAAM,mBAAe,oCAAqB,MAAM,KAAK;AAErD,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,gBAAgB;AAC9E,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,YAAY,CAAC;AACvE,UAAQ,IAAI,iDAA4C,gBAAgB,EAAE;AAE1E,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,QAAM,cAAU,oCAAqB,YAAY,sBAAsB,oBAAgB,4CAAuB,YAAY,CAAC;AAC3H,UAAQ,IAAI,UACR,yDAAoD,UAAU,KAC9D,+DAA0D;AAChE;AAEO,SAAS,kBAAkB,aAA2B;AAC3D,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,oCAAqB,YAAY,oBAAoB,GAAG;AAC1D,YAAQ,IAAI,iDAA4C;AAAA,EAC1D;AACF;AAEO,SAAS,0BAA0B,aAA2B;AACnE,QAAM,cAAc,YAAY,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK;AAC1E,UAAQ,IAAI,2EAA2E;AACvF,UAAQ,IAAI,0EAA0E;AACtF,UAAQ,IAAI,6CAA6C;AACzD,qCAAgB,0DAA0D,WAAW,GAAG;AAC1F;",
6
+ "names": []
7
+ }
@@ -43,7 +43,7 @@ function buildCopilotHooks() {
43
43
  return {
44
44
  hooks: {
45
45
  "session-end": [
46
- { command: "kirograph sync --quiet 2>/dev/null || true" }
46
+ { command: (0, import_common.silentCommand)("kirograph sync --quiet") }
47
47
  ]
48
48
  }
49
49
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/copilot.ts"],
4
- "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n LateInstallOptions,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n removeMcpServersConfig,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n writeMcpServersConfig,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst COPILOT_BLOCK_ID = 'copilot';\n\nfunction buildCopilotHooks(): object {\n return {\n hooks: {\n 'session-end': [\n { command: 'kirograph sync --quiet 2>/dev/null || true' },\n ],\n },\n };\n}\n\nexport function installCopilotEarly(projectRoot: string): void {\n // VS Code Copilot Chat format: .vscode/mcp.json with \"servers\" key\n const vscodeMcpPath = path.join(projectRoot, '.vscode', 'mcp.json');\n ensureDir(path.dirname(vscodeMcpPath));\n const vscodeConfig = readJson(vscodeMcpPath);\n vscodeConfig.servers = vscodeConfig.servers ?? {};\n if (!vscodeConfig.servers[KIROGRAPH_SERVER_NAME]) {\n vscodeConfig.servers[KIROGRAPH_SERVER_NAME] = {\n type: 'stdio',\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n };\n writeJson(vscodeMcpPath, vscodeConfig);\n console.log(` \u2713 Copilot MCP registered in ${vscodeMcpPath}`);\n } else {\n console.log(` \u2713 Copilot MCP already configured in ${vscodeMcpPath}`);\n }\n\n // GitHub Copilot agent mode format: .github/copilot-mcp.json with \"mcpServers\" key\n const ghMcpPath = path.join(projectRoot, '.github', 'copilot-mcp.json');\n const ghWritten = writeMcpServersConfig(ghMcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(ghWritten\n ? ` \u2713 Copilot MCP registered in ${ghMcpPath}`\n : ` \u2713 Copilot MCP already configured in ${ghMcpPath}`);\n}\n\nexport function installCopilotLate(projectRoot: string, opts: LateInstallOptions): void {\n const instructionOpts = buildInstructionOpts(opts, false);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'copilot.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(instructionOpts));\n console.log(` \u2713 Copilot instructions written to ${instructionsPath}`);\n\n const rulesPath = path.join(projectRoot, '.github', 'copilot-instructions.md');\n ensureDir(path.dirname(rulesPath));\n const changed = upsertGeneratedBlock(rulesPath, COPILOT_BLOCK_ID, '## KiroGraph', buildAgentInstructions(instructionOpts));\n console.log(changed\n ? ` \u2713 .github/copilot-instructions.md updated with KiroGraph instructions`\n : ` \u2713 .github/copilot-instructions.md already up to date`);\n\n // Write hooks\n const hooksPath = path.join(projectRoot, '.github', 'hooks.json');\n const existing = readJson(hooksPath);\n const kgHooks = buildCopilotHooks() as any;\n existing.hooks = existing.hooks ?? {};\n for (const [event, commands] of Object.entries(kgHooks.hooks)) {\n existing.hooks[event] = existing.hooks[event] ?? [];\n for (const cmd of commands as Array<{ command: string }>) {\n if (!existing.hooks[event].some((h: any) => h.command === cmd.command)) {\n existing.hooks[event].push(cmd);\n }\n }\n }\n writeJson(hooksPath, existing);\n console.log(` \u2713 Copilot hooks written to ${hooksPath}`);\n}\n\nexport function uninitCopilot(projectRoot: string): void {\n // Remove from .vscode/mcp.json (servers key)\n const vscodeMcpPath = path.join(projectRoot, '.vscode', 'mcp.json');\n if (fs.existsSync(vscodeMcpPath)) {\n const config = readJson(vscodeMcpPath);\n if (config.servers?.[KIROGRAPH_SERVER_NAME]) {\n delete config.servers[KIROGRAPH_SERVER_NAME];\n if (Object.keys(config.servers).length === 0) delete config.servers;\n writeJson(vscodeMcpPath, config);\n console.log(` \u2713 Removed kirograph from .vscode/mcp.json`);\n }\n }\n\n // Remove from .github/copilot-mcp.json\n const mcpPath = path.join(projectRoot, '.github', 'copilot-mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .github/copilot-mcp.json`);\n }\n\n const rulesPath = path.join(projectRoot, '.github', 'copilot-instructions.md');\n if (removeGeneratedBlock(rulesPath, COPILOT_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from .github/copilot-instructions.md`);\n }\n\n const hooksPath = path.join(projectRoot, '.github', 'hooks.json');\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config.hooks) {\n let changed = false;\n for (const event of Object.keys(config.hooks)) {\n const before = config.hooks[event].length;\n config.hooks[event] = config.hooks[event].filter((h: any) => !h.command?.includes('kirograph'));\n if (config.hooks[event].length === 0) delete config.hooks[event];\n if (config.hooks[event]?.length !== before) changed = true;\n }\n if (Object.keys(config.hooks).length === 0) delete config.hooks;\n if (changed) {\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph hooks from .github/hooks.json`);\n }\n }\n }\n}\n\nexport function printCopilotNextSteps(): void {\n console.log('\\n Done! Restart your editor for the Copilot MCP server and hooks to load.');\n console.log(' MCP registered in .vscode/mcp.json and .github/copilot-mcp.json');\n console.log(' Auto-sync hook runs on session end.\\n');\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n LateInstallOptions,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n removeMcpServersConfig,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n writeMcpServersConfig,\n silentCommand,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst COPILOT_BLOCK_ID = 'copilot';\n\nfunction buildCopilotHooks(): object {\n return {\n hooks: {\n 'session-end': [\n { command: silentCommand('kirograph sync --quiet') },\n ],\n },\n };\n}\n\nexport function installCopilotEarly(projectRoot: string): void {\n // VS Code Copilot Chat format: .vscode/mcp.json with \"servers\" key\n const vscodeMcpPath = path.join(projectRoot, '.vscode', 'mcp.json');\n ensureDir(path.dirname(vscodeMcpPath));\n const vscodeConfig = readJson(vscodeMcpPath);\n vscodeConfig.servers = vscodeConfig.servers ?? {};\n if (!vscodeConfig.servers[KIROGRAPH_SERVER_NAME]) {\n vscodeConfig.servers[KIROGRAPH_SERVER_NAME] = {\n type: 'stdio',\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n };\n writeJson(vscodeMcpPath, vscodeConfig);\n console.log(` \u2713 Copilot MCP registered in ${vscodeMcpPath}`);\n } else {\n console.log(` \u2713 Copilot MCP already configured in ${vscodeMcpPath}`);\n }\n\n // GitHub Copilot agent mode format: .github/copilot-mcp.json with \"mcpServers\" key\n const ghMcpPath = path.join(projectRoot, '.github', 'copilot-mcp.json');\n const ghWritten = writeMcpServersConfig(ghMcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(ghWritten\n ? ` \u2713 Copilot MCP registered in ${ghMcpPath}`\n : ` \u2713 Copilot MCP already configured in ${ghMcpPath}`);\n}\n\nexport function installCopilotLate(projectRoot: string, opts: LateInstallOptions): void {\n const instructionOpts = buildInstructionOpts(opts, false);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'copilot.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(instructionOpts));\n console.log(` \u2713 Copilot instructions written to ${instructionsPath}`);\n\n const rulesPath = path.join(projectRoot, '.github', 'copilot-instructions.md');\n ensureDir(path.dirname(rulesPath));\n const changed = upsertGeneratedBlock(rulesPath, COPILOT_BLOCK_ID, '## KiroGraph', buildAgentInstructions(instructionOpts));\n console.log(changed\n ? ` \u2713 .github/copilot-instructions.md updated with KiroGraph instructions`\n : ` \u2713 .github/copilot-instructions.md already up to date`);\n\n // Write hooks\n const hooksPath = path.join(projectRoot, '.github', 'hooks.json');\n const existing = readJson(hooksPath);\n const kgHooks = buildCopilotHooks() as any;\n existing.hooks = existing.hooks ?? {};\n for (const [event, commands] of Object.entries(kgHooks.hooks)) {\n existing.hooks[event] = existing.hooks[event] ?? [];\n for (const cmd of commands as Array<{ command: string }>) {\n if (!existing.hooks[event].some((h: any) => h.command === cmd.command)) {\n existing.hooks[event].push(cmd);\n }\n }\n }\n writeJson(hooksPath, existing);\n console.log(` \u2713 Copilot hooks written to ${hooksPath}`);\n}\n\nexport function uninitCopilot(projectRoot: string): void {\n // Remove from .vscode/mcp.json (servers key)\n const vscodeMcpPath = path.join(projectRoot, '.vscode', 'mcp.json');\n if (fs.existsSync(vscodeMcpPath)) {\n const config = readJson(vscodeMcpPath);\n if (config.servers?.[KIROGRAPH_SERVER_NAME]) {\n delete config.servers[KIROGRAPH_SERVER_NAME];\n if (Object.keys(config.servers).length === 0) delete config.servers;\n writeJson(vscodeMcpPath, config);\n console.log(` \u2713 Removed kirograph from .vscode/mcp.json`);\n }\n }\n\n // Remove from .github/copilot-mcp.json\n const mcpPath = path.join(projectRoot, '.github', 'copilot-mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .github/copilot-mcp.json`);\n }\n\n const rulesPath = path.join(projectRoot, '.github', 'copilot-instructions.md');\n if (removeGeneratedBlock(rulesPath, COPILOT_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from .github/copilot-instructions.md`);\n }\n\n const hooksPath = path.join(projectRoot, '.github', 'hooks.json');\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config.hooks) {\n let changed = false;\n for (const event of Object.keys(config.hooks)) {\n const before = config.hooks[event].length;\n config.hooks[event] = config.hooks[event].filter((h: any) => !h.command?.includes('kirograph'));\n if (config.hooks[event].length === 0) delete config.hooks[event];\n if (config.hooks[event]?.length !== before) changed = true;\n }\n if (Object.keys(config.hooks).length === 0) delete config.hooks;\n if (changed) {\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph hooks from .github/hooks.json`);\n }\n }\n }\n}\n\nexport function printCopilotNextSteps(): void {\n console.log('\\n Done! Restart your editor for the Copilot MCP server and hooks to load.');\n console.log(' MCP registered in .vscode/mcp.json and .github/copilot-mcp.json');\n console.log(' Auto-sync hook runs on session end.\\n');\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -43,12 +43,12 @@ const CURSOR_HOOKS_FILE = "hooks.json";
43
43
  function buildCursorHooks(enableCompression) {
44
44
  const hooks = {
45
45
  stop: [
46
- { command: "kirograph sync --quiet 2>/dev/null || true" }
46
+ { command: (0, import_common.silentCommand)("kirograph sync --quiet") }
47
47
  ]
48
48
  };
49
49
  if (enableCompression) {
50
50
  hooks.beforeShellExecution = [
51
- { command: "kirograph compress-hint 2>/dev/null || true" }
51
+ { command: (0, import_common.silentCommand)("kirograph compress-hint") }
52
52
  ];
53
53
  }
54
54
  return { version: 1, hooks };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/cursor.ts"],
4
- "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n removeMcpServersConfig,\n writeMcpServersConfig,\n LateInstallOptions,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CURSOR_RULES_FILE = 'kirograph.mdc';\nconst CURSOR_HOOKS_FILE = 'hooks.json';\n\nfunction buildCursorHooks(enableCompression?: boolean): object {\n const hooks: Record<string, Array<{ command: string }>> = {\n stop: [\n { command: 'kirograph sync --quiet 2>/dev/null || true' },\n ],\n };\n\n if (enableCompression) {\n hooks.beforeShellExecution = [\n { command: 'kirograph compress-hint 2>/dev/null || true' },\n ];\n }\n\n return { version: 1, hooks };\n}\n\nexport function installCursorEarly(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.cursor', 'mcp.json');\n const written = writeMcpServersConfig(mcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(written\n ? ` \u2713 Cursor MCP server registered in ${mcpPath}`\n : ` \u2713 Cursor MCP already configured in ${mcpPath}`);\n}\n\nexport function installCursorLate(projectRoot: string, opts: LateInstallOptions): void {\n const enableCompression = opts.shellCompressionLevel !== undefined && opts.shellCompressionLevel !== 'off';\n const instructionOpts = buildInstructionOpts(opts, true);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'cursor.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(instructionOpts));\n console.log(` \u2713 Cursor instructions written to ${instructionsPath}`);\n\n const rulesDir = path.join(projectRoot, '.cursor', 'rules');\n ensureDir(rulesDir);\n const rulePath = path.join(rulesDir, CURSOR_RULES_FILE);\n const frontmatter = [\n '---',\n 'description: KiroGraph semantic code knowledge graph \u2014 use graph tools instead of grep/glob',\n 'alwaysApply: true',\n '---',\n '',\n ].join('\\n');\n fs.writeFileSync(rulePath, frontmatter + buildAgentInstructions(instructionOpts));\n console.log(` \u2713 Cursor rule written to ${rulePath}`);\n\n // Write hooks\n const hooksPath = path.join(projectRoot, '.cursor', CURSOR_HOOKS_FILE);\n const existing = readJson(hooksPath);\n const kirographHooks = buildCursorHooks(enableCompression);\n // Merge: add kirograph hooks without overwriting user's existing hooks\n const merged = { ...existing, ...kirographHooks };\n if (existing.hooks) {\n merged.hooks = { ...existing.hooks };\n const kgHooks = (kirographHooks as any).hooks;\n for (const [event, commands] of Object.entries(kgHooks)) {\n merged.hooks[event] = merged.hooks[event] ?? [];\n // Avoid duplicates\n for (const cmd of commands as Array<{ command: string }>) {\n if (!merged.hooks[event].some((h: any) => h.command === cmd.command)) {\n merged.hooks[event].push(cmd);\n }\n }\n }\n }\n writeJson(hooksPath, merged);\n console.log(` \u2713 Cursor hooks written to ${hooksPath}`);\n}\n\nexport function uninitCursor(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.cursor', 'mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .cursor/mcp.json`);\n }\n\n const rulePath = path.join(projectRoot, '.cursor', 'rules', CURSOR_RULES_FILE);\n if (fs.existsSync(rulePath)) {\n fs.unlinkSync(rulePath);\n console.log(` \u2713 Removed .cursor/rules/${CURSOR_RULES_FILE}`);\n }\n\n // Remove kirograph hooks from hooks.json\n const hooksPath = path.join(projectRoot, '.cursor', CURSOR_HOOKS_FILE);\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config.hooks) {\n let changed = false;\n for (const event of Object.keys(config.hooks)) {\n const before = config.hooks[event].length;\n config.hooks[event] = config.hooks[event].filter((h: any) => !h.command?.includes('kirograph'));\n if (config.hooks[event].length === 0) delete config.hooks[event];\n if (config.hooks[event]?.length !== before) changed = true;\n }\n if (Object.keys(config.hooks).length === 0) delete config.hooks;\n if (changed) {\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph hooks from .cursor/hooks.json`);\n }\n }\n }\n}\n\nexport function printCursorNextSteps(): void {\n console.log('\\n Done! Restart Cursor for the MCP server and hooks to load.');\n console.log(' The kirograph rule is active in .cursor/rules/kirograph.mdc');\n console.log(' Auto-sync hook runs on task completion.\\n');\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n removeMcpServersConfig,\n writeMcpServersConfig,\n silentCommand,\n LateInstallOptions,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CURSOR_RULES_FILE = 'kirograph.mdc';\nconst CURSOR_HOOKS_FILE = 'hooks.json';\n\nfunction buildCursorHooks(enableCompression?: boolean): object {\n const hooks: Record<string, Array<{ command: string }>> = {\n stop: [\n { command: silentCommand('kirograph sync --quiet') },\n ],\n };\n\n if (enableCompression) {\n hooks.beforeShellExecution = [\n { command: silentCommand('kirograph compress-hint') },\n ];\n }\n\n return { version: 1, hooks };\n}\n\nexport function installCursorEarly(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.cursor', 'mcp.json');\n const written = writeMcpServersConfig(mcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(written\n ? ` \u2713 Cursor MCP server registered in ${mcpPath}`\n : ` \u2713 Cursor MCP already configured in ${mcpPath}`);\n}\n\nexport function installCursorLate(projectRoot: string, opts: LateInstallOptions): void {\n const enableCompression = opts.shellCompressionLevel !== undefined && opts.shellCompressionLevel !== 'off';\n const instructionOpts = buildInstructionOpts(opts, true);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'cursor.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(instructionOpts));\n console.log(` \u2713 Cursor instructions written to ${instructionsPath}`);\n\n const rulesDir = path.join(projectRoot, '.cursor', 'rules');\n ensureDir(rulesDir);\n const rulePath = path.join(rulesDir, CURSOR_RULES_FILE);\n const frontmatter = [\n '---',\n 'description: KiroGraph semantic code knowledge graph \u2014 use graph tools instead of grep/glob',\n 'alwaysApply: true',\n '---',\n '',\n ].join('\\n');\n fs.writeFileSync(rulePath, frontmatter + buildAgentInstructions(instructionOpts));\n console.log(` \u2713 Cursor rule written to ${rulePath}`);\n\n // Write hooks\n const hooksPath = path.join(projectRoot, '.cursor', CURSOR_HOOKS_FILE);\n const existing = readJson(hooksPath);\n const kirographHooks = buildCursorHooks(enableCompression);\n // Merge: add kirograph hooks without overwriting user's existing hooks\n const merged = { ...existing, ...kirographHooks };\n if (existing.hooks) {\n merged.hooks = { ...existing.hooks };\n const kgHooks = (kirographHooks as any).hooks;\n for (const [event, commands] of Object.entries(kgHooks)) {\n merged.hooks[event] = merged.hooks[event] ?? [];\n // Avoid duplicates\n for (const cmd of commands as Array<{ command: string }>) {\n if (!merged.hooks[event].some((h: any) => h.command === cmd.command)) {\n merged.hooks[event].push(cmd);\n }\n }\n }\n }\n writeJson(hooksPath, merged);\n console.log(` \u2713 Cursor hooks written to ${hooksPath}`);\n}\n\nexport function uninitCursor(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.cursor', 'mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .cursor/mcp.json`);\n }\n\n const rulePath = path.join(projectRoot, '.cursor', 'rules', CURSOR_RULES_FILE);\n if (fs.existsSync(rulePath)) {\n fs.unlinkSync(rulePath);\n console.log(` \u2713 Removed .cursor/rules/${CURSOR_RULES_FILE}`);\n }\n\n // Remove kirograph hooks from hooks.json\n const hooksPath = path.join(projectRoot, '.cursor', CURSOR_HOOKS_FILE);\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config.hooks) {\n let changed = false;\n for (const event of Object.keys(config.hooks)) {\n const before = config.hooks[event].length;\n config.hooks[event] = config.hooks[event].filter((h: any) => !h.command?.includes('kirograph'));\n if (config.hooks[event].length === 0) delete config.hooks[event];\n if (config.hooks[event]?.length !== before) changed = true;\n }\n if (Object.keys(config.hooks).length === 0) delete config.hooks;\n if (changed) {\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph hooks from .cursor/hooks.json`);\n }\n }\n }\n}\n\nexport function printCursorNextSteps(): void {\n console.log('\\n Done! Restart Cursor for the MCP server and hooks to load.');\n console.log(' The kirograph rule is active in .cursor/rules/kirograph.mdc');\n console.log(' Auto-sync hook runs on task completion.\\n');\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -48,7 +48,7 @@ function buildDevinHooks() {
48
48
  hooks: [
49
49
  {
50
50
  type: "command",
51
- command: "kirograph sync --quiet 2>/dev/null || true",
51
+ command: (0, import_common.silentCommand)("kirograph sync --quiet"),
52
52
  timeout: 30
53
53
  }
54
54
  ]
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/devin.ts"],
4
- "sourcesContent": ["/**\n * Devin for Terminal target.\n *\n * MCP: .devin/config.json (project-level, standard mcpServers format)\n * Hooks: .devin/hooks.v1.json (Claude Code compatible format)\n * Instructions: AGENTS.md (upsert block)\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n LateInstallOptions,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst DEVIN_BLOCK_ID = 'devin';\n\nfunction buildDevinHooks(): object {\n return {\n hooks: {\n Stop: [\n {\n matcher: '',\n hooks: [\n {\n type: 'command',\n command: 'kirograph sync --quiet 2>/dev/null || true',\n timeout: 30,\n },\n ],\n },\n ],\n },\n };\n}\n\nexport function installDevinEarly(projectRoot: string): void {\n // Write MCP to .devin/config.json\n const configPath = path.join(projectRoot, '.devin', 'config.json');\n ensureDir(path.dirname(configPath));\n const config = readJson(configPath);\n config.mcpServers = config.mcpServers ?? {};\n config.mcpServers[KIROGRAPH_SERVER_NAME] = {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n };\n writeJson(configPath, config);\n console.log(` \u2713 Devin MCP server registered in ${configPath}`);\n}\n\nexport function installDevinLate(projectRoot: string, opts: LateInstallOptions): void {\n const instructionOpts = buildInstructionOpts(opts, true);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'devin.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(instructionOpts));\n console.log(` \u2713 Devin instructions written to ${instructionsPath}`);\n\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n const changed = upsertGeneratedBlock(agentsPath, DEVIN_BLOCK_ID, '## KiroGraph', buildAgentInstructions(instructionOpts));\n console.log(changed\n ? ` \u2713 AGENTS.md updated with KiroGraph instructions (Devin)`\n : ` \u2713 AGENTS.md already up to date`);\n\n // Write hooks to .devin/hooks.v1.json (Claude Code compatible)\n const hooksPath = path.join(projectRoot, '.devin', 'hooks.v1.json');\n const existing = readJson(hooksPath);\n const kgHooks = buildDevinHooks() as any;\n existing.hooks = existing.hooks ?? {};\n for (const [event, matchers] of Object.entries(kgHooks.hooks)) {\n existing.hooks[event] = existing.hooks[event] ?? [];\n const hasKirograph = existing.hooks[event].some((m: any) =>\n m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (!hasKirograph) {\n for (const matcher of matchers as any[]) {\n existing.hooks[event].push(matcher);\n }\n }\n }\n writeJson(hooksPath, existing);\n console.log(` \u2713 Devin hooks written to ${hooksPath}`);\n}\n\nexport function uninitDevin(projectRoot: string): void {\n // Remove MCP\n const configPath = path.join(projectRoot, '.devin', 'config.json');\n if (fs.existsSync(configPath)) {\n const config = readJson(configPath);\n if (config.mcpServers?.[KIROGRAPH_SERVER_NAME]) {\n delete config.mcpServers[KIROGRAPH_SERVER_NAME];\n if (Object.keys(config.mcpServers).length === 0) delete config.mcpServers;\n writeJson(configPath, config);\n console.log(` \u2713 Removed kirograph from .devin/config.json`);\n }\n }\n\n // Remove AGENTS.md block\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n if (removeGeneratedBlock(agentsPath, DEVIN_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from AGENTS.md (Devin)`);\n }\n\n // Remove hooks\n const hooksPath = path.join(projectRoot, '.devin', 'hooks.v1.json');\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config.hooks) {\n let changed = false;\n for (const event of Object.keys(config.hooks)) {\n const before = config.hooks[event].length;\n config.hooks[event] = config.hooks[event].filter((m: any) =>\n !m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (config.hooks[event].length === 0) delete config.hooks[event];\n if (config.hooks[event]?.length !== before) changed = true;\n }\n if (Object.keys(config.hooks).length === 0) delete config.hooks;\n if (changed) {\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph hooks from .devin/hooks.v1.json`);\n }\n }\n }\n}\n\nexport function printDevinNextSteps(): void {\n console.log('\\n Done! Restart Devin for Terminal for the MCP server and hooks to load.');\n console.log(' MCP is in .devin/config.json');\n console.log(' Auto-sync hook is in .devin/hooks.v1.json');\n console.log(' KiroGraph instructions are in AGENTS.md\\n');\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Devin for Terminal target.\n *\n * MCP: .devin/config.json (project-level, standard mcpServers format)\n * Hooks: .devin/hooks.v1.json (Claude Code compatible format)\n * Instructions: AGENTS.md (upsert block)\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n silentCommand,\n LateInstallOptions,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst DEVIN_BLOCK_ID = 'devin';\n\nfunction buildDevinHooks(): object {\n return {\n hooks: {\n Stop: [\n {\n matcher: '',\n hooks: [\n {\n type: 'command',\n command: silentCommand('kirograph sync --quiet'),\n timeout: 30,\n },\n ],\n },\n ],\n },\n };\n}\n\nexport function installDevinEarly(projectRoot: string): void {\n // Write MCP to .devin/config.json\n const configPath = path.join(projectRoot, '.devin', 'config.json');\n ensureDir(path.dirname(configPath));\n const config = readJson(configPath);\n config.mcpServers = config.mcpServers ?? {};\n config.mcpServers[KIROGRAPH_SERVER_NAME] = {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n };\n writeJson(configPath, config);\n console.log(` \u2713 Devin MCP server registered in ${configPath}`);\n}\n\nexport function installDevinLate(projectRoot: string, opts: LateInstallOptions): void {\n const instructionOpts = buildInstructionOpts(opts, true);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'devin.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(instructionOpts));\n console.log(` \u2713 Devin instructions written to ${instructionsPath}`);\n\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n const changed = upsertGeneratedBlock(agentsPath, DEVIN_BLOCK_ID, '## KiroGraph', buildAgentInstructions(instructionOpts));\n console.log(changed\n ? ` \u2713 AGENTS.md updated with KiroGraph instructions (Devin)`\n : ` \u2713 AGENTS.md already up to date`);\n\n // Write hooks to .devin/hooks.v1.json (Claude Code compatible)\n const hooksPath = path.join(projectRoot, '.devin', 'hooks.v1.json');\n const existing = readJson(hooksPath);\n const kgHooks = buildDevinHooks() as any;\n existing.hooks = existing.hooks ?? {};\n for (const [event, matchers] of Object.entries(kgHooks.hooks)) {\n existing.hooks[event] = existing.hooks[event] ?? [];\n const hasKirograph = existing.hooks[event].some((m: any) =>\n m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (!hasKirograph) {\n for (const matcher of matchers as any[]) {\n existing.hooks[event].push(matcher);\n }\n }\n }\n writeJson(hooksPath, existing);\n console.log(` \u2713 Devin hooks written to ${hooksPath}`);\n}\n\nexport function uninitDevin(projectRoot: string): void {\n // Remove MCP\n const configPath = path.join(projectRoot, '.devin', 'config.json');\n if (fs.existsSync(configPath)) {\n const config = readJson(configPath);\n if (config.mcpServers?.[KIROGRAPH_SERVER_NAME]) {\n delete config.mcpServers[KIROGRAPH_SERVER_NAME];\n if (Object.keys(config.mcpServers).length === 0) delete config.mcpServers;\n writeJson(configPath, config);\n console.log(` \u2713 Removed kirograph from .devin/config.json`);\n }\n }\n\n // Remove AGENTS.md block\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n if (removeGeneratedBlock(agentsPath, DEVIN_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from AGENTS.md (Devin)`);\n }\n\n // Remove hooks\n const hooksPath = path.join(projectRoot, '.devin', 'hooks.v1.json');\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config.hooks) {\n let changed = false;\n for (const event of Object.keys(config.hooks)) {\n const before = config.hooks[event].length;\n config.hooks[event] = config.hooks[event].filter((m: any) =>\n !m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (config.hooks[event].length === 0) delete config.hooks[event];\n if (config.hooks[event]?.length !== before) changed = true;\n }\n if (Object.keys(config.hooks).length === 0) delete config.hooks;\n if (changed) {\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph hooks from .devin/hooks.v1.json`);\n }\n }\n }\n}\n\nexport function printDevinNextSteps(): void {\n console.log('\\n Done! Restart Devin for Terminal for the MCP server and hooks to load.');\n console.log(' MCP is in .devin/config.json');\n console.log(' Auto-sync hook is in .devin/hooks.v1.json');\n console.log(' KiroGraph instructions are in AGENTS.md\\n');\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAoB;AACpB,WAAsB;AACtB,oBAYO;AACP,0BAAuC;AAEvC,MAAM,iBAAiB;AAEvB,SAAS,kBAA0B;AACjC,SAAO;AAAA,IACL,OAAO;AAAA,MACL,MAAM;AAAA,QACJ;AAAA,UACE,SAAS;AAAA,UACT,OAAO;AAAA,YACL;AAAA,cACE,MAAM;AAAA,cACN,aAAS,6BAAc,wBAAwB;AAAA,cAC/C,SAAS;AAAA,YACX;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,kBAAkB,aAA2B;AAE3D,QAAM,aAAa,KAAK,KAAK,aAAa,UAAU,aAAa;AACjE,+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,2CAAsC,UAAU,EAAE;AAChE;AAEO,SAAS,iBAAiB,aAAqB,MAAgC;AACpF,QAAM,sBAAkB,oCAAqB,MAAM,IAAI;AAEvD,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,UAAU;AACxE,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,eAAe,CAAC;AAC1E,UAAQ,IAAI,0CAAqC,gBAAgB,EAAE;AAEnE,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,QAAM,cAAU,oCAAqB,YAAY,gBAAgB,oBAAgB,4CAAuB,eAAe,CAAC;AACxH,UAAQ,IAAI,UACR,mEACA,uCAAkC;AAGtC,QAAM,YAAY,KAAK,KAAK,aAAa,UAAU,eAAe;AAClE,QAAM,eAAW,wBAAS,SAAS;AACnC,QAAM,UAAU,gBAAgB;AAChC,WAAS,QAAQ,SAAS,SAAS,CAAC;AACpC,aAAW,CAAC,OAAO,QAAQ,KAAK,OAAO,QAAQ,QAAQ,KAAK,GAAG;AAC7D,aAAS,MAAM,KAAK,IAAI,SAAS,MAAM,KAAK,KAAK,CAAC;AAClD,UAAM,eAAe,SAAS,MAAM,KAAK,EAAE;AAAA,MAAK,CAAC,MAC/C,EAAE,OAAO,KAAK,CAAC,MAAW,EAAE,SAAS,SAAS,WAAW,CAAC;AAAA,IAC5D;AACA,QAAI,CAAC,cAAc;AACjB,iBAAW,WAAW,UAAmB;AACvC,iBAAS,MAAM,KAAK,EAAE,KAAK,OAAO;AAAA,MACpC;AAAA,IACF;AAAA,EACF;AACA,+BAAU,WAAW,QAAQ;AAC7B,UAAQ,IAAI,mCAA8B,SAAS,EAAE;AACvD;AAEO,SAAS,YAAY,aAA2B;AAErD,QAAM,aAAa,KAAK,KAAK,aAAa,UAAU,aAAa;AACjE,MAAI,GAAG,WAAW,UAAU,GAAG;AAC7B,UAAM,aAAS,wBAAS,UAAU;AAClC,QAAI,OAAO,aAAa,mCAAqB,GAAG;AAC9C,aAAO,OAAO,WAAW,mCAAqB;AAC9C,UAAI,OAAO,KAAK,OAAO,UAAU,EAAE,WAAW,EAAG,QAAO,OAAO;AAC/D,mCAAU,YAAY,MAAM;AAC5B,cAAQ,IAAI,oDAA+C;AAAA,IAC7D;AAAA,EACF;AAGA,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,UAAI,oCAAqB,YAAY,cAAc,GAAG;AACpD,YAAQ,IAAI,yDAAoD;AAAA,EAClE;AAGA,QAAM,YAAY,KAAK,KAAK,aAAa,UAAU,eAAe;AAClE,MAAI,GAAG,WAAW,SAAS,GAAG;AAC5B,UAAM,aAAS,wBAAS,SAAS;AACjC,QAAI,OAAO,OAAO;AAChB,UAAI,UAAU;AACd,iBAAW,SAAS,OAAO,KAAK,OAAO,KAAK,GAAG;AAC7C,cAAM,SAAS,OAAO,MAAM,KAAK,EAAE;AACnC,eAAO,MAAM,KAAK,IAAI,OAAO,MAAM,KAAK,EAAE;AAAA,UAAO,CAAC,MAChD,CAAC,EAAE,OAAO,KAAK,CAAC,MAAW,EAAE,SAAS,SAAS,WAAW,CAAC;AAAA,QAC7D;AACA,YAAI,OAAO,MAAM,KAAK,EAAE,WAAW,EAAG,QAAO,OAAO,MAAM,KAAK;AAC/D,YAAI,OAAO,MAAM,KAAK,GAAG,WAAW,OAAQ,WAAU;AAAA,MACxD;AACA,UAAI,OAAO,KAAK,OAAO,KAAK,EAAE,WAAW,EAAG,QAAO,OAAO;AAC1D,UAAI,SAAS;AACX,qCAAU,WAAW,MAAM;AAC3B,gBAAQ,IAAI,4DAAuD;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,sBAA4B;AAC1C,UAAQ,IAAI,4EAA4E;AACxF,UAAQ,IAAI,gCAAgC;AAC5C,UAAQ,IAAI,6CAA6C;AACzD,UAAQ,IAAI,6CAA6C;AAC3D;",
6
6
  "names": []
7
7
  }
@@ -72,7 +72,7 @@ function installGeminiCliLate(projectRoot, opts) {
72
72
  hooks: [
73
73
  {
74
74
  type: "command",
75
- command: "kirograph sync --quiet 2>/dev/null || true",
75
+ command: (0, import_common.silentCommand)("kirograph sync --quiet"),
76
76
  timeout: 5e3
77
77
  }
78
78
  ]
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/gemini-cli.ts"],
4
- "sourcesContent": ["/**\n * Gemini CLI target.\n *\n * MCP: .gemini/settings.json (project-level, mcpServers format)\n * Hooks: .gemini/settings.json (hooks section with SessionEnd event)\n * Instructions: GEMINI.md (upsert block)\n *\n * NOTE: This is NOT an alias for Antigravity. Gemini CLI and Antigravity IDE\n * use different config paths and hook formats.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n LateInstallOptions,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst GEMINI_CLI_BLOCK_ID = 'gemini-cli';\n\nexport function installGeminiCliEarly(projectRoot: string): void {\n // Write MCP + hooks to .gemini/settings.json\n const settingsPath = path.join(projectRoot, '.gemini', 'settings.json');\n ensureDir(path.dirname(settingsPath));\n const settings = readJson(settingsPath);\n\n // MCP server\n settings.mcpServers = settings.mcpServers ?? {};\n settings.mcpServers[KIROGRAPH_SERVER_NAME] = {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n };\n\n writeJson(settingsPath, settings);\n console.log(` \u2713 Gemini CLI MCP server registered in ${settingsPath}`);\n}\n\nexport function installGeminiCliLate(projectRoot: string, opts: LateInstallOptions): void {\n const instructionOpts = buildInstructionOpts(opts, true);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'gemini-cli.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(instructionOpts));\n console.log(` \u2713 Gemini CLI instructions written to ${instructionsPath}`);\n\n const geminiPath = path.join(projectRoot, 'GEMINI.md');\n const changed = upsertGeneratedBlock(geminiPath, GEMINI_CLI_BLOCK_ID, '## KiroGraph', buildAgentInstructions(instructionOpts));\n console.log(changed\n ? ` \u2713 GEMINI.md updated with KiroGraph instructions`\n : ` \u2713 GEMINI.md already up to date`);\n\n // Write hooks to .gemini/settings.json\n const settingsPath = path.join(projectRoot, '.gemini', 'settings.json');\n const settings = readJson(settingsPath);\n settings.hooks = settings.hooks ?? {};\n settings.hooks.SessionEnd = settings.hooks.SessionEnd ?? [];\n\n const hasKirograph = settings.hooks.SessionEnd.some((m: any) =>\n m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (!hasKirograph) {\n settings.hooks.SessionEnd.push({\n hooks: [\n {\n type: 'command',\n command: 'kirograph sync --quiet 2>/dev/null || true',\n timeout: 5000,\n },\n ],\n });\n }\n\n writeJson(settingsPath, settings);\n console.log(` \u2713 Gemini CLI hooks written to ${settingsPath}`);\n}\n\nexport function uninitGeminiCli(projectRoot: string): void {\n const settingsPath = path.join(projectRoot, '.gemini', 'settings.json');\n if (fs.existsSync(settingsPath)) {\n const settings = readJson(settingsPath);\n let changed = false;\n\n // Remove MCP\n if (settings.mcpServers?.[KIROGRAPH_SERVER_NAME]) {\n delete settings.mcpServers[KIROGRAPH_SERVER_NAME];\n if (Object.keys(settings.mcpServers).length === 0) delete settings.mcpServers;\n changed = true;\n console.log(` \u2713 Removed kirograph from .gemini/settings.json mcpServers`);\n }\n\n // Remove hooks\n if (settings.hooks?.SessionEnd) {\n const before = settings.hooks.SessionEnd.length;\n settings.hooks.SessionEnd = settings.hooks.SessionEnd.filter((m: any) =>\n !m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (settings.hooks.SessionEnd.length === 0) delete settings.hooks.SessionEnd;\n if (Object.keys(settings.hooks).length === 0) delete settings.hooks;\n if (settings.hooks?.SessionEnd?.length !== before) {\n changed = true;\n console.log(` \u2713 Removed kirograph hooks from .gemini/settings.json`);\n }\n }\n\n if (changed) writeJson(settingsPath, settings);\n }\n\n const geminiPath = path.join(projectRoot, 'GEMINI.md');\n if (removeGeneratedBlock(geminiPath, GEMINI_CLI_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from GEMINI.md`);\n }\n}\n\nexport function printGeminiCliNextSteps(): void {\n console.log('\\n Done! Restart Gemini CLI for the MCP server and hooks to load.');\n console.log(' MCP and hooks are in .gemini/settings.json');\n console.log(' KiroGraph instructions are in GEMINI.md\\n');\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * Gemini CLI target.\n *\n * MCP: .gemini/settings.json (project-level, mcpServers format)\n * Hooks: .gemini/settings.json (hooks section with SessionEnd event)\n * Instructions: GEMINI.md (upsert block)\n *\n * NOTE: This is NOT an alias for Antigravity. Gemini CLI and Antigravity IDE\n * use different config paths and hook formats.\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n KIROGRAPH_SERVER_NAME,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n silentCommand,\n LateInstallOptions,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst GEMINI_CLI_BLOCK_ID = 'gemini-cli';\n\nexport function installGeminiCliEarly(projectRoot: string): void {\n // Write MCP + hooks to .gemini/settings.json\n const settingsPath = path.join(projectRoot, '.gemini', 'settings.json');\n ensureDir(path.dirname(settingsPath));\n const settings = readJson(settingsPath);\n\n // MCP server\n settings.mcpServers = settings.mcpServers ?? {};\n settings.mcpServers[KIROGRAPH_SERVER_NAME] = {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n };\n\n writeJson(settingsPath, settings);\n console.log(` \u2713 Gemini CLI MCP server registered in ${settingsPath}`);\n}\n\nexport function installGeminiCliLate(projectRoot: string, opts: LateInstallOptions): void {\n const instructionOpts = buildInstructionOpts(opts, true);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'gemini-cli.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(instructionOpts));\n console.log(` \u2713 Gemini CLI instructions written to ${instructionsPath}`);\n\n const geminiPath = path.join(projectRoot, 'GEMINI.md');\n const changed = upsertGeneratedBlock(geminiPath, GEMINI_CLI_BLOCK_ID, '## KiroGraph', buildAgentInstructions(instructionOpts));\n console.log(changed\n ? ` \u2713 GEMINI.md updated with KiroGraph instructions`\n : ` \u2713 GEMINI.md already up to date`);\n\n // Write hooks to .gemini/settings.json\n const settingsPath = path.join(projectRoot, '.gemini', 'settings.json');\n const settings = readJson(settingsPath);\n settings.hooks = settings.hooks ?? {};\n settings.hooks.SessionEnd = settings.hooks.SessionEnd ?? [];\n\n const hasKirograph = settings.hooks.SessionEnd.some((m: any) =>\n m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (!hasKirograph) {\n settings.hooks.SessionEnd.push({\n hooks: [\n {\n type: 'command',\n command: silentCommand('kirograph sync --quiet'),\n timeout: 5000,\n },\n ],\n });\n }\n\n writeJson(settingsPath, settings);\n console.log(` \u2713 Gemini CLI hooks written to ${settingsPath}`);\n}\n\nexport function uninitGeminiCli(projectRoot: string): void {\n const settingsPath = path.join(projectRoot, '.gemini', 'settings.json');\n if (fs.existsSync(settingsPath)) {\n const settings = readJson(settingsPath);\n let changed = false;\n\n // Remove MCP\n if (settings.mcpServers?.[KIROGRAPH_SERVER_NAME]) {\n delete settings.mcpServers[KIROGRAPH_SERVER_NAME];\n if (Object.keys(settings.mcpServers).length === 0) delete settings.mcpServers;\n changed = true;\n console.log(` \u2713 Removed kirograph from .gemini/settings.json mcpServers`);\n }\n\n // Remove hooks\n if (settings.hooks?.SessionEnd) {\n const before = settings.hooks.SessionEnd.length;\n settings.hooks.SessionEnd = settings.hooks.SessionEnd.filter((m: any) =>\n !m.hooks?.some((h: any) => h.command?.includes('kirograph'))\n );\n if (settings.hooks.SessionEnd.length === 0) delete settings.hooks.SessionEnd;\n if (Object.keys(settings.hooks).length === 0) delete settings.hooks;\n if (settings.hooks?.SessionEnd?.length !== before) {\n changed = true;\n console.log(` \u2713 Removed kirograph hooks from .gemini/settings.json`);\n }\n }\n\n if (changed) writeJson(settingsPath, settings);\n }\n\n const geminiPath = path.join(projectRoot, 'GEMINI.md');\n if (removeGeneratedBlock(geminiPath, GEMINI_CLI_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from GEMINI.md`);\n }\n}\n\nexport function printGeminiCliNextSteps(): void {\n console.log('\\n Done! Restart Gemini CLI for the MCP server and hooks to load.');\n console.log(' MCP and hooks are in .gemini/settings.json');\n console.log(' KiroGraph instructions are in GEMINI.md\\n');\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -49,6 +49,7 @@ var import_tabnine = require("./tabnine");
49
49
  var import_generic = require("./generic");
50
50
  var import_qoder = require("./qoder");
51
51
  var import_qwen = require("./qwen");
52
+ var import_commandcode = require("./commandcode");
52
53
  function getTargetInstaller(target) {
53
54
  if (target === "claude") {
54
55
  return {
@@ -293,6 +294,15 @@ function getTargetInstaller(target) {
293
294
  if (target === "qoder") {
294
295
  return { label: "Qoder", installEarly: import_qoder.installQoderEarly, installLate: import_qoder.installQoderLate, printNextSteps: import_qoder.printQoderNextSteps, uninit: import_qoder.uninitQoder };
295
296
  }
297
+ if (target === "commandcode") {
298
+ return {
299
+ label: "Command Code",
300
+ installEarly: import_commandcode.installCommandCodeEarly,
301
+ installLate: import_commandcode.installCommandCodeLate,
302
+ printNextSteps: import_commandcode.printCommandCodeNextSteps,
303
+ uninit: import_commandcode.uninitCommandCode
304
+ };
305
+ }
296
306
  return {
297
307
  label: "Kiro",
298
308
  installEarly: import_kiro.installKiroEarly,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/index.ts"],
4
- "sourcesContent": ["import type { CavemanMode } from '../caveman';\nimport type { InstallTarget, LateInstallOptions } from '../common';\nimport { installKiroEarly, installKiroLate, printKiroNextSteps } from './kiro';\nimport { installClaudeEarly, installClaudeLate, printClaudeNextSteps, uninitClaude } from './claude';\nimport { installCodexEarly, installCodexLate, printCodexNextSteps, uninitCodex } from './codex';\nimport { installCursorEarly, installCursorLate, printCursorNextSteps, uninitCursor } from './cursor';\nimport { installAntigravityEarly, installAntigravityLate, printAntigravityNextSteps, uninitAntigravity } from './antigravity';\nimport { installOpenCodeEarly, installOpenCodeLate, printOpenCodeNextSteps, uninitOpenCode } from './opencode';\nimport { installWindsurfEarly, installWindsurfLate, printWindsurfNextSteps, uninitWindsurf } from './windsurf';\nimport { installClineEarly, installClineLate, printClineNextSteps, uninitCline } from './cline';\nimport { installCopilotEarly, installCopilotLate, printCopilotNextSteps, uninitCopilot } from './copilot';\nimport { installCopilotCliEarly, installCopilotCliLate, printCopilotCliNextSteps, uninitCopilotCli } from './copilot-cli';\nimport { installJunieEarly, installJunieLate, printJunieNextSteps, uninitJunie } from './junie';\nimport { installGeminiCliEarly, installGeminiCliLate, printGeminiCliNextSteps, uninitGeminiCli } from './gemini-cli';\nimport { installContinueEarly, installContinueLate, printContinueNextSteps, uninitContinue } from './continue';\nimport { installRooEarly, installRooLate, printRooNextSteps, uninitRoo } from './roo';\nimport { installWarpEarly, installWarpLate, printWarpNextSteps, uninitWarp } from './warp';\nimport { installAiderEarly, installAiderLate, printAiderNextSteps, uninitAider } from './aider';\nimport { installTraeEarly, installTraeLate, printTraeNextSteps, uninitTrae } from './trae';\nimport { installAugmentEarly, installAugmentLate, printAugmentNextSteps, uninitAugment } from './augment';\nimport { installKiloEarly, installKiloLate, printKiloNextSteps, uninitKilo } from './kilo';\nimport { installAmpEarly, installAmpLate, printAmpNextSteps, uninitAmp } from './amp';\nimport { installDevinEarly, installDevinLate, printDevinNextSteps, uninitDevin } from './devin';\nimport { installReplitEarly, installReplitLate, printReplitNextSteps, uninitReplit } from './replit';\nimport { installGooseEarly, installGooseLate, printGooseNextSteps, uninitGoose } from './goose';\nimport { installOpenHandsEarly, installOpenHandsLate, printOpenHandsNextSteps, uninitOpenHands } from './openhands';\nimport { installTabnineEarly, installTabnineLate, printTabnineNextSteps, uninitTabnine } from './tabnine';\nimport { mistralVibe, ibmBob, crush, droidFactory, forgeCode, iflowCli, rovoDev } from './generic';\nimport { installQoderEarly, installQoderLate, printQoderNextSteps, uninitQoder } from './qoder';\nimport { installQwenEarly, installQwenLate, printQwenNextSteps, uninitQwen } from './qwen';\n\nexport interface TargetInstaller {\n label: string;\n installEarly(projectRoot: string, kiroHookFormat?: 'v1-legacy' | 'v2'): void;\n installLate(projectRoot: string, opts: LateInstallOptions): void;\n printNextSteps(projectRoot: string): void;\n uninit?(projectRoot: string): void;\n}\n\nexport function getTargetInstaller(target: InstallTarget): TargetInstaller {\n if (target === 'claude') {\n return {\n label: 'Claude Code',\n installEarly: installClaudeEarly,\n installLate: installClaudeLate,\n printNextSteps: printClaudeNextSteps,\n uninit: uninitClaude,\n };\n }\n\n if (target === 'codex') {\n return {\n label: 'Codex',\n installEarly: installCodexEarly,\n installLate: installCodexLate,\n printNextSteps: printCodexNextSteps,\n uninit: uninitCodex,\n };\n }\n\n if (target === 'cursor') {\n return {\n label: 'Cursor',\n installEarly: installCursorEarly,\n installLate: installCursorLate,\n printNextSteps: printCursorNextSteps,\n uninit: uninitCursor,\n };\n }\n\n if (target === 'antigravity') {\n return {\n label: 'Antigravity',\n installEarly: installAntigravityEarly,\n installLate: installAntigravityLate,\n printNextSteps: printAntigravityNextSteps,\n uninit: uninitAntigravity,\n };\n }\n\n if (target === 'opencode') {\n return {\n label: 'OpenCode',\n installEarly: installOpenCodeEarly,\n installLate: installOpenCodeLate,\n printNextSteps: printOpenCodeNextSteps,\n uninit: uninitOpenCode,\n };\n }\n\n if (target === 'windsurf') {\n return {\n label: 'Windsurf',\n installEarly: installWindsurfEarly,\n installLate: installWindsurfLate,\n printNextSteps: printWindsurfNextSteps,\n uninit: uninitWindsurf,\n };\n }\n\n if (target === 'cline') {\n return {\n label: 'Cline',\n installEarly: installClineEarly,\n installLate: installClineLate,\n printNextSteps: printClineNextSteps,\n uninit: uninitCline,\n };\n }\n\n if (target === 'copilot') {\n return {\n label: 'GitHub Copilot',\n installEarly: installCopilotEarly,\n installLate: installCopilotLate,\n printNextSteps: printCopilotNextSteps,\n uninit: uninitCopilot,\n };\n }\n\n if (target === 'copilot-cli') {\n return {\n label: 'GitHub Copilot CLI',\n installEarly: installCopilotCliEarly,\n installLate: installCopilotCliLate,\n printNextSteps: printCopilotCliNextSteps,\n uninit: uninitCopilotCli,\n };\n }\n\n if (target === 'junie') {\n return {\n label: 'JetBrains Junie',\n installEarly: installJunieEarly,\n installLate: installJunieLate,\n printNextSteps: printJunieNextSteps,\n uninit: uninitJunie,\n };\n }\n\n if (target === 'gemini-cli') {\n return {\n label: 'Gemini CLI',\n installEarly: installGeminiCliEarly,\n installLate: installGeminiCliLate,\n printNextSteps: printGeminiCliNextSteps,\n uninit: uninitGeminiCli,\n };\n }\n\n if (target === 'continue') {\n return {\n label: 'Continue',\n installEarly: installContinueEarly,\n installLate: installContinueLate,\n printNextSteps: printContinueNextSteps,\n uninit: uninitContinue,\n };\n }\n\n if (target === 'roo') {\n return {\n label: 'Roo Code',\n installEarly: installRooEarly,\n installLate: installRooLate,\n printNextSteps: printRooNextSteps,\n uninit: uninitRoo,\n };\n }\n\n if (target === 'warp') {\n return {\n label: 'Warp',\n installEarly: installWarpEarly,\n installLate: installWarpLate,\n printNextSteps: printWarpNextSteps,\n uninit: uninitWarp,\n };\n }\n\n if (target === 'aider') {\n return {\n label: 'Aider',\n installEarly: installAiderEarly,\n installLate: installAiderLate,\n printNextSteps: printAiderNextSteps,\n uninit: uninitAider,\n };\n }\n\n if (target === 'trae') {\n return {\n label: 'Trae',\n installEarly: installTraeEarly,\n installLate: installTraeLate,\n printNextSteps: printTraeNextSteps,\n uninit: uninitTrae,\n };\n }\n\n if (target === 'augment') {\n return {\n label: 'Augment Code',\n installEarly: installAugmentEarly,\n installLate: installAugmentLate,\n printNextSteps: printAugmentNextSteps,\n uninit: uninitAugment,\n };\n }\n\n if (target === 'kilo') {\n return {\n label: 'Kilo Code',\n installEarly: installKiloEarly,\n installLate: installKiloLate,\n printNextSteps: printKiloNextSteps,\n uninit: uninitKilo,\n };\n }\n\n if (target === 'amp') {\n return {\n label: 'Sourcegraph Amp',\n installEarly: installAmpEarly,\n installLate: installAmpLate,\n printNextSteps: printAmpNextSteps,\n uninit: uninitAmp,\n };\n }\n\n if (target === 'devin') {\n return {\n label: 'Devin',\n installEarly: installDevinEarly,\n installLate: installDevinLate,\n printNextSteps: printDevinNextSteps,\n uninit: uninitDevin,\n };\n }\n\n if (target === 'replit') {\n return {\n label: 'Replit Agent',\n installEarly: installReplitEarly,\n installLate: installReplitLate,\n printNextSteps: printReplitNextSteps,\n uninit: uninitReplit,\n };\n }\n\n if (target === 'goose') {\n return {\n label: 'Block Goose',\n installEarly: installGooseEarly,\n installLate: installGooseLate,\n printNextSteps: printGooseNextSteps,\n uninit: uninitGoose,\n };\n }\n\n if (target === 'openhands') {\n return {\n label: 'OpenHands',\n installEarly: installOpenHandsEarly,\n installLate: installOpenHandsLate,\n printNextSteps: printOpenHandsNextSteps,\n uninit: uninitOpenHands,\n };\n }\n\n if (target === 'tabnine') {\n return {\n label: 'Tabnine',\n installEarly: installTabnineEarly,\n installLate: installTabnineLate,\n printNextSteps: printTabnineNextSteps,\n uninit: uninitTabnine,\n };\n }\n\n if (target === 'mistral-vibe') {\n return { label: 'Mistral Vibe', installEarly: mistralVibe.installEarly, installLate: mistralVibe.installLate, printNextSteps: mistralVibe.printNextSteps, uninit: mistralVibe.uninit };\n }\n if (target === 'ibm-bob') {\n return { label: 'IBM Bob', installEarly: ibmBob.installEarly, installLate: ibmBob.installLate, printNextSteps: ibmBob.printNextSteps, uninit: ibmBob.uninit };\n }\n if (target === 'crush') {\n return { label: 'Crush', installEarly: crush.installEarly, installLate: crush.installLate, printNextSteps: crush.printNextSteps, uninit: crush.uninit };\n }\n if (target === 'droid-factory') {\n return { label: 'Droid Factory', installEarly: droidFactory.installEarly, installLate: droidFactory.installLate, printNextSteps: droidFactory.printNextSteps, uninit: droidFactory.uninit };\n }\n if (target === 'forgecode') {\n return { label: 'ForgeCode', installEarly: forgeCode.installEarly, installLate: forgeCode.installLate, printNextSteps: forgeCode.printNextSteps, uninit: forgeCode.uninit };\n }\n if (target === 'iflow') {\n return { label: 'iFlow CLI', installEarly: iflowCli.installEarly, installLate: iflowCli.installLate, printNextSteps: iflowCli.printNextSteps, uninit: iflowCli.uninit };\n }\n if (target === 'qwen') {\n return { label: 'Qwen Code', installEarly: installQwenEarly, installLate: installQwenLate, printNextSteps: printQwenNextSteps, uninit: uninitQwen };\n }\n if (target === 'rovo') {\n return { label: 'Atlassian Rovo Dev', installEarly: rovoDev.installEarly, installLate: rovoDev.installLate, printNextSteps: rovoDev.printNextSteps, uninit: rovoDev.uninit };\n }\n if (target === 'qoder') {\n return { label: 'Qoder', installEarly: installQoderEarly, installLate: installQoderLate, printNextSteps: printQoderNextSteps, uninit: uninitQoder };\n }\n\n return {\n label: 'Kiro',\n installEarly: installKiroEarly,\n installLate: installKiroLate,\n printNextSteps: printKiroNextSteps,\n };\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,kBAAsE;AACtE,oBAA0F;AAC1F,mBAAsF;AACtF,oBAA0F;AAC1F,yBAA8G;AAC9G,sBAAkG;AAClG,sBAAkG;AAClG,mBAAsF;AACtF,qBAA8F;AAC9F,yBAA0G;AAC1G,mBAAsF;AACtF,wBAAsG;AACtG,sBAAkG;AAClG,iBAA8E;AAC9E,kBAAkF;AAClF,mBAAsF;AACtF,kBAAkF;AAClF,qBAA8F;AAC9F,kBAAkF;AAClF,iBAA8E;AAC9E,mBAAsF;AACtF,oBAA0F;AAC1F,mBAAsF;AACtF,uBAAsG;AACtG,qBAA8F;AAC9F,qBAAuF;AACvF,mBAAsF;AACtF,kBAAkF;AAU3E,SAAS,mBAAmB,QAAwC;AACzE,MAAI,WAAW,UAAU;AACvB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,SAAS;AACtB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,UAAU;AACvB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,eAAe;AAC5B,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,YAAY;AACzB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,YAAY;AACzB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,SAAS;AACtB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,WAAW;AACxB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,eAAe;AAC5B,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,SAAS;AACtB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,cAAc;AAC3B,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,YAAY;AACzB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,OAAO;AACpB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,QAAQ;AACrB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,SAAS;AACtB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,QAAQ;AACrB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,WAAW;AACxB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,QAAQ;AACrB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,OAAO;AACpB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,SAAS;AACtB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,UAAU;AACvB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,SAAS;AACtB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,aAAa;AAC1B,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,WAAW;AACxB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,cAAc;AAAA,MACd,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,QAAQ;AAAA,IACV;AAAA,EACF;AAEA,MAAI,WAAW,gBAAgB;AAC7B,WAAO,EAAE,OAAO,gBAAgB,cAAc,2BAAY,cAAc,aAAa,2BAAY,aAAa,gBAAgB,2BAAY,gBAAgB,QAAQ,2BAAY,OAAO;AAAA,EACvL;AACA,MAAI,WAAW,WAAW;AACxB,WAAO,EAAE,OAAO,WAAW,cAAc,sBAAO,cAAc,aAAa,sBAAO,aAAa,gBAAgB,sBAAO,gBAAgB,QAAQ,sBAAO,OAAO;AAAA,EAC9J;AACA,MAAI,WAAW,SAAS;AACtB,WAAO,EAAE,OAAO,SAAS,cAAc,qBAAM,cAAc,aAAa,qBAAM,aAAa,gBAAgB,qBAAM,gBAAgB,QAAQ,qBAAM,OAAO;AAAA,EACxJ;AACA,MAAI,WAAW,iBAAiB;AAC9B,WAAO,EAAE,OAAO,iBAAiB,cAAc,4BAAa,cAAc,aAAa,4BAAa,aAAa,gBAAgB,4BAAa,gBAAgB,QAAQ,4BAAa,OAAO;AAAA,EAC5L;AACA,MAAI,WAAW,aAAa;AAC1B,WAAO,EAAE,OAAO,aAAa,cAAc,yBAAU,cAAc,aAAa,yBAAU,aAAa,gBAAgB,yBAAU,gBAAgB,QAAQ,yBAAU,OAAO;AAAA,EAC5K;AACA,MAAI,WAAW,SAAS;AACtB,WAAO,EAAE,OAAO,aAAa,cAAc,wBAAS,cAAc,aAAa,wBAAS,aAAa,gBAAgB,wBAAS,gBAAgB,QAAQ,wBAAS,OAAO;AAAA,EACxK;AACA,MAAI,WAAW,QAAQ;AACrB,WAAO,EAAE,OAAO,aAAa,cAAc,8BAAkB,aAAa,6BAAiB,gBAAgB,gCAAoB,QAAQ,uBAAW;AAAA,EACpJ;AACA,MAAI,WAAW,QAAQ;AACrB,WAAO,EAAE,OAAO,sBAAsB,cAAc,uBAAQ,cAAc,aAAa,uBAAQ,aAAa,gBAAgB,uBAAQ,gBAAgB,QAAQ,uBAAQ,OAAO;AAAA,EAC7K;AACA,MAAI,WAAW,SAAS;AACtB,WAAO,EAAE,OAAO,SAAS,cAAc,gCAAmB,aAAa,+BAAkB,gBAAgB,kCAAqB,QAAQ,yBAAY;AAAA,EACpJ;AAEA,SAAO;AAAA,IACL,OAAO;AAAA,IACP,cAAc;AAAA,IACd,aAAa;AAAA,IACb,gBAAgB;AAAA,EAClB;AACF;",
4
+ "sourcesContent": ["import type { CavemanMode } from '../caveman';\nimport type { InstallTarget, LateInstallOptions } from '../common';\nimport { installKiroEarly, installKiroLate, printKiroNextSteps } from './kiro';\nimport { installClaudeEarly, installClaudeLate, printClaudeNextSteps, uninitClaude } from './claude';\nimport { installCodexEarly, installCodexLate, printCodexNextSteps, uninitCodex } from './codex';\nimport { installCursorEarly, installCursorLate, printCursorNextSteps, uninitCursor } from './cursor';\nimport { installAntigravityEarly, installAntigravityLate, printAntigravityNextSteps, uninitAntigravity } from './antigravity';\nimport { installOpenCodeEarly, installOpenCodeLate, printOpenCodeNextSteps, uninitOpenCode } from './opencode';\nimport { installWindsurfEarly, installWindsurfLate, printWindsurfNextSteps, uninitWindsurf } from './windsurf';\nimport { installClineEarly, installClineLate, printClineNextSteps, uninitCline } from './cline';\nimport { installCopilotEarly, installCopilotLate, printCopilotNextSteps, uninitCopilot } from './copilot';\nimport { installCopilotCliEarly, installCopilotCliLate, printCopilotCliNextSteps, uninitCopilotCli } from './copilot-cli';\nimport { installJunieEarly, installJunieLate, printJunieNextSteps, uninitJunie } from './junie';\nimport { installGeminiCliEarly, installGeminiCliLate, printGeminiCliNextSteps, uninitGeminiCli } from './gemini-cli';\nimport { installContinueEarly, installContinueLate, printContinueNextSteps, uninitContinue } from './continue';\nimport { installRooEarly, installRooLate, printRooNextSteps, uninitRoo } from './roo';\nimport { installWarpEarly, installWarpLate, printWarpNextSteps, uninitWarp } from './warp';\nimport { installAiderEarly, installAiderLate, printAiderNextSteps, uninitAider } from './aider';\nimport { installTraeEarly, installTraeLate, printTraeNextSteps, uninitTrae } from './trae';\nimport { installAugmentEarly, installAugmentLate, printAugmentNextSteps, uninitAugment } from './augment';\nimport { installKiloEarly, installKiloLate, printKiloNextSteps, uninitKilo } from './kilo';\nimport { installAmpEarly, installAmpLate, printAmpNextSteps, uninitAmp } from './amp';\nimport { installDevinEarly, installDevinLate, printDevinNextSteps, uninitDevin } from './devin';\nimport { installReplitEarly, installReplitLate, printReplitNextSteps, uninitReplit } from './replit';\nimport { installGooseEarly, installGooseLate, printGooseNextSteps, uninitGoose } from './goose';\nimport { installOpenHandsEarly, installOpenHandsLate, printOpenHandsNextSteps, uninitOpenHands } from './openhands';\nimport { installTabnineEarly, installTabnineLate, printTabnineNextSteps, uninitTabnine } from './tabnine';\nimport { mistralVibe, ibmBob, crush, droidFactory, forgeCode, iflowCli, rovoDev } from './generic';\nimport { installQoderEarly, installQoderLate, printQoderNextSteps, uninitQoder } from './qoder';\nimport { installQwenEarly, installQwenLate, printQwenNextSteps, uninitQwen } from './qwen';\nimport { installCommandCodeEarly, installCommandCodeLate, printCommandCodeNextSteps, uninitCommandCode } from './commandcode';\n\nexport interface TargetInstaller {\n label: string;\n installEarly(projectRoot: string, kiroHookFormat?: 'v1-legacy' | 'v2'): void;\n installLate(projectRoot: string, opts: LateInstallOptions): void;\n printNextSteps(projectRoot: string): void;\n uninit?(projectRoot: string): void;\n}\n\nexport function getTargetInstaller(target: InstallTarget): TargetInstaller {\n if (target === 'claude') {\n return {\n label: 'Claude Code',\n installEarly: installClaudeEarly,\n installLate: installClaudeLate,\n printNextSteps: printClaudeNextSteps,\n uninit: uninitClaude,\n };\n }\n\n if (target === 'codex') {\n return {\n label: 'Codex',\n installEarly: installCodexEarly,\n installLate: installCodexLate,\n printNextSteps: printCodexNextSteps,\n uninit: uninitCodex,\n };\n }\n\n if (target === 'cursor') {\n return {\n label: 'Cursor',\n installEarly: installCursorEarly,\n installLate: installCursorLate,\n printNextSteps: printCursorNextSteps,\n uninit: uninitCursor,\n };\n }\n\n if (target === 'antigravity') {\n return {\n label: 'Antigravity',\n installEarly: installAntigravityEarly,\n installLate: installAntigravityLate,\n printNextSteps: printAntigravityNextSteps,\n uninit: uninitAntigravity,\n };\n }\n\n if (target === 'opencode') {\n return {\n label: 'OpenCode',\n installEarly: installOpenCodeEarly,\n installLate: installOpenCodeLate,\n printNextSteps: printOpenCodeNextSteps,\n uninit: uninitOpenCode,\n };\n }\n\n if (target === 'windsurf') {\n return {\n label: 'Windsurf',\n installEarly: installWindsurfEarly,\n installLate: installWindsurfLate,\n printNextSteps: printWindsurfNextSteps,\n uninit: uninitWindsurf,\n };\n }\n\n if (target === 'cline') {\n return {\n label: 'Cline',\n installEarly: installClineEarly,\n installLate: installClineLate,\n printNextSteps: printClineNextSteps,\n uninit: uninitCline,\n };\n }\n\n if (target === 'copilot') {\n return {\n label: 'GitHub Copilot',\n installEarly: installCopilotEarly,\n installLate: installCopilotLate,\n printNextSteps: printCopilotNextSteps,\n uninit: uninitCopilot,\n };\n }\n\n if (target === 'copilot-cli') {\n return {\n label: 'GitHub Copilot CLI',\n installEarly: installCopilotCliEarly,\n installLate: installCopilotCliLate,\n printNextSteps: printCopilotCliNextSteps,\n uninit: uninitCopilotCli,\n };\n }\n\n if (target === 'junie') {\n return {\n label: 'JetBrains Junie',\n installEarly: installJunieEarly,\n installLate: installJunieLate,\n printNextSteps: printJunieNextSteps,\n uninit: uninitJunie,\n };\n }\n\n if (target === 'gemini-cli') {\n return {\n label: 'Gemini CLI',\n installEarly: installGeminiCliEarly,\n installLate: installGeminiCliLate,\n printNextSteps: printGeminiCliNextSteps,\n uninit: uninitGeminiCli,\n };\n }\n\n if (target === 'continue') {\n return {\n label: 'Continue',\n installEarly: installContinueEarly,\n installLate: installContinueLate,\n printNextSteps: printContinueNextSteps,\n uninit: uninitContinue,\n };\n }\n\n if (target === 'roo') {\n return {\n label: 'Roo Code',\n installEarly: installRooEarly,\n installLate: installRooLate,\n printNextSteps: printRooNextSteps,\n uninit: uninitRoo,\n };\n }\n\n if (target === 'warp') {\n return {\n label: 'Warp',\n installEarly: installWarpEarly,\n installLate: installWarpLate,\n printNextSteps: printWarpNextSteps,\n uninit: uninitWarp,\n };\n }\n\n if (target === 'aider') {\n return {\n label: 'Aider',\n installEarly: installAiderEarly,\n installLate: installAiderLate,\n printNextSteps: printAiderNextSteps,\n uninit: uninitAider,\n };\n }\n\n if (target === 'trae') {\n return {\n label: 'Trae',\n installEarly: installTraeEarly,\n installLate: installTraeLate,\n printNextSteps: printTraeNextSteps,\n uninit: uninitTrae,\n };\n }\n\n if (target === 'augment') {\n return {\n label: 'Augment Code',\n installEarly: installAugmentEarly,\n installLate: installAugmentLate,\n printNextSteps: printAugmentNextSteps,\n uninit: uninitAugment,\n };\n }\n\n if (target === 'kilo') {\n return {\n label: 'Kilo Code',\n installEarly: installKiloEarly,\n installLate: installKiloLate,\n printNextSteps: printKiloNextSteps,\n uninit: uninitKilo,\n };\n }\n\n if (target === 'amp') {\n return {\n label: 'Sourcegraph Amp',\n installEarly: installAmpEarly,\n installLate: installAmpLate,\n printNextSteps: printAmpNextSteps,\n uninit: uninitAmp,\n };\n }\n\n if (target === 'devin') {\n return {\n label: 'Devin',\n installEarly: installDevinEarly,\n installLate: installDevinLate,\n printNextSteps: printDevinNextSteps,\n uninit: uninitDevin,\n };\n }\n\n if (target === 'replit') {\n return {\n label: 'Replit Agent',\n installEarly: installReplitEarly,\n installLate: installReplitLate,\n printNextSteps: printReplitNextSteps,\n uninit: uninitReplit,\n };\n }\n\n if (target === 'goose') {\n return {\n label: 'Block Goose',\n installEarly: installGooseEarly,\n installLate: installGooseLate,\n printNextSteps: printGooseNextSteps,\n uninit: uninitGoose,\n };\n }\n\n if (target === 'openhands') {\n return {\n label: 'OpenHands',\n installEarly: installOpenHandsEarly,\n installLate: installOpenHandsLate,\n printNextSteps: printOpenHandsNextSteps,\n uninit: uninitOpenHands,\n };\n }\n\n if (target === 'tabnine') {\n return {\n label: 'Tabnine',\n installEarly: installTabnineEarly,\n installLate: installTabnineLate,\n printNextSteps: printTabnineNextSteps,\n uninit: uninitTabnine,\n };\n }\n\n if (target === 'mistral-vibe') {\n return { label: 'Mistral Vibe', installEarly: mistralVibe.installEarly, installLate: mistralVibe.installLate, printNextSteps: mistralVibe.printNextSteps, uninit: mistralVibe.uninit };\n }\n if (target === 'ibm-bob') {\n return { label: 'IBM Bob', installEarly: ibmBob.installEarly, installLate: ibmBob.installLate, printNextSteps: ibmBob.printNextSteps, uninit: ibmBob.uninit };\n }\n if (target === 'crush') {\n return { label: 'Crush', installEarly: crush.installEarly, installLate: crush.installLate, printNextSteps: crush.printNextSteps, uninit: crush.uninit };\n }\n if (target === 'droid-factory') {\n return { label: 'Droid Factory', installEarly: droidFactory.installEarly, installLate: droidFactory.installLate, printNextSteps: droidFactory.printNextSteps, uninit: droidFactory.uninit };\n }\n if (target === 'forgecode') {\n return { label: 'ForgeCode', installEarly: forgeCode.installEarly, installLate: forgeCode.installLate, printNextSteps: forgeCode.printNextSteps, uninit: forgeCode.uninit };\n }\n if (target === 'iflow') {\n return { label: 'iFlow CLI', installEarly: iflowCli.installEarly, installLate: iflowCli.installLate, printNextSteps: iflowCli.printNextSteps, uninit: iflowCli.uninit };\n }\n if (target === 'qwen') {\n return { label: 'Qwen Code', installEarly: installQwenEarly, installLate: installQwenLate, printNextSteps: printQwenNextSteps, uninit: uninitQwen };\n }\n if (target === 'rovo') {\n return { label: 'Atlassian Rovo Dev', installEarly: rovoDev.installEarly, installLate: rovoDev.installLate, printNextSteps: rovoDev.printNextSteps, uninit: rovoDev.uninit };\n }\n if (target === 'qoder') {\n return { label: 'Qoder', installEarly: installQoderEarly, installLate: installQoderLate, printNextSteps: printQoderNextSteps, uninit: uninitQoder };\n }\n if (target === 'commandcode') {\n return {\n label: 'Command Code',\n installEarly: installCommandCodeEarly,\n installLate: installCommandCodeLate,\n printNextSteps: printCommandCodeNextSteps,\n uninit: uninitCommandCode,\n };\n }\n\n return {\n label: 'Kiro',\n installEarly: installKiroEarly,\n installLate: installKiroLate,\n printNextSteps: printKiroNextSteps,\n };\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -50,7 +50,7 @@ export const KirographSync = async ({ $ }) => {
50
50
  return {
51
51
  event: async ({ event }) => {
52
52
  if (event.type === "session.idle") {
53
- await $\`kirograph sync --quiet 2>/dev/null || true\`
53
+ await $\`${(0, import_common.silentCommand)("kirograph sync --quiet")}\`
54
54
  }
55
55
  },
56
56
  }