@telora/daemon 0.20.28 → 0.20.53

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 (231) hide show
  1. package/build-info.json +2 -2
  2. package/dist/agent-state.d.ts +4 -6
  3. package/dist/agent-state.d.ts.map +1 -1
  4. package/dist/agent-state.js +4 -10
  5. package/dist/agent-state.js.map +1 -1
  6. package/dist/auto-update.d.ts +87 -0
  7. package/dist/auto-update.d.ts.map +1 -1
  8. package/dist/auto-update.js +142 -8
  9. package/dist/auto-update.js.map +1 -1
  10. package/dist/branch-status.d.ts +25 -3
  11. package/dist/branch-status.d.ts.map +1 -1
  12. package/dist/branch-status.js +130 -59
  13. package/dist/branch-status.js.map +1 -1
  14. package/dist/completion/completion-decision.d.ts +29 -3
  15. package/dist/completion/completion-decision.d.ts.map +1 -1
  16. package/dist/completion/completion-decision.js +15 -3
  17. package/dist/completion/completion-decision.js.map +1 -1
  18. package/dist/completion/event-entry-phases.d.ts +57 -0
  19. package/dist/completion/event-entry-phases.d.ts.map +1 -0
  20. package/dist/completion/event-entry-phases.js +205 -0
  21. package/dist/completion/event-entry-phases.js.map +1 -0
  22. package/dist/completion/event-phases.d.ts +14 -42
  23. package/dist/completion/event-phases.d.ts.map +1 -1
  24. package/dist/completion/event-phases.js +63 -190
  25. package/dist/completion/event-phases.js.map +1 -1
  26. package/dist/completion/event.d.ts +11 -1
  27. package/dist/completion/event.d.ts.map +1 -1
  28. package/dist/completion/event.js +5 -2
  29. package/dist/completion/event.js.map +1 -1
  30. package/dist/completion/index.d.ts +0 -3
  31. package/dist/completion/index.d.ts.map +1 -1
  32. package/dist/completion/index.js +0 -3
  33. package/dist/completion/index.js.map +1 -1
  34. package/dist/completion/review-exit-phase.d.ts +2 -1
  35. package/dist/completion/review-exit-phase.d.ts.map +1 -1
  36. package/dist/completion/review-exit-phase.js +41 -1
  37. package/dist/completion/review-exit-phase.js.map +1 -1
  38. package/dist/completion/status-advance-phase.d.ts +2 -0
  39. package/dist/completion/status-advance-phase.d.ts.map +1 -1
  40. package/dist/completion/status-advance-phase.js +14 -28
  41. package/dist/completion/status-advance-phase.js.map +1 -1
  42. package/dist/completion/team-completion.js +1 -1
  43. package/dist/completion/team-completion.js.map +1 -1
  44. package/dist/completion/terminated-work-reconcile.d.ts.map +1 -1
  45. package/dist/completion/terminated-work-reconcile.js +10 -0
  46. package/dist/completion/terminated-work-reconcile.js.map +1 -1
  47. package/dist/constants.d.ts +0 -8
  48. package/dist/constants.d.ts.map +1 -1
  49. package/dist/constants.js +0 -8
  50. package/dist/constants.js.map +1 -1
  51. package/dist/delivery-close-actions.d.ts +39 -0
  52. package/dist/delivery-close-actions.d.ts.map +1 -0
  53. package/dist/delivery-close-actions.js +53 -0
  54. package/dist/delivery-close-actions.js.map +1 -0
  55. package/dist/delivery-lifecycle.d.ts +11 -0
  56. package/dist/delivery-lifecycle.d.ts.map +1 -1
  57. package/dist/delivery-lifecycle.js +13 -14
  58. package/dist/delivery-lifecycle.js.map +1 -1
  59. package/dist/delivery-reconciler.d.ts +18 -4
  60. package/dist/delivery-reconciler.d.ts.map +1 -1
  61. package/dist/delivery-reconciler.js +18 -4
  62. package/dist/delivery-reconciler.js.map +1 -1
  63. package/dist/directive-executor.d.ts +1 -1
  64. package/dist/directive-executor.js +1 -1
  65. package/dist/discovery-fetch.d.ts +76 -0
  66. package/dist/discovery-fetch.d.ts.map +1 -0
  67. package/dist/discovery-fetch.js +206 -0
  68. package/dist/discovery-fetch.js.map +1 -0
  69. package/dist/discovery-poll.d.ts +1 -51
  70. package/dist/discovery-poll.d.ts.map +1 -1
  71. package/dist/discovery-poll.js +10 -192
  72. package/dist/discovery-poll.js.map +1 -1
  73. package/dist/drain-teardown.d.ts +11 -6
  74. package/dist/drain-teardown.d.ts.map +1 -1
  75. package/dist/drain-teardown.js +3 -2
  76. package/dist/drain-teardown.js.map +1 -1
  77. package/dist/focus-branch-ahead.d.ts +42 -0
  78. package/dist/focus-branch-ahead.d.ts.map +1 -0
  79. package/dist/focus-branch-ahead.js +45 -0
  80. package/dist/focus-branch-ahead.js.map +1 -0
  81. package/dist/focus-engine.d.ts.map +1 -1
  82. package/dist/focus-engine.js +21 -43
  83. package/dist/focus-engine.js.map +1 -1
  84. package/dist/focus-executor.js +2 -2
  85. package/dist/focus-executor.js.map +1 -1
  86. package/dist/focus-lifecycle.d.ts.map +1 -1
  87. package/dist/focus-lifecycle.js +32 -3
  88. package/dist/focus-lifecycle.js.map +1 -1
  89. package/dist/focus-loop-registry.d.ts.map +1 -1
  90. package/dist/focus-loop-registry.js +27 -0
  91. package/dist/focus-loop-registry.js.map +1 -1
  92. package/dist/focus-loop.d.ts +34 -12
  93. package/dist/focus-loop.d.ts.map +1 -1
  94. package/dist/focus-loop.js +78 -15
  95. package/dist/focus-loop.js.map +1 -1
  96. package/dist/focus-merge.d.ts.map +1 -1
  97. package/dist/focus-merge.js +6 -1
  98. package/dist/focus-merge.js.map +1 -1
  99. package/dist/focus-phase.d.ts +18 -3
  100. package/dist/focus-phase.d.ts.map +1 -1
  101. package/dist/focus-phase.js +85 -31
  102. package/dist/focus-phase.js.map +1 -1
  103. package/dist/focus-prompt-builder.d.ts.map +1 -1
  104. package/dist/focus-prompt-builder.js +13 -1
  105. package/dist/focus-prompt-builder.js.map +1 -1
  106. package/dist/focus-provisioning.d.ts.map +1 -1
  107. package/dist/focus-provisioning.js +4 -0
  108. package/dist/focus-provisioning.js.map +1 -1
  109. package/dist/focus-stage-lifecycle/planning-release.d.ts +35 -17
  110. package/dist/focus-stage-lifecycle/planning-release.d.ts.map +1 -1
  111. package/dist/focus-stage-lifecycle/planning-release.js +53 -22
  112. package/dist/focus-stage-lifecycle/planning-release.js.map +1 -1
  113. package/dist/focus-worktree-state.d.ts +17 -6
  114. package/dist/focus-worktree-state.d.ts.map +1 -1
  115. package/dist/focus-worktree-state.js +21 -11
  116. package/dist/focus-worktree-state.js.map +1 -1
  117. package/dist/guard-engine.d.ts +1 -2
  118. package/dist/guard-engine.d.ts.map +1 -1
  119. package/dist/guard-engine.js +1 -2
  120. package/dist/guard-engine.js.map +1 -1
  121. package/dist/health-events.d.ts +10 -0
  122. package/dist/health-events.d.ts.map +1 -0
  123. package/dist/health-events.js +10 -0
  124. package/dist/health-events.js.map +1 -0
  125. package/dist/heartbeat.d.ts.map +1 -1
  126. package/dist/heartbeat.js +98 -21
  127. package/dist/heartbeat.js.map +1 -1
  128. package/dist/host-control/catalog.d.ts.map +1 -1
  129. package/dist/host-control/catalog.js +4 -1
  130. package/dist/host-control/catalog.js.map +1 -1
  131. package/dist/host-control/client.d.ts +3 -4
  132. package/dist/host-control/client.d.ts.map +1 -1
  133. package/dist/host-control/client.js +4 -5
  134. package/dist/host-control/client.js.map +1 -1
  135. package/dist/listener-auto-advance.d.ts +2 -1
  136. package/dist/listener-auto-advance.d.ts.map +1 -1
  137. package/dist/listener-auto-advance.js +36 -40
  138. package/dist/listener-auto-advance.js.map +1 -1
  139. package/dist/listener.d.ts +2 -7
  140. package/dist/listener.d.ts.map +1 -1
  141. package/dist/listener.js +11 -9
  142. package/dist/listener.js.map +1 -1
  143. package/dist/operator-hold.d.ts +66 -0
  144. package/dist/operator-hold.d.ts.map +1 -0
  145. package/dist/operator-hold.js +99 -0
  146. package/dist/operator-hold.js.map +1 -0
  147. package/dist/poll-trigger.d.ts +28 -0
  148. package/dist/poll-trigger.d.ts.map +1 -0
  149. package/dist/poll-trigger.js +31 -0
  150. package/dist/poll-trigger.js.map +1 -0
  151. package/dist/prompt-listing.d.ts +25 -0
  152. package/dist/prompt-listing.d.ts.map +1 -1
  153. package/dist/prompt-listing.js +67 -0
  154. package/dist/prompt-listing.js.map +1 -1
  155. package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
  156. package/dist/prompt-sections/execution-sections.js +24 -0
  157. package/dist/prompt-sections/execution-sections.js.map +1 -1
  158. package/dist/queries/context-lock-queries.d.ts.map +1 -1
  159. package/dist/queries/context-lock-queries.js +4 -1
  160. package/dist/queries/context-lock-queries.js.map +1 -1
  161. package/dist/queries/deliveries.d.ts +17 -0
  162. package/dist/queries/deliveries.d.ts.map +1 -1
  163. package/dist/queries/deliveries.js.map +1 -1
  164. package/dist/queries/issues.d.ts +98 -0
  165. package/dist/queries/issues.d.ts.map +1 -1
  166. package/dist/queries/issues.js +135 -0
  167. package/dist/queries/issues.js.map +1 -1
  168. package/dist/queries/schemas.d.ts +3 -3
  169. package/dist/security-scan-engine.d.ts +9 -1
  170. package/dist/security-scan-engine.d.ts.map +1 -1
  171. package/dist/security-scan-engine.js +25 -2
  172. package/dist/security-scan-engine.js.map +1 -1
  173. package/dist/spawn/worktree-session.d.ts.map +1 -1
  174. package/dist/spawn/worktree-session.js +2 -0
  175. package/dist/spawn/worktree-session.js.map +1 -1
  176. package/dist/spawner/index.d.ts +7 -9
  177. package/dist/spawner/index.d.ts.map +1 -1
  178. package/dist/spawner/index.js +13 -11
  179. package/dist/spawner/index.js.map +1 -1
  180. package/dist/spawner/lifecycle.d.ts +1 -18
  181. package/dist/spawner/lifecycle.d.ts.map +1 -1
  182. package/dist/spawner/lifecycle.js +1 -54
  183. package/dist/spawner/lifecycle.js.map +1 -1
  184. package/dist/spawner/liveness.d.ts +5 -14
  185. package/dist/spawner/liveness.d.ts.map +1 -1
  186. package/dist/spawner/liveness.js +5 -67
  187. package/dist/spawner/liveness.js.map +1 -1
  188. package/dist/spawner/state.d.ts +8 -20
  189. package/dist/spawner/state.d.ts.map +1 -1
  190. package/dist/spawner/state.js +8 -34
  191. package/dist/spawner/state.js.map +1 -1
  192. package/dist/staleness-sensor.d.ts +153 -0
  193. package/dist/staleness-sensor.d.ts.map +1 -0
  194. package/dist/staleness-sensor.js +308 -0
  195. package/dist/staleness-sensor.js.map +1 -0
  196. package/dist/types/focus.d.ts +9 -0
  197. package/dist/types/focus.d.ts.map +1 -1
  198. package/dist/types/session.d.ts +0 -44
  199. package/dist/types/session.d.ts.map +1 -1
  200. package/dist/unified-shell.d.ts.map +1 -1
  201. package/dist/unified-shell.js +19 -0
  202. package/dist/unified-shell.js.map +1 -1
  203. package/dist/verification-engine.d.ts +6 -4
  204. package/dist/verification-engine.d.ts.map +1 -1
  205. package/dist/verification-engine.js +9 -43
  206. package/dist/verification-engine.js.map +1 -1
  207. package/dist/verification-feedback.d.ts +42 -0
  208. package/dist/verification-feedback.d.ts.map +1 -1
  209. package/dist/verification-feedback.js +93 -0
  210. package/dist/verification-feedback.js.map +1 -1
  211. package/dist/version-check.d.ts +6 -0
  212. package/dist/version-check.d.ts.map +1 -1
  213. package/dist/version-check.js +1 -1
  214. package/dist/version-check.js.map +1 -1
  215. package/package.json +2 -3
  216. package/dist/completion/agent-completion.d.ts +0 -48
  217. package/dist/completion/agent-completion.d.ts.map +0 -1
  218. package/dist/completion/agent-completion.js +0 -205
  219. package/dist/completion/agent-completion.js.map +0 -1
  220. package/dist/delivery-guards.d.ts +0 -41
  221. package/dist/delivery-guards.d.ts.map +0 -1
  222. package/dist/delivery-guards.js +0 -200
  223. package/dist/delivery-guards.js.map +0 -1
  224. package/dist/spawner/spawn-team.d.ts +0 -20
  225. package/dist/spawner/spawn-team.d.ts.map +0 -1
  226. package/dist/spawner/spawn-team.js +0 -19
  227. package/dist/spawner/spawn-team.js.map +0 -1
  228. package/dist/spawner/timeout.d.ts +0 -32
  229. package/dist/spawner/timeout.d.ts.map +0 -1
  230. package/dist/spawner/timeout.js +0 -126
  231. package/dist/spawner/timeout.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telora/daemon",
3
- "version": "0.20.28",
3
+ "version": "0.20.53",
4
4
  "description": "Agent orchestration daemon for Telora - spawns and manages Claude Code instances",
5
5
  "type": "module",
6
6
  "bin": {
@@ -37,8 +37,7 @@
37
37
  },
38
38
  "//testRunner": "Uses Node.js built-in test runner (node:test) via tsx for TypeScript support. The root package uses Vitest; this is a deliberate choice for the daemon package to avoid framework dependencies. See src/__tests__/ for test files.",
39
39
  "dependencies": {
40
- "@telora/daemon": "^0.20.0",
41
- "@telora/daemon-core": "^0.2.72",
40
+ "@telora/daemon-core": "^0.2.73",
42
41
  "@telora/mcp-products": "^0.22.104",
43
42
  "commander": "^14.0.3",
44
43
  "yaml": "^2.4.0",
@@ -1,48 +0,0 @@
1
- /**
2
- * Completion handler - processes agent exit events.
3
- *
4
- * Handles the post-completion lifecycle for the legacy per-delivery model:
5
- * - Querying open issues and session counts
6
- * - Workflow-driven transition determination
7
- * - Guard evaluation at stage transitions
8
- * - Merge operations (integration branch, CI/CD)
9
- * - Delivery status updates and session finalization
10
- * - Worktree cleanup and re-poll triggering
11
- *
12
- * For the focus team model, see delivery-lifecycle.ts which provides
13
- * reusable functions (evaluateGuardsForDeliveryTransition, mergeDeliveryBranch,
14
- * advanceDeliveryStage) that the team lead calls directly.
15
- */
16
- import type { WriteStream } from 'node:fs';
17
- import type { DaemonConfig, DeliveryContext, RunningAgent, Workflow } from '../types.js';
18
- import type { CompletionDetector } from './detector.js';
19
- /**
20
- * Parameters passed to the completion handler from the spawner's closure context.
21
- */
22
- export interface CompletionHandlerParams {
23
- config: DaemonConfig;
24
- context: DeliveryContext;
25
- runningAgent: RunningAgent;
26
- workflow: Workflow;
27
- branchName: string;
28
- currentStageId: string | undefined;
29
- timedOut: boolean;
30
- timeoutMs: number;
31
- sessionId: string;
32
- deliveryId: string;
33
- completionDetector: CompletionDetector;
34
- stdoutLogStream: WriteStream;
35
- stderrStream: WriteStream;
36
- jsonlStream: WriteStream;
37
- /** Mutable reference to the running agents map for cleanup. */
38
- runningAgents: Map<string, RunningAgent>;
39
- }
40
- /**
41
- * Handle agent process exit.
42
- *
43
- * This is the main post-completion handler that runs when a Claude Code agent
44
- * process exits. It determines the workflow transition, evaluates guards,
45
- * performs merge operations, and updates delivery/session status.
46
- */
47
- export declare function handleAgentCompletion(code: number | null, signal: string | null, params: CompletionHandlerParams): Promise<void>;
48
- //# sourceMappingURL=agent-completion.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-completion.d.ts","sourceRoot":"","sources":["../../src/completion/agent-completion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC3C,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,QAAQ,EAAqC,MAAM,aAAa,CAAC;AAQ5H,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAQxD;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,YAAY,CAAC;IACrB,OAAO,EAAE,eAAe,CAAC;IACzB,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,WAAW,CAAC;IAC7B,YAAY,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;IACzB,+DAA+D;IAC/D,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,MAAM,EAAE,MAAM,GAAG,IAAI,EACrB,MAAM,EAAE,uBAAuB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAqMf"}
@@ -1,205 +0,0 @@
1
- /**
2
- * Completion handler - processes agent exit events.
3
- *
4
- * Handles the post-completion lifecycle for the legacy per-delivery model:
5
- * - Querying open issues and session counts
6
- * - Workflow-driven transition determination
7
- * - Guard evaluation at stage transitions
8
- * - Merge operations (integration branch, CI/CD)
9
- * - Delivery status updates and session finalization
10
- * - Worktree cleanup and re-poll triggering
11
- *
12
- * For the focus team model, see delivery-lifecycle.ts which provides
13
- * reusable functions (evaluateGuardsForDeliveryTransition, mergeDeliveryBranch,
14
- * advanceDeliveryStage) that the team lead calls directly.
15
- */
16
- import { updateSession, updateDeliveryStatus, getDeliveryIssues, getDeliverySessionCount, reportGitState } from '../supabase.js';
17
- import { removeWorktree } from '../git.js';
18
- import { getStageByName, determineTransition } from '../workflow-engine.js';
19
- import { evaluateGuardsForDeliveryTransition, mergeDeliveryBranch } from '../delivery-lifecycle.js';
20
- import { recordSessionCompleted, recordActivity } from '../agent-state.js';
21
- import { triggerCheck } from '../listener.js';
22
- import { createLogger } from '../log.js';
23
- const log = createLogger({ module: 'reportGitState' });
24
- const MAX_RETRY_ATTEMPTS = 5;
25
- /**
26
- * Handle agent process exit.
27
- *
28
- * This is the main post-completion handler that runs when a Claude Code agent
29
- * process exits. It determines the workflow transition, evaluates guards,
30
- * performs merge operations, and updates delivery/session status.
31
- */
32
- export async function handleAgentCompletion(code, signal, params) {
33
- const { config, context, runningAgent, workflow, branchName, currentStageId, timedOut, timeoutMs, sessionId, deliveryId, completionDetector, stdoutLogStream, stderrStream, jsonlStream, runningAgents, } = params;
34
- log.info(`Agent for "${context.delivery.name}" exited with code ${code}, signal ${signal}`);
35
- recordActivity();
36
- // Clear timeout timers
37
- if (runningAgent.warningTimer)
38
- clearTimeout(runningAgent.warningTimer);
39
- if (runningAgent.timeoutTimer)
40
- clearTimeout(runningAgent.timeoutTimer);
41
- // Clean up completion detector
42
- completionDetector?.destroy();
43
- runningAgents.delete(sessionId);
44
- // Close log streams
45
- stdoutLogStream.end();
46
- stderrStream.end();
47
- jsonlStream.end();
48
- // Report worktree_complete now that the agent has finished (success or failure)
49
- reportGitState(deliveryId, 'worktree_complete').catch(err => log.warn(`worktree_complete failed:`, err.message));
50
- // Query issues and session count for transition decision
51
- let openIssueCount = 0;
52
- let attemptCount = 0;
53
- if (code === 0) {
54
- try {
55
- const [issues, count] = await Promise.all([
56
- getDeliveryIssues(deliveryId),
57
- getDeliverySessionCount(deliveryId),
58
- ]);
59
- openIssueCount = issues.filter(i => i.status !== 'Done').length;
60
- attemptCount = count;
61
- }
62
- catch (err) {
63
- log.warn(`Failed to query issues/sessions for "${context.delivery.name}":`, err.message);
64
- // Fall through with 0 open issues (treat as all done) to avoid blocking on API errors
65
- }
66
- }
67
- else {
68
- try {
69
- attemptCount = await getDeliverySessionCount(deliveryId);
70
- }
71
- catch (err) {
72
- log.warn(`Failed to query session count for "${context.delivery.name}":`, err.message);
73
- }
74
- }
75
- // Build failure reason for non-zero exits
76
- const failureReason = code !== 0
77
- ? (timedOut
78
- ? `Timeout exceeded (${timeoutMs / 60000} min limit)`
79
- : signal
80
- ? `Terminated by signal: ${signal}`
81
- : `Exit code: ${code}`)
82
- : undefined;
83
- // Determine transition via workflow engine
84
- const transition = currentStageId
85
- ? determineTransition({
86
- workflow,
87
- currentStageId,
88
- exitCode: code ?? 1,
89
- openIssueCount,
90
- attemptCount,
91
- maxRetries: MAX_RETRY_ATTEMPTS,
92
- failureReason,
93
- })
94
- : {
95
- // No workflow stage -- legacy fallback
96
- nextStage: null,
97
- workflowTransition: null,
98
- shouldMerge: code === 0 && openIssueCount === 0,
99
- shouldTriggerRepoll: code === 0 && openIssueCount === 0,
100
- sessionStatus: (code === 0 && openIssueCount === 0 ? 'completed' : 'failed'),
101
- exitReason: failureReason ?? (openIssueCount === 0 ? 'Completed.' : `${openIssueCount} open issues.`),
102
- };
103
- let { exitReason } = transition;
104
- let { shouldMerge, shouldTriggerRepoll, sessionStatus } = transition;
105
- // -- Guard evaluation at stage transitions --
106
- const evalResult = await evaluateGuardsForDeliveryTransition({
107
- deliveryId,
108
- organizationId: context.delivery.organization_id,
109
- workflowTransition: transition.workflowTransition ?? null,
110
- exitCode: code ?? 1,
111
- policyFailureMode: config.policyFailureMode,
112
- deliveryName: context.delivery.name,
113
- sessionId,
114
- });
115
- const evalBlocked = evalResult.blocked;
116
- if (evalBlocked) {
117
- shouldMerge = evalResult.shouldMerge;
118
- shouldTriggerRepoll = evalResult.shouldTriggerRepoll;
119
- sessionStatus = evalResult.sessionStatus;
120
- exitReason = evalResult.exitReason;
121
- }
122
- else if (evalResult.exitReason && evalResult.exitReason !== exitReason) {
123
- exitReason += ` ${evalResult.exitReason}`;
124
- }
125
- // Determine delivery status from transition
126
- let deliveryStatus;
127
- let deliveryStageId;
128
- if (evalBlocked) {
129
- // Guard already set delivery to 'paused' -- don't overwrite
130
- deliveryStatus = 'paused';
131
- deliveryStageId = currentStageId;
132
- }
133
- else if (transition.nextStage) {
134
- deliveryStatus = transition.nextStage.name;
135
- deliveryStageId = transition.nextStage.id;
136
- }
137
- else {
138
- // Staying on current stage means re-queuing
139
- const queuedStage = getStageByName(workflow, 'queued');
140
- deliveryStatus = queuedStage?.name ?? 'queued';
141
- deliveryStageId = queuedStage?.id;
142
- }
143
- if (exitReason !== transition.exitReason) {
144
- // exitReason was modified -- log the warning
145
- log.warn(`Delivery "${context.delivery.name}": ${exitReason}`);
146
- }
147
- // Merge branch if warranted
148
- let mergeOutcome = { mergeSucceeded: false, exitReason };
149
- if (shouldMerge) {
150
- mergeOutcome = await mergeDeliveryBranch({
151
- config,
152
- branchName,
153
- deliveryId,
154
- deliveryName: context.delivery.name,
155
- organizationId: context.delivery.organization_id,
156
- sessionId,
157
- workflow,
158
- });
159
- exitReason = mergeOutcome.exitReason;
160
- }
161
- if (mergeOutcome.overrideDeliveryStatus) {
162
- deliveryStatus = mergeOutcome.overrideDeliveryStatus;
163
- deliveryStageId = mergeOutcome.overrideDeliveryStageId;
164
- }
165
- // Update delivery status with workflow stage
166
- try {
167
- await updateDeliveryStatus(deliveryId, deliveryStatus, deliveryStageId);
168
- log.info(`Delivery "${context.delivery.name}" set to ${deliveryStatus}`);
169
- }
170
- catch (err) {
171
- log.warn(`Failed to set delivery "${context.delivery.name}" to ${deliveryStatus}:`, err.message);
172
- }
173
- // Clean up worktree (branch is preserved for PR/review)
174
- // Safety guards will refuse to delete if uncommitted changes or unmerged commits exist
175
- removeWorktree(config.repoPath, runningAgent.worktreePath, {
176
- branchName,
177
- integrationBranch: config.integrationBranch,
178
- deliveryName: context.delivery.name,
179
- mergeSucceeded: mergeOutcome.mergeSucceeded,
180
- });
181
- // Report worktree_cleaned if merge succeeded (worktree was actually removed)
182
- if (mergeOutcome.mergeSucceeded) {
183
- reportGitState(deliveryId, 'worktree_cleaned').catch(err => log.warn(`worktree_cleaned failed:`, err.message));
184
- }
185
- await updateSession(sessionId, {
186
- status: sessionStatus,
187
- exit_reason: exitReason,
188
- ...(sessionStatus === 'failed' && {
189
- exit_category: timedOut ? 'timeout' : 'error',
190
- }),
191
- ended_at: new Date().toISOString(),
192
- });
193
- // Record session completion for heartbeat counters
194
- recordSessionCompleted(0, 0); // Token/cost tracking can be enriched later
195
- // Trigger re-poll to pick up next delivery in the focus's priority queue
196
- if (shouldTriggerRepoll) {
197
- log.info(`Delivery "${context.delivery.name}" completed, checking for next delivery in focus...`);
198
- triggerCheck();
199
- }
200
- }
201
- // Note: MergeOutcome type and merge functions are now in delivery-lifecycle.ts.
202
- // The handleMergeIfNeeded and handleCiMerge functions have been extracted to
203
- // mergeDeliveryBranch() in delivery-lifecycle.ts for reuse by both the
204
- // legacy per-delivery handler and the focus team lead.
205
- //# sourceMappingURL=agent-completion.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-completion.js","sourceRoot":"","sources":["../../src/completion/agent-completion.ts"],"names":[],"mappings":"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"}
@@ -1,41 +0,0 @@
1
- /**
2
- * Guard evaluation for delivery stage transitions.
3
- *
4
- * Core guard evaluation logic, failure mode resolution, fail-closed
5
- * handling, and audit trail recording.
6
- */
7
- import type { PolicyFailureMode } from './types.js';
8
- import { GuardEvaluationError } from './guard-engine.js';
9
- import type { GuardEvalOutcome, GuardEvalParams } from './delivery-lifecycle.js';
10
- /**
11
- * Evaluate guards at a stage transition for a delivery.
12
- *
13
- * This is the core guard evaluation logic extracted from completion-handler.ts.
14
- * Can be called by:
15
- * - The per-delivery completion handler (legacy)
16
- * - The focus team lead (after detecting delivery issue completion)
17
- */
18
- export declare function evaluateGuardsForDeliveryTransition(params: GuardEvalParams): Promise<GuardEvalOutcome>;
19
- /**
20
- * Resolve the effective failure mode for a guard evaluation error.
21
- */
22
- export declare function resolveGuardFailureMode(daemonMode: PolicyFailureMode, guardError: GuardEvaluationError | null): PolicyFailureMode;
23
- interface GuardFailClosedParams {
24
- err: Error;
25
- guardError: GuardEvaluationError | null;
26
- deliveryId: string;
27
- deliveryName: string;
28
- organizationId: string;
29
- sessionId: string | null;
30
- transitionId: string;
31
- }
32
- /**
33
- * Handle fail-closed for guard evaluation errors.
34
- */
35
- export declare function handleGuardFailClosed(params: GuardFailClosedParams): Promise<GuardEvalOutcome>;
36
- /**
37
- * Record guard evaluation errors in the audit trail (best-effort).
38
- */
39
- export declare function recordGuardEvaluationError(err: Error, guardError: GuardEvaluationError | null, deliveryId: string, organizationId: string, transitionId: string, effectiveMode: PolicyFailureMode): Promise<void>;
40
- export {};
41
- //# sourceMappingURL=delivery-guards.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delivery-guards.d.ts","sourceRoot":"","sources":["../src/delivery-guards.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEpD,OAAO,EAA+C,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEtG,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAQjF;;;;;;;GAOG;AACH,wBAAsB,mCAAmC,CACvD,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAoH3B;AAID;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,iBAAiB,EAC7B,UAAU,EAAE,oBAAoB,GAAG,IAAI,GACtC,iBAAiB,CAQnB;AAED,UAAU,qBAAqB;IAC7B,GAAG,EAAE,KAAK,CAAC;IACX,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAAC,gBAAgB,CAAC,CAyD3B;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,KAAK,EACV,UAAU,EAAE,oBAAoB,GAAG,IAAI,EACvC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,iBAAiB,GAC/B,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
@@ -1,200 +0,0 @@
1
- /**
2
- * Guard evaluation for delivery stage transitions.
3
- *
4
- * Core guard evaluation logic, failure mode resolution, fail-closed
5
- * handling, and audit trail recording.
6
- */
7
- import { updateDeliveryStatus, createEscalation, createTransitionEvaluation } from './supabase.js';
8
- import { evaluateGuardsAtTransition, executeTriggers, GuardEvaluationError } from './guard-engine.js';
9
- import { withRetry, ESCALATION_REASONS, ESCALATION_DISPOSITIONS } from '@telora/daemon-core';
10
- import { createLogger } from './log.js';
11
- const log = createLogger({ module: 'guard' });
12
- // ── Guard evaluation (unified workflow system) ──────────────────────
13
- /**
14
- * Evaluate guards at a stage transition for a delivery.
15
- *
16
- * This is the core guard evaluation logic extracted from completion-handler.ts.
17
- * Can be called by:
18
- * - The per-delivery completion handler (legacy)
19
- * - The focus team lead (after detecting delivery issue completion)
20
- */
21
- export async function evaluateGuardsForDeliveryTransition(params) {
22
- const { deliveryId, organizationId, workflowTransition, exitCode, policyFailureMode, deliveryName, sessionId, } = params;
23
- const baseOutcome = {
24
- blocked: false,
25
- shouldMerge: false,
26
- shouldTriggerRepoll: false,
27
- sessionStatus: 'completed',
28
- exitReason: '',
29
- };
30
- if (!workflowTransition) {
31
- return baseOutcome;
32
- }
33
- try {
34
- const guardResult = await evaluateGuardsAtTransition(deliveryId, organizationId, workflowTransition.id, exitCode);
35
- // Log warnings (soft enforcement failures)
36
- for (const warning of guardResult.warnings) {
37
- log.warn(`[guard] Soft warning on "${deliveryName}": ` +
38
- `guard "${warning.guard_name}" conditions not met`);
39
- }
40
- if (!guardResult.should_proceed) {
41
- // Hard guard blocked the transition
42
- log.info(`[guard] Transition blocked for "${deliveryName}": ` +
43
- `${guardResult.blocks.length} hard guard(s) failed`);
44
- // Execute blocking triggers
45
- const triggerResult = await executeTriggers(deliveryId, organizationId, workflowTransition.id, guardResult.triggers_to_execute);
46
- let exitReason = `Guard blocked: ${guardResult.blocks.map(b => b.guard_name).join(', ')}.`;
47
- if (triggerResult.spawnedSessionIds.length > 0) {
48
- exitReason += ` Spawned ${triggerResult.spawnedSessionIds.length} guard agent(s).`;
49
- }
50
- return {
51
- blocked: true,
52
- shouldMerge: false,
53
- shouldTriggerRepoll: false,
54
- sessionStatus: 'completed',
55
- exitReason,
56
- };
57
- }
58
- // All guards passed or only soft warnings -- execute pass/enter triggers
59
- if (guardResult.triggers_to_execute.length > 0) {
60
- await executeTriggers(deliveryId, organizationId, workflowTransition.id, guardResult.triggers_to_execute);
61
- }
62
- }
63
- catch (err) {
64
- const guardError = err instanceof GuardEvaluationError ? err : null;
65
- const effectiveMode = resolveGuardFailureMode(policyFailureMode, guardError);
66
- // Record evaluation error in audit trail
67
- await recordGuardEvaluationError(err, guardError, deliveryId, organizationId, workflowTransition.id, effectiveMode);
68
- if (effectiveMode === 'fail-closed') {
69
- return await handleGuardFailClosed({
70
- err: err,
71
- guardError,
72
- deliveryId,
73
- deliveryName,
74
- organizationId,
75
- sessionId,
76
- transitionId: workflowTransition.id,
77
- });
78
- }
79
- // Fail-open: log and proceed
80
- log.error(`[guard] GUARD EVALUATION FAILED for "${deliveryName}": ` +
81
- `${err.message}. Proceeding without guard checks (fail-open).`);
82
- return {
83
- ...baseOutcome,
84
- exitReason: `Warning: guard evaluation skipped due to error.`,
85
- };
86
- }
87
- return baseOutcome;
88
- }
89
- // ── Guard failure helpers ───────────────────────────────────────────
90
- /**
91
- * Resolve the effective failure mode for a guard evaluation error.
92
- */
93
- export function resolveGuardFailureMode(daemonMode, guardError) {
94
- if (guardError?.hasHardEnforcementGuards) {
95
- return 'fail-closed';
96
- }
97
- if (guardError?.fetchedGuards !== null && guardError?.fetchedGuards !== undefined) {
98
- return 'fail-open';
99
- }
100
- return daemonMode;
101
- }
102
- /**
103
- * Handle fail-closed for guard evaluation errors.
104
- */
105
- export async function handleGuardFailClosed(params) {
106
- const { err, guardError, deliveryId, deliveryName, organizationId, sessionId, transitionId } = params;
107
- const guardNames = guardError?.guardNames ?? [];
108
- const guardInfo = guardNames.length > 0
109
- ? ` Guards: ${guardNames.join(', ')}.`
110
- : '';
111
- log.error(`[guard] GUARD EVALUATION FAILED for "${deliveryName}": ` +
112
- `${err.message}. Transition blocked per fail-closed configuration.${guardInfo}`);
113
- const exitReason = `Guard evaluation failed, transition blocked per fail-closed configuration.${guardInfo}`;
114
- try {
115
- await updateDeliveryStatus(deliveryId, 'paused');
116
- }
117
- catch (statusErr) {
118
- log.error(`Failed to pause delivery "${deliveryName}":`, statusErr.message);
119
- }
120
- try {
121
- await withRetry(() => createEscalation({
122
- organizationId,
123
- sessionId: sessionId ?? '',
124
- issueId: null,
125
- reasonType: ESCALATION_REASONS.ERROR_ENCOUNTERED,
126
- // Operator triage: investigate the fail-closed guard error.
127
- disposition: ESCALATION_DISPOSITIONS.NEEDS_OPERATOR,
128
- anchor: { deliveryId },
129
- description: `Guard evaluation failed (fail-closed). Transition blocked.\n\n` +
130
- `**Delivery:** ${deliveryName}\n` +
131
- `**Transition:** ${transitionId}\n` +
132
- `**Error:** ${err.message}\n` +
133
- (guardNames.length > 0 ? `**Affected guards:** ${guardNames.join(', ')}\n` : '') +
134
- `\nThe delivery has been paused. Review the error and re-queue when resolved.`,
135
- whatWasTried: `Guard evaluation at stage transition failed after retries. ` +
136
- `Fail-closed mode is active${guardError?.hasHardEnforcementGuards ? ' (hard enforcement guards detected)' : ''}.`,
137
- helpNeeded: `Investigate the guard evaluation failure, resolve the underlying issue, then re-queue the delivery.`,
138
- }), { maxAttempts: 3, label: 'escalation-guard-fail-closed' });
139
- log.info(`Created escalation for guard evaluation failure (fail-closed)`);
140
- }
141
- catch (escErr) {
142
- log.error(`CRITICAL: Failed to create escalation for guard fail-closed after retries: ${escErr.message}. ` +
143
- `Delivery: "${deliveryName}"`);
144
- }
145
- return {
146
- blocked: true,
147
- shouldMerge: false,
148
- shouldTriggerRepoll: false,
149
- sessionStatus: 'completed',
150
- exitReason,
151
- };
152
- }
153
- /**
154
- * Record guard evaluation errors in the audit trail (best-effort).
155
- */
156
- export async function recordGuardEvaluationError(err, guardError, deliveryId, organizationId, transitionId, effectiveMode) {
157
- const errorDetails = {
158
- error: err.message,
159
- failure_mode: effectiveMode,
160
- };
161
- if (guardError?.fetchedGuards && guardError.fetchedGuards.length > 0) {
162
- for (const guard of guardError.fetchedGuards) {
163
- try {
164
- await createTransitionEvaluation({
165
- organization_id: organizationId,
166
- entity_type: 'delivery',
167
- entity_id: deliveryId,
168
- transition_id: transitionId,
169
- guard_id: guard.id,
170
- result: 'error',
171
- blocked: effectiveMode === 'fail-closed',
172
- enforcement_level: guard.enforcement,
173
- evaluation_details: errorDetails,
174
- });
175
- }
176
- catch (auditErr) {
177
- log.warn(`[guard] Failed to record evaluation error for "${guard.name}":`, auditErr.message);
178
- }
179
- }
180
- }
181
- else {
182
- try {
183
- await createTransitionEvaluation({
184
- organization_id: organizationId,
185
- entity_type: 'delivery',
186
- entity_id: deliveryId,
187
- transition_id: transitionId,
188
- guard_id: null,
189
- result: 'error',
190
- blocked: effectiveMode === 'fail-closed',
191
- enforcement_level: null,
192
- evaluation_details: errorDetails,
193
- });
194
- }
195
- catch (auditErr) {
196
- log.warn(`Failed to record evaluation error in audit trail:`, auditErr.message);
197
- }
198
- }
199
- }
200
- //# sourceMappingURL=delivery-guards.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delivery-guards.js","sourceRoot":"","sources":["../src/delivery-guards.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- /**
2
- * DEPRECATED SHIM -- the real spawn implementation lives in focus-executor.ts.
3
- *
4
- * This file held a 612-line decomposed near-duplicate of focus-executor's
5
- * spawnFocusTeam. The two copies had to be kept in sync by hand, and the
6
- * duplicate (reachable only via the dead session-lifecycle retry loop)
7
- * silently drifted: it resolved its resume-failure respawn and its resource
8
- * governor from module-local bindings nothing initialized. The Daemon
9
- * Orchestration Decomposition focus (injection #12) unified the paths: ONE
10
- * spawn implementation -- focus-executor.spawnFocusTeam -- serves all callers
11
- * (the listener poll loop, directive spawn mode via the pending-directive
12
- * queue, and the resume-failure retry injected into
13
- * spawner/helpers.handleTeamProcessClose).
14
- *
15
- * Kept as a re-export shim so the spawner barrel (index.ts) and any direct
16
- * importers keep resolving the SAME live symbols. Do not add logic here.
17
- */
18
- export { spawnFocusTeam, generateFocusBranchName, buildAgentArgs, initGovernor, getGovernor, type SpawnFocusTeamParams, } from '../focus-executor.js';
19
- export type { LogStreams } from '../types.js';
20
- //# sourceMappingURL=spawn-team.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spawn-team.d.ts","sourceRoot":"","sources":["../../src/spawner/spawn-team.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,YAAY,EACZ,WAAW,EACX,KAAK,oBAAoB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
@@ -1,19 +0,0 @@
1
- /**
2
- * DEPRECATED SHIM -- the real spawn implementation lives in focus-executor.ts.
3
- *
4
- * This file held a 612-line decomposed near-duplicate of focus-executor's
5
- * spawnFocusTeam. The two copies had to be kept in sync by hand, and the
6
- * duplicate (reachable only via the dead session-lifecycle retry loop)
7
- * silently drifted: it resolved its resume-failure respawn and its resource
8
- * governor from module-local bindings nothing initialized. The Daemon
9
- * Orchestration Decomposition focus (injection #12) unified the paths: ONE
10
- * spawn implementation -- focus-executor.spawnFocusTeam -- serves all callers
11
- * (the listener poll loop, directive spawn mode via the pending-directive
12
- * queue, and the resume-failure retry injected into
13
- * spawner/helpers.handleTeamProcessClose).
14
- *
15
- * Kept as a re-export shim so the spawner barrel (index.ts) and any direct
16
- * importers keep resolving the SAME live symbols. Do not add logic here.
17
- */
18
- export { spawnFocusTeam, generateFocusBranchName, buildAgentArgs, initGovernor, getGovernor, } from '../focus-executor.js';
19
- //# sourceMappingURL=spawn-team.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spawn-team.js","sourceRoot":"","sources":["../../src/spawner/spawn-team.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,YAAY,EACZ,WAAW,GAEZ,MAAM,sBAAsB,CAAC"}
@@ -1,32 +0,0 @@
1
- /**
2
- * Timeout enforcement and graceful shutdown for agent sessions.
3
- *
4
- * Handles per-agent timeout warnings, escalating shutdown sequences
5
- * (stdin close -> SIGTERM -> SIGKILL), and graceful completion shutdown.
6
- */
7
- import type { Writable } from 'node:stream';
8
- import type { DaemonConfig, RunningAgent } from '../types.js';
9
- /**
10
- * Safely send a signal to a process, ignoring errors if the process has already exited.
11
- */
12
- export declare function safeSendSignal(pid: number, signal: NodeJS.Signals): void;
13
- /**
14
- * Safely close a writable stdin stream, ignoring errors if already closed.
15
- */
16
- export declare function safeCloseStdin(stdin: Writable): void;
17
- /**
18
- * Set up per-agent timeout enforcement with warning at 80% and escalating shutdown.
19
- *
20
- * Returns a `timedOut` accessor function (closure over mutable state).
21
- */
22
- export declare function setupTimeoutEnforcement(config: DaemonConfig, runningAgent: RunningAgent, deliveryName: string, sessionId: string, runningAgents: Map<string, RunningAgent>): {
23
- getTimedOut: () => boolean;
24
- };
25
- /**
26
- * Initiate graceful shutdown for an agent session.
27
- *
28
- * Sends a wrap-up message via stdin, waits for the process to exit,
29
- * and escalates to SIGTERM/SIGKILL if needed.
30
- */
31
- export declare function initiateGracefulShutdown(agent: RunningAgent, deliveryName: string, runningAgents: Map<string, RunningAgent>): void;
32
- //# sourceMappingURL=timeout.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"timeout.d.ts","sourceRoot":"","sources":["../../src/spawner/timeout.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAO9D;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAMxE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI,CAMpD;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACvC;IAAE,WAAW,EAAE,MAAM,OAAO,CAAA;CAAE,CAuChC;AA8BD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,MAAM,EACpB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GACvC,IAAI,CAuCN"}