ctxinit 0.1.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 (221) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +484 -0
  3. package/bin/ctx.js +3 -0
  4. package/dist/analysis/index.d.ts +2 -0
  5. package/dist/analysis/index.d.ts.map +1 -0
  6. package/dist/analysis/index.js +18 -0
  7. package/dist/analysis/index.js.map +1 -0
  8. package/dist/analysis/static-analysis.d.ts +79 -0
  9. package/dist/analysis/static-analysis.d.ts.map +1 -0
  10. package/dist/analysis/static-analysis.js +279 -0
  11. package/dist/analysis/static-analysis.js.map +1 -0
  12. package/dist/bootstrap/index.d.ts +8 -0
  13. package/dist/bootstrap/index.d.ts.map +1 -0
  14. package/dist/bootstrap/index.js +13 -0
  15. package/dist/bootstrap/index.js.map +1 -0
  16. package/dist/bootstrap/orchestrator.d.ts +48 -0
  17. package/dist/bootstrap/orchestrator.d.ts.map +1 -0
  18. package/dist/bootstrap/orchestrator.js +363 -0
  19. package/dist/bootstrap/orchestrator.js.map +1 -0
  20. package/dist/bootstrap/validator.d.ts +25 -0
  21. package/dist/bootstrap/validator.d.ts.map +1 -0
  22. package/dist/bootstrap/validator.js +412 -0
  23. package/dist/bootstrap/validator.js.map +1 -0
  24. package/dist/build/atomic.d.ts +74 -0
  25. package/dist/build/atomic.d.ts.map +1 -0
  26. package/dist/build/atomic.js +235 -0
  27. package/dist/build/atomic.js.map +1 -0
  28. package/dist/build/index.d.ts +10 -0
  29. package/dist/build/index.d.ts.map +1 -0
  30. package/dist/build/index.js +26 -0
  31. package/dist/build/index.js.map +1 -0
  32. package/dist/build/lock.d.ts +102 -0
  33. package/dist/build/lock.d.ts.map +1 -0
  34. package/dist/build/lock.js +297 -0
  35. package/dist/build/lock.js.map +1 -0
  36. package/dist/build/manifest.d.ts +138 -0
  37. package/dist/build/manifest.d.ts.map +1 -0
  38. package/dist/build/manifest.js +269 -0
  39. package/dist/build/manifest.js.map +1 -0
  40. package/dist/build/orchestrator.d.ts +103 -0
  41. package/dist/build/orchestrator.d.ts.map +1 -0
  42. package/dist/build/orchestrator.js +524 -0
  43. package/dist/build/orchestrator.js.map +1 -0
  44. package/dist/cli/bootstrap.d.ts +77 -0
  45. package/dist/cli/bootstrap.d.ts.map +1 -0
  46. package/dist/cli/bootstrap.js +527 -0
  47. package/dist/cli/bootstrap.js.map +1 -0
  48. package/dist/cli/build.d.ts +32 -0
  49. package/dist/cli/build.d.ts.map +1 -0
  50. package/dist/cli/build.js +156 -0
  51. package/dist/cli/build.js.map +1 -0
  52. package/dist/cli/diff.d.ts +23 -0
  53. package/dist/cli/diff.d.ts.map +1 -0
  54. package/dist/cli/diff.js +226 -0
  55. package/dist/cli/diff.js.map +1 -0
  56. package/dist/cli/hooks.d.ts +29 -0
  57. package/dist/cli/hooks.d.ts.map +1 -0
  58. package/dist/cli/hooks.js +176 -0
  59. package/dist/cli/hooks.js.map +1 -0
  60. package/dist/cli/init.d.ts +53 -0
  61. package/dist/cli/init.d.ts.map +1 -0
  62. package/dist/cli/init.js +254 -0
  63. package/dist/cli/init.js.map +1 -0
  64. package/dist/cli/lint.d.ts +46 -0
  65. package/dist/cli/lint.d.ts.map +1 -0
  66. package/dist/cli/lint.js +210 -0
  67. package/dist/cli/lint.js.map +1 -0
  68. package/dist/cli/migrate.d.ts +28 -0
  69. package/dist/cli/migrate.d.ts.map +1 -0
  70. package/dist/cli/migrate.js +350 -0
  71. package/dist/cli/migrate.js.map +1 -0
  72. package/dist/cli/verify.d.ts +21 -0
  73. package/dist/cli/verify.d.ts.map +1 -0
  74. package/dist/cli/verify.js +209 -0
  75. package/dist/cli/verify.js.map +1 -0
  76. package/dist/cli.d.ts +8 -0
  77. package/dist/cli.d.ts.map +1 -0
  78. package/dist/cli.js +262 -0
  79. package/dist/cli.js.map +1 -0
  80. package/dist/compiler/agents-compiler.d.ts +24 -0
  81. package/dist/compiler/agents-compiler.d.ts.map +1 -0
  82. package/dist/compiler/agents-compiler.js +192 -0
  83. package/dist/compiler/agents-compiler.js.map +1 -0
  84. package/dist/compiler/base-compiler.d.ts +152 -0
  85. package/dist/compiler/base-compiler.d.ts.map +1 -0
  86. package/dist/compiler/base-compiler.js +180 -0
  87. package/dist/compiler/base-compiler.js.map +1 -0
  88. package/dist/compiler/claude-compiler.d.ts +24 -0
  89. package/dist/compiler/claude-compiler.d.ts.map +1 -0
  90. package/dist/compiler/claude-compiler.js +182 -0
  91. package/dist/compiler/claude-compiler.js.map +1 -0
  92. package/dist/compiler/cursor-compiler.d.ts +33 -0
  93. package/dist/compiler/cursor-compiler.d.ts.map +1 -0
  94. package/dist/compiler/cursor-compiler.js +136 -0
  95. package/dist/compiler/cursor-compiler.js.map +1 -0
  96. package/dist/compiler/index.d.ts +7 -0
  97. package/dist/compiler/index.d.ts.map +1 -0
  98. package/dist/compiler/index.js +24 -0
  99. package/dist/compiler/index.js.map +1 -0
  100. package/dist/compiler/rule-selector.d.ts +115 -0
  101. package/dist/compiler/rule-selector.d.ts.map +1 -0
  102. package/dist/compiler/rule-selector.js +273 -0
  103. package/dist/compiler/rule-selector.js.map +1 -0
  104. package/dist/compiler/token-estimator.d.ts +74 -0
  105. package/dist/compiler/token-estimator.d.ts.map +1 -0
  106. package/dist/compiler/token-estimator.js +191 -0
  107. package/dist/compiler/token-estimator.js.map +1 -0
  108. package/dist/config/index.d.ts +2 -0
  109. package/dist/config/index.d.ts.map +1 -0
  110. package/dist/config/index.js +18 -0
  111. package/dist/config/index.js.map +1 -0
  112. package/dist/config/loader.d.ts +48 -0
  113. package/dist/config/loader.d.ts.map +1 -0
  114. package/dist/config/loader.js +175 -0
  115. package/dist/config/loader.js.map +1 -0
  116. package/dist/git/gitignore.d.ts +59 -0
  117. package/dist/git/gitignore.d.ts.map +1 -0
  118. package/dist/git/gitignore.js +268 -0
  119. package/dist/git/gitignore.js.map +1 -0
  120. package/dist/git/hooks.d.ts +34 -0
  121. package/dist/git/hooks.d.ts.map +1 -0
  122. package/dist/git/hooks.js +129 -0
  123. package/dist/git/hooks.js.map +1 -0
  124. package/dist/git/husky.d.ts +52 -0
  125. package/dist/git/husky.d.ts.map +1 -0
  126. package/dist/git/husky.js +219 -0
  127. package/dist/git/husky.js.map +1 -0
  128. package/dist/git/index.d.ts +9 -0
  129. package/dist/git/index.d.ts.map +1 -0
  130. package/dist/git/index.js +15 -0
  131. package/dist/git/index.js.map +1 -0
  132. package/dist/index.d.ts +6 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +23 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/llm/base-provider.d.ts +43 -0
  137. package/dist/llm/base-provider.d.ts.map +1 -0
  138. package/dist/llm/base-provider.js +91 -0
  139. package/dist/llm/base-provider.js.map +1 -0
  140. package/dist/llm/index.d.ts +17 -0
  141. package/dist/llm/index.d.ts.map +1 -0
  142. package/dist/llm/index.js +36 -0
  143. package/dist/llm/index.js.map +1 -0
  144. package/dist/llm/prompts/bootstrap-prompt.d.ts +27 -0
  145. package/dist/llm/prompts/bootstrap-prompt.d.ts.map +1 -0
  146. package/dist/llm/prompts/bootstrap-prompt.js +278 -0
  147. package/dist/llm/prompts/bootstrap-prompt.js.map +1 -0
  148. package/dist/llm/prompts/index.d.ts +5 -0
  149. package/dist/llm/prompts/index.d.ts.map +1 -0
  150. package/dist/llm/prompts/index.js +11 -0
  151. package/dist/llm/prompts/index.js.map +1 -0
  152. package/dist/llm/provider-factory.d.ts +27 -0
  153. package/dist/llm/provider-factory.d.ts.map +1 -0
  154. package/dist/llm/provider-factory.js +213 -0
  155. package/dist/llm/provider-factory.js.map +1 -0
  156. package/dist/llm/providers/claude-api.d.ts +21 -0
  157. package/dist/llm/providers/claude-api.d.ts.map +1 -0
  158. package/dist/llm/providers/claude-api.js +110 -0
  159. package/dist/llm/providers/claude-api.js.map +1 -0
  160. package/dist/llm/providers/claude-code.d.ts +21 -0
  161. package/dist/llm/providers/claude-code.d.ts.map +1 -0
  162. package/dist/llm/providers/claude-code.js +120 -0
  163. package/dist/llm/providers/claude-code.js.map +1 -0
  164. package/dist/llm/providers/codex-cli.d.ts +25 -0
  165. package/dist/llm/providers/codex-cli.d.ts.map +1 -0
  166. package/dist/llm/providers/codex-cli.js +129 -0
  167. package/dist/llm/providers/codex-cli.js.map +1 -0
  168. package/dist/llm/providers/cursor-cli.d.ts +24 -0
  169. package/dist/llm/providers/cursor-cli.d.ts.map +1 -0
  170. package/dist/llm/providers/cursor-cli.js +106 -0
  171. package/dist/llm/providers/cursor-cli.js.map +1 -0
  172. package/dist/llm/providers/gemini-api.d.ts +20 -0
  173. package/dist/llm/providers/gemini-api.d.ts.map +1 -0
  174. package/dist/llm/providers/gemini-api.js +121 -0
  175. package/dist/llm/providers/gemini-api.js.map +1 -0
  176. package/dist/llm/providers/gemini-cli.d.ts +20 -0
  177. package/dist/llm/providers/gemini-cli.d.ts.map +1 -0
  178. package/dist/llm/providers/gemini-cli.js +109 -0
  179. package/dist/llm/providers/gemini-cli.js.map +1 -0
  180. package/dist/llm/providers/interactive.d.ts +42 -0
  181. package/dist/llm/providers/interactive.d.ts.map +1 -0
  182. package/dist/llm/providers/interactive.js +200 -0
  183. package/dist/llm/providers/interactive.js.map +1 -0
  184. package/dist/llm/providers/openai-api.d.ts +21 -0
  185. package/dist/llm/providers/openai-api.d.ts.map +1 -0
  186. package/dist/llm/providers/openai-api.js +107 -0
  187. package/dist/llm/providers/openai-api.js.map +1 -0
  188. package/dist/llm/types.d.ts +128 -0
  189. package/dist/llm/types.d.ts.map +1 -0
  190. package/dist/llm/types.js +8 -0
  191. package/dist/llm/types.js.map +1 -0
  192. package/dist/parser/index.d.ts +3 -0
  193. package/dist/parser/index.d.ts.map +1 -0
  194. package/dist/parser/index.js +19 -0
  195. package/dist/parser/index.js.map +1 -0
  196. package/dist/parser/path-security.d.ts +40 -0
  197. package/dist/parser/path-security.d.ts.map +1 -0
  198. package/dist/parser/path-security.js +183 -0
  199. package/dist/parser/path-security.js.map +1 -0
  200. package/dist/parser/rule-parser.d.ts +50 -0
  201. package/dist/parser/rule-parser.d.ts.map +1 -0
  202. package/dist/parser/rule-parser.js +203 -0
  203. package/dist/parser/rule-parser.js.map +1 -0
  204. package/dist/schemas/config.d.ts +202 -0
  205. package/dist/schemas/config.d.ts.map +1 -0
  206. package/dist/schemas/config.js +96 -0
  207. package/dist/schemas/config.js.map +1 -0
  208. package/dist/schemas/index.d.ts +3 -0
  209. package/dist/schemas/index.d.ts.map +1 -0
  210. package/dist/schemas/index.js +19 -0
  211. package/dist/schemas/index.js.map +1 -0
  212. package/dist/schemas/rule.d.ts +67 -0
  213. package/dist/schemas/rule.d.ts.map +1 -0
  214. package/dist/schemas/rule.js +44 -0
  215. package/dist/schemas/rule.js.map +1 -0
  216. package/package.json +69 -0
  217. package/templates/architecture.md +35 -0
  218. package/templates/bootstrap-prompt.md +242 -0
  219. package/templates/config.yaml +25 -0
  220. package/templates/project.md +44 -0
  221. package/templates/rules/example.md +36 -0
@@ -0,0 +1,350 @@
1
+ "use strict";
2
+ /**
3
+ * Migrate Command
4
+ *
5
+ * Migration operations for legacy context files:
6
+ * - Analyze: Detect and report legacy files
7
+ * - Attach: Create .context alongside legacy files
8
+ * - Complete: Remove legacy files after confirmation
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ var __importDefault = (this && this.__importDefault) || function (mod) {
44
+ return (mod && mod.__esModule) ? mod : { "default": mod };
45
+ };
46
+ Object.defineProperty(exports, "__esModule", { value: true });
47
+ exports.runMigrate = runMigrate;
48
+ const path = __importStar(require("path"));
49
+ const fs = __importStar(require("fs"));
50
+ const chalk_1 = __importDefault(require("chalk"));
51
+ const inquirer_1 = __importDefault(require("inquirer"));
52
+ const init_1 = require("./init");
53
+ /**
54
+ * Analyze legacy files
55
+ */
56
+ async function analyzeLegacyFiles(projectRoot) {
57
+ const result = {
58
+ cursorrules: { exists: false, size: 0, lines: 0 },
59
+ claudeMd: { exists: false, size: 0, lines: 0 },
60
+ agentsMd: { exists: false, size: 0, lines: 0 },
61
+ };
62
+ const files = [
63
+ { key: 'cursorrules', path: path.join(projectRoot, '.cursorrules') },
64
+ { key: 'claudeMd', path: path.join(projectRoot, 'CLAUDE.md') },
65
+ { key: 'agentsMd', path: path.join(projectRoot, 'AGENTS.md') },
66
+ ];
67
+ for (const file of files) {
68
+ if (fs.existsSync(file.path)) {
69
+ const stats = await fs.promises.stat(file.path);
70
+ const content = await fs.promises.readFile(file.path, 'utf-8');
71
+ result[file.key] = {
72
+ exists: true,
73
+ size: stats.size,
74
+ lines: content.split('\n').length,
75
+ };
76
+ }
77
+ }
78
+ return result;
79
+ }
80
+ /**
81
+ * Run analyze mode
82
+ */
83
+ async function runAnalyze(projectRoot) {
84
+ console.log(chalk_1.default.blue('\nšŸ“Š Analyzing legacy context files...\n'));
85
+ const analysis = await analyzeLegacyFiles(projectRoot);
86
+ const hasLegacy = analysis.cursorrules.exists || analysis.claudeMd.exists || analysis.agentsMd.exists;
87
+ if (!hasLegacy) {
88
+ console.log(chalk_1.default.green('āœ… No legacy context files found.'));
89
+ console.log(chalk_1.default.gray(' Your project is ready for fresh initialization with `ctx init`.'));
90
+ return 0;
91
+ }
92
+ console.log(chalk_1.default.yellow('Found legacy context files:\n'));
93
+ if (analysis.cursorrules.exists) {
94
+ console.log(chalk_1.default.bold(' .cursorrules'));
95
+ console.log(chalk_1.default.gray(` Size: ${(analysis.cursorrules.size / 1024).toFixed(1)} KB`));
96
+ console.log(chalk_1.default.gray(` Lines: ${analysis.cursorrules.lines}`));
97
+ }
98
+ if (analysis.claudeMd.exists) {
99
+ console.log(chalk_1.default.bold(' CLAUDE.md'));
100
+ console.log(chalk_1.default.gray(` Size: ${(analysis.claudeMd.size / 1024).toFixed(1)} KB`));
101
+ console.log(chalk_1.default.gray(` Lines: ${analysis.claudeMd.lines}`));
102
+ }
103
+ if (analysis.agentsMd.exists) {
104
+ console.log(chalk_1.default.bold(' AGENTS.md'));
105
+ console.log(chalk_1.default.gray(` Size: ${(analysis.agentsMd.size / 1024).toFixed(1)} KB`));
106
+ console.log(chalk_1.default.gray(` Lines: ${analysis.agentsMd.lines}`));
107
+ }
108
+ console.log('');
109
+ // Recommend strategy based on file sizes
110
+ const totalSize = analysis.cursorrules.size + analysis.claudeMd.size + analysis.agentsMd.size;
111
+ if (totalSize > 50 * 1024) {
112
+ console.log(chalk_1.default.yellow('šŸ“‹ Recommendation: Attach Mode'));
113
+ console.log(chalk_1.default.gray(' Your legacy files are substantial. Consider using attach mode'));
114
+ console.log(chalk_1.default.gray(' to run .context alongside existing files during transition.'));
115
+ console.log(chalk_1.default.gray(' Run: ctx migrate --attach'));
116
+ }
117
+ else {
118
+ console.log(chalk_1.default.green('šŸ“‹ Recommendation: Direct Migration'));
119
+ console.log(chalk_1.default.gray(' Your legacy files are relatively small. You can likely'));
120
+ console.log(chalk_1.default.gray(' migrate directly to .context-based rules.'));
121
+ console.log(chalk_1.default.gray(' Run: ctx init --wizard'));
122
+ }
123
+ return 0;
124
+ }
125
+ /**
126
+ * Run attach mode
127
+ */
128
+ async function runAttach(projectRoot, options) {
129
+ console.log(chalk_1.default.blue('\nšŸ”— Running attach mode migration...\n'));
130
+ const analysis = await analyzeLegacyFiles(projectRoot);
131
+ const hasLegacy = analysis.cursorrules.exists || analysis.claudeMd.exists || analysis.agentsMd.exists;
132
+ if (!hasLegacy) {
133
+ console.log(chalk_1.default.yellow('āš ļø No legacy files found to attach to.'));
134
+ console.log(chalk_1.default.gray(' Run `ctx init` for fresh initialization instead.'));
135
+ return 1;
136
+ }
137
+ // Check if .context already exists
138
+ if ((0, init_1.contextExists)(projectRoot) && !options.force) {
139
+ console.log(chalk_1.default.yellow('āš ļø .context directory already exists.'));
140
+ console.log(chalk_1.default.gray(' Use --force to overwrite or run `ctx migrate --complete` first.'));
141
+ return 1;
142
+ }
143
+ // Determine agent selection from existing files
144
+ let agents = 'all';
145
+ if (analysis.claudeMd.exists && !analysis.cursorrules.exists) {
146
+ agents = 'claude';
147
+ }
148
+ else if (analysis.cursorrules.exists && !analysis.claudeMd.exists) {
149
+ agents = 'cursor';
150
+ }
151
+ if (options.dryRun) {
152
+ console.log(chalk_1.default.cyan('šŸ“‹ Dry run - would perform the following:'));
153
+ console.log(chalk_1.default.gray(' 1. Create .context directory structure'));
154
+ console.log(chalk_1.default.gray(' 2. Generate template files'));
155
+ console.log(chalk_1.default.gray(` 3. Configure for ${agents} agent(s)`));
156
+ console.log(chalk_1.default.gray(' 4. Set migration.mode = "attach" in config.yaml'));
157
+ console.log(chalk_1.default.gray(' 5. Import legacy content as .context/rules/legacy.md'));
158
+ return 0;
159
+ }
160
+ // Initialize .context
161
+ const { created } = await (0, init_1.initializeContext)(projectRoot, agents);
162
+ console.log(chalk_1.default.green('\nāœ… Created .context directory structure'));
163
+ for (const file of created) {
164
+ console.log(chalk_1.default.gray(` ${path.relative(projectRoot, file)}`));
165
+ }
166
+ // Create legacy.md rule from existing files
167
+ const legacyRulePath = path.join(projectRoot, '.context', 'rules', 'legacy.md');
168
+ let legacyContent = `---
169
+ id: legacy-rules
170
+ description: Imported legacy context rules
171
+ priority: 100
172
+ tags: [legacy, migration]
173
+ ---
174
+
175
+ # Legacy Context Rules
176
+
177
+ This file contains rules imported from your legacy context files.
178
+ Review and organize these rules into appropriate files, then remove this file.
179
+
180
+ `;
181
+ if (analysis.claudeMd.exists) {
182
+ const content = await fs.promises.readFile(path.join(projectRoot, 'CLAUDE.md'), 'utf-8');
183
+ legacyContent += `## From CLAUDE.md\n\n${content}\n\n`;
184
+ }
185
+ if (analysis.cursorrules.exists) {
186
+ const content = await fs.promises.readFile(path.join(projectRoot, '.cursorrules'), 'utf-8');
187
+ legacyContent += `## From .cursorrules\n\n${content}\n\n`;
188
+ }
189
+ if (analysis.agentsMd.exists) {
190
+ const content = await fs.promises.readFile(path.join(projectRoot, 'AGENTS.md'), 'utf-8');
191
+ legacyContent += `## From AGENTS.md\n\n${content}\n\n`;
192
+ }
193
+ await fs.promises.writeFile(legacyRulePath, legacyContent, 'utf-8');
194
+ console.log(chalk_1.default.green(`\nāœ… Imported legacy rules to .context/rules/legacy.md`));
195
+ // Backup legacy files with .legacy extension so diff command can compare them
196
+ // This preserves the original files for comparison after ctx build overwrites them
197
+ if (analysis.claudeMd.exists) {
198
+ const src = path.join(projectRoot, 'CLAUDE.md');
199
+ const dst = path.join(projectRoot, 'CLAUDE.md.legacy');
200
+ await fs.promises.copyFile(src, dst);
201
+ console.log(chalk_1.default.green('āœ… Backed up CLAUDE.md → CLAUDE.md.legacy'));
202
+ }
203
+ if (analysis.agentsMd.exists) {
204
+ const src = path.join(projectRoot, 'AGENTS.md');
205
+ const dst = path.join(projectRoot, 'AGENTS.md.legacy');
206
+ await fs.promises.copyFile(src, dst);
207
+ console.log(chalk_1.default.green('āœ… Backed up AGENTS.md → AGENTS.md.legacy'));
208
+ }
209
+ // Update config.yaml with migration mode
210
+ const configPath = path.join(projectRoot, '.context', 'config.yaml');
211
+ let configContent = await fs.promises.readFile(configPath, 'utf-8');
212
+ configContent += `
213
+ # Migration configuration
214
+ migration:
215
+ mode: attach
216
+ preserve_legacy: true
217
+ legacy_files:
218
+ `;
219
+ if (analysis.claudeMd.exists)
220
+ configContent += ' - CLAUDE.md\n';
221
+ if (analysis.cursorrules.exists)
222
+ configContent += ' - .cursorrules\n';
223
+ if (analysis.agentsMd.exists)
224
+ configContent += ' - AGENTS.md\n';
225
+ await fs.promises.writeFile(configPath, configContent, 'utf-8');
226
+ console.log(chalk_1.default.green('āœ… Updated config.yaml with migration settings'));
227
+ console.log(chalk_1.default.blue('\nšŸ“ Next steps:'));
228
+ console.log(chalk_1.default.gray(' 1. Review and organize .context/rules/legacy.md'));
229
+ console.log(chalk_1.default.gray(' 2. Run `ctx build` to generate outputs'));
230
+ console.log(chalk_1.default.gray(' 3. Compare with `ctx diff --legacy`'));
231
+ console.log(chalk_1.default.gray(' 4. Complete migration with `ctx migrate --complete`'));
232
+ return 0;
233
+ }
234
+ /**
235
+ * Run complete mode
236
+ */
237
+ async function runComplete(projectRoot, options) {
238
+ console.log(chalk_1.default.blue('\nšŸ Completing migration...\n'));
239
+ const analysis = await analyzeLegacyFiles(projectRoot);
240
+ const hasLegacy = analysis.cursorrules.exists || analysis.claudeMd.exists || analysis.agentsMd.exists;
241
+ if (!hasLegacy) {
242
+ console.log(chalk_1.default.green('āœ… No legacy files to remove.'));
243
+ return 0;
244
+ }
245
+ // Check if .context exists
246
+ if (!(0, init_1.contextExists)(projectRoot)) {
247
+ console.log(chalk_1.default.yellow('āš ļø .context directory not found.'));
248
+ console.log(chalk_1.default.gray(' Run `ctx init` or `ctx migrate --attach` first.'));
249
+ return 1;
250
+ }
251
+ // List files to remove (both original and .legacy backups)
252
+ const filesToRemove = [];
253
+ if (analysis.cursorrules.exists)
254
+ filesToRemove.push('.cursorrules');
255
+ // Note: CLAUDE.md and AGENTS.md are now generated by ctx build
256
+ // We only need to remove the .legacy backups created during attach
257
+ if (fs.existsSync(path.join(projectRoot, 'CLAUDE.md.legacy'))) {
258
+ filesToRemove.push('CLAUDE.md.legacy');
259
+ }
260
+ if (fs.existsSync(path.join(projectRoot, 'AGENTS.md.legacy'))) {
261
+ filesToRemove.push('AGENTS.md.legacy');
262
+ }
263
+ console.log(chalk_1.default.yellow('The following legacy files will be removed:'));
264
+ for (const file of filesToRemove) {
265
+ console.log(chalk_1.default.gray(` ${file}`));
266
+ }
267
+ // Confirm unless force
268
+ if (!options.force && !options.dryRun) {
269
+ const { confirm } = await inquirer_1.default.prompt([
270
+ {
271
+ type: 'confirm',
272
+ name: 'confirm',
273
+ message: 'Are you sure you want to remove these files?',
274
+ default: false,
275
+ },
276
+ ]);
277
+ if (!confirm) {
278
+ console.log(chalk_1.default.gray('\nOperation cancelled.'));
279
+ return 1;
280
+ }
281
+ }
282
+ if (options.dryRun) {
283
+ console.log(chalk_1.default.cyan('\nšŸ“‹ Dry run - would remove:'));
284
+ for (const file of filesToRemove) {
285
+ console.log(chalk_1.default.gray(` ${file}`));
286
+ }
287
+ return 0;
288
+ }
289
+ // Create backup directory
290
+ const backupDir = path.join(projectRoot, `.context-migration-backup-${Date.now()}`);
291
+ await fs.promises.mkdir(backupDir, { recursive: true });
292
+ // Move files to backup
293
+ for (const file of filesToRemove) {
294
+ const sourcePath = path.join(projectRoot, file);
295
+ const backupPath = path.join(backupDir, file);
296
+ await fs.promises.rename(sourcePath, backupPath);
297
+ console.log(chalk_1.default.gray(` Backed up: ${file}`));
298
+ }
299
+ console.log(chalk_1.default.green(`\nāœ… Migration complete!`));
300
+ console.log(chalk_1.default.gray(` Legacy files backed up to: ${path.basename(backupDir)}`));
301
+ // Update config.yaml to remove migration mode
302
+ const configPath = path.join(projectRoot, '.context', 'config.yaml');
303
+ if (fs.existsSync(configPath)) {
304
+ let configContent = await fs.promises.readFile(configPath, 'utf-8');
305
+ // Remove migration section (simple approach)
306
+ // Match from "# Migration configuration" to end of migration block or end of file
307
+ configContent = configContent.replace(/\n# Migration configuration\nmigration:[\s\S]*?(?=\n[a-z#]|$)/g, '');
308
+ // Also handle case where migration section is at end of file
309
+ configContent = configContent.replace(/\nmigration:\s*\n\s+mode:[\s\S]*$/g, '');
310
+ await fs.promises.writeFile(configPath, configContent, 'utf-8');
311
+ console.log(chalk_1.default.green('āœ… Updated config.yaml to remove migration settings'));
312
+ }
313
+ console.log(chalk_1.default.blue('\nšŸŽ‰ Your project now uses .context exclusively!'));
314
+ console.log(chalk_1.default.gray(' Run `ctx build` to regenerate outputs.'));
315
+ return 0;
316
+ }
317
+ /**
318
+ * Run the migrate command
319
+ */
320
+ async function runMigrate(options) {
321
+ const projectRoot = process.cwd();
322
+ // Determine which mode to run
323
+ if (options.analyze) {
324
+ return runAnalyze(projectRoot);
325
+ }
326
+ if (options.attach) {
327
+ return runAttach(projectRoot, options);
328
+ }
329
+ if (options.complete) {
330
+ return runComplete(projectRoot, options);
331
+ }
332
+ // Default: show help
333
+ console.log(chalk_1.default.blue('\nšŸ“¦ Context Migration Tool\n'));
334
+ console.log('Usage: ctx migrate [options]\n');
335
+ console.log('Options:');
336
+ console.log(' --analyze Detect and analyze legacy context files');
337
+ console.log(' --attach Create .context alongside legacy files');
338
+ console.log(' --complete Remove legacy files after migration');
339
+ console.log(' --force Skip confirmation prompts');
340
+ console.log(' --dry-run Show what would happen without making changes');
341
+ console.log('');
342
+ console.log('Migration workflow:');
343
+ console.log(chalk_1.default.gray(' 1. ctx migrate --analyze # See what legacy files exist'));
344
+ console.log(chalk_1.default.gray(' 2. ctx migrate --attach # Create .context alongside'));
345
+ console.log(chalk_1.default.gray(' 3. ctx build # Generate new outputs'));
346
+ console.log(chalk_1.default.gray(' 4. ctx diff --legacy # Compare results'));
347
+ console.log(chalk_1.default.gray(' 5. ctx migrate --complete # Remove legacy files'));
348
+ return 0;
349
+ }
350
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Verify Command
3
+ *
4
+ * Checksum verification for compiled outputs:
5
+ * - Verify CLAUDE.md, AGENTS.md, .mdc files haven't been tampered with
6
+ * - Compare embedded checksums with actual file content
7
+ */
8
+ /**
9
+ * Verify command options
10
+ */
11
+ export interface VerifyCommandOptions {
12
+ /** Show detailed output */
13
+ verbose?: boolean;
14
+ /** Output in JSON format */
15
+ json?: boolean;
16
+ }
17
+ /**
18
+ * Run the verify command
19
+ */
20
+ export declare function runVerify(options: VerifyCommandOptions): Promise<number>;
21
+ //# sourceMappingURL=verify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA8FD;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CA8F9E"}
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ /**
3
+ * Verify Command
4
+ *
5
+ * Checksum verification for compiled outputs:
6
+ * - Verify CLAUDE.md, AGENTS.md, .mdc files haven't been tampered with
7
+ * - Compare embedded checksums with actual file content
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
21
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
22
+ }) : function(o, v) {
23
+ o["default"] = v;
24
+ });
25
+ var __importStar = (this && this.__importStar) || (function () {
26
+ var ownKeys = function(o) {
27
+ ownKeys = Object.getOwnPropertyNames || function (o) {
28
+ var ar = [];
29
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
30
+ return ar;
31
+ };
32
+ return ownKeys(o);
33
+ };
34
+ return function (mod) {
35
+ if (mod && mod.__esModule) return mod;
36
+ var result = {};
37
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
38
+ __setModuleDefault(result, mod);
39
+ return result;
40
+ };
41
+ })();
42
+ var __importDefault = (this && this.__importDefault) || function (mod) {
43
+ return (mod && mod.__esModule) ? mod : { "default": mod };
44
+ };
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.runVerify = runVerify;
47
+ const path = __importStar(require("path"));
48
+ const fs = __importStar(require("fs"));
49
+ const chalk_1 = __importDefault(require("chalk"));
50
+ const crypto = __importStar(require("crypto"));
51
+ /**
52
+ * Extract embedded checksum from file content
53
+ * Looks for: <!-- checksum: sha256:HASH -->
54
+ */
55
+ function extractChecksum(content) {
56
+ const match = content.match(/<!--\s*checksum:\s*(sha256:[a-f0-9]{64})\s*-->/i);
57
+ return match ? match[1] : null;
58
+ }
59
+ /**
60
+ * Calculate content checksum (excluding the entire footer block)
61
+ *
62
+ * The footer consists of 3 lines appended AFTER the checksum is calculated:
63
+ * <!-- ctx build metadata -->
64
+ * <!-- timestamp: ... -->
65
+ * <!-- checksum: sha256:... -->
66
+ *
67
+ * We must remove ALL of these to match the original checksum calculation.
68
+ */
69
+ function calculateChecksum(content) {
70
+ // Remove the entire footer block (metadata comment + timestamp + checksum)
71
+ // This matches what base-compiler.ts does: calculate checksum on content BEFORE footer
72
+ const cleanContent = content.replace(/\n<!-- ctx build metadata -->\n<!-- timestamp: [^\n]+ -->\n<!-- checksum: sha256:[a-f0-9]{64} -->\s*$/, '');
73
+ // Normalize line endings so checksums are stable across environments (e.g., CRLF vs LF).
74
+ const normalized = cleanContent.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
75
+ const hash = crypto.createHash('sha256').update(normalized).digest('hex');
76
+ return `sha256:${hash}`;
77
+ }
78
+ /**
79
+ * Verify a single file
80
+ */
81
+ async function verifyFile(filePath) {
82
+ const result = {
83
+ path: filePath,
84
+ exists: false,
85
+ hasChecksum: false,
86
+ valid: false,
87
+ };
88
+ try {
89
+ // Check if file exists
90
+ if (!fs.existsSync(filePath)) {
91
+ result.error = 'File not found';
92
+ return result;
93
+ }
94
+ result.exists = true;
95
+ // Read content
96
+ const content = await fs.promises.readFile(filePath, 'utf-8');
97
+ // Extract embedded checksum
98
+ const embeddedChecksum = extractChecksum(content);
99
+ if (!embeddedChecksum) {
100
+ result.error = 'No checksum found in file (file may not be generated by ctx)';
101
+ return result;
102
+ }
103
+ result.hasChecksum = true;
104
+ result.embeddedChecksum = embeddedChecksum;
105
+ // Calculate actual checksum
106
+ result.actualChecksum = calculateChecksum(content);
107
+ // Compare
108
+ result.valid = result.embeddedChecksum === result.actualChecksum;
109
+ if (!result.valid) {
110
+ result.error = 'Checksum mismatch - file has been modified';
111
+ }
112
+ return result;
113
+ }
114
+ catch (error) {
115
+ result.error = error.message;
116
+ return result;
117
+ }
118
+ }
119
+ /**
120
+ * Run the verify command
121
+ */
122
+ async function runVerify(options) {
123
+ const projectRoot = process.cwd();
124
+ // Files to verify
125
+ const filesToVerify = [
126
+ path.join(projectRoot, 'CLAUDE.md'),
127
+ path.join(projectRoot, 'AGENTS.md'),
128
+ ];
129
+ // Also check .cursor/rules/*.mdc files
130
+ const cursorRulesDir = path.join(projectRoot, '.cursor', 'rules');
131
+ if (fs.existsSync(cursorRulesDir)) {
132
+ const mdcFiles = fs.readdirSync(cursorRulesDir)
133
+ .filter(f => f.endsWith('.mdc'))
134
+ .map(f => path.join(cursorRulesDir, f));
135
+ filesToVerify.push(...mdcFiles);
136
+ }
137
+ if (!options.json) {
138
+ console.log(chalk_1.default.blue('\nšŸ” Verifying compiled outputs...\n'));
139
+ }
140
+ const results = [];
141
+ let allValid = true;
142
+ let filesVerified = 0;
143
+ for (const filePath of filesToVerify) {
144
+ const result = await verifyFile(filePath);
145
+ results.push(result);
146
+ if (result.exists && result.hasChecksum) {
147
+ filesVerified++;
148
+ if (!result.valid) {
149
+ allValid = false;
150
+ }
151
+ }
152
+ }
153
+ // Output results
154
+ if (options.json) {
155
+ console.log(JSON.stringify({
156
+ success: allValid,
157
+ filesVerified,
158
+ results: results.map(r => ({
159
+ path: path.relative(projectRoot, r.path),
160
+ exists: r.exists,
161
+ hasChecksum: r.hasChecksum,
162
+ valid: r.valid,
163
+ error: r.error,
164
+ })),
165
+ }, null, 2));
166
+ }
167
+ else {
168
+ for (const result of results) {
169
+ const relativePath = path.relative(projectRoot, result.path);
170
+ if (!result.exists) {
171
+ if (options.verbose) {
172
+ console.log(chalk_1.default.gray(` ā­ļø ${relativePath} - not found (skipped)`));
173
+ }
174
+ continue;
175
+ }
176
+ if (!result.hasChecksum) {
177
+ console.log(chalk_1.default.yellow(` āš ļø ${relativePath} - no checksum found`));
178
+ continue;
179
+ }
180
+ if (result.valid) {
181
+ console.log(chalk_1.default.green(` āœ… ${relativePath} - valid`));
182
+ if (options.verbose) {
183
+ console.log(chalk_1.default.gray(` Checksum: ${result.embeddedChecksum}`));
184
+ }
185
+ }
186
+ else {
187
+ console.log(chalk_1.default.red(` āŒ ${relativePath} - MODIFIED`));
188
+ if (options.verbose) {
189
+ console.log(chalk_1.default.gray(` Expected: ${result.embeddedChecksum}`));
190
+ console.log(chalk_1.default.gray(` Actual: ${result.actualChecksum}`));
191
+ }
192
+ }
193
+ }
194
+ console.log('');
195
+ if (filesVerified === 0) {
196
+ console.log(chalk_1.default.yellow('āš ļø No verifiable files found.'));
197
+ console.log(chalk_1.default.gray(' Run `ctx build` first to generate compiled outputs.'));
198
+ }
199
+ else if (allValid) {
200
+ console.log(chalk_1.default.green(`āœ… All ${filesVerified} file(s) verified successfully`));
201
+ }
202
+ else {
203
+ console.log(chalk_1.default.red(`āŒ Verification failed - some files have been modified`));
204
+ console.log(chalk_1.default.gray(' Run `ctx build` to regenerate from source rules.'));
205
+ }
206
+ }
207
+ return allValid ? 0 : 1;
208
+ }
209
+ //# sourceMappingURL=verify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/cli/verify.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * CLI Entry Point
3
+ *
4
+ * Unified `ctx` command for context architecture management.
5
+ * Supports init, build, lint, diff, verify, and migrate subcommands.
6
+ */
7
+ export declare function run(): void;
8
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAqQH,wBAAgB,GAAG,IAAI,IAAI,CAE1B"}