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,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./loader"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB"}
@@ -0,0 +1,48 @@
1
+ import { z } from 'zod';
2
+ import { Config } from '../schemas/config';
3
+ /**
4
+ * Result of loading configuration
5
+ */
6
+ export interface ConfigLoadResult {
7
+ config: Config;
8
+ source: 'file' | 'defaults';
9
+ warnings: string[];
10
+ }
11
+ /**
12
+ * Error thrown when configuration is invalid
13
+ */
14
+ export declare class ConfigError extends Error {
15
+ readonly line?: number | undefined;
16
+ readonly details?: z.ZodError | undefined;
17
+ constructor(message: string, line?: number | undefined, details?: z.ZodError | undefined);
18
+ }
19
+ /**
20
+ * Load configuration from a .context directory
21
+ *
22
+ * @param projectDir - Project root directory containing .context/
23
+ * @returns Loaded configuration with metadata
24
+ * @throws ConfigError if config file exists but is invalid
25
+ */
26
+ export declare function loadConfig(projectDir: string): ConfigLoadResult;
27
+ /**
28
+ * Validate a configuration object
29
+ *
30
+ * @param config - Configuration object to validate
31
+ * @returns Validation result
32
+ */
33
+ export declare function validateConfig(config: unknown): {
34
+ valid: boolean;
35
+ errors: string[];
36
+ };
37
+ /**
38
+ * Get the default configuration
39
+ */
40
+ export declare function getDefaultConfig(): Config;
41
+ /**
42
+ * Merge partial configuration with defaults
43
+ *
44
+ * @param partial - Partial configuration to merge
45
+ * @returns Complete configuration with defaults filled in
46
+ */
47
+ export declare function mergeWithDefaults(partial: Partial<Config>): Config;
48
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAgC,MAAM,mBAAmB,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,UAAU,CAAC;IAC5B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;aAGlB,IAAI,CAAC,EAAE,MAAM;aACb,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ;gBAFpC,OAAO,EAAE,MAAM,EACC,IAAI,CAAC,EAAE,MAAM,YAAA,EACb,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,YAAA;CAKvC;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CA4E/D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAapF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAalE"}
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ConfigError = void 0;
37
+ exports.loadConfig = loadConfig;
38
+ exports.validateConfig = validateConfig;
39
+ exports.getDefaultConfig = getDefaultConfig;
40
+ exports.mergeWithDefaults = mergeWithDefaults;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const yaml = __importStar(require("yaml"));
44
+ const config_1 = require("../schemas/config");
45
+ /**
46
+ * Error thrown when configuration is invalid
47
+ */
48
+ class ConfigError extends Error {
49
+ line;
50
+ details;
51
+ constructor(message, line, details) {
52
+ super(message);
53
+ this.line = line;
54
+ this.details = details;
55
+ this.name = 'ConfigError';
56
+ }
57
+ }
58
+ exports.ConfigError = ConfigError;
59
+ /**
60
+ * Load configuration from a .context directory
61
+ *
62
+ * @param projectDir - Project root directory containing .context/
63
+ * @returns Loaded configuration with metadata
64
+ * @throws ConfigError if config file exists but is invalid
65
+ */
66
+ function loadConfig(projectDir) {
67
+ const configPath = path.join(projectDir, '.context', 'config.yaml');
68
+ const warnings = [];
69
+ // Check if config file exists
70
+ if (!fs.existsSync(configPath)) {
71
+ return {
72
+ config: config_1.DEFAULT_CONFIG,
73
+ source: 'defaults',
74
+ warnings: ['No config.yaml found, using defaults'],
75
+ };
76
+ }
77
+ // Read and parse YAML
78
+ let rawContent;
79
+ try {
80
+ rawContent = fs.readFileSync(configPath, 'utf-8');
81
+ }
82
+ catch (error) {
83
+ throw new ConfigError(`Failed to read config file: ${error.message}`);
84
+ }
85
+ // Handle empty file
86
+ if (!rawContent.trim()) {
87
+ return {
88
+ config: config_1.DEFAULT_CONFIG,
89
+ source: 'defaults',
90
+ warnings: ['config.yaml is empty, using defaults'],
91
+ };
92
+ }
93
+ // Parse YAML
94
+ let parsed;
95
+ try {
96
+ parsed = yaml.parse(rawContent);
97
+ }
98
+ catch (error) {
99
+ const yamlError = error;
100
+ const lineInfo = yamlError.linePos ? ` at line ${yamlError.linePos[0].line}` : '';
101
+ throw new ConfigError(`Invalid YAML syntax${lineInfo}: ${yamlError.message}`);
102
+ }
103
+ // Handle null/undefined parsed result
104
+ if (parsed === null || parsed === undefined) {
105
+ return {
106
+ config: config_1.DEFAULT_CONFIG,
107
+ source: 'defaults',
108
+ warnings: ['config.yaml parsed as empty, using defaults'],
109
+ };
110
+ }
111
+ // Check for unknown keys (warn but continue)
112
+ if (typeof parsed === 'object' && parsed !== null) {
113
+ const knownKeys = ['version', 'compile', 'conflict_resolution', 'migration'];
114
+ const unknownKeys = Object.keys(parsed).filter((key) => !knownKeys.includes(key));
115
+ if (unknownKeys.length > 0) {
116
+ warnings.push(`Unknown configuration keys will be ignored: ${unknownKeys.join(', ')}`);
117
+ }
118
+ }
119
+ // Validate against schema
120
+ const result = config_1.ConfigSchema.safeParse(parsed);
121
+ if (!result.success) {
122
+ const firstError = result.error.issues[0];
123
+ const path = firstError.path.join('.');
124
+ throw new ConfigError(`Configuration validation failed at '${path}': ${firstError.message}`, undefined, result.error);
125
+ }
126
+ return {
127
+ config: result.data,
128
+ source: 'file',
129
+ warnings,
130
+ };
131
+ }
132
+ /**
133
+ * Validate a configuration object
134
+ *
135
+ * @param config - Configuration object to validate
136
+ * @returns Validation result
137
+ */
138
+ function validateConfig(config) {
139
+ const result = config_1.ConfigSchema.safeParse(config);
140
+ if (result.success) {
141
+ return { valid: true, errors: [] };
142
+ }
143
+ const errors = result.error.issues.map((err) => {
144
+ const path = err.path.join('.');
145
+ return `${path}: ${err.message}`;
146
+ });
147
+ return { valid: false, errors };
148
+ }
149
+ /**
150
+ * Get the default configuration
151
+ */
152
+ function getDefaultConfig() {
153
+ return { ...config_1.DEFAULT_CONFIG };
154
+ }
155
+ /**
156
+ * Merge partial configuration with defaults
157
+ *
158
+ * @param partial - Partial configuration to merge
159
+ * @returns Complete configuration with defaults filled in
160
+ */
161
+ function mergeWithDefaults(partial) {
162
+ return config_1.ConfigSchema.parse({
163
+ ...config_1.DEFAULT_CONFIG,
164
+ ...partial,
165
+ compile: {
166
+ ...config_1.DEFAULT_CONFIG.compile,
167
+ ...partial.compile,
168
+ },
169
+ conflict_resolution: {
170
+ ...config_1.DEFAULT_CONFIG.conflict_resolution,
171
+ ...partial.conflict_resolution,
172
+ },
173
+ });
174
+ }
175
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Gitignore Manager
3
+ *
4
+ * Manages .gitignore entries for ctx build artifacts.
5
+ */
6
+ /**
7
+ * Gitignore management options
8
+ */
9
+ export interface GitignoreOptions {
10
+ /** Ignore build manifest (default: true) */
11
+ ignoreBuildManifest?: boolean;
12
+ /** Ignore build lock file (default: true) */
13
+ ignoreBuildLock?: boolean;
14
+ /** Ignore compiled outputs - only if user wants source-of-truth in .context/ */
15
+ ignoreCompiledOutputs?: boolean;
16
+ }
17
+ /**
18
+ * Gitignore Manager class
19
+ */
20
+ export declare class GitignoreManager {
21
+ private gitignorePath;
22
+ constructor(projectRoot: string);
23
+ /**
24
+ * Check if .gitignore exists
25
+ */
26
+ exists(): boolean;
27
+ /**
28
+ * Read current .gitignore content
29
+ */
30
+ read(): Promise<string>;
31
+ /**
32
+ * Check if ctx entries are already present
33
+ */
34
+ hasCtxEntries(): Promise<boolean>;
35
+ /**
36
+ * Get entries that need to be added
37
+ */
38
+ getMissingEntries(options?: GitignoreOptions): Promise<string[]>;
39
+ /**
40
+ * Add ctx entries to .gitignore
41
+ */
42
+ addCtxEntries(options?: GitignoreOptions): Promise<{
43
+ added: string[];
44
+ skipped: string[];
45
+ }>;
46
+ /**
47
+ * Remove ctx entries from .gitignore
48
+ */
49
+ removeCtxEntries(): Promise<string[]>;
50
+ /**
51
+ * Create .gitignore with ctx entries if it doesn't exist
52
+ */
53
+ createWithCtxEntries(options?: GitignoreOptions): Promise<boolean>;
54
+ /**
55
+ * Get recommended .gitignore entries as a string
56
+ */
57
+ static getRecommendedEntries(includeCompiledOutputs?: boolean): string;
58
+ }
59
+ //# sourceMappingURL=gitignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.d.ts","sourceRoot":"","sources":["../../src/git/gitignore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,6CAA6C;IAC7C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,gFAAgF;IAChF,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAsBD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,aAAa,CAAS;gBAElB,WAAW,EAAE,MAAM;IAI/B;;OAEG;IACH,MAAM,IAAI,OAAO;IAIjB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAO7B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAKvC;;OAEG;IACG,iBAAiB,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmC1E;;OAEG;IACG,aAAa,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAqFpG;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAuC3C;;OAEG;IACG,oBAAoB,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC;IAmC5E;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,sBAAsB,UAAQ,GAAG,MAAM;CAUrE"}
@@ -0,0 +1,268 @@
1
+ "use strict";
2
+ /**
3
+ * Gitignore Manager
4
+ *
5
+ * Manages .gitignore entries for ctx build artifacts.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.GitignoreManager = void 0;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ /**
45
+ * Default entries to add to .gitignore
46
+ */
47
+ const DEFAULT_IGNORE_ENTRIES = [
48
+ '# ctx build artifacts',
49
+ '.context/.build-manifest.json',
50
+ '.context/.build.lock',
51
+ ];
52
+ /**
53
+ * Optional entries for compiled outputs
54
+ */
55
+ const COMPILED_OUTPUT_ENTRIES = [
56
+ '# ctx compiled outputs (source of truth is in .context/)',
57
+ '# Uncomment if you want to ignore compiled files:',
58
+ '# CLAUDE.md',
59
+ '# AGENTS.md',
60
+ '# .cursor/rules/',
61
+ ];
62
+ /**
63
+ * Gitignore Manager class
64
+ */
65
+ class GitignoreManager {
66
+ gitignorePath;
67
+ constructor(projectRoot) {
68
+ this.gitignorePath = path.join(projectRoot, '.gitignore');
69
+ }
70
+ /**
71
+ * Check if .gitignore exists
72
+ */
73
+ exists() {
74
+ return fs.existsSync(this.gitignorePath);
75
+ }
76
+ /**
77
+ * Read current .gitignore content
78
+ */
79
+ async read() {
80
+ if (!this.exists()) {
81
+ return '';
82
+ }
83
+ return fs.promises.readFile(this.gitignorePath, 'utf-8');
84
+ }
85
+ /**
86
+ * Check if ctx entries are already present
87
+ */
88
+ async hasCtxEntries() {
89
+ const content = await this.read();
90
+ return content.includes('.context/.build-manifest.json');
91
+ }
92
+ /**
93
+ * Get entries that need to be added
94
+ */
95
+ async getMissingEntries(options = {}) {
96
+ const { ignoreBuildManifest = true, ignoreBuildLock = true, ignoreCompiledOutputs = false, } = options;
97
+ const content = await this.read();
98
+ const lines = content.split('\n');
99
+ const missing = [];
100
+ // Check default entries
101
+ if (ignoreBuildManifest && !lines.some((l) => l.includes('.build-manifest.json'))) {
102
+ missing.push('.context/.build-manifest.json');
103
+ }
104
+ if (ignoreBuildLock && !lines.some((l) => l.includes('.build.lock'))) {
105
+ missing.push('.context/.build.lock');
106
+ }
107
+ // Check compiled output entries if requested
108
+ if (ignoreCompiledOutputs) {
109
+ if (!lines.some((l) => l.trim() === 'CLAUDE.md')) {
110
+ missing.push('CLAUDE.md');
111
+ }
112
+ if (!lines.some((l) => l.trim() === 'AGENTS.md')) {
113
+ missing.push('AGENTS.md');
114
+ }
115
+ if (!lines.some((l) => l.includes('.cursor/rules'))) {
116
+ missing.push('.cursor/rules/');
117
+ }
118
+ }
119
+ return missing;
120
+ }
121
+ /**
122
+ * Add ctx entries to .gitignore
123
+ */
124
+ async addCtxEntries(options = {}) {
125
+ const { ignoreBuildManifest = true, ignoreBuildLock = true, ignoreCompiledOutputs = false, } = options;
126
+ const added = [];
127
+ const skipped = [];
128
+ let content = await this.read();
129
+ const lines = content.split('\n');
130
+ // Build entries to add
131
+ const entriesToAdd = [];
132
+ // Add header if no ctx entries exist
133
+ if (!content.includes('# ctx')) {
134
+ entriesToAdd.push('');
135
+ entriesToAdd.push('# ctx build artifacts');
136
+ }
137
+ // Add build manifest
138
+ if (ignoreBuildManifest) {
139
+ if (!lines.some((l) => l.includes('.build-manifest.json'))) {
140
+ entriesToAdd.push('.context/.build-manifest.json');
141
+ added.push('.context/.build-manifest.json');
142
+ }
143
+ else {
144
+ skipped.push('.context/.build-manifest.json');
145
+ }
146
+ }
147
+ // Add build lock
148
+ if (ignoreBuildLock) {
149
+ if (!lines.some((l) => l.includes('.build.lock'))) {
150
+ entriesToAdd.push('.context/.build.lock');
151
+ added.push('.context/.build.lock');
152
+ }
153
+ else {
154
+ skipped.push('.context/.build.lock');
155
+ }
156
+ }
157
+ // Add compiled outputs if requested
158
+ if (ignoreCompiledOutputs) {
159
+ if (!content.includes('# ctx compiled outputs')) {
160
+ entriesToAdd.push('');
161
+ entriesToAdd.push('# ctx compiled outputs');
162
+ }
163
+ if (!lines.some((l) => l.trim() === 'CLAUDE.md')) {
164
+ entriesToAdd.push('CLAUDE.md');
165
+ added.push('CLAUDE.md');
166
+ }
167
+ else {
168
+ skipped.push('CLAUDE.md');
169
+ }
170
+ if (!lines.some((l) => l.trim() === 'AGENTS.md')) {
171
+ entriesToAdd.push('AGENTS.md');
172
+ added.push('AGENTS.md');
173
+ }
174
+ else {
175
+ skipped.push('AGENTS.md');
176
+ }
177
+ if (!lines.some((l) => l.includes('.cursor/rules'))) {
178
+ entriesToAdd.push('.cursor/rules/');
179
+ added.push('.cursor/rules/');
180
+ }
181
+ else {
182
+ skipped.push('.cursor/rules/');
183
+ }
184
+ }
185
+ // Write updates if there are entries to add
186
+ if (entriesToAdd.length > 0) {
187
+ // Ensure content ends with newline
188
+ if (content.length > 0 && !content.endsWith('\n')) {
189
+ content += '\n';
190
+ }
191
+ content += entriesToAdd.join('\n') + '\n';
192
+ await fs.promises.writeFile(this.gitignorePath, content, 'utf-8');
193
+ }
194
+ return { added, skipped };
195
+ }
196
+ /**
197
+ * Remove ctx entries from .gitignore
198
+ */
199
+ async removeCtxEntries() {
200
+ if (!this.exists()) {
201
+ return [];
202
+ }
203
+ const content = await this.read();
204
+ const lines = content.split('\n');
205
+ const removed = [];
206
+ const filteredLines = lines.filter((line) => {
207
+ const trimmed = line.trim();
208
+ // Remove ctx comments
209
+ if (trimmed.startsWith('# ctx')) {
210
+ return false;
211
+ }
212
+ // Remove ctx-specific entries
213
+ if (trimmed === '.context/.build-manifest.json' ||
214
+ trimmed === '.context/.build.lock' ||
215
+ trimmed === 'CLAUDE.md' ||
216
+ trimmed === 'AGENTS.md' ||
217
+ trimmed === '.cursor/rules/' ||
218
+ trimmed === '.cursor/rules') {
219
+ removed.push(trimmed);
220
+ return false;
221
+ }
222
+ return true;
223
+ });
224
+ // Write back
225
+ await fs.promises.writeFile(this.gitignorePath, filteredLines.join('\n'), 'utf-8');
226
+ return removed;
227
+ }
228
+ /**
229
+ * Create .gitignore with ctx entries if it doesn't exist
230
+ */
231
+ async createWithCtxEntries(options = {}) {
232
+ if (this.exists()) {
233
+ return false;
234
+ }
235
+ const { ignoreBuildManifest = true, ignoreBuildLock = true, ignoreCompiledOutputs = false, } = options;
236
+ const lines = [];
237
+ lines.push('# ctx build artifacts');
238
+ if (ignoreBuildManifest) {
239
+ lines.push('.context/.build-manifest.json');
240
+ }
241
+ if (ignoreBuildLock) {
242
+ lines.push('.context/.build.lock');
243
+ }
244
+ if (ignoreCompiledOutputs) {
245
+ lines.push('');
246
+ lines.push('# ctx compiled outputs');
247
+ lines.push('CLAUDE.md');
248
+ lines.push('AGENTS.md');
249
+ lines.push('.cursor/rules/');
250
+ }
251
+ lines.push('');
252
+ await fs.promises.writeFile(this.gitignorePath, lines.join('\n'), 'utf-8');
253
+ return true;
254
+ }
255
+ /**
256
+ * Get recommended .gitignore entries as a string
257
+ */
258
+ static getRecommendedEntries(includeCompiledOutputs = false) {
259
+ const lines = [...DEFAULT_IGNORE_ENTRIES];
260
+ if (includeCompiledOutputs) {
261
+ lines.push('');
262
+ lines.push(...COMPILED_OUTPUT_ENTRIES);
263
+ }
264
+ return lines.join('\n');
265
+ }
266
+ }
267
+ exports.GitignoreManager = GitignoreManager;
268
+ //# sourceMappingURL=gitignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../src/git/gitignore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Git Hooks Generator
3
+ *
4
+ * Generates pre-commit hook scripts for ctx integration.
5
+ */
6
+ /**
7
+ * Pre-commit hook options
8
+ */
9
+ export interface PreCommitOptions {
10
+ /** Use incremental build (default: true) */
11
+ incremental?: boolean;
12
+ /** Auto-stage compiled outputs (default: true) */
13
+ autoStage?: boolean;
14
+ /** Skip validation (not recommended) */
15
+ skipValidation?: boolean;
16
+ /** Verbose output */
17
+ verbose?: boolean;
18
+ /** Quiet output */
19
+ quiet?: boolean;
20
+ }
21
+ /**
22
+ * Generate pre-commit hook script content
23
+ */
24
+ export declare function generatePreCommitHook(options?: PreCommitOptions): string;
25
+ /**
26
+ * Generate a minimal pre-commit hook (without husky.sh sourcing)
27
+ * For use in non-husky setups
28
+ */
29
+ export declare function generateStandalonePreCommitHook(options?: PreCommitOptions): string;
30
+ /**
31
+ * Get the list of files that will be auto-staged
32
+ */
33
+ export declare function getAutoStagedFiles(): string[];
34
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/git/hooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kDAAkD;IAClD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wCAAwC;IACxC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,qBAAqB;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mBAAmB;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,GAAE,gBAAqB,GAAG,MAAM,CA4E5E;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,GAAE,gBAAqB,GAAG,MAAM,CA2CtF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAE7C"}