@telora/daemon 0.19.17 → 0.19.23

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.
Files changed (61) hide show
  1. package/build-info.json +5 -3
  2. package/dist/backends/lacuna/index.d.ts +11 -0
  3. package/dist/backends/lacuna/index.d.ts.map +1 -0
  4. package/dist/backends/lacuna/index.js +11 -0
  5. package/dist/backends/lacuna/index.js.map +1 -0
  6. package/dist/backends/lacuna/launch-adapter.d.ts +100 -0
  7. package/dist/backends/lacuna/launch-adapter.d.ts.map +1 -0
  8. package/dist/backends/lacuna/launch-adapter.js +162 -0
  9. package/dist/backends/lacuna/launch-adapter.js.map +1 -0
  10. package/dist/backends/lacuna/lifecycle.d.ts +21 -0
  11. package/dist/backends/lacuna/lifecycle.d.ts.map +1 -0
  12. package/dist/backends/lacuna/lifecycle.js +45 -0
  13. package/dist/backends/lacuna/lifecycle.js.map +1 -0
  14. package/dist/backends/lacuna/routing.d.ts +31 -0
  15. package/dist/backends/lacuna/routing.d.ts.map +1 -0
  16. package/dist/backends/lacuna/routing.js +46 -0
  17. package/dist/backends/lacuna/routing.js.map +1 -0
  18. package/dist/backends/lacuna/supervisor.d.ts +81 -0
  19. package/dist/backends/lacuna/supervisor.d.ts.map +1 -0
  20. package/dist/backends/lacuna/supervisor.js +244 -0
  21. package/dist/backends/lacuna/supervisor.js.map +1 -0
  22. package/dist/completion/event.d.ts +11 -0
  23. package/dist/completion/event.d.ts.map +1 -1
  24. package/dist/completion/event.js +43 -2
  25. package/dist/completion/event.js.map +1 -1
  26. package/dist/completion/terminated-work-reconcile.d.ts +72 -0
  27. package/dist/completion/terminated-work-reconcile.d.ts.map +1 -0
  28. package/dist/completion/terminated-work-reconcile.js +170 -0
  29. package/dist/completion/terminated-work-reconcile.js.map +1 -0
  30. package/dist/config.d.ts.map +1 -1
  31. package/dist/config.js +32 -0
  32. package/dist/config.js.map +1 -1
  33. package/dist/control-state.d.ts +70 -2
  34. package/dist/control-state.d.ts.map +1 -1
  35. package/dist/control-state.js +146 -18
  36. package/dist/control-state.js.map +1 -1
  37. package/dist/listener.d.ts.map +1 -1
  38. package/dist/listener.js +6 -1
  39. package/dist/listener.js.map +1 -1
  40. package/dist/merge-back-loop.d.ts.map +1 -1
  41. package/dist/merge-back-loop.js +37 -1
  42. package/dist/merge-back-loop.js.map +1 -1
  43. package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
  44. package/dist/prompt-sections/execution-sections.js +44 -6
  45. package/dist/prompt-sections/execution-sections.js.map +1 -1
  46. package/dist/spawn-environment.d.ts.map +1 -1
  47. package/dist/spawn-environment.js +11 -0
  48. package/dist/spawn-environment.js.map +1 -1
  49. package/dist/types/config.d.ts +26 -0
  50. package/dist/types/config.d.ts.map +1 -1
  51. package/dist/unified-engine-lifecycle.d.ts.map +1 -1
  52. package/dist/unified-engine-lifecycle.js +7 -2
  53. package/dist/unified-engine-lifecycle.js.map +1 -1
  54. package/dist/unified-shell-config.d.ts +13 -1
  55. package/dist/unified-shell-config.d.ts.map +1 -1
  56. package/dist/unified-shell-config.js +51 -0
  57. package/dist/unified-shell-config.js.map +1 -1
  58. package/dist/unified-shell.d.ts.map +1 -1
  59. package/dist/unified-shell.js +19 -2
  60. package/dist/unified-shell.js.map +1 -1
  61. package/package.json +2 -2
@@ -0,0 +1,170 @@
1
+ /**
2
+ * Terminated-team work reconciliation.
3
+ *
4
+ * Root fix for the recurring dead-end stall: when the no-progress watchdog
5
+ * terminates a stuck team, the recovery machinery rescued the team's CODE
6
+ * (safety-commit, merge-back) but never reconciled its TRACKING STATE -- the
7
+ * delivery dead-ended in `coding` with issues left In Progress, so a human was
8
+ * required and the focus stalled permanently.
9
+ *
10
+ * This module bridges 'team failed' -> 'its committed work re-enters the loop'.
11
+ * On the terminate path it:
12
+ * 1. safety-commits a dirty worktree so the team's bytes are captured,
13
+ * 2. checks whether the focus branch now carries committed work (the
14
+ * safety-commit it just made, or the team's own earlier commits),
15
+ * 3. for each non-terminal coding delivery the team finished-but-never-closed
16
+ * (open work is exactly the In-Progress issues it left behind), flips those
17
+ * issues to In Review and advances the delivery coding -> verify via the
18
+ * existing advanceDeliveryStage path, so the verify/review gate judges
19
+ * completeness (approve -> done, or file defects -> verify_failed).
20
+ *
21
+ * The caller (completion/event.ts) escalates the team_failure no-progress
22
+ * escalation ONLY when this reconciliation captured nothing -- i.e. genuinely
23
+ * nothing was produced. A terminated team whose work IS committed re-enters the
24
+ * gate instead of dead-ending.
25
+ *
26
+ * @module completion/terminated-work-reconcile
27
+ */
28
+ import { DELIVERY_STATUS } from '@telora/daemon-core';
29
+ import { OPEN_ISSUE_STATUSES, filterWorkIssues } from '../constants.js';
30
+ import { worktreeHasUncommittedChanges as defaultWorktreeHasUncommittedChanges, safetyCommitWorktree as defaultSafetyCommitWorktree, branchHasUnmergedCommits as defaultBranchHasUnmergedCommits, } from '../worktree-safety.js';
31
+ import { updateIssueStatus as defaultUpdateIssueStatus, fetchEffectiveWorkflow as defaultFetchEffectiveWorkflow } from '../supabase.js';
32
+ import { advanceDeliveryStage as defaultAdvanceDeliveryStage, } from '../delivery-lifecycle.js';
33
+ /** The issue status the team leaves on work it finished but never closed. */
34
+ const IN_PROGRESS_STATUS = 'In Progress';
35
+ /** Terminal-for-advancement status the reconciler moves finished issues to. */
36
+ const IN_REVIEW_STATUS = 'In Review';
37
+ /** Fallback terminal status when a workflow does not permit In Review. */
38
+ const DONE_STATUS = 'Done';
39
+ const defaultDeps = {
40
+ worktreeHasUncommittedChanges: defaultWorktreeHasUncommittedChanges,
41
+ safetyCommitWorktree: defaultSafetyCommitWorktree,
42
+ branchHasUnmergedCommits: defaultBranchHasUnmergedCommits,
43
+ updateIssueStatus: defaultUpdateIssueStatus,
44
+ fetchEffectiveWorkflow: defaultFetchEffectiveWorkflow,
45
+ advanceDeliveryStage: defaultAdvanceDeliveryStage,
46
+ };
47
+ /**
48
+ * Reconcile a terminated team's committed work into the verify/review gate.
49
+ *
50
+ * See the module header for the full rationale. Returns the count of coding
51
+ * deliveries that were reconciled and whether the branch carried committed
52
+ * work; the caller escalates only when nothing was reconciled.
53
+ */
54
+ export async function reconcileTerminatedTeamWork(params, deps = defaultDeps) {
55
+ const { config, teamState, deliveries, issues, worktreePath, sessionId } = params;
56
+ const { focusId, focusName, organizationId, branchName } = teamState;
57
+ // 1. Capture the team's bytes: safety-commit a dirty worktree so any
58
+ // uncommitted work the team left becomes a commit on the focus branch.
59
+ let stillDirty = false;
60
+ if (worktreePath && deps.worktreeHasUncommittedChanges(worktreePath)) {
61
+ const hash = deps.safetyCommitWorktree(worktreePath, focusName);
62
+ if (hash) {
63
+ console.log(`[terminated-reconcile] Safety-committed dirty worktree for "${focusName}": ${hash.slice(0, 8)}`);
64
+ }
65
+ // Re-check: if we could not bring the tree to a clean state (commit failed),
66
+ // the guarded advance below cannot run safely -- leave it to the escalate path.
67
+ stillDirty = deps.worktreeHasUncommittedChanges(worktreePath);
68
+ }
69
+ // 2. Did a commit (safety or the team's own) capture work on the focus branch?
70
+ const workCaptured = deps.branchHasUnmergedCommits(branchName, config.integrationBranch, config.repoPath);
71
+ if (!workCaptured || stillDirty) {
72
+ // Nothing produced, or the worktree could not be brought clean: do not
73
+ // reconcile. The caller falls through to escalateNoProgress.
74
+ return { reconciledCount: 0, workCaptured };
75
+ }
76
+ // 3. Reconcile each coding delivery the team finished-but-never-closed.
77
+ let reconciledCount = 0;
78
+ for (const delivery of deliveries) {
79
+ if ((delivery.executionStatus ?? '') !== DELIVERY_STATUS.CODING)
80
+ continue;
81
+ const deliveryIssues = issues.filter(i => i.deliveryId === delivery.id);
82
+ const workIssues = filterWorkIssues(deliveryIssues);
83
+ const openWork = workIssues.filter(i => OPEN_ISSUE_STATUSES.has(i.status));
84
+ const inProgress = openWork.filter(i => i.status === IN_PROGRESS_STATUS);
85
+ // Only reconcile the dev-complete-but-untracked signature: the delivery's
86
+ // open work is exactly the In-Progress issues the team left behind (the
87
+ // lead-parks-on-background-workers defect). A To Do / Blocked open issue
88
+ // means the work is genuinely unstarted or blocked -- NOT safe to push to
89
+ // the review gate as complete; leave those deliveries for the escalate path.
90
+ if (openWork.length > 0 && openWork.length !== inProgress.length)
91
+ continue;
92
+ const currentStageId = delivery.currentWorkflowStageId
93
+ ?? teamState.deliveryStageIds.get(delivery.id)
94
+ ?? null;
95
+ if (!currentStageId) {
96
+ console.warn(`[terminated-reconcile] Delivery "${delivery.name}" has no workflow stage ID -- skipping reconcile`);
97
+ continue;
98
+ }
99
+ let workflow;
100
+ try {
101
+ workflow = await deps.fetchEffectiveWorkflow(delivery.id);
102
+ }
103
+ catch (err) {
104
+ console.warn(`[terminated-reconcile] fetchEffectiveWorkflow failed for "${delivery.name}": ${err.message}`);
105
+ continue;
106
+ }
107
+ // Flip the team's finished-but-open issues In Progress -> In Review. This
108
+ // is the dev-complete signal; the review gate (not the daemon) decides
109
+ // whether the work is actually complete. Some issue workflows do not permit
110
+ // an In Progress -> In Review transition (In Review is optional); when the
111
+ // write is rejected we fall back to Done so the issue still becomes terminal
112
+ // and the delivery can advance -- the focus-level review gate on the verify
113
+ // delivery still judges the work either way.
114
+ for (const issue of inProgress) {
115
+ try {
116
+ await deps.updateIssueStatus(issue.id, IN_REVIEW_STATUS);
117
+ }
118
+ catch (err) {
119
+ const message = err.message ?? '';
120
+ if (message.includes('Invalid status transition')) {
121
+ try {
122
+ await deps.updateIssueStatus(issue.id, DONE_STATUS);
123
+ console.log(`[terminated-reconcile] Issue ${issue.id}: In Review not permitted by workflow -- moved to Done instead`);
124
+ }
125
+ catch (doneErr) {
126
+ console.warn(`[terminated-reconcile] Failed to move issue ${issue.id} to Done: ${doneErr.message}`);
127
+ }
128
+ }
129
+ else {
130
+ console.warn(`[terminated-reconcile] Failed to move issue ${issue.id} to In Review: ${message}`);
131
+ }
132
+ }
133
+ }
134
+ // Advance coding -> verify. The worktree was just safety-committed (clean),
135
+ // and open work is now zero (In Review is terminal-for-advancement), so the
136
+ // guarded advance crosses to verify.
137
+ try {
138
+ const result = await deps.advanceDeliveryStage({
139
+ deliveryId: delivery.id,
140
+ deliveryName: delivery.name,
141
+ organizationId,
142
+ workflow,
143
+ currentStageId,
144
+ fromStatus: DELIVERY_STATUS.CODING,
145
+ exitCode: 0,
146
+ openIssueCount: 0,
147
+ sessionCount: 0,
148
+ policyFailureMode: config.policyFailureMode,
149
+ sessionId,
150
+ focusId,
151
+ config,
152
+ });
153
+ teamState.deliveryStageIds.set(delivery.id, result.deliveryStageId ?? null);
154
+ if (result.advanced) {
155
+ reconciledCount += 1;
156
+ console.log(`[terminated-reconcile] Delivery "${delivery.name}" reconciled coding -> ${result.deliveryStatus}; ` +
157
+ `${inProgress.length} issue(s) moved to In Review -- re-entering the review gate`);
158
+ }
159
+ else {
160
+ console.warn(`[terminated-reconcile] Delivery "${delivery.name}" did not advance out of coding ` +
161
+ `(status=${result.deliveryStatus}, guardBlocked=${result.guardBlocked})`);
162
+ }
163
+ }
164
+ catch (err) {
165
+ console.warn(`[terminated-reconcile] advanceDeliveryStage failed for "${delivery.name}": ${err.message}`);
166
+ }
167
+ }
168
+ return { reconciledCount, workCaptured: true };
169
+ }
170
+ //# sourceMappingURL=terminated-work-reconcile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminated-work-reconcile.js","sourceRoot":"","sources":["../../src/completion/terminated-work-reconcile.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAYH,OAAO,KAAK,EAAE,YAAY,EAAsC,MAAM,YAAY,CAAC;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAwCxD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CAmJ5D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY,CAa1F;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAE7F;AAqBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAuEzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CA2BtD"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAYH,OAAO,KAAK,EAAE,YAAY,EAAoD,MAAM,YAAY,CAAC;AACjG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAwCxD;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CA8K5D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,GAAG,YAAY,CAa1F;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAE7F;AAqBD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAuEzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAiCtD"}
package/dist/config.js CHANGED
@@ -163,6 +163,31 @@ export function loadConfig(configPath) {
163
163
  flushIntervalMs: resolveNum('TELORA_TELEMETRY_FLUSH_INTERVAL_MS', envCfg.TELORA_TELEMETRY_FLUSH_INTERVAL_MS, telemetryFile.flushIntervalMs),
164
164
  retentionDays: resolveNum('TELORA_TELEMETRY_RETENTION_DAYS', envCfg.TELORA_TELEMETRY_RETENTION_DAYS, telemetryFile.retentionDays),
165
165
  };
166
+ // Lacuna context-compression sidecar (opt-in; default off). Same env > file >
167
+ // typed-default precedence as telemetry; the flat TELORA_LACUNA_* knobs are
168
+ // already parsed + validated by envCfg.
169
+ const lacunaFile = (typeof fileConfig.lacuna === 'object' && fileConfig.lacuna !== null)
170
+ ? fileConfig.lacuna
171
+ : {};
172
+ const lacuna = {
173
+ enabled: envIsSet('TELORA_LACUNA_ENABLED')
174
+ ? envCfg.TELORA_LACUNA_ENABLED
175
+ : (typeof lacunaFile.enabled === 'boolean' ? lacunaFile.enabled : envCfg.TELORA_LACUNA_ENABLED),
176
+ host: envIsSet('TELORA_LACUNA_HOST')
177
+ ? envCfg.TELORA_LACUNA_HOST
178
+ : (typeof lacunaFile.host === 'string' && lacunaFile.host ? lacunaFile.host : envCfg.TELORA_LACUNA_HOST),
179
+ port: resolveNum('TELORA_LACUNA_PORT', envCfg.TELORA_LACUNA_PORT, lacunaFile.port),
180
+ upstreamBaseUrl: envIsSet('TELORA_LACUNA_UPSTREAM_BASE_URL')
181
+ ? envCfg.TELORA_LACUNA_UPSTREAM_BASE_URL
182
+ : (typeof lacunaFile.upstreamBaseUrl === 'string' && lacunaFile.upstreamBaseUrl ? lacunaFile.upstreamBaseUrl : envCfg.TELORA_LACUNA_UPSTREAM_BASE_URL),
183
+ compressEnabled: envIsSet('TELORA_LACUNA_COMPRESS_ENABLED')
184
+ ? envCfg.TELORA_LACUNA_COMPRESS_ENABLED
185
+ : (typeof lacunaFile.compressEnabled === 'boolean' ? lacunaFile.compressEnabled : envCfg.TELORA_LACUNA_COMPRESS_ENABLED),
186
+ source: envIsSet('TELORA_LACUNA_SOURCE')
187
+ ? envCfg.TELORA_LACUNA_SOURCE
188
+ : (typeof lacunaFile.source === 'string' && lacunaFile.source ? lacunaFile.source : envCfg.TELORA_LACUNA_SOURCE),
189
+ readyTimeoutMs: resolveNum('TELORA_LACUNA_READY_TIMEOUT_MS', envCfg.TELORA_LACUNA_READY_TIMEOUT_MS, lacunaFile.readyTimeoutMs),
190
+ };
166
191
  return {
167
192
  teloraUrl,
168
193
  trackerId,
@@ -185,6 +210,7 @@ export function loadConfig(configPath) {
185
210
  logMaxTotalBytes,
186
211
  logMaxFiles,
187
212
  telemetry,
213
+ lacuna,
188
214
  };
189
215
  }
190
216
  /**
@@ -357,5 +383,11 @@ export function printConfig(config) {
357
383
  console.log(` Telemetry Port: ${config.telemetry.port}`);
358
384
  console.log(` Telemetry Flush Interval: ${config.telemetry.flushIntervalMs}ms`);
359
385
  console.log(` Telemetry Retention: ${config.telemetry.retentionDays} days`);
386
+ console.log(` Lacuna Sidecar: ${config.lacuna.enabled ? 'enabled' : 'disabled'}`);
387
+ if (config.lacuna.enabled) {
388
+ console.log(` Lacuna Endpoint: http://${config.lacuna.host}:${config.lacuna.port}`);
389
+ console.log(` Lacuna Compress: ${config.lacuna.compressEnabled}`);
390
+ console.log(` Lacuna Ready Timeout: ${config.lacuna.readyTimeoutMs}ms`);
391
+ }
360
392
  }
361
393
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -9,8 +9,15 @@
9
9
  *
10
10
  * Called from the poll loop alongside existing checks.
11
11
  */
12
- import type { DaemonConfig } from './types.js';
12
+ import type { DaemonConfig, FocusTeamState } from './types.js';
13
13
  import type { ControlStateChange } from './queries/control-state.js';
14
+ import { getActiveFocuses } from './queries/deliveries.js';
15
+ /**
16
+ * Grace period (ms) between the cooperative 'commit and exit' stdin message and
17
+ * the SIGTERM that follows. Mirrors the cockpit Stop grace so the team has time
18
+ * to safety-commit its work before being terminated.
19
+ */
20
+ export declare const COOPERATIVE_STOP_GRACE_MS = 10000;
14
21
  /**
15
22
  * Check for control state changes and dispatch to appropriate handlers.
16
23
  *
@@ -27,9 +34,66 @@ export declare function handleHumanControl(change: ControlStateChange): void;
27
34
  */
28
35
  export declare function handleResuming(change: ControlStateChange): Promise<void>;
29
36
  /**
30
- * Handle stopped: graceful halt with message + SIGTERM.
37
+ * Handle stopped: graceful halt with message + SIGTERM (cockpit Stop path).
38
+ *
39
+ * Thin wrapper over the shared initiateCooperativeStop -- the cockpit Stop and
40
+ * the disarm reaper drive the same cooperative-stop -> SIGTERM mechanism.
31
41
  */
32
42
  export declare function handleStopped(change: ControlStateChange): void;
43
+ /** Injectable seam for the cooperative-stop mechanism (tests override). */
44
+ export interface CooperativeStopDeps {
45
+ getActiveTeams: () => Map<string, FocusTeamState>;
46
+ terminateTeam: (focusId: string, shutdownReason?: FocusTeamState['shutdownReason']) => boolean;
47
+ }
48
+ export interface CooperativeStopOptions {
49
+ /** Stamped on the team so handleTeamCompletion classifies the exit as a controlled stop. */
50
+ shutdownReason: FocusTeamState['shutdownReason'];
51
+ /** The 'commit your work and exit' message sent to the lead before SIGTERM. */
52
+ message: string;
53
+ /** Grace period before SIGTERM (default COOPERATIVE_STOP_GRACE_MS). */
54
+ graceMs?: number;
55
+ }
56
+ /**
57
+ * Cooperatively stop a running team: resume it if it was SIGSTOP-suspended,
58
+ * send the 'commit your work and exit' message, stamp the shutdown reason so
59
+ * the exit classifier records a controlled stop (NOT a crash / team_failure),
60
+ * then SIGTERM via the existing terminateTeam flow after the grace period.
61
+ *
62
+ * Pure mechanism: NO idempotency guard here (the cockpit Stop is a one-shot
63
+ * control-state event; the reaper supplies its own per-poll dedup). The grace
64
+ * timer is unref'd so it never holds the process open on its own.
65
+ */
66
+ export declare function initiateCooperativeStop(focusId: string, options: CooperativeStopOptions, deps?: CooperativeStopDeps): void;
67
+ /** Injectable seam for the disarm reaper (tests override). */
68
+ export interface ReapDisarmedTeamsDeps {
69
+ getActiveTeams: () => Map<string, FocusTeamState>;
70
+ getActiveFocuses: typeof getActiveFocuses;
71
+ initiateCooperativeStop: (focusId: string, options: CooperativeStopOptions) => void;
72
+ }
73
+ /**
74
+ * Stop running teams whose focus has been DISARMED via the dashboard Stop
75
+ * (clearing assigned_agent_role_id). Clearing the role only removes the focus
76
+ * from the spawn set; the in-flight team would otherwise run to natural
77
+ * completion. This reaper brings the role-clear toggle to parity with the
78
+ * cockpit Stop: stop means stop.
79
+ *
80
+ * getActiveFocuses returns ALL status='active' focuses REGARDLESS of role
81
+ * (daemon-focus-handlers handleDaemonGetActiveFocuses), so:
82
+ * - a team whose focus is PRESENT with a null role -> disarmed -> reap it;
83
+ * - PRESENT with a non-null role -> still armed (idle/in-review/paused) -> leave it;
84
+ * - ABSENT -> the focus is no longer status='active' (genuine deactivation),
85
+ * owned by checkForDeactivatedFocuses (which runs earlier in the poll and
86
+ * does a full teardown incl. worktree removal). The reaper deliberately
87
+ * does NOT double-handle that case, and never removes the worktree -- a
88
+ * disarmed focus keeps its worktree so a re-arm can resume.
89
+ *
90
+ * Re-arm within the grace window: the chosen rule is "complete the stop, then
91
+ * allow a fresh spawn". The scheduled SIGTERM still fires (the team exits as a
92
+ * clean operator stop); if the focus has since been re-armed, the next poll's
93
+ * processReadyFocuses spawns a fresh team once the old one is gone. The stop is
94
+ * never cancelled mid-flight, which keeps the path deterministic.
95
+ */
96
+ export declare function reapDisarmedTeams(config: DaemonConfig, deps?: ReapDisarmedTeamsDeps): Promise<void>;
33
97
  /**
34
98
  * Get the set of suspended focus IDs (for testing).
35
99
  */
@@ -38,4 +102,8 @@ export declare function getSuspendedFocuses(): ReadonlySet<string>;
38
102
  * Clear all tracked suspended focuses (for testing).
39
103
  */
40
104
  export declare function clearSuspendedFocuses(): void;
105
+ /**
106
+ * Clear the reaper's in-flight-stop dedup set (for testing).
107
+ */
108
+ export declare function clearPendingDisarmStops(): void;
41
109
  //# sourceMappingURL=control-state.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"control-state.d.ts","sourceRoot":"","sources":["../src/control-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAMrE;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8ClF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAgCnE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgE9E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAiD9D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,WAAW,CAAC,MAAM,CAAC,CAEzD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C"}
1
+ {"version":3,"file":"control-state.d.ts","sourceRoot":"","sources":["../src/control-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAG/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAM3D;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAE/C;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8ClF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAgCnE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgE9E;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAK9D;AAID,2EAA2E;AAC3E,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAClD,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,cAAc,CAAC,gBAAgB,CAAC,KAAK,OAAO,CAAC;CAChG;AAID,MAAM,WAAW,sBAAsB;IACrC,4FAA4F;IAC5F,cAAc,EAAE,cAAc,CAAC,gBAAgB,CAAC,CAAC;IACjD,+EAA+E;IAC/E,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,sBAAsB,EAC/B,IAAI,GAAE,mBAAgD,GACrD,IAAI,CAmDN;AAYD,8DAA8D;AAC9D,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAClD,gBAAgB,EAAE,OAAO,gBAAgB,CAAC;IAC1C,uBAAuB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACrF;AAQD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,YAAY,EACpB,IAAI,GAAE,qBAAuC,GAC5C,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,WAAW,CAAC,MAAM,CAAC,CAEzD;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}
@@ -11,9 +11,16 @@
11
11
  */
12
12
  import { getActiveTeams, terminateTeam } from './focus-executor.js';
13
13
  import { getControlStateChanges, setControlStateRunning } from './queries/control-state.js';
14
+ import { getActiveFocuses } from './queries/deliveries.js';
14
15
  import { sendMessage } from '@telora/daemon-core';
15
16
  // Track focuses that have already been suspended to avoid repeated SIGSTOP.
16
17
  const suspendedFocuses = new Set();
18
+ /**
19
+ * Grace period (ms) between the cooperative 'commit and exit' stdin message and
20
+ * the SIGTERM that follows. Mirrors the cockpit Stop grace so the team has time
21
+ * to safety-commit its work before being terminated.
22
+ */
23
+ export const COOPERATIVE_STOP_GRACE_MS = 10000;
17
24
  /**
18
25
  * Check for control state changes and dispatch to appropriate handlers.
19
26
  *
@@ -149,19 +156,39 @@ export async function handleResuming(change) {
149
156
  suspendedFocuses.delete(entityId);
150
157
  }
151
158
  /**
152
- * Handle stopped: graceful halt with message + SIGTERM.
159
+ * Handle stopped: graceful halt with message + SIGTERM (cockpit Stop path).
160
+ *
161
+ * Thin wrapper over the shared initiateCooperativeStop -- the cockpit Stop and
162
+ * the disarm reaper drive the same cooperative-stop -> SIGTERM mechanism.
153
163
  */
154
164
  export function handleStopped(change) {
155
- const { entityId } = change;
156
- const activeTeams = getActiveTeams();
157
- const team = activeTeams.get(entityId);
165
+ initiateCooperativeStop(change.entityId, {
166
+ shutdownReason: 'user_stopped',
167
+ message: 'Execution has been stopped by the operator. Commit your current work and exit.',
168
+ });
169
+ }
170
+ const defaultCooperativeStopDeps = { getActiveTeams, terminateTeam };
171
+ /**
172
+ * Cooperatively stop a running team: resume it if it was SIGSTOP-suspended,
173
+ * send the 'commit your work and exit' message, stamp the shutdown reason so
174
+ * the exit classifier records a controlled stop (NOT a crash / team_failure),
175
+ * then SIGTERM via the existing terminateTeam flow after the grace period.
176
+ *
177
+ * Pure mechanism: NO idempotency guard here (the cockpit Stop is a one-shot
178
+ * control-state event; the reaper supplies its own per-poll dedup). The grace
179
+ * timer is unref'd so it never holds the process open on its own.
180
+ */
181
+ export function initiateCooperativeStop(focusId, options, deps = defaultCooperativeStopDeps) {
182
+ const activeTeams = deps.getActiveTeams();
183
+ const team = activeTeams.get(focusId);
158
184
  if (!team) {
159
- console.log(`[control-state] No active team for focus ${entityId} -- acknowledging stopped`);
160
- suspendedFocuses.delete(entityId);
185
+ console.log(`[control-state] No active team for focus ${focusId} -- acknowledging stop`);
186
+ suspendedFocuses.delete(focusId);
161
187
  return;
162
188
  }
163
- // If the team was suspended (human_control -> stopped), resume first so it can process the message
164
- if (suspendedFocuses.has(entityId) && team.leadPid) {
189
+ // If the team was SIGSTOP-suspended (human_control -> stop), resume first so
190
+ // it can process the cooperative message before SIGTERM.
191
+ if (suspendedFocuses.has(focusId) && team.leadPid) {
165
192
  try {
166
193
  process.kill(team.leadPid, 'SIGCONT');
167
194
  console.log(`[control-state] Sent SIGCONT before stop for "${team.focusName}" (was suspended)`);
@@ -170,26 +197,121 @@ export function handleStopped(change) {
170
197
  console.debug(`[control-state] SIGCONT before stop failed (process may have exited):`, err.message);
171
198
  }
172
199
  }
173
- // Send a shutdown message via stdin
200
+ // Send the cooperative shutdown message via stdin.
174
201
  if (team.leadStdin) {
175
202
  try {
176
- sendMessage(team.leadStdin, 'Execution has been stopped by the operator. Commit your current work and exit.');
203
+ sendMessage(team.leadStdin, options.message);
177
204
  console.log(`[control-state] Sent stop message to "${team.focusName}"`);
178
205
  }
179
206
  catch (err) {
180
207
  console.warn(`[control-state] Failed to send stop message to "${team.focusName}":`, err.message);
181
208
  }
182
209
  }
183
- // Mark shutdown reason so handleTeamCompletion can set exit_category='user_stopped'
184
- team.shutdownReason = 'user_stopped';
185
- // After a grace period, send SIGTERM via the existing terminateTeam flow
186
- setTimeout(() => {
187
- if (activeTeams.has(entityId)) {
210
+ // Mark the shutdown reason so handleTeamCompletion classifies the exit as a
211
+ // controlled stop and records the matching exit_category (no team_failure).
212
+ team.shutdownReason = options.shutdownReason;
213
+ // After the grace period, SIGTERM via the existing terminateTeam flow. The
214
+ // timer is unref'd: the poll loop keeps the daemon alive, so the timer never
215
+ // needs to on its own (and a leaked timer can't block process/test exit).
216
+ const graceMs = options.graceMs ?? COOPERATIVE_STOP_GRACE_MS;
217
+ const timer = setTimeout(() => {
218
+ if (deps.getActiveTeams().has(focusId)) {
188
219
  console.log(`[control-state] Grace period expired for "${team.focusName}" -- terminating`);
189
- terminateTeam(entityId);
220
+ deps.terminateTeam(focusId, options.shutdownReason);
190
221
  }
191
- }, 10000);
192
- suspendedFocuses.delete(entityId);
222
+ }, graceMs);
223
+ if (typeof timer.unref === 'function')
224
+ timer.unref();
225
+ suspendedFocuses.delete(focusId);
226
+ }
227
+ // ── Disarm reaper: clearing the role (dashboard Stop) stops the team ─────
228
+ /**
229
+ * Focuses with a cooperative stop already in flight (message sent, SIGTERM
230
+ * scheduled). The reaper re-evaluates every poll, so without this a disarmed
231
+ * focus whose grace window spans a poll tick would re-send the stop. Pruned of
232
+ * entries whose team has left activeTeams at the top of each run.
233
+ */
234
+ const pendingDisarmStops = new Set();
235
+ const defaultReapDeps = {
236
+ getActiveTeams,
237
+ getActiveFocuses,
238
+ initiateCooperativeStop,
239
+ };
240
+ /**
241
+ * Stop running teams whose focus has been DISARMED via the dashboard Stop
242
+ * (clearing assigned_agent_role_id). Clearing the role only removes the focus
243
+ * from the spawn set; the in-flight team would otherwise run to natural
244
+ * completion. This reaper brings the role-clear toggle to parity with the
245
+ * cockpit Stop: stop means stop.
246
+ *
247
+ * getActiveFocuses returns ALL status='active' focuses REGARDLESS of role
248
+ * (daemon-focus-handlers handleDaemonGetActiveFocuses), so:
249
+ * - a team whose focus is PRESENT with a null role -> disarmed -> reap it;
250
+ * - PRESENT with a non-null role -> still armed (idle/in-review/paused) -> leave it;
251
+ * - ABSENT -> the focus is no longer status='active' (genuine deactivation),
252
+ * owned by checkForDeactivatedFocuses (which runs earlier in the poll and
253
+ * does a full teardown incl. worktree removal). The reaper deliberately
254
+ * does NOT double-handle that case, and never removes the worktree -- a
255
+ * disarmed focus keeps its worktree so a re-arm can resume.
256
+ *
257
+ * Re-arm within the grace window: the chosen rule is "complete the stop, then
258
+ * allow a fresh spawn". The scheduled SIGTERM still fires (the team exits as a
259
+ * clean operator stop); if the focus has since been re-armed, the next poll's
260
+ * processReadyFocuses spawns a fresh team once the old one is gone. The stop is
261
+ * never cancelled mid-flight, which keeps the path deterministic.
262
+ */
263
+ export async function reapDisarmedTeams(config, deps = defaultReapDeps) {
264
+ const activeTeams = deps.getActiveTeams();
265
+ if (activeTeams.size === 0) {
266
+ pendingDisarmStops.clear();
267
+ return;
268
+ }
269
+ // Prune dedup entries whose team has already left activeTeams (terminated).
270
+ for (const id of pendingDisarmStops) {
271
+ if (!activeTeams.has(id))
272
+ pendingDisarmStops.delete(id);
273
+ }
274
+ let activeFocuses;
275
+ try {
276
+ activeFocuses = await deps.getActiveFocuses(config.organizationId, config.productId);
277
+ }
278
+ catch (err) {
279
+ // If the active-focus read fails, leave teams running rather than reaping
280
+ // on incomplete information.
281
+ console.warn(`[disarm-reaper] Cannot determine armed focuses (skipping reap): ${err.message}`);
282
+ return;
283
+ }
284
+ // focusId -> armed? (status active AND role non-null). Only status='active'
285
+ // focuses are returned, so a present focus with a non-null role is armed.
286
+ const armed = new Map();
287
+ for (const f of activeFocuses) {
288
+ armed.set(f.focus_id, f.assigned_agent_role_id != null && f.status === 'active');
289
+ }
290
+ for (const [focusId, team] of activeTeams) {
291
+ // Multi-product safety: only act on THIS product's teams (the global map
292
+ // holds every product's teams).
293
+ if (team.productId !== config.productId)
294
+ continue;
295
+ // Already stopping (cockpit Stop, deactivation teardown, or a prior reap).
296
+ if (team.phase === 'shutting_down' || team.phase === 'terminated')
297
+ continue;
298
+ if (pendingDisarmStops.has(focusId))
299
+ continue;
300
+ // Absent -> non-active focus -> owned by checkForDeactivatedFocuses.
301
+ if (!armed.has(focusId))
302
+ continue;
303
+ // Still armed (idle-but-armed / in review / paused) -> not a disarm.
304
+ if (armed.get(focusId))
305
+ continue;
306
+ console.log(`[disarm-reaper] Focus "${team.focusName}" disarmed (agent role cleared) -- ` +
307
+ `cooperatively stopping the running team`);
308
+ pendingDisarmStops.add(focusId);
309
+ deps.initiateCooperativeStop(focusId, {
310
+ shutdownReason: 'user_stopped',
311
+ message: 'This focus has been disarmed (its agent role was cleared via the dashboard Stop). ' +
312
+ 'Commit your current work and exit.',
313
+ });
314
+ }
193
315
  }
194
316
  /**
195
317
  * Get the set of suspended focus IDs (for testing).
@@ -203,4 +325,10 @@ export function getSuspendedFocuses() {
203
325
  export function clearSuspendedFocuses() {
204
326
  suspendedFocuses.clear();
205
327
  }
328
+ /**
329
+ * Clear the reaper's in-flight-stop dedup set (for testing).
330
+ */
331
+ export function clearPendingDisarmStops() {
332
+ pendingDisarmStops.clear();
333
+ }
206
334
  //# sourceMappingURL=control-state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"control-state.js","sourceRoot":"","sources":["../src/control-state.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAE5F,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,4EAA4E;AAC5E,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,MAAoB;IACjE,IAAI,OAA6B,CAAC;IAClC,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,wDAAwD,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;QAC/F,OAAO;IACT,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,uEAAuE;QACvE,iFAAiF;QACjF,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;QACrC,KAAK,MAAM,OAAO,IAAI,gBAAgB,EAAE,CAAC;YACvC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC9B,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QACD,OAAO;IACT,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,yFAAyF;QACzF,IAAI,MAAM,CAAC,UAAU,KAAK,OAAO;YAAE,SAAS;QAE5C,IAAI,CAAC;YACH,QAAQ,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC5B,KAAK,eAAe;oBAClB,kBAAkB,CAAC,MAAM,CAAC,CAAC;oBAC3B,MAAM;gBACR,KAAK,UAAU;oBACb,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;oBAC7B,MAAM;gBACR,KAAK,SAAS;oBACZ,aAAa,CAAC,MAAM,CAAC,CAAC;oBACtB,MAAM;gBACR;oBACE,OAAO,CAAC,IAAI,CAAC,0CAA0C,MAAM,CAAC,YAAY,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACzG,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CACX,oCAAoC,MAAM,CAAC,YAAY,QAAQ,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,GAAG,EACrG,GAAa,CAAC,OAAO,CACvB,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IAC3D,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAC5B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,4CAA4C,QAAQ,iCAAiC,CAAC,CAAC;QACnG,OAAO;IACT,CAAC;IAED,yBAAyB;IACzB,IAAI,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QACnC,OAAO;IACT,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,SAAS,gCAAgC,CAAC,CAAC;QAC1F,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACtC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CACT,mCAAmC,IAAI,CAAC,SAAS,WAAW,IAAI,CAAC,OAAO,oBAAoB,CAC7F,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,yCAAyC,IAAI,CAAC,OAAO,SAAS,IAAI,CAAC,SAAS,IAAI,EAC/E,GAAa,CAAC,OAAO,CACvB,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAA0B;IAC7D,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IACrD,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,4CAA4C,QAAQ,wBAAwB,CAAC,CAAC;QAC1F,IAAI,CAAC;YACH,MAAM,sBAAsB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,oEAAoE,QAAQ,GAAG,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;QACxH,CAAC;QACD,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,6BAA6B,IAAI,CAAC,SAAS,oCAAoC,CAAC,CAAC;QAC9F,IAAI,CAAC;YACH,MAAM,sBAAsB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,+DAA+D,IAAI,CAAC,SAAS,IAAI,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;QAC1H,CAAC;QACD,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,+CAA+C;IAC/C,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CACT,iCAAiC,IAAI,CAAC,SAAS,WAAW,IAAI,CAAC,OAAO,mBAAmB,CAC1F,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,yCAAyC,IAAI,CAAC,OAAO,SAAS,IAAI,CAAC,SAAS,IAAI,EAC/E,GAAa,CAAC,OAAO,CACvB,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,IAAI,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,wBAAwB,WAAW,EAAE,CAAC,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,+CAA+C,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,uDAAuD,IAAI,CAAC,SAAS,IAAI,EACxE,GAAa,CAAC,OAAO,CACvB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC;QACH,MAAM,sBAAsB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CACV,+DAA+D,IAAI,CAAC,SAAS,IAAI,EAChF,GAAa,CAAC,OAAO,CACvB,CAAC;IACJ,CAAC;IAED,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAA0B;IACtD,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAC5B,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,4CAA4C,QAAQ,2BAA2B,CAAC,CAAC;QAC7F,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,mGAAmG;IACnG,IAAI,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACnD,IAAI,CAAC;YACH,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACtC,OAAO,CAAC,GAAG,CAAC,iDAAiD,IAAI,CAAC,SAAS,mBAAmB,CAAC,CAAC;QAClG,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,uEAAuE,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;QACjH,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,WAAW,CACT,IAAI,CAAC,SAAS,EACd,gFAAgF,CACjF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,yCAAyC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;QAC1E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CACV,mDAAmD,IAAI,CAAC,SAAS,IAAI,EACpE,GAAa,CAAC,OAAO,CACvB,CAAC;QACJ,CAAC;IACH,CAAC;IAED,oFAAoF;IACpF,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IAErC,yEAAyE;IACzE,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,6CAA6C,IAAI,CAAC,SAAS,kBAAkB,CAAC,CAAC;YAC3F,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,EAAE,KAAK,CAAC,CAAC;IAEV,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB;IACnC,gBAAgB,CAAC,KAAK,EAAE,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"control-state.js","sourceRoot":"","sources":["../src/control-state.ts"],"names":[],"mappings":"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"}