@overdeck/desktop 0.45.23 → 0.46.0

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 (549) hide show
  1. package/drizzle/overdeck/0000_overdeck_init.sql +34 -0
  2. package/package.json +1 -1
  3. package/server/{acceptance-criteria-DOA0KgXx.js → acceptance-criteria-CCwFGICj.js} +2 -2
  4. package/server/activity-logger-CMthG6Vd.js +3 -0
  5. package/server/{activity-logger-DDlOIAML.js → activity-logger-CyteR4JO.js} +24 -13
  6. package/server/{advancing-selfheal-BBu6DSNm.js → advancing-selfheal-De1L-Sb4.js} +6 -6
  7. package/server/{agent-gc-BV1q_2EV.js → agent-gc-CBULruzm.js} +5 -5
  8. package/server/agent-state-VQk8fY9F.js +3 -0
  9. package/server/{agent-state-service-HoK8U4jW.js → agent-state-service-BlnSkRFA.js} +5 -5
  10. package/server/{agent-state-service-CnzFKSAQ.js → agent-state-service-hZpxIw1E.js} +1 -1
  11. package/server/agents-BKKkxKgK.js +3 -0
  12. package/server/{agents-B4Bjbkfv.js → agents-C5rWYhb6.js} +4 -4
  13. package/server/archive-planning-0FJ6Xd3b.js +2 -0
  14. package/server/{archive-planning-DYrYojxl.js → archive-planning-C0lAbNB_.js} +16 -24
  15. package/server/{artifact-index-jobs-C-xy7Z5v.js → artifact-index-jobs-ug6ZxIP5.js} +2 -2
  16. package/server/assemble-DnffNpOo.js +339 -0
  17. package/server/{backlog-auto-trigger-GtG71X8H.js → backlog-auto-trigger-Dh-i9PQf.js} +3 -3
  18. package/server/{behavior-B_-4EKF3.js → behavior-CfIg6pKp.js} +2 -2
  19. package/server/bridge-pool-patrol-CUFmjVDN.js +136 -0
  20. package/server/{briefing-freshness-DWdW7vUm.js → briefing-freshness-DHmCSLar.js} +2 -2
  21. package/server/{build-info-DgTqZkL5.js → build-info-BP160gU7.js} +1 -1
  22. package/server/{build-info-BT096lEl.js → build-info-CuFfxZxp.js} +5 -3
  23. package/server/{checkpoint-manager-DDqcGyu8.js → checkpoint-manager-DEWD82qK.js} +2 -2
  24. package/server/{checkpoint-manager-B7Bt29J0.js → checkpoint-manager-Dxh0FYsv.js} +1 -1
  25. package/server/checkpoint-worker.js +1 -1
  26. package/server/{checkpoints-C-AXLfYT.js → checkpoints-CZvbtLnr.js} +2 -2
  27. package/server/{checkpoints-CpgCjAlN.js → checkpoints-DMTgXuLG.js} +1 -1
  28. package/server/{claude-hooks-provision-C8wdRnN1.js → claude-hooks-provision-CN-xo-do.js} +1 -1
  29. package/server/{claude-hooks-provision-but-_qGY.js → claude-hooks-provision-fvy4RD2b.js} +13 -2
  30. package/server/{claude-permissions-H_5wHQZQ.js → claude-permissions-CN0cSCPp.js} +2 -2
  31. package/server/{claude-settings-overlay-CbSz0Dvb.js → claude-settings-overlay-CJn35FHQ.js} +2 -2
  32. package/server/{claude-settings-overlay-BTENVmYf.js → claude-settings-overlay-Dabi9slj.js} +1 -1
  33. package/server/cli-DmXETsw-.js +3 -0
  34. package/server/{cli-vBeXbPrq.js → cli-oCWYA1pE.js} +9 -9
  35. package/server/{cliproxy-Bgb2XCqi.js → cliproxy-C8mB3KuB.js} +2 -2
  36. package/server/{cliproxy-DW0V86F8.js → cliproxy-PGwTX_o8.js} +1 -1
  37. package/server/{close-issue-Dn_4c4G8.js → close-issue-D5MF5GqF.js} +5 -5
  38. package/server/{closed-issue-reaper-CWpY2uBw.js → closed-issue-reaper-CJ24u0Zt.js} +1 -1
  39. package/server/{closed-issue-reaper-hANY_ehE.js → closed-issue-reaper-Cltx86x5.js} +37 -16
  40. package/server/{codex-Dg7Is5yb.js → codex-BdEsUFWh.js} +1 -1
  41. package/server/{codex-TmSi-yTv.js → codex-Drlf5Xhf.js} +37 -8
  42. package/server/{codex-parser-C4gSH-IR.js → codex-parser-DpB89Vqa.js} +2 -2
  43. package/server/compaction-continuation-K2AxQX4H.js +200 -0
  44. package/server/{config-DjLOdbgT.js → config-B2IMcBxx.js} +4 -3
  45. package/server/{config-DUIhMN_T.js → config-DV-grfQc.js} +1 -1
  46. package/server/{config-CCvjQf27.js → config-Dr3pW6w6.js} +2 -2
  47. package/server/{config-yaml-DvyMuOle.js → config-yaml-CmOPzmBb.js} +290 -22
  48. package/server/{conflict-gate-CmrYpa47.js → conflict-gate-B9cN3SBi.js} +4 -4
  49. package/server/{conflict-gate-BSJkNTdp.js → conflict-gate-Dh754uyA.js} +1 -1
  50. package/server/context-layers-D6LZo3l1.js +4 -0
  51. package/server/context-layers-dR5YxHYB.js +37 -0
  52. package/server/{control-settings-aP1ANIlI.js → control-settings-C7DUehE1.js} +49 -19
  53. package/server/{conversation-compaction-CNbTLB86.js → conversation-compaction-BoqdDXWF.js} +8 -8
  54. package/server/{conversation-compaction-DiG5zWQq.js → conversation-compaction-Dj4FAKoZ.js} +1 -1
  55. package/server/{conversation-service-Du-MTNpJ.js → conversation-service-5aCnq1zR.js} +331 -20
  56. package/server/conversation-service-BCxl4f8Z.js +3 -0
  57. package/server/{conversations-DbOs1e9Q.js → conversations-BUpYsOZg.js} +5 -5
  58. package/server/{conversations-6mPANqvL.js → conversations-C34dyIb9.js} +1 -1
  59. package/server/{cost-Ca0YTWDw.js → cost-Bgcub5kW.js} +12 -2
  60. package/server/{cost-CW4WSe72.js → cost-CvxRrucd.js} +3 -3
  61. package/server/{cost-sync-C0VdGme1.js → cost-sync-Dv3LUaNW.js} +3 -3
  62. package/server/{dag-CdOjJVDT.js → dag-ombYYt4s.js} +2 -2
  63. package/server/{dangerous-git-ops-CT-IypG3.js → dangerous-git-ops-BcJPC5Rr.js} +1 -1
  64. package/server/dashboard-db-worker.js +7 -7
  65. package/server/deacon-DrXqT9LQ.js +4 -0
  66. package/server/{deacon-pRnyD5w9.js → deacon-hi9KLPLT.js} +2998 -2659
  67. package/server/{deacon-nudge-log-Bjg8U4Y9.js → deacon-nudge-log-BNBebzeL.js} +3 -3
  68. package/server/deacon-pending-lifecycle-Cpk0k7Hi.js +33 -0
  69. package/server/{deacon-swarm-DftYRDo8.js → deacon-swarm-DBxUaO-A.js} +13 -13
  70. package/server/deacon-swarm-I2JfX5Tg.js +2 -0
  71. package/server/deacon.js +14 -19
  72. package/server/dead-end-trip-CQcP70ND.js +13 -0
  73. package/server/delivery-Da0zEMY4.js +3 -0
  74. package/server/{deploy-patrol-Bjsho_ha.js → deploy-patrol-Df-Tmaq0.js} +69 -18
  75. package/server/deploy-queue-9SrhZR63.js +3 -0
  76. package/server/deploy-queue-UjKGYsDe.js +169 -0
  77. package/server/deploy-window-jOiPRHL0.js +3 -0
  78. package/server/{deploy-window-DeP_OIRk.js → deploy-window-rpqpWqHA.js} +40 -16
  79. package/server/{dev-supervisor-BpMoHlkR.js → dev-supervisor-CC46Ig8q.js} +2 -2
  80. package/server/{devcontainer-renderer-CtUgrVKW.js → devcontainer-renderer-68CSCRnu.js} +3 -3
  81. package/server/{dist-DyRx4cI7.js → dist-CJy72uEg.js} +1 -1
  82. package/server/dist-DSlxIU1H.js +3 -0
  83. package/server/{dist-src-BSoS7mkd.js → dist-src-Bik83hFi.js} +1 -1
  84. package/server/docker-BMVTSFL5.js +3 -0
  85. package/server/{docker-BK7HIcBj.js → docker-Dam7mbIB.js} +2 -2
  86. package/server/{dod-BrSfUHm0.js → dod-Dar-yheg.js} +8 -4
  87. package/server/durable-review-pipeline-CGZ5QBxh.js +17 -0
  88. package/server/durable-review-pipeline-jpgCJZFp.js +3 -0
  89. package/server/{ensure-devcontainer-DseivYEy.js → ensure-devcontainer-B057YA81.js} +4 -4
  90. package/server/{ensure-devcontainer-DRqaAkBR.js → ensure-devcontainer-C98V8yW-.js} +1 -1
  91. package/server/{esm-shims-CbI3BVkl.js → esm-shims-Br9BPdkR.js} +1 -1
  92. package/server/{event-store-Cr5PQwFC.js → event-store-ELqkVOn0.js} +1 -1
  93. package/server/{event-store-tdiY5eDZ.js → event-store-zY5MJHgF.js} +23 -4
  94. package/server/{events-CvvGK6LT.js → events-D6pyqhzM.js} +1 -1
  95. package/server/{events-CC1dgUpx.js → events-D9PR1IC0.js} +3 -3
  96. package/server/{factory-CynerjXO.js → factory-CRoOpGsF.js} +5 -5
  97. package/server/{feature-registry-population-B0pmAz0a.js → feature-registry-population--YUXU999.js} +4 -4
  98. package/server/{feature-registry-storage-_wUBRD3J.js → feature-registry-storage-BORBTo0y.js} +2 -2
  99. package/server/{features-Dhxz-wLc.js → features--nFkJY8v.js} +2 -2
  100. package/server/{feedback-target-iygZwmMc.js → feedback-target-C0ZzyHvU.js} +1 -1
  101. package/server/{feedback-target-CPS15Vte.js → feedback-target-Dt9BsapX.js} +8 -8
  102. package/server/{feedback-writer-C9b6ccN1.js → feedback-writer-BG0RUZiu.js} +5 -5
  103. package/server/{feedback-writer-qmiMbqTZ.js → feedback-writer-D1fm-5Z8.js} +1 -1
  104. package/server/flywheel-BekukH4i.js +2 -0
  105. package/server/flywheel-BiT3odRb.js +1092 -0
  106. package/server/flywheel-CLVB55Be.js +478 -0
  107. package/server/flywheel-merge-order-BJv1DZz1.js +462 -0
  108. package/server/flywheel-merge-order-BKw9o6ku.js +2 -0
  109. package/server/forge-CZbSg6Ds.js +383 -0
  110. package/server/forge-DK3blQb_.js +3 -0
  111. package/server/{from-CJ_aH5jD.js → from-D_4_dk7i.js} +1 -1
  112. package/server/{fts-db-CKgg0VKg.js → fts-db-BeOomFa-.js} +2 -2
  113. package/server/{fts-operations-BrL_VTRr.js → fts-operations-BdewJ_g9.js} +2 -2
  114. package/server/git-utils-CI6cwyyC.js +3 -0
  115. package/server/{git-utils-BVa07a4a.js → git-utils-ameCgDdy.js} +93 -3
  116. package/server/{github-app-CMBdIFBQ.js → github-app-CQ1Lo6LA.js} +19 -8
  117. package/server/{github-app-CPfoFAdV.js → github-app-DtAsvwzK.js} +1 -1
  118. package/server/{github-client--XVlDpwM.js → github-client-BfyDxuRN.js} +2 -2
  119. package/server/{github-client-B4QsdE-X.js → github-client-Cj0yl_07.js} +1 -1
  120. package/server/github-pr-lookup-BDq6Wznz.js +58 -0
  121. package/server/{harness-binary-CVio2m-u.js → harness-binary-DqkftwTb.js} +32 -6
  122. package/server/{harness-resolve-qHJBhy3Z.js → harness-resolve-CqMqM1Mb.js} +18 -9
  123. package/server/{health-events-C9B8y1Hm.js → health-events-CazRxJUS.js} +2 -2
  124. package/server/{health-events-CpfvuVmm.js → health-events-_xfTaOUs.js} +1 -1
  125. package/server/{hooks-DUXw8A0-.js → hooks-BO3QT1sn.js} +2 -2
  126. package/server/{hooks-ltecuFqZ.js → hooks-BnJsxlSq.js} +1 -1
  127. package/server/{hume-BEq0bUDg.js → hume-CDYJxqx-.js} +2 -2
  128. package/server/hume-Dq--7rOQ.js +3 -0
  129. package/server/{idle-stack-reaper-D7w9t3fE.js → idle-stack-reaper-BYqERdkE.js} +1 -1
  130. package/server/{idle-stack-reaper-w1ISSlhs.js → idle-stack-reaper-CnGx_PO_.js} +99 -6
  131. package/server/in-flight-guard-Bq3epG58.js +45 -0
  132. package/server/{infra-CzaSOgul.js → infra-BjuxvjdS.js} +80 -5
  133. package/server/{injection-oNZeoDhL.js → injection-DZxlV2al.js} +1 -1
  134. package/server/{injection-DZ0PfYa4.js → injection-UCf8EsjX.js} +191 -183
  135. package/server/{inspect-agent-DJKLWcVT.js → inspect-agent-6kylZnrm.js} +139 -82
  136. package/server/inspect-agent-BVwDrVrz.js +2 -0
  137. package/server/{internal-token-Bb4XeV2x.js → internal-token-DvMTQSOS.js} +2 -2
  138. package/server/{internal-token-DXdfprGr.js → internal-token-M9omeXM1.js} +1 -1
  139. package/server/{io-B3_AHDfr.js → io-VHvc0Ssp.js} +43 -26
  140. package/server/{issue-closed-zhdvQicO.js → issue-closed-B6KJkmHZ.js} +7 -7
  141. package/server/{issue-lifecycle-Dy4vd0Oa.js → issue-lifecycle-9gk3fnXN.js} +1 -1
  142. package/server/{issue-lifecycle-CreaCkjW.js → issue-lifecycle-C4Zj0WmE.js} +34 -28
  143. package/server/{issue-service-singleton-B5ushCvE.js → issue-service-singleton-DmCh7EHj.js} +10 -10
  144. package/server/{issue-service-singleton-DabvBWUp.js → issue-service-singleton-PMx8F1jr.js} +1 -1
  145. package/server/{issues-B6ToV6x1.js → issues-CgnQ1OGQ.js} +2 -2
  146. package/server/{jsonl-parser-Dhflo1SH.js → jsonl-parser-DJOH_O-w.js} +5 -4
  147. package/server/{label-cleanup-BKPJm4Hv.js → label-cleanup-Dv7AV_R1.js} +3 -3
  148. package/server/{label-reconciler-DdWbHEBu.js → label-reconciler--F85rufp.js} +4 -4
  149. package/server/{lifecycle-DfeyBDwA.js → lifecycle-CTdOWYMi.js} +2 -2
  150. package/server/{lifecycle-sycO16hj.js → lifecycle-DDN8ApVY.js} +6 -7
  151. package/server/{lifecycle-io-D8iNBcux.js → lifecycle-io-D-lGdzK3.js} +5 -5
  152. package/server/{lifecycle-io-Bsnr2K4F.js → lifecycle-io-D_zTLvP1.js} +1 -1
  153. package/server/{linear-client-D4zqMnX7.js → linear-client-BQU36QqE.js} +2 -2
  154. package/server/{linear-client-DqhDQO9k.js → linear-client-CY4O_Tu3.js} +1 -1
  155. package/server/linear-mcp-auth-BnU4TYfY.js +280 -0
  156. package/server/linear-mcp-auth-NYBq_oHZ.js +2 -0
  157. package/server/memory-fts-worker.js +1 -1
  158. package/server/{merge-C_ZEhbqI.js → merge-Bpx4jjht.js} +13 -11
  159. package/server/{merge-agent-XrB80vfT.js → merge-agent-DdMVSV2Y.js} +233 -83
  160. package/server/{merge-agent-BQM3a8z5.js → merge-agent-DrXa1CpW.js} +1 -1
  161. package/server/{merge-batch-Bwoyr8Je.js → merge-batch-C5q1c1GX.js} +1 -1
  162. package/server/merge-completeness-BMm8tMyZ.js +277 -0
  163. package/server/merge-completeness-D0ljXbk3.js +3 -0
  164. package/server/{merge-DK23JEdS.js → merge-idOG--29.js} +1 -1
  165. package/server/merge-ops-DdpTiEMt.js +2 -0
  166. package/server/merge-rebase-DGQpYJU3.js +2 -0
  167. package/server/{merge-rebase-C1KIVr0s.js → merge-rebase-xLnMlw5h.js} +3 -3
  168. package/server/merge-set-DH7ot3yz.js +89 -0
  169. package/server/merge-set-DzsOTBg5.js +3 -0
  170. package/server/{merge-sync-DZ9dojJn.js → merge-sync-CQ-LgZ1_.js} +406 -153
  171. package/server/merge-sync-Ca7F5JnQ.js +3 -0
  172. package/server/{merge-train-DxDfBTjr.js → merge-train-DTEMyIu4.js} +18 -8
  173. package/server/{merge-train-deps-CyYQUksx.js → merge-train-deps-CNPJzepw.js} +4 -4
  174. package/server/merge-verification-x3JO8Dtz.js +220 -0
  175. package/server/merged-docker-cleanup-worker-CTpC27Bs.js +107 -0
  176. package/server/merged-docker-cleanup-worker-Cdi9apm-.js +3 -0
  177. package/server/{multipart-parser-Dt8YPN5S.js → multipart-parser-IMSBfePV.js} +2 -2
  178. package/server/{no-resume-mode-Cx3K0hHi.js → no-resume-mode-C5ULAXwO.js} +1 -1
  179. package/server/node_modules/.package-lock.json +27 -27
  180. package/server/node_modules/@effect/platform-node/node_modules/@effect/platform-node-shared/package.json +3 -3
  181. package/server/node_modules/@google-cloud/common/package.json +2 -2
  182. package/server/node_modules/gaxios/build/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  183. package/server/node_modules/gaxios/build/esm/tsconfig.tsbuildinfo +1 -1
  184. package/server/node_modules/gaxios/package.json +1 -1
  185. package/server/node_modules/google-auth-library/build/src/auth/googleauth.js +24 -19
  186. package/server/node_modules/google-auth-library/package.json +1 -1
  187. package/server/node_modules/google-gax/build/protos/google/api/auth.proto +2 -1
  188. package/server/node_modules/google-gax/build/protos/google/api/backend.proto +12 -1
  189. package/server/node_modules/google-gax/build/protos/google/api/billing.proto +1 -1
  190. package/server/node_modules/google-gax/build/protos/google/api/client.proto +165 -53
  191. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1/resources.proto +1 -1
  192. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/quota_adjuster_settings.proto +7 -3
  193. package/server/node_modules/google-gax/build/protos/google/api/cloudquotas/v1beta/resources.proto +1 -1
  194. package/server/node_modules/google-gax/build/protos/google/api/config_change.proto +1 -1
  195. package/server/node_modules/google-gax/build/protos/google/api/context.proto +1 -1
  196. package/server/node_modules/google-gax/build/protos/google/api/control.proto +3 -3
  197. package/server/node_modules/google-gax/build/protos/google/api/distribution.proto +1 -1
  198. package/server/node_modules/google-gax/build/protos/google/api/documentation.proto +1 -1
  199. package/server/node_modules/google-gax/build/protos/google/api/endpoint.proto +1 -1
  200. package/server/node_modules/google-gax/build/protos/google/api/error_reason.proto +186 -1
  201. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/checked.proto +31 -3
  202. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/eval.proto +8 -9
  203. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/explain.proto +1 -2
  204. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/syntax.proto +20 -22
  205. package/server/node_modules/google-gax/build/protos/google/api/expr/v1alpha1/value.proto +2 -3
  206. package/server/node_modules/google-gax/build/protos/google/api/field_behavior.proto +1 -1
  207. package/server/node_modules/google-gax/build/protos/google/api/field_info.proto +1 -1
  208. package/server/node_modules/google-gax/build/protos/google/api/http.proto +1 -1
  209. package/server/node_modules/google-gax/build/protos/google/api/httpbody.proto +1 -1
  210. package/server/node_modules/google-gax/build/protos/google/api/label.proto +1 -1
  211. package/server/node_modules/google-gax/build/protos/google/api/launch_stage.proto +1 -1
  212. package/server/node_modules/google-gax/build/protos/google/api/log.proto +1 -1
  213. package/server/node_modules/google-gax/build/protos/google/api/logging.proto +1 -1
  214. package/server/node_modules/google-gax/build/protos/google/api/metric.proto +1 -1
  215. package/server/node_modules/google-gax/build/protos/google/api/monitored_resource.proto +1 -1
  216. package/server/node_modules/google-gax/build/protos/google/api/monitoring.proto +1 -1
  217. package/server/node_modules/google-gax/build/protos/google/api/policy.proto +1 -1
  218. package/server/node_modules/google-gax/build/protos/google/api/quota.proto +1 -1
  219. package/server/node_modules/google-gax/build/protos/google/api/resource.proto +1 -1
  220. package/server/node_modules/google-gax/build/protos/google/api/routing.proto +8 -4
  221. package/server/node_modules/google-gax/build/protos/google/api/service.proto +2 -3
  222. package/server/node_modules/google-gax/build/protos/google/api/source_info.proto +1 -1
  223. package/server/node_modules/google-gax/build/protos/google/api/system_parameter.proto +1 -1
  224. package/server/node_modules/google-gax/build/protos/google/api/usage.proto +7 -27
  225. package/server/node_modules/google-gax/build/protos/google/api/visibility.proto +1 -1
  226. package/server/node_modules/google-gax/build/protos/google/longrunning/operations.proto +20 -1
  227. package/server/node_modules/google-gax/build/protos/google/protobuf/any.proto +52 -108
  228. package/server/node_modules/google-gax/build/protos/google/protobuf/compiler/ruby/ruby_generated_code.proto +2 -0
  229. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_features.proto +21 -1
  230. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_file_options.proto +24 -0
  231. package/server/node_modules/google-gax/build/protos/google/protobuf/cpp_options.proto +15 -0
  232. package/server/node_modules/google-gax/build/protos/google/protobuf/descriptor.proto +118 -30
  233. package/server/node_modules/google-gax/build/protos/google/protobuf/field_mask.proto +16 -18
  234. package/server/node_modules/google-gax/build/protos/google/protobuf/internal_options.proto +8 -1
  235. package/server/node_modules/google-gax/build/protos/google/protobuf/json/json_enumval_custom_string.proto +26 -0
  236. package/server/node_modules/google-gax/build/protos/google/protobuf/json_enumvalue_options.proto +29 -0
  237. package/server/node_modules/google-gax/build/protos/google/protobuf/json_options.proto +14 -0
  238. package/server/node_modules/google-gax/build/protos/google/protobuf/struct.proto +38 -22
  239. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/forced_micro_string.proto +3 -0
  240. package/server/node_modules/google-gax/build/protos/google/protobuf/test_protos/repeated_field_proxy_import_message.proto +14 -0
  241. package/server/node_modules/google-gax/build/protos/google/protobuf/timestamp.proto +9 -8
  242. package/server/node_modules/google-gax/build/protos/google/protobuf/util/json_format_proto3.proto +18 -0
  243. package/server/node_modules/google-gax/build/protos/google/rpc/code.proto +1 -1
  244. package/server/node_modules/google-gax/build/protos/google/rpc/context/attribute_context.proto +7 -2
  245. package/server/node_modules/google-gax/build/protos/google/rpc/context/audit_context.proto +1 -1
  246. package/server/node_modules/google-gax/build/protos/google/rpc/error_details.proto +5 -5
  247. package/server/node_modules/google-gax/build/protos/google/rpc/http.proto +1 -1
  248. package/server/node_modules/google-gax/build/protos/google/rpc/status.proto +1 -2
  249. package/server/node_modules/google-gax/build/protos/google/type/calendar_period.proto +1 -1
  250. package/server/node_modules/google-gax/build/protos/google/type/color.proto +9 -10
  251. package/server/node_modules/google-gax/build/protos/google/type/date.proto +11 -9
  252. package/server/node_modules/google-gax/build/protos/google/type/datetime.proto +17 -17
  253. package/server/node_modules/google-gax/build/protos/google/type/dayofweek.proto +1 -1
  254. package/server/node_modules/google-gax/build/protos/google/type/decimal.proto +11 -13
  255. package/server/node_modules/google-gax/build/protos/google/type/expr.proto +1 -1
  256. package/server/node_modules/google-gax/build/protos/google/type/fraction.proto +1 -1
  257. package/server/node_modules/google-gax/build/protos/google/type/interval.proto +1 -2
  258. package/server/node_modules/google-gax/build/protos/google/type/latlng.proto +4 -5
  259. package/server/node_modules/google-gax/build/protos/google/type/localized_text.proto +3 -3
  260. package/server/node_modules/google-gax/build/protos/google/type/money.proto +1 -2
  261. package/server/node_modules/google-gax/build/protos/google/type/month.proto +1 -1
  262. package/server/node_modules/google-gax/build/protos/google/type/phone_number.proto +20 -15
  263. package/server/node_modules/google-gax/build/protos/google/type/postal_address.proto +39 -39
  264. package/server/node_modules/google-gax/build/protos/google/type/quaternion.proto +4 -4
  265. package/server/node_modules/google-gax/build/protos/google/type/timeofday.proto +11 -8
  266. package/server/node_modules/google-gax/package.json +5 -5
  267. package/server/node_modules/retry-request/package.json +4 -4
  268. package/server/node_modules/teeny-request/package.json +5 -5
  269. package/server/node_modules/undici/README.md +5 -0
  270. package/server/node_modules/undici/docs/docs/api/Client.md +4 -0
  271. package/server/node_modules/undici/docs/docs/api/Dispatcher.md +6 -0
  272. package/server/node_modules/undici/docs/docs/api/Interceptors.md +59 -0
  273. package/server/node_modules/undici/docs/docs/api/MockAgent.md +27 -0
  274. package/server/node_modules/undici/docs/docs/api/MockPool.md +28 -1
  275. package/server/node_modules/undici/docs/docs/index.md +5 -0
  276. package/server/node_modules/undici/lib/cache/memory-cache-store.js +54 -9
  277. package/server/node_modules/undici/lib/cache/sqlite-cache-store.js +7 -1
  278. package/server/node_modules/undici/lib/core/request.js +13 -2
  279. package/server/node_modules/undici/lib/core/util.js +6 -1
  280. package/server/node_modules/undici/lib/dispatcher/agent.js +3 -3
  281. package/server/node_modules/undici/lib/dispatcher/client-h1.js +42 -8
  282. package/server/node_modules/undici/lib/dispatcher/client-h2.js +34 -43
  283. package/server/node_modules/undici/lib/global.js +36 -16
  284. package/server/node_modules/undici/lib/handler/cache-handler.js +269 -61
  285. package/server/node_modules/undici/lib/handler/cache-revalidation-handler.js +13 -3
  286. package/server/node_modules/undici/lib/handler/redirect-handler.js +5 -2
  287. package/server/node_modules/undici/lib/handler/retry-handler.js +30 -4
  288. package/server/node_modules/undici/lib/interceptor/cache.js +159 -52
  289. package/server/node_modules/undici/lib/interceptor/decompress.js +9 -2
  290. package/server/node_modules/undici/lib/mock/mock-interceptor.js +25 -7
  291. package/server/node_modules/undici/lib/mock/mock-utils.js +39 -10
  292. package/server/node_modules/undici/lib/util/cache.js +372 -68
  293. package/server/node_modules/undici/lib/util/date.js +23 -6
  294. package/server/node_modules/undici/lib/web/cookies/util.js +78 -8
  295. package/server/node_modules/undici/lib/web/fetch/body.js +2 -1
  296. package/server/node_modules/undici/lib/web/fetch/response.js +1 -3
  297. package/server/node_modules/undici/package.json +2 -2
  298. package/server/node_modules/undici/types/client.d.ts +2 -2
  299. package/server/node_modules/undici/types/dispatcher.d.ts +3 -3
  300. package/server/node_modules/undici/types/mock-interceptor.d.ts +5 -1
  301. package/server/{orphan-proposed-reconciler-BTkDrl4R.js → orphan-proposed-reconciler-CWmOdM9-.js} +1 -1
  302. package/server/{orphan-proposed-reconciler-neK8dHQk.js → orphan-proposed-reconciler-Dg6U4ADZ.js} +24 -15
  303. package/server/package-lock.json +28 -28
  304. package/server/package.json +1 -1
  305. package/server/{pan-dir-DeVUgwA7.js → pan-dir-ubraCiUg.js} +24 -10
  306. package/server/{paths-_zEts6wc.js → paths-cXmOwSbh.js} +2 -2
  307. package/server/pending-lifecycle-claim-DEteYdS9.js +110 -0
  308. package/server/{pickup-Dd0Znxxy.js → pickup-D8xtG1J2.js} +17 -16
  309. package/server/pipeline-membership-BGSvkT2M.js +3 -0
  310. package/server/pipeline-membership-CrAPLYtf.js +57 -0
  311. package/server/{pipeline-membership-0HaEGDlH.js → pipeline-membership-gather-CET40frr.js} +177 -109
  312. package/server/pipeline-membership-gather-DTfcgxLl.js +3 -0
  313. package/server/{pipeline-notifier-D0ykk59O.js → pipeline-notifier-BuQ0e4hF.js} +2 -2
  314. package/server/{pipeline-notifier-6iCJplFZ.js → pipeline-notifier-ImNXknf0.js} +1 -1
  315. package/server/post-merge-lifecycle-worker-DbO10pum.js +50 -0
  316. package/server/{project-pipelines-2sK1apsO.js → project-pipelines-Bim6bThI.js} +2 -2
  317. package/server/project-repos-C0nuoBGv.js +98 -0
  318. package/server/project-repos-CRE6Ykow.js +3 -0
  319. package/server/projects-B03Wr-xc.js +3 -0
  320. package/server/{prompts-Dp4Tpk39.js → prompts-BEx08AIu.js} +2 -2
  321. package/server/{providers-DKkBXhxU.js → providers-D7IluJe0.js} +1 -1
  322. package/server/{providers-DV7ec8l7.js → providers-evXhiQeg.js} +7 -7
  323. package/server/public/assets/{chunk-BO2N2NFS-CltymLRg.js → chunk-BO2N2NFS-D1s4-Sqp.js} +4 -4
  324. package/server/public/assets/{diagram-OG6HWLK6-D2f6pjgA.js → diagram-OG6HWLK6-1gdMoSF7.js} +1 -1
  325. package/server/public/assets/{dist-BWR4qFiV.js → dist-CxAOHbil.js} +1 -1
  326. package/server/public/assets/{dist-DEmlBBNQ.js → dist-DqDRYW6P.js} +3 -3
  327. package/server/public/assets/{ganttDiagram-6RSMTGT7-DnfiViPK.js → ganttDiagram-6RSMTGT7-BYex-Ec7.js} +1 -1
  328. package/server/public/assets/{highlighted-body-OFNGDK62-B8Wrmj9H.js → highlighted-body-OFNGDK62-DlVkiG0S.js} +1 -1
  329. package/server/public/assets/index-Cc7cnFC4.css +1 -0
  330. package/server/public/assets/index-K0hAYCgV.js +807 -0
  331. package/server/public/assets/{linear-C9zFQpkX.js → linear-B4cuEFmO.js} +1 -1
  332. package/server/public/assets/mermaid-GHXKKRXX-DyDHFXHV.js +1 -0
  333. package/server/public/assets/{pieDiagram-4H26LBE5-lR8H7Yjd.js → pieDiagram-4H26LBE5-CBHNBIJQ.js} +1 -1
  334. package/server/public/assets/{prod-B1jCQihw.js → prod-CN2nHBvX.js} +4 -4
  335. package/server/public/assets/{quadrantDiagram-W4KKPZXB-CVQ2guem.js → quadrantDiagram-W4KKPZXB-Bom87VOQ.js} +1 -1
  336. package/server/public/assets/{sankeyDiagram-5OEKKPKP-eD1RB4gm.js → sankeyDiagram-5OEKKPKP-UrBeyLxk.js} +1 -1
  337. package/server/public/assets/{xychartDiagram-2RQKCTM6-ChEC6dQn.js → xychartDiagram-2RQKCTM6-DhkbrIxR.js} +1 -1
  338. package/server/public/index.html +2 -2
  339. package/server/{pull-requests--Ib2jTgy.js → pull-requests-Cv7LxzUN.js} +1 -1
  340. package/server/{pull-requests-CXIhdCYD.js → pull-requests-DHWiKxo7.js} +19 -10
  341. package/server/{queries-6d7Cdtm7.js → queries-DHJm7bTd.js} +1134 -203
  342. package/server/{rally-B708-nZn.js → rally-B71M9f4o.js} +3 -3
  343. package/server/rally-YDjU513q.js +3 -0
  344. package/server/{rally-api-yjQ0TfHd.js → rally-api-D5uXN08-.js} +1 -1
  345. package/server/{rally-api-nY0ZANw3.js → rally-api-Dkqmok65.js} +2 -2
  346. package/server/{rally-client-B1EJhfV0.js → rally-client-Bfqm6XI4.js} +4 -4
  347. package/server/{rally-client-CULK2XAY.js → rally-client-CxsA6ExK.js} +1 -1
  348. package/server/{reap-terminal-sessions-MWnqdLCJ.js → reap-terminal-sessions-BQ23nriz.js} +2 -2
  349. package/server/{reap-terminal-sessions-N3BTkmX_.js → reap-terminal-sessions-CvmwaqKv.js} +2 -2
  350. package/server/{rebuild-stack-Dp4eLkt4.js → rebuild-stack-0EEYReVZ.js} +36 -36
  351. package/server/rebuild-stack-qeRqHZxH.js +4 -0
  352. package/server/{reconstruct-cache-uWbZfjms.js → reconstruct-cache-BbYFsqLa.js} +7 -6
  353. package/server/record-CtroO946.js +3 -0
  354. package/server/record-update-DH6dLJID.js +3 -0
  355. package/server/{record-update-Dq0t2uBG.js → record-update-Z0QCxmMp.js} +124 -34
  356. package/server/{recovery-trip-BJtIQuag.js → recovery-trip-eJe26h-f.js} +2 -2
  357. package/server/{release-engine-DZpmGGzb.js → release-engine-lPUp-MTd.js} +5 -5
  358. package/server/{release-set-hnXd_kga.js → release-set-BwGeyZKX.js} +3 -3
  359. package/server/{remote-Br-ZWVIP.js → remote-BCd02Es1.js} +3 -3
  360. package/server/{remote-4tiENDaI.js → remote-CVGUhXMV.js} +3 -3
  361. package/server/{remote-agents-CRCg1L4H.js → remote-agents-C1bssi41.js} +2 -2
  362. package/server/{remote-agents-nmty1mLu.js → remote-agents-C_VxssLU.js} +300 -46
  363. package/server/{remote-completion-BbWNd10K.js → remote-completion-DAB0P706.js} +12 -12
  364. package/server/resume-u9byntrq.js +3 -0
  365. package/server/{review-agent-DJRO8EG8.js → review-agent-CD4RCI0Y.js} +1 -1
  366. package/server/{review-agent-sKkE1FEL.js → review-agent-CHhI66UP.js} +61 -44
  367. package/server/{review-artifacts-BLbSC4ke.js → review-artifacts-DSMRIfuJ.js} +7 -6
  368. package/server/{review-context-BgX3lcCx.js → review-context-oFuBbiEE.js} +69 -25
  369. package/server/{in-flight-guard-aQ1IxeI3.js → review-convoy-liveness-CpzrcJ5F.js} +3 -44
  370. package/server/review-status-BZH8h-6W.js +3 -0
  371. package/server/review-status-emit-CUExtHd5.js +50 -0
  372. package/server/{review-status-enrichment-tbOn_A_u.js → review-status-enrichment-QV_hQkgS.js} +4 -4
  373. package/server/{review-status-source-CxuEjLGg.js → review-status-source-CpvJnvnQ.js} +24 -3
  374. package/server/review-status-source-ylw5QZUR.js +3 -0
  375. package/server/{review-status-sync-BhSQ0d0l.js → review-status-sync-483sujRo.js} +10 -5
  376. package/server/{review-status-sync-To3-iS-N.js → review-status-sync-NaWvI9Xf.js} +1 -1
  377. package/server/review-status-yljtTd-q.js +7521 -0
  378. package/server/{review-verdict-feedback-C1Kg8n7t.js → review-verdict-feedback-BPDn4li_.js} +1 -1
  379. package/server/{review-verdict-feedback-CTRNtzXO.js → review-verdict-feedback-CELeUinh.js} +48 -8
  380. package/server/{rollup-WA0VD-Rr.js → rollup-DTNvelz9.js} +8 -8
  381. package/server/{rollup-B53Y81xK.js → rollup-DYZfq1c4.js} +1 -1
  382. package/server/{scanner-D2743cp8.js → scanner-CV35oSn4.js} +42 -14
  383. package/server/{sequence-io-Cg0zYj_E.js → sequence-io-DF_8iuhV.js} +4 -4
  384. package/server/{sequencer-agent-BGY8gjg-.js → sequencer-agent-B2WeCtGi.js} +5 -5
  385. package/server/server.js +3899 -672
  386. package/server/{service-DCpB_SGd.js → service-Br9rpBNA.js} +83 -65
  387. package/server/{session-fork-BQ8_6H32.js → session-fork-D0LY152N.js} +2 -2
  388. package/server/{session-history-CVZDpS3c.js → session-history-BUyK29eq.js} +4 -4
  389. package/server/{settings-BZ5m1UCl.js → settings-Bse1Pdcj.js} +3 -3
  390. package/server/settings-CdvIF84R.js +2 -0
  391. package/server/{settings-ylxwqwQG.js → settings-CvVGqNEs.js} +3 -2
  392. package/server/{shadow-engineering-BlxG6Xye.js → shadow-engineering-BWLa8ODz.js} +2 -2
  393. package/server/{shadow-state-Dh-HzF2J.js → shadow-state-B4fpKxOO.js} +2 -2
  394. package/server/{shadow-state-C2_epgx2.js → shadow-state-FV6PHfEW.js} +1 -1
  395. package/server/{shadow-utils-4bvjn9b3.js → shadow-utils-D7asqxOZ.js} +2 -2
  396. package/server/{ship-log-ClSMIzZX.js → ship-log-xplJ8t75.js} +1 -1
  397. package/server/{smart-compaction-CHIxLr_d.js → smart-compaction-CPp2Ykf6.js} +1 -1
  398. package/server/{smart-compaction-r4pHQBIr.js → smart-compaction-D3U_79f-.js} +8 -7
  399. package/server/{spawn-planning-session-KC_UduxD.js → spawn-planning-session-1nFi3gfk.js} +1 -1
  400. package/server/{spawn-planning-session-DWAorh2B.js → spawn-planning-session-DGfZ5B8D.js} +30 -23
  401. package/server/{specialist-completion-BXhav38U.js → specialist-completion-Br48eiDP.js} +1 -1
  402. package/server/{specialist-context-DtrYvGJ-.js → specialist-context-cVbGnTa3.js} +5 -5
  403. package/server/{specialist-handoff-logger-C45ouoZ6.js → specialist-handoff-logger-DK-GTz4s.js} +2 -2
  404. package/server/{specialist-logs-DJ3RzKxW.js → specialist-logs-Cl5-hqT8.js} +3 -3
  405. package/server/{specialists-JVO00bs7.js → specialists-CNfYO3G2.js} +1634 -457
  406. package/server/{specialists-DyFeedjn.js → specialists-Cicieuzu.js} +21 -19
  407. package/server/{specialists-D5fRZXmN.js → specialists-JHsdU3pA.js} +1 -1
  408. package/server/{specialists-DVj0hvaL.js → specialists-Tdezg_6N.js} +1 -1
  409. package/server/specs-Bt7WJDoC.js +3 -0
  410. package/server/src-CRmCHlma.js +11408 -0
  411. package/server/{src-CG9mCkP6.js → src-Ck028hjO.js} +6 -6
  412. package/server/{src-CMTQGyCK.js → src-UWcGe0Ix.js} +5 -5
  413. package/server/stack-health-CJLMrLBl.js +3 -0
  414. package/server/{stack-health-puygdaMd.js → stack-health-DqSqx0zv.js} +68 -12
  415. package/server/{stale-task-claims-BbFwCTb0.js → stale-task-claims-CYFOUNlT.js} +4 -4
  416. package/server/{staleness-Cbl_w4Bw.js → staleness-BQ-0gMYK.js} +1 -1
  417. package/server/{staleness-Bpy41ngS.js → staleness-D47CUJok.js} +1 -1
  418. package/server/{state-home-CIGjwNfJ.js → state-home-BYV7qZTW.js} +2 -2
  419. package/server/{state-mapping-BL_-3Yt8.js → state-mapping-BVldLhBf.js} +1 -1
  420. package/server/{state-migrate-Dkzaxvny.js → state-migrate-CvvBtS0Y.js} +4 -4
  421. package/server/{stuck-remediation-sY_MHHgQ.js → stuck-remediation-Wt0UVvu1.js} +1 -1
  422. package/server/{stuck-remediation-CzEov_fq.js → stuck-remediation-mkLC6G_t.js} +360 -26
  423. package/server/{substrate-bug-weights-service-BH66lhm7.js → substrate-bug-weights-service-XfLAKnmK.js} +3 -3
  424. package/server/{summary-fork-D8bXjCr7.js → summary-fork-CD7GOts0.js} +2 -2
  425. package/server/{summary-fork-DHhJIsAL.js → summary-fork-xiXBnWG9.js} +78 -12
  426. package/server/supervisor/{injection-budget-C1iPirFS.js → injection-budget-B5SbvDx2.js} +2 -41
  427. package/server/supervisor/{paths-DehGY2Fj.js → paths-K3noE4N_.js} +1 -1
  428. package/server/supervisor/pty-supervisor.js +49 -2
  429. package/server/supervisor/pty-token-B7lp0ElT.js +43 -0
  430. package/server/{supervisor-BO-Zk_h-.js → supervisor-DL788vos.js} +3 -3
  431. package/server/supervisor-UWiQNK-y.js +2 -0
  432. package/server/{swarm-readiness-CQ_fwUWF.js → swarm-readiness-BV14DF5N.js} +3 -3
  433. package/server/{system-prerequisites-Bza0ffAh.js → system-prerequisites-pdWG6ZQs.js} +56 -29
  434. package/server/{teardown-workspace-CEgauF4U.js → teardown-workspace-l2F4_zim.js} +15 -16
  435. package/server/{test-agent-queue-DXDt0Xa-.js → test-agent-queue-qakFIIGz.js} +6 -6
  436. package/server/{test-verdict-CmUBK5cT.js → test-verdict-BJYDggMm.js} +1 -1
  437. package/server/{test-verdict-DFjjIHR5.js → test-verdict-Gw-btEfb.js} +1 -1
  438. package/server/{tldr-daemon-DL566HbH.js → tldr-daemon-BKOYB616.js} +1 -1
  439. package/server/{tldr-daemon-BDtLOIlO.js → tldr-daemon-CBaWkV9k.js} +2 -2
  440. package/server/{tmux-ftABRAmc.js → tmux-B1Wbxz5o.js} +3 -3
  441. package/server/{tmux-DoThH6aj.js → tmux-DQ6jB76i.js} +1 -1
  442. package/server/tmux-dedup-DbN6MGzM.js +892 -0
  443. package/server/{token-CsOhvw42.js → token-Cxbk023d.js} +2 -2
  444. package/server/{token-util-CTmczIfW.js → token-util-CLq2MmQt.js} +1 -1
  445. package/server/token-util-zlz9U0ki.js +3 -0
  446. package/server/{tracker-config-B4itFzDo.js → tracker-config-DZ8Zn2nQ.js} +2 -2
  447. package/server/{tracker-utils-tnxxqROg.js → tracker-utils-L0FKtjq2.js} +3 -3
  448. package/server/{traefik-connect-m73vGebA.js → traefik-connect-bNX6jKkb.js} +1 -1
  449. package/server/{tunnel-B2vxjx_b.js → tunnel-BAm1XgjG.js} +3 -3
  450. package/server/{tunnel-Cgj-IGIl.js → tunnel-CjSnHdTc.js} +1 -1
  451. package/server/{types-BBNjPcqU.js → types-q67TYYg5.js} +1 -1
  452. package/server/uat-promote-verification-CKB9ZrKC.js +92 -0
  453. package/server/uat-train-Cu-4nvbf.js +2 -0
  454. package/server/uat-train-D5UjcyAa.js +0 -0
  455. package/server/validate-Cxsx5Uz1.js +179 -0
  456. package/server/{validation-CIi6pnI2.js → validation-DEaTZafj.js} +1 -1
  457. package/server/{validation-B5JxoPUS.js → validation-VZgJxmqc.js} +4 -4
  458. package/server/{verification-artifact-C-lIHfUa.js → verification-artifact-C85cRTc_.js} +1 -1
  459. package/server/{verification-artifact-BcnIbigL.js → verification-artifact-g3yuxQDL.js} +1 -1
  460. package/server/{verification-runner-CDj4lD4t.js → verification-runner-DlZI8yhw.js} +1 -1
  461. package/server/{verification-runner-Br0S_Ous.js → verification-runner-KDZIsBj4.js} +114 -107
  462. package/server/{vtt-parser-DKpNNW5i.js → vtt-parser-Jr94BF3Y.js} +1 -1
  463. package/server/{work-agent-prompt-Yb2bd3Fq.js → work-agent-prompt-C-vuP3_J.js} +20 -9
  464. package/server/workflows-CHrx_hcW.js +2 -0
  465. package/server/{workflows-C9WmILql.js → workflows-D0oip4eV.js} +161 -78
  466. package/server/{workspace-DuUdndHe.js → workspace-BqFg__wH.js} +1 -1
  467. package/server/{workspace-BVl4rihN.js → workspace-C0fH3aek.js} +3 -3
  468. package/server/workspace-anchor-drift-B4gMRHl4.js +3 -0
  469. package/server/workspace-anchor-drift-CZKofakh.js +224 -0
  470. package/server/{workspace-config-cEGcO6UT.js → workspace-config-B123aZl-.js} +1 -1
  471. package/server/workspace-manager-CDTKjjdU.js +3 -0
  472. package/server/{workspace-manager-hLUv3ADC.js → workspace-manager-CwO-Hek7.js} +206 -116
  473. package/server/{workspace-metadata-CskwzzhL.js → workspace-metadata-CQv00QwK.js} +2 -2
  474. package/server/{workspace-metadata-DNpMixRq.js → workspace-metadata-D4M8BM4W.js} +1 -1
  475. package/server/{workspaces-hWvy9eKs.js → workspaces-j1e_6aAT.js} +736 -290
  476. package/sync-sources/dev-skills/pan-dashboard-restart/SKILL.md +34 -10
  477. package/sync-sources/hooks/linear-mcp-auth-hook +97 -0
  478. package/sync-sources/hooks/record-cost-event.js +6 -4
  479. package/sync-sources/rules/ask-user-question-self-contained.md +9 -0
  480. package/sync-sources/skills/okf/README.md +11 -3
  481. package/sync-sources/skills/okf/SKILL.md +12 -1
  482. package/sync-sources/skills/okf/docs/USAGE.md +15 -0
  483. package/sync-sources/skills/okf/references/overdeck.md +28 -0
  484. package/sync-sources/skills/pan-close/SKILL.md +5 -3
  485. package/sync-sources/skills/pan-flywheel/SKILL.md +18 -1
  486. package/sync-sources/skills/pan-knowledge/SKILL.md +10 -0
  487. package/sync-sources/skills/pan-orders/SKILL.md +33 -0
  488. package/sync-sources/skills/pan-peer-review/SKILL.md +195 -0
  489. package/sync-sources/skills/pan-reload/SKILL.md +3 -3
  490. package/sync-sources/skills/pan-restart/SKILL.md +5 -4
  491. package/sync-sources/skills/pan-review/SKILL.md +7 -1
  492. package/sync-sources/skills/pan-start/SKILL.md +4 -0
  493. package/sync-sources/skills/pan-sync-main/SKILL.md +9 -8
  494. package/sync-sources/skills/pipeline-status/SKILL.md +10 -1
  495. package/sync-sources/skills/workspace-add-repo/SKILL.md +16 -1
  496. package/sync-sources/templates/traefik/dynamic/overdeck.yml.template +10 -0
  497. package/server/activity-logger-OEUBdfZ8.js +0 -3
  498. package/server/agent-state-Bg0lhqwj.js +0 -3
  499. package/server/agents-FlIgQ3ql.js +0 -3
  500. package/server/archive-planning-zkJb3BeM.js +0 -3
  501. package/server/cli-BsVIHwzC.js +0 -3
  502. package/server/context-layers-B3Nt58jl.js +0 -4
  503. package/server/context-layers-ZYFcWiyc.js +0 -165
  504. package/server/conversation-service-Up7FEzIC.js +0 -3
  505. package/server/deacon-DYSEJb48.js +0 -4
  506. package/server/deacon-swarm-9jRLS5Ke.js +0 -2
  507. package/server/deploy-window-CM6W1-c6.js +0 -3
  508. package/server/dist-Bd3vn0Hw.js +0 -3
  509. package/server/flywheel-DMCUzDWg.js +0 -2
  510. package/server/flywheel-DSSpWmqF.js +0 -522
  511. package/server/flywheel-DcBkQvgE.js +0 -207
  512. package/server/flywheel-merge-order-C-6zRLvM.js +0 -2
  513. package/server/flywheel-merge-order-DxbQKE1d.js +0 -244
  514. package/server/forge-B-ZWyTRm.js +0 -2
  515. package/server/forge-Ch9gCFod.js +0 -270
  516. package/server/git-utils-Dry_Ka_D.js +0 -3
  517. package/server/github-pr-lookup-BRbDW-qk.js +0 -44
  518. package/server/hume-B_DbflNM.js +0 -3
  519. package/server/inspect-agent-ch-F-5Ci.js +0 -2
  520. package/server/launcher-generator-CHVm7bGT.js +0 -379
  521. package/server/layers-DzxSTGNA.js +0 -93
  522. package/server/merge-blockers-BsFjGrQ8.js +0 -41
  523. package/server/merge-ops-DlB1IM0Y.js +0 -2
  524. package/server/merge-set-DLz0MkGT.js +0 -139
  525. package/server/merge-set-DnSYdBEp.js +0 -3
  526. package/server/merge-sync-SSv3E-pl.js +0 -3
  527. package/server/merge-verification-CSizH3HY.js +0 -124
  528. package/server/projects-9SkRpES9.js +0 -3
  529. package/server/public/assets/index-CUr1xv8w.css +0 -1
  530. package/server/public/assets/index-CsSuZQBI.js +0 -802
  531. package/server/public/assets/mermaid-GHXKKRXX-BUAB8hqt.js +0 -1
  532. package/server/rally-njs_mJrt.js +0 -3
  533. package/server/rebuild-stack-kA7XngID.js +0 -3
  534. package/server/record-t6V-3Dcj.js +0 -3
  535. package/server/record-update-DACtKh6_.js +0 -3
  536. package/server/resume-CcKqnTvE.js +0 -3
  537. package/server/review-status-A7quS5KJ.js +0 -1454
  538. package/server/review-status-C6n6-9f_.js +0 -3
  539. package/server/settings-D0OSwos5.js +0 -2
  540. package/server/specs-nN45DG2X.js +0 -3
  541. package/server/src-U7_kTPEE.js +0 -4733
  542. package/server/stack-health-Df0YEZKa.js +0 -3
  543. package/server/supervisor-BPy-o1A8.js +0 -2
  544. package/server/token-util-DrHg8abn.js +0 -3
  545. package/server/tracker-utils-BePq_oj-.js +0 -3
  546. package/server/uat-train-CuEn0t9M.js +0 -2152
  547. package/server/uat-train-cKfM-_WW.js +0 -2
  548. package/server/workflows-D90rMOya.js +0 -2
  549. package/server/workspace-manager-ZTdJAy9M.js +0 -3
@@ -1,4733 +0,0 @@
1
- import { n as __esmMin } from "./rolldown-runtime-DNCzzKnI.js";
2
- import { Effect, Schema, SchemaGetter } from "effect";
3
- import * as Rpc from "effect/unstable/rpc/Rpc";
4
- import * as RpcGroup from "effect/unstable/rpc/RpcGroup";
5
- //#region ../../../packages/contracts/src/types.ts
6
- function isChannelReplyKind(value) {
7
- return typeof value === "string" && CHANNEL_REPLY_KIND_VALUES.includes(value);
8
- }
9
- function normalizeChannelReplyPayload(payload, fieldPrefix = "channel_reply") {
10
- if (payload === null || typeof payload !== "object") throw new Error(`${fieldPrefix} payload must be an object`);
11
- const source = payload;
12
- if (!isChannelReplyKind(source.kind)) throw new Error(`${fieldPrefix}.kind must be one of: ${CHANNEL_REPLY_KIND_VALUES.join(", ")}`);
13
- if (typeof source.summary !== "string") throw new Error(`${fieldPrefix}.summary must be a non-empty string`);
14
- const summary = source.summary.trim();
15
- if (summary.length === 0) throw new Error(`${fieldPrefix}.summary must be a non-empty string`);
16
- if (summary.length > 4096) throw new Error(`${fieldPrefix}.summary must be at most ${MAX_CHANNEL_REPLY_SUMMARY_LENGTH} characters`);
17
- if (source.artifactRefs !== void 0 && !Array.isArray(source.artifactRefs)) throw new Error(`${fieldPrefix}.artifactRefs must be an array when provided`);
18
- const rawArtifactRefs = source.artifactRefs ?? [];
19
- if (rawArtifactRefs.length > 20) throw new Error(`${fieldPrefix}.artifactRefs must contain at most 20 entries`);
20
- const artifactRefs = rawArtifactRefs.map((item, index) => {
21
- if (item === null || typeof item !== "object") throw new Error(`${fieldPrefix}.artifactRefs[${index}] must be an object`);
22
- const ref = item;
23
- if (typeof ref.uri !== "string") throw new Error(`${fieldPrefix}.artifactRefs[${index}].uri must be a non-empty string`);
24
- const uri = ref.uri.trim();
25
- if (uri.length === 0) throw new Error(`${fieldPrefix}.artifactRefs[${index}].uri must be a non-empty string`);
26
- if (uri.length > 512) throw new Error(`${fieldPrefix}.artifactRefs[${index}].uri must be at most 512 characters`);
27
- if (!CHANNEL_REPLY_ARTIFACT_URI_PATTERN.test(uri)) throw new Error(`${fieldPrefix}.artifactRefs[${index}].uri must start with file://, https://, or /`);
28
- if (ref.label !== void 0 && typeof ref.label !== "string") throw new Error(`${fieldPrefix}.artifactRefs[${index}].label must be a string when provided`);
29
- const label = typeof ref.label === "string" ? ref.label.trim() : void 0;
30
- if (label !== void 0 && label.length > 512) throw new Error(`${fieldPrefix}.artifactRefs[${index}].label must be at most 512 characters`);
31
- return {
32
- uri,
33
- ...label ? { label } : {}
34
- };
35
- });
36
- return {
37
- kind: source.kind,
38
- summary,
39
- artifactRefs
40
- };
41
- }
42
- var IssueId, AgentId, SequenceNumber, AgentStatus, Role, AgentResolution, ReviewStatusValue, TestStatusValue, UatStatusValue, MergeStatusValue, ReleaseStatusValue, VerificationStatusValue, Activity, WaitingReason, ClaudeChannelPermissionBehavior, ThinkingState, WaitingState, CHANNEL_REPLY_KIND_VALUES, MAX_CHANNEL_REPLY_SUMMARY_LENGTH, CHANNEL_REPLY_ARTIFACT_URI_PATTERN, ChannelReplyKind, ChannelReplyArtifactRef, AgentChannelReply, AgentRuntimeSnapshot, ChannelPermissionRequestSnapshot, AgentSnapshot, ReviewStatusSnapshot, TurnDiffFileChange, ScanProgressSnapshot, EnrichStatsSnapshot, EnrichProgressSnapshot, EmbedProgressSnapshot, DashboardSnapshot, WorkspaceDetail, ResourceStats, SessionNodePresence, SessionNodeType, ReviewerRoundSummary, ReviewerRoundMetadata, ModelOriginEntry, ModelOrigin, SessionNode, FeatureNode, DiscoveredSessionSnapshot, SessionsFeedSource, SessionsFeedRowSnapshot, SessionsFeedFacetBucketString, SessionsFeedFacetBucketNumber, SessionsFeedFacetsSnapshot, ConversationFilter, ConversationCostSummary, ScanResult;
43
- var init_types = __esmMin((() => {
44
- IssueId = Schema.String;
45
- AgentId = Schema.String;
46
- SequenceNumber = Schema.Number;
47
- AgentStatus = Schema.Literals([
48
- "starting",
49
- "running",
50
- "stopped",
51
- "error",
52
- "unknown"
53
- ]);
54
- Role = Schema.Literals([
55
- "plan",
56
- "work",
57
- "review",
58
- "test",
59
- "ship",
60
- "flywheel",
61
- "strike",
62
- "sequencer",
63
- "knowledge"
64
- ]);
65
- AgentResolution = Schema.Literals([
66
- "working",
67
- "done",
68
- "needs_input",
69
- "stuck",
70
- "completed",
71
- "unclear",
72
- "abandoned",
73
- "api_error"
74
- ]);
75
- ReviewStatusValue = Schema.Literals([
76
- "pending",
77
- "reviewing",
78
- "passed",
79
- "failed",
80
- "blocked",
81
- "skipped"
82
- ]);
83
- TestStatusValue = Schema.Literals([
84
- "pending",
85
- "testing",
86
- "passed",
87
- "failed",
88
- "skipped",
89
- "dispatch_failed"
90
- ]);
91
- UatStatusValue = Schema.Literals([
92
- "pending",
93
- "testing",
94
- "passed",
95
- "failed"
96
- ]);
97
- MergeStatusValue = Schema.Literals([
98
- "pending",
99
- "queued",
100
- "merging",
101
- "verifying",
102
- "merged",
103
- "failed"
104
- ]);
105
- ReleaseStatusValue = Schema.Literals([
106
- "pending",
107
- "releasing",
108
- "passed",
109
- "failed",
110
- "partial",
111
- "rolled_back",
112
- "skipped"
113
- ]);
114
- VerificationStatusValue = Schema.Literals([
115
- "pending",
116
- "running",
117
- "passed",
118
- "failed",
119
- "skipped"
120
- ]);
121
- Activity = Schema.Literals([
122
- "working",
123
- "thinking",
124
- "waiting",
125
- "idle",
126
- "stopped"
127
- ]);
128
- WaitingReason = Schema.Literals([
129
- "tool_permission",
130
- "user_question",
131
- "disambiguation",
132
- "other"
133
- ]);
134
- ClaudeChannelPermissionBehavior = Schema.Literals(["allow", "deny"]);
135
- ThinkingState = Schema.Struct({
136
- since: Schema.String,
137
- lastToolAt: Schema.String
138
- });
139
- WaitingState = Schema.Struct({
140
- reason: WaitingReason,
141
- startedAt: Schema.String,
142
- message: Schema.optional(Schema.String),
143
- notificationSent: Schema.optional(Schema.Boolean)
144
- });
145
- CHANNEL_REPLY_KIND_VALUES = [
146
- "status",
147
- "done",
148
- "needs_input"
149
- ];
150
- MAX_CHANNEL_REPLY_SUMMARY_LENGTH = 4 * 1024;
151
- CHANNEL_REPLY_ARTIFACT_URI_PATTERN = /^(?:file:\/\/|https:\/\/|\/)/;
152
- ChannelReplyKind = Schema.Literals(CHANNEL_REPLY_KIND_VALUES);
153
- ChannelReplyArtifactRef = Schema.Struct({
154
- uri: Schema.String,
155
- label: Schema.optional(Schema.String)
156
- });
157
- AgentChannelReply = Schema.Struct({
158
- kind: ChannelReplyKind,
159
- summary: Schema.String,
160
- artifactRefs: Schema.Array(ChannelReplyArtifactRef),
161
- reportedAt: Schema.String
162
- });
163
- AgentRuntimeSnapshot = Schema.Struct({
164
- id: AgentId,
165
- activity: Activity,
166
- lastActivity: Schema.String,
167
- currentTool: Schema.optional(Schema.String),
168
- thinking: Schema.optional(ThinkingState),
169
- waiting: Schema.optional(WaitingState),
170
- claudeSessionId: Schema.optional(Schema.String),
171
- sessionModel: Schema.optional(Schema.String),
172
- sessionHarness: Schema.optional(Schema.String),
173
- model: Schema.optional(Schema.String),
174
- lastMessageAt: Schema.optional(Schema.String),
175
- channelReply: Schema.optional(AgentChannelReply),
176
- resolution: Schema.optional(AgentResolution),
177
- resolutionCount: Schema.optional(Schema.Number),
178
- resolutionUpdatedAt: Schema.optional(Schema.String),
179
- currentIssue: Schema.optional(IssueId),
180
- contextSaturatedAt: Schema.optional(Schema.String),
181
- updatedAtSequence: SequenceNumber
182
- });
183
- ChannelPermissionRequestSnapshot = Schema.Struct({
184
- requestId: Schema.String,
185
- agentId: AgentId,
186
- issueId: Schema.optional(IssueId),
187
- toolName: Schema.String,
188
- description: Schema.String,
189
- inputPreview: Schema.String,
190
- createdAt: Schema.String
191
- });
192
- AgentSnapshot = Schema.Struct({
193
- id: AgentId,
194
- issueId: IssueId,
195
- workspace: Schema.optional(Schema.String),
196
- runtime: Schema.optional(Schema.String),
197
- model: Schema.optional(Schema.String),
198
- status: AgentStatus,
199
- startedAt: Schema.optional(Schema.String),
200
- lastActivity: Schema.optional(Schema.String),
201
- branch: Schema.optional(Schema.String),
202
- costSoFar: Schema.optional(Schema.Number),
203
- sessionId: Schema.optional(Schema.String),
204
- role: Schema.optional(Role),
205
- phase: Schema.optional(Schema.String),
206
- workType: Schema.optional(Schema.String),
207
- roleRunHead: Schema.optional(Schema.String),
208
- hasLiveTmuxSession: Schema.optional(Schema.Boolean),
209
- stoppedByUser: Schema.optional(Schema.Boolean),
210
- paused: Schema.optional(Schema.Boolean),
211
- pausedReason: Schema.optional(Schema.String),
212
- pausedAt: Schema.optional(Schema.String),
213
- troubled: Schema.optional(Schema.Boolean),
214
- troubledAt: Schema.optional(Schema.String),
215
- consecutiveFailures: Schema.optional(Schema.Number),
216
- firstFailureInRunAt: Schema.optional(Schema.String),
217
- lastFailureAt: Schema.optional(Schema.String),
218
- lastFailureReason: Schema.optional(Schema.String),
219
- lastFailureNextRetryAt: Schema.optional(Schema.String),
220
- runtimeState: Schema.optional(Schema.String),
221
- hasPendingQuestion: Schema.optional(Schema.Boolean),
222
- pendingQuestionCount: Schema.optional(Schema.Number),
223
- pendingQuestionPrompt: Schema.optional(Schema.String),
224
- pendingQuestionReason: Schema.optional(Schema.String),
225
- pendingInputCount: Schema.optional(Schema.Number),
226
- pendingInputKinds: Schema.optional(Schema.Array(Schema.String)),
227
- pendingAskUserQuestion: Schema.optional(Schema.Struct({
228
- toolUseId: Schema.String,
229
- askedAt: Schema.String,
230
- questions: Schema.Array(Schema.Struct({
231
- question: Schema.String,
232
- header: Schema.optional(Schema.String),
233
- multiSelect: Schema.optional(Schema.Boolean),
234
- options: Schema.Array(Schema.Struct({
235
- label: Schema.String,
236
- description: Schema.optional(Schema.String)
237
- }))
238
- }))
239
- })),
240
- pendingProposedPlan: Schema.optional(Schema.Struct({
241
- toolUseId: Schema.String,
242
- askedAt: Schema.String,
243
- plan: Schema.String
244
- })),
245
- resolution: Schema.optional(AgentResolution),
246
- resolutionCount: Schema.optional(Schema.Number),
247
- runtimeSnapshotSequence: Schema.optional(SequenceNumber)
248
- });
249
- ReviewStatusSnapshot = Schema.Struct({
250
- issueId: IssueId,
251
- reviewStatus: Schema.optional(ReviewStatusValue),
252
- testStatus: Schema.optional(TestStatusValue),
253
- uatStatus: Schema.optional(UatStatusValue),
254
- uatNotes: Schema.optional(Schema.String),
255
- mergeStatus: Schema.optional(MergeStatusValue),
256
- releaseStatus: Schema.optional(ReleaseStatusValue),
257
- releaseNotes: Schema.optional(Schema.String),
258
- verificationStatus: Schema.optional(VerificationStatusValue),
259
- verificationNotes: Schema.optional(Schema.String),
260
- verificationCycleCount: Schema.optional(Schema.Number),
261
- readyForMerge: Schema.optional(Schema.Boolean),
262
- updatedAt: Schema.optional(Schema.String),
263
- prUrl: Schema.optional(Schema.String),
264
- /** Persistent stuck flag — set by divergence guard, cleared by /unstick */
265
- stuck: Schema.optional(Schema.Boolean),
266
- stuckReason: Schema.optional(Schema.String),
267
- stuckAt: Schema.optional(Schema.String),
268
- stuckDetails: Schema.optional(Schema.String),
269
- /** Commit SHA at which review passed; deacon uses this to detect new pushes after review */
270
- reviewedAtCommit: Schema.optional(Schema.String),
271
- /** Commit SHA at which the pre-review verification gate last passed */
272
- lastVerifiedCommit: Schema.optional(Schema.String),
273
- /** Current merge pipeline step (granular visibility for the merge step tracker) */
274
- mergeStep: Schema.optional(Schema.String),
275
- /** PAN-699: timestamp when review agents were dispatched */
276
- reviewSpawnedAt: Schema.optional(Schema.String),
277
- /** PAN-699: number of test-agent dispatch retries */
278
- testRetryCount: Schema.optional(Schema.Number),
279
- /** PAN-794: parallel-review re-dispatch retry counter (current recovery cycle) */
280
- reviewRetryCount: Schema.optional(Schema.Number),
281
- /** PAN-796: review auto-requeue count (circuit breaker threshold) */
282
- autoRequeueCount: Schema.optional(Schema.Number),
283
- /** PAN-794: ISO timestamp marking the start of the current recovery cycle */
284
- recoveryStartedAt: Schema.optional(Schema.String),
285
- /** Human-requested patrol opt-out — when true, Deacon ignores this issue. */
286
- deaconIgnored: Schema.optional(Schema.Boolean),
287
- deaconIgnoredAt: Schema.optional(Schema.String),
288
- deaconIgnoredReason: Schema.optional(Schema.String),
289
- /** PAN-1691: per-issue auto-merge routing key. undefined = project default, true = auto-merge (fast lane), false = hold for UAT. */
290
- autoMerge: Schema.optional(Schema.Boolean),
291
- /** Active review orchestrator tmux session name (e.g. agent-pan-540-review). */
292
- reviewCoordinatorSessionName: Schema.optional(Schema.String),
293
- /** Active review sub-role tmux session names (e.g. agent-pan-540-review-correctness). Discovered at emission time. */
294
- reviewSessionNames: Schema.optional(Schema.Array(Schema.String)),
295
- /** Per-role review completion status (keyed by role: 'correctness' | 'security' | ...) */
296
- reviewSubStatuses: Schema.optional(Schema.Record(Schema.String, Schema.Literals(["running", "done"]))),
297
- /** PAN-905: queue position in the merge queue */
298
- queuePosition: Schema.optional(Schema.Number),
299
- /** PAN-905: currently active specialist (e.g. 'merge-agent') */
300
- activeSpecialist: Schema.optional(Schema.String),
301
- /** PAN-905: number of merge retries attempted */
302
- mergeRetryCount: Schema.optional(Schema.Number),
303
- /** PAN-905: free-form notes about the merge attempt */
304
- mergeNotes: Schema.optional(Schema.String),
305
- /** PAN-905: GitHub-native merge blocker reasons */
306
- blockerReasons: Schema.optional(Schema.Array(Schema.Struct({
307
- type: Schema.Literals([
308
- "failing_checks",
309
- "merge_conflict",
310
- "unresolved_conversations",
311
- "changes_requested",
312
- "draft_pr",
313
- "not_mergeable"
314
- ]),
315
- summary: Schema.String,
316
- details: Schema.optional(Schema.String),
317
- detectedAt: Schema.String
318
- })))
319
- });
320
- TurnDiffFileChange = Schema.Struct({
321
- path: Schema.String,
322
- kind: Schema.optional(Schema.String),
323
- additions: Schema.optional(Schema.Number),
324
- deletions: Schema.optional(Schema.Number)
325
- });
326
- Schema.Struct({
327
- turnId: Schema.String,
328
- completedAt: Schema.String,
329
- status: Schema.optional(Schema.String),
330
- files: Schema.Array(TurnDiffFileChange),
331
- checkpointRef: Schema.optional(Schema.String),
332
- assistantMessageId: Schema.optional(Schema.String),
333
- checkpointTurnCount: Schema.optional(Schema.Number)
334
- });
335
- ScanProgressSnapshot = Schema.Struct({
336
- active: Schema.Boolean,
337
- mode: Schema.Literals([
338
- "targeted",
339
- "watched",
340
- "system"
341
- ]),
342
- dirs: Schema.Array(Schema.String),
343
- dirsProcessed: Schema.Number,
344
- dirsTotal: Schema.Number,
345
- sessionsFound: Schema.Number,
346
- elapsedMs: Schema.Number,
347
- inserted: Schema.Number,
348
- updated: Schema.Number,
349
- skipped: Schema.Number,
350
- errors: Schema.Number,
351
- durationMs: Schema.Number
352
- });
353
- EnrichStatsSnapshot = Schema.Struct({
354
- processed: Schema.Number,
355
- totalCost: Schema.Number,
356
- failures: Schema.Number,
357
- durationMs: Schema.Number
358
- });
359
- EnrichProgressSnapshot = Schema.Struct({
360
- sessionId: Schema.Number,
361
- level: Schema.Number,
362
- model: Schema.String,
363
- cost: Schema.Number,
364
- success: Schema.Boolean,
365
- error: Schema.optional(Schema.String),
366
- timestamp: Schema.String
367
- });
368
- EmbedProgressSnapshot = Schema.Struct({
369
- sessionId: Schema.Number,
370
- model: Schema.String,
371
- success: Schema.Boolean,
372
- error: Schema.optional(Schema.String),
373
- timestamp: Schema.String
374
- });
375
- DashboardSnapshot = Schema.Struct({
376
- sequence: SequenceNumber,
377
- agents: Schema.Array(AgentSnapshot),
378
- specialists: Schema.Array(Schema.Unknown),
379
- reviewStatuses: Schema.Array(ReviewStatusSnapshot),
380
- issues: Schema.Array(Schema.Unknown),
381
- recentActivity: Schema.optional(Schema.Array(Schema.Unknown)),
382
- resources: Schema.optional(Schema.Unknown),
383
- memory: Schema.optional(Schema.Unknown),
384
- agentRuntimeById: Schema.optional(Schema.Record(Schema.String, AgentRuntimeSnapshot)),
385
- channelPermissionRequests: Schema.optional(Schema.Array(ChannelPermissionRequestSnapshot)),
386
- scanProgress: Schema.optional(Schema.NullOr(ScanProgressSnapshot)),
387
- enrichStats: Schema.optional(Schema.NullOr(EnrichStatsSnapshot)),
388
- enrichProgressBySessionId: Schema.optional(Schema.Record(Schema.String, EnrichProgressSnapshot)),
389
- embedProgressBySessionId: Schema.optional(Schema.Record(Schema.String, EmbedProgressSnapshot)),
390
- timestamp: Schema.String
391
- });
392
- WorkspaceDetail = Schema.Struct({
393
- workspace: Schema.Unknown,
394
- reviewStatus: Schema.Unknown,
395
- planning: Schema.Unknown,
396
- costs: Schema.Unknown,
397
- agentOutput: Schema.Array(Schema.String)
398
- });
399
- ResourceStats = Schema.Struct({ containers: Schema.Array(Schema.Struct({
400
- name: Schema.String,
401
- cpu: Schema.optional(Schema.String),
402
- mem: Schema.optional(Schema.String),
403
- status: Schema.optional(Schema.String)
404
- })) });
405
- SessionNodePresence = Schema.Literals([
406
- "active",
407
- "idle",
408
- "suspended",
409
- "ended"
410
- ]);
411
- SessionNodeType = Schema.Literals([
412
- "planning",
413
- "work",
414
- "knowledge",
415
- "strike",
416
- "lint",
417
- "review",
418
- "reviewer",
419
- "test",
420
- "ship",
421
- "merge",
422
- "legacy"
423
- ]);
424
- ReviewerRoundSummary = Schema.Struct({
425
- round: Schema.Number,
426
- status: Schema.optional(Schema.String),
427
- reviewResult: Schema.optional(Schema.String),
428
- startedAt: Schema.optional(Schema.String),
429
- endedAt: Schema.optional(Schema.String),
430
- durationSec: Schema.optional(Schema.Number),
431
- cost: Schema.optional(Schema.Number),
432
- findings: Schema.optional(Schema.Number),
433
- summary: Schema.optional(Schema.String)
434
- });
435
- ReviewerRoundMetadata = Schema.Struct({
436
- roundCount: Schema.Number,
437
- latestRound: Schema.Number,
438
- latestStatus: Schema.optional(Schema.String),
439
- latestReviewResult: Schema.optional(Schema.String),
440
- history: Schema.Array(ReviewerRoundSummary)
441
- });
442
- ModelOriginEntry = Schema.Struct({
443
- model: Schema.String,
444
- weight: Schema.Number,
445
- lo: Schema.Number,
446
- hi: Schema.Number,
447
- chosen: Schema.Boolean
448
- });
449
- ModelOrigin = Schema.Struct({
450
- spawnKey: Schema.String,
451
- resolved: Schema.String,
452
- bucket: Schema.Number,
453
- total: Schema.Number,
454
- distribution: Schema.Array(ModelOriginEntry)
455
- });
456
- SessionNode = Schema.Struct({
457
- type: SessionNodeType,
458
- role: Schema.optional(Schema.String),
459
- sessionId: Schema.String,
460
- tmuxSession: Schema.optional(Schema.String),
461
- model: Schema.String,
462
- harness: Schema.optional(Schema.String),
463
- startedAt: Schema.String,
464
- endedAt: Schema.optional(Schema.String),
465
- planningComplete: Schema.optional(Schema.Boolean),
466
- duration: Schema.NullOr(Schema.Number),
467
- status: AgentStatus,
468
- hasJsonl: Schema.optional(Schema.Boolean),
469
- transcript: Schema.optional(Schema.String),
470
- presence: SessionNodePresence,
471
- awaitingInput: Schema.optional(Schema.Boolean),
472
- awaitingInputPrompt: Schema.optional(Schema.String),
473
- awaitingInputReason: Schema.optional(Schema.String),
474
- /** Which blocking surfaces are open — names the wait in the node's indicator. */
475
- pendingInputKinds: Schema.optional(Schema.Array(Schema.String)),
476
- roundMetadata: Schema.optional(ReviewerRoundMetadata),
477
- deliveryMethod: Schema.optional(Schema.Literals([
478
- "auto",
479
- "channels",
480
- "tmux"
481
- ])),
482
- paused: Schema.optional(Schema.Boolean),
483
- pausedReason: Schema.optional(Schema.String),
484
- pausedAt: Schema.optional(Schema.String),
485
- troubled: Schema.optional(Schema.Boolean),
486
- troubledAt: Schema.optional(Schema.String),
487
- troubledReason: Schema.optional(Schema.String),
488
- consecutiveFailures: Schema.optional(Schema.Number),
489
- queuedMailCount: Schema.optional(Schema.Number),
490
- modelOrigin: Schema.optional(ModelOrigin)
491
- });
492
- FeatureNode = Schema.Struct({
493
- issueId: IssueId,
494
- title: Schema.String,
495
- sessions: Schema.Array(SessionNode)
496
- });
497
- Schema.Struct({
498
- projectKey: Schema.String,
499
- features: Schema.Array(FeatureNode)
500
- });
501
- DiscoveredSessionSnapshot = Schema.Struct({
502
- id: Schema.Number,
503
- jsonlPath: Schema.String,
504
- harness: Schema.optional(Schema.String),
505
- sessionId: Schema.optional(Schema.String),
506
- workspacePath: Schema.optional(Schema.String),
507
- workspaceHash: Schema.optional(Schema.String),
508
- messageCount: Schema.Number,
509
- firstTs: Schema.optional(Schema.String),
510
- lastTs: Schema.optional(Schema.String),
511
- modelsUsed: Schema.Array(Schema.String),
512
- primaryModel: Schema.optional(Schema.String),
513
- tokenInput: Schema.Number,
514
- tokenOutput: Schema.Number,
515
- estimatedCost: Schema.Number,
516
- toolsUsed: Schema.Array(Schema.String),
517
- filesTouched: Schema.Array(Schema.String),
518
- tags: Schema.Array(Schema.String),
519
- summary: Schema.optional(Schema.String),
520
- summaryDetailed: Schema.optional(Schema.String),
521
- conversationId: Schema.optional(Schema.String),
522
- conversationName: Schema.optional(Schema.String),
523
- conversationTitle: Schema.optional(Schema.String),
524
- enrichmentLevel: Schema.Number,
525
- enrichmentModel: Schema.optional(Schema.String),
526
- enrichedAt: Schema.optional(Schema.String),
527
- enrichmentFailed: Schema.Boolean,
528
- overdeckManaged: Schema.Boolean,
529
- panIssueId: Schema.optional(Schema.String),
530
- panAgentId: Schema.optional(Schema.String),
531
- scannedAt: Schema.String
532
- });
533
- SessionsFeedSource = Schema.Literals(["discovered", "managed-archived"]);
534
- SessionsFeedRowSnapshot = Schema.Struct({
535
- id: Schema.Number,
536
- source: SessionsFeedSource,
537
- discoveredId: Schema.optional(Schema.Number),
538
- jsonlPath: Schema.optional(Schema.String),
539
- sessionId: Schema.optional(Schema.String),
540
- workspacePath: Schema.optional(Schema.String),
541
- messageCount: Schema.Number,
542
- firstTs: Schema.optional(Schema.String),
543
- lastTs: Schema.optional(Schema.String),
544
- primaryModel: Schema.optional(Schema.String),
545
- tokenInput: Schema.Number,
546
- tokenOutput: Schema.Number,
547
- estimatedCost: Schema.Number,
548
- tags: Schema.Array(Schema.String),
549
- summary: Schema.optional(Schema.String),
550
- enrichmentLevel: Schema.Number,
551
- enrichmentFailed: Schema.Boolean,
552
- overdeckManaged: Schema.Boolean,
553
- panIssueId: Schema.optional(Schema.String),
554
- archivedAt: Schema.optional(Schema.String),
555
- conversationId: Schema.optional(Schema.String),
556
- conversationName: Schema.optional(Schema.String),
557
- conversationTitle: Schema.optional(Schema.String),
558
- harness: Schema.optional(Schema.String)
559
- });
560
- SessionsFeedFacetBucketString = Schema.Struct({
561
- value: Schema.String,
562
- count: Schema.Number
563
- });
564
- SessionsFeedFacetBucketNumber = Schema.Struct({
565
- value: Schema.Number,
566
- count: Schema.Number
567
- });
568
- SessionsFeedFacetsSnapshot = Schema.Struct({
569
- primaryModels: Schema.Array(SessionsFeedFacetBucketString),
570
- tags: Schema.Array(SessionsFeedFacetBucketString),
571
- tools: Schema.Array(SessionsFeedFacetBucketString),
572
- files: Schema.Array(SessionsFeedFacetBucketString),
573
- enrichmentLevels: Schema.Array(SessionsFeedFacetBucketNumber),
574
- timeBuckets: Schema.Array(Schema.Struct({
575
- value: Schema.Literals([
576
- "24h",
577
- "7d",
578
- "30d",
579
- "older"
580
- ]),
581
- count: Schema.Number
582
- })),
583
- costBuckets: Schema.Array(Schema.Struct({
584
- value: Schema.Literals([
585
- "<$0.10",
586
- "$0.10-1",
587
- "$1-10",
588
- ">$10"
589
- ]),
590
- count: Schema.Number
591
- })),
592
- sources: Schema.Array(Schema.Struct({
593
- value: SessionsFeedSource,
594
- count: Schema.Number
595
- }))
596
- });
597
- ConversationFilter = Schema.Struct({
598
- harness: Schema.optional(Schema.String),
599
- workspacePath: Schema.optional(Schema.String),
600
- primaryModel: Schema.optional(Schema.String),
601
- managed: Schema.optional(Schema.Boolean),
602
- unmanaged: Schema.optional(Schema.Boolean),
603
- since: Schema.optional(Schema.String),
604
- before: Schema.optional(Schema.String),
605
- after: Schema.optional(Schema.String),
606
- minCost: Schema.optional(Schema.Number),
607
- maxCost: Schema.optional(Schema.Number),
608
- minMessages: Schema.optional(Schema.Number),
609
- tags: Schema.optional(Schema.Array(Schema.String)),
610
- tools: Schema.optional(Schema.Array(Schema.String)),
611
- files: Schema.optional(Schema.Array(Schema.String)),
612
- issueId: Schema.optional(Schema.String),
613
- enrichmentLevel: Schema.optional(Schema.Number),
614
- enriched: Schema.optional(Schema.Boolean),
615
- notEnriched: Schema.optional(Schema.Boolean),
616
- query: Schema.optional(Schema.String),
617
- semantic: Schema.optional(Schema.Boolean),
618
- similarTo: Schema.optional(Schema.Number),
619
- limit: Schema.optional(Schema.Number),
620
- offset: Schema.optional(Schema.Number),
621
- format: Schema.optional(Schema.Literals([
622
- "table",
623
- "json",
624
- "brief",
625
- "ids"
626
- ]))
627
- });
628
- ConversationCostSummary = Schema.Struct({
629
- groupBy: Schema.Literals([
630
- "workspace",
631
- "model",
632
- "day",
633
- "month"
634
- ]),
635
- entries: Schema.Array(Schema.Struct({
636
- key: Schema.String,
637
- totalCost: Schema.Number,
638
- sessionCount: Schema.Number,
639
- totalTokensIn: Schema.Number,
640
- totalTokensOut: Schema.Number
641
- })),
642
- grandTotal: Schema.Number,
643
- totalTokensIn: Schema.Number,
644
- totalTokensOut: Schema.Number
645
- });
646
- ScanResult = Schema.Struct({
647
- inserted: Schema.Number,
648
- updated: Schema.Number,
649
- skipped: Schema.Number,
650
- errors: Schema.Number,
651
- durationMs: Schema.Number
652
- });
653
- })), MemoryIdentity, MemoryTokenUsage, MemoryObservation, MemoryStatusPhase, MemoryStatus, ResetMarkerScope, ResetMarker, RagDecisionSource, RagDecision, ExtractionProviderTarget;
654
- var init_memory = __esmMin((() => {
655
- init_types();
656
- MemoryIdentity = Schema.Struct({
657
- projectId: Schema.String,
658
- workspaceId: Schema.String,
659
- issueId: IssueId,
660
- runId: Schema.String,
661
- sessionId: Schema.String,
662
- agentRole: Role,
663
- agentHarness: Schema.String
664
- });
665
- MemoryTokenUsage = Schema.Struct({
666
- prompt: Schema.Number,
667
- completion: Schema.Number,
668
- total: Schema.Number
669
- });
670
- MemoryObservation = Schema.Struct({
671
- id: Schema.String,
672
- timestamp: Schema.String,
673
- projectId: Schema.String,
674
- workspaceId: Schema.String,
675
- issueId: IssueId,
676
- runId: Schema.String,
677
- sessionId: Schema.String,
678
- agentRole: Role,
679
- agentHarness: Schema.String,
680
- gitBranch: Schema.String,
681
- sourceTranscriptOffset: Schema.Number,
682
- actionStatus: Schema.NullOr(Schema.String),
683
- narrative: Schema.String,
684
- summary: Schema.String,
685
- files: Schema.Array(Schema.String),
686
- tags: Schema.Array(Schema.String),
687
- tokens: MemoryTokenUsage,
688
- model: Schema.String
689
- });
690
- MemoryStatusPhase = Schema.Literals([
691
- "exploring",
692
- "planning",
693
- "building",
694
- "verifying",
695
- "cleaning",
696
- "shipping"
697
- ]);
698
- MemoryStatus = Schema.Struct({
699
- name: Schema.String,
700
- headline: Schema.String,
701
- summary: Schema.String,
702
- goal: Schema.NullOr(Schema.String),
703
- phase: MemoryStatusPhase,
704
- accomplished: Schema.Array(Schema.String),
705
- decided: Schema.Array(Schema.String),
706
- open: Schema.Array(Schema.String),
707
- nextSteps: Schema.Array(Schema.String),
708
- confidence: Schema.Number,
709
- workingSet: Schema.Array(Schema.String),
710
- tags: Schema.Array(Schema.String)
711
- });
712
- Schema.Struct({
713
- id: Schema.String,
714
- createdAt: Schema.String,
715
- identity: MemoryIdentity,
716
- trigger: Schema.Literals([
717
- "stop-hook",
718
- "poller",
719
- "reconciliation",
720
- "manual"
721
- ]),
722
- transcriptPath: Schema.String,
723
- fromOffset: Schema.Number,
724
- toOffset: Schema.Number,
725
- lastFullLineOffset: Schema.Number,
726
- eventsConsumed: Schema.Number,
727
- compressedText: Schema.String
728
- });
729
- ResetMarkerScope = Schema.Literals([
730
- "project",
731
- "workspace",
732
- "issue",
733
- "session"
734
- ]);
735
- ResetMarker = Schema.Struct({
736
- id: Schema.String,
737
- scope: ResetMarkerScope,
738
- scopeId: Schema.String,
739
- fromTimestamp: Schema.String,
740
- reason: Schema.String,
741
- createdAt: Schema.String
742
- });
743
- RagDecisionSource = Schema.Struct({
744
- id: Schema.String,
745
- docType: Schema.Literals([
746
- "observation",
747
- "summary",
748
- "status",
749
- "sibling",
750
- "knowledge"
751
- ]),
752
- scope: Schema.String,
753
- score: Schema.Number,
754
- tokens: Schema.Number
755
- });
756
- RagDecision = Schema.Struct({
757
- id: Schema.String,
758
- timestamp: Schema.String,
759
- identity: MemoryIdentity,
760
- surface: Schema.Literals(["spawn", "user-prompt"]),
761
- outcome: Schema.Literals([
762
- "injected",
763
- "skipped",
764
- "no-hits",
765
- "expansion-failed",
766
- "context-too-large",
767
- "budget-truncated"
768
- ]),
769
- query: Schema.String,
770
- expandedTerms: Schema.Array(Schema.String),
771
- allocations: Schema.Struct({
772
- status: Schema.Number,
773
- observations: Schema.Number,
774
- summaries: Schema.Number,
775
- sibling: Schema.Number,
776
- knowledgeIndex: Schema.Number
777
- }),
778
- sources: Schema.Array(RagDecisionSource),
779
- reason: Schema.NullOr(Schema.String)
780
- });
781
- ExtractionProviderTarget = Schema.Struct({
782
- provider: Schema.String,
783
- model: Schema.String
784
- });
785
- Schema.Struct({
786
- provider: Schema.String,
787
- model: Schema.String,
788
- providerEnvVar: Schema.optional(Schema.String),
789
- modelEnvVar: Schema.optional(Schema.String),
790
- perDayCostCapUsd: Schema.Number,
791
- fallbackChain: Schema.Array(ExtractionProviderTarget)
792
- });
793
- }));
794
- //#endregion
795
- //#region ../../../packages/contracts/src/system-health.ts
796
- /**
797
- * Shared V2 system-health contract. Domain measurements use null for unavailable
798
- * evidence, unknown enum values decode to safe unavailable/unknown states, and
799
- * the legacy summary is a compatibility projection from the accepted V2 snapshot.
800
- */
801
- function isWorkAgent(agent) {
802
- return agent.kind === "work" || agent.role === "work";
803
- }
804
- function isPlanningAgent(agent) {
805
- return agent.kind === "planning" || agent.role === "plan" || agent.role === "planning";
806
- }
807
- function isSpecialistAgent(agent) {
808
- return agent.kind === "specialist" || agent.role === "review" || agent.role?.startsWith("review-") === true || agent.role === "test" || agent.role === "ship";
809
- }
810
- function projectWebhookRelay(services) {
811
- const relay = services.find((service) => service.id === "smee-relay" || service.id === "webhook-relay");
812
- if (!relay) return {
813
- configured: false,
814
- running: false,
815
- status: "unknown",
816
- message: "Webhook relay health is unavailable."
817
- };
818
- const status = relay.status === "running" || relay.status === "not_configured" || relay.status === "stopped" ? relay.status : "unknown";
819
- return {
820
- configured: relay.status !== "not_configured",
821
- running: relay.status === "running",
822
- status,
823
- message: relay.message
824
- };
825
- }
826
- /**
827
- * Projects the V2 domains into the legacy summary without recollecting state.
828
- * Diagnostic-only swap and virtual-commitment values remain visible here but
829
- * do not participate in V2 health-state evaluation.
830
- */
831
- function projectLegacySystemHealthSummary(snapshot) {
832
- const metrics = snapshot.host.metrics;
833
- const agentMemoryBytes = snapshot.agents.reduce((total, agent) => total + (agent.memoryBytes ?? 0), 0);
834
- const containers = snapshot.topConsumers.filter((consumer) => consumer.type === "container");
835
- const containerMemoryBytes = containers.reduce((total, consumer) => total + consumer.memoryBytes, 0);
836
- const overdeckMemoryBytes = agentMemoryBytes + containerMemoryBytes;
837
- const totalMemoryBytes = metrics.totalMemoryBytes ?? 0;
838
- return {
839
- cpuPercent: metrics.cpuPercent ?? 0,
840
- loadAverage1m: metrics.loadAverage1m ?? 0,
841
- loadPerCore1m: metrics.loadPerCore1m ?? 0,
842
- totalMemoryBytes,
843
- usedMemoryBytes: metrics.usedMemoryBytes ?? 0,
844
- availableMemoryBytes: metrics.availableMemoryBytes ?? 0,
845
- memoryUsedPercent: metrics.memoryUsedPercent ?? 0,
846
- swapTotalBytes: metrics.swapTotalBytes ?? 0,
847
- swapUsedBytes: metrics.swapUsedBytes ?? 0,
848
- swapUsedPercent: metrics.swapUsedPercent ?? 0,
849
- committedMemoryBytes: metrics.committedMemoryBytes ?? 0,
850
- commitLimitBytes: metrics.commitLimitBytes ?? 0,
851
- overcommitPercent: metrics.virtualCommitmentPercent ?? 0,
852
- agentCount: snapshot.agents.length,
853
- workAgentCount: snapshot.agents.filter(isWorkAgent).length,
854
- planningAgentCount: snapshot.agents.filter(isPlanningAgent).length,
855
- specialistSessionCount: snapshot.agents.filter(isSpecialistAgent).length,
856
- leakedSpecialistCount: snapshot.agents.filter((agent) => isSpecialistAgent(agent) && agent.lifecycle === "orphaned").length,
857
- containerCount: containers.length,
858
- containerMemoryBytes,
859
- overdeckMemoryBytes,
860
- overdeckMemoryPercent: totalMemoryBytes > 0 ? Math.round(overdeckMemoryBytes / totalMemoryBytes * 1e3) / 10 : 0,
861
- smeeRelay: projectWebhookRelay(snapshot.services)
862
- };
863
- }
864
- var HealthStateValue, HealthState, HealthReason, HostPlatform, HostHealthMetrics, AdmissionState, AgentHealthStatus, AgentHealthKind, SpecialistLifecycle, AgentHealthSnapshot, ServiceHealthStatus, ServiceHealthSnapshot, SystemHealthConsumer, LegacyWebhookRelaySummary, LegacySystemHealthSummary, SystemHealthSnapshot;
865
- var init_system_health = __esmMin((() => {
866
- HealthStateValue = Schema.Literals([
867
- "measuring",
868
- "healthy",
869
- "warning",
870
- "critical",
871
- "unavailable"
872
- ]);
873
- HealthState = Schema.String.pipe(Schema.decodeTo(HealthStateValue, {
874
- decode: SchemaGetter.transform((value) => HealthStateValue.literals.includes(value) ? value : "unavailable"),
875
- encode: SchemaGetter.transform((value) => value)
876
- }));
877
- HealthReason = Schema.Struct({
878
- code: Schema.String,
879
- domain: Schema.Literals([
880
- "host",
881
- "admission",
882
- "agent",
883
- "service"
884
- ]),
885
- severity: Schema.Literals([
886
- "info",
887
- "warning",
888
- "critical"
889
- ]),
890
- message: Schema.String,
891
- metric: Schema.optional(Schema.String),
892
- observed: Schema.optional(Schema.Number),
893
- threshold: Schema.optional(Schema.Number)
894
- });
895
- HostPlatform = Schema.String.pipe(Schema.decodeTo(Schema.Literals([
896
- "linux",
897
- "darwin",
898
- "unsupported"
899
- ]), {
900
- decode: SchemaGetter.transform((value) => value === "linux" || value === "darwin" || value === "unsupported" ? value : "unsupported"),
901
- encode: SchemaGetter.transform((value) => value)
902
- }));
903
- HostHealthMetrics = Schema.Struct({
904
- cpuPercent: Schema.NullOr(Schema.Number),
905
- loadAverage1m: Schema.NullOr(Schema.Number),
906
- loadPerCore1m: Schema.NullOr(Schema.Number),
907
- totalMemoryBytes: Schema.NullOr(Schema.Number),
908
- usedMemoryBytes: Schema.NullOr(Schema.Number),
909
- availableMemoryBytes: Schema.NullOr(Schema.Number),
910
- memoryUsedPercent: Schema.NullOr(Schema.Number),
911
- memoryPressureSomeAvg10: Schema.NullOr(Schema.Number),
912
- memoryPressureFullAvg10: Schema.NullOr(Schema.Number),
913
- memoryPressureFreePercent: Schema.NullOr(Schema.Number),
914
- swapTotalBytes: Schema.NullOr(Schema.Number),
915
- swapUsedBytes: Schema.NullOr(Schema.Number),
916
- swapUsedPercent: Schema.NullOr(Schema.Number),
917
- swapActivityBytesPerMinute: Schema.NullOr(Schema.Number),
918
- committedMemoryBytes: Schema.NullOr(Schema.Number),
919
- commitLimitBytes: Schema.NullOr(Schema.Number),
920
- virtualCommitmentPercent: Schema.NullOr(Schema.Number)
921
- });
922
- AdmissionState = Schema.String.pipe(Schema.decodeTo(Schema.Literals([
923
- "open",
924
- "soft",
925
- "blocked",
926
- "unavailable"
927
- ]), {
928
- decode: SchemaGetter.transform((value) => value === "open" || value === "soft" || value === "blocked" || value === "unavailable" ? value : "unavailable"),
929
- encode: SchemaGetter.transform((value) => value)
930
- }));
931
- AgentHealthStatus = Schema.String.pipe(Schema.decodeTo(Schema.Literals([
932
- "healthy",
933
- "idle",
934
- "waiting",
935
- "warning",
936
- "stalled",
937
- "wedged",
938
- "dead",
939
- "unavailable"
940
- ]), {
941
- decode: SchemaGetter.transform((value) => value === "healthy" || value === "idle" || value === "waiting" || value === "warning" || value === "stalled" || value === "wedged" || value === "dead" || value === "unavailable" ? value : "unavailable"),
942
- encode: SchemaGetter.transform((value) => value)
943
- }));
944
- AgentHealthKind = Schema.String.pipe(Schema.decodeTo(Schema.Literals([
945
- "work",
946
- "planning",
947
- "specialist",
948
- "conversation",
949
- "other"
950
- ]), {
951
- decode: SchemaGetter.transform((value) => value === "work" || value === "planning" || value === "specialist" || value === "conversation" || value === "other" ? value : "other"),
952
- encode: SchemaGetter.transform((value) => value)
953
- }));
954
- SpecialistLifecycle = Schema.String.pipe(Schema.decodeTo(Schema.Literals([
955
- "active",
956
- "warm",
957
- "orphaned",
958
- "unknown"
959
- ]), {
960
- decode: SchemaGetter.transform((value) => value === "active" || value === "warm" || value === "orphaned" || value === "unknown" ? value : "unknown"),
961
- encode: SchemaGetter.transform((value) => value)
962
- }));
963
- AgentHealthSnapshot = Schema.Struct({
964
- id: Schema.String,
965
- issueId: Schema.optional(Schema.String),
966
- role: Schema.optional(Schema.String),
967
- kind: Schema.optional(AgentHealthKind),
968
- status: AgentHealthStatus,
969
- lifecycle: Schema.optional(SpecialistLifecycle),
970
- tmuxActive: Schema.optional(Schema.Boolean),
971
- memoryBytes: Schema.optional(Schema.Number),
972
- memoryGb: Schema.optional(Schema.Number),
973
- cpuPercent: Schema.optional(Schema.Number),
974
- currentIssue: Schema.optional(Schema.String),
975
- lastActivityAt: Schema.optional(Schema.String),
976
- consecutiveFailures: Schema.optional(Schema.Number),
977
- killCount: Schema.optional(Schema.Number),
978
- contextPercent: Schema.optional(Schema.NullOr(Schema.Number)),
979
- reasons: Schema.Array(HealthReason)
980
- });
981
- ServiceHealthStatus = Schema.String.pipe(Schema.decodeTo(Schema.Literals([
982
- "running",
983
- "not_configured",
984
- "degraded",
985
- "stopped",
986
- "unavailable"
987
- ]), {
988
- decode: SchemaGetter.transform((value) => value === "running" || value === "not_configured" || value === "degraded" || value === "stopped" || value === "unavailable" ? value : "unavailable"),
989
- encode: SchemaGetter.transform((value) => value)
990
- }));
991
- ServiceHealthSnapshot = Schema.Struct({
992
- id: Schema.String,
993
- label: Schema.optional(Schema.String),
994
- required: Schema.optional(Schema.Boolean),
995
- status: ServiceHealthStatus,
996
- message: Schema.String,
997
- reasons: Schema.Array(HealthReason)
998
- });
999
- SystemHealthConsumer = Schema.Struct({
1000
- id: Schema.String,
1001
- label: Schema.String,
1002
- type: Schema.Literals([
1003
- "agent",
1004
- "specialist",
1005
- "container"
1006
- ]),
1007
- memoryBytes: Schema.Number,
1008
- memoryGb: Schema.Number,
1009
- cpuPercent: Schema.optional(Schema.Number),
1010
- issueId: Schema.optional(Schema.String),
1011
- currentIssue: Schema.optional(Schema.String),
1012
- leaked: Schema.optional(Schema.Boolean),
1013
- killTarget: Schema.optional(Schema.Struct({
1014
- kind: Schema.Literals([
1015
- "agent",
1016
- "specialist",
1017
- "container"
1018
- ]),
1019
- agentId: Schema.optional(Schema.String),
1020
- containerId: Schema.optional(Schema.String),
1021
- projectKey: Schema.optional(Schema.String),
1022
- issueId: Schema.optional(Schema.String),
1023
- specialistType: Schema.optional(Schema.String)
1024
- }))
1025
- });
1026
- LegacyWebhookRelaySummary = Schema.Struct({
1027
- configured: Schema.Boolean,
1028
- running: Schema.Boolean,
1029
- status: Schema.Literals([
1030
- "not_configured",
1031
- "running",
1032
- "stopped",
1033
- "unknown"
1034
- ]),
1035
- message: Schema.String
1036
- });
1037
- LegacySystemHealthSummary = Schema.Struct({
1038
- cpuPercent: Schema.Number,
1039
- loadAverage1m: Schema.Number,
1040
- loadPerCore1m: Schema.Number,
1041
- totalMemoryBytes: Schema.Number,
1042
- usedMemoryBytes: Schema.Number,
1043
- availableMemoryBytes: Schema.Number,
1044
- memoryUsedPercent: Schema.Number,
1045
- swapTotalBytes: Schema.Number,
1046
- swapUsedBytes: Schema.Number,
1047
- swapUsedPercent: Schema.Number,
1048
- committedMemoryBytes: Schema.Number,
1049
- commitLimitBytes: Schema.Number,
1050
- overcommitPercent: Schema.Number,
1051
- agentCount: Schema.Number,
1052
- workAgentCount: Schema.Number,
1053
- planningAgentCount: Schema.Number,
1054
- specialistSessionCount: Schema.Number,
1055
- leakedSpecialistCount: Schema.Number,
1056
- containerCount: Schema.Number,
1057
- containerMemoryBytes: Schema.Number,
1058
- overdeckMemoryBytes: Schema.Number,
1059
- overdeckMemoryPercent: Schema.Number,
1060
- smeeRelay: LegacyWebhookRelaySummary
1061
- });
1062
- SystemHealthSnapshot = Schema.Struct({
1063
- version: Schema.Literal(2),
1064
- state: HealthState,
1065
- updatedAt: Schema.String,
1066
- nextPollMs: Schema.Number,
1067
- host: Schema.Struct({
1068
- state: HealthState,
1069
- platform: HostPlatform,
1070
- reasons: Schema.Array(HealthReason),
1071
- metrics: HostHealthMetrics
1072
- }),
1073
- admission: Schema.Struct({
1074
- state: AdmissionState,
1075
- availableMemoryBytes: Schema.NullOr(Schema.Number),
1076
- admittedWorkAgentCount: Schema.Number,
1077
- reasons: Schema.Array(HealthReason)
1078
- }),
1079
- agents: Schema.Array(AgentHealthSnapshot),
1080
- services: Schema.Array(ServiceHealthSnapshot),
1081
- topConsumers: Schema.Array(SystemHealthConsumer),
1082
- summary: LegacySystemHealthSummary
1083
- });
1084
- }));
1085
- //#endregion
1086
- //#region ../../../packages/contracts/src/events.ts
1087
- var SystemHeartbeatEvent, BeadsFreshnessChangedEvent, AgentStartedEvent, AgentStoppedEvent, AgentHeartbeatDeadEvent, WorkCompletedEvent, AgentCompletedEvent, ReviewApprovedEvent, TestPassedEvent, AgentStatusChangedEvent, AgentOutputReceivedEvent, AgentEnrichmentChangedEvent, AgentCreatedEvent, AgentActivityChangedEvent, AgentThinkingStartedEvent, AgentThinkingStoppedEvent, AgentWaitingStartedEvent, AgentWaitingClearedEvent, AgentPermissionRequestedEvent, AgentPermissionResolvedEvent, AgentMessageReceivedEvent, AgentChannelReplyEvent, AgentModelSetEvent, AgentCurrentIssueSetEvent, AgentContextSaturationChangedEvent, AgentResolutionChangedEvent, AgentStateRestoredEvent, AgentTurnDiffCompletedEvent, PlanningStartedEvent, PlanningFailedEvent, PlanningSyncEvent, PlanItemStatusChangedEvent, PlanSubitemStatusChangedEvent, PlanItemsUnblockedEvent, PipelineStatusChangedEvent, MergeReadyEvent, ReviewStatusChangedEvent, PipelineReviewStartedEvent, PipelineReviewCompletedEvent, PipelineTestStartedEvent, PipelineTestCompletedEvent, PipelineVerificationStartedEvent, PipelineVerificationFailedEvent, IssueTransitionedEvent, OperatorInterventionEvent, SubstrateBugFiledEvent, ReviewReviewerStartedEvent, ReviewReviewerCompletedEvent, ReviewSpecialistTimedOutEvent, ReviewCoordinatorStartedEvent, ReviewCoordinatorDiedEvent, SpecialistLifecycleState, SpecialistStartedEvent, SpecialistCompletedEvent, SpecialistFailedEvent, ResourcesUpdatedEvent, SystemHealthSeverityChangedEvent, IssuesSnapshotEvent, IssuesUpdatedEvent, IssueStatusChangedEvent, ActivityUpdatedEvent, ActivityEntryEvent, ActivityDetailedEvent, ActivityTtsEvent, DashboardLifecycleStartedEvent, DashboardLifecycleCompletedEvent, DashboardLifecycleFailedEvent, ShadowInferenceUpdateEvent, WorkspaceCreatedEvent, WorkspaceWipeStartedEvent, WorkspaceDestroyedEvent, WorkspaceDeletedEvent, WorkspaceAbortedEvent, MemoryObservationCreatedEvent, MemoryStatusUpdatedEvent, MemoryRollupTriggeredEvent, MemoryResetMarkerCreatedEvent, MemoryHealthChangedEvent, CostEventRecordedEvent, ConversationCompactingChangedEvent, ConversationCreatedEvent, ConversationTitleChangedEvent, ConversationPermissionChangedEvent, ScanStartedEvent, ScanProgressEvent, ScanCompleteEvent, EnrichProgressEvent, EnrichCompleteEvent, EmbedProgressEvent, DomainEvent;
1088
- var init_events = __esmMin((() => {
1089
- init_types();
1090
- init_memory();
1091
- init_system_health();
1092
- SystemHeartbeatEvent = Schema.Struct({
1093
- type: Schema.Literal("system.heartbeat"),
1094
- timestamp: Schema.String,
1095
- payload: Schema.Struct({ ts: Schema.Number })
1096
- });
1097
- BeadsFreshnessChangedEvent = Schema.Struct({
1098
- type: Schema.Literal("beads.freshness_changed"),
1099
- sequence: SequenceNumber,
1100
- timestamp: Schema.String,
1101
- payload: Schema.Struct({
1102
- projectKey: Schema.String,
1103
- localHead: Schema.String,
1104
- lastSyncedAt: Schema.String
1105
- })
1106
- });
1107
- AgentStartedEvent = Schema.Struct({
1108
- type: Schema.Literal("agent.started"),
1109
- sequence: SequenceNumber,
1110
- timestamp: Schema.String,
1111
- payload: Schema.Struct({
1112
- agentId: AgentId,
1113
- issueId: IssueId,
1114
- agent: AgentSnapshot
1115
- })
1116
- });
1117
- AgentStoppedEvent = Schema.Struct({
1118
- type: Schema.Literal("agent.stopped"),
1119
- sequence: SequenceNumber,
1120
- timestamp: Schema.String,
1121
- payload: Schema.Struct({
1122
- agentId: AgentId,
1123
- issueId: IssueId,
1124
- sessionId: Schema.optional(Schema.String)
1125
- })
1126
- });
1127
- AgentHeartbeatDeadEvent = Schema.Struct({
1128
- type: Schema.Literal("agent.heartbeat_dead"),
1129
- sequence: SequenceNumber,
1130
- timestamp: Schema.String,
1131
- payload: Schema.Struct({
1132
- agentId: AgentId,
1133
- issueId: Schema.optional(IssueId),
1134
- sessionId: Schema.optional(Schema.String)
1135
- })
1136
- });
1137
- WorkCompletedEvent = Schema.Struct({
1138
- type: Schema.Literal("work.completed"),
1139
- sequence: SequenceNumber,
1140
- timestamp: Schema.String,
1141
- payload: Schema.Struct({
1142
- issueId: IssueId,
1143
- agentId: Schema.optional(AgentId)
1144
- })
1145
- });
1146
- AgentCompletedEvent = Schema.Struct({
1147
- type: Schema.Literal("agent.completed"),
1148
- sequence: SequenceNumber,
1149
- timestamp: Schema.String,
1150
- payload: Schema.Struct({
1151
- issueId: IssueId,
1152
- agentId: Schema.optional(AgentId),
1153
- role: Schema.optional(Role)
1154
- })
1155
- });
1156
- ReviewApprovedEvent = Schema.Struct({
1157
- type: Schema.Literal("review.approved"),
1158
- sequence: SequenceNumber,
1159
- timestamp: Schema.String,
1160
- payload: Schema.Struct({ issueId: IssueId })
1161
- });
1162
- TestPassedEvent = Schema.Struct({
1163
- type: Schema.Literal("test.passed"),
1164
- sequence: SequenceNumber,
1165
- timestamp: Schema.String,
1166
- payload: Schema.Struct({ issueId: IssueId })
1167
- });
1168
- AgentStatusChangedEvent = Schema.Struct({
1169
- type: Schema.Literal("agent.status_changed"),
1170
- sequence: SequenceNumber,
1171
- timestamp: Schema.String,
1172
- payload: Schema.Struct({
1173
- agentId: AgentId,
1174
- issueId: Schema.optional(IssueId),
1175
- status: AgentStatus,
1176
- previousStatus: Schema.optional(AgentStatus),
1177
- hasLiveTmuxSession: Schema.optional(Schema.Boolean),
1178
- stoppedByUser: Schema.optional(Schema.Boolean),
1179
- stoppedByPause: Schema.optional(Schema.Boolean),
1180
- paused: Schema.optional(Schema.Boolean),
1181
- pausedReason: Schema.optional(Schema.NullOr(Schema.String)),
1182
- pausedAt: Schema.optional(Schema.NullOr(Schema.String)),
1183
- troubled: Schema.optional(Schema.Boolean),
1184
- troubledAt: Schema.optional(Schema.NullOr(Schema.String)),
1185
- consecutiveFailures: Schema.optional(Schema.Number),
1186
- firstFailureInRunAt: Schema.optional(Schema.NullOr(Schema.String)),
1187
- lastFailureAt: Schema.optional(Schema.NullOr(Schema.String)),
1188
- lastFailureReason: Schema.optional(Schema.NullOr(Schema.String)),
1189
- lastFailureNextRetryAt: Schema.optional(Schema.NullOr(Schema.String)),
1190
- kickoffDelivered: Schema.optional(Schema.Boolean),
1191
- hostOverride: Schema.optional(Schema.Boolean),
1192
- role: Schema.optional(Role),
1193
- model: Schema.optional(Schema.String),
1194
- workspace: Schema.optional(Schema.String),
1195
- sessionId: Schema.optional(Schema.String),
1196
- lastActivity: Schema.optional(Schema.String),
1197
- lastResumeAt: Schema.optional(Schema.String),
1198
- stoppedAt: Schema.optional(Schema.String),
1199
- branch: Schema.optional(Schema.String),
1200
- costSoFar: Schema.optional(Schema.Number),
1201
- phase: Schema.optional(Schema.String),
1202
- workType: Schema.optional(Schema.String),
1203
- roleRunHead: Schema.optional(Schema.String),
1204
- flywheelRunId: Schema.optional(Schema.String),
1205
- reviewSubRole: Schema.optional(Schema.String),
1206
- reviewRunId: Schema.optional(Schema.String),
1207
- reviewOutputPath: Schema.optional(Schema.String),
1208
- reviewSynthesisAgentId: Schema.optional(Schema.String),
1209
- reviewDeadlineAt: Schema.optional(Schema.String),
1210
- reviewMonitorSignaled: Schema.optional(Schema.String),
1211
- reviewRetryAttempt: Schema.optional(Schema.Number),
1212
- inspectSubRole: Schema.optional(Schema.String),
1213
- deliveryMethod: Schema.optional(Schema.String),
1214
- supervisorEnabled: Schema.optional(Schema.Boolean),
1215
- channelsEnabled: Schema.optional(Schema.Boolean)
1216
- })
1217
- });
1218
- AgentOutputReceivedEvent = Schema.Struct({
1219
- type: Schema.Literal("agent.output_received"),
1220
- sequence: SequenceNumber,
1221
- timestamp: Schema.String,
1222
- payload: Schema.Struct({
1223
- agentId: AgentId,
1224
- lines: Schema.Array(Schema.String)
1225
- })
1226
- });
1227
- AgentEnrichmentChangedEvent = Schema.Struct({
1228
- type: Schema.Literal("agent.enrichment_changed"),
1229
- sequence: SequenceNumber,
1230
- timestamp: Schema.String,
1231
- payload: Schema.Struct({
1232
- agentId: AgentId,
1233
- role: Schema.optional(Role),
1234
- hasPendingQuestion: Schema.optional(Schema.Boolean),
1235
- pendingQuestionCount: Schema.optional(Schema.Number),
1236
- pendingQuestionPrompt: Schema.optional(Schema.String),
1237
- pendingQuestionReason: Schema.optional(Schema.String),
1238
- pendingInputCount: Schema.optional(Schema.Number),
1239
- pendingInputKinds: Schema.optional(Schema.Array(Schema.String)),
1240
- pendingAskUserQuestion: Schema.optional(Schema.Struct({
1241
- toolUseId: Schema.String,
1242
- askedAt: Schema.String,
1243
- questions: Schema.Array(Schema.Struct({
1244
- question: Schema.String,
1245
- header: Schema.optional(Schema.String),
1246
- multiSelect: Schema.optional(Schema.Boolean),
1247
- options: Schema.Array(Schema.Struct({
1248
- label: Schema.String,
1249
- description: Schema.optional(Schema.String)
1250
- }))
1251
- }))
1252
- })),
1253
- pendingProposedPlan: Schema.optional(Schema.Struct({
1254
- toolUseId: Schema.String,
1255
- askedAt: Schema.String,
1256
- plan: Schema.String
1257
- })),
1258
- resolution: Schema.optional(AgentResolution),
1259
- resolutionCount: Schema.optional(Schema.Number)
1260
- })
1261
- });
1262
- AgentCreatedEvent = Schema.Struct({
1263
- type: Schema.Literal("agent.created"),
1264
- sequence: SequenceNumber,
1265
- timestamp: Schema.String,
1266
- payload: Schema.Struct({
1267
- agentId: AgentId,
1268
- issueId: IssueId,
1269
- agent: AgentSnapshot
1270
- })
1271
- });
1272
- AgentActivityChangedEvent = Schema.Struct({
1273
- type: Schema.Literal("agent.activity_changed"),
1274
- sequence: SequenceNumber,
1275
- timestamp: Schema.String,
1276
- payload: Schema.Struct({
1277
- agentId: AgentId,
1278
- activity: Activity,
1279
- currentTool: Schema.optional(Schema.String)
1280
- })
1281
- });
1282
- AgentThinkingStartedEvent = Schema.Struct({
1283
- type: Schema.Literal("agent.thinking_started"),
1284
- sequence: SequenceNumber,
1285
- timestamp: Schema.String,
1286
- payload: Schema.Struct({
1287
- agentId: AgentId,
1288
- lastToolAt: Schema.String
1289
- })
1290
- });
1291
- AgentThinkingStoppedEvent = Schema.Struct({
1292
- type: Schema.Literal("agent.thinking_stopped"),
1293
- sequence: SequenceNumber,
1294
- timestamp: Schema.String,
1295
- payload: Schema.Struct({
1296
- agentId: AgentId,
1297
- resolvedBy: Schema.Literals([
1298
- "tool",
1299
- "waiting",
1300
- "idle",
1301
- "stopped"
1302
- ])
1303
- })
1304
- });
1305
- AgentWaitingStartedEvent = Schema.Struct({
1306
- type: Schema.Literal("agent.waiting_started"),
1307
- sequence: SequenceNumber,
1308
- timestamp: Schema.String,
1309
- payload: Schema.Struct({
1310
- agentId: AgentId,
1311
- reason: WaitingReason,
1312
- message: Schema.optional(Schema.String)
1313
- })
1314
- });
1315
- AgentWaitingClearedEvent = Schema.Struct({
1316
- type: Schema.Literal("agent.waiting_cleared"),
1317
- sequence: SequenceNumber,
1318
- timestamp: Schema.String,
1319
- payload: Schema.Struct({
1320
- agentId: AgentId,
1321
- clearedBy: Schema.Literals([
1322
- "user_response",
1323
- "timeout",
1324
- "stopped",
1325
- "tool_resumed"
1326
- ])
1327
- })
1328
- });
1329
- AgentPermissionRequestedEvent = Schema.Struct({
1330
- type: Schema.Literal("agent.permission_requested"),
1331
- sequence: SequenceNumber,
1332
- timestamp: Schema.String,
1333
- payload: ChannelPermissionRequestSnapshot
1334
- });
1335
- AgentPermissionResolvedEvent = Schema.Struct({
1336
- type: Schema.Literal("agent.permission_resolved"),
1337
- sequence: SequenceNumber,
1338
- timestamp: Schema.String,
1339
- payload: Schema.Struct({
1340
- requestId: Schema.String,
1341
- agentId: AgentId,
1342
- issueId: Schema.optional(IssueId),
1343
- behavior: ClaudeChannelPermissionBehavior
1344
- })
1345
- });
1346
- AgentMessageReceivedEvent = Schema.Struct({
1347
- type: Schema.Literal("agent.message_received"),
1348
- sequence: SequenceNumber,
1349
- timestamp: Schema.String,
1350
- payload: Schema.Struct({
1351
- agentId: AgentId,
1352
- direction: Schema.Literals(["to_agent", "from_agent"]),
1353
- source: Schema.Literals([
1354
- "user",
1355
- "cloister",
1356
- "specialist",
1357
- "automated"
1358
- ])
1359
- })
1360
- });
1361
- AgentChannelReplyEvent = Schema.Struct({
1362
- type: Schema.Literal("agent.channel_reply"),
1363
- sequence: SequenceNumber,
1364
- timestamp: Schema.String,
1365
- payload: Schema.Struct({
1366
- agentId: AgentId,
1367
- reply: AgentChannelReply
1368
- })
1369
- });
1370
- AgentModelSetEvent = Schema.Struct({
1371
- type: Schema.Literal("agent.model_set"),
1372
- sequence: SequenceNumber,
1373
- timestamp: Schema.String,
1374
- payload: Schema.Struct({
1375
- agentId: AgentId,
1376
- model: Schema.String,
1377
- claudeSessionId: Schema.optional(Schema.String),
1378
- sessionModel: Schema.optional(Schema.String),
1379
- sessionHarness: Schema.optional(Schema.String)
1380
- })
1381
- });
1382
- AgentCurrentIssueSetEvent = Schema.Struct({
1383
- type: Schema.Literal("agent.current_issue_set"),
1384
- sequence: SequenceNumber,
1385
- timestamp: Schema.String,
1386
- payload: Schema.Struct({
1387
- agentId: AgentId,
1388
- currentIssue: Schema.optional(IssueId)
1389
- })
1390
- });
1391
- AgentContextSaturationChangedEvent = Schema.Struct({
1392
- type: Schema.Literal("agent.context_saturation_changed"),
1393
- sequence: SequenceNumber,
1394
- timestamp: Schema.String,
1395
- payload: Schema.Struct({
1396
- agentId: AgentId,
1397
- contextSaturatedAt: Schema.optional(Schema.String)
1398
- })
1399
- });
1400
- AgentResolutionChangedEvent = Schema.Struct({
1401
- type: Schema.Literal("agent.resolution_changed"),
1402
- sequence: SequenceNumber,
1403
- timestamp: Schema.String,
1404
- payload: Schema.Struct({
1405
- agentId: AgentId,
1406
- resolution: AgentResolution,
1407
- resolutionCount: Schema.Number
1408
- })
1409
- });
1410
- AgentStateRestoredEvent = Schema.Struct({
1411
- type: Schema.Literal("agent.state_restored"),
1412
- sequence: SequenceNumber,
1413
- timestamp: Schema.String,
1414
- payload: Schema.Struct({
1415
- agentId: AgentId,
1416
- snapshot: AgentRuntimeSnapshot
1417
- })
1418
- });
1419
- AgentTurnDiffCompletedEvent = Schema.Struct({
1420
- type: Schema.Literal("agent.turn_diff_completed"),
1421
- sequence: SequenceNumber,
1422
- timestamp: Schema.String,
1423
- payload: Schema.Struct({
1424
- agentId: AgentId,
1425
- turnId: Schema.String,
1426
- completedAt: Schema.String,
1427
- files: Schema.Array(Schema.Struct({
1428
- path: Schema.String,
1429
- kind: Schema.optional(Schema.String),
1430
- additions: Schema.optional(Schema.Number),
1431
- deletions: Schema.optional(Schema.Number)
1432
- })),
1433
- checkpointRef: Schema.optional(Schema.String),
1434
- assistantMessageId: Schema.optional(Schema.String),
1435
- checkpointTurnCount: Schema.optional(Schema.Number)
1436
- })
1437
- });
1438
- PlanningStartedEvent = Schema.Struct({
1439
- type: Schema.Literal("planning.started"),
1440
- sequence: SequenceNumber,
1441
- timestamp: Schema.String,
1442
- payload: Schema.Struct({
1443
- issueId: IssueId,
1444
- sessionName: Schema.String,
1445
- harness: Schema.optional(Schema.String)
1446
- })
1447
- });
1448
- PlanningFailedEvent = Schema.Struct({
1449
- type: Schema.Literal("planning.failed"),
1450
- sequence: SequenceNumber,
1451
- timestamp: Schema.String,
1452
- payload: Schema.Struct({
1453
- issueId: IssueId,
1454
- error: Schema.String
1455
- })
1456
- });
1457
- PlanningSyncEvent = Schema.Struct({
1458
- type: Schema.Literal("planning.sync"),
1459
- sequence: SequenceNumber,
1460
- timestamp: Schema.String,
1461
- payload: Schema.Struct({
1462
- issueId: IssueId,
1463
- status: Schema.String,
1464
- progress: Schema.optional(Schema.Number),
1465
- message: Schema.optional(Schema.String)
1466
- })
1467
- });
1468
- PlanItemStatusChangedEvent = Schema.Struct({
1469
- type: Schema.Literal("plan.item_status_changed"),
1470
- sequence: SequenceNumber,
1471
- timestamp: Schema.String,
1472
- payload: Schema.Struct({
1473
- issueId: IssueId,
1474
- itemId: Schema.String,
1475
- status: Schema.String
1476
- })
1477
- });
1478
- PlanSubitemStatusChangedEvent = Schema.Struct({
1479
- type: Schema.Literal("plan.subitem_status_changed"),
1480
- sequence: SequenceNumber,
1481
- timestamp: Schema.String,
1482
- payload: Schema.Struct({
1483
- issueId: IssueId,
1484
- itemId: Schema.String,
1485
- subItemId: Schema.String,
1486
- status: Schema.String
1487
- })
1488
- });
1489
- PlanItemsUnblockedEvent = Schema.Struct({
1490
- type: Schema.Literal("plan.items_unblocked"),
1491
- sequence: SequenceNumber,
1492
- timestamp: Schema.String,
1493
- payload: Schema.Struct({
1494
- issueId: IssueId,
1495
- items: Schema.Array(Schema.String)
1496
- })
1497
- });
1498
- PipelineStatusChangedEvent = Schema.Struct({
1499
- type: Schema.Literal("pipeline.status_changed"),
1500
- sequence: SequenceNumber,
1501
- timestamp: Schema.String,
1502
- payload: Schema.Struct({
1503
- issueId: IssueId,
1504
- status: ReviewStatusSnapshot
1505
- })
1506
- });
1507
- MergeReadyEvent = Schema.Struct({
1508
- type: Schema.Literal("merge.ready"),
1509
- sequence: SequenceNumber,
1510
- timestamp: Schema.String,
1511
- payload: Schema.Struct({ issueId: IssueId })
1512
- });
1513
- ReviewStatusChangedEvent = Schema.Struct({
1514
- type: Schema.Literal("review.status_changed"),
1515
- sequence: SequenceNumber,
1516
- timestamp: Schema.String,
1517
- payload: Schema.Struct({
1518
- issueId: IssueId,
1519
- status: ReviewStatusSnapshot
1520
- })
1521
- });
1522
- PipelineReviewStartedEvent = Schema.Struct({
1523
- type: Schema.Literal("pipeline.review-started"),
1524
- sequence: SequenceNumber,
1525
- timestamp: Schema.String,
1526
- payload: Schema.Struct({ issueId: IssueId })
1527
- });
1528
- PipelineReviewCompletedEvent = Schema.Struct({
1529
- type: Schema.Literal("pipeline.review-completed"),
1530
- sequence: SequenceNumber,
1531
- timestamp: Schema.String,
1532
- payload: Schema.Struct({
1533
- issueId: IssueId,
1534
- passed: Schema.Boolean
1535
- })
1536
- });
1537
- PipelineTestStartedEvent = Schema.Struct({
1538
- type: Schema.Literal("pipeline.test-started"),
1539
- sequence: SequenceNumber,
1540
- timestamp: Schema.String,
1541
- payload: Schema.Struct({ issueId: IssueId })
1542
- });
1543
- PipelineTestCompletedEvent = Schema.Struct({
1544
- type: Schema.Literal("pipeline.test-completed"),
1545
- sequence: SequenceNumber,
1546
- timestamp: Schema.String,
1547
- payload: Schema.Struct({
1548
- issueId: IssueId,
1549
- passed: Schema.Boolean
1550
- })
1551
- });
1552
- PipelineVerificationStartedEvent = Schema.Struct({
1553
- type: Schema.Literal("pipeline.verification-started"),
1554
- sequence: SequenceNumber,
1555
- timestamp: Schema.String,
1556
- payload: Schema.Struct({ issueId: IssueId })
1557
- });
1558
- PipelineVerificationFailedEvent = Schema.Struct({
1559
- type: Schema.Literal("pipeline.verification-failed"),
1560
- sequence: SequenceNumber,
1561
- timestamp: Schema.String,
1562
- payload: Schema.Struct({
1563
- issueId: IssueId,
1564
- failedCheck: Schema.optional(Schema.String),
1565
- message: Schema.optional(Schema.String)
1566
- })
1567
- });
1568
- IssueTransitionedEvent = Schema.Struct({
1569
- type: Schema.Literal("issue.transitioned"),
1570
- sequence: SequenceNumber,
1571
- timestamp: Schema.String,
1572
- payload: Schema.Struct({
1573
- issueId: IssueId,
1574
- state: Schema.String
1575
- })
1576
- });
1577
- OperatorInterventionEvent = Schema.Struct({
1578
- type: Schema.Literal("operator.intervention"),
1579
- sequence: SequenceNumber,
1580
- timestamp: Schema.String,
1581
- payload: Schema.Struct({
1582
- issueId: IssueId,
1583
- kind: Schema.Literals([
1584
- "tell",
1585
- "pause",
1586
- "restart",
1587
- "manual_edit",
1588
- "deep_wipe",
1589
- "unpause",
1590
- "untroubled"
1591
- ]),
1592
- source: Schema.String
1593
- })
1594
- });
1595
- SubstrateBugFiledEvent = Schema.Struct({
1596
- type: Schema.Literal("substrate.bug_filed"),
1597
- sequence: SequenceNumber,
1598
- timestamp: Schema.String,
1599
- payload: Schema.Struct({
1600
- issueId: IssueId,
1601
- runId: Schema.optional(Schema.String),
1602
- filedBy: Schema.Literals(["agent", "operator"]),
1603
- discoveredIn: Schema.optional(IssueId),
1604
- severity: Schema.Literals([
1605
- "P0",
1606
- "P1",
1607
- "P2"
1608
- ])
1609
- })
1610
- });
1611
- ReviewReviewerStartedEvent = Schema.Struct({
1612
- type: Schema.Literal("review.reviewer_started"),
1613
- sequence: SequenceNumber,
1614
- timestamp: Schema.String,
1615
- payload: Schema.Struct({
1616
- issueId: IssueId,
1617
- role: Schema.String,
1618
- sessionName: Schema.String
1619
- })
1620
- });
1621
- ReviewReviewerCompletedEvent = Schema.Struct({
1622
- type: Schema.Literal("review.reviewer_completed"),
1623
- sequence: SequenceNumber,
1624
- timestamp: Schema.String,
1625
- payload: Schema.Struct({
1626
- issueId: IssueId,
1627
- role: Schema.String
1628
- })
1629
- });
1630
- ReviewSpecialistTimedOutEvent = Schema.Struct({
1631
- type: Schema.Literal("review.specialist.timed_out"),
1632
- sequence: SequenceNumber,
1633
- timestamp: Schema.String,
1634
- payload: Schema.Struct({
1635
- issueId: IssueId,
1636
- role: Schema.String,
1637
- sessionName: Schema.String,
1638
- attempt: Schema.Number,
1639
- maxRetries: Schema.Number,
1640
- willRetry: Schema.Boolean
1641
- })
1642
- });
1643
- ReviewCoordinatorStartedEvent = Schema.Struct({
1644
- type: Schema.Literal("review.coordinator_started"),
1645
- sequence: SequenceNumber,
1646
- timestamp: Schema.String,
1647
- payload: Schema.Struct({
1648
- issueId: IssueId,
1649
- sessionName: Schema.String
1650
- })
1651
- });
1652
- ReviewCoordinatorDiedEvent = Schema.Struct({
1653
- type: Schema.Literal("review.coordinator.died"),
1654
- sequence: SequenceNumber,
1655
- timestamp: Schema.String,
1656
- payload: Schema.Struct({
1657
- issueId: IssueId,
1658
- sessionName: Schema.String,
1659
- reason: Schema.String
1660
- })
1661
- });
1662
- SpecialistLifecycleState = Schema.Literals([
1663
- "active",
1664
- "sleeping",
1665
- "uninitialized"
1666
- ]);
1667
- SpecialistStartedEvent = Schema.Struct({
1668
- type: Schema.Literal("specialist.started"),
1669
- sequence: SequenceNumber,
1670
- timestamp: Schema.String,
1671
- payload: Schema.Struct({
1672
- name: Role,
1673
- state: SpecialistLifecycleState,
1674
- isRunning: Schema.Boolean,
1675
- currentIssue: Schema.optional(Schema.String),
1676
- lastWake: Schema.optional(Schema.String)
1677
- })
1678
- });
1679
- SpecialistCompletedEvent = Schema.Struct({
1680
- type: Schema.Literal("specialist.completed"),
1681
- sequence: SequenceNumber,
1682
- timestamp: Schema.String,
1683
- payload: Schema.Struct({
1684
- name: Role,
1685
- issueId: Schema.optional(IssueId)
1686
- })
1687
- });
1688
- SpecialistFailedEvent = Schema.Struct({
1689
- type: Schema.Literal("specialist.failed"),
1690
- sequence: SequenceNumber,
1691
- timestamp: Schema.String,
1692
- payload: Schema.Struct({
1693
- name: Role,
1694
- issueId: Schema.optional(IssueId),
1695
- error: Schema.String
1696
- })
1697
- });
1698
- ResourcesUpdatedEvent = Schema.Struct({
1699
- type: Schema.Literal("resources.updated"),
1700
- sequence: SequenceNumber,
1701
- timestamp: Schema.String,
1702
- payload: Schema.Struct({ resources: ResourceStats })
1703
- });
1704
- SystemHealthSeverityChangedEvent = Schema.Struct({
1705
- type: Schema.Literal("system.health_severity_changed"),
1706
- sequence: SequenceNumber,
1707
- timestamp: Schema.String,
1708
- payload: Schema.Struct({
1709
- previousSeverity: Schema.String,
1710
- severity: Schema.String,
1711
- reasons: Schema.Array(Schema.String),
1712
- leakedSpecialistCount: Schema.Number,
1713
- version: Schema.optional(Schema.Literal(2)),
1714
- transitionVersion: Schema.optional(Schema.Number),
1715
- previousState: Schema.optional(HealthState),
1716
- state: Schema.optional(HealthState),
1717
- reasonCodes: Schema.optional(Schema.Array(Schema.String)),
1718
- acceptedAt: Schema.optional(Schema.String)
1719
- })
1720
- });
1721
- IssuesSnapshotEvent = Schema.Struct({
1722
- type: Schema.Literal("issues.snapshot"),
1723
- sequence: SequenceNumber,
1724
- timestamp: Schema.String,
1725
- payload: Schema.Struct({ issues: Schema.Array(Schema.Unknown) })
1726
- });
1727
- IssuesUpdatedEvent = Schema.Struct({
1728
- type: Schema.Literal("issues.updated"),
1729
- sequence: SequenceNumber,
1730
- timestamp: Schema.String,
1731
- payload: Schema.Struct({ issueId: Schema.optional(IssueId) })
1732
- });
1733
- IssueStatusChangedEvent = Schema.Struct({
1734
- type: Schema.Literal("issue.statusChanged"),
1735
- sequence: SequenceNumber,
1736
- timestamp: Schema.String,
1737
- payload: Schema.Struct({
1738
- issueId: IssueId,
1739
- status: Schema.String,
1740
- canonicalStatus: Schema.String,
1741
- labels: Schema.optional(Schema.Array(Schema.String))
1742
- })
1743
- });
1744
- ActivityUpdatedEvent = Schema.Struct({
1745
- type: Schema.Literal("activity.updated"),
1746
- sequence: SequenceNumber,
1747
- timestamp: Schema.String,
1748
- payload: Schema.Struct({ events: Schema.Array(Schema.Unknown) })
1749
- });
1750
- ActivityEntryEvent = Schema.Struct({
1751
- type: Schema.Literal("activity.entry"),
1752
- sequence: SequenceNumber,
1753
- timestamp: Schema.String,
1754
- payload: Schema.Struct({
1755
- id: Schema.String,
1756
- source: Schema.String,
1757
- level: Schema.String,
1758
- message: Schema.String,
1759
- details: Schema.optional(Schema.String),
1760
- issueId: Schema.optional(IssueId),
1761
- /** Dashboard route the feed navigates to on click (e.g. /conv/<name>, /flywheel). */
1762
- link: Schema.optional(Schema.String),
1763
- /** PAN-1862 (FR-12): fire a desktop notification for this entry (operator-facing warnings). */
1764
- desktop: Schema.optional(Schema.Boolean)
1765
- })
1766
- });
1767
- ActivityDetailedEvent = Schema.Struct({
1768
- type: Schema.Literal("activity.detailed"),
1769
- sequence: SequenceNumber,
1770
- timestamp: Schema.String,
1771
- payload: Schema.Struct({
1772
- id: Schema.String,
1773
- source: Schema.String,
1774
- level: Schema.String,
1775
- message: Schema.String,
1776
- details: Schema.optional(Schema.String),
1777
- issueId: Schema.optional(IssueId),
1778
- triggeringEvent: Schema.optional(Schema.String)
1779
- })
1780
- });
1781
- ActivityTtsEvent = Schema.Struct({
1782
- type: Schema.Literal("activity.tts"),
1783
- sequence: SequenceNumber,
1784
- timestamp: Schema.String,
1785
- payload: Schema.Struct({
1786
- id: Schema.String,
1787
- utterance: Schema.String,
1788
- priority: Schema.optional(Schema.Number),
1789
- issueId: Schema.optional(IssueId),
1790
- source: Schema.optional(Schema.String),
1791
- eventType: Schema.optional(Schema.String)
1792
- })
1793
- });
1794
- DashboardLifecycleStartedEvent = Schema.Struct({
1795
- type: Schema.Literal("dashboard.lifecycle_started"),
1796
- sequence: SequenceNumber,
1797
- timestamp: Schema.String,
1798
- payload: Schema.Struct({
1799
- reason: Schema.String,
1800
- issueId: Schema.optional(IssueId),
1801
- trigger: Schema.String
1802
- })
1803
- });
1804
- DashboardLifecycleCompletedEvent = Schema.Struct({
1805
- type: Schema.Literal("dashboard.lifecycle_completed"),
1806
- sequence: SequenceNumber,
1807
- timestamp: Schema.String,
1808
- payload: Schema.Struct({
1809
- reason: Schema.String,
1810
- issueId: Schema.optional(IssueId),
1811
- durationMs: Schema.Number
1812
- })
1813
- });
1814
- DashboardLifecycleFailedEvent = Schema.Struct({
1815
- type: Schema.Literal("dashboard.lifecycle_failed"),
1816
- sequence: SequenceNumber,
1817
- timestamp: Schema.String,
1818
- payload: Schema.Struct({
1819
- reason: Schema.String,
1820
- issueId: Schema.optional(IssueId),
1821
- error: Schema.String
1822
- })
1823
- });
1824
- ShadowInferenceUpdateEvent = Schema.Struct({
1825
- type: Schema.Literal("shadow.inference_update"),
1826
- sequence: SequenceNumber,
1827
- timestamp: Schema.String,
1828
- payload: Schema.Struct({
1829
- issueId: IssueId,
1830
- content: Schema.String
1831
- })
1832
- });
1833
- WorkspaceCreatedEvent = Schema.Struct({
1834
- type: Schema.Literal("workspace.created"),
1835
- sequence: SequenceNumber,
1836
- timestamp: Schema.String,
1837
- payload: Schema.Struct({
1838
- issueId: IssueId,
1839
- workspacePath: Schema.String
1840
- })
1841
- });
1842
- WorkspaceWipeStartedEvent = Schema.Struct({
1843
- type: Schema.Literal("workspace.wipe_started"),
1844
- sequence: SequenceNumber,
1845
- timestamp: Schema.String,
1846
- payload: Schema.Struct({ issueId: IssueId })
1847
- });
1848
- WorkspaceDestroyedEvent = Schema.Struct({
1849
- type: Schema.Literal("workspace.destroyed"),
1850
- sequence: SequenceNumber,
1851
- timestamp: Schema.String,
1852
- payload: Schema.Struct({ issueId: IssueId })
1853
- });
1854
- WorkspaceDeletedEvent = Schema.Struct({
1855
- type: Schema.Literal("workspace.deleted"),
1856
- sequence: SequenceNumber,
1857
- timestamp: Schema.String,
1858
- payload: Schema.Struct({ issueId: IssueId })
1859
- });
1860
- WorkspaceAbortedEvent = Schema.Struct({
1861
- type: Schema.Literal("workspace.aborted"),
1862
- sequence: SequenceNumber,
1863
- timestamp: Schema.String,
1864
- payload: Schema.Struct({
1865
- issueId: IssueId,
1866
- sessionName: Schema.optional(Schema.String)
1867
- })
1868
- });
1869
- MemoryObservationCreatedEvent = Schema.Struct({
1870
- type: Schema.Literal("memory.observation_created"),
1871
- sequence: SequenceNumber,
1872
- timestamp: Schema.String,
1873
- payload: Schema.Struct({ observation: MemoryObservation })
1874
- });
1875
- MemoryStatusUpdatedEvent = Schema.Struct({
1876
- type: Schema.Literal("memory.status_updated"),
1877
- sequence: SequenceNumber,
1878
- timestamp: Schema.String,
1879
- payload: Schema.Struct({
1880
- identity: Schema.Struct({
1881
- projectId: Schema.String,
1882
- workspaceId: Schema.String,
1883
- issueId: IssueId
1884
- }),
1885
- status: MemoryStatus,
1886
- previousStatus: Schema.optional(MemoryStatus)
1887
- })
1888
- });
1889
- MemoryRollupTriggeredEvent = Schema.Struct({
1890
- type: Schema.Literal("memory.rollup_triggered"),
1891
- sequence: SequenceNumber,
1892
- timestamp: Schema.String,
1893
- payload: Schema.Struct({
1894
- projectId: Schema.String,
1895
- workspaceId: Schema.String,
1896
- issueId: IssueId,
1897
- pendingCount: Schema.Number,
1898
- turnIds: Schema.Array(Schema.String),
1899
- threshold: Schema.Number
1900
- })
1901
- });
1902
- MemoryResetMarkerCreatedEvent = Schema.Struct({
1903
- type: Schema.Literal("memory.reset_marker_created"),
1904
- sequence: SequenceNumber,
1905
- timestamp: Schema.String,
1906
- payload: Schema.Struct({ marker: ResetMarker })
1907
- });
1908
- MemoryHealthChangedEvent = Schema.Struct({
1909
- type: Schema.Literal("memory.health_changed"),
1910
- sequence: SequenceNumber,
1911
- timestamp: Schema.String,
1912
- payload: Schema.Struct({
1913
- projectId: Schema.String,
1914
- issueId: IssueId,
1915
- status: Schema.Literals([
1916
- "healthy",
1917
- "degraded",
1918
- "failing"
1919
- ]),
1920
- reason: Schema.NullOr(Schema.String),
1921
- detail: Schema.optional(Schema.String),
1922
- ragDecision: Schema.optional(RagDecision)
1923
- })
1924
- });
1925
- CostEventRecordedEvent = Schema.Struct({
1926
- type: Schema.Literal("cost.event_recorded"),
1927
- sequence: SequenceNumber,
1928
- timestamp: Schema.String,
1929
- payload: Schema.Struct({
1930
- agentId: AgentId,
1931
- issueId: IssueId,
1932
- cost: Schema.Number,
1933
- inputTokens: Schema.Number,
1934
- outputTokens: Schema.Number
1935
- })
1936
- });
1937
- ConversationCompactingChangedEvent = Schema.Struct({
1938
- type: Schema.Literal("conversation.compacting_changed"),
1939
- sequence: SequenceNumber,
1940
- timestamp: Schema.String,
1941
- payload: Schema.Struct({
1942
- conversationName: Schema.String,
1943
- compacting: Schema.Boolean
1944
- })
1945
- });
1946
- ConversationCreatedEvent = Schema.Struct({
1947
- type: Schema.Literal("conversation.created"),
1948
- sequence: SequenceNumber,
1949
- timestamp: Schema.String,
1950
- payload: Schema.Struct({ conversationName: Schema.String })
1951
- });
1952
- ConversationTitleChangedEvent = Schema.Struct({
1953
- type: Schema.Literal("conversation.title_changed"),
1954
- sequence: SequenceNumber,
1955
- timestamp: Schema.String,
1956
- payload: Schema.Struct({
1957
- conversationName: Schema.String,
1958
- title: Schema.String,
1959
- titleSource: Schema.String
1960
- })
1961
- });
1962
- ConversationPermissionChangedEvent = Schema.Struct({
1963
- type: Schema.Literal("conversation.permission_changed"),
1964
- sequence: SequenceNumber,
1965
- timestamp: Schema.String,
1966
- payload: Schema.Struct({
1967
- conversationName: Schema.String,
1968
- waiting: Schema.Boolean,
1969
- toolName: Schema.optional(Schema.String)
1970
- })
1971
- });
1972
- ScanStartedEvent = Schema.Struct({
1973
- type: Schema.Literal("scan.started"),
1974
- sequence: SequenceNumber,
1975
- timestamp: Schema.String,
1976
- payload: Schema.Struct({
1977
- mode: Schema.Literals([
1978
- "targeted",
1979
- "watched",
1980
- "system"
1981
- ]),
1982
- dirs: Schema.Array(Schema.String)
1983
- })
1984
- });
1985
- ScanProgressEvent = Schema.Struct({
1986
- type: Schema.Literal("scan.progress"),
1987
- sequence: SequenceNumber,
1988
- timestamp: Schema.String,
1989
- payload: Schema.Struct({
1990
- dirsProcessed: Schema.Number,
1991
- dirsTotal: Schema.Number,
1992
- sessionsFound: Schema.Number,
1993
- elapsedMs: Schema.Number
1994
- })
1995
- });
1996
- ScanCompleteEvent = Schema.Struct({
1997
- type: Schema.Literal("scan.complete"),
1998
- sequence: SequenceNumber,
1999
- timestamp: Schema.String,
2000
- payload: Schema.Struct({
2001
- inserted: Schema.Number,
2002
- updated: Schema.Number,
2003
- skipped: Schema.Number,
2004
- errors: Schema.Number,
2005
- durationMs: Schema.Number
2006
- })
2007
- });
2008
- EnrichProgressEvent = Schema.Struct({
2009
- type: Schema.Literal("enrich.progress"),
2010
- sequence: SequenceNumber,
2011
- timestamp: Schema.String,
2012
- payload: Schema.Struct({
2013
- sessionId: Schema.Number,
2014
- level: Schema.Number,
2015
- model: Schema.String,
2016
- cost: Schema.Number,
2017
- success: Schema.Boolean,
2018
- error: Schema.optional(Schema.String)
2019
- })
2020
- });
2021
- EnrichCompleteEvent = Schema.Struct({
2022
- type: Schema.Literal("enrich.complete"),
2023
- sequence: SequenceNumber,
2024
- timestamp: Schema.String,
2025
- payload: Schema.Struct({
2026
- processed: Schema.Number,
2027
- totalCost: Schema.Number,
2028
- failures: Schema.Number,
2029
- durationMs: Schema.Number
2030
- })
2031
- });
2032
- EmbedProgressEvent = Schema.Struct({
2033
- type: Schema.Literal("embed.progress"),
2034
- sequence: SequenceNumber,
2035
- timestamp: Schema.String,
2036
- payload: Schema.Struct({
2037
- sessionId: Schema.Number,
2038
- model: Schema.String,
2039
- success: Schema.Boolean,
2040
- error: Schema.optional(Schema.String)
2041
- })
2042
- });
2043
- DomainEvent = Schema.Union([
2044
- SystemHeartbeatEvent,
2045
- BeadsFreshnessChangedEvent,
2046
- AgentCreatedEvent,
2047
- AgentEnrichmentChangedEvent,
2048
- AgentStartedEvent,
2049
- AgentStoppedEvent,
2050
- AgentHeartbeatDeadEvent,
2051
- WorkCompletedEvent,
2052
- AgentCompletedEvent,
2053
- ReviewApprovedEvent,
2054
- TestPassedEvent,
2055
- AgentStatusChangedEvent,
2056
- AgentOutputReceivedEvent,
2057
- AgentActivityChangedEvent,
2058
- AgentThinkingStartedEvent,
2059
- AgentThinkingStoppedEvent,
2060
- AgentWaitingStartedEvent,
2061
- AgentWaitingClearedEvent,
2062
- AgentPermissionRequestedEvent,
2063
- AgentPermissionResolvedEvent,
2064
- AgentMessageReceivedEvent,
2065
- AgentChannelReplyEvent,
2066
- AgentModelSetEvent,
2067
- AgentCurrentIssueSetEvent,
2068
- AgentContextSaturationChangedEvent,
2069
- AgentResolutionChangedEvent,
2070
- AgentStateRestoredEvent,
2071
- AgentTurnDiffCompletedEvent,
2072
- PlanningStartedEvent,
2073
- PlanningFailedEvent,
2074
- PlanningSyncEvent,
2075
- PlanItemStatusChangedEvent,
2076
- PlanSubitemStatusChangedEvent,
2077
- PlanItemsUnblockedEvent,
2078
- PipelineStatusChangedEvent,
2079
- MergeReadyEvent,
2080
- ReviewStatusChangedEvent,
2081
- PipelineReviewStartedEvent,
2082
- PipelineReviewCompletedEvent,
2083
- PipelineTestStartedEvent,
2084
- PipelineTestCompletedEvent,
2085
- PipelineVerificationStartedEvent,
2086
- PipelineVerificationFailedEvent,
2087
- IssueTransitionedEvent,
2088
- OperatorInterventionEvent,
2089
- SubstrateBugFiledEvent,
2090
- ReviewReviewerStartedEvent,
2091
- ReviewReviewerCompletedEvent,
2092
- ReviewSpecialistTimedOutEvent,
2093
- ReviewCoordinatorStartedEvent,
2094
- ReviewCoordinatorDiedEvent,
2095
- SpecialistStartedEvent,
2096
- SpecialistCompletedEvent,
2097
- SpecialistFailedEvent,
2098
- ResourcesUpdatedEvent,
2099
- SystemHealthSeverityChangedEvent,
2100
- IssuesSnapshotEvent,
2101
- IssuesUpdatedEvent,
2102
- IssueStatusChangedEvent,
2103
- ActivityUpdatedEvent,
2104
- ActivityEntryEvent,
2105
- ActivityDetailedEvent,
2106
- ActivityTtsEvent,
2107
- ShadowInferenceUpdateEvent,
2108
- MemoryObservationCreatedEvent,
2109
- MemoryStatusUpdatedEvent,
2110
- MemoryRollupTriggeredEvent,
2111
- MemoryResetMarkerCreatedEvent,
2112
- MemoryHealthChangedEvent,
2113
- CostEventRecordedEvent,
2114
- WorkspaceCreatedEvent,
2115
- WorkspaceWipeStartedEvent,
2116
- WorkspaceDestroyedEvent,
2117
- WorkspaceDeletedEvent,
2118
- WorkspaceAbortedEvent,
2119
- DashboardLifecycleStartedEvent,
2120
- DashboardLifecycleCompletedEvent,
2121
- DashboardLifecycleFailedEvent,
2122
- ConversationCompactingChangedEvent,
2123
- ConversationCreatedEvent,
2124
- ConversationTitleChangedEvent,
2125
- ConversationPermissionChangedEvent,
2126
- ScanStartedEvent,
2127
- ScanProgressEvent,
2128
- ScanCompleteEvent,
2129
- EnrichProgressEvent,
2130
- EnrichCompleteEvent,
2131
- EmbedProgressEvent
2132
- ]);
2133
- }));
2134
- //#endregion
2135
- //#region ../../../packages/contracts/src/editor.ts
2136
- var EDITORS, EDITOR_IDS, EditorIdSchema, OpenInEditorInput;
2137
- var init_editor = __esmMin((() => {
2138
- EDITORS = [
2139
- {
2140
- id: "cursor",
2141
- label: "Cursor",
2142
- command: "cursor",
2143
- supportsGoto: true
2144
- },
2145
- {
2146
- id: "windsurf",
2147
- label: "Windsurf",
2148
- command: "windsurf",
2149
- supportsGoto: true
2150
- },
2151
- {
2152
- id: "trae",
2153
- label: "Trae",
2154
- command: "trae",
2155
- supportsGoto: true
2156
- },
2157
- {
2158
- id: "kiro",
2159
- label: "Kiro",
2160
- command: "kiro",
2161
- supportsGoto: true
2162
- },
2163
- {
2164
- id: "vscode",
2165
- label: "VS Code",
2166
- command: "code",
2167
- supportsGoto: true
2168
- },
2169
- {
2170
- id: "vscode-insiders",
2171
- label: "VS Code Insiders",
2172
- command: "code-insiders",
2173
- supportsGoto: true
2174
- },
2175
- {
2176
- id: "vscodium",
2177
- label: "VSCodium",
2178
- command: "codium",
2179
- supportsGoto: true
2180
- },
2181
- {
2182
- id: "zed",
2183
- label: "Zed",
2184
- command: "zed",
2185
- supportsGoto: false
2186
- },
2187
- {
2188
- id: "antigravity",
2189
- label: "Antigravity",
2190
- command: "agy",
2191
- supportsGoto: false
2192
- },
2193
- {
2194
- id: "idea",
2195
- label: "IntelliJ IDEA",
2196
- command: "idea",
2197
- supportsGoto: true
2198
- },
2199
- {
2200
- id: "aqua",
2201
- label: "Aqua",
2202
- command: "aqua",
2203
- supportsGoto: true
2204
- },
2205
- {
2206
- id: "clion",
2207
- label: "CLion",
2208
- command: "clion",
2209
- supportsGoto: true
2210
- },
2211
- {
2212
- id: "datagrip",
2213
- label: "DataGrip",
2214
- command: "datagrip",
2215
- supportsGoto: true
2216
- },
2217
- {
2218
- id: "dataspell",
2219
- label: "DataSpell",
2220
- command: "dataspell",
2221
- supportsGoto: true
2222
- },
2223
- {
2224
- id: "goland",
2225
- label: "GoLand",
2226
- command: "goland",
2227
- supportsGoto: true
2228
- },
2229
- {
2230
- id: "phpstorm",
2231
- label: "PhpStorm",
2232
- command: "phpstorm",
2233
- supportsGoto: true
2234
- },
2235
- {
2236
- id: "pycharm",
2237
- label: "PyCharm",
2238
- command: "pycharm",
2239
- supportsGoto: true
2240
- },
2241
- {
2242
- id: "rider",
2243
- label: "Rider",
2244
- command: "rider",
2245
- supportsGoto: true
2246
- },
2247
- {
2248
- id: "rubymine",
2249
- label: "RubyMine",
2250
- command: "rubymine",
2251
- supportsGoto: true
2252
- },
2253
- {
2254
- id: "rustrover",
2255
- label: "RustRover",
2256
- command: "rustrover",
2257
- supportsGoto: true
2258
- },
2259
- {
2260
- id: "webstorm",
2261
- label: "WebStorm",
2262
- command: "webstorm",
2263
- supportsGoto: true
2264
- },
2265
- {
2266
- id: "file-manager",
2267
- label: "File Manager",
2268
- command: null,
2269
- supportsGoto: false
2270
- }
2271
- ];
2272
- EDITOR_IDS = [
2273
- "cursor",
2274
- "windsurf",
2275
- "trae",
2276
- "kiro",
2277
- "vscode",
2278
- "vscode-insiders",
2279
- "vscodium",
2280
- "zed",
2281
- "antigravity",
2282
- "idea",
2283
- "aqua",
2284
- "clion",
2285
- "datagrip",
2286
- "dataspell",
2287
- "goland",
2288
- "phpstorm",
2289
- "pycharm",
2290
- "rider",
2291
- "rubymine",
2292
- "rustrover",
2293
- "webstorm",
2294
- "file-manager"
2295
- ];
2296
- EditorIdSchema = Schema.Literals(EDITOR_IDS);
2297
- OpenInEditorInput = Schema.Struct({
2298
- cwd: Schema.String,
2299
- editor: EditorIdSchema
2300
- });
2301
- }));
2302
- //#endregion
2303
- //#region ../../../packages/contracts/src/flywheel.ts
2304
- var FlywheelRunId, FlywheelHttpUrl, FlywheelHarness, FlywheelEffort, FlywheelOrchestrator, FlywheelHeadline, FlywheelPipelineVerb, FlywheelPipelineStatus, FlywheelPipelineItem, FlywheelSubstrateBugStatus, FlywheelSubstrateBug, FlywheelAgentStatus, FlywheelAgent, FlywheelParkedItem, FlywheelSuggestionAction, FlywheelSuggestionPriority, FlywheelSuggestion, FlywheelSystemStatus, FlywheelStatus;
2305
- var init_flywheel = __esmMin((() => {
2306
- FlywheelRunId = Schema.String.check(Schema.isPattern(/^RUN-\d+$/));
2307
- FlywheelHttpUrl = Schema.String.check(Schema.isPattern(/^https?:\/\/\S+$/i));
2308
- FlywheelHarness = Schema.Literals([
2309
- "claude-code",
2310
- "pi",
2311
- "ohmypi",
2312
- "codex"
2313
- ]);
2314
- FlywheelEffort = Schema.Literals([
2315
- "low",
2316
- "medium",
2317
- "high",
2318
- "xhigh",
2319
- "max"
2320
- ]);
2321
- FlywheelOrchestrator = Schema.Struct({
2322
- harness: FlywheelHarness,
2323
- model: Schema.String,
2324
- effort: FlywheelEffort,
2325
- ctxPercent: Schema.Number
2326
- });
2327
- FlywheelHeadline = Schema.Struct({
2328
- bugsFixed: Schema.Number,
2329
- swarmItemsMerged: Schema.Number,
2330
- swarmItemsTotal: Schema.Number,
2331
- prsMerged: Schema.Number,
2332
- awaitingUat: Schema.Number
2333
- });
2334
- FlywheelPipelineVerb = Schema.Literals([
2335
- "planning",
2336
- "working",
2337
- "reviewing",
2338
- "testing",
2339
- "shipping",
2340
- "merging",
2341
- "blocked",
2342
- "parked"
2343
- ]);
2344
- FlywheelPipelineStatus = Schema.Literals([
2345
- "queued",
2346
- "running",
2347
- "blocked",
2348
- "passed",
2349
- "failed",
2350
- "merged",
2351
- "parked"
2352
- ]);
2353
- FlywheelPipelineItem = Schema.Struct({
2354
- issueId: Schema.String,
2355
- title: Schema.String,
2356
- verb: FlywheelPipelineVerb,
2357
- status: FlywheelPipelineStatus,
2358
- progressPercent: Schema.optional(Schema.Number),
2359
- agentId: Schema.optional(Schema.String),
2360
- pr: Schema.optional(Schema.Number),
2361
- mergeOrder: Schema.optional(Schema.Number),
2362
- conflictsWith: Schema.optional(Schema.Array(Schema.String))
2363
- });
2364
- FlywheelSubstrateBugStatus = Schema.Literals([
2365
- "filed",
2366
- "fixed",
2367
- "workaround"
2368
- ]);
2369
- FlywheelSubstrateBug = Schema.Struct({
2370
- issueId: Schema.String,
2371
- title: Schema.String,
2372
- status: FlywheelSubstrateBugStatus,
2373
- commitSha: Schema.optional(Schema.String),
2374
- url: Schema.optional(FlywheelHttpUrl)
2375
- });
2376
- FlywheelAgentStatus = Schema.Literals([
2377
- "starting",
2378
- "running",
2379
- "waiting",
2380
- "idle",
2381
- "stopped",
2382
- "error"
2383
- ]);
2384
- FlywheelAgent = Schema.Struct({
2385
- id: Schema.String,
2386
- label: Schema.String,
2387
- status: FlywheelAgentStatus,
2388
- issueId: Schema.optional(Schema.String),
2389
- role: Schema.optional(Schema.String),
2390
- model: Schema.optional(Schema.String),
2391
- ctxPercent: Schema.optional(Schema.Number),
2392
- currentAction: Schema.optional(Schema.String)
2393
- });
2394
- FlywheelParkedItem = Schema.Struct({
2395
- issueId: Schema.String,
2396
- title: Schema.String,
2397
- reason: Schema.String,
2398
- parkedAt: Schema.optional(Schema.String)
2399
- });
2400
- FlywheelSuggestionAction = Schema.Literals([
2401
- "start",
2402
- "resume",
2403
- "plan",
2404
- "review",
2405
- "merge",
2406
- "unblock",
2407
- "park",
2408
- "investigate",
2409
- "wait"
2410
- ]);
2411
- FlywheelSuggestionPriority = Schema.Literals([
2412
- "urgent",
2413
- "high",
2414
- "medium",
2415
- "low"
2416
- ]);
2417
- FlywheelSuggestion = Schema.Struct({
2418
- action: FlywheelSuggestionAction,
2419
- issueId: Schema.optional(Schema.String),
2420
- rationale: Schema.String,
2421
- priority: FlywheelSuggestionPriority,
2422
- filedBy: Schema.optional(Schema.Literals(["agent", "operator"])),
2423
- weight: Schema.optional(Schema.Number),
2424
- weightReason: Schema.optional(Schema.String)
2425
- });
2426
- FlywheelSystemStatus = Schema.Struct({
2427
- mainHead: Schema.String,
2428
- ramUsedMb: Schema.Number,
2429
- ramTotalMb: Schema.Number,
2430
- swapUsedMb: Schema.Number,
2431
- swapTotalMb: Schema.Number,
2432
- agentsActive: Schema.Number,
2433
- agentsCap: Schema.Number
2434
- });
2435
- FlywheelStatus = Schema.Struct({
2436
- runId: FlywheelRunId,
2437
- startedAt: Schema.String,
2438
- elapsedMs: Schema.Number,
2439
- orchestrator: FlywheelOrchestrator,
2440
- headline: FlywheelHeadline,
2441
- activePipeline: Schema.Array(FlywheelPipelineItem),
2442
- substrateBugs: Schema.Array(FlywheelSubstrateBug),
2443
- agents: Schema.Array(FlywheelAgent),
2444
- parked: Schema.Array(FlywheelParkedItem),
2445
- suggestions: Schema.Array(FlywheelSuggestion).pipe(Schema.withDecodingDefaultKey(Effect.succeed([]))),
2446
- system: FlywheelSystemStatus,
2447
- openQuestions: Schema.Array(Schema.String),
2448
- ticks: Schema.Number,
2449
- lastTickAt: Schema.String
2450
- });
2451
- }));
2452
- //#endregion
2453
- //#region ../../../packages/contracts/src/rpc.ts
2454
- var WS_METHODS, PanRpcError, TerminalOutput, AgentOutput, ProposedPlan, CompactBoundary, ContextUsage, ChatMessage, WorkLogEntry, ConversationEvent, SessionTreeDelta, SubscribeDomainEventsRpc, SubscribeIssueEventsRpc, SubscribeTerminalRpc, SubscribeAgentOutputRpc, GetSnapshotRpc, ReplayEventsRpc, TerminalOpenRpc, TerminalWriteRpc, TerminalResizeRpc, TerminalCloseRpc, GetWorkspaceDetailRpc, ReadWorkspaceFileInput, ReadWorkspaceFileResult, ReadWorkspaceFileRpc, ResolveFilePathExistsInput, ResolveFilePathExistsResult, ResolveFilePathExistsRpc, StartPlanningRpc, StartAgentRpc, DeepWipeRpc, SendTerminalInputRpc, ResizeTerminalRpc, SubscribeConversationMessagesRpc, SubscribeProjectSessionTreeRpc, SubscribeFlywheelStatusRpc, ShellOpenInEditorRpc, GetAvailableEditorsRpc, DiscoveredSessionListResult, SessionsFeedPayload, SessionsFeedListResult, DiscoveredSessionSearchResult, DiscoveredSessionStatsResult, ConversationCostTotals, ScanConversationsRpc, SearchConversationsRpc, ListDiscoveredSessionsRpc, ListSessionsFeedRpc, GetSessionsFeedFacetsRpc, GetDiscoveredSessionRpc, EnrichSessionsRpc, EmbedSessionsRpc, GetConversationCostRpc, GetConversationCostByWorkspaceRpc, GetConversationStatsRpc, PanRpcGroup;
2455
- var init_rpc = __esmMin((() => {
2456
- init_events();
2457
- init_types();
2458
- init_editor();
2459
- init_flywheel();
2460
- WS_METHODS = {
2461
- scanConversations: "pan.scanConversations",
2462
- searchConversations: "pan.searchConversations",
2463
- listDiscoveredSessions: "pan.listDiscoveredSessions",
2464
- listSessionsFeed: "pan.listSessionsFeed",
2465
- getSessionsFeedFacets: "pan.getSessionsFeedFacets",
2466
- getDiscoveredSession: "pan.getDiscoveredSession",
2467
- enrichSessions: "pan.enrichSessions",
2468
- embedSessions: "pan.embedSessions",
2469
- getConversationCost: "pan.getConversationCost",
2470
- getConversationCostByWorkspace: "pan.getConversationCostByWorkspace",
2471
- getConversationStats: "pan.getConversationStats",
2472
- subscribeDomainEvents: "pan.subscribeDomainEvents",
2473
- subscribeIssueEvents: "pan.subscribeIssueEvents",
2474
- subscribeTerminal: "pan.subscribeTerminal",
2475
- subscribeAgentOutput: "pan.subscribeAgentOutput",
2476
- subscribeConversationMessages: "pan.subscribeConversationMessages",
2477
- subscribeProjectSessionTree: "pan.subscribeProjectSessionTree",
2478
- subscribeFlywheelStatus: "pan.subscribeFlywheelStatus",
2479
- getSnapshot: "pan.getSnapshot",
2480
- replayEvents: "pan.replayEvents",
2481
- getWorkspaceDetail: "pan.getWorkspaceDetail",
2482
- readWorkspaceFile: "pan.readWorkspaceFile",
2483
- resolveFilePathExists: "pan.resolveFilePathExists",
2484
- terminalOpen: "pan.terminalOpen",
2485
- terminalWrite: "pan.terminalWrite",
2486
- terminalResize: "pan.terminalResize",
2487
- terminalClose: "pan.terminalClose",
2488
- startPlanning: "pan.startPlanning",
2489
- startAgent: "pan.startAgent",
2490
- deepWipe: "pan.deepWipe",
2491
- sendTerminalInput: "pan.sendTerminalInput",
2492
- resizeTerminal: "pan.resizeTerminal",
2493
- shellOpenInEditor: "pan.shellOpenInEditor",
2494
- getAvailableEditors: "pan.getAvailableEditors"
2495
- };
2496
- PanRpcError = class extends Schema.TaggedErrorClass()("PanRpcError", {
2497
- message: Schema.String,
2498
- code: Schema.optional(Schema.String)
2499
- }) {};
2500
- TerminalOutput = Schema.Struct({
2501
- sessionName: Schema.String,
2502
- data: Schema.String
2503
- });
2504
- AgentOutput = Schema.Struct({
2505
- agentId: Schema.String,
2506
- line: Schema.String
2507
- });
2508
- ProposedPlan = Schema.Struct({
2509
- id: Schema.String,
2510
- plan: Schema.String,
2511
- planFilePath: Schema.optional(Schema.String),
2512
- status: Schema.Literals([
2513
- "pending",
2514
- "approved",
2515
- "rejected"
2516
- ]),
2517
- createdAt: Schema.String,
2518
- resolvedAt: Schema.optional(Schema.String)
2519
- });
2520
- CompactBoundary = Schema.Struct({
2521
- id: Schema.String,
2522
- timestamp: Schema.String,
2523
- trigger: Schema.optional(Schema.String),
2524
- preTokens: Schema.optional(Schema.Number),
2525
- model: Schema.optional(Schema.String)
2526
- });
2527
- ContextUsage = Schema.Struct({
2528
- activeBytes: Schema.Number,
2529
- estimatedTokens: Schema.Number,
2530
- contextWindow: Schema.Number,
2531
- percentUsed: Schema.Number,
2532
- /**
2533
- * Optional breakdown of the last assistant turn — surfaced by the click
2534
- * popover on the ContextWindowMeter so users can see WHY the meter says
2535
- * what it does. Computed by `computeContextUsage()` from JSONL `usage`.
2536
- */
2537
- lastInputTokens: Schema.optional(Schema.Number),
2538
- lastCacheReadTokens: Schema.optional(Schema.Number),
2539
- lastCacheCreationTokens: Schema.optional(Schema.Number),
2540
- /** Highest input_tokens ever observed in this window — triggers 1M detection. */
2541
- maxObservedInputTokens: Schema.optional(Schema.Number),
2542
- /** Model the most recent assistant turn ran under (from JSONL). */
2543
- lastModel: Schema.optional(Schema.NullOr(Schema.String)),
2544
- /** ISO timestamp of the most recent assistant turn. */
2545
- lastTurnAt: Schema.optional(Schema.NullOr(Schema.String))
2546
- });
2547
- ChatMessage = Schema.Struct({
2548
- id: Schema.String,
2549
- role: Schema.Literals([
2550
- "user",
2551
- "assistant",
2552
- "system"
2553
- ]),
2554
- text: Schema.String,
2555
- turnId: Schema.optional(Schema.String),
2556
- createdAt: Schema.String,
2557
- completedAt: Schema.optional(Schema.String),
2558
- streaming: Schema.optional(Schema.Boolean),
2559
- sequence: Schema.optional(Schema.Number)
2560
- });
2561
- WorkLogEntry = Schema.Struct({
2562
- id: Schema.String,
2563
- createdAt: Schema.String,
2564
- label: Schema.String,
2565
- detail: Schema.optional(Schema.String),
2566
- /** Tool result output (populated when tool_result is received). */
2567
- result: Schema.optional(Schema.String),
2568
- command: Schema.optional(Schema.String),
2569
- changedFiles: Schema.optional(Schema.Array(Schema.String)),
2570
- tone: Schema.Literals([
2571
- "thinking",
2572
- "tool",
2573
- "info",
2574
- "error"
2575
- ]),
2576
- toolTitle: Schema.optional(Schema.String),
2577
- /** Raw tool_use input dict — drives per-tool expanded rendering (PAN-1459). */
2578
- toolInput: Schema.optional(Schema.Record(Schema.String, Schema.Unknown)),
2579
- sequence: Schema.optional(Schema.Number)
2580
- });
2581
- ConversationEvent = Schema.Union([Schema.Struct({
2582
- kind: Schema.Literal("messages"),
2583
- messages: Schema.Array(ChatMessage),
2584
- workLog: Schema.Array(WorkLogEntry),
2585
- streaming: Schema.Boolean,
2586
- snapshot: Schema.optional(Schema.Boolean),
2587
- proposedPlan: Schema.optional(ProposedPlan),
2588
- compactBoundaries: Schema.optional(Schema.Array(CompactBoundary)),
2589
- contextUsage: Schema.optional(Schema.NullOr(ContextUsage))
2590
- }), Schema.Struct({ kind: Schema.Literal("discovering") })]);
2591
- SessionTreeDelta = Schema.Struct({
2592
- kind: Schema.Literals([
2593
- "session_added",
2594
- "session_removed",
2595
- "presence_changed",
2596
- "status_changed"
2597
- ]),
2598
- issueId: Schema.String,
2599
- sessionId: Schema.String,
2600
- presence: Schema.optional(SessionNodePresence),
2601
- status: Schema.optional(AgentStatus),
2602
- timestamp: Schema.String
2603
- });
2604
- SubscribeDomainEventsRpc = Rpc.make(WS_METHODS.subscribeDomainEvents, {
2605
- payload: Schema.Struct({}),
2606
- success: DomainEvent,
2607
- stream: true
2608
- });
2609
- SubscribeIssueEventsRpc = Rpc.make(WS_METHODS.subscribeIssueEvents, {
2610
- payload: Schema.Struct({ issueId: IssueId }),
2611
- success: DomainEvent,
2612
- stream: true
2613
- });
2614
- SubscribeTerminalRpc = Rpc.make(WS_METHODS.subscribeTerminal, {
2615
- payload: Schema.Struct({
2616
- sessionName: Schema.String,
2617
- cols: Schema.Number,
2618
- rows: Schema.Number
2619
- }),
2620
- success: TerminalOutput,
2621
- error: PanRpcError,
2622
- stream: true
2623
- });
2624
- SubscribeAgentOutputRpc = Rpc.make(WS_METHODS.subscribeAgentOutput, {
2625
- payload: Schema.Struct({ agentId: Schema.String }),
2626
- success: AgentOutput,
2627
- error: PanRpcError,
2628
- stream: true
2629
- });
2630
- GetSnapshotRpc = Rpc.make(WS_METHODS.getSnapshot, {
2631
- payload: Schema.Struct({}),
2632
- success: DashboardSnapshot,
2633
- error: PanRpcError
2634
- });
2635
- ReplayEventsRpc = Rpc.make(WS_METHODS.replayEvents, {
2636
- payload: Schema.Struct({ fromSequence: SequenceNumber }),
2637
- success: Schema.Array(DomainEvent),
2638
- error: PanRpcError
2639
- });
2640
- TerminalOpenRpc = Rpc.make(WS_METHODS.terminalOpen, {
2641
- payload: Schema.Struct({
2642
- sessionName: Schema.String,
2643
- cols: Schema.Number,
2644
- rows: Schema.Number
2645
- }),
2646
- success: Schema.Struct({ sessionName: Schema.String }),
2647
- error: PanRpcError
2648
- });
2649
- TerminalWriteRpc = Rpc.make(WS_METHODS.terminalWrite, {
2650
- payload: Schema.Struct({
2651
- sessionName: Schema.String,
2652
- data: Schema.String
2653
- }),
2654
- error: PanRpcError
2655
- });
2656
- TerminalResizeRpc = Rpc.make(WS_METHODS.terminalResize, {
2657
- payload: Schema.Struct({
2658
- sessionName: Schema.String,
2659
- cols: Schema.Number,
2660
- rows: Schema.Number
2661
- }),
2662
- error: PanRpcError
2663
- });
2664
- TerminalCloseRpc = Rpc.make(WS_METHODS.terminalClose, {
2665
- payload: Schema.Struct({ sessionName: Schema.String }),
2666
- error: PanRpcError
2667
- });
2668
- GetWorkspaceDetailRpc = Rpc.make(WS_METHODS.getWorkspaceDetail, {
2669
- payload: Schema.Struct({ issueId: IssueId }),
2670
- success: WorkspaceDetail,
2671
- error: PanRpcError
2672
- });
2673
- ReadWorkspaceFileInput = Schema.Struct({
2674
- issueId: IssueId,
2675
- relativePath: Schema.String,
2676
- line: Schema.optional(Schema.Number),
2677
- contextLines: Schema.optional(Schema.Number)
2678
- });
2679
- ReadWorkspaceFileResult = Schema.Struct({
2680
- text: Schema.String,
2681
- lang: Schema.String,
2682
- truncated: Schema.Boolean,
2683
- totalLines: Schema.Number
2684
- });
2685
- ReadWorkspaceFileRpc = Rpc.make(WS_METHODS.readWorkspaceFile, {
2686
- payload: ReadWorkspaceFileInput,
2687
- success: ReadWorkspaceFileResult,
2688
- error: PanRpcError
2689
- });
2690
- ResolveFilePathExistsInput = Schema.Struct({
2691
- cwd: Schema.String,
2692
- path: Schema.String
2693
- });
2694
- ResolveFilePathExistsResult = Schema.Struct({
2695
- exists: Schema.Boolean,
2696
- kind: Schema.NullOr(Schema.Literals(["file", "dir"]))
2697
- });
2698
- ResolveFilePathExistsRpc = Rpc.make(WS_METHODS.resolveFilePathExists, {
2699
- payload: ResolveFilePathExistsInput,
2700
- success: ResolveFilePathExistsResult,
2701
- error: PanRpcError
2702
- });
2703
- StartPlanningRpc = Rpc.make(WS_METHODS.startPlanning, {
2704
- payload: Schema.Struct({
2705
- issueId: IssueId,
2706
- options: Schema.optional(Schema.Unknown)
2707
- }),
2708
- success: Schema.Struct({ queued: Schema.Boolean }),
2709
- error: PanRpcError
2710
- });
2711
- StartAgentRpc = Rpc.make(WS_METHODS.startAgent, {
2712
- payload: Schema.Struct({
2713
- issueId: IssueId,
2714
- options: Schema.optional(Schema.Unknown)
2715
- }),
2716
- success: Schema.Struct({ agentId: Schema.String }),
2717
- error: PanRpcError
2718
- });
2719
- DeepWipeRpc = Rpc.make(WS_METHODS.deepWipe, {
2720
- payload: Schema.Struct({
2721
- issueId: IssueId,
2722
- deleteWorkspace: Schema.optional(Schema.Boolean)
2723
- }),
2724
- success: Schema.Struct({ wiped: Schema.Boolean }),
2725
- error: PanRpcError
2726
- });
2727
- SendTerminalInputRpc = Rpc.make(WS_METHODS.sendTerminalInput, {
2728
- payload: Schema.Struct({
2729
- sessionName: Schema.String,
2730
- data: Schema.String
2731
- }),
2732
- error: PanRpcError
2733
- });
2734
- ResizeTerminalRpc = Rpc.make(WS_METHODS.resizeTerminal, {
2735
- payload: Schema.Struct({
2736
- sessionName: Schema.String,
2737
- cols: Schema.Number,
2738
- rows: Schema.Number
2739
- }),
2740
- error: PanRpcError
2741
- });
2742
- SubscribeConversationMessagesRpc = Rpc.make(WS_METHODS.subscribeConversationMessages, {
2743
- payload: Schema.Struct({ conversationName: Schema.String }),
2744
- success: ConversationEvent,
2745
- error: PanRpcError,
2746
- stream: true
2747
- });
2748
- SubscribeProjectSessionTreeRpc = Rpc.make(WS_METHODS.subscribeProjectSessionTree, {
2749
- payload: Schema.Struct({ projectKey: Schema.String }),
2750
- success: SessionTreeDelta,
2751
- error: PanRpcError,
2752
- stream: true
2753
- });
2754
- SubscribeFlywheelStatusRpc = Rpc.make(WS_METHODS.subscribeFlywheelStatus, {
2755
- payload: Schema.Struct({}),
2756
- success: Schema.NullOr(FlywheelStatus),
2757
- error: PanRpcError,
2758
- stream: true
2759
- });
2760
- ShellOpenInEditorRpc = Rpc.make(WS_METHODS.shellOpenInEditor, {
2761
- payload: OpenInEditorInput,
2762
- error: PanRpcError
2763
- });
2764
- GetAvailableEditorsRpc = Rpc.make(WS_METHODS.getAvailableEditors, {
2765
- success: Schema.Struct({
2766
- editors: Schema.Array(EditorIdSchema),
2767
- /**
2768
- * Default cwd to open when no project/workspace is selected — the
2769
- * "devroot" fallback. `~/Projects` if it exists, else `$HOME`.
2770
- */
2771
- defaultCwd: Schema.String
2772
- }),
2773
- error: PanRpcError
2774
- });
2775
- DiscoveredSessionListResult = Schema.Struct({
2776
- sessions: Schema.Array(DiscoveredSessionSnapshot),
2777
- count: Schema.Number,
2778
- total: Schema.Number
2779
- });
2780
- SessionsFeedPayload = Schema.Struct({
2781
- harness: Schema.optional(Schema.String),
2782
- workspacePath: Schema.optional(Schema.String),
2783
- primaryModel: Schema.optional(Schema.String),
2784
- managed: Schema.optional(Schema.Boolean),
2785
- unmanaged: Schema.optional(Schema.Boolean),
2786
- since: Schema.optional(Schema.String),
2787
- before: Schema.optional(Schema.String),
2788
- after: Schema.optional(Schema.String),
2789
- minCost: Schema.optional(Schema.Number),
2790
- maxCost: Schema.optional(Schema.Number),
2791
- minMessages: Schema.optional(Schema.Number),
2792
- tags: Schema.optional(Schema.Array(Schema.String)),
2793
- tools: Schema.optional(Schema.Array(Schema.String)),
2794
- files: Schema.optional(Schema.Array(Schema.String)),
2795
- issueId: Schema.optional(Schema.String),
2796
- enrichmentLevel: Schema.optional(Schema.Number),
2797
- enriched: Schema.optional(Schema.Boolean),
2798
- notEnriched: Schema.optional(Schema.Boolean),
2799
- query: Schema.optional(Schema.String),
2800
- semantic: Schema.optional(Schema.Boolean),
2801
- similarTo: Schema.optional(Schema.Number),
2802
- limit: Schema.optional(Schema.Number),
2803
- offset: Schema.optional(Schema.Number),
2804
- cursor: Schema.optional(Schema.String),
2805
- source: Schema.optional(Schema.Literals(["discovered", "managed-archived"]))
2806
- });
2807
- SessionsFeedListResult = Schema.Struct({
2808
- rows: Schema.Array(SessionsFeedRowSnapshot),
2809
- nextCursor: Schema.NullOr(Schema.String)
2810
- });
2811
- DiscoveredSessionSearchResult = Schema.Struct({
2812
- sessions: Schema.Array(DiscoveredSessionSnapshot),
2813
- total: Schema.Number,
2814
- mode: Schema.String,
2815
- durationMs: Schema.Number,
2816
- error: Schema.optional(Schema.String)
2817
- });
2818
- DiscoveredSessionStatsResult = Schema.Struct({
2819
- total: Schema.Number,
2820
- enriched: Schema.Number,
2821
- embedded: Schema.Number,
2822
- managedCount: Schema.Number,
2823
- embeddingModels: Schema.optional(Schema.Array(Schema.Struct({
2824
- model: Schema.String,
2825
- embedded: Schema.Number
2826
- })))
2827
- });
2828
- ConversationCostTotals = Schema.Struct({
2829
- sessionCount: Schema.Number,
2830
- totalCost: Schema.Number,
2831
- totalTokensIn: Schema.Number,
2832
- totalTokensOut: Schema.Number
2833
- });
2834
- ScanConversationsRpc = Rpc.make(WS_METHODS.scanConversations, {
2835
- payload: Schema.Struct({
2836
- mode: Schema.Literals([
2837
- "targeted",
2838
- "watched",
2839
- "system"
2840
- ]),
2841
- dirs: Schema.optional(Schema.Array(Schema.String)),
2842
- dryRun: Schema.optional(Schema.Boolean)
2843
- }),
2844
- success: ScanResult,
2845
- error: PanRpcError
2846
- });
2847
- SearchConversationsRpc = Rpc.make(WS_METHODS.searchConversations, {
2848
- payload: ConversationFilter,
2849
- success: DiscoveredSessionSearchResult,
2850
- error: PanRpcError
2851
- });
2852
- ListDiscoveredSessionsRpc = Rpc.make(WS_METHODS.listDiscoveredSessions, {
2853
- payload: ConversationFilter,
2854
- success: DiscoveredSessionListResult,
2855
- error: PanRpcError
2856
- });
2857
- ListSessionsFeedRpc = Rpc.make(WS_METHODS.listSessionsFeed, {
2858
- payload: SessionsFeedPayload,
2859
- success: SessionsFeedListResult,
2860
- error: PanRpcError
2861
- });
2862
- GetSessionsFeedFacetsRpc = Rpc.make(WS_METHODS.getSessionsFeedFacets, {
2863
- payload: SessionsFeedPayload,
2864
- success: SessionsFeedFacetsSnapshot,
2865
- error: PanRpcError
2866
- });
2867
- GetDiscoveredSessionRpc = Rpc.make(WS_METHODS.getDiscoveredSession, {
2868
- payload: Schema.Struct({ id: Schema.Number }),
2869
- success: DiscoveredSessionSnapshot,
2870
- error: PanRpcError
2871
- });
2872
- EnrichSessionsRpc = Rpc.make(WS_METHODS.enrichSessions, {
2873
- payload: Schema.Struct({
2874
- ids: Schema.optional(Schema.Array(Schema.Number)),
2875
- filter: Schema.optional(ConversationFilter),
2876
- level: Schema.Literals([
2877
- 1,
2878
- 2,
2879
- 3
2880
- ]),
2881
- model: Schema.optional(Schema.String),
2882
- fullTranscript: Schema.optional(Schema.Boolean),
2883
- customPrompt: Schema.optional(Schema.String),
2884
- upgrade: Schema.optional(Schema.Boolean),
2885
- limit: Schema.optional(Schema.Number),
2886
- confirmed: Schema.optional(Schema.Boolean),
2887
- force: Schema.optional(Schema.Boolean)
2888
- }),
2889
- success: Schema.Struct({
2890
- processed: Schema.Number,
2891
- totalCost: Schema.Number,
2892
- failures: Schema.Number
2893
- }),
2894
- error: PanRpcError
2895
- });
2896
- EmbedSessionsRpc = Rpc.make(WS_METHODS.embedSessions, {
2897
- payload: Schema.Struct({
2898
- ids: Schema.optional(Schema.Array(Schema.Number)),
2899
- regenerate: Schema.optional(Schema.Boolean)
2900
- }),
2901
- success: Schema.Struct({
2902
- total: Schema.Number,
2903
- embedded: Schema.Number,
2904
- model: Schema.String
2905
- }),
2906
- error: PanRpcError
2907
- });
2908
- GetConversationCostRpc = Rpc.make(WS_METHODS.getConversationCost, {
2909
- payload: ConversationFilter,
2910
- success: ConversationCostTotals,
2911
- error: PanRpcError
2912
- });
2913
- GetConversationCostByWorkspaceRpc = Rpc.make(WS_METHODS.getConversationCostByWorkspace, {
2914
- payload: ConversationFilter,
2915
- success: ConversationCostSummary,
2916
- error: PanRpcError
2917
- });
2918
- GetConversationStatsRpc = Rpc.make(WS_METHODS.getConversationStats, {
2919
- payload: Schema.Struct({}),
2920
- success: DiscoveredSessionStatsResult,
2921
- error: PanRpcError
2922
- });
2923
- PanRpcGroup = RpcGroup.make(SubscribeDomainEventsRpc, SubscribeIssueEventsRpc, SubscribeTerminalRpc, SubscribeAgentOutputRpc, GetSnapshotRpc, ReplayEventsRpc, GetWorkspaceDetailRpc, ReadWorkspaceFileRpc, ResolveFilePathExistsRpc, TerminalOpenRpc, TerminalWriteRpc, TerminalResizeRpc, TerminalCloseRpc, StartPlanningRpc, StartAgentRpc, DeepWipeRpc, SendTerminalInputRpc, ResizeTerminalRpc, SubscribeConversationMessagesRpc, SubscribeProjectSessionTreeRpc, SubscribeFlywheelStatusRpc, ShellOpenInEditorRpc, GetAvailableEditorsRpc, ScanConversationsRpc, SearchConversationsRpc, ListDiscoveredSessionsRpc, ListSessionsFeedRpc, GetSessionsFeedFacetsRpc, GetDiscoveredSessionRpc, EnrichSessionsRpc, EmbedSessionsRpc, GetConversationCostRpc, GetConversationCostByWorkspaceRpc, GetConversationStatsRpc);
2924
- }));
2925
- //#endregion
2926
- //#region ../../../packages/contracts/src/event-reducers.ts
2927
- function getMaxMemoryObservationsPerIssue() {
2928
- const raw = globalThis.process?.env?.OVERDECK_MEMORY_OBSERVATION_LIMIT;
2929
- const parsed = raw ? Number.parseInt(raw, 10) : NaN;
2930
- return Number.isInteger(parsed) && parsed > 0 ? parsed : 50;
2931
- }
2932
- function trimMemoryObservations(observations) {
2933
- const max = getMaxMemoryObservationsPerIssue();
2934
- return observations.length > max ? observations.slice(-max) : observations;
2935
- }
2936
- function getMaxTurnDiffSummariesPerAgent() {
2937
- const raw = globalThis.process?.env?.OVERDECK_TURN_DIFF_SUMMARY_LIMIT;
2938
- const parsed = raw ? Number.parseInt(raw, 10) : NaN;
2939
- return Number.isInteger(parsed) && parsed > 0 ? parsed : 200;
2940
- }
2941
- function isTerminalTurnDiffSummaryStatus(status) {
2942
- return status === "stopped" || status === "done" || status === "archived" || status === "closed";
2943
- }
2944
- function trimTurnDiffSummaries(summaries) {
2945
- const max = getMaxTurnDiffSummariesPerAgent();
2946
- return summaries.length > max ? summaries.slice(-max) : summaries;
2947
- }
2948
- function upsertBoundedSessionProgress(bySessionId, progress) {
2949
- const existing = bySessionId[progress.sessionId];
2950
- const entries = Object.values(bySessionId);
2951
- if (existing || entries.length < MAX_SESSION_PROGRESS_ENTRIES) return {
2952
- ...bySessionId,
2953
- [progress.sessionId]: progress
2954
- };
2955
- const keep = entries.sort((a, b) => a.timestamp.localeCompare(b.timestamp)).slice(-(MAX_SESSION_PROGRESS_ENTRIES - 1));
2956
- const next = {};
2957
- for (const entry of [...keep, progress]) next[entry.sessionId] = entry;
2958
- return next;
2959
- }
2960
- function omitTurnDiffSummariesForAgent(turnDiffSummariesByAgentId, agentId) {
2961
- const { [agentId]: _removed, ...rest } = turnDiffSummariesByAgentId ?? {};
2962
- return rest;
2963
- }
2964
- /** Remove all entries in agentIdBySessionId that point to the given agentId. */
2965
- function removeAgentFromSessionIndex(agentIdBySessionId, agentId) {
2966
- const next = {};
2967
- for (const [sessionId, id] of Object.entries(agentIdBySessionId ?? {})) if (id !== agentId) next[sessionId] = id;
2968
- return next;
2969
- }
2970
- function defaultRuntimeSnapshot(agentId, timestamp, sequence) {
2971
- return {
2972
- id: agentId,
2973
- activity: "idle",
2974
- lastActivity: timestamp,
2975
- updatedAtSequence: sequence
2976
- };
2977
- }
2978
- /**
2979
- * Bump runtimeSnapshotSequence on the corresponding AgentSnapshot (if present)
2980
- * so low-frequency subscribers can cheaply detect a runtime change. No-op if
2981
- * the agent has no lifecycle snapshot yet (a runtime event arrived before
2982
- * agent.created — unusual but defensive).
2983
- */
2984
- function bumpRuntimeSnapshotSequence(agentsById, agentId, sequence) {
2985
- const agent = agentsById[agentId];
2986
- if (!agent) return agentsById;
2987
- return {
2988
- ...agentsById,
2989
- [agentId]: {
2990
- ...agent,
2991
- runtimeSnapshotSequence: sequence
2992
- }
2993
- };
2994
- }
2995
- function applyEvent(state, event) {
2996
- switch (event.type) {
2997
- case "agent.created": {
2998
- const existing = state.agentsById[event.payload.agentId];
2999
- const agent = event.payload.agent;
3000
- const nextAgentIdBySessionId = agent.sessionId ? {
3001
- ...state.agentIdBySessionId,
3002
- [agent.sessionId]: agent.id
3003
- } : state.agentIdBySessionId;
3004
- return {
3005
- ...state,
3006
- sequence: Math.max(state.sequence, event.sequence),
3007
- agentsById: {
3008
- ...state.agentsById,
3009
- [event.payload.agentId]: existing ? {
3010
- ...existing,
3011
- ...agent
3012
- } : agent
3013
- },
3014
- agentIdBySessionId: nextAgentIdBySessionId
3015
- };
3016
- }
3017
- case "agent.started": {
3018
- const agent = event.payload.agent;
3019
- const nextAgentIdBySessionId = agent.sessionId ? {
3020
- ...state.agentIdBySessionId,
3021
- [agent.sessionId]: agent.id
3022
- } : state.agentIdBySessionId;
3023
- return {
3024
- ...state,
3025
- sequence: Math.max(state.sequence, event.sequence),
3026
- agentsById: {
3027
- ...state.agentsById,
3028
- [event.payload.agentId]: agent
3029
- },
3030
- agentIdBySessionId: nextAgentIdBySessionId
3031
- };
3032
- }
3033
- case "agent.enrichment_changed": {
3034
- const agent = state.agentsById[event.payload.agentId];
3035
- if (!agent) return {
3036
- ...state,
3037
- sequence: Math.max(state.sequence, event.sequence)
3038
- };
3039
- return {
3040
- ...state,
3041
- sequence: Math.max(state.sequence, event.sequence),
3042
- agentsById: {
3043
- ...state.agentsById,
3044
- [event.payload.agentId]: {
3045
- ...agent,
3046
- role: event.payload.role ?? agent.role,
3047
- hasPendingQuestion: event.payload.hasPendingQuestion ?? false,
3048
- pendingQuestionCount: event.payload.pendingQuestionCount ?? 0,
3049
- pendingQuestionPrompt: event.payload.pendingQuestionPrompt,
3050
- pendingQuestionReason: event.payload.pendingQuestionReason,
3051
- pendingInputCount: event.payload.pendingInputCount,
3052
- pendingInputKinds: event.payload.pendingInputKinds,
3053
- pendingAskUserQuestion: event.payload.pendingAskUserQuestion,
3054
- pendingProposedPlan: event.payload.pendingProposedPlan,
3055
- resolution: event.payload.resolution,
3056
- resolutionCount: event.payload.resolutionCount
3057
- }
3058
- }
3059
- };
3060
- }
3061
- case "agent.stopped": {
3062
- const { [event.payload.agentId]: _removed, ...rest } = state.agentsById;
3063
- const runtimeById = state.agentRuntimeById ?? {};
3064
- const prevRuntime = runtimeById[event.payload.agentId];
3065
- const nextRuntimeById = prevRuntime ? {
3066
- ...runtimeById,
3067
- [event.payload.agentId]: {
3068
- ...prevRuntime,
3069
- activity: "stopped",
3070
- currentTool: void 0,
3071
- thinking: void 0,
3072
- waiting: void 0,
3073
- channelReply: void 0,
3074
- lastActivity: event.timestamp,
3075
- updatedAtSequence: event.sequence
3076
- }
3077
- } : runtimeById;
3078
- const permissionRequestIdsByAgentId = state.channelPermissionRequestIdsByAgentId ?? {};
3079
- const pendingIds = permissionRequestIdsByAgentId[event.payload.agentId] ?? [];
3080
- const nextPermissionRequestsById = { ...state.channelPermissionRequestsById };
3081
- for (const requestId of pendingIds) delete nextPermissionRequestsById[requestId];
3082
- const { [event.payload.agentId]: _removedPendingIds, ...restPendingIds } = permissionRequestIdsByAgentId;
3083
- const resolvedDecisionIdsByAgentId = state.resolvedChannelPermissionDecisionIdsByAgentId ?? {};
3084
- const resolvedIds = resolvedDecisionIdsByAgentId[event.payload.agentId] ?? [];
3085
- const nextResolvedDecisionsById = { ...state.resolvedChannelPermissionDecisionsById ?? {} };
3086
- for (const requestId of resolvedIds) delete nextResolvedDecisionsById[requestId];
3087
- const { [event.payload.agentId]: _removedResolvedIds, ...restResolvedIds } = resolvedDecisionIdsByAgentId;
3088
- return {
3089
- ...state,
3090
- sequence: Math.max(state.sequence, event.sequence),
3091
- agentsById: rest,
3092
- agentRuntimeById: nextRuntimeById,
3093
- channelPermissionRequestsById: nextPermissionRequestsById,
3094
- channelPermissionRequestIdsByAgentId: restPendingIds,
3095
- resolvedChannelPermissionDecisionsById: nextResolvedDecisionsById,
3096
- resolvedChannelPermissionDecisionIdsByAgentId: restResolvedIds,
3097
- turnDiffSummariesByAgentId: omitTurnDiffSummariesForAgent(state.turnDiffSummariesByAgentId, event.payload.agentId),
3098
- agentIdBySessionId: removeAgentFromSessionIndex(state.agentIdBySessionId, event.payload.agentId)
3099
- };
3100
- }
3101
- case "agent.status_changed": {
3102
- const agent = state.agentsById[event.payload.agentId] ?? (event.payload.role === "strike" && event.payload.issueId ? {
3103
- id: event.payload.agentId,
3104
- issueId: event.payload.issueId,
3105
- status: event.payload.status,
3106
- role: "strike",
3107
- startedAt: event.timestamp
3108
- } : void 0);
3109
- if (!agent) return {
3110
- ...state,
3111
- sequence: Math.max(state.sequence, event.sequence)
3112
- };
3113
- const nextTurnDiffSummariesByAgentId = isTerminalTurnDiffSummaryStatus(event.payload.status) ? omitTurnDiffSummariesForAgent(state.turnDiffSummariesByAgentId, event.payload.agentId) : state.turnDiffSummariesByAgentId;
3114
- const nextAgent = (() => {
3115
- const base = {
3116
- ...agent,
3117
- status: event.payload.status
3118
- };
3119
- for (const field of [
3120
- "hasLiveTmuxSession",
3121
- "stoppedByUser",
3122
- "stoppedByPause",
3123
- "paused",
3124
- "pausedReason",
3125
- "pausedAt",
3126
- "troubled",
3127
- "troubledAt",
3128
- "consecutiveFailures",
3129
- "firstFailureInRunAt",
3130
- "lastFailureAt",
3131
- "lastFailureReason",
3132
- "lastFailureNextRetryAt",
3133
- "kickoffDelivered",
3134
- "hostOverride",
3135
- "role",
3136
- "model",
3137
- "workspace",
3138
- "sessionId",
3139
- "lastActivity",
3140
- "lastResumeAt",
3141
- "stoppedAt",
3142
- "branch",
3143
- "costSoFar",
3144
- "phase",
3145
- "workType",
3146
- "roleRunHead",
3147
- "flywheelRunId",
3148
- "reviewSubRole",
3149
- "reviewRunId",
3150
- "reviewOutputPath",
3151
- "reviewSynthesisAgentId",
3152
- "reviewDeadlineAt",
3153
- "reviewMonitorSignaled",
3154
- "reviewRetryAttempt",
3155
- "inspectSubRole",
3156
- "deliveryMethod",
3157
- "supervisorEnabled",
3158
- "channelsEnabled"
3159
- ]) if (field in event.payload) {
3160
- const value = event.payload[field];
3161
- if (value === null || value === void 0) delete base[field];
3162
- else base[field] = value;
3163
- }
3164
- const sessionAlive = event.payload.hasLiveTmuxSession === true;
3165
- if (event.payload.status !== "running" && event.payload.status !== "starting" && !sessionAlive) {
3166
- delete base["hasPendingQuestion"];
3167
- delete base["pendingQuestionCount"];
3168
- delete base["pendingQuestionPrompt"];
3169
- delete base["pendingQuestionReason"];
3170
- delete base["pendingInputCount"];
3171
- delete base["pendingInputKinds"];
3172
- delete base["pendingAskUserQuestion"];
3173
- delete base["pendingProposedPlan"];
3174
- }
3175
- return base;
3176
- })();
3177
- return {
3178
- ...state,
3179
- sequence: Math.max(state.sequence, event.sequence),
3180
- agentsById: {
3181
- ...state.agentsById,
3182
- [event.payload.agentId]: nextAgent
3183
- },
3184
- turnDiffSummariesByAgentId: nextTurnDiffSummariesByAgentId,
3185
- agentIdBySessionId: event.payload.sessionId ? {
3186
- ...state.agentIdBySessionId,
3187
- [event.payload.sessionId]: event.payload.agentId
3188
- } : state.agentIdBySessionId
3189
- };
3190
- }
3191
- case "agent.heartbeat_dead": {
3192
- const agent = state.agentsById[event.payload.agentId];
3193
- if (!agent) return {
3194
- ...state,
3195
- sequence: Math.max(state.sequence, event.sequence)
3196
- };
3197
- const runtimeById = state.agentRuntimeById ?? {};
3198
- const prevRuntime = runtimeById[event.payload.agentId];
3199
- const nextRuntimeById = prevRuntime ? {
3200
- ...runtimeById,
3201
- [event.payload.agentId]: {
3202
- ...prevRuntime,
3203
- activity: "stopped",
3204
- currentTool: void 0,
3205
- thinking: void 0,
3206
- waiting: void 0,
3207
- channelReply: void 0,
3208
- lastActivity: event.timestamp,
3209
- updatedAtSequence: event.sequence
3210
- }
3211
- } : runtimeById;
3212
- return {
3213
- ...state,
3214
- sequence: Math.max(state.sequence, event.sequence),
3215
- agentsById: {
3216
- ...state.agentsById,
3217
- [event.payload.agentId]: {
3218
- ...agent,
3219
- status: "error"
3220
- }
3221
- },
3222
- agentRuntimeById: nextRuntimeById
3223
- };
3224
- }
3225
- case "agent.output_received": {
3226
- const updated = [...state.agentOutputById[event.payload.agentId] ?? [], ...event.payload.lines].slice(-MAX_AGENT_OUTPUT_LINES);
3227
- return {
3228
- ...state,
3229
- sequence: Math.max(state.sequence, event.sequence),
3230
- agentOutputById: {
3231
- ...state.agentOutputById,
3232
- [event.payload.agentId]: updated
3233
- }
3234
- };
3235
- }
3236
- case "pipeline.status_changed":
3237
- case "review.status_changed": return {
3238
- ...state,
3239
- sequence: Math.max(state.sequence, event.sequence),
3240
- reviewStatusByIssueId: {
3241
- ...state.reviewStatusByIssueId,
3242
- [event.payload.issueId]: event.payload.status
3243
- }
3244
- };
3245
- case "review.reviewer_started": {
3246
- const { issueId, role, sessionName } = event.payload;
3247
- const existing = state.reviewStatusByIssueId[issueId];
3248
- const prevSubs = existing?.reviewSubStatuses ?? {};
3249
- const prevNames = existing?.reviewSessionNames ?? [];
3250
- const nextNames = prevNames.includes(sessionName) ? prevNames : [...prevNames, sessionName];
3251
- const nextStatus = {
3252
- ...existing ?? { issueId },
3253
- reviewSubStatuses: {
3254
- ...prevSubs,
3255
- [role]: "running"
3256
- },
3257
- reviewSessionNames: nextNames
3258
- };
3259
- return {
3260
- ...state,
3261
- sequence: Math.max(state.sequence, event.sequence),
3262
- reviewStatusByIssueId: {
3263
- ...state.reviewStatusByIssueId,
3264
- [issueId]: nextStatus
3265
- }
3266
- };
3267
- }
3268
- case "review.reviewer_completed": {
3269
- const { issueId, role } = event.payload;
3270
- const existing = state.reviewStatusByIssueId[issueId];
3271
- if (!existing) return {
3272
- ...state,
3273
- sequence: Math.max(state.sequence, event.sequence)
3274
- };
3275
- const prevSubs = existing.reviewSubStatuses ?? {};
3276
- const nextStatus = {
3277
- ...existing,
3278
- reviewSubStatuses: {
3279
- ...prevSubs,
3280
- [role]: "done"
3281
- }
3282
- };
3283
- return {
3284
- ...state,
3285
- sequence: Math.max(state.sequence, event.sequence),
3286
- reviewStatusByIssueId: {
3287
- ...state.reviewStatusByIssueId,
3288
- [issueId]: nextStatus
3289
- }
3290
- };
3291
- }
3292
- case "review.specialist.timed_out": return {
3293
- ...state,
3294
- sequence: Math.max(state.sequence, event.sequence)
3295
- };
3296
- case "review.coordinator_started": {
3297
- const { issueId, sessionName } = event.payload;
3298
- const nextStatus = {
3299
- ...state.reviewStatusByIssueId[issueId] ?? { issueId },
3300
- reviewCoordinatorSessionName: sessionName
3301
- };
3302
- return {
3303
- ...state,
3304
- sequence: Math.max(state.sequence, event.sequence),
3305
- reviewStatusByIssueId: {
3306
- ...state.reviewStatusByIssueId,
3307
- [issueId]: nextStatus
3308
- }
3309
- };
3310
- }
3311
- case "review.coordinator.died": return {
3312
- ...state,
3313
- sequence: Math.max(state.sequence, event.sequence)
3314
- };
3315
- case "pipeline.review-started":
3316
- case "pipeline.review-completed":
3317
- case "pipeline.test-started":
3318
- case "pipeline.test-completed": return {
3319
- ...state,
3320
- sequence: Math.max(state.sequence, event.sequence)
3321
- };
3322
- case "merge.ready": return {
3323
- ...state,
3324
- sequence: Math.max(state.sequence, event.sequence)
3325
- };
3326
- case "specialist.started":
3327
- case "specialist.completed":
3328
- case "specialist.failed": return {
3329
- ...state,
3330
- sequence: Math.max(state.sequence, event.sequence)
3331
- };
3332
- case "resources.updated": return {
3333
- ...state,
3334
- sequence: Math.max(state.sequence, event.sequence),
3335
- resources: event.payload.resources
3336
- };
3337
- case "issues.snapshot": return {
3338
- ...state,
3339
- sequence: Math.max(state.sequence, event.sequence),
3340
- issuesRaw: event.payload.issues
3341
- };
3342
- case "issues.updated": return {
3343
- ...state,
3344
- sequence: Math.max(state.sequence, event.sequence)
3345
- };
3346
- case "issue.statusChanged": {
3347
- const { issueId, status, canonicalStatus, labels } = event.payload;
3348
- const updatedIssues = state.issuesRaw.map((issue) => {
3349
- if (issue["identifier"] === issueId || issue["id"] === issueId) {
3350
- const patch = {
3351
- ...issue,
3352
- status,
3353
- canonicalStatus,
3354
- state: canonicalStatus
3355
- };
3356
- if (labels) patch.labels = labels;
3357
- return patch;
3358
- }
3359
- return issue;
3360
- });
3361
- return {
3362
- ...state,
3363
- sequence: Math.max(state.sequence, event.sequence),
3364
- issuesRaw: updatedIssues
3365
- };
3366
- }
3367
- case "activity.updated": return {
3368
- ...state,
3369
- sequence: Math.max(state.sequence, event.sequence),
3370
- recentActivity: event.payload.events.slice(0, MAX_ACTIVITY_ENTRIES)
3371
- };
3372
- case "shadow.inference_update": return {
3373
- ...state,
3374
- sequence: Math.max(state.sequence, event.sequence),
3375
- shadowInferenceByIssueId: {
3376
- ...state.shadowInferenceByIssueId,
3377
- [event.payload.issueId]: event.payload.content
3378
- }
3379
- };
3380
- case "planning.started": {
3381
- const sessionName = event.payload.sessionName;
3382
- const issueId = event.payload.issueId;
3383
- if (sessionName) return {
3384
- ...state,
3385
- sequence: Math.max(state.sequence, event.sequence),
3386
- agentsById: {
3387
- ...state.agentsById,
3388
- [sessionName]: {
3389
- ...state.agentsById[sessionName],
3390
- id: sessionName,
3391
- issueId,
3392
- status: "running",
3393
- startedAt: event.timestamp,
3394
- runtime: event.payload.harness ?? "claude-code",
3395
- role: "plan"
3396
- }
3397
- }
3398
- };
3399
- return {
3400
- ...state,
3401
- sequence: Math.max(state.sequence, event.sequence)
3402
- };
3403
- }
3404
- case "workspace.created": return {
3405
- ...state,
3406
- sequence: Math.max(state.sequence, event.sequence)
3407
- };
3408
- case "workspace.wipe_started": {
3409
- const { issueId } = event.payload;
3410
- const updatedIssues = state.issuesRaw.map((issue) => {
3411
- if (issue["identifier"] === issueId || issue["id"] === issueId) return {
3412
- ...issue,
3413
- canonicalStatus: "wiping",
3414
- state: "wiping"
3415
- };
3416
- return issue;
3417
- });
3418
- return {
3419
- ...state,
3420
- sequence: Math.max(state.sequence, event.sequence),
3421
- issuesRaw: updatedIssues
3422
- };
3423
- }
3424
- case "workspace.destroyed":
3425
- case "workspace.deleted": {
3426
- const { issueId } = event.payload;
3427
- const removedAgentIds = Object.entries(state.agentsById).filter(([, agent]) => agent.issueId === issueId).map(([agentId]) => agentId);
3428
- const updatedAgents = Object.fromEntries(Object.entries(state.agentsById).filter(([, agent]) => agent.issueId !== issueId));
3429
- let nextTurnDiffSummariesByAgentId = state.turnDiffSummariesByAgentId;
3430
- let nextAgentIdBySessionId = state.agentIdBySessionId;
3431
- for (const agentId of removedAgentIds) {
3432
- nextTurnDiffSummariesByAgentId = omitTurnDiffSummariesForAgent(nextTurnDiffSummariesByAgentId, agentId);
3433
- nextAgentIdBySessionId = removeAgentFromSessionIndex(nextAgentIdBySessionId, agentId);
3434
- }
3435
- const updatedIssues = state.issuesRaw.map((issue) => {
3436
- if (issue["identifier"] === issueId || issue["id"] === issueId) return {
3437
- ...issue,
3438
- status: "Todo",
3439
- canonicalStatus: "todo",
3440
- state: "todo"
3441
- };
3442
- return issue;
3443
- });
3444
- return {
3445
- ...state,
3446
- sequence: Math.max(state.sequence, event.sequence),
3447
- agentsById: updatedAgents,
3448
- turnDiffSummariesByAgentId: nextTurnDiffSummariesByAgentId,
3449
- agentIdBySessionId: nextAgentIdBySessionId,
3450
- issuesRaw: updatedIssues
3451
- };
3452
- }
3453
- case "workspace.aborted": {
3454
- const { issueId, sessionName } = event.payload;
3455
- let updatedAgents;
3456
- let nextTurnDiffSummariesByAgentId = state.turnDiffSummariesByAgentId;
3457
- let nextAgentIdBySessionId = state.agentIdBySessionId;
3458
- if (sessionName) {
3459
- const { [sessionName]: _removed, ...rest } = state.agentsById;
3460
- updatedAgents = rest;
3461
- nextTurnDiffSummariesByAgentId = omitTurnDiffSummariesForAgent(nextTurnDiffSummariesByAgentId, sessionName);
3462
- nextAgentIdBySessionId = removeAgentFromSessionIndex(nextAgentIdBySessionId, sessionName);
3463
- } else {
3464
- const removedAgentIds = Object.entries(state.agentsById).filter(([, agent]) => agent.issueId === issueId).map(([agentId]) => agentId);
3465
- updatedAgents = Object.fromEntries(Object.entries(state.agentsById).filter(([, agent]) => agent.issueId !== issueId));
3466
- for (const agentId of removedAgentIds) {
3467
- nextTurnDiffSummariesByAgentId = omitTurnDiffSummariesForAgent(nextTurnDiffSummariesByAgentId, agentId);
3468
- nextAgentIdBySessionId = removeAgentFromSessionIndex(nextAgentIdBySessionId, agentId);
3469
- }
3470
- }
3471
- return {
3472
- ...state,
3473
- sequence: Math.max(state.sequence, event.sequence),
3474
- agentsById: updatedAgents,
3475
- turnDiffSummariesByAgentId: nextTurnDiffSummariesByAgentId,
3476
- agentIdBySessionId: nextAgentIdBySessionId
3477
- };
3478
- }
3479
- case "planning.failed":
3480
- case "planning.sync":
3481
- case "plan.item_status_changed":
3482
- case "plan.subitem_status_changed":
3483
- case "plan.items_unblocked":
3484
- case "operator.intervention":
3485
- case "substrate.bug_filed":
3486
- case "cost.event_recorded": return {
3487
- ...state,
3488
- sequence: Math.max(state.sequence, event.sequence)
3489
- };
3490
- case "memory.observation_created": {
3491
- const observation = event.payload.observation;
3492
- const existing = state.observationsByIssueId[observation.issueId] ?? [];
3493
- const index = existing.findIndex((entry) => entry.id === observation.id);
3494
- const updated = trimMemoryObservations(index === -1 ? [...existing, observation] : existing.map((entry, entryIndex) => entryIndex === index ? observation : entry));
3495
- return {
3496
- ...state,
3497
- sequence: Math.max(state.sequence, event.sequence),
3498
- observationsByIssueId: {
3499
- ...state.observationsByIssueId,
3500
- [observation.issueId]: updated
3501
- }
3502
- };
3503
- }
3504
- case "memory.status_updated": {
3505
- const { identity, status } = event.payload;
3506
- return {
3507
- ...state,
3508
- sequence: Math.max(state.sequence, event.sequence),
3509
- statusByIssueId: {
3510
- ...state.statusByIssueId,
3511
- [identity.issueId]: status
3512
- }
3513
- };
3514
- }
3515
- case "memory.rollup_triggered": {
3516
- const trigger = {
3517
- projectId: event.payload.projectId,
3518
- workspaceId: event.payload.workspaceId,
3519
- issueId: event.payload.issueId,
3520
- pendingTurns: [],
3521
- pendingCount: event.payload.pendingCount,
3522
- threshold: event.payload.threshold,
3523
- triggeredAt: event.timestamp
3524
- };
3525
- const updated = [...state.rollupsByIssueId[event.payload.issueId] ?? [], trigger].slice(-10);
3526
- return {
3527
- ...state,
3528
- sequence: Math.max(state.sequence, event.sequence),
3529
- rollupsByIssueId: {
3530
- ...state.rollupsByIssueId,
3531
- [event.payload.issueId]: updated
3532
- }
3533
- };
3534
- }
3535
- case "memory.reset_marker_created": {
3536
- const { marker } = event.payload;
3537
- const key = `${marker.scope}:${marker.scopeId}`;
3538
- const existing = state.resetMarkersByScopeId[key] ?? [];
3539
- const index = existing.findIndex((entry) => entry.id === marker.id);
3540
- const updated = index === -1 ? [...existing, marker] : existing.map((entry, entryIndex) => entryIndex === index ? marker : entry);
3541
- return {
3542
- ...state,
3543
- sequence: Math.max(state.sequence, event.sequence),
3544
- resetMarkersByScopeId: {
3545
- ...state.resetMarkersByScopeId,
3546
- [key]: updated
3547
- }
3548
- };
3549
- }
3550
- case "memory.health_changed": {
3551
- const health = {
3552
- projectId: event.payload.projectId,
3553
- issueId: event.payload.issueId,
3554
- status: event.payload.status,
3555
- reason: event.payload.reason,
3556
- ...event.payload.detail !== void 0 ? { detail: event.payload.detail } : {},
3557
- ...event.payload.ragDecision !== void 0 ? { ragDecision: event.payload.ragDecision } : {},
3558
- updatedAt: event.timestamp
3559
- };
3560
- return {
3561
- ...state,
3562
- sequence: Math.max(state.sequence, event.sequence),
3563
- healthByIssueId: {
3564
- ...state.healthByIssueId,
3565
- [event.payload.issueId]: health
3566
- }
3567
- };
3568
- }
3569
- case "agent.activity_changed": {
3570
- const { agentId, activity, currentTool } = event.payload;
3571
- const prev = state.agentRuntimeById[agentId] ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence);
3572
- const next = {
3573
- ...prev,
3574
- activity,
3575
- currentTool: activity === "working" ? currentTool : void 0,
3576
- thinking: activity === "thinking" ? prev.thinking : void 0,
3577
- waiting: activity === "waiting" ? prev.waiting : void 0,
3578
- channelReply: activity === "working" ? void 0 : prev.channelReply,
3579
- lastActivity: event.timestamp,
3580
- updatedAtSequence: event.sequence
3581
- };
3582
- return {
3583
- ...state,
3584
- sequence: Math.max(state.sequence, event.sequence),
3585
- agentRuntimeById: {
3586
- ...state.agentRuntimeById,
3587
- [agentId]: next
3588
- },
3589
- agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence)
3590
- };
3591
- }
3592
- case "agent.thinking_started": {
3593
- const { agentId, lastToolAt } = event.payload;
3594
- const next = {
3595
- ...state.agentRuntimeById[agentId] ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence),
3596
- activity: "thinking",
3597
- currentTool: void 0,
3598
- thinking: {
3599
- since: event.timestamp,
3600
- lastToolAt
3601
- },
3602
- waiting: void 0,
3603
- channelReply: void 0,
3604
- lastActivity: event.timestamp,
3605
- updatedAtSequence: event.sequence
3606
- };
3607
- return {
3608
- ...state,
3609
- sequence: Math.max(state.sequence, event.sequence),
3610
- agentRuntimeById: {
3611
- ...state.agentRuntimeById,
3612
- [agentId]: next
3613
- },
3614
- agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence)
3615
- };
3616
- }
3617
- case "agent.thinking_stopped": {
3618
- const { agentId } = event.payload;
3619
- const prev = state.agentRuntimeById[agentId];
3620
- if (!prev) return {
3621
- ...state,
3622
- sequence: Math.max(state.sequence, event.sequence)
3623
- };
3624
- const next = {
3625
- ...prev,
3626
- thinking: void 0,
3627
- lastActivity: event.timestamp,
3628
- updatedAtSequence: event.sequence
3629
- };
3630
- return {
3631
- ...state,
3632
- sequence: Math.max(state.sequence, event.sequence),
3633
- agentRuntimeById: {
3634
- ...state.agentRuntimeById,
3635
- [agentId]: next
3636
- },
3637
- agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence)
3638
- };
3639
- }
3640
- case "agent.waiting_started": {
3641
- const { agentId, reason, message } = event.payload;
3642
- const next = {
3643
- ...state.agentRuntimeById[agentId] ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence),
3644
- activity: "waiting",
3645
- currentTool: void 0,
3646
- thinking: void 0,
3647
- waiting: {
3648
- reason,
3649
- startedAt: event.timestamp,
3650
- message
3651
- },
3652
- lastActivity: event.timestamp,
3653
- updatedAtSequence: event.sequence
3654
- };
3655
- return {
3656
- ...state,
3657
- sequence: Math.max(state.sequence, event.sequence),
3658
- agentRuntimeById: {
3659
- ...state.agentRuntimeById,
3660
- [agentId]: next
3661
- },
3662
- agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence)
3663
- };
3664
- }
3665
- case "agent.waiting_cleared": {
3666
- const { agentId } = event.payload;
3667
- const prev = state.agentRuntimeById[agentId];
3668
- if (!prev) return {
3669
- ...state,
3670
- sequence: Math.max(state.sequence, event.sequence)
3671
- };
3672
- const next = {
3673
- ...prev,
3674
- waiting: void 0,
3675
- lastActivity: event.timestamp,
3676
- updatedAtSequence: event.sequence
3677
- };
3678
- return {
3679
- ...state,
3680
- sequence: Math.max(state.sequence, event.sequence),
3681
- agentRuntimeById: {
3682
- ...state.agentRuntimeById,
3683
- [agentId]: next
3684
- },
3685
- agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence)
3686
- };
3687
- }
3688
- case "agent.permission_requested": {
3689
- const request = event.payload;
3690
- const permissionRequestIdsByAgentId = state.channelPermissionRequestIdsByAgentId ?? {};
3691
- const resolvedDecisionsById = state.resolvedChannelPermissionDecisionsById ?? {};
3692
- const resolvedDecisionIdsByAgentId = state.resolvedChannelPermissionDecisionIdsByAgentId ?? {};
3693
- const nextPendingIds = permissionRequestIdsByAgentId[request.agentId] ?? [];
3694
- const resolvedDecision = resolvedDecisionsById[request.requestId];
3695
- const nextResolvedDecisionsById = { ...resolvedDecisionsById };
3696
- const nextResolvedIdsByAgentId = { ...resolvedDecisionIdsByAgentId };
3697
- if (resolvedDecision) {
3698
- delete nextResolvedDecisionsById[request.requestId];
3699
- const filteredResolvedIds = (nextResolvedIdsByAgentId[resolvedDecision.agentId] ?? []).filter((id) => id !== request.requestId);
3700
- if (filteredResolvedIds.length > 0) nextResolvedIdsByAgentId[resolvedDecision.agentId] = filteredResolvedIds;
3701
- else delete nextResolvedIdsByAgentId[resolvedDecision.agentId];
3702
- }
3703
- return {
3704
- ...state,
3705
- sequence: Math.max(state.sequence, event.sequence),
3706
- channelPermissionRequestsById: {
3707
- ...state.channelPermissionRequestsById,
3708
- [request.requestId]: request
3709
- },
3710
- channelPermissionRequestIdsByAgentId: {
3711
- ...permissionRequestIdsByAgentId,
3712
- [request.agentId]: nextPendingIds.includes(request.requestId) ? nextPendingIds : [...nextPendingIds, request.requestId]
3713
- },
3714
- resolvedChannelPermissionDecisionsById: nextResolvedDecisionsById,
3715
- resolvedChannelPermissionDecisionIdsByAgentId: nextResolvedIdsByAgentId
3716
- };
3717
- }
3718
- case "agent.permission_resolved": {
3719
- const { [event.payload.requestId]: _removed, ...rest } = state.channelPermissionRequestsById;
3720
- const nextPendingIdsByAgentId = { ...state.channelPermissionRequestIdsByAgentId ?? {} };
3721
- const filteredPendingIds = (nextPendingIdsByAgentId[event.payload.agentId] ?? []).filter((id) => id !== event.payload.requestId);
3722
- if (filteredPendingIds.length > 0) nextPendingIdsByAgentId[event.payload.agentId] = filteredPendingIds;
3723
- else delete nextPendingIdsByAgentId[event.payload.agentId];
3724
- const resolvedDecisionIdsByAgentId = state.resolvedChannelPermissionDecisionIdsByAgentId ?? {};
3725
- const nextResolvedIds = resolvedDecisionIdsByAgentId[event.payload.agentId] ?? [];
3726
- return {
3727
- ...state,
3728
- sequence: Math.max(state.sequence, event.sequence),
3729
- channelPermissionRequestsById: rest,
3730
- channelPermissionRequestIdsByAgentId: nextPendingIdsByAgentId,
3731
- resolvedChannelPermissionDecisionsById: {
3732
- ...state.resolvedChannelPermissionDecisionsById ?? {},
3733
- [event.payload.requestId]: {
3734
- requestId: event.payload.requestId,
3735
- agentId: event.payload.agentId,
3736
- issueId: event.payload.issueId,
3737
- behavior: event.payload.behavior
3738
- }
3739
- },
3740
- resolvedChannelPermissionDecisionIdsByAgentId: {
3741
- ...resolvedDecisionIdsByAgentId,
3742
- [event.payload.agentId]: nextResolvedIds.includes(event.payload.requestId) ? nextResolvedIds : [...nextResolvedIds, event.payload.requestId]
3743
- }
3744
- };
3745
- }
3746
- case "agent.message_received": {
3747
- const { agentId, direction } = event.payload;
3748
- const prev = state.agentRuntimeById[agentId] ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence);
3749
- const next = {
3750
- ...prev,
3751
- lastMessageAt: event.timestamp,
3752
- channelReply: direction === "to_agent" ? void 0 : prev.channelReply,
3753
- lastActivity: event.timestamp,
3754
- updatedAtSequence: event.sequence
3755
- };
3756
- return {
3757
- ...state,
3758
- sequence: Math.max(state.sequence, event.sequence),
3759
- agentRuntimeById: {
3760
- ...state.agentRuntimeById,
3761
- [agentId]: next
3762
- },
3763
- agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence)
3764
- };
3765
- }
3766
- case "agent.channel_reply": {
3767
- const { agentId, reply } = event.payload;
3768
- const prev = state.agentRuntimeById[agentId] ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence);
3769
- const next = {
3770
- ...prev,
3771
- channelReply: {
3772
- ...reply,
3773
- reportedAt: event.timestamp
3774
- },
3775
- resolution: reply.kind === "done" ? "done" : reply.kind === "needs_input" ? "needs_input" : prev.resolution,
3776
- resolutionUpdatedAt: reply.kind === "done" || reply.kind === "needs_input" ? event.timestamp : prev.resolutionUpdatedAt,
3777
- lastActivity: event.timestamp,
3778
- updatedAtSequence: event.sequence
3779
- };
3780
- return {
3781
- ...state,
3782
- sequence: Math.max(state.sequence, event.sequence),
3783
- agentRuntimeById: {
3784
- ...state.agentRuntimeById,
3785
- [agentId]: next
3786
- },
3787
- agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence)
3788
- };
3789
- }
3790
- case "agent.model_set": {
3791
- const { agentId, model, claudeSessionId, sessionModel, sessionHarness } = event.payload;
3792
- const prev = state.agentRuntimeById[agentId] ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence);
3793
- const next = {
3794
- ...prev,
3795
- model,
3796
- claudeSessionId: claudeSessionId ?? prev.claudeSessionId,
3797
- sessionModel: sessionModel ?? prev.sessionModel,
3798
- sessionHarness: sessionHarness ?? prev.sessionHarness,
3799
- lastActivity: event.timestamp,
3800
- updatedAtSequence: event.sequence
3801
- };
3802
- let nextAgentIdBySessionId = state.agentIdBySessionId;
3803
- if (claudeSessionId && claudeSessionId !== prev.claudeSessionId) {
3804
- nextAgentIdBySessionId = {
3805
- ...state.agentIdBySessionId,
3806
- [claudeSessionId]: agentId
3807
- };
3808
- if (prev.claudeSessionId && state.agentIdBySessionId[prev.claudeSessionId] === agentId) {
3809
- const { [prev.claudeSessionId]: _removed, ...rest } = state.agentIdBySessionId;
3810
- nextAgentIdBySessionId = {
3811
- ...rest,
3812
- [claudeSessionId]: agentId
3813
- };
3814
- }
3815
- }
3816
- return {
3817
- ...state,
3818
- sequence: Math.max(state.sequence, event.sequence),
3819
- agentRuntimeById: {
3820
- ...state.agentRuntimeById,
3821
- [agentId]: next
3822
- },
3823
- agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence),
3824
- agentIdBySessionId: nextAgentIdBySessionId
3825
- };
3826
- }
3827
- case "agent.current_issue_set": {
3828
- const { agentId, currentIssue } = event.payload;
3829
- const next = {
3830
- ...state.agentRuntimeById[agentId] ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence),
3831
- currentIssue,
3832
- lastActivity: event.timestamp,
3833
- updatedAtSequence: event.sequence
3834
- };
3835
- return {
3836
- ...state,
3837
- sequence: Math.max(state.sequence, event.sequence),
3838
- agentRuntimeById: {
3839
- ...state.agentRuntimeById,
3840
- [agentId]: next
3841
- },
3842
- agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence)
3843
- };
3844
- }
3845
- case "agent.context_saturation_changed": {
3846
- const { agentId, contextSaturatedAt } = event.payload;
3847
- const next = {
3848
- ...state.agentRuntimeById[agentId] ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence),
3849
- contextSaturatedAt,
3850
- updatedAtSequence: event.sequence
3851
- };
3852
- return {
3853
- ...state,
3854
- sequence: Math.max(state.sequence, event.sequence),
3855
- agentRuntimeById: {
3856
- ...state.agentRuntimeById,
3857
- [agentId]: next
3858
- },
3859
- agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence)
3860
- };
3861
- }
3862
- case "agent.resolution_changed": {
3863
- const { agentId, resolution, resolutionCount } = event.payload;
3864
- const next = {
3865
- ...state.agentRuntimeById[agentId] ?? defaultRuntimeSnapshot(agentId, event.timestamp, event.sequence),
3866
- resolution,
3867
- resolutionCount,
3868
- resolutionUpdatedAt: event.timestamp,
3869
- lastActivity: event.timestamp,
3870
- updatedAtSequence: event.sequence
3871
- };
3872
- return {
3873
- ...state,
3874
- sequence: Math.max(state.sequence, event.sequence),
3875
- agentRuntimeById: {
3876
- ...state.agentRuntimeById,
3877
- [agentId]: next
3878
- },
3879
- agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence)
3880
- };
3881
- }
3882
- case "agent.state_restored": {
3883
- const { agentId, snapshot } = event.payload;
3884
- const next = {
3885
- ...snapshot,
3886
- updatedAtSequence: event.sequence
3887
- };
3888
- return {
3889
- ...state,
3890
- sequence: Math.max(state.sequence, event.sequence),
3891
- agentRuntimeById: {
3892
- ...state.agentRuntimeById,
3893
- [agentId]: next
3894
- },
3895
- agentsById: bumpRuntimeSnapshotSequence(state.agentsById, agentId, event.sequence)
3896
- };
3897
- }
3898
- case "activity.entry": {
3899
- const entry = event.payload;
3900
- const updated = [{
3901
- id: entry.id,
3902
- timestamp: event.timestamp,
3903
- ...entry
3904
- }, ...state.recentActivity].slice(0, MAX_ACTIVITY_ENTRIES);
3905
- return {
3906
- ...state,
3907
- sequence: Math.max(state.sequence, event.sequence),
3908
- recentActivity: updated
3909
- };
3910
- }
3911
- case "activity.detailed": {
3912
- const entry = event.payload;
3913
- const updated = [{
3914
- id: entry.id,
3915
- timestamp: event.timestamp,
3916
- ...entry
3917
- }, ...state.detailedActivity].slice(0, MAX_DETAILED_ENTRIES);
3918
- return {
3919
- ...state,
3920
- sequence: Math.max(state.sequence, event.sequence),
3921
- detailedActivity: updated
3922
- };
3923
- }
3924
- case "activity.tts": {
3925
- const entry = event.payload;
3926
- const updated = [{
3927
- id: entry.id,
3928
- timestamp: event.timestamp,
3929
- ...entry
3930
- }, ...state.ttsActivity].slice(0, MAX_TTS_ENTRIES);
3931
- return {
3932
- ...state,
3933
- sequence: Math.max(state.sequence, event.sequence),
3934
- ttsActivity: updated
3935
- };
3936
- }
3937
- case "dashboard.lifecycle_started": {
3938
- const { reason, issueId, trigger } = event.payload;
3939
- return {
3940
- ...state,
3941
- sequence: Math.max(state.sequence, event.sequence),
3942
- dashboardLifecycle: {
3943
- active: true,
3944
- reason,
3945
- issueId,
3946
- trigger,
3947
- startedAt: event.timestamp,
3948
- completedAt: null,
3949
- failedAt: null,
3950
- error: null
3951
- }
3952
- };
3953
- }
3954
- case "dashboard.lifecycle_completed": {
3955
- const { reason, issueId } = event.payload;
3956
- return {
3957
- ...state,
3958
- sequence: Math.max(state.sequence, event.sequence),
3959
- dashboardLifecycle: {
3960
- ...state.dashboardLifecycle,
3961
- active: false,
3962
- reason: reason ?? state.dashboardLifecycle.reason,
3963
- issueId: issueId ?? state.dashboardLifecycle.issueId,
3964
- completedAt: event.timestamp
3965
- }
3966
- };
3967
- }
3968
- case "dashboard.lifecycle_failed": {
3969
- const { reason, issueId, error } = event.payload;
3970
- return {
3971
- ...state,
3972
- sequence: Math.max(state.sequence, event.sequence),
3973
- dashboardLifecycle: {
3974
- ...state.dashboardLifecycle,
3975
- active: false,
3976
- reason: reason ?? state.dashboardLifecycle.reason,
3977
- issueId: issueId ?? state.dashboardLifecycle.issueId,
3978
- failedAt: event.timestamp,
3979
- error
3980
- }
3981
- };
3982
- }
3983
- case "agent.turn_diff_completed": {
3984
- const p = event.payload;
3985
- const existing = state.turnDiffSummariesByAgentId[p.agentId] ?? [];
3986
- const summary = {
3987
- turnId: p.turnId,
3988
- completedAt: p.completedAt,
3989
- files: p.files,
3990
- checkpointRef: p.checkpointRef,
3991
- assistantMessageId: p.assistantMessageId ?? void 0,
3992
- checkpointTurnCount: p.checkpointTurnCount
3993
- };
3994
- const idx = existing.findIndex((s) => s.turnId === p.turnId);
3995
- const updated = trimTurnDiffSummaries(idx >= 0 ? existing.map((s, i) => i === idx ? summary : s) : [...existing, summary]);
3996
- return {
3997
- ...state,
3998
- sequence: Math.max(state.sequence, event.sequence),
3999
- turnDiffSummariesByAgentId: {
4000
- ...state.turnDiffSummariesByAgentId,
4001
- [p.agentId]: updated
4002
- }
4003
- };
4004
- }
4005
- case "conversation.compacting_changed": {
4006
- const { conversationName, compacting } = event.payload;
4007
- if (!compacting) {
4008
- const { [conversationName]: _removed, ...rest } = state.conversationsCompactingByName;
4009
- return {
4010
- ...state,
4011
- conversationsCompactingByName: rest
4012
- };
4013
- }
4014
- return {
4015
- ...state,
4016
- conversationsCompactingByName: {
4017
- ...state.conversationsCompactingByName,
4018
- [conversationName]: true
4019
- }
4020
- };
4021
- }
4022
- case "conversation.created": return {
4023
- ...state,
4024
- conversationsListRevision: state.conversationsListRevision + 1
4025
- };
4026
- case "conversation.title_changed": return {
4027
- ...state,
4028
- conversationsListRevision: state.conversationsListRevision + 1
4029
- };
4030
- case "conversation.permission_changed": {
4031
- const { conversationName, waiting } = event.payload;
4032
- if (!waiting) {
4033
- const { [conversationName]: _removed, ...rest } = state.conversationsAwaitingPermissionByName;
4034
- return {
4035
- ...state,
4036
- conversationsAwaitingPermissionByName: rest
4037
- };
4038
- }
4039
- return {
4040
- ...state,
4041
- conversationsAwaitingPermissionByName: {
4042
- ...state.conversationsAwaitingPermissionByName,
4043
- [conversationName]: true
4044
- }
4045
- };
4046
- }
4047
- case "scan.started": {
4048
- const { mode, dirs } = event.payload;
4049
- return {
4050
- ...state,
4051
- sequence: Math.max(state.sequence, event.sequence),
4052
- scanProgress: {
4053
- active: true,
4054
- mode,
4055
- dirs,
4056
- dirsProcessed: 0,
4057
- dirsTotal: 0,
4058
- sessionsFound: 0,
4059
- elapsedMs: 0,
4060
- inserted: 0,
4061
- updated: 0,
4062
- skipped: 0,
4063
- errors: 0,
4064
- durationMs: 0
4065
- }
4066
- };
4067
- }
4068
- case "scan.progress": {
4069
- if (!state.scanProgress) return {
4070
- ...state,
4071
- sequence: Math.max(state.sequence, event.sequence)
4072
- };
4073
- const { dirsProcessed, dirsTotal, sessionsFound, elapsedMs } = event.payload;
4074
- return {
4075
- ...state,
4076
- sequence: Math.max(state.sequence, event.sequence),
4077
- scanProgress: {
4078
- ...state.scanProgress,
4079
- dirsProcessed,
4080
- dirsTotal,
4081
- sessionsFound,
4082
- elapsedMs
4083
- }
4084
- };
4085
- }
4086
- case "scan.complete": {
4087
- if (!state.scanProgress) return {
4088
- ...state,
4089
- sequence: Math.max(state.sequence, event.sequence)
4090
- };
4091
- const { inserted, updated, skipped, errors, durationMs } = event.payload;
4092
- return {
4093
- ...state,
4094
- sequence: Math.max(state.sequence, event.sequence),
4095
- scanProgress: {
4096
- ...state.scanProgress,
4097
- active: false,
4098
- inserted,
4099
- updated,
4100
- skipped,
4101
- errors,
4102
- durationMs
4103
- }
4104
- };
4105
- }
4106
- case "enrich.progress": {
4107
- const { sessionId, level, model, cost, success, error } = event.payload;
4108
- const prev = state.enrichStats ?? {
4109
- processed: 0,
4110
- totalCost: 0,
4111
- failures: 0,
4112
- durationMs: 0
4113
- };
4114
- const progress = {
4115
- sessionId,
4116
- level,
4117
- model,
4118
- cost,
4119
- success,
4120
- error,
4121
- timestamp: event.timestamp
4122
- };
4123
- return {
4124
- ...state,
4125
- sequence: Math.max(state.sequence, event.sequence),
4126
- enrichStats: {
4127
- processed: prev.processed + 1,
4128
- totalCost: prev.totalCost + (success ? cost : 0),
4129
- failures: prev.failures + (success ? 0 : 1),
4130
- durationMs: 0
4131
- },
4132
- enrichProgressBySessionId: upsertBoundedSessionProgress(state.enrichProgressBySessionId, progress)
4133
- };
4134
- }
4135
- case "enrich.complete": {
4136
- const { processed, totalCost, failures, durationMs } = event.payload;
4137
- return {
4138
- ...state,
4139
- sequence: Math.max(state.sequence, event.sequence),
4140
- enrichStats: {
4141
- processed,
4142
- totalCost,
4143
- failures,
4144
- durationMs
4145
- },
4146
- enrichProgressBySessionId: {}
4147
- };
4148
- }
4149
- case "embed.progress": {
4150
- const { sessionId, model, success, error } = event.payload;
4151
- const progress = {
4152
- sessionId,
4153
- model,
4154
- success,
4155
- error,
4156
- timestamp: event.timestamp
4157
- };
4158
- return {
4159
- ...state,
4160
- sequence: Math.max(state.sequence, event.sequence),
4161
- embedProgressBySessionId: upsertBoundedSessionProgress(state.embedProgressBySessionId, progress)
4162
- };
4163
- }
4164
- default: return state;
4165
- }
4166
- }
4167
- var INITIAL_READ_MODEL_STATE, MAX_AGENT_OUTPUT_LINES, MAX_ACTIVITY_ENTRIES, MAX_DETAILED_ENTRIES, MAX_TTS_ENTRIES, MAX_SESSION_PROGRESS_ENTRIES;
4168
- var init_event_reducers = __esmMin((() => {
4169
- INITIAL_READ_MODEL_STATE = {
4170
- sequence: 0,
4171
- agentsById: {},
4172
- agentRuntimeById: {},
4173
- reviewStatusByIssueId: {},
4174
- resources: null,
4175
- agentOutputById: {},
4176
- issuesRaw: [],
4177
- recentActivity: [],
4178
- detailedActivity: [],
4179
- ttsActivity: [],
4180
- shadowInferenceByIssueId: {},
4181
- turnDiffSummariesByAgentId: {},
4182
- channelPermissionRequestsById: {},
4183
- channelPermissionRequestIdsByAgentId: {},
4184
- resolvedChannelPermissionDecisionsById: {},
4185
- resolvedChannelPermissionDecisionIdsByAgentId: {},
4186
- conversationsCompactingByName: {},
4187
- conversationsAwaitingPermissionByName: {},
4188
- conversationsListRevision: 0,
4189
- observationsByIssueId: {},
4190
- statusByIssueId: {},
4191
- rollupsByIssueId: {},
4192
- resetMarkersByScopeId: {},
4193
- healthByIssueId: {},
4194
- scanProgress: null,
4195
- enrichStats: null,
4196
- enrichProgressBySessionId: {},
4197
- embedProgressBySessionId: {},
4198
- agentIdBySessionId: {},
4199
- dashboardLifecycle: {
4200
- active: false,
4201
- reason: null,
4202
- issueId: null,
4203
- trigger: null,
4204
- startedAt: null,
4205
- completedAt: null,
4206
- failedAt: null,
4207
- error: null
4208
- }
4209
- };
4210
- MAX_AGENT_OUTPUT_LINES = 200;
4211
- MAX_ACTIVITY_ENTRIES = 50;
4212
- MAX_DETAILED_ENTRIES = 200;
4213
- MAX_TTS_ENTRIES = 50;
4214
- MAX_SESSION_PROGRESS_ENTRIES = 100;
4215
- })), FlywheelStatsCriterionStatus, FlywheelStatsTrend, FlywheelStatsCriterionValueObject, FlywheelStatsCriterionValue, FlywheelStatsCriterion, FlywheelStatsCriteria, FlywheelStats;
4216
- var init_flywheel_stats = __esmMin((() => {
4217
- FlywheelStatsCriterionStatus = Schema.Literals([
4218
- "green",
4219
- "yellow",
4220
- "red",
4221
- "insufficient_data"
4222
- ]);
4223
- FlywheelStatsTrend = Schema.Literals([
4224
- "up",
4225
- "down",
4226
- "flat"
4227
- ]);
4228
- FlywheelStatsCriterionValueObject = Schema.Record(Schema.String, Schema.Json);
4229
- FlywheelStatsCriterionValue = Schema.Union([Schema.Number, FlywheelStatsCriterionValueObject]);
4230
- FlywheelStatsCriterion = Schema.Struct({
4231
- label: Schema.String,
4232
- value: FlywheelStatsCriterionValue,
4233
- target: FlywheelStatsCriterionValue,
4234
- status: FlywheelStatsCriterionStatus,
4235
- trend: Schema.optional(FlywheelStatsTrend),
4236
- sampleSize: Schema.Number,
4237
- dataSufficient: Schema.Boolean
4238
- });
4239
- FlywheelStatsCriteria = Schema.Struct({
4240
- c1_bugRate: FlywheelStatsCriterion,
4241
- c2_p0Bugs: FlywheelStatsCriterion,
4242
- c3_passRate: FlywheelStatsCriterion,
4243
- c4_mttr: FlywheelStatsCriterion,
4244
- c5_intervention: FlywheelStatsCriterion,
4245
- c6_timeConsistency: FlywheelStatsCriterion,
4246
- c7_flake: FlywheelStatsCriterion
4247
- });
4248
- FlywheelStats = Schema.Struct({
4249
- window: Schema.String,
4250
- generatedAt: Schema.String,
4251
- criteria: FlywheelStatsCriteria
4252
- });
4253
- Schema.decodeUnknownSync(FlywheelStats);
4254
- Schema.encodeSync(FlywheelStats);
4255
- })), CONTEXT_LAYER_KINDS, CONTEXT_PREVIEW_HARNESSES, ContextPreviewHarness, ContextProjectSummary, ContextWorkspaceSummary, ContextLayerBase, GlobalContextLayerRecord, ProjectContextLayerRecord, WorkspaceContextLayerRecord, ContextEditableLayerRecord, GlobalContextLayerTarget, ProjectContextLayerTarget, WorkspaceContextLayerTarget, ContextLayerTarget, ContextLayerDraft, ContextSyncTarget, ContextPreviewRequest, ContextHarnessPreviews, ContextPreviewDiagnostic, ContextLayerSaveRequest;
4256
- var init_context_layers = __esmMin((() => {
4257
- CONTEXT_LAYER_KINDS = [
4258
- "global",
4259
- "project",
4260
- "workspace"
4261
- ];
4262
- CONTEXT_PREVIEW_HARNESSES = [
4263
- "claude-code",
4264
- "ohmypi",
4265
- "codex"
4266
- ];
4267
- Schema.Literals(CONTEXT_LAYER_KINDS);
4268
- ContextPreviewHarness = Schema.Literals(CONTEXT_PREVIEW_HARNESSES);
4269
- ContextProjectSummary = Schema.Struct({
4270
- projectKey: Schema.String,
4271
- name: Schema.String,
4272
- path: Schema.String,
4273
- issuePrefix: Schema.optional(Schema.String),
4274
- tracker: Schema.optional(Schema.Literals([
4275
- "linear",
4276
- "github",
4277
- "gitlab",
4278
- "rally"
4279
- ])),
4280
- workspaceRoot: Schema.optional(Schema.String)
4281
- });
4282
- ContextWorkspaceSummary = Schema.Struct({
4283
- projectKey: Schema.String,
4284
- path: Schema.String,
4285
- name: Schema.String,
4286
- issueId: Schema.optional(Schema.String),
4287
- branch: Schema.optional(Schema.String)
4288
- });
4289
- ContextLayerBase = {
4290
- file: Schema.String,
4291
- exists: Schema.Boolean,
4292
- content: Schema.String,
4293
- editable: Schema.Boolean
4294
- };
4295
- GlobalContextLayerRecord = Schema.Struct({
4296
- kind: Schema.Literal("global"),
4297
- ...ContextLayerBase
4298
- });
4299
- ProjectContextLayerRecord = Schema.Struct({
4300
- kind: Schema.Literal("project"),
4301
- projectKey: Schema.String,
4302
- ...ContextLayerBase
4303
- });
4304
- WorkspaceContextLayerRecord = Schema.Struct({
4305
- kind: Schema.Literal("workspace"),
4306
- projectKey: Schema.String,
4307
- workspacePath: Schema.String,
4308
- ...ContextLayerBase
4309
- });
4310
- ContextEditableLayerRecord = Schema.Union([
4311
- GlobalContextLayerRecord,
4312
- ProjectContextLayerRecord,
4313
- WorkspaceContextLayerRecord
4314
- ]);
4315
- GlobalContextLayerTarget = Schema.Struct({ kind: Schema.Literal("global") });
4316
- ProjectContextLayerTarget = Schema.Struct({
4317
- kind: Schema.Literal("project"),
4318
- projectKey: Schema.String
4319
- });
4320
- WorkspaceContextLayerTarget = Schema.Struct({
4321
- kind: Schema.Literal("workspace"),
4322
- projectKey: Schema.String,
4323
- workspacePath: Schema.String
4324
- });
4325
- ContextLayerTarget = Schema.Union([
4326
- GlobalContextLayerTarget,
4327
- ProjectContextLayerTarget,
4328
- WorkspaceContextLayerTarget
4329
- ]);
4330
- ContextLayerDraft = Schema.Struct({
4331
- target: ContextLayerTarget,
4332
- content: Schema.String
4333
- });
4334
- ContextSyncTarget = Schema.Struct({
4335
- harness: ContextPreviewHarness,
4336
- layerKind: Schema.Literals(["global", "project"]),
4337
- projectKey: Schema.optional(Schema.String),
4338
- /** Short human label, e.g. "Claude Code · global". */
4339
- label: Schema.String,
4340
- /** Resolved absolute path of the target file. */
4341
- path: Schema.String,
4342
- exists: Schema.Boolean,
4343
- /** True when the file already contains a Overdeck-managed region. */
4344
- hasManagedRegion: Schema.Boolean,
4345
- /** True when the file has hand-authored content outside the managed region. */
4346
- hasUserContent: Schema.Boolean
4347
- });
4348
- Schema.Struct({
4349
- operation: Schema.Literal("load"),
4350
- projects: Schema.Array(ContextProjectSummary),
4351
- workspaces: Schema.Array(ContextWorkspaceSummary),
4352
- layers: Schema.Array(ContextEditableLayerRecord),
4353
- /** Injection targets `pan sync` writes managed regions into. */
4354
- targets: Schema.Array(ContextSyncTarget)
4355
- });
4356
- ContextPreviewRequest = Schema.Struct({
4357
- operation: Schema.Literal("preview"),
4358
- selectedLayer: ContextLayerTarget,
4359
- drafts: Schema.Array(ContextLayerDraft)
4360
- });
4361
- ContextHarnessPreviews = Schema.Struct({
4362
- "claude-code": Schema.String,
4363
- ohmypi: Schema.String,
4364
- codex: Schema.String,
4365
- fullPrompt: Schema.String
4366
- });
4367
- ContextPreviewDiagnostic = Schema.Struct({
4368
- level: Schema.Literals([
4369
- "info",
4370
- "warning",
4371
- "error"
4372
- ]),
4373
- message: Schema.String,
4374
- layer: Schema.optional(ContextLayerTarget)
4375
- });
4376
- Schema.Struct({
4377
- operation: Schema.Literal("preview"),
4378
- previews: ContextHarnessPreviews,
4379
- diagnostics: Schema.Array(ContextPreviewDiagnostic)
4380
- });
4381
- ContextLayerSaveRequest = Schema.Struct({
4382
- operation: Schema.Literal("save"),
4383
- target: ContextLayerTarget,
4384
- content: Schema.String
4385
- });
4386
- Schema.Struct({
4387
- operation: Schema.Literal("save"),
4388
- layer: ContextEditableLayerRecord,
4389
- savedAt: Schema.String
4390
- });
4391
- Schema.Struct({ operation: Schema.Literal("sync") });
4392
- Schema.Struct({
4393
- operation: Schema.Literal("sync"),
4394
- success: Schema.Boolean,
4395
- exitCode: Schema.optional(Schema.Number),
4396
- stdout: Schema.String,
4397
- stderr: Schema.String,
4398
- syncedAt: Schema.String
4399
- });
4400
- })), ArtifactId, ArtifactSlug, ArtifactHash, ArtifactAgentRole, ArtifactAgentHarness, ArtifactLifecycleState, ArtifactValidationCode, ArtifactValidationFinding, ArtifactValidationResult, ArtifactMetadata, ArtifactUrls, ArtifactListEntry;
4401
- var init_artifacts = __esmMin((() => {
4402
- ArtifactId = Schema.String;
4403
- ArtifactSlug = Schema.String;
4404
- ArtifactHash = Schema.String;
4405
- ArtifactAgentRole = Schema.Literals([
4406
- "plan",
4407
- "work",
4408
- "review",
4409
- "test",
4410
- "ship",
4411
- "flywheel",
4412
- "user"
4413
- ]);
4414
- ArtifactAgentHarness = Schema.Literals([
4415
- "claude-code",
4416
- "pi",
4417
- "ohmypi",
4418
- "codex",
4419
- "user"
4420
- ]);
4421
- ArtifactLifecycleState = Schema.Literals([
4422
- "published",
4423
- "pending_changes",
4424
- "unshared"
4425
- ]);
4426
- ArtifactValidationCode = Schema.Literals([
4427
- "invalid_file_type",
4428
- "not_a_file",
4429
- "size_limit_exceeded",
4430
- "forbidden_asset_url",
4431
- "secret_detected",
4432
- "secret_allowed",
4433
- "high_entropy_string",
4434
- "inline_event_handler",
4435
- "missing_image_alt"
4436
- ]);
4437
- ArtifactValidationFinding = Schema.Struct({
4438
- code: ArtifactValidationCode,
4439
- message: Schema.String,
4440
- line: Schema.optional(Schema.Number),
4441
- column: Schema.optional(Schema.Number),
4442
- rule: Schema.optional(Schema.String),
4443
- strict: Schema.optional(Schema.Boolean)
4444
- });
4445
- ArtifactValidationResult = Schema.Struct({
4446
- ok: Schema.Boolean,
4447
- filePath: Schema.optional(Schema.String),
4448
- size: Schema.Number,
4449
- hash: ArtifactHash,
4450
- strict: Schema.Boolean,
4451
- errors: Schema.Array(ArtifactValidationFinding),
4452
- warnings: Schema.Array(ArtifactValidationFinding)
4453
- });
4454
- ArtifactMetadata = Schema.Struct({
4455
- artifactId: ArtifactId,
4456
- slug: ArtifactSlug,
4457
- issueId: Schema.optional(Schema.NullOr(Schema.String)),
4458
- workspaceId: Schema.optional(Schema.NullOr(Schema.String)),
4459
- agentRole: Schema.optional(Schema.NullOr(ArtifactAgentRole)),
4460
- agentHarness: Schema.optional(Schema.NullOr(ArtifactAgentHarness)),
4461
- runId: Schema.optional(Schema.NullOr(Schema.String)),
4462
- sessionId: Schema.optional(Schema.NullOr(Schema.String)),
4463
- filePath: Schema.String,
4464
- currentHash: ArtifactHash,
4465
- lastPublishedHash: Schema.optional(Schema.NullOr(ArtifactHash)),
4466
- supersedes: Schema.optional(Schema.NullOr(ArtifactId)),
4467
- title: Schema.optional(Schema.NullOr(Schema.String)),
4468
- description: Schema.optional(Schema.NullOr(Schema.String)),
4469
- createdAt: Schema.String,
4470
- publishedAt: Schema.optional(Schema.NullOr(Schema.String)),
4471
- unsharedAt: Schema.optional(Schema.NullOr(Schema.String))
4472
- });
4473
- ArtifactUrls = Schema.Struct({
4474
- wrapperUrl: Schema.String,
4475
- rawUrl: Schema.String
4476
- });
4477
- Schema.Struct({
4478
- artifact: Schema.optional(ArtifactMetadata),
4479
- filePath: Schema.String,
4480
- currentHash: ArtifactHash,
4481
- lastPublishedHash: Schema.optional(Schema.NullOr(ArtifactHash)),
4482
- pendingChanges: Schema.Boolean,
4483
- validation: Schema.optional(ArtifactValidationResult)
4484
- });
4485
- Schema.Struct({
4486
- artifact: ArtifactMetadata,
4487
- urls: ArtifactUrls,
4488
- validation: ArtifactValidationResult,
4489
- published: Schema.Boolean
4490
- });
4491
- Schema.Struct({
4492
- artifact: ArtifactMetadata,
4493
- urls: ArtifactUrls,
4494
- validation: ArtifactValidationResult,
4495
- published: Schema.Boolean,
4496
- pendingChanges: Schema.Boolean
4497
- });
4498
- Schema.Struct({
4499
- artifact: ArtifactMetadata,
4500
- unshared: Schema.Boolean
4501
- });
4502
- ArtifactListEntry = Schema.Struct({
4503
- artifact: ArtifactMetadata,
4504
- urls: ArtifactUrls,
4505
- status: ArtifactLifecycleState,
4506
- pendingChanges: Schema.Boolean,
4507
- thumbnailUrl: Schema.optional(Schema.String)
4508
- });
4509
- Schema.Struct({ artifacts: Schema.Array(ArtifactListEntry) });
4510
- Schema.Struct({
4511
- artifact: ArtifactMetadata,
4512
- urls: ArtifactUrls,
4513
- status: ArtifactLifecycleState,
4514
- pendingChanges: Schema.Boolean
4515
- });
4516
- Schema.Struct({
4517
- issueId: Schema.optional(Schema.String),
4518
- workspaceId: Schema.optional(Schema.String),
4519
- artifacts: Schema.Array(ArtifactListEntry)
4520
- });
4521
- })), FeatureRegistryStatus;
4522
- var init_feature_registry = __esmMin((() => {
4523
- FeatureRegistryStatus = Schema.Literals([
4524
- "active",
4525
- "archived",
4526
- "merged",
4527
- "deferred"
4528
- ]);
4529
- Schema.Struct({
4530
- featureId: Schema.String,
4531
- featureName: Schema.String,
4532
- description: Schema.NullOr(Schema.String),
4533
- owningWorkspaceId: Schema.NullOr(Schema.String),
4534
- owningIssueId: Schema.NullOr(Schema.String),
4535
- owningAgentId: Schema.NullOr(Schema.String),
4536
- status: FeatureRegistryStatus,
4537
- createdAt: Schema.String,
4538
- updatedAt: Schema.String,
4539
- tags: Schema.Array(Schema.String)
4540
- });
4541
- }));
4542
- //#endregion
4543
- //#region ../../../packages/contracts/src/harness-behavior.ts
4544
- function getHarnessBehavior(harness) {
4545
- if (harness === "ohmypi" || harness === "pi") return OHMYPI_BEHAVIOR;
4546
- if (harness === "codex") return CODEX_BEHAVIOR;
4547
- return CLAUDE_CODE_BEHAVIOR;
4548
- }
4549
- var CLAUDE_CODE_BEHAVIOR, OHMYPI_BEHAVIOR, CODEX_BEHAVIOR;
4550
- var init_harness_behavior = __esmMin((() => {
4551
- CLAUDE_CODE_BEHAVIOR = {
4552
- displayName: "Claude Code",
4553
- executableName: "claude",
4554
- processNames: ["claude"],
4555
- launchCommandKind: "claude-code",
4556
- deliveryKind: "pty-supervisor",
4557
- readinessKind: "claude-session-signal",
4558
- transcriptKind: "claude-jsonl",
4559
- sessionIdSource: "launcher-session-id",
4560
- contextLayerKind: "claude",
4561
- feedKind: "claude_code",
4562
- supportsPtySupervisor: true,
4563
- supportsChannelsBridge: true,
4564
- supportsConversationStreaming: false,
4565
- supportsPatchProjection: true,
4566
- usesRpcFifo: false,
4567
- usesCodexHome: false,
4568
- injectsPromptTimeMemory: false,
4569
- workAgentMode: "claude-code",
4570
- readyTimeoutSeconds: 30
4571
- };
4572
- OHMYPI_BEHAVIOR = {
4573
- displayName: "Pi",
4574
- executableName: "omp",
4575
- processNames: ["omp"],
4576
- launchCommandKind: "ohmypi-rpc",
4577
- deliveryKind: "rpc-fifo",
4578
- readinessKind: "ohmypi-ready-file",
4579
- transcriptKind: "ohmypi-jsonl",
4580
- sessionIdSource: "transcript-jsonl",
4581
- contextLayerKind: "pi",
4582
- feedKind: "pi",
4583
- supportsPtySupervisor: false,
4584
- supportsChannelsBridge: false,
4585
- supportsConversationStreaming: true,
4586
- supportsPatchProjection: false,
4587
- usesRpcFifo: true,
4588
- usesCodexHome: false,
4589
- injectsPromptTimeMemory: true,
4590
- workAgentMode: "ohmypi-rpc",
4591
- readyTimeoutSeconds: 120
4592
- };
4593
- CODEX_BEHAVIOR = {
4594
- displayName: "Codex",
4595
- executableName: "codex",
4596
- processNames: ["codex"],
4597
- launchCommandKind: "codex-work-tui",
4598
- deliveryKind: "codex-exec-resume",
4599
- readinessKind: "codex-tui-prompt",
4600
- transcriptKind: "codex-rollout-jsonl",
4601
- sessionIdSource: "codex-thread-id",
4602
- contextLayerKind: "codex",
4603
- feedKind: "codex",
4604
- supportsPtySupervisor: true,
4605
- supportsChannelsBridge: false,
4606
- supportsConversationStreaming: true,
4607
- supportsPatchProjection: true,
4608
- usesRpcFifo: false,
4609
- usesCodexHome: true,
4610
- injectsPromptTimeMemory: false,
4611
- workAgentMode: "codex-work-tui",
4612
- readyTimeoutSeconds: 30
4613
- };
4614
- })), HygieneFinding, HygienePullRequest;
4615
- var init_hygiene = __esmMin((() => {
4616
- HygieneFinding = Schema.Struct({
4617
- id: Schema.String,
4618
- summary: Schema.String,
4619
- detail: Schema.optional(Schema.String),
4620
- urgent: Schema.optional(Schema.Boolean)
4621
- });
4622
- HygienePullRequest = Schema.Struct({
4623
- number: Schema.Number,
4624
- branch: Schema.String,
4625
- url: Schema.String,
4626
- blocking: Schema.Literals([
4627
- "review-pending",
4628
- "test-pending",
4629
- "failing-checks",
4630
- "awaiting-UAT",
4631
- "clean"
4632
- ])
4633
- });
4634
- Schema.Struct({
4635
- generatedAt: Schema.String,
4636
- root: Schema.String,
4637
- needsAttention: Schema.Boolean,
4638
- skipped: Schema.Array(Schema.String),
4639
- push: Schema.Struct({
4640
- ahead: Schema.Number,
4641
- commits: Schema.Array(Schema.String)
4642
- }),
4643
- tree: Schema.Struct({
4644
- files: Schema.Array(Schema.String),
4645
- backups: Schema.Array(Schema.String)
4646
- }),
4647
- prs: Schema.Array(HygienePullRequest),
4648
- agents: Schema.Struct({
4649
- counts: Schema.Record(Schema.String, Schema.Number),
4650
- problems: Schema.Array(HygieneFinding)
4651
- }),
4652
- sessions: Schema.Struct({
4653
- total: Schema.Number,
4654
- zombies: Schema.Array(Schema.String)
4655
- }),
4656
- branches: Schema.Struct({ stale: Schema.Array(Schema.String) }),
4657
- workspaces: Schema.Struct({ stale: Schema.Array(Schema.String) }),
4658
- disk: Schema.Struct({
4659
- availableGb: Schema.Number,
4660
- thresholdGb: Schema.Number,
4661
- urgent: Schema.Boolean
4662
- }),
4663
- fixes: Schema.Struct({
4664
- branchesDeleted: Schema.Array(Schema.String),
4665
- workspacesRemoved: Schema.Array(Schema.Struct({
4666
- path: Schema.String,
4667
- freedBytes: Schema.Number
4668
- })),
4669
- errors: Schema.Array(Schema.String)
4670
- })
4671
- });
4672
- }));
4673
- //#endregion
4674
- //#region ../../../packages/contracts/src/update.ts
4675
- var init_update = __esmMin((() => {}));
4676
- var init_deploy = __esmMin((() => {
4677
- Schema.Struct({
4678
- status: Schema.Literals([
4679
- "fresh",
4680
- "stale",
4681
- "unknown"
4682
- ]),
4683
- buildCommit: Schema.NullOr(Schema.String),
4684
- originMainSha: Schema.NullOr(Schema.String),
4685
- behindTotal: Schema.NullOr(Schema.Number),
4686
- behindBuildInputs: Schema.NullOr(Schema.Number),
4687
- originMainLastCommitAt: Schema.NullOr(Schema.Number),
4688
- originMainLastBuildInputCommitAt: Schema.NullOr(Schema.Number),
4689
- computedAt: Schema.Number,
4690
- reason: Schema.optional(Schema.String)
4691
- });
4692
- }));
4693
- //#endregion
4694
- //#region ../../../packages/contracts/src/issue-sort.ts
4695
- /**
4696
- * Compares issue identifiers numerically within their prefix, so PAN-532 sorts
4697
- * before PAN-2822. Every issue-id sort should use this comparator (PAN-2831).
4698
- */
4699
- function compareIssueIds(a, b) {
4700
- return collator.compare(a, b);
4701
- }
4702
- var collator;
4703
- var init_issue_sort = __esmMin((() => {
4704
- collator = new Intl.Collator("en", {
4705
- numeric: true,
4706
- sensitivity: "base"
4707
- });
4708
- }));
4709
- //#endregion
4710
- //#region ../../../packages/contracts/src/index.ts
4711
- var init_src = __esmMin((() => {
4712
- init_types();
4713
- init_events();
4714
- init_memory();
4715
- init_rpc();
4716
- init_event_reducers();
4717
- init_editor();
4718
- init_flywheel();
4719
- init_flywheel_stats();
4720
- init_context_layers();
4721
- init_artifacts();
4722
- init_feature_registry();
4723
- init_harness_behavior();
4724
- init_hygiene();
4725
- init_update();
4726
- init_system_health();
4727
- init_deploy();
4728
- init_issue_sort();
4729
- }));
4730
- //#endregion
4731
- export { projectLegacySystemHealthSummary as C, AgentSnapshot as D, AgentRuntimeSnapshot as E, ReviewStatusSnapshot as O, SystemHealthSnapshot as S, MemoryStatus as T, WS_METHODS as _, OHMYPI_BEHAVIOR as a, EDITORS as b, ContextPreviewRequest as c, applyEvent as d, getMaxTurnDiffSummariesPerAgent as f, PanRpcGroup as g, PanRpcError as h, CODEX_BEHAVIOR as i, normalizeChannelReplyPayload as k, FlywheelStats as l, trimTurnDiffSummaries as m, compareIssueIds as n, getHarnessBehavior as o, isTerminalTurnDiffSummaryStatus as p, CLAUDE_CODE_BEHAVIOR as r, ContextLayerSaveRequest as s, init_src as t, INITIAL_READ_MODEL_STATE as u, FlywheelRunId as v, MemoryObservation as w, DomainEvent as x, FlywheelStatus as y };
4732
-
4733
- //# sourceMappingURL=src-U7_kTPEE.js.map