@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,366 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory instance completion detection and gap evaluation.
|
|
3
|
+
*
|
|
4
|
+
* Handles the checkInstanceCompletion flow (strategy-level terminal detection,
|
|
5
|
+
* pipeline advance logic) and the runCompletionSequence flow (completion gate,
|
|
6
|
+
* report generation, finalization).
|
|
7
|
+
*
|
|
8
|
+
* Imports from instance-state-machine (leaf) but NOT from instance-poll-loop
|
|
9
|
+
* or instance-phase-dispatch, so no circular dependencies.
|
|
10
|
+
*/
|
|
11
|
+
import { updateInstanceStatus } from './queries/instances.js';
|
|
12
|
+
import { getInstanceWorkUnits } from './queries/work-units.js';
|
|
13
|
+
import { deleteExecutionUnitsByInstance } from './queries/execution-units.js';
|
|
14
|
+
import { createCycleEvaluation } from './queries/cycle-evaluations.js';
|
|
15
|
+
import { createFactoryEscalation } from './queries/escalations.js';
|
|
16
|
+
import { updateSpecCompletionSummary } from './queries/specs.js';
|
|
17
|
+
import { terminateAllUnits } from './unit-session.js';
|
|
18
|
+
import { detectCompletion } from './completion.js';
|
|
19
|
+
import { runCompletionGate } from './completion-gate.js';
|
|
20
|
+
import { generateCompletionReport } from './completion-report.js';
|
|
21
|
+
import { runReplanningPhase } from './replanning.js';
|
|
22
|
+
import { releaseUnitForStrategy } from './scheduler.js';
|
|
23
|
+
import { updateStrategyExecutionStatus } from './queries/strategies.js';
|
|
24
|
+
import { escalateOrFail, TRIGGER_RESOURCE_LIMIT_EXCEEDED, } from './escalation.js';
|
|
25
|
+
import { advancePipeline, usesPipeline, getNodeLabel } from './pipeline-traversal.js';
|
|
26
|
+
import { collectMetrics } from './pipeline-metrics.js';
|
|
27
|
+
import { transitionInstanceStatus, handleInstanceFailure } from './instance-state-machine.js';
|
|
28
|
+
// ============================================================================
|
|
29
|
+
// Constants
|
|
30
|
+
// ============================================================================
|
|
31
|
+
/** Safety ceiling for instance iterations when blueprint has no limit configured. */
|
|
32
|
+
const DEFAULT_MAX_INSTANCE_ITERATIONS = 10;
|
|
33
|
+
// ============================================================================
|
|
34
|
+
// Strategy completion detection
|
|
35
|
+
// ============================================================================
|
|
36
|
+
/**
|
|
37
|
+
* Detect strategies where all work units have reached a terminal state.
|
|
38
|
+
*
|
|
39
|
+
* For each in_progress or gate_fix_pending strategy, if all its work units
|
|
40
|
+
* are completed or failed, transition the strategy to the appropriate next state.
|
|
41
|
+
*/
|
|
42
|
+
export async function detectStrategyCompletion(state) {
|
|
43
|
+
let strategies;
|
|
44
|
+
try {
|
|
45
|
+
const { getStrategiesByFactoryInstance } = await import('./strategy-design.js');
|
|
46
|
+
strategies = await getStrategiesByFactoryInstance(state.instanceId);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
if (strategies.length === 0)
|
|
52
|
+
return;
|
|
53
|
+
const workUnits = await getInstanceWorkUnits(state.instanceId);
|
|
54
|
+
const unitsByStrategy = new Map();
|
|
55
|
+
for (const unit of workUnits) {
|
|
56
|
+
// Infrastructure-owned units are resolved by the engine, not agents --
|
|
57
|
+
// exclude them from strategy completion detection.
|
|
58
|
+
if (unit.strategyId && !unit.infrastructureOwned) {
|
|
59
|
+
const list = unitsByStrategy.get(unit.strategyId);
|
|
60
|
+
if (list)
|
|
61
|
+
list.push(unit);
|
|
62
|
+
else
|
|
63
|
+
unitsByStrategy.set(unit.strategyId, [unit]);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
for (const strategy of strategies) {
|
|
67
|
+
if (strategy.executionStatus !== 'in_progress' && strategy.executionStatus !== 'gate_fix_pending')
|
|
68
|
+
continue;
|
|
69
|
+
const strategyUnits = unitsByStrategy.get(strategy.id);
|
|
70
|
+
if (!strategyUnits || strategyUnits.length === 0)
|
|
71
|
+
continue;
|
|
72
|
+
const allTerminal = strategyUnits.every((u) => u.status === 'completed' || u.status === 'failed');
|
|
73
|
+
if (!allTerminal)
|
|
74
|
+
continue;
|
|
75
|
+
const failedUnits = strategyUnits.filter((u) => u.status === 'failed');
|
|
76
|
+
try {
|
|
77
|
+
if (failedUnits.length > 0) {
|
|
78
|
+
await updateStrategyExecutionStatus(strategy.id, 'failed', { gateFixStartedAt: null });
|
|
79
|
+
console.log(`[factory] Strategy "${strategy.name}" -> failed ` +
|
|
80
|
+
`(${failedUnits.length}/${strategyUnits.length} work units failed)`);
|
|
81
|
+
// Release the execution unit back to idle
|
|
82
|
+
try {
|
|
83
|
+
await releaseUnitForStrategy(state, strategy.id);
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
// Best effort
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
const isReEvaluation = strategy.executionStatus === 'gate_fix_pending';
|
|
91
|
+
// Clear gate_fix_started_at when leaving gate_fix_pending
|
|
92
|
+
await updateStrategyExecutionStatus(strategy.id, 'gating_deterministic', {
|
|
93
|
+
gateFixStartedAt: null,
|
|
94
|
+
});
|
|
95
|
+
console.log(`[factory] Strategy "${strategy.name}" -> gating_deterministic ` +
|
|
96
|
+
(isReEvaluation
|
|
97
|
+
? `(re-evaluation after gate fix)`
|
|
98
|
+
: `(${strategyUnits.length}/${strategyUnits.length} work units done, gates pending)`));
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
console.warn(`[factory] Failed to update strategy ${strategy.id} status:`, err.message);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// ============================================================================
|
|
107
|
+
// Instance completion check
|
|
108
|
+
// ============================================================================
|
|
109
|
+
/**
|
|
110
|
+
* Check whether the instance has completed (all strategies terminal).
|
|
111
|
+
*
|
|
112
|
+
* If all strategies are completed or failed, finalize the instance.
|
|
113
|
+
* Uses strategy-level completion (not work-unit level) for DAG-aware instances.
|
|
114
|
+
*
|
|
115
|
+
* The `runDesigningFn` and `runPlanningFn` callbacks allow the poll loop
|
|
116
|
+
* to inject the phase dispatch functions without creating a circular import.
|
|
117
|
+
*/
|
|
118
|
+
export async function checkInstanceCompletion(state, config, runDesigningFn, runPlanningFn) {
|
|
119
|
+
if (!config)
|
|
120
|
+
return;
|
|
121
|
+
if (state.status !== 'building')
|
|
122
|
+
return;
|
|
123
|
+
let strategies;
|
|
124
|
+
try {
|
|
125
|
+
const { getStrategiesByFactoryInstance } = await import('./strategy-design.js');
|
|
126
|
+
strategies = await getStrategiesByFactoryInstance(state.instanceId);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (strategies.length === 0)
|
|
132
|
+
return;
|
|
133
|
+
const allTerminal = strategies.every((s) => s.executionStatus === 'completed' || s.executionStatus === 'failed');
|
|
134
|
+
if (!allTerminal)
|
|
135
|
+
return;
|
|
136
|
+
const failedStrategies = strategies.filter((s) => s.executionStatus === 'failed');
|
|
137
|
+
// When all strategies succeeded and the instance uses a pipeline graph,
|
|
138
|
+
// attempt to advance to the next pipeline node instead of completing.
|
|
139
|
+
if (failedStrategies.length === 0 && usesPipeline(state)) {
|
|
140
|
+
const handled = await handlePipelineAdvance(state, runDesigningFn, runPlanningFn);
|
|
141
|
+
if (handled)
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// Terminate any still-running units
|
|
145
|
+
terminateAllUnits(state);
|
|
146
|
+
if (failedStrategies.length > 0) {
|
|
147
|
+
console.log(`[factory] All strategies terminal. ${failedStrategies.length} failed -- marking instance failed.`);
|
|
148
|
+
state.status = 'failed';
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
console.log(`[factory] All strategies completed -- marking instance completed.`);
|
|
152
|
+
state.status = 'completed';
|
|
153
|
+
}
|
|
154
|
+
// Completion gate + report + workflow transition
|
|
155
|
+
if (state.status === 'completed') {
|
|
156
|
+
await runCompletionSequence(state, config);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
await transitionInstanceStatus(state, 'failed', 'All strategies failed or no progress possible');
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Handle pipeline node advancement after all strategies complete successfully.
|
|
164
|
+
*
|
|
165
|
+
* Returns true if the pipeline was advanced (or paused/escalated), meaning the
|
|
166
|
+
* caller should return early. Returns false to fall through to normal completion.
|
|
167
|
+
*/
|
|
168
|
+
async function handlePipelineAdvance(state, runDesigningFn, runPlanningFn) {
|
|
169
|
+
const workUnits = await getInstanceWorkUnits(state.instanceId);
|
|
170
|
+
const completedUnits = workUnits.filter((u) => u.status === 'completed');
|
|
171
|
+
const wallClockMs = state.startedAt ? Date.now() - state.startedAt.getTime() : 0;
|
|
172
|
+
const metrics = collectMetrics({
|
|
173
|
+
cycleCount: state.completionGateIterations,
|
|
174
|
+
deliveryCompletionPct: workUnits.length > 0
|
|
175
|
+
? (completedUnits.length / workUnits.length) * 100
|
|
176
|
+
: 0,
|
|
177
|
+
wallClockMinutes: wallClockMs / 60_000,
|
|
178
|
+
});
|
|
179
|
+
const advanceResult = advancePipeline(state, metrics);
|
|
180
|
+
switch (advanceResult.outcome) {
|
|
181
|
+
case 'advanced':
|
|
182
|
+
return handlePipelineNodeTransition(state, advanceResult.nextNodeId, runDesigningFn, runPlanningFn);
|
|
183
|
+
case 'completed':
|
|
184
|
+
console.log(`[factory] Pipeline completed at terminal node for instance ${state.instanceId}`);
|
|
185
|
+
return false;
|
|
186
|
+
case 'no_match': {
|
|
187
|
+
terminateAllUnits(state);
|
|
188
|
+
const nodeLabel = getNodeLabel(state.pipelineGraph, state.currentPipelineNodeId);
|
|
189
|
+
console.warn(`[factory] Pipeline stuck: no edge conditions matched at node "${nodeLabel}" ` +
|
|
190
|
+
`for instance ${state.instanceId}. Escalating.`);
|
|
191
|
+
await createFactoryEscalation(state.instanceId, `Pipeline stuck at node "${nodeLabel}": no outgoing edge conditions matched`, `Review pipeline edge conditions for node "${nodeLabel}" and either ` +
|
|
192
|
+
`add a fallback edge or manually advance the instance.`);
|
|
193
|
+
state.status = 'paused';
|
|
194
|
+
await updateInstanceStatus(state.instanceId, 'paused');
|
|
195
|
+
return true;
|
|
196
|
+
}
|
|
197
|
+
default:
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Transition the instance to a new pipeline node after the pipeline evaluator
|
|
203
|
+
* determined the next node. Resets execution state and kicks off the
|
|
204
|
+
* appropriate phase (designing or planning based on node template type).
|
|
205
|
+
*
|
|
206
|
+
* Returns true (caller should return early) unless the next node is terminal.
|
|
207
|
+
*/
|
|
208
|
+
async function handlePipelineNodeTransition(state, nextNodeId, runDesigningFn, runPlanningFn) {
|
|
209
|
+
const nextNodeTemplateType = state.pipelineGraph.nodes.find((n) => n.id === nextNodeId)?.templateType;
|
|
210
|
+
// Terminal nodes are stop signals -- fall through to normal completion.
|
|
211
|
+
if (nextNodeTemplateType === 'terminal') {
|
|
212
|
+
const nodeLabel = getNodeLabel(state.pipelineGraph, nextNodeId);
|
|
213
|
+
console.log(`[factory] Pipeline advanced to terminal node "${nodeLabel}" -- ` +
|
|
214
|
+
`completing instance ${state.instanceId}`);
|
|
215
|
+
return false;
|
|
216
|
+
}
|
|
217
|
+
// Reset execution state for the new pipeline node
|
|
218
|
+
terminateAllUnits(state);
|
|
219
|
+
await deleteExecutionUnitsByInstance(state.instanceId);
|
|
220
|
+
state.currentPipelineNodeId = nextNodeId;
|
|
221
|
+
state.executionUnits.clear();
|
|
222
|
+
state.completionGateIterations = 0;
|
|
223
|
+
const nodeLabel = getNodeLabel(state.pipelineGraph, nextNodeId);
|
|
224
|
+
// Engineering nodes skip strategy redesign -- go directly to planning.
|
|
225
|
+
if (nextNodeTemplateType === 'engineering') {
|
|
226
|
+
state.status = 'planning';
|
|
227
|
+
await updateInstanceStatus(state.instanceId, 'planning', {
|
|
228
|
+
currentPipelineNodeId: nextNodeId,
|
|
229
|
+
});
|
|
230
|
+
console.log(`[factory] Pipeline advanced to engineering node "${nodeLabel}" (${nextNodeId}) ` +
|
|
231
|
+
`-- skipping design, starting planning for instance ${state.instanceId}`);
|
|
232
|
+
runPlanningFn(state).catch((error) => {
|
|
233
|
+
console.error(`[factory] Planning failed for pipeline node "${nextNodeId}" ` +
|
|
234
|
+
`on instance ${state.instanceId}:`, error.message);
|
|
235
|
+
handleInstanceFailure(state, `Planning failed for pipeline node: ${error.message}`);
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
state.status = 'designing';
|
|
240
|
+
await updateInstanceStatus(state.instanceId, 'designing', {
|
|
241
|
+
currentPipelineNodeId: nextNodeId,
|
|
242
|
+
});
|
|
243
|
+
console.log(`[factory] Pipeline advanced to node "${nodeLabel}" (${nextNodeId}) ` +
|
|
244
|
+
`for instance ${state.instanceId}`);
|
|
245
|
+
runDesigningFn(state).catch((error) => {
|
|
246
|
+
console.error(`[factory] Designing failed for pipeline node "${nextNodeId}" ` +
|
|
247
|
+
`on instance ${state.instanceId}:`, error.message);
|
|
248
|
+
handleInstanceFailure(state, `Designing failed for pipeline node: ${error.message}`);
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
return true;
|
|
252
|
+
}
|
|
253
|
+
// ============================================================================
|
|
254
|
+
// Completion sequence
|
|
255
|
+
// ============================================================================
|
|
256
|
+
/**
|
|
257
|
+
* Run the completion sequence: completion gate, report, workflow transition.
|
|
258
|
+
*/
|
|
259
|
+
export async function runCompletionSequence(state, config, governor) {
|
|
260
|
+
if (!config)
|
|
261
|
+
return;
|
|
262
|
+
// Skip completion gate entirely when disabled -- proceed directly to completion
|
|
263
|
+
if (!state.blueprint.completionGateEnabled) {
|
|
264
|
+
console.log(`[factory] Completion gate disabled on blueprint -- skipping AI review, proceeding to completion`);
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
const maxIterations = state.blueprint.maxInstanceIterations ?? DEFAULT_MAX_INSTANCE_ITERATIONS;
|
|
268
|
+
if (state.completionGateIterations < maxIterations) {
|
|
269
|
+
try {
|
|
270
|
+
const workUnits = await getInstanceWorkUnits(state.instanceId);
|
|
271
|
+
const gateResult = await runCompletionGate(state, config, workUnits, governor ?? null);
|
|
272
|
+
if (gateResult) {
|
|
273
|
+
try {
|
|
274
|
+
await createCycleEvaluation(state.instanceId, state.completionGateIterations + 1, gateResult);
|
|
275
|
+
}
|
|
276
|
+
catch (persistErr) {
|
|
277
|
+
console.warn(`[factory] Failed to persist cycle evaluation (non-fatal): ` +
|
|
278
|
+
`${persistErr instanceof Error ? persistErr.message : String(persistErr)}`);
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
if (gateResult && !gateResult.passed && gateResult.gaps.some((g) => g.severity === 'critical')) {
|
|
282
|
+
const replanResult = await runReplanningPhase(state, config, governor ?? null);
|
|
283
|
+
if (replanResult.success && replanResult.workUnitsCreated > 0) {
|
|
284
|
+
state.completionGateIterations++;
|
|
285
|
+
state.status = 'building';
|
|
286
|
+
await updateInstanceStatus(state.instanceId, 'building', {
|
|
287
|
+
completion_gate_iterations: state.completionGateIterations,
|
|
288
|
+
});
|
|
289
|
+
console.log(`[factory] Re-planning cycle ${state.completionGateIterations}: ` +
|
|
290
|
+
`${replanResult.workUnitsCreated} work unit(s) created from fresh context ` +
|
|
291
|
+
`(iteration ${state.completionGateIterations}/${maxIterations})`);
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
if (!replanResult.success) {
|
|
295
|
+
const failReason = `Re-planning failed after completion gate found critical gaps: ${replanResult.error ?? 'unknown'}`;
|
|
296
|
+
await escalateOrFail(state, TRIGGER_RESOURCE_LIMIT_EXCEEDED, 'replanning_failed', failReason, () => transitionInstanceStatus(state, 'failed', `Re-planning failed: ${replanResult.error ?? 'unknown'}`));
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
const noWorkReason = 'Re-planning succeeded but produced no work units despite critical gaps. ' +
|
|
300
|
+
'The planner could not determine what additional work is needed.';
|
|
301
|
+
await escalateOrFail(state, TRIGGER_RESOURCE_LIMIT_EXCEEDED, 'replanning_no_work_units', noWorkReason, () => transitionInstanceStatus(state, 'failed', noWorkReason));
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
state.completionGateIterations++;
|
|
305
|
+
await updateInstanceStatus(state.instanceId, 'building', {
|
|
306
|
+
completion_gate_iterations: state.completionGateIterations,
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
catch (err) {
|
|
310
|
+
console.warn(`[factory] Completion gate error (non-fatal): ${err instanceof Error ? err.message : String(err)}`);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
else if (state.completionGateIterations >= maxIterations) {
|
|
314
|
+
console.log(`[factory] Completion gate iteration limit reached (${maxIterations}) -- proceeding to completion`);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
// Generate completion report
|
|
318
|
+
if (state.completionReport) {
|
|
319
|
+
console.log('[factory] Completion report already exists -- skipping regeneration');
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
try {
|
|
323
|
+
const report = await generateCompletionReport(state, config, governor ?? null);
|
|
324
|
+
if (report) {
|
|
325
|
+
await updateInstanceStatus(state.instanceId, state.status, {
|
|
326
|
+
completionReport: report,
|
|
327
|
+
});
|
|
328
|
+
state.completionReport = report;
|
|
329
|
+
console.log(`[factory] Completion report generated: ${report.keep.length} keep, ` +
|
|
330
|
+
`${report.stop.length} stop, ${report.change.length} change items. ` +
|
|
331
|
+
`Spec quality: ${report.specQualityAssessment.overallScore}. ` +
|
|
332
|
+
`Strategy design: ${report.strategyDesignAssessment.overallScore}.`);
|
|
333
|
+
if (state.specId) {
|
|
334
|
+
const summary = {
|
|
335
|
+
specQualityOverallScore: report.specQualityAssessment.overallScore,
|
|
336
|
+
specQualityGaps: report.specQualityAssessment.gaps,
|
|
337
|
+
strategyDesignOverallScore: report.strategyDesignAssessment.overallScore,
|
|
338
|
+
changeItems: report.change,
|
|
339
|
+
keepItems: report.keep,
|
|
340
|
+
stopItems: report.stop,
|
|
341
|
+
executionMetrics: report.executionMetrics,
|
|
342
|
+
completedAt: new Date().toISOString(),
|
|
343
|
+
instanceId: state.instanceId,
|
|
344
|
+
};
|
|
345
|
+
updateSpecCompletionSummary(state.specId, summary).catch((cbErr) => {
|
|
346
|
+
console.warn(`[factory] Spec completion callback failed (non-fatal): ` +
|
|
347
|
+
`${cbErr instanceof Error ? cbErr.message : String(cbErr)}`);
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
console.warn('[factory] Completion report generation returned null -- proceeding without report');
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
catch (reportErr) {
|
|
356
|
+
console.warn(`[factory] Completion report error (non-fatal): ${reportErr instanceof Error ? reportErr.message : String(reportErr)}`);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
// Finalize
|
|
360
|
+
await transitionInstanceStatus(state, 'completed');
|
|
361
|
+
const completion = await detectCompletion(state.instanceId, config);
|
|
362
|
+
if (!completion.isComplete) {
|
|
363
|
+
state.status = 'building';
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=instance-completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-completion.js","sourceRoot":"","sources":["../src/instance-completion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory instance lifecycle -- barrel re-export.
|
|
3
|
+
*
|
|
4
|
+
* The implementation has been split into focused modules:
|
|
5
|
+
* - instance-poll-loop.ts -- poll loop, instance discovery, active tracking
|
|
6
|
+
* - instance-phase-dispatch.ts -- phase handlers (designing, planning, building, gating)
|
|
7
|
+
* - instance-state-machine.ts -- workflow transitions, pause/resume, error handling
|
|
8
|
+
* - instance-completion.ts -- strategy/instance completion, gate evaluation, reports
|
|
9
|
+
*
|
|
10
|
+
* This file preserves the original import path for consumers (index.ts, factory-engine.ts).
|
|
11
|
+
*/
|
|
12
|
+
export { startPollLoop, stopPollLoop, getActiveInstances, setShuttingDown, setFactoryGovernor, } from './instance-poll-loop.js';
|
|
13
|
+
export { handleInstanceFailure } from './instance-state-machine.js';
|
|
14
|
+
export { checkGateFixTimeouts } from './instance-phase-dispatch.js';
|
|
15
|
+
//# sourceMappingURL=instance-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-lifecycle.d.ts","sourceRoot":"","sources":["../src/instance-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EACL,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAGpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory instance lifecycle -- barrel re-export.
|
|
3
|
+
*
|
|
4
|
+
* The implementation has been split into focused modules:
|
|
5
|
+
* - instance-poll-loop.ts -- poll loop, instance discovery, active tracking
|
|
6
|
+
* - instance-phase-dispatch.ts -- phase handlers (designing, planning, building, gating)
|
|
7
|
+
* - instance-state-machine.ts -- workflow transitions, pause/resume, error handling
|
|
8
|
+
* - instance-completion.ts -- strategy/instance completion, gate evaluation, reports
|
|
9
|
+
*
|
|
10
|
+
* This file preserves the original import path for consumers (index.ts, factory-engine.ts).
|
|
11
|
+
*/
|
|
12
|
+
// Poll loop controls
|
|
13
|
+
export { startPollLoop, stopPollLoop, getActiveInstances, setShuttingDown, setFactoryGovernor, } from './instance-poll-loop.js';
|
|
14
|
+
// Error handling
|
|
15
|
+
export { handleInstanceFailure } from './instance-state-machine.js';
|
|
16
|
+
// Phase dispatch (checkGateFixTimeouts is consumed by factory-engine)
|
|
17
|
+
export { checkGateFixTimeouts } from './instance-phase-dispatch.js';
|
|
18
|
+
//# sourceMappingURL=instance-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-lifecycle.js","sourceRoot":"","sources":["../src/instance-lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,qBAAqB;AACrB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AAEjC,iBAAiB;AACjB,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,sEAAsE;AACtE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Factory instance phase dispatch -- orchestrates designing, planning,
|
|
3
|
+
* building, and review phases.
|
|
4
|
+
*
|
|
5
|
+
* Contains the phase handler functions that drive instances through
|
|
6
|
+
* their lifecycle stages. Imports from instance-state-machine (leaf)
|
|
7
|
+
* and instance-completion, but NOT from instance-poll-loop.
|
|
8
|
+
*/
|
|
9
|
+
import type { ResourceGovernor } from '@telora/daemon-core';
|
|
10
|
+
import type { FactoryConfig, FactoryInstanceState } from './types.js';
|
|
11
|
+
/**
|
|
12
|
+
* Set the module-level config for phase dispatch functions.
|
|
13
|
+
* Called by the poll loop when starting.
|
|
14
|
+
*/
|
|
15
|
+
export declare function setPhaseDispatchConfig(factoryConfig: FactoryConfig): void;
|
|
16
|
+
/**
|
|
17
|
+
* Set the module-level governor for phase dispatch functions.
|
|
18
|
+
* Called by the poll loop when the governor is set.
|
|
19
|
+
*/
|
|
20
|
+
export declare function setPhaseDispatchGovernor(gov: ResourceGovernor): void;
|
|
21
|
+
export declare function getCurrentNodeTemplateType(state: FactoryInstanceState): string | null;
|
|
22
|
+
/**
|
|
23
|
+
* Run the designing phase for an instance.
|
|
24
|
+
*
|
|
25
|
+
* Creates a git worktree, spawns Claude Code to decompose the specification
|
|
26
|
+
* into bounded strategies, validates and persists them, then transitions
|
|
27
|
+
* to "planning".
|
|
28
|
+
*/
|
|
29
|
+
export declare function runDesigning(state: FactoryInstanceState): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Execute the Review pipeline node.
|
|
32
|
+
*
|
|
33
|
+
* Review nodes skip the full design/plan/build cycle. Instead they:
|
|
34
|
+
* 1. Run the completion gate against all work produced so far
|
|
35
|
+
* 2. Use gap counts to populate pipeline edge metrics
|
|
36
|
+
* 3. Advance the pipeline (back to Engineering if gaps, to Done if clean)
|
|
37
|
+
* 4. Store gap details in state.reviewGaps so the next Engineering cycle
|
|
38
|
+
* can constrain its scope to closing those gaps only
|
|
39
|
+
*/
|
|
40
|
+
export declare function runReviewGateAndAdvance(state: FactoryInstanceState): Promise<void>;
|
|
41
|
+
/**
|
|
42
|
+
* Run the planning phase for an instance.
|
|
43
|
+
*
|
|
44
|
+
* Creates a git worktree, spawns Claude Code to generate a work plan,
|
|
45
|
+
* validates and persists work units, then transitions to "building".
|
|
46
|
+
*/
|
|
47
|
+
export declare function runPlanning(state: FactoryInstanceState): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Check on an instance in the building phase.
|
|
50
|
+
*
|
|
51
|
+
* Runs resource limit checks, the DAG-aware scheduler to assign strategies
|
|
52
|
+
* to execution units, spawns sessions for newly assigned units, monitors
|
|
53
|
+
* running unit health, evaluates strategy-level gates, and checks for
|
|
54
|
+
* instance completion.
|
|
55
|
+
*/
|
|
56
|
+
export declare function checkBuilding(state: FactoryInstanceState): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Log a compact cycle summary showing execution unit and strategy states.
|
|
59
|
+
*/
|
|
60
|
+
export declare function logCycleSummary(state: FactoryInstanceState): void;
|
|
61
|
+
/**
|
|
62
|
+
* Check for strategies stuck in gate_fix_pending past their timeout.
|
|
63
|
+
*
|
|
64
|
+
* For each gate_fix_pending strategy with a configured gate_fix_timeout_ms,
|
|
65
|
+
* checks whether gate_fix_started_at + timeout has elapsed. On timeout,
|
|
66
|
+
* transitions the strategy to failed, creates an escalation, and terminates
|
|
67
|
+
* the unit session.
|
|
68
|
+
*
|
|
69
|
+
* Also warns about orphaned gate_fix_pending strategies that have no live
|
|
70
|
+
* unit session (the scheduler may reassign, so we don't auto-fail).
|
|
71
|
+
*/
|
|
72
|
+
/** @internal Exported for testing. */
|
|
73
|
+
export declare function checkGateFixTimeouts(state: FactoryInstanceState): Promise<void>;
|
|
74
|
+
export { recoverResumedInstance } from './instance-state-machine.js';
|
|
75
|
+
//# sourceMappingURL=instance-phase-dispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instance-phase-dispatch.d.ts","sourceRoot":"","sources":["../src/instance-phase-dispatch.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EACV,aAAa,EACb,oBAAoB,EAErB,MAAM,YAAY,CAAC;AA4CpB;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,aAAa,GAAG,IAAI,CAEzE;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,CAEpE;AAMD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,oBAAoB,GAAG,MAAM,GAAG,IAAI,CAIrF;AAMD;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqG7E;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4KxF;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C5E;AA6ID;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuG9E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,IAAI,CAiBjE;AAuED;;;;;;;;;;GAUG;AACH,sCAAsC;AACtC,wBAAsB,oBAAoB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyErF;AAMD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}
|