@polderlabs/bizar 10.2.0 → 10.3.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 (230) hide show
  1. package/README.md +31 -8
  2. package/bizar-dash/CONTROL_SURFACES.md +0 -1
  3. package/bizar-dash/dist/assets/{ActivityFeed-JjmOY2AQ.js → ActivityFeed-xXiUCZLB.js} +1 -1
  4. package/bizar-dash/dist/assets/{ActivityFeed-JjmOY2AQ.js.map → ActivityFeed-xXiUCZLB.js.map} +1 -1
  5. package/bizar-dash/dist/assets/{ActivityView-BIIMvGWo.js → ActivityView-nOYhCp3h.js} +1 -1
  6. package/bizar-dash/dist/assets/{ActivityView-BIIMvGWo.js.map → ActivityView-nOYhCp3h.js.map} +1 -1
  7. package/bizar-dash/dist/assets/{AdminView-DRidJtkq.js → AdminView-Coi4V3sq.js} +1 -1
  8. package/bizar-dash/dist/assets/{AdminView-DRidJtkq.js.map → AdminView-Coi4V3sq.js.map} +1 -1
  9. package/bizar-dash/dist/assets/{AgentActivity-79l4SBMC.js → AgentActivity-nEri4lbx.js} +1 -1
  10. package/bizar-dash/dist/assets/{AgentActivity-79l4SBMC.js.map → AgentActivity-nEri4lbx.js.map} +1 -1
  11. package/bizar-dash/dist/assets/{AgentsView-0vT4uPSc.js → AgentsView-ByiIJ0ej.js} +3 -3
  12. package/bizar-dash/dist/assets/{AgentsView-0vT4uPSc.js.map → AgentsView-ByiIJ0ej.js.map} +1 -1
  13. package/bizar-dash/dist/assets/{Alert-CG5q_s75.js → Alert-Dg_Vwxh5.js} +1 -1
  14. package/bizar-dash/dist/assets/{Alert-CG5q_s75.js.map → Alert-Dg_Vwxh5.js.map} +1 -1
  15. package/bizar-dash/dist/assets/{ArtifactsView-DM8ZmpR9.js → ArtifactsView-CGclRNnz.js} +1 -1
  16. package/bizar-dash/dist/assets/{ArtifactsView-DM8ZmpR9.js.map → ArtifactsView-CGclRNnz.js.map} +1 -1
  17. package/bizar-dash/dist/assets/{AuthView-BveN94MC.js → AuthView-utVm6M3D.js} +1 -1
  18. package/bizar-dash/dist/assets/{AuthView-BveN94MC.js.map → AuthView-utVm6M3D.js.map} +1 -1
  19. package/bizar-dash/dist/assets/{Avatar-ulUPIYTd.js → Avatar-CXDZdKy4.js} +1 -1
  20. package/bizar-dash/dist/assets/{Avatar-ulUPIYTd.js.map → Avatar-CXDZdKy4.js.map} +1 -1
  21. package/bizar-dash/dist/assets/{BackgroundJobsView-BWErhqFo.js → BackgroundJobsView-j603pz6o.js} +1 -1
  22. package/bizar-dash/dist/assets/{BackgroundJobsView-BWErhqFo.js.map → BackgroundJobsView-j603pz6o.js.map} +1 -1
  23. package/bizar-dash/dist/assets/{BackupView-CnBjzG9N.js → BackupView-DgvnntTE.js} +1 -1
  24. package/bizar-dash/dist/assets/{BackupView-CnBjzG9N.js.map → BackupView-DgvnntTE.js.map} +1 -1
  25. package/bizar-dash/dist/assets/{Card-B0imhxMk.js → Card-D9019JOD.js} +1 -1
  26. package/bizar-dash/dist/assets/{Card-B0imhxMk.js.map → Card-D9019JOD.js.map} +1 -1
  27. package/bizar-dash/dist/assets/{ChatView-D6zGytzx.js → ChatView-C0cTgj5d.js} +1 -1
  28. package/bizar-dash/dist/assets/{ChatView-D6zGytzx.js.map → ChatView-C0cTgj5d.js.map} +1 -1
  29. package/bizar-dash/dist/assets/{Chip-wwZSGwLE.js → Chip-DQtalZ4y.js} +1 -1
  30. package/bizar-dash/dist/assets/{Chip-wwZSGwLE.js.map → Chip-DQtalZ4y.js.map} +1 -1
  31. package/bizar-dash/dist/assets/{ClaudeSessionsView-DK1sOLhi.js → ClaudeSessionsView-H3Bqjo6b.js} +1 -1
  32. package/bizar-dash/dist/assets/{ClaudeSessionsView-DK1sOLhi.js.map → ClaudeSessionsView-H3Bqjo6b.js.map} +1 -1
  33. package/bizar-dash/dist/assets/{ClipboardView-CZ2lYPr0.js → ClipboardView-BAguaKbx.js} +1 -1
  34. package/bizar-dash/dist/assets/{ClipboardView-CZ2lYPr0.js.map → ClipboardView-BAguaKbx.js.map} +1 -1
  35. package/bizar-dash/dist/assets/{ConfigView-D-zT9eNA.js → ConfigView-DWHJgoe8.js} +1 -1
  36. package/bizar-dash/dist/assets/{ConfigView-D-zT9eNA.js.map → ConfigView-DWHJgoe8.js.map} +1 -1
  37. package/bizar-dash/dist/assets/{DiagnosticsView-BocV68Lb.js → DiagnosticsView-oCT624hk.js} +1 -1
  38. package/bizar-dash/dist/assets/{DiagnosticsView-BocV68Lb.js.map → DiagnosticsView-oCT624hk.js.map} +1 -1
  39. package/bizar-dash/dist/assets/{DialogsView-BVjPI5x7.js → DialogsView-CqHNals_.js} +1 -1
  40. package/bizar-dash/dist/assets/{DialogsView-BVjPI5x7.js.map → DialogsView-CqHNals_.js.map} +1 -1
  41. package/bizar-dash/dist/assets/{DoctorView-84gJcZwM.js → DoctorView-6kfQq_Mx.js} +1 -1
  42. package/bizar-dash/dist/assets/{DoctorView-84gJcZwM.js.map → DoctorView-6kfQq_Mx.js.map} +1 -1
  43. package/bizar-dash/dist/assets/{EmptyState-BjgVOrcO.js → EmptyState-DLmtBX_6.js} +1 -1
  44. package/bizar-dash/dist/assets/{EmptyState-BjgVOrcO.js.map → EmptyState-DLmtBX_6.js.map} +1 -1
  45. package/bizar-dash/dist/assets/{EnvVarsView-BJ2TEzF7.js → EnvVarsView-DySOXlP1.js} +2 -2
  46. package/bizar-dash/dist/assets/{EnvVarsView-BJ2TEzF7.js.map → EnvVarsView-DySOXlP1.js.map} +1 -1
  47. package/bizar-dash/dist/assets/{ErrorState-BE3WBFqF.js → ErrorState-Bump8diE.js} +1 -1
  48. package/bizar-dash/dist/assets/{ErrorState-BE3WBFqF.js.map → ErrorState-Bump8diE.js.map} +1 -1
  49. package/bizar-dash/dist/assets/{EvalView-BJJ2P-kK.js → EvalView-FnZ5d93z.js} +1 -1
  50. package/bizar-dash/dist/assets/{EvalView-BJJ2P-kK.js.map → EvalView-FnZ5d93z.js.map} +1 -1
  51. package/bizar-dash/dist/assets/{GoalsView-pwROHApi.js → GoalsView-C4m1WnVv.js} +1 -1
  52. package/bizar-dash/dist/assets/{GoalsView-pwROHApi.js.map → GoalsView-C4m1WnVv.js.map} +1 -1
  53. package/bizar-dash/dist/assets/{Grid-qcvbhx6e.js → Grid-dEnoGGws.js} +1 -1
  54. package/bizar-dash/dist/assets/{Grid-qcvbhx6e.js.map → Grid-dEnoGGws.js.map} +1 -1
  55. package/bizar-dash/dist/assets/{HistoryView-C7SSOLJA.js → HistoryView-xdRybjZ2.js} +1 -1
  56. package/bizar-dash/dist/assets/{HistoryView-C7SSOLJA.js.map → HistoryView-xdRybjZ2.js.map} +1 -1
  57. package/bizar-dash/dist/assets/{Input-Bgzxf_Hu.js → Input-BSa3lh_-.js} +1 -1
  58. package/bizar-dash/dist/assets/{Input-Bgzxf_Hu.js.map → Input-BSa3lh_-.js.map} +1 -1
  59. package/bizar-dash/dist/assets/{LibrariesView-CbFFksox.js → LibrariesView-1zR04Eci.js} +1 -1
  60. package/bizar-dash/dist/assets/{LibrariesView-CbFFksox.js.map → LibrariesView-1zR04Eci.js.map} +1 -1
  61. package/bizar-dash/dist/assets/{LightRAGView-BqDrJbRq.js → LightRAGView-PubmA9oL.js} +1 -1
  62. package/bizar-dash/dist/assets/{LightRAGView-BqDrJbRq.js.map → LightRAGView-PubmA9oL.js.map} +1 -1
  63. package/bizar-dash/dist/assets/{ListHeader-TjPJrUfY.js → ListHeader-Ak9WJd39.js} +1 -1
  64. package/bizar-dash/dist/assets/{ListHeader-TjPJrUfY.js.map → ListHeader-Ak9WJd39.js.map} +1 -1
  65. package/bizar-dash/dist/assets/{MemoryView-BlTeHLhX.js → MemoryView-DBGpuETw.js} +1 -1
  66. package/bizar-dash/dist/assets/{MemoryView-BlTeHLhX.js.map → MemoryView-DBGpuETw.js.map} +1 -1
  67. package/bizar-dash/dist/assets/MiscView-DufqBHkX.js +1 -0
  68. package/bizar-dash/dist/assets/{MiscView-B8QY82Pm.js.map → MiscView-DufqBHkX.js.map} +1 -1
  69. package/bizar-dash/dist/assets/{ModsView-CvW1OWts.js → ModsView-DcX6eVU2.js} +2 -2
  70. package/bizar-dash/dist/assets/{ModsView-CvW1OWts.js.map → ModsView-DcX6eVU2.js.map} +1 -1
  71. package/bizar-dash/dist/assets/{NotificationsView-CsBt5U7x.js → NotificationsView-B8IhHRQC.js} +1 -1
  72. package/bizar-dash/dist/assets/{NotificationsView-CsBt5U7x.js.map → NotificationsView-B8IhHRQC.js.map} +1 -1
  73. package/bizar-dash/dist/assets/ObsidianView-DEuk65zS.js +1 -0
  74. package/bizar-dash/dist/assets/{ObsidianView-BCTejEj2.js.map → ObsidianView-DEuk65zS.js.map} +1 -1
  75. package/bizar-dash/dist/assets/{OverviewView-BsuPxwnB.js → OverviewView-CTI2spTd.js} +1 -1
  76. package/bizar-dash/dist/assets/{OverviewView-BsuPxwnB.js.map → OverviewView-CTI2spTd.js.map} +1 -1
  77. package/bizar-dash/dist/assets/{ProgressBar-DlZTETEn.js → ProgressBar-D3lkz42E.js} +1 -1
  78. package/bizar-dash/dist/assets/{ProgressBar-DlZTETEn.js.map → ProgressBar-D3lkz42E.js.map} +1 -1
  79. package/bizar-dash/dist/assets/{ProjectsView-Soxtmpet.js → ProjectsView-Du0LzE7A.js} +1 -1
  80. package/bizar-dash/dist/assets/{ProjectsView-Soxtmpet.js.map → ProjectsView-Du0LzE7A.js.map} +1 -1
  81. package/bizar-dash/dist/assets/{ProvidersView-DaCEV9pM.js → ProvidersView-5bCgXwBo.js} +1 -1
  82. package/bizar-dash/dist/assets/{ProvidersView-DaCEV9pM.js.map → ProvidersView-5bCgXwBo.js.map} +1 -1
  83. package/bizar-dash/dist/assets/{SchedulesView-DY2ByBj_.js → SchedulesView-DFHdIz5P.js} +1 -1
  84. package/bizar-dash/dist/assets/{SchedulesView-DY2ByBj_.js.map → SchedulesView-DFHdIz5P.js.map} +1 -1
  85. package/bizar-dash/dist/assets/{Select-Dbd88_n8.js → Select-C8EJj4NM.js} +1 -1
  86. package/bizar-dash/dist/assets/{Select-Dbd88_n8.js.map → Select-C8EJj4NM.js.map} +1 -1
  87. package/bizar-dash/dist/assets/{SettingsRow-CLMNd434.js → SettingsRow-BdOOmYMD.js} +1 -1
  88. package/bizar-dash/dist/assets/{SettingsRow-CLMNd434.js.map → SettingsRow-BdOOmYMD.js.map} +1 -1
  89. package/bizar-dash/dist/assets/{SettingsView-b24oFq9x.js → SettingsView-CqwQ6Knv.js} +1 -1
  90. package/bizar-dash/dist/assets/{SettingsView-b24oFq9x.js.map → SettingsView-CqwQ6Knv.js.map} +1 -1
  91. package/bizar-dash/dist/assets/{Sheet-DnDid58j.js → Sheet-Cztsvgse.js} +1 -1
  92. package/bizar-dash/dist/assets/{Sheet-DnDid58j.js.map → Sheet-Cztsvgse.js.map} +1 -1
  93. package/bizar-dash/dist/assets/{Slider-BJCvKI1I.js → Slider-BexNfF6K.js} +1 -1
  94. package/bizar-dash/dist/assets/{Slider-BJCvKI1I.js.map → Slider-BexNfF6K.js.map} +1 -1
  95. package/bizar-dash/dist/assets/{Sparkline-ktqQLdyb.js → Sparkline-CLZBtvsN.js} +1 -1
  96. package/bizar-dash/dist/assets/{Sparkline-ktqQLdyb.js.map → Sparkline-CLZBtvsN.js.map} +1 -1
  97. package/bizar-dash/dist/assets/{Switch-CwXfsDii.js → Switch-B1tiRwNK.js} +1 -1
  98. package/bizar-dash/dist/assets/{Switch-CwXfsDii.js.map → Switch-B1tiRwNK.js.map} +1 -1
  99. package/bizar-dash/dist/assets/{TasksView-BHmpzFCf.js → TasksView-CT0fPlos.js} +1 -1
  100. package/bizar-dash/dist/assets/{TasksView-BHmpzFCf.js.map → TasksView-CT0fPlos.js.map} +1 -1
  101. package/bizar-dash/dist/assets/{Textarea-BzIAwSlp.js → Textarea-D_TPpVMy.js} +1 -1
  102. package/bizar-dash/dist/assets/{Textarea-BzIAwSlp.js.map → Textarea-D_TPpVMy.js.map} +1 -1
  103. package/bizar-dash/dist/assets/{UpdateView-CSmX9NN0.js → UpdateView-tD2q2OhW.js} +1 -1
  104. package/bizar-dash/dist/assets/{UpdateView-CSmX9NN0.js.map → UpdateView-tD2q2OhW.js.map} +1 -1
  105. package/bizar-dash/dist/assets/{UsageView-COyr_Gfi.js → UsageView-B4BuAFKA.js} +1 -1
  106. package/bizar-dash/dist/assets/{UsageView-COyr_Gfi.js.map → UsageView-B4BuAFKA.js.map} +1 -1
  107. package/bizar-dash/dist/assets/{ViewHeader-BzYZ3m-e.js → ViewHeader-V_SzbUpw.js} +1 -1
  108. package/bizar-dash/dist/assets/{ViewHeader-BzYZ3m-e.js.map → ViewHeader-V_SzbUpw.js.map} +1 -1
  109. package/bizar-dash/dist/assets/{VoiceView-D33_xG5t.js → VoiceView-D3vb5OM2.js} +1 -1
  110. package/bizar-dash/dist/assets/{VoiceView-D33_xG5t.js.map → VoiceView-D3vb5OM2.js.map} +1 -1
  111. package/bizar-dash/dist/assets/{brain-CM-Vls8r.js → brain-BmfWcitQ.js} +1 -1
  112. package/bizar-dash/dist/assets/{brain-CM-Vls8r.js.map → brain-BmfWcitQ.js.map} +1 -1
  113. package/bizar-dash/dist/assets/{calendar-C0lgZk69.js → calendar-VntJUzFB.js} +1 -1
  114. package/bizar-dash/dist/assets/{calendar-C0lgZk69.js.map → calendar-VntJUzFB.js.map} +1 -1
  115. package/bizar-dash/dist/assets/{circle-Bx_hQEBC.js → circle-KrQQySeK.js} +1 -1
  116. package/bizar-dash/dist/assets/{circle-Bx_hQEBC.js.map → circle-KrQQySeK.js.map} +1 -1
  117. package/bizar-dash/dist/assets/{circle-alert-DHvsqpw5.js → circle-alert-CQ9MLygI.js} +1 -1
  118. package/bizar-dash/dist/assets/{circle-alert-DHvsqpw5.js.map → circle-alert-CQ9MLygI.js.map} +1 -1
  119. package/bizar-dash/dist/assets/{circle-check-Bx8wmXR9.js → circle-check-COtVgsWw.js} +1 -1
  120. package/bizar-dash/dist/assets/{circle-check-Bx8wmXR9.js.map → circle-check-COtVgsWw.js.map} +1 -1
  121. package/bizar-dash/dist/assets/{clock-CejGoecX.js → clock-C0GlM4qp.js} +1 -1
  122. package/bizar-dash/dist/assets/{clock-CejGoecX.js.map → clock-C0GlM4qp.js.map} +1 -1
  123. package/bizar-dash/dist/assets/{download-4cEUWue1.js → download-CW4DmtRe.js} +1 -1
  124. package/bizar-dash/dist/assets/{download-4cEUWue1.js.map → download-CW4DmtRe.js.map} +1 -1
  125. package/bizar-dash/dist/assets/{external-link-0NqUhI4i.js → external-link-CAOnh_DH.js} +1 -1
  126. package/bizar-dash/dist/assets/{external-link-0NqUhI4i.js.map → external-link-CAOnh_DH.js.map} +1 -1
  127. package/bizar-dash/dist/assets/{file-text-yEMkrSoZ.js → file-text-CS1jB_oV.js} +1 -1
  128. package/bizar-dash/dist/assets/{file-text-yEMkrSoZ.js.map → file-text-CS1jB_oV.js.map} +1 -1
  129. package/bizar-dash/dist/assets/{filter-BXt60zAS.js → filter-DyQbml3L.js} +1 -1
  130. package/bizar-dash/dist/assets/{filter-BXt60zAS.js.map → filter-DyQbml3L.js.map} +1 -1
  131. package/bizar-dash/dist/assets/{git-pull-request-BjG5lNtR.js → git-pull-request-Co6gYfba.js} +1 -1
  132. package/bizar-dash/dist/assets/{git-pull-request-BjG5lNtR.js.map → git-pull-request-Co6gYfba.js.map} +1 -1
  133. package/bizar-dash/dist/assets/{main-CokHAXWM.js → main-CyAIirBB.js} +28 -33
  134. package/bizar-dash/dist/assets/main-CyAIirBB.js.map +1 -0
  135. package/bizar-dash/dist/assets/network-CDn43Gsj.js +6 -0
  136. package/bizar-dash/dist/assets/network-CDn43Gsj.js.map +1 -0
  137. package/bizar-dash/dist/assets/{pause-CAmulU0F.js → pause-CKYjSTGX.js} +1 -1
  138. package/bizar-dash/dist/assets/{pause-CAmulU0F.js.map → pause-CKYjSTGX.js.map} +1 -1
  139. package/bizar-dash/dist/assets/{pencil-eq5IqBmU.js → pencil-BUJ2DpWs.js} +1 -1
  140. package/bizar-dash/dist/assets/{pencil-eq5IqBmU.js.map → pencil-BUJ2DpWs.js.map} +1 -1
  141. package/bizar-dash/dist/assets/{play-BoLrrcBA.js → play-CGxZWqtW.js} +1 -1
  142. package/bizar-dash/dist/assets/{play-BoLrrcBA.js.map → play-CGxZWqtW.js.map} +1 -1
  143. package/bizar-dash/dist/assets/{plug-DBrVM9lK.js → plug-CQYGgGSy.js} +1 -1
  144. package/bizar-dash/dist/assets/{plug-DBrVM9lK.js.map → plug-CQYGgGSy.js.map} +1 -1
  145. package/bizar-dash/dist/assets/{plus-DENm0hqV.js → plus-fFxt-8z5.js} +1 -1
  146. package/bizar-dash/dist/assets/{plus-DENm0hqV.js.map → plus-fFxt-8z5.js.map} +1 -1
  147. package/bizar-dash/dist/assets/{power-DLjXF7zE.js → power-Cjgy2KsI.js} +1 -1
  148. package/bizar-dash/dist/assets/{power-DLjXF7zE.js.map → power-Cjgy2KsI.js.map} +1 -1
  149. package/bizar-dash/dist/assets/{power-off-D47cOnG_.js → power-off-B81hLRah.js} +1 -1
  150. package/bizar-dash/dist/assets/{power-off-D47cOnG_.js.map → power-off-B81hLRah.js.map} +1 -1
  151. package/bizar-dash/dist/assets/{refresh-ccw-DNrXX9gB.js → refresh-ccw-BCXx86xp.js} +1 -1
  152. package/bizar-dash/dist/assets/{refresh-ccw-DNrXX9gB.js.map → refresh-ccw-BCXx86xp.js.map} +1 -1
  153. package/bizar-dash/dist/assets/{refresh-cw-CoAHDpeS.js → refresh-cw-COTg1nZo.js} +1 -1
  154. package/bizar-dash/dist/assets/{refresh-cw-CoAHDpeS.js.map → refresh-cw-COTg1nZo.js.map} +1 -1
  155. package/bizar-dash/dist/assets/{rotate-ccw-ObX5awaG.js → rotate-ccw-BZrEVc0Z.js} +1 -1
  156. package/bizar-dash/dist/assets/{rotate-ccw-ObX5awaG.js.map → rotate-ccw-BZrEVc0Z.js.map} +1 -1
  157. package/bizar-dash/dist/assets/{rotate-cw-xpPJw9LP.js → rotate-cw-CsTtaLV2.js} +1 -1
  158. package/bizar-dash/dist/assets/{rotate-cw-xpPJw9LP.js.map → rotate-cw-CsTtaLV2.js.map} +1 -1
  159. package/bizar-dash/dist/assets/{save-D1iKiJJl.js → save-DtMTge1F.js} +1 -1
  160. package/bizar-dash/dist/assets/{save-D1iKiJJl.js.map → save-DtMTge1F.js.map} +1 -1
  161. package/bizar-dash/dist/assets/{send-BRcAhZUm.js → send-DyBhyk8t.js} +1 -1
  162. package/bizar-dash/dist/assets/{send-BRcAhZUm.js.map → send-DyBhyk8t.js.map} +1 -1
  163. package/bizar-dash/dist/assets/{shield-alert-C6vEcK-g.js → shield-alert-BPGJlRF8.js} +1 -1
  164. package/bizar-dash/dist/assets/{shield-alert-C6vEcK-g.js.map → shield-alert-BPGJlRF8.js.map} +1 -1
  165. package/bizar-dash/dist/assets/{trash-2-DZDjEnNh.js → trash-2-2NsyTU8c.js} +1 -1
  166. package/bizar-dash/dist/assets/{trash-2-DZDjEnNh.js.map → trash-2-2NsyTU8c.js.map} +1 -1
  167. package/bizar-dash/dist/assets/{trending-up-DMj-AJVf.js → trending-up-BXwP23VK.js} +1 -1
  168. package/bizar-dash/dist/assets/{trending-up-DMj-AJVf.js.map → trending-up-BXwP23VK.js.map} +1 -1
  169. package/bizar-dash/dist/assets/{triangle-alert-_2xe_tl4.js → triangle-alert-DFmQ_RXN.js} +1 -1
  170. package/bizar-dash/dist/assets/{triangle-alert-_2xe_tl4.js.map → triangle-alert-DFmQ_RXN.js.map} +1 -1
  171. package/bizar-dash/dist/assets/{upload-DdDljAeV.js → upload-Cj-HYRYV.js} +1 -1
  172. package/bizar-dash/dist/assets/{upload-DdDljAeV.js.map → upload-Cj-HYRYV.js.map} +1 -1
  173. package/bizar-dash/dist/assets/{zap-mHsgh0FP.js → zap-BaOiybcl.js} +1 -1
  174. package/bizar-dash/dist/assets/{zap-mHsgh0FP.js.map → zap-BaOiybcl.js.map} +1 -1
  175. package/bizar-dash/dist/index.html +1 -1
  176. package/bizar-dash/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +1 -1
  177. package/bizar-dash/src/server/routes/update.mjs +48 -21
  178. package/bizar-dash/src/web/v8/App.tsx +0 -4
  179. package/bizar-dash/src/web/v8/__tests__/new-views.test.tsx +0 -17
  180. package/bizar-dash/src/web/v8/shell/Sidebar.tsx +0 -1
  181. package/bizar-dash/src/web/v8/views/Router.tsx +0 -5
  182. package/bizar-dash/tests/_update-test-helpers.mjs +13 -0
  183. package/bizar-dash/tests/update-check.test.mjs +18 -13
  184. package/bizar-dash/tests/update-packages.test.mjs +154 -0
  185. package/bizar-dash/tests/update-run.test.mjs +17 -80
  186. package/cli/banner.mjs +1 -1
  187. package/cli/bin.mjs +8 -1
  188. package/cli/bootstrap.mjs +1 -1
  189. package/cli/commands/claude-cmd.mjs +1 -1
  190. package/cli/commands/deploy/docker.mjs +0 -3
  191. package/cli/install/banner.mjs +67 -0
  192. package/cli/install/banner.test.mjs +39 -0
  193. package/cli/install/index.mjs +32 -0
  194. package/cli/install/index.test.mjs +61 -0
  195. package/cli/install/paths.mjs +80 -0
  196. package/cli/install/paths.test.mjs +77 -0
  197. package/cli/install/plugin.mjs +161 -0
  198. package/cli/install/postinstall.mjs +111 -0
  199. package/cli/install.mjs +13 -600
  200. package/cli/migrate.mjs +157 -0
  201. package/cli/migrate.test.mjs +85 -0
  202. package/cli/provision.mjs +615 -1918
  203. package/cli/provision.test.mjs +1 -1
  204. package/cli/service-controller.test.mjs +0 -1
  205. package/cli/service-env.mjs +0 -1
  206. package/cli/utils.mjs +0 -1
  207. package/install.sh +54 -466
  208. package/package.json +1 -1
  209. package/packages/sdk/package.json +1 -1
  210. package/scripts/install-curl.sh +17 -0
  211. package/bizar-dash/dist/assets/HeadroomView-D1UiTYbt.js +0 -11
  212. package/bizar-dash/dist/assets/HeadroomView-D1UiTYbt.js.map +0 -1
  213. package/bizar-dash/dist/assets/MiscView-B8QY82Pm.js +0 -1
  214. package/bizar-dash/dist/assets/ObsidianView-BCTejEj2.js +0 -1
  215. package/bizar-dash/dist/assets/main-CokHAXWM.js.map +0 -1
  216. package/bizar-dash/skills/headroom/SKILL.md +0 -94
  217. package/bizar-dash/src/server/headroom.mjs +0 -649
  218. package/bizar-dash/src/server/routes/headroom.mjs +0 -126
  219. package/bizar-dash/src/web/v8/views/Headroom/HeadroomView.tsx +0 -201
  220. package/bizar-dash/tests/graphify-mod-spawn.node.test.mjs +0 -90
  221. package/bizar-dash/tests/headroom-install.test.mjs +0 -173
  222. package/bizar-dash/tests/headroom-settings.test.mjs +0 -126
  223. package/bizar-dash/tests/headroom-status.test.mjs +0 -117
  224. package/bizar-dash/tests/v7-archive/mobile-overview.test.tsx +0 -214
  225. package/bizar-dash/tests/v7-archive/mobile-settings.test.tsx +0 -181
  226. package/bizar-dash/tests/v7-archive/navigation/CommandPalette.test.tsx +0 -105
  227. package/bizar-dash/tests/v7-archive/settings-nav.test.tsx +0 -128
  228. package/bizar-dash/tests/v7-archive/views/Overview.test.tsx +0 -413
  229. package/cli/commands/headroom.mjs +0 -204
  230. package/cli/provision-claude.mjs +0 -1176
package/cli/install.mjs CHANGED
@@ -1,606 +1,19 @@
1
- import chalk from 'chalk';
2
- import { existsSync, lstatSync, rmSync } from 'node:fs';
3
- import { join, dirname } from 'node:path';
4
- import { fileURLToPath } from 'node:url';
5
-
6
- // ── ESM `__dirname` polyfill ────────────────────────────────────────────────
7
- // `__dirname` is a CommonJS global. ESM modules don't have it. We define it
8
- // at module scope so all functions in this file can use it without each
9
- // having to recreate the polyfill. (v4.2.3 — previously only `runInstaller`
10
- // had it, which caused the legacy `promptAndInstallOptional` bootstrap
11
- // to crash with `ERR_AMBIGUOUS_MODULE_SYNTAX`. v6.1.0 — that helper
12
- // has been removed; `__dirname` is still used by `runPostInstall` for
13
- // the same reason.)
14
- const __dirname = dirname(fileURLToPath(import.meta.url));
15
-
16
- import { showBanner, showPantheon, sectionHeading } from './banner.mjs';
17
- import { promptComponents, promptInstallMode, promptAgents, promptSkillPacks, promptApiKeys, promptConfirmInstall, promptRestartCline } from './prompts.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
-
21
- const AGENT_FILES = [
22
- 'odin.md', 'vor.md', 'frigg.md', 'quick.md',
23
- 'mimir.md', 'heimdall.md', 'hermod.md', 'thor.md', 'baldr.md',
24
- 'tyr.md', 'vidarr.md', 'forseti.md',
25
- 'semble-search.md',
26
- ];
27
-
28
- /**
29
- * Install the Bizar MCP server from this package's own `plugins/bizar/`
30
- * directory into `~/.claude/plugins/bizar/`.
31
- *
32
- * v6.3.0 — Bizar is Claude Code-native. The plugin entry-point still
33
- * ships at `plugins/bizar/` as a back-compat shim that re-exports the
34
- * SDK; the actual MCP server lives in `packages/sdk/src/mcp/bin.ts`.
35
- *
36
- * v4.0.0 consolidated everything into one npm package, so the plugin
37
- * source ships with `@polderlabs/bizar` itself — no separate
38
- * `@polderlabs/bizar-plugin` package, no git clone, no fresh checkout.
39
- *
40
- * Symlink guard (v3.12.2): if the dest is a symlink (e.g. created by
41
- * `bizar dev-link`), do NOT overwrite it. The copy below would otherwise
42
- * dereference the symlink and silently turn it back into a real directory,
43
- * breaking the dev workflow. Pass `{ force: true }` to override (after
44
- * confirming the user really wants the deployed copy back).
45
- *
46
- * node_modules copy: the plugin imports `@polderlabs/bizar-sdk`, a
47
- * workspace-internal package not on the public registry. After copying
48
- * the plugin files, this function ALSO copies the source's `node_modules/`
49
- * to the deployed `node_modules/` so Bun can resolve the import when the
50
- * plugin is loaded from `~/.claude/plugins/bizar/`. Without this, the
51
- * plugin silently fails to load.
52
- *
53
- * Pass `{ silent: true }` to suppress the warning prints; the function
54
- * still returns `true` if the dest is already in the desired state.
55
- *
56
- * Pass `{ sourceDir: '/path/to/fake' }` (test seam) to drive the function
57
- * against a controlled filesystem without touching the real install.
58
- *
59
- * Returns `true` if the plugin was installed (or already in place),
60
- * `false` otherwise. Never throws.
61
- */
62
- export async function installPluginFromGlobal(opts = {}) {
63
- const { mkdir, readdir, copyFile } = await import('node:fs/promises');
64
- const { join } = await import('node:path');
65
-
66
- // ── Symlink guard ───────────────────────────────────────────────────────────
67
- // If dest is a symlink (created by `bizar dev-link`), don't overwrite it.
68
- // A plain copy would dereference the symlink and silently break the
69
- // dev workflow. Print a hint unless silent, or honour an explicit
70
- // --force from the caller.
71
- const destDir = join(claudeConfigDir(), 'plugins', 'bizar');
72
- let destIsSymlink = false;
73
- try {
74
- destIsSymlink = lstatSync(destDir).isSymbolicLink();
75
- } catch {
76
- // doesn't exist yet — fine
77
- }
78
-
79
- if (destIsSymlink) {
80
- if (opts.silent) {
81
- // Called from dev-unlink, which has already removed the symlink.
82
- // If we somehow still see one here, treat as "already restored".
83
- return true;
84
- }
85
- console.log(
86
- chalk.yellow(
87
- ' ⚠ ~/.claude/plugins/bizar is a dev symlink — skipping copy.',
88
- ),
89
- );
90
- console.log(
91
- chalk.dim(
92
- ' Run `bizar dev-unlink` to restore the deployed copy, or pass --force to overwrite.',
93
- ),
94
- );
95
- if (!opts.force) return false;
96
- rmSync(destDir, { force: true });
97
- }
98
-
99
- // ── Resolve source path ─────────────────────────────────────────────────────
100
- // v4.4.5 — the plugin ships inside this package at <pkg>/plugins/bizar/.
101
- // No separate npm package, no git clone.
102
- let pluginPath;
103
- if (opts.sourceDir) {
104
- pluginPath = opts.sourceDir;
105
- } else {
106
- // __dirname is `<pkg>/cli/`, so ../plugins/bizar is the canonical source.
107
- pluginPath = join(__dirname, '..', 'plugins', 'bizar');
108
- }
109
- if (!existsSync(pluginPath)) {
110
- console.log(chalk.red(` ✗ Plugin source not found at ${pluginPath}`));
111
- console.log(chalk.dim(' This package appears to be missing plugins/bizar/. Reinstall:'));
112
- console.log(chalk.dim(' npm install -g @polderlabs/bizar --force'));
113
- return false;
114
- }
115
-
116
- // ── Auto-build: if src exists but dist/ does not, run the tsc build ──
117
- // v8.0.2 — fresh npm installs ship only `plugins/bizar/index.ts` and no
118
- // compiled entry. The plugin loader previously bailed here with the
119
- // misleading "Plugin source not found" message even though the directory
120
- // was present; the real blocker was the missing compiled output. Try to
121
- // build once before giving up. Best-effort: build failures keep the old
122
- // error path (still false return) so the user gets a clear next step.
123
- const distEntry = join(pluginPath, 'dist', 'index.js');
124
- if (!existsSync(distEntry)) {
125
- try {
126
- const { buildPlugin } = await import('./provision-claude.mjs');
127
- const buildRes = await buildPlugin();
128
- if (buildRes.ok && !buildRes.skipped) {
129
- console.log(chalk.dim(` auto-built plugin (${buildRes.message})`));
130
- } else if (!buildRes.ok) {
131
- console.log(chalk.yellow(` ⚠ Plugin auto-build failed: ${buildRes.message}`));
132
- console.log(chalk.dim(' Run `bizar install` from a checkout, or:'));
133
- console.log(chalk.dim(' npx tsc -p plugins/bizar/tsconfig.json'));
134
- return false;
135
- }
136
- } catch (err) {
137
- console.log(chalk.yellow(` ⚠ Plugin auto-build threw: ${err.message}`));
138
- return false;
139
- }
140
- }
141
-
142
- await mkdir(destDir, { recursive: true });
143
-
144
- async function copyRecursive(srcDir, dstDir) {
145
- const entries = await readdir(srcDir, { withFileTypes: true });
146
- for (const entry of entries) {
147
- const src = join(srcDir, entry.name);
148
- const dst = join(dstDir, entry.name);
149
- if (entry.isDirectory()) {
150
- if (entry.name === 'node_modules' || entry.name === 'dist') continue;
151
- await mkdir(dst, { recursive: true });
152
- await copyRecursive(src, dst);
153
- } else {
154
- if (entry.name === '.DS_Store' || entry.name.endsWith('.log')) continue;
155
- await copyFile(src, dst);
156
- }
157
- }
158
- }
159
-
160
- try {
161
- await copyRecursive(pluginPath, destDir);
162
- console.log(chalk.green(` ✓ Bizar plugin installed from global package`));
163
- console.log(chalk.dim(` ${pluginPath} → ${destDir}`));
164
- } catch (err) {
165
- console.log(chalk.yellow(` ⚠ Failed to copy Bizar plugin: ${err.message}`));
166
- return false;
167
- }
168
-
169
- // ── node_modules copy ───────────────────────────────────────────────────────
170
- // The plugin imports `@polderlabs/bizar-sdk`, a workspace-internal package
171
- // not on the public registry. The npm source bundles the SDK into its
172
- // own `node_modules/`, so loading from `$(npm root -g)/...` resolves
173
- // correctly. The deployed copy at `~/.config/cline/plugins/bizar/`
174
- // has no `node_modules`, so Bun can't resolve the import — without this
175
- // copy the plugin silently fails to load. This used to be papered over
176
- // by a manual `cp -r $(npm root -g)/.../node_modules ~/.config/...` step
177
- // that got wiped every time `bizar update` re-ran the outer copy. Doing
178
- // it here makes the fix durable across updates.
179
- //
180
- // Semantics: mirror `cp -r` — merge into dest if it exists as a real
181
- // directory (overwrite same-named files, don't delete extras), error
182
- // if dest is a symlink (don't dereference through it). Idempotent —
183
- // running twice never breaks; files whose contents already match are
184
- // rewritten byte-identically.
185
- try {
186
- const srcNmDir = join(pluginPath, 'node_modules');
187
- if (existsSync(srcNmDir)) {
188
- const dstNmDir = join(destDir, 'node_modules');
189
- let dstIsSymlink = false;
190
- try {
191
- dstIsSymlink = lstatSync(dstNmDir).isSymbolicLink();
192
- } catch {
193
- // doesn't exist — fine, we'll create it below
194
- }
195
- if (dstIsSymlink) {
196
- console.log(
197
- chalk.yellow(
198
- ` ⚠ ${dstNmDir} is a symlink — refusing to copy node_modules (remove manually).`,
199
- ),
200
- );
201
- } else {
202
- // Top-level entry count (matches `npm ls --depth=0`) — gives the
203
- // user a sense of what was bundled. e.g. "copied node_modules
204
- // (25 packages) to deployed plugin".
205
- const srcEntries = await readdir(srcNmDir, { withFileTypes: true });
206
- await mkdir(dstNmDir, { recursive: true });
207
- async function copyNodeModules(srcDir, dstDir) {
208
- const entries = await readdir(srcDir, { withFileTypes: true });
209
- for (const entry of entries) {
210
- const src = join(srcDir, entry.name);
211
- const dst = join(dstDir, entry.name);
212
- if (entry.isDirectory()) {
213
- await mkdir(dst, { recursive: true });
214
- await copyNodeModules(src, dst);
215
- } else {
216
- await copyFile(src, dst);
217
- }
218
- }
219
- }
220
- await copyNodeModules(srcNmDir, dstNmDir);
221
- console.log(
222
- chalk.green(
223
- ` ✓ copied node_modules (${srcEntries.length} packages) to deployed plugin`,
224
- ),
225
- );
226
- }
227
- }
228
-
229
- // Wire runtime deps (`zod` plus `@anthropic-ai/claude-agent-sdk`)
230
- // into the deployed plugin's `node_modules/`.
231
- // Bun's module resolver walks up from the plugin entry point
232
- // looking for `node_modules/`, and without entries there the
233
- // plugin throws `Cannot find module 'zod'` at startup.
234
- //
235
- // The resolution logic lives in `cli/plugin-runtime-deps.mjs` and
236
- // is shared with the modern provisioner (`cli/provision.mjs`). It
237
- // searches the Bizar npm pkg's own `node_modules/`, then the
238
- // `cline` npm pkg's `node_modules/`, then the dev source tree.
239
- // Symlinks are preferred; recursive copy is the fallback.
240
- //
241
- // Only needed for the in-source plugin (main = "./index.ts"). The
242
- // published npm package has main = "./dist/index.js" (bundled, no
243
- // runtime resolution needed). Skip silently if the plugin uses the
244
- // bundled entry point.
245
- let pluginMain = null;
246
- try {
247
- const pkgPath = join(destDir, 'package.json');
248
- const pkg = JSON.parse(
249
- await import('node:fs/promises').then((fs) => fs.readFile(pkgPath, 'utf8')),
250
- );
251
- pluginMain = pkg.main;
252
- } catch {
253
- // missing or unreadable — fall through; we'll skip the wiring.
254
- }
255
- const needsWiring =
256
- typeof pluginMain === 'string' && pluginMain.endsWith('.ts');
257
- if (needsWiring) {
258
- try {
259
- const { wirePluginRuntimeDeps } = await import(
260
- './plugin-runtime-deps.mjs'
261
- );
262
- await wirePluginRuntimeDeps(destDir);
263
- } catch (err) {
264
- console.log(
265
- chalk.dim(
266
- ` ℹ Could not auto-wire runtime deps: ${err.message} ` +
267
- `(run \`bizar doctor\` to diagnose)`,
268
- ),
269
- );
270
- }
271
- }
272
- } catch (err) {
273
- console.log(chalk.yellow(` ⚠ Failed to copy node_modules: ${err.message}`));
274
- }
275
-
276
- return true;
277
- }
278
-
279
1
  /**
280
- * runInstaller — v4.4.7 thin wrapper around the unified provisioner.
2
+ * cli/install.mjs
281
3
  *
282
- * `bizar install` and `bizar update` are now the SAME code path with
283
- * different `mode` flags. Everything (deps, plugin copy, cline.json
284
- * patching, service registration, agent files, skills, doctor) is
285
- * owned by `cli/provision.mjs:runProvision`. This file just parses the
286
- * flags and forwards.
4
+ * v10.0.0 Back-compat shim. The real implementation lives under cli/install/.
5
+ * Re-exports the public API so external callers (npm postinstall hook,
6
+ * bizarre install/update CLI commands) keep working without modification.
287
7
  *
288
- * Backward-compatible the public exports (`runInstaller`,
289
- * `runPostInstall`, `installPluginFromGlobal`) still exist so that any
290
- * external callers (including the postinstall npm hook) keep working.
291
- * New code should call `runProvision({ mode: 'install' })` directly.
8
+ * New code should import from the submodules directly:
9
+ * cli/install/index.mjs — runInstaller()
10
+ * cli/install/plugin.mjs — installPluginFromGlobal()
11
+ * cli/install/postinstall.mjs runPostInstall()
292
12
  */
293
- export async function runInstaller(opts = {}) {
294
- const { runProvision } = await import('./provision.mjs');
295
- return runProvision({ ...opts, mode: 'install' });
296
- }
297
-
298
- // ── Interactive prompts for optional packages ─────────────────────────────────
299
-
300
- import { execSync } from 'node:child_process';
301
- import { createInterface } from 'node:readline/promises';
302
- import { stdin, stdout } from 'node:process';
303
-
304
- async function promptYesNo(question, defaultYes = true) {
305
- // If not a TTY (CI, automated install), skip the prompt
306
- if (!stdin.isTTY || !stdout.isTTY) {
307
- return false;
308
- }
309
-
310
- const rl = createInterface({ input: stdin, output: stdout });
311
- try {
312
- const hint = defaultYes ? '[Y/n]' : '[y/N]';
313
- const answer = (await rl.question(` ${question} ${hint}: `)).trim().toLowerCase();
314
- rl.close();
315
-
316
- if (answer === '') return defaultYes;
317
- if (['y', 'yes'].includes(answer)) return true;
318
- if (['n', 'no'].includes(answer)) return false;
319
- return defaultYes;
320
- } catch {
321
- rl.close();
322
- return false;
323
- }
324
- }
325
-
326
- async function isPackageInstalled(name) {
327
- try {
328
- const globalRoot = execSync('npm root -g', { encoding: 'utf8' }).trim();
329
- return existsSync(join(globalRoot, ...name.split('/'), 'package.json'));
330
- } catch {
331
- return false;
332
- }
333
- }
334
-
335
- async function promptGraphifyInstall() {
336
- const { spawnSync, execSync } = await import('node:child_process');
337
-
338
- console.log();
339
- sectionHeading('Knowledge Graph (graphify)');
340
-
341
- // 1. Detect graphify already installed. Windows users typically have
342
- // `py` on PATH (the Python launcher) rather than `python3`, so probe
343
- // the right binary per platform. A failed probe just means we will
344
- // prompt to install below.
345
- const pythonBin = process.platform === 'win32' ? 'py' : 'python3';
346
- const detect = spawnSync(pythonBin, ['-c', 'import graphify; print(graphify.__version__)'], {
347
- cwd: process.cwd(),
348
- encoding: 'utf8',
349
- timeout: 5000,
350
- });
351
- const graphifyInstalled = detect.status === 0 && (detect.stdout || '').trim().length > 0;
352
-
353
- if (graphifyInstalled) {
354
- console.log(chalk.green(' graphify already installed — skipping.'));
355
- return;
356
- }
357
-
358
- // Install graphify via pip as a fallback when uv is unavailable or the
359
- // user declined the uv-based install. On Windows, `pip` is often not
360
- // on PATH, so we invoke it as a `py -m pip` module instead. Returns
361
- // the spawn result so the caller can log success/failure.
362
- const installGraphifyWithPip = () => {
363
- if (process.platform === 'win32') {
364
- return spawnSync('py', ['-m', 'pip', 'install', 'graphifyy'], {
365
- stdio: 'inherit',
366
- timeout: 120000,
367
- });
368
- }
369
- return spawnSync('pip', ['install', 'graphifyy'], {
370
- stdio: 'inherit',
371
- timeout: 120000,
372
- });
373
- };
374
- const pipManualHint = process.platform === 'win32'
375
- ? 'py -m pip install graphifyy'
376
- : 'pip install graphifyy';
377
-
378
- // 2. Non-interactive: print hint and exit
379
- if (!stdin.isTTY || !stdout.isTTY) {
380
- console.log(chalk.dim(' graphify not detected. Install later with:'));
381
- console.log(chalk.dim(' uv tool install graphifyy # recommended'));
382
- console.log(chalk.dim(' pip install graphifyy'));
383
- console.log(chalk.dim(' pipx install graphifyy'));
384
- console.log(chalk.dim(' Then run `bizar graph build` to populate .bizar/graph/.'));
385
- return;
386
- }
387
-
388
- // 3. Interactive: show options with uv first
389
- console.log(chalk.dim(' graphify not detected. graphify powers per-project knowledge graphs (bizar graph build).'));
390
- console.log(chalk.dim(' Install with one of:'));
391
- console.log(chalk.dim(' uv tool install graphifyy # recommended'));
392
- console.log(chalk.dim(' pip install graphifyy'));
393
- console.log(chalk.dim(' pipx install graphifyy'));
394
-
395
- const hasUv = await detectUv();
396
-
397
- if (hasUv) {
398
- // 3a. uv is available — ask to install via uv directly
399
- const rl = createInterface({ input: stdin, output: stdout });
400
- try {
401
- const answer = (await rl.question(' Install graphify now via uv? [Y/n]: ')).trim().toLowerCase();
402
- rl.close();
403
-
404
- if (answer === '' || answer.startsWith('y')) {
405
- console.log(' Installing graphify via uv...');
406
- try {
407
- execSync('uv tool install graphifyy', { stdio: 'inherit', timeout: 120000 });
408
- console.log(chalk.green(' graphify installed. Run `bizar graph build` to populate .bizar/graph/.'));
409
- } catch (err) {
410
- console.log(chalk.red(` uv tool install failed: ${err.message}`));
411
- console.log(chalk.dim(' Install manually: uv tool install graphifyy'));
412
- }
413
- } else {
414
- console.log(chalk.dim(' Skipped. Install manually with one of the commands above when ready.'));
415
- }
416
- } catch {
417
- rl.close();
418
- console.log(chalk.dim(' Skipped.'));
419
- }
420
- } else {
421
- // 3b. uv not available — ask if we should install uv first
422
- console.log();
423
- console.log(chalk.dim(' uv not detected. uv is recommended on Arch/Fedora/macOS (avoids PEP 668).'));
424
-
425
- const rl = createInterface({ input: stdin, output: stdout });
426
- try {
427
- const answer = (await rl.question(' Install uv first, then graphify? [Y/n]: ')).trim().toLowerCase();
428
- rl.close();
429
-
430
- if (answer === '' || answer.startsWith('y')) {
431
- if (process.platform === 'win32') {
432
- console.log(chalk.yellow(' Automatic uv install not supported on Windows.'));
433
- console.log(chalk.dim(' Install from https://docs.astral.sh/uv then run: uv tool install graphifyy'));
434
- return;
435
- }
436
-
437
- console.log(' Installing uv...');
438
- try {
439
- if (process.platform === 'win32') {
440
- // Windows: use the official PowerShell installer
441
- execSync('powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"', { stdio: 'inherit', timeout: 60000 });
442
- } else {
443
- execSync('curl -LsSf https://astral.sh/uv/install.sh | sh', { stdio: 'inherit', timeout: 60000 });
444
- }
445
- } catch (err) {
446
- console.log(chalk.red(` uv install failed: ${err.message}`));
447
- console.log(chalk.dim(' Install manually from https://docs.astral.sh/uv'));
448
- // Fall back to pip
449
- const rl2 = createInterface({ input: stdin, output: stdout });
450
- try {
451
- const pipAnswer = (await rl2.question(' Install graphify via pip instead? [Y/n]: ')).trim().toLowerCase();
452
- rl2.close();
453
- if (pipAnswer === '' || pipAnswer.startsWith('y')) {
454
- console.log(' Installing graphify via pip...');
455
- const result = installGraphifyWithPip();
456
- if (result.status === 0) {
457
- console.log(chalk.green(' graphify installed. Run `bizar graph build` to populate .bizar/graph/.'));
458
- } else {
459
- console.log(chalk.red(` pip install failed (exit ${result.status}).`));
460
- console.log(chalk.dim(` Install manually: ${pipManualHint}`));
461
- }
462
- } else {
463
- console.log(chalk.dim(' Skipped.'));
464
- }
465
- } catch {
466
- rl2.close();
467
- console.log(chalk.dim(' Skipped.'));
468
- }
469
- return;
470
- }
471
-
472
- console.log(' Installing graphify via uv...');
473
- try {
474
- execSync('uv tool install graphifyy', { stdio: 'inherit', timeout: 120000 });
475
- console.log(chalk.green(' graphify installed. Run `bizar graph build` to populate .bizar/graph/.'));
476
- } catch (err) {
477
- console.log(chalk.red(` uv tool install failed: ${err.message}`));
478
- console.log(chalk.dim(' Install manually: uv tool install graphifyy'));
479
- }
480
- } else {
481
- // User declined uv — fall back to pip
482
- const rl2 = createInterface({ input: stdin, output: stdout });
483
- try {
484
- const pipAnswer = (await rl2.question(' Install graphify via pip instead? [Y/n]: ')).trim().toLowerCase();
485
- rl2.close();
486
- if (pipAnswer === '' || pipAnswer.startsWith('y')) {
487
- console.log(' Installing graphify via pip...');
488
- const result = installGraphifyWithPip();
489
- if (result.status === 0) {
490
- console.log(chalk.green(' graphify installed. Run `bizar graph build` to populate .bizar/graph/.'));
491
- } else {
492
- console.log(chalk.red(` pip install failed (exit ${result.status}).`));
493
- console.log(chalk.dim(` Install manually: ${pipManualHint}`));
494
- }
495
- } else {
496
- console.log(chalk.dim(' Skipped.'));
497
- }
498
- } catch {
499
- rl2.close();
500
- console.log(chalk.dim(' Skipped.'));
501
- }
502
- }
503
- } catch {
504
- rl.close();
505
- console.log(chalk.dim(' Skipped.'));
506
- }
507
- }
508
- }
509
-
510
- export async function runPostInstall() {
511
- // v6.3.0 — Bizar is Claude Code-native. `cli/provision-claude.mjs:runProvision`
512
- // covers the install/update/validate surface and is the primary path
513
- // used by `bizar install` and `bizar update`. This `runPostInstall`
514
- // is a thin Claude Code-native bootstrap that:
515
- // - copies `config/settings.json` template on first install
516
- // - installs agents into `~/.claude/agents/`
517
- // - probes for semble / skills-cli
518
- // - installs Headroom via pip or npm
519
- const { mkdirSync, copyFileSync, existsSync } = await import('node:fs');
520
- const { execSync } = await import('node:child_process');
521
-
522
- const dest = join(claudeConfigDir(), 'settings.json');
523
- const templateSrc = repoPath('config', 'settings.json');
524
- if (!existsSync(dest)) {
525
- if (existsSync(templateSrc)) {
526
- mkdirSync(claudeConfigDir(), { recursive: true });
527
- copyFileSync(templateSrc, dest);
528
- console.log(' ✓ settings.json bootstrapped from package template');
529
- }
530
- }
531
-
532
- const env = await detectClaude();
533
- if (!env.exists) {
534
- mkdirSync(claudeConfigDir(), { recursive: true });
535
- console.log(`BizarHarness: created ${claudeConfigDir()}/`);
536
- }
537
-
538
- mkdirSync(claudeAgentsDir(), { recursive: true });
539
-
540
- for (const file of AGENT_FILES) {
541
- const src = repoPath('config', 'agents', file);
542
- const dest = join(claudeAgentsDir(), file);
543
- if (!existsSync(dest)) {
544
- copyFileSync(src, dest);
545
- }
546
- }
547
- console.log('BizarHarness: agents installed.');
548
-
549
- // Install Semble
550
- const semblePresent = await detectSemble();
551
- if (!semblePresent) {
552
- console.log('BizarHarness: installing Semble (code search)...');
553
- try {
554
- const hasUv = await detectUv();
555
- if (!hasUv) {
556
- if (process.platform === 'win32') {
557
- // Windows: use the official PowerShell installer
558
- execSync(
559
- 'powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"',
560
- { stdio: 'pipe', timeout: 60000 },
561
- );
562
- } else {
563
- execSync(
564
- 'curl -LsSf https://astral.sh/uv/install.sh | sh',
565
- { stdio: 'pipe', timeout: 60000 },
566
- );
567
- }
568
- }
569
- execSync('uv tool install "semble[mcp]"', { stdio: 'pipe', timeout: 60000 });
570
- console.log('BizarHarness: Semble installed.');
571
- } catch {
572
- console.log('BizarHarness: Semble install failed. Run `uv tool install "semble[mcp]"` manually.');
573
- }
574
- } else {
575
- console.log('BizarHarness: Semble ready.');
576
- }
577
-
578
- // Install Skills CLI
579
- const skillsPresent = await detectSkillsCli();
580
- if (!skillsPresent) {
581
- console.log('BizarHarness: installing Skills CLI...');
582
- try {
583
- execSync('npm install -g skills', { stdio: 'pipe', timeout: 30000 });
584
- console.log('BizarHarness: Skills CLI installed.');
585
- } catch {
586
- console.log('BizarHarness: Skills CLI install failed. Run `npm install -g skills` manually.');
587
- }
588
- } else {
589
- console.log('BizarHarness: Skills CLI ready.');
590
- }
591
-
592
- // Install core skill pack
593
- console.log('BizarHarness: installing core skills (find-skills, skill-creator)...');
594
- try {
595
- execSync('skills add vercel-labs/skills --all -y', { stdio: 'pipe', timeout: 60000 });
596
- console.log('BizarHarness: core skills installed.');
597
- } catch {
598
- console.log('BizarHarness: core skill install skipped — run `skills add vercel-labs/skills --all -y` manually.');
599
- }
600
13
 
601
- // Try to install the Bizar plugin from the separate global npm package.
602
- // Non-fatal: prints a hint if the package isn't installed globally yet.
603
- await installPluginFromGlobal();
14
+ export { runInstaller } from './install/index.mjs';
15
+ export { installPluginFromGlobal } from './install/plugin.mjs';
16
+ export { runPostInstall } from './install/postinstall.mjs';
604
17
 
605
- console.log('Run `bizar` for interactive setup.');
606
- }
18
+ // Default export for backward compatibility with `import install from './install.mjs'`
19
+ export { runInstaller as default } from './install/index.mjs';