kirograph 0.14.1 → 0.16.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 (125) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +239 -20
  3. package/dist/assets/logo.png +0 -0
  4. package/dist/bin/commands/docs.js +357 -0
  5. package/dist/bin/commands/docs.js.map +7 -0
  6. package/dist/bin/commands/help.js +3 -0
  7. package/dist/bin/commands/help.js.map +2 -2
  8. package/dist/bin/commands/uninit.js +10 -13
  9. package/dist/bin/commands/uninit.js.map +2 -2
  10. package/dist/bin/installer/config-prompt.js +53 -23
  11. package/dist/bin/installer/config-prompt.js.map +2 -2
  12. package/dist/bin/installer/hooks.js +20 -1
  13. package/dist/bin/installer/hooks.js.map +2 -2
  14. package/dist/bin/installer/index.js +14 -4
  15. package/dist/bin/installer/index.js.map +2 -2
  16. package/dist/bin/installer/prompts.js +37 -6
  17. package/dist/bin/installer/prompts.js.map +2 -2
  18. package/dist/bin/installer/steering.js +40 -0
  19. package/dist/bin/installer/steering.js.map +2 -2
  20. package/dist/bin/installer/targets/aider.js +72 -0
  21. package/dist/bin/installer/targets/aider.js.map +7 -0
  22. package/dist/bin/installer/targets/amp.js +91 -0
  23. package/dist/bin/installer/targets/amp.js.map +7 -0
  24. package/dist/bin/installer/targets/antigravity.js +109 -0
  25. package/dist/bin/installer/targets/antigravity.js.map +7 -0
  26. package/dist/bin/installer/targets/augment.js +81 -0
  27. package/dist/bin/installer/targets/augment.js.map +7 -0
  28. package/dist/bin/installer/targets/claude.js +1 -1
  29. package/dist/bin/installer/targets/claude.js.map +2 -2
  30. package/dist/bin/installer/targets/cline.js +91 -0
  31. package/dist/bin/installer/targets/cline.js.map +7 -0
  32. package/dist/bin/installer/targets/codex.js +1 -1
  33. package/dist/bin/installer/targets/codex.js.map +2 -2
  34. package/dist/bin/installer/targets/continue.js +107 -0
  35. package/dist/bin/installer/targets/continue.js.map +7 -0
  36. package/dist/bin/installer/targets/copilot.js +123 -0
  37. package/dist/bin/installer/targets/copilot.js.map +7 -0
  38. package/dist/bin/installer/targets/cursor.js +143 -0
  39. package/dist/bin/installer/targets/cursor.js.map +7 -0
  40. package/dist/bin/installer/targets/devin.js +148 -0
  41. package/dist/bin/installer/targets/devin.js.map +7 -0
  42. package/dist/bin/installer/targets/gemini-cli.js +126 -0
  43. package/dist/bin/installer/targets/gemini-cli.js.map +7 -0
  44. package/dist/bin/installer/targets/generic.js +120 -0
  45. package/dist/bin/installer/targets/generic.js.map +7 -0
  46. package/dist/bin/installer/targets/goose.js +72 -0
  47. package/dist/bin/installer/targets/goose.js.map +7 -0
  48. package/dist/bin/installer/targets/index.js.map +1 -1
  49. package/dist/bin/installer/targets/junie.js +105 -0
  50. package/dist/bin/installer/targets/junie.js.map +7 -0
  51. package/dist/bin/installer/targets/kilo.js +122 -0
  52. package/dist/bin/installer/targets/kilo.js.map +7 -0
  53. package/dist/bin/installer/targets/kiro.js +3 -3
  54. package/dist/bin/installer/targets/kiro.js.map +2 -2
  55. package/dist/bin/installer/targets/opencode.js +135 -0
  56. package/dist/bin/installer/targets/opencode.js.map +7 -0
  57. package/dist/bin/installer/targets/openhands.js +90 -0
  58. package/dist/bin/installer/targets/openhands.js.map +7 -0
  59. package/dist/bin/installer/targets/replit.js +72 -0
  60. package/dist/bin/installer/targets/replit.js.map +7 -0
  61. package/dist/bin/installer/targets/roo.js +96 -0
  62. package/dist/bin/installer/targets/roo.js.map +7 -0
  63. package/dist/bin/installer/targets/tabnine.js +82 -0
  64. package/dist/bin/installer/targets/tabnine.js.map +7 -0
  65. package/dist/bin/installer/targets/trae.js +84 -0
  66. package/dist/bin/installer/targets/trae.js.map +7 -0
  67. package/dist/bin/installer/targets/warp.js +97 -0
  68. package/dist/bin/installer/targets/warp.js.map +7 -0
  69. package/dist/bin/installer/targets/windsurf.js +141 -0
  70. package/dist/bin/installer/targets/windsurf.js.map +7 -0
  71. package/dist/bin/kirograph.js +5 -1
  72. package/dist/bin/kirograph.js.map +3 -3
  73. package/dist/compression/naive-cost.js +33 -0
  74. package/dist/compression/naive-cost.js.map +2 -2
  75. package/dist/compression/tracker.js +27 -4
  76. package/dist/compression/tracker.js.map +2 -2
  77. package/dist/compression/types.js.map +1 -1
  78. package/dist/config.js +66 -1
  79. package/dist/config.js.map +2 -2
  80. package/dist/core/pipeline.js +23 -0
  81. package/dist/core/pipeline.js.map +2 -2
  82. package/dist/db/database.js +28 -0
  83. package/dist/db/database.js.map +2 -2
  84. package/dist/db/docs-schema.sql +50 -0
  85. package/dist/docs/formats/asciidoc.js +108 -0
  86. package/dist/docs/formats/asciidoc.js.map +7 -0
  87. package/dist/docs/formats/html.js +100 -0
  88. package/dist/docs/formats/html.js.map +7 -0
  89. package/dist/docs/formats/index.js +81 -0
  90. package/dist/docs/formats/index.js.map +7 -0
  91. package/dist/docs/formats/markdown.js +146 -0
  92. package/dist/docs/formats/markdown.js.map +7 -0
  93. package/dist/docs/formats/openapi.js +228 -0
  94. package/dist/docs/formats/openapi.js.map +7 -0
  95. package/dist/docs/formats/org.js +117 -0
  96. package/dist/docs/formats/org.js.map +7 -0
  97. package/dist/docs/formats/plaintext.js +119 -0
  98. package/dist/docs/formats/plaintext.js.map +7 -0
  99. package/dist/docs/formats/rdoc.js +105 -0
  100. package/dist/docs/formats/rdoc.js.map +7 -0
  101. package/dist/docs/formats/rst.js +121 -0
  102. package/dist/docs/formats/rst.js.map +7 -0
  103. package/dist/docs/indexer.js +340 -0
  104. package/dist/docs/indexer.js.map +7 -0
  105. package/dist/docs/linker.js +151 -0
  106. package/dist/docs/linker.js.map +7 -0
  107. package/dist/docs/lint.js +92 -0
  108. package/dist/docs/lint.js.map +7 -0
  109. package/dist/docs/queries.js +295 -0
  110. package/dist/docs/queries.js.map +7 -0
  111. package/dist/docs/section-id.js +57 -0
  112. package/dist/docs/section-id.js.map +7 -0
  113. package/dist/docs/summarizer.js +55 -0
  114. package/dist/docs/summarizer.js.map +7 -0
  115. package/dist/docs/types.js +17 -0
  116. package/dist/docs/types.js.map +7 -0
  117. package/dist/docs/vectors.js +217 -0
  118. package/dist/docs/vectors.js.map +7 -0
  119. package/dist/index.js +3 -0
  120. package/dist/index.js.map +2 -2
  121. package/dist/mcp/tool-names.js +10 -1
  122. package/dist/mcp/tool-names.js.map +2 -2
  123. package/dist/mcp/tools.js +476 -3
  124. package/dist/mcp/tools.js.map +2 -2
  125. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/claude.ts"],
4
- "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n appendImportLine,\n ensureDir,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n removeMcpServersConfig,\n removeImportLine,\n writeMcpServersConfig,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CLAUDE_IMPORT = '@.kirograph/claude.md';\n\nexport function installClaudeEarly(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.mcp.json');\n writeMcpServersConfig(mcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(` \u2713 Claude MCP server registered in ${mcpPath}`);\n}\n\nexport function installClaudeLate(projectRoot: string, cavemanMode?: CavemanMode | 'off'): void {\n const instructionsPath = path.join(projectRoot, '.kirograph', 'claude.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(cavemanMode));\n console.log(` \u2713 Claude instructions written to ${instructionsPath}`);\n\n const memoryPath = path.join(projectRoot, 'CLAUDE.md');\n const changed = appendImportLine(memoryPath, CLAUDE_IMPORT, '## KiroGraph');\n console.log(changed\n ? ` \u2713 Claude project memory updated in ${memoryPath}`\n : ` \u2713 Claude project memory already imports ${CLAUDE_IMPORT}`);\n}\n\nexport function uninitClaude(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .mcp.json`);\n }\n\n const memoryPath = path.join(projectRoot, 'CLAUDE.md');\n if (removeImportLine(memoryPath, CLAUDE_IMPORT)) {\n console.log(` \u2713 Removed KiroGraph import from CLAUDE.md`);\n }\n}\n\nexport function printClaudeNextSteps(): void {\n console.log('\\n Done! Restart Claude Code for the MCP server and project memory to load.\\n');\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AAEtB,oBAQO;AACP,0BAAuC;AAEvC,MAAM,gBAAgB;AAEf,SAAS,mBAAmB,aAA2B;AAC5D,QAAM,UAAU,KAAK,KAAK,aAAa,WAAW;AAClD,2CAAsB,SAAS;AAAA,IAC7B,SAAS;AAAA,IACT,MAAM;AAAA,EACR,CAAC;AACD,UAAQ,IAAI,4CAAuC,OAAO,EAAE;AAC9D;AAEO,SAAS,kBAAkB,aAAqB,aAAyC;AAC9F,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,WAAW;AACzE,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,WAAW,CAAC;AACtE,UAAQ,IAAI,2CAAsC,gBAAgB,EAAE;AAEpE,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,QAAM,cAAU,gCAAiB,YAAY,eAAe,cAAc;AAC1E,UAAQ,IAAI,UACR,6CAAwC,UAAU,KAClD,kDAA6C,aAAa,EAAE;AAClE;AAEO,SAAS,aAAa,aAA2B;AACtD,QAAM,UAAU,KAAK,KAAK,aAAa,WAAW;AAClD,UAAI,sCAAuB,OAAO,GAAG;AACnC,YAAQ,IAAI,2CAAsC;AAAA,EACpD;AAEA,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,UAAI,gCAAiB,YAAY,aAAa,GAAG;AAC/C,YAAQ,IAAI,kDAA6C;AAAA,EAC3D;AACF;AAEO,SAAS,uBAA6B;AAC3C,UAAQ,IAAI,gFAAgF;AAC9F;",
4
+ "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n appendImportLine,\n ensureDir,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n removeMcpServersConfig,\n removeImportLine,\n writeMcpServersConfig,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CLAUDE_IMPORT = '@.kirograph/claude.md';\n\nexport function installClaudeEarly(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.mcp.json');\n writeMcpServersConfig(mcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(` \u2713 Claude MCP server registered in ${mcpPath}`);\n}\n\nexport function installClaudeLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', _shellCompressionLevel?: string, _enableMemory?: boolean): void {\n const instructionsPath = path.join(projectRoot, '.kirograph', 'claude.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(cavemanMode));\n console.log(` \u2713 Claude instructions written to ${instructionsPath}`);\n\n const memoryPath = path.join(projectRoot, 'CLAUDE.md');\n const changed = appendImportLine(memoryPath, CLAUDE_IMPORT, '## KiroGraph');\n console.log(changed\n ? ` \u2713 Claude project memory updated in ${memoryPath}`\n : ` \u2713 Claude project memory already imports ${CLAUDE_IMPORT}`);\n}\n\nexport function uninitClaude(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .mcp.json`);\n }\n\n const memoryPath = path.join(projectRoot, 'CLAUDE.md');\n if (removeImportLine(memoryPath, CLAUDE_IMPORT)) {\n console.log(` \u2713 Removed KiroGraph import from CLAUDE.md`);\n }\n}\n\nexport function printClaudeNextSteps(): void {\n console.log('\\n Done! Restart Claude Code for the MCP server and project memory to load.\\n');\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AAEtB,oBAQO;AACP,0BAAuC;AAEvC,MAAM,gBAAgB;AAEf,SAAS,mBAAmB,aAA2B;AAC5D,QAAM,UAAU,KAAK,KAAK,aAAa,WAAW;AAClD,2CAAsB,SAAS;AAAA,IAC7B,SAAS;AAAA,IACT,MAAM;AAAA,EACR,CAAC;AACD,UAAQ,IAAI,4CAAuC,OAAO,EAAE;AAC9D;AAEO,SAAS,kBAAkB,aAAqB,aAAmC,wBAAiC,eAA+B;AACxJ,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,WAAW;AACzE,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,WAAW,CAAC;AACtE,UAAQ,IAAI,2CAAsC,gBAAgB,EAAE;AAEpE,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,QAAM,cAAU,gCAAiB,YAAY,eAAe,cAAc;AAC1E,UAAQ,IAAI,UACR,6CAAwC,UAAU,KAClD,kDAA6C,aAAa,EAAE;AAClE;AAEO,SAAS,aAAa,aAA2B;AACtD,QAAM,UAAU,KAAK,KAAK,aAAa,WAAW;AAClD,UAAI,sCAAuB,OAAO,GAAG;AACnC,YAAQ,IAAI,2CAAsC;AAAA,EACpD;AAEA,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,UAAI,gCAAiB,YAAY,aAAa,GAAG;AAC/C,YAAQ,IAAI,kDAA6C;AAAA,EAC3D;AACF;AAEO,SAAS,uBAA6B;AAC3C,UAAQ,IAAI,gFAAgF;AAC9F;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var cline_exports = {};
30
+ __export(cline_exports, {
31
+ installClineEarly: () => installClineEarly,
32
+ installClineLate: () => installClineLate,
33
+ printClineNextSteps: () => printClineNextSteps,
34
+ uninitCline: () => uninitCline
35
+ });
36
+ module.exports = __toCommonJS(cline_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 CLINE_RULES_FILE = "kirograph.md";
42
+ const CLINE_HOOK_SCRIPT = "#!/bin/sh\nkirograph sync --quiet 2>/dev/null || true\n";
43
+ function installClineEarly(_projectRoot) {
44
+ }
45
+ function installClineLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory) {
46
+ const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true);
47
+ const instructionsPath = path.join(projectRoot, ".kirograph", "cline.md");
48
+ (0, import_common.ensureDir)(path.dirname(instructionsPath));
49
+ fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(opts));
50
+ console.log(` \u2713 Cline instructions written to ${instructionsPath}`);
51
+ const rulesDir = path.join(projectRoot, ".clinerules");
52
+ if (fs.existsSync(rulesDir) && fs.statSync(rulesDir).isFile()) {
53
+ fs.unlinkSync(rulesDir);
54
+ }
55
+ (0, import_common.ensureDir)(rulesDir);
56
+ const rulePath = path.join(rulesDir, CLINE_RULES_FILE);
57
+ fs.writeFileSync(rulePath, (0, import_instructions.buildAgentInstructions)(opts));
58
+ console.log(` \u2713 Cline rule written to ${rulePath}`);
59
+ const hooksDir = path.join(projectRoot, ".clinerules", "hooks");
60
+ (0, import_common.ensureDir)(hooksDir);
61
+ const hookPath = path.join(hooksDir, "task_completed");
62
+ fs.writeFileSync(hookPath, CLINE_HOOK_SCRIPT, { mode: 493 });
63
+ console.log(` \u2713 Cline hook written to ${hookPath}`);
64
+ }
65
+ function uninitCline(projectRoot) {
66
+ const rulePath = path.join(projectRoot, ".clinerules", CLINE_RULES_FILE);
67
+ if (fs.existsSync(rulePath)) {
68
+ fs.unlinkSync(rulePath);
69
+ console.log(` \u2713 Removed .clinerules/${CLINE_RULES_FILE}`);
70
+ }
71
+ const hookPath = path.join(projectRoot, ".clinerules", "hooks", "task_completed");
72
+ if (fs.existsSync(hookPath)) {
73
+ const content = fs.readFileSync(hookPath, "utf8");
74
+ if (content.includes("kirograph")) {
75
+ fs.unlinkSync(hookPath);
76
+ console.log(` \u2713 Removed Cline hook .clinerules/hooks/task_completed`);
77
+ }
78
+ }
79
+ }
80
+ function printClineNextSteps(projectRoot) {
81
+ console.log("\n Done! KiroGraph rule and hook are in .clinerules/");
82
+ (0, import_common.printMcpSetup)("~/.cline/mcp.json", projectRoot);
83
+ }
84
+ // Annotate the CommonJS export names for ESM import in node:
85
+ 0 && (module.exports = {
86
+ installClineEarly,
87
+ installClineLate,
88
+ printClineNextSteps,
89
+ uninitCline
90
+ });
91
+ //# sourceMappingURL=cline.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/bin/installer/targets/cline.ts"],
4
+ "sourcesContent": ["/**\n * Cline target.\n *\n * MCP: .cline/mcp_settings.json\n * Rules: .clinerules/kirograph.md (directory-based, not a flat file)\n * Hooks: .cline/hooks/task_completed (executable script)\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n printMcpSetup,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CLINE_RULES_FILE = 'kirograph.md';\nconst CLINE_HOOK_SCRIPT = '#!/bin/sh\\nkirograph sync --quiet 2>/dev/null || true\\n';\n\nexport function installClineEarly(_projectRoot: string): void {\n // Cline MCP is user-scoped at ~/.cline/mcp.json.\n // We print the setup instructions in printNextSteps.\n}\n\nexport function installClineLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean): void {\n const opts = buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, true);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'cline.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Cline instructions written to ${instructionsPath}`);\n\n // Write rules file inside .clinerules/ directory\n const rulesDir = path.join(projectRoot, '.clinerules');\n // If .clinerules exists as a flat file (legacy), remove it first\n if (fs.existsSync(rulesDir) && fs.statSync(rulesDir).isFile()) {\n fs.unlinkSync(rulesDir);\n }\n ensureDir(rulesDir);\n const rulePath = path.join(rulesDir, CLINE_RULES_FILE);\n fs.writeFileSync(rulePath, buildAgentInstructions(opts));\n console.log(` \u2713 Cline rule written to ${rulePath}`);\n\n // Write hook script\n const hooksDir = path.join(projectRoot, '.clinerules', 'hooks');\n ensureDir(hooksDir);\n const hookPath = path.join(hooksDir, 'task_completed');\n fs.writeFileSync(hookPath, CLINE_HOOK_SCRIPT, { mode: 0o755 });\n console.log(` \u2713 Cline hook written to ${hookPath}`);\n}\n\nexport function uninitCline(projectRoot: string): void {\n // Remove rule file\n const rulePath = path.join(projectRoot, '.clinerules', CLINE_RULES_FILE);\n if (fs.existsSync(rulePath)) {\n fs.unlinkSync(rulePath);\n console.log(` \u2713 Removed .clinerules/${CLINE_RULES_FILE}`);\n }\n\n // Remove hook\n const hookPath = path.join(projectRoot, '.clinerules', 'hooks', 'task_completed');\n if (fs.existsSync(hookPath)) {\n const content = fs.readFileSync(hookPath, 'utf8');\n if (content.includes('kirograph')) {\n fs.unlinkSync(hookPath);\n console.log(` \u2713 Removed Cline hook .clinerules/hooks/task_completed`);\n }\n }\n}\n\nexport function printClineNextSteps(projectRoot: string): void {\n console.log('\\n Done! KiroGraph rule and hook are in .clinerules/');\n printMcpSetup('~/.cline/mcp.json', projectRoot);\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,SAAoB;AACpB,WAAsB;AAEtB,oBAIO;AACP,0BAAuC;AAEvC,MAAM,mBAAmB;AACzB,MAAM,oBAAoB;AAEnB,SAAS,kBAAkB,cAA4B;AAG9D;AAEO,SAAS,iBAAiB,aAAqB,aAAmC,uBAAgC,cAA8B;AACrJ,QAAM,WAAO,oCAAqB,aAAa,uBAAuB,cAAc,IAAI;AAExF,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,UAAU;AACxE,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,IAAI,CAAC;AAC/D,UAAQ,IAAI,0CAAqC,gBAAgB,EAAE;AAGnE,QAAM,WAAW,KAAK,KAAK,aAAa,aAAa;AAErD,MAAI,GAAG,WAAW,QAAQ,KAAK,GAAG,SAAS,QAAQ,EAAE,OAAO,GAAG;AAC7D,OAAG,WAAW,QAAQ;AAAA,EACxB;AACA,+BAAU,QAAQ;AAClB,QAAM,WAAW,KAAK,KAAK,UAAU,gBAAgB;AACrD,KAAG,cAAc,cAAU,4CAAuB,IAAI,CAAC;AACvD,UAAQ,IAAI,kCAA6B,QAAQ,EAAE;AAGnD,QAAM,WAAW,KAAK,KAAK,aAAa,eAAe,OAAO;AAC9D,+BAAU,QAAQ;AAClB,QAAM,WAAW,KAAK,KAAK,UAAU,gBAAgB;AACrD,KAAG,cAAc,UAAU,mBAAmB,EAAE,MAAM,IAAM,CAAC;AAC7D,UAAQ,IAAI,kCAA6B,QAAQ,EAAE;AACrD;AAEO,SAAS,YAAY,aAA2B;AAErD,QAAM,WAAW,KAAK,KAAK,aAAa,eAAe,gBAAgB;AACvE,MAAI,GAAG,WAAW,QAAQ,GAAG;AAC3B,OAAG,WAAW,QAAQ;AACtB,YAAQ,IAAI,gCAA2B,gBAAgB,EAAE;AAAA,EAC3D;AAGA,QAAM,WAAW,KAAK,KAAK,aAAa,eAAe,SAAS,gBAAgB;AAChF,MAAI,GAAG,WAAW,QAAQ,GAAG;AAC3B,UAAM,UAAU,GAAG,aAAa,UAAU,MAAM;AAChD,QAAI,QAAQ,SAAS,WAAW,GAAG;AACjC,SAAG,WAAW,QAAQ;AACtB,cAAQ,IAAI,8DAAyD;AAAA,IACvE;AAAA,EACF;AACF;AAEO,SAAS,oBAAoB,aAA2B;AAC7D,UAAQ,IAAI,uDAAuD;AACnE,mCAAc,qBAAqB,WAAW;AAChD;",
6
+ "names": []
7
+ }
@@ -41,7 +41,7 @@ var import_instructions = require("../instructions");
41
41
  const CODEX_BLOCK_ID = "codex";
42
42
  function installCodexEarly(_projectRoot) {
43
43
  }
44
- function installCodexLate(projectRoot, cavemanMode) {
44
+ function installCodexLate(projectRoot, cavemanMode, _shellCompressionLevel, _enableMemory) {
45
45
  const instructionsPath = path.join(projectRoot, ".kirograph", "codex.md");
46
46
  (0, import_common.ensureDir)(path.dirname(instructionsPath));
47
47
  fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(cavemanMode));
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/bin/installer/targets/codex.ts"],
4
- "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport { ensureDir, removeGeneratedBlock, upsertGeneratedBlock } from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CODEX_BLOCK_ID = 'codex';\n\nexport function installCodexEarly(_projectRoot: string): void {\n // Codex MCP config is user-scoped. We print the exact config in next steps\n // instead of writing outside the project from an installer command.\n}\n\nexport function installCodexLate(projectRoot: string, cavemanMode?: CavemanMode | 'off'): void {\n const instructionsPath = path.join(projectRoot, '.kirograph', 'codex.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(cavemanMode));\n console.log(` \u2713 Codex instructions written to ${instructionsPath}`);\n\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n const changed = upsertGeneratedBlock(agentsPath, CODEX_BLOCK_ID, '## KiroGraph', buildAgentInstructions(cavemanMode));\n console.log(changed\n ? ` \u2713 Codex project instructions updated in ${agentsPath}`\n : ` \u2713 Codex project instructions already up to date`);\n}\n\nexport function uninitCodex(projectRoot: string): void {\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n if (removeGeneratedBlock(agentsPath, CODEX_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from AGENTS.md`);\n }\n}\n\nexport function printCodexNextSteps(projectRoot: string): void {\n const escapedPath = projectRoot.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n console.log('\\n Done! Codex project instructions are installed.');\n console.log(' Add the MCP server to Codex with:');\n console.log(` codex mcp add kirograph -- kirograph serve --mcp --path \"${escapedPath}\"`);\n console.log('\\n Or add this to ~/.codex/config.toml:');\n console.log(' [mcp_servers.kirograph]');\n console.log(' command = \"kirograph\"');\n console.log(` args = [\"serve\", \"--mcp\", \"--path\", \"${escapedPath}\"]\\n`);\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AAEtB,oBAAsE;AACtE,0BAAuC;AAEvC,MAAM,iBAAiB;AAEhB,SAAS,kBAAkB,cAA4B;AAG9D;AAEO,SAAS,iBAAiB,aAAqB,aAAyC;AAC7F,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,UAAU;AACxE,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,WAAW,CAAC;AACtE,UAAQ,IAAI,0CAAqC,gBAAgB,EAAE;AAEnE,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,QAAM,cAAU,oCAAqB,YAAY,gBAAgB,oBAAgB,4CAAuB,WAAW,CAAC;AACpH,UAAQ,IAAI,UACR,kDAA6C,UAAU,KACvD,wDAAmD;AACzD;AAEO,SAAS,YAAY,aAA2B;AACrD,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,UAAI,oCAAqB,YAAY,cAAc,GAAG;AACpD,YAAQ,IAAI,iDAA4C;AAAA,EAC1D;AACF;AAEO,SAAS,oBAAoB,aAA2B;AAC7D,QAAM,cAAc,YAAY,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK;AAC1E,UAAQ,IAAI,qDAAqD;AACjE,UAAQ,IAAI,qCAAqC;AACjD,UAAQ,IAAI,gEAAgE,WAAW,GAAG;AAC1F,UAAQ,IAAI,0CAA0C;AACtD,UAAQ,IAAI,6BAA6B;AACzC,UAAQ,IAAI,2BAA2B;AACvC,UAAQ,IAAI,4CAA4C,WAAW;AAAA,CAAM;AAC3E;",
4
+ "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport { ensureDir, removeGeneratedBlock, upsertGeneratedBlock } from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CODEX_BLOCK_ID = 'codex';\n\nexport function installCodexEarly(_projectRoot: string): void {\n // Codex MCP config is user-scoped. We print the exact config in next steps\n // instead of writing outside the project from an installer command.\n}\n\nexport function installCodexLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', _shellCompressionLevel?: string, _enableMemory?: boolean): void {\n const instructionsPath = path.join(projectRoot, '.kirograph', 'codex.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(cavemanMode));\n console.log(` \u2713 Codex instructions written to ${instructionsPath}`);\n\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n const changed = upsertGeneratedBlock(agentsPath, CODEX_BLOCK_ID, '## KiroGraph', buildAgentInstructions(cavemanMode));\n console.log(changed\n ? ` \u2713 Codex project instructions updated in ${agentsPath}`\n : ` \u2713 Codex project instructions already up to date`);\n}\n\nexport function uninitCodex(projectRoot: string): void {\n const agentsPath = path.join(projectRoot, 'AGENTS.md');\n if (removeGeneratedBlock(agentsPath, CODEX_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from AGENTS.md`);\n }\n}\n\nexport function printCodexNextSteps(projectRoot: string): void {\n const escapedPath = projectRoot.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"');\n console.log('\\n Done! Codex project instructions are installed.');\n console.log(' Add the MCP server to Codex with:');\n console.log(` codex mcp add kirograph -- kirograph serve --mcp --path \"${escapedPath}\"`);\n console.log('\\n Or add this to ~/.codex/config.toml:');\n console.log(' [mcp_servers.kirograph]');\n console.log(' command = \"kirograph\"');\n console.log(` args = [\"serve\", \"--mcp\", \"--path\", \"${escapedPath}\"]\\n`);\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAAoB;AACpB,WAAsB;AAEtB,oBAAsE;AACtE,0BAAuC;AAEvC,MAAM,iBAAiB;AAEhB,SAAS,kBAAkB,cAA4B;AAG9D;AAEO,SAAS,iBAAiB,aAAqB,aAAmC,wBAAiC,eAA+B;AACvJ,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,UAAU;AACxE,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,WAAW,CAAC;AACtE,UAAQ,IAAI,0CAAqC,gBAAgB,EAAE;AAEnE,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,QAAM,cAAU,oCAAqB,YAAY,gBAAgB,oBAAgB,4CAAuB,WAAW,CAAC;AACpH,UAAQ,IAAI,UACR,kDAA6C,UAAU,KACvD,wDAAmD;AACzD;AAEO,SAAS,YAAY,aAA2B;AACrD,QAAM,aAAa,KAAK,KAAK,aAAa,WAAW;AACrD,UAAI,oCAAqB,YAAY,cAAc,GAAG;AACpD,YAAQ,IAAI,iDAA4C;AAAA,EAC1D;AACF;AAEO,SAAS,oBAAoB,aAA2B;AAC7D,QAAM,cAAc,YAAY,QAAQ,OAAO,MAAM,EAAE,QAAQ,MAAM,KAAK;AAC1E,UAAQ,IAAI,qDAAqD;AACjE,UAAQ,IAAI,qCAAqC;AACjD,UAAQ,IAAI,gEAAgE,WAAW,GAAG;AAC1F,UAAQ,IAAI,0CAA0C;AACtD,UAAQ,IAAI,6BAA6B;AACzC,UAAQ,IAAI,2BAA2B;AACvC,UAAQ,IAAI,4CAA4C,WAAW;AAAA,CAAM;AAC3E;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,107 @@
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 continue_exports = {};
30
+ __export(continue_exports, {
31
+ installContinueEarly: () => installContinueEarly,
32
+ installContinueLate: () => installContinueLate,
33
+ printContinueNextSteps: () => printContinueNextSteps,
34
+ uninitContinue: () => uninitContinue
35
+ });
36
+ module.exports = __toCommonJS(continue_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 MCP_FILE = "kirograph.json";
42
+ const RULES_FILE = "kirograph.md";
43
+ function installContinueEarly(projectRoot) {
44
+ const mcpDir = path.join(projectRoot, ".continue", "mcpServers");
45
+ (0, import_common.ensureDir)(mcpDir);
46
+ const mcpPath = path.join(mcpDir, MCP_FILE);
47
+ const config = {
48
+ mcpServers: {
49
+ kirograph: {
50
+ command: import_common.KIROGRAPH_COMMAND,
51
+ args: import_common.KIROGRAPH_MCP_ARGS
52
+ }
53
+ }
54
+ };
55
+ (0, import_common.writeJson)(mcpPath, config);
56
+ console.log(` \u2713 Continue MCP server registered in ${mcpPath}`);
57
+ }
58
+ function installContinueLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory) {
59
+ const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory);
60
+ const instructionsPath = path.join(projectRoot, ".kirograph", "continue.md");
61
+ (0, import_common.ensureDir)(path.dirname(instructionsPath));
62
+ fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(opts));
63
+ console.log(` \u2713 Continue instructions written to ${instructionsPath}`);
64
+ const rulesDir = path.join(projectRoot, ".continue", "rules");
65
+ (0, import_common.ensureDir)(rulesDir);
66
+ const rulePath = path.join(rulesDir, RULES_FILE);
67
+ fs.writeFileSync(rulePath, (0, import_instructions.buildAgentInstructions)(opts));
68
+ console.log(` \u2713 Continue rule written to ${rulePath}`);
69
+ }
70
+ function uninitContinue(projectRoot) {
71
+ const mcpPath = path.join(projectRoot, ".continue", "mcpServers", MCP_FILE);
72
+ if (fs.existsSync(mcpPath)) {
73
+ fs.unlinkSync(mcpPath);
74
+ console.log(` \u2713 Removed .continue/mcpServers/${MCP_FILE}`);
75
+ }
76
+ const rulePath = path.join(projectRoot, ".continue", "rules", RULES_FILE);
77
+ if (fs.existsSync(rulePath)) {
78
+ fs.unlinkSync(rulePath);
79
+ console.log(` \u2713 Removed .continue/rules/${RULES_FILE}`);
80
+ }
81
+ const legacyPath = path.join(projectRoot, ".continue", "config.json");
82
+ if (fs.existsSync(legacyPath)) {
83
+ try {
84
+ const config = JSON.parse(fs.readFileSync(legacyPath, "utf8"));
85
+ if (config.mcpServers?.kirograph) {
86
+ delete config.mcpServers.kirograph;
87
+ if (Object.keys(config.mcpServers).length === 0) delete config.mcpServers;
88
+ fs.writeFileSync(legacyPath, JSON.stringify(config, null, 2) + "\n");
89
+ console.log(` \u2713 Removed legacy kirograph from .continue/config.json`);
90
+ }
91
+ } catch {
92
+ }
93
+ }
94
+ }
95
+ function printContinueNextSteps() {
96
+ console.log("\n Done! Restart Continue for the MCP server to load.");
97
+ console.log(" MCP is in .continue/mcpServers/kirograph.json");
98
+ console.log(" KiroGraph rule is in .continue/rules/kirograph.md\n");
99
+ }
100
+ // Annotate the CommonJS export names for ESM import in node:
101
+ 0 && (module.exports = {
102
+ installContinueEarly,
103
+ installContinueLate,
104
+ printContinueNextSteps,
105
+ uninitContinue
106
+ });
107
+ //# sourceMappingURL=continue.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/bin/installer/targets/continue.ts"],
4
+ "sourcesContent": ["/**\n * Continue target.\n *\n * MCP: .continue/mcpServers/kirograph.json (project-level, JSON format)\n * Rules: .continue/rules/kirograph.md\n */\n\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst MCP_FILE = 'kirograph.json';\nconst RULES_FILE = 'kirograph.md';\n\nexport function installContinueEarly(projectRoot: string): void {\n // Write MCP config as a JSON file in .continue/mcpServers/\n const mcpDir = path.join(projectRoot, '.continue', 'mcpServers');\n ensureDir(mcpDir);\n const mcpPath = path.join(mcpDir, MCP_FILE);\n const config = {\n mcpServers: {\n kirograph: {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n },\n },\n };\n writeJson(mcpPath, config);\n console.log(` \u2713 Continue MCP server registered in ${mcpPath}`);\n}\n\nexport function installContinueLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean): void {\n const opts = buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'continue.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Continue instructions written to ${instructionsPath}`);\n\n // Write rules file in .continue/rules/\n const rulesDir = path.join(projectRoot, '.continue', 'rules');\n ensureDir(rulesDir);\n const rulePath = path.join(rulesDir, RULES_FILE);\n fs.writeFileSync(rulePath, buildAgentInstructions(opts));\n console.log(` \u2713 Continue rule written to ${rulePath}`);\n}\n\nexport function uninitContinue(projectRoot: string): void {\n // Remove MCP file\n const mcpPath = path.join(projectRoot, '.continue', 'mcpServers', MCP_FILE);\n if (fs.existsSync(mcpPath)) {\n fs.unlinkSync(mcpPath);\n console.log(` \u2713 Removed .continue/mcpServers/${MCP_FILE}`);\n }\n\n // Remove rule file\n const rulePath = path.join(projectRoot, '.continue', 'rules', RULES_FILE);\n if (fs.existsSync(rulePath)) {\n fs.unlinkSync(rulePath);\n console.log(` \u2713 Removed .continue/rules/${RULES_FILE}`);\n }\n\n // Remove legacy config.json entry if it exists\n const legacyPath = path.join(projectRoot, '.continue', 'config.json');\n if (fs.existsSync(legacyPath)) {\n try {\n const config = JSON.parse(fs.readFileSync(legacyPath, 'utf8'));\n if (config.mcpServers?.kirograph) {\n delete config.mcpServers.kirograph;\n if (Object.keys(config.mcpServers).length === 0) delete config.mcpServers;\n fs.writeFileSync(legacyPath, JSON.stringify(config, null, 2) + '\\n');\n console.log(` \u2713 Removed legacy kirograph from .continue/config.json`);\n }\n } catch {}\n }\n}\n\nexport function printContinueNextSteps(): void {\n console.log('\\n Done! Restart Continue for the MCP server to load.');\n console.log(' MCP is in .continue/mcpServers/kirograph.json');\n console.log(' KiroGraph rule is in .continue/rules/kirograph.md\\n');\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAoB;AACpB,WAAsB;AAEtB,oBAMO;AACP,0BAAuC;AAEvC,MAAM,WAAW;AACjB,MAAM,aAAa;AAEZ,SAAS,qBAAqB,aAA2B;AAE9D,QAAM,SAAS,KAAK,KAAK,aAAa,aAAa,YAAY;AAC/D,+BAAU,MAAM;AAChB,QAAM,UAAU,KAAK,KAAK,QAAQ,QAAQ;AAC1C,QAAM,SAAS;AAAA,IACb,YAAY;AAAA,MACV,WAAW;AAAA,QACT,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AACA,+BAAU,SAAS,MAAM;AACzB,UAAQ,IAAI,8CAAyC,OAAO,EAAE;AAChE;AAEO,SAAS,oBAAoB,aAAqB,aAAmC,uBAAgC,cAA8B;AACxJ,QAAM,WAAO,oCAAqB,aAAa,uBAAuB,YAAY;AAElF,QAAM,mBAAmB,KAAK,KAAK,aAAa,cAAc,aAAa;AAC3E,+BAAU,KAAK,QAAQ,gBAAgB,CAAC;AACxC,KAAG,cAAc,sBAAkB,4CAAuB,IAAI,CAAC;AAC/D,UAAQ,IAAI,6CAAwC,gBAAgB,EAAE;AAGtE,QAAM,WAAW,KAAK,KAAK,aAAa,aAAa,OAAO;AAC5D,+BAAU,QAAQ;AAClB,QAAM,WAAW,KAAK,KAAK,UAAU,UAAU;AAC/C,KAAG,cAAc,cAAU,4CAAuB,IAAI,CAAC;AACvD,UAAQ,IAAI,qCAAgC,QAAQ,EAAE;AACxD;AAEO,SAAS,eAAe,aAA2B;AAExD,QAAM,UAAU,KAAK,KAAK,aAAa,aAAa,cAAc,QAAQ;AAC1E,MAAI,GAAG,WAAW,OAAO,GAAG;AAC1B,OAAG,WAAW,OAAO;AACrB,YAAQ,IAAI,yCAAoC,QAAQ,EAAE;AAAA,EAC5D;AAGA,QAAM,WAAW,KAAK,KAAK,aAAa,aAAa,SAAS,UAAU;AACxE,MAAI,GAAG,WAAW,QAAQ,GAAG;AAC3B,OAAG,WAAW,QAAQ;AACtB,YAAQ,IAAI,oCAA+B,UAAU,EAAE;AAAA,EACzD;AAGA,QAAM,aAAa,KAAK,KAAK,aAAa,aAAa,aAAa;AACpE,MAAI,GAAG,WAAW,UAAU,GAAG;AAC7B,QAAI;AACF,YAAM,SAAS,KAAK,MAAM,GAAG,aAAa,YAAY,MAAM,CAAC;AAC7D,UAAI,OAAO,YAAY,WAAW;AAChC,eAAO,OAAO,WAAW;AACzB,YAAI,OAAO,KAAK,OAAO,UAAU,EAAE,WAAW,EAAG,QAAO,OAAO;AAC/D,WAAG,cAAc,YAAY,KAAK,UAAU,QAAQ,MAAM,CAAC,IAAI,IAAI;AACnE,gBAAQ,IAAI,8DAAyD;AAAA,MACvE;AAAA,IACF,QAAQ;AAAA,IAAC;AAAA,EACX;AACF;AAEO,SAAS,yBAA+B;AAC7C,UAAQ,IAAI,wDAAwD;AACpE,UAAQ,IAAI,iDAAiD;AAC7D,UAAQ,IAAI,uDAAuD;AACrE;",
6
+ "names": []
7
+ }
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var copilot_exports = {};
30
+ __export(copilot_exports, {
31
+ installCopilotEarly: () => installCopilotEarly,
32
+ installCopilotLate: () => installCopilotLate,
33
+ printCopilotNextSteps: () => printCopilotNextSteps,
34
+ uninitCopilot: () => uninitCopilot
35
+ });
36
+ module.exports = __toCommonJS(copilot_exports);
37
+ var fs = __toESM(require("fs"));
38
+ var path = __toESM(require("path"));
39
+ var import_common = require("../common");
40
+ var import_instructions = require("../instructions");
41
+ const COPILOT_BLOCK_ID = "copilot";
42
+ function buildCopilotHooks() {
43
+ return {
44
+ hooks: {
45
+ "session-end": [
46
+ { command: "kirograph sync --quiet 2>/dev/null || true" }
47
+ ]
48
+ }
49
+ };
50
+ }
51
+ function installCopilotEarly(projectRoot) {
52
+ const mcpPath = path.join(projectRoot, ".github", "copilot-mcp.json");
53
+ (0, import_common.writeMcpServersConfig)(mcpPath, {
54
+ command: import_common.KIROGRAPH_COMMAND,
55
+ args: import_common.KIROGRAPH_MCP_ARGS
56
+ });
57
+ console.log(` \u2713 GitHub Copilot MCP server registered in ${mcpPath}`);
58
+ }
59
+ function installCopilotLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory) {
60
+ const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true);
61
+ const instructionsPath = path.join(projectRoot, ".kirograph", "copilot.md");
62
+ (0, import_common.ensureDir)(path.dirname(instructionsPath));
63
+ fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(opts));
64
+ console.log(` \u2713 Copilot instructions written to ${instructionsPath}`);
65
+ const rulesPath = path.join(projectRoot, ".github", "copilot-instructions.md");
66
+ (0, import_common.ensureDir)(path.dirname(rulesPath));
67
+ const changed = (0, import_common.upsertGeneratedBlock)(rulesPath, COPILOT_BLOCK_ID, "## KiroGraph", (0, import_instructions.buildAgentInstructions)(opts));
68
+ console.log(changed ? ` \u2713 .github/copilot-instructions.md updated with KiroGraph instructions` : ` \u2713 .github/copilot-instructions.md already up to date`);
69
+ const hooksPath = path.join(projectRoot, ".github", "hooks.json");
70
+ const existing = (0, import_common.readJson)(hooksPath);
71
+ const kgHooks = buildCopilotHooks();
72
+ existing.hooks = existing.hooks ?? {};
73
+ for (const [event, commands] of Object.entries(kgHooks.hooks)) {
74
+ existing.hooks[event] = existing.hooks[event] ?? [];
75
+ for (const cmd of commands) {
76
+ if (!existing.hooks[event].some((h) => h.command === cmd.command)) {
77
+ existing.hooks[event].push(cmd);
78
+ }
79
+ }
80
+ }
81
+ (0, import_common.writeJson)(hooksPath, existing);
82
+ console.log(` \u2713 Copilot hooks written to ${hooksPath}`);
83
+ }
84
+ function uninitCopilot(projectRoot) {
85
+ const mcpPath = path.join(projectRoot, ".github", "copilot-mcp.json");
86
+ if ((0, import_common.removeMcpServersConfig)(mcpPath)) {
87
+ console.log(` \u2713 Removed kirograph from .github/copilot-mcp.json`);
88
+ }
89
+ const rulesPath = path.join(projectRoot, ".github", "copilot-instructions.md");
90
+ if ((0, import_common.removeGeneratedBlock)(rulesPath, COPILOT_BLOCK_ID)) {
91
+ console.log(` \u2713 Removed KiroGraph block from .github/copilot-instructions.md`);
92
+ }
93
+ const hooksPath = path.join(projectRoot, ".github", "hooks.json");
94
+ if (fs.existsSync(hooksPath)) {
95
+ const config = (0, import_common.readJson)(hooksPath);
96
+ if (config.hooks) {
97
+ let changed = false;
98
+ for (const event of Object.keys(config.hooks)) {
99
+ const before = config.hooks[event].length;
100
+ config.hooks[event] = config.hooks[event].filter((h) => !h.command?.includes("kirograph"));
101
+ if (config.hooks[event].length === 0) delete config.hooks[event];
102
+ if (config.hooks[event]?.length !== before) changed = true;
103
+ }
104
+ if (Object.keys(config.hooks).length === 0) delete config.hooks;
105
+ if (changed) {
106
+ (0, import_common.writeJson)(hooksPath, config);
107
+ console.log(` \u2713 Removed kirograph hooks from .github/hooks.json`);
108
+ }
109
+ }
110
+ }
111
+ }
112
+ function printCopilotNextSteps() {
113
+ console.log("\n Done! Restart your editor for the Copilot MCP server and hooks to load.");
114
+ console.log(" Auto-sync hook runs on session end.\n");
115
+ }
116
+ // Annotate the CommonJS export names for ESM import in node:
117
+ 0 && (module.exports = {
118
+ installCopilotEarly,
119
+ installCopilotLate,
120
+ printCopilotNextSteps,
121
+ uninitCopilot
122
+ });
123
+ //# sourceMappingURL=copilot.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/bin/installer/targets/copilot.ts"],
4
+ "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n removeMcpServersConfig,\n upsertGeneratedBlock,\n removeGeneratedBlock,\n writeMcpServersConfig,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst COPILOT_BLOCK_ID = 'copilot';\n\nfunction buildCopilotHooks(): object {\n return {\n hooks: {\n 'session-end': [\n { command: 'kirograph sync --quiet 2>/dev/null || true' },\n ],\n },\n };\n}\n\nexport function installCopilotEarly(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.github', 'copilot-mcp.json');\n writeMcpServersConfig(mcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(` \u2713 GitHub Copilot MCP server registered in ${mcpPath}`);\n}\n\nexport function installCopilotLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean): void {\n const opts = buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, true);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'copilot.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Copilot instructions written to ${instructionsPath}`);\n\n const rulesPath = path.join(projectRoot, '.github', 'copilot-instructions.md');\n ensureDir(path.dirname(rulesPath));\n const changed = upsertGeneratedBlock(rulesPath, COPILOT_BLOCK_ID, '## KiroGraph', buildAgentInstructions(opts));\n console.log(changed\n ? ` \u2713 .github/copilot-instructions.md updated with KiroGraph instructions`\n : ` \u2713 .github/copilot-instructions.md already up to date`);\n\n // Write hooks\n const hooksPath = path.join(projectRoot, '.github', 'hooks.json');\n const existing = readJson(hooksPath);\n const kgHooks = buildCopilotHooks() as any;\n existing.hooks = existing.hooks ?? {};\n for (const [event, commands] of Object.entries(kgHooks.hooks)) {\n existing.hooks[event] = existing.hooks[event] ?? [];\n for (const cmd of commands as Array<{ command: string }>) {\n if (!existing.hooks[event].some((h: any) => h.command === cmd.command)) {\n existing.hooks[event].push(cmd);\n }\n }\n }\n writeJson(hooksPath, existing);\n console.log(` \u2713 Copilot hooks written to ${hooksPath}`);\n}\n\nexport function uninitCopilot(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.github', 'copilot-mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .github/copilot-mcp.json`);\n }\n\n const rulesPath = path.join(projectRoot, '.github', 'copilot-instructions.md');\n if (removeGeneratedBlock(rulesPath, COPILOT_BLOCK_ID)) {\n console.log(` \u2713 Removed KiroGraph block from .github/copilot-instructions.md`);\n }\n\n const hooksPath = path.join(projectRoot, '.github', 'hooks.json');\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config.hooks) {\n let changed = false;\n for (const event of Object.keys(config.hooks)) {\n const before = config.hooks[event].length;\n config.hooks[event] = config.hooks[event].filter((h: any) => !h.command?.includes('kirograph'));\n if (config.hooks[event].length === 0) delete config.hooks[event];\n if (config.hooks[event]?.length !== before) changed = true;\n }\n if (Object.keys(config.hooks).length === 0) delete config.hooks;\n if (changed) {\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph hooks from .github/hooks.json`);\n }\n }\n }\n}\n\nexport function printCopilotNextSteps(): void {\n console.log('\\n Done! Restart your editor for the Copilot MCP server and hooks to load.');\n console.log(' Auto-sync hook runs on session end.\\n');\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,143 @@
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 cursor_exports = {};
30
+ __export(cursor_exports, {
31
+ installCursorEarly: () => installCursorEarly,
32
+ installCursorLate: () => installCursorLate,
33
+ printCursorNextSteps: () => printCursorNextSteps,
34
+ uninitCursor: () => uninitCursor
35
+ });
36
+ module.exports = __toCommonJS(cursor_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 CURSOR_RULES_FILE = "kirograph.mdc";
42
+ const CURSOR_HOOKS_FILE = "hooks.json";
43
+ function buildCursorHooks(enableCompression) {
44
+ const hooks = {
45
+ stop: [
46
+ { command: "kirograph sync --quiet 2>/dev/null || true" }
47
+ ]
48
+ };
49
+ if (enableCompression) {
50
+ hooks.beforeShellExecution = [
51
+ { command: "kirograph compress-hint 2>/dev/null || true" }
52
+ ];
53
+ }
54
+ return { version: 1, hooks };
55
+ }
56
+ function installCursorEarly(projectRoot) {
57
+ const mcpPath = path.join(projectRoot, ".cursor", "mcp.json");
58
+ (0, import_common.writeMcpServersConfig)(mcpPath, {
59
+ command: import_common.KIROGRAPH_COMMAND,
60
+ args: import_common.KIROGRAPH_MCP_ARGS
61
+ });
62
+ console.log(` \u2713 Cursor MCP server registered in ${mcpPath}`);
63
+ }
64
+ function installCursorLate(projectRoot, cavemanMode, shellCompressionLevel, enableMemory) {
65
+ const enableCompression = shellCompressionLevel !== void 0 && shellCompressionLevel !== "off";
66
+ const opts = (0, import_common.buildInstructionOpts)(cavemanMode, shellCompressionLevel, enableMemory, true);
67
+ const instructionsPath = path.join(projectRoot, ".kirograph", "cursor.md");
68
+ (0, import_common.ensureDir)(path.dirname(instructionsPath));
69
+ fs.writeFileSync(instructionsPath, (0, import_instructions.buildAgentInstructions)(opts));
70
+ console.log(` \u2713 Cursor instructions written to ${instructionsPath}`);
71
+ const rulesDir = path.join(projectRoot, ".cursor", "rules");
72
+ (0, import_common.ensureDir)(rulesDir);
73
+ const rulePath = path.join(rulesDir, CURSOR_RULES_FILE);
74
+ const frontmatter = [
75
+ "---",
76
+ "description: KiroGraph semantic code knowledge graph \u2014 use graph tools instead of grep/glob",
77
+ "alwaysApply: true",
78
+ "---",
79
+ ""
80
+ ].join("\n");
81
+ fs.writeFileSync(rulePath, frontmatter + (0, import_instructions.buildAgentInstructions)(opts));
82
+ console.log(` \u2713 Cursor rule written to ${rulePath}`);
83
+ const hooksPath = path.join(projectRoot, ".cursor", CURSOR_HOOKS_FILE);
84
+ const existing = (0, import_common.readJson)(hooksPath);
85
+ const kirographHooks = buildCursorHooks(enableCompression);
86
+ const merged = { ...existing, ...kirographHooks };
87
+ if (existing.hooks) {
88
+ merged.hooks = { ...existing.hooks };
89
+ const kgHooks = kirographHooks.hooks;
90
+ for (const [event, commands] of Object.entries(kgHooks)) {
91
+ merged.hooks[event] = merged.hooks[event] ?? [];
92
+ for (const cmd of commands) {
93
+ if (!merged.hooks[event].some((h) => h.command === cmd.command)) {
94
+ merged.hooks[event].push(cmd);
95
+ }
96
+ }
97
+ }
98
+ }
99
+ (0, import_common.writeJson)(hooksPath, merged);
100
+ console.log(` \u2713 Cursor hooks written to ${hooksPath}`);
101
+ }
102
+ function uninitCursor(projectRoot) {
103
+ const mcpPath = path.join(projectRoot, ".cursor", "mcp.json");
104
+ if ((0, import_common.removeMcpServersConfig)(mcpPath)) {
105
+ console.log(` \u2713 Removed kirograph from .cursor/mcp.json`);
106
+ }
107
+ const rulePath = path.join(projectRoot, ".cursor", "rules", CURSOR_RULES_FILE);
108
+ if (fs.existsSync(rulePath)) {
109
+ fs.unlinkSync(rulePath);
110
+ console.log(` \u2713 Removed .cursor/rules/${CURSOR_RULES_FILE}`);
111
+ }
112
+ const hooksPath = path.join(projectRoot, ".cursor", CURSOR_HOOKS_FILE);
113
+ if (fs.existsSync(hooksPath)) {
114
+ const config = (0, import_common.readJson)(hooksPath);
115
+ if (config.hooks) {
116
+ let changed = false;
117
+ for (const event of Object.keys(config.hooks)) {
118
+ const before = config.hooks[event].length;
119
+ config.hooks[event] = config.hooks[event].filter((h) => !h.command?.includes("kirograph"));
120
+ if (config.hooks[event].length === 0) delete config.hooks[event];
121
+ if (config.hooks[event]?.length !== before) changed = true;
122
+ }
123
+ if (Object.keys(config.hooks).length === 0) delete config.hooks;
124
+ if (changed) {
125
+ (0, import_common.writeJson)(hooksPath, config);
126
+ console.log(` \u2713 Removed kirograph hooks from .cursor/hooks.json`);
127
+ }
128
+ }
129
+ }
130
+ }
131
+ function printCursorNextSteps() {
132
+ console.log("\n Done! Restart Cursor for the MCP server and hooks to load.");
133
+ console.log(" The kirograph rule is active in .cursor/rules/kirograph.mdc");
134
+ console.log(" Auto-sync hook runs on task completion.\n");
135
+ }
136
+ // Annotate the CommonJS export names for ESM import in node:
137
+ 0 && (module.exports = {
138
+ installCursorEarly,
139
+ installCursorLate,
140
+ printCursorNextSteps,
141
+ uninitCursor
142
+ });
143
+ //# sourceMappingURL=cursor.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/bin/installer/targets/cursor.ts"],
4
+ "sourcesContent": ["import * as fs from 'fs';\nimport * as path from 'path';\nimport { CavemanMode } from '../caveman';\nimport {\n ensureDir,\n buildInstructionOpts,\n readJson,\n writeJson,\n KIROGRAPH_COMMAND,\n KIROGRAPH_MCP_ARGS,\n removeMcpServersConfig,\n writeMcpServersConfig,\n} from '../common';\nimport { buildAgentInstructions } from '../instructions';\n\nconst CURSOR_RULES_FILE = 'kirograph.mdc';\nconst CURSOR_HOOKS_FILE = 'hooks.json';\n\nfunction buildCursorHooks(enableCompression?: boolean): object {\n const hooks: Record<string, Array<{ command: string }>> = {\n stop: [\n { command: 'kirograph sync --quiet 2>/dev/null || true' },\n ],\n };\n\n if (enableCompression) {\n hooks.beforeShellExecution = [\n { command: 'kirograph compress-hint 2>/dev/null || true' },\n ];\n }\n\n return { version: 1, hooks };\n}\n\nexport function installCursorEarly(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.cursor', 'mcp.json');\n writeMcpServersConfig(mcpPath, {\n command: KIROGRAPH_COMMAND,\n args: KIROGRAPH_MCP_ARGS,\n });\n console.log(` \u2713 Cursor MCP server registered in ${mcpPath}`);\n}\n\nexport function installCursorLate(projectRoot: string, cavemanMode?: CavemanMode | 'off', shellCompressionLevel?: string, enableMemory?: boolean): void {\n const enableCompression = shellCompressionLevel !== undefined && shellCompressionLevel !== 'off';\n const opts = buildInstructionOpts(cavemanMode, shellCompressionLevel, enableMemory, true);\n\n const instructionsPath = path.join(projectRoot, '.kirograph', 'cursor.md');\n ensureDir(path.dirname(instructionsPath));\n fs.writeFileSync(instructionsPath, buildAgentInstructions(opts));\n console.log(` \u2713 Cursor instructions written to ${instructionsPath}`);\n\n const rulesDir = path.join(projectRoot, '.cursor', 'rules');\n ensureDir(rulesDir);\n const rulePath = path.join(rulesDir, CURSOR_RULES_FILE);\n const frontmatter = [\n '---',\n 'description: KiroGraph semantic code knowledge graph \u2014 use graph tools instead of grep/glob',\n 'alwaysApply: true',\n '---',\n '',\n ].join('\\n');\n fs.writeFileSync(rulePath, frontmatter + buildAgentInstructions(opts));\n console.log(` \u2713 Cursor rule written to ${rulePath}`);\n\n // Write hooks\n const hooksPath = path.join(projectRoot, '.cursor', CURSOR_HOOKS_FILE);\n const existing = readJson(hooksPath);\n const kirographHooks = buildCursorHooks(enableCompression);\n // Merge: add kirograph hooks without overwriting user's existing hooks\n const merged = { ...existing, ...kirographHooks };\n if (existing.hooks) {\n merged.hooks = { ...existing.hooks };\n const kgHooks = (kirographHooks as any).hooks;\n for (const [event, commands] of Object.entries(kgHooks)) {\n merged.hooks[event] = merged.hooks[event] ?? [];\n // Avoid duplicates\n for (const cmd of commands as Array<{ command: string }>) {\n if (!merged.hooks[event].some((h: any) => h.command === cmd.command)) {\n merged.hooks[event].push(cmd);\n }\n }\n }\n }\n writeJson(hooksPath, merged);\n console.log(` \u2713 Cursor hooks written to ${hooksPath}`);\n}\n\nexport function uninitCursor(projectRoot: string): void {\n const mcpPath = path.join(projectRoot, '.cursor', 'mcp.json');\n if (removeMcpServersConfig(mcpPath)) {\n console.log(` \u2713 Removed kirograph from .cursor/mcp.json`);\n }\n\n const rulePath = path.join(projectRoot, '.cursor', 'rules', CURSOR_RULES_FILE);\n if (fs.existsSync(rulePath)) {\n fs.unlinkSync(rulePath);\n console.log(` \u2713 Removed .cursor/rules/${CURSOR_RULES_FILE}`);\n }\n\n // Remove kirograph hooks from hooks.json\n const hooksPath = path.join(projectRoot, '.cursor', CURSOR_HOOKS_FILE);\n if (fs.existsSync(hooksPath)) {\n const config = readJson(hooksPath);\n if (config.hooks) {\n let changed = false;\n for (const event of Object.keys(config.hooks)) {\n const before = config.hooks[event].length;\n config.hooks[event] = config.hooks[event].filter((h: any) => !h.command?.includes('kirograph'));\n if (config.hooks[event].length === 0) delete config.hooks[event];\n if (config.hooks[event]?.length !== before) changed = true;\n }\n if (Object.keys(config.hooks).length === 0) delete config.hooks;\n if (changed) {\n writeJson(hooksPath, config);\n console.log(` \u2713 Removed kirograph hooks from .cursor/hooks.json`);\n }\n }\n }\n}\n\nexport function printCursorNextSteps(): void {\n console.log('\\n Done! Restart Cursor for the MCP server and hooks to load.');\n console.log(' The kirograph rule is active in .cursor/rules/kirograph.mdc');\n console.log(' Auto-sync hook runs on task completion.\\n');\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }