@telora/daemon 0.15.3 → 0.15.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/build-info.json +2 -2
  2. package/dist/directive-executor.d.ts +18 -3
  3. package/dist/directive-executor.d.ts.map +1 -1
  4. package/dist/directive-executor.js +45 -4
  5. package/dist/directive-executor.js.map +1 -1
  6. package/dist/focus-completion.js +12 -12
  7. package/dist/focus-completion.js.map +1 -1
  8. package/dist/focus-executor.d.ts.map +1 -1
  9. package/dist/focus-executor.js +30 -13
  10. package/dist/focus-executor.js.map +1 -1
  11. package/dist/focus-phase.d.ts +22 -0
  12. package/dist/focus-phase.d.ts.map +1 -0
  13. package/dist/focus-phase.js +54 -0
  14. package/dist/focus-phase.js.map +1 -0
  15. package/dist/focus-team-state.d.ts +6 -0
  16. package/dist/focus-team-state.d.ts.map +1 -1
  17. package/dist/focus-team-state.js +13 -0
  18. package/dist/focus-team-state.js.map +1 -1
  19. package/dist/index.js +0 -0
  20. package/dist/listener.d.ts.map +1 -1
  21. package/dist/listener.js +0 -5
  22. package/dist/listener.js.map +1 -1
  23. package/dist/queries/focuses.d.ts +5 -0
  24. package/dist/queries/focuses.d.ts.map +1 -1
  25. package/dist/queries/focuses.js +15 -0
  26. package/dist/queries/focuses.js.map +1 -1
  27. package/dist/review-defect-detector.d.ts +16 -95
  28. package/dist/review-defect-detector.d.ts.map +1 -1
  29. package/dist/review-defect-detector.js +19 -211
  30. package/dist/review-defect-detector.js.map +1 -1
  31. package/dist/state-cascade.d.ts +45 -41
  32. package/dist/state-cascade.d.ts.map +1 -1
  33. package/dist/state-cascade.js +123 -215
  34. package/dist/state-cascade.js.map +1 -1
  35. package/package.json +2 -2
  36. package/dist/listener-review.d.ts +0 -37
  37. package/dist/listener-review.d.ts.map +0 -1
  38. package/dist/listener-review.js +0 -217
  39. package/dist/listener-review.js.map +0 -1
  40. package/dist/queries/strategies.d.ts +0 -97
  41. package/dist/queries/strategies.d.ts.map +0 -1
  42. package/dist/queries/strategies.js +0 -136
  43. package/dist/queries/strategies.js.map +0 -1
  44. package/dist/review-spawner.d.ts +0 -32
  45. package/dist/review-spawner.d.ts.map +0 -1
  46. package/dist/review-spawner.js +0 -170
  47. package/dist/review-spawner.js.map +0 -1
  48. package/dist/strategy-completion-event.d.ts +0 -63
  49. package/dist/strategy-completion-event.d.ts.map +0 -1
  50. package/dist/strategy-completion-event.js +0 -138
  51. package/dist/strategy-completion-event.js.map +0 -1
  52. package/dist/strategy-completion.d.ts +0 -85
  53. package/dist/strategy-completion.d.ts.map +0 -1
  54. package/dist/strategy-completion.js +0 -459
  55. package/dist/strategy-completion.js.map +0 -1
  56. package/dist/strategy-engine.d.ts +0 -47
  57. package/dist/strategy-engine.d.ts.map +0 -1
  58. package/dist/strategy-engine.js +0 -421
  59. package/dist/strategy-engine.js.map +0 -1
  60. package/dist/strategy-executor.d.ts +0 -55
  61. package/dist/strategy-executor.d.ts.map +0 -1
  62. package/dist/strategy-executor.js +0 -519
  63. package/dist/strategy-executor.js.map +0 -1
  64. package/dist/strategy-lifecycle.d.ts +0 -61
  65. package/dist/strategy-lifecycle.d.ts.map +0 -1
  66. package/dist/strategy-lifecycle.js +0 -544
  67. package/dist/strategy-lifecycle.js.map +0 -1
  68. package/dist/strategy-merge.d.ts +0 -77
  69. package/dist/strategy-merge.d.ts.map +0 -1
  70. package/dist/strategy-merge.js +0 -378
  71. package/dist/strategy-merge.js.map +0 -1
  72. package/dist/strategy-prompt-builder.d.ts +0 -24
  73. package/dist/strategy-prompt-builder.d.ts.map +0 -1
  74. package/dist/strategy-prompt-builder.js +0 -87
  75. package/dist/strategy-prompt-builder.js.map +0 -1
  76. package/dist/strategy-provisioning.d.ts +0 -16
  77. package/dist/strategy-provisioning.d.ts.map +0 -1
  78. package/dist/strategy-provisioning.js +0 -119
  79. package/dist/strategy-provisioning.js.map +0 -1
  80. package/dist/strategy-spawn-helpers.d.ts +0 -67
  81. package/dist/strategy-spawn-helpers.d.ts.map +0 -1
  82. package/dist/strategy-spawn-helpers.js +0 -160
  83. package/dist/strategy-spawn-helpers.js.map +0 -1
  84. package/dist/strategy-team-lifecycle.d.ts +0 -50
  85. package/dist/strategy-team-lifecycle.d.ts.map +0 -1
  86. package/dist/strategy-team-lifecycle.js +0 -256
  87. package/dist/strategy-team-lifecycle.js.map +0 -1
  88. package/dist/strategy-team-state.d.ts +0 -24
  89. package/dist/strategy-team-state.d.ts.map +0 -1
  90. package/dist/strategy-team-state.js +0 -43
  91. package/dist/strategy-team-state.js.map +0 -1
  92. package/dist/strategy-teardown.d.ts +0 -24
  93. package/dist/strategy-teardown.d.ts.map +0 -1
  94. package/dist/strategy-teardown.js +0 -158
  95. package/dist/strategy-teardown.js.map +0 -1
  96. package/dist/strategy-worktree-state.d.ts +0 -47
  97. package/dist/strategy-worktree-state.d.ts.map +0 -1
  98. package/dist/strategy-worktree-state.js +0 -104
  99. package/dist/strategy-worktree-state.js.map +0 -1
  100. package/dist/team-prompt-variants.d.ts +0 -17
  101. package/dist/team-prompt-variants.d.ts.map +0 -1
  102. package/dist/team-prompt-variants.js +0 -79
  103. package/dist/team-prompt-variants.js.map +0 -1
  104. package/dist/types/strategy.d.ts +0 -180
  105. package/dist/types/strategy.d.ts.map +0 -1
  106. package/dist/types/strategy.js +0 -5
  107. package/dist/types/strategy.js.map +0 -1
  108. package/dist/worktree-merge.d.ts +0 -23
  109. package/dist/worktree-merge.d.ts.map +0 -1
  110. package/dist/worktree-merge.js +0 -57
  111. package/dist/worktree-merge.js.map +0 -1
  112. package/dist/worktree-strategy.d.ts +0 -69
  113. package/dist/worktree-strategy.d.ts.map +0 -1
  114. package/dist/worktree-strategy.js +0 -214
  115. package/dist/worktree-strategy.js.map +0 -1
@@ -1,26 +1,34 @@
1
1
  /**
2
- * Deterministic State Cascade Engine.
2
+ * Deterministic state cascade engine.
3
3
  *
4
- * Implements upward state cascades from child to parent entities:
5
- * - Delivery -> Focus: all non-cancelled deliveries verify => focus building -> verify
4
+ * Operates on the focus EXECUTION PHASE axis (derived from delivery
5
+ * aggregate via deriveFocusPhase). Three behaviors live here:
6
6
  *
7
- * Note: Issue -> Delivery cascade is handled by checkDeliveryAutoAdvance
8
- * in listener-auto-advance.ts.
7
+ * 1. Auto-review: phase === 'verifying' + pipelineConfig.review.enabled
8
+ * -> set review_requested_at and transition verify deliveries to
9
+ * in_review. The phase will become 'reviewing' on the next
10
+ * syncFocusPhase poll.
9
11
  *
10
- * And downward reactions when parents revert:
11
- * - Focus regression: if a delivery reverts from verify, focus reverts from verify -> building
12
+ * 2. Review completion: phase === 'reviewing' + no team running +
13
+ * all in_review deliveries pass (no open work issues)
14
+ * -> deliveries -> done, clear review_requested_at.
12
15
  *
13
- * Called from the daemon poll loop via runCascadeChecks().
16
+ * 3. Stale review clearing: review_requested_at set but a delivery has
17
+ * regressed back to active work -> clear review_requested_at so the
18
+ * user can request a fresh review when verify is reached again.
19
+ *
20
+ * The "deliveries all reach verify -> focus advances" cascade and focus
21
+ * phase regression are handled by syncFocusPhase in directive-executor.ts;
22
+ * they no longer live here.
14
23
  */
15
24
  import type { DaemonConfig, PipelineConfig, Workflow } from './types.js';
16
25
  import type { FocusDeliveryInfo } from './types.js';
26
+ import { type FocusExecutionPhase } from './focus-phase.js';
17
27
  /** Injectable dependencies for cascade functions (testing). */
18
28
  export interface CascadeDeps {
19
29
  getFocusDeliveries: (focusId: string) => Promise<FocusDeliveryInfo[]>;
20
- updateFocusStatus: (focusId: string, status: string, stageId?: string | null, extraFields?: {
21
- reviewRequestedAt?: string | null;
22
- }) => Promise<void>;
23
- fetchFocusWorkflowWithTransitions: (focusId: string) => Promise<Workflow>;
30
+ setReviewRequestedAt: (focusId: string, isoTimestamp: string) => Promise<void>;
31
+ clearReviewRequestedAt: (focusId: string) => Promise<void>;
24
32
  fetchEffectiveWorkflow: (deliveryId: string) => Promise<Workflow>;
25
33
  updateDeliveryStatus: (deliveryId: string, status: string, stageId?: string | null) => Promise<void>;
26
34
  getDeliveryIssues: (deliveryId: string) => Promise<Array<{
@@ -31,41 +39,37 @@ export interface CascadeDeps {
31
39
  }>>;
32
40
  }
33
41
  /**
34
- * Check if all non-cancelled deliveries within a focus have reached verify,
35
- * and if so, advance the focus from building -> verify.
36
- */
37
- export declare function checkDeliveryToFocusCascade(config: DaemonConfig, focusId: string, focusStatus: string, deps?: CascadeDeps): Promise<void>;
38
- /**
39
- * If a focus is in verify/in_review but a delivery has reverted to a
40
- * non-complete status, regress the focus back to building.
42
+ * When a focus reaches the verifying phase and pipelineConfig.review is
43
+ * enabled, set review_requested_at and transition verify deliveries to
44
+ * in_review. The phase derivation will pick up review_requested_at on the
45
+ * next poll and emit phase = 'reviewing', firing the reviewing-stage
46
+ * directive.
41
47
  */
42
- export declare function handleFocusRegression(config: DaemonConfig, focusId: string, focusStatus: string, deps?: CascadeDeps): Promise<void>;
48
+ export declare function checkAutoReview(focusId: string, phase: FocusExecutionPhase, pipelineConfig: PipelineConfig | null, reviewRequestedAt: string | null, deliveries: FocusDeliveryInfo[], deps?: CascadeDeps): Promise<void>;
43
49
  /**
44
- * When a focus reaches verify and has pipeline_config.review.enabled,
45
- * automatically trigger AI review by setting review_requested_at,
46
- * transitioning the focus to in_review, and cascading deliveries
47
- * from verify to in_review.
50
+ * When a focus is in the reviewing phase but no review team is running,
51
+ * route each in_review delivery to its outcome and clear
52
+ * review_requested_at:
53
+ * - delivery has open work issues -> iterating (a team will pick it up)
54
+ * - delivery has none -> done
55
+ *
56
+ * Without this, a focus is stuck in reviewing forever if the review team
57
+ * exits without the focus-completion exit handler running (e.g., manual
58
+ * Review request without an in-flight team) or if review never spawned
59
+ * (no agent_directive on the reviewing stage).
48
60
  */
49
- export declare function checkAutoReview(config: DaemonConfig, focusId: string, focusStatus: string, pipelineConfig: PipelineConfig | null, deps?: CascadeDeps): Promise<void>;
61
+ export declare function checkReviewCompletion(focusId: string, phase: FocusExecutionPhase, deliveries: FocusDeliveryInfo[], deps?: CascadeDeps): Promise<void>;
50
62
  /**
51
- * When a focus is in_review but no review team is running, check whether
52
- * all in_review deliveries have passed (no open work issues). If so, route
53
- * them to done and move the focus back to verify.
54
- *
55
- * This handles the case where auto-review triggers but no review team spawns
56
- * (e.g., no agent_directive on the in_review stage, or no active team to
57
- * receive an inject directive). Without this, the focus is stuck in
58
- * in_review forever.
63
+ * If a focus has review_requested_at set but a delivery has reverted to
64
+ * active work, the prior review request is stale -- clear it so the user
65
+ * can request a fresh review once verify is reached again. Phase
66
+ * regression itself is handled by syncFocusPhase.
59
67
  */
60
- export declare function checkReviewCompletion(focusId: string, deps?: CascadeDeps): Promise<void>;
68
+ export declare function clearStaleReviewRequest(focusId: string, phase: FocusExecutionPhase, reviewRequestedAt: string | null, deps?: CascadeDeps): Promise<void>;
61
69
  /**
62
- * Run all cascade checks for active focuses across all configured products.
63
- *
64
- * Called from the daemon poll loop. For each active focus:
65
- * 1. Check delivery->focus cascade (all deliveries verify => focus verify)
66
- * 2. Check auto-review (focus in verify + review.enabled)
67
- * 3. Complete stuck reviews (focus in_review + no team running + all pass)
68
- * 4. Check for focus regression (delivery reverted => focus back to building)
70
+ * Run cascade checks for active focuses across all configured products.
71
+ * Called from the daemon poll loop after syncFocusPhase has updated
72
+ * current_workflow_stage_id, so the derived phase is authoritative.
69
73
  */
70
74
  export declare function runCascadeChecks(config: DaemonConfig): Promise<void>;
71
75
  //# sourceMappingURL=state-cascade.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state-cascade.d.ts","sourceRoot":"","sources":["../src/state-cascade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AASpD,+DAA+D;AAC/D,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtE,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,WAAW,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpJ,iCAAiC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1E,sBAAsB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClE,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrG,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAC7H;AAWD;;;GAGG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,WAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA8Df;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,WAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA6Cf;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,cAAc,GAAG,IAAI,EACrC,IAAI,GAAE,WAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAyDf;AA8BD;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,WAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED;;;;;;;;GAQG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC1E"}
1
+ {"version":3,"file":"state-cascade.d.ts","sourceRoot":"","sources":["../src/state-cascade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAgBpD,OAAO,EAAoB,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE9E,+DAA+D;AAC/D,MAAM,WAAW,WAAW;IAC1B,kBAAkB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACtE,oBAAoB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/E,sBAAsB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,sBAAsB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClE,oBAAoB,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrG,iBAAiB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;CAC7H;AAWD;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,mBAAmB,EAC1B,cAAc,EAAE,cAAc,GAAG,IAAI,EACrC,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,UAAU,EAAE,iBAAiB,EAAE,EAC/B,IAAI,GAAE,WAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAwCf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,mBAAmB,EAC1B,UAAU,EAAE,iBAAiB,EAAE,EAC/B,IAAI,GAAE,WAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAuDf;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,mBAAmB,EAC1B,iBAAiB,EAAE,MAAM,GAAG,IAAI,EAChC,IAAI,GAAE,WAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAqBf;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC1E"}
@@ -1,261 +1,170 @@
1
1
  /**
2
- * Deterministic State Cascade Engine.
2
+ * Deterministic state cascade engine.
3
3
  *
4
- * Implements upward state cascades from child to parent entities:
5
- * - Delivery -> Focus: all non-cancelled deliveries verify => focus building -> verify
4
+ * Operates on the focus EXECUTION PHASE axis (derived from delivery
5
+ * aggregate via deriveFocusPhase). Three behaviors live here:
6
6
  *
7
- * Note: Issue -> Delivery cascade is handled by checkDeliveryAutoAdvance
8
- * in listener-auto-advance.ts.
7
+ * 1. Auto-review: phase === 'verifying' + pipelineConfig.review.enabled
8
+ * -> set review_requested_at and transition verify deliveries to
9
+ * in_review. The phase will become 'reviewing' on the next
10
+ * syncFocusPhase poll.
9
11
  *
10
- * And downward reactions when parents revert:
11
- * - Focus regression: if a delivery reverts from verify, focus reverts from verify -> building
12
+ * 2. Review completion: phase === 'reviewing' + no team running +
13
+ * all in_review deliveries pass (no open work issues)
14
+ * -> deliveries -> done, clear review_requested_at.
12
15
  *
13
- * Called from the daemon poll loop via runCascadeChecks().
16
+ * 3. Stale review clearing: review_requested_at set but a delivery has
17
+ * regressed back to active work -> clear review_requested_at so the
18
+ * user can request a fresh review when verify is reached again.
19
+ *
20
+ * The "deliveries all reach verify -> focus advances" cascade and focus
21
+ * phase regression are handled by syncFocusPhase in directive-executor.ts;
22
+ * they no longer live here.
14
23
  */
15
- import { getActiveFocuses, updateDeliveryStatus as _updateDeliveryStatus, fetchEffectiveWorkflow as _fetchEffectiveWorkflow, getDeliveryIssues as _getDeliveryIssues } from './supabase.js';
16
- import { getFocusDeliveries as _getFocusDeliveries, updateFocusStatus as _updateFocusStatus, fetchFocusWorkflowWithTransitions as _fetchFocusWorkflowWithTransitions } from './queries/focuses.js';
24
+ import { getActiveFocuses, updateDeliveryStatus as _updateDeliveryStatus, fetchEffectiveWorkflow as _fetchEffectiveWorkflow, getDeliveryIssues as _getDeliveryIssues, } from './supabase.js';
25
+ import { getFocusDeliveries as _getFocusDeliveries, setReviewRequestedAt as _setReviewRequestedAt, clearReviewRequestedAt as _clearReviewRequestedAt, } from './queries/focuses.js';
17
26
  import { configForProduct } from './config.js';
18
27
  import { emitLoopTrigger } from './loop-event-bus.js';
19
- import { isStatusCascadable, isStatusExcludedFromCascade, isStatusTerminal } from './stage-classifier.js';
20
28
  import { filterWorkIssues, ACTIVE_WORK_STATUSES } from './constants.js';
21
29
  import { hasActiveTeam } from './focus-team-state.js';
30
+ import { deriveFocusPhase } from './focus-phase.js';
22
31
  const defaultDeps = {
23
32
  getFocusDeliveries: _getFocusDeliveries,
24
- updateFocusStatus: _updateFocusStatus,
25
- fetchFocusWorkflowWithTransitions: _fetchFocusWorkflowWithTransitions,
33
+ setReviewRequestedAt: _setReviewRequestedAt,
34
+ clearReviewRequestedAt: _clearReviewRequestedAt,
26
35
  fetchEffectiveWorkflow: _fetchEffectiveWorkflow,
27
36
  updateDeliveryStatus: _updateDeliveryStatus,
28
37
  getDeliveryIssues: _getDeliveryIssues,
29
38
  };
30
39
  /**
31
- * Check if all non-cancelled deliveries within a focus have reached verify,
32
- * and if so, advance the focus from building -> verify.
40
+ * When a focus reaches the verifying phase and pipelineConfig.review is
41
+ * enabled, set review_requested_at and transition verify deliveries to
42
+ * in_review. The phase derivation will pick up review_requested_at on the
43
+ * next poll and emit phase = 'reviewing', firing the reviewing-stage
44
+ * directive.
33
45
  */
34
- export async function checkDeliveryToFocusCascade(config, focusId, focusStatus, deps = defaultDeps) {
35
- // Only cascade when focus is in building stage
36
- if (focusStatus !== 'building')
46
+ export async function checkAutoReview(focusId, phase, pipelineConfig, reviewRequestedAt, deliveries, deps = defaultDeps) {
47
+ if (phase !== 'verifying')
48
+ return;
49
+ if (!pipelineConfig?.review?.enabled)
50
+ return;
51
+ if (reviewRequestedAt)
52
+ return;
53
+ const verifyDeliveries = deliveries.filter(d => d.executionStatus === 'verify');
54
+ if (verifyDeliveries.length === 0)
37
55
  return;
38
56
  try {
39
- const deliveries = await deps.getFocusDeliveries(focusId);
40
- // Filter to non-cancelled deliveries (active + completed work)
41
- const activeDeliveries = deliveries.filter(d => !isStatusExcludedFromCascade(d.executionStatus ?? ''));
42
- // Nothing to cascade if there are no deliveries
43
- if (activeDeliveries.length === 0)
44
- return;
45
- // Check if ALL non-cancelled deliveries have reached verify or beyond
46
- const allInVerify = activeDeliveries.every(d => isStatusCascadable(d.executionStatus ?? ''));
47
- if (!allInVerify)
48
- return;
49
- // All deliveries are in verify/in_review/done -- advance focus to verify
50
- const workflow = await deps.fetchFocusWorkflowWithTransitions(focusId);
51
- // Find the building and verify stages
52
- const buildingStage = workflow.stages.find(s => s.name === 'building');
53
- const verifyStage = workflow.stages.find(s => s.name === 'verify');
54
- if (!verifyStage) {
55
- console.warn('[state-cascade] No verify stage found in focus workflow -- cannot cascade');
56
- return;
57
- }
58
- // Verify there's a valid building->verify transition
59
- if (workflow.transitions) {
60
- const transition = workflow.transitions.find(t => buildingStage && t.from_stage_id === buildingStage.id && t.to_stage_id === verifyStage.id);
61
- if (!transition) {
62
- console.warn('[state-cascade] No building->verify transition found in focus workflow');
63
- return;
57
+ await deps.setReviewRequestedAt(focusId, new Date().toISOString());
58
+ for (const d of verifyDeliveries) {
59
+ try {
60
+ const dWorkflow = await deps.fetchEffectiveWorkflow(d.id);
61
+ const inReviewStage = dWorkflow.stages.find(s => s.name === 'in_review');
62
+ await deps.updateDeliveryStatus(d.id, 'in_review', inReviewStage?.id ?? null);
63
+ }
64
+ catch (err) {
65
+ console.warn(`[state-cascade] Auto-review: failed to transition delivery "${d.name}":`, err.message);
64
66
  }
65
67
  }
66
- await deps.updateFocusStatus(focusId, 'verify', verifyStage.id);
67
- console.log(`[state-cascade] Focus ${focusId} cascaded building -> verify: ` +
68
- `all ${activeDeliveries.length} active delivery(ies) in verify or beyond`);
68
+ console.log(`[state-cascade] Auto-review triggered for focus ${focusId}: ` +
69
+ `${verifyDeliveries.length} verify deliver${verifyDeliveries.length === 1 ? 'y' : 'ies'} -> in_review`);
69
70
  emitLoopTrigger({
70
71
  type: 'focus_status_changed',
71
72
  focusId,
72
- detail: 'building -> verify (all deliveries complete)',
73
+ detail: `verifying -> reviewing (auto, ${verifyDeliveries.length} deliveries)`,
73
74
  });
74
75
  }
75
76
  catch (err) {
76
- console.warn(`[state-cascade] Failed to check delivery->focus cascade for ${focusId}:`, err.message);
77
+ console.warn(`[state-cascade] Auto-review failed for focus ${focusId}:`, err.message);
77
78
  }
78
79
  }
79
80
  /**
80
- * If a focus is in verify/in_review but a delivery has reverted to a
81
- * non-complete status, regress the focus back to building.
81
+ * When a focus is in the reviewing phase but no review team is running,
82
+ * route each in_review delivery to its outcome and clear
83
+ * review_requested_at:
84
+ * - delivery has open work issues -> iterating (a team will pick it up)
85
+ * - delivery has none -> done
86
+ *
87
+ * Without this, a focus is stuck in reviewing forever if the review team
88
+ * exits without the focus-completion exit handler running (e.g., manual
89
+ * Review request without an in-flight team) or if review never spawned
90
+ * (no agent_directive on the reviewing stage).
82
91
  */
83
- export async function handleFocusRegression(config, focusId, focusStatus, deps = defaultDeps) {
84
- // Only regress if focus is in a cascadable but non-terminal stage (verify, in_review).
85
- // Terminal focuses (done, cancelled) should not regress.
86
- if (!isStatusCascadable(focusStatus) || isStatusTerminal(focusStatus))
92
+ export async function checkReviewCompletion(focusId, phase, deliveries, deps = defaultDeps) {
93
+ if (phase !== 'reviewing')
94
+ return;
95
+ if (hasActiveTeam(focusId))
96
+ return;
97
+ const inReviewDeliveries = deliveries.filter(d => d.executionStatus === 'in_review');
98
+ if (inReviewDeliveries.length === 0)
87
99
  return;
88
100
  try {
89
- const deliveries = await deps.getFocusDeliveries(focusId);
90
- // Check if any non-cancelled delivery is NOT in a complete status
91
- const activeDeliveries = deliveries.filter(d => !isStatusExcludedFromCascade(d.executionStatus ?? ''));
92
- const hasIncomplete = activeDeliveries.some(d => !isStatusCascadable(d.executionStatus ?? ''));
93
- if (!hasIncomplete)
94
- return;
95
- // A delivery has reverted -- regress focus back to building
96
- const workflow = await deps.fetchFocusWorkflowWithTransitions(focusId);
97
- const buildingStage = workflow.stages.find(s => s.name === 'building');
98
- if (!buildingStage) {
99
- console.warn('[state-cascade] No building stage found in focus workflow -- cannot regress');
100
- return;
101
+ let movedToDone = 0;
102
+ let movedToIterating = 0;
103
+ for (const d of inReviewDeliveries) {
104
+ try {
105
+ const [issues, dWorkflow] = await Promise.all([
106
+ deps.getDeliveryIssues(d.id),
107
+ deps.fetchEffectiveWorkflow(d.id),
108
+ ]);
109
+ const workIssues = filterWorkIssues(issues);
110
+ const openWork = workIssues.filter(i => ACTIVE_WORK_STATUSES.has(i.status));
111
+ if (openWork.length > 0) {
112
+ const iteratingStage = dWorkflow.stages.find(s => s.name === 'iterating');
113
+ await deps.updateDeliveryStatus(d.id, 'iterating', iteratingStage?.id ?? null);
114
+ movedToIterating += 1;
115
+ }
116
+ else {
117
+ const doneStage = dWorkflow.stages.find(s => s.name === 'done');
118
+ await deps.updateDeliveryStatus(d.id, 'done', doneStage?.id ?? null);
119
+ movedToDone += 1;
120
+ }
121
+ }
122
+ catch (err) {
123
+ console.warn(`[state-cascade] Review completion: failed to route delivery "${d.name}":`, err.message);
124
+ }
101
125
  }
102
- await deps.updateFocusStatus(focusId, 'building', buildingStage.id, { reviewRequestedAt: null });
103
- console.log(`[state-cascade] Focus ${focusId} regressed ${focusStatus} -> building: ` +
104
- `delivery reverted to non-verify status (review_requested_at cleared)`);
126
+ await deps.clearReviewRequestedAt(focusId);
127
+ console.log(`[state-cascade] Review completion for focus ${focusId}: ` +
128
+ `${movedToDone} -> done, ${movedToIterating} -> iterating`);
105
129
  emitLoopTrigger({
106
130
  type: 'review_completed',
107
131
  focusId,
108
- detail: `${focusStatus} -> building (delivery regression, review cleared)`,
132
+ detail: `reviewing closed (${movedToDone} done, ${movedToIterating} iterating)`,
109
133
  });
110
134
  }
111
135
  catch (err) {
112
- console.warn(`[state-cascade] Failed to check focus regression for ${focusId}:`, err.message);
136
+ console.warn(`[state-cascade] Review completion check failed for focus ${focusId}:`, err.message);
113
137
  }
114
138
  }
115
139
  /**
116
- * When a focus reaches verify and has pipeline_config.review.enabled,
117
- * automatically trigger AI review by setting review_requested_at,
118
- * transitioning the focus to in_review, and cascading deliveries
119
- * from verify to in_review.
140
+ * If a focus has review_requested_at set but a delivery has reverted to
141
+ * active work, the prior review request is stale -- clear it so the user
142
+ * can request a fresh review once verify is reached again. Phase
143
+ * regression itself is handled by syncFocusPhase.
120
144
  */
121
- export async function checkAutoReview(config, focusId, focusStatus, pipelineConfig, deps = defaultDeps) {
122
- // Only trigger when focus just reached verify and review is enabled
123
- if (focusStatus !== 'verify')
145
+ export async function clearStaleReviewRequest(focusId, phase, reviewRequestedAt, deps = defaultDeps) {
146
+ if (!reviewRequestedAt)
124
147
  return;
125
- if (!pipelineConfig?.review?.enabled)
148
+ if (phase !== 'coding' && phase !== 'kickoff')
126
149
  return;
127
150
  try {
128
- const deliveries = await deps.getFocusDeliveries(focusId);
129
- const activeDeliveries = deliveries.filter(d => !isStatusExcludedFromCascade(d.executionStatus ?? ''));
130
- // Only auto-review when ALL non-cancelled deliveries are in verify or done
131
- const allComplete = activeDeliveries.every(d => isStatusCascadable(d.executionStatus ?? ''));
132
- if (!allComplete)
133
- return;
134
- if (activeDeliveries.length === 0)
135
- return;
136
- // Don't re-trigger review if all deliveries are already done --
137
- // that means review already passed and moved them to done.
138
- const allDone = activeDeliveries.every(d => d.executionStatus === 'done');
139
- if (allDone)
140
- return;
141
- // Transition focus to in_review and set review_requested_at
142
- const focusWorkflow = await deps.fetchFocusWorkflowWithTransitions(focusId);
143
- const inReviewStage = focusWorkflow.stages.find(s => s.name === 'in_review');
144
- if (!inReviewStage) {
145
- console.warn('[state-cascade] Auto-review: no in_review stage in focus workflow');
146
- return;
147
- }
148
- await deps.updateFocusStatus(focusId, 'in_review', inReviewStage.id, { reviewRequestedAt: new Date().toISOString() });
149
- // Delivery cascade to in_review is handled by cascadeDeliveriesToInReview
150
- // in the main poll loop (covers both auto and manual review triggers).
151
- console.log(`[state-cascade] Auto-review triggered for focus ${focusId}: ` +
152
- `focus transitioned to in_review`);
151
+ await deps.clearReviewRequestedAt(focusId);
152
+ console.log(`[state-cascade] Cleared stale review_requested_at on focus ${focusId} ` +
153
+ `(phase regressed to ${phase})`);
153
154
  emitLoopTrigger({
154
- type: 'focus_status_changed',
155
+ type: 'review_completed',
155
156
  focusId,
156
- detail: 'verify -> in_review (auto-review triggered)',
157
+ detail: `${phase} (delivery regression, review cleared)`,
157
158
  });
158
159
  }
159
160
  catch (err) {
160
- console.warn(`[state-cascade] Failed to check auto-review for ${focusId}:`, err.message);
161
+ console.warn(`[state-cascade] Failed to clear stale review_requested_at for ${focusId}:`, err.message);
161
162
  }
162
163
  }
163
164
  /**
164
- * When a focus is in_review, ensure its verify deliveries are moved to in_review.
165
- * This handles both auto-review (where checkAutoReview does it inline) and manual
166
- * review (where the UI sets the focus to in_review but doesn't touch deliveries).
167
- */
168
- async function cascadeDeliveriesToInReview(focusId, deps = defaultDeps) {
169
- try {
170
- const deliveries = await deps.getFocusDeliveries(focusId);
171
- for (const d of deliveries) {
172
- if (d.executionStatus === 'verify') {
173
- try {
174
- const dWorkflow = await deps.fetchEffectiveWorkflow(d.id);
175
- const inReviewStage = dWorkflow.stages.find(s => s.name === 'in_review');
176
- await deps.updateDeliveryStatus(d.id, 'in_review', inReviewStage?.id ?? null);
177
- console.log(`[state-cascade] Delivery "${d.name}" cascaded to in_review`);
178
- }
179
- catch (err) {
180
- console.warn(`[state-cascade] Failed to cascade delivery "${d.name}" to in_review: ${err.message}`);
181
- }
182
- }
183
- }
184
- }
185
- catch (err) {
186
- console.warn(`[state-cascade] Failed to cascade deliveries to in_review for ${focusId}: ${err.message}`);
187
- }
188
- }
189
- /**
190
- * When a focus is in_review but no review team is running, check whether
191
- * all in_review deliveries have passed (no open work issues). If so, route
192
- * them to done and move the focus back to verify.
193
- *
194
- * This handles the case where auto-review triggers but no review team spawns
195
- * (e.g., no agent_directive on the in_review stage, or no active team to
196
- * receive an inject directive). Without this, the focus is stuck in
197
- * in_review forever.
198
- */
199
- export async function checkReviewCompletion(focusId, deps = defaultDeps) {
200
- // Only act when no team is running -- if a team is active, let the
201
- // review exit handler in handleTeamCompletion deal with it.
202
- if (hasActiveTeam(focusId))
203
- return;
204
- try {
205
- const deliveries = await deps.getFocusDeliveries(focusId);
206
- const inReviewDeliveries = deliveries.filter(d => d.executionStatus === 'in_review');
207
- if (inReviewDeliveries.length === 0)
208
- return;
209
- // Check each in_review delivery for open work issues
210
- let allPassed = true;
211
- for (const d of inReviewDeliveries) {
212
- const issues = await deps.getDeliveryIssues(d.id);
213
- const workIssues = filterWorkIssues(issues);
214
- const openWork = workIssues.filter(i => ACTIVE_WORK_STATUSES.has(i.status));
215
- if (openWork.length > 0) {
216
- allPassed = false;
217
- break;
218
- }
219
- }
220
- if (!allPassed)
221
- return;
222
- // All in_review deliveries passed -- move them to done
223
- for (const d of inReviewDeliveries) {
224
- try {
225
- const dWorkflow = await deps.fetchEffectiveWorkflow(d.id);
226
- const doneStage = dWorkflow.stages.find(s => s.name === 'done');
227
- await deps.updateDeliveryStatus(d.id, 'done', doneStage?.id ?? null);
228
- console.log(`[state-cascade] Review passed: delivery "${d.name}" moved to done`);
229
- }
230
- catch (err) {
231
- console.warn(`[state-cascade] Failed to move delivery "${d.name}" to done: ${err.message}`);
232
- }
233
- }
234
- // Move focus back to verify
235
- const workflow = await deps.fetchFocusWorkflowWithTransitions(focusId);
236
- const verifyStage = workflow.stages.find(s => s.name === 'verify');
237
- if (verifyStage) {
238
- await deps.updateFocusStatus(focusId, 'verify', verifyStage.id, { reviewRequestedAt: null });
239
- console.log(`[state-cascade] Review complete (no team): focus moved to verify`);
240
- emitLoopTrigger({
241
- type: 'review_completed',
242
- focusId,
243
- detail: 'in_review -> verify (auto-completed by cascade, no review team)',
244
- });
245
- }
246
- }
247
- catch (err) {
248
- console.warn(`[state-cascade] Failed to check review completion for ${focusId}: ${err.message}`);
249
- }
250
- }
251
- /**
252
- * Run all cascade checks for active focuses across all configured products.
253
- *
254
- * Called from the daemon poll loop. For each active focus:
255
- * 1. Check delivery->focus cascade (all deliveries verify => focus verify)
256
- * 2. Check auto-review (focus in verify + review.enabled)
257
- * 3. Complete stuck reviews (focus in_review + no team running + all pass)
258
- * 4. Check for focus regression (delivery reverted => focus back to building)
165
+ * Run cascade checks for active focuses across all configured products.
166
+ * Called from the daemon poll loop after syncFocusPhase has updated
167
+ * current_workflow_stage_id, so the derived phase is authoritative.
259
168
  */
260
169
  export async function runCascadeChecks(config) {
261
170
  for (const product of config.products) {
@@ -263,20 +172,19 @@ export async function runCascadeChecks(config) {
263
172
  try {
264
173
  const focuses = await getActiveFocuses(pc.organizationId, product.id);
265
174
  for (const focus of focuses) {
266
- // Check delivery -> focus cascade
267
- await checkDeliveryToFocusCascade(pc, focus.focus_id, focus.status);
268
- // Check auto-review (focus in verify + review.enabled)
269
- await checkAutoReview(pc, focus.focus_id, focus.status, focus.pipeline_config);
270
- // Cascade deliveries to in_review when focus is in_review
271
- // (covers both auto-review and manual review button)
272
- if (focus.status === 'in_review') {
273
- await cascadeDeliveriesToInReview(focus.focus_id);
274
- // Complete stuck reviews: if no team is running and all
275
- // in_review deliveries pass, route to done and move to verify
276
- await checkReviewCompletion(focus.focus_id);
175
+ try {
176
+ const deliveries = await defaultDeps.getFocusDeliveries(focus.focus_id);
177
+ const phase = deriveFocusPhase({
178
+ deliveries: deliveries.map(d => ({ executionStatus: d.executionStatus })),
179
+ reviewRequestedAt: focus.review_requested_at,
180
+ });
181
+ await checkAutoReview(focus.focus_id, phase, focus.pipeline_config, focus.review_requested_at, deliveries);
182
+ await checkReviewCompletion(focus.focus_id, phase, deliveries);
183
+ await clearStaleReviewRequest(focus.focus_id, phase, focus.review_requested_at);
184
+ }
185
+ catch (err) {
186
+ console.warn(`[state-cascade] Cascade pass failed for focus ${focus.focus_id}:`, err.message);
277
187
  }
278
- // Check for focus regression
279
- await handleFocusRegression(pc, focus.focus_id, focus.status);
280
188
  }
281
189
  }
282
190
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"state-cascade.js","sourceRoot":"","sources":["../src/state-cascade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state-cascade.js","sourceRoot":"","sources":["../src/state-cascade.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telora/daemon",
3
- "version": "0.15.3",
3
+ "version": "0.15.5",
4
4
  "description": "Agent orchestration daemon for Telora - spawns and manages Claude Code instances",
5
5
  "type": "module",
6
6
  "bin": {
@@ -37,7 +37,7 @@
37
37
  "dependencies": {
38
38
  "@telora/daemon-core": "^0.2.16",
39
39
  "@telora/factory": "^0.4.6",
40
- "@telora/mcp-products": "^0.21.12",
40
+ "@telora/mcp-products": "^0.22.1",
41
41
  "commander": "^14.0.3",
42
42
  "zod": "^4.3.6"
43
43
  },