@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,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timeout Telemetry Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Feature: 007-pnpm-timeout-telemetry
|
|
5
|
+
* Implements: FR-009, FR-012
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
/**
|
|
9
|
+
* Severity level of a timeout event.
|
|
10
|
+
* - warning: Timeout exceeded but operation completed (informational)
|
|
11
|
+
* - error: Timeout caused operation failure
|
|
12
|
+
* - critical: Timeout in critical path affecting overall result
|
|
13
|
+
*/
|
|
14
|
+
export declare const TimeoutSeverity: z.ZodEnum<{
|
|
15
|
+
error: "error";
|
|
16
|
+
warning: "warning";
|
|
17
|
+
critical: "critical";
|
|
18
|
+
}>;
|
|
19
|
+
export type TimeoutSeverity = z.infer<typeof TimeoutSeverity>;
|
|
20
|
+
/**
|
|
21
|
+
* Available telemetry backend types.
|
|
22
|
+
* - console: Writes structured log lines to stdout
|
|
23
|
+
* - jsonl: Appends JSON objects to file
|
|
24
|
+
*/
|
|
25
|
+
export declare const TelemetryBackendType: z.ZodEnum<{
|
|
26
|
+
console: "console";
|
|
27
|
+
jsonl: "jsonl";
|
|
28
|
+
}>;
|
|
29
|
+
export type TelemetryBackendType = z.infer<typeof TelemetryBackendType>;
|
|
30
|
+
/**
|
|
31
|
+
* Verbosity levels for telemetry output.
|
|
32
|
+
* - minimal: operation_id, duration_ms, severity only
|
|
33
|
+
* - standard: All required fields
|
|
34
|
+
* - verbose: All fields including allowed_context
|
|
35
|
+
*/
|
|
36
|
+
export declare const TelemetryVerbosity: z.ZodEnum<{
|
|
37
|
+
minimal: "minimal";
|
|
38
|
+
standard: "standard";
|
|
39
|
+
verbose: "verbose";
|
|
40
|
+
}>;
|
|
41
|
+
export type TelemetryVerbosity = z.infer<typeof TelemetryVerbosity>;
|
|
42
|
+
/**
|
|
43
|
+
* Operation ID pattern: {type}_{identifier}
|
|
44
|
+
* Examples: local_llm_req_abc123, pattern_eval_a1b2c3d4, subprocess_semgrep
|
|
45
|
+
*/
|
|
46
|
+
export declare const OperationId: z.ZodString;
|
|
47
|
+
export type OperationId = z.infer<typeof OperationId>;
|
|
48
|
+
/**
|
|
49
|
+
* Allow-listed context fields for TimeoutEvent.
|
|
50
|
+
* Only these fields may appear in event context to prevent data leakage.
|
|
51
|
+
*/
|
|
52
|
+
export declare const AllowedContextSchema: z.ZodObject<{
|
|
53
|
+
agent_id: z.ZodOptional<z.ZodString>;
|
|
54
|
+
file_path: z.ZodOptional<z.ZodString>;
|
|
55
|
+
pattern_hash: z.ZodOptional<z.ZodString>;
|
|
56
|
+
retry_count: z.ZodOptional<z.ZodNumber>;
|
|
57
|
+
model_name: z.ZodOptional<z.ZodString>;
|
|
58
|
+
}, z.core.$strict>;
|
|
59
|
+
export type AllowedContext = z.infer<typeof AllowedContextSchema>;
|
|
60
|
+
/**
|
|
61
|
+
* Core timeout event schema.
|
|
62
|
+
* Immutable record of a single timeout occurrence.
|
|
63
|
+
*/
|
|
64
|
+
export declare const TimeoutEventSchema: z.ZodObject<{
|
|
65
|
+
operation_id: z.ZodString;
|
|
66
|
+
duration_ms: z.ZodNumber;
|
|
67
|
+
threshold_ms: z.ZodNumber;
|
|
68
|
+
timestamp: z.ZodString;
|
|
69
|
+
severity: z.ZodEnum<{
|
|
70
|
+
error: "error";
|
|
71
|
+
warning: "warning";
|
|
72
|
+
critical: "critical";
|
|
73
|
+
}>;
|
|
74
|
+
allowed_context: z.ZodOptional<z.ZodObject<{
|
|
75
|
+
agent_id: z.ZodOptional<z.ZodString>;
|
|
76
|
+
file_path: z.ZodOptional<z.ZodString>;
|
|
77
|
+
pattern_hash: z.ZodOptional<z.ZodString>;
|
|
78
|
+
retry_count: z.ZodOptional<z.ZodNumber>;
|
|
79
|
+
model_name: z.ZodOptional<z.ZodString>;
|
|
80
|
+
}, z.core.$strict>>;
|
|
81
|
+
}, z.core.$strip>;
|
|
82
|
+
export type TimeoutEvent = z.infer<typeof TimeoutEventSchema>;
|
|
83
|
+
/**
|
|
84
|
+
* Configuration controlling telemetry behavior.
|
|
85
|
+
*/
|
|
86
|
+
export declare const TelemetryConfigSchema: z.ZodObject<{
|
|
87
|
+
enabled: z.ZodBoolean;
|
|
88
|
+
backends: z.ZodArray<z.ZodEnum<{
|
|
89
|
+
console: "console";
|
|
90
|
+
jsonl: "jsonl";
|
|
91
|
+
}>>;
|
|
92
|
+
jsonl_path: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
93
|
+
verbosity: z.ZodDefault<z.ZodEnum<{
|
|
94
|
+
minimal: "minimal";
|
|
95
|
+
standard: "standard";
|
|
96
|
+
verbose: "verbose";
|
|
97
|
+
}>>;
|
|
98
|
+
buffer_size: z.ZodDefault<z.ZodNumber>;
|
|
99
|
+
flush_interval_ms: z.ZodDefault<z.ZodNumber>;
|
|
100
|
+
}, z.core.$strip>;
|
|
101
|
+
export type TelemetryConfig = z.infer<typeof TelemetryConfigSchema>;
|
|
102
|
+
/**
|
|
103
|
+
* Contract for telemetry sink implementations.
|
|
104
|
+
*
|
|
105
|
+
* Error Handling Contract:
|
|
106
|
+
* - emit() MUST NOT throw; failures logged internally
|
|
107
|
+
* - emit() MUST NOT block calling thread
|
|
108
|
+
* - flush() MAY throw if write fails
|
|
109
|
+
* - Backend failure MUST NOT affect control flow (FR-014)
|
|
110
|
+
*/
|
|
111
|
+
export interface TelemetryBackend {
|
|
112
|
+
/** Write a single event (non-blocking, non-throwing) */
|
|
113
|
+
emit(event: TimeoutEvent): Promise<void>;
|
|
114
|
+
/** Force write of buffered events */
|
|
115
|
+
flush(): Promise<void>;
|
|
116
|
+
/** Release resources */
|
|
117
|
+
close(): Promise<void>;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Input type for emitting timeout events.
|
|
121
|
+
* Omits timestamp as it will be auto-generated.
|
|
122
|
+
*/
|
|
123
|
+
export type TimeoutEventInput = Omit<TimeoutEvent, 'timestamp'>;
|
|
124
|
+
/**
|
|
125
|
+
* Partial config for updating telemetry settings.
|
|
126
|
+
*/
|
|
127
|
+
export type TelemetryConfigUpdate = Partial<Omit<TelemetryConfig, 'backends'>> & {
|
|
128
|
+
backends?: TelemetryBackendType[];
|
|
129
|
+
};
|
|
130
|
+
/**
|
|
131
|
+
* Default telemetry configuration.
|
|
132
|
+
* Telemetry is disabled by default.
|
|
133
|
+
*/
|
|
134
|
+
export declare const DEFAULT_TELEMETRY_CONFIG: TelemetryConfig;
|
|
135
|
+
/**
|
|
136
|
+
* Creates a TimeoutEvent with auto-generated timestamp.
|
|
137
|
+
*/
|
|
138
|
+
export declare function createTimeoutEvent(input: TimeoutEventInput): TimeoutEvent;
|
|
139
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/telemetry/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB;;;;;GAKG;AACH,eAAO,MAAM,eAAe;;;;EAA2C,CAAC;AACxE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D;;;;GAIG;AACH,eAAO,MAAM,oBAAoB;;;EAA+B,CAAC;AACjE,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;EAA6C,CAAC;AAC7E,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAMpE;;;GAGG;AACH,eAAO,MAAM,WAAW,aAGmE,CAAC;AAC5F,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;;;;;kBAgBtB,CAAC;AACZ,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;iBAa7B,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;iBA2B/B,CAAC;AACJ,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAMpE;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,qCAAqC;IACrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,wBAAwB;IACxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAMD;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,GAAG;IAC/E,QAAQ,CAAC,EAAE,oBAAoB,EAAE,CAAC;CACnC,CAAC;AAMF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,eAOtC,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,iBAAiB,GAAG,YAAY,CAKzE"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Timeout Telemetry Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Feature: 007-pnpm-timeout-telemetry
|
|
5
|
+
* Implements: FR-009, FR-012
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
// =============================================================================
|
|
9
|
+
// Enums
|
|
10
|
+
// =============================================================================
|
|
11
|
+
/**
|
|
12
|
+
* Severity level of a timeout event.
|
|
13
|
+
* - warning: Timeout exceeded but operation completed (informational)
|
|
14
|
+
* - error: Timeout caused operation failure
|
|
15
|
+
* - critical: Timeout in critical path affecting overall result
|
|
16
|
+
*/
|
|
17
|
+
export const TimeoutSeverity = z.enum(['warning', 'error', 'critical']);
|
|
18
|
+
/**
|
|
19
|
+
* Available telemetry backend types.
|
|
20
|
+
* - console: Writes structured log lines to stdout
|
|
21
|
+
* - jsonl: Appends JSON objects to file
|
|
22
|
+
*/
|
|
23
|
+
export const TelemetryBackendType = z.enum(['console', 'jsonl']);
|
|
24
|
+
/**
|
|
25
|
+
* Verbosity levels for telemetry output.
|
|
26
|
+
* - minimal: operation_id, duration_ms, severity only
|
|
27
|
+
* - standard: All required fields
|
|
28
|
+
* - verbose: All fields including allowed_context
|
|
29
|
+
*/
|
|
30
|
+
export const TelemetryVerbosity = z.enum(['minimal', 'standard', 'verbose']);
|
|
31
|
+
// =============================================================================
|
|
32
|
+
// Core Schemas
|
|
33
|
+
// =============================================================================
|
|
34
|
+
/**
|
|
35
|
+
* Operation ID pattern: {type}_{identifier}
|
|
36
|
+
* Examples: local_llm_req_abc123, pattern_eval_a1b2c3d4, subprocess_semgrep
|
|
37
|
+
*/
|
|
38
|
+
export const OperationId = z
|
|
39
|
+
.string()
|
|
40
|
+
.min(1)
|
|
41
|
+
.regex(/^[a-z_]+_[a-zA-Z0-9_-]+$/, 'Operation ID must match pattern {type}_{identifier}');
|
|
42
|
+
/**
|
|
43
|
+
* Allow-listed context fields for TimeoutEvent.
|
|
44
|
+
* Only these fields may appear in event context to prevent data leakage.
|
|
45
|
+
*/
|
|
46
|
+
export const AllowedContextSchema = z
|
|
47
|
+
.object({
|
|
48
|
+
/** Agent that triggered the timeout */
|
|
49
|
+
agent_id: z.string().min(1).optional(),
|
|
50
|
+
/** File being processed (if applicable) */
|
|
51
|
+
file_path: z.string().min(1).optional(),
|
|
52
|
+
/** SHA-256 hash of pattern (first 16 chars, no raw patterns) */
|
|
53
|
+
pattern_hash: z
|
|
54
|
+
.string()
|
|
55
|
+
.regex(/^[a-f0-9]{16}$/)
|
|
56
|
+
.optional(),
|
|
57
|
+
/** Number of retries attempted before timeout */
|
|
58
|
+
retry_count: z.number().int().min(0).optional(),
|
|
59
|
+
/** LLM model identifier (if applicable) */
|
|
60
|
+
model_name: z.string().min(1).optional(),
|
|
61
|
+
})
|
|
62
|
+
.strict(); // Reject unknown fields
|
|
63
|
+
/**
|
|
64
|
+
* Core timeout event schema.
|
|
65
|
+
* Immutable record of a single timeout occurrence.
|
|
66
|
+
*/
|
|
67
|
+
export const TimeoutEventSchema = z.object({
|
|
68
|
+
/** Unique identifier for the operation (pattern: {type}_{identifier}) */
|
|
69
|
+
operation_id: OperationId,
|
|
70
|
+
/** Actual elapsed time in milliseconds */
|
|
71
|
+
duration_ms: z.number().min(0),
|
|
72
|
+
/** Configured timeout threshold in milliseconds */
|
|
73
|
+
threshold_ms: z.number().positive(),
|
|
74
|
+
/** ISO-8601 datetime when timeout was detected */
|
|
75
|
+
timestamp: z.string().datetime(),
|
|
76
|
+
/** Severity classification */
|
|
77
|
+
severity: TimeoutSeverity,
|
|
78
|
+
/** Optional allow-listed metadata */
|
|
79
|
+
allowed_context: AllowedContextSchema.optional(),
|
|
80
|
+
});
|
|
81
|
+
/**
|
|
82
|
+
* Configuration controlling telemetry behavior.
|
|
83
|
+
*/
|
|
84
|
+
export const TelemetryConfigSchema = z
|
|
85
|
+
.object({
|
|
86
|
+
/** Master switch for telemetry emission */
|
|
87
|
+
enabled: z.boolean(),
|
|
88
|
+
/** List of active backends */
|
|
89
|
+
backends: z.array(TelemetryBackendType).min(1),
|
|
90
|
+
/** File path for JSONL backend output (required if jsonl backend used) */
|
|
91
|
+
jsonl_path: z.string().min(1).nullable().optional(),
|
|
92
|
+
/** Verbosity level for output */
|
|
93
|
+
verbosity: TelemetryVerbosity.default('standard'),
|
|
94
|
+
/** Max events to buffer before flush (JSONL only) */
|
|
95
|
+
buffer_size: z.number().int().min(1).max(10000).default(100),
|
|
96
|
+
/** Periodic flush interval in ms (JSONL only) */
|
|
97
|
+
flush_interval_ms: z.number().int().min(100).max(60000).default(5000),
|
|
98
|
+
})
|
|
99
|
+
.refine((config) => {
|
|
100
|
+
// If jsonl backend is enabled, jsonl_path must be provided
|
|
101
|
+
if (config.backends.includes('jsonl')) {
|
|
102
|
+
return config.jsonl_path != null && config.jsonl_path.length > 0;
|
|
103
|
+
}
|
|
104
|
+
return true;
|
|
105
|
+
}, {
|
|
106
|
+
message: 'jsonl_path is required when jsonl backend is enabled',
|
|
107
|
+
path: ['jsonl_path'],
|
|
108
|
+
});
|
|
109
|
+
// =============================================================================
|
|
110
|
+
// Default Configuration
|
|
111
|
+
// =============================================================================
|
|
112
|
+
/**
|
|
113
|
+
* Default telemetry configuration.
|
|
114
|
+
* Telemetry is disabled by default.
|
|
115
|
+
*/
|
|
116
|
+
export const DEFAULT_TELEMETRY_CONFIG = {
|
|
117
|
+
enabled: false,
|
|
118
|
+
backends: ['console'],
|
|
119
|
+
jsonl_path: null,
|
|
120
|
+
verbosity: 'standard',
|
|
121
|
+
buffer_size: 100,
|
|
122
|
+
flush_interval_ms: 5000,
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Creates a TimeoutEvent with auto-generated timestamp.
|
|
126
|
+
*/
|
|
127
|
+
export function createTimeoutEvent(input) {
|
|
128
|
+
return TimeoutEventSchema.parse({
|
|
129
|
+
...input,
|
|
130
|
+
timestamp: new Date().toISOString(),
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/telemetry/types.ts"],"names":[],"mappings":"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"}
|
package/dist/trust.d.ts
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trust Module
|
|
3
|
+
* Validates whether a PR should be reviewed based on trust rules
|
|
4
|
+
*/
|
|
5
|
+
import type { Config } from './config.js';
|
|
6
|
+
export interface PullRequestContext {
|
|
7
|
+
/** PR number */
|
|
8
|
+
number: number;
|
|
9
|
+
/** Source repository full name (owner/repo) */
|
|
10
|
+
headRepo: string;
|
|
11
|
+
/** Target repository full name (owner/repo) */
|
|
12
|
+
baseRepo: string;
|
|
13
|
+
/** Author's username */
|
|
14
|
+
author: string;
|
|
15
|
+
/** Whether the PR is from a fork */
|
|
16
|
+
isFork: boolean;
|
|
17
|
+
/** Whether the PR is marked as draft */
|
|
18
|
+
isDraft: boolean;
|
|
19
|
+
}
|
|
20
|
+
export interface TrustResult {
|
|
21
|
+
trusted: boolean;
|
|
22
|
+
reason?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Check if a PR is trusted and should be reviewed
|
|
26
|
+
*/
|
|
27
|
+
export declare function checkTrust(context: PullRequestContext, config: Config): TrustResult;
|
|
28
|
+
/**
|
|
29
|
+
* Build PR context from GitHub event payload
|
|
30
|
+
*/
|
|
31
|
+
export declare function buildPRContext(payload: GitHubPullRequestPayload): PullRequestContext;
|
|
32
|
+
export interface GitHubPullRequestPayload {
|
|
33
|
+
pull_request: {
|
|
34
|
+
number: number;
|
|
35
|
+
draft?: boolean;
|
|
36
|
+
user: {
|
|
37
|
+
login: string;
|
|
38
|
+
};
|
|
39
|
+
head: {
|
|
40
|
+
sha: string;
|
|
41
|
+
ref: string;
|
|
42
|
+
repo?: {
|
|
43
|
+
full_name: string;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
base: {
|
|
47
|
+
sha: string;
|
|
48
|
+
ref: string;
|
|
49
|
+
repo: {
|
|
50
|
+
full_name: string;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Build PR context from Azure DevOps environment variables
|
|
57
|
+
* Returns null if not running in an ADO PR context
|
|
58
|
+
*/
|
|
59
|
+
export declare function buildADOPRContext(env: Record<string, string | undefined>): PullRequestContext | null;
|
|
60
|
+
/**
|
|
61
|
+
* Check if a PR is in draft status via ADO API
|
|
62
|
+
* ADO doesn't expose draft status in environment variables
|
|
63
|
+
*/
|
|
64
|
+
export declare function isPRDraft(organization: string, project: string, repositoryId: string, pullRequestId: number, token: string): Promise<boolean>;
|
|
65
|
+
//# sourceMappingURL=trust.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,kBAAkB;IACjC,gBAAgB;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,MAAM,EAAE,OAAO,CAAC;IAChB,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAmBnF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,wBAAwB,GAAG,kBAAkB,CAWpF;AAGD,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,IAAI,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QACxB,IAAI,EAAE;YACJ,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,IAAI,CAAC,EAAE;gBAAE,SAAS,EAAE,MAAM,CAAA;aAAE,CAAC;SAC9B,CAAC;QACF,IAAI,EAAE;YACJ,GAAG,EAAE,MAAM,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,IAAI,EAAE;gBAAE,SAAS,EAAE,MAAM,CAAA;aAAE,CAAC;SAC7B,CAAC;KACH,CAAC;CACH;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACtC,kBAAkB,GAAG,IAAI,CAe3B;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,CAAC,CAkBlB"}
|
package/dist/trust.js
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trust Module
|
|
3
|
+
* Validates whether a PR should be reviewed based on trust rules
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Check if a PR is trusted and should be reviewed
|
|
7
|
+
*/
|
|
8
|
+
export function checkTrust(context, config) {
|
|
9
|
+
// Skip draft PRs
|
|
10
|
+
if (context.isDraft) {
|
|
11
|
+
return {
|
|
12
|
+
trusted: false,
|
|
13
|
+
reason: 'Skipping draft PR',
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
// If trusted_only is enabled, block fork PRs
|
|
17
|
+
if (config.trusted_only && context.isFork) {
|
|
18
|
+
return {
|
|
19
|
+
trusted: false,
|
|
20
|
+
reason: `Fork PRs are not trusted (${context.headRepo} → ${context.baseRepo})`,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
// All checks passed
|
|
24
|
+
return { trusted: true };
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Build PR context from GitHub event payload
|
|
28
|
+
*/
|
|
29
|
+
export function buildPRContext(payload) {
|
|
30
|
+
const pr = payload.pull_request;
|
|
31
|
+
return {
|
|
32
|
+
number: pr.number,
|
|
33
|
+
headRepo: pr.head.repo?.full_name ?? '',
|
|
34
|
+
baseRepo: pr.base.repo.full_name,
|
|
35
|
+
author: pr.user.login,
|
|
36
|
+
isFork: pr.head.repo?.full_name !== pr.base.repo.full_name,
|
|
37
|
+
isDraft: pr.draft ?? false,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Build PR context from Azure DevOps environment variables
|
|
42
|
+
* Returns null if not running in an ADO PR context
|
|
43
|
+
*/
|
|
44
|
+
export function buildADOPRContext(env) {
|
|
45
|
+
const prId = env['SYSTEM_PULLREQUEST_PULLREQUESTID'];
|
|
46
|
+
if (!prId)
|
|
47
|
+
return null; // Not a PR build
|
|
48
|
+
const sourceRepoUri = env['SYSTEM_PULLREQUEST_SOURCEREPOSITORYURI'] ?? '';
|
|
49
|
+
const targetRepoUri = env['BUILD_REPOSITORY_URI'] ?? '';
|
|
50
|
+
return {
|
|
51
|
+
number: parseInt(prId, 10),
|
|
52
|
+
headRepo: sourceRepoUri,
|
|
53
|
+
baseRepo: targetRepoUri,
|
|
54
|
+
author: env['BUILD_REQUESTEDFOR'] ?? 'unknown',
|
|
55
|
+
isFork: sourceRepoUri !== '' && sourceRepoUri !== targetRepoUri,
|
|
56
|
+
isDraft: false, // Default - requires API call to enrich
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if a PR is in draft status via ADO API
|
|
61
|
+
* ADO doesn't expose draft status in environment variables
|
|
62
|
+
*/
|
|
63
|
+
export async function isPRDraft(organization, project, repositoryId, pullRequestId, token) {
|
|
64
|
+
try {
|
|
65
|
+
const response = await fetch(`https://dev.azure.com/${organization}/${project}/_apis/git/repositories/${repositoryId}/pullRequests/${pullRequestId}?api-version=7.1`, { headers: { Authorization: `Bearer ${token}` } });
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
console.warn(`[trust] Failed to fetch PR details: ${response.status}`);
|
|
68
|
+
return false; // Fail open - assume not draft
|
|
69
|
+
}
|
|
70
|
+
const pr = (await response.json());
|
|
71
|
+
return pr.isDraft === true;
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.warn(`[trust] Error checking draft status: ${error}`);
|
|
75
|
+
return false; // Fail open - assume not draft
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=trust.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trust.js","sourceRoot":"","sources":["../src/trust.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exhaustive switch utility for discriminated unions
|
|
3
|
+
*
|
|
4
|
+
* Use in the default branch of switch statements to ensure all cases are handled.
|
|
5
|
+
* TypeScript will produce a compile error if any case is missing.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* type Status = 'success' | 'failure' | 'skipped';
|
|
10
|
+
*
|
|
11
|
+
* function handle(status: Status): string {
|
|
12
|
+
* switch (status) {
|
|
13
|
+
* case 'success':
|
|
14
|
+
* return 'ok';
|
|
15
|
+
* case 'failure':
|
|
16
|
+
* return 'failed';
|
|
17
|
+
* case 'skipped':
|
|
18
|
+
* return 'skip';
|
|
19
|
+
* default:
|
|
20
|
+
* return assertNever(status); // Compile error if case missing
|
|
21
|
+
* }
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @param x - The value that should be of type `never` if all cases are handled
|
|
26
|
+
* @param message - Optional custom error message
|
|
27
|
+
* @throws Error if called at runtime (indicates missing switch case)
|
|
28
|
+
*/
|
|
29
|
+
export declare function assertNever(x: never, message?: string): never;
|
|
30
|
+
//# sourceMappingURL=assert-never.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert-never.d.ts","sourceRoot":"","sources":["../../src/types/assert-never.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAE7D"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exhaustive switch utility for discriminated unions
|
|
3
|
+
*
|
|
4
|
+
* Use in the default branch of switch statements to ensure all cases are handled.
|
|
5
|
+
* TypeScript will produce a compile error if any case is missing.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* type Status = 'success' | 'failure' | 'skipped';
|
|
10
|
+
*
|
|
11
|
+
* function handle(status: Status): string {
|
|
12
|
+
* switch (status) {
|
|
13
|
+
* case 'success':
|
|
14
|
+
* return 'ok';
|
|
15
|
+
* case 'failure':
|
|
16
|
+
* return 'failed';
|
|
17
|
+
* case 'skipped':
|
|
18
|
+
* return 'skip';
|
|
19
|
+
* default:
|
|
20
|
+
* return assertNever(status); // Compile error if case missing
|
|
21
|
+
* }
|
|
22
|
+
* }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @param x - The value that should be of type `never` if all cases are handled
|
|
26
|
+
* @param message - Optional custom error message
|
|
27
|
+
* @throws Error if called at runtime (indicates missing switch case)
|
|
28
|
+
*/
|
|
29
|
+
export function assertNever(x, message) {
|
|
30
|
+
throw new Error(message ?? `Unexpected value: ${JSON.stringify(x)}`);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=assert-never.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"assert-never.js","sourceRoot":"","sources":["../../src/types/assert-never.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,UAAU,WAAW,CAAC,CAAQ,EAAE,OAAgB;IACpD,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,qBAAqB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACvE,CAAC"}
|