@nahisaho/katashiro-analyzer 0.2.2 → 0.2.4

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 (153) hide show
  1. package/dist/factcheck/ClaimParser.d.ts +41 -0
  2. package/dist/factcheck/ClaimParser.d.ts.map +1 -0
  3. package/dist/factcheck/ClaimParser.js +149 -0
  4. package/dist/factcheck/ClaimParser.js.map +1 -0
  5. package/dist/factcheck/ConsistencyChecker.d.ts +56 -0
  6. package/dist/factcheck/ConsistencyChecker.d.ts.map +1 -0
  7. package/dist/factcheck/ConsistencyChecker.js +184 -0
  8. package/dist/factcheck/ConsistencyChecker.js.map +1 -0
  9. package/dist/factcheck/EvidenceCollector.d.ts +89 -0
  10. package/dist/factcheck/EvidenceCollector.d.ts.map +1 -0
  11. package/dist/factcheck/EvidenceCollector.js +222 -0
  12. package/dist/factcheck/EvidenceCollector.js.map +1 -0
  13. package/dist/factcheck/FactChecker.d.ts +81 -0
  14. package/dist/factcheck/FactChecker.d.ts.map +1 -0
  15. package/dist/factcheck/FactChecker.js +302 -0
  16. package/dist/factcheck/FactChecker.js.map +1 -0
  17. package/dist/factcheck/TrustedSourceRegistry.d.ts +47 -0
  18. package/dist/factcheck/TrustedSourceRegistry.d.ts.map +1 -0
  19. package/dist/factcheck/TrustedSourceRegistry.js +208 -0
  20. package/dist/factcheck/TrustedSourceRegistry.js.map +1 -0
  21. package/dist/factcheck/VerdictGenerator.d.ts +36 -0
  22. package/dist/factcheck/VerdictGenerator.d.ts.map +1 -0
  23. package/dist/factcheck/VerdictGenerator.js +154 -0
  24. package/dist/factcheck/VerdictGenerator.js.map +1 -0
  25. package/dist/factcheck/index.d.ts +15 -0
  26. package/dist/factcheck/index.d.ts.map +1 -0
  27. package/dist/factcheck/index.js +14 -0
  28. package/dist/factcheck/index.js.map +1 -0
  29. package/dist/factcheck/types.d.ts +265 -0
  30. package/dist/factcheck/types.d.ts.map +1 -0
  31. package/dist/factcheck/types.js +18 -0
  32. package/dist/factcheck/types.js.map +1 -0
  33. package/dist/index.d.ts +5 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +10 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/interpreter/CodeInterpreter.d.ts +119 -0
  38. package/dist/interpreter/CodeInterpreter.d.ts.map +1 -0
  39. package/dist/interpreter/CodeInterpreter.js +241 -0
  40. package/dist/interpreter/CodeInterpreter.js.map +1 -0
  41. package/dist/interpreter/CodeValidator.d.ts +57 -0
  42. package/dist/interpreter/CodeValidator.d.ts.map +1 -0
  43. package/dist/interpreter/CodeValidator.js +283 -0
  44. package/dist/interpreter/CodeValidator.js.map +1 -0
  45. package/dist/interpreter/ExecutionEngine.d.ts +73 -0
  46. package/dist/interpreter/ExecutionEngine.d.ts.map +1 -0
  47. package/dist/interpreter/ExecutionEngine.js +273 -0
  48. package/dist/interpreter/ExecutionEngine.js.map +1 -0
  49. package/dist/interpreter/ResultFormatter.d.ts +72 -0
  50. package/dist/interpreter/ResultFormatter.d.ts.map +1 -0
  51. package/dist/interpreter/ResultFormatter.js +187 -0
  52. package/dist/interpreter/ResultFormatter.js.map +1 -0
  53. package/dist/interpreter/SandboxManager.d.ts +111 -0
  54. package/dist/interpreter/SandboxManager.d.ts.map +1 -0
  55. package/dist/interpreter/SandboxManager.js +215 -0
  56. package/dist/interpreter/SandboxManager.js.map +1 -0
  57. package/dist/interpreter/SessionManager.d.ts +101 -0
  58. package/dist/interpreter/SessionManager.d.ts.map +1 -0
  59. package/dist/interpreter/SessionManager.js +184 -0
  60. package/dist/interpreter/SessionManager.js.map +1 -0
  61. package/dist/interpreter/index.d.ts +13 -0
  62. package/dist/interpreter/index.d.ts.map +1 -0
  63. package/dist/interpreter/index.js +13 -0
  64. package/dist/interpreter/index.js.map +1 -0
  65. package/dist/interpreter/types.d.ts +311 -0
  66. package/dist/interpreter/types.d.ts.map +1 -0
  67. package/dist/interpreter/types.js +91 -0
  68. package/dist/interpreter/types.js.map +1 -0
  69. package/dist/moa/AgentOrchestrator.d.ts +53 -0
  70. package/dist/moa/AgentOrchestrator.d.ts.map +1 -0
  71. package/dist/moa/AgentOrchestrator.js +164 -0
  72. package/dist/moa/AgentOrchestrator.js.map +1 -0
  73. package/dist/moa/ConsensusCalculator.d.ts +76 -0
  74. package/dist/moa/ConsensusCalculator.d.ts.map +1 -0
  75. package/dist/moa/ConsensusCalculator.js +221 -0
  76. package/dist/moa/ConsensusCalculator.js.map +1 -0
  77. package/dist/moa/MoAEngine.d.ts +97 -0
  78. package/dist/moa/MoAEngine.d.ts.map +1 -0
  79. package/dist/moa/MoAEngine.js +303 -0
  80. package/dist/moa/MoAEngine.js.map +1 -0
  81. package/dist/moa/ResponseAggregator.d.ts +65 -0
  82. package/dist/moa/ResponseAggregator.d.ts.map +1 -0
  83. package/dist/moa/ResponseAggregator.js +274 -0
  84. package/dist/moa/ResponseAggregator.js.map +1 -0
  85. package/dist/moa/TaskAnalyzer.d.ts +30 -0
  86. package/dist/moa/TaskAnalyzer.d.ts.map +1 -0
  87. package/dist/moa/TaskAnalyzer.js +116 -0
  88. package/dist/moa/TaskAnalyzer.js.map +1 -0
  89. package/dist/moa/index.d.ts +19 -0
  90. package/dist/moa/index.d.ts.map +1 -0
  91. package/dist/moa/index.js +18 -0
  92. package/dist/moa/index.js.map +1 -0
  93. package/dist/moa/types.d.ts +261 -0
  94. package/dist/moa/types.d.ts.map +1 -0
  95. package/dist/moa/types.js +70 -0
  96. package/dist/moa/types.js.map +1 -0
  97. package/dist/research/ConvergenceDetector.d.ts +37 -0
  98. package/dist/research/ConvergenceDetector.d.ts.map +1 -0
  99. package/dist/research/ConvergenceDetector.js +62 -0
  100. package/dist/research/ConvergenceDetector.js.map +1 -0
  101. package/dist/research/DeepResearchOrchestrator.d.ts +63 -0
  102. package/dist/research/DeepResearchOrchestrator.d.ts.map +1 -0
  103. package/dist/research/DeepResearchOrchestrator.js +283 -0
  104. package/dist/research/DeepResearchOrchestrator.js.map +1 -0
  105. package/dist/research/FindingIntegrator.d.ts +42 -0
  106. package/dist/research/FindingIntegrator.d.ts.map +1 -0
  107. package/dist/research/FindingIntegrator.js +239 -0
  108. package/dist/research/FindingIntegrator.js.map +1 -0
  109. package/dist/research/GapAnalyzer.d.ts +41 -0
  110. package/dist/research/GapAnalyzer.d.ts.map +1 -0
  111. package/dist/research/GapAnalyzer.js +145 -0
  112. package/dist/research/GapAnalyzer.js.map +1 -0
  113. package/dist/research/QueryGenerator.d.ts +38 -0
  114. package/dist/research/QueryGenerator.d.ts.map +1 -0
  115. package/dist/research/QueryGenerator.js +79 -0
  116. package/dist/research/QueryGenerator.js.map +1 -0
  117. package/dist/research/index.d.ts +14 -0
  118. package/dist/research/index.d.ts.map +1 -0
  119. package/dist/research/index.js +13 -0
  120. package/dist/research/index.js.map +1 -0
  121. package/dist/research/types.d.ts +215 -0
  122. package/dist/research/types.d.ts.map +1 -0
  123. package/dist/research/types.js +18 -0
  124. package/dist/research/types.js.map +1 -0
  125. package/dist/trend/ForecastEngine.d.ts +65 -0
  126. package/dist/trend/ForecastEngine.d.ts.map +1 -0
  127. package/dist/trend/ForecastEngine.js +260 -0
  128. package/dist/trend/ForecastEngine.js.map +1 -0
  129. package/dist/trend/TimeSeriesCollector.d.ts +42 -0
  130. package/dist/trend/TimeSeriesCollector.d.ts.map +1 -0
  131. package/dist/trend/TimeSeriesCollector.js +172 -0
  132. package/dist/trend/TimeSeriesCollector.js.map +1 -0
  133. package/dist/trend/TrendAnalyzer.d.ts +72 -0
  134. package/dist/trend/TrendAnalyzer.d.ts.map +1 -0
  135. package/dist/trend/TrendAnalyzer.js +291 -0
  136. package/dist/trend/TrendAnalyzer.js.map +1 -0
  137. package/dist/trend/TrendDetector.d.ts +67 -0
  138. package/dist/trend/TrendDetector.d.ts.map +1 -0
  139. package/dist/trend/TrendDetector.js +325 -0
  140. package/dist/trend/TrendDetector.js.map +1 -0
  141. package/dist/trend/VisualizationGenerator.d.ts +75 -0
  142. package/dist/trend/VisualizationGenerator.d.ts.map +1 -0
  143. package/dist/trend/VisualizationGenerator.js +294 -0
  144. package/dist/trend/VisualizationGenerator.js.map +1 -0
  145. package/dist/trend/index.d.ts +16 -0
  146. package/dist/trend/index.d.ts.map +1 -0
  147. package/dist/trend/index.js +18 -0
  148. package/dist/trend/index.js.map +1 -0
  149. package/dist/trend/types.d.ts +279 -0
  150. package/dist/trend/types.d.ts.map +1 -0
  151. package/dist/trend/types.js +17 -0
  152. package/dist/trend/types.js.map +1 -0
  153. package/package.json +4 -2
@@ -0,0 +1,241 @@
1
+ /**
2
+ * Code Interpreter
3
+ * メインオーケストレータークラス
4
+ * REQ-ANALYZE-009: コードインタープリタ機能
5
+ */
6
+ import { ok, err } from '@nahisaho/katashiro-core';
7
+ import { DEFAULT_EXECUTION_CONFIG, CodeInterpreterError, INTERPRETER_ERROR_CODES, } from './types.js';
8
+ import { CodeValidator } from './CodeValidator.js';
9
+ import { SandboxManager } from './SandboxManager.js';
10
+ import { ExecutionEngine } from './ExecutionEngine.js';
11
+ import { ResultFormatter } from './ResultFormatter.js';
12
+ import { SessionManager } from './SessionManager.js';
13
+ /**
14
+ * Code Interpreter
15
+ *
16
+ * サンドボックス環境でコードを安全に実行する。
17
+ * Python, JavaScript, TypeScript, Shell をサポート。
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const interpreter = new CodeInterpreter();
22
+ *
23
+ * // Pythonコードの実行
24
+ * const result = await interpreter.execute({
25
+ * code: `
26
+ * numbers = [1, 2, 3, 4, 5]
27
+ * print(f"Sum: {sum(numbers)}")
28
+ * print(f"Average: {sum(numbers) / len(numbers)}")
29
+ * `,
30
+ * language: 'python',
31
+ * });
32
+ *
33
+ * if (isOk(result) && result.value.success) {
34
+ * console.log(result.value.stdout);
35
+ * // "Sum: 15"
36
+ * // "Average: 3.0"
37
+ * }
38
+ *
39
+ * // データ可視化
40
+ * const vizResult = await interpreter.execute({
41
+ * code: `
42
+ * import matplotlib.pyplot as plt
43
+ * import numpy as np
44
+ *
45
+ * x = np.linspace(0, 2 * np.pi, 100)
46
+ * plt.plot(x, np.sin(x))
47
+ * plt.savefig('sine_wave.png')
48
+ * `,
49
+ * language: 'python',
50
+ * });
51
+ *
52
+ * // 入力データを渡す
53
+ * const dataResult = await interpreter.execute({
54
+ * code: `
55
+ * import json
56
+ * data = json.loads(input_data)
57
+ * total = sum(item['price'] * item['quantity'] for item in data['items'])
58
+ * print(f"Total: ${total:.2f}")
59
+ * `,
60
+ * language: 'python',
61
+ * inputs: {
62
+ * input_data: JSON.stringify({
63
+ * items: [
64
+ * { name: 'Apple', price: 1.5, quantity: 3 },
65
+ * { name: 'Banana', price: 0.8, quantity: 5 },
66
+ * ],
67
+ * }),
68
+ * },
69
+ * });
70
+ * ```
71
+ */
72
+ export class CodeInterpreter {
73
+ validator;
74
+ sandboxManager;
75
+ executionEngine;
76
+ resultFormatter;
77
+ sessionManager;
78
+ constructor() {
79
+ this.validator = new CodeValidator();
80
+ this.sandboxManager = new SandboxManager();
81
+ this.executionEngine = new ExecutionEngine(this.sandboxManager);
82
+ this.resultFormatter = new ResultFormatter();
83
+ this.sessionManager = new SessionManager();
84
+ }
85
+ /**
86
+ * コードを実行
87
+ */
88
+ async execute(request) {
89
+ const config = {
90
+ ...DEFAULT_EXECUTION_CONFIG,
91
+ ...request,
92
+ };
93
+ const startTime = Date.now();
94
+ const formatOptions = {
95
+ language: config.language,
96
+ startTime,
97
+ packages: config.packages,
98
+ securityConfig: {
99
+ allowNetwork: config.allowNetwork || false,
100
+ allowedHosts: config.allowedHosts || [],
101
+ timeout: config.timeout || DEFAULT_EXECUTION_CONFIG.timeout,
102
+ memoryLimit: config.memoryLimit || DEFAULT_EXECUTION_CONFIG.memoryLimit,
103
+ },
104
+ };
105
+ try {
106
+ // 1. コードを検証
107
+ const validation = this.validator.validate(config.code, config.language);
108
+ if (!validation.valid) {
109
+ return ok(this.resultFormatter.createErrorResult('permission_error', `Code validation failed: ${validation.errors.join(', ')}`, formatOptions));
110
+ }
111
+ // 2. サンドボックスを作成
112
+ const sandbox = await this.sandboxManager.create({
113
+ workDir: '',
114
+ timeout: config.timeout || DEFAULT_EXECUTION_CONFIG.timeout,
115
+ memoryLimit: config.memoryLimit || DEFAULT_EXECUTION_CONFIG.memoryLimit,
116
+ allowNetwork: config.allowNetwork || false,
117
+ allowedHosts: config.allowedHosts || [],
118
+ env: config.env || {},
119
+ });
120
+ try {
121
+ // 3. 入力ファイルを配置
122
+ if (config.inputFiles) {
123
+ for (const file of config.inputFiles) {
124
+ await this.sandboxManager.writeFile(sandbox.id, file.name, file.content);
125
+ }
126
+ }
127
+ // 4. コードを実行
128
+ const execResult = await this.executionEngine.execute(sandbox, config.code, config.language, {
129
+ timeout: config.timeout || DEFAULT_EXECUTION_CONFIG.timeout,
130
+ memoryLimit: config.memoryLimit || DEFAULT_EXECUTION_CONFIG.memoryLimit,
131
+ env: config.env || {},
132
+ inputs: config.inputs,
133
+ });
134
+ // 5. 出力ファイルを収集
135
+ const outputFiles = await this.sandboxManager.collectFiles(sandbox.id);
136
+ // 6. 結果をフォーマット
137
+ const result = this.resultFormatter.format(execResult, outputFiles, formatOptions);
138
+ return ok(result);
139
+ }
140
+ finally {
141
+ // サンドボックスをクリーンアップ
142
+ await this.sandboxManager.destroy(sandbox.id);
143
+ }
144
+ }
145
+ catch (error) {
146
+ return err(error instanceof Error ? error : new Error(String(error)));
147
+ }
148
+ }
149
+ /**
150
+ * REPLセッションを開始
151
+ */
152
+ async startSession(language) {
153
+ try {
154
+ const session = await this.sessionManager.create(language);
155
+ return ok(session);
156
+ }
157
+ catch (error) {
158
+ return err(error instanceof Error ? error : new Error(String(error)));
159
+ }
160
+ }
161
+ /**
162
+ * セッションでコードを実行
163
+ */
164
+ async executeInSession(sessionId, code) {
165
+ const session = this.sessionManager.get(sessionId);
166
+ if (!session) {
167
+ return err(new CodeInterpreterError(INTERPRETER_ERROR_CODES.SESSION_NOT_FOUND, `Session not found: ${sessionId}`));
168
+ }
169
+ // セッションをアクティブ化
170
+ this.sessionManager.activate(sessionId);
171
+ // 実行
172
+ const result = await this.execute({
173
+ code,
174
+ language: session.language,
175
+ mode: 'repl',
176
+ inputs: session.globals,
177
+ });
178
+ // 履歴に追加
179
+ if (result._tag === 'Ok') {
180
+ this.sessionManager.addHistory(sessionId, {
181
+ input: code,
182
+ output: result.value.stdout,
183
+ executedAt: new Date(),
184
+ success: result.value.success,
185
+ });
186
+ }
187
+ return result;
188
+ }
189
+ /**
190
+ * セッションを終了
191
+ */
192
+ async endSession(sessionId) {
193
+ await this.sessionManager.terminate(sessionId);
194
+ }
195
+ /**
196
+ * セッションを取得
197
+ */
198
+ getSession(sessionId) {
199
+ return this.sessionManager.get(sessionId);
200
+ }
201
+ /**
202
+ * アクティブなセッション一覧
203
+ */
204
+ listSessions() {
205
+ return this.sessionManager.listActive();
206
+ }
207
+ /**
208
+ * コードを分析(実行せず)
209
+ */
210
+ async analyze(code, language) {
211
+ const validation = this.validator.validate(code, language);
212
+ const imports = this.validator.extractImports(code, language);
213
+ const complexity = this.validator.calculateComplexity(code);
214
+ return {
215
+ valid: validation.valid,
216
+ issues: [...validation.errors, ...validation.warnings],
217
+ imports,
218
+ complexity,
219
+ };
220
+ }
221
+ /**
222
+ * コードを検証
223
+ */
224
+ validate(code, language) {
225
+ return this.validator.validate(code, language);
226
+ }
227
+ /**
228
+ * サポートされる言語
229
+ */
230
+ getSupportedLanguages() {
231
+ return ['python', 'javascript', 'typescript', 'shell'];
232
+ }
233
+ /**
234
+ * クリーンアップ
235
+ */
236
+ async cleanup() {
237
+ await this.sandboxManager.destroyAll();
238
+ await this.sessionManager.terminateAll();
239
+ }
240
+ }
241
+ //# sourceMappingURL=CodeInterpreter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeInterpreter.js","sourceRoot":"","sources":["../../src/interpreter/CodeInterpreter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Code Validator
3
+ * コードの安全性を検証するクラス
4
+ * REQ-ANALYZE-009: コードインタープリタ機能
5
+ */
6
+ import { SupportedLanguage, ValidationResult } from './types.js';
7
+ /**
8
+ * コードバリデーター
9
+ *
10
+ * コードの安全性を検証し、危険なコードパターンを検出する。
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const validator = new CodeValidator();
15
+ *
16
+ * // Pythonコードの検証
17
+ * const result = validator.validate(`
18
+ * import os # blocked
19
+ * print("hello")
20
+ * `, 'python');
21
+ *
22
+ * console.log(result.valid); // false
23
+ * console.log(result.errors); // ['Blocked module: os']
24
+ * ```
25
+ */
26
+ export declare class CodeValidator {
27
+ private readonly maxCodeLength;
28
+ /**
29
+ * コードを検証
30
+ */
31
+ validate(code: string, language: SupportedLanguage): ValidationResult;
32
+ /**
33
+ * インポートを抽出
34
+ */
35
+ extractImports(code: string, language: SupportedLanguage): string[];
36
+ /**
37
+ * 循環的複雑度を計算
38
+ */
39
+ calculateComplexity(code: string): number;
40
+ /**
41
+ * ブロックされたモジュールかどうかをチェック
42
+ */
43
+ isBlockedModule(moduleName: string, language: SupportedLanguage): boolean;
44
+ /**
45
+ * Pythonコードの検証
46
+ */
47
+ private validatePython;
48
+ /**
49
+ * JavaScript/TypeScriptコードの検証
50
+ */
51
+ private validateJavaScript;
52
+ /**
53
+ * Shellスクリプトの検証
54
+ */
55
+ private validateShell;
56
+ }
57
+ //# sourceMappingURL=CodeValidator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeValidator.d.ts","sourceRoot":"","sources":["../../src/interpreter/CodeValidator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAWpB;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IAExC;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,gBAAgB;IA8BrE;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,MAAM,EAAE;IAyCnE;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IA2BzC;;OAEG;IACH,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,OAAO;IAuBzE;;OAEG;IACH,OAAO,CAAC,cAAc;IA4DtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA6C1B;;OAEG;IACH,OAAO,CAAC,aAAa;CA0CtB"}
@@ -0,0 +1,283 @@
1
+ /**
2
+ * Code Validator
3
+ * コードの安全性を検証するクラス
4
+ * REQ-ANALYZE-009: コードインタープリタ機能
5
+ */
6
+ import { BLOCKED_PYTHON_MODULES, } from './types.js';
7
+ /**
8
+ * コードバリデーター
9
+ *
10
+ * コードの安全性を検証し、危険なコードパターンを検出する。
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const validator = new CodeValidator();
15
+ *
16
+ * // Pythonコードの検証
17
+ * const result = validator.validate(`
18
+ * import os # blocked
19
+ * print("hello")
20
+ * `, 'python');
21
+ *
22
+ * console.log(result.valid); // false
23
+ * console.log(result.errors); // ['Blocked module: os']
24
+ * ```
25
+ */
26
+ export class CodeValidator {
27
+ maxCodeLength = 100000; // 100KB
28
+ /**
29
+ * コードを検証
30
+ */
31
+ validate(code, language) {
32
+ const errors = [];
33
+ const warnings = [];
34
+ // コード長チェック
35
+ if (code.length > this.maxCodeLength) {
36
+ errors.push(`Code exceeds maximum length (${this.maxCodeLength} bytes)`);
37
+ }
38
+ // 言語別チェック
39
+ switch (language) {
40
+ case 'python':
41
+ this.validatePython(code, errors, warnings);
42
+ break;
43
+ case 'javascript':
44
+ case 'typescript':
45
+ this.validateJavaScript(code, errors, warnings);
46
+ break;
47
+ case 'shell':
48
+ this.validateShell(code, errors, warnings);
49
+ break;
50
+ }
51
+ return {
52
+ valid: errors.length === 0,
53
+ errors,
54
+ warnings,
55
+ };
56
+ }
57
+ /**
58
+ * インポートを抽出
59
+ */
60
+ extractImports(code, language) {
61
+ const imports = [];
62
+ if (language === 'python') {
63
+ // import xxx
64
+ const importRegex = /^import\s+([\w.]+)/gm;
65
+ // from xxx import yyy
66
+ const fromRegex = /^from\s+([\w.]+)\s+import/gm;
67
+ let match;
68
+ while ((match = importRegex.exec(code)) !== null) {
69
+ const mod = match[1]?.split('.')[0];
70
+ if (mod)
71
+ imports.push(mod);
72
+ }
73
+ while ((match = fromRegex.exec(code)) !== null) {
74
+ const mod = match[1]?.split('.')[0];
75
+ if (mod)
76
+ imports.push(mod);
77
+ }
78
+ }
79
+ else if (language === 'javascript' || language === 'typescript') {
80
+ // require('xxx')
81
+ const requireRegex = /require\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
82
+ // import xxx from 'yyy'
83
+ const importRegex = /import\s+.*?\s+from\s+['"]([^'"]+)['"]/g;
84
+ // import 'xxx'
85
+ const importOnlyRegex = /import\s+['"]([^'"]+)['"]/g;
86
+ let match;
87
+ while ((match = requireRegex.exec(code)) !== null) {
88
+ if (match[1])
89
+ imports.push(match[1]);
90
+ }
91
+ while ((match = importRegex.exec(code)) !== null) {
92
+ if (match[1])
93
+ imports.push(match[1]);
94
+ }
95
+ while ((match = importOnlyRegex.exec(code)) !== null) {
96
+ if (match[1])
97
+ imports.push(match[1]);
98
+ }
99
+ }
100
+ return [...new Set(imports)];
101
+ }
102
+ /**
103
+ * 循環的複雑度を計算
104
+ */
105
+ calculateComplexity(code) {
106
+ const complexityPatterns = [
107
+ /\bif\s+/g,
108
+ /\belif\s+/g,
109
+ /\belse\s*:/g,
110
+ /\bfor\s+/g,
111
+ /\bwhile\s+/g,
112
+ /\btry\s*:/g,
113
+ /\bexcept\b/g,
114
+ /\bcatch\s*\(/g,
115
+ /\bcase\s+/g,
116
+ /\?\s*:/g, // 三項演算子
117
+ /&&|\|\|/g, // 論理演算子
118
+ ];
119
+ let complexity = 1; // 基本複雑度
120
+ for (const pattern of complexityPatterns) {
121
+ const matches = code.match(pattern);
122
+ if (matches) {
123
+ complexity += matches.length;
124
+ }
125
+ }
126
+ return complexity;
127
+ }
128
+ /**
129
+ * ブロックされたモジュールかどうかをチェック
130
+ */
131
+ isBlockedModule(moduleName, language) {
132
+ if (language === 'python') {
133
+ return BLOCKED_PYTHON_MODULES.includes(moduleName);
134
+ }
135
+ // JavaScript/TypeScript の危険なモジュール
136
+ const blockedJsModules = [
137
+ 'child_process',
138
+ 'fs',
139
+ 'net',
140
+ 'dgram',
141
+ 'cluster',
142
+ 'vm',
143
+ 'worker_threads',
144
+ ];
145
+ if (language === 'javascript' || language === 'typescript') {
146
+ return blockedJsModules.includes(moduleName);
147
+ }
148
+ return false;
149
+ }
150
+ /**
151
+ * Pythonコードの検証
152
+ */
153
+ validatePython(code, errors, warnings) {
154
+ // ブロックされたモジュールのインポートチェック
155
+ for (const module of BLOCKED_PYTHON_MODULES) {
156
+ const importPatterns = [
157
+ new RegExp(`^\\s*import\\s+${module}(?:\\s|$|,)`, 'm'),
158
+ new RegExp(`^\\s*from\\s+${module}\\s+import`, 'm'),
159
+ new RegExp(`__import__\\s*\\(\\s*['"]${module}['"]`, 'm'),
160
+ ];
161
+ for (const pattern of importPatterns) {
162
+ if (pattern.test(code)) {
163
+ errors.push(`Blocked module: ${module}`);
164
+ break;
165
+ }
166
+ }
167
+ }
168
+ // 危険な関数のチェック
169
+ const dangerousFunctions = [
170
+ { pattern: /\beval\s*\(/, name: 'eval()', severity: 'error' },
171
+ { pattern: /\bexec\s*\(/, name: 'exec()', severity: 'error' },
172
+ { pattern: /\bcompile\s*\(/, name: 'compile()', severity: 'warning' },
173
+ { pattern: /\b__import__\s*\(/, name: '__import__()', severity: 'error' },
174
+ {
175
+ pattern: /\bgetattr\s*\(.*,\s*['"]__/,
176
+ name: 'getattr with dunder',
177
+ severity: 'warning',
178
+ },
179
+ {
180
+ pattern: /\bsetattr\s*\(.*,\s*['"]__/,
181
+ name: 'setattr with dunder',
182
+ severity: 'warning',
183
+ },
184
+ ];
185
+ for (const { pattern, name, severity } of dangerousFunctions) {
186
+ if (pattern.test(code)) {
187
+ if (severity === 'error') {
188
+ errors.push(`Blocked function: ${name}`);
189
+ }
190
+ else {
191
+ warnings.push(`Potentially dangerous function: ${name}`);
192
+ }
193
+ }
194
+ }
195
+ // ファイル操作のチェック
196
+ if (/\bopen\s*\(/.test(code)) {
197
+ warnings.push('File operation detected: open()');
198
+ }
199
+ // グローバル変数アクセスのチェック
200
+ if (/\bglobals\s*\(\)/.test(code) || /\blocals\s*\(\)/.test(code)) {
201
+ warnings.push('Global/local scope access detected');
202
+ }
203
+ }
204
+ /**
205
+ * JavaScript/TypeScriptコードの検証
206
+ */
207
+ validateJavaScript(code, errors, warnings) {
208
+ // 危険なグローバルオブジェクトのチェック
209
+ const dangerousGlobals = [
210
+ 'process',
211
+ 'child_process',
212
+ 'fs',
213
+ 'net',
214
+ 'http',
215
+ 'https',
216
+ 'dgram',
217
+ 'cluster',
218
+ ];
219
+ for (const global of dangerousGlobals) {
220
+ if (new RegExp(`\\b${global}\\b`).test(code)) {
221
+ warnings.push(`Potentially dangerous global: ${global}`);
222
+ }
223
+ }
224
+ // eval/Functionのチェック
225
+ if (/\beval\s*\(/.test(code)) {
226
+ errors.push('Dynamic code execution is blocked: eval()');
227
+ }
228
+ if (/\bnew\s+Function\s*\(/.test(code)) {
229
+ errors.push('Dynamic code execution is blocked: new Function()');
230
+ }
231
+ // require のチェック
232
+ const requireMatches = code.match(/require\s*\(\s*['"]([^'"]+)['"]\s*\)/g);
233
+ if (requireMatches) {
234
+ for (const match of requireMatches) {
235
+ const moduleMatch = match.match(/['"]([^'"]+)['"]/);
236
+ const moduleName = moduleMatch?.[1];
237
+ if (moduleName && this.isBlockedModule(moduleName, 'javascript')) {
238
+ errors.push(`Blocked module: ${moduleName}`);
239
+ }
240
+ }
241
+ }
242
+ }
243
+ /**
244
+ * Shellスクリプトの検証
245
+ */
246
+ validateShell(code, errors, warnings) {
247
+ // 危険なコマンドのチェック
248
+ const dangerousCommands = [
249
+ { pattern: /\brm\s+-rf/, name: 'rm -rf', severity: 'error' },
250
+ { pattern: /\brm\s+.*\/\*/, name: 'rm with wildcard', severity: 'error' },
251
+ { pattern: /\bsudo\b/, name: 'sudo', severity: 'error' },
252
+ { pattern: /\bsu\b/, name: 'su', severity: 'error' },
253
+ { pattern: /\bchmod\s+777/, name: 'chmod 777', severity: 'error' },
254
+ { pattern: /\bchown\b/, name: 'chown', severity: 'warning' },
255
+ { pattern: /\bcurl\b.*\|\s*bash/, name: 'curl | bash', severity: 'error' },
256
+ { pattern: /\bwget\b.*\|\s*bash/, name: 'wget | bash', severity: 'error' },
257
+ { pattern: /\bnc\b|\bnetcat\b/, name: 'netcat', severity: 'error' },
258
+ { pattern: />\s*\/dev\//, name: 'device write', severity: 'error' },
259
+ { pattern: /\bmkfs\b/, name: 'mkfs', severity: 'error' },
260
+ { pattern: /\bdd\s+if=/, name: 'dd', severity: 'error' },
261
+ { pattern: /:()\s*{\s*:\s*\|/, name: 'fork bomb', severity: 'error' },
262
+ ];
263
+ for (const { pattern, name, severity } of dangerousCommands) {
264
+ if (pattern.test(code)) {
265
+ if (severity === 'error') {
266
+ errors.push(`Blocked command: ${name}`);
267
+ }
268
+ else {
269
+ warnings.push(`Potentially dangerous command: ${name}`);
270
+ }
271
+ }
272
+ }
273
+ // パイプとリダイレクトのチェック
274
+ if (/\|.*\|.*\|/.test(code)) {
275
+ warnings.push('Multiple pipes detected');
276
+ }
277
+ // バックグラウンド実行のチェック
278
+ if (/&\s*$/.test(code)) {
279
+ warnings.push('Background execution detected');
280
+ }
281
+ }
282
+ }
283
+ //# sourceMappingURL=CodeValidator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodeValidator.js","sourceRoot":"","sources":["../../src/interpreter/CodeValidator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAWpB;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,aAAa;IACP,aAAa,GAAG,MAAM,CAAC,CAAC,QAAQ;IAEjD;;OAEG;IACH,QAAQ,CAAC,IAAY,EAAE,QAA2B;QAChD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,WAAW;QACX,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,gCAAgC,IAAI,CAAC,aAAa,SAAS,CAAC,CAAC;QAC3E,CAAC;QAED,UAAU;QACV,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,QAAQ;gBACX,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC5C,MAAM;YACR,KAAK,YAAY,CAAC;YAClB,KAAK,YAAY;gBACf,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAChD,MAAM;YACR,KAAK,OAAO;gBACV,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;gBAC3C,MAAM;QACV,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;YACN,QAAQ;SACT,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,IAAY,EAAE,QAA2B;QACtD,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,aAAa;YACb,MAAM,WAAW,GAAG,sBAAsB,CAAC;YAC3C,sBAAsB;YACtB,MAAM,SAAS,GAAG,6BAA6B,CAAC;YAEhD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACjD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,GAAG;oBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;YACD,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAC/C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,GAAG;oBAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;aAAM,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAClE,iBAAiB;YACjB,MAAM,YAAY,GAAG,uCAAuC,CAAC;YAC7D,wBAAwB;YACxB,MAAM,WAAW,GAAG,yCAAyC,CAAC;YAC9D,eAAe;YACf,MAAM,eAAe,GAAG,4BAA4B,CAAC;YAErD,IAAI,KAAK,CAAC;YACV,OAAO,CAAC,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBAClD,IAAI,KAAK,CAAC,CAAC,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACjD,IAAI,KAAK,CAAC,CAAC,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC;YACD,OAAO,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;gBACrD,IAAI,KAAK,CAAC,CAAC,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,IAAY;QAC9B,MAAM,kBAAkB,GAAG;YACzB,UAAU;YACV,YAAY;YACZ,aAAa;YACb,WAAW;YACX,aAAa;YACb,YAAY;YACZ,aAAa;YACb,eAAe;YACf,YAAY;YACZ,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,QAAQ;SACrB,CAAC;QAEF,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,QAAQ;QAE5B,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpC,IAAI,OAAO,EAAE,CAAC;gBACZ,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,UAAkB,EAAE,QAA2B;QAC7D,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,sBAAsB,CAAC,QAAQ,CAAC,UAAiB,CAAC,CAAC;QAC5D,CAAC;QAED,kCAAkC;QAClC,MAAM,gBAAgB,GAAG;YACvB,eAAe;YACf,IAAI;YACJ,KAAK;YACL,OAAO;YACP,SAAS;YACT,IAAI;YACJ,gBAAgB;SACjB,CAAC;QAEF,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,YAAY,EAAE,CAAC;YAC3D,OAAO,gBAAgB,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACK,cAAc,CACpB,IAAY,EACZ,MAAgB,EAChB,QAAkB;QAElB,yBAAyB;QACzB,KAAK,MAAM,MAAM,IAAI,sBAAsB,EAAE,CAAC;YAC5C,MAAM,cAAc,GAAG;gBACrB,IAAI,MAAM,CAAC,kBAAkB,MAAM,aAAa,EAAE,GAAG,CAAC;gBACtD,IAAI,MAAM,CAAC,gBAAgB,MAAM,YAAY,EAAE,GAAG,CAAC;gBACnD,IAAI,MAAM,CAAC,4BAA4B,MAAM,MAAM,EAAE,GAAG,CAAC;aAC1D,CAAC;YAEF,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;gBACrC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;oBACvB,MAAM,CAAC,IAAI,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;oBACzC,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,aAAa;QACb,MAAM,kBAAkB,GAAuB;YAC7C,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE;YAC7D,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE;YAC7D,EAAE,OAAO,EAAE,gBAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE;YACrE,EAAE,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE;YACzE;gBACE,OAAO,EAAE,4BAA4B;gBACrC,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,SAAS;aACpB;YACD;gBACE,OAAO,EAAE,4BAA4B;gBACrC,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,SAAS;aACpB;SACF,CAAC;QAEF,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,kBAAkB,EAAE,CAAC;YAC7D,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;oBACzB,MAAM,CAAC,IAAI,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;gBAC3C,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,IAAI,CAAC,mCAAmC,IAAI,EAAE,CAAC,CAAC;gBAC3D,CAAC;YACH,CAAC;QACH,CAAC;QAED,cAAc;QACd,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QACnD,CAAC;QAED,mBAAmB;QACnB,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClE,QAAQ,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED;;OAEG;IACK,kBAAkB,CACxB,IAAY,EACZ,MAAgB,EAChB,QAAkB;QAElB,sBAAsB;QACtB,MAAM,gBAAgB,GAAG;YACvB,SAAS;YACT,eAAe;YACf,IAAI;YACJ,KAAK;YACL,MAAM;YACN,OAAO;YACP,OAAO;YACP,SAAS;SACV,CAAC;QAEF,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;YACtC,IAAI,IAAI,MAAM,CAAC,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC7C,QAAQ,CAAC,IAAI,CAAC,iCAAiC,MAAM,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACnE,CAAC;QAED,gBAAgB;QAChB,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAC3E,IAAI,cAAc,EAAE,CAAC;YACnB,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;gBACnC,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;gBACpD,MAAM,UAAU,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC;gBACpC,IAAI,UAAU,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE,CAAC;oBACjE,MAAM,CAAC,IAAI,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC;gBAC/C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CACnB,IAAY,EACZ,MAAgB,EAChB,QAAkB;QAElB,eAAe;QACf,MAAM,iBAAiB,GAAuB;YAC5C,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE;YAC5D,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,OAAO,EAAE;YACzE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE;YACxD,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;YACpD,EAAE,OAAO,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE;YAClE,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE;YAC5D,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE;YAC1E,EAAE,OAAO,EAAE,qBAAqB,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,EAAE;YAC1E,EAAE,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE;YACnE,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,OAAO,EAAE;YACnE,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE;YACxD,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;YACxD,EAAE,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE;SACtE,CAAC;QAEF,KAAK,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,iBAAiB,EAAE,CAAC;YAC5D,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;oBACzB,MAAM,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;gBAC1C,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,IAAI,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC3C,CAAC;QAED,kBAAkB;QAClB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Execution Engine
3
+ * コード実行エンジン
4
+ * REQ-ANALYZE-009: コードインタープリタ機能
5
+ */
6
+ import { SupportedLanguage, SandboxExecutionResult } from './types.js';
7
+ import { SandboxManager, SandboxInstance } from './SandboxManager.js';
8
+ /**
9
+ * 実行オプション
10
+ */
11
+ export interface ExecutionOptions {
12
+ /** タイムアウト(ミリ秒) */
13
+ timeout: number;
14
+ /** メモリ制限(MB) */
15
+ memoryLimit: number;
16
+ /** 環境変数 */
17
+ env: Record<string, string>;
18
+ /** 入力データ */
19
+ inputs?: Record<string, unknown>;
20
+ }
21
+ /**
22
+ * 実行エンジン
23
+ *
24
+ * サンドボックス内でコードを実行する。
25
+ * タイムアウト、メモリ制限などのリソース制約を適用。
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const engine = new ExecutionEngine(sandboxManager);
30
+ *
31
+ * const result = await engine.execute(
32
+ * sandbox,
33
+ * 'print("Hello, World!")',
34
+ * 'python',
35
+ * { timeout: 30000, memoryLimit: 256, env: {} }
36
+ * );
37
+ *
38
+ * console.log(result.stdout); // "Hello, World!"
39
+ * ```
40
+ */
41
+ export declare class ExecutionEngine {
42
+ private sandboxManager;
43
+ constructor(sandboxManager: SandboxManager);
44
+ /**
45
+ * コードを実行
46
+ */
47
+ execute(sandbox: SandboxInstance, code: string, language: SupportedLanguage, options: ExecutionOptions): Promise<SandboxExecutionResult>;
48
+ /**
49
+ * プロセスを実行
50
+ */
51
+ private executeProcess;
52
+ /**
53
+ * コードをラップ(セキュリティ制約適用)
54
+ */
55
+ private wrapCode;
56
+ /**
57
+ * Pythonコードをラップ
58
+ */
59
+ private wrapPythonCode;
60
+ /**
61
+ * JavaScriptコードをラップ
62
+ */
63
+ private wrapJavaScriptCode;
64
+ /**
65
+ * Shellコードをラップ
66
+ */
67
+ private wrapShellCode;
68
+ /**
69
+ * ログを追加
70
+ */
71
+ private log;
72
+ }
73
+ //# sourceMappingURL=ExecutionEngine.d.ts.map