semantic-complexity 0.0.7-741984fb → 0.0.15-f5745e88

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 (163) hide show
  1. package/dist/__tests__/analyzers.test.d.ts +5 -0
  2. package/dist/__tests__/analyzers.test.d.ts.map +1 -0
  3. package/dist/__tests__/analyzers.test.js +357 -0
  4. package/dist/__tests__/analyzers.test.js.map +1 -0
  5. package/dist/__tests__/gate.test.d.ts +5 -0
  6. package/dist/__tests__/gate.test.d.ts.map +1 -0
  7. package/dist/__tests__/gate.test.js +140 -0
  8. package/dist/__tests__/gate.test.js.map +1 -0
  9. package/dist/analyzers/bread.d.ts +63 -0
  10. package/dist/analyzers/bread.d.ts.map +1 -0
  11. package/dist/analyzers/bread.js +415 -0
  12. package/dist/analyzers/bread.js.map +1 -0
  13. package/dist/analyzers/cheese.d.ts +111 -0
  14. package/dist/analyzers/cheese.d.ts.map +1 -0
  15. package/dist/analyzers/cheese.js +881 -0
  16. package/dist/analyzers/cheese.js.map +1 -0
  17. package/dist/analyzers/ham.d.ts +33 -0
  18. package/dist/analyzers/ham.d.ts.map +1 -0
  19. package/dist/analyzers/ham.js +264 -0
  20. package/dist/analyzers/ham.js.map +1 -0
  21. package/dist/analyzers/index.d.ts +7 -0
  22. package/dist/analyzers/index.d.ts.map +1 -0
  23. package/dist/analyzers/index.js +7 -0
  24. package/dist/analyzers/index.js.map +1 -0
  25. package/dist/budget/index.d.ts +50 -0
  26. package/dist/budget/index.d.ts.map +1 -0
  27. package/dist/budget/index.js +138 -0
  28. package/dist/budget/index.js.map +1 -0
  29. package/dist/cli/index.d.ts +6 -0
  30. package/dist/cli/index.d.ts.map +1 -0
  31. package/dist/cli/index.js +103 -0
  32. package/dist/cli/index.js.map +1 -0
  33. package/dist/gate/index.d.ts +31 -0
  34. package/dist/gate/index.d.ts.map +1 -0
  35. package/dist/gate/index.js +117 -0
  36. package/dist/gate/index.js.map +1 -0
  37. package/dist/gate/waiver.d.ts +83 -0
  38. package/dist/gate/waiver.d.ts.map +1 -0
  39. package/dist/gate/waiver.js +425 -0
  40. package/dist/gate/waiver.js.map +1 -0
  41. package/dist/index.d.ts +8 -34
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +8 -49
  44. package/dist/index.js.map +1 -1
  45. package/dist/mcp/index.d.ts +5 -0
  46. package/dist/mcp/index.d.ts.map +1 -0
  47. package/dist/mcp/index.js +351 -0
  48. package/dist/mcp/index.js.map +1 -0
  49. package/dist/recommend/index.d.ts +32 -0
  50. package/dist/recommend/index.d.ts.map +1 -0
  51. package/dist/recommend/index.js +169 -0
  52. package/dist/recommend/index.js.map +1 -0
  53. package/dist/simplex/index.d.ts +26 -0
  54. package/dist/simplex/index.d.ts.map +1 -0
  55. package/dist/simplex/index.js +100 -0
  56. package/dist/simplex/index.js.map +1 -0
  57. package/dist/types/index.d.ts +39 -0
  58. package/dist/types/index.d.ts.map +1 -0
  59. package/dist/types/index.js +5 -0
  60. package/dist/types/index.js.map +1 -0
  61. package/package.json +27 -52
  62. package/LICENSE +0 -21
  63. package/README.md +0 -72
  64. package/dist/ast/index.d.ts +0 -2
  65. package/dist/ast/index.d.ts.map +0 -1
  66. package/dist/ast/index.js +0 -2
  67. package/dist/ast/index.js.map +0 -1
  68. package/dist/ast/parser.d.ts +0 -27
  69. package/dist/ast/parser.d.ts.map +0 -1
  70. package/dist/ast/parser.js +0 -273
  71. package/dist/ast/parser.js.map +0 -1
  72. package/dist/canonical/convergence.d.ts +0 -56
  73. package/dist/canonical/convergence.d.ts.map +0 -1
  74. package/dist/canonical/convergence.js +0 -149
  75. package/dist/canonical/convergence.js.map +0 -1
  76. package/dist/canonical/index.d.ts +0 -11
  77. package/dist/canonical/index.d.ts.map +0 -1
  78. package/dist/canonical/index.js +0 -11
  79. package/dist/canonical/index.js.map +0 -1
  80. package/dist/canonical/profiles.d.ts +0 -40
  81. package/dist/canonical/profiles.d.ts.map +0 -1
  82. package/dist/canonical/profiles.js +0 -182
  83. package/dist/canonical/profiles.js.map +0 -1
  84. package/dist/canonical/types.d.ts +0 -124
  85. package/dist/canonical/types.d.ts.map +0 -1
  86. package/dist/canonical/types.js +0 -46
  87. package/dist/canonical/types.js.map +0 -1
  88. package/dist/compare.d.ts +0 -31
  89. package/dist/compare.d.ts.map +0 -1
  90. package/dist/compare.js +0 -354
  91. package/dist/compare.js.map +0 -1
  92. package/dist/context/index.d.ts +0 -41
  93. package/dist/context/index.d.ts.map +0 -1
  94. package/dist/context/index.js +0 -253
  95. package/dist/context/index.js.map +0 -1
  96. package/dist/gates/delta.d.ts +0 -45
  97. package/dist/gates/delta.d.ts.map +0 -1
  98. package/dist/gates/delta.js +0 -260
  99. package/dist/gates/delta.js.map +0 -1
  100. package/dist/gates/index.d.ts +0 -9
  101. package/dist/gates/index.d.ts.map +0 -1
  102. package/dist/gates/index.js +0 -9
  103. package/dist/gates/index.js.map +0 -1
  104. package/dist/gates/types.d.ts +0 -96
  105. package/dist/gates/types.d.ts.map +0 -1
  106. package/dist/gates/types.js +0 -59
  107. package/dist/gates/types.js.map +0 -1
  108. package/dist/graph/call.d.ts +0 -63
  109. package/dist/graph/call.d.ts.map +0 -1
  110. package/dist/graph/call.js +0 -240
  111. package/dist/graph/call.js.map +0 -1
  112. package/dist/graph/dependency.d.ts +0 -52
  113. package/dist/graph/dependency.d.ts.map +0 -1
  114. package/dist/graph/dependency.js +0 -296
  115. package/dist/graph/dependency.js.map +0 -1
  116. package/dist/graph/index.d.ts +0 -3
  117. package/dist/graph/index.d.ts.map +0 -1
  118. package/dist/graph/index.js +0 -3
  119. package/dist/graph/index.js.map +0 -1
  120. package/dist/metrics/cognitive.d.ts +0 -42
  121. package/dist/metrics/cognitive.d.ts.map +0 -1
  122. package/dist/metrics/cognitive.js +0 -204
  123. package/dist/metrics/cognitive.js.map +0 -1
  124. package/dist/metrics/cyclomatic.d.ts +0 -31
  125. package/dist/metrics/cyclomatic.d.ts.map +0 -1
  126. package/dist/metrics/cyclomatic.js +0 -121
  127. package/dist/metrics/cyclomatic.js.map +0 -1
  128. package/dist/metrics/dimensional.d.ts +0 -32
  129. package/dist/metrics/dimensional.d.ts.map +0 -1
  130. package/dist/metrics/dimensional.js +0 -560
  131. package/dist/metrics/dimensional.js.map +0 -1
  132. package/dist/metrics/index.d.ts +0 -26
  133. package/dist/metrics/index.d.ts.map +0 -1
  134. package/dist/metrics/index.js +0 -120
  135. package/dist/metrics/index.js.map +0 -1
  136. package/dist/metrics/meta.d.ts +0 -90
  137. package/dist/metrics/meta.d.ts.map +0 -1
  138. package/dist/metrics/meta.js +0 -144
  139. package/dist/metrics/meta.js.map +0 -1
  140. package/dist/tensor/canonical.d.ts +0 -53
  141. package/dist/tensor/canonical.d.ts.map +0 -1
  142. package/dist/tensor/canonical.js +0 -192
  143. package/dist/tensor/canonical.js.map +0 -1
  144. package/dist/tensor/index.d.ts +0 -22
  145. package/dist/tensor/index.d.ts.map +0 -1
  146. package/dist/tensor/index.js +0 -22
  147. package/dist/tensor/index.js.map +0 -1
  148. package/dist/tensor/matrix.d.ts +0 -62
  149. package/dist/tensor/matrix.d.ts.map +0 -1
  150. package/dist/tensor/matrix.js +0 -187
  151. package/dist/tensor/matrix.js.map +0 -1
  152. package/dist/tensor/scoring.d.ts +0 -82
  153. package/dist/tensor/scoring.d.ts.map +0 -1
  154. package/dist/tensor/scoring.js +0 -233
  155. package/dist/tensor/scoring.js.map +0 -1
  156. package/dist/tensor/types.d.ts +0 -186
  157. package/dist/tensor/types.d.ts.map +0 -1
  158. package/dist/tensor/types.js +0 -15
  159. package/dist/tensor/types.js.map +0 -1
  160. package/dist/types.d.ts +0 -341
  161. package/dist/types.d.ts.map +0 -1
  162. package/dist/types.js +0 -22
  163. package/dist/types.js.map +0 -1
@@ -0,0 +1,103 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * semantic-complexity CLI
4
+ */
5
+ import { readFileSync } from 'fs';
6
+ import { fileURLToPath } from 'url';
7
+ import { dirname, join } from 'path';
8
+ import { analyzeBread } from '../analyzers/bread.js';
9
+ import { analyzeCheese } from '../analyzers/cheese.js';
10
+ import { analyzeHam } from '../analyzers/ham.js';
11
+ import { normalize, calculateEquilibrium } from '../simplex/index.js';
12
+ import { checkGate } from '../gate/index.js';
13
+ // package.json에서 버전 동적으로 읽기
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = dirname(__filename);
16
+ const packageJson = JSON.parse(readFileSync(join(__dirname, '../../package.json'), 'utf-8'));
17
+ function main() {
18
+ const args = process.argv.slice(2);
19
+ if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
20
+ printHelp();
21
+ process.exit(0);
22
+ }
23
+ if (args.includes('--version') || args.includes('-v')) {
24
+ console.log(`semantic-complexity v${packageJson.version}`);
25
+ process.exit(0);
26
+ }
27
+ const filePath = args.find(arg => !arg.startsWith('-'));
28
+ if (!filePath) {
29
+ console.error('Error: No file path provided');
30
+ process.exit(1);
31
+ }
32
+ const gateType = (args.find(arg => arg.startsWith('--gate='))?.split('=')[1] || 'mvp');
33
+ try {
34
+ const source = readFileSync(filePath, 'utf-8');
35
+ analyze(source, filePath, gateType);
36
+ }
37
+ catch {
38
+ console.error(`Error reading file: ${filePath}`);
39
+ process.exit(1);
40
+ }
41
+ }
42
+ function analyze(source, filePath, gateType) {
43
+ console.log(`\nAnalyzing: ${filePath}`);
44
+ console.log('='.repeat(50));
45
+ // Analyze each axis
46
+ const bread = analyzeBread(source);
47
+ const cheese = analyzeCheese(source);
48
+ const ham = analyzeHam(source);
49
+ // Calculate simplex & equilibrium
50
+ const simplex = normalize(bread, cheese, ham);
51
+ const equilibrium = calculateEquilibrium(simplex);
52
+ // Check gate
53
+ const gate = checkGate(gateType, cheese, ham);
54
+ // Output results
55
+ console.log('\n[Bread - Security]');
56
+ console.log(` Trust Boundaries: ${bread.trustBoundaryCount}`);
57
+ console.log(` Auth Explicitness: ${(bread.authExplicitness * 100).toFixed(1)}%`);
58
+ console.log(` Secrets Detected: ${bread.secretPatterns.filter(s => s.severity === 'high').length} high, ${bread.secretPatterns.filter(s => s.severity === 'medium').length} medium`);
59
+ console.log(` Hidden Deps: global=${bread.hiddenDeps.global}, env=${bread.hiddenDeps.env}, io=${bread.hiddenDeps.io}`);
60
+ console.log('\n[Cheese - Cognitive]');
61
+ console.log(` Max Nesting: ${cheese.maxNesting}`);
62
+ console.log(` State×Async×Retry: ${cheese.stateAsyncRetry.axes.join('×') || 'none'} (${cheese.stateAsyncRetry.count})`);
63
+ console.log(` Accessible: ${cheese.accessible ? 'YES' : 'NO'}`);
64
+ if (cheese.violations.length > 0) {
65
+ console.log(` Violations: ${cheese.violations.join(', ')}`);
66
+ }
67
+ console.log('\n[Ham - Behavioral]');
68
+ console.log(` Golden Test Coverage: ${(ham.goldenTestCoverage * 100).toFixed(1)}%`);
69
+ console.log(` Critical Paths: ${ham.criticalPaths.length}`);
70
+ console.log(` Untested Critical: ${ham.untestedCriticalPaths.length}`);
71
+ console.log('\n[Simplex]');
72
+ console.log(` Coordinates: B=${simplex.bread.toFixed(2)}, C=${simplex.cheese.toFixed(2)}, H=${simplex.ham.toFixed(2)}`);
73
+ console.log(` Equilibrium: ${equilibrium.inEquilibrium ? 'YES' : 'NO'} (energy=${equilibrium.energy.toFixed(3)})`);
74
+ if (equilibrium.dominantAxis) {
75
+ console.log(` Dominant Axis: ${equilibrium.dominantAxis}`);
76
+ }
77
+ console.log(`\n[Gate: ${gateType.toUpperCase()}]`);
78
+ console.log(` Result: ${gate.passed ? 'PASSED' : 'FAILED'}`);
79
+ if (gate.violations.length > 0) {
80
+ console.log(' Violations:');
81
+ gate.violations.forEach(v => console.log(` - ${v.message}`));
82
+ }
83
+ process.exit(gate.passed ? 0 : 1);
84
+ }
85
+ function printHelp() {
86
+ console.log(`
87
+ semantic-complexity - Code complexity analyzer (Bread-Cheese-Ham model)
88
+
89
+ Usage:
90
+ semantic-complexity <file> [options]
91
+
92
+ Options:
93
+ --gate=<type> Gate type: poc, mvp, production (default: mvp)
94
+ --version, -v Show version
95
+ --help, -h Show this help
96
+
97
+ Examples:
98
+ semantic-complexity src/app.ts
99
+ semantic-complexity src/api.ts --gate=production
100
+ `);
101
+ }
102
+ main();
103
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,4BAA4B;AAC5B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,EAAE,OAAO,CAAC,CAC7D,CAAC;AAEF,SAAS,IAAI;IACX,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACxE,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,wBAAwB,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAa,CAAC;IAEnG,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,uBAAuB,QAAQ,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,MAAc,EAAE,QAAgB,EAAE,QAAkB;IACnE,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,oBAAoB;IACpB,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAE/B,kCAAkC;IAClC,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAElD,aAAa;IACb,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IAE9C,iBAAiB;IACjB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,KAAK,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAClF,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM,UAAU,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC;IACtL,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,UAAU,CAAC,MAAM,SAAS,KAAK,CAAC,UAAU,CAAC,GAAG,QAAQ,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;IAExH,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,MAAM,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC,CAAC;IACzH,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACjE,IAAI,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,GAAG,CAAC,kBAAkB,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACrF,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7D,OAAO,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,qBAAqB,CAAC,MAAM,EAAE,CAAC,CAAC;IAExE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,oBAAoB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACzH,OAAO,CAAC,GAAG,CAAC,kBAAkB,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,YAAY,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACpH,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,oBAAoB,WAAW,CAAC,YAAY,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9D,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;CAcb,CAAC,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Gate - PoC / MVP / Production quality gates
3
+ */
4
+ import type { GateType, GateResult } from '../types/index.js';
5
+ import type { CheeseResult } from '../analyzers/cheese.js';
6
+ import type { HamResult } from '../analyzers/ham.js';
7
+ export { checkWaiver, checkInlineWaiver, checkExternalWaiver, parseEssentialComplexity, parseWaiverFile, findWaiverFile, matchFilePattern, isWaiverExpired, detectComplexitySignals, detectComplexImports, buildComplexityContext, generateReviewQuestions, ESSENTIAL_COMPLEXITY_SIGNALS, COMPLEX_DOMAIN_LIBRARIES, } from './waiver.js';
8
+ export type { EssentialComplexityConfig, ComplexitySignal, ComplexityContext, WaiverResult, ExternalWaiverEntry, WaiverFile, } from './waiver.js';
9
+ declare const BASE_THRESHOLDS: {
10
+ nesting_max: number;
11
+ concepts_per_function: number;
12
+ hidden_dep_max: number;
13
+ golden_test_min: number;
14
+ };
15
+ export declare const STAGE_POLICIES: Record<GateType, {
16
+ waiver_allowed: boolean;
17
+ }>;
18
+ /**
19
+ * Get thresholds for a specific gate type
20
+ */
21
+ export declare function getThresholds(gateType: GateType): typeof BASE_THRESHOLDS;
22
+ export interface CheckGateOptions {
23
+ source?: string;
24
+ filePath?: string;
25
+ projectRoot?: string;
26
+ }
27
+ /**
28
+ * Check if code passes the gate
29
+ */
30
+ export declare function checkGate(gateType: GateType, cheese: CheeseResult, ham: HamResult, options?: CheckGateOptions): GateResult;
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/gate/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EAEX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIrD,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,4BAA4B,EAC5B,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,yBAAyB,EACzB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,UAAU,GACX,MAAM,aAAa,CAAC;AAGrB,QAAA,MAAM,eAAe;;;;;CAKpB,CAAC;AAyBF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE;IAAE,cAAc,EAAE,OAAO,CAAA;CAAE,CAIxE,CAAC;AAEF;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,eAAe,CAWxE;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,SAAS,EACd,OAAO,GAAE,gBAAqB,GAC7B,UAAU,CAkEZ"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Gate - PoC / MVP / Production quality gates
3
+ */
4
+ import { checkWaiver } from './waiver.js';
5
+ // Re-export waiver functions
6
+ export { checkWaiver, checkInlineWaiver, checkExternalWaiver, parseEssentialComplexity, parseWaiverFile, findWaiverFile, matchFilePattern, isWaiverExpired, detectComplexitySignals, detectComplexImports, buildComplexityContext, generateReviewQuestions, ESSENTIAL_COMPLEXITY_SIGNALS, COMPLEX_DOMAIN_LIBRARIES, } from './waiver.js';
7
+ // Base thresholds (MVP baseline)
8
+ const BASE_THRESHOLDS = {
9
+ nesting_max: 4,
10
+ concepts_per_function: 9,
11
+ hidden_dep_max: 2,
12
+ golden_test_min: 0.8,
13
+ };
14
+ // Stage adjustments from MVP baseline
15
+ const STAGE_ADJUSTMENTS = {
16
+ poc: {
17
+ nesting_max: +2,
18
+ concepts_per_function: +3,
19
+ hidden_dep_max: +1,
20
+ golden_test_min: -0.3,
21
+ },
22
+ mvp: {
23
+ nesting_max: 0,
24
+ concepts_per_function: 0,
25
+ hidden_dep_max: 0,
26
+ golden_test_min: 0,
27
+ },
28
+ production: {
29
+ nesting_max: -1,
30
+ concepts_per_function: -2,
31
+ hidden_dep_max: -1,
32
+ golden_test_min: +0.15,
33
+ },
34
+ };
35
+ // Stage policies (exported for external use)
36
+ export const STAGE_POLICIES = {
37
+ poc: { waiver_allowed: false },
38
+ mvp: { waiver_allowed: false },
39
+ production: { waiver_allowed: true },
40
+ };
41
+ /**
42
+ * Get thresholds for a specific gate type
43
+ */
44
+ export function getThresholds(gateType) {
45
+ const adjustments = STAGE_ADJUSTMENTS[gateType];
46
+ return {
47
+ nesting_max: BASE_THRESHOLDS.nesting_max + adjustments.nesting_max,
48
+ concepts_per_function: BASE_THRESHOLDS.concepts_per_function + adjustments.concepts_per_function,
49
+ hidden_dep_max: BASE_THRESHOLDS.hidden_dep_max + adjustments.hidden_dep_max,
50
+ golden_test_min: BASE_THRESHOLDS.golden_test_min + adjustments.golden_test_min,
51
+ };
52
+ }
53
+ /**
54
+ * Check if code passes the gate
55
+ */
56
+ export function checkGate(gateType, cheese, ham, options = {}) {
57
+ const thresholds = getThresholds(gateType);
58
+ const violations = [];
59
+ let waiverApplied = false;
60
+ // Check waiver if source is provided and waiver is allowed for this stage
61
+ if (options.source && STAGE_POLICIES[gateType].waiver_allowed) {
62
+ const waiver = checkWaiver(options.source, options.filePath, options.projectRoot);
63
+ if (waiver.waived) {
64
+ waiverApplied = true;
65
+ // Apply waiver config overrides
66
+ if (waiver.config?.nesting !== undefined) {
67
+ thresholds.nesting_max = waiver.config.nesting;
68
+ }
69
+ if (waiver.config?.conceptsTotal !== undefined) {
70
+ thresholds.concepts_per_function = waiver.config.conceptsTotal;
71
+ }
72
+ }
73
+ }
74
+ // Check nesting
75
+ if (cheese.maxNesting > thresholds.nesting_max) {
76
+ violations.push({
77
+ rule: 'nesting_max',
78
+ actual: cheese.maxNesting,
79
+ threshold: thresholds.nesting_max,
80
+ message: `Nesting depth ${cheese.maxNesting} exceeds ${thresholds.nesting_max}`,
81
+ });
82
+ }
83
+ // Check hidden dependencies
84
+ if (cheese.hiddenDependencies > thresholds.hidden_dep_max) {
85
+ violations.push({
86
+ rule: 'hidden_dep_max',
87
+ actual: cheese.hiddenDependencies,
88
+ threshold: thresholds.hidden_dep_max,
89
+ message: `Hidden deps ${cheese.hiddenDependencies} exceeds ${thresholds.hidden_dep_max}`,
90
+ });
91
+ }
92
+ // Check golden test coverage
93
+ if (ham.goldenTestCoverage < thresholds.golden_test_min) {
94
+ violations.push({
95
+ rule: 'golden_test_min',
96
+ actual: ham.goldenTestCoverage,
97
+ threshold: thresholds.golden_test_min,
98
+ message: `Test coverage ${(ham.goldenTestCoverage * 100).toFixed(1)}% below ${(thresholds.golden_test_min * 100).toFixed(1)}%`,
99
+ });
100
+ }
101
+ // Check state×async×retry
102
+ if (cheese.stateAsyncRetry.violated) {
103
+ violations.push({
104
+ rule: 'state_async_retry',
105
+ actual: cheese.stateAsyncRetry.count,
106
+ threshold: 1,
107
+ message: `state×async×retry co-occurrence: ${cheese.stateAsyncRetry.axes.join('×')}`,
108
+ });
109
+ }
110
+ return {
111
+ passed: violations.length === 0,
112
+ gateType,
113
+ violations,
114
+ waiverApplied,
115
+ };
116
+ }
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/gate/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Essential Complexity Waiver System
3
+ *
4
+ * 본질적 복잡도 면제 시스템:
5
+ * - __essential_complexity__ 파싱 (인라인)
6
+ * - .waiver.json 파일 지원 (외부)
7
+ * - ADR 존재 여부 검증
8
+ * - ComplexityContext (토대 정보) 생성
9
+ *
10
+ * 사용법:
11
+ * // 방법 1: 모듈에서 인라인 선언
12
+ * export const __essential_complexity__ = {
13
+ * adr: "docs/adr/003-inference-complexity.md",
14
+ * };
15
+ *
16
+ * // 방법 2: 프로젝트 루트에 .waiver.json 파일 생성
17
+ * // {
18
+ * // "version": "1.0",
19
+ * // "waivers": [
20
+ * // { "pattern": "src/crypto/*.ts", "adr": "ADR-007" }
21
+ * // ]
22
+ * // }
23
+ *
24
+ * // Gate에서 체크
25
+ * const waiver = checkWaiver(source, filePath);
26
+ * if (waiver.waived) {
27
+ * // 복잡도 검사 유예
28
+ * }
29
+ */
30
+ export interface EssentialComplexityConfig {
31
+ adr?: string;
32
+ nesting?: number;
33
+ conceptsTotal?: number;
34
+ conceptsParams?: number;
35
+ }
36
+ export interface ComplexitySignal {
37
+ category: 'math' | 'algorithm' | 'domain';
38
+ pattern: string;
39
+ description: string;
40
+ }
41
+ export interface ComplexityContext {
42
+ signals: ComplexitySignal[];
43
+ imports: string[];
44
+ metrics: Record<string, number>;
45
+ questions: string[];
46
+ }
47
+ export interface WaiverResult {
48
+ waived: boolean;
49
+ reason?: string;
50
+ adrPath?: string;
51
+ config?: EssentialComplexityConfig;
52
+ externalWaiver?: ExternalWaiverEntry;
53
+ }
54
+ export interface ExternalWaiverEntry {
55
+ pattern: string;
56
+ adr: string;
57
+ justification?: string;
58
+ approvedAt?: string;
59
+ expiresAt?: string | null;
60
+ approver?: string;
61
+ }
62
+ export interface WaiverFile {
63
+ $schema?: string;
64
+ version: string;
65
+ waivers: ExternalWaiverEntry[];
66
+ }
67
+ type SignalCategory = 'math' | 'algorithm' | 'domain';
68
+ export declare const ESSENTIAL_COMPLEXITY_SIGNALS: Record<SignalCategory, Array<[RegExp, string]>>;
69
+ export declare const COMPLEX_DOMAIN_LIBRARIES: Set<string>;
70
+ export declare function parseEssentialComplexity(source: string): EssentialComplexityConfig | null;
71
+ export declare function detectComplexitySignals(source: string): ComplexitySignal[];
72
+ export declare function detectComplexImports(source: string): string[];
73
+ export declare function generateReviewQuestions(signals: ComplexitySignal[], imports: string[]): string[];
74
+ export declare function buildComplexityContext(source: string, metrics?: Record<string, number>): ComplexityContext;
75
+ export declare function parseWaiverFile(waiverPath: string): WaiverFile | null;
76
+ export declare function findWaiverFile(filePath: string, projectRoot: string): string | null;
77
+ export declare function matchFilePattern(filePath: string, pattern: string): boolean;
78
+ export declare function isWaiverExpired(entry: ExternalWaiverEntry): boolean;
79
+ export declare function checkExternalWaiver(filePath: string, projectRoot: string): WaiverResult;
80
+ export declare function checkWaiver(source: string, filePath?: string, projectRoot?: string): WaiverResult;
81
+ export declare function checkInlineWaiver(source: string, filePath?: string, projectRoot?: string): WaiverResult;
82
+ export {};
83
+ //# sourceMappingURL=waiver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"waiver.d.ts","sourceRoot":"","sources":["../../src/gate/waiver.ts"],"names":[],"mappings":"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"}