@telora/factory 0.4.5
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/dist/audit.d.ts +69 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +376 -0
- package/dist/audit.js.map +1 -0
- package/dist/builder-completion.d.ts +35 -0
- package/dist/builder-completion.d.ts.map +1 -0
- package/dist/builder-completion.js +375 -0
- package/dist/builder-completion.js.map +1 -0
- package/dist/builder-spawner.d.ts +40 -0
- package/dist/builder-spawner.d.ts.map +1 -0
- package/dist/builder-spawner.js +493 -0
- package/dist/builder-spawner.js.map +1 -0
- package/dist/completion-gate.d.ts +52 -0
- package/dist/completion-gate.d.ts.map +1 -0
- package/dist/completion-gate.js +336 -0
- package/dist/completion-gate.js.map +1 -0
- package/dist/completion-report.d.ts +36 -0
- package/dist/completion-report.d.ts.map +1 -0
- package/dist/completion-report.js +348 -0
- package/dist/completion-report.js.map +1 -0
- package/dist/completion.d.ts +58 -0
- package/dist/completion.d.ts.map +1 -0
- package/dist/completion.js +287 -0
- package/dist/completion.js.map +1 -0
- package/dist/config.d.ts +16 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +57 -0
- package/dist/config.js.map +1 -0
- package/dist/context-manager.d.ts +152 -0
- package/dist/context-manager.d.ts.map +1 -0
- package/dist/context-manager.js +421 -0
- package/dist/context-manager.js.map +1 -0
- package/dist/crash-detection.d.ts +70 -0
- package/dist/crash-detection.d.ts.map +1 -0
- package/dist/crash-detection.js +123 -0
- package/dist/crash-detection.js.map +1 -0
- package/dist/crash-recovery.d.ts +83 -0
- package/dist/crash-recovery.d.ts.map +1 -0
- package/dist/crash-recovery.js +522 -0
- package/dist/crash-recovery.js.map +1 -0
- package/dist/crash-resolution.d.ts +34 -0
- package/dist/crash-resolution.d.ts.map +1 -0
- package/dist/crash-resolution.js +382 -0
- package/dist/crash-resolution.js.map +1 -0
- package/dist/escalation.d.ts +150 -0
- package/dist/escalation.d.ts.map +1 -0
- package/dist/escalation.js +352 -0
- package/dist/escalation.js.map +1 -0
- package/dist/execution-target.d.ts +31 -0
- package/dist/execution-target.d.ts.map +1 -0
- package/dist/execution-target.js +71 -0
- package/dist/execution-target.js.map +1 -0
- package/dist/execution-unit-init.d.ts +28 -0
- package/dist/execution-unit-init.d.ts.map +1 -0
- package/dist/execution-unit-init.js +115 -0
- package/dist/execution-unit-init.js.map +1 -0
- package/dist/execution.d.ts +17 -0
- package/dist/execution.d.ts.map +1 -0
- package/dist/execution.js +20 -0
- package/dist/execution.js.map +1 -0
- package/dist/factory-engine.d.ts +100 -0
- package/dist/factory-engine.d.ts.map +1 -0
- package/dist/factory-engine.js +243 -0
- package/dist/factory-engine.js.map +1 -0
- package/dist/gap-detection.d.ts +43 -0
- package/dist/gap-detection.d.ts.map +1 -0
- package/dist/gap-detection.js +149 -0
- package/dist/gap-detection.js.map +1 -0
- package/dist/gate-context.d.ts +23 -0
- package/dist/gate-context.d.ts.map +1 -0
- package/dist/gate-context.js +63 -0
- package/dist/gate-context.js.map +1 -0
- package/dist/gate-engine.d.ts +55 -0
- package/dist/gate-engine.d.ts.map +1 -0
- package/dist/gate-engine.js +191 -0
- package/dist/gate-engine.js.map +1 -0
- package/dist/gates/adversarial.d.ts +59 -0
- package/dist/gates/adversarial.d.ts.map +1 -0
- package/dist/gates/adversarial.js +426 -0
- package/dist/gates/adversarial.js.map +1 -0
- package/dist/gates/adversary-spawner.d.ts +35 -0
- package/dist/gates/adversary-spawner.d.ts.map +1 -0
- package/dist/gates/adversary-spawner.js +286 -0
- package/dist/gates/adversary-spawner.js.map +1 -0
- package/dist/gates/adversary-test-dir.d.ts +41 -0
- package/dist/gates/adversary-test-dir.d.ts.map +1 -0
- package/dist/gates/adversary-test-dir.js +150 -0
- package/dist/gates/adversary-test-dir.js.map +1 -0
- package/dist/gates/behavioral-parser.d.ts +32 -0
- package/dist/gates/behavioral-parser.d.ts.map +1 -0
- package/dist/gates/behavioral-parser.js +190 -0
- package/dist/gates/behavioral-parser.js.map +1 -0
- package/dist/gates/behavioral-runner.d.ts +36 -0
- package/dist/gates/behavioral-runner.d.ts.map +1 -0
- package/dist/gates/behavioral-runner.js +306 -0
- package/dist/gates/behavioral-runner.js.map +1 -0
- package/dist/gates/behavioral.d.ts +37 -0
- package/dist/gates/behavioral.d.ts.map +1 -0
- package/dist/gates/behavioral.js +485 -0
- package/dist/gates/behavioral.js.map +1 -0
- package/dist/gates/deterministic.d.ts +24 -0
- package/dist/gates/deterministic.d.ts.map +1 -0
- package/dist/gates/deterministic.js +186 -0
- package/dist/gates/deterministic.js.map +1 -0
- package/dist/git-factory.d.ts +59 -0
- package/dist/git-factory.d.ts.map +1 -0
- package/dist/git-factory.js +102 -0
- package/dist/git-factory.js.map +1 -0
- package/dist/guard-evaluation.d.ts +48 -0
- package/dist/guard-evaluation.d.ts.map +1 -0
- package/dist/guard-evaluation.js +416 -0
- package/dist/guard-evaluation.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/instance-completion.d.ts +34 -0
- package/dist/instance-completion.d.ts.map +1 -0
- package/dist/instance-completion.js +366 -0
- package/dist/instance-completion.js.map +1 -0
- package/dist/instance-lifecycle.d.ts +15 -0
- package/dist/instance-lifecycle.d.ts.map +1 -0
- package/dist/instance-lifecycle.js +18 -0
- package/dist/instance-lifecycle.js.map +1 -0
- package/dist/instance-phase-dispatch.d.ts +75 -0
- package/dist/instance-phase-dispatch.d.ts.map +1 -0
- package/dist/instance-phase-dispatch.js +674 -0
- package/dist/instance-phase-dispatch.js.map +1 -0
- package/dist/instance-poll-loop.d.ts +43 -0
- package/dist/instance-poll-loop.d.ts.map +1 -0
- package/dist/instance-poll-loop.js +360 -0
- package/dist/instance-poll-loop.js.map +1 -0
- package/dist/instance-state-machine.d.ts +52 -0
- package/dist/instance-state-machine.d.ts.map +1 -0
- package/dist/instance-state-machine.js +235 -0
- package/dist/instance-state-machine.js.map +1 -0
- package/dist/log-manager.d.ts +28 -0
- package/dist/log-manager.d.ts.map +1 -0
- package/dist/log-manager.js +71 -0
- package/dist/log-manager.js.map +1 -0
- package/dist/pipeline-evaluator.d.ts +61 -0
- package/dist/pipeline-evaluator.d.ts.map +1 -0
- package/dist/pipeline-evaluator.js +107 -0
- package/dist/pipeline-evaluator.js.map +1 -0
- package/dist/pipeline-metrics.d.ts +52 -0
- package/dist/pipeline-metrics.d.ts.map +1 -0
- package/dist/pipeline-metrics.js +40 -0
- package/dist/pipeline-metrics.js.map +1 -0
- package/dist/pipeline-traversal.d.ts +43 -0
- package/dist/pipeline-traversal.d.ts.map +1 -0
- package/dist/pipeline-traversal.js +68 -0
- package/dist/pipeline-traversal.js.map +1 -0
- package/dist/plan-parser.d.ts +76 -0
- package/dist/plan-parser.d.ts.map +1 -0
- package/dist/plan-parser.js +223 -0
- package/dist/plan-parser.js.map +1 -0
- package/dist/planning-phase.d.ts +52 -0
- package/dist/planning-phase.d.ts.map +1 -0
- package/dist/planning-phase.js +444 -0
- package/dist/planning-phase.js.map +1 -0
- package/dist/planning-prompt.d.ts +64 -0
- package/dist/planning-prompt.d.ts.map +1 -0
- package/dist/planning-prompt.js +251 -0
- package/dist/planning-prompt.js.map +1 -0
- package/dist/planning.d.ts +16 -0
- package/dist/planning.d.ts.map +1 -0
- package/dist/planning.js +17 -0
- package/dist/planning.js.map +1 -0
- package/dist/process-runner.d.ts +41 -0
- package/dist/process-runner.d.ts.map +1 -0
- package/dist/process-runner.js +81 -0
- package/dist/process-runner.js.map +1 -0
- package/dist/product-config.d.ts +34 -0
- package/dist/product-config.d.ts.map +1 -0
- package/dist/product-config.js +43 -0
- package/dist/product-config.js.map +1 -0
- package/dist/queries/cycle-evaluations.d.ts +23 -0
- package/dist/queries/cycle-evaluations.d.ts.map +1 -0
- package/dist/queries/cycle-evaluations.js +37 -0
- package/dist/queries/cycle-evaluations.js.map +1 -0
- package/dist/queries/escalations.d.ts +30 -0
- package/dist/queries/escalations.d.ts.map +1 -0
- package/dist/queries/escalations.js +42 -0
- package/dist/queries/escalations.js.map +1 -0
- package/dist/queries/execution-units.d.ts +76 -0
- package/dist/queries/execution-units.d.ts.map +1 -0
- package/dist/queries/execution-units.js +109 -0
- package/dist/queries/execution-units.js.map +1 -0
- package/dist/queries/gate-results.d.ts +32 -0
- package/dist/queries/gate-results.d.ts.map +1 -0
- package/dist/queries/gate-results.js +44 -0
- package/dist/queries/gate-results.js.map +1 -0
- package/dist/queries/instances.d.ts +51 -0
- package/dist/queries/instances.d.ts.map +1 -0
- package/dist/queries/instances.js +77 -0
- package/dist/queries/instances.js.map +1 -0
- package/dist/queries/sessions.d.ts +50 -0
- package/dist/queries/sessions.d.ts.map +1 -0
- package/dist/queries/sessions.js +81 -0
- package/dist/queries/sessions.js.map +1 -0
- package/dist/queries/shared.d.ts +38 -0
- package/dist/queries/shared.d.ts.map +1 -0
- package/dist/queries/shared.js +119 -0
- package/dist/queries/shared.js.map +1 -0
- package/dist/queries/specs.d.ts +12 -0
- package/dist/queries/specs.d.ts.map +1 -0
- package/dist/queries/specs.js +21 -0
- package/dist/queries/specs.js.map +1 -0
- package/dist/queries/strategies.d.ts +14 -0
- package/dist/queries/strategies.d.ts.map +1 -0
- package/dist/queries/strategies.js +18 -0
- package/dist/queries/strategies.js.map +1 -0
- package/dist/queries/work-units.d.ts +42 -0
- package/dist/queries/work-units.d.ts.map +1 -0
- package/dist/queries/work-units.js +57 -0
- package/dist/queries/work-units.js.map +1 -0
- package/dist/queries/workflows.d.ts +29 -0
- package/dist/queries/workflows.d.ts.map +1 -0
- package/dist/queries/workflows.js +103 -0
- package/dist/queries/workflows.js.map +1 -0
- package/dist/remediation-units.d.ts +40 -0
- package/dist/remediation-units.d.ts.map +1 -0
- package/dist/remediation-units.js +263 -0
- package/dist/remediation-units.js.map +1 -0
- package/dist/replanning.d.ts +72 -0
- package/dist/replanning.d.ts.map +1 -0
- package/dist/replanning.js +403 -0
- package/dist/replanning.js.map +1 -0
- package/dist/resource-limits.d.ts +62 -0
- package/dist/resource-limits.d.ts.map +1 -0
- package/dist/resource-limits.js +322 -0
- package/dist/resource-limits.js.map +1 -0
- package/dist/scheduler.d.ts +98 -0
- package/dist/scheduler.d.ts.map +1 -0
- package/dist/scheduler.js +203 -0
- package/dist/scheduler.js.map +1 -0
- package/dist/session-adapter.d.ts +89 -0
- package/dist/session-adapter.d.ts.map +1 -0
- package/dist/session-adapter.js +108 -0
- package/dist/session-adapter.js.map +1 -0
- package/dist/sop-generator.d.ts +29 -0
- package/dist/sop-generator.d.ts.map +1 -0
- package/dist/sop-generator.js +235 -0
- package/dist/sop-generator.js.map +1 -0
- package/dist/spec-profiles.d.ts +41 -0
- package/dist/spec-profiles.d.ts.map +1 -0
- package/dist/spec-profiles.js +131 -0
- package/dist/spec-profiles.js.map +1 -0
- package/dist/strategy-design-graph.d.ts +23 -0
- package/dist/strategy-design-graph.d.ts.map +1 -0
- package/dist/strategy-design-graph.js +205 -0
- package/dist/strategy-design-graph.js.map +1 -0
- package/dist/strategy-design-prompt.d.ts +28 -0
- package/dist/strategy-design-prompt.d.ts.map +1 -0
- package/dist/strategy-design-prompt.js +108 -0
- package/dist/strategy-design-prompt.js.map +1 -0
- package/dist/strategy-design-schema.d.ts +767 -0
- package/dist/strategy-design-schema.d.ts.map +1 -0
- package/dist/strategy-design-schema.js +126 -0
- package/dist/strategy-design-schema.js.map +1 -0
- package/dist/strategy-design.d.ts +69 -0
- package/dist/strategy-design.d.ts.map +1 -0
- package/dist/strategy-design.js +411 -0
- package/dist/strategy-design.js.map +1 -0
- package/dist/strategy-gating.d.ts +31 -0
- package/dist/strategy-gating.d.ts.map +1 -0
- package/dist/strategy-gating.js +276 -0
- package/dist/strategy-gating.js.map +1 -0
- package/dist/team-prompt-builder.d.ts +47 -0
- package/dist/team-prompt-builder.d.ts.map +1 -0
- package/dist/team-prompt-builder.js +362 -0
- package/dist/team-prompt-builder.js.map +1 -0
- package/dist/trace-engine.d.ts +40 -0
- package/dist/trace-engine.d.ts.map +1 -0
- package/dist/trace-engine.js +344 -0
- package/dist/trace-engine.js.map +1 -0
- package/dist/types.d.ts +612 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/unit-session-lifecycle.d.ts +78 -0
- package/dist/unit-session-lifecycle.d.ts.map +1 -0
- package/dist/unit-session-lifecycle.js +141 -0
- package/dist/unit-session-lifecycle.js.map +1 -0
- package/dist/unit-session.d.ts +30 -0
- package/dist/unit-session.d.ts.map +1 -0
- package/dist/unit-session.js +370 -0
- package/dist/unit-session.js.map +1 -0
- package/dist/watchdogs.d.ts +33 -0
- package/dist/watchdogs.d.ts.map +1 -0
- package/dist/watchdogs.js +170 -0
- package/dist/watchdogs.js.map +1 -0
- package/dist/work-unit-scheduler.d.ts +34 -0
- package/dist/work-unit-scheduler.d.ts.map +1 -0
- package/dist/work-unit-scheduler.js +91 -0
- package/dist/work-unit-scheduler.js.map +1 -0
- package/dist/workflow-transition.d.ts +90 -0
- package/dist/workflow-transition.d.ts.map +1 -0
- package/dist/workflow-transition.js +340 -0
- package/dist/workflow-transition.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,485 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Behavioral gate evaluation for the factory orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* Manages the dev server lifecycle and Playwright test execution within
|
|
5
|
+
* a factory worktree. The flow is:
|
|
6
|
+
* 1. Start the dev server (blueprint config or "npm run dev")
|
|
7
|
+
* 2. Wait for the server to be ready (stdout detection or timeout)
|
|
8
|
+
* 3. Run `npx playwright test --reporter=json {testGlob}` in the worktree
|
|
9
|
+
* 4. Parse Playwright JSON reporter output for structured results
|
|
10
|
+
* 5. Kill the dev server process tree on completion or timeout
|
|
11
|
+
* 6. Return structured gate check results
|
|
12
|
+
*
|
|
13
|
+
* Dev server readiness detection looks for common patterns in stdout:
|
|
14
|
+
* - "ready" (generic)
|
|
15
|
+
* - "localhost" (generic server bind)
|
|
16
|
+
* - "Local:" (Vite dev server)
|
|
17
|
+
*
|
|
18
|
+
* The dev server process is killed using negative PID (process group kill)
|
|
19
|
+
* to ensure all child processes are terminated.
|
|
20
|
+
*/
|
|
21
|
+
import { spawn } from 'node:child_process';
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// Constants
|
|
24
|
+
// ============================================================================
|
|
25
|
+
/** Log prefix for behavioral gate messages. */
|
|
26
|
+
const LOG_PREFIX = '[gate:behavioral]';
|
|
27
|
+
/** Maximum output length per check result (10 KB). */
|
|
28
|
+
const MAX_OUTPUT_LENGTH = 10_000;
|
|
29
|
+
/** Default test glob if not specified in config. */
|
|
30
|
+
const DEFAULT_TEST_GLOB = 'tests/**/*.spec.ts';
|
|
31
|
+
/** Default dev server command if not specified in config. */
|
|
32
|
+
const DEFAULT_DEV_SERVER_COMMAND = 'npm run dev';
|
|
33
|
+
/** Default timeout for dev server readiness and test execution (30s). */
|
|
34
|
+
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
35
|
+
/** Patterns in stdout that indicate the dev server is ready. */
|
|
36
|
+
const READY_PATTERNS = [
|
|
37
|
+
'ready',
|
|
38
|
+
'localhost',
|
|
39
|
+
'Local:',
|
|
40
|
+
];
|
|
41
|
+
/** Grace period for dev server process tree kill (ms). */
|
|
42
|
+
const KILL_GRACE_MS = 3_000;
|
|
43
|
+
// ============================================================================
|
|
44
|
+
// Dev server management
|
|
45
|
+
// ============================================================================
|
|
46
|
+
/**
|
|
47
|
+
* Start the dev server and wait for it to be ready.
|
|
48
|
+
*
|
|
49
|
+
* Spawns the dev server command in the worktree directory with a new
|
|
50
|
+
* process group (detached: true) so we can kill the entire tree later.
|
|
51
|
+
* Listens on stdout for readiness patterns or times out.
|
|
52
|
+
*
|
|
53
|
+
* @returns The dev server child process, or null if it failed to start.
|
|
54
|
+
*/
|
|
55
|
+
function startDevServer(command, worktreePath) {
|
|
56
|
+
const [cmd, ...args] = parseCommand(command);
|
|
57
|
+
const proc = spawn(cmd, args, {
|
|
58
|
+
cwd: worktreePath,
|
|
59
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
60
|
+
detached: true,
|
|
61
|
+
shell: true,
|
|
62
|
+
env: { ...process.env, CI: 'true' },
|
|
63
|
+
});
|
|
64
|
+
return proc;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Wait for the dev server to emit a readiness signal on stdout.
|
|
68
|
+
*
|
|
69
|
+
* Resolves when any of the READY_PATTERNS are detected in stdout,
|
|
70
|
+
* or rejects on timeout.
|
|
71
|
+
*/
|
|
72
|
+
function waitForServerReady(proc, timeoutMs) {
|
|
73
|
+
return new Promise((resolve, reject) => {
|
|
74
|
+
let resolved = false;
|
|
75
|
+
let stdoutBuffer = '';
|
|
76
|
+
const timer = setTimeout(() => {
|
|
77
|
+
if (!resolved) {
|
|
78
|
+
resolved = true;
|
|
79
|
+
reject(new Error(`Dev server did not become ready within ${timeoutMs}ms. ` +
|
|
80
|
+
`Captured stdout: ${truncateOutput(stdoutBuffer)}`));
|
|
81
|
+
}
|
|
82
|
+
}, timeoutMs);
|
|
83
|
+
const onData = (chunk) => {
|
|
84
|
+
if (resolved)
|
|
85
|
+
return;
|
|
86
|
+
const text = chunk.toString();
|
|
87
|
+
stdoutBuffer += text;
|
|
88
|
+
const lowerText = stdoutBuffer.toLowerCase();
|
|
89
|
+
const isReady = READY_PATTERNS.some((pattern) => lowerText.includes(pattern.toLowerCase()));
|
|
90
|
+
if (isReady) {
|
|
91
|
+
resolved = true;
|
|
92
|
+
clearTimeout(timer);
|
|
93
|
+
// Detach the listener but keep the process running
|
|
94
|
+
proc.stdout?.removeListener('data', onData);
|
|
95
|
+
resolve();
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
proc.stdout?.on('data', onData);
|
|
99
|
+
proc.on('error', (err) => {
|
|
100
|
+
if (!resolved) {
|
|
101
|
+
resolved = true;
|
|
102
|
+
clearTimeout(timer);
|
|
103
|
+
reject(new Error(`Dev server failed to start: ${err.message}`));
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
proc.on('close', (code) => {
|
|
107
|
+
if (!resolved) {
|
|
108
|
+
resolved = true;
|
|
109
|
+
clearTimeout(timer);
|
|
110
|
+
reject(new Error(`Dev server exited prematurely with code ${code ?? 'unknown'}. ` +
|
|
111
|
+
`Captured stdout: ${truncateOutput(stdoutBuffer)}`));
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Kill the dev server process tree.
|
|
118
|
+
*
|
|
119
|
+
* Uses negative PID to send SIGTERM to the entire process group.
|
|
120
|
+
* Falls back to killing just the process if group kill fails.
|
|
121
|
+
* Waits up to KILL_GRACE_MS, then sends SIGKILL.
|
|
122
|
+
*/
|
|
123
|
+
async function killDevServer(proc) {
|
|
124
|
+
const pid = proc.pid;
|
|
125
|
+
if (pid === undefined)
|
|
126
|
+
return;
|
|
127
|
+
// Try process group kill first (negative PID)
|
|
128
|
+
try {
|
|
129
|
+
process.kill(-pid, 'SIGTERM');
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Process group kill failed -- try direct kill
|
|
133
|
+
try {
|
|
134
|
+
proc.kill('SIGTERM');
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
// Already dead
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Wait for graceful shutdown, then force kill if still alive
|
|
142
|
+
await new Promise((resolve) => {
|
|
143
|
+
const forceKillTimer = setTimeout(() => {
|
|
144
|
+
try {
|
|
145
|
+
process.kill(-pid, 'SIGKILL');
|
|
146
|
+
}
|
|
147
|
+
catch {
|
|
148
|
+
try {
|
|
149
|
+
proc.kill('SIGKILL');
|
|
150
|
+
}
|
|
151
|
+
catch {
|
|
152
|
+
// Already dead
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
resolve();
|
|
156
|
+
}, KILL_GRACE_MS);
|
|
157
|
+
proc.on('close', () => {
|
|
158
|
+
clearTimeout(forceKillTimer);
|
|
159
|
+
resolve();
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
// ============================================================================
|
|
164
|
+
// Playwright test execution
|
|
165
|
+
// ============================================================================
|
|
166
|
+
/**
|
|
167
|
+
* Run Playwright tests in the worktree and capture JSON output.
|
|
168
|
+
*
|
|
169
|
+
* Executes `npx playwright test --reporter=json {testGlob}` and collects
|
|
170
|
+
* the full stdout as the JSON report.
|
|
171
|
+
*/
|
|
172
|
+
function runPlaywrightTests(worktreePath, testGlob, timeoutMs) {
|
|
173
|
+
return new Promise((resolve) => {
|
|
174
|
+
const proc = spawn('npx', ['playwright', 'test', '--reporter=json', testGlob], {
|
|
175
|
+
cwd: worktreePath,
|
|
176
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
177
|
+
shell: true,
|
|
178
|
+
env: { ...process.env, CI: 'true' },
|
|
179
|
+
});
|
|
180
|
+
let stdout = '';
|
|
181
|
+
let stderr = '';
|
|
182
|
+
proc.stdout?.on('data', (chunk) => {
|
|
183
|
+
stdout += chunk.toString();
|
|
184
|
+
});
|
|
185
|
+
proc.stderr?.on('data', (chunk) => {
|
|
186
|
+
stderr += chunk.toString();
|
|
187
|
+
});
|
|
188
|
+
const timer = setTimeout(() => {
|
|
189
|
+
try {
|
|
190
|
+
proc.kill('SIGTERM');
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
// Already dead
|
|
194
|
+
}
|
|
195
|
+
// Give it a moment to clean up, then force kill
|
|
196
|
+
setTimeout(() => {
|
|
197
|
+
try {
|
|
198
|
+
proc.kill('SIGKILL');
|
|
199
|
+
}
|
|
200
|
+
catch {
|
|
201
|
+
// Already dead
|
|
202
|
+
}
|
|
203
|
+
}, KILL_GRACE_MS);
|
|
204
|
+
}, timeoutMs);
|
|
205
|
+
proc.on('close', (code) => {
|
|
206
|
+
clearTimeout(timer);
|
|
207
|
+
resolve({ stdout, stderr, exitCode: code ?? 1 });
|
|
208
|
+
});
|
|
209
|
+
proc.on('error', (err) => {
|
|
210
|
+
clearTimeout(timer);
|
|
211
|
+
resolve({ stdout, stderr: stderr + '\n' + err.message, exitCode: 1 });
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
// ============================================================================
|
|
216
|
+
// Playwright JSON report parsing
|
|
217
|
+
// ============================================================================
|
|
218
|
+
/**
|
|
219
|
+
* Parse Playwright JSON reporter output into GateCheckResult items.
|
|
220
|
+
*
|
|
221
|
+
* Extracts individual test results from the nested suite/spec/test
|
|
222
|
+
* hierarchy. Each test becomes a separate GateCheckResult entry.
|
|
223
|
+
*
|
|
224
|
+
* If the JSON cannot be parsed, returns a single failed result with
|
|
225
|
+
* the raw output.
|
|
226
|
+
*/
|
|
227
|
+
function parsePlaywrightResults(jsonOutput, stderrOutput, exitCode, durationMs) {
|
|
228
|
+
let report;
|
|
229
|
+
try {
|
|
230
|
+
report = JSON.parse(jsonOutput);
|
|
231
|
+
}
|
|
232
|
+
catch {
|
|
233
|
+
// JSON parse failed -- return a single check with raw output
|
|
234
|
+
return [{
|
|
235
|
+
checkName: 'playwright-test-run',
|
|
236
|
+
passed: false,
|
|
237
|
+
output: truncateOutput(`Failed to parse Playwright JSON output.\n\n` +
|
|
238
|
+
`Exit code: ${exitCode}\n\n` +
|
|
239
|
+
`stdout:\n${jsonOutput}\n\n` +
|
|
240
|
+
`stderr:\n${stderrOutput}`),
|
|
241
|
+
durationMs,
|
|
242
|
+
isAdversaryGenerated: false,
|
|
243
|
+
}];
|
|
244
|
+
}
|
|
245
|
+
const results = [];
|
|
246
|
+
// Handle top-level errors (e.g. config errors, no tests found)
|
|
247
|
+
if (report.errors && report.errors.length > 0) {
|
|
248
|
+
const errorMessages = report.errors
|
|
249
|
+
.map((e) => e.message ?? 'Unknown error')
|
|
250
|
+
.join('\n');
|
|
251
|
+
results.push({
|
|
252
|
+
checkName: 'playwright-setup',
|
|
253
|
+
passed: false,
|
|
254
|
+
output: truncateOutput(`Playwright reported errors:\n${errorMessages}`),
|
|
255
|
+
durationMs,
|
|
256
|
+
isAdversaryGenerated: false,
|
|
257
|
+
});
|
|
258
|
+
}
|
|
259
|
+
// Recursively extract test results from suites
|
|
260
|
+
if (report.suites) {
|
|
261
|
+
for (const suite of report.suites) {
|
|
262
|
+
extractSuiteResults(suite, [], results);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// If no results were extracted but exit code was non-zero, add a summary
|
|
266
|
+
if (results.length === 0) {
|
|
267
|
+
results.push({
|
|
268
|
+
checkName: 'playwright-test-run',
|
|
269
|
+
passed: exitCode === 0,
|
|
270
|
+
output: truncateOutput(exitCode === 0
|
|
271
|
+
? 'All Playwright tests passed (no individual results extracted).'
|
|
272
|
+
: `Playwright exited with code ${exitCode}.\n\nstderr:\n${stderrOutput}`),
|
|
273
|
+
durationMs,
|
|
274
|
+
isAdversaryGenerated: false,
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
return results;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Recursively extract test results from a Playwright suite.
|
|
281
|
+
*
|
|
282
|
+
* Builds a fully qualified test name from the suite path and spec/test
|
|
283
|
+
* titles. Each test result becomes a GateCheckResult.
|
|
284
|
+
*/
|
|
285
|
+
function extractSuiteResults(suite, parentPath, results) {
|
|
286
|
+
const currentPath = suite.title
|
|
287
|
+
? [...parentPath, suite.title]
|
|
288
|
+
: parentPath;
|
|
289
|
+
// Process specs in this suite
|
|
290
|
+
if (suite.specs) {
|
|
291
|
+
for (const spec of suite.specs) {
|
|
292
|
+
extractSpecResults(spec, currentPath, results);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
// Recurse into nested suites
|
|
296
|
+
if (suite.suites) {
|
|
297
|
+
for (const nested of suite.suites) {
|
|
298
|
+
extractSuiteResults(nested, currentPath, results);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Extract results from a Playwright spec (describe/test block).
|
|
304
|
+
*/
|
|
305
|
+
function extractSpecResults(spec, suitePath, results) {
|
|
306
|
+
if (!spec.tests || spec.tests.length === 0) {
|
|
307
|
+
// Spec without tests -- use the spec's own ok status
|
|
308
|
+
const checkName = [...suitePath, spec.title ?? 'unknown'].join(' > ');
|
|
309
|
+
results.push({
|
|
310
|
+
checkName,
|
|
311
|
+
passed: spec.ok === true,
|
|
312
|
+
output: truncateOutput(spec.ok ? 'Passed' : 'Failed'),
|
|
313
|
+
durationMs: 0,
|
|
314
|
+
isAdversaryGenerated: false,
|
|
315
|
+
});
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
for (const test of spec.tests) {
|
|
319
|
+
const testTitle = test.title ?? spec.title ?? 'unknown';
|
|
320
|
+
const checkName = [...suitePath, testTitle].join(' > ');
|
|
321
|
+
// Determine pass/fail from test results
|
|
322
|
+
const testResults = test.results ?? [];
|
|
323
|
+
const lastResult = testResults[testResults.length - 1];
|
|
324
|
+
const passed = test.status === 'expected'
|
|
325
|
+
|| lastResult?.status === 'passed'
|
|
326
|
+
|| (test.expectedStatus === test.status);
|
|
327
|
+
const totalDuration = testResults.reduce((sum, r) => sum + (r.duration ?? 0), 0);
|
|
328
|
+
// Build output from error information
|
|
329
|
+
let output = '';
|
|
330
|
+
if (passed) {
|
|
331
|
+
output = `Passed (${totalDuration}ms)`;
|
|
332
|
+
}
|
|
333
|
+
else {
|
|
334
|
+
const errorParts = [];
|
|
335
|
+
for (const result of testResults) {
|
|
336
|
+
if (result.error) {
|
|
337
|
+
if (result.error.message)
|
|
338
|
+
errorParts.push(result.error.message);
|
|
339
|
+
if (result.error.snippet)
|
|
340
|
+
errorParts.push(result.error.snippet);
|
|
341
|
+
}
|
|
342
|
+
if (result.errors) {
|
|
343
|
+
for (const err of result.errors) {
|
|
344
|
+
if (err.message)
|
|
345
|
+
errorParts.push(err.message);
|
|
346
|
+
if (err.snippet)
|
|
347
|
+
errorParts.push(err.snippet);
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
output = errorParts.length > 0
|
|
352
|
+
? errorParts.join('\n---\n')
|
|
353
|
+
: `Failed with status: ${lastResult?.status ?? test.status ?? 'unknown'}`;
|
|
354
|
+
}
|
|
355
|
+
results.push({
|
|
356
|
+
checkName,
|
|
357
|
+
passed,
|
|
358
|
+
output: truncateOutput(output),
|
|
359
|
+
durationMs: totalDuration,
|
|
360
|
+
isAdversaryGenerated: false,
|
|
361
|
+
});
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
// ============================================================================
|
|
365
|
+
// Main exported function
|
|
366
|
+
// ============================================================================
|
|
367
|
+
/**
|
|
368
|
+
* Run behavioral gates for a factory work unit.
|
|
369
|
+
*
|
|
370
|
+
* Starts the dev server, waits for readiness, runs Playwright tests,
|
|
371
|
+
* parses results, and cleans up. Returns structured results suitable
|
|
372
|
+
* for persisting as gate check results.
|
|
373
|
+
*
|
|
374
|
+
* @param worktreePath Absolute path to the factory worktree.
|
|
375
|
+
* @param config Behavioral gate config from the blueprint, or null for defaults.
|
|
376
|
+
* @returns Overall pass/fail and individual check results.
|
|
377
|
+
*/
|
|
378
|
+
export async function runBehavioralGates(worktreePath, config) {
|
|
379
|
+
const testGlob = config?.testGlob ?? DEFAULT_TEST_GLOB;
|
|
380
|
+
const devServerCommand = config?.devServerCommand ?? DEFAULT_DEV_SERVER_COMMAND;
|
|
381
|
+
const timeoutMs = config?.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
382
|
+
const overallStart = Date.now();
|
|
383
|
+
console.log(`${LOG_PREFIX} Starting behavioral gates in ${worktreePath} ` +
|
|
384
|
+
`(devServer: "${devServerCommand}", glob: "${testGlob}", timeout: ${timeoutMs}ms)`);
|
|
385
|
+
// ── Step 1: Start the dev server ────────────────────────────────────
|
|
386
|
+
let devServer = null;
|
|
387
|
+
try {
|
|
388
|
+
devServer = startDevServer(devServerCommand, worktreePath);
|
|
389
|
+
if (devServer.pid === undefined) {
|
|
390
|
+
return {
|
|
391
|
+
passed: false,
|
|
392
|
+
results: [{
|
|
393
|
+
checkName: 'dev-server-start',
|
|
394
|
+
passed: false,
|
|
395
|
+
output: 'Failed to start dev server: process pid is undefined.',
|
|
396
|
+
durationMs: Date.now() - overallStart,
|
|
397
|
+
isAdversaryGenerated: false,
|
|
398
|
+
}],
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
console.log(`${LOG_PREFIX} Dev server started (pid: ${devServer.pid})`);
|
|
402
|
+
// ── Step 2: Wait for server readiness ───────────────────────────────
|
|
403
|
+
try {
|
|
404
|
+
await waitForServerReady(devServer, timeoutMs);
|
|
405
|
+
console.log(`${LOG_PREFIX} Dev server is ready`);
|
|
406
|
+
}
|
|
407
|
+
catch (readyErr) {
|
|
408
|
+
const error = readyErr instanceof Error ? readyErr.message : String(readyErr);
|
|
409
|
+
console.error(`${LOG_PREFIX} Dev server readiness check failed: ${error}`);
|
|
410
|
+
return {
|
|
411
|
+
passed: false,
|
|
412
|
+
results: [{
|
|
413
|
+
checkName: 'dev-server-ready',
|
|
414
|
+
passed: false,
|
|
415
|
+
output: truncateOutput(`Dev server failed readiness check.\n\n${error}`),
|
|
416
|
+
durationMs: Date.now() - overallStart,
|
|
417
|
+
isAdversaryGenerated: false,
|
|
418
|
+
}],
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
// ── Step 3: Run Playwright tests ────────────────────────────────────
|
|
422
|
+
const testStart = Date.now();
|
|
423
|
+
const { stdout, stderr, exitCode } = await runPlaywrightTests(worktreePath, testGlob, timeoutMs);
|
|
424
|
+
const testDuration = Date.now() - testStart;
|
|
425
|
+
console.log(`${LOG_PREFIX} Playwright tests completed ` +
|
|
426
|
+
`(exitCode: ${exitCode}, duration: ${testDuration}ms)`);
|
|
427
|
+
// ── Step 4: Parse results ───────────────────────────────────────────
|
|
428
|
+
const results = parsePlaywrightResults(stdout, stderr, exitCode, testDuration);
|
|
429
|
+
const passed = results.every((r) => r.passed);
|
|
430
|
+
console.log(`${LOG_PREFIX} Behavioral gates ${passed ? 'PASSED' : 'FAILED'} ` +
|
|
431
|
+
`(${results.filter((r) => r.passed).length}/${results.length} checks passed)`);
|
|
432
|
+
return { passed, results };
|
|
433
|
+
}
|
|
434
|
+
catch (err) {
|
|
435
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
436
|
+
console.error(`${LOG_PREFIX} Unexpected error during behavioral gates: ${error}`);
|
|
437
|
+
return {
|
|
438
|
+
passed: false,
|
|
439
|
+
results: [{
|
|
440
|
+
checkName: 'behavioral-gate-error',
|
|
441
|
+
passed: false,
|
|
442
|
+
output: truncateOutput(`Unexpected error: ${error}`),
|
|
443
|
+
durationMs: Date.now() - overallStart,
|
|
444
|
+
isAdversaryGenerated: false,
|
|
445
|
+
}],
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
finally {
|
|
449
|
+
// ── Step 5: Kill dev server on completion or error ───────────────────
|
|
450
|
+
if (devServer) {
|
|
451
|
+
console.log(`${LOG_PREFIX} Killing dev server...`);
|
|
452
|
+
await killDevServer(devServer);
|
|
453
|
+
console.log(`${LOG_PREFIX} Dev server terminated`);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
// ============================================================================
|
|
458
|
+
// Utility helpers
|
|
459
|
+
// ============================================================================
|
|
460
|
+
/**
|
|
461
|
+
* Truncate output to the maximum allowed length.
|
|
462
|
+
* Appends a truncation notice if the output was shortened.
|
|
463
|
+
*/
|
|
464
|
+
function truncateOutput(output) {
|
|
465
|
+
if (output.length <= MAX_OUTPUT_LENGTH) {
|
|
466
|
+
return output;
|
|
467
|
+
}
|
|
468
|
+
const truncationNotice = '\n\n... [truncated at 10000 chars]';
|
|
469
|
+
return output.slice(0, MAX_OUTPUT_LENGTH - truncationNotice.length) + truncationNotice;
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Parse a shell command string into the command and its arguments.
|
|
473
|
+
*
|
|
474
|
+
* Handles simple cases like "npm run dev" or "node server.js".
|
|
475
|
+
* For complex commands with pipes or redirects, the shell: true
|
|
476
|
+
* option on spawn handles those.
|
|
477
|
+
*/
|
|
478
|
+
function parseCommand(command) {
|
|
479
|
+
const parts = command.trim().split(/\s+/);
|
|
480
|
+
if (parts.length === 0 || parts[0] === '') {
|
|
481
|
+
return ['npm', 'run', 'dev'];
|
|
482
|
+
}
|
|
483
|
+
return parts;
|
|
484
|
+
}
|
|
485
|
+
//# sourceMappingURL=behavioral.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"behavioral.js","sourceRoot":"","sources":["../../src/gates/behavioral.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAG9D,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E,+CAA+C;AAC/C,MAAM,UAAU,GAAG,mBAAmB,CAAC;AAEvC,sDAAsD;AACtD,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAEjC,oDAAoD;AACpD,MAAM,iBAAiB,GAAG,oBAAoB,CAAC;AAE/C,6DAA6D;AAC7D,MAAM,0BAA0B,GAAG,aAAa,CAAC;AAEjD,yEAAyE;AACzE,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,gEAAgE;AAChE,MAAM,cAAc,GAAG;IACrB,OAAO;IACP,WAAW;IACX,QAAQ;CACT,CAAC;AAEF,0DAA0D;AAC1D,MAAM,aAAa,GAAG,KAAK,CAAC;AAyD5B,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E;;;;;;;;GAQG;AACH,SAAS,cAAc,CACrB,OAAe,EACf,YAAoB;IAEpB,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAE7C,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;QAC5B,GAAG,EAAE,YAAY;QACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;QACjC,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI;QACX,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE;KACpC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CACzB,IAAkB,EAClB,SAAiB;IAEjB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,YAAY,GAAG,EAAE,CAAC;QAEtB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM,CAAC,IAAI,KAAK,CACd,0CAA0C,SAAS,MAAM;oBACzD,oBAAoB,cAAc,CAAC,YAAY,CAAC,EAAE,CACnD,CAAC,CAAC;YACL,CAAC;QACH,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,MAAM,MAAM,GAAG,CAAC,KAAa,EAAQ,EAAE;YACrC,IAAI,QAAQ;gBAAE,OAAO;YAErB,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC9B,YAAY,IAAI,IAAI,CAAC;YAErB,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CACjC,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CACvD,CAAC;YAEF,IAAI,OAAO,EAAE,CAAC;gBACZ,QAAQ,GAAG,IAAI,CAAC;gBAChB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,mDAAmD;gBACnD,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC5C,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAEhC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,CAAC;gBAChB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAClE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,QAAQ,GAAG,IAAI,CAAC;gBAChB,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,MAAM,CAAC,IAAI,KAAK,CACd,2CAA2C,IAAI,IAAI,SAAS,IAAI;oBAChE,oBAAoB,cAAc,CAAC,YAAY,CAAC,EAAE,CACnD,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,KAAK,UAAU,aAAa,CAAC,IAAkB;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACrB,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO;IAE9B,8CAA8C;IAC9C,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;QAC/C,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,eAAe;YACf,OAAO;QACT,CAAC;IACH,CAAC;IAED,6DAA6D;IAC7D,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;QAClC,MAAM,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE;YACrC,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAChC,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC;oBACH,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvB,CAAC;gBAAC,MAAM,CAAC;oBACP,eAAe;gBACjB,CAAC;YACH,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,aAAa,CAAC,CAAC;QAElB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACpB,YAAY,CAAC,cAAc,CAAC,CAAC;YAC7B,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E;;;;;GAKG;AACH,SAAS,kBAAkB,CACzB,YAAoB,EACpB,QAAgB,EAChB,SAAiB;IAEjB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,KAAK,CAChB,KAAK,EACL,CAAC,YAAY,EAAE,MAAM,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EACnD;YACE,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE;SACpC,CACF,CAAC;QAEF,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,IAAI,CAAC;gBACH,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,eAAe;YACjB,CAAC;YACD,gDAAgD;YAChD,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,CAAC;oBACH,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvB,CAAC;gBAAC,MAAM,CAAC;oBACP,eAAe;gBACjB,CAAC;YACH,CAAC,EAAE,aAAa,CAAC,CAAC;QACpB,CAAC,EAAE,SAAS,CAAC,CAAC;QAEd,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACxB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACvB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;QACxE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,+EAA+E;AAC/E,iCAAiC;AACjC,+EAA+E;AAE/E;;;;;;;;GAQG;AACH,SAAS,sBAAsB,CAC7B,UAAkB,EAClB,YAAoB,EACpB,QAAgB,EAChB,UAAkB;IAElB,IAAI,MAA4B,CAAC;IAEjC,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAyB,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,6DAA6D;QAC7D,OAAO,CAAC;gBACN,SAAS,EAAE,qBAAqB;gBAChC,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,cAAc,CACpB,6CAA6C;oBAC7C,cAAc,QAAQ,MAAM;oBAC5B,YAAY,UAAU,MAAM;oBAC5B,YAAY,YAAY,EAAE,CAC3B;gBACD,UAAU;gBACV,oBAAoB,EAAE,KAAK;aAC5B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,+DAA+D;IAC/D,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM;aAChC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,eAAe,CAAC;aACxC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEd,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,kBAAkB;YAC7B,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,cAAc,CAAC,gCAAgC,aAAa,EAAE,CAAC;YACvE,UAAU;YACV,oBAAoB,EAAE,KAAK;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,+CAA+C;IAC/C,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,mBAAmB,CAAC,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC;YACX,SAAS,EAAE,qBAAqB;YAChC,MAAM,EAAE,QAAQ,KAAK,CAAC;YACtB,MAAM,EAAE,cAAc,CACpB,QAAQ,KAAK,CAAC;gBACZ,CAAC,CAAC,gEAAgE;gBAClE,CAAC,CAAC,+BAA+B,QAAQ,iBAAiB,YAAY,EAAE,CAC3E;YACD,UAAU;YACV,oBAAoB,EAAE,KAAK;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAC1B,KAAsB,EACtB,UAAoB,EACpB,OAA0B;IAE1B,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK;QAC7B,CAAC,CAAC,CAAC,GAAG,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC;QAC9B,CAAC,CAAC,UAAU,CAAC;IAEf,8BAA8B;IAC9B,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC/B,kBAAkB,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YAClC,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,IAAoB,EACpB,SAAmB,EACnB,OAA0B;IAE1B,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,qDAAqD;QACrD,MAAM,SAAS,GAAG,CAAC,GAAG,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC;YACX,SAAS;YACT,MAAM,EAAE,IAAI,CAAC,EAAE,KAAK,IAAI;YACxB,MAAM,EAAE,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;YACrD,UAAU,EAAE,CAAC;YACb,oBAAoB,EAAE,KAAK;SAC5B,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,CAAC;QACxD,MAAM,SAAS,GAAG,CAAC,GAAG,SAAS,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExD,wCAAwC;QACxC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QACvC,MAAM,UAAU,GAAG,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEvD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,KAAK,UAAU;eACpC,UAAU,EAAE,MAAM,KAAK,QAAQ;eAC/B,CAAC,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC;QAE3C,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CACtC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,EACnC,CAAC,CACF,CAAC;QAEF,sCAAsC;QACtC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,WAAW,aAAa,KAAK,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAa,EAAE,CAAC;YAChC,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;gBACjC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO;wBAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAChE,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO;wBAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAClE,CAAC;gBACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;oBAClB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;wBAChC,IAAI,GAAG,CAAC,OAAO;4BAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;wBAC9C,IAAI,GAAG,CAAC,OAAO;4BAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAChD,CAAC;gBACH,CAAC;YACH,CAAC;YACD,MAAM,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC5B,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC5B,CAAC,CAAC,uBAAuB,UAAU,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;QAC9E,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,SAAS;YACT,MAAM;YACN,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC;YAC9B,UAAU,EAAE,aAAa;YACzB,oBAAoB,EAAE,KAAK;SAC5B,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,YAAoB,EACpB,MAAmC;IAEnC,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,IAAI,iBAAiB,CAAC;IACvD,MAAM,gBAAgB,GAAG,MAAM,EAAE,gBAAgB,IAAI,0BAA0B,CAAC;IAChF,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,kBAAkB,CAAC;IAE1D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEhC,OAAO,CAAC,GAAG,CACT,GAAG,UAAU,iCAAiC,YAAY,GAAG;QAC7D,gBAAgB,gBAAgB,aAAa,QAAQ,eAAe,SAAS,KAAK,CACnF,CAAC;IAEF,uEAAuE;IACvE,IAAI,SAAS,GAAwB,IAAI,CAAC;IAE1C,IAAI,CAAC;QACH,SAAS,GAAG,cAAc,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAE3D,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,CAAC;wBACR,SAAS,EAAE,kBAAkB;wBAC7B,MAAM,EAAE,KAAK;wBACb,MAAM,EAAE,uDAAuD;wBAC/D,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY;wBACrC,oBAAoB,EAAE,KAAK;qBAC5B,CAAC;aACH,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,6BAA6B,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;QAExE,uEAAuE;QACvE,IAAI,CAAC;YACH,MAAM,kBAAkB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,sBAAsB,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,QAAQ,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,QAAQ,YAAY,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9E,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,uCAAuC,KAAK,EAAE,CAAC,CAAC;YAE3E,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,CAAC;wBACR,SAAS,EAAE,kBAAkB;wBAC7B,MAAM,EAAE,KAAK;wBACb,MAAM,EAAE,cAAc,CACpB,yCAAyC,KAAK,EAAE,CACjD;wBACD,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY;wBACrC,oBAAoB,EAAE,KAAK;qBAC5B,CAAC;aACH,CAAC;QACJ,CAAC;QAED,uEAAuE;QACvE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,kBAAkB,CAC3D,YAAY,EACZ,QAAQ,EACR,SAAS,CACV,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;QAE5C,OAAO,CAAC,GAAG,CACT,GAAG,UAAU,8BAA8B;YAC3C,cAAc,QAAQ,eAAe,YAAY,KAAK,CACvD,CAAC;QAEF,uEAAuE;QACvE,MAAM,OAAO,GAAG,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAE9C,OAAO,CAAC,GAAG,CACT,GAAG,UAAU,qBAAqB,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,GAAG;YACjE,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,iBAAiB,CAC9E,CAAC;QAEF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,GAAG,UAAU,8CAA8C,KAAK,EAAE,CAAC,CAAC;QAElF,OAAO;YACL,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,CAAC;oBACR,SAAS,EAAE,uBAAuB;oBAClC,MAAM,EAAE,KAAK;oBACb,MAAM,EAAE,cAAc,CAAC,qBAAqB,KAAK,EAAE,CAAC;oBACpD,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY;oBACrC,oBAAoB,EAAE,KAAK;iBAC5B,CAAC;SACH,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,wEAAwE;QACxE,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,wBAAwB,CAAC,CAAC;YACnD,MAAM,aAAa,CAAC,SAAS,CAAC,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,GAAG,UAAU,wBAAwB,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,kBAAkB;AAClB,+EAA+E;AAE/E;;;GAGG;AACH,SAAS,cAAc,CAAC,MAAc;IACpC,IAAI,MAAM,CAAC,MAAM,IAAI,iBAAiB,EAAE,CAAC;QACvC,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,MAAM,gBAAgB,GAAG,oCAAoC,CAAC;IAC9D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,iBAAiB,GAAG,gBAAgB,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC;AACzF,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;QAC1C,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAA8B,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic gate evaluation.
|
|
3
|
+
*
|
|
4
|
+
* Runs configured shell commands (typecheck, lint, test, build) in the
|
|
5
|
+
* worktree directory and captures structured results. Commands execute
|
|
6
|
+
* sequentially; the first failure short-circuits remaining checks.
|
|
7
|
+
*/
|
|
8
|
+
import type { DeterministicGateConfig, GateCheckResult, TraceCheckConfig } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Run deterministic gate checks in the given worktree.
|
|
11
|
+
*
|
|
12
|
+
* Executes the configured commands sequentially. Each command is run as a
|
|
13
|
+
* shell command in the worktree directory. The first failure short-circuits
|
|
14
|
+
* remaining checks.
|
|
15
|
+
*
|
|
16
|
+
* @param worktreePath - Absolute path to the git worktree directory
|
|
17
|
+
* @param config - Blueprint deterministic gate config, or null for defaults
|
|
18
|
+
* @returns Overall pass/fail and per-check results
|
|
19
|
+
*/
|
|
20
|
+
export declare function runDeterministicGates(worktreePath: string, config: DeterministicGateConfig | null, traceChecks?: TraceCheckConfig[]): Promise<{
|
|
21
|
+
passed: boolean;
|
|
22
|
+
results: GateCheckResult[];
|
|
23
|
+
}>;
|
|
24
|
+
//# sourceMappingURL=deterministic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deterministic.d.ts","sourceRoot":"","sources":["../../src/gates/deterministic.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAmJ9F;;;;;;;;;;GAUG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,uBAAuB,GAAG,IAAI,EACtC,WAAW,CAAC,EAAE,gBAAgB,EAAE,GAC/B,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,eAAe,EAAE,CAAA;CAAE,CAAC,CAyE1D"}
|