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
package/dist/cli.js ADDED
@@ -0,0 +1,262 @@
1
+ "use strict";
2
+ /**
3
+ * CLI Entry Point
4
+ *
5
+ * Unified `ctx` command for context architecture management.
6
+ * Supports init, build, lint, diff, verify, and migrate subcommands.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.run = run;
10
+ const commander_1 = require("commander");
11
+ const init_1 = require("./cli/init");
12
+ const build_1 = require("./cli/build");
13
+ const lint_1 = require("./cli/lint");
14
+ const verify_1 = require("./cli/verify");
15
+ const diff_1 = require("./cli/diff");
16
+ const migrate_1 = require("./cli/migrate");
17
+ const hooks_1 = require("./cli/hooks");
18
+ const bootstrap_1 = require("./bootstrap");
19
+ const llm_1 = require("./llm");
20
+ const program = new commander_1.Command();
21
+ program
22
+ .name('ctx')
23
+ .description('Unified context architecture for AI coding assistants')
24
+ .version('0.1.0');
25
+ // Init command
26
+ program
27
+ .command('init')
28
+ .description('Initialize .context directory in your project')
29
+ .option('-f, --force', 'Overwrite existing .context directory (creates backup)')
30
+ .option('--no-interactive', 'Run without prompts (use defaults)')
31
+ .option('--wizard', 'Launch guided migration wizard')
32
+ .option('--dry-run', 'Show what would happen without making changes')
33
+ // Back-compat: init runs bootstrap by default, but keep --bootstrap flag accepted.
34
+ .option('-b, --bootstrap', 'Run LLM bootstrap after init (default)')
35
+ .option('--no-bootstrap', 'Skip LLM bootstrap (only create templates)')
36
+ .action(async (options) => {
37
+ try {
38
+ const exitCode = await (0, init_1.runInit)({
39
+ force: options.force,
40
+ interactive: options.interactive,
41
+ wizard: options.wizard,
42
+ dryRun: options.dryRun,
43
+ bootstrap: options.bootstrap,
44
+ });
45
+ process.exit(exitCode);
46
+ }
47
+ catch (error) {
48
+ console.error('Error:', error.message);
49
+ process.exit(2);
50
+ }
51
+ });
52
+ // Build command
53
+ program
54
+ .command('build [targets...]')
55
+ .description('Compile rules into target formats')
56
+ .option('-i, --incremental', 'Only rebuild changed files')
57
+ .option('--check', 'Check whether compiled outputs are up to date (no writes)')
58
+ .option('-v, --verbose', 'Show detailed output')
59
+ .option('-q, --quiet', 'Suppress output except errors')
60
+ .option('--skip-validation', 'Skip validation step')
61
+ .option('--force', 'Force full rebuild')
62
+ .option('-t, --target <targets...>', 'Specific targets to build (claude, cursor, agents)')
63
+ .action(async (targets, options) => {
64
+ try {
65
+ let targetArgs = options.target;
66
+ if (!targetArgs || targetArgs.length === 0) {
67
+ if (Array.isArray(targets)) {
68
+ targetArgs = targets.length > 0 ? targets : undefined;
69
+ }
70
+ else if (targets) {
71
+ targetArgs = [targets];
72
+ }
73
+ }
74
+ const exitCode = await (0, build_1.runBuild)({
75
+ incremental: options.incremental,
76
+ check: options.check,
77
+ verbose: options.verbose,
78
+ quiet: options.quiet,
79
+ skipValidation: options.skipValidation,
80
+ force: options.force,
81
+ target: targetArgs,
82
+ });
83
+ process.exit(exitCode);
84
+ }
85
+ catch (error) {
86
+ console.error('Error:', error.message);
87
+ process.exit(2);
88
+ }
89
+ });
90
+ const runLintCommand = async (files = [], options) => {
91
+ try {
92
+ const exitCode = await (0, lint_1.runLint)({
93
+ json: options.json,
94
+ verbose: options.verbose,
95
+ quiet: options.quiet,
96
+ files: files.length > 0 ? files : undefined,
97
+ });
98
+ process.exit(exitCode);
99
+ }
100
+ catch (error) {
101
+ console.error('Error:', error.message);
102
+ process.exit(2);
103
+ }
104
+ };
105
+ // Lint command
106
+ program
107
+ .command('lint [files...]')
108
+ .description('Validate rules without building')
109
+ .option('--json', 'Output in JSON format')
110
+ .option('-v, --verbose', 'Show detailed output')
111
+ .option('-q, --quiet', 'Suppress output except errors')
112
+ .action(runLintCommand);
113
+ // Validate command (alias for lint)
114
+ program
115
+ .command('validate [files...]')
116
+ .description('Alias for lint: validate rules without building')
117
+ .option('--json', 'Output in JSON format')
118
+ .option('-v, --verbose', 'Show detailed output')
119
+ .option('-q, --quiet', 'Suppress output except errors')
120
+ .action(runLintCommand);
121
+ // Verify command
122
+ program
123
+ .command('verify')
124
+ .description('Verify checksums of compiled outputs')
125
+ .option('-v, --verbose', 'Show detailed output')
126
+ .option('--json', 'Output in JSON format')
127
+ .action(async (options) => {
128
+ try {
129
+ const exitCode = await (0, verify_1.runVerify)({
130
+ verbose: options.verbose,
131
+ json: options.json,
132
+ });
133
+ process.exit(exitCode);
134
+ }
135
+ catch (error) {
136
+ console.error('Error:', error.message);
137
+ process.exit(2);
138
+ }
139
+ });
140
+ // Diff command
141
+ program
142
+ .command('diff')
143
+ .description('Compare compiled outputs with legacy files')
144
+ .option('--legacy', 'Compare with legacy context files')
145
+ .option('--unified', 'Show unified diff format')
146
+ .option('-v, --verbose', 'Show detailed diff output')
147
+ .action(async (options) => {
148
+ try {
149
+ const exitCode = await (0, diff_1.runDiff)({
150
+ legacy: options.legacy,
151
+ unified: options.unified,
152
+ verbose: options.verbose,
153
+ });
154
+ process.exit(exitCode);
155
+ }
156
+ catch (error) {
157
+ console.error('Error:', error.message);
158
+ process.exit(2);
159
+ }
160
+ });
161
+ // Migrate command
162
+ program
163
+ .command('migrate')
164
+ .description('Manage migration from legacy context files')
165
+ .option('--analyze', 'Analyze existing legacy files')
166
+ .option('--attach', 'Create .context alongside legacy files')
167
+ .option('--complete', 'Remove legacy files after migration')
168
+ .option('-f, --force', 'Skip confirmation prompts')
169
+ .option('--dry-run', 'Show what would happen without making changes')
170
+ .action(async (options) => {
171
+ try {
172
+ const exitCode = await (0, migrate_1.runMigrate)({
173
+ analyze: options.analyze,
174
+ attach: options.attach,
175
+ complete: options.complete,
176
+ force: options.force,
177
+ dryRun: options.dryRun,
178
+ });
179
+ process.exit(exitCode);
180
+ }
181
+ catch (error) {
182
+ console.error('Error:', error.message);
183
+ process.exit(2);
184
+ }
185
+ });
186
+ // Hooks command
187
+ program
188
+ .command('hooks')
189
+ .description('Manage git hooks integration')
190
+ .option('--install', 'Install hooks without prompts')
191
+ .option('--remove', 'Remove ctx git hooks')
192
+ .option('--skip-husky', 'Skip Husky installation')
193
+ .option('--skip-gitignore', 'Skip .gitignore updates')
194
+ .option('-f, --force', 'Force overwrite existing hooks')
195
+ .option('--dry-run', 'Show what would happen without making changes')
196
+ .option('-v, --verbose', 'Show detailed output')
197
+ .action(async (options) => {
198
+ try {
199
+ const exitCode = await (0, hooks_1.runHooks)({
200
+ install: options.install,
201
+ remove: options.remove,
202
+ skipHusky: options.skipHusky,
203
+ skipGitignore: options.skipGitignore,
204
+ force: options.force,
205
+ dryRun: options.dryRun,
206
+ verbose: options.verbose,
207
+ });
208
+ process.exit(exitCode);
209
+ }
210
+ catch (error) {
211
+ console.error('Error:', error.message);
212
+ process.exit(2);
213
+ }
214
+ });
215
+ // Bootstrap command (enhanced LLM-powered context generation)
216
+ program
217
+ .command('bootstrap')
218
+ .description('Generate context files using LLM analysis')
219
+ .option('-p, --provider <type>', 'LLM provider to use (auto-detect if not specified)')
220
+ .option('--analyze-only', 'Only analyze codebase, skip LLM invocation')
221
+ .option('--skip-validation', 'Skip output validation')
222
+ .option('--auto-build', 'Automatically run build after bootstrap')
223
+ .option('-v, --verbose', 'Show detailed output including prompts')
224
+ .option('--dry-run', 'Show what would be generated without writing files')
225
+ .option('--list-providers', 'List available LLM providers')
226
+ .action(async (options) => {
227
+ try {
228
+ // List providers if requested
229
+ if (options.listProviders) {
230
+ console.log('\nAvailable LLM providers:\n');
231
+ for (const provider of (0, llm_1.listProviderTypes)()) {
232
+ console.log(` ${provider.type.padEnd(15)} ${provider.description}`);
233
+ }
234
+ console.log('\nUse --provider <type> to specify a provider.');
235
+ console.log('If not specified, the best available provider will be auto-selected.\n');
236
+ process.exit(0);
237
+ }
238
+ const result = await (0, bootstrap_1.runEnhancedBootstrap)(process.cwd(), {
239
+ provider: options.provider,
240
+ analyzeOnly: options.analyzeOnly,
241
+ skipValidation: options.skipValidation,
242
+ autoBuild: options.autoBuild,
243
+ verbose: options.verbose,
244
+ dryRun: options.dryRun,
245
+ });
246
+ process.exit(result.success ? 0 : 1);
247
+ }
248
+ catch (error) {
249
+ console.error('Error:', error.message);
250
+ process.exit(2);
251
+ }
252
+ });
253
+ // Handle unknown commands
254
+ program.on('command:*', () => {
255
+ console.error('Unknown command: %s', program.args.join(' '));
256
+ console.log('Run `ctx --help` for available commands.');
257
+ process.exit(1);
258
+ });
259
+ function run() {
260
+ program.parse();
261
+ }
262
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Agents Compiler
3
+ *
4
+ * Compiles rules to a comprehensive AGENTS.md file for general AI agents.
5
+ * Includes full project context, architecture, and rule summaries.
6
+ */
7
+ import { BaseCompiler, CompilerContext, CompilationResult } from './base-compiler';
8
+ /**
9
+ * Agents compiler implementation
10
+ */
11
+ export declare class AgentsCompiler extends BaseCompiler {
12
+ constructor(context: CompilerContext);
13
+ get targetName(): string;
14
+ compile(): Promise<CompilationResult>;
15
+ /**
16
+ * Build the complete AGENTS.md content
17
+ */
18
+ private buildOutput;
19
+ /**
20
+ * Build a failure result
21
+ */
22
+ private buildFailureResult;
23
+ }
24
+ //# sourceMappingURL=agents-compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-compiler.d.ts","sourceRoot":"","sources":["../../src/compiler/agents-compiler.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,YAAY,EACZ,eAAe,EACf,iBAAiB,EAIlB,MAAM,iBAAiB,CAAC;AAIzB;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;gBAClC,OAAO,EAAE,eAAe;IAIpC,IAAI,UAAU,IAAI,MAAM,CAEvB;IAEK,OAAO,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAwH3C;;OAEG;IACH,OAAO,CAAC,WAAW;IAiEnB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAkB3B"}
@@ -0,0 +1,192 @@
1
+ "use strict";
2
+ /**
3
+ * Agents Compiler
4
+ *
5
+ * Compiles rules to a comprehensive AGENTS.md file for general AI agents.
6
+ * Includes full project context, architecture, and rule summaries.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.AgentsCompiler = void 0;
10
+ const base_compiler_1 = require("./base-compiler");
11
+ const token_estimator_1 = require("./token-estimator");
12
+ const rule_selector_1 = require("./rule-selector");
13
+ /**
14
+ * Agents compiler implementation
15
+ */
16
+ class AgentsCompiler extends base_compiler_1.BaseCompiler {
17
+ constructor(context) {
18
+ super(context);
19
+ }
20
+ get targetName() {
21
+ return 'agents';
22
+ }
23
+ async compile() {
24
+ const errors = [];
25
+ const warnings = [];
26
+ // Get agents config
27
+ const agentsConfig = this.context.config.compile?.agents;
28
+ const maxTokens = agentsConfig?.max_tokens || 8000;
29
+ // Load project.md (required)
30
+ const projectContent = await this.loadProjectContent();
31
+ if (!projectContent) {
32
+ errors.push({
33
+ type: 'missing_file',
34
+ message: 'project.md is required for Agents compilation but was not found',
35
+ path: '.context/project.md',
36
+ });
37
+ return this.buildFailureResult(errors, warnings);
38
+ }
39
+ // Load architecture.md (optional)
40
+ const architectureContent = await this.loadArchitectureContent();
41
+ if (!architectureContent) {
42
+ warnings.push({
43
+ type: 'missing_optional',
44
+ message: 'architecture.md not found, compilation will continue without it',
45
+ path: '.context/architecture.md',
46
+ });
47
+ }
48
+ // Calculate token usage for required content
49
+ let usedTokens = 0;
50
+ usedTokens += (0, token_estimator_1.estimateTokens)(projectContent).tokens;
51
+ if (architectureContent) {
52
+ usedTokens += (0, token_estimator_1.estimateTokens)(architectureContent).tokens;
53
+ }
54
+ // Reserve tokens for meta-rule
55
+ const metaRule = this.generateMetaRule();
56
+ usedTokens += (0, token_estimator_1.estimateTokens)(metaRule).tokens;
57
+ // Calculate remaining budget for rules
58
+ const effectiveBudget = (0, token_estimator_1.applyBudgetMargin)(maxTokens);
59
+ const rulesBudget = Math.max(0, effectiveBudget - usedTokens);
60
+ // For agents, we use summaries instead of full content
61
+ const allRules = (0, rule_selector_1.sortByPriority)(this.context.rules);
62
+ const selectedRules = [];
63
+ let ruleTokens = 0;
64
+ for (const rule of allRules) {
65
+ const summary = this.getRuleSummary(rule);
66
+ const summaryTokens = (0, token_estimator_1.estimateTokens)(summary).tokens;
67
+ if (ruleTokens + summaryTokens <= rulesBudget) {
68
+ selectedRules.push(rule);
69
+ ruleTokens += summaryTokens;
70
+ }
71
+ else {
72
+ warnings.push({
73
+ type: 'token_limit',
74
+ message: `Rule ${rule.frontmatter.id} excluded due to token budget`,
75
+ });
76
+ }
77
+ }
78
+ if (selectedRules.length === 0 && this.context.rules.length > 0) {
79
+ warnings.push({
80
+ type: 'empty_rules',
81
+ message: 'No rules included in AGENTS.md due to token budget constraints',
82
+ });
83
+ }
84
+ // Build output content
85
+ let content = this.buildOutput(projectContent, architectureContent, selectedRules, metaRule);
86
+ // Add checksum and timestamp metadata
87
+ content = this.addMetadata(content);
88
+ const totalTokens = (0, token_estimator_1.estimateTokens)(content).tokens;
89
+ // Create output
90
+ const output = {
91
+ path: 'AGENTS.md',
92
+ content,
93
+ tokens: totalTokens,
94
+ };
95
+ // Write output (optional - callers like the build orchestrator may write atomically)
96
+ if (this.context.writeToDisk !== false) {
97
+ try {
98
+ this.writeOutput(output.path, output.content);
99
+ }
100
+ catch (error) {
101
+ errors.push({
102
+ type: 'write_error',
103
+ message: `Failed to write AGENTS.md: ${error.message}`,
104
+ path: 'AGENTS.md',
105
+ });
106
+ }
107
+ }
108
+ return {
109
+ success: errors.length === 0,
110
+ outputs: [output],
111
+ errors,
112
+ warnings,
113
+ totalTokens,
114
+ stats: {
115
+ rulesProcessed: this.context.rules.length,
116
+ rulesIncluded: selectedRules.length,
117
+ outputFiles: 1,
118
+ totalTokens,
119
+ tokenBudget: maxTokens,
120
+ },
121
+ };
122
+ }
123
+ /**
124
+ * Build the complete AGENTS.md content
125
+ */
126
+ buildOutput(projectContent, architectureContent, rules, metaRule) {
127
+ const sections = [];
128
+ // Header
129
+ sections.push('# Agent Context\n');
130
+ sections.push('This document provides context for AI agents working with this project.\n');
131
+ // Full project content
132
+ sections.push('## Project Overview\n');
133
+ sections.push(projectContent.trim());
134
+ sections.push('');
135
+ // Full architecture content
136
+ if (architectureContent) {
137
+ sections.push('## Architecture\n');
138
+ sections.push(architectureContent.trim());
139
+ sections.push('');
140
+ }
141
+ // Rule summaries
142
+ if (rules.length > 0) {
143
+ sections.push('## Rules and Guidelines\n');
144
+ for (const rule of rules) {
145
+ sections.push(`### ${rule.frontmatter.id}\n`);
146
+ // Include description
147
+ if (rule.frontmatter.description) {
148
+ sections.push(`**Description:** ${rule.frontmatter.description}\n`);
149
+ }
150
+ // Include tags if present
151
+ if (rule.frontmatter.tags && rule.frontmatter.tags.length > 0) {
152
+ sections.push(`**Tags:** ${rule.frontmatter.tags.join(', ')}\n`);
153
+ }
154
+ // Include domain if present
155
+ if (rule.frontmatter.domain) {
156
+ sections.push(`**Domain:** ${rule.frontmatter.domain}\n`);
157
+ }
158
+ // Include summary (first paragraph)
159
+ const firstParagraph = rule.content.split('\n\n')[0];
160
+ if (firstParagraph) {
161
+ sections.push(firstParagraph.trim());
162
+ }
163
+ sections.push('');
164
+ }
165
+ }
166
+ // Directory index for navigation
167
+ sections.push(this.generateDirectoryIndex(rules));
168
+ // Meta-rule
169
+ sections.push(metaRule);
170
+ return sections.join('\n');
171
+ }
172
+ /**
173
+ * Build a failure result
174
+ */
175
+ buildFailureResult(errors, warnings) {
176
+ return {
177
+ success: false,
178
+ outputs: [],
179
+ errors,
180
+ warnings,
181
+ totalTokens: 0,
182
+ stats: {
183
+ rulesProcessed: 0,
184
+ rulesIncluded: 0,
185
+ outputFiles: 0,
186
+ totalTokens: 0,
187
+ },
188
+ };
189
+ }
190
+ }
191
+ exports.AgentsCompiler = AgentsCompiler;
192
+ //# sourceMappingURL=agents-compiler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-compiler.js","sourceRoot":"","sources":["../../src/compiler/agents-compiler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
1
+ /**
2
+ * Base compiler interface and abstract class for target-specific compilation
3
+ */
4
+ import { ParsedRule } from '../schemas/rule';
5
+ import { Config } from '../schemas/config';
6
+ /**
7
+ * Compilation result
8
+ */
9
+ export interface CompilationResult {
10
+ /** Whether compilation succeeded */
11
+ success: boolean;
12
+ /** Output files generated */
13
+ outputs: OutputFile[];
14
+ /** Errors encountered */
15
+ errors: CompilationError[];
16
+ /** Warnings generated */
17
+ warnings: CompilationWarning[];
18
+ /** Total tokens in output */
19
+ totalTokens: number;
20
+ /** Compilation statistics */
21
+ stats: CompilationStats;
22
+ }
23
+ /**
24
+ * Output file generated by compilation
25
+ */
26
+ export interface OutputFile {
27
+ /** Output file path (relative to project root) */
28
+ path: string;
29
+ /** File content */
30
+ content: string;
31
+ /** Estimated tokens */
32
+ tokens: number;
33
+ }
34
+ /**
35
+ * Compilation error
36
+ */
37
+ export interface CompilationError {
38
+ /** Error type */
39
+ type: 'missing_file' | 'write_error' | 'parse_error' | 'config_error';
40
+ /** Error message */
41
+ message: string;
42
+ /** Related file path */
43
+ path?: string;
44
+ }
45
+ /**
46
+ * Compilation warning
47
+ */
48
+ export interface CompilationWarning {
49
+ /** Warning type */
50
+ type: 'missing_optional' | 'truncated' | 'empty_rules' | 'token_limit';
51
+ /** Warning message */
52
+ message: string;
53
+ /** Related file path */
54
+ path?: string;
55
+ }
56
+ /**
57
+ * Compilation statistics
58
+ */
59
+ export interface CompilationStats {
60
+ /** Number of rules processed */
61
+ rulesProcessed: number;
62
+ /** Number of rules included */
63
+ rulesIncluded: number;
64
+ /** Number of output files */
65
+ outputFiles: number;
66
+ /** Total tokens in output */
67
+ totalTokens: number;
68
+ /** Token budget (if applicable) */
69
+ tokenBudget?: number;
70
+ }
71
+ /**
72
+ * Compiler context with project information
73
+ */
74
+ export interface CompilerContext {
75
+ /** Project root directory */
76
+ projectRoot: string;
77
+ /** Configuration */
78
+ config: Config;
79
+ /** Parsed rules */
80
+ rules: ParsedRule[];
81
+ /**
82
+ * Whether compilers should write outputs to disk.
83
+ * When false, compilers only return `outputs` and the caller is responsible for writing.
84
+ * (Default: true)
85
+ */
86
+ writeToDisk?: boolean;
87
+ /** Project description content (from project.md) */
88
+ projectContent?: string;
89
+ /** Architecture content (from architecture.md) */
90
+ architectureContent?: string;
91
+ }
92
+ /**
93
+ * Abstract base compiler class
94
+ */
95
+ export declare abstract class BaseCompiler {
96
+ protected context: CompilerContext;
97
+ constructor(context: CompilerContext);
98
+ /**
99
+ * Compile rules to target format
100
+ */
101
+ abstract compile(): Promise<CompilationResult>;
102
+ /**
103
+ * Get the target name (e.g., 'cursor', 'claude', 'agents')
104
+ */
105
+ abstract get targetName(): string;
106
+ /**
107
+ * Load project.md content
108
+ */
109
+ protected loadProjectContent(): Promise<string | undefined>;
110
+ /**
111
+ * Load architecture.md content
112
+ */
113
+ protected loadArchitectureContent(): Promise<string | undefined>;
114
+ /**
115
+ * Ensure output directory exists
116
+ */
117
+ protected ensureDirectory(dirPath: string): void;
118
+ /**
119
+ * Write output file
120
+ */
121
+ protected writeOutput(filePath: string, content: string): void;
122
+ /**
123
+ * Generate Context Hygiene meta-rule content
124
+ */
125
+ protected generateMetaRule(): string;
126
+ /**
127
+ * Generate directory index for agent navigation
128
+ */
129
+ protected generateDirectoryIndex(rules: ParsedRule[]): string;
130
+ /**
131
+ * Get summary of rule (description + first paragraph)
132
+ */
133
+ protected getRuleSummary(rule: ParsedRule): string;
134
+ /**
135
+ * Generate SHA-256 checksum for content
136
+ */
137
+ protected generateChecksum(content: string): string;
138
+ /**
139
+ * Generate build timestamp in ISO format
140
+ */
141
+ protected generateTimestamp(): string;
142
+ /**
143
+ * Generate footer with checksum and timestamp
144
+ * The checksum is calculated on the content BEFORE appending this footer
145
+ */
146
+ protected generateFooter(content: string): string;
147
+ /**
148
+ * Add checksum and timestamp footer to content
149
+ */
150
+ protected addMetadata(content: string): string;
151
+ }
152
+ //# sourceMappingURL=base-compiler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-compiler.d.ts","sourceRoot":"","sources":["../../src/compiler/base-compiler.ts"],"names":[],"mappings":"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"}