@weave_protocol/domere 1.0.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 (104) hide show
  1. package/PLANNING.md +231 -0
  2. package/README.md +50 -0
  3. package/dist/anchoring/ethereum.d.ts +135 -0
  4. package/dist/anchoring/ethereum.d.ts.map +1 -0
  5. package/dist/anchoring/ethereum.js +474 -0
  6. package/dist/anchoring/ethereum.js.map +1 -0
  7. package/dist/anchoring/index.d.ts +93 -0
  8. package/dist/anchoring/index.d.ts.map +1 -0
  9. package/dist/anchoring/index.js +184 -0
  10. package/dist/anchoring/index.js.map +1 -0
  11. package/dist/anchoring/merkle.d.ts +91 -0
  12. package/dist/anchoring/merkle.d.ts.map +1 -0
  13. package/dist/anchoring/merkle.js +203 -0
  14. package/dist/anchoring/merkle.js.map +1 -0
  15. package/dist/anchoring/solana.d.ts +85 -0
  16. package/dist/anchoring/solana.d.ts.map +1 -0
  17. package/dist/anchoring/solana.js +301 -0
  18. package/dist/anchoring/solana.js.map +1 -0
  19. package/dist/constants.d.ts +130 -0
  20. package/dist/constants.d.ts.map +1 -0
  21. package/dist/constants.js +536 -0
  22. package/dist/constants.js.map +1 -0
  23. package/dist/index.d.ts +13 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +37 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/language/code-analyzer.d.ts +80 -0
  28. package/dist/language/code-analyzer.d.ts.map +1 -0
  29. package/dist/language/code-analyzer.js +489 -0
  30. package/dist/language/code-analyzer.js.map +1 -0
  31. package/dist/language/detector.d.ts +53 -0
  32. package/dist/language/detector.d.ts.map +1 -0
  33. package/dist/language/detector.js +248 -0
  34. package/dist/language/detector.js.map +1 -0
  35. package/dist/language/index.d.ts +61 -0
  36. package/dist/language/index.d.ts.map +1 -0
  37. package/dist/language/index.js +109 -0
  38. package/dist/language/index.js.map +1 -0
  39. package/dist/language/nl-analyzer.d.ts +59 -0
  40. package/dist/language/nl-analyzer.d.ts.map +1 -0
  41. package/dist/language/nl-analyzer.js +350 -0
  42. package/dist/language/nl-analyzer.js.map +1 -0
  43. package/dist/language/semantic.d.ts +48 -0
  44. package/dist/language/semantic.d.ts.map +1 -0
  45. package/dist/language/semantic.js +329 -0
  46. package/dist/language/semantic.js.map +1 -0
  47. package/dist/storage/index.d.ts +6 -0
  48. package/dist/storage/index.d.ts.map +1 -0
  49. package/dist/storage/index.js +6 -0
  50. package/dist/storage/index.js.map +1 -0
  51. package/dist/storage/memory.d.ts +48 -0
  52. package/dist/storage/memory.d.ts.map +1 -0
  53. package/dist/storage/memory.js +211 -0
  54. package/dist/storage/memory.js.map +1 -0
  55. package/dist/thread/drift.d.ts +43 -0
  56. package/dist/thread/drift.d.ts.map +1 -0
  57. package/dist/thread/drift.js +248 -0
  58. package/dist/thread/drift.js.map +1 -0
  59. package/dist/thread/index.d.ts +9 -0
  60. package/dist/thread/index.d.ts.map +1 -0
  61. package/dist/thread/index.js +9 -0
  62. package/dist/thread/index.js.map +1 -0
  63. package/dist/thread/intent.d.ts +68 -0
  64. package/dist/thread/intent.d.ts.map +1 -0
  65. package/dist/thread/intent.js +333 -0
  66. package/dist/thread/intent.js.map +1 -0
  67. package/dist/thread/manager.d.ts +85 -0
  68. package/dist/thread/manager.d.ts.map +1 -0
  69. package/dist/thread/manager.js +305 -0
  70. package/dist/thread/manager.js.map +1 -0
  71. package/dist/thread/weave.d.ts +61 -0
  72. package/dist/thread/weave.d.ts.map +1 -0
  73. package/dist/thread/weave.js +158 -0
  74. package/dist/thread/weave.js.map +1 -0
  75. package/dist/tools/index.d.ts +18 -0
  76. package/dist/tools/index.d.ts.map +1 -0
  77. package/dist/tools/index.js +102 -0
  78. package/dist/tools/index.js.map +1 -0
  79. package/dist/types.d.ts +466 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +48 -0
  82. package/dist/types.js.map +1 -0
  83. package/package.json +24 -0
  84. package/src/anchoring/ethereum.ts +568 -0
  85. package/src/anchoring/index.ts +236 -0
  86. package/src/anchoring/merkle.ts +256 -0
  87. package/src/anchoring/solana.ts +370 -0
  88. package/src/constants.ts +566 -0
  89. package/src/index.ts +43 -0
  90. package/src/language/code-analyzer.ts +564 -0
  91. package/src/language/detector.ts +297 -0
  92. package/src/language/index.ts +129 -0
  93. package/src/language/nl-analyzer.ts +411 -0
  94. package/src/language/semantic.ts +385 -0
  95. package/src/storage/index.ts +6 -0
  96. package/src/storage/memory.ts +271 -0
  97. package/src/thread/drift.ts +319 -0
  98. package/src/thread/index.ts +9 -0
  99. package/src/thread/intent.ts +409 -0
  100. package/src/thread/manager.ts +414 -0
  101. package/src/thread/weave.ts +205 -0
  102. package/src/tools/index.ts +107 -0
  103. package/src/types.ts +736 -0
  104. package/tsconfig.json +19 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAEnG,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACjG,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;AACxC,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAEnD,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;AAExF,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,IAA+B,CAAC,CAAC;QACnF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAChF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACxG,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC7C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC;AAC3C,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Dōmere - The Judge Protocol
3
+ * Code Analysis
4
+ */
5
+ import type { CodeAnalysis, DangerousPattern, DataFlow, ExternalCall, LanguageType } from '../types.js';
6
+ export declare class CodeAnalyzer {
7
+ /**
8
+ * Analyze code for security and structure
9
+ */
10
+ analyze(code: string, language: LanguageType): CodeAnalysis;
11
+ /**
12
+ * Detect dangerous code patterns
13
+ */
14
+ detectDangerousPatterns(code: string, language: LanguageType): DangerousPattern[];
15
+ /**
16
+ * Analyze data flows in code
17
+ */
18
+ analyzeDataFlows(code: string, language: LanguageType): DataFlow[];
19
+ /**
20
+ * Detect external calls
21
+ */
22
+ detectExternalCalls(code: string, language: LanguageType): ExternalCall[];
23
+ /**
24
+ * Extract function definitions
25
+ */
26
+ extractFunctions(code: string, language: LanguageType): string[];
27
+ /**
28
+ * Extract class definitions
29
+ */
30
+ extractClasses(code: string, language: LanguageType): string[];
31
+ /**
32
+ * Extract imports
33
+ */
34
+ extractImports(code: string, language: LanguageType): string[];
35
+ /**
36
+ * Extract exports
37
+ */
38
+ extractExports(code: string, language: LanguageType): string[];
39
+ /**
40
+ * Calculate code complexity
41
+ */
42
+ calculateComplexity(code: string): number;
43
+ /**
44
+ * Calculate overall risk level
45
+ */
46
+ private calculateRiskLevel;
47
+ /**
48
+ * Generate recommendations
49
+ */
50
+ private generateRecommendations;
51
+ /**
52
+ * Get line number from character position
53
+ */
54
+ private getLineNumber;
55
+ /**
56
+ * Get column number from character position
57
+ */
58
+ private getColumnNumber;
59
+ /**
60
+ * Get recommendation based on issue
61
+ */
62
+ private getRecommendation;
63
+ /**
64
+ * Check if a data flow is sensitive
65
+ */
66
+ private isSensitiveFlow;
67
+ /**
68
+ * Assess URL risk
69
+ */
70
+ private assessUrlRisk;
71
+ /**
72
+ * Assess SQL query risk
73
+ */
74
+ private assessQueryRisk;
75
+ /**
76
+ * Assess file path risk
77
+ */
78
+ private assessFileRisk;
79
+ }
80
+ //# sourceMappingURL=code-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-analyzer.d.ts","sourceRoot":"","sources":["../../src/language/code-analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,YAAY,EACb,MAAM,aAAa,CAAC;AAOrB,qBAAa,YAAY;IACvB;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,YAAY;IAuB3D;;OAEG;IACH,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,gBAAgB,EAAE;IAoDjF;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,QAAQ,EAAE;IAgGlE;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,YAAY,EAAE;IAkFzE;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE;IA4BhE;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE;IA0B9D;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE;IA0B9D;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE;IAqB9D;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAgCzC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwB/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,cAAc;CASvB"}
@@ -0,0 +1,489 @@
1
+ /**
2
+ * Dōmere - The Judge Protocol
3
+ * Code Analysis
4
+ */
5
+ import { DANGEROUS_CODE_PATTERNS } from '../constants.js';
6
+ // ============================================================================
7
+ // Code Analyzer
8
+ // ============================================================================
9
+ export class CodeAnalyzer {
10
+ /**
11
+ * Analyze code for security and structure
12
+ */
13
+ analyze(code, language) {
14
+ const dangerousPatterns = this.detectDangerousPatterns(code, language);
15
+ const dataFlows = this.analyzeDataFlows(code, language);
16
+ const externalCalls = this.detectExternalCalls(code, language);
17
+ const riskLevel = this.calculateRiskLevel(dangerousPatterns, dataFlows, externalCalls);
18
+ return {
19
+ language,
20
+ functions: this.extractFunctions(code, language),
21
+ classes: this.extractClasses(code, language),
22
+ imports: this.extractImports(code, language),
23
+ exports: this.extractExports(code, language),
24
+ dangerous_patterns: dangerousPatterns,
25
+ data_flows: dataFlows,
26
+ external_calls: externalCalls,
27
+ complexity_score: this.calculateComplexity(code),
28
+ sandbox_required: riskLevel !== 'low',
29
+ risk_level: riskLevel,
30
+ recommendations: this.generateRecommendations(dangerousPatterns, externalCalls),
31
+ };
32
+ }
33
+ /**
34
+ * Detect dangerous code patterns
35
+ */
36
+ detectDangerousPatterns(code, language) {
37
+ const patterns = [];
38
+ // Get language-specific patterns
39
+ const langPatterns = DANGEROUS_CODE_PATTERNS[language];
40
+ if (langPatterns) {
41
+ for (const { pattern, description, severity } of langPatterns) {
42
+ const regex = new RegExp(pattern.source, pattern.flags);
43
+ let match;
44
+ while ((match = regex.exec(code)) !== null) {
45
+ const line = this.getLineNumber(code, match.index);
46
+ const column = this.getColumnNumber(code, match.index);
47
+ patterns.push({
48
+ pattern: match[0],
49
+ description,
50
+ severity,
51
+ line,
52
+ column,
53
+ recommendation: this.getRecommendation(description, severity),
54
+ });
55
+ }
56
+ }
57
+ }
58
+ // Common patterns across languages
59
+ const commonPatterns = [
60
+ { pattern: /password\s*=\s*['"][^'"]+['"]/gi, description: 'Hardcoded password', severity: 'critical' },
61
+ { pattern: /api[_-]?key\s*=\s*['"][^'"]+['"]/gi, description: 'Hardcoded API key', severity: 'critical' },
62
+ { pattern: /secret\s*=\s*['"][^'"]+['"]/gi, description: 'Hardcoded secret', severity: 'critical' },
63
+ { pattern: /TODO|FIXME|HACK|XXX/g, description: 'Code annotation suggesting incomplete work', severity: 'low' },
64
+ ];
65
+ for (const { pattern, description, severity } of commonPatterns) {
66
+ let match;
67
+ while ((match = pattern.exec(code)) !== null) {
68
+ const line = this.getLineNumber(code, match.index);
69
+ patterns.push({
70
+ pattern: match[0].slice(0, 50), // Truncate for security
71
+ description,
72
+ severity,
73
+ line,
74
+ recommendation: this.getRecommendation(description, severity),
75
+ });
76
+ }
77
+ }
78
+ return patterns;
79
+ }
80
+ /**
81
+ * Analyze data flows in code
82
+ */
83
+ analyzeDataFlows(code, language) {
84
+ const flows = [];
85
+ // Detect input -> output flows
86
+ const inputPatterns = {
87
+ javascript: [
88
+ /req\.(body|query|params|headers)/g,
89
+ /process\.env/g,
90
+ /fs\.readFile/g,
91
+ /fetch\s*\(/g,
92
+ ],
93
+ python: [
94
+ /request\.(form|args|json|data)/g,
95
+ /os\.environ/g,
96
+ /open\s*\(/g,
97
+ /requests\.(get|post)/g,
98
+ /input\s*\(/g,
99
+ ],
100
+ sql: [
101
+ /SELECT\s+.*\s+FROM/gi,
102
+ ],
103
+ };
104
+ const outputPatterns = {
105
+ javascript: [
106
+ /res\.(send|json|write)/g,
107
+ /console\.(log|error)/g,
108
+ /fs\.writeFile/g,
109
+ /fetch\s*\(/g,
110
+ ],
111
+ python: [
112
+ /return\s+/g,
113
+ /print\s*\(/g,
114
+ /\.write\s*\(/g,
115
+ /requests\.(get|post)/g,
116
+ ],
117
+ sql: [
118
+ /INSERT\s+INTO/gi,
119
+ /UPDATE\s+/gi,
120
+ ],
121
+ };
122
+ const inputs = inputPatterns[language] || [];
123
+ const outputs = outputPatterns[language] || [];
124
+ const inputMatches = [];
125
+ const outputMatches = [];
126
+ for (const pattern of inputs) {
127
+ const matches = code.match(pattern);
128
+ if (matches)
129
+ inputMatches.push(...matches);
130
+ }
131
+ for (const pattern of outputs) {
132
+ const matches = code.match(pattern);
133
+ if (matches)
134
+ outputMatches.push(...matches);
135
+ }
136
+ // Create flow pairs
137
+ for (const input of inputMatches) {
138
+ for (const output of outputMatches) {
139
+ flows.push({
140
+ source: input,
141
+ destination: output,
142
+ sensitive: this.isSensitiveFlow(input, output),
143
+ });
144
+ }
145
+ }
146
+ // Detect sensitive data patterns
147
+ const sensitivePatterns = [
148
+ /password/i, /secret/i, /token/i, /key/i, /credential/i,
149
+ /ssn/i, /social.*security/i, /credit.*card/i,
150
+ ];
151
+ for (const pattern of sensitivePatterns) {
152
+ if (pattern.test(code)) {
153
+ // Look for where this data goes
154
+ const varPattern = new RegExp(`(\\w+)\\s*=.*${pattern.source}`, 'gi');
155
+ const matches = code.match(varPattern);
156
+ if (matches) {
157
+ for (const match of matches) {
158
+ flows.push({
159
+ source: match,
160
+ destination: 'unknown',
161
+ data_type: pattern.source.replace(/[\\^$*+?.()|[\]{}]/g, ''),
162
+ sensitive: true,
163
+ });
164
+ }
165
+ }
166
+ }
167
+ }
168
+ return flows;
169
+ }
170
+ /**
171
+ * Detect external calls
172
+ */
173
+ detectExternalCalls(code, language) {
174
+ const calls = [];
175
+ // HTTP calls
176
+ const httpPatterns = [
177
+ { pattern: /fetch\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'http' },
178
+ { pattern: /axios\.(get|post|put|delete)\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'http' },
179
+ { pattern: /requests\.(get|post|put|delete)\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'http' },
180
+ { pattern: /http\.(get|post|put|delete)\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'http' },
181
+ { pattern: /curl\s+['"`]?([^\s'"`]+)/g, type: 'http' },
182
+ { pattern: /wget\s+['"`]?([^\s'"`]+)/g, type: 'http' },
183
+ ];
184
+ for (const { pattern, type } of httpPatterns) {
185
+ let match;
186
+ while ((match = pattern.exec(code)) !== null) {
187
+ const url = match[2] || match[1];
188
+ calls.push({
189
+ type,
190
+ target: url,
191
+ method: match[1]?.toUpperCase(),
192
+ risk_level: this.assessUrlRisk(url),
193
+ });
194
+ }
195
+ }
196
+ // Database calls
197
+ const dbPatterns = [
198
+ { pattern: /\.query\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'database' },
199
+ { pattern: /\.execute\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'database' },
200
+ { pattern: /cursor\.execute\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'database' },
201
+ ];
202
+ for (const { pattern, type } of dbPatterns) {
203
+ let match;
204
+ while ((match = pattern.exec(code)) !== null) {
205
+ calls.push({
206
+ type,
207
+ target: match[1].slice(0, 100), // Truncate long queries
208
+ risk_level: this.assessQueryRisk(match[1]),
209
+ });
210
+ }
211
+ }
212
+ // File system calls
213
+ const fsPatterns = [
214
+ { pattern: /(?:fs\.|open\s*\()['"`]([^'"`]+)['"`]/g, type: 'file' },
215
+ { pattern: /(?:readFile|writeFile|appendFile)\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'file' },
216
+ ];
217
+ for (const { pattern, type } of fsPatterns) {
218
+ let match;
219
+ while ((match = pattern.exec(code)) !== null) {
220
+ calls.push({
221
+ type,
222
+ target: match[1],
223
+ risk_level: this.assessFileRisk(match[1]),
224
+ });
225
+ }
226
+ }
227
+ // Process/command execution
228
+ const processPatterns = [
229
+ { pattern: /(?:exec|spawn|system)\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'process' },
230
+ { pattern: /subprocess\.(call|run|Popen)\s*\(\s*\[?['"`]([^'"`]+)['"`]/g, type: 'process' },
231
+ { pattern: /os\.system\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'process' },
232
+ ];
233
+ for (const { pattern, type } of processPatterns) {
234
+ let match;
235
+ while ((match = pattern.exec(code)) !== null) {
236
+ calls.push({
237
+ type,
238
+ target: match[1] || match[2],
239
+ risk_level: 'high',
240
+ });
241
+ }
242
+ }
243
+ return calls;
244
+ }
245
+ /**
246
+ * Extract function definitions
247
+ */
248
+ extractFunctions(code, language) {
249
+ const functions = [];
250
+ const patterns = {
251
+ javascript: /(?:function\s+(\w+)|(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s+)?(?:\([^)]*\)|[^=])\s*=>|(\w+)\s*:\s*(?:async\s+)?function)/g,
252
+ typescript: /(?:function\s+(\w+)|(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s+)?(?:\([^)]*\)|[^=])\s*=>|(\w+)\s*:\s*(?:async\s+)?function)/g,
253
+ python: /def\s+(\w+)\s*\(/g,
254
+ java: /(?:public|private|protected)?\s*(?:static\s+)?(?:\w+\s+)+(\w+)\s*\([^)]*\)\s*(?:throws\s+\w+\s*)?{/g,
255
+ go: /func\s+(?:\([^)]+\)\s+)?(\w+)\s*\(/g,
256
+ rust: /fn\s+(\w+)\s*[<(]/g,
257
+ ruby: /def\s+(\w+)/g,
258
+ php: /function\s+(\w+)\s*\(/g,
259
+ };
260
+ const pattern = patterns[language];
261
+ if (pattern) {
262
+ let match;
263
+ while ((match = pattern.exec(code)) !== null) {
264
+ const name = match[1] || match[2] || match[3];
265
+ if (name && !functions.includes(name)) {
266
+ functions.push(name);
267
+ }
268
+ }
269
+ }
270
+ return functions;
271
+ }
272
+ /**
273
+ * Extract class definitions
274
+ */
275
+ extractClasses(code, language) {
276
+ const classes = [];
277
+ const patterns = {
278
+ javascript: /class\s+(\w+)/g,
279
+ typescript: /class\s+(\w+)/g,
280
+ python: /class\s+(\w+)/g,
281
+ java: /class\s+(\w+)/g,
282
+ csharp: /class\s+(\w+)/g,
283
+ ruby: /class\s+(\w+)/g,
284
+ php: /class\s+(\w+)/g,
285
+ };
286
+ const pattern = patterns[language];
287
+ if (pattern) {
288
+ let match;
289
+ while ((match = pattern.exec(code)) !== null) {
290
+ if (!classes.includes(match[1])) {
291
+ classes.push(match[1]);
292
+ }
293
+ }
294
+ }
295
+ return classes;
296
+ }
297
+ /**
298
+ * Extract imports
299
+ */
300
+ extractImports(code, language) {
301
+ const imports = [];
302
+ const patterns = {
303
+ javascript: /(?:import\s+.*\s+from\s+['"]([^'"]+)['"]|require\s*\(\s*['"]([^'"]+)['"]\s*\))/g,
304
+ typescript: /(?:import\s+.*\s+from\s+['"]([^'"]+)['"]|require\s*\(\s*['"]([^'"]+)['"]\s*\))/g,
305
+ python: /(?:import\s+(\w+)|from\s+(\w+)\s+import)/g,
306
+ java: /import\s+([\w.]+);/g,
307
+ go: /import\s+(?:\(\s*)?["']([^"']+)["']/g,
308
+ rust: /use\s+([\w:]+)/g,
309
+ };
310
+ const pattern = patterns[language];
311
+ if (pattern) {
312
+ let match;
313
+ while ((match = pattern.exec(code)) !== null) {
314
+ const imp = match[1] || match[2];
315
+ if (imp && !imports.includes(imp)) {
316
+ imports.push(imp);
317
+ }
318
+ }
319
+ }
320
+ return imports;
321
+ }
322
+ /**
323
+ * Extract exports
324
+ */
325
+ extractExports(code, language) {
326
+ const exports = [];
327
+ const patterns = {
328
+ javascript: /export\s+(?:default\s+)?(?:class|function|const|let|var|interface|type)?\s*(\w+)/g,
329
+ typescript: /export\s+(?:default\s+)?(?:class|function|const|let|var|interface|type)?\s*(\w+)/g,
330
+ };
331
+ const pattern = patterns[language];
332
+ if (pattern) {
333
+ let match;
334
+ while ((match = pattern.exec(code)) !== null) {
335
+ if (match[1] && !exports.includes(match[1])) {
336
+ exports.push(match[1]);
337
+ }
338
+ }
339
+ }
340
+ return exports;
341
+ }
342
+ /**
343
+ * Calculate code complexity
344
+ */
345
+ calculateComplexity(code) {
346
+ let complexity = 1; // Base complexity
347
+ // Count decision points
348
+ const decisionPatterns = [
349
+ /\bif\b/g,
350
+ /\belse\s+if\b/g,
351
+ /\bwhile\b/g,
352
+ /\bfor\b/g,
353
+ /\bforeach\b/g,
354
+ /\bswitch\b/g,
355
+ /\bcase\b/g,
356
+ /\bcatch\b/g,
357
+ /\?\s*[^:]+\s*:/g, // Ternary
358
+ /&&/g,
359
+ /\|\|/g,
360
+ ];
361
+ for (const pattern of decisionPatterns) {
362
+ const matches = code.match(pattern);
363
+ if (matches) {
364
+ complexity += matches.length;
365
+ }
366
+ }
367
+ // Normalize (0-100 scale)
368
+ const lines = code.split('\n').length;
369
+ const normalizedComplexity = Math.min(100, (complexity / Math.max(1, lines / 10)) * 10);
370
+ return Math.round(normalizedComplexity);
371
+ }
372
+ /**
373
+ * Calculate overall risk level
374
+ */
375
+ calculateRiskLevel(patterns, flows, calls) {
376
+ const criticalPatterns = patterns.filter(p => p.severity === 'critical').length;
377
+ const highPatterns = patterns.filter(p => p.severity === 'high').length;
378
+ const sensitiveFlows = flows.filter(f => f.sensitive).length;
379
+ const highRiskCalls = calls.filter(c => c.risk_level === 'high').length;
380
+ if (criticalPatterns > 0)
381
+ return 'critical';
382
+ if (highPatterns > 2 || sensitiveFlows > 2 || highRiskCalls > 1)
383
+ return 'high';
384
+ if (highPatterns > 0 || sensitiveFlows > 0 || highRiskCalls > 0)
385
+ return 'medium';
386
+ return 'low';
387
+ }
388
+ /**
389
+ * Generate recommendations
390
+ */
391
+ generateRecommendations(patterns, calls) {
392
+ const recommendations = [];
393
+ for (const pattern of patterns) {
394
+ if (pattern.recommendation && !recommendations.includes(pattern.recommendation)) {
395
+ recommendations.push(pattern.recommendation);
396
+ }
397
+ }
398
+ if (calls.some(c => c.type === 'process')) {
399
+ recommendations.push('Review process execution calls for potential command injection');
400
+ }
401
+ if (calls.some(c => c.type === 'database')) {
402
+ recommendations.push('Ensure database queries use parameterized statements');
403
+ }
404
+ if (calls.some(c => c.type === 'file')) {
405
+ recommendations.push('Validate file paths to prevent directory traversal');
406
+ }
407
+ return recommendations.slice(0, 5);
408
+ }
409
+ /**
410
+ * Get line number from character position
411
+ */
412
+ getLineNumber(code, position) {
413
+ return code.slice(0, position).split('\n').length;
414
+ }
415
+ /**
416
+ * Get column number from character position
417
+ */
418
+ getColumnNumber(code, position) {
419
+ const lines = code.slice(0, position).split('\n');
420
+ return lines[lines.length - 1].length + 1;
421
+ }
422
+ /**
423
+ * Get recommendation based on issue
424
+ */
425
+ getRecommendation(description, severity) {
426
+ const recommendations = {
427
+ 'eval': 'Avoid eval() - use safer alternatives like JSON.parse() or specific parsers',
428
+ 'exec': 'Avoid direct command execution - use libraries with proper escaping',
429
+ 'sql injection': 'Use parameterized queries or an ORM',
430
+ 'password': 'Move credentials to environment variables or a secrets manager',
431
+ 'api key': 'Move API keys to environment variables or a secrets manager',
432
+ };
433
+ for (const [key, rec] of Object.entries(recommendations)) {
434
+ if (description.toLowerCase().includes(key)) {
435
+ return rec;
436
+ }
437
+ }
438
+ return severity === 'critical'
439
+ ? 'Review this pattern carefully before deployment'
440
+ : 'Consider reviewing this pattern';
441
+ }
442
+ /**
443
+ * Check if a data flow is sensitive
444
+ */
445
+ isSensitiveFlow(source, destination) {
446
+ const sensitiveTerms = ['password', 'secret', 'token', 'key', 'credential', 'auth'];
447
+ const combined = (source + destination).toLowerCase();
448
+ return sensitiveTerms.some(term => combined.includes(term));
449
+ }
450
+ /**
451
+ * Assess URL risk
452
+ */
453
+ assessUrlRisk(url) {
454
+ // External URLs are higher risk
455
+ if (url.startsWith('http://'))
456
+ return 'high'; // Insecure
457
+ if (url.includes('localhost') || url.includes('127.0.0.1'))
458
+ return 'low';
459
+ if (url.startsWith('/'))
460
+ return 'low'; // Relative
461
+ return 'medium';
462
+ }
463
+ /**
464
+ * Assess SQL query risk
465
+ */
466
+ assessQueryRisk(query) {
467
+ const queryUpper = query.toUpperCase();
468
+ if (queryUpper.includes('DROP') || queryUpper.includes('DELETE') || queryUpper.includes('TRUNCATE')) {
469
+ return 'high';
470
+ }
471
+ if (queryUpper.includes('UPDATE') || queryUpper.includes('INSERT')) {
472
+ return 'medium';
473
+ }
474
+ return 'low';
475
+ }
476
+ /**
477
+ * Assess file path risk
478
+ */
479
+ assessFileRisk(path) {
480
+ if (path.includes('..') || path.startsWith('/etc') || path.startsWith('/var')) {
481
+ return 'high';
482
+ }
483
+ if (path.startsWith('/')) {
484
+ return 'medium';
485
+ }
486
+ return 'low';
487
+ }
488
+ }
489
+ //# sourceMappingURL=code-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-analyzer.js","sourceRoot":"","sources":["../../src/language/code-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Dōmere - The Judge Protocol
3
+ * Language Detection
4
+ */
5
+ import type { LanguageAnalysis, DetectedLanguage, LanguageType } from '../types.js';
6
+ export declare class LanguageDetector {
7
+ /**
8
+ * Detect the primary language(s) in content
9
+ */
10
+ detect(content: string): LanguageAnalysis;
11
+ /**
12
+ * Detect all languages present in content
13
+ */
14
+ detectLanguages(content: string): DetectedLanguage[];
15
+ /**
16
+ * Detect a specific language in content
17
+ */
18
+ private detectLanguage;
19
+ /**
20
+ * Check if content is likely natural language (not code)
21
+ */
22
+ private isLikelyNaturalLanguage;
23
+ /**
24
+ * Determine the primary language
25
+ */
26
+ private determinePrimaryLanguage;
27
+ /**
28
+ * Merge overlapping segments
29
+ */
30
+ private mergeSegments;
31
+ /**
32
+ * Escape regex special characters
33
+ */
34
+ private escapeRegex;
35
+ /**
36
+ * Check if content is a specific language type
37
+ */
38
+ isLanguage(content: string, language: LanguageType): boolean;
39
+ /**
40
+ * Check if content contains code
41
+ */
42
+ containsCode(content: string): boolean;
43
+ /**
44
+ * Extract code blocks from content
45
+ */
46
+ extractCodeBlocks(content: string): {
47
+ language: string;
48
+ code: string;
49
+ start: number;
50
+ end: number;
51
+ }[];
52
+ }
53
+ //# sourceMappingURL=detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/language/detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAEhB,YAAY,EACb,MAAM,aAAa,CAAC;AAOrB,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB;IAWzC;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAgEpD;;OAEG;IACH,OAAO,CAAC,cAAc;IAsDtB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAchC;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO;IAK5D;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAetC;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE;CAqCrG"}