vibe64 0.1.39 → 0.1.41

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 (262) hide show
  1. package/bin/run.js +1955 -1855
  2. package/bin/server.js +136 -112
  3. package/bin/upgrade-state.js +5514 -5343
  4. package/dist/assets/GithubBrowserTabs-YvIe2BdE.js +1 -0
  5. package/dist/assets/LocalDatabaseServer-BWAvRlUl.css +1 -0
  6. package/dist/assets/LocalDatabaseServer-CVsGChHh.js +2 -0
  7. package/dist/assets/StudioErrorNotice-C_jbvp9V.js +1 -0
  8. package/dist/assets/VAlert-gwuhYlYb.js +1 -0
  9. package/dist/assets/VAutocomplete-D7Vk5wq_.js +1 -0
  10. package/dist/assets/VAvatar-DvRBcmqv.js +1 -0
  11. package/dist/assets/VBtn-BhVEwXLX.js +1 -0
  12. package/dist/assets/VCard-C3Hx769y.js +1 -0
  13. package/dist/assets/VCheckbox-DyCGSN0H.js +1 -0
  14. package/dist/assets/VCheckboxBtn-DCyuVH7W.css +1 -0
  15. package/dist/assets/VCheckboxBtn-DYcQU2Pn.js +1 -0
  16. package/dist/assets/VChip-VVdtjfq-.js +1 -0
  17. package/dist/assets/VDialog-CQDhjRiV.js +1 -0
  18. package/dist/assets/VDivider-Dq25WsKu.js +1 -0
  19. package/dist/assets/VExpansionPanels-C1y-myl5.js +1 -0
  20. package/dist/assets/VMenu-CDcBLYWR.js +1 -0
  21. package/dist/assets/VOverlay-Cp4rFk6g.js +1 -0
  22. package/dist/assets/VRadioGroup-CAjNZwF7.js +1 -0
  23. package/dist/assets/VRow-BskP28jR.js +1 -0
  24. package/dist/assets/VSelect-D3oLvCcB.js +2 -0
  25. package/dist/assets/VSheet-DxYEFfnM.js +1 -0
  26. package/dist/assets/VSkeletonLoader-Cync3lZZ.js +1 -0
  27. package/dist/assets/VSpacer-CgWOWvBh.js +1 -0
  28. package/dist/assets/VSwitch-BxGuGypi.js +1 -0
  29. package/dist/assets/VTextField-C0b_0cSa.js +1 -0
  30. package/dist/assets/VTextField-F6unyhrS.css +1 -0
  31. package/dist/assets/VTextarea-B7sZd1JY.js +1 -0
  32. package/dist/assets/{Vibe64AsyncModuleState-Do9EqX3S.js → Vibe64AsyncModuleState-syuPcpGx.js} +1 -1
  33. package/dist/assets/{Vibe64AuthSettingsButton-M44SSmZ9.css → Vibe64AuthSettingsButton-D2lltUhi.css} +1 -1
  34. package/dist/assets/Vibe64AuthSettingsButton-DLdfT68V.js +5 -0
  35. package/dist/assets/Vibe64CopyCommand-CYiZcy0d.js +1 -0
  36. package/dist/assets/Vibe64CopyCommand-ClbQLYZi.css +1 -0
  37. package/dist/assets/{Vibe64DashboardBackButton-BH_8j_VR.js → Vibe64DashboardBackButton-Go_MJuIK.js} +1 -1
  38. package/dist/assets/{Vibe64DashboardPageHeader-BXQR00HK.js → Vibe64DashboardPageHeader-BMrdRph6.js} +1 -1
  39. package/dist/assets/Vibe64DashboardPageHeader-CdlzsyKQ.css +1 -0
  40. package/dist/assets/Vibe64DashboardShell-DMPz6fIx.js +1 -0
  41. package/dist/assets/{Vibe64DatabaseWorkspace-CEml9BWn.js → Vibe64DatabaseWorkspace-BCEIOlSg.js} +3 -3
  42. package/dist/assets/{Vibe64DatabaseWorkspace-DPDMxhAW.css → Vibe64DatabaseWorkspace-DePBDUMy.css} +1 -1
  43. package/dist/assets/{Vibe64OutputControls-Co5YzwcK.css → Vibe64OutputControls-CeBzZPUT.css} +1 -1
  44. package/dist/assets/Vibe64OutputControls-DMoqL0VD.js +8 -0
  45. package/dist/assets/{Vibe64RepositoryWorkspace-obZFXkoG.js → Vibe64RepositoryWorkspace-BdwRwbxp.js} +2 -2
  46. package/dist/assets/{Vibe64RepositoryWorkspace-Agyt4O-V.css → Vibe64RepositoryWorkspace-Bw9W691N.css} +1 -1
  47. package/dist/assets/{Vibe64SessionFiles-CQzs6fee.js → Vibe64SessionFiles-ChJWUOqm.js} +4 -4
  48. package/dist/assets/Vibe64SessionFiles-DsPb8hOe.css +1 -0
  49. package/dist/assets/{Vibe64TemporaryAiFixAction-BiuIE9mC.js → Vibe64TemporaryAiFixAction-CIePbdW8.js} +1 -1
  50. package/dist/assets/{Vibe64UiStoryboardView-BhKRpL0N.js → Vibe64UiStoryboardView-Bp9STItF.js} +1 -1
  51. package/dist/assets/{Vibe64UnavailableSessions-Ca5nC7KH.js → Vibe64UnavailableSessions-JBgHzM-j.js} +1 -1
  52. package/dist/assets/{_sessionId_-CKkGH3Rx.js → _sessionId_-Bw0KfJeR.js} +1 -1
  53. package/dist/assets/{_sessionTool_-1V-z6Pbp.js → _sessionTool_-BV1AwpUx.js} +1 -1
  54. package/dist/assets/_slug_-CAmuBm-M.css +1 -0
  55. package/dist/assets/_slug_-q9prK_gX.js +25 -0
  56. package/dist/assets/{access-WlhPvPgy.js → access-C05Nkq6r.js} +1 -1
  57. package/dist/assets/app-D1CGY9Xm.js +1 -0
  58. package/dist/assets/assistantRouting-DeE8jvtE.js +3 -0
  59. package/dist/assets/{changes-CHJjrZAc.js → changes-D17XpgGz.js} +1 -1
  60. package/dist/assets/client-BxGiylrJ.js +2 -0
  61. package/dist/assets/client-C8jwAMY9.css +1 -0
  62. package/dist/assets/{conversation-B90ERX9h.js → conversation-DZW4-Wck.js} +2 -2
  63. package/dist/assets/{conversation-vxJGwmtW.css → conversation-TK6EmDk4.css} +1 -1
  64. package/dist/assets/{createSimpleFunctional-CZTGuNuR.js → createSimpleFunctional-zlXZooQW.js} +1 -1
  65. package/dist/assets/{dashboard-CuutW8iv.js → dashboard-BXXgeQ0Q.js} +1 -1
  66. package/dist/assets/definitions-SNvFDEFS.js +1 -0
  67. package/dist/assets/dialog-transition-D2vqGksQ.js +1 -0
  68. package/dist/assets/env-B5V1EC4M.css +1 -0
  69. package/dist/assets/env-sXAQqKWk.js +1 -0
  70. package/dist/assets/health-92hh8xXh.css +1 -0
  71. package/dist/assets/health-Cr34pf2p.js +1 -0
  72. package/dist/assets/{history-1_NU8azF.js → history-N1iRZaab.js} +1 -1
  73. package/dist/assets/incoming-Bdqo8z25.css +1 -0
  74. package/dist/assets/incoming-CNwZa_yD.js +2 -0
  75. package/dist/assets/{index-irlMYzLh.css → index-B17d4wpZ.css} +1 -1
  76. package/dist/assets/index-Mxalhei8.js +138 -0
  77. package/dist/assets/{integrations-BMzWQQpa.js → integrations-BmwFvHgZ.js} +10 -10
  78. package/dist/assets/integrations-Co8WvCiD.css +1 -0
  79. package/dist/assets/issues-BbiG7dCV.js +1 -0
  80. package/dist/assets/layout-B2Ap07aa.js +1 -0
  81. package/dist/assets/{lazy-NHSwD9FS.js → lazy-BjyT2XvW.js} +1 -1
  82. package/dist/assets/{learning-Bdi3XRS7.js → learning-CUCuuoHM.js} +1 -1
  83. package/dist/assets/mdi-Bt90Ns76.js +1 -0
  84. package/dist/assets/placement-CQy46H3H.js +1 -0
  85. package/dist/assets/publish-4r_4K5IY.js +3 -0
  86. package/dist/assets/publish-BFTsAMCF.css +1 -0
  87. package/dist/assets/pull-requests-BjwokcU0.css +1 -0
  88. package/dist/assets/pull-requests-DY9jg3cE.js +1 -0
  89. package/dist/assets/{repository-BL_2bgzC.js → repository-DhXdoMP6.js} +1 -1
  90. package/dist/assets/ripple-EFNA8EBu.js +11 -0
  91. package/dist/assets/rolldown-runtime-DBalRfVu.js +1 -0
  92. package/dist/assets/{session-BdhKrcX4.js → session-BGpiZThC.js} +1 -1
  93. package/dist/assets/{settings-1rpuL7eR.js → settings-Cj4u-76p.js} +1 -1
  94. package/dist/assets/settings-D8x4KUqV.css +1 -0
  95. package/dist/assets/shared-DZETtWRH.js +2 -0
  96. package/dist/assets/studioGateApi-BXHVBVEc.js +1 -0
  97. package/dist/assets/studioUrls-DpSS-0z1.js +1 -0
  98. package/dist/assets/useArchivedVibe64Sessions-BXNg8oES.js +1 -0
  99. package/dist/assets/useCommand-nWFczmJy.js +1 -0
  100. package/dist/assets/useEndpointResource-Ds8EDBZ2.js +1 -0
  101. package/dist/assets/useRealtimeEvent-DrOiU8lJ.js +1 -0
  102. package/dist/assets/{useUiFeedback-BPBF_0bp.js → useUiFeedback-CMwE4MLs.js} +1 -1
  103. package/dist/assets/useVibe64ConversationLog-C1xjhFtS.js +1 -0
  104. package/dist/assets/{useVibe64DatabaseTools-4o6S8eXq.js → useVibe64DatabaseTools-H6H-YJQX.js} +1 -1
  105. package/dist/assets/useVibe64ProjectScope-B5ogg6jd.js +1 -0
  106. package/dist/assets/useVibe64SessionData-CnDOFFHb.js +1 -0
  107. package/dist/assets/{useVibe64SessionSelection-BzL1y_Vq.js → useVibe64SessionSelection-J87nJ9p5.js} +1 -1
  108. package/dist/assets/{useVibe64SystemGraph-B4RmsC9Y.js → useVibe64SystemGraph-DbSfrYF8.js} +1 -1
  109. package/dist/assets/{useVibe64Terminal-Cg3idMcy.js → useVibe64Terminal-I7Sf6xMW.js} +1 -1
  110. package/dist/assets/vibe64ProjectScope.local-B06ABkhI.js +1 -0
  111. package/dist/assets/vibe64SavedEnvValues-B_QE9aAj.js +1 -0
  112. package/dist/assets/vibe64SessionFocus-CA-sk8Ri.css +1 -0
  113. package/dist/assets/vibe64SessionFocus-DlN8NwcE.js +1 -0
  114. package/dist/assets/{vibe64SessionInfo-BuBUdL-e.js → vibe64SessionInfo-B0uItVOK.js} +1 -1
  115. package/dist/assets/{vibe64SessionToolDefinitions-BJaJH5LR.js → vibe64SessionToolDefinitions-Dsn8WYmO.js} +1 -1
  116. package/dist/index.html +56 -46
  117. package/docs/colleague-usage/account-profile-and-appearance.md +1 -1
  118. package/docs/colleague-usage/{ai-accounts-and-routing.md → ai-accounts.md} +41 -114
  119. package/docs/colleague-usage/ai-model-setups.md +159 -0
  120. package/docs/colleague-usage/ai-onboarding.md +97 -22
  121. package/docs/colleague-usage/ai-personal-use.md +41 -0
  122. package/docs/colleague-usage/auto-workflow.md +8 -3
  123. package/docs/colleague-usage/codex-context-recovery.md +2 -1
  124. package/docs/colleague-usage/coding-agent-goals.md +7 -4
  125. package/docs/colleague-usage/coding-agents.md +8 -5
  126. package/docs/colleague-usage/colleague-watches.md +15 -4
  127. package/docs/colleague-usage/colleague.md +21 -5
  128. package/docs/colleague-usage/connected-contributions.md +13 -13
  129. package/docs/colleague-usage/connected-projects.md +2 -2
  130. package/docs/colleague-usage/conversation-context.md +1 -1
  131. package/docs/colleague-usage/dashboard-navigation.md +5 -3
  132. package/docs/colleague-usage/development-env.md +21 -4
  133. package/docs/colleague-usage/file-interfaces.md +1 -1
  134. package/docs/colleague-usage/github-work.md +8 -8
  135. package/docs/colleague-usage/health-checks.md +52 -18
  136. package/docs/colleague-usage/incoming-changes.md +3 -3
  137. package/docs/colleague-usage/integrations.md +5 -3
  138. package/docs/colleague-usage/learning-course-catalogue.md +3 -3
  139. package/docs/colleague-usage/learning-environment.md +78 -56
  140. package/docs/colleague-usage/learning-mode-ui.md +31 -19
  141. package/docs/colleague-usage/learning-practice-projects.md +15 -4
  142. package/docs/colleague-usage/learning-teacher-guide.md +10 -4
  143. package/docs/colleague-usage/learning-with-colleague.md +12 -8
  144. package/docs/colleague-usage/lesson-authoring.md +13 -13
  145. package/docs/colleague-usage/lesson-step-bar.md +47 -33
  146. package/docs/colleague-usage/main-chat-approvals.md +150 -0
  147. package/docs/colleague-usage/preview-browser-checks.md +5 -1
  148. package/docs/colleague-usage/preview-starting-application.md +10 -1
  149. package/docs/colleague-usage/project-language-tools.md +16 -2
  150. package/docs/colleague-usage/project-settings.md +1 -1
  151. package/docs/colleague-usage/project-setup.md +17 -7
  152. package/docs/colleague-usage/publishing.md +187 -0
  153. package/docs/colleague-usage/running-vibe64-on-your-computer.md +54 -6
  154. package/docs/colleague-usage/sessions.md +18 -10
  155. package/docs/colleague-usage/set-up-linux.md +254 -0
  156. package/docs/colleague-usage/set-up-macos.md +199 -0
  157. package/docs/colleague-usage/set-up-windows.md +76 -0
  158. package/docs/colleague-usage/starter-apps.md +23 -6
  159. package/docs/colleague-usage/teaching-content.md +2 -2
  160. package/docs/colleague-usage/team-ai-access.md +108 -0
  161. package/docs/colleague-usage/temporary-chats.md +9 -7
  162. package/docs/colleague-usage/workspace-preparation.md +50 -1
  163. package/docs/templates/learn-topic/README.md +3 -3
  164. package/docs/templates/learn-topic/training/lessons/TOPIC-01/lesson.json +2 -1
  165. package/docs/training-content.md +37 -15
  166. package/node_modules/@jskit-ai/assistant-core/package.json +1 -1
  167. package/node_modules/@jskit-ai/assistant-runtime/package.json +1 -1
  168. package/node_modules/@jskit-ai/assistant-voice/package.json +1 -1
  169. package/node_modules/@jskit-ai/connector-google-calendar/package.json +1 -1
  170. package/node_modules/@jskit-ai/connectors-catalog/package.json +1 -1
  171. package/node_modules/@jskit-ai/connectors-catalog/patterns/oauth-connection/PATTERN.md +25 -0
  172. package/node_modules/@jskit-ai/connectors-core/package.json +1 -1
  173. package/node_modules/@jskit-ai/http-runtime/package.json +1 -1
  174. package/node_modules/@jskit-ai/kernel/package.json +1 -1
  175. package/node_modules/@jskit-ai/realtime/package.json +1 -1
  176. package/node_modules/@jskit-ai/resource-core/package.json +1 -1
  177. package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
  178. package/node_modules/@jskit-ai/uploads-runtime/package.json +1 -1
  179. package/node_modules/@local/vibe64-accounts/package.json +2 -1
  180. package/node_modules/@local/vibe64-core/package.json +4 -1
  181. package/node_modules/@local/vibe64-execution/src/host/execHelper.js +82 -81
  182. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +83 -82
  183. package/node_modules/@local/vibe64-genesis/package.json +1 -0
  184. package/node_modules/@local/vibe64-genesis/src/server/agentSpecs.js +118 -68
  185. package/node_modules/@local/vibe64-genesis/src/server/index.js +536 -449
  186. package/node_modules/@local/vibe64-genesis/src/server/packaging.js +105 -0
  187. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +144 -145
  188. package/node_modules/@local/vibe64-packaging/package.json +26 -0
  189. package/node_modules/@local/vibe64-packaging/src/server/packers/capacitor/ShellIcons.java +112 -0
  190. package/node_modules/@local/vibe64-project/package.json +3 -1
  191. package/node_modules/@local/vibe64-publishing/package.json +12 -0
  192. package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +7 -7
  193. package/node_modules/@local/vibe64-runtime/src/shared/assistantRoutingScores.json +25 -22
  194. package/node_modules/@local/vibe64-terminals/package.json +2 -1
  195. package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +1341 -1300
  196. package/node_modules/@local/vibe64-training/package.json +2 -1
  197. package/package.json +19 -15
  198. package/server.bundle.mjs +43109 -41089
  199. package/dist/assets/GithubBrowserTabs-C2NO5l8g.js +0 -1
  200. package/dist/assets/StudioErrorNotice-CSrUw1QV.js +0 -1
  201. package/dist/assets/VAlert-P256xaE0.js +0 -1
  202. package/dist/assets/VAutocomplete-BDb95qJX.js +0 -1
  203. package/dist/assets/VAvatar-DPzqDH4r.js +0 -1
  204. package/dist/assets/VBtn-B2MBK2DL.js +0 -1
  205. package/dist/assets/VCard-mXy0k4aS.js +0 -1
  206. package/dist/assets/VCheckbox-C7A1ZW4D.js +0 -1
  207. package/dist/assets/VChip-CcI-Oo2J.js +0 -1
  208. package/dist/assets/VDialog-Bu3EfKb1.js +0 -1
  209. package/dist/assets/VDivider-BMEqUoAB.js +0 -1
  210. package/dist/assets/VExpansionPanels-Dgjrop0V.js +0 -1
  211. package/dist/assets/VMenu-C_x18lwb.js +0 -1
  212. package/dist/assets/VOverlay-CeMZurIN.js +0 -1
  213. package/dist/assets/VRadioGroup-CUu2-KIP.js +0 -1
  214. package/dist/assets/VRow-Cpw7OHQV.js +0 -1
  215. package/dist/assets/VSelect-DL3HaA5m.js +0 -2
  216. package/dist/assets/VSheet-DZWsu0kL.js +0 -1
  217. package/dist/assets/VSkeletonLoader-CttxM1tw.js +0 -1
  218. package/dist/assets/VSpacer-Dhmsvk4t.js +0 -1
  219. package/dist/assets/VSwitch-BRHeDJkH.js +0 -1
  220. package/dist/assets/VTextField-BR2eZeFT.js +0 -1
  221. package/dist/assets/VTextField-BiatYyd3.css +0 -1
  222. package/dist/assets/VTextarea-DbqamXJd.js +0 -1
  223. package/dist/assets/Vibe64AuthSettingsButton-fY4ZiIFF.js +0 -5
  224. package/dist/assets/Vibe64DashboardPageHeader-Gm1IvlHx.css +0 -1
  225. package/dist/assets/Vibe64DashboardShell-BSq7uXEW.js +0 -1
  226. package/dist/assets/Vibe64OutputControls-_zhGX9ne.js +0 -8
  227. package/dist/assets/Vibe64SessionFiles-Bl8wJ5Sk.css +0 -1
  228. package/dist/assets/_slug_-BclonbST.js +0 -24
  229. package/dist/assets/_slug_-CZ1bxO9C.css +0 -1
  230. package/dist/assets/app-BNP_n_Tt.js +0 -1
  231. package/dist/assets/assistantRouting-D4XpXcEf.js +0 -3
  232. package/dist/assets/client-BWV84wi2.js +0 -2
  233. package/dist/assets/client-DGrP-2AJ.css +0 -1
  234. package/dist/assets/definitions-BrMvu6yV.js +0 -1
  235. package/dist/assets/env-BzRtyO0w.css +0 -1
  236. package/dist/assets/env-D3KQGvRe.js +0 -1
  237. package/dist/assets/health-BJvooRnJ.css +0 -1
  238. package/dist/assets/health-BhoO1d4h.js +0 -1
  239. package/dist/assets/incoming-DWDrmxyH.css +0 -1
  240. package/dist/assets/incoming-DzADFGqp.js +0 -2
  241. package/dist/assets/index-dNxr4Lg9.js +0 -138
  242. package/dist/assets/integrations-Cq1x-Di9.css +0 -1
  243. package/dist/assets/issues-Bywux4s7.js +0 -1
  244. package/dist/assets/mdi-CG9pWOSj.js +0 -1
  245. package/dist/assets/placement-BF-zIEhA.js +0 -1
  246. package/dist/assets/pull-requests-CdbhyFOv.css +0 -1
  247. package/dist/assets/pull-requests-ncmKT3sS.js +0 -1
  248. package/dist/assets/ripple-BVltMmyV.js +0 -11
  249. package/dist/assets/settings-BopLnpB0.css +0 -1
  250. package/dist/assets/shared-DpMvYJO3.js +0 -2
  251. package/dist/assets/studioGateApi-DcCqiD9V.js +0 -1
  252. package/dist/assets/studioUrls-DmMMIScP.js +0 -1
  253. package/dist/assets/useArchivedVibe64Sessions-_LB2XxEa.js +0 -1
  254. package/dist/assets/useCommand-Bqxb-naz.js +0 -1
  255. package/dist/assets/useEndpointResource-DWoQ2keu.js +0 -1
  256. package/dist/assets/useRealtimeEvent-Bwapstla.js +0 -1
  257. package/dist/assets/useVibe64ConversationLog-BqUI0S5n.js +0 -1
  258. package/dist/assets/useVibe64Learning-DyqXkpLw.js +0 -1
  259. package/dist/assets/useVibe64ProjectScope-Bp1ImZlz.js +0 -1
  260. package/dist/assets/useVibe64SessionData-B686lToN.js +0 -1
  261. package/dist/assets/vibe64SessionFocus-CqZNTvYF.js +0 -1
  262. package/dist/assets/vibe64SessionFocus-OJ2toBd9.css +0 -1
@@ -0,0 +1 @@
1
+ import{Ht as watch,g as computed,pn as onScopeDispose,vn as ref,xn as shallowRef}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{J as useQueryClient,T as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-Ds8EDBZ2.js";import{u as getHttpWebClient}from"./vibe64ProjectScope.local-B06ABkhI.js";import{n as useRealtimeEvent,r as useRealtimeSocket}from"./useRealtimeEvent-DrOiU8lJ.js";import{t as usePaths}from"./usePaths-Db88-HOm.js";import{o as normalizeVibe64ConversationAttachments}from"./shared-DZETtWRH.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-B5ogg6jd.js";import{$ as vibe64SessionEventMatchesScope,At as normalizeConversationLogPage,D as VIBE64_SESSIONS_API_SUFFIX,Dt as normalizeConversationTurn$1,Et as normalizeConversationMessage$1,Nt as mergeConversationStream,O as VIBE64_SESSION_CHANGED_EVENT,Ot as conversationLogReadQuery,R as vibe64ConversationLogPath,Tt as applyConversationLogPatch$1,b as readRefOrGetterValue,et as vibe64SessionPath,jt as normalizeConversationLogPagination,kt as mergeConversationLogPages,z as vibe64ConversationLogQueryKey}from"./index-Mxalhei8.js";import{a as vibe64SessionDebugError,o as vibe64SessionDebugLog}from"./vibe64SessionPanelModel-DDorOuiL.js";import{t as connectorDefinitions}from"./definitions-SNvFDEFS.js";var CONVERSATION_LOG_REALTIME_REASONS=new Set([`project-message-changed`,`conversation-rewound`,`session-assistant-selection-updated`,`assistant-stream`,`integration-setup-skipped`,`integration-setup-completed`,`assistant-response-bundle`,`codex-app-server-agent-result`,`codex-app-server-agent-result-invalid`,`codex-app-server-agent-result-missing`,`codex-app-server-agent-result-provider-failed`,`codex-app-server-commentary`,`codex-app-server-final-assistant-message`,`codex-app-server-live-progress`,`codex-app-server-reasoning-summary`,`codex-app-server-terminal-assistant-message`,`codex-app-server-terminal-thinking-message`,`codex-app-server-terminal-user-message`,`codex-turn-outcome`,`codex-app-server-message-delivered`,`opencode-credential-failure`,`opencode-provider-failure`,`opencode-server-assistant-message`,`opencode-server-message-delivered`,`opencode-server-reasoning`,`opencode-server-tool`,`opencode-server-turn-idle`,`claude-stream-turn-idle`,`claude-stream-message`,`claude-stream-message-delivered`,`session-agent-message-cancelled`,`session-agent-message-accepted`,`session-agent-message-delivered`,`session-agent-message-failed`]);function normalizeConversationMessage(message={}){return normalizeConversationMessage$1(message,{normalizeAttachments:normalizeVibe64ConversationAttachments})}function normalizeConversationTurn(turn={},index=0){const normalized=normalizeConversationTurn$1(turn,index,{normalizeAttachments:normalizeVibe64ConversationAttachments});return normalized&&{...normalized,...isRecord(turn.integrationSetup)?{integrationSetup:turn.integrationSetup}:{}}}function isRecord(value){return Boolean(value&&typeof value===`object`&&!Array.isArray(value))}function normalizeConversationLog(payload={},options={}){return conversationTurnsWithPending((Array.isArray(payload?.conversationLog)?payload.conversationLog:[]).map((turn,index)=>normalizeConversationTurn(turn,index)).filter(Boolean),options.pending)}function conversationTurnsWithPending(turns,pending){const pendingTurnIndex=pending===true?turns.length-1:-1;return turns.map((turn,index)=>{if(index===pendingTurnIndex&&turn.user&&!turn.assistant)return{...turn,pending:true};return turn})}function conversationLogRealtimePatch(payload={}){const reason=String(payload?.reason||``).trim();const patch=isRecord(payload?.conversationLogPatch)?payload.conversationLogPatch:null;if(![`assistant-response-bundle`,`codex-app-server-commentary`,`codex-app-server-final-assistant-message`,`codex-app-server-reasoning-summary`,`codex-app-server-live-progress`,`codex-app-server-terminal-assistant-message`,`codex-app-server-terminal-thinking-message`,`codex-app-server-terminal-user-message`,`codex-app-server-message-delivered`,`opencode-credential-failure`,`opencode-provider-failure`,`opencode-server-assistant-message`,`opencode-server-message-delivered`,`opencode-server-reasoning`,`opencode-server-tool`].includes(reason)||patch?.type!==`upsert-turn`||!isRecord(patch.turn))return null;const assistant=normalizeConversationMessage(patch.turn.assistant);const commentary=Array.isArray(patch.turn.commentary)?patch.turn.commentary.map(normalizeConversationMessage).filter(Boolean):[];const thinking=Array.isArray(patch.turn.thinking)?patch.turn.thinking.map(normalizeConversationMessage).filter(Boolean):[];if([`codex-app-server-reasoning-summary`,`codex-app-server-live-progress`].includes(reason)&&(!thinking.length||assistant))return null;if(reason===`codex-app-server-commentary`&&(!commentary.length||assistant))return null;if([`assistant-response-bundle`,`codex-app-server-final-assistant-message`].includes(reason)&&!assistant)return null;return{turn:patch.turn,type:`upsert-turn`}}function applyConversationLogPatch(payload={},patch=null,options={}){return applyConversationLogPatch$1(payload,patch,{...options,normalizeAttachments:normalizeVibe64ConversationAttachments})}function sessionIsAwaitingCodex(session={}){return(session&&typeof session===`object`&&!Array.isArray(session)?session:{}).agentSession?.turn?.active===true}function conversationLogRealtimeShouldRefresh({payload={}}={},sessionId=``){const normalizedSessionId=String(sessionId||``).trim();const changedSessionId=String(payload.sessionId||payload.entityId||``).trim();if(!normalizedSessionId||changedSessionId!==normalizedSessionId)return false;const reason=String(payload.reason||``).trim();return Boolean(payload.conversationStream)||!reason||CONVERSATION_LOG_REALTIME_REASONS.has(reason)}function conversationLogRecoveryStateKey(session={}){const source=session&&typeof session===`object`&&!Array.isArray(session)?session:{};return[source.sessionId,source.status,source.revision,source.updatedAt,source.agentSession?.turn?.active?`active`:`idle`,source.agentSession?.turn?.id].map(value=>String(value||``).trim()).join(`|`)}function conversationLogCompletedTurnKey(session={}){const source=isRecord(session)?session:{};const turn=isRecord(source.agentSession?.turn)?source.agentSession.turn:{};const sessionId=String(source.sessionId||``).trim();const turnId=String(turn.id||``).trim();const revision=Number(source.revision);if(!sessionId||!turnId||turn.active!==false||!Number.isSafeInteger(revision)||revision<0)return``;return`${sessionId}|${revision}|${turnId}`}function useConversationIntegrationActions({turns,enabled,sessionId,projectSlug,sessionsApiPath,reloadConversationLog,httpClient}){const integrationActionPending=shallowRef(null);const integrationActionError=ref(null);const integrationConnections=shallowRef({});function connectIntegrationRequest(request={}){return runIntegrationRequestAction(request,`connect`)}function checkIntegrationRequest(request={}){return runIntegrationRequestAction(request,`status`)}function cancelIntegrationRequest(request={}){return runIntegrationRequestAction(request,`cancel`)}function skipIntegrationRequest(request={}){return runIntegrationRequestAction(request,`skip`)}function resumeIntegrationRequest(request={}){return runIntegrationRequestAction(request,`resume`)}async function runIntegrationRequestAction(request,action){const turn=turns.value.find(entry=>entry.turnId===request.turnId);if(!enabled.value||request.sessionId!==sessionId.value||integrationActionPending.value||turn?.integrationSetup?.outcome!==(action===`resume`?`completed`:`pending`)||turn.integrationSetup.requestId!==request.requestId)return false;const selection={sessionId:sessionId.value,turnId:request.turnId,requestId:request.requestId};integrationActionPending.value=selection;integrationActionError.value=null;try{if([`connect`,`cancel`,`status`].includes(action)){const path=vibe64SessionPath(sessionsApiPath.value,selection.sessionId,`/integrations`);const config=await httpClient.request(path);if(integrationActionPending.value!==selection||sessionId.value!==selection.sessionId)return false;const integrationId=turn.integrationSetup.integrationId;const integration=config?.configuration?.integrations?.[integrationId];if(!integration)throw new Error(`Choose Configure to set up this integration first.`);if(connectorDefinitions.some(provider=>provider.id===integration.provider&&(provider.configurationOnly||provider.configurationOnlyForSettings?.(integration?.settings||{})))){integrationConnections.value={...integrationConnections.value,[selection.requestId]:{status:`configuration-only`}};return true}if(integration.accountMode===`per-user`)throw new Error(`Each app user connects their account inside the application. Choose Configure for setup instructions.`);const endpoint=`${path}/${encodeURIComponent(integrationId)}/setup`;const previous=integrationConnections.value[selection.requestId];if(action===`cancel`&&!previous?.attemptId)return false;let connection=await httpClient.request(endpoint,{method:`POST`,body:{operation:action,...action===`cancel`?{attemptId:previous.attemptId}:{setupRequest:{turnId:selection.turnId,requestId:selection.requestId,configurationHash:config.baseHash}}}});if(integrationActionPending.value!==selection||sessionId.value!==selection.sessionId)return false;if(action===`cancel`){connection=await httpClient.request(endpoint,{method:`POST`,body:{operation:`status`}});if(integrationActionPending.value!==selection||sessionId.value!==selection.sessionId)return false}integrationConnections.value={...integrationConnections.value,[selection.requestId]:connection};if(connection.integrationSetup?.outcome===`completed`&&connection.integrationSetup.continuation?.status!==`accepted`){const resumed=await httpClient.request(vibe64SessionPath(sessionsApiPath.value,selection.sessionId,`/integration-setup/resume`),{method:`POST`,body:{turnId:selection.turnId,requestId:selection.requestId}});if(resumed?.ok!==true)throw new Error(resumed?.error||`Assistant continuation is not yet confirmed.`)}if(integrationActionPending.value===selection&&sessionId.value===selection.sessionId)await reloadConversationLog();return true}const result=await httpClient.request(vibe64SessionPath(sessionsApiPath.value,selection.sessionId,`/integration-setup/${action}`),{method:`POST`,body:{turnId:selection.turnId,requestId:selection.requestId}});if(result?.ok!==true)throw new Error(result?.error||`Could not update integration setup.`);if(integrationActionPending.value===selection&&sessionId.value===selection.sessionId)await reloadConversationLog();return true}catch(error){if(sessionId.value===selection.sessionId&&integrationActionPending.value===selection){integrationActionError.value={turnId:selection.turnId,message:String(error?.message||`Could not update integration setup.`)};if(action===`resume`||action===`connect`||action===`status`)await reloadConversationLog()}return false}finally{if(sessionId.value===selection.sessionId&&integrationActionPending.value===selection)integrationActionPending.value=null}}onScopeDispose(()=>{integrationActionPending.value=null});watch([sessionId,projectSlug],()=>{integrationActionPending.value=null;integrationActionError.value=null;integrationConnections.value={}});return{integrationConnections,connectIntegrationRequest,checkIntegrationRequest,cancelIntegrationRequest,integrationActionPending,integrationActionError,skipIntegrationRequest,resumeIntegrationRequest}}function useVibe64ConversationLog({active=true,projectSlug:projectSlugInput,sessionsApiPath:sessionsApiPathInput,session,conversation=null}={}){const paths=usePaths();const httpClient=getHttpWebClient();const projectSlug=projectSlugInput===void 0?useVibe64ProjectSlug():computed(()=>readRefOrGetterValue(projectSlugInput));const currentSession=computed(()=>readRefOrGetterValue(session)||null);const sessionId=computed(()=>String(currentSession.value?.sessionId||``).trim());const enabled=computed(()=>Boolean(readRefOrGetterValue(active)!==false&&sessionId.value));const sessionsApiPath=computed(()=>readRefOrGetterValue(sessionsApiPathInput)||paths.api(`/vibe64/sessions`,{surface:`app`}));if(conversation){const turns=computed(()=>conversationTurnsWithPending(conversation.turns.value,sessionIsAwaitingCodex(currentSession.value)));const integrationActions=useConversationIntegrationActions({turns,enabled,sessionId,projectSlug,sessionsApiPath,reloadConversationLog:conversation.reload,httpClient});let realtimeCompletionKey=``;const realtime=useRealtimeEvent({enabled,event:VIBE64_SESSION_CHANGED_EVENT,matches:context=>([`session-assistant-selection-updated`,`integration-setup-skipped`,`integration-setup-completed`].includes(context?.payload?.reason)||conversationLogCompletedTurnKey(context?.payload))&&conversationLogRealtimeShouldRefresh(context,sessionId.value)&&vibe64SessionEventMatchesScope(context?.payload,{projectSlug:projectSlug.value}),onEvent:({payload={}}={})=>{realtimeCompletionKey=conversationLogCompletedTurnKey(payload)||realtimeCompletionKey;return payload.reason===`session-assistant-selection-updated`?conversation.reload({resubscribe:true}):conversation.reload()}});watch(()=>conversationLogCompletedTurnKey(currentSession.value),key=>{if(!enabled.value||!key)return;if(key===realtimeCompletionKey){realtimeCompletionKey=``;return}conversation.reload()?.catch(()=>{})},{flush:`post`});return{...integrationActions,turns,error:conversation.error,errorReloadable:computed(()=>conversation.accessDenied?.value===false),hasMoreBefore:conversation.hasMoreBefore,loadMore:conversation.loadMore,loadMoreError:conversation.loadMoreError,loading:conversation.loading,initializing:computed(()=>!conversation.snapshot.value&&conversation.loading.value),loadingMore:conversation.loadingMore,reload:conversation.reload,realtime,visible:computed(()=>Boolean(conversation.loading.value||conversation.error.value||turns.value.length))}}const queryClient=useQueryClient();const olderPages=ref([]);const loadingMore=ref(false);const loadMoreError=ref(``);const queryKey=computed(()=>[...vibe64ConversationLogQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,sessionId.value,projectSlug.value)]);const conversationLogPath=computed(()=>sessionId.value?vibe64ConversationLogPath(sessionsApiPath.value,sessionId.value):``);const pendingReads=new Set;const resource=useEndpointResource({enabled,fallbackLoadError:`Conversation history could not be loaded.`,path:conversationLogPath,queryKey,queryOptions:{async queryFn({signal}){const read={sessionId:sessionId.value,projectSlug:projectSlug.value,patches:[]};pendingReads.add(read);try{let payload=await httpClient.request(conversationLogPath.value,{method:`GET`,query:conversationLogReadQuery(),signal});for(const patch of read.patches)payload=applyConversationLogPatch(payload,patch,{limit:10});return payload}finally{pendingReads.delete(read)}},placeholderData:previousData=>previousData,refetchOnMount:false,refetchOnWindowFocus:false},readMethod:`GET`,refreshOnPull:true,requestRecoveryLabel:`Conversation history`,realtime:null});let reloadInFlight=null;let reloadQueued=false;let recoveredErrorKey=``;let realtimeCompletionKey=``;const conversationStream=shallowRef(null);function receiveConversationStream(snapshot){if(snapshot&&(!conversationStream.value||snapshot.revision>=conversationStream.value.revision))conversationStream.value=snapshot}watch(()=>resource.data.value,data=>receiveConversationStream(data?.conversationStream),{immediate:true});async function reloadConversationLog(){if(reloadInFlight){reloadQueued=true;vibe64SessionDebugLog(`client.conversationLog.reload.join`,{sessionId:sessionId.value});return reloadInFlight}olderPages.value=[];loadMoreError.value=``;vibe64SessionDebugLog(`client.conversationLog.reload.start`,{sessionId:sessionId.value});reloadInFlight=resource.reload();try{const result=await reloadInFlight;vibe64SessionDebugLog(`client.conversationLog.reload.done`,{sessionId:sessionId.value});return result}finally{reloadInFlight=null;if(reloadQueued){reloadQueued=false;reloadConversationLog()}}}const realtimeSocket=useRealtimeSocket({required:false});const reconcileConversationAfterRealtimeConnect=()=>{if(enabled.value){conversationStream.value=null;reloadConversationLog().catch(()=>{})}};realtimeSocket.on(`connect`,reconcileConversationAfterRealtimeConnect);onScopeDispose(()=>{realtimeSocket.off(`connect`,reconcileConversationAfterRealtimeConnect)});function applyRealtimeConversationLogPatch(payload={}){const patch=conversationLogRealtimePatch(payload);if(!patch)return false;const key=queryKey.value;const currentPayload=queryClient.getQueryData(key);const nextPayload=applyConversationLogPatch(currentPayload,patch,{limit:10});if(!nextPayload){vibe64SessionDebugLog(`client.conversationLog.patch.miss`,{hasCurrentPayload:Boolean(currentPayload),patchType:String(patch?.type||``),sessionId:sessionId.value});return false}for(const read of pendingReads)if(read.sessionId===sessionId.value&&read.projectSlug===projectSlug.value)read.patches.push(patch);queryClient.setQueryData(key,nextPayload);vibe64SessionDebugLog(`client.conversationLog.patch.done`,{patchType:String(patch.type||``),sessionId:sessionId.value,turnId:String(patch.turn?.turnId||``)});return true}const realtime=useRealtimeEvent({enabled,event:VIBE64_SESSION_CHANGED_EVENT,matches:context=>conversationLogRealtimeShouldRefresh(context,sessionId.value),onEvent:({payload={}}={})=>{receiveConversationStream(payload.conversationStream);realtimeCompletionKey=conversationLogCompletedTurnKey(payload)||realtimeCompletionKey;vibe64SessionDebugLog(`client.conversationLog.realtime`,{hasPatch:Boolean(conversationLogRealtimePatch(payload)),reason:String(payload.reason||``),sessionId:sessionId.value});if(applyRealtimeConversationLogPatch(payload))return null;if(payload.reason===`assistant-stream`)return null;return reloadConversationLog()}});const recoveryStateKey=computed(()=>conversationLogRecoveryStateKey(currentSession.value));const completedTurnKey=computed(()=>conversationLogCompletedTurnKey(currentSession.value));watch(completedTurnKey,key=>{if(!enabled.value||!key)return;if(key===realtimeCompletionKey){realtimeCompletionKey=``;return}vibe64SessionDebugLog(`client.conversationLog.completion.reconcile`,{completedTurnKey:key,sessionId:sessionId.value});reloadConversationLog().catch(()=>{})},{flush:`post`});const recoveryErrorKey=computed(()=>[enabled.value?`enabled`:`disabled`,sessionId.value,recoveryStateKey.value,resource.loadError.value].join(`|`));watch(recoveryErrorKey,()=>{const loadError=String(resource.loadError.value||``).trim();if(!enabled.value||!loadError){recoveredErrorKey=``;return}const key=recoveryErrorKey.value;if(recoveredErrorKey===key)return;recoveredErrorKey=key;vibe64SessionDebugLog(`client.conversationLog.recover.start`,{error:loadError,recoveryStateKey:recoveryStateKey.value,sessionId:sessionId.value});reloadConversationLog().then(()=>{vibe64SessionDebugLog(`client.conversationLog.recover.done`,{recoveryStateKey:recoveryStateKey.value,sessionId:sessionId.value})}).catch(error=>{vibe64SessionDebugLog(`client.conversationLog.recover.error`,{error:vibe64SessionDebugError(error),recoveryStateKey:recoveryStateKey.value,sessionId:sessionId.value})})},{flush:`post`});const latestPage=computed(()=>normalizeConversationLogPage(resource.data.value||{}));const loadedPages=computed(()=>[...olderPages.value,latestPage.value]);const oldestLoadedPage=computed(()=>olderPages.value[0]||latestPage.value);const hasMoreBefore=computed(()=>Boolean(normalizeConversationLogPagination(oldestLoadedPage.value?.pagination).hasMoreBefore));const turns=computed(()=>{const savedTurns=normalizeConversationLog(mergeConversationLogPages(loadedPages.value),{pending:sessionIsAwaitingCodex(currentSession.value)});return mergeConversationStream(savedTurns,conversationStream.value)});const visible=computed(()=>Boolean(resource.isLoading.value||resource.loadError.value||turns.value.length));async function loadMoreConversationLog({complete}={}){const finish=result=>{if(typeof complete===`function`)complete(result)};const pagination=normalizeConversationLogPagination(oldestLoadedPage.value?.pagination);const beforeTurnId=pagination.nextBeforeTurnId||pagination.oldestTurnId||String(turns.value[0]?.turnId||``).trim();if(!enabled.value||!conversationLogPath.value||!hasMoreBefore.value||loadingMore.value||!beforeTurnId){finish({changed:false,loaded:false});return false}loadingMore.value=true;loadMoreError.value=``;vibe64SessionDebugLog(`client.conversationLog.loadMore.start`,{beforeTurnId,sessionId:sessionId.value});try{const page=await httpClient.request(conversationLogPath.value,{method:`GET`,query:conversationLogReadQuery({beforeTurnId,limit:10})});const previousOldestTurnId=String(turns.value[0]?.turnId||``).trim();const previousMessageCount=turns.value.reduce((count,turn)=>count+(turn.messages?.length||0),0);olderPages.value=[normalizeConversationLogPage(page),...olderPages.value];const nextOldestTurnId=String(turns.value[0]?.turnId||``).trim();const nextMessageCount=turns.value.reduce((count,turn)=>count+(turn.messages?.length||0),0);const changed=Boolean(nextOldestTurnId&&(nextOldestTurnId!==previousOldestTurnId||nextMessageCount!==previousMessageCount));vibe64SessionDebugLog(`client.conversationLog.loadMore.done`,{beforeTurnId,sessionId:sessionId.value,turnCount:Array.isArray(page?.conversationLog)?page.conversationLog.length:0});finish({changed,loaded:true});return true}catch(error){loadMoreError.value=String(error?.message||error||`Older conversation history could not be loaded.`);vibe64SessionDebugLog(`client.conversationLog.loadMore.error`,{beforeTurnId,error:vibe64SessionDebugError(error),sessionId:sessionId.value});finish({changed:false,loaded:false});return false}finally{loadingMore.value=false}}const integrationActions=useConversationIntegrationActions({turns,enabled,sessionId,projectSlug,sessionsApiPath,reloadConversationLog,httpClient});watch([sessionId,projectSlug],()=>{conversationStream.value=null;olderPages.value=[];loadMoreError.value=``});return{...integrationActions,error:resource.loadError,hasMoreBefore,loadMore:loadMoreConversationLog,loadMoreError,loading:resource.isLoading,initializing:resource.isInitialLoading,loadingMore,reload:reloadConversationLog,realtime,turns,visible}}export{useVibe64ConversationLog as t};
@@ -1 +1 @@
1
- import{H as hasInjectionContext,J as inject,On as unref,g as computed}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{T as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-DWoQ2keu.js";import{n as VIBE64_ASSISTANT_VIEWER_KEY}from"./vibe64AssistantHost-CP6oxv5b.js";import{b as VIBE64_CONNECTIONS_CHANGED_EVENT,y as VIBE64_ACCOUNTS_CHANGED_EVENT}from"./client-BWV84wi2.js";import{t as usePaths}from"./usePaths-Db88-HOm.js";import{t as useCommand}from"./useCommand-Bqxb-naz.js";var VIBE64_DATABASE_LAYOUT_CHANGED_EVENT=`vibe64.database.layout.changed`;var DATABASE_API_SUFFIX=`/vibe64/database`;var DATABASE_SURFACE=`app`;function encodeSegment(value=``){return encodeURIComponent(String(value||``).trim())}function databaseSessionPath(apiPath=``,sessionId=``,suffix=``){return`${apiPath}/sessions/${encodeSegment(sessionId)}${suffix}`}function useVibe64DatabaseTools({active=true,projectSlug=``,sessionId=``}={}){const paths=usePaths();const viewer=hasInjectionContext()?inject(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`}):{actorKey:`local`};const actorKey=computed(()=>unref(viewer)?.actorKey||``);const normalizedSessionId=computed(()=>String(unref(sessionId)||``).trim());const normalizedProjectSlug=computed(()=>String(unref(projectSlug)||``).trim());const enabled=computed(()=>Boolean(unref(active)&&normalizedSessionId.value&&actorKey.value));const apiPath=computed(()=>paths.api(DATABASE_API_SUFFIX,{surface:DATABASE_SURFACE}));const sessionPath=computed(()=>databaseSessionPath(apiPath.value,normalizedSessionId.value));const stateResource=useEndpointResource({enabled,fallbackLoadError:`The session database workspace could not be loaded.`,path:computed(()=>enabled.value?sessionPath.value:``),queryKey:computed(()=>[`vibe64`,`database`,normalizedProjectSlug.value,normalizedSessionId.value,actorKey.value,`state`]),realtime:{events:[VIBE64_DATABASE_LAYOUT_CHANGED_EVENT,VIBE64_ACCOUNTS_CHANGED_EVENT,VIBE64_CONNECTIONS_CHANGED_EVENT],matches:({event,payload={}}={})=>event!==`vibe64.database.layout.changed`||payload.projectSlug===normalizedProjectSlug.value&&payload.sessionId===normalizedSessionId.value},requestRecoveryLabel:`Session database`});function databaseCommand({fallback,method=`POST`,placement,success=`Completed.`,suppressSuccessMessage=false}={}){return useCommand({access:`never`,apiSuffix:DATABASE_API_SUFFIX,buildCommandOptions:(_input,{context})=>({method:context.method||method,path:context.path||sessionPath.value}),buildRawPayload:(_model,{context})=>context.payload||{},fallbackRunError:fallback,messages:{error:fallback,success},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.database.${placement}`,suppressSuccessMessage,surfaceId:DATABASE_SURFACE,writeMethod:method})}const refreshCommand=databaseCommand({fallback:`The database schema could not be refreshed.`,placement:`schema.refresh`,success:`Database schema refreshed.`});const queryCommand=databaseCommand({fallback:`The SQL statement could not be run.`,placement:`query.run`,success:`SQL statement completed.`});const defaultQueryCommand=databaseCommand({fallback:`The table data could not be loaded.`,placement:`query.default`,suppressSuccessMessage:true});const cancelCommand=databaseCommand({fallback:`The database query could not be cancelled.`,placement:`query.cancel`,suppressSuccessMessage:true});const updateCommand=databaseCommand({fallback:`The database value could not be saved.`,method:`PATCH`,placement:`cell.update`,success:`Database value saved.`});const insertCommand=databaseCommand({fallback:`The database row could not be inserted.`,placement:`row.insert`,success:`Database row inserted.`});const deleteCommand=databaseCommand({fallback:`The database row could not be deleted.`,placement:`row.delete`,success:`Database row deleted.`});const lookupCommand=databaseCommand({fallback:`The lookup table could not be searched.`,placement:`lookup.search`,suppressSuccessMessage:true});const layoutCommand=databaseCommand({fallback:`The ERD layout could not be saved.`,method:`PUT`,placement:`layout.save`,suppressSuccessMessage:true});const overviewCommand=databaseCommand({fallback:`The main actor grouping could not be saved.`,method:`PUT`,placement:`overview.save`,success:`Main actors saved in project source.`});const snippetCommand=databaseCommand({fallback:`The SQL snippet could not be saved.`,method:`PUT`,placement:`snippet.save`,success:`SQL snippet saved.`});const snippetDeleteCommand=databaseCommand({fallback:`The SQL snippet could not be deleted.`,method:`DELETE`,placement:`snippet.delete`,success:`SQL snippet deleted.`});const assistantCommand=databaseCommand({fallback:`The database copilot could not answer.`,placement:`assistant.ask`,suppressSuccessMessage:true});async function reload(){if(enabled.value)return stateResource.reload()}async function refreshSchema(){const result=await refreshCommand.run({path:`${sessionPath.value}/schema/refresh`});await reload();return result}function runQuery(payload={}){return(payload.automatic===true?defaultQueryCommand:queryCommand).run({path:`${sessionPath.value}/queries`,payload})}function cancelQuery(queryId=``){return cancelCommand.run({path:`${sessionPath.value}/queries/${encodeSegment(queryId)}/cancel`})}function updateCell(payload={}){return updateCommand.run({path:`${sessionPath.value}/cells`,payload})}function insertRow(payload={}){return insertCommand.run({path:`${sessionPath.value}/rows`,payload})}function deleteRow(payload={}){return deleteCommand.run({path:`${sessionPath.value}/rows/delete`,payload})}function searchLookup(payload={}){return lookupCommand.run({path:`${sessionPath.value}/lookups/search`,payload})}function saveLayout(layout={}){return layoutCommand.run({path:`${sessionPath.value}/layout`,payload:{layout}})}async function saveOverview(payload){const result=await overviewCommand.run({path:`${sessionPath.value}/overview`,payload});if(result?.ok!==false)await reload();return result}function saveSnippet(snippet={}){return snippetCommand.run({path:`${sessionPath.value}/snippets`,payload:{snippet}})}function deleteSnippet(snippetId=``){return snippetDeleteCommand.run({method:`DELETE`,path:`${sessionPath.value}/snippets/${encodeSegment(snippetId)}`})}return{assistantCommand,assistantEndpoint:computed(()=>`${sessionPath.value}/assistant`),assistantBusy:computed(()=>assistantCommand.isRunning===true),cancelQuery,cancelling:computed(()=>cancelCommand.isRunning===true),deleteRow,deleteSnippet,deleting:computed(()=>deleteCommand.isRunning===true),error:stateResource.loadError,insertRow,inserting:computed(()=>insertCommand.isRunning===true),layoutSaving:computed(()=>layoutCommand.isRunning===true),loading:stateResource.isLoading,lookupBusy:computed(()=>lookupCommand.isRunning===true),refreshSchema,refreshing:computed(()=>refreshCommand.isRunning===true),reload,runQuery,running:computed(()=>queryCommand.isRunning===true||defaultQueryCommand.isRunning===true),saveLayout,saveOverview,saveSnippet,searchLookup,state:computed(()=>actorKey.value?stateResource.data.value||null:null),updateCell,updating:computed(()=>updateCommand.isRunning===true)}}export{useVibe64DatabaseTools as t};
1
+ import{H as hasInjectionContext,J as inject,On as unref,g as computed}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{T as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-Ds8EDBZ2.js";import{n as VIBE64_ASSISTANT_VIEWER_KEY}from"./vibe64AssistantHost-CP6oxv5b.js";import{S as VIBE64_CONNECTIONS_CHANGED_EVENT,x as VIBE64_ACCOUNTS_CHANGED_EVENT}from"./client-BxGiylrJ.js";import{t as usePaths}from"./usePaths-Db88-HOm.js";import{t as useCommand}from"./useCommand-nWFczmJy.js";var VIBE64_DATABASE_LAYOUT_CHANGED_EVENT=`vibe64.database.layout.changed`;var DATABASE_API_SUFFIX=`/vibe64/database`;var DATABASE_SURFACE=`app`;function encodeSegment(value=``){return encodeURIComponent(String(value||``).trim())}function databaseSessionPath(apiPath=``,sessionId=``,suffix=``){return`${apiPath}/sessions/${encodeSegment(sessionId)}${suffix}`}function useVibe64DatabaseTools({active=true,projectSlug=``,sessionId=``}={}){const paths=usePaths();const viewer=hasInjectionContext()?inject(VIBE64_ASSISTANT_VIEWER_KEY,{actorKey:`local`}):{actorKey:`local`};const actorKey=computed(()=>unref(viewer)?.actorKey||``);const normalizedSessionId=computed(()=>String(unref(sessionId)||``).trim());const normalizedProjectSlug=computed(()=>String(unref(projectSlug)||``).trim());const enabled=computed(()=>Boolean(unref(active)&&normalizedSessionId.value&&actorKey.value));const apiPath=computed(()=>paths.api(DATABASE_API_SUFFIX,{surface:DATABASE_SURFACE}));const sessionPath=computed(()=>databaseSessionPath(apiPath.value,normalizedSessionId.value));const stateResource=useEndpointResource({enabled,fallbackLoadError:`The session database workspace could not be loaded.`,path:computed(()=>enabled.value?sessionPath.value:``),queryKey:computed(()=>[`vibe64`,`database`,normalizedProjectSlug.value,normalizedSessionId.value,actorKey.value,`state`]),realtime:{events:[VIBE64_DATABASE_LAYOUT_CHANGED_EVENT,VIBE64_ACCOUNTS_CHANGED_EVENT,VIBE64_CONNECTIONS_CHANGED_EVENT],matches:({event,payload={}}={})=>event!==`vibe64.database.layout.changed`||payload.projectSlug===normalizedProjectSlug.value&&payload.sessionId===normalizedSessionId.value},requestRecoveryLabel:`Session database`});function databaseCommand({fallback,method=`POST`,placement,success=`Completed.`,suppressSuccessMessage=false}={}){return useCommand({access:`never`,apiSuffix:DATABASE_API_SUFFIX,buildCommandOptions:(_input,{context})=>({method:context.method||method,path:context.path||sessionPath.value}),buildRawPayload:(_model,{context})=>context.payload||{},fallbackRunError:fallback,messages:{error:fallback,success},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.database.${placement}`,suppressSuccessMessage,surfaceId:DATABASE_SURFACE,writeMethod:method})}const refreshCommand=databaseCommand({fallback:`The database schema could not be refreshed.`,placement:`schema.refresh`,success:`Database schema refreshed.`});const queryCommand=databaseCommand({fallback:`The SQL statement could not be run.`,placement:`query.run`,success:`SQL statement completed.`});const defaultQueryCommand=databaseCommand({fallback:`The table data could not be loaded.`,placement:`query.default`,suppressSuccessMessage:true});const cancelCommand=databaseCommand({fallback:`The database query could not be cancelled.`,placement:`query.cancel`,suppressSuccessMessage:true});const updateCommand=databaseCommand({fallback:`The database value could not be saved.`,method:`PATCH`,placement:`cell.update`,success:`Database value saved.`});const insertCommand=databaseCommand({fallback:`The database row could not be inserted.`,placement:`row.insert`,success:`Database row inserted.`});const deleteCommand=databaseCommand({fallback:`The database row could not be deleted.`,placement:`row.delete`,success:`Database row deleted.`});const lookupCommand=databaseCommand({fallback:`The lookup table could not be searched.`,placement:`lookup.search`,suppressSuccessMessage:true});const layoutCommand=databaseCommand({fallback:`The ERD layout could not be saved.`,method:`PUT`,placement:`layout.save`,suppressSuccessMessage:true});const overviewCommand=databaseCommand({fallback:`The main actor grouping could not be saved.`,method:`PUT`,placement:`overview.save`,success:`Main actors saved in project source.`});const snippetCommand=databaseCommand({fallback:`The SQL snippet could not be saved.`,method:`PUT`,placement:`snippet.save`,success:`SQL snippet saved.`});const snippetDeleteCommand=databaseCommand({fallback:`The SQL snippet could not be deleted.`,method:`DELETE`,placement:`snippet.delete`,success:`SQL snippet deleted.`});const assistantCommand=databaseCommand({fallback:`The database copilot could not answer.`,placement:`assistant.ask`,suppressSuccessMessage:true});async function reload(){if(enabled.value)return stateResource.reload()}async function refreshSchema(){const result=await refreshCommand.run({path:`${sessionPath.value}/schema/refresh`});await reload();return result}function runQuery(payload={}){return(payload.automatic===true?defaultQueryCommand:queryCommand).run({path:`${sessionPath.value}/queries`,payload})}function cancelQuery(queryId=``){return cancelCommand.run({path:`${sessionPath.value}/queries/${encodeSegment(queryId)}/cancel`})}function updateCell(payload={}){return updateCommand.run({path:`${sessionPath.value}/cells`,payload})}function insertRow(payload={}){return insertCommand.run({path:`${sessionPath.value}/rows`,payload})}function deleteRow(payload={}){return deleteCommand.run({path:`${sessionPath.value}/rows/delete`,payload})}function searchLookup(payload={}){return lookupCommand.run({path:`${sessionPath.value}/lookups/search`,payload})}function saveLayout(layout={}){return layoutCommand.run({path:`${sessionPath.value}/layout`,payload:{layout}})}async function saveOverview(payload){const result=await overviewCommand.run({path:`${sessionPath.value}/overview`,payload});if(result?.ok!==false)await reload();return result}function saveSnippet(snippet={}){return snippetCommand.run({path:`${sessionPath.value}/snippets`,payload:{snippet}})}function deleteSnippet(snippetId=``){return snippetDeleteCommand.run({method:`DELETE`,path:`${sessionPath.value}/snippets/${encodeSegment(snippetId)}`})}return{assistantCommand,assistantEndpoint:computed(()=>`${sessionPath.value}/assistant`),assistantBusy:computed(()=>assistantCommand.isRunning===true),cancelQuery,cancelling:computed(()=>cancelCommand.isRunning===true),deleteRow,deleteSnippet,deleting:computed(()=>deleteCommand.isRunning===true),error:stateResource.loadError,insertRow,inserting:computed(()=>insertCommand.isRunning===true),layoutSaving:computed(()=>layoutCommand.isRunning===true),loading:stateResource.isLoading,lookupBusy:computed(()=>lookupCommand.isRunning===true),refreshSchema,refreshing:computed(()=>refreshCommand.isRunning===true),reload,runQuery,running:computed(()=>queryCommand.isRunning===true||defaultQueryCommand.isRunning===true),saveLayout,saveOverview,saveSnippet,searchLookup,state:computed(()=>actorKey.value?stateResource.data.value||null:null),updateCell,updating:computed(()=>updateCommand.isRunning===true)}}export{useVibe64DatabaseTools as t};
@@ -0,0 +1 @@
1
+ import{g as computed}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{a as projectSlugFromRoute}from"./vibe64ProjectScope.local-B06ABkhI.js";function useVibe64ProjectSlug(route=useRoute()){return computed(()=>projectSlugFromRoute(route))}export{useVibe64ProjectSlug as t};
@@ -0,0 +1 @@
1
+ import{Ht as watch,On as unref,g as computed,hn as proxyRefs,pn as onScopeDispose,vn as ref}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{J as useQueryClient,T as ROUTE_VISIBILITY_PUBLIC,t as useEndpointResource}from"./useEndpointResource-Ds8EDBZ2.js";import{_ as useRouter,g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{n as useRealtimeEvent}from"./useRealtimeEvent-DrOiU8lJ.js";import{t as usePaths}from"./usePaths-Db88-HOm.js";import{t as useCommand}from"./useCommand-nWFczmJy.js";import{t as useUiFeedback}from"./useUiFeedback-CMwE4MLs.js";import{b as VIBE64_PROJECT_CHANGED_EVENT}from"./studioGateApi-BXHVBVEc.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-B5ogg6jd.js";import{n as vibe64RealtimeOriginPayload}from"./vibe64BrowserTabOrigin-SF9E31vi.js";import{D as VIBE64_SESSIONS_API_SUFFIX,E as VIBE64_CURRENT_SESSION_API_SUFFIX,O as VIBE64_SESSION_CHANGED_EVENT,at as vibe64SessionsQueryKey,b as readRefOrGetterValue,et as vibe64SessionPath,it as vibe64SessionQueryKey}from"./index-Mxalhei8.js";import{a as vibe64SessionDebugError,i as vibe64SessionDebugDurationMs,n as enrichVibe64SessionForDisplay,o as vibe64SessionDebugLog,r as visibleVibe64Sessions,s as vibe64SessionDebugSummary}from"./vibe64SessionPanelModel-DDorOuiL.js";import{c as vibe64SessionStatusLabel,i as vibe64SessionDisplayTitle,o as vibe64SessionRevision,r as shortVibe64SessionId,s as vibe64SessionStatusColor,t as isArchivedVibe64Session}from"./vibe64SessionViewModel-DR4tOlGM.js";import{n as useVibe64SessionSelection,t as selectedSessionIdFromRoute}from"./useVibe64SessionSelection-J87nJ9p5.js";function plainObjectValue(value=null){return value&&typeof value===`object`&&!Array.isArray(value)?value:{}}function sessionChangedReason$1(payload={}){return String(payload?.reason||``).trim()}function sessionRevision(value){const revision=Number(value);return Number.isSafeInteger(revision)&&revision>=0?revision:null}function agentTurnRealtimeOverlayFromPayload(payload={},selectedSessionId=``){const changedSessionId=String(payload?.sessionId||payload?.entityId||``).trim();if(!changedSessionId||changedSessionId!==String(selectedSessionId||``).trim())return null;const agentSession=plainObjectValue(payload.agentSession);const turn=plainObjectValue(agentSession.turn);const run=plainObjectValue(payload.agentRun);const revision=sessionRevision(payload.revision);if(revision===null||!Object.keys(turn).length&&!Object.keys(run).length)return null;const active=turn.active===true||run.active===true;return{active,agentRun:{...run,active},agentSession:{...agentSession,turn:{...turn,active}},reason:sessionChangedReason$1(payload),revision,sessionId:changedSessionId}}function latestAgentTurnRealtimeOverlay(current=null,candidate=null){if(!candidate)return current;if(!current||candidate.revision>current.revision)return candidate;return current}function mergeAgentRunOverlay(agentRuns=[],overlayRun={}){const runs=Array.isArray(agentRuns)?agentRuns:[];const runId=String(overlayRun.id||``).trim();if(!runId)return runs;const nextRun={...overlayRun,id:runId};const index=runs.findIndex(run=>String(run?.id||``).trim()===runId);if(index<0)return[...runs,nextRun];return runs.map((run,runIndex)=>runIndex===index?{...run,...nextRun}:run)}function sessionWithAgentTurnRealtimeOverlay(session=null,overlay=null){const currentRevision=sessionRevision(session?.revision);if(!session||!overlay||session?.ok===false||session.sessionId!==overlay.sessionId||currentRevision!==null&&overlay.revision<=currentRevision)return session;const overlayAgentSession=plainObjectValue(overlay.agentSession);return{...session,agentRuns:mergeAgentRunOverlay(session.agentRuns,plainObjectValue(overlay.agentRun)),agentSession:{...plainObjectValue(session.agentSession),...overlayAgentSession,thread:{...plainObjectValue(session.agentSession?.thread),...plainObjectValue(overlayAgentSession.thread)},turn:{...plainObjectValue(session.agentSession?.turn),...plainObjectValue(overlayAgentSession.turn),active:overlay.active===true}},revision:overlay.revision}}var MOUNTED_SESSION_IGNORED_REALTIME_REASONS=new Set([`assistant-stream`,`assistant-response-bundle`,`codex-app-server-commentary`,`codex-app-server-prompt-injected`,`codex-app-server-ready`,`codex-app-server-final-assistant-message`,`codex-app-server-live-progress`,`codex-app-server-reasoning-summary`,`codex-app-server-running`,`codex-app-server-terminal-assistant-message`,`codex-app-server-terminal-thinking-message`,`codex-app-server-terminal-user-message`,`codex-app-server-turn-active`,`codex-app-server-turn-claimed`,`codex-app-server-turn-finalizing`,`codex-app-server-turn-idle`,`codex-app-server-turn-state`,`codex-app-server-message-delivered`,`codex-context-replaced`,`codex-prompt-injected`,`opencode-server-assistant-message`,`opencode-server-message-delivered`,`opencode-server-progress`,`opencode-server-reasoning`,`opencode-server-tool`,`opencode-server-turn-active`,`opencode-server-turn-idle`,`output-target-started`,`output-target-ready`,`output-target-closed`,`output-target-stopped`]);function sessionRecordHasDetailProjection(session=null){return Boolean(session&&typeof session===`object`&&Object.hasOwn(session,`agentSession`))}function sessionRecordHasActiveAgentWork(session=null){return(session?.agentSession?.turn?.active??session?.agentActivity?.active)===true}function sessionRecordMatchesId(session=null,sessionId=``){const normalizedSessionId=String(sessionId||``).trim();return Boolean(normalizedSessionId&&session?.sessionId===normalizedSessionId&&session?.ok!==false)}function latestSessionDetailRecord(current=null,candidate=null,sessionId=``){if(!sessionRecordMatchesId(candidate,sessionId))return current;if(!sessionRecordMatchesId(current,sessionId))return candidate;const currentRevision=vibe64SessionRevision(current);const candidateRevision=vibe64SessionRevision(candidate);if(currentRevision!==null&&candidateRevision!==null&&candidateRevision<currentRevision)return current;return candidate}function mountedSessionRecord(detailSession=null,listSession=null,sessionId=``){const normalizedSessionId=String(sessionId||``).trim();const listSessionMatches=sessionRecordMatchesId(listSession,normalizedSessionId);if(!sessionRecordMatchesId(detailSession,normalizedSessionId))return listSessionMatches?listSession:null;const detailRevision=vibe64SessionRevision(detailSession);const listRevision=vibe64SessionRevision(listSession);if(listSessionMatches&&listRevision!==null&&detailRevision!==null&&listRevision>detailRevision){if(sessionRecordHasDetailProjection(detailSession)&&!sessionRecordHasDetailProjection(listSession))return detailSession;return listSession}return detailSession}function mountedSessionDetailRefreshReason(detailSession=null,listSession=null,sessionId=``){const normalizedSessionId=String(sessionId||``).trim();if(!sessionRecordMatchesId(detailSession,normalizedSessionId)||!sessionRecordMatchesId(listSession,normalizedSessionId))return``;const detailRevision=vibe64SessionRevision(detailSession);const listRevision=vibe64SessionRevision(listSession);if(listRevision!==null&&detailRevision!==null&&listRevision>detailRevision&&sessionRecordHasDetailProjection(detailSession)&&!sessionRecordHasDetailProjection(listSession))return`newer_summary_without_detail`;return``}function mountedSessionDetailLoadState({detailSession=null,fetching=false,listSession=null,loadError=``,loading=false,sessionId=``}={}){const normalizedSessionId=String(sessionId||``).trim();const hasDetail=sessionRecordMatchesId(detailSession,normalizedSessionId);const hasSummary=sessionRecordMatchesId(listSession,normalizedSessionId);const error=String(loadError||``).trim();if(!normalizedSessionId)return{error:``,label:``,loading:false,ready:false,restoring:false,sessionId:``,state:`summaryOnly`};if(error&&!hasDetail)return{error,label:`Session could not load.`,loading:false,ready:false,restoring:false,sessionId:normalizedSessionId,state:`detailError`};if(hasDetail)return{error:``,label:``,loading:false,ready:true,refreshing:Boolean(fetching||loading),restoring:false,sessionId:normalizedSessionId,state:`detailReady`};if(loading||fetching)return{error:``,label:`Loading session...`,loading:true,ready:false,restoring:false,sessionId:normalizedSessionId,state:`detailLoading`};return{error:``,label:hasSummary?`Session could not load.`:`Loading session...`,loading:false,ready:false,restoring:false,sessionId:normalizedSessionId,state:`summaryOnly`}}function mountedSessionRealtimeShouldRefresh({payload={}}={},sessionId=``){const changedSessionId=String(payload.sessionId||payload.entityId||``).trim();if(!changedSessionId||changedSessionId!==String(sessionId||``).trim())return false;const reason=String(payload?.reason||``).trim();return!reason||!MOUNTED_SESSION_IGNORED_REALTIME_REASONS.has(reason)}function useVibe64SessionDialogs({archiveAllowed=true,beginArchive=()=>null,finishArchive=()=>null,isSelectedSessionArchived,refreshSessionData=async()=>null,selectedSessionId,selectedSessionTitle,sessionsApiPath}={}){const archiveDialogOpen=ref(false);const archiveDialogSessionId=ref(``);const archiveDialogSessionTitle=ref(``);const archivingSessionId=ref(``);const resolvedSessionsApiPath=computed(()=>String(readRefOrGetterValue(sessionsApiPath)||``));const archiveCommand=useCommand({access:`never`,apiSuffix:VIBE64_SESSIONS_API_SUFFIX,buildRawPayload:()=>vibe64RealtimeOriginPayload(),buildCommandOptions:(_payload,{context})=>({method:`POST`,path:vibe64SessionPath(resolvedSessionsApiPath.value,context?.sessionId,`/archive`)}),fallbackRunError:`Vibe64 session could not be archived.`,messages:{error:`Vibe64 session could not be archived.`,success:`Vibe64 session archived.`},onRunSuccess:async response=>{if(response?.ok!==true)throw new Error(response?.errors?.[0]?.message||response?.error||`Vibe64 session could not be archived.`)},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.sessions.archive`,surfaceId:`app`,writeMethod:`POST`});function clearArchiveDialog(){archiveDialogOpen.value=false;archiveDialogSessionId.value=``;archiveDialogSessionTitle.value=``}function requestArchiveSelectedSession(){if(!readRefOrGetterValue(archiveAllowed)||!unref(selectedSessionId)||archivingSessionId.value||archiveCommand.isRunning||unref(isSelectedSessionArchived))return;archiveDialogSessionId.value=unref(selectedSessionId);archiveDialogSessionTitle.value=unref(selectedSessionTitle);archiveDialogOpen.value=true}function cancelArchiveSession(){if(!archiveCommand.isRunning)clearArchiveDialog()}async function confirmArchiveSession(){if(!archiveDialogSessionId.value||archivingSessionId.value||archiveCommand.isRunning)return false;const sessionId=archiveDialogSessionId.value;archivingSessionId.value=sessionId;clearArchiveDialog();const archiveScope=beginArchive(sessionId);let succeeded=false;try{const response=await archiveCommand.run({sessionId});succeeded=response?.ok===true;return response}catch{return false}finally{finishArchive(sessionId,succeeded,archiveScope);if(archivingSessionId.value===sessionId)archivingSessionId.value=``;refreshSessionData({includeList:true,reason:`archive-session`}).catch(()=>null)}}function clear(){clearArchiveDialog()}return{archive:{archiving:computed(()=>Boolean(archivingSessionId.value)),archivingSessionId,cancel:cancelArchiveSession,command:archiveCommand,confirm:confirmArchiveSession,open:archiveDialogOpen,request:requestArchiveSelectedSession,sessionId:archiveDialogSessionId,sessionTitle:archiveDialogSessionTitle},busy:computed(()=>Boolean(archivingSessionId.value)),clear}}function createVibe64CurrentSessionPublisher({coalesceByPath=false,onError=()=>null,publish}={}){if(typeof publish!==`function`)throw new TypeError(`Current Vibe64 session publisher requires publish().`);const pendingPublications=new Map;let publicationChain=Promise.resolve();let lastPublishedIdentity=null;let stopped=false;function request(publication={}){if(stopped)return publicationChain;const apiPath=String(publication?.apiPath||``);const sessionId=String(publication?.sessionId||``).trim();const publicationKey=(typeof coalesceByPath===`function`?coalesceByPath():coalesceByPath)?apiPath:``;pendingPublications.set(publicationKey,{apiPath,identity:JSON.stringify([apiPath,sessionId]),sessionId});publicationChain=publicationChain.catch(()=>null).then(async()=>{if(stopped||pendingPublications.size===0)return;const[key,publication]=pendingPublications.entries().next().value;pendingPublications.delete(key);if(publication.identity===lastPublishedIdentity)return;try{await publish({apiPath:publication.apiPath,sessionId:publication.sessionId});lastPublishedIdentity=publication.identity}catch(error){onError(error,publication)}});return publicationChain}function stop(){stopped=true;pendingPublications.clear()}return Object.freeze({request,stop})}function vibe64SessionListRefreshRequested(payload={}){return payload?.clientRefresh?.includeList===true}var SESSION_LIST_IGNORED_REALTIME_REASONS=new Set([`assistant-stream`,`assistant-response-bundle`,`codex-app-server-ready`,`codex-app-server-agent-result`,`codex-app-server-agent-result-invalid`,`codex-app-server-agent-result-missing`,`codex-app-server-agent-result-provider-failed`,`codex-app-server-blocked`,`codex-app-server-commentary`,`codex-app-server-failed`,`codex-app-server-final-assistant-message`,`codex-app-server-live-progress`,`codex-app-server-prompt-injected`,`codex-app-server-reasoning-summary`,`codex-app-server-running`,`codex-app-server-terminal-assistant-message`,`codex-app-server-terminal-thinking-message`,`codex-app-server-terminal-user-message`,`codex-app-server-turn-active`,`codex-app-server-turn-claimed`,`codex-app-server-turn-finalizing`,`codex-app-server-turn-idle`,`codex-app-server-turn-state`,`codex-app-server-message-delivered`,`codex-prompt-injected`,`codex-context-replaced`,`opencode-server-assistant-message`,`opencode-server-message-delivered`,`opencode-server-progress`,`opencode-server-reasoning`,`opencode-server-tool`,`opencode-server-turn-active`,`opencode-server-turn-idle`,`agent-terminal-started`,`agent-terminal-closed`,`output-target-started`,`output-target-ready`,`output-target-closed`,`output-target-stopped`]);function sessionArchiveOperation(session){try{return JSON.parse(session?.metadata?.session_archive_operation||`null`)}catch{return{status:`failed`,error:`Session archive state could not be read.`}}}function sessionIdExistsInList(sessionId=``,nextSessions=[]){const normalizedSessionId=String(sessionId||``).trim();return Boolean(normalizedSessionId)&&nextSessions.some(session=>session.sessionId===normalizedSessionId)}function renewedSuccessorSessionId({predecessorSessionId=``,sessions=[]}={}){const predecessorId=String(predecessorSessionId||``).trim();if(!predecessorId)return``;const matches=sessions.filter(session=>String(session?.metadata?.renewed_from||``).trim()===predecessorId);return matches.length===1?String(matches[0]?.sessionId||``).trim():``}function shouldPreserveSelectedSessionDuringRefresh({createSessionRunning=false,currentSessionId=``,nextSessions=[],selectedSessionLoading=false,sessionListLoading=false}={}){const normalizedSessionId=String(currentSessionId||``).trim();if(!normalizedSessionId||sessionIdExistsInList(normalizedSessionId,nextSessions))return false;return Boolean(sessionListLoading||createSessionRunning||selectedSessionLoading)}function selectedSessionIdForCurrentAlias({createSessionRunning=false,selectedSessionId=``,selectedSessionLoading=false,sessionListLoaded=true,sessionListLoadError=``,sessionListLoading=false,sessions=[]}={}){if(!sessionListLoaded||sessionListLoading||String(sessionListLoadError||``).trim())return null;const normalizedSessionId=String(selectedSessionId||``).trim();if(sessionIdExistsInList(normalizedSessionId,sessions))return normalizedSessionId;if(sessions.length>0||createSessionRunning||selectedSessionLoading)return null;return``}function sessionChangedReason(payload={}){return String(payload?.reason||``).trim()}function sessionListRealtimeShouldRefresh({payload={}}={},projectSlug=``){if(payload.projectSlug&&payload.projectSlug!==projectSlug)return false;if(vibe64SessionListRefreshRequested(payload))return true;const reason=sessionChangedReason(payload);if(reason===`assistant-routing-changed`&&payload.assistantRoutingRequest)return false;return!reason||!SESSION_LIST_IGNORED_REALTIME_REASONS.has(reason)}function refetchEndpointResource(resource){if(typeof resource?.query?.refetch===`function`)return resource.query.refetch({cancelRefetch:false});return resource?.reload?.()}function useVibe64SessionData({onTitleChange=null}={}){const notifyTitleChange=typeof onTitleChange===`function`?onTitleChange:()=>null;const queryClient=useQueryClient();const projectSlug=useVibe64ProjectSlug();const route=useRoute();const router=useRouter();const paths=usePaths();const selectionScope=computed(()=>String(projectSlug.value||``).trim());const sessionSelection=useVibe64SessionSelection({projectSlug});const selectedSessionId=sessionSelection.selectedId;const sessionsApiPath=computed(()=>paths.api(VIBE64_SESSIONS_API_SUFFIX,{surface:`app`}));const currentSessionApiPath=computed(()=>paths.api(VIBE64_CURRENT_SESSION_API_SUFFIX,{surface:`app`}));const sessionListQueryKey=computed(()=>vibe64SessionsQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value));const sessionListResource=useEndpointResource({fallbackLoadError:`Vibe64 sessions could not be loaded.`,path:sessionsApiPath,queryKey:sessionListQueryKey,readQuery:{limit:20},queryOptions:{refetchOnMount:false,refetchOnWindowFocus:false},requestRecoveryLabel:`Vibe64 sessions`,realtime:{events:[VIBE64_SESSION_CHANGED_EVENT,VIBE64_PROJECT_CHANGED_EVENT,`connect`],matches:event=>!event?.payload?.learningAttemptId&&sessionListRealtimeShouldRefresh(event,projectSlug.value)}});const sessionList=proxyRefs({unavailableItems:computed(()=>sessionListResource.data.value?.unavailableSessions||[]),items:computed(()=>{const payload=sessionListResource.data.value||{};return Array.isArray(payload.sessions)?payload.sessions:[]}),loadError:computed(()=>sessionListResource.loadError.value),isInitialLoading:computed(()=>sessionListResource.isInitialLoading.value),isLoading:computed(()=>sessionListResource.isLoading.value),pages:computed(()=>{const payload=sessionListResource.data.value;return payload&&typeof payload===`object`&&!Array.isArray(payload)?[payload]:[]}),reload:sessionListResource.reload,resource:sessionListResource});let emptySessionListObservedForProject=``;const createSessionCommand=useCommand({access:`never`,apiSuffix:VIBE64_SESSIONS_API_SUFFIX,buildCommandOptions:(_model,{context})=>({method:`POST`,path:context?.apiPath}),buildRawPayload:(_model,{context})=>vibe64RealtimeOriginPayload({assistantSelection:context?.assistantSelection||{},...context?.repositoryBranch?{repositoryBranch:context.repositoryBranch}:{},...context?.pullRequestNumber?{pullRequestNumber:context.pullRequestNumber}:{}}),fallbackRunError:`Vibe64 session could not be created.`,messages:{error:`Vibe64 session could not be created.`,success:`Vibe64 session created.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.sessions.create`,surfaceId:`app`,writeMethod:`POST`});const createSessionPending=ref(false);const createSessionRunning=computed(()=>createSessionPending.value);const updateCurrentSessionCommand=useCommand({access:`never`,apiSuffix:VIBE64_CURRENT_SESSION_API_SUFFIX,buildCommandOptions:(_model,{context})=>({method:`PUT`,path:String(context?.apiPath||``)}),buildRawPayload:(_model,{context})=>({sessionId:String(context?.sessionId||``).trim()}),fallbackRunError:`The current session shortcut could not be updated.`,messages:{error:`The current session shortcut could not be updated.`},ownershipFilter:ROUTE_VISIBILITY_PUBLIC,placementSource:`vibe64.sessions.current.update`,suppressSuccessMessage:true,surfaceId:`app`,writeMethod:`PUT`});const currentSessionPublisher=createVibe64CurrentSessionPublisher({async publish({apiPath,sessionId}){const response=await updateCurrentSessionCommand.run({apiPath,sessionId});if(!response||response.ok===false)throw new Error(String(response?.error||`The current session shortcut could not be updated.`))},onError(error,publication){vibe64SessionDebugLog(`client.sessionData.currentSession.error`,{error:vibe64SessionDebugError(error),sessionId:publication.sessionId})}});let sessionDataDisposed=false;onScopeDispose(()=>{sessionDataDisposed=true;currentSessionPublisher.stop()});const archiveAttempts=ref({});const agentActivityBySessionId=ref({});const sessions=computed(()=>{const items=new Map((sessionList.items||[]).map(session=>[session.sessionId,session]));for(const[id,attempt]of Object.entries(archiveAttempts.value))if(attempt.succeeded)items.delete(id);else items.set(id,{...items.get(id)||attempt.session,archiving:true,archiveStartedAt:attempt.startedAt});return visibleVibe64Sessions([...items.values()]).map(session=>{const operation=sessionArchiveOperation(session);return{...session,agentActivity:latestAgentTurnRealtimeOverlay(session.agentActivity,agentActivityBySessionId.value[session.sessionId]),archiveOperation:operation,archiveStartedAt:operation?.startedAt||session.archiveStartedAt,archiveError:operation?.status===`failed`?operation.error:``,archiving:Boolean(session.archiving||operation?.status===`running`||operation?.status!==`failed`&&session.metadata?.session_closing_reason===`archived`)}})});const availableSessions=computed(()=>sessions.value.filter(session=>!session.archiving));const selectedListSession=computed(()=>{return sessions.value.find(session=>session.sessionId===selectedSessionId.value)||null});const selectedSessionMissing=computed(()=>{const selectedId=String(selectedSessionId.value||``).trim();if(!selectedId||sessionList.pages.length<1||String(sessionList.loadError||``).trim()||sessionIdExistsInList(selectedId,sessions.value))return false;return true});const selectionRenewalPredecessorId=computed(()=>{const selectedId=String(selectedSessionId.value||``).trim();if(!selectedId||sessionList.pages.length<1||String(sessionList.loadError||``).trim())return``;if(sessionList.unavailableItems.some(session=>session.sessionId===selectedId))return``;if(selectedSessionMissing.value)return selectedId;return String(selectedListSession.value?.metadata?.renewed_from||``).trim()});const selectionRenewalPath=computed(()=>selectionRenewalPredecessorId.value?vibe64SessionPath(sessionsApiPath.value,selectionRenewalPredecessorId.value,`/renewal`):``);const selectionRenewalResource=useEndpointResource({enabled:computed(()=>Boolean(selectionRenewalPredecessorId.value)),fallbackLoadError:`The selected session renewal could not be checked.`,path:selectionRenewalPath,queryKey:computed(()=>[...vibe64SessionQueryKey(`app`,ROUTE_VISIBILITY_PUBLIC,projectSlug.value),selectionRenewalPredecessorId.value,`renewal`]),queryOptions:{refetchOnMount:`always`,refetchOnWindowFocus:false},readMethod:`GET`,realtime:{event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>mountedSessionRealtimeShouldRefresh({payload},selectionRenewalPredecessorId.value)},requestRecoveryLabel:`Selected session renewal`});const creationOptions=computed(()=>sessionList.pages?.[0]?.creation||{});const selectedSession=computed(()=>enrichVibe64SessionForDisplay(selectedListSession.value));const isSelectedSessionArchived=computed(()=>isArchivedVibe64Session(selectedSession.value||{}));const pageLoading=computed(()=>Boolean(sessionList.isLoading));const canCreateSession=computed(()=>{return creationOptions.value.canCreate===true});const createSessionVisible=computed(()=>creationOptions.value.showCreateAction===true);const createSessionTitle=computed(()=>{if(creationOptions.value.disabledReason)return String(creationOptions.value.disabledReason);if(creationOptions.value.canCreate!==true)return`Session creation is unavailable.`;return`Create a new Vibe64 session`});const selectedSessionTitle=computed(()=>{return vibe64SessionDisplayTitle(selectedSession.value||{})||`Session ${shortVibe64SessionId(selectedSessionId.value)}`});async function refreshSessionList(){return refetchEndpointResource(sessionListResource)}let refreshSessionDataInFlight=null;async function refreshSessionData(options={}){const reason=typeof options===`string`?options:String(options?.reason||``);if(refreshSessionDataInFlight){vibe64SessionDebugLog(`client.sessionData.refresh.join`,{reason,selectedSessionId:String(selectedSessionId.value||``)});return refreshSessionDataInFlight}const startedAtMs=Date.now();vibe64SessionDebugLog(`client.sessionData.refresh.start`,{reason,selectedSessionId:String(selectedSessionId.value||``)});refreshSessionDataInFlight=refreshSessionList();try{const result=await refreshSessionDataInFlight;vibe64SessionDebugLog(`client.sessionData.refresh.done`,{durationMs:vibe64SessionDebugDurationMs(startedAtMs),reason,selectedSessionId:String(selectedSessionId.value||``),sessionCount:sessions.value.length});return result}catch(error){vibe64SessionDebugLog(`client.sessionData.refresh.error`,{durationMs:vibe64SessionDebugDurationMs(startedAtMs),error:vibe64SessionDebugError(error),reason,selectedSessionId:String(selectedSessionId.value||``)});throw error}finally{refreshSessionDataInFlight=null}}function refreshSessionDataInBackground(options={}){refreshSessionData(options).catch(()=>{})}function selectSessionId(sessionId=``){const normalizedSessionId=String(sessionId||``).trim();if(sessions.value.some(session=>session.sessionId===normalizedSessionId&&session.archiving))return;vibe64SessionDebugLog(`client.sessionData.selectSession`,{fromSessionId:String(selectedSessionId.value||``),toSessionId:normalizedSessionId});if(normalizedSessionId)emptySessionListObservedForProject=``;sessionSelection.select(normalizedSessionId)}function clearSelectedSession(){emptySessionListObservedForProject=selectionScope.value;sessionSelection.clear()}function selectPreviousSession(sessionId){const navigation=sessions.value;const index=navigation.findIndex(session=>session.sessionId===sessionId);selectSessionId(navigation.slice(0,Math.max(0,index)).filter(session=>!session.archiving).at(-1)?.sessionId||availableSessions.value.at(-1)?.sessionId||``)}const archive=proxyRefs(useVibe64SessionDialogs({beginArchive(sessionId){archiveAttempts.value[sessionId]={startedAt:new Date().toISOString(),session:sessions.value.find(session=>session.sessionId===sessionId)};if(selectedSessionId.value===sessionId)selectPreviousSession(sessionId);return projectSlug.value},finishArchive(sessionId,succeeded,archiveProject){if(projectSlug.value!==archiveProject)return;if(succeeded)archiveAttempts.value[sessionId]={succeeded:true};else{delete archiveAttempts.value[sessionId];if(!selectedSessionId.value)selectSessionId(sessionId)}},isSelectedSessionArchived,refreshSessionData,selectedSessionId,selectedSessionTitle,sessionsApiPath}).archive);const archiveFeedback=useUiFeedback({source:`vibe64.sessions.archive.remote`});const shownArchiveFailures=new Set;watch(projectSlug,()=>{archiveAttempts.value={};agentActivityBySessionId.value={};shownArchiveFailures.clear()});useRealtimeEvent({event:VIBE64_SESSION_CHANGED_EVENT,matches:({payload={}}={})=>payload.projectSlug===projectSlug.value,onEvent:({payload={}}={})=>{const id=String(payload.sessionId||``);if(!id)return;const activity=agentTurnRealtimeOverlayFromPayload(payload,id);if(activity)agentActivityBySessionId.value[id]=latestAgentTurnRealtimeOverlay(agentActivityBySessionId.value[id],{active:activity.active,revision:activity.revision});if(payload.reason===`session-archiving`){const session=sessions.value.find(item=>item.sessionId===id);if(session)archiveAttempts.value[id]={session,startedAt:archiveAttempts.value[id]?.startedAt||new Date().toISOString()};if(selectedSessionId.value===id)selectPreviousSession(id)}else if(payload.reason===`session-archived`)archiveAttempts.value[id]={succeeded:true};else if(payload.reason===`session-archive-failed`){delete archiveAttempts.value[id];if(!selectedSessionId.value)selectSessionId(id)}}});watch(()=>sessionList.items,items=>{for(const id of Object.keys(agentActivityBySessionId.value))if(!items.some(session=>session.sessionId===id))delete agentActivityBySessionId.value[id];for(const[id,attempt]of Object.entries(archiveAttempts.value)){if(attempt.succeeded||archive.archivingSessionId===id)continue;const session=items.find(item=>item.sessionId===id);const operation=sessionArchiveOperation(session);if(!session||operation?.status===`failed`||operation?.status!==`running`&&session.metadata?.session_closing_reason!==`archived`)delete archiveAttempts.value[id]}});watch(sessions,items=>{for(const session of items){const key=`${session.sessionId}:${session.metadata?.session_archive_operation}`;if(!session.archiveError||shownArchiveFailures.has(key))continue;shownArchiveFailures.add(key);if(archive.archivingSessionId!==session.sessionId)archiveFeedback.error(new Error(session.archiveError))}},{immediate:true});let createSessionInFlight=null;async function createSession(assistantSelection={},{pullRequestNumber,repositoryBranch}={}){if(createSessionInFlight)return createSessionInFlight;const startedAtMs=Date.now();const creationProjectSlug=String(projectSlug.value||``).trim();const creationApiPath=sessionsApiPath.value;const creationQueryKey=[...sessionListQueryKey.value];vibe64SessionDebugLog(`client.sessionData.createSession.start`);createSessionPending.value=true;createSessionInFlight=(async()=>{try{const response=await createSessionCommand.run({assistantSelection,pullRequestNumber,repositoryBranch,apiPath:creationApiPath});if(!sessionDataDisposed&&creationProjectSlug===String(projectSlug.value||``).trim()){if(response?.creation&&response?.limits)queryClient.setQueryData(creationQueryKey,currentPayload=>{if(!currentPayload||typeof currentPayload!==`object`||Array.isArray(currentPayload))return currentPayload;const currentSessions=Array.isArray(currentPayload.sessions)?currentPayload.sessions:[];const createdSession=response.sessionId?Object.fromEntries(Object.entries(response).filter(([key])=>![`creation`,`limits`,`ok`].includes(key))):null;return{...currentPayload,creation:response.creation,limits:response.limits,...createdSession&&!currentSessions.some(item=>item?.sessionId===createdSession.sessionId)?{sessions:[...currentSessions,createdSession]}:{}}});if(response?.sessionId)selectSessionId(response.sessionId);refreshSessionDataInBackground({includeList:true,reason:`create-session`})}vibe64SessionDebugLog(`client.sessionData.createSession.done`,{...vibe64SessionDebugSummary(response||{}),code:String(response?.code||response?.errors?.[0]?.code||``),durationMs:vibe64SessionDebugDurationMs(startedAtMs),ok:response?.ok!==false});return response}catch(error){vibe64SessionDebugLog(`client.sessionData.createSession.error`,{durationMs:vibe64SessionDebugDurationMs(startedAtMs),error:vibe64SessionDebugError(error)});throw error}finally{createSessionPending.value=false;createSessionInFlight=null}})();return createSessionInFlight}let pendingRenewalNavigation=null;function syncRenewalSuccessorUrl(predecessorId,successorId){if(selectedSessionIdFromRoute(route)!==predecessorId)return;const capturedProject=String(projectSlug.value||``).trim();const capturedApiPath=sessionsApiPath.value;const predecessorUrl=route.fullPath;if(pendingRenewalNavigation?.predecessorUrl===predecessorUrl&&pendingRenewalNavigation?.successorId===successorId)return;const sameRenewal=()=>{const renewal=selectionRenewalResource.data.value?.renewal;return!sessionDataDisposed&&String(projectSlug.value||``).trim()===capturedProject&&sessionsApiPath.value===capturedApiPath&&selectedSessionId.value===successorId&&!selectionRenewalResource.loadError?.value&&!selectionRenewalResource.isInitialLoading?.value&&!selectionRenewalResource.isLoading?.value&&renewal?.status===`completed`&&String(renewal.sessionId||``).trim()===predecessorId&&String(renewal.successor?.sessionId||``).trim()===successorId&&renewedSuccessorSessionId({predecessorSessionId:predecessorId,sessions:availableSessions.value})===successorId};if(!sameRenewal())return;const target={path:route.path,hash:route.hash,query:{...route.query,session:successorId}};const targetUrl=router.resolve(target).fullPath;const navigation={predecessorUrl,successorId};const removeGuard=router.beforeResolve(to=>{if(to.fullPath===targetUrl&&(!sameRenewal()||route.fullPath!==predecessorUrl))return false});pendingRenewalNavigation=navigation;(async()=>{try{await router.replace(target)}catch(error){if(sameRenewal())vibe64SessionDebugLog(`client.sessionData.renewalNavigation.error`,{error:vibe64SessionDebugError(error),sessionId:successorId})}finally{removeGuard();if(pendingRenewalNavigation===navigation)pendingRenewalNavigation=null}})()}const selectionReconciliationState=computed(()=>{const nextSessions=availableSessions.value;return{createSessionRunning:createSessionRunning.value,currentSessionApiPath:currentSessionApiPath.value,selectionScope:selectionScope.value,selectionRenewal:selectionRenewalResource.data.value?.renewal||null,selectionRenewalLoadError:String(selectionRenewalResource.loadError?.value||``),selectionRenewalLoaded:Boolean(selectionRenewalResource.data.value&&typeof selectionRenewalResource.data.value===`object`&&!Array.isArray(selectionRenewalResource.data.value)),selectionRenewalLoading:Boolean(selectionRenewalResource.isInitialLoading?.value||selectionRenewalResource.isLoading?.value),selectionRenewalPredecessorId:selectionRenewalPredecessorId.value,projectSlug:String(projectSlug.value||``).trim(),selectedSessionMissing:selectedSessionMissing.value,nextSessions,selectedSessionId:String(selectedSessionId.value||``),sessionIds:nextSessions.map(session=>session.sessionId).join(`|`),sessionListInitialLoading:sessionList.isInitialLoading,sessionListLoaded:sessionList.pages.length>0,sessionListLoadError:String(sessionList.loadError||``),sessionListLoading:sessionList.isLoading}});watch(selectionReconciliationState,state=>{const nextSessions=state.nextSessions;if(sessions.value.some(session=>session.sessionId===state.selectedSessionId&&session.archiving)){selectPreviousSession(state.selectedSessionId);return}vibe64SessionDebugLog(`client.sessionData.sessions.changed`,{selectedSessionId:String(selectedSessionId.value||``),sessionCount:nextSessions.length});if(state.sessionListInitialLoading||state.sessionListLoadError||shouldPreserveSelectedSessionDuringRefresh({createSessionRunning:state.createSessionRunning,currentSessionId:state.selectedSessionId,nextSessions,sessionListLoading:state.sessionListLoading}))return;if(!state.selectedSessionId&&nextSessions.length===0)emptySessionListObservedForProject=state.selectionScope;if(state.selectionRenewalPredecessorId){if(state.selectionRenewalLoading||state.selectionRenewalLoadError||!state.selectionRenewalLoaded)return;const selectionRenewal=state.selectionRenewal;if(selectionRenewal&&String(selectionRenewal.sessionId||``).trim()===state.selectionRenewalPredecessorId){const renewalStatus=String(selectionRenewal.status||``).trim();if(renewalStatus===`completed`){const renewedSuccessorId=renewedSuccessorSessionId({predecessorSessionId:state.selectionRenewalPredecessorId,sessions:nextSessions});if(state.selectedSessionMissing){if(renewedSuccessorId)sessionSelection.selectAvailableId(nextSessions,{fallbackId:renewedSuccessorId,getId:session=>session.sessionId})}if(renewedSuccessorId&&selectedSessionId.value===renewedSuccessorId)syncRenewalSuccessorUrl(state.selectionRenewalPredecessorId,renewedSuccessorId);if(state.selectedSessionMissing)return}else if(state.selectedSessionMissing&&[`failed`,`running`].includes(renewalStatus))return;if([`failed`,`running`].includes(renewalStatus)){sessionSelection.select(state.selectionRenewalPredecessorId);return}}}if(!state.selectedSessionId&&emptySessionListObservedForProject===state.selectionScope)return;sessionSelection.selectAvailableId(nextSessions,{fallbackId:nextSessions.at(-1)?.sessionId||``,getId:session=>session.sessionId})},{immediate:true});watch(selectionReconciliationState,state=>{const publicationSessionId=selectedSessionIdForCurrentAlias({createSessionRunning:state.createSessionRunning,selectedSessionId:state.selectedSessionId,sessionListLoaded:state.sessionListLoaded,sessionListLoadError:state.sessionListLoadError,sessionListLoading:state.sessionListLoading,sessions:state.nextSessions});if(publicationSessionId===null||!state.currentSessionApiPath)return;currentSessionPublisher.request({apiPath:state.currentSessionApiPath,sessionId:publicationSessionId})},{flush:`post`,immediate:true});watch(selectedSessionTitle,title=>{notifyTitleChange(title||``)},{immediate:true});return{archive,canCreateSession,clearSelectedSession,createSession,createSessionCommand,createSessionRunning,createSessionVisible,createSessionTitle,isSelectedSessionArchived,availableSessions,pageLoading,refreshSessionData,selectSessionId,selectedSession,selectedSessionId,selectedSessionTitle,sessionList,sessions,sessionsApiPath,shortSessionId:shortVibe64SessionId,statusColor:vibe64SessionStatusColor,statusLabel:vibe64SessionStatusLabel,updateCurrentSessionCommand}}export{mountedSessionDetailRefreshReason as a,sessionRecordHasActiveAgentWork as c,sessionWithAgentTurnRealtimeOverlay as d,mountedSessionDetailLoadState as i,agentTurnRealtimeOverlayFromPayload as l,useVibe64SessionData as n,mountedSessionRealtimeShouldRefresh as o,latestSessionDetailRecord as r,mountedSessionRecord as s,sessionListRealtimeShouldRefresh as t,latestAgentTurnRealtimeOverlay as u};
@@ -1 +1 @@
1
- import{Ht as watch,On as unref,g as computed,vn as ref}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-Bp1ImZlz.js";import{M as selectedSessionStorageKey}from"./index-dNxr4Lg9.js";function browserSessionStorage(){if(typeof window===`undefined`||!window.sessionStorage)return null;return window.sessionStorage}function readStoredValue(storageKey=``){try{return String(browserSessionStorage()?.getItem(storageKey)||``)}catch{return``}}function writeStoredValue(storageKey=``,value=``){try{const storage=browserSessionStorage();if(!storage)return;const normalizedValue=String(value||``).trim();if(normalizedValue){storage.setItem(storageKey,normalizedValue);return}storage.removeItem(storageKey)}catch{}}function readStorageKey(storageKey=``){return String(typeof storageKey===`function`?storageKey():unref(storageKey)||``).trim()}function readPreferredId(preferredId=``){return String(typeof preferredId===`function`?preferredId():unref(preferredId)||``).trim()}function useStoredSelection({preferredId=``,storageKey=``,enabled=true}={}){const selectionEnabled=computed(()=>Boolean(typeof enabled===`function`?enabled():unref(enabled)));const activeStorageKey=computed(()=>readStorageKey(storageKey));const activePreferredId=computed(()=>readPreferredId(preferredId));const selectedId=ref(selectionEnabled.value?activePreferredId.value||readStoredValue(activeStorageKey.value):``);function select(id=``){if(!selectionEnabled.value)return;selectedId.value=String(id||``).trim();writeStoredValue(activeStorageKey.value,selectedId.value)}function clear(){select(``)}function selectAvailableId(items=[],{fallbackId=``,getId=item=>item?.id}={}){if(!selectionEnabled.value)return``;if(items.length===0){clear();return``}const itemIds=items.map(item=>String(getId(item)||``).trim()).filter(Boolean);if(itemIds.includes(selectedId.value)){select(selectedId.value);return selectedId.value}const preferredSelectionId=activePreferredId.value;if(itemIds.includes(preferredSelectionId)){select(preferredSelectionId);return selectedId.value}const rememberedId=readStoredValue(activeStorageKey.value);select(itemIds.includes(rememberedId)?rememberedId:String(fallbackId||``).trim());return selectedId.value}function capture(){const key=activeStorageKey.value;const admitted=selectionEnabled.value;return Object.freeze({select(id=``){if(!admitted)return;const value=String(id||``).trim();writeStoredValue(key,value);if(selectionEnabled.value&&activeStorageKey.value===key)selectedId.value=value}})}watch(selectionEnabled,nextEnabled=>{selectedId.value=nextEnabled?activePreferredId.value||readStoredValue(activeStorageKey.value):``},{flush:`sync`});watch(activeStorageKey,nextStorageKey=>{if(selectionEnabled.value)selectedId.value=activePreferredId.value||readStoredValue(nextStorageKey)});watch(activePreferredId,nextPreferredId=>{if(selectionEnabled.value&&nextPreferredId)selectedId.value=nextPreferredId});return{capture,clear,select,selectAvailableId,selectedId}}function selectedSessionIdFromRoute(route={}){const rawValue=route?.query?.session;const value=Array.isArray(rawValue)?rawValue[0]:rawValue;return String(value||``).trim()}function useVibe64SessionSelection({projectSlug=useVibe64ProjectSlug(),route=useRoute()}={}){return useStoredSelection({preferredId:computed(()=>selectedSessionIdFromRoute(route)),storageKey:computed(()=>selectedSessionStorageKey(unref(projectSlug)))})}export{useVibe64SessionSelection as n,selectedSessionIdFromRoute as t};
1
+ import{Ht as watch,On as unref,g as computed,vn as ref}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{g as useRoute}from"./useApi-BPuI6ZR9-CFWU1m37.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-B5ogg6jd.js";import{N as selectedSessionStorageKey}from"./index-Mxalhei8.js";function browserSessionStorage(){if(typeof window===`undefined`||!window.sessionStorage)return null;return window.sessionStorage}function readStoredValue(storageKey=``){try{return String(browserSessionStorage()?.getItem(storageKey)||``)}catch{return``}}function writeStoredValue(storageKey=``,value=``){try{const storage=browserSessionStorage();if(!storage)return;const normalizedValue=String(value||``).trim();if(normalizedValue){storage.setItem(storageKey,normalizedValue);return}storage.removeItem(storageKey)}catch{}}function readStorageKey(storageKey=``){return String(typeof storageKey===`function`?storageKey():unref(storageKey)||``).trim()}function readPreferredId(preferredId=``){return String(typeof preferredId===`function`?preferredId():unref(preferredId)||``).trim()}function useStoredSelection({preferredId=``,storageKey=``,enabled=true}={}){const selectionEnabled=computed(()=>Boolean(typeof enabled===`function`?enabled():unref(enabled)));const activeStorageKey=computed(()=>readStorageKey(storageKey));const activePreferredId=computed(()=>readPreferredId(preferredId));const selectedId=ref(selectionEnabled.value?activePreferredId.value||readStoredValue(activeStorageKey.value):``);function select(id=``){if(!selectionEnabled.value)return;selectedId.value=String(id||``).trim();writeStoredValue(activeStorageKey.value,selectedId.value)}function clear(){select(``)}function selectAvailableId(items=[],{fallbackId=``,getId=item=>item?.id}={}){if(!selectionEnabled.value)return``;if(items.length===0){clear();return``}const itemIds=items.map(item=>String(getId(item)||``).trim()).filter(Boolean);if(itemIds.includes(selectedId.value)){select(selectedId.value);return selectedId.value}const preferredSelectionId=activePreferredId.value;if(itemIds.includes(preferredSelectionId)){select(preferredSelectionId);return selectedId.value}const rememberedId=readStoredValue(activeStorageKey.value);select(itemIds.includes(rememberedId)?rememberedId:String(fallbackId||``).trim());return selectedId.value}function capture(){const key=activeStorageKey.value;const admitted=selectionEnabled.value;return Object.freeze({select(id=``){if(!admitted)return;const value=String(id||``).trim();writeStoredValue(key,value);if(selectionEnabled.value&&activeStorageKey.value===key)selectedId.value=value}})}watch(selectionEnabled,nextEnabled=>{selectedId.value=nextEnabled?activePreferredId.value||readStoredValue(activeStorageKey.value):``},{flush:`sync`});watch(activeStorageKey,nextStorageKey=>{if(selectionEnabled.value)selectedId.value=activePreferredId.value||readStoredValue(nextStorageKey)});watch(activePreferredId,nextPreferredId=>{if(selectionEnabled.value&&nextPreferredId)selectedId.value=nextPreferredId});return{capture,clear,select,selectAvailableId,selectedId}}function selectedSessionIdFromRoute(route={}){const rawValue=route?.query?.session;const value=Array.isArray(rawValue)?rawValue[0]:rawValue;return String(value||``).trim()}function useVibe64SessionSelection({projectSlug=useVibe64ProjectSlug(),route=useRoute()}={}){return useStoredSelection({preferredId:computed(()=>selectedSessionIdFromRoute(route)),storageKey:computed(()=>selectedSessionStorageKey(unref(projectSlug)))})}export{useVibe64SessionSelection as n,selectedSessionIdFromRoute as t};
@@ -1 +1 @@
1
- import{Ht as watch,On as unref,g as computed,pn as onScopeDispose,vn as ref}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{t as useEndpointResource}from"./useEndpointResource-DWoQ2keu.js";import{n as useRealtimeEvent}from"./useRealtimeEvent-Bwapstla.js";import{t as usePaths}from"./usePaths-Db88-HOm.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-Bp1ImZlz.js";var SYSTEM_GRAPH_API_SUFFIX=`/vibe64/system-graph`;var SYSTEM_GRAPH_SURFACE=`app`;function encodeSegment(value=``){return encodeURIComponent(String(value||``).trim())}function systemSessionPath(apiPath=``,sessionId=``,suffix=``){return`${apiPath}/sessions/${encodeSegment(sessionId)}${suffix}`}function systemQueryKey(projectSlug,sessionId=``,resource=``){return[`vibe64`,`system-graph`,projectSlug,String(sessionId||``),resource]}function cityAvailable(status={},kind=``){return status?.cities?.[kind]?.available===true}function useVibe64SystemGraph({active=true,reloadVersion=0,sessionId=``,projection=`native`}={}){const paths=usePaths();const projectSlug=useVibe64ProjectSlug();const normalizedSessionId=computed(()=>String(unref(sessionId)||``).trim());const enabled=computed(()=>Boolean(unref(active)&&normalizedSessionId.value));const apiPath=computed(()=>paths.api(SYSTEM_GRAPH_API_SUFFIX,{surface:SYSTEM_GRAPH_SURFACE}));const sessionPath=computed(()=>systemSessionPath(apiPath.value,normalizedSessionId.value));const statusResource=useEndpointResource({enabled,fallbackLoadError:`Architecture index status could not be loaded.`,path:computed(()=>`${sessionPath.value}/status`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`status`)),queryOptions:{refetchOnWindowFocus:false,retry:false},requestRecoveryLabel:`Architecture index status`});const systemStatus=computed(()=>statusResource.data.value||{});const machineEnabled=computed(()=>enabled.value&&projection===`native`&&cityAvailable(systemStatus.value,`machine`));const programEnabled=computed(()=>enabled.value&&projection===`native`&&cityAvailable(systemStatus.value,`program`));const machineResource=useEndpointResource({enabled:machineEnabled,fallbackLoadError:`Source facts could not be loaded.`,path:computed(()=>`${sessionPath.value}/cities/machine`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`machine-city`)),requestRecoveryLabel:`Source facts`});const architectureEnabled=computed(()=>enabled.value&&projection===`architecture`&&cityAvailable(systemStatus.value,`machine`));const architectureResource=useEndpointResource({enabled:architectureEnabled,path:computed(()=>`${sessionPath.value}/architecture`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`architecture`)),queryOptions:{refetchOnWindowFocus:false,retry:false},fallbackLoadError:`Architecture could not be loaded.`,requestRecoveryLabel:`Architecture`});const programResource=useEndpointResource({enabled:programEnabled,fallbackLoadError:`Program descriptions could not be loaded.`,path:computed(()=>`${sessionPath.value}/cities/program`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`program-city`)),requestRecoveryLabel:`Program descriptions`});const refreshResource=useEndpointResource({enabled:false,fallbackSaveError:`Architecture analysis could not be refreshed.`,path:computed(()=>`${sessionPath.value}/refresh`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`refresh`)),requestRecoveryLabel:`Refresh architecture analysis`,writeMethod:`POST`});const cancelResource=useEndpointResource({enabled:false,path:computed(()=>`${sessionPath.value}/refresh/cancel`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`refresh-cancel`)),writeMethod:`POST`,fallbackSaveError:`Architecture cancellation could not be confirmed.`});const subsystemResource=useEndpointResource({enabled:computed(()=>enabled.value&&projection===`native`),fallbackLoadError:`Subsystems could not be loaded.`,path:computed(()=>`${sessionPath.value}/subsystems`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`subsystems`)),requestRecoveryLabel:`Subsystems`});const refreshStatusResource=useEndpointResource({enabled,path:computed(()=>`${sessionPath.value}/refresh/status`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`refresh-status`)),queryOptions:{refetchOnMount:`always`,refetchOnWindowFocus:false,retry:false},realtime:{event:`vibe64.session.changed`,matches:({payload={}}={})=>payload.projectSlug===projectSlug.value&&payload.sessionId===normalizedSessionId.value&&payload.reason===`architecture-refresh`},fallbackLoadError:`Analysis progress is unavailable.`});const localRefreshOutput=ref(``);const scan=computed(()=>refreshStatusResource.data.value?.refresh||null);const refreshing=computed(()=>scan.value?.status===`running`||refreshResource.isSaving.value);const clock=ref(Date.now());let timer;watch(()=>enabled.value&&refreshing.value,running=>{clearInterval(timer);clock.value=Date.now();if(running)timer=setInterval(()=>{clock.value=Date.now()},1e3)},{immediate:true});onScopeDispose(()=>clearInterval(timer));useRealtimeEvent({enabled,event:`connect`,onEvent:()=>reload()});watch(()=>`${scan.value?.id}:${scan.value?.startedAt}:${scan.value?.status}`,()=>{const status=scan.value?.status;if(status===`running`&&!refreshResource.isSaving.value){refreshResource.mutation.reset();cancelResource.mutation.reset();localRefreshOutput.value=``}if(enabled.value&&status&&status!==`running`)reload()});const machineCity=computed(()=>machineResource.data.value?.city||null);const programCity=computed(()=>programResource.data.value?.city||null);const loading=computed(()=>Boolean(architectureResource.isLoading.value||statusResource.isLoading.value||machineResource.isLoading.value||programResource.isLoading.value));const error=computed(()=>cancelResource.saveError.value||(scan.value?.status===`failed`?scan.value.message:``)||(scan.value?.status!==`running`?refreshResource.saveError.value:``)||architectureResource.loadError.value||statusResource.loadError.value||machineResource.loadError.value||programResource.loadError.value||``);async function reload(){if(!enabled.value)return;await Promise.all([refreshStatusResource.reload(),statusResource.reload(),...projection===`native`?[subsystemResource.reload()]:[]]);const cityLoads=[];if(architectureEnabled.value)cityLoads.push(architectureResource.reload());if(machineEnabled.value)cityLoads.push(machineResource.reload());if(programEnabled.value)cityLoads.push(programResource.reload());await Promise.all(cityLoads)}watch([enabled,sessionPath,projectSlug],([isEnabled])=>{if(isEnabled)refreshStatusResource.reload()},{immediate:true});let lastReloadVersion=0;watch([enabled,()=>unref(reloadVersion)],([isEnabled,version])=>{if(isEnabled&&version!==lastReloadVersion){lastReloadVersion=version;reload()}},{immediate:true});async function refresh(){if(refreshing.value)return null;localRefreshOutput.value=``;try{const result=await refreshResource.save({},{method:`POST`,options:{timeoutMs:6e5}});await reload();return result}catch(error){localRefreshOutput.value=String(error?.details?.commandOutput||``);await refreshStatusResource.reload();if(!refreshResource.saveError.value)throw error;return null}}return{architecture:computed(()=>architectureResource.data.value?.architecture||null),cancelRefresh:()=>cancelResource.save({},{method:`POST`}),error,loading,machineCity,programCity,refresh,refreshing,refreshProgress:computed(()=>{if(!refreshing.value)return null;const progress=scan.value;const elapsedSeconds=progress?.status===`running`?Math.max(0,Math.floor((clock.value-progress.startedAt)/1e3)):0;return{message:refreshStatusResource.loadError.value?`Analysis continues; progress unavailable.`:progress?.status===`running`?progress.message:`Starting project analysis…`,elapsedSeconds}}),refreshOutput:computed(()=>scan.value?.commandOutput||localRefreshOutput.value),reload,subsystemMap:computed(()=>subsystemResource.data.value||null),subsystemError:subsystemResource.loadError,subsystemLoading:subsystemResource.isLoading,systemStatus}}export{useVibe64SystemGraph as t};
1
+ import{Ht as watch,On as unref,g as computed,pn as onScopeDispose,vn as ref}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{t as useEndpointResource}from"./useEndpointResource-Ds8EDBZ2.js";import{n as useRealtimeEvent}from"./useRealtimeEvent-DrOiU8lJ.js";import{t as usePaths}from"./usePaths-Db88-HOm.js";import{t as useVibe64ProjectSlug}from"./useVibe64ProjectScope-B5ogg6jd.js";var SYSTEM_GRAPH_API_SUFFIX=`/vibe64/system-graph`;var SYSTEM_GRAPH_SURFACE=`app`;function encodeSegment(value=``){return encodeURIComponent(String(value||``).trim())}function systemSessionPath(apiPath=``,sessionId=``,suffix=``){return`${apiPath}/sessions/${encodeSegment(sessionId)}${suffix}`}function systemQueryKey(projectSlug,sessionId=``,resource=``){return[`vibe64`,`system-graph`,projectSlug,String(sessionId||``),resource]}function cityAvailable(status={},kind=``){return status?.cities?.[kind]?.available===true}function useVibe64SystemGraph({active=true,reloadVersion=0,sessionId=``,projection=`native`}={}){const paths=usePaths();const projectSlug=useVibe64ProjectSlug();const normalizedSessionId=computed(()=>String(unref(sessionId)||``).trim());const enabled=computed(()=>Boolean(unref(active)&&normalizedSessionId.value));const apiPath=computed(()=>paths.api(SYSTEM_GRAPH_API_SUFFIX,{surface:SYSTEM_GRAPH_SURFACE}));const sessionPath=computed(()=>systemSessionPath(apiPath.value,normalizedSessionId.value));const statusResource=useEndpointResource({enabled,fallbackLoadError:`Architecture index status could not be loaded.`,path:computed(()=>`${sessionPath.value}/status`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`status`)),queryOptions:{refetchOnWindowFocus:false,retry:false},requestRecoveryLabel:`Architecture index status`});const systemStatus=computed(()=>statusResource.data.value||{});const machineEnabled=computed(()=>enabled.value&&projection===`native`&&cityAvailable(systemStatus.value,`machine`));const programEnabled=computed(()=>enabled.value&&projection===`native`&&cityAvailable(systemStatus.value,`program`));const machineResource=useEndpointResource({enabled:machineEnabled,fallbackLoadError:`Source facts could not be loaded.`,path:computed(()=>`${sessionPath.value}/cities/machine`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`machine-city`)),requestRecoveryLabel:`Source facts`});const architectureEnabled=computed(()=>enabled.value&&projection===`architecture`&&cityAvailable(systemStatus.value,`machine`));const architectureResource=useEndpointResource({enabled:architectureEnabled,path:computed(()=>`${sessionPath.value}/architecture`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`architecture`)),queryOptions:{refetchOnWindowFocus:false,retry:false},fallbackLoadError:`Architecture could not be loaded.`,requestRecoveryLabel:`Architecture`});const programResource=useEndpointResource({enabled:programEnabled,fallbackLoadError:`Program descriptions could not be loaded.`,path:computed(()=>`${sessionPath.value}/cities/program`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`program-city`)),requestRecoveryLabel:`Program descriptions`});const refreshResource=useEndpointResource({enabled:false,fallbackSaveError:`Architecture analysis could not be refreshed.`,path:computed(()=>`${sessionPath.value}/refresh`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`refresh`)),requestRecoveryLabel:`Refresh architecture analysis`,writeMethod:`POST`});const cancelResource=useEndpointResource({enabled:false,path:computed(()=>`${sessionPath.value}/refresh/cancel`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`refresh-cancel`)),writeMethod:`POST`,fallbackSaveError:`Architecture cancellation could not be confirmed.`});const subsystemResource=useEndpointResource({enabled:computed(()=>enabled.value&&projection===`native`),fallbackLoadError:`Subsystems could not be loaded.`,path:computed(()=>`${sessionPath.value}/subsystems`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`subsystems`)),requestRecoveryLabel:`Subsystems`});const refreshStatusResource=useEndpointResource({enabled,path:computed(()=>`${sessionPath.value}/refresh/status`),queryKey:computed(()=>systemQueryKey(projectSlug.value,normalizedSessionId.value,`refresh-status`)),queryOptions:{refetchOnMount:`always`,refetchOnWindowFocus:false,retry:false},realtime:{event:`vibe64.session.changed`,matches:({payload={}}={})=>payload.projectSlug===projectSlug.value&&payload.sessionId===normalizedSessionId.value&&payload.reason===`architecture-refresh`},fallbackLoadError:`Analysis progress is unavailable.`});const localRefreshOutput=ref(``);const scan=computed(()=>refreshStatusResource.data.value?.refresh||null);const refreshing=computed(()=>scan.value?.status===`running`||refreshResource.isSaving.value);const clock=ref(Date.now());let timer;watch(()=>enabled.value&&refreshing.value,running=>{clearInterval(timer);clock.value=Date.now();if(running)timer=setInterval(()=>{clock.value=Date.now()},1e3)},{immediate:true});onScopeDispose(()=>clearInterval(timer));useRealtimeEvent({enabled,event:`connect`,onEvent:()=>reload()});watch(()=>`${scan.value?.id}:${scan.value?.startedAt}:${scan.value?.status}`,()=>{const status=scan.value?.status;if(status===`running`&&!refreshResource.isSaving.value){refreshResource.mutation.reset();cancelResource.mutation.reset();localRefreshOutput.value=``}if(enabled.value&&status&&status!==`running`)reload()});const machineCity=computed(()=>machineResource.data.value?.city||null);const programCity=computed(()=>programResource.data.value?.city||null);const loading=computed(()=>Boolean(architectureResource.isLoading.value||statusResource.isLoading.value||machineResource.isLoading.value||programResource.isLoading.value));const error=computed(()=>cancelResource.saveError.value||(scan.value?.status===`failed`?scan.value.message:``)||(scan.value?.status!==`running`?refreshResource.saveError.value:``)||architectureResource.loadError.value||statusResource.loadError.value||machineResource.loadError.value||programResource.loadError.value||``);async function reload(){if(!enabled.value)return;await Promise.all([refreshStatusResource.reload(),statusResource.reload(),...projection===`native`?[subsystemResource.reload()]:[]]);const cityLoads=[];if(architectureEnabled.value)cityLoads.push(architectureResource.reload());if(machineEnabled.value)cityLoads.push(machineResource.reload());if(programEnabled.value)cityLoads.push(programResource.reload());await Promise.all(cityLoads)}watch([enabled,sessionPath,projectSlug],([isEnabled])=>{if(isEnabled)refreshStatusResource.reload()},{immediate:true});let lastReloadVersion=0;watch([enabled,()=>unref(reloadVersion)],([isEnabled,version])=>{if(isEnabled&&version!==lastReloadVersion){lastReloadVersion=version;reload()}},{immediate:true});async function refresh(){if(refreshing.value)return null;localRefreshOutput.value=``;try{const result=await refreshResource.save({},{method:`POST`,options:{timeoutMs:6e5}});await reload();return result}catch(error){localRefreshOutput.value=String(error?.details?.commandOutput||``);await refreshStatusResource.reload();if(!refreshResource.saveError.value)throw error;return null}}return{architecture:computed(()=>architectureResource.data.value?.architecture||null),cancelRefresh:()=>cancelResource.save({},{method:`POST`}),error,loading,machineCity,programCity,refresh,refreshing,refreshProgress:computed(()=>{if(!refreshing.value)return null;const progress=scan.value;const elapsedSeconds=progress?.status===`running`?Math.max(0,Math.floor((clock.value-progress.startedAt)/1e3)):0;return{message:refreshStatusResource.loadError.value?`Analysis continues; progress unavailable.`:progress?.status===`running`?progress.message:`Starting project analysis…`,elapsedSeconds}}),refreshOutput:computed(()=>scan.value?.commandOutput||localRefreshOutput.value),reload,subsystemMap:computed(()=>subsystemResource.data.value||null),subsystemError:subsystemResource.loadError,subsystemLoading:subsystemResource.isLoading,systemStatus}}export{useVibe64SystemGraph as t};
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/xterm-BrP-ENHg.css"])))=>i.map(i=>d[i]);
2
- import{Kn as withModifiers,Wn as vShow}from"./ripple-BVltMmyV.js";import{$n as normalizeProps,D as createVNode,E as createTextVNode,H as hasInjectionContext,Ht as watch,J as inject,On as unref,Pt as useId,Yt as withDirectives,Zn as normalizeClass,_ as createBaseVNode,an as getCurrentScope,b as createElementBlock,bt as renderList,ct as onMounted,er as normalizeStyle,et as mergeProps,g as computed,it as onBeforeUnmount,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,tt as nextTick,u as Teleport,v as createBlock,vn as ref,w as createSlots,xt as renderSlot,y as createCommentVNode,z as guardReactiveProps}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{t as __vitePreload}from"./preload-helper-BvdcsxN9.js";import{t as VChip}from"./VChip-CcI-Oo2J.js";import{l as mdiAlertCircleOutline}from"./mdi-CG9pWOSj.js";import{t as VBtn}from"./VBtn-B2MBK2DL.js";import{t as VSheet}from"./VSheet-DZWsu0kL.js";import{t as VDialog}from"./VDialog-Bu3EfKb1.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as StudioErrorNotice_default}from"./StudioErrorNotice-CSrUw1QV.js";import{r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as writeClipboardText}from"./clipboard-CZs9aH3L.js";var DYNAMIC_IMPORT_ERROR_PATTERNS=Object.freeze([/ChunkLoadError/iu,/Failed to fetch dynamically imported module/iu,/Importing a module script failed/iu,/error loading dynamically imported module/iu,/Loading chunk .+ failed/iu,/Unable to preload CSS/iu]);function isRecord(value){return Boolean(value&&typeof value===`object`&&!Array.isArray(value))}function errorText(error=null){return String(error?.message||error||``).trim()}function isDynamicImportError(error=null){const text=errorText(error);return Boolean(text&&DYNAMIC_IMPORT_ERROR_PATTERNS.some(pattern=>pattern.test(text)))}function dynamicImportErrorMessage(error=null,{label=`App module`,stale=isDynamicImportError(error)}={}){const moduleLabel=String(label||`App module`).trim();if(stale)return`${moduleLabel} did not download. The app may have been updated, or the network request failed.`;return`${moduleLabel} could not load.`}function createAsyncModuleRecoveryState({label=`App module`,message=``,retry=null}={}){return{attempt:0,error:null,label:String(label||`App module`).trim(),message:String(message||``).trim(),retry:typeof retry===`function`?retry:null,stale:false,visible:false}}function notifyAsyncModuleLoadError(state,error=null,{label=`App module`,message=``,retry=null,stale=isDynamicImportError(error)}={}){if(!isRecord(state))throw new TypeError(`notifyAsyncModuleLoadError requires a mutable recovery state object.`);const normalizedLabel=String(label||`App module`).trim();state.attempt=Number(state.attempt||0)+1;state.error=error||null;state.label=normalizedLabel;state.message=String(message||``).trim()||dynamicImportErrorMessage(error,{label:normalizedLabel,stale});state.retry=typeof retry===`function`?retry:null;state.stale=Boolean(stale);state.visible=true;return state}async function guardedReloadApp({browserWindow=typeof window!==`undefined`?window:null,fetchFn=typeof fetch===`function`?fetch:null,state=null,label=`App`,message=`The app cannot reload because the app server is not reachable. Restart the server, then click Retry or Reload.`}={}){if(!browserWindow?.location)return false;if(typeof fetchFn!==`function`){browserWindow.location.reload();return true}try{const response=await fetchFn(String(browserWindow.location.href||`/`),{cache:`no-store`,credentials:`same-origin`,headers:{Accept:`text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8`},method:`GET`});if(!response?.ok)throw new Error(`Reload check failed with HTTP ${response?.status||0}.`);browserWindow.location.reload();return true}catch(error){if(state)notifyAsyncModuleLoadError(state,error,{label,message,retry:state.retry,stale:false});return false}}function installAsyncModuleRecoveryHandlers({router=null,state,label=`App module`,onNotify=null,windowObject=typeof window!==`undefined`?window:null}={}){if(!isRecord(state))throw new TypeError(`installAsyncModuleRecoveryHandlers requires a mutable recovery state object.`);const disposers=[];const notify=typeof onNotify===`function`?onNotify:()=>null;if(router&&typeof router.onError===`function`){const removeRouterHandler=router.onError((error,to={})=>{if(!isDynamicImportError(error))return;const fullPath=String(to?.fullPath||``);notifyAsyncModuleLoadError(state,error,{label:`Page`,retry:fullPath&&typeof router.replace===`function`?()=>router.replace(fullPath):null,stale:true});notify(state)});if(typeof removeRouterHandler===`function`)disposers.push(removeRouterHandler)}if(windowObject&&typeof windowObject.addEventListener===`function`){const handler=event=>{const error=event?.reason;if(!isDynamicImportError(error))return;notifyAsyncModuleLoadError(state,error,{label,stale:true});notify(state)};windowObject.addEventListener(`unhandledrejection`,handler);disposers.push(()=>{windowObject.removeEventListener?.(`unhandledrejection`,handler)})}return Object.freeze({dispose(){for(const dispose of disposers.splice(0))dispose()}})}function ansiRegex({onlyFirst=false}={}){return new RegExp(`(?:\\u001B\\][^\\u0007\\u001B\\u009C]*(?:\\u0007|\\u001B\\u005C|\\u009C))|[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]`,onlyFirst?void 0:`g`)}var regex=ansiRegex();function stripAnsi(string){if(typeof string!==`string`)throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);if(!string.includes(`\x1B`)&&!string.includes(`›`))return string;return string.replace(regex,``)}var ESCAPE_CHARACTER=String.fromCharCode(27);var BELL_CHARACTER=String.fromCharCode(7);var STRING_TERMINATOR_CHARACTER=String.fromCharCode(156);var C1_CSI_CHARACTER=String.fromCharCode(155);var C1_TERMINAL_STRING_START_CHARACTERS=[144,152,157,158,159].map(code=>String.fromCharCode(code)).join(``);var STANDALONE_TERMINAL_CONTROL_CHARACTERS=[`${String.fromCharCode(0)}-${String.fromCharCode(8)}`,String.fromCharCode(11),String.fromCharCode(12),`${String.fromCharCode(14)}-${String.fromCharCode(31)}`,`${String.fromCharCode(127)}-${String.fromCharCode(159)}`].join(``);var OSC_PATTERN=new RegExp(`${ESCAPE_CHARACTER}\\][\\s\\S]*?(?:${BELL_CHARACTER}|${ESCAPE_CHARACTER}\\\\)`,`gu`);var TERMINAL_STRING_PATTERN=new RegExp(`${ESCAPE_CHARACTER}[PX^_][\\s\\S]*?(?:${BELL_CHARACTER}|${ESCAPE_CHARACTER}\\\\)`,`gu`);var CSI_PATTERN=new RegExp(`${ESCAPE_CHARACTER}\\[[0-?]*[ -/]*[@-~]`,`gu`);var C1_TERMINAL_STRING_PATTERN=new RegExp(`[${C1_TERMINAL_STRING_START_CHARACTERS}][\\s\\S]*?(?:${BELL_CHARACTER}|${STRING_TERMINATOR_CHARACTER}|${ESCAPE_CHARACTER}\\\\)`,`gu`);var C1_CSI_PATTERN=new RegExp(`${C1_CSI_CHARACTER}[0-?]*[ -/]*[@-~]`,`gu`);var INCOMPLETE_OSC_PATTERN=new RegExp(`${ESCAPE_CHARACTER}\\][\\s\\S]*$`,`gu`);var INCOMPLETE_TERMINAL_STRING_PATTERN=new RegExp(`${ESCAPE_CHARACTER}[PX^_][\\s\\S]*$`,`gu`);var INCOMPLETE_C1_TERMINAL_STRING_PATTERN=new RegExp(`[${C1_TERMINAL_STRING_START_CHARACTERS}][\\s\\S]*$`,`gu`);var INCOMPLETE_CSI_PATTERN=new RegExp(`${ESCAPE_CHARACTER}\\[[0-?]*[ -/]*$`,`gu`);var INCOMPLETE_C1_CSI_PATTERN=new RegExp(`${C1_CSI_CHARACTER}[0-?]*[ -/]*$`,`gu`);var ESCAPE_SEQUENCE_PATTERN=new RegExp(`${ESCAPE_CHARACTER}[ -/]*[@-~]`,`gu`);var STANDALONE_TERMINAL_CONTROL_PATTERN=new RegExp(`[${STANDALONE_TERMINAL_CONTROL_CHARACTERS}]`,`gu`);var TERMINAL_SUMMARY_MAX_CHARACTERS=512;function stripTerminalControlSequences(value){const source=String(value||``).replace(OSC_PATTERN,``).replace(TERMINAL_STRING_PATTERN,``).replace(CSI_PATTERN,``).replace(C1_TERMINAL_STRING_PATTERN,``).replace(C1_CSI_PATTERN,``).replace(INCOMPLETE_OSC_PATTERN,``).replace(INCOMPLETE_TERMINAL_STRING_PATTERN,``).replace(INCOMPLETE_C1_TERMINAL_STRING_PATTERN,``).replace(INCOMPLETE_CSI_PATTERN,``).replace(INCOMPLETE_C1_CSI_PATTERN,``).replace(ESCAPE_SEQUENCE_PATTERN,``);return stripAnsi(source).replace(STANDALONE_TERMINAL_CONTROL_PATTERN,``)}function terminalLastMeaningfulLine(value,{maxCharacters=TERMINAL_SUMMARY_MAX_CHARACTERS}={}){const rows=stripTerminalControlSequences(value).replace(/\r\n/gu,`
2
+ import{$n as normalizeProps,D as createVNode,E as createTextVNode,H as hasInjectionContext,Ht as watch,J as inject,On as unref,Pt as useId,Yt as withDirectives,Zn as normalizeClass,_ as createBaseVNode,an as getCurrentScope,b as createElementBlock,bt as renderList,ct as onMounted,er as normalizeStyle,et as mergeProps,g as computed,it as onBeforeUnmount,mt as openBlock,o as Fragment,pn as onScopeDispose,qt as withCtx,tr as toDisplayString,tt as nextTick,u as Teleport,v as createBlock,vn as ref,w as createSlots,xt as renderSlot,y as createCommentVNode,z as guardReactiveProps}from"./runtime-core.esm-bundler-DGXg_mpN.js";import{ar as vShow,sr as withModifiers}from"./ripple-EFNA8EBu.js";import{t as __vitePreload}from"./preload-helper-BvdcsxN9.js";import{t as VChip}from"./VChip-VVdtjfq-.js";import{f as mdiAlertCircleOutline}from"./mdi-Bt90Ns76.js";import{t as VBtn}from"./VBtn-BhVEwXLX.js";import{t as VSheet}from"./VSheet-DxYEFfnM.js";import{t as VDialog}from"./VDialog-CQDhjRiV.js";import{t as _plugin_vue_export_helper_default}from"./_plugin-vue_export-helper-DNW4j-dv.js";import{t as StudioErrorNotice_default}from"./StudioErrorNotice-C_jbvp9V.js";import{r as writeLocalStorageJson,t as readLocalStorageJson}from"./browserLocalStorage-B4C7rHrs.js";import{t as writeClipboardText}from"./clipboard-CZs9aH3L.js";var DYNAMIC_IMPORT_ERROR_PATTERNS=Object.freeze([/ChunkLoadError/iu,/Failed to fetch dynamically imported module/iu,/Importing a module script failed/iu,/error loading dynamically imported module/iu,/Loading chunk .+ failed/iu,/Unable to preload CSS/iu]);function isRecord(value){return Boolean(value&&typeof value===`object`&&!Array.isArray(value))}function errorText(error=null){return String(error?.message||error||``).trim()}function isDynamicImportError(error=null){const text=errorText(error);return Boolean(text&&DYNAMIC_IMPORT_ERROR_PATTERNS.some(pattern=>pattern.test(text)))}function dynamicImportErrorMessage(error=null,{label=`App module`,stale=isDynamicImportError(error)}={}){const moduleLabel=String(label||`App module`).trim();if(stale)return`${moduleLabel} did not download. The app may have been updated, or the network request failed.`;return`${moduleLabel} could not load.`}function createAsyncModuleRecoveryState({label=`App module`,message=``,retry=null}={}){return{attempt:0,error:null,label:String(label||`App module`).trim(),message:String(message||``).trim(),retry:typeof retry===`function`?retry:null,stale:false,visible:false}}function notifyAsyncModuleLoadError(state,error=null,{label=`App module`,message=``,retry=null,stale=isDynamicImportError(error)}={}){if(!isRecord(state))throw new TypeError(`notifyAsyncModuleLoadError requires a mutable recovery state object.`);const normalizedLabel=String(label||`App module`).trim();state.attempt=Number(state.attempt||0)+1;state.error=error||null;state.label=normalizedLabel;state.message=String(message||``).trim()||dynamicImportErrorMessage(error,{label:normalizedLabel,stale});state.retry=typeof retry===`function`?retry:null;state.stale=Boolean(stale);state.visible=true;return state}async function guardedReloadApp({browserWindow=typeof window!==`undefined`?window:null,fetchFn=typeof fetch===`function`?fetch:null,state=null,label=`App`,message=`The app cannot reload because the app server is not reachable. Restart the server, then click Retry or Reload.`}={}){if(!browserWindow?.location)return false;if(typeof fetchFn!==`function`){browserWindow.location.reload();return true}try{const response=await fetchFn(String(browserWindow.location.href||`/`),{cache:`no-store`,credentials:`same-origin`,headers:{Accept:`text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8`},method:`GET`});if(!response?.ok)throw new Error(`Reload check failed with HTTP ${response?.status||0}.`);browserWindow.location.reload();return true}catch(error){if(state)notifyAsyncModuleLoadError(state,error,{label,message,retry:state.retry,stale:false});return false}}function installAsyncModuleRecoveryHandlers({router=null,state,label=`App module`,onNotify=null,windowObject=typeof window!==`undefined`?window:null}={}){if(!isRecord(state))throw new TypeError(`installAsyncModuleRecoveryHandlers requires a mutable recovery state object.`);const disposers=[];const notify=typeof onNotify===`function`?onNotify:()=>null;if(router&&typeof router.onError===`function`){const removeRouterHandler=router.onError((error,to={})=>{if(!isDynamicImportError(error))return;const fullPath=String(to?.fullPath||``);notifyAsyncModuleLoadError(state,error,{label:`Page`,retry:fullPath&&typeof router.replace===`function`?()=>router.replace(fullPath):null,stale:true});notify(state)});if(typeof removeRouterHandler===`function`)disposers.push(removeRouterHandler)}if(windowObject&&typeof windowObject.addEventListener===`function`){const handler=event=>{const error=event?.reason;if(!isDynamicImportError(error))return;notifyAsyncModuleLoadError(state,error,{label,stale:true});notify(state)};windowObject.addEventListener(`unhandledrejection`,handler);disposers.push(()=>{windowObject.removeEventListener?.(`unhandledrejection`,handler)})}return Object.freeze({dispose(){for(const dispose of disposers.splice(0))dispose()}})}function ansiRegex({onlyFirst=false}={}){return new RegExp(`(?:\\u001B\\][^\\u0007\\u001B\\u009C]*(?:\\u0007|\\u001B\\u005C|\\u009C))|[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]`,onlyFirst?void 0:`g`)}var regex=ansiRegex();function stripAnsi(string){if(typeof string!==`string`)throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);if(!string.includes(`\x1B`)&&!string.includes(`›`))return string;return string.replace(regex,``)}var ESCAPE_CHARACTER=String.fromCharCode(27);var BELL_CHARACTER=String.fromCharCode(7);var STRING_TERMINATOR_CHARACTER=String.fromCharCode(156);var C1_CSI_CHARACTER=String.fromCharCode(155);var C1_TERMINAL_STRING_START_CHARACTERS=[144,152,157,158,159].map(code=>String.fromCharCode(code)).join(``);var STANDALONE_TERMINAL_CONTROL_CHARACTERS=[`${String.fromCharCode(0)}-${String.fromCharCode(8)}`,String.fromCharCode(11),String.fromCharCode(12),`${String.fromCharCode(14)}-${String.fromCharCode(31)}`,`${String.fromCharCode(127)}-${String.fromCharCode(159)}`].join(``);var OSC_PATTERN=new RegExp(`${ESCAPE_CHARACTER}\\][\\s\\S]*?(?:${BELL_CHARACTER}|${ESCAPE_CHARACTER}\\\\)`,`gu`);var TERMINAL_STRING_PATTERN=new RegExp(`${ESCAPE_CHARACTER}[PX^_][\\s\\S]*?(?:${BELL_CHARACTER}|${ESCAPE_CHARACTER}\\\\)`,`gu`);var CSI_PATTERN=new RegExp(`${ESCAPE_CHARACTER}\\[[0-?]*[ -/]*[@-~]`,`gu`);var C1_TERMINAL_STRING_PATTERN=new RegExp(`[${C1_TERMINAL_STRING_START_CHARACTERS}][\\s\\S]*?(?:${BELL_CHARACTER}|${STRING_TERMINATOR_CHARACTER}|${ESCAPE_CHARACTER}\\\\)`,`gu`);var C1_CSI_PATTERN=new RegExp(`${C1_CSI_CHARACTER}[0-?]*[ -/]*[@-~]`,`gu`);var INCOMPLETE_OSC_PATTERN=new RegExp(`${ESCAPE_CHARACTER}\\][\\s\\S]*$`,`gu`);var INCOMPLETE_TERMINAL_STRING_PATTERN=new RegExp(`${ESCAPE_CHARACTER}[PX^_][\\s\\S]*$`,`gu`);var INCOMPLETE_C1_TERMINAL_STRING_PATTERN=new RegExp(`[${C1_TERMINAL_STRING_START_CHARACTERS}][\\s\\S]*$`,`gu`);var INCOMPLETE_CSI_PATTERN=new RegExp(`${ESCAPE_CHARACTER}\\[[0-?]*[ -/]*$`,`gu`);var INCOMPLETE_C1_CSI_PATTERN=new RegExp(`${C1_CSI_CHARACTER}[0-?]*[ -/]*$`,`gu`);var ESCAPE_SEQUENCE_PATTERN=new RegExp(`${ESCAPE_CHARACTER}[ -/]*[@-~]`,`gu`);var STANDALONE_TERMINAL_CONTROL_PATTERN=new RegExp(`[${STANDALONE_TERMINAL_CONTROL_CHARACTERS}]`,`gu`);var TERMINAL_SUMMARY_MAX_CHARACTERS=512;function stripTerminalControlSequences(value){const source=String(value||``).replace(OSC_PATTERN,``).replace(TERMINAL_STRING_PATTERN,``).replace(CSI_PATTERN,``).replace(C1_TERMINAL_STRING_PATTERN,``).replace(C1_CSI_PATTERN,``).replace(INCOMPLETE_OSC_PATTERN,``).replace(INCOMPLETE_TERMINAL_STRING_PATTERN,``).replace(INCOMPLETE_C1_TERMINAL_STRING_PATTERN,``).replace(INCOMPLETE_CSI_PATTERN,``).replace(INCOMPLETE_C1_CSI_PATTERN,``).replace(ESCAPE_SEQUENCE_PATTERN,``);return stripAnsi(source).replace(STANDALONE_TERMINAL_CONTROL_PATTERN,``)}function terminalLastMeaningfulLine(value,{maxCharacters=TERMINAL_SUMMARY_MAX_CHARACTERS}={}){const rows=stripTerminalControlSequences(value).replace(/\r\n/gu,`
3
3
  `).split(`
4
4
  `);for(let rowIndex=rows.length-1;rowIndex>=0;rowIndex-=1){const replacements=rows[rowIndex].split(`\r`);for(let replacementIndex=replacements.length-1;replacementIndex>=0;replacementIndex-=1){const line=replacements[replacementIndex].trim();if(line)return boundedTerminalSummaryLine(line,maxCharacters)}}return``}function boundedTerminalSummaryLine(value,maxCharacters){const normalizedMaximum=Math.max(1,Math.floor(Number(maxCharacters)||0));const characters=Array.from(String(value||``));if(characters.length<=normalizedMaximum)return characters.join(``);if(normalizedMaximum===1)return`…`;return`${characters.slice(0,normalizedMaximum-1).join(``)}…`}var _hoisted_1$1={class:`vibe64-terminal-surface__heading`};var _hoisted_2={class:`vibe64-terminal-surface__title`};var _hoisted_3={key:0,class:`vibe64-terminal-surface__subtitle`};var _hoisted_4={key:0,class:`vibe64-terminal-surface__before-terminal`};var _hoisted_5={key:1,class:`vibe64-terminal-surface__summary`,"aria-live":`off`};var _hoisted_6={key:0,class:`vibe64-terminal-surface__summary-stage`};var _hoisted_7={key:1,class:`vibe64-terminal-surface__summary-separator`,"aria-hidden":`true`};var _hoisted_8={class:`vibe64-terminal-surface__summary-line`};var _hoisted_9={key:2,class:`d-sr-only`,role:`alert`};var _hoisted_10={class:`vibe64-terminal-surface__stage`};var _hoisted_11={class:`vibe64-terminal-surface__overlay`};var _hoisted_12=[`aria-label`];var _hoisted_13={key:0,class:`vibe64-terminal-surface__footer`};var _hoisted_14={class:`vibe64-terminal-surface__command`};var _sfc_main$1=Object.assign({inheritAttrs:false},{__name:`Vibe64TerminalSurface`,props:{bodyMode:{default:`terminal`,validator:value=>[`log`,`terminal`].includes(value),type:String},closeLabel:{default:`Close`,type:String},collapsible:{default:true,type:Boolean},commandPreview:{default:``,type:String},draggable:{default:false,type:Boolean},error:{default:``,type:String},errorTitle:{default:`Terminal needs attention`,type:String},exited:{default:false,type:Boolean},expanded:{default:false,type:Boolean},fill:{default:false,type:Boolean},focused:{default:false,type:Boolean},height:{default:`clamp(18rem, 48vh, 34rem)`,type:String},mobileTakeover:{default:false,type:Boolean},openErrorDetails:{default:false,type:Boolean},output:{default:``,type:String},retryable:{default:false,type:Boolean},selectedText:{default:``,type:String},sessionId:{default:``,type:String},showClose:{default:true,type:Boolean},showCopy:{default:false,type:Boolean},showInterrupt:{default:true,type:Boolean},showSummary:{default:true,type:Boolean},starting:{default:false,type:Boolean},stage:{default:``,type:String},status:{default:``,type:String},subtitle:{default:``,type:String},summaryLine:{default:``,type:String},terminalHostRef:{default:null,type:Function},title:{default:`Terminal`,type:String}},emits:[`close`,`copy`,`drag-start`,`focus`,`interrupt`,`retry`,`toggle-expanded`],setup(__props,{emit:__emit}){const props=__props;const emit=__emit;const componentId=useId();const expansionToggle=ref(null);const takeoverRoot=ref(null);const mobileTakeoverViewport=ref(false);const mobileFullscreenDismissed=ref(false);const errorDetailsOpen=ref(false);const bodyId=`vibe64-terminal-body-${componentId}`;const errorDetailsId=`vibe64-terminal-error-details-${componentId}`;const collapsedSummaryLine=computed(()=>String(props.summaryLine||``).trim()||terminalLastMeaningfulLine(props.output));const surfaceExpanded=computed(()=>!props.collapsible||props.expanded);const mobileTakeoverActive=computed(()=>Boolean(props.mobileTakeover&&surfaceExpanded.value&&mobileTakeoverViewport.value&&!mobileFullscreenDismissed.value));const errorDetailsToggleLabel=computed(()=>errorDetailsOpen.value?`Hide terminal error details`:`Show terminal error details`);const hostStyle=computed(()=>({"--vibe64-terminal-host-height":props.height}));function toggleErrorDetails(){errorDetailsOpen.value=!errorDetailsOpen.value}function retry(){errorDetailsOpen.value=false;emit(`retry`)}function toggleExpanded(){const collapsing=surfaceExpanded.value;if(!collapsing&&props.mobileTakeover&&mobileTakeoverViewport.value&&typeof document!==`undefined`){const toggle=expansionToggle.value?.$el||expansionToggle.value;takeoverPendingRestoreTarget=document.activeElement!==document.body?document.activeElement:toggle}emit(`toggle-expanded`);if(collapsing)nextTick(()=>{(expansionToggle.value?.$el||expansionToggle.value)?.focus?.({preventScroll:true})})}function toggleMobileFullscreen(){const target=expansionToggle.value?.$el||expansionToggle.value;takeoverPendingRestoreTarget=target;mobileFullscreenDismissed.value=!mobileFullscreenDismissed.value;nextTick(()=>target?.focus?.({preventScroll:true}))}function handleTakeoverKeydown(event){if(!mobileTakeoverActive.value)return;if(event.key===`Escape`&&props.collapsible){event.preventDefault();emit(`toggle-expanded`);return}if(event.key!==`Tab`)return;const root=takeoverRoot.value?.$el||takeoverRoot.value;const focusable=Array.from(root?.querySelectorAll?.(`button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex='-1'])`)||[]).filter(element=>element.getAttribute(`aria-hidden`)!==`true`);if(!focusable.length){event.preventDefault();root?.focus?.({preventScroll:true});return}const first=focusable[0];const last=focusable[focusable.length-1];if(event.shiftKey&&document.activeElement===first){event.preventDefault();last.focus({preventScroll:true})}else if(!event.shiftKey&&document.activeElement===last){event.preventDefault();first.focus({preventScroll:true})}}let mobileTakeoverMediaQuery=null;let takeoverPendingRestoreTarget=null;let takeoverRestoreTarget=null;let takeoverBodyOverflow=``;let takeoverInertRecords=[];let takeoverApplied=false;function updateMobileTakeoverViewport(event=mobileTakeoverMediaQuery){mobileTakeoverViewport.value=Boolean(event?.matches)}async function applyMobileTakeover(){await nextTick();if(!mobileTakeoverActive.value||takeoverApplied||typeof document===`undefined`)return;const root=takeoverRoot.value?.$el||takeoverRoot.value;if(!root)return;takeoverApplied=true;takeoverRestoreTarget=takeoverPendingRestoreTarget||document.activeElement;takeoverPendingRestoreTarget=null;takeoverBodyOverflow=document.body.style.overflow;document.body.style.overflow=`hidden`;takeoverInertRecords=Array.from(document.body.children).filter(element=>element!==root&&!element.contains(root)).map(element=>({element,inert:element.inert===true}));for(const record of takeoverInertRecords)record.element.inert=true;(expansionToggle.value?.$el||expansionToggle.value||root)?.focus?.({preventScroll:true})}function releaseMobileTakeover({restoreFocus=true}={}){if(!takeoverApplied)return;takeoverApplied=false;for(const record of takeoverInertRecords)if(record.element?.isConnected)record.element.inert=record.inert;takeoverInertRecords=[];if(typeof document!==`undefined`)document.body.style.overflow=takeoverBodyOverflow;const restoreTarget=takeoverRestoreTarget;takeoverRestoreTarget=null;takeoverPendingRestoreTarget=null;if(restoreFocus)nextTick(()=>restoreTarget?.isConnected&&restoreTarget.focus?.({preventScroll:true}))}watch(mobileTakeoverActive,active=>{if(active)applyMobileTakeover();else releaseMobileTakeover()},{flush:`post`});onMounted(()=>{if(typeof window===`undefined`||typeof window.matchMedia!==`function`)return;mobileTakeoverMediaQuery=window.matchMedia(`(max-width: 720px)`);updateMobileTakeoverViewport();if(typeof mobileTakeoverMediaQuery.addEventListener===`function`)mobileTakeoverMediaQuery.addEventListener(`change`,updateMobileTakeoverViewport);else mobileTakeoverMediaQuery.addListener?.(updateMobileTakeoverViewport)});onBeforeUnmount(()=>{releaseMobileTakeover({restoreFocus:false});if(typeof mobileTakeoverMediaQuery?.removeEventListener===`function`)mobileTakeoverMediaQuery.removeEventListener(`change`,updateMobileTakeoverViewport);else mobileTakeoverMediaQuery?.removeListener?.(updateMobileTakeoverViewport);mobileTakeoverMediaQuery=null});watch([()=>props.error,()=>props.openErrorDetails],([error,openErrorDetails])=>{errorDetailsOpen.value=Boolean(error&&openErrorDetails)},{immediate:true});watch(()=>props.starting,starting=>{if(starting)errorDetailsOpen.value=false});return(_ctx,_cache)=>{return openBlock(),createBlock(Teleport,{disabled:!mobileTakeoverActive.value,to:`body`},[createVNode(VSheet,mergeProps(_ctx.$attrs,{ref_key:`takeoverRoot`,ref:takeoverRoot,"aria-busy":__props.starting?`true`:void 0,"aria-label":__props.title,"aria-modal":mobileTakeoverActive.value?`true`:void 0,rounded:`lg`,color:`surface-light`,class:[`vibe64-terminal-surface`,{"vibe64-terminal-surface--collapsed":!surfaceExpanded.value,"vibe64-terminal-surface--draggable":__props.draggable,"vibe64-terminal-surface--fill":__props.fill,"vibe64-terminal-surface--focused":__props.focused,"vibe64-terminal-surface--mobile-takeover":mobileTakeoverActive.value}],role:mobileTakeoverActive.value?`dialog`:`region`,tabindex:mobileTakeoverActive.value?-1:void 0,onKeydown:handleTakeoverKeydown}),{default:withCtx(()=>[createBaseVNode(`header`,{class:`vibe64-terminal-surface__header`,onPointerdown:_cache[4]||(_cache[4]=$event=>__props.draggable&&_ctx.$emit(`drag-start`,$event))},[createBaseVNode(`div`,_hoisted_1$1,[renderSlot(_ctx.$slots,`heading`,{title:__props.title,subtitle:__props.subtitle},()=>[createBaseVNode(`strong`,_hoisted_2,toDisplayString(__props.title),1),__props.subtitle?(openBlock(),createElementBlock(`span`,_hoisted_3,toDisplayString(__props.subtitle),1)):createCommentVNode(``,true)],true)]),createBaseVNode(`div`,{class:`vibe64-terminal-surface__actions`,onPointerdown:_cache[3]||(_cache[3]=withModifiers(()=>{},[`stop`]))},[__props.status&&(!surfaceExpanded.value||__props.bodyMode===`log`)?(openBlock(),createBlock(VChip,{key:0,"aria-atomic":`true`,"aria-live":`polite`,role:`status`,size:`x-small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.status),1)]),_:1})):createCommentVNode(``,true),__props.error?(openBlock(),createBlock(VBtn,{key:1,"aria-controls":errorDetailsId,"aria-expanded":String(errorDetailsOpen.value),"aria-label":errorDetailsToggleLabel.value,class:`vibe64-terminal-surface__error-toggle`,color:`error`,icon:unref(mdiAlertCircleOutline),size:`small`,title:errorDetailsToggleLabel.value,variant:`tonal`,onClick:toggleErrorDetails},null,8,[`aria-expanded`,`aria-label`,`icon`,`title`])):createCommentVNode(``,true),renderSlot(_ctx.$slots,`actions-before`,{},void 0,true),__props.retryable?(openBlock(),createBlock(VBtn,{key:2,"aria-busy":__props.starting?`true`:void 0,class:`vibe64-terminal-surface__retry`,color:`primary`,disabled:__props.starting,size:`small`,variant:`flat`,onClick:retry},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.starting?`Retrying…`:`Retry`),1)]),_:1},8,[`aria-busy`,`disabled`])):createCommentVNode(``,true),__props.showCopy?(openBlock(),createBlock(VBtn,{key:3,disabled:!__props.selectedText&&!__props.output,size:`small`,variant:`text`,onClick:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`copy`))},{default:withCtx(()=>[..._cache[7]||(_cache[7]=[createTextVNode(` Copy `,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true),__props.showInterrupt?(openBlock(),createBlock(VBtn,{key:4,disabled:!__props.sessionId||__props.exited,size:`small`,variant:`text`,onClick:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`interrupt`))},{default:withCtx(()=>[..._cache[8]||(_cache[8]=[createTextVNode(` Ctrl-C `,-1)])]),_:1},8,[`disabled`])):createCommentVNode(``,true),__props.collapsible?(openBlock(),createBlock(VBtn,{key:5,ref_key:`expansionToggle`,ref:expansionToggle,"aria-controls":bodyId,"aria-expanded":String(surfaceExpanded.value),"aria-label":surfaceExpanded.value?void 0:`Show ${__props.title} details`,size:`small`,variant:`text`,onClick:toggleExpanded},{default:withCtx(()=>[createTextVNode(toDisplayString(surfaceExpanded.value?`Collapse`:`Expand`),1)]),_:1},8,[`aria-expanded`,`aria-label`])):createCommentVNode(``,true),__props.mobileTakeover&&mobileTakeoverViewport.value&&!__props.collapsible?(openBlock(),createBlock(VBtn,{key:6,ref_key:`expansionToggle`,ref:expansionToggle,size:`small`,variant:`text`,onClick:toggleMobileFullscreen},{default:withCtx(()=>[createTextVNode(toDisplayString(mobileTakeoverActive.value?`Exit full screen`:`Full screen`),1)]),_:1},512)):createCommentVNode(``,true),__props.showClose?(openBlock(),createBlock(VBtn,{key:7,size:`small`,variant:`text`,onClick:_cache[2]||(_cache[2]=$event=>_ctx.$emit(`close`))},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.closeLabel),1)]),_:1})):createCommentVNode(``,true),renderSlot(_ctx.$slots,`actions-after`,{},void 0,true)],32)],32),_ctx.$slots[`before-terminal`]?(openBlock(),createElementBlock(`div`,_hoisted_4,[renderSlot(_ctx.$slots,`before-terminal`,{},void 0,true)])):createCommentVNode(``,true),__props.showSummary&&!surfaceExpanded.value?(openBlock(),createElementBlock(`div`,_hoisted_5,[__props.stage?(openBlock(),createElementBlock(`span`,_hoisted_6,toDisplayString(__props.stage),1)):createCommentVNode(``,true),__props.stage&&collapsedSummaryLine.value?(openBlock(),createElementBlock(`span`,_hoisted_7,`·`)):createCommentVNode(``,true),createBaseVNode(`span`,_hoisted_8,toDisplayString(collapsedSummaryLine.value||`Waiting for output…`),1)])):createCommentVNode(``,true),__props.error?(openBlock(),createElementBlock(`span`,_hoisted_9,toDisplayString(__props.errorTitle)+`. `+toDisplayString(__props.error),1)):createCommentVNode(``,true),__props.error?withDirectives((openBlock(),createElementBlock(`div`,{key:3,id:errorDetailsId,class:`vibe64-terminal-surface__error-details`},[createVNode(StudioErrorNotice_default,{title:__props.errorTitle,error:__props.error,compact:``},createSlots({_:2},[_ctx.$slots[`error-actions`]?{name:`actions`,fn:withCtx(()=>[renderSlot(_ctx.$slots,`error-actions`,{},void 0,true)]),key:`0`}:void 0]),1032,[`title`,`error`])],512)),[[vShow,errorDetailsOpen.value]]):createCommentVNode(``,true),withDirectives(createBaseVNode(`div`,{id:bodyId,class:`vibe64-terminal-surface__body`},[createBaseVNode(`div`,_hoisted_10,[createBaseVNode(`div`,_hoisted_11,[renderSlot(_ctx.$slots,`overlay`,{},void 0,true)]),__props.bodyMode===`terminal`?(openBlock(),createElementBlock(`div`,{key:0,class:`vibe64-terminal-surface__host`,style:normalizeStyle(hostStyle.value),onClick:_cache[5]||(_cache[5]=$event=>_ctx.$emit(`focus`)),onPointerdownCapture:_cache[6]||(_cache[6]=$event=>_ctx.$emit(`focus`))},[createBaseVNode(`div`,{ref:__props.terminalHostRef,class:`vibe64-terminal-surface__mount`},null,512)],36)):(openBlock(),createElementBlock(`pre`,{key:1,class:`vibe64-terminal-surface__log`,style:normalizeStyle(hostStyle.value),"aria-atomic":`false`,"aria-label":`${__props.title} output`,"aria-live":`off`,role:`log`,tabindex:`0`},[renderSlot(_ctx.$slots,`output`,{output:__props.output},()=>[createTextVNode(toDisplayString(__props.output||`Waiting for output…`),1)],true)],12,_hoisted_12))]),__props.bodyMode===`terminal`||_ctx.$slots.footer?(openBlock(),createElementBlock(`footer`,_hoisted_13,[renderSlot(_ctx.$slots,`footer`,{commandPreview:__props.commandPreview,status:__props.status},()=>[createBaseVNode(`span`,_hoisted_14,toDisplayString(__props.commandPreview||`No command running.`),1),__props.status?(openBlock(),createBlock(VChip,{key:0,size:`x-small`,variant:`tonal`},{default:withCtx(()=>[createTextVNode(toDisplayString(__props.status),1)]),_:1})):createCommentVNode(``,true)],true)])):createCommentVNode(``,true)],512),[[vShow,surfaceExpanded.value]])]),_:3},16,[`aria-busy`,`aria-label`,`aria-modal`,`class`,`role`,`tabindex`])],8,[`disabled`])}}});var Vibe64TerminalSurface_default=_plugin_vue_export_helper_default(_sfc_main$1,[[`__scopeId`,`data-v-fb5b020d`]]);var DOCK_GAP_PX=8;var dockEntrySequence=0;var dockEntries=ref([]);function normalizedDockWidth(width=0){const number=Number(width);return Number.isFinite(number)&&number>0?Math.round(number):0}function removeDockEntry(entryId=``){dockEntries.value=dockEntries.value.filter(entry=>entry.id!==entryId)}function ensureDockEntry(entryId=``){if(!entryId||dockEntries.value.some(entry=>entry.id===entryId))return;dockEntries.value=[...dockEntries.value,{id:entryId,width:0}]}function setDockEntryWidth(entryId=``,width=0){ensureDockEntry(entryId);const nextWidth=normalizedDockWidth(width);dockEntries.value=dockEntries.value.map(entry=>{return entry.id===entryId?{...entry,width:nextWidth}:entry})}function dockOffsetBefore(entryId=``){let offset=0;for(const entry of dockEntries.value){if(entry.id===entryId)return offset;offset+=normalizedDockWidth(entry.width)+DOCK_GAP_PX}return 0}function useFloatingTerminalMinimizedDock(active){const entryId=`floating-terminal-dock-${++dockEntrySequence}`;const rightOffset=computed(()=>dockOffsetBefore(entryId));function updateWidth(width=0){if(!unref(active))return;setDockEntryWidth(entryId,width)}watch(()=>Boolean(unref(active)),isActive=>{if(isActive){ensureDockEntry(entryId);return}removeDockEntry(entryId)},{immediate:true});onBeforeUnmount(()=>{removeDockEntry(entryId)});return{rightOffset,updateWidth}}var WINDOW_MARGIN_PX=12;function positiveNumber(value){const number=Number(value);return Number.isFinite(number)&&number>0?number:0}function useVibe64TerminalWindow({active,minimized,minimizedWidth,storageKey}={}){const panel=ref(null);const position=ref({left:WINDOW_MARGIN_PX,top:WINDOW_MARGIN_PX});const dimensions=ref({height:0,width:0});const dockActive=computed(()=>Boolean(unref(active)&&unref(minimized)));const{rightOffset,updateWidth:updateDockWidth}=useFloatingTerminalMinimizedDock(dockActive);let drag=null;let resizeObserver=null;let trackingViewport=false;const style=computed(()=>{if(unref(minimized))return{"--vibe64-terminal-minimized-right":`${Math.round(rightOffset.value)}px`,"--vibe64-terminal-minimized-width":String(unref(minimizedWidth)||`min(28rem, calc(100vw - 1.5rem))`)};const value={left:`${Math.round(position.value.left)}px`,top:`${Math.round(position.value.top)}px`};if(dimensions.value.width>0)value.width=`${Math.round(dimensions.value.width)}px`;if(dimensions.value.height>0)value.height=`${Math.round(dimensions.value.height)}px`;return value});function viewportSize(){return{height:typeof window===`undefined`?768:window.innerHeight,width:typeof window===`undefined`?1024:window.innerWidth}}function panelSize(){const viewport=viewportSize();return{height:dimensions.value.height||panel.value?.offsetHeight||Math.min(viewport.height-24,704),width:dimensions.value.width||panel.value?.offsetWidth||Math.min(viewport.width-24,1152)}}function clamp(nextPosition={}){const viewport=viewportSize();const size=panelSize();return{left:Math.min(Math.max(WINDOW_MARGIN_PX,Number(nextPosition.left||0)),Math.max(WINDOW_MARGIN_PX,viewport.width-size.width-WINDOW_MARGIN_PX)),top:Math.min(Math.max(WINDOW_MARGIN_PX,Number(nextPosition.top||0)),Math.max(WINDOW_MARGIN_PX,viewport.height-size.height-WINDOW_MARGIN_PX))}}function restore(){const state=readLocalStorageJson(String(unref(storageKey)||``),null);if(!state||typeof state!==`object`||Array.isArray(state))return false;dimensions.value={height:positiveNumber(state.height),width:positiveNumber(state.width)};position.value=clamp({left:state.left,top:state.top});return true}function save(){const key=String(unref(storageKey)||``);if(!key||!unref(active)||unref(minimized))return;const size=panelSize();writeLocalStorageJson(key,{height:Math.round(size.height),left:Math.round(position.value.left),top:Math.round(position.value.top),width:Math.round(size.width)})}function place(){if(!unref(active)||unref(minimized)||restore())return;const viewport=viewportSize();const size=panelSize();position.value=clamp({left:(viewport.width-size.width)/2,top:(viewport.height-size.height)/2});save()}function stopDrag(){const moved=Boolean(drag);drag=null;if(typeof window===`undefined`)return;window.removeEventListener(`pointermove`,moveDrag);window.removeEventListener(`pointerup`,stopDrag);window.removeEventListener(`pointercancel`,stopDrag);if(moved)save()}function moveDrag(event){if(!drag||event.pointerId!==drag.pointerId)return;position.value=clamp({left:drag.left+event.clientX-drag.x,top:drag.top+event.clientY-drag.y})}function startDrag(event){if(unref(minimized)||event.button!==0||typeof window===`undefined`)return;event.preventDefault();drag={left:position.value.left,pointerId:event.pointerId,top:position.value.top,x:event.clientX,y:event.clientY};event.currentTarget?.setPointerCapture?.(event.pointerId);window.addEventListener(`pointermove`,moveDrag);window.addEventListener(`pointerup`,stopDrag);window.addEventListener(`pointercancel`,stopDrag)}function clampCurrent(){if(!unref(active))return;if(unref(minimized)){updateDockWidth(panel.value?.offsetWidth||0);return}position.value=clamp(position.value);save()}function startViewportTracking(){if(trackingViewport||typeof window===`undefined`)return;trackingViewport=true;window.addEventListener(`resize`,clampCurrent)}function stopViewportTracking(){if(!trackingViewport||typeof window===`undefined`)return;trackingViewport=false;window.removeEventListener(`resize`,clampCurrent)}function observePanel(){resizeObserver?.disconnect?.();resizeObserver=null;if(typeof ResizeObserver===`undefined`||!panel.value)return;resizeObserver=new ResizeObserver(()=>{if(!panel.value)return;if(unref(minimized)){updateDockWidth(panel.value.offsetWidth||0);return}dimensions.value={height:panel.value.offsetHeight,width:panel.value.offsetWidth};clampCurrent()});resizeObserver.observe(panel.value)}watch(()=>[Boolean(unref(active)),Boolean(unref(minimized))],async([isActive,isMinimized])=>{stopDrag();if(!isActive){resizeObserver?.disconnect?.();resizeObserver=null;stopViewportTracking();return}startViewportTracking();await nextTick();if(isMinimized)updateDockWidth(panel.value?.offsetWidth||0);else place();observePanel()},{immediate:true});onBeforeUnmount(()=>{stopDrag();resizeObserver?.disconnect?.();resizeObserver=null;stopViewportTracking()});return{panel,startDrag,style}}var _hoisted_1={key:0,class:`vibe64-terminal__launcher`};var _sfc_main={__name:`Vibe64Terminal`,props:{closeLabel:{default:`Close`,type:String},collapsible:{default:true,type:Boolean},commandPreview:{default:``,type:String},dialogMaxWidth:{default:1080,type:[Number,String]},disconnectWhenHidden:{default:false,type:Boolean},disposeDisplayWhenCollapsed:{default:false,type:Boolean},disposeDisplayWhenHidden:{default:true,type:Boolean},error:{default:``,type:String},errorTitle:{default:`Terminal needs attention`,type:String},expanded:{default:void 0,type:null},fill:{default:false,type:Boolean},floatingStorageKey:{default:``,type:String},height:{default:`clamp(18rem, 48vh, 34rem)`,type:String},launcherDisabled:{default:false,type:Boolean},launcherLabel:{default:`Open terminal`,type:String},mobileTakeover:{default:true,type:Boolean},openErrorDetails:{default:false,type:Boolean},output:{default:void 0,type:null},persistent:{default:true,type:Boolean},presentation:{default:`inline`,type:String,validator:value=>[`dialog`,`floating`,`fullscreen`,`headless`,`inline`,`minimized`].includes(value)},retryable:{default:false,type:Boolean},showClose:{default:true,type:Boolean},showCopy:{default:false,type:Boolean},showInterrupt:{default:true,type:Boolean},showLauncher:{default:false,type:Boolean},startInput:{default:()=>({}),type:Object},startOnLaunch:{default:false,type:Boolean},stage:{default:``,type:String},surfaceClass:{default:``,type:[String,Array,Object]},surfaceStyle:{default:null,type:[String,Array,Object]},status:{default:``,type:String},subtitle:{default:``,type:String},summaryLine:{default:``,type:String},terminal:{required:true,type:Object},title:{default:`Terminal`,type:String},visible:{default:void 0,type:null}},emits:[`close`,`copy`,`interrupt`,`launch`,`retry`,`update:expanded`,`update:visible`],setup(__props,{expose:__expose,emit:__emit}){const props=__props;const emit=__emit;const forwardedSlots=[`actions-after`,`actions-before`,`before-terminal`,`error-actions`,`footer`,`heading`,`overlay`];function terminalValue(name,fallback=null){const value=props.terminal?.[name];const resolved=unref(value);return typeof resolved===`undefined`?fallback:resolved}const visible=computed(()=>typeof props.visible===`undefined`?Boolean(terminalValue(`terminalVisible`,true)):Boolean(props.visible));const expanded=computed(()=>{if(!props.collapsible)return true;return typeof props.expanded===`undefined`?Boolean(terminalValue(`terminalExpanded`,false)):Boolean(props.expanded)});const minimized=computed(()=>props.presentation===`minimized`);const floatingPresentation=computed(()=>[`floating`,`minimized`].includes(props.presentation));const dialogPresentation=computed(()=>[`dialog`,`fullscreen`].includes(props.presentation));const launcherVisible=computed(()=>props.showLauncher&&!visible.value);const running=computed(()=>{const status=String(terminalValue(`terminalStatus`,props.status)||``);return Boolean(terminalValue(`terminalSessionId`,``))&&status!==`exited`});const starting=computed(()=>Boolean(terminalValue(`terminalStarting`,false)));const surfaceProps=computed(()=>({class:props.surfaceClass,style:props.surfaceStyle,closeLabel:props.closeLabel,collapsible:props.collapsible,commandPreview:props.commandPreview||String(terminalValue(`terminalCommandPreview`,``)),error:props.error||String(terminalValue(`terminalError`,``)),errorTitle:props.errorTitle,exited:Boolean(terminalValue(`terminalExited`,false)),expanded:expanded.value,fill:expanded.value&&(props.fill||floatingPresentation.value||dialogPresentation.value),focused:Boolean(terminalValue(`terminalFocused`,false)),height:props.height,mobileTakeover:props.mobileTakeover,openErrorDetails:props.openErrorDetails,output:typeof props.output===`undefined`?String(terminalValue(`terminalOutput`,``)):String(props.output||``),retryable:props.retryable,selectedText:String(terminalValue(`terminalSelectedText`,``)),sessionId:String(terminalValue(`terminalSessionId`,``)),showClose:props.showClose,showCopy:props.showCopy,showInterrupt:props.showInterrupt,stage:props.stage,starting:starting.value,status:props.status||String(terminalValue(`terminalStatus`,``)),subtitle:props.subtitle,summaryLine:props.summaryLine||String(terminalValue(`terminalSummaryLine`,``)),title:props.title}));const floatingWindow=useVibe64TerminalWindow({active:computed(()=>visible.value&&floatingPresentation.value),minimized,minimizedWidth:`min(28rem, calc(100vw - 1.5rem))`,storageKey:computed(()=>props.floatingStorageKey)});const floatingPanel=floatingWindow.panel;const floatingWindowStyle=floatingWindow.style;function setTerminalHost(element){props.terminal?.setTerminalHost?.(element)}async function ensureDisplay(){if(!visible.value||!expanded.value||props.presentation===`headless`)return false;await nextTick();if(!await props.terminal?.setupTerminalUi?.())return false;if(terminalValue(`terminalSessionId`,``))props.terminal?.connectTerminalSocket?.();return true}async function launch(){props.terminal?.showTerminal?.({manual:true});props.terminal?.expandTerminal?.({manual:true});emit(`update:visible`,true);emit(`update:expanded`,true);emit(`launch`);if(props.startOnLaunch)await props.terminal?.startTerminal?.(props.startInput);await ensureDisplay()}function toggleExpanded(){const nextExpanded=!expanded.value;if(typeof props.expanded===`undefined`){if(nextExpanded)props.terminal?.expandTerminal?.({manual:true});else props.terminal?.collapseTerminal?.({manual:true})}emit(`update:expanded`,nextExpanded)}function requestClose(){if(typeof props.visible===`undefined`)props.terminal?.hideTerminal?.({manual:true});emit(`update:visible`,false);emit(`close`)}function handleDialogVisibility(nextVisible){if(!nextVisible)requestClose()}async function interrupt(){await props.terminal?.sendCtrlC?.();emit(`interrupt`)}async function focus(){await props.terminal?.focusTerminal?.()}async function copyTerminalText(){const text=String(terminalValue(`terminalSelectedText`,``)||terminalValue(`terminalPlainOutput`,``)||terminalValue(`terminalOutput`,``));if(!text)return false;await writeClipboardText(text);emit(`copy`,text);return true}async function copySelection(){const text=String(terminalValue(`terminalSelectedText`,``));if(!text)return false;await writeClipboardText(text);emit(`copy`,text);return true}async function copyTranscript(){const text=String(terminalValue(`terminalPlainOutput`,``)||terminalValue(`terminalOutput`,``));if(!text)return false;await writeClipboardText(text);emit(`copy`,text);return true}watch(()=>[visible.value,expanded.value,props.presentation],async([isVisible,isExpanded])=>{if(isVisible&&isExpanded&&props.presentation!==`headless`){await ensureDisplay();return}if(!isVisible&&props.disposeDisplayWhenHidden||!isExpanded&&props.disposeDisplayWhenCollapsed)props.terminal?.disposeTerminalDisplay?.();if(!isVisible&&props.disconnectWhenHidden)props.terminal?.closeTerminalSocket?.()},{immediate:true});watch(()=>props.output,output=>{if(typeof output!==`undefined`)props.terminal?.setTerminalOutput?.(output)},{immediate:true});__expose({attach:(...args)=>props.terminal?.attachTerminal?.(...args),close:(...args)=>props.terminal?.closeTerminal?.(...args),collapse:(...args)=>props.terminal?.collapseTerminal?.(...args),copySelection,copyTranscript,detach:(...args)=>props.terminal?.detachTerminal?.(...args),expand:(...args)=>props.terminal?.expandTerminal?.(...args),focus,hide:(...args)=>props.terminal?.hideTerminal?.(...args),interrupt,minimize:(...args)=>props.terminal?.minimizeTerminal?.(...args),restart:(...args)=>props.terminal?.restartTerminal?.(...args),sendKey:(...args)=>props.terminal?.sendTerminalKey?.(...args),show:(...args)=>props.terminal?.showTerminal?.(...args),start:(...args)=>props.terminal?.startTerminal?.(...args),waitForExit:(...args)=>props.terminal?.waitForExit?.(...args),write:(...args)=>props.terminal?.sendTerminalData?.(...args)});onBeforeUnmount(()=>{setTerminalHost(null);props.terminal?.disposeTerminalDisplay?.()});return(_ctx,_cache)=>{return openBlock(),createElementBlock(Fragment,null,[launcherVisible.value?(openBlock(),createElementBlock(`div`,_hoisted_1,[renderSlot(_ctx.$slots,`launcher`,{launch,running:running.value},()=>[createVNode(VBtn,{"aria-busy":starting.value?`true`:void 0,class:`vibe64-terminal__launcher-action`,color:`primary`,disabled:__props.launcherDisabled||starting.value,variant:`flat`,onClick:launch},{default:withCtx(()=>[createTextVNode(toDisplayString(starting.value?`Opening…`:__props.launcherLabel),1)]),_:1},8,[`aria-busy`,`disabled`])],true)])):createCommentVNode(``,true),dialogPresentation.value?(openBlock(),createBlock(VDialog,{key:1,fullscreen:__props.presentation===`fullscreen`,"model-value":visible.value,"max-width":__props.presentation===`dialog`?__props.dialogMaxWidth:void 0,persistent:__props.persistent,"onUpdate:modelValue":handleDialogVisibility},{default:withCtx(()=>[visible.value?(openBlock(),createBlock(Vibe64TerminalSurface_default,mergeProps({key:0},surfaceProps.value,{"terminal-host-ref":setTerminalHost,onClose:requestClose,onCopy:copyTerminalText,onFocus:focus,onInterrupt:interrupt,onRetry:_cache[0]||(_cache[0]=$event=>_ctx.$emit(`retry`)),onToggleExpanded:toggleExpanded}),createSlots({_:2},[renderList(forwardedSlots,slotName=>{return{name:slotName,fn:withCtx(slotProps=>[renderSlot(_ctx.$slots,slotName,normalizeProps(guardReactiveProps(slotProps||{})),void 0,true)])}})]),1040)):createCommentVNode(``,true)]),_:3},8,[`fullscreen`,`model-value`,`max-width`,`persistent`])):floatingPresentation.value?(openBlock(),createBlock(Teleport,{key:2,to:`body`},[visible.value?(openBlock(),createElementBlock(`div`,{key:0,class:normalizeClass([`vibe64-terminal__floating-layer`,{"vibe64-terminal__floating-layer--minimized":minimized.value}])},[createBaseVNode(`div`,{ref_key:`floatingPanel`,ref:floatingPanel,class:`vibe64-terminal__floating-panel`,style:normalizeStyle(unref(floatingWindowStyle))},[createVNode(Vibe64TerminalSurface_default,mergeProps(surfaceProps.value,{draggable:``,fill:``,"terminal-host-ref":setTerminalHost,onClose:requestClose,onCopy:copyTerminalText,onDragStart:unref(floatingWindow).startDrag,onFocus:focus,onInterrupt:interrupt,onRetry:_cache[1]||(_cache[1]=$event=>_ctx.$emit(`retry`)),onToggleExpanded:toggleExpanded}),createSlots({_:2},[renderList(forwardedSlots,slotName=>{return{name:slotName,fn:withCtx(slotProps=>[renderSlot(_ctx.$slots,slotName,normalizeProps(guardReactiveProps(slotProps||{})),void 0,true)])}})]),1040,[`onDragStart`])],4)],2)):createCommentVNode(``,true)])):visible.value&&__props.presentation!==`headless`?(openBlock(),createBlock(Vibe64TerminalSurface_default,mergeProps({key:3},surfaceProps.value,{"terminal-host-ref":setTerminalHost,onClose:requestClose,onCopy:copyTerminalText,onFocus:focus,onInterrupt:interrupt,onRetry:_cache[2]||(_cache[2]=$event=>_ctx.$emit(`retry`)),onToggleExpanded:toggleExpanded}),createSlots({_:2},[renderList(forwardedSlots,slotName=>{return{name:slotName,fn:withCtx(slotProps=>[renderSlot(_ctx.$slots,slotName,normalizeProps(guardReactiveProps(slotProps||{})),void 0,true)])}})]),1040)):createCommentVNode(``,true)],64)}}};var Vibe64Terminal_default=_plugin_vue_export_helper_default(_sfc_main,[[`__scopeId`,`data-v-0ce33e38`]]);var SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY=`jskit.shell-web.runtime.web-async-module-recovery.client`;function isShellAsyncModuleRecoveryRuntime(value){return Boolean(value&&typeof value.notify===`function`&&typeof value.reload===`function`)}function useShellAsyncModuleRecoveryRuntime(){if(!hasInjectionContext())return null;const runtime=inject(SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY,null);return isShellAsyncModuleRecoveryRuntime(runtime)?runtime:null}var INVALID_TERMINAL_SIZE_ERROR=`Terminal size must include valid cols and rows.`;var STUDIO_TERMINAL_SCROLLBACK_ROWS=300;var STUDIO_TERMINAL_TRANSCRIPT_MAX_LENGTH=262144;var MIN_TERMINAL_COLS=20;var MIN_TERMINAL_ROWS=5;function terminalTranscriptTail(value=``,{maxLength=STUDIO_TERMINAL_TRANSCRIPT_MAX_LENGTH,maxRows=300}={}){let transcript=String(value||``);let rowBoundary=transcript.length;for(let row=0;row<maxRows;row+=1){rowBoundary=transcript.lastIndexOf(`
5
5
  `,rowBoundary-1);if(rowBoundary<0)break}if(rowBoundary>=0)transcript=transcript.slice(rowBoundary+1);if(transcript.length>maxLength)transcript=transcript.slice(transcript.length-maxLength);return transcript}function reportableTerminalSize(size={}){const cols=Math.floor(Number(size.cols));const rows=Math.floor(Number(size.rows));if(!Number.isFinite(cols)||!Number.isFinite(rows)||cols<MIN_TERMINAL_COLS||rows<MIN_TERMINAL_ROWS)return null;return{cols,rows}}function terminalResizeErrorMessage(error=``){return String(error||``)===INVALID_TERMINAL_SIZE_ERROR}function normalizeTerminalSessionId(value=``){return String(value||``).trim()}function normalizeDriverCallback(callback){return typeof callback===`function`?callback:()=>null}function createWebSocketTerminalDriver({closeSession=null,readSession=null,startSession=null,webSocketUrl}={}){if(typeof webSocketUrl!==`function`)throw new TypeError(`webSocketUrl must be a function.`);return{closeSession:typeof closeSession===`function`?closeSession:null,readSession:typeof readSession===`function`?readSession:null,reconnectOnDisconnect:true,startSession:typeof startSession===`function`?startSession:null,openConnection({onEvent=null,sessionId=``}={}){const normalizedSessionId=normalizeTerminalSessionId(sessionId);if(!normalizedSessionId)throw new Error(`Terminal session id is required.`);const notify=normalizeDriverCallback(onEvent);const socket=new WebSocket(String(webSocketUrl(normalizedSessionId)||``));let closedByClient=false;let disconnected=false;let readySettled=false;let resolveReady;const ready=new Promise(resolve=>{resolveReady=resolve});const settleReady=connected=>{if(readySettled)return;readySettled=true;resolveReady(connected)};const notifyDisconnected=()=>{if(disconnected)return;disconnected=true;notify({intentional:closedByClient,type:`disconnected`})};socket.addEventListener(`open`,()=>{settleReady(true);notify({type:`connected`})});socket.addEventListener(`message`,event=>{try{notify(JSON.parse(String(event.data||``)))}catch{notify({error:`Terminal stream returned an invalid message.`,type:`error`})}});socket.addEventListener(`error`,()=>{settleReady(false);notifyDisconnected()});socket.addEventListener(`close`,()=>{settleReady(false);notifyDisconnected()});function socketIsOpen(){return socket.readyState===WebSocket.OPEN}return{close(){if(socket.readyState!==WebSocket.CLOSED&&socket.readyState!==WebSocket.CLOSING){closedByClient=true;socket.close()}},isOpen:socketIsOpen,ready,sendInput(data){if(!socketIsOpen())return false;socket.send(JSON.stringify({data:String(data||``),type:`input`}));return true},sendResize({cols,rows}={}){if(!socketIsOpen())return false;socket.send(JSON.stringify({cols,rows,type:`resize`}));return true}}}}}function validateTerminalDriver(driver){if(!driver||typeof driver!==`object`||Array.isArray(driver))throw new TypeError(`Terminal driver must be an object.`);if(typeof driver.openConnection!==`function`)throw new TypeError(`Terminal driver must provide openConnection().`);return driver}function normalizedMatcherId(matcher={},index=0){return String(matcher.id||matcher.event||`matcher-${index+1}`).trim()}function normalizeMatchers(matchers=[]){return(Array.isArray(matchers)?matchers:[]).map((matcher,index)=>({...matcher,id:normalizedMatcherId(matcher,index)})).filter(matcher=>matcher.id)}function matcherPattern(matcher={}){if(matcher.pattern instanceof RegExp){const flags=matcher.pattern.flags.includes(`g`)?matcher.pattern.flags:`${matcher.pattern.flags}g`;return new RegExp(matcher.pattern.source,flags)}if(typeof matcher.pattern===`string`&&matcher.pattern)return matcher.pattern;return null}function literalMatches(text,pattern){const matches=[];let offset=0;while(offset<=text.length){const index=text.indexOf(pattern,offset);if(index<0)break;matches.push({captures:[],end:index+pattern.length,start:index,text:pattern});offset=index+Math.max(1,pattern.length)}return matches}function regularExpressionMatches(text,pattern){const matches=[];pattern.lastIndex=0;for(const match of text.matchAll(pattern)){const start=Number(match.index||0);matches.push({captures:match.slice(1),end:start+String(match[0]||``).length,start,text:String(match[0]||``)})}return matches}function textMatches(text,matcher={}){const pattern=matcherPattern(matcher);if(typeof pattern===`string`)return literalMatches(text,pattern);if(pattern instanceof RegExp)return regularExpressionMatches(text,pattern);return[]}function normalizePredicateMatch(result){if(!result)return null;if(result===true)return{captures:[],end:-1,start:-1,text:``};if(typeof result===`string`)return{captures:[],end:-1,start:-1,text:result};if(typeof result===`object`&&!Array.isArray(result))return{captures:Array.isArray(result.captures)?result.captures:[],end:Number.isInteger(result.end)?result.end:-1,start:Number.isInteger(result.start)?result.start:-1,text:String(result.text||``),value:result.value};return null}function createTerminalMatcherEngine({matchers=[],onMatch=null}={}){const notify=typeof onMatch===`function`?onMatch:()=>null;let activeSessionId=``;let matcherStates=new Map;function reset(sessionId=``){activeSessionId=String(sessionId||``);matcherStates=new Map}function matcherState(matcherId){if(!matcherStates.has(matcherId))matcherStates.set(matcherId,{complete:false,seen:new Set});return matcherStates.get(matcherId)}function inspect(context={}){const sessionId=String(context.sessionId||``);if(sessionId!==activeSessionId)reset(sessionId);const activeMatchers=normalizeMatchers(typeof matchers===`function`?matchers():matchers);if(activeMatchers.length<1)return[];const rawOutput=String(context.output||``);const plainOutput=Object.hasOwn(context,`plainOutput`)?String(context.plainOutput||``):stripTerminalControlSequences(rawOutput);const emitted=[];for(const matcher of activeMatchers){const state=matcherState(matcher.id);if(state.complete)continue;if(context.source===`replacement`&&matcher.once===false)state.seen.clear();const matcherContext={...context,output:rawOutput,plainOutput,sessionId};const sourceText=matcher.source===`raw`?rawOutput:plainOutput;const matches=typeof matcher.predicate===`function`?[normalizePredicateMatch(matcher.predicate(matcherContext))].filter(Boolean):textMatches(sourceText,matcher);for(const match of matches){const matchKey=`${match.start}:${match.end}:${match.text}`;if(state.seen.has(matchKey))continue;state.seen.add(matchKey);const payload={captures:match.captures,error:String(context.error||``),exitCode:context.exitCode??null,matcher:matcher.id,metadata:context.metadata||{},outputVersion:Number(context.outputVersion||0),sessionId,source:String(context.source||`snapshot`),status:String(context.status||``),text:match.text,transcriptOffset:match.start,value:match.value};emitted.push(payload);notify(payload);if(matcher.once!==false){state.complete=true;break}}}return emitted}return{inspect,reset}}function normalizePolicyActions(actions=[]){return(Array.isArray(actions)?actions:[actions]).map(action=>typeof action===`string`?{type:action}:action).filter(action=>action&&typeof action===`object`&&String(action.type||``))}function normalizePolicies(policies=[]){return(Array.isArray(policies)?policies:[]).map((policy,index)=>({...policy,actions:normalizePolicyActions(policy.actions||policy.action),id:String(policy.id||`policy-${index+1}`),on:Array.isArray(policy.on)?policy.on.map(String):[String(policy.on||``)]})).filter(policy=>policy.on.some(Boolean)&&policy.actions.length>0)}function createTerminalPolicyEngine({actions={},currentSessionId=()=>``,policies=[]}={}){const completed=new Set;const timers=new Set;function clearTimers(){for(const timer of timers)globalThis.clearTimeout(timer);timers.clear()}function reset(){completed.clear();clearTimers()}function runAction(action,event,sessionId){const handler=actions[action.type];if(typeof handler!==`function`)return false;const invoke=()=>{if(String(currentSessionId()||``)!==sessionId)return false;return handler({...action,event})};const delayMs=Number(action.delayMs||0);if(!Number.isFinite(delayMs)||delayMs<=0)return invoke();const timer=globalThis.setTimeout(()=>{timers.delete(timer);invoke()},delayMs);timers.add(timer);return true}function handle(event={}){const eventType=String(event.type||``);const sessionId=String(event.sessionId||currentSessionId()||``);if(!eventType)return[];const executed=[];for(const policy of normalizePolicies(typeof policies===`function`?policies():policies)){if(!policy.on.includes(eventType)&&!policy.on.includes(`*`))continue;if(typeof policy.when===`function`&&!policy.when(event))continue;const completionKey=`${sessionId}:${policy.id}`;if(policy.once!==false&&completed.has(completionKey))continue;if(policy.once!==false)completed.add(completionKey);for(const action of policy.actions)runAction(action,event,sessionId);executed.push(policy.id)}return executed}return{clearTimers,handle,reset}}var xtermModulePromise=null;async function loadXtermModules(){if(!xtermModulePromise)xtermModulePromise=Promise.all([__vitePreload(()=>import(`./xterm-CXJQiF67.js`),[]),__vitePreload(()=>import(`./addon-fit-Bw0lQv9_.js`),[]),__vitePreload(()=>Promise.resolve({}),__vite__mapDeps([0]))]).then(([terminalModule,fitModule])=>({FitAddon:fitModule.FitAddon,Terminal:terminalModule.Terminal})).catch(error=>{xtermModulePromise=null;throw error});return xtermModulePromise}var TERMINAL_RECONNECT_DELAY_MS=250;var TERMINAL_RECONNECT_MAX_DELAY_MS=5e3;function resolveCallback(callback,fallback){return typeof callback===`function`?callback:fallback}function useVibe64Terminal({driver,fitOnResize=null,initiallyExpanded=false,initiallyVisible=true,liveResize=true,matchers=[],onEvent=null,onMatch=null,onOutput=null,onSessionUpdate=null,onStatusUpdate=null,onUserData=null,policies=[],presentation=`inline`,readOnly=false,reconnectDelayMs=TERMINAL_RECONNECT_DELAY_MS,reconnectMaxDelayMs=TERMINAL_RECONNECT_MAX_DELAY_MS,resizeReportDelayMs=0}={}){const terminalDriver=validateTerminalDriver(driver);const terminalHost=ref(null);const terminalSessionId=ref(``);const terminalStatus=ref(``);const terminalCommandPreview=ref(``);const terminalCloseError=ref(``);const terminalError=ref(``);const terminalExitCode=ref(null);const terminalFocused=ref(false);const terminalMetadata=ref({});const terminalOutput=ref(``);const terminalSelectedText=ref(``);const terminalStarting=ref(false);const terminalConnectionStatus=ref(`detached`);const terminalAttention=ref(null);const terminalExpanded=ref(Boolean(initiallyExpanded));const terminalOwnership=ref(`none`);const terminalPresentation=ref(String(presentation||`inline`));const terminalVisible=ref(Boolean(initiallyVisible));let terminalInstance=null;let terminalFitAddon=null;let terminalConnection=null;let terminalConnectionGeneration=0;let terminalConnectionSessionId=``;let terminalConnectionOpenPromise=null;let terminalConnectionOpenSessionId=``;let terminalReconnectAttempt=0;let terminalReconnectBlocked=false;let terminalReconnectTimer=null;let terminalDataDisposable=null;let terminalSelectionDisposable=null;let terminalScrollDisposable=null;let terminalFocusInHandler=null;let terminalFocusOutHandler=null;let terminalWindowBlurHandler=null;let terminalResizeHandler=null;let terminalResizeReportTimer=null;let terminalResizeObserver=null;let terminalReportedCols=0;let terminalReportedRows=0;let terminalInitialResizeReported=false;let terminalLatestOutput=``;let terminalOutputOffset=0;let terminalOutputVersion=0;let terminalFollowOutput=true;let terminalSetupPromise=null;let terminalMountedHost=null;let terminalExitNotifiedSessionId=``;let terminalSettledNotifiedSessionId=``;let terminalLastStartInput={};const terminalExitWaiters=new Map;const terminalSettlementWaiters=new Map;const notifyOutput=resolveCallback(onOutput,()=>null);const notifyEvent=resolveCallback(onEvent,()=>null);const notifyMatch=resolveCallback(onMatch,()=>null);const notifySessionUpdate=resolveCallback(onSessionUpdate,()=>null);const notifyStatusUpdate=resolveCallback(onStatusUpdate,()=>null);const notifyUserData=resolveCallback(onUserData,()=>null);const asyncModuleRecoveryRuntime=useShellAsyncModuleRecoveryRuntime();const terminalExited=computed(()=>terminalStatus.value===`exited`);const terminalPlainOutput=computed(()=>stripTerminalControlSequences(terminalOutput.value));const terminalSummaryLine=computed(()=>terminalLastMeaningfulLine(terminalOutput.value));const terminalReconnectDelay=Math.max(0,Number(reconnectDelayMs)||0);const terminalReconnectMaxDelay=Math.max(terminalReconnectDelay,Number(reconnectMaxDelayMs)||0);function currentSessionId(){return String(terminalSessionId.value||``)}function emitTerminalEvent(type,payload={}){const event={...payload,sessionId:String(payload.sessionId||currentSessionId()),type:String(type||payload.type||``)};notifyEvent(event);terminalPolicyEngine.handle(event);return event}function showTerminal({manual=false}={}){if(terminalVisible.value)return false;terminalVisible.value=true;emitTerminalEvent(`visibility-change`,{manual,visible:true});return true}function hideTerminal({manual=false}={}){if(!terminalVisible.value)return false;terminalVisible.value=false;emitTerminalEvent(`visibility-change`,{manual,visible:false});return true}function expandTerminal({manual=false}={}){showTerminal({manual});if(terminalExpanded.value)return false;terminalExpanded.value=true;emitTerminalEvent(`expanded-change`,{expanded:true,manual});return true}function collapseTerminal({manual=false}={}){if(!terminalExpanded.value)return false;terminalExpanded.value=false;emitTerminalEvent(`expanded-change`,{expanded:false,manual});return true}function minimizeTerminal({manual=false}={}){terminalPresentation.value=`minimized`;collapseTerminal({manual});showTerminal({manual});return true}const terminalPolicyEngine=createTerminalPolicyEngine({actions:{collapse:collapseTerminal,close:closeTerminal,detach:detachTerminal,emit(action){return emitTerminalEvent(action.eventType||action.name||`policy-event`,{policyEvent:action.event})},expand:expandTerminal,focus:focusTerminal,hide:hideTerminal,interrupt:interruptTerminal,minimize:minimizeTerminal,send(action){return sendTerminalData(action.data,{source:`policy`})},show:showTerminal},currentSessionId,policies});const terminalMatcherEngine=createTerminalMatcherEngine({matchers,onMatch(payload){terminalAttention.value={kind:`match`,matcher:payload.matcher};notifyMatch(payload);emitTerminalEvent(`match`,payload);emitTerminalEvent(`match:${payload.matcher}`,payload)}});function inspectTerminalMatchers(source){return terminalMatcherEngine.inspect({error:terminalError.value,exitCode:terminalExitCode.value,metadata:terminalMetadata.value,output:terminalOutput.value,outputVersion:terminalOutputVersion,sessionId:currentSessionId(),source,status:terminalStatus.value})}function setTerminalHost(element){terminalHost.value=element||null}function terminalReadOnly(){return Boolean(typeof readOnly===`function`?readOnly():unref(readOnly))}function terminalLiveResize(){return Boolean(typeof liveResize===`function`?liveResize():unref(liveResize))}function terminalFitOnResize(){if(fitOnResize===null||typeof fitOnResize===`undefined`)return terminalLiveResize();return Boolean(typeof fitOnResize===`function`?fitOnResize():unref(fitOnResize))}function terminalResizeReportDelay(){const delay=Number(typeof resizeReportDelayMs===`function`?resizeReportDelayMs():unref(resizeReportDelayMs));return Number.isFinite(delay)&&delay>0?delay:0}function normalizedOutputVersion(value){const version=Number(value||0);return Number.isFinite(version)&&version>0?version:0}function resetReportedTerminalSize(){terminalReportedCols=0;terminalReportedRows=0}function resetInitialTerminalResize(){terminalInitialResizeReported=false}function updateTerminalSelection(){terminalSelectedText.value=terminalInstance?.hasSelection?.()?terminalInstance.getSelection():``}function terminalViewportAtBottom(){const buffer=terminalInstance?.buffer?.active;if(!buffer)return true;const viewportY=Number(buffer.viewportY);const baseY=Number(buffer.baseY);if(!Number.isFinite(viewportY)||!Number.isFinite(baseY))return true;return viewportY>=baseY}function updateTerminalFollowOutput(){terminalFollowOutput=terminalViewportAtBottom()}function syncTerminalFocus(){const host=terminalHost.value;const activeElement=document.activeElement;terminalFocused.value=Boolean(host&&activeElement&&host.contains(activeElement))}function terminalCurrentSize(){return reportableTerminalSize({cols:terminalInstance?.cols,rows:terminalInstance?.rows})}function terminalSizeAlreadyReported(size={}){return size.cols===terminalReportedCols&&size.rows===terminalReportedRows}function fitTerminalUi(){if(!terminalFitAddon||!terminalInstance)return false;terminalFitAddon.fit();terminalInstance.refresh?.(0,Math.max(0,terminalInstance.rows-1));const size=terminalCurrentSize();scheduleTerminalResizeReport();return Boolean(size)}async function setupTerminalUi(){if(terminalInstance){await nextTick();fitTerminalUi();return true}if(terminalSetupPromise)return terminalSetupPromise;terminalSetupPromise=(async()=>{await nextTick();if(terminalInstance){fitTerminalUi();return true}if(!terminalHost.value)return false;const host=terminalHost.value;let terminalLibrary;try{terminalLibrary=await loadXtermModules()}catch(error){terminalError.value=`Terminal module could not load. Check your connection and retry.`;asyncModuleRecoveryRuntime?.notify?.(error,{label:`Terminal`,stale:isDynamicImportError(error)});return false}if(!terminalHost.value||terminalHost.value!==host)return false;host.replaceChildren();terminalInstance=new terminalLibrary.Terminal({cursorBlink:false,disableStdin:false,fontFamily:`ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace`,fontSize:13,scrollback:300,theme:{background:`#101216`,foreground:`#f5f7fb`}});terminalFitAddon=new terminalLibrary.FitAddon;terminalInstance.loadAddon(terminalFitAddon);terminalInstance.open(host);terminalMountedHost=host;fitTerminalUi();terminalDataDisposable=terminalInstance.onData(data=>{if(terminalReadOnly())return;sendTerminalData(data,{source:`user`})});terminalSelectionDisposable=terminalInstance.onSelectionChange(updateTerminalSelection);terminalScrollDisposable=terminalInstance.onScroll?.(updateTerminalFollowOutput)||null;terminalFocusInHandler=()=>{terminalFocused.value=true};terminalFocusOutHandler=()=>{window.setTimeout(syncTerminalFocus,0)};terminalWindowBlurHandler=()=>{terminalFocused.value=false};host.addEventListener(`focusin`,terminalFocusInHandler);host.addEventListener(`focusout`,terminalFocusOutHandler);window.addEventListener(`blur`,terminalWindowBlurHandler);terminalResizeHandler=()=>{fitTerminalUi()};if(terminalFitOnResize())window.addEventListener(`resize`,terminalResizeHandler);if(terminalFitOnResize()&&typeof ResizeObserver!==`undefined`){terminalResizeObserver=new ResizeObserver(()=>{fitTerminalUi()});terminalResizeObserver.observe(host)}writeTerminalOutput(terminalLatestOutput);return true})();try{return await terminalSetupPromise}finally{terminalSetupPromise=null}}function clearTerminalReconnect({resetAttempt=true}={}){if(terminalReconnectTimer!==null){globalThis.clearTimeout(terminalReconnectTimer);terminalReconnectTimer=null}if(resetAttempt)terminalReconnectAttempt=0}function releaseTerminalConnection(status){const connection=terminalConnection;const disconnectedSessionId=terminalConnectionSessionId||currentSessionId();terminalConnectionGeneration+=1;terminalConnection=null;terminalConnectionSessionId=``;terminalConnectionOpenPromise=null;terminalConnectionOpenSessionId=``;terminalConnectionStatus.value=status;resetReportedTerminalSize();return{connection,sessionId:disconnectedSessionId}}function closeTerminalSocket(){clearTerminalReconnect();terminalReconnectBlocked=false;const{connection,sessionId:disconnectedSessionId}=releaseTerminalConnection(`detached`);connection?.close?.();if(connection)emitTerminalEvent(`disconnected`,{intentional:true,sessionId:disconnectedSessionId})}function terminalCanReconnect(sessionId){return Boolean(terminalDriver.reconnectOnDisconnect===true&&!terminalReconnectBlocked&&sessionId&&sessionId===currentSessionId()&&terminalStatus.value!==`exited`)}function scheduleTerminalReconnect(sessionId){if(terminalReconnectTimer!==null||!terminalCanReconnect(sessionId))return false;const delayMs=Math.min(terminalReconnectMaxDelay,terminalReconnectDelay*2**terminalReconnectAttempt);terminalReconnectAttempt+=1;terminalConnectionStatus.value=`reconnecting`;emitTerminalEvent(`reconnecting`,{attempt:terminalReconnectAttempt,delayMs,sessionId});terminalReconnectTimer=globalThis.setTimeout(async()=>{terminalReconnectTimer=null;if(!terminalCanReconnect(sessionId))return;if(!await connectTerminalSocket())scheduleTerminalReconnect(sessionId)},delayMs);return true}function recoverTerminalConnection(sessionId){const{connection}=releaseTerminalConnection(`disconnected`);connection?.close?.();scheduleTerminalReconnect(sessionId)}function disposeTerminalDisplay(){terminalDataDisposable?.dispose?.();terminalDataDisposable=null;terminalSelectionDisposable?.dispose?.();terminalSelectionDisposable=null;terminalScrollDisposable?.dispose?.();terminalScrollDisposable=null;const mountedHost=terminalMountedHost||terminalHost.value;if(terminalFocusInHandler){mountedHost?.removeEventListener(`focusin`,terminalFocusInHandler);terminalFocusInHandler=null}if(terminalFocusOutHandler){mountedHost?.removeEventListener(`focusout`,terminalFocusOutHandler);terminalFocusOutHandler=null}terminalMountedHost=null;if(terminalWindowBlurHandler){window.removeEventListener(`blur`,terminalWindowBlurHandler);terminalWindowBlurHandler=null}if(terminalResizeHandler){window.removeEventListener(`resize`,terminalResizeHandler);terminalResizeHandler=null}terminalResizeObserver?.disconnect?.();terminalResizeObserver=null;if(terminalResizeReportTimer){window.clearTimeout(terminalResizeReportTimer);terminalResizeReportTimer=null}terminalInstance?.dispose?.();terminalInstance=null;terminalFitAddon=null;terminalSetupPromise=null;terminalOutputOffset=0;terminalFollowOutput=true;terminalFocused.value=false;terminalSelectedText.value=``;resetReportedTerminalSize()}function disposeTerminalUi(){closeTerminalSocket();disposeTerminalDisplay()}function resetTerminalDisplay(){terminalLatestOutput=``;terminalOutputOffset=0;terminalOutputVersion=0;terminalOutput.value=``;terminalFollowOutput=true;resetReportedTerminalSize();resetInitialTerminalResize();terminalInstance?.reset?.()}function resetTerminalSessionState(){clearTerminalReconnect();terminalReconnectBlocked=false;terminalSessionId.value=``;terminalStatus.value=``;terminalCommandPreview.value=``;terminalCloseError.value=``;terminalExitCode.value=null;terminalError.value=``;terminalMetadata.value={};terminalOwnership.value=`none`}function terminalSnapshot(){return{commandPreview:terminalCommandPreview.value,closeError:terminalCloseError.value,error:terminalError.value,exitCode:terminalExitCode.value,id:terminalSessionId.value,metadata:terminalMetadata.value,output:terminalOutput.value,status:terminalStatus.value}}async function attachTerminal(session={},{connect=true,fallbackStatus=`running`,ownership=`attached`,preserveOutput=false,resize=true,show=false}={}){const sessionId=String(session.id||session.terminalSessionId||``).trim();if(!sessionId)throw new Error(`Terminal session id is required.`);terminalOwnership.value=ownership===`owned`?`owned`:`attached`;applyTerminalSession({...session,id:sessionId},{fallbackStatus,preserveOutput,resize});if(show)showTerminal();emitTerminalEvent(`attached`,{ownership:terminalOwnership.value});if(connect&&terminalStatus.value!==`exited`)await connectTerminalSocket();return terminalSnapshot()}async function startTerminal(input={},{connect=true,show=true}={}){if(terminalStarting.value)return false;if(typeof terminalDriver.startSession!==`function`)throw new Error(`This terminal driver cannot start sessions.`);terminalStarting.value=true;terminalLastStartInput=input&&typeof input===`object`?input:{};terminalError.value=``;if(show){showTerminal();expandTerminal()}emitTerminalEvent(`start-requested`,{input});emitTerminalEvent(`starting`,{input});try{const session=await terminalDriver.startSession(input);if(!session||session.ok===false)throw new Error(session?.error||`Terminal could not start.`);await attachTerminal(session,{connect,ownership:`owned`,show:false});emitTerminalEvent(`started`,{session:terminalSnapshot()});return terminalSnapshot()}catch(error){terminalError.value=String(error?.message||error||`Terminal could not start.`);return false}finally{terminalStarting.value=false}}async function closeTerminal({deleteSession=terminalOwnership.value===`owned`,preserveOutput=false}={}){const sessionId=currentSessionId();const ownership=terminalOwnership.value;closeTerminalSocket();if(deleteSession&&sessionId&&typeof terminalDriver.closeSession===`function`)try{await terminalDriver.closeSession(sessionId)}catch(error){terminalError.value=String(error?.message||error||`Terminal could not close.`);return false}emitTerminalEvent(`close`,{deleted:Boolean(deleteSession),ownership});resetTerminalSessionState();if(!preserveOutput)resetTerminalDisplay();return true}function detachTerminal({preserveOutput=true}={}){const ownership=terminalOwnership.value;const sessionId=currentSessionId();closeTerminalSocket();emitTerminalEvent(`detached`,{ownership,sessionId});resetTerminalSessionState();if(!preserveOutput)resetTerminalDisplay();return true}async function restartTerminal(input=terminalLastStartInput,{deleteSession=terminalOwnership.value===`owned`,show=true}={}){const previousSessionId=currentSessionId();if(previousSessionId&&!await closeTerminal({deleteSession}))return false;const session=await startTerminal(input,{show});if(session)emitTerminalEvent(`restart`,{previousSessionId});return session}function waitForExit(sessionId=currentSessionId()){const normalizedSessionId=String(sessionId||``);if(!normalizedSessionId)return Promise.reject(new Error(`Terminal session id is required.`));if(normalizedSessionId===currentSessionId()&&terminalStatus.value===`exited`)return Promise.resolve(terminalSnapshot());return new Promise(resolve=>{const waiters=terminalExitWaiters.get(normalizedSessionId)||[];waiters.push(resolve);terminalExitWaiters.set(normalizedSessionId,waiters)})}function waitForSettlement(sessionId=currentSessionId()){const normalizedSessionId=String(sessionId||``);if(!normalizedSessionId)return Promise.reject(new Error(`Terminal session id is required.`));if(normalizedSessionId===currentSessionId()&&(terminalStatus.value===`exited`||terminalError.value))return Promise.resolve(terminalSnapshot());return new Promise(resolve=>{const waiters=terminalSettlementWaiters.get(normalizedSessionId)||[];waiters.push(resolve);terminalSettlementWaiters.set(normalizedSessionId,waiters)})}function resolveExitWaiters(sessionId){const waiters=terminalExitWaiters.get(sessionId)||[];terminalExitWaiters.delete(sessionId);const snapshot=terminalSnapshot();for(const resolve of waiters)resolve(snapshot);resolveSettlementWaiters(sessionId)}function resolveSettlementWaiters(sessionId){const waiters=terminalSettlementWaiters.get(sessionId)||[];terminalSettlementWaiters.delete(sessionId);const snapshot=terminalSnapshot();for(const resolve of waiters)resolve(snapshot)}function scrollTerminalToBottom(){terminalInstance?.scrollToBottom?.();terminalFollowOutput=true}function scrollTerminalToBottomIfFollowing(){if(terminalFollowOutput)scrollTerminalToBottom()}function writeTerminalOutput(output,{outputVersion=0,replace=false}={}){const previousOutput=terminalLatestOutput;const nextOutput=terminalTranscriptTail(output);const nextOutputVersion=normalizedOutputVersion(outputVersion);if(nextOutputVersion&&terminalOutputVersion&&nextOutputVersion<terminalOutputVersion)return false;if(replace){terminalInstance?.reset?.();terminalOutputOffset=0}else if(previousOutput&&!nextOutput.startsWith(previousOutput)){if(!nextOutputVersion||nextOutputVersion<=terminalOutputVersion)return false;terminalInstance?.reset?.();terminalOutputOffset=0}terminalLatestOutput=nextOutput;terminalOutputVersion=Math.max(terminalOutputVersion,nextOutputVersion);terminalOutput.value=terminalLatestOutput;if(terminalLatestOutput!==previousOutput){const source=replace?`replacement`:`snapshot`;const outputEvent={outputVersion:terminalOutputVersion,output:terminalLatestOutput,source};notifyOutput(outputEvent);emitTerminalEvent(`output`,outputEvent);inspectTerminalMatchers(source)}if(!terminalInstance)return;if(terminalLatestOutput.length<terminalOutputOffset){terminalInstance.reset();terminalOutputOffset=0}const outputChunk=terminalLatestOutput.slice(terminalOutputOffset);if(outputChunk)terminalInstance.write(outputChunk,scrollTerminalToBottomIfFollowing);terminalOutputOffset=terminalLatestOutput.length;return true}function appendTerminalOutput(chunk,{outputVersion=0}={}){const outputChunk=String(chunk||``);if(!outputChunk)return false;const nextOutputVersion=normalizedOutputVersion(outputVersion);if(nextOutputVersion&&terminalOutputVersion&&nextOutputVersion<=terminalOutputVersion)return false;terminalLatestOutput=terminalTranscriptTail(terminalLatestOutput+outputChunk);terminalOutputVersion=Math.max(terminalOutputVersion,nextOutputVersion);terminalOutput.value=terminalLatestOutput;const outputEvent={chunk:outputChunk,output:terminalLatestOutput,outputVersion:terminalOutputVersion,source:`append`};notifyOutput(outputEvent);emitTerminalEvent(`output`,outputEvent);inspectTerminalMatchers(`append`);if(!terminalInstance)return true;terminalInstance.write(outputChunk,scrollTerminalToBottomIfFollowing);terminalOutputOffset=terminalLatestOutput.length;return true}function setTerminalOutput(output,options={}){return writeTerminalOutput(output,options)}function applyTerminalSession(session={},{fallbackStatus=``,preserveOutput=false,replaceOutput=false,resize=true}={}){const terminalSession=session&&typeof session===`object`&&!Array.isArray(session)?session:{};const nextTerminalSessionId=String(terminalSession.id||``);const terminalSessionChanged=Boolean(nextTerminalSessionId&&terminalSessionId.value&&nextTerminalSessionId!==terminalSessionId.value);if(terminalSessionChanged){closeTerminalSocket();resetTerminalDisplay()}if(!terminalSessionId.value||terminalSessionChanged)terminalReconnectBlocked=false;terminalSessionId.value=nextTerminalSessionId;const nextStatus=String(terminalSession.status||fallbackStatus||``);terminalExitCode.value=nextStatus===`exited`?terminalSession.exitCode??null:null;terminalStatus.value=nextStatus;terminalCommandPreview.value=String(terminalSession.commandPreview||``);terminalCloseError.value=String(terminalSession.closeError||``);terminalMetadata.value=terminalSession.metadata&&typeof terminalSession.metadata===`object`&&!Array.isArray(terminalSession.metadata)?terminalSession.metadata:{};if(!preserveOutput||Object.hasOwn(terminalSession,`output`))writeTerminalOutput(terminalSession.output||``,{outputVersion:terminalSession.outputVersion,replace:replaceOutput});if(resize)sendTerminalResize();notifySessionUpdate(terminalSession);notifyStatusUpdate({closeError:String(terminalSession.closeError||``),exitCode:terminalExitCode.value,id:terminalSessionId.value,status:terminalStatus.value})}function handleTerminalConnectionEvent(message,{generation,sessionId}={}){if(generation!==terminalConnectionGeneration||sessionId!==terminalConnectionSessionId)return;if(message?.type===`connected`){clearTerminalReconnect({resetAttempt:false});terminalReconnectBlocked=false;terminalConnectionStatus.value=`connected`;terminalError.value=``;emitTerminalEvent(`connected`);return}if(message?.type===`disconnected`){terminalConnectionStatus.value=`disconnected`;emitTerminalEvent(`disconnected`,{intentional:message.intentional===true});if(message.intentional!==true)recoverTerminalConnection(sessionId);return}if(message?.type===`snapshot`){terminalReconnectAttempt=0;applyTerminalSession(message.session||{},{replaceOutput:message.replaceOutput===true});emitTerminalEvent(`snapshot`,{status:terminalStatus.value});return}if(message?.type===`output`){appendTerminalOutput(message.chunk,{outputVersion:message.outputVersion});return}if(message?.type===`metadata`){terminalMetadata.value=message.metadata&&typeof message.metadata===`object`&&!Array.isArray(message.metadata)?message.metadata:{};notifySessionUpdate({id:terminalSessionId.value,metadata:terminalMetadata.value,status:terminalStatus.value});emitTerminalEvent(`metadata`,{metadata:terminalMetadata.value});return}if(message?.type===`status`){const nextStatus=String(message.status||terminalStatus.value||``);terminalExitCode.value=nextStatus===`exited`?message.exitCode??null:null;terminalCloseError.value=String(message.closeError||``);terminalStatus.value=nextStatus;notifyStatusUpdate({closeError:String(message.closeError||``),exitCode:terminalExitCode.value,id:terminalSessionId.value,status:terminalStatus.value});return}if(message?.type===`resize.error`)return;if(message?.type===`error`){const error=String(message.error||`Terminal stream failed.`);if(terminalResizeErrorMessage(error))return;emitTerminalEvent(`stream-error`,{code:String(message.code||``),error});terminalReconnectBlocked=true;clearTerminalReconnect();terminalError.value=error}}async function connectTerminalSocket(){if(!terminalSessionId.value)return false;if(terminalConnectionSessionId&&terminalConnectionSessionId!==terminalSessionId.value)closeTerminalSocket();if(terminalConnection?.isOpen?.()&&terminalConnectionSessionId===terminalSessionId.value)return true;if(terminalConnectionOpenPromise&&terminalConnectionOpenSessionId===terminalSessionId.value)return terminalConnectionOpenPromise;if(terminalConnectionOpenPromise)closeTerminalSocket();const connectionSessionId=terminalSessionId.value;const generation=terminalConnectionGeneration+1;terminalConnectionGeneration=generation;terminalConnectionSessionId=connectionSessionId;terminalConnectionOpenSessionId=connectionSessionId;terminalConnectionStatus.value=`connecting`;try{terminalConnection=terminalDriver.openConnection({onEvent(message){handleTerminalConnectionEvent(message,{generation,sessionId:connectionSessionId})},sessionId:connectionSessionId})}catch{terminalConnectionStatus.value=`disconnected`;scheduleTerminalReconnect(connectionSessionId);return false}const connection=terminalConnection;terminalConnectionOpenPromise=Promise.resolve(connection?.ready).then(ready=>{if(generation===terminalConnectionGeneration&&connectionSessionId===terminalConnectionSessionId){terminalConnectionStatus.value=ready?`connected`:`disconnected`;if(ready)terminalError.value=``;else scheduleTerminalReconnect(connectionSessionId)}return Boolean(ready)}).catch(()=>{if(generation===terminalConnectionGeneration){terminalConnectionStatus.value=`disconnected`;scheduleTerminalReconnect(connectionSessionId)}return false}).finally(()=>{if(generation===terminalConnectionGeneration){terminalConnectionOpenPromise=null;terminalConnectionOpenSessionId=``}});return terminalConnectionOpenPromise}async function sendTerminalData(data,{source=`program`}={}){if(!terminalSessionId.value||terminalStatus.value===`exited`)return false;const input=String(data||``);if(source===`user`)notifyUserData(input);emitTerminalEvent(`input`,{data:input,source});if(!await connectTerminalSocket()||!terminalConnection?.isOpen?.()){terminalError.value=`Terminal stream is not connected.`;return false}try{return Boolean(await terminalConnection.sendInput(input))}catch(error){terminalError.value=String(error?.message||error||`Terminal input failed.`);return false}}async function sendTerminalResize(){if(terminalResizeReportTimer){window.clearTimeout(terminalResizeReportTimer);terminalResizeReportTimer=null}if(!terminalSessionId.value||terminalStatus.value===`exited`)return false;if(!terminalLiveResize()&&terminalInitialResizeReported)return false;const size=terminalCurrentSize();if(!size||terminalSizeAlreadyReported(size))return false;if(!await connectTerminalSocket()||!terminalConnection?.isOpen?.())return false;terminalReportedCols=size.cols;terminalReportedRows=size.rows;if(!await terminalConnection.sendResize(size))return false;emitTerminalEvent(`resize`,size);if(!terminalLiveResize())terminalInitialResizeReported=true;return true}function scheduleTerminalResizeReport(){if(!terminalReportedCols||!terminalReportedRows){sendTerminalResize();return}const delay=terminalResizeReportDelay();if(!delay){sendTerminalResize();return}if(terminalResizeReportTimer)window.clearTimeout(terminalResizeReportTimer);terminalResizeReportTimer=window.setTimeout(()=>{terminalResizeReportTimer=null;sendTerminalResize()},delay)}function terminalKeyData(key){const normalizedKey=String(key||``).trim().toLowerCase();const keys={"ctrl-c":``,enter:`\r`,escape:`\x1B`,tab:` `};if(!Object.hasOwn(keys,normalizedKey))throw new TypeError(`Unsupported terminal key: ${String(key||``)}`);return keys[normalizedKey]}function sendTerminalKey(key,options={}){return sendTerminalData(terminalKeyData(key),{source:`control`,...options})}async function interruptTerminal(){const interrupted=await sendTerminalKey(`ctrl-c`);if(interrupted)emitTerminalEvent(`interrupt`);return interrupted}function sendCtrlC(){return interruptTerminal()}async function focusTerminal(){if(!await setupTerminalUi())return false;try{terminalInstance?.focus?.()}catch(error){terminalError.value=String(error?.message||error||`Terminal focus failed.`);return false}syncTerminalFocus();return true}watch(terminalSessionId,(nextSessionId,previousSessionId)=>{if(nextSessionId===previousSessionId)return;terminalExitNotifiedSessionId=``;terminalSettledNotifiedSessionId=``;terminalAttention.value=null;terminalMatcherEngine.reset(nextSessionId);terminalPolicyEngine.reset();emitTerminalEvent(`session-change`,{previousSessionId:String(previousSessionId||``)})},{flush:`sync`});watch(terminalStatus,(status,previousStatus)=>{if(status===previousStatus)return;inspectTerminalMatchers(`status`);emitTerminalEvent(`status`,{exitCode:terminalExitCode.value,previousStatus:String(previousStatus||``),status:String(status||``)});if(status===`exited`)clearTerminalReconnect();if(status===`exited`&&currentSessionId()&&terminalExitNotifiedSessionId!==currentSessionId()){terminalExitNotifiedSessionId=currentSessionId();resolveExitWaiters(currentSessionId());emitTerminalEvent(`exit`,{exitCode:terminalExitCode.value,status});if(terminalSettledNotifiedSessionId!==currentSessionId()){terminalSettledNotifiedSessionId=currentSessionId();emitTerminalEvent(`settled`,{error:``,exitCode:terminalExitCode.value,status})}}},{flush:`sync`});if(getCurrentScope())onScopeDispose(closeTerminalSocket);watch(terminalError,(error,previousError)=>{if(!error||error===previousError)return;terminalAttention.value={error:String(error),kind:`error`};inspectTerminalMatchers(`error`);resolveSettlementWaiters(currentSessionId());emitTerminalEvent(`error`,{error:String(error)});if(currentSessionId()&&terminalSettledNotifiedSessionId!==currentSessionId()){terminalSettledNotifiedSessionId=currentSessionId();emitTerminalEvent(`settled`,{error:String(error),exitCode:terminalExitCode.value,status:terminalStatus.value})}},{flush:`sync`});return{attachTerminal,applyTerminalSession,closeTerminalSocket,closeTerminal,connectTerminalSocket,detachTerminal,disposeTerminalDisplay,disposeTerminalUi,collapseTerminal,expandTerminal,focusTerminal,hideTerminal,interruptTerminal,minimizeTerminal,resetTerminalDisplay,resetTerminalSessionState,restartTerminal,sendCtrlC,sendTerminalData,sendTerminalKey,setTerminalHost,setTerminalOutput,showTerminal,setupTerminalUi,startTerminal,terminalCommandPreview,terminalCloseError,terminalConnectionStatus,terminalAttention,terminalError,terminalExpanded,terminalExited,terminalExitCode,terminalFocused,terminalHost,terminalMetadata,terminalOwnership,terminalOutput,terminalPlainOutput,terminalPresentation,terminalSelectedText,terminalSessionId,terminalStarting,terminalStatus,terminalSummaryLine,terminalVisible,terminalSnapshot,waitForExit,waitForSettlement}}export{Vibe64Terminal_default as a,createAsyncModuleRecoveryState as c,installAsyncModuleRecoveryHandlers as d,isDynamicImportError as f,useShellAsyncModuleRecoveryRuntime as i,dynamicImportErrorMessage as l,createWebSocketTerminalDriver as n,Vibe64TerminalSurface_default as o,notifyAsyncModuleLoadError as p,SHELL_ASYNC_MODULE_RECOVERY_RUNTIME_KEY as r,terminalLastMeaningfulLine as s,useVibe64Terminal as t,guardedReloadApp as u};