@codeledger/cli 0.6.7 → 0.6.9

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 (175) hide show
  1. package/dist/architecture-graph/dependency-scanner.d.ts +16 -0
  2. package/dist/architecture-graph/dependency-scanner.d.ts.map +1 -0
  3. package/dist/architecture-graph/dependency-scanner.js +96 -0
  4. package/dist/architecture-graph/dependency-scanner.js.map +1 -0
  5. package/dist/architecture-graph/graph-builder.d.ts +70 -0
  6. package/dist/architecture-graph/graph-builder.d.ts.map +1 -0
  7. package/dist/architecture-graph/graph-builder.js +231 -0
  8. package/dist/architecture-graph/graph-builder.js.map +1 -0
  9. package/dist/architecture-graph/index.d.ts +4 -0
  10. package/dist/architecture-graph/index.d.ts.map +1 -0
  11. package/dist/architecture-graph/index.js +7 -0
  12. package/dist/architecture-graph/index.js.map +1 -0
  13. package/dist/architecture-graph/service-scanner.d.ts +22 -0
  14. package/dist/architecture-graph/service-scanner.d.ts.map +1 -0
  15. package/dist/architecture-graph/service-scanner.js +181 -0
  16. package/dist/architecture-graph/service-scanner.js.map +1 -0
  17. package/dist/commands/activate.d.ts.map +1 -1
  18. package/dist/commands/activate.js +16 -1
  19. package/dist/commands/activate.js.map +1 -1
  20. package/dist/commands/audit-export.d.ts +8 -0
  21. package/dist/commands/audit-export.d.ts.map +1 -0
  22. package/dist/commands/audit-export.js +190 -0
  23. package/dist/commands/audit-export.js.map +1 -0
  24. package/dist/commands/commit-msg.d.ts +58 -0
  25. package/dist/commands/commit-msg.d.ts.map +1 -0
  26. package/dist/commands/commit-msg.js +461 -0
  27. package/dist/commands/commit-msg.js.map +1 -0
  28. package/dist/commands/fix.d.ts +7 -0
  29. package/dist/commands/fix.d.ts.map +1 -0
  30. package/dist/commands/fix.js +107 -0
  31. package/dist/commands/fix.js.map +1 -0
  32. package/dist/commands/graph.d.ts +8 -0
  33. package/dist/commands/graph.d.ts.map +1 -0
  34. package/dist/commands/graph.js +29 -0
  35. package/dist/commands/graph.js.map +1 -0
  36. package/dist/commands/init.d.ts.map +1 -1
  37. package/dist/commands/init.js +14 -0
  38. package/dist/commands/init.js.map +1 -1
  39. package/dist/commands/intent.d.ts +3 -1
  40. package/dist/commands/intent.d.ts.map +1 -1
  41. package/dist/commands/intent.js +68 -2
  42. package/dist/commands/intent.js.map +1 -1
  43. package/dist/commands/learn.d.ts +8 -0
  44. package/dist/commands/learn.d.ts.map +1 -0
  45. package/dist/commands/learn.js +33 -0
  46. package/dist/commands/learn.js.map +1 -0
  47. package/dist/commands/pack.d.ts +12 -0
  48. package/dist/commands/pack.d.ts.map +1 -0
  49. package/dist/commands/pack.js +75 -0
  50. package/dist/commands/pack.js.map +1 -0
  51. package/dist/commands/pr-summary.d.ts +59 -0
  52. package/dist/commands/pr-summary.d.ts.map +1 -0
  53. package/dist/commands/pr-summary.js +524 -0
  54. package/dist/commands/pr-summary.js.map +1 -0
  55. package/dist/commands/serve.d.ts +13 -0
  56. package/dist/commands/serve.d.ts.map +1 -0
  57. package/dist/commands/serve.js +179 -0
  58. package/dist/commands/serve.js.map +1 -0
  59. package/dist/commands/session-cleanup.js +1 -0
  60. package/dist/commands/session-cleanup.js.map +1 -1
  61. package/dist/commands/session-summary.d.ts.map +1 -1
  62. package/dist/commands/session-summary.js +135 -3
  63. package/dist/commands/session-summary.js.map +1 -1
  64. package/dist/commands/setup-ci.d.ts +6 -4
  65. package/dist/commands/setup-ci.d.ts.map +1 -1
  66. package/dist/commands/setup-ci.js +228 -23
  67. package/dist/commands/setup-ci.js.map +1 -1
  68. package/dist/commands/verify.d.ts.map +1 -1
  69. package/dist/commands/verify.js +35 -3
  70. package/dist/commands/verify.js.map +1 -1
  71. package/dist/index.d.ts.map +1 -1
  72. package/dist/index.js +127 -4
  73. package/dist/index.js.map +1 -1
  74. package/dist/intent/extractor.d.ts +15 -0
  75. package/dist/intent/extractor.d.ts.map +1 -0
  76. package/dist/intent/extractor.js +149 -0
  77. package/dist/intent/extractor.js.map +1 -0
  78. package/dist/intent/fetcher.d.ts +33 -0
  79. package/dist/intent/fetcher.d.ts.map +1 -0
  80. package/dist/intent/fetcher.js +364 -0
  81. package/dist/intent/fetcher.js.map +1 -0
  82. package/dist/intent/loader.d.ts +26 -0
  83. package/dist/intent/loader.d.ts.map +1 -0
  84. package/dist/intent/loader.js +80 -0
  85. package/dist/intent/loader.js.map +1 -0
  86. package/dist/intent/types.d.ts +33 -0
  87. package/dist/intent/types.d.ts.map +1 -0
  88. package/dist/intent/types.js +9 -0
  89. package/dist/intent/types.js.map +1 -0
  90. package/dist/project-config.d.ts +38 -0
  91. package/dist/project-config.d.ts.map +1 -0
  92. package/dist/project-config.js +206 -0
  93. package/dist/project-config.js.map +1 -0
  94. package/dist/review-intelligence/detectors/architecture-graph.d.ts +18 -0
  95. package/dist/review-intelligence/detectors/architecture-graph.d.ts.map +1 -0
  96. package/dist/review-intelligence/detectors/architecture-graph.js +73 -0
  97. package/dist/review-intelligence/detectors/architecture-graph.js.map +1 -0
  98. package/dist/review-intelligence/detectors/cjs-named-import.d.ts +13 -0
  99. package/dist/review-intelligence/detectors/cjs-named-import.d.ts.map +1 -0
  100. package/dist/review-intelligence/detectors/cjs-named-import.js +134 -0
  101. package/dist/review-intelligence/detectors/cjs-named-import.js.map +1 -0
  102. package/dist/review-intelligence/detectors/exact-count-assertion.d.ts +17 -0
  103. package/dist/review-intelligence/detectors/exact-count-assertion.d.ts.map +1 -0
  104. package/dist/review-intelligence/detectors/exact-count-assertion.js +93 -0
  105. package/dist/review-intelligence/detectors/exact-count-assertion.js.map +1 -0
  106. package/dist/review-intelligence/detectors/exports-map-missing.d.ts +14 -0
  107. package/dist/review-intelligence/detectors/exports-map-missing.d.ts.map +1 -0
  108. package/dist/review-intelligence/detectors/exports-map-missing.js +131 -0
  109. package/dist/review-intelligence/detectors/exports-map-missing.js.map +1 -0
  110. package/dist/review-intelligence/detectors/fixture-keyword-drift.d.ts +12 -0
  111. package/dist/review-intelligence/detectors/fixture-keyword-drift.d.ts.map +1 -0
  112. package/dist/review-intelligence/detectors/fixture-keyword-drift.js +82 -0
  113. package/dist/review-intelligence/detectors/fixture-keyword-drift.js.map +1 -0
  114. package/dist/review-intelligence/detectors/optional-infra-crash.d.ts +12 -0
  115. package/dist/review-intelligence/detectors/optional-infra-crash.d.ts.map +1 -0
  116. package/dist/review-intelligence/detectors/optional-infra-crash.js +97 -0
  117. package/dist/review-intelligence/detectors/optional-infra-crash.js.map +1 -0
  118. package/dist/review-intelligence/detectors/pack-rules.d.ts +16 -0
  119. package/dist/review-intelligence/detectors/pack-rules.d.ts.map +1 -0
  120. package/dist/review-intelligence/detectors/pack-rules.js +107 -0
  121. package/dist/review-intelligence/detectors/pack-rules.js.map +1 -0
  122. package/dist/review-intelligence/detectors/undeclared-dependency.d.ts +11 -0
  123. package/dist/review-intelligence/detectors/undeclared-dependency.d.ts.map +1 -0
  124. package/dist/review-intelligence/detectors/undeclared-dependency.js +100 -0
  125. package/dist/review-intelligence/detectors/undeclared-dependency.js.map +1 -0
  126. package/dist/review-intelligence/engine/ast-parser.d.ts +90 -0
  127. package/dist/review-intelligence/engine/ast-parser.d.ts.map +1 -0
  128. package/dist/review-intelligence/engine/ast-parser.js +266 -0
  129. package/dist/review-intelligence/engine/ast-parser.js.map +1 -0
  130. package/dist/review-intelligence/engine/dataflow.d.ts +34 -0
  131. package/dist/review-intelligence/engine/dataflow.d.ts.map +1 -0
  132. package/dist/review-intelligence/engine/dataflow.js +115 -0
  133. package/dist/review-intelligence/engine/dataflow.js.map +1 -0
  134. package/dist/review-intelligence/engine/index.d.ts +7 -0
  135. package/dist/review-intelligence/engine/index.d.ts.map +1 -0
  136. package/dist/review-intelligence/engine/index.js +7 -0
  137. package/dist/review-intelligence/engine/index.js.map +1 -0
  138. package/dist/review-intelligence/engine/symbol-resolver.d.ts +34 -0
  139. package/dist/review-intelligence/engine/symbol-resolver.d.ts.map +1 -0
  140. package/dist/review-intelligence/engine/symbol-resolver.js +106 -0
  141. package/dist/review-intelligence/engine/symbol-resolver.js.map +1 -0
  142. package/dist/review-intelligence/fixes/index.d.ts +54 -0
  143. package/dist/review-intelligence/fixes/index.d.ts.map +1 -0
  144. package/dist/review-intelligence/fixes/index.js +346 -0
  145. package/dist/review-intelligence/fixes/index.js.map +1 -0
  146. package/dist/review-intelligence/index.d.ts +4 -1
  147. package/dist/review-intelligence/index.d.ts.map +1 -1
  148. package/dist/review-intelligence/index.js +22 -3
  149. package/dist/review-intelligence/index.js.map +1 -1
  150. package/dist/review-intelligence/invariants.d.ts +15 -0
  151. package/dist/review-intelligence/invariants.d.ts.map +1 -1
  152. package/dist/review-intelligence/invariants.js +48 -4
  153. package/dist/review-intelligence/invariants.js.map +1 -1
  154. package/dist/review-intelligence/learning/index.d.ts +39 -0
  155. package/dist/review-intelligence/learning/index.d.ts.map +1 -0
  156. package/dist/review-intelligence/learning/index.js +265 -0
  157. package/dist/review-intelligence/learning/index.js.map +1 -0
  158. package/dist/review-intelligence/packs/index.d.ts +69 -0
  159. package/dist/review-intelligence/packs/index.d.ts.map +1 -0
  160. package/dist/review-intelligence/packs/index.js +168 -0
  161. package/dist/review-intelligence/packs/index.js.map +1 -0
  162. package/dist/review-intelligence/repair-guidance.d.ts.map +1 -1
  163. package/dist/review-intelligence/repair-guidance.js +46 -0
  164. package/dist/review-intelligence/repair-guidance.js.map +1 -1
  165. package/dist/review-intelligence/types.d.ts +18 -9
  166. package/dist/review-intelligence/types.d.ts.map +1 -1
  167. package/dist/review-intelligence/types.js +9 -1
  168. package/dist/review-intelligence/types.js.map +1 -1
  169. package/dist/templates/claude-md.d.ts.map +1 -1
  170. package/dist/templates/claude-md.js +23 -128
  171. package/dist/templates/claude-md.js.map +1 -1
  172. package/dist/templates/hooks.d.ts.map +1 -1
  173. package/dist/templates/hooks.js +39 -0
  174. package/dist/templates/hooks.js.map +1 -1
  175. package/package.json +9 -9
@@ -0,0 +1,265 @@
1
+ // ─── Repository Convention Learning ─────────────────────────────────────────
2
+ //
3
+ // Analyzes repository usage patterns to discover canonical helpers,
4
+ // wrappers, and conventions. Generates invariant pack suggestions.
5
+ import { readFileSync, readdirSync, existsSync, statSync } from 'node:fs';
6
+ import { join, extname, relative } from 'node:path';
7
+ const CONVENTION_PATTERNS = [
8
+ {
9
+ category: 'outbound_http',
10
+ callsitePattern: /\b(?:fetch|axios|http\.request|https\.request|got|needle|superagent|request)\s*[.(]/g,
11
+ wrapperPatterns: [
12
+ /\b(\w*(?:safe|wrapped|internal|platform|sanctioned)\w*(?:Fetch|Http|Request|Api|Call))\s*\(/gi,
13
+ /\b(\w*(?:fetch|http|request|api|call)\w*(?:Safe|Wrapped|Internal|Platform))\s*\(/gi,
14
+ ],
15
+ ruleDescription: 'Outbound HTTP calls must use sanctioned wrapper',
16
+ },
17
+ {
18
+ category: 'cache_key',
19
+ callsitePattern: /\b(?:redis|cache|client)\s*\.\s*(?:get|set|del|hget|hset|expire)\s*\(/g,
20
+ wrapperPatterns: [
21
+ /\b(build\w*(?:Cache|Redis|Tenant)\w*Key)\s*\(/gi,
22
+ /\b(\w*(?:cache|redis)Key(?:Builder|Factory|Helper)?)\s*\(/gi,
23
+ ],
24
+ ruleDescription: 'Cache keys must use shared cache key builder',
25
+ },
26
+ {
27
+ category: 'error_response',
28
+ callsitePattern: /\b(?:reply|res|response)\s*\.\s*(?:status|code)\s*\(\s*(?:4|5)\d{2}\s*\)/g,
29
+ wrapperPatterns: [
30
+ /\b(send(?:Invalid|Bad|NotFound|Unauthorized|Forbidden|Error)\w*)\s*\(/gi,
31
+ /\b(\w*(?:error|err)(?:Response|Reply|Handler|Helper))\s*\(/gi,
32
+ ],
33
+ ruleDescription: 'Error responses must use shared error helper',
34
+ },
35
+ {
36
+ category: 'database_query',
37
+ callsitePattern: /\b(?:db|knex|prisma|sequelize|pool|client)\s*\.\s*(?:query|raw|execute|\$queryRaw)\s*[(`]/g,
38
+ wrapperPatterns: [
39
+ /\b(\w*(?:safe|wrapped|platform)\w*(?:Query|Exec|Db))\s*\(/gi,
40
+ ],
41
+ ruleDescription: 'Database queries should use sanctioned query helpers',
42
+ },
43
+ {
44
+ category: 'logging',
45
+ callsitePattern: /\bconsole\s*\.\s*(?:log|warn|error|info|debug)\s*\(/g,
46
+ wrapperPatterns: [
47
+ /\b(logger|log)\s*\.\s*(?:info|warn|error|debug)\s*\(/gi,
48
+ /\b(\w*(?:Logger|Logging|Log)\w*)\s*\.\s*\w+\s*\(/gi,
49
+ ],
50
+ ruleDescription: 'Use structured logger instead of console',
51
+ },
52
+ ];
53
+ /**
54
+ * Scan the repository and discover conventions.
55
+ */
56
+ export function learnConventions(cwd) {
57
+ const startTime = Date.now();
58
+ const files = collectSourceFiles(cwd);
59
+ const fileContents = new Map();
60
+ for (const file of files) {
61
+ try {
62
+ fileContents.set(file, readFileSync(join(cwd, file), 'utf-8'));
63
+ }
64
+ catch {
65
+ // Skip unreadable files
66
+ }
67
+ }
68
+ const conventions = [];
69
+ for (const pattern of CONVENTION_PATTERNS) {
70
+ const result = analyzeConventionPattern(cwd, fileContents, pattern);
71
+ if (result) {
72
+ conventions.push(result);
73
+ }
74
+ }
75
+ // Sort by percentage descending
76
+ conventions.sort((a, b) => b.percentage - a.percentage);
77
+ // Generate pack suggestion if we found conventions
78
+ let suggestedPack;
79
+ const significantConventions = conventions.filter((c) => c.percentage >= 60);
80
+ if (significantConventions.length > 0) {
81
+ suggestedPack = generatePackFromConventions(significantConventions);
82
+ }
83
+ return {
84
+ conventions,
85
+ filesScanned: files.length,
86
+ durationMs: Date.now() - startTime,
87
+ suggestedPack,
88
+ };
89
+ }
90
+ /**
91
+ * Analyze a single convention pattern across all files.
92
+ */
93
+ function analyzeConventionPattern(_cwd, fileContents, pattern) {
94
+ // Count total raw callsites
95
+ let totalCallsites = 0;
96
+ const wrapperUsage = new Map();
97
+ for (const [filePath, content] of fileContents) {
98
+ // Skip test files for convention mining
99
+ if (isTestFile(filePath))
100
+ continue;
101
+ // Skip definition files (helpers directory)
102
+ if (isHelperFile(filePath))
103
+ continue;
104
+ // Count raw callsites
105
+ const rawMatches = content.match(pattern.callsitePattern);
106
+ if (rawMatches) {
107
+ totalCallsites += rawMatches.length;
108
+ }
109
+ // Find wrapper usages
110
+ for (const wrapperPattern of pattern.wrapperPatterns) {
111
+ // Reset lastIndex since we're reusing the regex
112
+ wrapperPattern.lastIndex = 0;
113
+ let match;
114
+ while ((match = wrapperPattern.exec(content)) !== null) {
115
+ const wrapperName = match[1];
116
+ const existing = wrapperUsage.get(wrapperName);
117
+ if (existing) {
118
+ existing.count++;
119
+ if (!existing.files.includes(filePath)) {
120
+ existing.files.push(filePath);
121
+ }
122
+ }
123
+ else {
124
+ wrapperUsage.set(wrapperName, { count: 1, files: [filePath] });
125
+ }
126
+ }
127
+ }
128
+ }
129
+ if (totalCallsites === 0)
130
+ return undefined;
131
+ // Find the most common wrapper
132
+ let bestWrapper;
133
+ let bestCount = 0;
134
+ let bestFiles = [];
135
+ for (const [name, info] of wrapperUsage) {
136
+ if (info.count > bestCount) {
137
+ bestWrapper = name;
138
+ bestCount = info.count;
139
+ bestFiles = info.files;
140
+ }
141
+ }
142
+ if (!bestWrapper || bestCount < 2)
143
+ return undefined;
144
+ const percentage = Math.round((bestCount / totalCallsites) * 100);
145
+ return {
146
+ category: pattern.category,
147
+ name: bestWrapper,
148
+ usageCount: bestCount,
149
+ totalInCategory: totalCallsites,
150
+ percentage,
151
+ definedIn: bestFiles.slice(0, 3),
152
+ sampleUsages: bestFiles.slice(0, 5),
153
+ };
154
+ }
155
+ /**
156
+ * Generate an invariant pack from discovered conventions.
157
+ */
158
+ function generatePackFromConventions(conventions) {
159
+ const rules = [];
160
+ for (const conv of conventions) {
161
+ const matchingPattern = CONVENTION_PATTERNS.find((p) => p.category === conv.category);
162
+ rules.push({
163
+ rule_id: `LEARNED-${conv.category.toUpperCase().replace(/_/g, '-')}-001`,
164
+ description: `${matchingPattern?.ruleDescription ?? conv.category}: use ${conv.name} (${conv.percentage}% adoption)`,
165
+ kind: 'required_wrapper',
166
+ helper: conv.name,
167
+ severity: conv.percentage >= 80 ? 'P1' : 'P2',
168
+ });
169
+ }
170
+ return {
171
+ name: 'learned-conventions',
172
+ description: 'Auto-generated invariant pack from repository convention analysis',
173
+ version: '1.0.0',
174
+ enabled: false,
175
+ rules,
176
+ };
177
+ }
178
+ /**
179
+ * Format learn results for human-readable console output.
180
+ */
181
+ export function formatLearnOutput(result) {
182
+ const lines = [];
183
+ lines.push('');
184
+ lines.push('Detected Repository Conventions');
185
+ lines.push('───────────────────────────────');
186
+ lines.push(` Files scanned: ${result.filesScanned}`);
187
+ lines.push(` Duration: ${result.durationMs}ms`);
188
+ lines.push('');
189
+ if (result.conventions.length === 0) {
190
+ lines.push(' No strong conventions detected.');
191
+ lines.push(' Tip: Conventions are detected when a wrapper/helper is used in >50% of callsites.');
192
+ lines.push('');
193
+ return lines.join('\n');
194
+ }
195
+ for (const conv of result.conventions) {
196
+ const bar = '█'.repeat(Math.round(conv.percentage / 5)) + '░'.repeat(20 - Math.round(conv.percentage / 5));
197
+ lines.push(` ${conv.name}`);
198
+ lines.push(` ${bar} ${conv.percentage}% of ${conv.category.replace(/_/g, ' ')} calls`);
199
+ lines.push(` (${conv.usageCount}/${conv.totalInCategory} callsites)`);
200
+ lines.push('');
201
+ }
202
+ if (result.suggestedPack) {
203
+ lines.push(' Suggested Invariant Pack');
204
+ lines.push(' ───────────────────────');
205
+ lines.push(` Name: ${result.suggestedPack.name}`);
206
+ lines.push(` Rules: ${result.suggestedPack.rules.length}`);
207
+ for (const rule of result.suggestedPack.rules) {
208
+ lines.push(` [${rule.severity}] ${rule.description}`);
209
+ }
210
+ lines.push('');
211
+ lines.push(' Run `codeledger pack enable learned-conventions` to activate.');
212
+ }
213
+ lines.push('');
214
+ return lines.join('\n');
215
+ }
216
+ // ─── File Collection ─────────────────────────────────────────────────────────
217
+ const MAX_FILES = 500;
218
+ const ANALYZABLE_EXTS = new Set(['.ts', '.tsx', '.js', '.jsx', '.mts', '.mjs']);
219
+ function collectSourceFiles(cwd) {
220
+ const files = [];
221
+ const scanDirs = ['src', 'lib', 'packages'];
222
+ for (const scanDir of scanDirs) {
223
+ const fullDir = join(cwd, scanDir);
224
+ if (existsSync(fullDir)) {
225
+ collectFilesRecursive(fullDir, cwd, files);
226
+ }
227
+ }
228
+ return files.slice(0, MAX_FILES);
229
+ }
230
+ function collectFilesRecursive(dir, cwd, files) {
231
+ if (files.length >= MAX_FILES)
232
+ return;
233
+ try {
234
+ const entries = readdirSync(dir);
235
+ for (const entry of entries) {
236
+ if (files.length >= MAX_FILES)
237
+ return;
238
+ if (entry.startsWith('.') || entry === 'node_modules' || entry === 'dist' || entry === 'build')
239
+ continue;
240
+ const fullPath = join(dir, entry);
241
+ try {
242
+ const stat = statSync(fullPath);
243
+ if (stat.isDirectory()) {
244
+ collectFilesRecursive(fullPath, cwd, files);
245
+ }
246
+ else if (ANALYZABLE_EXTS.has(extname(entry))) {
247
+ files.push(relative(cwd, fullPath));
248
+ }
249
+ }
250
+ catch {
251
+ // Skip inaccessible
252
+ }
253
+ }
254
+ }
255
+ catch {
256
+ // Skip unreadable directories
257
+ }
258
+ }
259
+ function isTestFile(filePath) {
260
+ return /\.(?:test|spec|e2e)\./.test(filePath) || /[/\\](?:__tests__|test|tests)[/\\]/.test(filePath);
261
+ }
262
+ function isHelperFile(filePath) {
263
+ return /[/\\](?:utils|helpers|lib|shared|common)[/\\]/.test(filePath);
264
+ }
265
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/review-intelligence/learning/index.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,EAAE;AACF,oEAAoE;AACpE,mEAAmE;AAEnE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAoDpD,MAAM,mBAAmB,GAAwB;IAC/C;QACE,QAAQ,EAAE,eAAe;QACzB,eAAe,EAAE,sFAAsF;QACvG,eAAe,EAAE;YACf,+FAA+F;YAC/F,oFAAoF;SACrF;QACD,eAAe,EAAE,iDAAiD;KACnE;IACD;QACE,QAAQ,EAAE,WAAW;QACrB,eAAe,EAAE,wEAAwE;QACzF,eAAe,EAAE;YACf,iDAAiD;YACjD,6DAA6D;SAC9D;QACD,eAAe,EAAE,8CAA8C;KAChE;IACD;QACE,QAAQ,EAAE,gBAAgB;QAC1B,eAAe,EAAE,2EAA2E;QAC5F,eAAe,EAAE;YACf,yEAAyE;YACzE,8DAA8D;SAC/D;QACD,eAAe,EAAE,8CAA8C;KAChE;IACD;QACE,QAAQ,EAAE,gBAAgB;QAC1B,eAAe,EAAE,4FAA4F;QAC7G,eAAe,EAAE;YACf,6DAA6D;SAC9D;QACD,eAAe,EAAE,sDAAsD;KACxE;IACD;QACE,QAAQ,EAAE,SAAS;QACnB,eAAe,EAAE,sDAAsD;QACvE,eAAe,EAAE;YACf,wDAAwD;YACxD,oDAAoD;SACrD;QACD,eAAe,EAAE,0CAA0C;KAC5D;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE/C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAA2B,EAAE,CAAC;IAE/C,KAAK,MAAM,OAAO,IAAI,mBAAmB,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,wBAAwB,CAAC,GAAG,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;QACpE,IAAI,MAAM,EAAE,CAAC;YACX,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,gCAAgC;IAChC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IAExD,mDAAmD;IACnD,IAAI,aAAwC,CAAC;IAC7C,MAAM,sBAAsB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAC7E,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtC,aAAa,GAAG,2BAA2B,CAAC,sBAAsB,CAAC,CAAC;IACtE,CAAC;IAED,OAAO;QACL,WAAW;QACX,YAAY,EAAE,KAAK,CAAC,MAAM;QAC1B,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;QAClC,aAAa;KACd,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,wBAAwB,CAC/B,IAAY,EACZ,YAAiC,EACjC,OAA0B;IAE1B,4BAA4B;IAC5B,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,MAAM,YAAY,GAAG,IAAI,GAAG,EAA8C,CAAC;IAE3E,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,YAAY,EAAE,CAAC;QAC/C,wCAAwC;QACxC,IAAI,UAAU,CAAC,QAAQ,CAAC;YAAE,SAAS;QACnC,4CAA4C;QAC5C,IAAI,YAAY,CAAC,QAAQ,CAAC;YAAE,SAAS;QAErC,sBAAsB;QACtB,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QAC1D,IAAI,UAAU,EAAE,CAAC;YACf,cAAc,IAAI,UAAU,CAAC,MAAM,CAAC;QACtC,CAAC;QAED,sBAAsB;QACtB,KAAK,MAAM,cAAc,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YACrD,gDAAgD;YAChD,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC;YAC7B,IAAI,KAA6B,CAAC;YAClC,OAAO,CAAC,KAAK,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACvD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;gBAC9B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;gBAC/C,IAAI,QAAQ,EAAE,CAAC;oBACb,QAAQ,CAAC,KAAK,EAAE,CAAC;oBACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;wBACvC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAChC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,cAAc,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE3C,+BAA+B;IAC/B,IAAI,WAA+B,CAAC;IACpC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,SAAS,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC;YAC3B,WAAW,GAAG,IAAI,CAAC;YACnB,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;YACvB,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,WAAW,IAAI,SAAS,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAEpD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,GAAG,cAAc,CAAC,GAAG,GAAG,CAAC,CAAC;IAElE,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,SAAS;QACrB,eAAe,EAAE,cAAc;QAC/B,UAAU;QACV,SAAS,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QAChC,YAAY,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;KACpC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,2BAA2B,CAAC,WAAmC;IACtE,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,MAAM,eAAe,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEtF,KAAK,CAAC,IAAI,CAAC;YACT,OAAO,EAAE,WAAW,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM;YACxE,WAAW,EAAE,GAAG,eAAe,EAAE,eAAe,IAAI,IAAI,CAAC,QAAQ,SAAS,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,aAAa;YACpH,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,IAAI,CAAC,IAAI;YACjB,QAAQ,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EAAE,mEAAmE;QAChF,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,KAAK;QACd,KAAK;KACN,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAmB;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,oBAAoB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAC;QAClG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC;QAC3G,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,IAAI,CAAC,UAAU,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1F,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,aAAa,CAAC,CAAC;QACzE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,gFAAgF;AAEhF,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEhF,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAE5C,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACnC,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACxB,qBAAqB,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW,EAAE,GAAW,EAAE,KAAe;IACtE,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO;IAEtC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QACjC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS;gBAAE,OAAO;YACtC,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO;gBAAE,SAAS;YAEzG,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YAClC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAChC,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;oBACvB,qBAAqB,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC9C,CAAC;qBAAM,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBAC/C,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,oBAAoB;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,8BAA8B;IAChC,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB;IAClC,OAAO,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,oCAAoC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvG,CAAC;AAED,SAAS,YAAY,CAAC,QAAgB;IACpC,OAAO,+CAA+C,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxE,CAAC"}
@@ -0,0 +1,69 @@
1
+ /** A rule within an invariant pack */
2
+ export interface PackRule {
3
+ /** Rule identifier */
4
+ rule_id: string;
5
+ /** Human-readable description */
6
+ description: string;
7
+ /** The kind of constraint */
8
+ kind: 'required_wrapper' | 'required_helper' | 'forbidden_pattern' | 'required_pattern';
9
+ /** The helper/wrapper name that should be used */
10
+ helper?: string;
11
+ /** Regex pattern that triggers the rule */
12
+ trigger_pattern?: string;
13
+ /** Severity if violated */
14
+ severity: 'P0' | 'P1' | 'P2' | 'P3';
15
+ }
16
+ /** An invariant pack */
17
+ export interface InvariantPack {
18
+ /** Pack identifier */
19
+ name: string;
20
+ /** Human-readable description */
21
+ description: string;
22
+ /** Pack version */
23
+ version: string;
24
+ /** Whether this pack is enabled */
25
+ enabled: boolean;
26
+ /** Rules in this pack */
27
+ rules: PackRule[];
28
+ }
29
+ /** Pack registry file format */
30
+ export interface PackRegistry {
31
+ version: 1;
32
+ packs: InvariantPack[];
33
+ }
34
+ export declare const PLATFORM_API_PACK: InvariantPack;
35
+ export declare const BUILD_RUNTIME_PACK: InvariantPack;
36
+ export declare const BUILTIN_PACKS: InvariantPack[];
37
+ /**
38
+ * Load the pack registry from disk.
39
+ */
40
+ export declare function loadPackRegistry(cwd: string): PackRegistry;
41
+ /**
42
+ * Save the pack registry to disk.
43
+ */
44
+ export declare function savePackRegistry(cwd: string, registry: PackRegistry): void;
45
+ /**
46
+ * List all available packs (built-in + custom).
47
+ */
48
+ export declare function listPacks(cwd: string): InvariantPack[];
49
+ /**
50
+ * Enable a pack by name.
51
+ */
52
+ export declare function enablePack(cwd: string, packName: string): boolean;
53
+ /**
54
+ * Disable a pack by name.
55
+ */
56
+ export declare function disablePack(cwd: string, packName: string): boolean;
57
+ /**
58
+ * Add a custom pack (e.g. from `codeledger learn`).
59
+ */
60
+ export declare function addPack(cwd: string, pack: InvariantPack): void;
61
+ /**
62
+ * Get all enabled pack rules.
63
+ */
64
+ export declare function getEnabledPackRules(cwd: string): PackRule[];
65
+ /**
66
+ * Save a generated pack as YAML-like config.
67
+ */
68
+ export declare function saveGeneratedPack(cwd: string, pack: InvariantPack): string;
69
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/review-intelligence/packs/index.ts"],"names":[],"mappings":"AASA,sCAAsC;AACtC,MAAM,WAAW,QAAQ;IACvB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,6BAA6B;IAC7B,IAAI,EAAE,kBAAkB,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,kBAAkB,CAAC;IACxF,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2CAA2C;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2BAA2B;IAC3B,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CACrC;AAED,wBAAwB;AACxB,MAAM,WAAW,aAAa;IAC5B,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,yBAAyB;IACzB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,gCAAgC;AAChC,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAOD,eAAO,MAAM,iBAAiB,EAAE,aA+B/B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,aA0BhC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,aAAa,EAGxC,CAAC;AAIF;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAa1D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAI1E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,CAGtD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQjE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAQlE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,IAAI,CAY9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,EAAE,CAW3D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAO1E"}
@@ -0,0 +1,168 @@
1
+ // ─── Invariant Packs ────────────────────────────────────────────────────────
2
+ //
3
+ // Invariant packs define reusable sets of repository-specific rules.
4
+ // They can be built-in, generated by `codeledger learn`, or manually
5
+ // authored.
6
+ import { readFileSync, existsSync, writeFileSync, mkdirSync } from 'node:fs';
7
+ import { join, dirname } from 'node:path';
8
+ const DEFAULT_PACKS_DIR = '.codeledger/packs';
9
+ const REGISTRY_FILE = '.codeledger/pack-registry.json';
10
+ // ─── Built-in Packs ─────────────────────────────────────────────────────────
11
+ export const PLATFORM_API_PACK = {
12
+ name: 'platform-api-pack',
13
+ description: 'API platform conventions: sanctioned wrappers, error helpers, auth middleware',
14
+ version: '1.0.0',
15
+ enabled: false,
16
+ rules: [
17
+ {
18
+ rule_id: 'PACK-API-001',
19
+ description: 'Outbound HTTP calls must use the sanctioned fetch wrapper',
20
+ kind: 'required_wrapper',
21
+ helper: 'safeFetch',
22
+ trigger_pattern: '\\bfetch\\s*\\(',
23
+ severity: 'P1',
24
+ },
25
+ {
26
+ rule_id: 'PACK-API-002',
27
+ description: 'Error responses must use the shared error helper',
28
+ kind: 'required_helper',
29
+ helper: 'sendInvalidRequest',
30
+ trigger_pattern: '\\breply\\.status\\s*\\(\\s*4\\d{2}',
31
+ severity: 'P2',
32
+ },
33
+ {
34
+ rule_id: 'PACK-API-003',
35
+ description: 'Cache keys must use the shared cache key builder',
36
+ kind: 'required_helper',
37
+ helper: 'buildTenantCacheKey',
38
+ trigger_pattern: '\\bredis\\s*\\.\\s*(?:get|set|del)',
39
+ severity: 'P2',
40
+ },
41
+ ],
42
+ };
43
+ export const BUILD_RUNTIME_PACK = {
44
+ name: 'build-runtime-pack',
45
+ description: 'Build and runtime contract checks: dependencies, exports, ESM/CJS',
46
+ version: '1.0.0',
47
+ enabled: false,
48
+ rules: [
49
+ {
50
+ rule_id: 'PACK-BR-001',
51
+ description: 'All imported packages must be declared in package.json',
52
+ kind: 'required_pattern',
53
+ severity: 'P1',
54
+ },
55
+ {
56
+ rule_id: 'PACK-BR-002',
57
+ description: 'Subpath imports must have matching exports map entries',
58
+ kind: 'required_pattern',
59
+ severity: 'P1',
60
+ },
61
+ {
62
+ rule_id: 'PACK-BR-003',
63
+ description: 'Named imports from CJS modules must use default import pattern',
64
+ kind: 'forbidden_pattern',
65
+ trigger_pattern: 'import\\s*\\{.*\\}\\s*from',
66
+ severity: 'P1',
67
+ },
68
+ ],
69
+ };
70
+ export const BUILTIN_PACKS = [
71
+ PLATFORM_API_PACK,
72
+ BUILD_RUNTIME_PACK,
73
+ ];
74
+ // ─── Pack Management ─────────────────────────────────────────────────────────
75
+ /**
76
+ * Load the pack registry from disk.
77
+ */
78
+ export function loadPackRegistry(cwd) {
79
+ const registryPath = join(cwd, REGISTRY_FILE);
80
+ if (!existsSync(registryPath)) {
81
+ return { version: 1, packs: [...BUILTIN_PACKS] };
82
+ }
83
+ try {
84
+ const raw = JSON.parse(readFileSync(registryPath, 'utf-8'));
85
+ return raw;
86
+ }
87
+ catch {
88
+ return { version: 1, packs: [...BUILTIN_PACKS] };
89
+ }
90
+ }
91
+ /**
92
+ * Save the pack registry to disk.
93
+ */
94
+ export function savePackRegistry(cwd, registry) {
95
+ const registryPath = join(cwd, REGISTRY_FILE);
96
+ mkdirSync(dirname(registryPath), { recursive: true });
97
+ writeFileSync(registryPath, JSON.stringify(registry, null, 2) + '\n');
98
+ }
99
+ /**
100
+ * List all available packs (built-in + custom).
101
+ */
102
+ export function listPacks(cwd) {
103
+ const registry = loadPackRegistry(cwd);
104
+ return registry.packs;
105
+ }
106
+ /**
107
+ * Enable a pack by name.
108
+ */
109
+ export function enablePack(cwd, packName) {
110
+ const registry = loadPackRegistry(cwd);
111
+ const pack = registry.packs.find((p) => p.name === packName);
112
+ if (!pack)
113
+ return false;
114
+ pack.enabled = true;
115
+ savePackRegistry(cwd, registry);
116
+ return true;
117
+ }
118
+ /**
119
+ * Disable a pack by name.
120
+ */
121
+ export function disablePack(cwd, packName) {
122
+ const registry = loadPackRegistry(cwd);
123
+ const pack = registry.packs.find((p) => p.name === packName);
124
+ if (!pack)
125
+ return false;
126
+ pack.enabled = false;
127
+ savePackRegistry(cwd, registry);
128
+ return true;
129
+ }
130
+ /**
131
+ * Add a custom pack (e.g. from `codeledger learn`).
132
+ */
133
+ export function addPack(cwd, pack) {
134
+ const registry = loadPackRegistry(cwd);
135
+ // Replace if already exists
136
+ const existingIdx = registry.packs.findIndex((p) => p.name === pack.name);
137
+ if (existingIdx >= 0) {
138
+ registry.packs[existingIdx] = pack;
139
+ }
140
+ else {
141
+ registry.packs.push(pack);
142
+ }
143
+ savePackRegistry(cwd, registry);
144
+ }
145
+ /**
146
+ * Get all enabled pack rules.
147
+ */
148
+ export function getEnabledPackRules(cwd) {
149
+ const registry = loadPackRegistry(cwd);
150
+ const rules = [];
151
+ for (const pack of registry.packs) {
152
+ if (pack.enabled) {
153
+ rules.push(...pack.rules);
154
+ }
155
+ }
156
+ return rules;
157
+ }
158
+ /**
159
+ * Save a generated pack as YAML-like config.
160
+ */
161
+ export function saveGeneratedPack(cwd, pack) {
162
+ const packsDir = join(cwd, DEFAULT_PACKS_DIR);
163
+ mkdirSync(packsDir, { recursive: true });
164
+ const filePath = join(packsDir, `${pack.name}.json`);
165
+ writeFileSync(filePath, JSON.stringify(pack, null, 2) + '\n');
166
+ return filePath;
167
+ }
168
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/review-intelligence/packs/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"repair-guidance.d.ts","sourceRoot":"","sources":["../../src/review-intelligence/repair-guidance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9D;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAuErE;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,YAAY,EAAE,GACxB,MAAM,CAgBR"}
1
+ {"version":3,"file":"repair-guidance.d.ts","sourceRoot":"","sources":["../../src/review-intelligence/repair-guidance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE9D;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CA2HrE;AAED;;GAEG;AACH,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,YAAY,EAAE,GACxB,MAAM,CAgBR"}
@@ -65,6 +65,52 @@ export function generateRepairGuidance(finding) {
65
65
  }
66
66
  }
67
67
  break;
68
+ case 'RI-UD-001':
69
+ lines.push('Add the missing dependency to package.json:');
70
+ lines.push('');
71
+ lines.push(' npm install <package-name>');
72
+ lines.push(' # or: pnpm add <package-name>');
73
+ break;
74
+ case 'RI-EM-001':
75
+ lines.push('Add the subpath to the package exports map in package.json:');
76
+ lines.push('');
77
+ lines.push(' "exports": {');
78
+ lines.push(' "./<subpath>": { "import": "./dist/<subpath>.js" }');
79
+ lines.push(' }');
80
+ break;
81
+ case 'RI-CJS-001':
82
+ lines.push('Rewrite named import to default import with destructure:');
83
+ lines.push('');
84
+ lines.push(' // Before:');
85
+ lines.push(' import { method } from \'package\';');
86
+ lines.push(' // After:');
87
+ lines.push(' import pkg from \'package\';');
88
+ lines.push(' const { method } = pkg;');
89
+ break;
90
+ case 'RI-IC-001':
91
+ lines.push('Wrap optional infrastructure init in try/catch:');
92
+ lines.push('');
93
+ lines.push(' try {');
94
+ lines.push(' initTelemetry();');
95
+ lines.push(' } catch (err) {');
96
+ lines.push(' logger.warn(\'Telemetry init failed, continuing\', err);');
97
+ lines.push(' }');
98
+ break;
99
+ case 'RI-FK-001':
100
+ lines.push('Extract expected value from fixture data:');
101
+ lines.push('');
102
+ lines.push(' const keyword = fixtures[0].searchableField;');
103
+ lines.push(' const results = search(keyword);');
104
+ lines.push(' expect(results).toContainEqual(expect.objectContaining({ field: keyword }));');
105
+ break;
106
+ case 'RI-EC-001':
107
+ lines.push('Replace exact count with range assertion:');
108
+ lines.push('');
109
+ lines.push(' // Before:');
110
+ lines.push(' expect(results.length).toBe(5);');
111
+ lines.push(' // After:');
112
+ lines.push(' expect(results.length).toBeGreaterThan(0);');
113
+ break;
68
114
  default:
69
115
  lines.push('Review the finding and apply the recommended fix.');
70
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"repair-guidance.js","sourceRoot":"","sources":["../../src/review-intelligence/repair-guidance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"repair-guidance.js","sourceRoot":"","sources":["../../src/review-intelligence/repair-guidance.ts"],"names":[],"mappings":"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"}