@telora/daemon 0.18.40 → 0.18.55
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/build-info.json +12 -3
- package/dist/completion/advanceability.d.ts +66 -0
- package/dist/completion/advanceability.d.ts.map +1 -0
- package/dist/completion/advanceability.js +112 -0
- package/dist/completion/advanceability.js.map +1 -0
- package/dist/completion/event.d.ts +28 -52
- package/dist/completion/event.d.ts.map +1 -1
- package/dist/completion/event.js +79 -99
- package/dist/completion/event.js.map +1 -1
- package/dist/completion/progress-snapshot.d.ts +15 -4
- package/dist/completion/progress-snapshot.d.ts.map +1 -1
- package/dist/completion/progress-snapshot.js +20 -4
- package/dist/completion/progress-snapshot.js.map +1 -1
- package/dist/completion/team-completion.d.ts.map +1 -1
- package/dist/completion/team-completion.js +32 -2
- package/dist/completion/team-completion.js.map +1 -1
- package/dist/crash-recovery.d.ts +48 -0
- package/dist/crash-recovery.d.ts.map +1 -1
- package/dist/crash-recovery.js +166 -30
- package/dist/crash-recovery.js.map +1 -1
- package/dist/delivery-advance-block.d.ts +17 -1
- package/dist/delivery-advance-block.d.ts.map +1 -1
- package/dist/delivery-advance-block.js +31 -8
- package/dist/delivery-advance-block.js.map +1 -1
- package/dist/escalation-provenance.d.ts +5 -1
- package/dist/escalation-provenance.d.ts.map +1 -1
- package/dist/escalation-provenance.js +46 -4
- package/dist/escalation-provenance.js.map +1 -1
- package/dist/focus-executor.d.ts +7 -2
- package/dist/focus-executor.d.ts.map +1 -1
- package/dist/focus-executor.js +21 -9
- package/dist/focus-executor.js.map +1 -1
- package/dist/focus-lifecycle.d.ts.map +1 -1
- package/dist/focus-lifecycle.js +20 -0
- package/dist/focus-lifecycle.js.map +1 -1
- package/dist/git-activity.d.ts +15 -0
- package/dist/git-activity.d.ts.map +1 -1
- package/dist/git-activity.js +24 -0
- package/dist/git-activity.js.map +1 -1
- package/dist/git-genesis.d.ts +100 -0
- package/dist/git-genesis.d.ts.map +1 -0
- package/dist/git-genesis.js +231 -0
- package/dist/git-genesis.js.map +1 -0
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +28 -5
- package/dist/git.js.map +1 -1
- package/dist/loop-engine-types.d.ts +40 -0
- package/dist/loop-engine-types.d.ts.map +1 -0
- package/dist/loop-engine-types.js +11 -0
- package/dist/loop-engine-types.js.map +1 -0
- package/dist/loop-engine.d.ts +52 -0
- package/dist/loop-engine.d.ts.map +1 -1
- package/dist/loop-engine.js +91 -10
- package/dist/loop-engine.js.map +1 -1
- package/dist/loop-llm-flag.d.ts +32 -0
- package/dist/loop-llm-flag.d.ts.map +1 -0
- package/dist/loop-llm-flag.js +35 -0
- package/dist/loop-llm-flag.js.map +1 -0
- package/dist/loop-operational-block.d.ts +44 -0
- package/dist/loop-operational-block.d.ts.map +1 -0
- package/dist/loop-operational-block.js +47 -0
- package/dist/loop-operational-block.js.map +1 -0
- package/dist/merge-back-loop.d.ts.map +1 -1
- package/dist/merge-back-loop.js +1 -0
- package/dist/merge-back-loop.js.map +1 -1
- package/dist/nexus-intake.d.ts +26 -3
- package/dist/nexus-intake.d.ts.map +1 -1
- package/dist/nexus-intake.js +62 -10
- package/dist/nexus-intake.js.map +1 -1
- package/dist/output-monitor.js +5 -8
- package/dist/output-monitor.js.map +1 -1
- package/dist/prd-controller.d.ts +0 -2
- package/dist/prd-controller.d.ts.map +1 -1
- package/dist/prd-controller.js +14 -35
- package/dist/prd-controller.js.map +1 -1
- package/dist/prd-divergence.d.ts +19 -8
- package/dist/prd-divergence.d.ts.map +1 -1
- package/dist/prd-divergence.js +7 -26
- package/dist/prd-divergence.js.map +1 -1
- package/dist/prd-viability.d.ts +14 -15
- package/dist/prd-viability.d.ts.map +1 -1
- package/dist/prd-viability.js +21 -34
- package/dist/prd-viability.js.map +1 -1
- package/dist/queries/prd.d.ts +24 -2
- package/dist/queries/prd.d.ts.map +1 -1
- package/dist/queries/prd.js +17 -0
- package/dist/queries/prd.js.map +1 -1
- package/dist/queries/schemas.d.ts +28 -0
- package/dist/queries/schemas.d.ts.map +1 -1
- package/dist/queries/schemas.js +26 -0
- package/dist/queries/schemas.js.map +1 -1
- package/dist/queries/sessions.d.ts +14 -0
- package/dist/queries/sessions.d.ts.map +1 -1
- package/dist/queries/sessions.js +19 -0
- package/dist/queries/sessions.js.map +1 -1
- package/dist/queries/starter-repo.d.ts +27 -0
- package/dist/queries/starter-repo.d.ts.map +1 -0
- package/dist/queries/starter-repo.js +32 -0
- package/dist/queries/starter-repo.js.map +1 -0
- package/dist/session-lineage.d.ts +25 -0
- package/dist/session-lineage.d.ts.map +1 -1
- package/dist/session-lineage.js +23 -0
- package/dist/session-lineage.js.map +1 -1
- package/dist/session-stamp.d.ts +63 -0
- package/dist/session-stamp.d.ts.map +1 -0
- package/dist/session-stamp.js +65 -0
- package/dist/session-stamp.js.map +1 -0
- package/dist/spawner/helpers.d.ts.map +1 -1
- package/dist/spawner/helpers.js +5 -8
- package/dist/spawner/helpers.js.map +1 -1
- package/dist/supabase.d.ts +2 -2
- package/dist/supabase.d.ts.map +1 -1
- package/dist/supabase.js +1 -1
- package/dist/supabase.js.map +1 -1
- package/dist/templates/claude-md.d.ts +1 -1
- package/dist/templates/claude-md.d.ts.map +1 -1
- package/dist/templates/claude-md.js +6 -3
- package/dist/templates/claude-md.js.map +1 -1
- package/dist/types/focus.d.ts +24 -0
- package/dist/types/focus.d.ts.map +1 -1
- package/dist/types/session.d.ts +24 -0
- package/dist/types/session.d.ts.map +1 -1
- package/package.json +2 -2
- package/dist/crash-recovery-cleanup.d.ts +0 -21
- package/dist/crash-recovery-cleanup.d.ts.map +0 -1
- package/dist/crash-recovery-cleanup.js +0 -205
- package/dist/crash-recovery-cleanup.js.map +0 -1
- package/dist/crash-recovery-scan.d.ts +0 -19
- package/dist/crash-recovery-scan.d.ts.map +0 -1
- package/dist/crash-recovery-scan.js +0 -145
- package/dist/crash-recovery-scan.js.map +0 -1
- package/dist/crash-recovery-types.d.ts +0 -49
- package/dist/crash-recovery-types.d.ts.map +0 -1
- package/dist/crash-recovery-types.js +0 -13
- package/dist/crash-recovery-types.js.map +0 -1
- package/dist/prd-clearance-engine.d.ts +0 -121
- package/dist/prd-clearance-engine.d.ts.map +0 -1
- package/dist/prd-clearance-engine.js +0 -164
- package/dist/prd-clearance-engine.js.map +0 -1
package/build-info.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"commitSha": "
|
|
3
|
-
"builtAt": "2026-06-
|
|
2
|
+
"commitSha": "8e7b5bb3",
|
|
3
|
+
"builtAt": "2026-06-24T02:57:20.438Z",
|
|
4
4
|
"expectedMigrations": [
|
|
5
5
|
"20250829113330_create_org_nodes_table.sql",
|
|
6
6
|
"20250829113402_fix_function_security_search_path.sql",
|
|
@@ -668,6 +668,15 @@
|
|
|
668
668
|
"20260620210359_strengthen_service_definitions_rls.sql",
|
|
669
669
|
"20260621021153_increment_delivery_iteration_count_on_verify_failed.sql",
|
|
670
670
|
"20260621022145_agent_escalations_kind_stall_detectors.sql",
|
|
671
|
-
"20260621155052_nexus_intake_pending_and_inbox_decompose.sql"
|
|
671
|
+
"20260621155052_nexus_intake_pending_and_inbox_decompose.sql",
|
|
672
|
+
"20260622113621_add_products_nexus_intake_role_id.sql",
|
|
673
|
+
"20260623193832_starter_repos_admin_write_rls.sql",
|
|
674
|
+
"20260623224136_create_starter_repos.sql",
|
|
675
|
+
"20260623225037_add_prds_starter_repo_id.sql",
|
|
676
|
+
"20260624001320_create_agent_session_passes.sql",
|
|
677
|
+
"20260624001340_agent_sessions_pass_segment_columns.sql",
|
|
678
|
+
"20260624003945_agent_session_pass_write_path.sql",
|
|
679
|
+
"20260624010232_backfill_agent_session_passes.sql",
|
|
680
|
+
"20260624011010_reality_metrics_pass_grain.sql"
|
|
672
681
|
]
|
|
673
682
|
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Review-window + non-advanceability predicates for the team-completion
|
|
3
|
+
* watchdog.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from completion/event.ts (which re-exports the surface below to
|
|
6
|
+
* preserve the existing import paths) to keep that file under the structural
|
|
7
|
+
* size lint -- the same reason progress-snapshot.ts was split out. These are
|
|
8
|
+
* the PURE decision predicates the watchdog consults: is the focus in a review
|
|
9
|
+
* window (so a teardown branch would SIGTERM a live review team), and is a
|
|
10
|
+
* remaining delivery a genuine dead end (so the daemon must escalate rather
|
|
11
|
+
* than churn a respawn loop). They hold no module state.
|
|
12
|
+
*/
|
|
13
|
+
import type { FocusDeliveryInfo, Workflow } from '../types.js';
|
|
14
|
+
/**
|
|
15
|
+
* The review window is open when a review has been requested AND at least one
|
|
16
|
+
* delivery still sits in `verify`. During this window the focus's deliveries
|
|
17
|
+
* are all cascadable (verify counts as terminal-for-the-team), so the
|
|
18
|
+
* all-terminal / no-actionable-work teardown branches in handleCompletionEvent
|
|
19
|
+
* would SIGTERM a freshly-spawned REVIEW team before it can complete the
|
|
20
|
+
* review -- the teardown race that strands the focus in `reviewing`. Pure and
|
|
21
|
+
* exported for direct unit testing.
|
|
22
|
+
*/
|
|
23
|
+
export declare function isInReviewWindow(reviewRequestedAt: string | null, deliveries: FocusDeliveryInfo[]): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* A delivery is *non-advanceable* when neither the team nor the daemon can move
|
|
26
|
+
* it forward. The check must mirror how the daemon ACTUALLY advances deliveries,
|
|
27
|
+
* not an idealized transition-graph model:
|
|
28
|
+
*
|
|
29
|
+
* (a) Its resolved current_workflow_stage_id is NULL. advanceDeliveryStatuses
|
|
30
|
+
* bails with "no workflow stage ID, skipping advance" -- the delivery can
|
|
31
|
+
* never advance through the workflow. A dead end for ANY status.
|
|
32
|
+
* (b) Agent-actionable statuses (queued / coding / verify_failed) with a
|
|
33
|
+
* resolved stage are NEVER dead ends. The daemon advances them by
|
|
34
|
+
* NAME-based stage stepping -- advanceDeliveryStatuses (focus-completion.ts)
|
|
35
|
+
* and the listener's checkDeliveryAutoAdvance both step
|
|
36
|
+
* queued|verify_failed -> coding -> verify by stage NAME once work issues
|
|
37
|
+
* are Done, independent of the transition graph. (The earlier is_automatic
|
|
38
|
+
* edge test here produced FALSE dead ends for the built-in verify_failed /
|
|
39
|
+
* queued stages, which carry no automatic edge by design: a verify_failed
|
|
40
|
+
* delivery the listener advanced seconds later was escalated as
|
|
41
|
+
* "non-advanceable", and the resulting team_failure escalation wedged the
|
|
42
|
+
* focus's review respawn.)
|
|
43
|
+
* (c) Any other non-terminal stage (a daemon/review-managed stage reached with
|
|
44
|
+
* a populated stage id) is a dead end only when its effective workflow has
|
|
45
|
+
* no is_automatic transition out of it -- name-based stepping does not
|
|
46
|
+
* apply to non-actionable statuses, so the daemon has no edge to follow.
|
|
47
|
+
*
|
|
48
|
+
* Pure and synchronous: the caller resolves the delivery's effective workflow
|
|
49
|
+
* (via fetchEffectiveWorkflow, transitions included) and passes both in. The
|
|
50
|
+
* caller is responsible for having already classified the delivery as
|
|
51
|
+
* non-terminal -- this function does not re-check that.
|
|
52
|
+
*
|
|
53
|
+
* Exported so tests and sister deliveries can verify the contract directly.
|
|
54
|
+
*/
|
|
55
|
+
export declare function isDeliveryNonAdvanceable(delivery: Pick<FocusDeliveryInfo, 'currentWorkflowStageId' | 'executionStatus'>, workflow: Workflow): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Find the first remaining non-terminal delivery that is non-advanceable.
|
|
58
|
+
* Resolves each delivery's effective workflow lazily and returns as soon as a
|
|
59
|
+
* dead-end delivery is found (short-circuit). Returns null when every remaining
|
|
60
|
+
* non-terminal delivery has a live forward path.
|
|
61
|
+
*
|
|
62
|
+
* Exported with the workflow fetch injected so tests can drive it without live
|
|
63
|
+
* Supabase/MCP.
|
|
64
|
+
*/
|
|
65
|
+
export declare function findNonAdvanceableDelivery(nonTerminal: FocusDeliveryInfo[], fetchEffectiveWorkflow: (deliveryId: string) => Promise<Workflow>): Promise<FocusDeliveryInfo | null>;
|
|
66
|
+
//# sourceMappingURL=advanceability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advanceability.d.ts","sourceRoot":"","sources":["../../src/completion/advanceability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG/D;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,UAAU,EAAE,iBAAiB,EAAE,GAC9B,OAAO,CAGT;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,wBAAwB,GAAG,iBAAiB,CAAC,EAC/E,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAqBT;AAED;;;;;;;;GAQG;AACH,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,iBAAiB,EAAE,EAChC,sBAAsB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,GAChE,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAuBnC"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Review-window + non-advanceability predicates for the team-completion
|
|
3
|
+
* watchdog.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from completion/event.ts (which re-exports the surface below to
|
|
6
|
+
* preserve the existing import paths) to keep that file under the structural
|
|
7
|
+
* size lint -- the same reason progress-snapshot.ts was split out. These are
|
|
8
|
+
* the PURE decision predicates the watchdog consults: is the focus in a review
|
|
9
|
+
* window (so a teardown branch would SIGTERM a live review team), and is a
|
|
10
|
+
* remaining delivery a genuine dead end (so the daemon must escalate rather
|
|
11
|
+
* than churn a respawn loop). They hold no module state.
|
|
12
|
+
*/
|
|
13
|
+
import { DELIVERY_STATUS } from '@telora/daemon-core';
|
|
14
|
+
import { isStatusAgentActionable } from '../stage-classifier.js';
|
|
15
|
+
/**
|
|
16
|
+
* The review window is open when a review has been requested AND at least one
|
|
17
|
+
* delivery still sits in `verify`. During this window the focus's deliveries
|
|
18
|
+
* are all cascadable (verify counts as terminal-for-the-team), so the
|
|
19
|
+
* all-terminal / no-actionable-work teardown branches in handleCompletionEvent
|
|
20
|
+
* would SIGTERM a freshly-spawned REVIEW team before it can complete the
|
|
21
|
+
* review -- the teardown race that strands the focus in `reviewing`. Pure and
|
|
22
|
+
* exported for direct unit testing.
|
|
23
|
+
*/
|
|
24
|
+
export function isInReviewWindow(reviewRequestedAt, deliveries) {
|
|
25
|
+
if (!reviewRequestedAt)
|
|
26
|
+
return false;
|
|
27
|
+
return deliveries.some(d => d.executionStatus === DELIVERY_STATUS.VERIFY);
|
|
28
|
+
}
|
|
29
|
+
// ── Non-advanceability check ──────────────────────────────────────────────
|
|
30
|
+
/**
|
|
31
|
+
* A delivery is *non-advanceable* when neither the team nor the daemon can move
|
|
32
|
+
* it forward. The check must mirror how the daemon ACTUALLY advances deliveries,
|
|
33
|
+
* not an idealized transition-graph model:
|
|
34
|
+
*
|
|
35
|
+
* (a) Its resolved current_workflow_stage_id is NULL. advanceDeliveryStatuses
|
|
36
|
+
* bails with "no workflow stage ID, skipping advance" -- the delivery can
|
|
37
|
+
* never advance through the workflow. A dead end for ANY status.
|
|
38
|
+
* (b) Agent-actionable statuses (queued / coding / verify_failed) with a
|
|
39
|
+
* resolved stage are NEVER dead ends. The daemon advances them by
|
|
40
|
+
* NAME-based stage stepping -- advanceDeliveryStatuses (focus-completion.ts)
|
|
41
|
+
* and the listener's checkDeliveryAutoAdvance both step
|
|
42
|
+
* queued|verify_failed -> coding -> verify by stage NAME once work issues
|
|
43
|
+
* are Done, independent of the transition graph. (The earlier is_automatic
|
|
44
|
+
* edge test here produced FALSE dead ends for the built-in verify_failed /
|
|
45
|
+
* queued stages, which carry no automatic edge by design: a verify_failed
|
|
46
|
+
* delivery the listener advanced seconds later was escalated as
|
|
47
|
+
* "non-advanceable", and the resulting team_failure escalation wedged the
|
|
48
|
+
* focus's review respawn.)
|
|
49
|
+
* (c) Any other non-terminal stage (a daemon/review-managed stage reached with
|
|
50
|
+
* a populated stage id) is a dead end only when its effective workflow has
|
|
51
|
+
* no is_automatic transition out of it -- name-based stepping does not
|
|
52
|
+
* apply to non-actionable statuses, so the daemon has no edge to follow.
|
|
53
|
+
*
|
|
54
|
+
* Pure and synchronous: the caller resolves the delivery's effective workflow
|
|
55
|
+
* (via fetchEffectiveWorkflow, transitions included) and passes both in. The
|
|
56
|
+
* caller is responsible for having already classified the delivery as
|
|
57
|
+
* non-terminal -- this function does not re-check that.
|
|
58
|
+
*
|
|
59
|
+
* Exported so tests and sister deliveries can verify the contract directly.
|
|
60
|
+
*/
|
|
61
|
+
export function isDeliveryNonAdvanceable(delivery, workflow) {
|
|
62
|
+
// (a) No resolved stage -> advanceDeliveryStatuses skips it.
|
|
63
|
+
const stageId = delivery.currentWorkflowStageId;
|
|
64
|
+
if (!stageId)
|
|
65
|
+
return true;
|
|
66
|
+
// (b) Agent-actionable + resolved stage -> the daemon advances it by
|
|
67
|
+
// name-based stepping (queued|verify_failed -> coding -> verify), so it is
|
|
68
|
+
// never a dead end regardless of the transition graph.
|
|
69
|
+
if (isStatusAgentActionable(delivery.executionStatus ?? '', workflow)) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
// (c) Non-actionable, non-terminal stage. The daemon only auto-advances such
|
|
73
|
+
// a stage over an automatic transition. A workflow that carries no
|
|
74
|
+
// transitions at all (e.g. a built-in default resolved without the transition
|
|
75
|
+
// set) is likewise a dead end for this stage.
|
|
76
|
+
const transitions = workflow.transitions ?? [];
|
|
77
|
+
const hasAutomaticExit = transitions.some(t => t.from_stage_id === stageId && t.is_automatic === true);
|
|
78
|
+
return !hasAutomaticExit;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Find the first remaining non-terminal delivery that is non-advanceable.
|
|
82
|
+
* Resolves each delivery's effective workflow lazily and returns as soon as a
|
|
83
|
+
* dead-end delivery is found (short-circuit). Returns null when every remaining
|
|
84
|
+
* non-terminal delivery has a live forward path.
|
|
85
|
+
*
|
|
86
|
+
* Exported with the workflow fetch injected so tests can drive it without live
|
|
87
|
+
* Supabase/MCP.
|
|
88
|
+
*/
|
|
89
|
+
export async function findNonAdvanceableDelivery(nonTerminal, fetchEffectiveWorkflow) {
|
|
90
|
+
for (const delivery of nonTerminal) {
|
|
91
|
+
// Fast path: a NULL stage is non-advanceable without needing the workflow.
|
|
92
|
+
if (!delivery.currentWorkflowStageId) {
|
|
93
|
+
return delivery;
|
|
94
|
+
}
|
|
95
|
+
try {
|
|
96
|
+
const workflow = await fetchEffectiveWorkflow(delivery.id);
|
|
97
|
+
if (isDeliveryNonAdvanceable(delivery, workflow)) {
|
|
98
|
+
return delivery;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
// Fail safe: if we cannot resolve the workflow we cannot prove the
|
|
103
|
+
// delivery is non-advanceable, so we do NOT escalate on it. Treat the
|
|
104
|
+
// lookup failure as "advanceable" and let the normal clean-termination
|
|
105
|
+
// path run -- a spurious escalation that parks a healthy focus is worse
|
|
106
|
+
// than one missed dead-end detection (the next tick retries).
|
|
107
|
+
console.warn(`[focus-executor] Non-advanceability workflow lookup failed for delivery ${delivery.id}: ${err.message}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
return null;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=advanceability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"advanceability.js","sourceRoot":"","sources":["../../src/completion/advanceability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEjE;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC9B,iBAAgC,EAChC,UAA+B;IAE/B,IAAI,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC;AAC5E,CAAC;AAED,6EAA6E;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAA+E,EAC/E,QAAkB;IAElB,6DAA6D;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,sBAAsB,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,qEAAqE;IACrE,2EAA2E;IAC3E,uDAAuD;IACvD,IAAI,uBAAuB,CAAC,QAAQ,CAAC,eAAe,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6EAA6E;IAC7E,mEAAmE;IACnE,8EAA8E;IAC9E,8CAA8C;IAC9C,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;IAC/C,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,OAAO,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI,CAC5D,CAAC;IACF,OAAO,CAAC,gBAAgB,CAAC;AAC3B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,WAAgC,EAChC,sBAAiE;IAEjE,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;QACnC,2EAA2E;QAC3E,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YACrC,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC3D,IAAI,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACjD,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mEAAmE;YACnE,sEAAsE;YACtE,uEAAuE;YACvE,wEAAwE;YACxE,8DAA8D;YAC9D,OAAO,CAAC,IAAI,CACV,2EAA2E,QAAQ,CAAC,EAAE,KAAM,GAAa,CAAC,OAAO,EAAE,CACpH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -10,6 +10,8 @@ import type { DaemonConfig, FocusTeamState, FocusDeliveryInfo, FocusIssueInfo, W
|
|
|
10
10
|
import { CompletionDetector, type CompletionInfo } from './detector.js';
|
|
11
11
|
import { type CreateEscalationParams } from '../queries/issues.js';
|
|
12
12
|
import { takeProgressSnapshot, snapshotsEqual } from './progress-snapshot.js';
|
|
13
|
+
import { isInReviewWindow, isDeliveryNonAdvanceable, findNonAdvanceableDelivery } from './advanceability.js';
|
|
14
|
+
export { isInReviewWindow, isDeliveryNonAdvanceable, findNonAdvanceableDelivery };
|
|
13
15
|
export { PLANNING_NO_DELIVERIES_REASON, NO_PROGRESS_ESCALATION_REASON, NON_ADVANCEABLE_ESCALATION_REASON, NON_ADVANCEABLE_CAUSE, type EscalationDeps, escalatePlanningFailure, escalateNoProgress, escalateNonAdvanceable, } from './event-escalations.js';
|
|
14
16
|
/**
|
|
15
17
|
* Maximum consecutive re-engagement cycles with no measurable progress before
|
|
@@ -76,59 +78,33 @@ export interface CompletionEventDeps {
|
|
|
76
78
|
sessionType: 'coding' | 'review';
|
|
77
79
|
succeeded: boolean;
|
|
78
80
|
}) => Promise<void>;
|
|
81
|
+
/**
|
|
82
|
+
* Resolve the focus's persistent worktree (path) so the no-progress guard can
|
|
83
|
+
* read its git state. Backs BOTH the git-activity dimension on the progress
|
|
84
|
+
* snapshot (a fresh commit on the focus branch resets the no-progress counter)
|
|
85
|
+
* AND the dirty re-wake-before-terminate guard. Optional: present in
|
|
86
|
+
* defaultDeps; a test that omits it (or one that returns undefined) simply
|
|
87
|
+
* gets focusHeadSha=null and no dirty re-wake -- identical to a focus with no
|
|
88
|
+
* registered worktree.
|
|
89
|
+
*/
|
|
90
|
+
getFocusWorktree?: (focusId: string) => {
|
|
91
|
+
worktreePath: string;
|
|
92
|
+
} | undefined;
|
|
93
|
+
/**
|
|
94
|
+
* True when the focus worktree has uncommitted changes. Backs the dirty
|
|
95
|
+
* re-wake guard: a team that PRODUCED code (dirty tree) is kept alive and
|
|
96
|
+
* nudged to commit rather than terminated for "no progress". Optional/injected
|
|
97
|
+
* so tests drive the git path without a real worktree.
|
|
98
|
+
*/
|
|
99
|
+
worktreeHasUncommittedChanges?: (worktreePath: string) => boolean;
|
|
100
|
+
/**
|
|
101
|
+
* Read the focus worktree's HEAD sha for the snapshot's git-activity
|
|
102
|
+
* dimension. Returns null when the worktree path does not exist or git fails.
|
|
103
|
+
* Optional/injected so tests can simulate a fresh commit (a different sha than
|
|
104
|
+
* the prior snapshot's) without a real git repo.
|
|
105
|
+
*/
|
|
106
|
+
readWorktreeHeadSha?: (worktreePath: string) => string | null;
|
|
79
107
|
}
|
|
80
|
-
/**
|
|
81
|
-
* The review window is open when a review has been requested AND at least one
|
|
82
|
-
* delivery still sits in `verify`. During this window the focus's deliveries
|
|
83
|
-
* are all cascadable (verify counts as terminal-for-the-team), so the
|
|
84
|
-
* all-terminal / no-actionable-work teardown branches in handleCompletionEvent
|
|
85
|
-
* would SIGTERM a freshly-spawned REVIEW team before it can complete the
|
|
86
|
-
* review -- the teardown race that strands the focus in `reviewing`. Pure and
|
|
87
|
-
* exported for direct unit testing.
|
|
88
|
-
*/
|
|
89
|
-
export declare function isInReviewWindow(reviewRequestedAt: string | null, deliveries: FocusDeliveryInfo[]): boolean;
|
|
90
|
-
/**
|
|
91
|
-
* A delivery is *non-advanceable* when neither the team nor the daemon can move
|
|
92
|
-
* it forward. The check must mirror how the daemon ACTUALLY advances deliveries,
|
|
93
|
-
* not an idealized transition-graph model:
|
|
94
|
-
*
|
|
95
|
-
* (a) Its resolved current_workflow_stage_id is NULL. advanceDeliveryStatuses
|
|
96
|
-
* bails with "no workflow stage ID, skipping advance" -- the delivery can
|
|
97
|
-
* never advance through the workflow. A dead end for ANY status.
|
|
98
|
-
* (b) Agent-actionable statuses (queued / coding / verify_failed) with a
|
|
99
|
-
* resolved stage are NEVER dead ends. The daemon advances them by
|
|
100
|
-
* NAME-based stage stepping -- advanceDeliveryStatuses (focus-completion.ts)
|
|
101
|
-
* and the listener's checkDeliveryAutoAdvance both step
|
|
102
|
-
* queued|verify_failed -> coding -> verify by stage NAME once work issues
|
|
103
|
-
* are Done, independent of the transition graph. (The earlier is_automatic
|
|
104
|
-
* edge test here produced FALSE dead ends for the built-in verify_failed /
|
|
105
|
-
* queued stages, which carry no automatic edge by design: a verify_failed
|
|
106
|
-
* delivery the listener advanced seconds later was escalated as
|
|
107
|
-
* "non-advanceable", and the resulting team_failure escalation wedged the
|
|
108
|
-
* focus's review respawn.)
|
|
109
|
-
* (c) Any other non-terminal stage (a daemon/review-managed stage reached with
|
|
110
|
-
* a populated stage id) is a dead end only when its effective workflow has
|
|
111
|
-
* no is_automatic transition out of it -- name-based stepping does not
|
|
112
|
-
* apply to non-actionable statuses, so the daemon has no edge to follow.
|
|
113
|
-
*
|
|
114
|
-
* Pure and synchronous: the caller resolves the delivery's effective workflow
|
|
115
|
-
* (via fetchEffectiveWorkflow, transitions included) and passes both in. The
|
|
116
|
-
* caller is responsible for having already classified the delivery as
|
|
117
|
-
* non-terminal -- this function does not re-check that.
|
|
118
|
-
*
|
|
119
|
-
* Exported so tests and sister deliveries can verify the contract directly.
|
|
120
|
-
*/
|
|
121
|
-
export declare function isDeliveryNonAdvanceable(delivery: Pick<FocusDeliveryInfo, 'currentWorkflowStageId' | 'executionStatus'>, workflow: Workflow): boolean;
|
|
122
|
-
/**
|
|
123
|
-
* Find the first remaining non-terminal delivery that is non-advanceable.
|
|
124
|
-
* Resolves each delivery's effective workflow lazily and returns as soon as a
|
|
125
|
-
* dead-end delivery is found (short-circuit). Returns null when every remaining
|
|
126
|
-
* non-terminal delivery has a live forward path.
|
|
127
|
-
*
|
|
128
|
-
* Exported with the workflow fetch injected so tests can drive it without live
|
|
129
|
-
* Supabase/MCP.
|
|
130
|
-
*/
|
|
131
|
-
export declare function findNonAdvanceableDelivery(nonTerminal: FocusDeliveryInfo[], fetchEffectiveWorkflow: (deliveryId: string) => Promise<Workflow>): Promise<FocusDeliveryInfo | null>;
|
|
132
108
|
/**
|
|
133
109
|
* Handle a 'complete' event from the CompletionDetector.
|
|
134
110
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/completion/event.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE7G,OAAO,EAAE,kBAAkB,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAOxE,OAAO,EAGL,KAAK,sBAAsB,EAC5B,MAAM,sBAAsB,CAAC;AAO9B,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/completion/event.ts"],"names":[],"mappings":"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"}
|
package/dist/completion/event.js
CHANGED
|
@@ -17,6 +17,16 @@ import { advanceDeliveryStatuses as defaultAdvanceDeliveryStatuses, runReviewExi
|
|
|
17
17
|
import { fetchEffectiveWorkflowWithTransitions as defaultFetchEffectiveWorkflowWithTransitions } from '../queries/workflows.js';
|
|
18
18
|
import { decideCompletionAction, shouldCheckNonAdvanceable } from './completion-decision.js';
|
|
19
19
|
import { takeProgressSnapshot, snapshotsEqual } from './progress-snapshot.js';
|
|
20
|
+
// Review-window + non-advanceability predicates extracted to ./advanceability.ts
|
|
21
|
+
// (keeps this file under the structural size lint). Imported for use below and
|
|
22
|
+
// re-exported so existing importers (../completion/index.js + test suites) are
|
|
23
|
+
// unaffected.
|
|
24
|
+
import { isInReviewWindow, isDeliveryNonAdvanceable, findNonAdvanceableDelivery, } from './advanceability.js';
|
|
25
|
+
export { isInReviewWindow, isDeliveryNonAdvanceable, findNonAdvanceableDelivery };
|
|
26
|
+
import { getFocusWorktree as defaultGetFocusWorktree } from '../focus-worktree-state.js';
|
|
27
|
+
import { worktreeHasUncommittedChanges as defaultWorktreeHasUncommittedChanges } from '../worktree-safety.js';
|
|
28
|
+
import { readWorktreeHeadSha as defaultReadWorktreeHeadSha } from '../git-activity.js';
|
|
29
|
+
import { resolveAutoRemediationBudget } from '../delivery-advance-block.js';
|
|
20
30
|
// Escalation builders + their reason-string constants live in
|
|
21
31
|
// event-escalations.ts; re-exported here so existing importers are unaffected.
|
|
22
32
|
import { escalatePlanningFailure, escalateNoProgress, escalateNonAdvanceable, } from './event-escalations.js';
|
|
@@ -41,104 +51,10 @@ const defaultDeps = {
|
|
|
41
51
|
hasOpenTeamFailureEscalation: defaultHasOpenTeamFailureEscalation,
|
|
42
52
|
getReviewRequestedAt: defaultGetReviewRequestedAt,
|
|
43
53
|
runReviewExitHandler: defaultRunReviewExitHandler,
|
|
54
|
+
getFocusWorktree: defaultGetFocusWorktree,
|
|
55
|
+
worktreeHasUncommittedChanges: defaultWorktreeHasUncommittedChanges,
|
|
56
|
+
readWorktreeHeadSha: defaultReadWorktreeHeadSha,
|
|
44
57
|
};
|
|
45
|
-
/**
|
|
46
|
-
* The review window is open when a review has been requested AND at least one
|
|
47
|
-
* delivery still sits in `verify`. During this window the focus's deliveries
|
|
48
|
-
* are all cascadable (verify counts as terminal-for-the-team), so the
|
|
49
|
-
* all-terminal / no-actionable-work teardown branches in handleCompletionEvent
|
|
50
|
-
* would SIGTERM a freshly-spawned REVIEW team before it can complete the
|
|
51
|
-
* review -- the teardown race that strands the focus in `reviewing`. Pure and
|
|
52
|
-
* exported for direct unit testing.
|
|
53
|
-
*/
|
|
54
|
-
export function isInReviewWindow(reviewRequestedAt, deliveries) {
|
|
55
|
-
if (!reviewRequestedAt)
|
|
56
|
-
return false;
|
|
57
|
-
return deliveries.some(d => d.executionStatus === DELIVERY_STATUS.VERIFY);
|
|
58
|
-
}
|
|
59
|
-
// ── Non-advanceability check ──────────────────────────────────────────────
|
|
60
|
-
/**
|
|
61
|
-
* A delivery is *non-advanceable* when neither the team nor the daemon can move
|
|
62
|
-
* it forward. The check must mirror how the daemon ACTUALLY advances deliveries,
|
|
63
|
-
* not an idealized transition-graph model:
|
|
64
|
-
*
|
|
65
|
-
* (a) Its resolved current_workflow_stage_id is NULL. advanceDeliveryStatuses
|
|
66
|
-
* bails with "no workflow stage ID, skipping advance" -- the delivery can
|
|
67
|
-
* never advance through the workflow. A dead end for ANY status.
|
|
68
|
-
* (b) Agent-actionable statuses (queued / coding / verify_failed) with a
|
|
69
|
-
* resolved stage are NEVER dead ends. The daemon advances them by
|
|
70
|
-
* NAME-based stage stepping -- advanceDeliveryStatuses (focus-completion.ts)
|
|
71
|
-
* and the listener's checkDeliveryAutoAdvance both step
|
|
72
|
-
* queued|verify_failed -> coding -> verify by stage NAME once work issues
|
|
73
|
-
* are Done, independent of the transition graph. (The earlier is_automatic
|
|
74
|
-
* edge test here produced FALSE dead ends for the built-in verify_failed /
|
|
75
|
-
* queued stages, which carry no automatic edge by design: a verify_failed
|
|
76
|
-
* delivery the listener advanced seconds later was escalated as
|
|
77
|
-
* "non-advanceable", and the resulting team_failure escalation wedged the
|
|
78
|
-
* focus's review respawn.)
|
|
79
|
-
* (c) Any other non-terminal stage (a daemon/review-managed stage reached with
|
|
80
|
-
* a populated stage id) is a dead end only when its effective workflow has
|
|
81
|
-
* no is_automatic transition out of it -- name-based stepping does not
|
|
82
|
-
* apply to non-actionable statuses, so the daemon has no edge to follow.
|
|
83
|
-
*
|
|
84
|
-
* Pure and synchronous: the caller resolves the delivery's effective workflow
|
|
85
|
-
* (via fetchEffectiveWorkflow, transitions included) and passes both in. The
|
|
86
|
-
* caller is responsible for having already classified the delivery as
|
|
87
|
-
* non-terminal -- this function does not re-check that.
|
|
88
|
-
*
|
|
89
|
-
* Exported so tests and sister deliveries can verify the contract directly.
|
|
90
|
-
*/
|
|
91
|
-
export function isDeliveryNonAdvanceable(delivery, workflow) {
|
|
92
|
-
// (a) No resolved stage -> advanceDeliveryStatuses skips it.
|
|
93
|
-
const stageId = delivery.currentWorkflowStageId;
|
|
94
|
-
if (!stageId)
|
|
95
|
-
return true;
|
|
96
|
-
// (b) Agent-actionable + resolved stage -> the daemon advances it by
|
|
97
|
-
// name-based stepping (queued|verify_failed -> coding -> verify), so it is
|
|
98
|
-
// never a dead end regardless of the transition graph.
|
|
99
|
-
if (isStatusAgentActionable(delivery.executionStatus ?? '', workflow)) {
|
|
100
|
-
return false;
|
|
101
|
-
}
|
|
102
|
-
// (c) Non-actionable, non-terminal stage. The daemon only auto-advances such
|
|
103
|
-
// a stage over an automatic transition. A workflow that carries no
|
|
104
|
-
// transitions at all (e.g. a built-in default resolved without the transition
|
|
105
|
-
// set) is likewise a dead end for this stage.
|
|
106
|
-
const transitions = workflow.transitions ?? [];
|
|
107
|
-
const hasAutomaticExit = transitions.some(t => t.from_stage_id === stageId && t.is_automatic === true);
|
|
108
|
-
return !hasAutomaticExit;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Find the first remaining non-terminal delivery that is non-advanceable.
|
|
112
|
-
* Resolves each delivery's effective workflow lazily and returns as soon as a
|
|
113
|
-
* dead-end delivery is found (short-circuit). Returns null when every remaining
|
|
114
|
-
* non-terminal delivery has a live forward path.
|
|
115
|
-
*
|
|
116
|
-
* Exported with the workflow fetch injected so tests can drive it without live
|
|
117
|
-
* Supabase/MCP.
|
|
118
|
-
*/
|
|
119
|
-
export async function findNonAdvanceableDelivery(nonTerminal, fetchEffectiveWorkflow) {
|
|
120
|
-
for (const delivery of nonTerminal) {
|
|
121
|
-
// Fast path: a NULL stage is non-advanceable without needing the workflow.
|
|
122
|
-
if (!delivery.currentWorkflowStageId) {
|
|
123
|
-
return delivery;
|
|
124
|
-
}
|
|
125
|
-
try {
|
|
126
|
-
const workflow = await fetchEffectiveWorkflow(delivery.id);
|
|
127
|
-
if (isDeliveryNonAdvanceable(delivery, workflow)) {
|
|
128
|
-
return delivery;
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
catch (err) {
|
|
132
|
-
// Fail safe: if we cannot resolve the workflow we cannot prove the
|
|
133
|
-
// delivery is non-advanceable, so we do NOT escalate on it. Treat the
|
|
134
|
-
// lookup failure as "advanceable" and let the normal clean-termination
|
|
135
|
-
// path run -- a spurious escalation that parks a healthy focus is worse
|
|
136
|
-
// than one missed dead-end detection (the next tick retries).
|
|
137
|
-
console.warn(`[focus-executor] Non-advanceability workflow lookup failed for delivery ${delivery.id}: ${err.message}`);
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
return null;
|
|
141
|
-
}
|
|
142
58
|
// ── Handler ─────────────────────────────────────────────────────────────
|
|
143
59
|
/**
|
|
144
60
|
* Handle a 'complete' event from the CompletionDetector.
|
|
@@ -310,6 +226,18 @@ export async function handleCompletionEvent(ctx, deps = defaultDeps) {
|
|
|
310
226
|
const postHasActionableOpen = currentIssues.some(i => postActionableIds.has(i.deliveryId) && OPEN_ISSUE_STATUSES.has(i.status));
|
|
311
227
|
const hasPlanning = effectiveDeliveries.some(d => (d.executionStatus ?? '') === 'planning');
|
|
312
228
|
const teamHasActionableWork = hasPlanning || postHasActionableOpen;
|
|
229
|
+
// Resolve the focus worktree once for BOTH the git-activity snapshot
|
|
230
|
+
// dimension and the dirty re-wake guard below. A team that wrote AND committed
|
|
231
|
+
// code this cycle moved the focus branch HEAD even when no DB state moved;
|
|
232
|
+
// feeding that sha into the snapshot makes the commit reset the no-progress
|
|
233
|
+
// counter through the EXISTING madeProgress/snapshotsEqual machinery (no
|
|
234
|
+
// change to the madeProgress logic is needed). null when no worktree is
|
|
235
|
+
// registered or git could not be read -- the watchdog then behaves exactly as
|
|
236
|
+
// before on the git axis.
|
|
237
|
+
const resolveWorktree = deps.getFocusWorktree ?? defaultGetFocusWorktree;
|
|
238
|
+
const readHeadSha = deps.readWorktreeHeadSha ?? defaultReadWorktreeHeadSha;
|
|
239
|
+
const focusWorktreePath = resolveWorktree(focusId)?.worktreePath ?? null;
|
|
240
|
+
const focusHeadSha = focusWorktreePath !== null ? readHeadSha(focusWorktreePath) : null;
|
|
313
241
|
// Capture the (post-advance) snapshot for progress detection. Treat both null
|
|
314
242
|
// and undefined as "no prior snapshot" -- legacy test fixtures may not set
|
|
315
243
|
// the field, and a fresh team has lastProgressSnapshot=null. Snapshotting the
|
|
@@ -319,7 +247,7 @@ export async function handleCompletionEvent(ctx, deps = defaultDeps) {
|
|
|
319
247
|
// Computed BEFORE the no-actionable-work branch so the non-advanceable guard
|
|
320
248
|
// below can gate on "no progress this cycle" -- the branch returns early, so
|
|
321
249
|
// the original (post-branch) snapshot location was never reached on this path.
|
|
322
|
-
const snapshot = takeProgressSnapshot(effectiveDeliveries, currentIssues);
|
|
250
|
+
const snapshot = takeProgressSnapshot(effectiveDeliveries, currentIssues, focusHeadSha);
|
|
323
251
|
const priorSnapshot = teamState.lastProgressSnapshot ?? null;
|
|
324
252
|
// NB: a GENUINE review window is already handled ABOVE by the isInReviewWindow
|
|
325
253
|
// early-return (review_requested_at set AND a delivery still in `verify` ->
|
|
@@ -409,6 +337,14 @@ export async function handleCompletionEvent(ctx, deps = defaultDeps) {
|
|
|
409
337
|
// no-actionable-work terminations deliberately do not touch the counter
|
|
410
338
|
// (matching the pre-decision-extraction behavior).
|
|
411
339
|
const updatedNoProgressCycles = madeProgress ? 0 : (teamState.noProgressCycles ?? 0) + 1;
|
|
340
|
+
// Measurable progress this cycle (any axis moved, including a fresh commit on
|
|
341
|
+
// the focus branch) means the prior dirty episode -- if any -- is no longer
|
|
342
|
+
// stalled, so the commit-nudge budget resets alongside the no-progress
|
|
343
|
+
// counter. Committed to teamState on the same branches that commit the
|
|
344
|
+
// no-progress counter (the actionable-work paths), keeping the two in lockstep.
|
|
345
|
+
if (madeProgress) {
|
|
346
|
+
teamState.commitNudgeAttempts = 0;
|
|
347
|
+
}
|
|
412
348
|
const action = decideCompletionAction({
|
|
413
349
|
teamHasActionableWork,
|
|
414
350
|
advancedThisCycle,
|
|
@@ -475,6 +411,48 @@ export async function handleCompletionEvent(ctx, deps = defaultDeps) {
|
|
|
475
411
|
return;
|
|
476
412
|
}
|
|
477
413
|
case 'escalate_no_progress_and_terminate': {
|
|
414
|
+
// ── Git-aware re-wake-before-terminate ────────────────────────────────
|
|
415
|
+
// This is the path that was KILLING PRODUCERS: a coding team that wrote
|
|
416
|
+
// all its code but did not commit it sees no delivery/issue STATE move, so
|
|
417
|
+
// it crosses the no-progress threshold and -- without this guard -- is
|
|
418
|
+
// escalated + terminated. Once it is dead the commit-gate has no live team
|
|
419
|
+
// to re-wake, so the uncommitted work is stranded until a human commits.
|
|
420
|
+
//
|
|
421
|
+
// Before escalating, check whether the team actually PRODUCED work: a
|
|
422
|
+
// dirty focus worktree (uncommitted changes) means there is real work to
|
|
423
|
+
// preserve. If so AND a live lead is still reachable AND the commit-nudge
|
|
424
|
+
// budget is not exhausted, nudge the lead to commit instead of killing it.
|
|
425
|
+
// The team stays alive, commits its own work, and the delivery advances
|
|
426
|
+
// out of coding through the normal commit-gate -- no manual commit, no
|
|
427
|
+
// escalation. A genuinely idle team (clean tree, OR no live lead, OR
|
|
428
|
+
// budget exhausted) falls through to the unchanged escalate+terminate
|
|
429
|
+
// behavior below, so a team that will never commit still escalates.
|
|
430
|
+
const worktreeIsDirty = focusWorktreePath !== null &&
|
|
431
|
+
(deps.worktreeHasUncommittedChanges ?? defaultWorktreeHasUncommittedChanges)(focusWorktreePath);
|
|
432
|
+
const liveLead = teamState.leadStdin;
|
|
433
|
+
// Budget mirrors the advance-block auto-remediation budget so the two
|
|
434
|
+
// re-wake paths (this one and delivery-advance-block's) bound retries the
|
|
435
|
+
// same way; resolveAutoRemediationBudget reads TELORA_AUTO_REMEDIATION_BUDGET.
|
|
436
|
+
const commitNudgeBudget = resolveAutoRemediationBudget();
|
|
437
|
+
const nudgesSpent = teamState.commitNudgeAttempts ?? 0;
|
|
438
|
+
if (worktreeIsDirty && liveLead && nudgesSpent < commitNudgeBudget) {
|
|
439
|
+
// Keep the producing team alive: nudge it to commit, record the
|
|
440
|
+
// snapshot + bump the per-episode nudge counter, reset the completion
|
|
441
|
+
// detector so the next 'complete' event is a fresh cycle, and RETURN
|
|
442
|
+
// WITHOUT terminating or escalating.
|
|
443
|
+
teamState.commitNudgeAttempts = nudgesSpent + 1;
|
|
444
|
+
teamState.lastProgressSnapshot = snapshot;
|
|
445
|
+
console.warn(`[focus-executor] No-progress threshold reached for "${focusName}", but the ` +
|
|
446
|
+
`focus worktree has uncommitted changes and a live lead is reachable -- ` +
|
|
447
|
+
`re-waking the team to commit instead of terminating ` +
|
|
448
|
+
`(commit-nudge attempt ${teamState.commitNudgeAttempts}/${commitNudgeBudget}).`);
|
|
449
|
+
sendMessage(liveLead, `Your focus worktree has uncommitted changes, so the daemon cannot advance ` +
|
|
450
|
+
`the delivery and will not terminate the team yet. Please commit your work in ` +
|
|
451
|
+
`${focusWorktreePath}; the daemon advances automatically once the worktree is ` +
|
|
452
|
+
`clean. (commit-nudge attempt ${teamState.commitNudgeAttempts}/${commitNudgeBudget})`);
|
|
453
|
+
completionDetector.reset();
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
478
456
|
// Crossed the no-progress threshold: escalate and shut the team down so
|
|
479
457
|
// a human can intervene. Reached only when the team HAS actionable work
|
|
480
458
|
// it owns -- a planning delivery to scope, or a coding delivery whose
|
|
@@ -482,7 +460,9 @@ export async function handleCompletionEvent(ctx, deps = defaultDeps) {
|
|
|
482
460
|
// no-actionable-work cases (verify_failed-with-all-Done, in_review,
|
|
483
461
|
// paused) terminate cleanly above and never reach here, so this
|
|
484
462
|
// escalation now means a genuinely stuck team, not a daemon-managed
|
|
485
|
-
// transition.
|
|
463
|
+
// transition. The worktree is clean here (or no lead / budget spent), so
|
|
464
|
+
// the dirty episode -- if there was one -- is over: reset the nudge counter.
|
|
465
|
+
teamState.commitNudgeAttempts = 0;
|
|
486
466
|
teamState.noProgressCycles = updatedNoProgressCycles;
|
|
487
467
|
teamState.lastProgressSnapshot = snapshot;
|
|
488
468
|
console.warn(`[focus-executor] Scope-coverage guard tripped for "${focusName}" -- ` +
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/completion/event.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAElF,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,aAAa,IAAI,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EACL,gBAAgB,IAAI,uBAAuB,EAC3C,4BAA4B,IAAI,mCAAmC,GAEpE,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,uBAAuB,IAAI,8BAA8B,EACzD,oBAAoB,IAAI,2BAA2B,GACpD,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qCAAqC,IAAI,4CAA4C,EAAE,MAAM,yBAAyB,CAAC;AAChI,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE9E,8DAA8D;AAC9D,+EAA+E;AAC/E,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,iCAAiC,EACjC,qBAAqB,EAErB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAEhC;;;;GAIG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAC3C,aAAa,EAAE,CAAC,uCAAuC,CAAC;AAoE1D,KAAK,UAAU,2BAA2B,CACxC,MAAoB,EACpB,OAAe;IAEf,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAChF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE,mBAAmB,IAAI,IAAI,CAAC;AAChF,CAAC;AAED,MAAM,WAAW,GAAwB;IACvC,kBAAkB;IAClB,cAAc;IACd,gBAAgB,EAAE,uBAAuB;IACzC,aAAa,EAAE,oBAAoB;IACnC,uBAAuB,EAAE,8BAA8B;IACvD,sBAAsB,EAAE,4CAA4C;IACpE,4BAA4B,EAAE,mCAAmC;IACjE,oBAAoB,EAAE,2BAA2B;IACjD,oBAAoB,EAAE,2BAA2B;CAClD,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC9B,iBAAgC,EAChC,UAA+B;IAE/B,IAAI,CAAC,iBAAiB;QAAE,OAAO,KAAK,CAAC;IACrC,OAAO,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC;AAC5E,CAAC;AAED,6EAA6E;AAE7E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,UAAU,wBAAwB,CACtC,QAA+E,EAC/E,QAAkB;IAElB,6DAA6D;IAC7D,MAAM,OAAO,GAAG,QAAQ,CAAC,sBAAsB,CAAC;IAChD,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,qEAAqE;IACrE,2EAA2E;IAC3E,uDAAuD;IACvD,IAAI,uBAAuB,CAAC,QAAQ,CAAC,eAAe,IAAI,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;QACtE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,6EAA6E;IAC7E,mEAAmE;IACnE,8EAA8E;IAC9E,8CAA8C;IAC9C,MAAM,WAAW,GAAG,QAAQ,CAAC,WAAW,IAAI,EAAE,CAAC;IAC/C,MAAM,gBAAgB,GAAG,WAAW,CAAC,IAAI,CACvC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,OAAO,IAAI,CAAC,CAAC,YAAY,KAAK,IAAI,CAC5D,CAAC;IACF,OAAO,CAAC,gBAAgB,CAAC;AAC3B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,WAAgC,EAChC,sBAAiE;IAEjE,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;QACnC,2EAA2E;QAC3E,IAAI,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YACrC,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;YAC3D,IAAI,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACjD,OAAO,QAAQ,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,mEAAmE;YACnE,sEAAsE;YACtE,uEAAuE;YACvE,wEAAwE;YACxE,8DAA8D;YAC9D,OAAO,CAAC,IAAI,CACV,2EAA2E,QAAQ,CAAC,EAAE,KAAM,GAAa,CAAC,OAAO,EAAE,CACpH,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,2EAA2E;AAE3E;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,GAA2B,EAC3B,OAA4B,WAAW;IAEvC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;IAExE,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3D,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;KAC7B,CAAC,CAAC;IAEH,4EAA4E;IAC5E,yEAAyE;IACzE,2EAA2E;IAC3E,wEAAwE;IACxE,6EAA6E;IAC7E,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;QAC5B,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CACV,uCAAuC,SAAS,2BAA2B;gBAC3E,+BAA+B,CAChC,CAAC;YACF,MAAM,uBAAuB,CAAC;gBAC5B,cAAc,EAAE,SAAS,CAAC,cAAc;gBACxC,SAAS,EAAE,SAAS,CAAC,aAAa,IAAI,EAAE;gBACxC,OAAO;gBACP,SAAS;gBACT,WAAW,EAAE,SAAS,CAAC,MAAM;aAC9B,EAAE,IAAI,CAAC,CAAC;YACT,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;YAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;YAClC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACrC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,sBAAsB,CAAC,CAAC;QACjE,CAAC;QACD,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC;QAChC,OAAO,CAAC,GAAG,CACT,0CAA0C,SAAS,KAAK;YACxD,GAAG,iBAAiB,CAAC,MAAM,2BAA2B,CACvD,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,4CAA4C;IAC5C,IAAI,iBAAiB,GAAkB,IAAI,CAAC;IAC5C,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,iBAAiB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,qDAAqD,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CAC7F,CAAC;YACF,wEAAwE;QAC1E,CAAC;IACH,CAAC;IACD,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,EAAE,CAAC;QAC3D,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QACvG,IAAI,SAAS,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YACvC,sEAAsE;YACtE,sEAAsE;YACtE,uEAAuE;YACvE,uEAAuE;YACvE,uEAAuE;YACvE,uEAAuE;YACvE,kEAAkE;YAClE,uEAAuE;YACvE,wEAAwE;YACxE,0EAA0E;YAC1E,mEAAmE;YACnE,oEAAoE;YACpE,mEAAmE;YACnE,4DAA4D;YAC5D,OAAO,CAAC,GAAG,CACT,+CAA+C,SAAS,MAAM,WAAW,GAAG;gBAC5E,0FAA0F,CAC3F,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,oBAAoB,CAAC;oBAC9B,OAAO;oBACP,SAAS;oBACT,cAAc,EAAE,SAAS,CAAC,cAAc;oBACxC,SAAS,EAAE,SAAS,CAAC,SAAS;oBAC9B,SAAS,EAAE,SAAS,CAAC,aAAa,IAAI,EAAE;oBACxC,WAAW,EAAE,QAAQ;oBACrB,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CACV,6DAA6D,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CACrG,CAAC;YACJ,CAAC;YACD,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;YAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,4EAA4E;QAC5E,wEAAwE;QACxE,4EAA4E;QAC5E,uEAAuE;QACvE,OAAO,CAAC,GAAG,CACT,qBAAqB,SAAS,oDAAoD;YAClF,GAAG,WAAW,4DAA4D;YAC1E,GAAG,SAAS,CAAC,WAAW,+DAA+D;YACvF,wBAAwB,CACzB,CAAC;QACF,OAAO;IACT,CAAC;IAED,mEAAmE;IACnE,6DAA6D;IAC7D,0EAA0E;IAC1E,6EAA6E;IAC7E,uEAAuE;IACvE,mDAAmD;IACnD,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CAClD,CAAC;IACF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CACT,iDAAiD,SAAS,uBAAuB,CAClF,CAAC;QACF,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,4EAA4E;IAC5E,kEAAkE;IAClE,4EAA4E;IAC5E,qCAAqC;IACrC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CACnC,iBAAiB;SACd,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;SAC7D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAClB,CAAC;IACF,MAAM,2BAA2B,GAAG,aAAa,CAAC,IAAI,CACpD,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAClF,CAAC;IAEF,2EAA2E;IAC3E,4EAA4E;IAC5E,2EAA2E;IAC3E,oDAAoD;IACpD,8EAA8E;IAC9E,6EAA6E;IAC7E,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,4EAA4E;IAC5E,uEAAuE;IACvE,IAAI,mBAAmB,GAAG,iBAAiB,CAAC;IAC5C,IAAI,qBAAqB,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,uBAAuB,CAChC,GAAG,CAAC,MAAM,EACV,SAAS,EACT,SAAS,CAAC,aAAa,IAAI,EAAE,CAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,mEAAmE,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CAC3G,CAAC;QACJ,CAAC;QAED,2EAA2E;QAC3E,oEAAoE;QACpE,mEAAmE;QACnE,IAAI,CAAC;YACH,mBAAmB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC7D,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CACjD,CAAC,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CAClD,CAAC;YACF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CACT,0EAA0E,SAAS,uBAAuB,CAC3G,CAAC;gBACF,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;gBAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,gFAAgF,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CACxH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,uEAAuE;IACvE,4EAA4E;IAC5E,MAAM,eAAe,GAAG,mBAAmB,CAAC,MAAM,CAChD,CAAC,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CAClD,CAAC;IACF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,mBAAmB;SAChB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;SAC7D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAClB,CAAC;IACF,MAAM,qBAAqB,GAAG,aAAa,CAAC,IAAI,CAC9C,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAC9E,CAAC;IACF,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,KAAK,UAAU,CAC9C,CAAC;IACF,MAAM,qBAAqB,GAAG,WAAW,IAAI,qBAAqB,CAAC;IAEnE,8EAA8E;IAC9E,2EAA2E;IAC3E,8EAA8E;IAC9E,6EAA6E;IAC7E,qEAAqE;IACrE,EAAE;IACF,6EAA6E;IAC7E,6EAA6E;IAC7E,+EAA+E;IAC/E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,mBAAmB,EAAE,aAAa,CAAC,CAAC;IAC1E,MAAM,aAAa,GAAG,SAAS,CAAC,oBAAoB,IAAI,IAAI,CAAC;IAE7D,+EAA+E;IAC/E,4EAA4E;IAC5E,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,0EAA0E;IAC1E,6EAA6E;IAC7E,6EAA6E;IAC7E,2EAA2E;IAC3E,6EAA6E;IAC7E,6EAA6E;IAC7E,2EAA2E;IAC3E,0EAA0E;IAC1E,8EAA8E;IAC9E,6DAA6D;IAE7D,6EAA6E;IAC7E,0DAA0D;IAC1D,2EAA2E;IAC3E,iEAAiE;IACjE,yEAAyE;IACzE,yEAAyE;IACzE,6EAA6E;IAC7E,yEAAyE;IACzE,2EAA2E;IAC3E,4EAA4E;IAC5E,wEAAwE;IACxE,+EAA+E;IAC/E,6EAA6E;IAC7E,cAAc;IACd,EAAE;IACF,8EAA8E;IAC9E,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,4EAA4E;IAC5E,+EAA+E;IAC/E,4EAA4E;IAC5E,gFAAgF;IAChF,yEAAyE;IACzE,wDAAwD;IACxD,MAAM,0BAA0B,GAAG,mBAAmB,CAAC,IAAI,CACzD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,KAAK,eAAe,CACnD,CAAC;IAEF,MAAM,YAAY,GAAG,0BAA0B,IAAI,aAAa,KAAK,IAAI;QACvE,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAE7C,oEAAoE;IACpE,yEAAyE;IACzE,wEAAwE;IACxE,8EAA8E;IAC9E,uEAAuE;IACvE,8EAA8E;IAC9E,wEAAwE;IACxE,+EAA+E;IAC/E,+EAA+E;IAC/E,2EAA2E;IAC3E,+EAA+E;IAC/E,8EAA8E;IAC9E,6DAA6D;IAC7D,2EAA2E;IAC3E,uEAAuE;IACvE,mEAAmE;IACnE,MAAM,iBAAiB,GACrB,aAAa,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAErE,2EAA2E;IAC3E,mEAAmE;IACnE,yEAAyE;IACzE,oCAAoC;IACpC,EAAE;IACF,2EAA2E;IAC3E,2EAA2E;IAC3E,sEAAsE;IACtE,wEAAwE;IACxE,2EAA2E;IAC3E,yEAAyE;IACzE,iEAAiE;IACjE,wEAAwE;IACxE,0EAA0E;IAC1E,4EAA4E;IAC5E,sEAAsE;IACtE,qCAAqC;IACrC,IAAI,KAAK,GAA6B,IAAI,CAAC;IAC3C,IAAI,yBAAyB,CAAC,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;QAC5E,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CACtD,CAAC;QACF,KAAK,GAAG,MAAM,0BAA0B,CAAC,UAAU,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACpF,CAAC;IAED,uEAAuE;IACvE,wEAAwE;IACxE,wEAAwE;IACxE,mDAAmD;IACnD,MAAM,uBAAuB,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAEzF,MAAM,MAAM,GAAG,sBAAsB,CAAC;QACpC,qBAAqB;QACrB,iBAAiB;QACjB,sBAAsB,EAAE,KAAK,KAAK,IAAI;QACtC,gBAAgB,EAAE,uBAAuB;QACzC,eAAe,EAAE,gCAAgC;QACjD,uBAAuB,EAAE,qBAAqB;KAC/C,CAAC,CAAC;IAEH,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,wCAAwC,CAAC,CAAC,CAAC;YAC9C,wEAAwE;YACxE,wEAAwE;YACxE,qEAAqE;YACrE,gEAAgE;YAChE,wEAAwE;YACxE,qEAAqE;YACrE,yEAAyE;YACzE,iEAAiE;YACjE,mEAAmE;YACnE,iEAAiE;YACjE,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC;gBACH,gBAAgB,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;YACtE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CACV,sDAAsD,SAAS,8BAA+B,GAAa,CAAC,OAAO,EAAE,CACtH,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CACV,kDAAkD,SAAS,OAAO;oBAClE,IAAI,KAAM,CAAC,IAAI,MAAM,KAAM,CAAC,eAAe,IAAI,OAAO,uBAAuB;oBAC7E,UAAU,KAAM,CAAC,sBAAsB,IAAI,MAAM,gCAAgC;oBACjF,uBAAuB,CACxB,CAAC;gBACF,MAAM,sBAAsB,CAAC;oBAC3B,cAAc,EAAE,SAAS,CAAC,cAAc;oBACxC,SAAS,EAAE,SAAS,CAAC,aAAa,IAAI,EAAE;oBACxC,OAAO;oBACP,SAAS;oBACT,WAAW,EAAE,SAAS,CAAC,MAAM;oBAC7B,KAAK,EAAE,KAAM;oBACb,SAAS,EAAE,eAAe;iBAC3B,EAAE,IAAI,CAAC,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CACT,kDAAkD,SAAS,gBAAgB;oBAC3E,qEAAqE,CACtE,CAAC;YACJ,CAAC;YACD,SAAS,CAAC,oBAAoB,GAAG,QAAQ,CAAC;YAC1C,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;YAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,KAAK,8BAA8B,CAAC,CAAC,CAAC;YACpC,sEAAsE;YACtE,gEAAgE;YAChE,oEAAoE;YACpE,qEAAqE;YACrE,uEAAuE;YACvE,4CAA4C;YAC5C,OAAO,CAAC,GAAG,CACT,yDAAyD,SAAS,OAAO;gBACzE,GAAG,eAAe,CAAC,MAAM,uDAAuD;gBAChF,+EAA+E,CAChF,CAAC;YACF,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;YAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,KAAK,oCAAoC,CAAC,CAAC,CAAC;YAC1C,wEAAwE;YACxE,wEAAwE;YACxE,sEAAsE;YACtE,yEAAyE;YACzE,oEAAoE;YACpE,gEAAgE;YAChE,oEAAoE;YACpE,cAAc;YACd,SAAS,CAAC,gBAAgB,GAAG,uBAAuB,CAAC;YACrD,SAAS,CAAC,oBAAoB,GAAG,QAAQ,CAAC;YAC1C,OAAO,CAAC,IAAI,CACV,sDAAsD,SAAS,OAAO;gBACtE,GAAG,SAAS,CAAC,gBAAgB,2CAA2C,eAAe,CAAC,MAAM,GAAG;gBACjG,wDAAwD,CACzD,CAAC;YACF,MAAM,kBAAkB,CAAC;gBACvB,cAAc,EAAE,SAAS,CAAC,cAAc;gBACxC,SAAS,EAAE,SAAS,CAAC,aAAa,IAAI,EAAE;gBACxC,OAAO;gBACP,SAAS;gBACT,WAAW,EAAE,SAAS,CAAC,MAAM;gBAC7B,MAAM,EAAE,SAAS,CAAC,gBAAgB;gBAClC,SAAS,EAAE,eAAe;aAC3B,EAAE,IAAI,CAAC,CAAC;YACT,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;YAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,KAAK,kBAAkB,CAAC;QACxB,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,SAAS,CAAC,gBAAgB,GAAG,uBAAuB,CAAC;YACrD,SAAS,CAAC,oBAAoB,GAAG,QAAQ,CAAC;YAE1C,sEAAsE;YACtE,yEAAyE;YACzE,cAAc;YACd,IAAI,OAAe,CAAC;YACpB,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACvC,OAAO,CAAC,GAAG,CACT,2CAA2C,SAAS,uBAAuB,CAC5E,CAAC;gBACF,OAAO,GAAG,gBAAgB,CAAC,mBAAmB,EAAE,aAAa,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAC7F,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CACT,iCAAiC,SAAS,QAAQ,eAAe,CAAC,MAAM,gBAAgB;oBACxF,+BAA+B,SAAS,CAAC,gBAAgB,IAAI,gCAAgC,GAAG,CACjG,CAAC;gBACF,OAAO,GAAG,wBAAwB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;YACrE,CAAC;YAED,wBAAwB;YACxB,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;gBAClC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,sBAAsB,CAAC,CAAC;YACjE,CAAC;YAED,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAC3B,WAAW,CAAC,IAAI,CAAC,KAAM,EAAE,OAAO,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;IACH,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,4EAA4E;AAC5E,gFAAgF;AAChF,6EAA6E;AAC7E,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/completion/event.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAElF,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,aAAa,IAAI,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EACL,gBAAgB,IAAI,uBAAuB,EAC3C,4BAA4B,IAAI,mCAAmC,GAEpE,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,uBAAuB,IAAI,8BAA8B,EACzD,oBAAoB,IAAI,2BAA2B,GACpD,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qCAAqC,IAAI,4CAA4C,EAAE,MAAM,yBAAyB,CAAC;AAChI,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC7F,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC9E,iFAAiF;AACjF,+EAA+E;AAC/E,+EAA+E;AAC/E,cAAc;AACd,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,CAAC;AAClF,OAAO,EAAE,gBAAgB,IAAI,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACzF,OAAO,EAAE,6BAA6B,IAAI,oCAAoC,EAAE,MAAM,uBAAuB,CAAC;AAC9G,OAAO,EAAE,mBAAmB,IAAI,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAE5E,8DAA8D;AAC9D,+EAA+E;AAC/E,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,iCAAiC,EACjC,qBAAqB,EAErB,uBAAuB,EACvB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAEhC;;;;GAIG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAC3C,aAAa,EAAE,CAAC,uCAAuC,CAAC;AA4F1D,KAAK,UAAU,2BAA2B,CACxC,MAAoB,EACpB,OAAe;IAEf,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAChF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE,mBAAmB,IAAI,IAAI,CAAC;AAChF,CAAC;AAED,MAAM,WAAW,GAAwB;IACvC,kBAAkB;IAClB,cAAc;IACd,gBAAgB,EAAE,uBAAuB;IACzC,aAAa,EAAE,oBAAoB;IACnC,uBAAuB,EAAE,8BAA8B;IACvD,sBAAsB,EAAE,4CAA4C;IACpE,4BAA4B,EAAE,mCAAmC;IACjE,oBAAoB,EAAE,2BAA2B;IACjD,oBAAoB,EAAE,2BAA2B;IACjD,gBAAgB,EAAE,uBAAuB;IACzC,6BAA6B,EAAE,oCAAoC;IACnE,mBAAmB,EAAE,0BAA0B;CAChD,CAAC;AAEF,2EAA2E;AAE3E;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,GAA2B,EAC3B,OAA4B,WAAW;IAEvC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,EAAE,IAAI,EAAE,GAAG,GAAG,CAAC;IAExE,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC3D,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;QAChC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;KAC7B,CAAC,CAAC;IAEH,4EAA4E;IAC5E,yEAAyE;IACzE,2EAA2E;IAC3E,wEAAwE;IACxE,6EAA6E;IAC7E,IAAI,SAAS,CAAC,aAAa,EAAE,CAAC;QAC5B,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,IAAI,CACV,uCAAuC,SAAS,2BAA2B;gBAC3E,+BAA+B,CAChC,CAAC;YACF,MAAM,uBAAuB,CAAC;gBAC5B,cAAc,EAAE,SAAS,CAAC,cAAc;gBACxC,SAAS,EAAE,SAAS,CAAC,aAAa,IAAI,EAAE;gBACxC,OAAO;gBACP,SAAS;gBACT,WAAW,EAAE,SAAS,CAAC,MAAM;aAC9B,EAAE,IAAI,CAAC,CAAC;YACT,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;YAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;YAClC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACrC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,sBAAsB,CAAC,CAAC;QACjE,CAAC;QACD,SAAS,CAAC,aAAa,GAAG,KAAK,CAAC;QAChC,OAAO,CAAC,GAAG,CACT,0CAA0C,SAAS,KAAK;YACxD,GAAG,iBAAiB,CAAC,MAAM,2BAA2B,CACvD,CAAC;IACJ,CAAC;IAED,8EAA8E;IAC9E,4CAA4C;IAC5C,IAAI,iBAAiB,GAAkB,IAAI,CAAC;IAC5C,IAAI,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,iBAAiB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,qDAAqD,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CAC7F,CAAC;YACF,wEAAwE;QAC1E,CAAC;IACH,CAAC;IACD,IAAI,gBAAgB,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,EAAE,CAAC;QAC3D,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,KAAK,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC;QACvG,IAAI,SAAS,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;YACvC,sEAAsE;YACtE,sEAAsE;YACtE,uEAAuE;YACvE,uEAAuE;YACvE,uEAAuE;YACvE,uEAAuE;YACvE,kEAAkE;YAClE,uEAAuE;YACvE,wEAAwE;YACxE,0EAA0E;YAC1E,mEAAmE;YACnE,oEAAoE;YACpE,mEAAmE;YACnE,4DAA4D;YAC5D,OAAO,CAAC,GAAG,CACT,+CAA+C,SAAS,MAAM,WAAW,GAAG;gBAC5E,0FAA0F,CAC3F,CAAC;YACF,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,oBAAoB,CAAC;oBAC9B,OAAO;oBACP,SAAS;oBACT,cAAc,EAAE,SAAS,CAAC,cAAc;oBACxC,SAAS,EAAE,SAAS,CAAC,SAAS;oBAC9B,SAAS,EAAE,SAAS,CAAC,aAAa,IAAI,EAAE;oBACxC,WAAW,EAAE,QAAQ;oBACrB,SAAS,EAAE,IAAI;iBAChB,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CACV,6DAA6D,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CACrG,CAAC;YACJ,CAAC;YACD,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;YAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,4EAA4E;QAC5E,wEAAwE;QACxE,4EAA4E;QAC5E,uEAAuE;QACvE,OAAO,CAAC,GAAG,CACT,qBAAqB,SAAS,oDAAoD;YAClF,GAAG,WAAW,4DAA4D;YAC1E,GAAG,SAAS,CAAC,WAAW,+DAA+D;YACvF,wBAAwB,CACzB,CAAC;QACF,OAAO;IACT,CAAC;IAED,mEAAmE;IACnE,6DAA6D;IAC7D,0EAA0E;IAC1E,6EAA6E;IAC7E,uEAAuE;IACvE,mDAAmD;IACnD,MAAM,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CAClD,CAAC;IACF,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CACT,iDAAiD,SAAS,uBAAuB,CAClF,CAAC;QACF,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,4EAA4E;IAC5E,kEAAkE;IAClE,4EAA4E;IAC5E,qCAAqC;IACrC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CACnC,iBAAiB;SACd,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;SAC7D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAClB,CAAC;IACF,MAAM,2BAA2B,GAAG,aAAa,CAAC,IAAI,CACpD,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAClF,CAAC;IAEF,2EAA2E;IAC3E,4EAA4E;IAC5E,2EAA2E;IAC3E,oDAAoD;IACpD,8EAA8E;IAC9E,6EAA6E;IAC7E,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,4EAA4E;IAC5E,uEAAuE;IACvE,IAAI,mBAAmB,GAAG,iBAAiB,CAAC;IAC5C,IAAI,qBAAqB,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACnE,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,uBAAuB,CAChC,GAAG,CAAC,MAAM,EACV,SAAS,EACT,SAAS,CAAC,aAAa,IAAI,EAAE,CAC9B,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,mEAAmE,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CAC3G,CAAC;QACJ,CAAC;QAED,2EAA2E;QAC3E,oEAAoE;QACpE,mEAAmE;QACnE,IAAI,CAAC;YACH,mBAAmB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC7D,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,MAAM,CACjD,CAAC,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CAClD,CAAC;YACF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAClC,OAAO,CAAC,GAAG,CACT,0EAA0E,SAAS,uBAAuB,CAC3G,CAAC;gBACF,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;gBAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,gFAAgF,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CACxH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,6EAA6E;IAC7E,uEAAuE;IACvE,4EAA4E;IAC5E,MAAM,eAAe,GAAG,mBAAmB,CAAC,MAAM,CAChD,CAAC,CAAC,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CAClD,CAAC;IACF,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC/B,mBAAmB;SAChB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;SAC7D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAClB,CAAC;IACF,MAAM,qBAAqB,GAAG,aAAa,CAAC,IAAI,CAC9C,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAC9E,CAAC;IACF,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAC1C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,KAAK,UAAU,CAC9C,CAAC;IACF,MAAM,qBAAqB,GAAG,WAAW,IAAI,qBAAqB,CAAC;IAEnE,qEAAqE;IACrE,+EAA+E;IAC/E,2EAA2E;IAC3E,4EAA4E;IAC5E,yEAAyE;IACzE,wEAAwE;IACxE,8EAA8E;IAC9E,0BAA0B;IAC1B,MAAM,eAAe,GAAG,IAAI,CAAC,gBAAgB,IAAI,uBAAuB,CAAC;IACzE,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,IAAI,0BAA0B,CAAC;IAC3E,MAAM,iBAAiB,GAAG,eAAe,CAAC,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI,CAAC;IACzE,MAAM,YAAY,GAAG,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExF,8EAA8E;IAC9E,2EAA2E;IAC3E,8EAA8E;IAC9E,6EAA6E;IAC7E,qEAAqE;IACrE,EAAE;IACF,6EAA6E;IAC7E,6EAA6E;IAC7E,+EAA+E;IAC/E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,mBAAmB,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;IACxF,MAAM,aAAa,GAAG,SAAS,CAAC,oBAAoB,IAAI,IAAI,CAAC;IAE7D,+EAA+E;IAC/E,4EAA4E;IAC5E,2EAA2E;IAC3E,2EAA2E;IAC3E,0EAA0E;IAC1E,0EAA0E;IAC1E,6EAA6E;IAC7E,6EAA6E;IAC7E,2EAA2E;IAC3E,6EAA6E;IAC7E,6EAA6E;IAC7E,2EAA2E;IAC3E,0EAA0E;IAC1E,8EAA8E;IAC9E,6DAA6D;IAE7D,6EAA6E;IAC7E,0DAA0D;IAC1D,2EAA2E;IAC3E,iEAAiE;IACjE,yEAAyE;IACzE,yEAAyE;IACzE,6EAA6E;IAC7E,yEAAyE;IACzE,2EAA2E;IAC3E,4EAA4E;IAC5E,wEAAwE;IACxE,+EAA+E;IAC/E,6EAA6E;IAC7E,cAAc;IACd,EAAE;IACF,8EAA8E;IAC9E,0EAA0E;IAC1E,2EAA2E;IAC3E,yEAAyE;IACzE,4EAA4E;IAC5E,+EAA+E;IAC/E,4EAA4E;IAC5E,gFAAgF;IAChF,yEAAyE;IACzE,wDAAwD;IACxD,MAAM,0BAA0B,GAAG,mBAAmB,CAAC,IAAI,CACzD,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,KAAK,eAAe,CACnD,CAAC;IAEF,MAAM,YAAY,GAAG,0BAA0B,IAAI,aAAa,KAAK,IAAI;QACvE,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,cAAc,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAE7C,oEAAoE;IACpE,yEAAyE;IACzE,wEAAwE;IACxE,8EAA8E;IAC9E,uEAAuE;IACvE,8EAA8E;IAC9E,wEAAwE;IACxE,+EAA+E;IAC/E,+EAA+E;IAC/E,2EAA2E;IAC3E,+EAA+E;IAC/E,8EAA8E;IAC9E,6DAA6D;IAC7D,2EAA2E;IAC3E,uEAAuE;IACvE,mEAAmE;IACnE,MAAM,iBAAiB,GACrB,aAAa,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAErE,2EAA2E;IAC3E,mEAAmE;IACnE,yEAAyE;IACzE,oCAAoC;IACpC,EAAE;IACF,2EAA2E;IAC3E,2EAA2E;IAC3E,sEAAsE;IACtE,wEAAwE;IACxE,2EAA2E;IAC3E,yEAAyE;IACzE,iEAAiE;IACjE,wEAAwE;IACxE,0EAA0E;IAC1E,4EAA4E;IAC5E,sEAAsE;IACtE,qCAAqC;IACrC,IAAI,KAAK,GAA6B,IAAI,CAAC;IAC3C,IAAI,yBAAyB,CAAC,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;QAC5E,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC,CACtD,CAAC;QACF,KAAK,GAAG,MAAM,0BAA0B,CAAC,UAAU,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACpF,CAAC;IAED,uEAAuE;IACvE,wEAAwE;IACxE,wEAAwE;IACxE,mDAAmD;IACnD,MAAM,uBAAuB,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAEzF,8EAA8E;IAC9E,4EAA4E;IAC5E,uEAAuE;IACvE,uEAAuE;IACvE,gFAAgF;IAChF,IAAI,YAAY,EAAE,CAAC;QACjB,SAAS,CAAC,mBAAmB,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,MAAM,GAAG,sBAAsB,CAAC;QACpC,qBAAqB;QACrB,iBAAiB;QACjB,sBAAsB,EAAE,KAAK,KAAK,IAAI;QACtC,gBAAgB,EAAE,uBAAuB;QACzC,eAAe,EAAE,gCAAgC;QACjD,uBAAuB,EAAE,qBAAqB;KAC/C,CAAC,CAAC;IAEH,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,wCAAwC,CAAC,CAAC,CAAC;YAC9C,wEAAwE;YACxE,wEAAwE;YACxE,qEAAqE;YACrE,gEAAgE;YAChE,wEAAwE;YACxE,qEAAqE;YACrE,yEAAyE;YACzE,iEAAiE;YACjE,mEAAmE;YACnE,iEAAiE;YACjE,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC;gBACH,gBAAgB,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,OAAO,CAAC,CAAC;YACtE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CACV,sDAAsD,SAAS,8BAA+B,GAAa,CAAC,OAAO,EAAE,CACtH,CAAC;YACJ,CAAC;YACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,OAAO,CAAC,IAAI,CACV,kDAAkD,SAAS,OAAO;oBAClE,IAAI,KAAM,CAAC,IAAI,MAAM,KAAM,CAAC,eAAe,IAAI,OAAO,uBAAuB;oBAC7E,UAAU,KAAM,CAAC,sBAAsB,IAAI,MAAM,gCAAgC;oBACjF,uBAAuB,CACxB,CAAC;gBACF,MAAM,sBAAsB,CAAC;oBAC3B,cAAc,EAAE,SAAS,CAAC,cAAc;oBACxC,SAAS,EAAE,SAAS,CAAC,aAAa,IAAI,EAAE;oBACxC,OAAO;oBACP,SAAS;oBACT,WAAW,EAAE,SAAS,CAAC,MAAM;oBAC7B,KAAK,EAAE,KAAM;oBACb,SAAS,EAAE,eAAe;iBAC3B,EAAE,IAAI,CAAC,CAAC;YACX,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CACT,kDAAkD,SAAS,gBAAgB;oBAC3E,qEAAqE,CACtE,CAAC;YACJ,CAAC;YACD,SAAS,CAAC,oBAAoB,GAAG,QAAQ,CAAC;YAC1C,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;YAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,KAAK,8BAA8B,CAAC,CAAC,CAAC;YACpC,sEAAsE;YACtE,gEAAgE;YAChE,oEAAoE;YACpE,qEAAqE;YACrE,uEAAuE;YACvE,4CAA4C;YAC5C,OAAO,CAAC,GAAG,CACT,yDAAyD,SAAS,OAAO;gBACzE,GAAG,eAAe,CAAC,MAAM,uDAAuD;gBAChF,+EAA+E,CAChF,CAAC;YACF,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;YAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,KAAK,oCAAoC,CAAC,CAAC,CAAC;YAC1C,yEAAyE;YACzE,wEAAwE;YACxE,2EAA2E;YAC3E,uEAAuE;YACvE,2EAA2E;YAC3E,yEAAyE;YACzE,EAAE;YACF,sEAAsE;YACtE,yEAAyE;YACzE,0EAA0E;YAC1E,2EAA2E;YAC3E,wEAAwE;YACxE,uEAAuE;YACvE,qEAAqE;YACrE,sEAAsE;YACtE,oEAAoE;YACpE,MAAM,eAAe,GACnB,iBAAiB,KAAK,IAAI;gBAC1B,CAAC,IAAI,CAAC,6BAA6B,IAAI,oCAAoC,CAAC,CAC1E,iBAAiB,CAClB,CAAC;YACJ,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC;YACrC,sEAAsE;YACtE,0EAA0E;YAC1E,+EAA+E;YAC/E,MAAM,iBAAiB,GAAG,4BAA4B,EAAE,CAAC;YACzD,MAAM,WAAW,GAAG,SAAS,CAAC,mBAAmB,IAAI,CAAC,CAAC;YACvD,IAAI,eAAe,IAAI,QAAQ,IAAI,WAAW,GAAG,iBAAiB,EAAE,CAAC;gBACnE,gEAAgE;gBAChE,sEAAsE;gBACtE,qEAAqE;gBACrE,qCAAqC;gBACrC,SAAS,CAAC,mBAAmB,GAAG,WAAW,GAAG,CAAC,CAAC;gBAChD,SAAS,CAAC,oBAAoB,GAAG,QAAQ,CAAC;gBAC1C,OAAO,CAAC,IAAI,CACV,uDAAuD,SAAS,aAAa;oBAC7E,yEAAyE;oBACzE,sDAAsD;oBACtD,yBAAyB,SAAS,CAAC,mBAAmB,IAAI,iBAAiB,IAAI,CAChF,CAAC;gBACF,WAAW,CACT,QAAQ,EACR,4EAA4E;oBAC5E,+EAA+E;oBAC/E,GAAG,iBAAiB,2DAA2D;oBAC/E,gCAAgC,SAAS,CAAC,mBAAmB,IAAI,iBAAiB,GAAG,CACtF,CAAC;gBACF,kBAAkB,CAAC,KAAK,EAAE,CAAC;gBAC3B,OAAO;YACT,CAAC;YAED,wEAAwE;YACxE,wEAAwE;YACxE,sEAAsE;YACtE,yEAAyE;YACzE,oEAAoE;YACpE,gEAAgE;YAChE,oEAAoE;YACpE,yEAAyE;YACzE,6EAA6E;YAC7E,SAAS,CAAC,mBAAmB,GAAG,CAAC,CAAC;YAClC,SAAS,CAAC,gBAAgB,GAAG,uBAAuB,CAAC;YACrD,SAAS,CAAC,oBAAoB,GAAG,QAAQ,CAAC;YAC1C,OAAO,CAAC,IAAI,CACV,sDAAsD,SAAS,OAAO;gBACtE,GAAG,SAAS,CAAC,gBAAgB,2CAA2C,eAAe,CAAC,MAAM,GAAG;gBACjG,wDAAwD,CACzD,CAAC;YACF,MAAM,kBAAkB,CAAC;gBACvB,cAAc,EAAE,SAAS,CAAC,cAAc;gBACxC,SAAS,EAAE,SAAS,CAAC,aAAa,IAAI,EAAE;gBACxC,OAAO;gBACP,SAAS;gBACT,WAAW,EAAE,SAAS,CAAC,MAAM;gBAC7B,MAAM,EAAE,SAAS,CAAC,gBAAgB;gBAClC,SAAS,EAAE,eAAe;aAC3B,EAAE,IAAI,CAAC,CAAC;YACT,SAAS,CAAC,cAAc,GAAG,eAAe,CAAC;YAC3C,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,KAAK,kBAAkB,CAAC;QACxB,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,SAAS,CAAC,gBAAgB,GAAG,uBAAuB,CAAC;YACrD,SAAS,CAAC,oBAAoB,GAAG,QAAQ,CAAC;YAE1C,sEAAsE;YACtE,yEAAyE;YACzE,cAAc;YACd,IAAI,OAAe,CAAC;YACpB,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACvC,OAAO,CAAC,GAAG,CACT,2CAA2C,SAAS,uBAAuB,CAC5E,CAAC;gBACF,OAAO,GAAG,gBAAgB,CAAC,mBAAmB,EAAE,aAAa,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAC7F,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CACT,iCAAiC,SAAS,QAAQ,eAAe,CAAC,MAAM,gBAAgB;oBACxF,+BAA+B,SAAS,CAAC,gBAAgB,IAAI,gCAAgC,GAAG,CACjG,CAAC;gBACF,OAAO,GAAG,wBAAwB,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;YACrE,CAAC;YAED,wBAAwB;YACxB,KAAK,MAAM,CAAC,IAAI,iBAAiB,EAAE,CAAC;gBAClC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrC,SAAS,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,sBAAsB,CAAC,CAAC;YACjE,CAAC;YAED,kBAAkB,CAAC,KAAK,EAAE,CAAC;YAC3B,WAAW,CAAC,IAAI,CAAC,KAAM,EAAE,OAAO,CAAC,CAAC;YAClC,OAAO;QACT,CAAC;IACH,CAAC;AACH,CAAC;AAED,2EAA2E;AAC3E,4EAA4E;AAC5E,gFAAgF;AAChF,6EAA6E;AAC7E,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,CAAC"}
|