@oddessentials/odd-ai-reviewers 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.
- package/README.md +190 -0
- package/dist/__tests__/hermetic-setup.d.ts +55 -0
- package/dist/__tests__/hermetic-setup.d.ts.map +1 -0
- package/dist/__tests__/hermetic-setup.js +62 -0
- package/dist/__tests__/hermetic-setup.js.map +1 -0
- package/dist/__tests__/test-utils/hermetic.d.ts +84 -0
- package/dist/__tests__/test-utils/hermetic.d.ts.map +1 -0
- package/dist/__tests__/test-utils/hermetic.js +147 -0
- package/dist/__tests__/test-utils/hermetic.js.map +1 -0
- package/dist/agents/ai_semantic_review.d.ts +12 -0
- package/dist/agents/ai_semantic_review.d.ts.map +1 -0
- package/dist/agents/ai_semantic_review.js +317 -0
- package/dist/agents/ai_semantic_review.js.map +1 -0
- package/dist/agents/control_flow/budget.d.ts +162 -0
- package/dist/agents/control_flow/budget.d.ts.map +1 -0
- package/dist/agents/control_flow/budget.js +331 -0
- package/dist/agents/control_flow/budget.js.map +1 -0
- package/dist/agents/control_flow/cfg-builder.d.ts +26 -0
- package/dist/agents/control_flow/cfg-builder.d.ts.map +1 -0
- package/dist/agents/control_flow/cfg-builder.js +776 -0
- package/dist/agents/control_flow/cfg-builder.js.map +1 -0
- package/dist/agents/control_flow/cfg-types.d.ts +186 -0
- package/dist/agents/control_flow/cfg-types.d.ts.map +1 -0
- package/dist/agents/control_flow/cfg-types.js +114 -0
- package/dist/agents/control_flow/cfg-types.js.map +1 -0
- package/dist/agents/control_flow/finding-generator.d.ts +118 -0
- package/dist/agents/control_flow/finding-generator.d.ts.map +1 -0
- package/dist/agents/control_flow/finding-generator.js +354 -0
- package/dist/agents/control_flow/finding-generator.js.map +1 -0
- package/dist/agents/control_flow/index.d.ts +39 -0
- package/dist/agents/control_flow/index.d.ts.map +1 -0
- package/dist/agents/control_flow/index.js +270 -0
- package/dist/agents/control_flow/index.js.map +1 -0
- package/dist/agents/control_flow/logger.d.ts +333 -0
- package/dist/agents/control_flow/logger.d.ts.map +1 -0
- package/dist/agents/control_flow/logger.js +607 -0
- package/dist/agents/control_flow/logger.js.map +1 -0
- package/dist/agents/control_flow/mitigation-detector.d.ts +207 -0
- package/dist/agents/control_flow/mitigation-detector.d.ts.map +1 -0
- package/dist/agents/control_flow/mitigation-detector.js +625 -0
- package/dist/agents/control_flow/mitigation-detector.js.map +1 -0
- package/dist/agents/control_flow/mitigation-patterns.d.ts +53 -0
- package/dist/agents/control_flow/mitigation-patterns.d.ts.map +1 -0
- package/dist/agents/control_flow/mitigation-patterns.js +620 -0
- package/dist/agents/control_flow/mitigation-patterns.js.map +1 -0
- package/dist/agents/control_flow/path-analyzer.d.ts +287 -0
- package/dist/agents/control_flow/path-analyzer.d.ts.map +1 -0
- package/dist/agents/control_flow/path-analyzer.js +695 -0
- package/dist/agents/control_flow/path-analyzer.js.map +1 -0
- package/dist/agents/control_flow/pattern-validator.d.ts +132 -0
- package/dist/agents/control_flow/pattern-validator.d.ts.map +1 -0
- package/dist/agents/control_flow/pattern-validator.js +420 -0
- package/dist/agents/control_flow/pattern-validator.js.map +1 -0
- package/dist/agents/control_flow/timeout-regex.d.ts +144 -0
- package/dist/agents/control_flow/timeout-regex.d.ts.map +1 -0
- package/dist/agents/control_flow/timeout-regex.js +339 -0
- package/dist/agents/control_flow/timeout-regex.js.map +1 -0
- package/dist/agents/control_flow/types.d.ts +782 -0
- package/dist/agents/control_flow/types.d.ts.map +1 -0
- package/dist/agents/control_flow/types.js +428 -0
- package/dist/agents/control_flow/types.js.map +1 -0
- package/dist/agents/control_flow/vulnerability-detector.d.ts +85 -0
- package/dist/agents/control_flow/vulnerability-detector.d.ts.map +1 -0
- package/dist/agents/control_flow/vulnerability-detector.js +493 -0
- package/dist/agents/control_flow/vulnerability-detector.js.map +1 -0
- package/dist/agents/date-utils.d.ts +19 -0
- package/dist/agents/date-utils.d.ts.map +1 -0
- package/dist/agents/date-utils.js +29 -0
- package/dist/agents/date-utils.js.map +1 -0
- package/dist/agents/index.d.ts +25 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +50 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/json-utils.d.ts +34 -0
- package/dist/agents/json-utils.d.ts.map +1 -0
- package/dist/agents/json-utils.js +62 -0
- package/dist/agents/json-utils.js.map +1 -0
- package/dist/agents/local_llm.d.ts +24 -0
- package/dist/agents/local_llm.d.ts.map +1 -0
- package/dist/agents/local_llm.js +566 -0
- package/dist/agents/local_llm.js.map +1 -0
- package/dist/agents/metadata.d.ts +57 -0
- package/dist/agents/metadata.d.ts.map +1 -0
- package/dist/agents/metadata.js +45 -0
- package/dist/agents/metadata.js.map +1 -0
- package/dist/agents/opencode.d.ts +18 -0
- package/dist/agents/opencode.d.ts.map +1 -0
- package/dist/agents/opencode.js +364 -0
- package/dist/agents/opencode.js.map +1 -0
- package/dist/agents/path-filter.d.ts +25 -0
- package/dist/agents/path-filter.d.ts.map +1 -0
- package/dist/agents/path-filter.js +43 -0
- package/dist/agents/path-filter.js.map +1 -0
- package/dist/agents/pr_agent.d.ts +3 -0
- package/dist/agents/pr_agent.d.ts.map +1 -0
- package/dist/agents/pr_agent.js +312 -0
- package/dist/agents/pr_agent.js.map +1 -0
- package/dist/agents/retry.d.ts +12 -0
- package/dist/agents/retry.d.ts.map +1 -0
- package/dist/agents/retry.js +65 -0
- package/dist/agents/retry.js.map +1 -0
- package/dist/agents/reviewdog.d.ts +24 -0
- package/dist/agents/reviewdog.d.ts.map +1 -0
- package/dist/agents/reviewdog.js +259 -0
- package/dist/agents/reviewdog.js.map +1 -0
- package/dist/agents/security.d.ts +49 -0
- package/dist/agents/security.d.ts.map +1 -0
- package/dist/agents/security.js +302 -0
- package/dist/agents/security.js.map +1 -0
- package/dist/agents/semgrep.d.ts +8 -0
- package/dist/agents/semgrep.d.ts.map +1 -0
- package/dist/agents/semgrep.js +157 -0
- package/dist/agents/semgrep.js.map +1 -0
- package/dist/agents/types.d.ts +450 -0
- package/dist/agents/types.d.ts.map +1 -0
- package/dist/agents/types.js +127 -0
- package/dist/agents/types.js.map +1 -0
- package/dist/budget.d.ts +59 -0
- package/dist/budget.d.ts.map +1 -0
- package/dist/budget.js +82 -0
- package/dist/budget.js.map +1 -0
- package/dist/cache/key.d.ts +49 -0
- package/dist/cache/key.d.ts.map +1 -0
- package/dist/cache/key.js +71 -0
- package/dist/cache/key.js.map +1 -0
- package/dist/cache/store.d.ts +47 -0
- package/dist/cache/store.d.ts.map +1 -0
- package/dist/cache/store.js +328 -0
- package/dist/cache/store.js.map +1 -0
- package/dist/cli/commands/check.d.ts +60 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +163 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/index.d.ts +12 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +12 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/local-review.d.ts +149 -0
- package/dist/cli/commands/local-review.d.ts.map +1 -0
- package/dist/cli/commands/local-review.js +755 -0
- package/dist/cli/commands/local-review.js.map +1 -0
- package/dist/cli/config-wizard.d.ts +87 -0
- package/dist/cli/config-wizard.d.ts.map +1 -0
- package/dist/cli/config-wizard.js +240 -0
- package/dist/cli/config-wizard.js.map +1 -0
- package/dist/cli/dependencies/catalog.d.ts +44 -0
- package/dist/cli/dependencies/catalog.d.ts.map +1 -0
- package/dist/cli/dependencies/catalog.js +89 -0
- package/dist/cli/dependencies/catalog.js.map +1 -0
- package/dist/cli/dependencies/checker.d.ts +42 -0
- package/dist/cli/dependencies/checker.d.ts.map +1 -0
- package/dist/cli/dependencies/checker.js +240 -0
- package/dist/cli/dependencies/checker.js.map +1 -0
- package/dist/cli/dependencies/index.d.ts +16 -0
- package/dist/cli/dependencies/index.d.ts.map +1 -0
- package/dist/cli/dependencies/index.js +16 -0
- package/dist/cli/dependencies/index.js.map +1 -0
- package/dist/cli/dependencies/messages.d.ts +58 -0
- package/dist/cli/dependencies/messages.d.ts.map +1 -0
- package/dist/cli/dependencies/messages.js +183 -0
- package/dist/cli/dependencies/messages.js.map +1 -0
- package/dist/cli/dependencies/platform.d.ts +25 -0
- package/dist/cli/dependencies/platform.d.ts.map +1 -0
- package/dist/cli/dependencies/platform.js +42 -0
- package/dist/cli/dependencies/platform.js.map +1 -0
- package/dist/cli/dependencies/schemas.d.ts +65 -0
- package/dist/cli/dependencies/schemas.d.ts.map +1 -0
- package/dist/cli/dependencies/schemas.js +42 -0
- package/dist/cli/dependencies/schemas.js.map +1 -0
- package/dist/cli/dependencies/types.d.ts +112 -0
- package/dist/cli/dependencies/types.d.ts.map +1 -0
- package/dist/cli/dependencies/types.js +6 -0
- package/dist/cli/dependencies/types.js.map +1 -0
- package/dist/cli/dependencies/version.d.ts +67 -0
- package/dist/cli/dependencies/version.d.ts.map +1 -0
- package/dist/cli/dependencies/version.js +125 -0
- package/dist/cli/dependencies/version.js.map +1 -0
- package/dist/cli/git-context.d.ts +105 -0
- package/dist/cli/git-context.d.ts.map +1 -0
- package/dist/cli/git-context.js +313 -0
- package/dist/cli/git-context.js.map +1 -0
- package/dist/cli/interactive-prompts.d.ts +126 -0
- package/dist/cli/interactive-prompts.d.ts.map +1 -0
- package/dist/cli/interactive-prompts.js +128 -0
- package/dist/cli/interactive-prompts.js.map +1 -0
- package/dist/cli/options/index.d.ts +7 -0
- package/dist/cli/options/index.d.ts.map +1 -0
- package/dist/cli/options/index.js +11 -0
- package/dist/cli/options/index.js.map +1 -0
- package/dist/cli/options/local-review-options.d.ts +221 -0
- package/dist/cli/options/local-review-options.d.ts.map +1 -0
- package/dist/cli/options/local-review-options.js +332 -0
- package/dist/cli/options/local-review-options.js.map +1 -0
- package/dist/cli/output/colors.d.ts +154 -0
- package/dist/cli/output/colors.d.ts.map +1 -0
- package/dist/cli/output/colors.js +255 -0
- package/dist/cli/output/colors.js.map +1 -0
- package/dist/cli/output/errors.d.ts +157 -0
- package/dist/cli/output/errors.d.ts.map +1 -0
- package/dist/cli/output/errors.js +266 -0
- package/dist/cli/output/errors.js.map +1 -0
- package/dist/cli/output/index.d.ts +12 -0
- package/dist/cli/output/index.d.ts.map +1 -0
- package/dist/cli/output/index.js +15 -0
- package/dist/cli/output/index.js.map +1 -0
- package/dist/cli/output/progress.d.ts +237 -0
- package/dist/cli/output/progress.d.ts.map +1 -0
- package/dist/cli/output/progress.js +405 -0
- package/dist/cli/output/progress.js.map +1 -0
- package/dist/cli/signals.d.ts +145 -0
- package/dist/cli/signals.d.ts.map +1 -0
- package/dist/cli/signals.js +223 -0
- package/dist/cli/signals.js.map +1 -0
- package/dist/cli/validation-report.d.ts +106 -0
- package/dist/cli/validation-report.d.ts.map +1 -0
- package/dist/cli/validation-report.js +108 -0
- package/dist/cli/validation-report.js.map +1 -0
- package/dist/config/index.d.ts +9 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +12 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/mitigation-config.d.ts +94 -0
- package/dist/config/mitigation-config.d.ts.map +1 -0
- package/dist/config/mitigation-config.js +430 -0
- package/dist/config/mitigation-config.js.map +1 -0
- package/dist/config/providers.d.ts +118 -0
- package/dist/config/providers.d.ts.map +1 -0
- package/dist/config/providers.js +229 -0
- package/dist/config/providers.js.map +1 -0
- package/dist/config/schemas.d.ts +278 -0
- package/dist/config/schemas.d.ts.map +1 -0
- package/dist/config/schemas.js +111 -0
- package/dist/config/schemas.js.map +1 -0
- package/dist/config/zero-config.d.ts +126 -0
- package/dist/config/zero-config.d.ts.map +1 -0
- package/dist/config/zero-config.js +243 -0
- package/dist/config/zero-config.js.map +1 -0
- package/dist/config.d.ts +110 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +302 -0
- package/dist/config.js.map +1 -0
- package/dist/diff.d.ts +224 -0
- package/dist/diff.d.ts.map +1 -0
- package/dist/diff.js +832 -0
- package/dist/diff.js.map +1 -0
- package/dist/git-validators.d.ts +106 -0
- package/dist/git-validators.d.ts.map +1 -0
- package/dist/git-validators.js +224 -0
- package/dist/git-validators.js.map +1 -0
- package/dist/main.d.ts +61 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +704 -0
- package/dist/main.js.map +1 -0
- package/dist/phases/execute.d.ts +60 -0
- package/dist/phases/execute.d.ts.map +1 -0
- package/dist/phases/execute.js +168 -0
- package/dist/phases/execute.js.map +1 -0
- package/dist/phases/index.d.ts +9 -0
- package/dist/phases/index.d.ts.map +1 -0
- package/dist/phases/index.js +9 -0
- package/dist/phases/index.js.map +1 -0
- package/dist/phases/preflight.d.ts +40 -0
- package/dist/phases/preflight.d.ts.map +1 -0
- package/dist/phases/preflight.js +122 -0
- package/dist/phases/preflight.js.map +1 -0
- package/dist/phases/report.d.ts +51 -0
- package/dist/phases/report.d.ts.map +1 -0
- package/dist/phases/report.js +152 -0
- package/dist/phases/report.js.map +1 -0
- package/dist/policy.d.ts +33 -0
- package/dist/policy.d.ts.map +1 -0
- package/dist/policy.js +34 -0
- package/dist/policy.js.map +1 -0
- package/dist/preflight.d.ts +181 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/preflight.js +627 -0
- package/dist/preflight.js.map +1 -0
- package/dist/report/ado.d.ts +53 -0
- package/dist/report/ado.d.ts.map +1 -0
- package/dist/report/ado.js +411 -0
- package/dist/report/ado.js.map +1 -0
- package/dist/report/agent-icons.d.ts +36 -0
- package/dist/report/agent-icons.d.ts.map +1 -0
- package/dist/report/agent-icons.js +46 -0
- package/dist/report/agent-icons.js.map +1 -0
- package/dist/report/base.d.ts +30 -0
- package/dist/report/base.d.ts.map +1 -0
- package/dist/report/base.js +64 -0
- package/dist/report/base.js.map +1 -0
- package/dist/report/formats.d.ts +206 -0
- package/dist/report/formats.d.ts.map +1 -0
- package/dist/report/formats.js +481 -0
- package/dist/report/formats.js.map +1 -0
- package/dist/report/github.d.ts +44 -0
- package/dist/report/github.d.ts.map +1 -0
- package/dist/report/github.js +409 -0
- package/dist/report/github.js.map +1 -0
- package/dist/report/line-resolver.d.ts +208 -0
- package/dist/report/line-resolver.d.ts.map +1 -0
- package/dist/report/line-resolver.js +578 -0
- package/dist/report/line-resolver.js.map +1 -0
- package/dist/report/resolution.d.ts +158 -0
- package/dist/report/resolution.d.ts.map +1 -0
- package/dist/report/resolution.js +272 -0
- package/dist/report/resolution.js.map +1 -0
- package/dist/report/sanitize.d.ts +32 -0
- package/dist/report/sanitize.d.ts.map +1 -0
- package/dist/report/sanitize.js +84 -0
- package/dist/report/sanitize.js.map +1 -0
- package/dist/report/terminal.d.ts +440 -0
- package/dist/report/terminal.d.ts.map +1 -0
- package/dist/report/terminal.js +840 -0
- package/dist/report/terminal.js.map +1 -0
- package/dist/reviewignore.d.ts +125 -0
- package/dist/reviewignore.d.ts.map +1 -0
- package/dist/reviewignore.js +335 -0
- package/dist/reviewignore.js.map +1 -0
- package/dist/security-logger.d.ts +178 -0
- package/dist/security-logger.d.ts.map +1 -0
- package/dist/security-logger.js +256 -0
- package/dist/security-logger.js.map +1 -0
- package/dist/telemetry/backends/console.d.ts +24 -0
- package/dist/telemetry/backends/console.d.ts.map +1 -0
- package/dist/telemetry/backends/console.js +54 -0
- package/dist/telemetry/backends/console.js.map +1 -0
- package/dist/telemetry/backends/jsonl.d.ts +31 -0
- package/dist/telemetry/backends/jsonl.d.ts.map +1 -0
- package/dist/telemetry/backends/jsonl.js +121 -0
- package/dist/telemetry/backends/jsonl.js.map +1 -0
- package/dist/telemetry/emitter.d.ts +43 -0
- package/dist/telemetry/emitter.d.ts.map +1 -0
- package/dist/telemetry/emitter.js +83 -0
- package/dist/telemetry/emitter.js.map +1 -0
- package/dist/telemetry/hook.d.ts +53 -0
- package/dist/telemetry/hook.d.ts.map +1 -0
- package/dist/telemetry/hook.js +118 -0
- package/dist/telemetry/hook.js.map +1 -0
- package/dist/telemetry/index.d.ts +58 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/telemetry/index.js +143 -0
- package/dist/telemetry/index.js.map +1 -0
- package/dist/telemetry/types.d.ts +139 -0
- package/dist/telemetry/types.d.ts.map +1 -0
- package/dist/telemetry/types.js +133 -0
- package/dist/telemetry/types.js.map +1 -0
- package/dist/trust.d.ts +65 -0
- package/dist/trust.d.ts.map +1 -0
- package/dist/trust.js +78 -0
- package/dist/trust.js.map +1 -0
- package/dist/types/assert-never.d.ts +30 -0
- package/dist/types/assert-never.d.ts.map +1 -0
- package/dist/types/assert-never.js +32 -0
- package/dist/types/assert-never.js.map +1 -0
- package/dist/types/branded.d.ts +172 -0
- package/dist/types/branded.d.ts.map +1 -0
- package/dist/types/branded.js +262 -0
- package/dist/types/branded.js.map +1 -0
- package/dist/types/errors.d.ts +320 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +551 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +37 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +77 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/result.d.ts +323 -0
- package/dist/types/result.d.ts.map +1 -0
- package/dist/types/result.js +423 -0
- package/dist/types/result.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timeout-Protected Regex Evaluation
|
|
3
|
+
*
|
|
4
|
+
* Provides timeout protection for regex pattern evaluation to prevent
|
|
5
|
+
* denial-of-service from malicious or poorly-constructed patterns.
|
|
6
|
+
*
|
|
7
|
+
* Implements:
|
|
8
|
+
* - FR-001: Maximum execution time for pattern evaluation
|
|
9
|
+
* - FR-002: Continue analysis when pattern times out
|
|
10
|
+
* - FR-005: Configurable timeout limit (10-1000ms)
|
|
11
|
+
*/
|
|
12
|
+
import type { PatternEvaluationResult, PatternValidationResult, ValidationError } from './types.js';
|
|
13
|
+
import { type PatternValidatorConfig } from './pattern-validator.js';
|
|
14
|
+
/**
|
|
15
|
+
* Options for TimeoutRegex construction.
|
|
16
|
+
*/
|
|
17
|
+
export interface TimeoutRegexOptions {
|
|
18
|
+
/** Timeout in milliseconds for pattern execution */
|
|
19
|
+
timeoutMs?: number;
|
|
20
|
+
/** Whether to validate pattern for ReDoS before use */
|
|
21
|
+
validatePattern?: boolean;
|
|
22
|
+
/** Configuration for pattern validation */
|
|
23
|
+
validationConfig?: Partial<PatternValidatorConfig>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Result of creating a TimeoutRegex with validation.
|
|
27
|
+
*/
|
|
28
|
+
export interface TimeoutRegexCreationResult {
|
|
29
|
+
/** The created TimeoutRegex instance (null if validation failed) */
|
|
30
|
+
regex: TimeoutRegex | null;
|
|
31
|
+
/** Validation result if validation was performed */
|
|
32
|
+
validationResult?: PatternValidationResult;
|
|
33
|
+
/** Whether creation was successful */
|
|
34
|
+
success: boolean;
|
|
35
|
+
/** Error if creation failed */
|
|
36
|
+
error?: ValidationError;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Provides timeout-protected regex pattern evaluation.
|
|
40
|
+
*
|
|
41
|
+
* Uses process.hrtime.bigint() for high-resolution time tracking.
|
|
42
|
+
* Patterns that exceed the timeout are treated as non-matching (conservative).
|
|
43
|
+
*/
|
|
44
|
+
export declare class TimeoutRegex {
|
|
45
|
+
private pattern;
|
|
46
|
+
private patternId;
|
|
47
|
+
private timeoutMs;
|
|
48
|
+
private validationResult?;
|
|
49
|
+
constructor(pattern: RegExp | string, patternId: string, timeoutMs?: number);
|
|
50
|
+
/**
|
|
51
|
+
* Get the validation result if pattern was validated during creation.
|
|
52
|
+
*/
|
|
53
|
+
getValidationResult(): PatternValidationResult | undefined;
|
|
54
|
+
/**
|
|
55
|
+
* Set validation result (internal use by factory functions).
|
|
56
|
+
*/
|
|
57
|
+
setValidationResult(result: PatternValidationResult): void;
|
|
58
|
+
/**
|
|
59
|
+
* Validate and clamp timeout to allowed range.
|
|
60
|
+
*/
|
|
61
|
+
private validateTimeout;
|
|
62
|
+
/**
|
|
63
|
+
* Test if input matches the pattern with timeout protection.
|
|
64
|
+
*
|
|
65
|
+
* @param input The string to test against the pattern
|
|
66
|
+
* @returns PatternEvaluationResult with match status and timing info
|
|
67
|
+
*/
|
|
68
|
+
test(input: string): PatternEvaluationResult;
|
|
69
|
+
/**
|
|
70
|
+
* Execute pattern matching and return match result or null if input exceeds length limit.
|
|
71
|
+
*
|
|
72
|
+
* @param input The string to match against the pattern
|
|
73
|
+
* @returns Match result with evaluation info, or null if input too long
|
|
74
|
+
*/
|
|
75
|
+
exec(input: string): {
|
|
76
|
+
match: RegExpExecArray | null;
|
|
77
|
+
result: PatternEvaluationResult;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Get the pattern ID.
|
|
81
|
+
*/
|
|
82
|
+
getPatternId(): string;
|
|
83
|
+
/**
|
|
84
|
+
* Get the configured timeout in milliseconds.
|
|
85
|
+
*/
|
|
86
|
+
getTimeoutMs(): number;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Check if an input string exceeds the maximum allowed length.
|
|
90
|
+
*
|
|
91
|
+
* @param input The string to check
|
|
92
|
+
* @returns true if input exceeds MAX_INPUT_LENGTH
|
|
93
|
+
*/
|
|
94
|
+
export declare function exceedsInputLengthLimit(input: string): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Get the maximum allowed input length.
|
|
97
|
+
*/
|
|
98
|
+
export declare function getMaxInputLength(): number;
|
|
99
|
+
/**
|
|
100
|
+
* Validate a timeout value is within allowed bounds.
|
|
101
|
+
*
|
|
102
|
+
* @param timeoutMs The timeout value to validate
|
|
103
|
+
* @returns true if timeout is within MIN_TIMEOUT_MS and MAX_TIMEOUT_MS
|
|
104
|
+
*/
|
|
105
|
+
export declare function isValidTimeout(timeoutMs: number): boolean;
|
|
106
|
+
/**
|
|
107
|
+
* Create a TimeoutRegex instance for pattern evaluation.
|
|
108
|
+
*
|
|
109
|
+
* @param pattern The regex pattern (string or RegExp)
|
|
110
|
+
* @param patternId Identifier for the pattern (used in results)
|
|
111
|
+
* @param timeoutMs Timeout in milliseconds (default: 100ms)
|
|
112
|
+
* @returns TimeoutRegex instance
|
|
113
|
+
*/
|
|
114
|
+
export declare function createTimeoutRegex(pattern: RegExp | string, patternId: string, timeoutMs?: number): TimeoutRegex;
|
|
115
|
+
/**
|
|
116
|
+
* Evaluate a pattern against input with timeout protection.
|
|
117
|
+
*
|
|
118
|
+
* Convenience function for one-shot pattern evaluation.
|
|
119
|
+
*
|
|
120
|
+
* @param pattern The regex pattern (string or RegExp)
|
|
121
|
+
* @param patternId Identifier for the pattern
|
|
122
|
+
* @param input The string to test
|
|
123
|
+
* @param timeoutMs Timeout in milliseconds (default: 100ms)
|
|
124
|
+
* @returns PatternEvaluationResult
|
|
125
|
+
*/
|
|
126
|
+
export declare function evaluatePatternWithTimeout(pattern: RegExp | string, patternId: string, input: string, timeoutMs?: number): PatternEvaluationResult;
|
|
127
|
+
/**
|
|
128
|
+
* Create a TimeoutRegex with optional pattern validation.
|
|
129
|
+
*
|
|
130
|
+
* This is the recommended way to create TimeoutRegex instances when
|
|
131
|
+
* using user-provided patterns, as it validates for ReDoS vulnerabilities
|
|
132
|
+
* before creating the regex.
|
|
133
|
+
*
|
|
134
|
+
* @param pattern The regex pattern (string or RegExp)
|
|
135
|
+
* @param patternId Identifier for the pattern
|
|
136
|
+
* @param options Creation options including validation settings
|
|
137
|
+
* @returns TimeoutRegexCreationResult with regex instance or error
|
|
138
|
+
*/
|
|
139
|
+
export declare function createValidatedTimeoutRegex(pattern: RegExp | string, patternId: string, options?: TimeoutRegexOptions): TimeoutRegexCreationResult;
|
|
140
|
+
/**
|
|
141
|
+
* Helper to create a ValidationError from an exception.
|
|
142
|
+
*/
|
|
143
|
+
export declare function createValidationError(errorType: 'compilation' | 'validation' | 'timeout' | 'resource', patternId: string, message: string, details?: Record<string, unknown>): ValidationError;
|
|
144
|
+
//# sourceMappingURL=timeout-regex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeout-regex.d.ts","sourceRoot":"","sources":["../../../src/agents/control_flow/timeout-regex.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACpG,OAAO,EAA0B,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAsB7F;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2CAA2C;IAC3C,gBAAgB,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,oEAAoE;IACpE,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,oDAAoD;IACpD,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;IAC3C,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED;;;;;GAKG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAC,CAA0B;gBAEvC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,GAAE,MAA2B;IAU/F;;OAEG;IACH,mBAAmB,IAAI,uBAAuB,GAAG,SAAS;IAI1D;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,uBAAuB,GAAG,IAAI;IAI1D;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,uBAAuB;IAqD5C;;;;;OAKG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,uBAAuB,CAAA;KAAE;IAsDvF;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,YAAY,IAAI,MAAM;CAGvB;AAMD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAA2B,GACrC,YAAY,CAEd;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAA2B,GACrC,uBAAuB,CAGzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,mBAAwB,GAChC,0BAA0B,CAmF5B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,aAAa,GAAG,YAAY,GAAG,SAAS,GAAG,UAAU,EAChE,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,eAAe,CASjB"}
|
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timeout-Protected Regex Evaluation
|
|
3
|
+
*
|
|
4
|
+
* Provides timeout protection for regex pattern evaluation to prevent
|
|
5
|
+
* denial-of-service from malicious or poorly-constructed patterns.
|
|
6
|
+
*
|
|
7
|
+
* Implements:
|
|
8
|
+
* - FR-001: Maximum execution time for pattern evaluation
|
|
9
|
+
* - FR-002: Continue analysis when pattern times out
|
|
10
|
+
* - FR-005: Configurable timeout limit (10-1000ms)
|
|
11
|
+
*/
|
|
12
|
+
import { createPatternValidator } from './pattern-validator.js';
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Constants
|
|
15
|
+
// =============================================================================
|
|
16
|
+
/** Maximum input length to evaluate (10KB) */
|
|
17
|
+
const MAX_INPUT_LENGTH = 10_000;
|
|
18
|
+
/** Default timeout in milliseconds */
|
|
19
|
+
const DEFAULT_TIMEOUT_MS = 100;
|
|
20
|
+
/** Minimum allowed timeout */
|
|
21
|
+
const MIN_TIMEOUT_MS = 10;
|
|
22
|
+
/** Maximum allowed timeout */
|
|
23
|
+
const MAX_TIMEOUT_MS = 1000;
|
|
24
|
+
/**
|
|
25
|
+
* Provides timeout-protected regex pattern evaluation.
|
|
26
|
+
*
|
|
27
|
+
* Uses process.hrtime.bigint() for high-resolution time tracking.
|
|
28
|
+
* Patterns that exceed the timeout are treated as non-matching (conservative).
|
|
29
|
+
*/
|
|
30
|
+
export class TimeoutRegex {
|
|
31
|
+
pattern;
|
|
32
|
+
patternId;
|
|
33
|
+
timeoutMs;
|
|
34
|
+
validationResult;
|
|
35
|
+
constructor(pattern, patternId, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
36
|
+
// Trust: REPO_CONFIG - Pattern from validated repository configuration
|
|
37
|
+
// Control: TimeoutRegex enforces execution timeout preventing CPU exhaustion
|
|
38
|
+
// See docs/security/regex-threat-model.md
|
|
39
|
+
// eslint-disable-next-line security/detect-non-literal-regexp -- Validated config with timeout
|
|
40
|
+
this.pattern = typeof pattern === 'string' ? new RegExp(pattern) : pattern;
|
|
41
|
+
this.patternId = patternId;
|
|
42
|
+
this.timeoutMs = this.validateTimeout(timeoutMs);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Get the validation result if pattern was validated during creation.
|
|
46
|
+
*/
|
|
47
|
+
getValidationResult() {
|
|
48
|
+
return this.validationResult;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Set validation result (internal use by factory functions).
|
|
52
|
+
*/
|
|
53
|
+
setValidationResult(result) {
|
|
54
|
+
this.validationResult = result;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Validate and clamp timeout to allowed range.
|
|
58
|
+
*/
|
|
59
|
+
validateTimeout(timeoutMs) {
|
|
60
|
+
if (timeoutMs < MIN_TIMEOUT_MS)
|
|
61
|
+
return MIN_TIMEOUT_MS;
|
|
62
|
+
if (timeoutMs > MAX_TIMEOUT_MS)
|
|
63
|
+
return MAX_TIMEOUT_MS;
|
|
64
|
+
return Math.floor(timeoutMs);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Test if input matches the pattern with timeout protection.
|
|
68
|
+
*
|
|
69
|
+
* @param input The string to test against the pattern
|
|
70
|
+
* @returns PatternEvaluationResult with match status and timing info
|
|
71
|
+
*/
|
|
72
|
+
test(input) {
|
|
73
|
+
const inputLength = input.length;
|
|
74
|
+
// First defense: input length check (FR-001)
|
|
75
|
+
if (inputLength > MAX_INPUT_LENGTH) {
|
|
76
|
+
return {
|
|
77
|
+
patternId: this.patternId,
|
|
78
|
+
matched: false,
|
|
79
|
+
timedOut: false,
|
|
80
|
+
elapsedMs: 0,
|
|
81
|
+
inputLength,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Track execution time with high-resolution timer
|
|
85
|
+
const startTime = process.hrtime.bigint();
|
|
86
|
+
try {
|
|
87
|
+
// Execute regex match
|
|
88
|
+
const matched = this.pattern.test(input);
|
|
89
|
+
// Calculate elapsed time in milliseconds
|
|
90
|
+
const endTime = process.hrtime.bigint();
|
|
91
|
+
const elapsedNs = Number(endTime - startTime);
|
|
92
|
+
const elapsedMs = elapsedNs / 1_000_000;
|
|
93
|
+
// Check if we exceeded timeout (post-hoc check)
|
|
94
|
+
// Note: JavaScript regex is synchronous, so we can only detect timeout after completion
|
|
95
|
+
const timedOut = elapsedMs > this.timeoutMs;
|
|
96
|
+
return {
|
|
97
|
+
patternId: this.patternId,
|
|
98
|
+
matched: timedOut ? false : matched, // Treat timeout as non-match (conservative)
|
|
99
|
+
timedOut,
|
|
100
|
+
elapsedMs,
|
|
101
|
+
inputLength,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
// Handle regex errors (e.g., catastrophic backtracking caught by engine)
|
|
106
|
+
const endTime = process.hrtime.bigint();
|
|
107
|
+
const elapsedNs = Number(endTime - startTime);
|
|
108
|
+
const elapsedMs = elapsedNs / 1_000_000;
|
|
109
|
+
return {
|
|
110
|
+
patternId: this.patternId,
|
|
111
|
+
matched: false,
|
|
112
|
+
timedOut: true,
|
|
113
|
+
elapsedMs,
|
|
114
|
+
inputLength,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Execute pattern matching and return match result or null if input exceeds length limit.
|
|
120
|
+
*
|
|
121
|
+
* @param input The string to match against the pattern
|
|
122
|
+
* @returns Match result with evaluation info, or null if input too long
|
|
123
|
+
*/
|
|
124
|
+
exec(input) {
|
|
125
|
+
const inputLength = input.length;
|
|
126
|
+
// First defense: input length check
|
|
127
|
+
if (inputLength > MAX_INPUT_LENGTH) {
|
|
128
|
+
return {
|
|
129
|
+
match: null,
|
|
130
|
+
result: {
|
|
131
|
+
patternId: this.patternId,
|
|
132
|
+
matched: false,
|
|
133
|
+
timedOut: false,
|
|
134
|
+
elapsedMs: 0,
|
|
135
|
+
inputLength,
|
|
136
|
+
},
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
const startTime = process.hrtime.bigint();
|
|
140
|
+
try {
|
|
141
|
+
const match = this.pattern.exec(input);
|
|
142
|
+
const endTime = process.hrtime.bigint();
|
|
143
|
+
const elapsedNs = Number(endTime - startTime);
|
|
144
|
+
const elapsedMs = elapsedNs / 1_000_000;
|
|
145
|
+
const timedOut = elapsedMs > this.timeoutMs;
|
|
146
|
+
return {
|
|
147
|
+
match: timedOut ? null : match,
|
|
148
|
+
result: {
|
|
149
|
+
patternId: this.patternId,
|
|
150
|
+
matched: timedOut ? false : match !== null,
|
|
151
|
+
timedOut,
|
|
152
|
+
elapsedMs,
|
|
153
|
+
inputLength,
|
|
154
|
+
},
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
const endTime = process.hrtime.bigint();
|
|
159
|
+
const elapsedNs = Number(endTime - startTime);
|
|
160
|
+
const elapsedMs = elapsedNs / 1_000_000;
|
|
161
|
+
return {
|
|
162
|
+
match: null,
|
|
163
|
+
result: {
|
|
164
|
+
patternId: this.patternId,
|
|
165
|
+
matched: false,
|
|
166
|
+
timedOut: true,
|
|
167
|
+
elapsedMs,
|
|
168
|
+
inputLength,
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Get the pattern ID.
|
|
175
|
+
*/
|
|
176
|
+
getPatternId() {
|
|
177
|
+
return this.patternId;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Get the configured timeout in milliseconds.
|
|
181
|
+
*/
|
|
182
|
+
getTimeoutMs() {
|
|
183
|
+
return this.timeoutMs;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// =============================================================================
|
|
187
|
+
// Utility Functions
|
|
188
|
+
// =============================================================================
|
|
189
|
+
/**
|
|
190
|
+
* Check if an input string exceeds the maximum allowed length.
|
|
191
|
+
*
|
|
192
|
+
* @param input The string to check
|
|
193
|
+
* @returns true if input exceeds MAX_INPUT_LENGTH
|
|
194
|
+
*/
|
|
195
|
+
export function exceedsInputLengthLimit(input) {
|
|
196
|
+
return input.length > MAX_INPUT_LENGTH;
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Get the maximum allowed input length.
|
|
200
|
+
*/
|
|
201
|
+
export function getMaxInputLength() {
|
|
202
|
+
return MAX_INPUT_LENGTH;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Validate a timeout value is within allowed bounds.
|
|
206
|
+
*
|
|
207
|
+
* @param timeoutMs The timeout value to validate
|
|
208
|
+
* @returns true if timeout is within MIN_TIMEOUT_MS and MAX_TIMEOUT_MS
|
|
209
|
+
*/
|
|
210
|
+
export function isValidTimeout(timeoutMs) {
|
|
211
|
+
return timeoutMs >= MIN_TIMEOUT_MS && timeoutMs <= MAX_TIMEOUT_MS;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Create a TimeoutRegex instance for pattern evaluation.
|
|
215
|
+
*
|
|
216
|
+
* @param pattern The regex pattern (string or RegExp)
|
|
217
|
+
* @param patternId Identifier for the pattern (used in results)
|
|
218
|
+
* @param timeoutMs Timeout in milliseconds (default: 100ms)
|
|
219
|
+
* @returns TimeoutRegex instance
|
|
220
|
+
*/
|
|
221
|
+
export function createTimeoutRegex(pattern, patternId, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
222
|
+
return new TimeoutRegex(pattern, patternId, timeoutMs);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Evaluate a pattern against input with timeout protection.
|
|
226
|
+
*
|
|
227
|
+
* Convenience function for one-shot pattern evaluation.
|
|
228
|
+
*
|
|
229
|
+
* @param pattern The regex pattern (string or RegExp)
|
|
230
|
+
* @param patternId Identifier for the pattern
|
|
231
|
+
* @param input The string to test
|
|
232
|
+
* @param timeoutMs Timeout in milliseconds (default: 100ms)
|
|
233
|
+
* @returns PatternEvaluationResult
|
|
234
|
+
*/
|
|
235
|
+
export function evaluatePatternWithTimeout(pattern, patternId, input, timeoutMs = DEFAULT_TIMEOUT_MS) {
|
|
236
|
+
const regex = new TimeoutRegex(pattern, patternId, timeoutMs);
|
|
237
|
+
return regex.test(input);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Create a TimeoutRegex with optional pattern validation.
|
|
241
|
+
*
|
|
242
|
+
* This is the recommended way to create TimeoutRegex instances when
|
|
243
|
+
* using user-provided patterns, as it validates for ReDoS vulnerabilities
|
|
244
|
+
* before creating the regex.
|
|
245
|
+
*
|
|
246
|
+
* @param pattern The regex pattern (string or RegExp)
|
|
247
|
+
* @param patternId Identifier for the pattern
|
|
248
|
+
* @param options Creation options including validation settings
|
|
249
|
+
* @returns TimeoutRegexCreationResult with regex instance or error
|
|
250
|
+
*/
|
|
251
|
+
export function createValidatedTimeoutRegex(pattern, patternId, options = {}) {
|
|
252
|
+
const { timeoutMs = DEFAULT_TIMEOUT_MS, validatePattern: shouldValidate = true, validationConfig, } = options;
|
|
253
|
+
const patternString = typeof pattern === 'string' ? pattern : pattern.source;
|
|
254
|
+
// Validate pattern if requested
|
|
255
|
+
if (shouldValidate) {
|
|
256
|
+
const validator = createPatternValidator(validationConfig);
|
|
257
|
+
const validationResult = validator.validatePattern(patternString, patternId);
|
|
258
|
+
if (!validationResult.isValid) {
|
|
259
|
+
return {
|
|
260
|
+
regex: null,
|
|
261
|
+
validationResult,
|
|
262
|
+
success: false,
|
|
263
|
+
error: {
|
|
264
|
+
errorType: 'validation',
|
|
265
|
+
patternId,
|
|
266
|
+
message: validationResult.rejectionReasons.join('; ') || 'Pattern validation failed',
|
|
267
|
+
details: {
|
|
268
|
+
pattern: patternString,
|
|
269
|
+
riskLevel: validationResult.redosRisk,
|
|
270
|
+
reasons: validationResult.rejectionReasons,
|
|
271
|
+
},
|
|
272
|
+
recoverable: true,
|
|
273
|
+
timestamp: Date.now(),
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
// Create regex with stored validation result
|
|
278
|
+
try {
|
|
279
|
+
const regex = new TimeoutRegex(pattern, patternId, timeoutMs);
|
|
280
|
+
regex.setValidationResult(validationResult);
|
|
281
|
+
return {
|
|
282
|
+
regex,
|
|
283
|
+
validationResult,
|
|
284
|
+
success: true,
|
|
285
|
+
};
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
return {
|
|
289
|
+
regex: null,
|
|
290
|
+
validationResult,
|
|
291
|
+
success: false,
|
|
292
|
+
error: {
|
|
293
|
+
errorType: 'compilation',
|
|
294
|
+
patternId,
|
|
295
|
+
message: error instanceof Error ? error.message : 'Failed to compile pattern',
|
|
296
|
+
details: { pattern: patternString },
|
|
297
|
+
recoverable: true,
|
|
298
|
+
timestamp: Date.now(),
|
|
299
|
+
},
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// No validation - just create the regex
|
|
304
|
+
try {
|
|
305
|
+
const regex = new TimeoutRegex(pattern, patternId, timeoutMs);
|
|
306
|
+
return {
|
|
307
|
+
regex,
|
|
308
|
+
success: true,
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
catch (error) {
|
|
312
|
+
return {
|
|
313
|
+
regex: null,
|
|
314
|
+
success: false,
|
|
315
|
+
error: {
|
|
316
|
+
errorType: 'compilation',
|
|
317
|
+
patternId,
|
|
318
|
+
message: error instanceof Error ? error.message : 'Failed to compile pattern',
|
|
319
|
+
details: { pattern: patternString },
|
|
320
|
+
recoverable: true,
|
|
321
|
+
timestamp: Date.now(),
|
|
322
|
+
},
|
|
323
|
+
};
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Helper to create a ValidationError from an exception.
|
|
328
|
+
*/
|
|
329
|
+
export function createValidationError(errorType, patternId, message, details) {
|
|
330
|
+
return {
|
|
331
|
+
errorType,
|
|
332
|
+
patternId,
|
|
333
|
+
message,
|
|
334
|
+
details,
|
|
335
|
+
recoverable: errorType !== 'resource',
|
|
336
|
+
timestamp: Date.now(),
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=timeout-regex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeout-regex.js","sourceRoot":"","sources":["../../../src/agents/control_flow/timeout-regex.ts"],"names":[],"mappings":"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"}
|