@overdeck/core 0.45.10 → 0.45.11

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 (219) hide show
  1. package/dist/{agent-state-KVbJEG5f.js → agent-state-RLhS7ckO.js} +1 -1
  2. package/dist/{agents-pp8FO7Uj.js → agents-By3u_fQ8.js} +1 -1
  3. package/dist/{agents-CQHK0CSA.js → agents-CgVr77Qq.js} +12 -12
  4. package/dist/{agents-CQHK0CSA.js.map → agents-CgVr77Qq.js.map} +1 -1
  5. package/dist/{backlog-auto-trigger-CyuoS0nl.js → backlog-auto-trigger-B_-1tk4e.js} +5 -5
  6. package/dist/{backlog-auto-trigger-CyuoS0nl.js.map → backlog-auto-trigger-B_-1tk4e.js.map} +1 -1
  7. package/dist/cli/index.js +45 -45
  8. package/dist/{cli-Cewlu3yU.js → cli-DGeSW85B.js} +2 -2
  9. package/dist/{cli-Cewlu3yU.js.map → cli-DGeSW85B.js.map} +1 -1
  10. package/dist/cli-MTB9IOoR.js +3 -0
  11. package/dist/{close-issue-BJGX9_z7.js → close-issue-Djajb6Sv.js} +2 -2
  12. package/dist/{close-issue-BJGX9_z7.js.map → close-issue-Djajb6Sv.js.map} +1 -1
  13. package/dist/{concurrency-Ca-fC7tA.js → concurrency-4rzjHAQA.js} +1 -1
  14. package/dist/{conversation-compaction-B_6s9EvM.js → conversation-compaction-BQvZh09I.js} +4 -4
  15. package/dist/{conversation-compaction-B_6s9EvM.js.map → conversation-compaction-BQvZh09I.js.map} +1 -1
  16. package/dist/dashboard/{advancing-selfheal-CMlGznKv.js → advancing-selfheal-BezNfM3P.js} +3 -3
  17. package/dist/dashboard/{advancing-selfheal-CMlGznKv.js.map → advancing-selfheal-BezNfM3P.js.map} +1 -1
  18. package/dist/dashboard/{agent-state-xk_G8t90.js → agent-state-BUANcaA7.js} +1 -1
  19. package/dist/dashboard/{agent-state-service-C1iUF9Ft.js → agent-state-service-DmFpIMbP.js} +1 -1
  20. package/dist/dashboard/{agent-state-service-5ge9xxhx.js → agent-state-service-tXUdp6UF.js} +2 -2
  21. package/dist/dashboard/{agent-state-service-5ge9xxhx.js.map → agent-state-service-tXUdp6UF.js.map} +1 -1
  22. package/dist/dashboard/{agents-BIggLvi_.js → agents-C-vqmKDi.js} +1 -1
  23. package/dist/dashboard/{agents-DHvsjsuP.js → agents-C7V4odQ6.js} +11 -11
  24. package/dist/dashboard/{agents-DHvsjsuP.js.map → agents-C7V4odQ6.js.map} +1 -1
  25. package/dist/dashboard/{backlog-auto-trigger-COm_R96V.js → backlog-auto-trigger-Cb8PR-5w.js} +2 -2
  26. package/dist/dashboard/{backlog-auto-trigger-COm_R96V.js.map → backlog-auto-trigger-Cb8PR-5w.js.map} +1 -1
  27. package/dist/dashboard/{cli-CvK9xuSS.js → cli-BgzbB6h3.js} +2 -2
  28. package/dist/dashboard/{cli-CvK9xuSS.js.map → cli-BgzbB6h3.js.map} +1 -1
  29. package/dist/dashboard/cli-DCqy_wFa.js +3 -0
  30. package/dist/dashboard/{close-issue-BnpErnD1.js → close-issue-BWf3pxn4.js} +2 -2
  31. package/dist/dashboard/{close-issue-BnpErnD1.js.map → close-issue-BWf3pxn4.js.map} +1 -1
  32. package/dist/dashboard/{closed-issue-reaper-DRqK5k39.js → closed-issue-reaper-D7XPq5pY.js} +4 -4
  33. package/dist/dashboard/{closed-issue-reaper-DRqK5k39.js.map → closed-issue-reaper-D7XPq5pY.js.map} +1 -1
  34. package/dist/dashboard/{closed-issue-reaper-BLCQwTpF.js → closed-issue-reaper-VSTSTROK.js} +1 -1
  35. package/dist/dashboard/{conflict-gate-JdFuhKuF.js → conflict-gate-DwOslTij.js} +1 -1
  36. package/dist/dashboard/{conflict-gate-BhKvrPxn.js → conflict-gate-FFEvTDVA.js} +3 -3
  37. package/dist/dashboard/{conflict-gate-BhKvrPxn.js.map → conflict-gate-FFEvTDVA.js.map} +1 -1
  38. package/dist/dashboard/{conversation-compaction-C5o_eKEm.js → conversation-compaction-CCqN4hWk.js} +4 -4
  39. package/dist/dashboard/{conversation-compaction-C5o_eKEm.js.map → conversation-compaction-CCqN4hWk.js.map} +1 -1
  40. package/dist/dashboard/{conversation-compaction-Ba5aZdrb.js → conversation-compaction-CL5Ti4j4.js} +1 -1
  41. package/dist/dashboard/{deacon-j3qSZ7--.js → deacon-CGHl90eC.js} +107 -50
  42. package/dist/dashboard/{deacon-j3qSZ7--.js.map → deacon-CGHl90eC.js.map} +1 -1
  43. package/dist/dashboard/{deacon-Cv2RMfHs.js → deacon-DMPh40Im.js} +2 -2
  44. package/dist/dashboard/deacon-swarm-CVTiNL0N.js +2 -0
  45. package/dist/dashboard/{deacon-swarm-DadWNi5J.js → deacon-swarm-aMMJTq6t.js} +4 -4
  46. package/dist/dashboard/{deacon-swarm-DadWNi5J.js.map → deacon-swarm-aMMJTq6t.js.map} +1 -1
  47. package/dist/dashboard/deacon.js +4 -4
  48. package/dist/dashboard/{feedback-target-oE4-Esxl.js → feedback-target-dJjFfITP.js} +4 -4
  49. package/dist/dashboard/{feedback-target-oE4-Esxl.js.map → feedback-target-dJjFfITP.js.map} +1 -1
  50. package/dist/dashboard/{feedback-target-C4DaDSZ8.js → feedback-target-nQSM6ygL.js} +1 -1
  51. package/dist/dashboard/{flywheel-ClMjGW_u.js → flywheel-BLoVNtJV.js} +6 -6
  52. package/dist/dashboard/{flywheel-ClMjGW_u.js.map → flywheel-BLoVNtJV.js.map} +1 -1
  53. package/dist/dashboard/{flywheel-DefHRzY4.js → flywheel-Cqf8vu7N.js} +6 -6
  54. package/dist/dashboard/{flywheel-DefHRzY4.js.map → flywheel-Cqf8vu7N.js.map} +1 -1
  55. package/dist/dashboard/{flywheel-BqDdGvrQ.js → flywheel-PJsbrXNY.js} +1 -1
  56. package/dist/dashboard/{flywheel-merge-order-CuDcqTRJ.js → flywheel-merge-order-B7BH8mZ3.js} +2 -2
  57. package/dist/dashboard/{flywheel-merge-order-CuDcqTRJ.js.map → flywheel-merge-order-B7BH8mZ3.js.map} +1 -1
  58. package/dist/dashboard/{flywheel-merge-order-B6YDSElh.js → flywheel-merge-order-CCwF60b-.js} +1 -1
  59. package/dist/dashboard/{harness-resolve-DKeSVsJL.js → harness-resolve-B3f9G1Kp.js} +2 -2
  60. package/dist/dashboard/{harness-resolve-DKeSVsJL.js.map → harness-resolve-B3f9G1Kp.js.map} +1 -1
  61. package/dist/dashboard/{inspect-agent-BKKc0XnB.js → inspect-agent-CKF5-SJr.js} +3 -3
  62. package/dist/dashboard/{inspect-agent-BKKc0XnB.js.map → inspect-agent-CKF5-SJr.js.map} +1 -1
  63. package/dist/dashboard/inspect-agent-CqpEWGWy.js +2 -0
  64. package/dist/dashboard/{issue-lifecycle-DnhQgddB.js → issue-lifecycle-5LbOcATP.js} +7 -7
  65. package/dist/dashboard/{issue-lifecycle-DnhQgddB.js.map → issue-lifecycle-5LbOcATP.js.map} +1 -1
  66. package/dist/dashboard/{issue-lifecycle-nY4esZn8.js → issue-lifecycle-CjYqQ669.js} +1 -1
  67. package/dist/dashboard/{issue-service-singleton-Bnqv1uaa.js → issue-service-singleton-B8iu_TKV.js} +1 -1
  68. package/dist/dashboard/{issue-service-singleton-_AquSBTl.js → issue-service-singleton-CDGt__oQ.js} +2 -2
  69. package/dist/dashboard/{issue-service-singleton-_AquSBTl.js.map → issue-service-singleton-CDGt__oQ.js.map} +1 -1
  70. package/dist/dashboard/{lifecycle-CGKm7doE.js → lifecycle-CEg4sHZH.js} +4 -4
  71. package/dist/dashboard/{lifecycle-CGKm7doE.js.map → lifecycle-CEg4sHZH.js.map} +1 -1
  72. package/dist/dashboard/{merge-agent-Dh8Y9PDO.js → merge-agent-7nBiCytp.js} +1 -1
  73. package/dist/dashboard/{merge-agent-BcgAYStl.js → merge-agent-C81xPIGd.js} +6 -6
  74. package/dist/dashboard/{merge-agent-BcgAYStl.js.map → merge-agent-C81xPIGd.js.map} +1 -1
  75. package/dist/dashboard/merge-ops-DE_6CnmZ.js +2 -0
  76. package/dist/dashboard/{merge-train-DmxlYbEo.js → merge-train-D3qzRccL.js} +2 -2
  77. package/dist/dashboard/{merge-train-DmxlYbEo.js.map → merge-train-D3qzRccL.js.map} +1 -1
  78. package/dist/dashboard/{merge-train-deps-DBHsOWt9.js → merge-train-deps-Be5ElC_P.js} +2 -2
  79. package/dist/dashboard/{merge-train-deps-DBHsOWt9.js.map → merge-train-deps-Be5ElC_P.js.map} +1 -1
  80. package/dist/dashboard/{orphan-proposed-reconciler-Db8tUhce.js → orphan-proposed-reconciler-Boq_XaRe.js} +3 -3
  81. package/dist/dashboard/{orphan-proposed-reconciler-Db8tUhce.js.map → orphan-proposed-reconciler-Boq_XaRe.js.map} +1 -1
  82. package/dist/dashboard/{orphan-proposed-reconciler-mXV--tcB.js → orphan-proposed-reconciler-C0sPnDq_.js} +1 -1
  83. package/dist/dashboard/{reconstruct-cache-_tDZ2D72.js → reconstruct-cache-C2pCltOq.js} +3 -3
  84. package/dist/dashboard/{reconstruct-cache-_tDZ2D72.js.map → reconstruct-cache-C2pCltOq.js.map} +1 -1
  85. package/dist/dashboard/{remote-completion-Bklh6loJ.js → remote-completion-BmxD5UMQ.js} +3 -3
  86. package/dist/dashboard/{remote-completion-Bklh6loJ.js.map → remote-completion-BmxD5UMQ.js.map} +1 -1
  87. package/dist/dashboard/resume-C-nxu9Y4.js +3 -0
  88. package/dist/dashboard/{review-agent-phzqNqIs.js → review-agent-D6P6d3pz.js} +26 -17
  89. package/dist/dashboard/review-agent-D6P6d3pz.js.map +1 -0
  90. package/dist/dashboard/review-agent-DTINEffB.js +3 -0
  91. package/dist/dashboard/{review-context-CCq56O_Y.js → review-context-Dyo0tsBa.js} +2 -2
  92. package/dist/dashboard/{review-context-CCq56O_Y.js.map → review-context-Dyo0tsBa.js.map} +1 -1
  93. package/dist/dashboard/{review-status-BQjqQXZG.js → review-status-B5ZASOo4.js} +18 -5
  94. package/dist/dashboard/review-status-B5ZASOo4.js.map +1 -0
  95. package/dist/dashboard/{review-status-bBkqUj5i.js → review-status-h7BXIA4z.js} +1 -1
  96. package/dist/dashboard/{review-verdict-feedback-wqnikhMK.js → review-verdict-feedback-B70VbfRL.js} +4 -4
  97. package/dist/dashboard/{review-verdict-feedback-wqnikhMK.js.map → review-verdict-feedback-B70VbfRL.js.map} +1 -1
  98. package/dist/dashboard/{review-verdict-feedback-cZh9Wi9G.js → review-verdict-feedback-CorgH49f.js} +1 -1
  99. package/dist/dashboard/{sequence-io-B2GmilSI.js → sequence-io-6YP8fVpH.js} +2 -2
  100. package/dist/dashboard/{sequence-io-B2GmilSI.js.map → sequence-io-6YP8fVpH.js.map} +1 -1
  101. package/dist/dashboard/{sequencer-agent-D8pW2aU_.js → sequencer-agent-ja-nkEc1.js} +5 -5
  102. package/dist/dashboard/{sequencer-agent-D8pW2aU_.js.map → sequencer-agent-ja-nkEc1.js.map} +1 -1
  103. package/dist/dashboard/server.js +66 -55
  104. package/dist/dashboard/server.js.map +1 -1
  105. package/dist/dashboard/{service-CILd-uOt.js → service-HKDrIy0h.js} +24 -24
  106. package/dist/dashboard/{service-CILd-uOt.js.map → service-HKDrIy0h.js.map} +1 -1
  107. package/dist/dashboard/{smart-compaction-Bgp_gwcA.js → smart-compaction-L0LSnF0_.js} +1 -1
  108. package/dist/dashboard/{smart-compaction-CrP90OFE.js → smart-compaction-uke1npUz.js} +2 -2
  109. package/dist/dashboard/{smart-compaction-CrP90OFE.js.map → smart-compaction-uke1npUz.js.map} +1 -1
  110. package/dist/dashboard/{spawn-planning-session-D15KbPOy.js → spawn-planning-session-CSMWco8B.js} +1 -1
  111. package/dist/dashboard/{spawn-planning-session-BmJWHSCu.js → spawn-planning-session-CXc0NkwV.js} +3 -3
  112. package/dist/dashboard/{spawn-planning-session-BmJWHSCu.js.map → spawn-planning-session-CXc0NkwV.js.map} +1 -1
  113. package/dist/dashboard/{specialist-context-CwKkcXL9.js → specialist-context-BGCJ24LH.js} +3 -3
  114. package/dist/dashboard/{specialist-context-CwKkcXL9.js.map → specialist-context-BGCJ24LH.js.map} +1 -1
  115. package/dist/dashboard/{specialist-logs-CvDxquV_.js → specialist-logs--Uz-r8ia.js} +2 -2
  116. package/dist/dashboard/{specialist-logs-CvDxquV_.js.map → specialist-logs--Uz-r8ia.js.map} +1 -1
  117. package/dist/dashboard/{specialists-BCjcG4uE.js → specialists-Ca9XSBCS.js} +1 -1
  118. package/dist/dashboard/{specialists-D07ybnam.js → specialists-DEfrAbWs.js} +36 -36
  119. package/dist/dashboard/{specialists-D07ybnam.js.map → specialists-DEfrAbWs.js.map} +1 -1
  120. package/dist/dashboard/{specialists-F2uMO4QS.js → specialists-DeZx9xom.js} +1 -1
  121. package/dist/dashboard/{specialists-BYi0k8CZ.js → specialists-nZ0mRwpZ.js} +12 -12
  122. package/dist/dashboard/{specialists-BYi0k8CZ.js.map → specialists-nZ0mRwpZ.js.map} +1 -1
  123. package/dist/dashboard/{summary-fork-DedqguZb.js → summary-fork-2a1L2DIU.js} +2 -2
  124. package/dist/dashboard/{summary-fork-EjvOkEPl.js → summary-fork-Xn0QUNmb.js} +3 -3
  125. package/dist/dashboard/{summary-fork-EjvOkEPl.js.map → summary-fork-Xn0QUNmb.js.map} +1 -1
  126. package/dist/dashboard/{teardown-workspace-5LCVbjfq.js → teardown-workspace-DhA6oAIK.js} +2 -2
  127. package/dist/dashboard/{teardown-workspace-5LCVbjfq.js.map → teardown-workspace-DhA6oAIK.js.map} +1 -1
  128. package/dist/dashboard/{test-agent-queue-qfsq6uaC.js → test-agent-queue-B_ukPyIK.js} +3 -3
  129. package/dist/dashboard/{test-agent-queue-qfsq6uaC.js.map → test-agent-queue-B_ukPyIK.js.map} +1 -1
  130. package/dist/dashboard/{uat-train-CtNGgXxj.js → uat-train-BLBAbJ8Y.js} +10 -10
  131. package/dist/dashboard/{uat-train-CtNGgXxj.js.map → uat-train-BLBAbJ8Y.js.map} +1 -1
  132. package/dist/dashboard/{uat-train-C3hWXtip.js → uat-train-DPfGR9_I.js} +1 -1
  133. package/dist/dashboard/{verification-runner-DuZRHjPU.js → verification-runner-KTGTNugM.js} +1 -1
  134. package/dist/dashboard/{verification-runner-BPAhPWR7.js → verification-runner-R2-4XgMO.js} +4 -4
  135. package/dist/dashboard/{verification-runner-BPAhPWR7.js.map → verification-runner-R2-4XgMO.js.map} +1 -1
  136. package/dist/dashboard/{workflows-H-COJ84X.js → workflows-CSKX5MhC.js} +7 -7
  137. package/dist/dashboard/{workflows-H-COJ84X.js.map → workflows-CSKX5MhC.js.map} +1 -1
  138. package/dist/dashboard/workflows-DVwXauef.js +2 -0
  139. package/dist/dashboard/{workspaces-CRU9_vRn.js → workspaces-DXLDgXo2.js} +32 -32
  140. package/dist/dashboard/{workspaces-CRU9_vRn.js.map → workspaces-DXLDgXo2.js.map} +1 -1
  141. package/dist/docs-index.sqlite +0 -0
  142. package/dist/{feedback-target-DTGAhFkM.js → feedback-target-BsKN4Tr_.js} +4 -4
  143. package/dist/{feedback-target-DTGAhFkM.js.map → feedback-target-BsKN4Tr_.js.map} +1 -1
  144. package/dist/{feedback-target-DutF088V.js → feedback-target-DM1WzOKy.js} +1 -1
  145. package/dist/{harness-resolve-Bz1prk6B.js → harness-resolve-B-YDNwNW.js} +2 -2
  146. package/dist/{harness-resolve-Bz1prk6B.js.map → harness-resolve-B-YDNwNW.js.map} +1 -1
  147. package/dist/{issue-lifecycle-fVqvCdKM.js → issue-lifecycle-Bc1l3U9f.js} +7 -7
  148. package/dist/{issue-lifecycle-fVqvCdKM.js.map → issue-lifecycle-Bc1l3U9f.js.map} +1 -1
  149. package/dist/{issue-service-singleton-CZm8p6Rj.js → issue-service-singleton-D-8Q6tdT.js} +1 -1
  150. package/dist/{issue-service-singleton-Cr73JAaR.js → issue-service-singleton-D1433I7n.js} +2 -2
  151. package/dist/{issue-service-singleton-Cr73JAaR.js.map → issue-service-singleton-D1433I7n.js.map} +1 -1
  152. package/dist/{lifecycle-CR6tZfl1.js → lifecycle-SmrqysDf.js} +7 -7
  153. package/dist/{lifecycle-CR6tZfl1.js.map → lifecycle-SmrqysDf.js.map} +1 -1
  154. package/dist/{lifecycle-D_EWiUjk.js → lifecycle-mRMyiIXs.js} +2 -2
  155. package/dist/{merge-agent-LM4avOtA.js → merge-agent-B9hIZ6Z0.js} +6 -6
  156. package/dist/{merge-agent-LM4avOtA.js.map → merge-agent-B9hIZ6Z0.js.map} +1 -1
  157. package/dist/{merge-agent-Bj046HE1.js → merge-agent-DUj22cXL.js} +1 -1
  158. package/dist/{merge-fulfillment-DrnC1Kmg.js → merge-fulfillment-__P4WE-T.js} +3 -3
  159. package/dist/{merge-fulfillment-DrnC1Kmg.js.map → merge-fulfillment-__P4WE-T.js.map} +1 -1
  160. package/dist/{reconstruct-cache-NPqoAUg-.js → reconstruct-cache-9SWp82SQ.js} +3 -3
  161. package/dist/{reconstruct-cache-NPqoAUg-.js.map → reconstruct-cache-9SWp82SQ.js.map} +1 -1
  162. package/dist/{records-BIkN1LQ4.js → records-CTmvuRzz.js} +14 -1
  163. package/dist/{records-BIkN1LQ4.js.map → records-CTmvuRzz.js.map} +1 -1
  164. package/dist/records-backfill-BQcmTmwF.js +2 -0
  165. package/dist/{records-backfill-HM0Pln6N.js → records-backfill-BrNsv_zT.js} +2 -2
  166. package/dist/{records-backfill-HM0Pln6N.js.map → records-backfill-BrNsv_zT.js.map} +1 -1
  167. package/dist/resume-Bn4kDk9x.js +3 -0
  168. package/dist/{review-agent-DFosQzCG.js → review-agent-PhqOhpx3.js} +24 -16
  169. package/dist/{review-agent-DFosQzCG.js.map → review-agent-PhqOhpx3.js.map} +1 -1
  170. package/dist/review-agent-hLbRRxZF.js +3 -0
  171. package/dist/{review-status-iJwfEoNX.js → review-status-B_XXomV0.js} +6 -6
  172. package/dist/{review-status-iJwfEoNX.js.map → review-status-B_XXomV0.js.map} +1 -1
  173. package/dist/{review-status-BbNVlXh1.js → review-status-Bo-EFVKh.js} +1 -1
  174. package/dist/{review-verdict-feedback-BGPw3z1X.js → review-verdict-feedback-CXHkoiKZ.js} +1 -1
  175. package/dist/{review-verdict-feedback-CCZ05atV.js → review-verdict-feedback-DGV13LDb.js} +4 -4
  176. package/dist/{review-verdict-feedback-CCZ05atV.js.map → review-verdict-feedback-DGV13LDb.js.map} +1 -1
  177. package/dist/{sequence-io-CcxZNHcD.js → sequence-io-Cg4NHAco.js} +1 -1
  178. package/dist/{sequence-io-Cx1usxG3.js → sequence-io-CyxvNHfA.js} +2 -2
  179. package/dist/{sequence-io-Cx1usxG3.js.map → sequence-io-CyxvNHfA.js.map} +1 -1
  180. package/dist/{smart-compaction-ByUEgQkF.js → smart-compaction-ByKXTQNy.js} +2 -2
  181. package/dist/{smart-compaction-ByUEgQkF.js.map → smart-compaction-ByKXTQNy.js.map} +1 -1
  182. package/dist/{smart-compaction-DfLe_CtH.js → smart-compaction-U6e_uB1E.js} +1 -1
  183. package/dist/{specialist-context-McuGkaeR.js → specialist-context-BUTadO-U.js} +3 -3
  184. package/dist/{specialist-context-McuGkaeR.js.map → specialist-context-BUTadO-U.js.map} +1 -1
  185. package/dist/{specialist-logs-CUUJ4eiB.js → specialist-logs-pEMCTtGZ.js} +2 -2
  186. package/dist/{specialist-logs-CUUJ4eiB.js.map → specialist-logs-pEMCTtGZ.js.map} +1 -1
  187. package/dist/{specialists-BSrylD1S.js → specialists-BGFnrQ8n.js} +1 -1
  188. package/dist/{specialists-B0elgInc.js → specialists-DeTkkp8b.js} +12 -12
  189. package/dist/{specialists-B0elgInc.js.map → specialists-DeTkkp8b.js.map} +1 -1
  190. package/dist/{summary-fork-DskMRnyb.js → summary-fork-CgzThE2-.js} +2 -2
  191. package/dist/{summary-fork-CPUTKcAT.js → summary-fork-Dx1RMuvU.js} +3 -3
  192. package/dist/{summary-fork-CPUTKcAT.js.map → summary-fork-Dx1RMuvU.js.map} +1 -1
  193. package/dist/{sync-BiNVQHBf.js → sync-Bsww9tuj.js} +2 -2
  194. package/dist/{sync-BiNVQHBf.js.map → sync-Bsww9tuj.js.map} +1 -1
  195. package/dist/sync-CylE_SjB.js +2 -0
  196. package/dist/{verdict-restore-DQiV7_fe.js → verdict-restore-DGpX0ZOJ.js} +5 -5
  197. package/dist/{verdict-restore-DQiV7_fe.js.map → verdict-restore-DGpX0ZOJ.js.map} +1 -1
  198. package/dist/{webhook-handlers-DHBSEDEm.js → webhook-handlers-BjsfIL7u.js} +3 -3
  199. package/dist/{webhook-handlers-DHBSEDEm.js.map → webhook-handlers-BjsfIL7u.js.map} +1 -1
  200. package/dist/{workspace-migrate-duUsWNpd.js → workspace-migrate-BBQ8nAnP.js} +2 -2
  201. package/dist/{workspace-migrate-duUsWNpd.js.map → workspace-migrate-BBQ8nAnP.js.map} +1 -1
  202. package/dist/{workspace-reap-DLCIoJmn.js → workspace-reap-12O9354k.js} +2 -2
  203. package/dist/{workspace-reap-DLCIoJmn.js.map → workspace-reap-12O9354k.js.map} +1 -1
  204. package/package.json +1 -1
  205. package/scripts/file-size-baseline.txt +1 -1
  206. package/dist/cli-DBWG12XK.js +0 -3
  207. package/dist/dashboard/cli-CJDWXE_Y.js +0 -3
  208. package/dist/dashboard/deacon-swarm-D1iAUX-P.js +0 -2
  209. package/dist/dashboard/inspect-agent-vm88mLYr.js +0 -2
  210. package/dist/dashboard/merge-ops-QdBiQ8XB.js +0 -2
  211. package/dist/dashboard/resume-DnIsmIgC.js +0 -3
  212. package/dist/dashboard/review-agent-DgySDb-G.js +0 -3
  213. package/dist/dashboard/review-agent-phzqNqIs.js.map +0 -1
  214. package/dist/dashboard/review-status-BQjqQXZG.js.map +0 -1
  215. package/dist/dashboard/workflows-Cz8OtiB4.js +0 -2
  216. package/dist/records-backfill-DEgtRyKL.js +0 -2
  217. package/dist/resume-DGymuXZM.js +0 -3
  218. package/dist/review-agent-DjVadURa.js +0 -3
  219. package/dist/sync-4jqukkxz.js +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"inspect-agent-BKKc0XnB.js","names":["loadYamlConfig"],"sources":["../../src/lib/cloister/inspect-checkpoints.ts","../../src/lib/cloister/inspect-agent.ts"],"sourcesContent":["/**\n * PAN-382: Inspection checkpoint system.\n *\n * Tracks commit SHAs where inspections passed. The active inspection diff is\n * scoped to the parent of HEAD because the work role contract is one bead per\n * commit; checkpoints remain the durable record after a pass.\n */\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport { join } from 'path';\nimport { homedir } from 'os';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\nimport { Effect } from 'effect';\nimport { GitError } from '../errors.js';\n\nconst execAsync = promisify(exec);\n\nconst OVERDECK_HOME = join(homedir(), '.overdeck');\n\nexport interface InspectCheckpoint {\n beadId: string;\n commitSha: string;\n passedAt: string; // ISO 8601\n}\n\nexport interface InspectCheckpointFile {\n issueId: string;\n checkpoints: InspectCheckpoint[];\n}\n\n/**\n * Get the directory for a project's inspect checkpoints.\n */\nfunction getCheckpointDir(projectKey: string): string {\n return join(OVERDECK_HOME, 'specialists', projectKey, 'inspect-agent', 'checkpoints');\n}\n\n/**\n * Get the checkpoint file path for an issue.\n */\nfunction getCheckpointPath(projectKey: string, issueId: string): string {\n return join(getCheckpointDir(projectKey), `${issueId.toUpperCase()}.json`);\n}\n\n/**\n * Load checkpoints for an issue. Returns null if no checkpoints exist.\n */\nexport function loadCheckpoints(projectKey: string, issueId: string): InspectCheckpointFile | null {\n const filePath = getCheckpointPath(projectKey, issueId);\n if (!existsSync(filePath)) return null;\n\n try {\n return JSON.parse(readFileSync(filePath, 'utf-8'));\n } catch {\n return null;\n }\n}\n\n/**\n * Get the last checkpoint for an issue, or null if none exist.\n */\nexport function getLastCheckpoint(projectKey: string, issueId: string): InspectCheckpoint | null {\n const data = loadCheckpoints(projectKey, issueId);\n if (!data || data.checkpoints.length === 0) return null;\n return data.checkpoints[data.checkpoints.length - 1];\n}\n\n/**\n * Save a new checkpoint after a successful inspection.\n */\nexport function saveCheckpoint(\n projectKey: string,\n issueId: string,\n beadId: string,\n commitSha: string\n): InspectCheckpoint {\n const dir = getCheckpointDir(projectKey);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n const data = loadCheckpoints(projectKey, issueId) || {\n issueId: issueId.toUpperCase(),\n checkpoints: [],\n };\n\n const checkpoint: InspectCheckpoint = {\n beadId,\n commitSha,\n passedAt: new Date().toISOString(),\n };\n\n data.checkpoints.push(checkpoint);\n writeFileSync(getCheckpointPath(projectKey, issueId), JSON.stringify(data, null, 2));\n\n return checkpoint;\n}async function getDiffBasePromise(_projectKey: string, _issueId: string, workspacePath: string): Promise<string> {\n try {\n const { stdout } = await execAsync('git rev-parse HEAD^', {\n cwd: workspacePath,\n encoding: 'utf-8',\n });\n return stdout.trim();\n } catch {\n // Fallback to 'main' if the branch has no parent commit.\n return 'main';\n }\n}async function getDiffStatsPromise(workspacePath: string, diffBase: string): Promise<string> {\n try {\n const { stdout } = await execAsync(`git diff --stat ${diffBase}...HEAD`, {\n cwd: workspacePath,\n encoding: 'utf-8',\n });\n return stdout.trim() || 'No changes detected';\n } catch {\n return 'Unable to compute diff stats';\n }\n}async function getCurrentHeadPromise(workspacePath: string): Promise<string> {\n try {\n const { stdout } = await execAsync('git rev-parse HEAD', {\n cwd: workspacePath,\n encoding: 'utf-8',\n });\n return stdout.trim();\n } catch {\n return 'unknown';\n }\n}\n\n// ─── PAN-1249: additive Effect variants ───────────────────────────────────────\n\n/**\n * Effect-typed variant of {@link getDiffBase}. Always succeeds — falls back to\n * `'main'` if `git merge-base` fails, matching the Promise version's behavior.\n */\nexport function getDiffBase(\n _projectKey: string,\n _issueId: string,\n workspacePath: string,\n): Effect.Effect<string> {\n return Effect.tryPromise({\n try: () => execAsync('git rev-parse HEAD^', { cwd: workspacePath, encoding: 'utf-8' }),\n catch: (cause) => new GitError({ command: ['git', 'rev-parse', 'HEAD^'], stderr: String(cause), exitCode: -1, cause }),\n }).pipe(\n Effect.map(({ stdout }) => stdout.trim()),\n Effect.orElseSucceed(() => 'main'),\n );\n}\n\n/**\n * Effect-typed variant of {@link getDiffStats}. Always succeeds — returns a\n * human-readable fallback string when the diff command fails.\n */\nexport function getDiffStats(\n workspacePath: string,\n diffBase: string,\n): Effect.Effect<string> {\n return Effect.tryPromise({\n try: () => execAsync(`git diff --stat ${diffBase}...HEAD`, { cwd: workspacePath, encoding: 'utf-8' }),\n catch: (cause) => new GitError({ command: ['git', 'diff', '--stat', `${diffBase}...HEAD`], stderr: String(cause), exitCode: -1, cause }),\n }).pipe(\n Effect.map(({ stdout }) => stdout.trim() || 'No changes detected'),\n Effect.orElseSucceed(() => 'Unable to compute diff stats'),\n );\n}\n\n/**\n * Effect-typed variant of {@link getCurrentHead}. Always succeeds — returns\n * `'unknown'` on failure to preserve the Promise version's contract.\n */\nexport function getCurrentHead(workspacePath: string): Effect.Effect<string> {\n return Effect.tryPromise({\n try: () => execAsync('git rev-parse HEAD', { cwd: workspacePath, encoding: 'utf-8' }),\n catch: (cause) => new GitError({ command: ['git', 'rev-parse', 'HEAD'], stderr: String(cause), exitCode: -1, cause }),\n }).pipe(\n Effect.map(({ stdout }) => stdout.trim()),\n Effect.orElseSucceed(() => 'unknown'),\n );\n}\n","/**\n * PAN-382: Inspect Agent — Per-step verification specialist.\n *\n * Spawns after each bead completion to verify the implementation matches\n * its specification and architectural constraints before the agent\n * proceeds to the next bead.\n */\n\nimport { readFileSync, existsSync, writeFileSync, mkdirSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { homedir } from 'os';\nimport { randomUUID } from 'crypto';\nimport { fileURLToPath } from 'url';\nimport { exec, execFile } from 'child_process';\nimport { promisify } from 'util';\nimport { Effect } from 'effect';\nimport { ProcessSpawnError } from '../errors.js';\nimport {\n getDiffBase,\n getDiffStats,\n getCurrentHead,\n saveCheckpoint,\n} from './inspect-checkpoints.js';\nimport { setReviewStatusSync } from '../review-status.js';\nimport { withBdMutex } from '../bd-mutex.js';\nimport { generateLauncherScriptSync } from '../launcher-generator.js';\nimport {\n createSession,\n killSession,\n sessionExists,\n} from '../tmux.js';\nimport { loadConfigSync as loadYamlConfig, resolveModel } from '../config-yaml.js';\nimport { getClaudePermissionFlagsSync } from '../claude-permissions.js';\nimport {\n getProviderForModelSync,\n setupCredentialFileAuthSync,\n clearCredentialFileAuthSync,\n} from '../providers.js';\nimport type { ModelId } from '../settings.js';\nimport { getProviderEnvForModel, saveAgentRuntimeState, saveAgentState } from '../agents.js';\nimport { isIssueClosed } from './issue-closed.js';\nimport { readWorkspacePlanSync } from '../vbrief/io.js';\nimport { resolveTieredExecutionEnabled } from '../agents/tier-table.js';\nimport {\n deliverCommitForReview,\n loadPrdDraft,\n spawnTierSupervisor,\n supervisorAgentId,\n} from '../agents/tier-supervisor.js';\n\nconst execAsync = promisify(exec);\nconst execFileAsync = promisify(execFile);\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Context for an inspection request\n */\nexport interface InspectContext {\n projectKey: string;\n projectPath: string;\n issueId: string;\n /** Canonical vBRIEF item id being inspected. */\n beadId: string;\n /** Original bd tracker id, when the caller passed one that differs from the vBRIEF item id. */\n trackerBeadId?: string;\n workspace: string;\n branch?: string;\n}\n\n/**\n * Result of inspection\n */\nexport interface InspectResult {\n success: boolean;\n inspectResult: 'PASS' | 'BLOCKED';\n beadId: string;\n notes?: string;\n}\n\n/**\n * Read a bead's description using the bd CLI.\n */\nasync function getBeadDescription(beadId: string, workspacePath: string): Promise<string> {\n try {\n const { stdout } = await execFileAsync('bd', ['show', beadId, '--json'], {\n cwd: workspacePath,\n encoding: 'utf-8',\n });\n const bead = JSON.parse(stdout);\n const parts: string[] = [];\n if (bead.title) parts.push(`**Title:** ${bead.title}`);\n if (bead.description) parts.push(`**Description:** ${bead.description}`);\n if (bead.acceptance) parts.push(`**Acceptance Criteria:** ${bead.acceptance}`);\n if (bead.notes) parts.push(`**Notes:** ${bead.notes}`);\n if (bead.labels?.length) parts.push(`**Labels:** ${bead.labels.join(', ')}`);\n return parts.join('\\n\\n') || `Bead ${beadId} (no description available)`;\n } catch {\n try {\n const { stdout } = await execFileAsync('bd', ['show', beadId], {\n cwd: workspacePath,\n encoding: 'utf-8',\n });\n return stdout.trim() || `Bead ${beadId} (no description available)`;\n } catch {\n return `Bead ${beadId} (unable to read bead description)`;\n }\n }\n}\n\nasync function buildInspectPromptPromise(context: InspectContext): Promise<string> {\n const templatePath = join(__dirname, 'prompts', 'inspect-agent.md');\n\n if (!existsSync(templatePath)) {\n throw new Error(`Inspect agent prompt template not found at ${templatePath}`);\n }\n\n const template = readFileSync(templatePath, 'utf-8');\n\n // Get bead description\n const beadDescription = await getBeadDescription(context.trackerBeadId ?? context.beadId, context.workspace);\n\n // Get diff scope\n const diffBase = await Effect.runPromise(getDiffBase(context.projectKey, context.issueId, context.workspace));\n const diffStats = await Effect.runPromise(getDiffStats(context.workspace, diffBase));\n\n const apiUrl = process.env.OVERDECK_DASHBOARD_URL || process.env.DASHBOARD_URL || `http://localhost:${process.env.API_PORT || process.env.PORT || '3011'}`;\n\n const prompt = template\n .replace(/\\{\\{apiUrl\\}\\}/g, apiUrl)\n .replace(/\\{\\{projectPath\\}\\}/g, context.projectPath)\n .replace(/\\{\\{issueId\\}\\}/g, context.issueId)\n .replace(/\\{\\{beadId\\}\\}/g, context.beadId)\n .replace(/\\{\\{workspacePath\\}\\}/g, context.workspace)\n .replace(/\\{\\{checkpoint\\}\\}/g, diffBase.substring(0, 8))\n .replace(/\\{\\{diffBase\\}\\}/g, diffBase)\n .replace(/\\{\\{diffStats\\}\\}/g, diffStats)\n .replace(/\\{\\{beadDescription\\}\\}/g, beadDescription)\n .replace(/\\{\\{resultStatus\\}\\}/g, '${RESULT_STATUS}')\n .replace(/\\{\\{resultNotes\\}\\}/g, '${RESULT_NOTES}');\n\n return `<!-- overdeck:orchestration-context-start -->\\n${prompt}\\n<!-- overdeck:orchestration-context-end -->`;\n}\n\nasync function routeInspectToStandingSupervisorIfEnabled(\n context: InspectContext,\n): Promise<{\n success: boolean;\n tmuxSession?: string;\n message: string;\n error?: string;\n} | undefined> {\n const { config } = loadYamlConfig();\n const tiered = config.tieredExecution;\n if (!tiered?.supervisor?.owns_inspection) return undefined;\n\n const doc = readWorkspacePlanSync(context.workspace);\n const enabled = resolveTieredExecutionEnabled(tiered, doc?.plan.metadata);\n if (!enabled) return undefined;\n\n const item = doc?.plan.items.find(candidate => candidate.id === context.beadId);\n if (!doc || !item) {\n throw new Error(\n `Standing supervisor inspection for ${context.issueId} bead ${context.beadId} requires a readable vBRIEF item in ${context.workspace}.`,\n );\n }\n\n const agentId = supervisorAgentId(context.issueId);\n if (!await Effect.runPromise(sessionExists(agentId))) {\n await spawnTierSupervisor(context.issueId, tiered.supervisor, { workspace: context.workspace });\n }\n\n setReviewStatusSync(context.issueId.toUpperCase(), {\n inspectStatus: 'inspecting',\n inspectNotes: `Inspecting bead ${context.beadId}`,\n inspectStartedAt: new Date().toISOString(),\n inspectBeadId: context.beadId,\n });\n\n const sha = await Effect.runPromise(getCurrentHead(context.workspace));\n const prdMarkdown = await loadPrdDraft(context.projectPath, context.issueId);\n await deliverCommitForReview({\n supervisorAgentId: agentId,\n workspacePath: context.workspace,\n issueId: context.issueId,\n item,\n sha,\n beadId: context.beadId,\n prdMarkdown,\n });\n\n return {\n success: true,\n tmuxSession: agentId,\n message: `Routed inspect for ${context.issueId} bead ${context.beadId} to standing supervisor`,\n };\n}\n\nasync function spawnInspectAgentPromise(\n context: InspectContext,\n opts: { deep?: boolean } = {},\n): Promise<{\n success: boolean;\n skipped?: boolean;\n runId?: string;\n tmuxSession?: string;\n message: string;\n error?: string;\n}> {\n const subRole = opts.deep ? 'inspect-deep' : 'inspect';\n const issueLower = context.issueId.toLowerCase();\n const beadSlug = context.beadId.replace(/[^a-z0-9-]/gi, '-').toLowerCase().slice(0, 24);\n const tmuxSession = `inspect-${issueLower}-${beadSlug}`;\n\n try {\n if (await isIssueClosed(context.issueId.toUpperCase())) {\n const message = `${context.issueId.toUpperCase()}: skipping inspect dispatch — issue is closed`;\n console.log(`[cloister] ${message}`);\n return {\n success: true,\n skipped: true,\n tmuxSession,\n message,\n };\n }\n\n const supervisorRoute = await routeInspectToStandingSupervisorIfEnabled(context);\n if (supervisorRoute) return supervisorRoute;\n\n if (await Effect.runPromise(sessionExists(tmuxSession))) {\n // Stale session left behind by a previous inspection run — clear it.\n await Effect.runPromise(killSession(tmuxSession)).catch(() => {});\n }\n\n const prompt = await Effect.runPromise(buildInspectPrompt(context));\n setReviewStatusSync(context.issueId.toUpperCase(), {\n inspectStatus: 'inspecting',\n inspectNotes: `Inspecting bead ${context.beadId}`,\n inspectStartedAt: new Date().toISOString(),\n inspectBeadId: context.beadId,\n });\n\n // Resolve model via the role primitive: work.<inspect|inspect-deep>.\n const { config } = loadYamlConfig();\n const model = resolveModel('work', subRole, config);\n\n // Provider env (BASE_URL/AUTH_TOKEN) for non-Anthropic models routed via cliproxy.\n const providerEnv = await getProviderEnvForModel(model);\n const provider = getProviderForModelSync(model as ModelId);\n if (provider.authType === 'credential-file') {\n setupCredentialFileAuthSync(provider, context.workspace);\n } else {\n clearCredentialFileAuthSync(context.workspace);\n }\n\n // Per-agent dir for prompt + launcher artifacts.\n const agentDir = join(homedir(), '.overdeck', 'agents', tmuxSession);\n mkdirSync(agentDir, { recursive: true });\n\n const promptFile = join(agentDir, 'task-prompt.md');\n writeFileSync(promptFile, prompt);\n\n const launcherScript = join(agentDir, 'launcher.sh');\n const sessionId = randomUUID();\n writeFileSync(\n launcherScript,\n generateLauncherScriptSync({\n role: 'work',\n workingDir: context.workspace,\n setTerminalEnv: true,\n unsetProviderEnv: true,\n providerExports: Object.entries(providerEnv)\n .map(([k, v]) => `export ${k}='${v.replace(/'/g, \"'\\\"'\\\"'\")}'`)\n .join('\\n') + (Object.keys(providerEnv).length ? '\\n' : ''),\n overdeckEnv: {\n agentId: tmuxSession,\n issueId: context.issueId,\n sessionType: subRole,\n },\n promptFile,\n // Inspect prompts are workflow-injected templates, not ambient .claude/agents\n // definitions. Passing --agent here skips launcher permission flags and can\n // strand the inspector at a permission dialog before it can send its verdict.\n baseCommand: 'claude',\n sessionId,\n model,\n permissionFlags: getClaudePermissionFlagsSync(),\n }),\n { mode: 0o755 },\n );\n\n const envForTmux: Record<string, string> = {\n OVERDECK_AGENT_ID: tmuxSession,\n OVERDECK_ISSUE_ID: context.issueId,\n OVERDECK_SESSION_TYPE: subRole,\n ...providerEnv,\n };\n\n await Effect.runPromise(createSession(\n tmuxSession,\n context.workspace,\n `bash '${launcherScript}'`,\n { env: envForTmux },\n ));\n\n saveAgentRuntimeState(tmuxSession, {\n state: 'active',\n lastActivity: new Date().toISOString(),\n currentIssue: context.issueId,\n });\n\n // PAN-1834 — write a minimal state.json so inspect agents are enumerated by\n // listRunningAgents and scanned by the enrichment poller for pending input.\n await Effect.runPromise(saveAgentState({\n id: tmuxSession,\n issueId: context.issueId,\n workspace: context.workspace,\n role: 'work',\n // The inspect launcher hardcodes `baseCommand: 'claude'` (above), so the\n // agent always runs under claude-code — record it. `harness` is optional on\n // AgentState but maps to a NOT NULL column; omitting it made the cache\n // backfill skip the agent (invisible) or, pre-PAN-1972, crash the boot\n // decode. PAN-1973.\n harness: 'claude-code',\n model,\n status: 'starting',\n startedAt: new Date().toISOString(),\n inspectSubRole: subRole,\n }));\n\n return {\n success: true,\n runId: sessionId,\n tmuxSession,\n message: `Spawned ${subRole} for ${context.issueId} bead ${context.beadId}`,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n tmuxSession,\n message: `Failed to spawn ${subRole}: ${message}`,\n error: message,\n };\n }\n}async function onInspectCompletePromise(\n projectKey: string,\n issueId: string,\n beadId: string,\n status: 'passed' | 'failed',\n workspacePath: string\n): Promise<void> {\n if (status === 'passed') {\n const commitSha = await Effect.runPromise(getCurrentHead(workspacePath));\n saveCheckpoint(projectKey, issueId, beadId, commitSha);\n console.log(`[inspect] Checkpoint saved for ${issueId} bead ${beadId} at ${commitSha.substring(0, 8)}`);\n\n } else {\n console.log(`[inspect] Bead ${beadId} blocked for ${issueId} — no checkpoint saved`);\n }\n}\n\n// ─── PAN-1249: additive Effect variants ───────────────────────────────────────\n\n/**\n * Effect-typed variant of {@link buildInspectPrompt}.\n * Fails with `ProcessSpawnError` when the prompt template is missing or the\n * underlying git/bd helpers throw (the legacy Promise version throws on the\n * missing-template path).\n */\nexport function buildInspectPrompt(\n context: InspectContext,\n): Effect.Effect<string, ProcessSpawnError> {\n return Effect.tryPromise({\n try: () => buildInspectPromptPromise(context),\n catch: (cause) =>\n new ProcessSpawnError({\n command: 'inspect-agent',\n args: ['buildInspectPrompt', context.beadId],\n message: cause instanceof Error ? cause.message : String(cause),\n cause,\n }),\n });\n}\n\n/**\n * Effect-typed variant of {@link spawnInspectAgent}. Never fails — the legacy\n * Promise returns `{ success: false, error }` instead of throwing.\n */\nexport function spawnInspectAgent(\n context: InspectContext,\n opts: { deep?: boolean } = {},\n): Effect.Effect<{\n success: boolean;\n skipped?: boolean;\n runId?: string;\n tmuxSession?: string;\n message: string;\n error?: string;\n}> {\n return Effect.promise(() => spawnInspectAgentPromise(context, opts));\n}\n\n/**\n * Effect-typed variant of {@link onInspectComplete}. Never fails.\n */\nexport function onInspectComplete(\n projectKey: string,\n issueId: string,\n beadId: string,\n status: 'passed' | 'failed',\n workspacePath: string,\n): Effect.Effect<void> {\n return Effect.promise(() => onInspectCompletePromise(projectKey, issueId, beadId, status, workspacePath));\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"inspect-agent-CKF5-SJr.js","names":["loadYamlConfig"],"sources":["../../src/lib/cloister/inspect-checkpoints.ts","../../src/lib/cloister/inspect-agent.ts"],"sourcesContent":["/**\n * PAN-382: Inspection checkpoint system.\n *\n * Tracks commit SHAs where inspections passed. The active inspection diff is\n * scoped to the parent of HEAD because the work role contract is one bead per\n * commit; checkpoints remain the durable record after a pass.\n */\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport { join } from 'path';\nimport { homedir } from 'os';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\nimport { Effect } from 'effect';\nimport { GitError } from '../errors.js';\n\nconst execAsync = promisify(exec);\n\nconst OVERDECK_HOME = join(homedir(), '.overdeck');\n\nexport interface InspectCheckpoint {\n beadId: string;\n commitSha: string;\n passedAt: string; // ISO 8601\n}\n\nexport interface InspectCheckpointFile {\n issueId: string;\n checkpoints: InspectCheckpoint[];\n}\n\n/**\n * Get the directory for a project's inspect checkpoints.\n */\nfunction getCheckpointDir(projectKey: string): string {\n return join(OVERDECK_HOME, 'specialists', projectKey, 'inspect-agent', 'checkpoints');\n}\n\n/**\n * Get the checkpoint file path for an issue.\n */\nfunction getCheckpointPath(projectKey: string, issueId: string): string {\n return join(getCheckpointDir(projectKey), `${issueId.toUpperCase()}.json`);\n}\n\n/**\n * Load checkpoints for an issue. Returns null if no checkpoints exist.\n */\nexport function loadCheckpoints(projectKey: string, issueId: string): InspectCheckpointFile | null {\n const filePath = getCheckpointPath(projectKey, issueId);\n if (!existsSync(filePath)) return null;\n\n try {\n return JSON.parse(readFileSync(filePath, 'utf-8'));\n } catch {\n return null;\n }\n}\n\n/**\n * Get the last checkpoint for an issue, or null if none exist.\n */\nexport function getLastCheckpoint(projectKey: string, issueId: string): InspectCheckpoint | null {\n const data = loadCheckpoints(projectKey, issueId);\n if (!data || data.checkpoints.length === 0) return null;\n return data.checkpoints[data.checkpoints.length - 1];\n}\n\n/**\n * Save a new checkpoint after a successful inspection.\n */\nexport function saveCheckpoint(\n projectKey: string,\n issueId: string,\n beadId: string,\n commitSha: string\n): InspectCheckpoint {\n const dir = getCheckpointDir(projectKey);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n const data = loadCheckpoints(projectKey, issueId) || {\n issueId: issueId.toUpperCase(),\n checkpoints: [],\n };\n\n const checkpoint: InspectCheckpoint = {\n beadId,\n commitSha,\n passedAt: new Date().toISOString(),\n };\n\n data.checkpoints.push(checkpoint);\n writeFileSync(getCheckpointPath(projectKey, issueId), JSON.stringify(data, null, 2));\n\n return checkpoint;\n}async function getDiffBasePromise(_projectKey: string, _issueId: string, workspacePath: string): Promise<string> {\n try {\n const { stdout } = await execAsync('git rev-parse HEAD^', {\n cwd: workspacePath,\n encoding: 'utf-8',\n });\n return stdout.trim();\n } catch {\n // Fallback to 'main' if the branch has no parent commit.\n return 'main';\n }\n}async function getDiffStatsPromise(workspacePath: string, diffBase: string): Promise<string> {\n try {\n const { stdout } = await execAsync(`git diff --stat ${diffBase}...HEAD`, {\n cwd: workspacePath,\n encoding: 'utf-8',\n });\n return stdout.trim() || 'No changes detected';\n } catch {\n return 'Unable to compute diff stats';\n }\n}async function getCurrentHeadPromise(workspacePath: string): Promise<string> {\n try {\n const { stdout } = await execAsync('git rev-parse HEAD', {\n cwd: workspacePath,\n encoding: 'utf-8',\n });\n return stdout.trim();\n } catch {\n return 'unknown';\n }\n}\n\n// ─── PAN-1249: additive Effect variants ───────────────────────────────────────\n\n/**\n * Effect-typed variant of {@link getDiffBase}. Always succeeds — falls back to\n * `'main'` if `git merge-base` fails, matching the Promise version's behavior.\n */\nexport function getDiffBase(\n _projectKey: string,\n _issueId: string,\n workspacePath: string,\n): Effect.Effect<string> {\n return Effect.tryPromise({\n try: () => execAsync('git rev-parse HEAD^', { cwd: workspacePath, encoding: 'utf-8' }),\n catch: (cause) => new GitError({ command: ['git', 'rev-parse', 'HEAD^'], stderr: String(cause), exitCode: -1, cause }),\n }).pipe(\n Effect.map(({ stdout }) => stdout.trim()),\n Effect.orElseSucceed(() => 'main'),\n );\n}\n\n/**\n * Effect-typed variant of {@link getDiffStats}. Always succeeds — returns a\n * human-readable fallback string when the diff command fails.\n */\nexport function getDiffStats(\n workspacePath: string,\n diffBase: string,\n): Effect.Effect<string> {\n return Effect.tryPromise({\n try: () => execAsync(`git diff --stat ${diffBase}...HEAD`, { cwd: workspacePath, encoding: 'utf-8' }),\n catch: (cause) => new GitError({ command: ['git', 'diff', '--stat', `${diffBase}...HEAD`], stderr: String(cause), exitCode: -1, cause }),\n }).pipe(\n Effect.map(({ stdout }) => stdout.trim() || 'No changes detected'),\n Effect.orElseSucceed(() => 'Unable to compute diff stats'),\n );\n}\n\n/**\n * Effect-typed variant of {@link getCurrentHead}. Always succeeds — returns\n * `'unknown'` on failure to preserve the Promise version's contract.\n */\nexport function getCurrentHead(workspacePath: string): Effect.Effect<string> {\n return Effect.tryPromise({\n try: () => execAsync('git rev-parse HEAD', { cwd: workspacePath, encoding: 'utf-8' }),\n catch: (cause) => new GitError({ command: ['git', 'rev-parse', 'HEAD'], stderr: String(cause), exitCode: -1, cause }),\n }).pipe(\n Effect.map(({ stdout }) => stdout.trim()),\n Effect.orElseSucceed(() => 'unknown'),\n );\n}\n","/**\n * PAN-382: Inspect Agent — Per-step verification specialist.\n *\n * Spawns after each bead completion to verify the implementation matches\n * its specification and architectural constraints before the agent\n * proceeds to the next bead.\n */\n\nimport { readFileSync, existsSync, writeFileSync, mkdirSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { homedir } from 'os';\nimport { randomUUID } from 'crypto';\nimport { fileURLToPath } from 'url';\nimport { exec, execFile } from 'child_process';\nimport { promisify } from 'util';\nimport { Effect } from 'effect';\nimport { ProcessSpawnError } from '../errors.js';\nimport {\n getDiffBase,\n getDiffStats,\n getCurrentHead,\n saveCheckpoint,\n} from './inspect-checkpoints.js';\nimport { setReviewStatusSync } from '../review-status.js';\nimport { withBdMutex } from '../bd-mutex.js';\nimport { generateLauncherScriptSync } from '../launcher-generator.js';\nimport {\n createSession,\n killSession,\n sessionExists,\n} from '../tmux.js';\nimport { loadConfigSync as loadYamlConfig, resolveModel } from '../config-yaml.js';\nimport { getClaudePermissionFlagsSync } from '../claude-permissions.js';\nimport {\n getProviderForModelSync,\n setupCredentialFileAuthSync,\n clearCredentialFileAuthSync,\n} from '../providers.js';\nimport type { ModelId } from '../settings.js';\nimport { getProviderEnvForModel, saveAgentRuntimeState, saveAgentState } from '../agents.js';\nimport { isIssueClosed } from './issue-closed.js';\nimport { readWorkspacePlanSync } from '../vbrief/io.js';\nimport { resolveTieredExecutionEnabled } from '../agents/tier-table.js';\nimport {\n deliverCommitForReview,\n loadPrdDraft,\n spawnTierSupervisor,\n supervisorAgentId,\n} from '../agents/tier-supervisor.js';\n\nconst execAsync = promisify(exec);\nconst execFileAsync = promisify(execFile);\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n/**\n * Context for an inspection request\n */\nexport interface InspectContext {\n projectKey: string;\n projectPath: string;\n issueId: string;\n /** Canonical vBRIEF item id being inspected. */\n beadId: string;\n /** Original bd tracker id, when the caller passed one that differs from the vBRIEF item id. */\n trackerBeadId?: string;\n workspace: string;\n branch?: string;\n}\n\n/**\n * Result of inspection\n */\nexport interface InspectResult {\n success: boolean;\n inspectResult: 'PASS' | 'BLOCKED';\n beadId: string;\n notes?: string;\n}\n\n/**\n * Read a bead's description using the bd CLI.\n */\nasync function getBeadDescription(beadId: string, workspacePath: string): Promise<string> {\n try {\n const { stdout } = await execFileAsync('bd', ['show', beadId, '--json'], {\n cwd: workspacePath,\n encoding: 'utf-8',\n });\n const bead = JSON.parse(stdout);\n const parts: string[] = [];\n if (bead.title) parts.push(`**Title:** ${bead.title}`);\n if (bead.description) parts.push(`**Description:** ${bead.description}`);\n if (bead.acceptance) parts.push(`**Acceptance Criteria:** ${bead.acceptance}`);\n if (bead.notes) parts.push(`**Notes:** ${bead.notes}`);\n if (bead.labels?.length) parts.push(`**Labels:** ${bead.labels.join(', ')}`);\n return parts.join('\\n\\n') || `Bead ${beadId} (no description available)`;\n } catch {\n try {\n const { stdout } = await execFileAsync('bd', ['show', beadId], {\n cwd: workspacePath,\n encoding: 'utf-8',\n });\n return stdout.trim() || `Bead ${beadId} (no description available)`;\n } catch {\n return `Bead ${beadId} (unable to read bead description)`;\n }\n }\n}\n\nasync function buildInspectPromptPromise(context: InspectContext): Promise<string> {\n const templatePath = join(__dirname, 'prompts', 'inspect-agent.md');\n\n if (!existsSync(templatePath)) {\n throw new Error(`Inspect agent prompt template not found at ${templatePath}`);\n }\n\n const template = readFileSync(templatePath, 'utf-8');\n\n // Get bead description\n const beadDescription = await getBeadDescription(context.trackerBeadId ?? context.beadId, context.workspace);\n\n // Get diff scope\n const diffBase = await Effect.runPromise(getDiffBase(context.projectKey, context.issueId, context.workspace));\n const diffStats = await Effect.runPromise(getDiffStats(context.workspace, diffBase));\n\n const apiUrl = process.env.OVERDECK_DASHBOARD_URL || process.env.DASHBOARD_URL || `http://localhost:${process.env.API_PORT || process.env.PORT || '3011'}`;\n\n const prompt = template\n .replace(/\\{\\{apiUrl\\}\\}/g, apiUrl)\n .replace(/\\{\\{projectPath\\}\\}/g, context.projectPath)\n .replace(/\\{\\{issueId\\}\\}/g, context.issueId)\n .replace(/\\{\\{beadId\\}\\}/g, context.beadId)\n .replace(/\\{\\{workspacePath\\}\\}/g, context.workspace)\n .replace(/\\{\\{checkpoint\\}\\}/g, diffBase.substring(0, 8))\n .replace(/\\{\\{diffBase\\}\\}/g, diffBase)\n .replace(/\\{\\{diffStats\\}\\}/g, diffStats)\n .replace(/\\{\\{beadDescription\\}\\}/g, beadDescription)\n .replace(/\\{\\{resultStatus\\}\\}/g, '${RESULT_STATUS}')\n .replace(/\\{\\{resultNotes\\}\\}/g, '${RESULT_NOTES}');\n\n return `<!-- overdeck:orchestration-context-start -->\\n${prompt}\\n<!-- overdeck:orchestration-context-end -->`;\n}\n\nasync function routeInspectToStandingSupervisorIfEnabled(\n context: InspectContext,\n): Promise<{\n success: boolean;\n tmuxSession?: string;\n message: string;\n error?: string;\n} | undefined> {\n const { config } = loadYamlConfig();\n const tiered = config.tieredExecution;\n if (!tiered?.supervisor?.owns_inspection) return undefined;\n\n const doc = readWorkspacePlanSync(context.workspace);\n const enabled = resolveTieredExecutionEnabled(tiered, doc?.plan.metadata);\n if (!enabled) return undefined;\n\n const item = doc?.plan.items.find(candidate => candidate.id === context.beadId);\n if (!doc || !item) {\n throw new Error(\n `Standing supervisor inspection for ${context.issueId} bead ${context.beadId} requires a readable vBRIEF item in ${context.workspace}.`,\n );\n }\n\n const agentId = supervisorAgentId(context.issueId);\n if (!await Effect.runPromise(sessionExists(agentId))) {\n await spawnTierSupervisor(context.issueId, tiered.supervisor, { workspace: context.workspace });\n }\n\n setReviewStatusSync(context.issueId.toUpperCase(), {\n inspectStatus: 'inspecting',\n inspectNotes: `Inspecting bead ${context.beadId}`,\n inspectStartedAt: new Date().toISOString(),\n inspectBeadId: context.beadId,\n });\n\n const sha = await Effect.runPromise(getCurrentHead(context.workspace));\n const prdMarkdown = await loadPrdDraft(context.projectPath, context.issueId);\n await deliverCommitForReview({\n supervisorAgentId: agentId,\n workspacePath: context.workspace,\n issueId: context.issueId,\n item,\n sha,\n beadId: context.beadId,\n prdMarkdown,\n });\n\n return {\n success: true,\n tmuxSession: agentId,\n message: `Routed inspect for ${context.issueId} bead ${context.beadId} to standing supervisor`,\n };\n}\n\nasync function spawnInspectAgentPromise(\n context: InspectContext,\n opts: { deep?: boolean } = {},\n): Promise<{\n success: boolean;\n skipped?: boolean;\n runId?: string;\n tmuxSession?: string;\n message: string;\n error?: string;\n}> {\n const subRole = opts.deep ? 'inspect-deep' : 'inspect';\n const issueLower = context.issueId.toLowerCase();\n const beadSlug = context.beadId.replace(/[^a-z0-9-]/gi, '-').toLowerCase().slice(0, 24);\n const tmuxSession = `inspect-${issueLower}-${beadSlug}`;\n\n try {\n if (await isIssueClosed(context.issueId.toUpperCase())) {\n const message = `${context.issueId.toUpperCase()}: skipping inspect dispatch — issue is closed`;\n console.log(`[cloister] ${message}`);\n return {\n success: true,\n skipped: true,\n tmuxSession,\n message,\n };\n }\n\n const supervisorRoute = await routeInspectToStandingSupervisorIfEnabled(context);\n if (supervisorRoute) return supervisorRoute;\n\n if (await Effect.runPromise(sessionExists(tmuxSession))) {\n // Stale session left behind by a previous inspection run — clear it.\n await Effect.runPromise(killSession(tmuxSession)).catch(() => {});\n }\n\n const prompt = await Effect.runPromise(buildInspectPrompt(context));\n setReviewStatusSync(context.issueId.toUpperCase(), {\n inspectStatus: 'inspecting',\n inspectNotes: `Inspecting bead ${context.beadId}`,\n inspectStartedAt: new Date().toISOString(),\n inspectBeadId: context.beadId,\n });\n\n // Resolve model via the role primitive: work.<inspect|inspect-deep>.\n const { config } = loadYamlConfig();\n const model = resolveModel('work', subRole, config);\n\n // Provider env (BASE_URL/AUTH_TOKEN) for non-Anthropic models routed via cliproxy.\n const providerEnv = await getProviderEnvForModel(model);\n const provider = getProviderForModelSync(model as ModelId);\n if (provider.authType === 'credential-file') {\n setupCredentialFileAuthSync(provider, context.workspace);\n } else {\n clearCredentialFileAuthSync(context.workspace);\n }\n\n // Per-agent dir for prompt + launcher artifacts.\n const agentDir = join(homedir(), '.overdeck', 'agents', tmuxSession);\n mkdirSync(agentDir, { recursive: true });\n\n const promptFile = join(agentDir, 'task-prompt.md');\n writeFileSync(promptFile, prompt);\n\n const launcherScript = join(agentDir, 'launcher.sh');\n const sessionId = randomUUID();\n writeFileSync(\n launcherScript,\n generateLauncherScriptSync({\n role: 'work',\n workingDir: context.workspace,\n setTerminalEnv: true,\n unsetProviderEnv: true,\n providerExports: Object.entries(providerEnv)\n .map(([k, v]) => `export ${k}='${v.replace(/'/g, \"'\\\"'\\\"'\")}'`)\n .join('\\n') + (Object.keys(providerEnv).length ? '\\n' : ''),\n overdeckEnv: {\n agentId: tmuxSession,\n issueId: context.issueId,\n sessionType: subRole,\n },\n promptFile,\n // Inspect prompts are workflow-injected templates, not ambient .claude/agents\n // definitions. Passing --agent here skips launcher permission flags and can\n // strand the inspector at a permission dialog before it can send its verdict.\n baseCommand: 'claude',\n sessionId,\n model,\n permissionFlags: getClaudePermissionFlagsSync(),\n }),\n { mode: 0o755 },\n );\n\n const envForTmux: Record<string, string> = {\n OVERDECK_AGENT_ID: tmuxSession,\n OVERDECK_ISSUE_ID: context.issueId,\n OVERDECK_SESSION_TYPE: subRole,\n ...providerEnv,\n };\n\n await Effect.runPromise(createSession(\n tmuxSession,\n context.workspace,\n `bash '${launcherScript}'`,\n { env: envForTmux },\n ));\n\n saveAgentRuntimeState(tmuxSession, {\n state: 'active',\n lastActivity: new Date().toISOString(),\n currentIssue: context.issueId,\n });\n\n // PAN-1834 — write a minimal state.json so inspect agents are enumerated by\n // listRunningAgents and scanned by the enrichment poller for pending input.\n await Effect.runPromise(saveAgentState({\n id: tmuxSession,\n issueId: context.issueId,\n workspace: context.workspace,\n role: 'work',\n // The inspect launcher hardcodes `baseCommand: 'claude'` (above), so the\n // agent always runs under claude-code — record it. `harness` is optional on\n // AgentState but maps to a NOT NULL column; omitting it made the cache\n // backfill skip the agent (invisible) or, pre-PAN-1972, crash the boot\n // decode. PAN-1973.\n harness: 'claude-code',\n model,\n status: 'starting',\n startedAt: new Date().toISOString(),\n inspectSubRole: subRole,\n }));\n\n return {\n success: true,\n runId: sessionId,\n tmuxSession,\n message: `Spawned ${subRole} for ${context.issueId} bead ${context.beadId}`,\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n success: false,\n tmuxSession,\n message: `Failed to spawn ${subRole}: ${message}`,\n error: message,\n };\n }\n}async function onInspectCompletePromise(\n projectKey: string,\n issueId: string,\n beadId: string,\n status: 'passed' | 'failed',\n workspacePath: string\n): Promise<void> {\n if (status === 'passed') {\n const commitSha = await Effect.runPromise(getCurrentHead(workspacePath));\n saveCheckpoint(projectKey, issueId, beadId, commitSha);\n console.log(`[inspect] Checkpoint saved for ${issueId} bead ${beadId} at ${commitSha.substring(0, 8)}`);\n\n } else {\n console.log(`[inspect] Bead ${beadId} blocked for ${issueId} — no checkpoint saved`);\n }\n}\n\n// ─── PAN-1249: additive Effect variants ───────────────────────────────────────\n\n/**\n * Effect-typed variant of {@link buildInspectPrompt}.\n * Fails with `ProcessSpawnError` when the prompt template is missing or the\n * underlying git/bd helpers throw (the legacy Promise version throws on the\n * missing-template path).\n */\nexport function buildInspectPrompt(\n context: InspectContext,\n): Effect.Effect<string, ProcessSpawnError> {\n return Effect.tryPromise({\n try: () => buildInspectPromptPromise(context),\n catch: (cause) =>\n new ProcessSpawnError({\n command: 'inspect-agent',\n args: ['buildInspectPrompt', context.beadId],\n message: cause instanceof Error ? cause.message : String(cause),\n cause,\n }),\n });\n}\n\n/**\n * Effect-typed variant of {@link spawnInspectAgent}. Never fails — the legacy\n * Promise returns `{ success: false, error }` instead of throwing.\n */\nexport function spawnInspectAgent(\n context: InspectContext,\n opts: { deep?: boolean } = {},\n): Effect.Effect<{\n success: boolean;\n skipped?: boolean;\n runId?: string;\n tmuxSession?: string;\n message: string;\n error?: string;\n}> {\n return Effect.promise(() => spawnInspectAgentPromise(context, opts));\n}\n\n/**\n * Effect-typed variant of {@link onInspectComplete}. Never fails.\n */\nexport function onInspectComplete(\n projectKey: string,\n issueId: string,\n beadId: string,\n status: 'passed' | 'failed',\n workspacePath: string,\n): Effect.Effect<void> {\n return Effect.promise(() => onInspectCompletePromise(projectKey, issueId, beadId, status, workspacePath));\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;aAawC;AAExC,MAAM,YAAY,UAAU,KAAK;AAEjC,MAAM,gBAAgB,KAAK,SAAS,EAAE,YAAY;;;;AAgBlD,SAAS,iBAAiB,YAA4B;AACpD,QAAO,KAAK,eAAe,eAAe,YAAY,iBAAiB,cAAc;;;;;AAMvF,SAAS,kBAAkB,YAAoB,SAAyB;AACtE,QAAO,KAAK,iBAAiB,WAAW,EAAE,GAAG,QAAQ,aAAa,CAAC,OAAO;;;;;AAM5E,SAAgB,gBAAgB,YAAoB,SAA+C;CACjG,MAAM,WAAW,kBAAkB,YAAY,QAAQ;AACvD,KAAI,CAAC,WAAW,SAAS,CAAE,QAAO;AAElC,KAAI;AACF,SAAO,KAAK,MAAM,aAAa,UAAU,QAAQ,CAAC;SAC5C;AACN,SAAO;;;;;;AAgBX,SAAgB,eACd,YACA,SACA,QACA,WACmB;CACnB,MAAM,MAAM,iBAAiB,WAAW;AACxC,KAAI,CAAC,WAAW,IAAI,CAClB,WAAU,KAAK,EAAE,WAAW,MAAM,CAAC;CAGrC,MAAM,OAAO,gBAAgB,YAAY,QAAQ,IAAI;EACnD,SAAS,QAAQ,aAAa;EAC9B,aAAa,EAAE;EAChB;CAED,MAAM,aAAgC;EACpC;EACA;EACA,2BAAU,IAAI,MAAM,EAAC,aAAa;EACnC;AAED,MAAK,YAAY,KAAK,WAAW;AACjC,eAAc,kBAAkB,YAAY,QAAQ,EAAE,KAAK,UAAU,MAAM,MAAM,EAAE,CAAC;AAEpF,QAAO;;;;;;AAwCT,SAAgB,YACd,aACA,UACA,eACuB;AACvB,QAAO,OAAO,WAAW;EACvB,WAAW,UAAU,uBAAuB;GAAE,KAAK;GAAe,UAAU;GAAS,CAAC;EACtF,QAAQ,UAAU,IAAI,SAAS;GAAE,SAAS;IAAC;IAAO;IAAa;IAAQ;GAAE,QAAQ,OAAO,MAAM;GAAE,UAAU;GAAI;GAAO,CAAC;EACvH,CAAC,CAAC,KACD,OAAO,KAAK,EAAE,aAAa,OAAO,MAAM,CAAC,EACzC,OAAO,oBAAoB,OAAO,CACnC;;;;;;AAOH,SAAgB,aACd,eACA,UACuB;AACvB,QAAO,OAAO,WAAW;EACvB,WAAW,UAAU,mBAAmB,SAAS,UAAU;GAAE,KAAK;GAAe,UAAU;GAAS,CAAC;EACrG,QAAQ,UAAU,IAAI,SAAS;GAAE,SAAS;IAAC;IAAO;IAAQ;IAAU,GAAG,SAAS;IAAS;GAAE,QAAQ,OAAO,MAAM;GAAE,UAAU;GAAI;GAAO,CAAC;EACzI,CAAC,CAAC,KACD,OAAO,KAAK,EAAE,aAAa,OAAO,MAAM,IAAI,sBAAsB,EAClE,OAAO,oBAAoB,+BAA+B,CAC3D;;;;;;AAOH,SAAgB,eAAe,eAA8C;AAC3E,QAAO,OAAO,WAAW;EACvB,WAAW,UAAU,sBAAsB;GAAE,KAAK;GAAe,UAAU;GAAS,CAAC;EACrF,QAAQ,UAAU,IAAI,SAAS;GAAE,SAAS;IAAC;IAAO;IAAa;IAAO;GAAE,QAAQ,OAAO,MAAM;GAAE,UAAU;GAAI;GAAO,CAAC;EACtH,CAAC,CAAC,KACD,OAAO,KAAK,EAAE,aAAa,OAAO,MAAM,CAAC,EACzC,OAAO,oBAAoB,UAAU,CACtC;;;;;;;;;;;aCjK8C;oBAOS;yBAEY;WAKlD;kBAC+D;yBACX;gBAK/C;aAEoE;mBAC3C;SACM;iBACgB;sBAMlC;AAEpB,UAAU,KAAK;AACjC,MAAM,gBAAgB,UAAU,SAAS;AAGzC,MAAM,YAAY,QADC,cAAc,OAAO,KAAK,IACT,CAAC;;;;AA8BrC,eAAe,mBAAmB,QAAgB,eAAwC;AACxF,KAAI;EACF,MAAM,EAAE,WAAW,MAAM,cAAc,MAAM;GAAC;GAAQ;GAAQ;GAAS,EAAE;GACvE,KAAK;GACL,UAAU;GACX,CAAC;EACF,MAAM,OAAO,KAAK,MAAM,OAAO;EAC/B,MAAM,QAAkB,EAAE;AAC1B,MAAI,KAAK,MAAO,OAAM,KAAK,cAAc,KAAK,QAAQ;AACtD,MAAI,KAAK,YAAa,OAAM,KAAK,oBAAoB,KAAK,cAAc;AACxE,MAAI,KAAK,WAAY,OAAM,KAAK,4BAA4B,KAAK,aAAa;AAC9E,MAAI,KAAK,MAAO,OAAM,KAAK,cAAc,KAAK,QAAQ;AACtD,MAAI,KAAK,QAAQ,OAAQ,OAAM,KAAK,eAAe,KAAK,OAAO,KAAK,KAAK,GAAG;AAC5E,SAAO,MAAM,KAAK,OAAO,IAAI,QAAQ,OAAO;SACtC;AACN,MAAI;GACF,MAAM,EAAE,WAAW,MAAM,cAAc,MAAM,CAAC,QAAQ,OAAO,EAAE;IAC7D,KAAK;IACL,UAAU;IACX,CAAC;AACF,UAAO,OAAO,MAAM,IAAI,QAAQ,OAAO;UACjC;AACN,UAAO,QAAQ,OAAO;;;;AAK5B,eAAe,0BAA0B,SAA0C;CACjF,MAAM,eAAe,KAAK,WAAW,WAAW,mBAAmB;AAEnE,KAAI,CAAC,WAAW,aAAa,CAC3B,OAAM,IAAI,MAAM,8CAA8C,eAAe;CAG/E,MAAM,WAAW,aAAa,cAAc,QAAQ;CAGpD,MAAM,kBAAkB,MAAM,mBAAmB,QAAQ,iBAAiB,QAAQ,QAAQ,QAAQ,UAAU;CAG5G,MAAM,WAAW,MAAM,OAAO,WAAW,YAAY,QAAQ,YAAY,QAAQ,SAAS,QAAQ,UAAU,CAAC;CAC7G,MAAM,YAAY,MAAM,OAAO,WAAW,aAAa,QAAQ,WAAW,SAAS,CAAC;CAEpF,MAAM,SAAS,QAAQ,IAAI,0BAA0B,QAAQ,IAAI,iBAAiB,oBAAoB,QAAQ,IAAI,YAAY,QAAQ,IAAI,QAAQ;AAelJ,QAAO,kDAbQ,SACZ,QAAQ,mBAAmB,OAAO,CAClC,QAAQ,wBAAwB,QAAQ,YAAY,CACpD,QAAQ,oBAAoB,QAAQ,QAAQ,CAC5C,QAAQ,mBAAmB,QAAQ,OAAO,CAC1C,QAAQ,0BAA0B,QAAQ,UAAU,CACpD,QAAQ,uBAAuB,SAAS,UAAU,GAAG,EAAE,CAAC,CACxD,QAAQ,qBAAqB,SAAS,CACtC,QAAQ,sBAAsB,UAAU,CACxC,QAAQ,4BAA4B,gBAAgB,CACpD,QAAQ,yBAAyB,mBAAmB,CACpD,QAAQ,wBAAwB,kBAE4B,CAAC;;AAGlE,eAAe,0CACb,SAMa;CACb,MAAM,EAAE,WAAWA,gBAAgB;CACnC,MAAM,SAAS,OAAO;AACtB,KAAI,CAAC,QAAQ,YAAY,gBAAiB,QAAO,KAAA;CAEjD,MAAM,MAAM,sBAAsB,QAAQ,UAAU;AAEpD,KAAI,CADY,8BAA8B,QAAQ,KAAK,KAAK,SACpD,CAAE,QAAO,KAAA;CAErB,MAAM,OAAO,KAAK,KAAK,MAAM,MAAK,cAAa,UAAU,OAAO,QAAQ,OAAO;AAC/E,KAAI,CAAC,OAAO,CAAC,KACX,OAAM,IAAI,MACR,sCAAsC,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,sCAAsC,QAAQ,UAAU,GACtI;CAGH,MAAM,UAAU,kBAAkB,QAAQ,QAAQ;AAClD,KAAI,CAAC,MAAM,OAAO,WAAW,cAAc,QAAQ,CAAC,CAClD,OAAM,oBAAoB,QAAQ,SAAS,OAAO,YAAY,EAAE,WAAW,QAAQ,WAAW,CAAC;AAGjG,qBAAoB,QAAQ,QAAQ,aAAa,EAAE;EACjD,eAAe;EACf,cAAc,mBAAmB,QAAQ;EACzC,mCAAkB,IAAI,MAAM,EAAC,aAAa;EAC1C,eAAe,QAAQ;EACxB,CAAC;CAEF,MAAM,MAAM,MAAM,OAAO,WAAW,eAAe,QAAQ,UAAU,CAAC;CACtE,MAAM,cAAc,MAAM,aAAa,QAAQ,aAAa,QAAQ,QAAQ;AAC5E,OAAM,uBAAuB;EAC3B,mBAAmB;EACnB,eAAe,QAAQ;EACvB,SAAS,QAAQ;EACjB;EACA;EACA,QAAQ,QAAQ;EAChB;EACD,CAAC;AAEF,QAAO;EACL,SAAS;EACT,aAAa;EACb,SAAS,sBAAsB,QAAQ,QAAQ,QAAQ,QAAQ,OAAO;EACvE;;AAGH,eAAe,yBACb,SACA,OAA2B,EAAE,EAQ5B;CACD,MAAM,UAAU,KAAK,OAAO,iBAAiB;CAG7C,MAAM,cAAc,WAFD,QAAQ,QAAQ,aAEM,CAAC,GADzB,QAAQ,OAAO,QAAQ,gBAAgB,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,GAC/B;AAErD,KAAI;AACF,MAAI,MAAM,cAAc,QAAQ,QAAQ,aAAa,CAAC,EAAE;GACtD,MAAM,UAAU,GAAG,QAAQ,QAAQ,aAAa,CAAC;AACjD,WAAQ,IAAI,cAAc,UAAU;AACpC,UAAO;IACL,SAAS;IACT,SAAS;IACT;IACA;IACD;;EAGH,MAAM,kBAAkB,MAAM,0CAA0C,QAAQ;AAChF,MAAI,gBAAiB,QAAO;AAE5B,MAAI,MAAM,OAAO,WAAW,cAAc,YAAY,CAAC,CAErD,OAAM,OAAO,WAAW,YAAY,YAAY,CAAC,CAAC,YAAY,GAAG;EAGnE,MAAM,SAAS,MAAM,OAAO,WAAW,mBAAmB,QAAQ,CAAC;AACnE,sBAAoB,QAAQ,QAAQ,aAAa,EAAE;GACjD,eAAe;GACf,cAAc,mBAAmB,QAAQ;GACzC,mCAAkB,IAAI,MAAM,EAAC,aAAa;GAC1C,eAAe,QAAQ;GACxB,CAAC;EAGF,MAAM,EAAE,WAAWA,gBAAgB;EACnC,MAAM,QAAQ,aAAa,QAAQ,SAAS,OAAO;EAGnD,MAAM,cAAc,MAAM,uBAAuB,MAAM;EACvD,MAAM,WAAW,wBAAwB,MAAiB;AAC1D,MAAI,SAAS,aAAa,kBACxB,6BAA4B,UAAU,QAAQ,UAAU;MAExD,6BAA4B,QAAQ,UAAU;EAIhD,MAAM,WAAW,KAAK,SAAS,EAAE,aAAa,UAAU,YAAY;AACpE,YAAU,UAAU,EAAE,WAAW,MAAM,CAAC;EAExC,MAAM,aAAa,KAAK,UAAU,iBAAiB;AACnD,gBAAc,YAAY,OAAO;EAEjC,MAAM,iBAAiB,KAAK,UAAU,cAAc;EACpD,MAAM,YAAY,YAAY;AAC9B,gBACE,gBACA,2BAA2B;GACzB,MAAM;GACN,YAAY,QAAQ;GACpB,gBAAgB;GAChB,kBAAkB;GAClB,iBAAiB,OAAO,QAAQ,YAAY,CACzC,KAAK,CAAC,GAAG,OAAO,UAAU,EAAE,IAAI,EAAE,QAAQ,MAAM,UAAU,CAAC,GAAG,CAC9D,KAAK,KAAK,IAAI,OAAO,KAAK,YAAY,CAAC,SAAS,OAAO;GAC1D,aAAa;IACX,SAAS;IACT,SAAS,QAAQ;IACjB,aAAa;IACd;GACD;GAIA,aAAa;GACb;GACA;GACA,iBAAiB,8BAA8B;GAChD,CAAC,EACF,EAAE,MAAM,KAAO,CAChB;EAED,MAAM,aAAqC;GACzC,mBAAmB;GACnB,mBAAmB,QAAQ;GAC3B,uBAAuB;GACvB,GAAG;GACJ;AAED,QAAM,OAAO,WAAW,cACtB,aACA,QAAQ,WACR,SAAS,eAAe,IACxB,EAAE,KAAK,YAAY,CACpB,CAAC;AAEF,wBAAsB,aAAa;GACjC,OAAO;GACP,+BAAc,IAAI,MAAM,EAAC,aAAa;GACtC,cAAc,QAAQ;GACvB,CAAC;AAIF,QAAM,OAAO,WAAW,eAAe;GACrC,IAAI;GACJ,SAAS,QAAQ;GACjB,WAAW,QAAQ;GACnB,MAAM;GAMN,SAAS;GACT;GACA,QAAQ;GACR,4BAAW,IAAI,MAAM,EAAC,aAAa;GACnC,gBAAgB;GACjB,CAAC,CAAC;AAEH,SAAO;GACL,SAAS;GACT,OAAO;GACP;GACA,SAAS,WAAW,QAAQ,OAAO,QAAQ,QAAQ,QAAQ,QAAQ;GACpE;UACM,OAAO;EACd,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;AACtE,SAAO;GACL,SAAS;GACT;GACA,SAAS,mBAAmB,QAAQ,IAAI;GACxC,OAAO;GACR;;;AAEJ,eAAe,yBACd,YACA,SACA,QACA,QACA,eACe;AACf,KAAI,WAAW,UAAU;EACvB,MAAM,YAAY,MAAM,OAAO,WAAW,eAAe,cAAc,CAAC;AACxE,iBAAe,YAAY,SAAS,QAAQ,UAAU;AACtD,UAAQ,IAAI,kCAAkC,QAAQ,QAAQ,OAAO,MAAM,UAAU,UAAU,GAAG,EAAE,GAAG;OAGvG,SAAQ,IAAI,kBAAkB,OAAO,eAAe,QAAQ,wBAAwB;;;;;;;;AAYxF,SAAgB,mBACd,SAC0C;AAC1C,QAAO,OAAO,WAAW;EACvB,WAAW,0BAA0B,QAAQ;EAC7C,QAAQ,UACN,IAAI,kBAAkB;GACpB,SAAS;GACT,MAAM,CAAC,sBAAsB,QAAQ,OAAO;GAC5C,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM;GAC/D;GACD,CAAC;EACL,CAAC;;;;;;AAOJ,SAAgB,kBACd,SACA,OAA2B,EAAE,EAQ5B;AACD,QAAO,OAAO,cAAc,yBAAyB,SAAS,KAAK,CAAC;;;;;AAMtE,SAAgB,kBACd,YACA,SACA,QACA,QACA,eACqB;AACrB,QAAO,OAAO,cAAc,yBAAyB,YAAY,SAAS,QAAQ,QAAQ,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { n as onInspectComplete } from "./inspect-agent-CKF5-SJr.js";
2
+ export { onInspectComplete };
@@ -2,7 +2,7 @@ import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
2
  import { a as init_activity_logger, t as emitActivityDetailedSync } from "./activity-logger-pcbf-e30.js";
3
3
  import { a as init_event_store, i as initEventStore } from "./event-store-DTJXZjCl.js";
4
4
  import { d as getMaxTurnDiffSummariesPerAgent, f as isTerminalTurnDiffSummaryStatus, l as INITIAL_READ_MODEL_STATE, p as trimTurnDiffSummaries, t as init_src, u as applyEvent } from "./src-fgbU-jJ-.js";
5
- import { A as listOverdeckAgentStatesSync, k as init_agent_state_sync } from "./review-status-BQjqQXZG.js";
5
+ import { A as listOverdeckAgentStatesSync, k as init_agent_state_sync } from "./review-status-B5ZASOo4.js";
6
6
  import { a as resolveSessionContextBriefingPath, d as init_agents, o as AgentsResolver, r as init_briefing_freshness } from "./briefing-freshness-CXhZdnB8.js";
7
7
  import { f as resolveStatusFile, i as init_paths } from "./paths-TE1GOZDr.js";
8
8
  import { n as listFeatureRegistryEntries, t as init_feature_registry_storage } from "./feature-registry-storage-CnGyNgAq.js";
@@ -12,7 +12,7 @@ import { i as init_linear_client, r as LinearClientOptionalLive, t as LinearClie
12
12
  import { i as init_github_client, r as GitHubClientOptionalLive, t as GitHubClient } from "./github-client-yjbXaqpR.js";
13
13
  import { i as init_rally_client, n as RallyClientLive, t as RallyClient } from "./rally-client-DYjtgTOu.js";
14
14
  import { a as resolveTrackerTypeSync, i as resolveGitHubIssueSync, n as init_tracker_utils } from "./tracker-utils-bpWs7Xyx.js";
15
- import { n as init_issue_service_singleton, t as getSharedIssueService } from "./issue-service-singleton-_AquSBTl.js";
15
+ import { n as init_issue_service_singleton, t as getSharedIssueService } from "./issue-service-singleton-CDGt__oQ.js";
16
16
  import { Context, Effect, Layer, Option, Queue, Stream } from "effect";
17
17
  import { basename, dirname, join, resolve } from "path";
18
18
  import { dirname as dirname$1 } from "node:path";
@@ -293,7 +293,7 @@ var init_read_model = __esmMin((() => {
293
293
  };
294
294
  const getSnapshot = Effect.gen(function* () {
295
295
  try {
296
- const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-Bnqv1uaa.js"));
296
+ const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-B8iu_TKV.js"));
297
297
  const currentIssues = cleanIssues(getSharedIssueService().getIssues());
298
298
  if (currentIssues.length > 0 || state.issuesRaw.length === 0) state = {
299
299
  ...state,
@@ -318,7 +318,7 @@ var init_read_model = __esmMin((() => {
318
318
  const getAgentIdBySessionId = (sessionId) => Effect.sync(() => state.agentIdBySessionId[sessionId] ?? null);
319
319
  const agentsResolver = yield* AgentsResolver;
320
320
  yield* Effect.gen(function* () {
321
- const { reconstructCacheAuto } = yield* Effect.promise(() => import("./reconstruct-cache-_tDZ2D72.js"));
321
+ const { reconstructCacheAuto } = yield* Effect.promise(() => import("./reconstruct-cache-C2pCltOq.js"));
322
322
  const [overdeckAgents, result] = yield* Effect.all([agentsResolver.list({}), Effect.promise(() => reconstructCacheAuto())]);
323
323
  const agentsById = Object.fromEntries(overdeckAgents.map((a) => [a.id, agentSnapshotFromOverdeck(a)]));
324
324
  let sequence = 0;
@@ -397,7 +397,7 @@ var init_read_model = __esmMin((() => {
397
397
  }
398
398
  })();
399
399
  try {
400
- const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-Bnqv1uaa.js"));
400
+ const { getSharedIssueService } = yield* Effect.promise(() => import("./issue-service-singleton-B8iu_TKV.js"));
401
401
  const issueService = getSharedIssueService();
402
402
  const mergeT0 = performance.now();
403
403
  const currentIssues = cleanIssues(issueService.getIssues());
@@ -437,7 +437,7 @@ var init_read_model = __esmMin((() => {
437
437
  payload: { issues: cleaned }
438
438
  });
439
439
  } catch {}
440
- import("./backlog-auto-trigger-COm_R96V.js").then(({ triggerDebouncedIncrementalPass }) => {
440
+ import("./backlog-auto-trigger-Cb8PR-5w.js").then(({ triggerDebouncedIncrementalPass }) => {
441
441
  triggerDebouncedIncrementalPass(process.cwd());
442
442
  }).catch(() => {});
443
443
  });
@@ -1403,4 +1403,4 @@ var init_issue_lifecycle = __esmMin((() => {
1403
1403
  //#endregion
1404
1404
  export { init_queue_position as _, EventStoreService as a, ReadModelService as c, init_read_model as d, toAgentResolution as f, findPositionInQueueSync as g, computeQueuePositionFromStatusSync as h, init_issue_lifecycle as i, ReadModelServiceLive as l, toRole as m, IssueLifecycleLive as n, EventStoreServiceLive as o, toAgentStatus as p, IssueLifecycleWithClientLive as r, init_domain_services as s, IssueLifecycle as t, getClosedIssueIdsForReadSource as u };
1405
1405
 
1406
- //# sourceMappingURL=issue-lifecycle-DnhQgddB.js.map
1406
+ //# sourceMappingURL=issue-lifecycle-5LbOcATP.js.map