@polderlabs/bizar 10.0.7 → 10.2.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 (236) hide show
  1. package/README.md +0 -2
  2. package/bizar-dash/dist/assets/{ActivityFeed-Da-JCrE6.js → ActivityFeed-JjmOY2AQ.js} +1 -1
  3. package/bizar-dash/dist/assets/{ActivityFeed-Da-JCrE6.js.map → ActivityFeed-JjmOY2AQ.js.map} +1 -1
  4. package/bizar-dash/dist/assets/{ActivityView-nIRsSETb.js → ActivityView-BIIMvGWo.js} +1 -1
  5. package/bizar-dash/dist/assets/{ActivityView-nIRsSETb.js.map → ActivityView-BIIMvGWo.js.map} +1 -1
  6. package/bizar-dash/dist/assets/{AdminView-DP1NMxmG.js → AdminView-DRidJtkq.js} +1 -1
  7. package/bizar-dash/dist/assets/{AdminView-DP1NMxmG.js.map → AdminView-DRidJtkq.js.map} +1 -1
  8. package/bizar-dash/dist/assets/{AgentActivity-lSPkOr-O.js → AgentActivity-79l4SBMC.js} +1 -1
  9. package/bizar-dash/dist/assets/{AgentActivity-lSPkOr-O.js.map → AgentActivity-79l4SBMC.js.map} +1 -1
  10. package/bizar-dash/dist/assets/{AgentsView-BIWGkz7w.js → AgentsView-0vT4uPSc.js} +1 -1
  11. package/bizar-dash/dist/assets/{AgentsView-BIWGkz7w.js.map → AgentsView-0vT4uPSc.js.map} +1 -1
  12. package/bizar-dash/dist/assets/{Alert-DN0UysMg.js → Alert-CG5q_s75.js} +1 -1
  13. package/bizar-dash/dist/assets/{Alert-DN0UysMg.js.map → Alert-CG5q_s75.js.map} +1 -1
  14. package/bizar-dash/dist/assets/ArtifactsView-DM8ZmpR9.js +21 -0
  15. package/bizar-dash/dist/assets/ArtifactsView-DM8ZmpR9.js.map +1 -0
  16. package/bizar-dash/dist/assets/{AuthView-DW5cs7ma.js → AuthView-BveN94MC.js} +1 -1
  17. package/bizar-dash/dist/assets/{AuthView-DW5cs7ma.js.map → AuthView-BveN94MC.js.map} +1 -1
  18. package/bizar-dash/dist/assets/{Avatar-DZPv9pvd.js → Avatar-ulUPIYTd.js} +1 -1
  19. package/bizar-dash/dist/assets/{Avatar-DZPv9pvd.js.map → Avatar-ulUPIYTd.js.map} +1 -1
  20. package/bizar-dash/dist/assets/{BackgroundJobsView-D8O-EyMD.js → BackgroundJobsView-BWErhqFo.js} +1 -1
  21. package/bizar-dash/dist/assets/{BackgroundJobsView-D8O-EyMD.js.map → BackgroundJobsView-BWErhqFo.js.map} +1 -1
  22. package/bizar-dash/dist/assets/{BackupView-uwXkhxOV.js → BackupView-CnBjzG9N.js} +1 -1
  23. package/bizar-dash/dist/assets/{BackupView-uwXkhxOV.js.map → BackupView-CnBjzG9N.js.map} +1 -1
  24. package/bizar-dash/dist/assets/{Card-Tyboihu7.js → Card-B0imhxMk.js} +1 -1
  25. package/bizar-dash/dist/assets/{Card-Tyboihu7.js.map → Card-B0imhxMk.js.map} +1 -1
  26. package/bizar-dash/dist/assets/{ChatView-DRBHzgay.js → ChatView-D6zGytzx.js} +1 -1
  27. package/bizar-dash/dist/assets/{ChatView-DRBHzgay.js.map → ChatView-D6zGytzx.js.map} +1 -1
  28. package/bizar-dash/dist/assets/{Chip-BrXIlR9w.js → Chip-wwZSGwLE.js} +1 -1
  29. package/bizar-dash/dist/assets/{Chip-BrXIlR9w.js.map → Chip-wwZSGwLE.js.map} +1 -1
  30. package/bizar-dash/dist/assets/{ClaudeSessionsView-Ck62jaOr.js → ClaudeSessionsView-DK1sOLhi.js} +1 -1
  31. package/bizar-dash/dist/assets/{ClaudeSessionsView-Ck62jaOr.js.map → ClaudeSessionsView-DK1sOLhi.js.map} +1 -1
  32. package/bizar-dash/dist/assets/{ClipboardView-DfND6xL6.js → ClipboardView-CZ2lYPr0.js} +1 -1
  33. package/bizar-dash/dist/assets/{ClipboardView-DfND6xL6.js.map → ClipboardView-CZ2lYPr0.js.map} +1 -1
  34. package/bizar-dash/dist/assets/{ConfigView-DjJmSrOJ.js → ConfigView-D-zT9eNA.js} +1 -1
  35. package/bizar-dash/dist/assets/{ConfigView-DjJmSrOJ.js.map → ConfigView-D-zT9eNA.js.map} +1 -1
  36. package/bizar-dash/dist/assets/{DiagnosticsView-CKgItf0J.js → DiagnosticsView-BocV68Lb.js} +1 -1
  37. package/bizar-dash/dist/assets/{DiagnosticsView-CKgItf0J.js.map → DiagnosticsView-BocV68Lb.js.map} +1 -1
  38. package/bizar-dash/dist/assets/{DialogsView-DHYF8dE1.js → DialogsView-BVjPI5x7.js} +1 -1
  39. package/bizar-dash/dist/assets/{DialogsView-DHYF8dE1.js.map → DialogsView-BVjPI5x7.js.map} +1 -1
  40. package/bizar-dash/dist/assets/{DoctorView-DDLHrSKk.js → DoctorView-84gJcZwM.js} +1 -1
  41. package/bizar-dash/dist/assets/{DoctorView-DDLHrSKk.js.map → DoctorView-84gJcZwM.js.map} +1 -1
  42. package/bizar-dash/dist/assets/{EmptyState-DZ2ouKwd.js → EmptyState-BjgVOrcO.js} +1 -1
  43. package/bizar-dash/dist/assets/{EmptyState-DZ2ouKwd.js.map → EmptyState-BjgVOrcO.js.map} +1 -1
  44. package/bizar-dash/dist/assets/{EnvVarsView-D1cx83mB.js → EnvVarsView-BJ2TEzF7.js} +1 -1
  45. package/bizar-dash/dist/assets/{EnvVarsView-D1cx83mB.js.map → EnvVarsView-BJ2TEzF7.js.map} +1 -1
  46. package/bizar-dash/dist/assets/{ErrorState-DwwJ2-Jq.js → ErrorState-BE3WBFqF.js} +1 -1
  47. package/bizar-dash/dist/assets/{ErrorState-DwwJ2-Jq.js.map → ErrorState-BE3WBFqF.js.map} +1 -1
  48. package/bizar-dash/dist/assets/{EvalView-C9aYixXW.js → EvalView-BJJ2P-kK.js} +1 -1
  49. package/bizar-dash/dist/assets/{EvalView-C9aYixXW.js.map → EvalView-BJJ2P-kK.js.map} +1 -1
  50. package/bizar-dash/dist/assets/{GoalsView-DZa_mGmh.js → GoalsView-pwROHApi.js} +1 -1
  51. package/bizar-dash/dist/assets/{GoalsView-DZa_mGmh.js.map → GoalsView-pwROHApi.js.map} +1 -1
  52. package/bizar-dash/dist/assets/{Grid-CiRyhAgR.js → Grid-qcvbhx6e.js} +1 -1
  53. package/bizar-dash/dist/assets/{Grid-CiRyhAgR.js.map → Grid-qcvbhx6e.js.map} +1 -1
  54. package/bizar-dash/dist/assets/{HeadroomView-CNc-TI7u.js → HeadroomView-D1UiTYbt.js} +1 -1
  55. package/bizar-dash/dist/assets/{HeadroomView-CNc-TI7u.js.map → HeadroomView-D1UiTYbt.js.map} +1 -1
  56. package/bizar-dash/dist/assets/{HistoryView-Dv7aPxJE.js → HistoryView-C7SSOLJA.js} +1 -1
  57. package/bizar-dash/dist/assets/{HistoryView-Dv7aPxJE.js.map → HistoryView-C7SSOLJA.js.map} +1 -1
  58. package/bizar-dash/dist/assets/{Input-BbFUDQnS.js → Input-Bgzxf_Hu.js} +1 -1
  59. package/bizar-dash/dist/assets/{Input-BbFUDQnS.js.map → Input-Bgzxf_Hu.js.map} +1 -1
  60. package/bizar-dash/dist/assets/{LibrariesView-DBQ83TNa.js → LibrariesView-CbFFksox.js} +1 -1
  61. package/bizar-dash/dist/assets/{LibrariesView-DBQ83TNa.js.map → LibrariesView-CbFFksox.js.map} +1 -1
  62. package/bizar-dash/dist/assets/{LightRAGView-JYpE5u9p.js → LightRAGView-BqDrJbRq.js} +1 -1
  63. package/bizar-dash/dist/assets/{LightRAGView-JYpE5u9p.js.map → LightRAGView-BqDrJbRq.js.map} +1 -1
  64. package/bizar-dash/dist/assets/{ListHeader-BGjm11Z0.js → ListHeader-TjPJrUfY.js} +1 -1
  65. package/bizar-dash/dist/assets/{ListHeader-BGjm11Z0.js.map → ListHeader-TjPJrUfY.js.map} +1 -1
  66. package/bizar-dash/dist/assets/{MemoryView-CnOP2MvM.js → MemoryView-BlTeHLhX.js} +1 -1
  67. package/bizar-dash/dist/assets/{MemoryView-CnOP2MvM.js.map → MemoryView-BlTeHLhX.js.map} +1 -1
  68. package/bizar-dash/dist/assets/{MiscView-BBcpUbZZ.js → MiscView-B8QY82Pm.js} +1 -1
  69. package/bizar-dash/dist/assets/{MiscView-BBcpUbZZ.js.map → MiscView-B8QY82Pm.js.map} +1 -1
  70. package/bizar-dash/dist/assets/{ModsView-CU4cAmIz.js → ModsView-CvW1OWts.js} +1 -1
  71. package/bizar-dash/dist/assets/{ModsView-CU4cAmIz.js.map → ModsView-CvW1OWts.js.map} +1 -1
  72. package/bizar-dash/dist/assets/{NotificationsView-BYffvthq.js → NotificationsView-CsBt5U7x.js} +1 -1
  73. package/bizar-dash/dist/assets/{NotificationsView-BYffvthq.js.map → NotificationsView-CsBt5U7x.js.map} +1 -1
  74. package/bizar-dash/dist/assets/{ObsidianView-D3bI0row.js → ObsidianView-BCTejEj2.js} +1 -1
  75. package/bizar-dash/dist/assets/{ObsidianView-D3bI0row.js.map → ObsidianView-BCTejEj2.js.map} +1 -1
  76. package/bizar-dash/dist/assets/{OverviewView-0tq8f-Y0.js → OverviewView-BsuPxwnB.js} +1 -1
  77. package/bizar-dash/dist/assets/{OverviewView-0tq8f-Y0.js.map → OverviewView-BsuPxwnB.js.map} +1 -1
  78. package/bizar-dash/dist/assets/{ProgressBar-B-h60LKA.js → ProgressBar-DlZTETEn.js} +1 -1
  79. package/bizar-dash/dist/assets/{ProgressBar-B-h60LKA.js.map → ProgressBar-DlZTETEn.js.map} +1 -1
  80. package/bizar-dash/dist/assets/{ProjectsView-DhX5lzHS.js → ProjectsView-Soxtmpet.js} +1 -1
  81. package/bizar-dash/dist/assets/{ProjectsView-DhX5lzHS.js.map → ProjectsView-Soxtmpet.js.map} +1 -1
  82. package/bizar-dash/dist/assets/{ProvidersView-CJMX7jm9.js → ProvidersView-DaCEV9pM.js} +1 -1
  83. package/bizar-dash/dist/assets/{ProvidersView-CJMX7jm9.js.map → ProvidersView-DaCEV9pM.js.map} +1 -1
  84. package/bizar-dash/dist/assets/{SchedulesView-CcwDQ9Nm.js → SchedulesView-DY2ByBj_.js} +1 -1
  85. package/bizar-dash/dist/assets/{SchedulesView-CcwDQ9Nm.js.map → SchedulesView-DY2ByBj_.js.map} +1 -1
  86. package/bizar-dash/dist/assets/{Select-Cw7Qtz2M.js → Select-Dbd88_n8.js} +1 -1
  87. package/bizar-dash/dist/assets/{Select-Cw7Qtz2M.js.map → Select-Dbd88_n8.js.map} +1 -1
  88. package/bizar-dash/dist/assets/{SettingsRow-DgsgbPSI.js → SettingsRow-CLMNd434.js} +1 -1
  89. package/bizar-dash/dist/assets/{SettingsRow-DgsgbPSI.js.map → SettingsRow-CLMNd434.js.map} +1 -1
  90. package/bizar-dash/dist/assets/{SettingsView-DTAFdKyK.js → SettingsView-b24oFq9x.js} +1 -1
  91. package/bizar-dash/dist/assets/{SettingsView-DTAFdKyK.js.map → SettingsView-b24oFq9x.js.map} +1 -1
  92. package/bizar-dash/dist/assets/{Sheet-DH-WNJ3Y.js → Sheet-DnDid58j.js} +1 -1
  93. package/bizar-dash/dist/assets/{Sheet-DH-WNJ3Y.js.map → Sheet-DnDid58j.js.map} +1 -1
  94. package/bizar-dash/dist/assets/{Slider-DXbJuQ7y.js → Slider-BJCvKI1I.js} +1 -1
  95. package/bizar-dash/dist/assets/{Slider-DXbJuQ7y.js.map → Slider-BJCvKI1I.js.map} +1 -1
  96. package/bizar-dash/dist/assets/{Sparkline-CYtAn82j.js → Sparkline-ktqQLdyb.js} +1 -1
  97. package/bizar-dash/dist/assets/{Sparkline-CYtAn82j.js.map → Sparkline-ktqQLdyb.js.map} +1 -1
  98. package/bizar-dash/dist/assets/{Switch-BItGrPqr.js → Switch-CwXfsDii.js} +1 -1
  99. package/bizar-dash/dist/assets/{Switch-BItGrPqr.js.map → Switch-CwXfsDii.js.map} +1 -1
  100. package/bizar-dash/dist/assets/{TasksView-i5tm6CkX.js → TasksView-BHmpzFCf.js} +1 -1
  101. package/bizar-dash/dist/assets/{TasksView-i5tm6CkX.js.map → TasksView-BHmpzFCf.js.map} +1 -1
  102. package/bizar-dash/dist/assets/{Textarea-qYDf3yds.js → Textarea-BzIAwSlp.js} +1 -1
  103. package/bizar-dash/dist/assets/{Textarea-qYDf3yds.js.map → Textarea-BzIAwSlp.js.map} +1 -1
  104. package/bizar-dash/dist/assets/{UpdateView-Xln-ej26.js → UpdateView-CSmX9NN0.js} +1 -1
  105. package/bizar-dash/dist/assets/{UpdateView-Xln-ej26.js.map → UpdateView-CSmX9NN0.js.map} +1 -1
  106. package/bizar-dash/dist/assets/{UsageView-BGuZSUZ6.js → UsageView-COyr_Gfi.js} +1 -1
  107. package/bizar-dash/dist/assets/{UsageView-BGuZSUZ6.js.map → UsageView-COyr_Gfi.js.map} +1 -1
  108. package/bizar-dash/dist/assets/{ViewHeader-BqIPVKuG.js → ViewHeader-BzYZ3m-e.js} +1 -1
  109. package/bizar-dash/dist/assets/{ViewHeader-BqIPVKuG.js.map → ViewHeader-BzYZ3m-e.js.map} +1 -1
  110. package/bizar-dash/dist/assets/{VoiceView-CWUOCQs_.js → VoiceView-D33_xG5t.js} +1 -1
  111. package/bizar-dash/dist/assets/{VoiceView-CWUOCQs_.js.map → VoiceView-D33_xG5t.js.map} +1 -1
  112. package/bizar-dash/dist/assets/{brain-fsBSDl2g.js → brain-CM-Vls8r.js} +1 -1
  113. package/bizar-dash/dist/assets/{brain-fsBSDl2g.js.map → brain-CM-Vls8r.js.map} +1 -1
  114. package/bizar-dash/dist/assets/{calendar-DsHTZoCU.js → calendar-C0lgZk69.js} +1 -1
  115. package/bizar-dash/dist/assets/{calendar-DsHTZoCU.js.map → calendar-C0lgZk69.js.map} +1 -1
  116. package/bizar-dash/dist/assets/{circle-CqSxqqeJ.js → circle-Bx_hQEBC.js} +1 -1
  117. package/bizar-dash/dist/assets/{circle-CqSxqqeJ.js.map → circle-Bx_hQEBC.js.map} +1 -1
  118. package/bizar-dash/dist/assets/{circle-alert-BsLl001l.js → circle-alert-DHvsqpw5.js} +1 -1
  119. package/bizar-dash/dist/assets/{circle-alert-BsLl001l.js.map → circle-alert-DHvsqpw5.js.map} +1 -1
  120. package/bizar-dash/dist/assets/{circle-check-rVKMQmZp.js → circle-check-Bx8wmXR9.js} +1 -1
  121. package/bizar-dash/dist/assets/{circle-check-rVKMQmZp.js.map → circle-check-Bx8wmXR9.js.map} +1 -1
  122. package/bizar-dash/dist/assets/{clock-OuficfgH.js → clock-CejGoecX.js} +1 -1
  123. package/bizar-dash/dist/assets/{clock-OuficfgH.js.map → clock-CejGoecX.js.map} +1 -1
  124. package/bizar-dash/dist/assets/{download-BdHlstUY.js → download-4cEUWue1.js} +1 -1
  125. package/bizar-dash/dist/assets/{download-BdHlstUY.js.map → download-4cEUWue1.js.map} +1 -1
  126. package/bizar-dash/dist/assets/{external-link-DA3_VGm-.js → external-link-0NqUhI4i.js} +1 -1
  127. package/bizar-dash/dist/assets/{external-link-DA3_VGm-.js.map → external-link-0NqUhI4i.js.map} +1 -1
  128. package/bizar-dash/dist/assets/{file-text-B-g8H227.js → file-text-yEMkrSoZ.js} +1 -1
  129. package/bizar-dash/dist/assets/{file-text-B-g8H227.js.map → file-text-yEMkrSoZ.js.map} +1 -1
  130. package/bizar-dash/dist/assets/{filter-D9B8s5CG.js → filter-BXt60zAS.js} +1 -1
  131. package/bizar-dash/dist/assets/{filter-D9B8s5CG.js.map → filter-BXt60zAS.js.map} +1 -1
  132. package/bizar-dash/dist/assets/{git-pull-request-ByH0YuVz.js → git-pull-request-BjG5lNtR.js} +1 -1
  133. package/bizar-dash/dist/assets/{git-pull-request-ByH0YuVz.js.map → git-pull-request-BjG5lNtR.js.map} +1 -1
  134. package/bizar-dash/dist/assets/{main-CdOm1Pj9.js → main-CokHAXWM.js} +2 -2
  135. package/bizar-dash/dist/assets/{main-CdOm1Pj9.js.map → main-CokHAXWM.js.map} +1 -1
  136. package/bizar-dash/dist/assets/{pause-C9hgd8wX.js → pause-CAmulU0F.js} +1 -1
  137. package/bizar-dash/dist/assets/{pause-C9hgd8wX.js.map → pause-CAmulU0F.js.map} +1 -1
  138. package/bizar-dash/dist/assets/{pencil-BanqaMw7.js → pencil-eq5IqBmU.js} +1 -1
  139. package/bizar-dash/dist/assets/{pencil-BanqaMw7.js.map → pencil-eq5IqBmU.js.map} +1 -1
  140. package/bizar-dash/dist/assets/{play-CawUZ02_.js → play-BoLrrcBA.js} +1 -1
  141. package/bizar-dash/dist/assets/{play-CawUZ02_.js.map → play-BoLrrcBA.js.map} +1 -1
  142. package/bizar-dash/dist/assets/{plug-Cmv0-T_e.js → plug-DBrVM9lK.js} +1 -1
  143. package/bizar-dash/dist/assets/{plug-Cmv0-T_e.js.map → plug-DBrVM9lK.js.map} +1 -1
  144. package/bizar-dash/dist/assets/{plus-M6LYiKX8.js → plus-DENm0hqV.js} +1 -1
  145. package/bizar-dash/dist/assets/{plus-M6LYiKX8.js.map → plus-DENm0hqV.js.map} +1 -1
  146. package/bizar-dash/dist/assets/{power-DP5x_SRF.js → power-DLjXF7zE.js} +1 -1
  147. package/bizar-dash/dist/assets/{power-DP5x_SRF.js.map → power-DLjXF7zE.js.map} +1 -1
  148. package/bizar-dash/dist/assets/{power-off-NOJRLAIs.js → power-off-D47cOnG_.js} +1 -1
  149. package/bizar-dash/dist/assets/{power-off-NOJRLAIs.js.map → power-off-D47cOnG_.js.map} +1 -1
  150. package/bizar-dash/dist/assets/{refresh-ccw-CHMprsm5.js → refresh-ccw-DNrXX9gB.js} +1 -1
  151. package/bizar-dash/dist/assets/{refresh-ccw-CHMprsm5.js.map → refresh-ccw-DNrXX9gB.js.map} +1 -1
  152. package/bizar-dash/dist/assets/{refresh-cw-1RBqDKgJ.js → refresh-cw-CoAHDpeS.js} +1 -1
  153. package/bizar-dash/dist/assets/{refresh-cw-1RBqDKgJ.js.map → refresh-cw-CoAHDpeS.js.map} +1 -1
  154. package/bizar-dash/dist/assets/{rotate-ccw-DJRekBbi.js → rotate-ccw-ObX5awaG.js} +1 -1
  155. package/bizar-dash/dist/assets/{rotate-ccw-DJRekBbi.js.map → rotate-ccw-ObX5awaG.js.map} +1 -1
  156. package/bizar-dash/dist/assets/{rotate-cw-DHooc0Tx.js → rotate-cw-xpPJw9LP.js} +1 -1
  157. package/bizar-dash/dist/assets/{rotate-cw-DHooc0Tx.js.map → rotate-cw-xpPJw9LP.js.map} +1 -1
  158. package/bizar-dash/dist/assets/{save-DQKCKyZK.js → save-D1iKiJJl.js} +1 -1
  159. package/bizar-dash/dist/assets/{save-DQKCKyZK.js.map → save-D1iKiJJl.js.map} +1 -1
  160. package/bizar-dash/dist/assets/{send-xgy3RAi7.js → send-BRcAhZUm.js} +1 -1
  161. package/bizar-dash/dist/assets/{send-xgy3RAi7.js.map → send-BRcAhZUm.js.map} +1 -1
  162. package/bizar-dash/dist/assets/{shield-alert-CWV2F5ab.js → shield-alert-C6vEcK-g.js} +1 -1
  163. package/bizar-dash/dist/assets/{shield-alert-CWV2F5ab.js.map → shield-alert-C6vEcK-g.js.map} +1 -1
  164. package/bizar-dash/dist/assets/{trash-2-CL4khSRv.js → trash-2-DZDjEnNh.js} +1 -1
  165. package/bizar-dash/dist/assets/{trash-2-CL4khSRv.js.map → trash-2-DZDjEnNh.js.map} +1 -1
  166. package/bizar-dash/dist/assets/{trending-up-CSJJhWTS.js → trending-up-DMj-AJVf.js} +1 -1
  167. package/bizar-dash/dist/assets/{trending-up-CSJJhWTS.js.map → trending-up-DMj-AJVf.js.map} +1 -1
  168. package/bizar-dash/dist/assets/{triangle-alert-BPLb7uLt.js → triangle-alert-_2xe_tl4.js} +1 -1
  169. package/bizar-dash/dist/assets/{triangle-alert-BPLb7uLt.js.map → triangle-alert-_2xe_tl4.js.map} +1 -1
  170. package/bizar-dash/dist/assets/{upload-Cww6MvFq.js → upload-DdDljAeV.js} +1 -1
  171. package/bizar-dash/dist/assets/{upload-Cww6MvFq.js.map → upload-DdDljAeV.js.map} +1 -1
  172. package/bizar-dash/dist/assets/{zap-DmhVUzRA.js → zap-mHsgh0FP.js} +1 -1
  173. package/bizar-dash/dist/assets/{zap-DmhVUzRA.js.map → zap-mHsgh0FP.js.map} +1 -1
  174. package/bizar-dash/dist/index.html +1 -1
  175. package/bizar-dash/src/server/api.mjs +13 -6
  176. package/bizar-dash/src/server/artifacts-store.mjs +120 -14
  177. package/bizar-dash/src/server/claude-artifacts.mjs +281 -0
  178. package/bizar-dash/src/server/diagnostics-store.mjs +5 -35
  179. package/bizar-dash/src/server/mod-security.mjs +1 -2
  180. package/bizar-dash/src/server/providers-store.mjs +1 -1
  181. package/bizar-dash/src/server/routes/_shared.mjs +0 -17
  182. package/bizar-dash/src/server/routes/artifacts.mjs +42 -6
  183. package/bizar-dash/src/server/routes/audit.mjs +78 -0
  184. package/bizar-dash/src/server/routes/decisions.mjs +78 -0
  185. package/bizar-dash/src/server/routes/model-router.mjs +158 -0
  186. package/bizar-dash/src/server/routes/model-router.test.mjs +104 -0
  187. package/bizar-dash/src/server/routes/sessions.mjs +80 -0
  188. package/bizar-dash/src/server/server.mjs +1 -27
  189. package/bizar-dash/src/server/sprint.test.mjs +163 -0
  190. package/bizar-dash/src/web/v8/views/Artifacts/ArtifactsView.tsx +232 -21
  191. package/bizar-dash/src/web/v8/views/Artifacts/ClaudeArtifactView.tsx +179 -0
  192. package/bizar-dash/tests/cli-bugfixes.test.mjs +1 -1
  193. package/bizar-dash/tests/cli-error-visibility.test.mjs +1 -1
  194. package/bizar-dash/tests/cli-refactor.test.mjs +0 -1
  195. package/bizar-dash/tests/diagnostics-store.test.mjs +0 -1
  196. package/cli/bin.mjs +1 -15
  197. package/cli/cli-commands-validation.test.mjs +1 -1
  198. package/cli/commands/lightrag.mjs +1 -1
  199. package/cli/commands/util.mjs +1 -1
  200. package/cli/copy.mjs +1 -47
  201. package/cli/doctor.mjs +3 -3
  202. package/cli/install.mjs +3 -37
  203. package/cli/service-controller.mjs +0 -192
  204. package/cli/service-env.mjs +2 -9
  205. package/cli/utils.mjs +0 -7
  206. package/package.json +1 -1
  207. package/packages/sdk/dist/agent/cron.d.ts +44 -0
  208. package/packages/sdk/dist/agent/cron.js +79 -0
  209. package/packages/sdk/dist/agent/heartbeat.d.ts +43 -0
  210. package/packages/sdk/dist/agent/heartbeat.js +116 -0
  211. package/packages/sdk/dist/index.d.ts +3 -0
  212. package/packages/sdk/dist/index.js +5 -0
  213. package/packages/sdk/dist/learning/decisions.d.ts +46 -0
  214. package/packages/sdk/dist/learning/decisions.js +132 -0
  215. package/packages/sdk/dist/learning/index.d.ts +8 -0
  216. package/packages/sdk/dist/learning/index.js +8 -0
  217. package/packages/sdk/dist/learning/instincts.d.ts +38 -0
  218. package/packages/sdk/dist/learning/instincts.js +139 -0
  219. package/packages/sdk/dist/mcp/server.js +119 -1
  220. package/packages/sdk/dist/router/agent-model-registry.d.ts +89 -0
  221. package/packages/sdk/dist/router/agent-model-registry.js +144 -0
  222. package/packages/sdk/dist/router/index.d.ts +1 -0
  223. package/packages/sdk/dist/router/index.js +1 -0
  224. package/packages/sdk/package.json +3 -2
  225. package/scripts/audit.mjs +388 -0
  226. package/scripts/audit.test.mjs +149 -0
  227. package/scripts/check-deps.mjs +0 -24
  228. package/scripts/eval-gate.mjs +134 -0
  229. package/scripts/eval-gate.test.mjs +138 -0
  230. package/scripts/feature-state-machine.mjs +178 -0
  231. package/scripts/feature-state-machine.test.mjs +135 -0
  232. package/scripts/spec-dedup.test.mjs +124 -0
  233. package/scripts/sprint.mjs +213 -0
  234. package/scripts/worktree-setup.sh +79 -0
  235. package/bizar-dash/dist/assets/ArtifactsView-CDIhPBAx.js +0 -6
  236. package/bizar-dash/dist/assets/ArtifactsView-CDIhPBAx.js.map +0 -1
@@ -0,0 +1,179 @@
1
+ /**
2
+ * v8/views/Artifacts/ClaudeArtifactView.tsx — v10.1.0.
3
+ *
4
+ * Renders Claude-* kind artifacts (HTML / SVG / React) inside a
5
+ * sandboxed iframe. The server hands us a fully-compiled HTML envelope
6
+ * (returned from GET /api/artifacts/:slug/render) and we drop it into
7
+ * `srcdoc`. The iframe has `sandbox` set so even if a malicious escape
8
+ * slips past server-side filtering, the runtime is still constrained.
9
+ *
10
+ * Two render modes:
11
+ * 1. <iframe srcdoc> — for full-envelope artifacts (default).
12
+ * 2. Plain `<div>` for an `mdx` kind fallback (handled by caller).
13
+ */
14
+
15
+ import { useState } from 'react';
16
+ import { Card, CardBody } from '../../ui/data/Card.js';
17
+ import { Inline } from '../../ui/primitives/Inline.js';
18
+ import { Stack } from '../../ui/primitives/Stack.js';
19
+ import { AlertTriangle, ShieldCheck, ExternalLink } from 'lucide-react';
20
+ import { Button } from '../../ui/controls/Button.js';
21
+
22
+ export interface ClaudeRenderPayload {
23
+ slug: string;
24
+ kind: 'claude-html' | 'claude-svg' | 'claude-react' | 'mdx';
25
+ html?: string;
26
+ blocks?: unknown[];
27
+ frontmatter?: Record<string, unknown>;
28
+ warnings?: Array<{ message?: string; pattern?: string }>;
29
+ safeMode?: boolean;
30
+ compiledAt?: string;
31
+ }
32
+
33
+ export function ClaudeArtifactView({
34
+ payload,
35
+ slug,
36
+ }: {
37
+ payload: ClaudeRenderPayload;
38
+ slug: string;
39
+ }): JSX.Element {
40
+ const [showSource, setShowSource] = useState(false);
41
+
42
+ if (payload.kind === 'mdx') {
43
+ // Legacy fallback — the server returns no `html` for mdx; just show
44
+ // the compiled block count.
45
+ return (
46
+ <Card variant="default" data-testid={`claude-view-${slug}`}>
47
+ <CardBody>
48
+ <Inline align="center" gap={2}>
49
+ <ShieldCheck size={14} aria-hidden style={{ color: 'var(--fg-muted)' }} />
50
+ <span style={{ fontSize: 'var(--fs-12)', color: 'var(--fg-muted)' }}>
51
+ Legacy MDX — {Array.isArray(payload.blocks) ? `${payload.blocks.length} blocks` : 'no blocks'}
52
+ </span>
53
+ </Inline>
54
+ </CardBody>
55
+ </Card>
56
+ );
57
+ }
58
+
59
+ if (!payload.html) {
60
+ return (
61
+ <Card variant="default" data-testid={`claude-view-${slug}`}>
62
+ <CardBody>
63
+ <span role="alert" style={{ color: 'var(--danger)' }}>
64
+ No HTML returned by the compiler.
65
+ </span>
66
+ </CardBody>
67
+ </Card>
68
+ );
69
+ }
70
+
71
+ return (
72
+ <Stack gap={2} data-testid={`claude-view-${slug}`}>
73
+ {payload.safeMode && (
74
+ <Inline
75
+ align="center"
76
+ gap={2}
77
+ style={{
78
+ padding: 'var(--space-2)',
79
+ background: 'var(--callout-warning-bg, #fdf6e3)',
80
+ border: '1px solid var(--callout-warning-border, #e0c97d)',
81
+ borderRadius: 'var(--radius-sm)',
82
+ fontSize: 'var(--fs-12)',
83
+ }}
84
+ role="status"
85
+ data-testid={`claude-safe-${slug}`}
86
+ >
87
+ <AlertTriangle size={14} aria-hidden style={{ color: '#b58900' }} />
88
+ <span>
89
+ Safe mode — the compiler stripped potentially dangerous
90
+ patterns in this artifact.
91
+ </span>
92
+ </Inline>
93
+ )}
94
+ {payload.warnings && payload.warnings.length > 0 && (
95
+ <details
96
+ style={{
97
+ fontSize: 'var(--fs-12)',
98
+ color: 'var(--fg-muted)',
99
+ padding: 'var(--space-2)',
100
+ background: 'var(--surface-1)',
101
+ borderRadius: 'var(--radius-sm)',
102
+ }}
103
+ >
104
+ <summary>{payload.warnings.length} warning(s)</summary>
105
+ <ul style={{ marginTop: 'var(--space-1)' }}>
106
+ {payload.warnings.map((w, i) => (
107
+ <li key={i}>
108
+ <code style={{ fontFamily: 'var(--font-mono)' }}>
109
+ {w.pattern}
110
+ </code>{' '}
111
+ — {w.message}
112
+ </li>
113
+ ))}
114
+ </ul>
115
+ </details>
116
+ )}
117
+ <Inline align="center" justify="between" gap={2}>
118
+ <span style={{ fontSize: 'var(--fs-11)', color: 'var(--fg-muted)' }}>
119
+ {payload.kind} · compiled {payload.compiledAt ? new Date(payload.compiledAt).toLocaleTimeString() : 'now'}
120
+ </span>
121
+ <Inline gap={1}>
122
+ <Button variant="ghost" onClick={() => setShowSource((v) => !v)} data-testid={`claude-source-${slug}`}>
123
+ {showSource ? 'Hide source' : 'Show source'}
124
+ </Button>
125
+ <a
126
+ href={`/api/artifacts/${slug}/view`}
127
+ target="_blank"
128
+ rel="noopener noreferrer"
129
+ data-testid={`claude-blank-${slug}`}
130
+ style={{
131
+ display: 'inline-flex',
132
+ alignItems: 'center',
133
+ gap: 'var(--space-1)',
134
+ fontSize: 'var(--fs-12)',
135
+ padding: 'var(--space-1) var(--space-2)',
136
+ color: 'var(--fg)',
137
+ textDecoration: 'none',
138
+ border: '1px solid var(--border)',
139
+ borderRadius: 'var(--radius-sm)',
140
+ background: 'var(--surface-0)',
141
+ }}
142
+ >
143
+ <ExternalLink size={12} aria-hidden /> Open in new tab
144
+ </a>
145
+ </Inline>
146
+ </Inline>
147
+ <iframe
148
+ title={`claude-artifact-${slug}`}
149
+ data-testid={`claude-iframe-${slug}`}
150
+ sandbox="allow-scripts allow-same-origin"
151
+ srcDoc={payload.html}
152
+ style={{
153
+ width: '100%',
154
+ height: 480,
155
+ border: '1px solid var(--border)',
156
+ borderRadius: 'var(--radius-sm)',
157
+ background: 'white',
158
+ }}
159
+ />
160
+ {showSource && (
161
+ <pre
162
+ data-testid={`claude-source-text-${slug}`}
163
+ style={{
164
+ padding: 'var(--space-2)',
165
+ background: 'var(--surface-1)',
166
+ borderRadius: 'var(--radius-sm)',
167
+ fontSize: 'var(--fs-11)',
168
+ maxHeight: 320,
169
+ overflow: 'auto',
170
+ fontFamily: 'var(--font-mono)',
171
+ whiteSpace: 'pre-wrap',
172
+ }}
173
+ >
174
+ {payload.html}
175
+ </pre>
176
+ )}
177
+ </Stack>
178
+ );
179
+ }
@@ -86,7 +86,7 @@ describe('B7 — check-deps.mjs which() uses path.join()', () => {
86
86
  const { checkDeps } = await import('../../scripts/check-deps.mjs');
87
87
  const result = await checkDeps({ strict: false });
88
88
  const names = [...result.present, ...result.missing].map(d => d.name);
89
- const required = ['node', 'bun', 'cline', 'tmux', 'git', 'python3', 'pip', 'jq', 'gh', 'headroom', 'semble', 'skills'];
89
+ const required = ['node', 'bun', 'cline', 'tmux', 'git', 'python3', 'pip', 'jq', 'gh', 'semble', 'skills'];
90
90
  for (const dep of required) {
91
91
  assert.ok(names.includes(dep), `expected ${dep} to be checked`);
92
92
  }
@@ -138,7 +138,7 @@ describe('command module null-check produces user-visible error', () => {
138
138
  // Count `if (!mod)` checks that follow `importCommand`
139
139
  const nullCheckCount = (binSrc.match(/if \(!mod\)/g) || []).length;
140
140
  // We have 9 case groups that call importCommand: install/update, service, dash,
141
- // minimax, headroom, mod, artifact, memory, usage, and util (utility commands)
141
+ // minimax, mod, artifact, memory, usage, and util (utility commands)
142
142
  assert.ok(
143
143
  nullCheckCount >= 9,
144
144
  `Expected at least 9 null checks after importCommand, found ${nullCheckCount}`,
@@ -73,7 +73,6 @@ const COMMAND_FILES = [
73
73
  'service',
74
74
  'dash',
75
75
  'minimax',
76
- 'headroom',
77
76
  'mod',
78
77
  'artifact',
79
78
  'memory',
@@ -151,7 +151,6 @@ describe('collectDiagnostics', () => {
151
151
  assert.ok(snap.disk && typeof snap.disk.exists === 'boolean');
152
152
  assert.ok(snap.services);
153
153
  assert.ok(snap.services.dashboard);
154
- assert.ok(snap.services.headroom);
155
154
  assert.ok(snap.services.lightrag);
156
155
  assert.ok(snap.services.cline);
157
156
  assert.ok(snap.counts);
package/cli/bin.mjs CHANGED
@@ -12,7 +12,7 @@
12
12
  *
13
13
  * Commands:
14
14
  * install, audit, init, export, artifact, update, test-gate, service, dash,
15
- * memory, headroom, minimax, usage, mod, doctor, repair, dev-link, dev-unlink,
15
+ * memory, minimax, usage, mod, doctor, repair, dev-link, dev-unlink,
16
16
  * heads-up, bg, agent-browser, agent-browser-up, providers, deploy, plugin,
17
17
  * marketplace, plan, digest, backup, restore, clip, ocr, voice, workspace, eval
18
18
  */
@@ -133,7 +133,6 @@ function showHelp() {
133
133
  service Manage the background service daemon
134
134
  dash <subcommand> Manage the dashboard (start/stop/status/cleanup/tui)
135
135
  memory <subcommand> Manage project memory (Bizar Memory Service)
136
- headroom <subcommand> Manage Headroom context compression
137
136
  lightrag <subcommand> Manage the LightRAG knowledge-graph server (status/start/autostart)
138
137
  minimax <subcommand> Manage MiniMax Token Plan integration
139
138
  tailscale <subcommand> Manage Tailscale integration (auth, serve, status)
@@ -347,19 +346,6 @@ async function main() {
347
346
  break;
348
347
  }
349
348
 
350
- case 'headroom': {
351
- const mod = await importCommand('headroom');
352
- if (!mod) {
353
- console.error(chalk.red(` ✗ Could not load headroom command module`));
354
- process.exit(EXIT_ERROR);
355
- return;
356
- }
357
- dbg('loaded command module:', 'headroom');
358
- await mod.run(cmd, cmdArgs, isHelpRequest);
359
- dbg('command returned:', cmd);
360
- break;
361
- }
362
-
363
349
  case 'lightrag': {
364
350
  // v5.x — LightRAG management CLI (issue #6).
365
351
  // Subcommands: status, start, autostart.
@@ -25,7 +25,7 @@ const ALL_COMMANDS = [
25
25
  'install', 'update',
26
26
  'service',
27
27
  'dash', 'dashboard',
28
- 'minimax', 'tailscale', 'headroom', 'lightrag',
28
+ 'minimax', 'tailscale', 'lightrag',
29
29
  'mod', 'usage',
30
30
  'deploy', 'plugin', 'marketplace',
31
31
  'artifact',
@@ -8,7 +8,7 @@
8
8
  * the current working directory's project. Used by
9
9
  * `install.sh` and by operators who want to manually
10
10
  * start LightRAG without opening the dashboard.
11
- * start Alias for `autostart` (matches `headroom start`).
11
+ * start Alias for `autostart`.
12
12
  * status Print whether the LightRAG server is running.
13
13
  *
14
14
  * The dashboard server already auto-invokes `lightragStartupHook()` on
@@ -120,7 +120,7 @@ export function showDoctorHelp() {
120
120
  • plugin path resolves
121
121
  • @polderlabs/bizar-plugin is installed globally
122
122
  • core agent files are installed (odin, quick, thor, tyr)
123
- headroom / semble / skills on PATH (lenient — at least one)
123
+ • semble / skills on PATH (lenient — at least one)
124
124
  • dashboard reachable (skipped if no port file)
125
125
  • provider.minimax block + MiniMax model flags are sane
126
126
 
package/cli/copy.mjs CHANGED
@@ -3,7 +3,7 @@ import { join, dirname } from 'node:path';
3
3
  import { homedir } from 'node:os';
4
4
  import ora from 'ora';
5
5
  import chalk from 'chalk';
6
- import { repoPath, clineConfigDir, clineAgentsDir, detectRtk, detectSemble, detectUv, detectSkillsCli } from './utils.mjs';
6
+ import { repoPath, clineConfigDir, clineAgentsDir, detectSemble, detectUv, detectSkillsCli } from './utils.mjs';
7
7
 
8
8
  async function fileExists(path) {
9
9
  try {
@@ -341,52 +341,6 @@ export async function installPluginBizar(projectRoot) {
341
341
  }
342
342
  }
343
343
 
344
- export async function installHeadroom() {
345
- const { execSync } = await import('node:child_process');
346
-
347
- const already = await detectRtk();
348
- if (already) {
349
- const spinner = ora({ text: 'Configuring Headroom for cline...', color: 'magenta' }).start();
350
- try {
351
- execSync('headroom wrap cline', { stdio: 'pipe' });
352
- spinner.succeed(chalk.green('Headroom configured for cline'));
353
- } catch {
354
- spinner.warn(chalk.yellow('Could not auto-configure Headroom — run `headroom wrap cline` manually'));
355
- }
356
- return true;
357
- }
358
-
359
- const spinner = ora({ text: 'Installing Headroom (context compressor)...', color: 'magenta' }).start();
360
-
361
- if (process.platform === 'win32') {
362
- spinner.fail(chalk.red('Automatic Headroom install not supported on Windows. Install manually: pip install "headroom-ai[all]"'));
363
- return false;
364
- }
365
-
366
- try {
367
- execSync(
368
- 'pip install --user "headroom-ai[all]"',
369
- { stdio: 'pipe', timeout: 60000 },
370
- );
371
- spinner.text = 'Configuring Headroom for cline...';
372
- execSync('headroom wrap cline', { stdio: 'pipe' });
373
- spinner.succeed(chalk.green('Headroom installed and configured for cline'));
374
- return true;
375
- } catch {
376
- // Fall back to npm
377
- try {
378
- execSync('npm install -g headroom-ai', { stdio: 'pipe', timeout: 60000 });
379
- spinner.text = 'Configuring Headroom for cline...';
380
- execSync('headroom wrap cline', { stdio: 'pipe' });
381
- spinner.succeed(chalk.green('Headroom installed (npm) and configured for cline'));
382
- return true;
383
- } catch {
384
- spinner.fail(chalk.red('Headroom install failed. Install manually: pip install "headroom-ai[all]" or npm install -g headroom-ai'));
385
- return false;
386
- }
387
- }
388
- }
389
-
390
344
  export async function installSemble() {
391
345
  const { execSync } = await import('node:child_process');
392
346
 
package/cli/doctor.mjs CHANGED
@@ -15,7 +15,7 @@
15
15
  * hooks-wired: settings.json has PreToolUse/PostToolUse/etc
16
16
  * agent-files-installed: agent .md files deployed
17
17
  * skill-files-installed: SKILL.md files deployed
18
- * tools-on-path: at least one of headroom/semble/skills/claude
18
+ * tools-on-path: at least one of semble/skills/claude
19
19
  * memory-vault: BIZAR_HOME exists (memory subdir lazy)
20
20
  * 9router-reachable: provider gateway responds
21
21
  *
@@ -109,13 +109,13 @@ async function checkSkillFilesInstalled() {
109
109
  }
110
110
 
111
111
  /**
112
- * Lenient: passes if at least one of headroom/semble/skills is on PATH.
112
+ * Lenient: passes if at least one of semble/skills/claude is on PATH.
113
113
  * These are informational — none of them are strictly required for
114
114
  * `bizar doctor` to do its job, and missing them shouldn't fail the
115
115
  * overall health report.
116
116
  */
117
117
  async function checkToolsAvailable() {
118
- const tools = ['headroom', 'semble', 'skills', 'claude'];
118
+ const tools = ['semble', 'skills', 'claude'];
119
119
  const found = tools.filter(which);
120
120
  if (found.length === 0) {
121
121
  throw new Error(`none of ${tools.join('/')} on PATH`);
package/cli/install.mjs CHANGED
@@ -15,8 +15,8 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
15
15
 
16
16
  import { showBanner, showPantheon, sectionHeading } from './banner.mjs';
17
17
  import { promptComponents, promptInstallMode, promptAgents, promptSkillPacks, promptApiKeys, promptConfirmInstall, promptRestartCline } from './prompts.mjs';
18
- import { detectClaude, detectHeadroom, detectSemble, detectSkillsCli, detectUv, buildSummary, claudeAgentsDir, claudeConfigDir, repoPath } from './utils.mjs';
19
- import { installAgents, installAgentsMd, installSkill, installClineJson, installBizarFolder, installPluginBizar, installHeadroom, installSemble, installSkillsCli, installCuratedSkills, installRules, installHooks, installCommands, installCommandsBizar, mergeToolsIntoUserConfig } from './copy.mjs';
18
+ import { detectClaude, detectSemble, detectSkillsCli, detectUv, buildSummary, claudeAgentsDir, claudeConfigDir, repoPath } from './utils.mjs';
19
+ import { installAgents, installAgentsMd, installSkill, installClineJson, installBizarFolder, installPluginBizar, installSemble, installSkillsCli, installCuratedSkills, installRules, installHooks, installCommands, installCommandsBizar, mergeToolsIntoUserConfig } from './copy.mjs';
20
20
 
21
21
  const AGENT_FILES = [
22
22
  'odin.md', 'vor.md', 'frigg.md', 'quick.md',
@@ -514,7 +514,7 @@ export async function runPostInstall() {
514
514
  // is a thin Claude Code-native bootstrap that:
515
515
  // - copies `config/settings.json` template on first install
516
516
  // - installs agents into `~/.claude/agents/`
517
- // - probes for headroom / semble / skills-cli
517
+ // - probes for semble / skills-cli
518
518
  // - installs Headroom via pip or npm
519
519
  const { mkdirSync, copyFileSync, existsSync } = await import('node:fs');
520
520
  const { execSync } = await import('node:child_process');
@@ -546,40 +546,6 @@ export async function runPostInstall() {
546
546
  }
547
547
  console.log('BizarHarness: agents installed.');
548
548
 
549
- // Install Headroom
550
- const headroomPresent = await detectHeadroom();
551
- if (!headroomPresent) {
552
- console.log('BizarHarness: installing Headroom (context compressor)...');
553
- try {
554
- if (process.platform === 'win32') {
555
- console.log('BizarHarness: Automatic Headroom install not supported on Windows. Install manually: pip install "headroom-ai[all]"');
556
- } else {
557
- execSync(
558
- 'pip install --user "headroom-ai[all]"',
559
- { stdio: 'pipe', timeout: 60000 },
560
- );
561
- execSync('headroom wrap claude', { stdio: 'pipe' });
562
- console.log('BizarHarness: Headroom installed and configured.');
563
- }
564
- } catch {
565
- // Fall back to npm
566
- try {
567
- execSync('npm install -g headroom-ai', { stdio: 'pipe', timeout: 60000 });
568
- execSync('headroom wrap claude', { stdio: 'pipe' });
569
- console.log('BizarHarness: Headroom installed (npm) and configured.');
570
- } catch {
571
- console.log('BizarHarness: Headroom install failed. Install manually: pip install "headroom-ai[all]" or npm install -g headroom-ai');
572
- }
573
- }
574
- } else {
575
- try {
576
- execSync('headroom wrap claude', { stdio: 'pipe' });
577
- console.log('BizarHarness: Headroom configured for claude.');
578
- } catch {
579
- console.log('BizarHarness: could not configure Headroom. Run `headroom wrap claude` manually.');
580
- }
581
- }
582
-
583
549
  // Install Semble
584
550
  const semblePresent = await detectSemble();
585
551
  if (!semblePresent) {
@@ -102,9 +102,6 @@ function linuxUnitPath() {
102
102
  function linuxEnvPath() {
103
103
  return join(bizarConfigDir(), 'service.env');
104
104
  }
105
- function linuxHeadroomUnitPath() {
106
- return join(userUnitDir(), 'bizar-headroom.service');
107
- }
108
105
  function darwinPlistPath() {
109
106
  return join(launchAgentsDir(), 'com.bizar.dashboard.plist');
110
107
  }
@@ -178,161 +175,6 @@ function linuxEnvFileContent({ projectRoot }) {
178
175
  return buildServiceEnvFile({ bizarHome: bizarConfigDir(), repoPath: projectRoot });
179
176
  }
180
177
 
181
- // ── Headroom companion service (Linux) ─────────────────────────────────────────
182
-
183
- function linuxHeadroomUnitContent() {
184
- const envPath = join(bizarConfigDir(), 'service.env');
185
- return [
186
- '[Unit]',
187
- 'Description=Bizar Headroom context-compression proxy',
188
- 'After=bizar.service',
189
- 'Wants=bizar.service',
190
- '',
191
- '[Service]',
192
- 'Type=simple',
193
- `EnvironmentFile=${envPath}`,
194
- 'ExecStart=/bin/sh -c "command -v headroom >/dev/null 2>&1 && headroom proxy cline || exit 0"',
195
- 'Restart=on-failure',
196
- 'RestartSec=10',
197
- 'TimeoutStopSec=15',
198
- '',
199
- '[Install]',
200
- 'WantedBy=default.target',
201
- '',
202
- ].join('\n');
203
- }
204
-
205
- function darwinHeadroomPlistPath() {
206
- return join(launchAgentsDir(), 'com.bizar.headroom.plist');
207
- }
208
-
209
- function darwinHeadroomPlistContent({ nodePath, projectRoot }) {
210
- const envContent = buildServiceEnvFile({ bizarHome: bizarConfigDir(), repoPath: projectRoot });
211
- const envVars = parseEnvFile(envContent);
212
- const envXml = envVars
213
- .map(([k, v]) => ` <key>${xmlEscape(k)}</key>\n <string>${xmlEscape(v)}</string>`)
214
- .join('\n');
215
- return [
216
- '<?xml version="1.0" encoding="UTF-8"?>',
217
- '<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">',
218
- '<plist version="1.0">',
219
- '<dict>',
220
- ' <key>Label</key>',
221
- ' <string>com.bizar.headroom</string>',
222
- ' <key>ProgramArguments</key>',
223
- ' <array>',
224
- ` <string>${xmlEscape(nodePath)}</string>`,
225
- ' <string>-c</string>',
226
- ' <string>command -v headroom >/dev/null 2>&1 && headroom proxy cline || exit 0</string>',
227
- ' </array>',
228
- ' <key>EnvironmentVariables</key>',
229
- ' <dict>',
230
- envXml,
231
- ' </dict>',
232
- ' <key>KeepAlive</key>',
233
- ' <true/>',
234
- ' <key>RunAtLoad</key>',
235
- ' <true/>',
236
- ' <key>StandardOutPath</key>',
237
- ` <string>${xmlEscape(join(bizarConfigDir(), 'headroom.log'))}</string>`,
238
- ' <key>StandardErrorPath</key>',
239
- ` <string>${xmlEscape(join(bizarConfigDir(), 'headroom.log'))}</string>`,
240
- ' <key>WorkingDirectory</key>',
241
- ` <string>${xmlEscape(projectRoot)}</string>`,
242
- '</dict>',
243
- '</plist>',
244
- '',
245
- ].join('\n');
246
- }
247
-
248
- function installHeadroomServiceLinux({ force = false }) {
249
- // Honour BIZAR_HEADROOM_AUTOSTART from process.env (already merged by buildServiceEnvFile)
250
- const headroomAutoStart = process.env.BIZAR_HEADROOM_AUTOSTART !== '0';
251
- if (!headroomAutoStart) {
252
- return ok({ note: 'headroom autostart disabled via BIZAR_HEADROOM_AUTOSTART=0' });
253
- }
254
- if (!existsSync(userUnitDir())) {
255
- try { mkdirSync(userUnitDir(), { recursive: true }); } catch (err) {
256
- return fail(`cannot create ${userUnitDir()}: ${err.message}`);
257
- }
258
- }
259
- const unitPath = linuxHeadroomUnitPath();
260
- const want = linuxHeadroomUnitContent();
261
- if (!force && existsSync(unitPath)) {
262
- const have = readFileSync(unitPath, 'utf8').trim() + '\n';
263
- if (have === want.trim() + '\n') {
264
- return ok({ alreadyInstalled: true, unitPath, note: 'headroom unit already matches' });
265
- }
266
- }
267
- try {
268
- writeFileSync(unitPath, want, { encoding: 'utf8', mode: 0o644 });
269
- } catch (err) {
270
- return fail(`write ${unitPath}: ${err.message}`);
271
- }
272
- runCmd('systemctl', ['--user', 'daemon-reload']);
273
- const r = runCmd('systemctl', ['--user', 'enable', '--now', 'bizar-headroom.service']);
274
- if (r.error || (r.status !== 0 && r.status !== null)) {
275
- return fail(`headroom service enable failed: ${r.stderr || r.error?.message || `exit ${r.status}`}`, { unitPath });
276
- }
277
- return ok({ unitPath, note: 'headroom companion service installed and started' });
278
- }
279
-
280
- function uninstallHeadroomServiceLinux() {
281
- const unitPath = linuxHeadroomUnitPath();
282
- if (!existsSync(unitPath)) {
283
- return ok({ unitPath: null, note: 'no headroom systemd unit installed' });
284
- }
285
- runCmd('systemctl', ['--user', 'disable', '--now', 'bizar-headroom.service']);
286
- try { unlinkSync(unitPath); } catch { /* ignore */ }
287
- runCmd('systemctl', ['--user', 'daemon-reload']);
288
- return ok({ unitPath: null, note: 'headroom systemd unit removed' });
289
- }
290
-
291
- function installHeadroomServiceDarwin({ nodePath, projectRoot, force = false }) {
292
- const headroomAutoStart = process.env.BIZAR_HEADROOM_AUTOSTART !== '0';
293
- if (!headroomAutoStart) {
294
- return ok({ note: 'headroom autostart disabled via BIZAR_HEADROOM_AUTOSTART=0' });
295
- }
296
- const dir = launchAgentsDir();
297
- if (!existsSync(dir)) {
298
- try { mkdirSync(dir, { recursive: true }); } catch (err) {
299
- return fail(`cannot create ${dir}: ${err.message}`);
300
- }
301
- }
302
- const plistPath = darwinHeadroomPlistPath();
303
- const want = darwinHeadroomPlistContent({ nodePath, projectRoot });
304
- if (!force && existsSync(plistPath)) {
305
- const have = readFileSync(plistPath, 'utf8').trim() + '\n';
306
- if (have === want.trim() + '\n') {
307
- const lst = runCmd('launchctl', ['list']);
308
- if (lst.status === 0 && /com\.bizar\.headroom/.test(lst.stdout)) {
309
- return ok({ alreadyInstalled: true, unitPath: plistPath, note: 'headroom plist matches and is loaded' });
310
- }
311
- }
312
- }
313
- try {
314
- writeFileSync(plistPath, want, { encoding: 'utf8', mode: 0o644 });
315
- try { chmodSync(plistPath, 0o644); } catch { /* best-effort */ }
316
- } catch (err) {
317
- return fail(`write ${plistPath}: ${err.message}`);
318
- }
319
- runCmd('launchctl', ['unload', plistPath]);
320
- const load = runCmd('launchctl', ['load', '-w', plistPath]);
321
- if (load.error || (load.status !== 0 && load.status !== null)) {
322
- return fail(`launchctl load failed for headroom: ${load.stderr || load.error?.message || `exit ${load.status}`}`, { unitPath: plistPath });
323
- }
324
- return ok({ unitPath: plistPath, note: 'headroom companion plist installed and loaded' });
325
- }
326
-
327
- function uninstallHeadroomServiceDarwin() {
328
- const plistPath = darwinHeadroomPlistPath();
329
- if (!existsSync(plistPath)) {
330
- return ok({ unitPath: null, note: 'no headroom launchd plist installed' });
331
- }
332
- runCmd('launchctl', ['unload', plistPath]);
333
- try { unlinkSync(plistPath); } catch { /* ignore */ }
334
- return ok({ unitPath: null, note: 'headroom launchd plist removed' });
335
- }
336
178
 
337
179
  function installServiceLinux({ nodePath, projectRoot, force = false }) {
338
180
  if (!existsSync(userUnitDir())) {
@@ -393,13 +235,6 @@ function installServiceLinux({ nodePath, projectRoot, force = false }) {
393
235
  return fail(`systemctl --user enable --now failed: ${r.stderr || r.error?.message || `exit ${r.status}`}`, { unitPath });
394
236
  }
395
237
 
396
- // Also install headroom companion service (non-fatal if it fails)
397
- const hr = installHeadroomServiceLinux({ force });
398
- if (!hr.ok) {
399
- // Non-fatal: headroom is optional
400
- console.log(` ${hr.error || 'headroom companion install failed'}`);
401
- }
402
-
403
238
  return ok({
404
239
  unitPath,
405
240
  note: 'systemd user unit installed and started (or already running)',
@@ -562,12 +397,6 @@ function installServiceDarwin({ nodePath, projectRoot, force = false }) {
562
397
  return fail(`launchctl load failed: ${load.stderr || load.error?.message || `exit ${load.status}`}`, { unitPath: plistPath });
563
398
  }
564
399
 
565
- // Also install headroom companion service (non-fatal if it fails)
566
- const hr = installHeadroomServiceDarwin({ nodePath, projectRoot, force });
567
- if (!hr.ok) {
568
- console.log(` ${hr.error || 'headroom companion install failed'}`);
569
- }
570
-
571
400
  return ok({ unitPath: plistPath, note: 'plist installed and loaded' });
572
401
  }
573
402
 
@@ -755,30 +584,9 @@ export function uninstallService() {
755
584
  else if (PLATFORM === 'darwin') result = uninstallServiceDarwin();
756
585
  else if (PLATFORM === 'win32') result = uninstallServiceWindows();
757
586
  else return fail(`unsupported platform: ${PLATFORM}`);
758
- // Also uninstall headroom companion
759
- if (PLATFORM === 'linux') uninstallHeadroomServiceLinux();
760
- if (PLATFORM === 'darwin') uninstallHeadroomServiceDarwin();
761
587
  return result;
762
588
  }
763
589
 
764
- /**
765
- * Install the headroom companion service only (does NOT install the
766
- * main dashboard service). Idempotent. Safe to re-run.
767
- */
768
- export function installHeadroomService(opts = {}) {
769
- const nodePath = resolveNodePath(opts.nodePath);
770
- const projectRoot = resolveRepoRoot(opts.projectRoot);
771
- if (PLATFORM === 'linux') return installHeadroomServiceLinux({ force: !!opts.force });
772
- if (PLATFORM === 'darwin') return installHeadroomServiceDarwin({ nodePath, projectRoot, force: !!opts.force });
773
- return ok({ note: `headroom companion not supported on ${PLATFORM}` });
774
- }
775
-
776
- export function uninstallHeadroomService() {
777
- if (PLATFORM === 'linux') return uninstallHeadroomServiceLinux();
778
- if (PLATFORM === 'darwin') return uninstallHeadroomServiceDarwin();
779
- return ok({ note: `headroom companion not supported on ${PLATFORM}` });
780
- }
781
-
782
590
  /**
783
591
  * v5.x — Restart the service (issue #7).
784
592
  *